Lines Matching refs:addr
45 int qeth_l3_ipaddr_to_string(enum qeth_prot_versions proto, const u8 *addr, in qeth_l3_ipaddr_to_string() argument
49 return sprintf(buf, "%pI4", addr); in qeth_l3_ipaddr_to_string()
51 return sprintf(buf, "%pI6", addr); in qeth_l3_ipaddr_to_string()
58 struct qeth_ipaddr *addr; in qeth_l3_find_addr_by_ip() local
61 hash_for_each_possible(card->rx_mode_addrs, addr, hnode, key) in qeth_l3_find_addr_by_ip()
62 if (qeth_l3_addr_match_ip(addr, query)) in qeth_l3_find_addr_by_ip()
63 return addr; in qeth_l3_find_addr_by_ip()
65 hash_for_each_possible(card->ip_htable, addr, hnode, key) in qeth_l3_find_addr_by_ip()
66 if (qeth_l3_addr_match_ip(addr, query)) in qeth_l3_find_addr_by_ip()
67 return addr; in qeth_l3_find_addr_by_ip()
72 static void qeth_l3_convert_addr_to_bits(u8 *addr, u8 *bits, int len) in qeth_l3_convert_addr_to_bits() argument
78 octet = addr[i]; in qeth_l3_convert_addr_to_bits()
87 struct qeth_ipaddr *addr) in qeth_l3_is_addr_covered_by_ipato() argument
96 if (addr->type != QETH_IP_TYPE_NORMAL) in qeth_l3_is_addr_covered_by_ipato()
99 qeth_l3_convert_addr_to_bits((u8 *) &addr->u, addr_bits, in qeth_l3_is_addr_covered_by_ipato()
100 (addr->proto == QETH_PROT_IPV4) ? 4 : 16); in qeth_l3_is_addr_covered_by_ipato()
102 if (addr->proto != ipatoe->proto) in qeth_l3_is_addr_covered_by_ipato()
104 qeth_l3_convert_addr_to_bits(ipatoe->addr, ipatoe_bits, in qeth_l3_is_addr_covered_by_ipato()
112 if ((addr->proto == QETH_PROT_IPV4) && card->ipato.invert4) in qeth_l3_is_addr_covered_by_ipato()
114 else if ((addr->proto == QETH_PROT_IPV6) && card->ipato.invert6) in qeth_l3_is_addr_covered_by_ipato()
124 struct qeth_ipaddr *addr; in qeth_l3_delete_ip() local
134 QETH_CARD_HEX(card, 4, &tmp_addr->u.a4.addr, 4); in qeth_l3_delete_ip()
136 QETH_CARD_HEX(card, 4, &tmp_addr->u.a6.addr, 8); in qeth_l3_delete_ip()
137 QETH_CARD_HEX(card, 4, ((char *)&tmp_addr->u.a6.addr) + 8, 8); in qeth_l3_delete_ip()
140 addr = qeth_l3_find_addr_by_ip(card, tmp_addr); in qeth_l3_delete_ip()
141 if (!addr || !qeth_l3_addr_match_all(addr, tmp_addr)) in qeth_l3_delete_ip()
144 addr->ref_counter--; in qeth_l3_delete_ip()
145 if (addr->type == QETH_IP_TYPE_NORMAL && addr->ref_counter > 0) in qeth_l3_delete_ip()
149 rc = qeth_l3_deregister_addr_entry(card, addr); in qeth_l3_delete_ip()
151 hash_del(&addr->hnode); in qeth_l3_delete_ip()
152 kfree(addr); in qeth_l3_delete_ip()
160 struct qeth_ipaddr *addr; in qeth_l3_add_ip() local
171 QETH_CARD_HEX(card, 4, &tmp_addr->u.a4.addr, 4); in qeth_l3_add_ip()
173 QETH_CARD_HEX(card, 4, &tmp_addr->u.a6.addr, 8); in qeth_l3_add_ip()
174 QETH_CARD_HEX(card, 4, ((char *)&tmp_addr->u.a6.addr) + 8, 8); in qeth_l3_add_ip()
177 addr = qeth_l3_find_addr_by_ip(card, tmp_addr); in qeth_l3_add_ip()
178 if (addr) { in qeth_l3_add_ip()
181 if (qeth_l3_addr_match_all(addr, tmp_addr)) { in qeth_l3_add_ip()
182 addr->ref_counter++; in qeth_l3_add_ip()
191 addr = kmemdup(tmp_addr, sizeof(*tmp_addr), GFP_KERNEL); in qeth_l3_add_ip()
192 if (!addr) in qeth_l3_add_ip()
195 if (qeth_l3_is_addr_covered_by_ipato(card, addr)) { in qeth_l3_add_ip()
197 addr->ipato = 1; in qeth_l3_add_ip()
199 hash_add(card->ip_htable, &addr->hnode, in qeth_l3_add_ip()
200 qeth_l3_ipaddr_hash(addr)); in qeth_l3_add_ip()
203 addr->disp_flag = QETH_DISP_ADDR_ADD; in qeth_l3_add_ip()
207 rc = qeth_l3_register_addr_entry(card, addr); in qeth_l3_add_ip()
210 addr->disp_flag = QETH_DISP_ADDR_DO_NOTHING; in qeth_l3_add_ip()
212 hash_del(&addr->hnode); in qeth_l3_add_ip()
213 kfree(addr); in qeth_l3_add_ip()
219 static int qeth_l3_modify_ip(struct qeth_card *card, struct qeth_ipaddr *addr, in qeth_l3_modify_ip() argument
225 rc = add ? qeth_l3_add_ip(card, addr) : qeth_l3_delete_ip(card, addr); in qeth_l3_modify_ip()
233 struct qeth_ipaddr *addr; in qeth_l3_drain_rx_mode_cache() local
237 hash_for_each_safe(card->rx_mode_addrs, i, tmp, addr, hnode) { in qeth_l3_drain_rx_mode_cache()
238 hash_del(&addr->hnode); in qeth_l3_drain_rx_mode_cache()
239 kfree(addr); in qeth_l3_drain_rx_mode_cache()
245 struct qeth_ipaddr *addr; in qeth_l3_clear_ip_htable() local
253 hash_for_each_safe(card->ip_htable, i, tmp, addr, hnode) { in qeth_l3_clear_ip_htable()
255 hash_del(&addr->hnode); in qeth_l3_clear_ip_htable()
256 kfree(addr); in qeth_l3_clear_ip_htable()
259 addr->disp_flag = QETH_DISP_ADDR_ADD; in qeth_l3_clear_ip_htable()
268 struct qeth_ipaddr *addr; in qeth_l3_recover_ip() local
277 hash_for_each_safe(card->ip_htable, i, tmp, addr, hnode) { in qeth_l3_recover_ip()
278 if (addr->disp_flag == QETH_DISP_ADDR_ADD) { in qeth_l3_recover_ip()
279 rc = qeth_l3_register_addr_entry(card, addr); in qeth_l3_recover_ip()
283 addr->disp_flag = QETH_DISP_ADDR_DO_NOTHING; in qeth_l3_recover_ip()
286 hash_del(&addr->hnode); in qeth_l3_recover_ip()
287 kfree(addr); in qeth_l3_recover_ip()
315 struct qeth_ipaddr *addr, in qeth_l3_send_setdelmc() argument
323 iob = qeth_ipa_alloc_cmd(card, ipacmd, addr->proto, in qeth_l3_send_setdelmc()
328 if (addr->proto == QETH_PROT_IPV6) { in qeth_l3_send_setdelmc()
329 cmd->data.setdelipm.ip = addr->u.a6.addr; in qeth_l3_send_setdelmc()
330 ipv6_eth_mc_map(&addr->u.a6.addr, cmd->data.setdelipm.mac); in qeth_l3_send_setdelmc()
332 cmd->data.setdelipm.ip.s6_addr32[3] = addr->u.a4.addr; in qeth_l3_send_setdelmc()
333 ip_eth_mc_map(addr->u.a4.addr, cmd->data.setdelipm.mac); in qeth_l3_send_setdelmc()
352 static u32 qeth_l3_get_setdelip_flags(struct qeth_ipaddr *addr, bool set) in qeth_l3_get_setdelip_flags() argument
354 switch (addr->type) { in qeth_l3_get_setdelip_flags()
361 return (set && addr->ipato) ? QETH_IPA_SETIP_TAKEOVER_FLAG : 0; in qeth_l3_get_setdelip_flags()
366 struct qeth_ipaddr *addr, in qeth_l3_send_setdelip() argument
375 iob = qeth_ipa_alloc_cmd(card, ipacmd, addr->proto, in qeth_l3_send_setdelip()
381 flags = qeth_l3_get_setdelip_flags(addr, ipacmd == IPA_CMD_SETIP); in qeth_l3_send_setdelip()
384 if (addr->proto == QETH_PROT_IPV6) { in qeth_l3_send_setdelip()
385 cmd->data.setdelip6.addr = addr->u.a6.addr; in qeth_l3_send_setdelip()
387 addr->u.a6.pfxlen); in qeth_l3_send_setdelip()
390 cmd->data.setdelip4.addr = addr->u.a4.addr; in qeth_l3_send_setdelip()
391 cmd->data.setdelip4.mask = addr->u.a4.mask; in qeth_l3_send_setdelip()
505 struct qeth_ipaddr *addr; in qeth_l3_update_ipato() local
508 hash_for_each(card->ip_htable, i, addr, hnode) { in qeth_l3_update_ipato()
509 if (addr->type != QETH_IP_TYPE_NORMAL) in qeth_l3_update_ipato()
511 addr->ipato = qeth_l3_is_addr_covered_by_ipato(card, addr); in qeth_l3_update_ipato()
543 if (!memcmp(ipatoe->addr, new->addr, in qeth_l3_add_ipato_entry()
562 enum qeth_prot_versions proto, u8 *addr, in qeth_l3_del_ipato_entry() argument
575 if (!memcmp(ipatoe->addr, addr, in qeth_l3_del_ipato_entry()
594 struct qeth_ipaddr addr; in qeth_l3_modify_rxip_vipa() local
596 qeth_l3_init_ipaddr(&addr, type, proto); in qeth_l3_modify_rxip_vipa()
598 memcpy(&addr.u.a4.addr, ip, 4); in qeth_l3_modify_rxip_vipa()
600 memcpy(&addr.u.a6.addr, ip, 16); in qeth_l3_modify_rxip_vipa()
602 return qeth_l3_modify_ip(card, &addr, add); in qeth_l3_modify_rxip_vipa()
607 struct qeth_ipaddr addr; in qeth_l3_modify_hsuid() local
610 qeth_l3_init_ipaddr(&addr, QETH_IP_TYPE_NORMAL, QETH_PROT_IPV6); in qeth_l3_modify_hsuid()
611 addr.u.a6.addr.s6_addr[0] = 0xfe; in qeth_l3_modify_hsuid()
612 addr.u.a6.addr.s6_addr[1] = 0x80; in qeth_l3_modify_hsuid()
614 addr.u.a6.addr.s6_addr[8+i] = card->options.hsuid[i]; in qeth_l3_modify_hsuid()
616 return qeth_l3_modify_ip(card, &addr, add); in qeth_l3_modify_hsuid()
620 struct qeth_ipaddr *addr) in qeth_l3_register_addr_entry() argument
629 if (addr->proto == QETH_PROT_IPV4) { in qeth_l3_register_addr_entry()
631 QETH_CARD_HEX(card, 3, &addr->u.a4.addr, sizeof(int)); in qeth_l3_register_addr_entry()
632 } else if (addr->proto == QETH_PROT_IPV6) { in qeth_l3_register_addr_entry()
634 QETH_CARD_HEX(card, 3, &addr->u.a6.addr, 8); in qeth_l3_register_addr_entry()
635 QETH_CARD_HEX(card, 3, ((char *)&addr->u.a6.addr) + 8, 8); in qeth_l3_register_addr_entry()
638 QETH_CARD_HEX(card, 3, addr, sizeof(struct qeth_ipaddr)); in qeth_l3_register_addr_entry()
641 if (addr->is_multicast) in qeth_l3_register_addr_entry()
642 rc = qeth_l3_send_setdelmc(card, addr, IPA_CMD_SETIPM); in qeth_l3_register_addr_entry()
644 rc = qeth_l3_send_setdelip(card, addr, IPA_CMD_SETIP); in qeth_l3_register_addr_entry()
650 qeth_l3_ipaddr_to_string(addr->proto, (u8 *)&addr->u, buf); in qeth_l3_register_addr_entry()
658 struct qeth_ipaddr *addr) in qeth_l3_deregister_addr_entry() argument
665 if (addr->proto == QETH_PROT_IPV4) { in qeth_l3_deregister_addr_entry()
667 QETH_CARD_HEX(card, 3, &addr->u.a4.addr, sizeof(int)); in qeth_l3_deregister_addr_entry()
668 } else if (addr->proto == QETH_PROT_IPV6) { in qeth_l3_deregister_addr_entry()
670 QETH_CARD_HEX(card, 3, &addr->u.a6.addr, 8); in qeth_l3_deregister_addr_entry()
671 QETH_CARD_HEX(card, 3, ((char *)&addr->u.a6.addr) + 8, 8); in qeth_l3_deregister_addr_entry()
674 QETH_CARD_HEX(card, 3, addr, sizeof(struct qeth_ipaddr)); in qeth_l3_deregister_addr_entry()
676 if (addr->is_multicast) in qeth_l3_deregister_addr_entry()
677 rc = qeth_l3_send_setdelmc(card, addr, IPA_CMD_DELIPM); in qeth_l3_deregister_addr_entry()
679 rc = qeth_l3_send_setdelip(card, addr, IPA_CMD_DELIP); in qeth_l3_deregister_addr_entry()
1076 tmp.u.a4.addr = im4->multiaddr; in qeth_l3_add_mcast_rtnl()
1108 tmp.u.a6.addr = im6->mca_addr; in qeth_l3_add_mcast_rtnl()
1156 struct qeth_ipaddr *addr; in qeth_l3_rx_mode_work() local
1169 hash_for_each_safe(card->rx_mode_addrs, i, tmp, addr, hnode) { in qeth_l3_rx_mode_work()
1170 switch (addr->disp_flag) { in qeth_l3_rx_mode_work()
1172 rc = qeth_l3_deregister_addr_entry(card, addr); in qeth_l3_rx_mode_work()
1174 hash_del(&addr->hnode); in qeth_l3_rx_mode_work()
1175 kfree(addr); in qeth_l3_rx_mode_work()
1179 rc = qeth_l3_register_addr_entry(card, addr); in qeth_l3_rx_mode_work()
1181 hash_del(&addr->hnode); in qeth_l3_rx_mode_work()
1182 kfree(addr); in qeth_l3_rx_mode_work()
1188 addr->disp_flag = QETH_DISP_ADDR_DELETE; in qeth_l3_rx_mode_work()
1672 l3_hdr->next_hop.addr.s6_addr32[3] = in qeth_l3_fill_header()
1676 l3_hdr->next_hop.addr = *qeth_next_hop_v6_rcu(skb, dst); in qeth_l3_fill_header()
1683 l3_hdr->next_hop.addr.s6_addr16[0] = htons(0xfe80); in qeth_l3_fill_header()
1684 memcpy(&l3_hdr->next_hop.addr.s6_addr32[2], in qeth_l3_fill_header()
2086 struct qeth_ipaddr *addr, in qeth_l3_handle_ip_event() argument
2091 qeth_l3_modify_ip(card, addr, true); in qeth_l3_handle_ip_event()
2094 qeth_l3_modify_ip(card, addr, false); in qeth_l3_handle_ip_event()
2104 struct qeth_ipaddr addr; member
2113 qeth_l3_modify_ip(ip_work->card, &ip_work->addr, true); in qeth_l3_add_ip_worker()
2121 qeth_l3_modify_ip(ip_work->card, &ip_work->addr, false); in qeth_l3_delete_ip_worker()
2140 struct qeth_ipaddr addr; in qeth_l3_ip_event() local
2148 qeth_l3_init_ipaddr(&addr, QETH_IP_TYPE_NORMAL, QETH_PROT_IPV4); in qeth_l3_ip_event()
2149 addr.u.a4.addr = ifa->ifa_address; in qeth_l3_ip_event()
2150 addr.u.a4.mask = ifa->ifa_mask; in qeth_l3_ip_event()
2152 return qeth_l3_handle_ip_event(card, &addr, event); in qeth_l3_ip_event()
2188 qeth_l3_init_ipaddr(&ip_work->addr, QETH_IP_TYPE_NORMAL, in qeth_l3_ip6_event()
2190 ip_work->addr.u.a6.addr = ifa->addr; in qeth_l3_ip6_event()
2191 ip_work->addr.u.a6.pfxlen = ifa->prefix_len; in qeth_l3_ip6_event()