Lines Matching +full:sha +full:- +full:1
1 // SPDX-License-Identifier: GPL-2.0-or-later
32 list_for_each_entry(p, &br->port_list, list) { in br_recalculate_neigh_suppress_enabled()
33 if (p->flags & (BR_NEIGH_SUPPRESS | BR_NEIGH_VLAN_SUPPRESS)) { in br_recalculate_neigh_suppress_enabled()
55 dev->name, &dest_ip, dest_hw, &src_ip, src_hw); in br_arp_send()
84 skb->ip_summed = CHECKSUM_UNNECESSARY; in br_arp_send()
85 skb->pkt_type = PACKET_HOST; in br_arp_send()
94 __be32 ip = *(__be32 *)priv->data; in br_chk_addr_ip()
104 return 1; in br_chk_addr_ip()
128 struct net_device *dev = br->dev; in br_do_proxy_suppress_arp()
132 u8 *arpptr, *sha; in br_do_proxy_suppress_arp() local
135 BR_INPUT_SKB_CB(skb)->proxyarp_replied = 0; in br_do_proxy_suppress_arp()
137 if ((dev->flags & IFF_NOARP) || in br_do_proxy_suppress_arp()
143 if (parp->ar_pro != htons(ETH_P_IP) || in br_do_proxy_suppress_arp()
144 parp->ar_hln != dev->addr_len || in br_do_proxy_suppress_arp()
145 parp->ar_pln != 4) in br_do_proxy_suppress_arp()
149 sha = arpptr; in br_do_proxy_suppress_arp()
150 arpptr += dev->addr_len; /* sha */ in br_do_proxy_suppress_arp()
153 arpptr += dev->addr_len; /* tha */ in br_do_proxy_suppress_arp()
163 if (parp->ar_op != htons(ARPOP_RREQUEST) && in br_do_proxy_suppress_arp()
164 parp->ar_op != htons(ARPOP_RREPLY) && in br_do_proxy_suppress_arp()
167 BR_INPUT_SKB_CB(skb)->proxyarp_replied = 1; in br_do_proxy_suppress_arp()
172 if (parp->ar_op != htons(ARPOP_REQUEST)) in br_do_proxy_suppress_arp()
176 vlandev = __vlan_find_dev_deep_rcu(br->dev, skb->vlan_proto, in br_do_proxy_suppress_arp()
187 BR_INPUT_SKB_CB(skb)->proxyarp_replied = 1; in br_do_proxy_suppress_arp()
195 if (!(READ_ONCE(n->nud_state) & NUD_VALID)) { in br_do_proxy_suppress_arp()
200 f = br_fdb_find_rcu(br, n->ha, vid); in br_do_proxy_suppress_arp()
204 if ((p && (p->flags & BR_PROXYARP)) || in br_do_proxy_suppress_arp()
205 (f->dst && (f->dst->flags & BR_PROXYARP_WIFI)) || in br_do_proxy_suppress_arp()
206 br_is_neigh_suppress_enabled(f->dst, vid)) { in br_do_proxy_suppress_arp()
208 br_arp_send(br, p, skb->dev, sip, tip, in br_do_proxy_suppress_arp()
209 sha, n->ha, sha, 0, 0); in br_do_proxy_suppress_arp()
211 br_arp_send(br, p, skb->dev, sip, tip, in br_do_proxy_suppress_arp()
212 sha, n->ha, sha, in br_do_proxy_suppress_arp()
213 skb->vlan_proto, in br_do_proxy_suppress_arp()
223 BR_INPUT_SKB_CB(skb)->proxyarp_replied = 1; in br_do_proxy_suppress_arp()
241 if (m->icmph.icmp6_code != 0 || in br_is_nd_neigh_msg()
242 (m->icmph.icmp6_type != NDISC_NEIGHBOUR_SOLICITATION && in br_is_nd_neigh_msg()
243 m->icmph.icmp6_type != NDISC_NEIGHBOUR_ADVERTISEMENT)) in br_is_nd_neigh_msg()
253 struct net_device *dev = request->dev; in br_nd_send()
268 sizeof(*na) + na_olen + dev->needed_tailroom; in br_nd_send()
274 reply->protocol = htons(ETH_P_IPV6); in br_nd_send()
275 reply->dev = dev; in br_nd_send()
280 daddr = eth_hdr(request)->h_source; in br_nd_send()
283 ns_olen = request->len - (skb_network_offset(request) + in br_nd_send()
284 sizeof(struct ipv6hdr)) - sizeof(*ns); in br_nd_send()
285 for (i = 0; i < ns_olen - 1; i += (ns->opt[i + 1] << 3)) { in br_nd_send()
286 if (!ns->opt[i + 1]) { in br_nd_send()
290 if (ns->opt[i] == ND_OPT_SOURCE_LL_ADDR) { in br_nd_send()
291 daddr = ns->opt + i + sizeof(struct nd_opt_hdr); in br_nd_send()
297 ether_addr_copy(eth_hdr(reply)->h_dest, daddr); in br_nd_send()
298 ether_addr_copy(eth_hdr(reply)->h_source, n->ha); in br_nd_send()
299 eth_hdr(reply)->h_proto = htons(ETH_P_IPV6); in br_nd_send()
300 reply->protocol = htons(ETH_P_IPV6); in br_nd_send()
309 pip6->version = 6; in br_nd_send()
310 pip6->priority = ipv6_hdr(request)->priority; in br_nd_send()
311 pip6->nexthdr = IPPROTO_ICMPV6; in br_nd_send()
312 pip6->hop_limit = 255; in br_nd_send()
313 pip6->daddr = ipv6_hdr(request)->saddr; in br_nd_send()
314 pip6->saddr = *(struct in6_addr *)n->primary_key; in br_nd_send()
323 na->icmph.icmp6_type = NDISC_NEIGHBOUR_ADVERTISEMENT; in br_nd_send()
324 na->icmph.icmp6_router = (n->flags & NTF_ROUTER) ? 1 : 0; in br_nd_send()
325 na->icmph.icmp6_override = 1; in br_nd_send()
326 na->icmph.icmp6_solicited = 1; in br_nd_send()
327 na->target = ns->target; in br_nd_send()
328 ether_addr_copy(&na->opt[2], n->ha); in br_nd_send()
329 na->opt[0] = ND_OPT_TARGET_LL_ADDR; in br_nd_send()
330 na->opt[1] = na_olen >> 3; in br_nd_send()
332 na->icmph.icmp6_cksum = csum_ipv6_magic(&pip6->saddr, in br_nd_send()
333 &pip6->daddr, in br_nd_send()
338 pip6->payload_len = htons(sizeof(*na) + na_olen); in br_nd_send()
343 reply->ip_summed = CHECKSUM_UNNECESSARY; in br_nd_send()
357 dev->name, &pip6->daddr, daddr, &pip6->saddr, n->ha); in br_nd_send()
364 reply->ip_summed = CHECKSUM_UNNECESSARY; in br_nd_send()
365 reply->pkt_type = PACKET_HOST; in br_nd_send()
374 struct in6_addr *addr = (struct in6_addr *)priv->data; in br_chk_addr_ip6()
377 return 1; in br_chk_addr_ip6()
402 struct net_device *dev = br->dev; in br_do_suppress_nd()
408 BR_INPUT_SKB_CB(skb)->proxyarp_replied = 0; in br_do_suppress_nd()
413 if (msg->icmph.icmp6_type == NDISC_NEIGHBOUR_ADVERTISEMENT && in br_do_suppress_nd()
414 !msg->icmph.icmp6_solicited) { in br_do_suppress_nd()
416 BR_INPUT_SKB_CB(skb)->proxyarp_replied = 1; in br_do_suppress_nd()
420 if (msg->icmph.icmp6_type != NDISC_NEIGHBOUR_SOLICITATION) in br_do_suppress_nd()
424 saddr = &iphdr->saddr; in br_do_suppress_nd()
425 daddr = &iphdr->daddr; in br_do_suppress_nd()
429 BR_INPUT_SKB_CB(skb)->proxyarp_replied = 1; in br_do_suppress_nd()
435 vlandev = __vlan_find_dev_deep_rcu(br->dev, skb->vlan_proto, in br_do_suppress_nd()
443 if (br_is_local_ip6(vlandev, &msg->target)) { in br_do_suppress_nd()
447 BR_INPUT_SKB_CB(skb)->proxyarp_replied = 1; in br_do_suppress_nd()
451 n = neigh_lookup(ipv6_stub->nd_tbl, &msg->target, vlandev); in br_do_suppress_nd()
455 if (!(READ_ONCE(n->nud_state) & NUD_VALID)) { in br_do_suppress_nd()
460 f = br_fdb_find_rcu(br, n->ha, vid); in br_do_suppress_nd()
464 if (br_is_neigh_suppress_enabled(f->dst, vid)) { in br_do_suppress_nd()
467 skb->vlan_proto, in br_do_suppress_nd()
480 BR_INPUT_SKB_CB(skb)->proxyarp_replied = 1; in br_do_suppress_nd()
493 return !!(p->flags & BR_NEIGH_SUPPRESS); in br_is_neigh_suppress_enabled()
495 if (p->flags & BR_NEIGH_VLAN_SUPPRESS) { in br_is_neigh_suppress_enabled()
502 return !!(v->priv_flags & BR_VLFLAG_NEIGH_SUPPRESS_ENABLED); in br_is_neigh_suppress_enabled()
504 return !!(p->flags & BR_NEIGH_SUPPRESS); in br_is_neigh_suppress_enabled()