Lines Matching refs:dev
122 static u32 arp_hash(const void *pkey, const struct net_device *dev, __u32 *hash_rnd);
187 int arp_mc_map(__be32 addr, u8 *haddr, struct net_device *dev, int dir) in arp_mc_map() argument
189 switch (dev->type) { in arp_mc_map()
196 ip_ib_mc_map(addr, dev->broadcast, haddr); in arp_mc_map()
199 ip_ipgre_mc_map(addr, dev->broadcast, haddr); in arp_mc_map()
203 memcpy(haddr, dev->broadcast, dev->addr_len); in arp_mc_map()
212 const struct net_device *dev, in arp_hash() argument
215 return arp_hashfn(pkey, dev, hash_rnd); in arp_hash()
226 struct net_device *dev = neigh->dev; in arp_constructor() local
231 if (dev->flags & (IFF_LOOPBACK | IFF_POINTOPOINT)) in arp_constructor()
236 in_dev = __in_dev_get_rcu(dev); in arp_constructor()
242 neigh->type = inet_addr_type_dev_table(dev_net(dev), dev, addr); in arp_constructor()
249 if (!dev->header_ops) { in arp_constructor()
271 arp_mc_map(addr, neigh->ha, dev, 1); in arp_constructor()
272 } else if (dev->flags & (IFF_NOARP | IFF_LOOPBACK)) { in arp_constructor()
274 memcpy(neigh->ha, dev->dev_addr, dev->addr_len); in arp_constructor()
276 (dev->flags & IFF_POINTOPOINT)) { in arp_constructor()
278 memcpy(neigh->ha, dev->broadcast, dev->addr_len); in arp_constructor()
281 if (dev->header_ops->cache) in arp_constructor()
302 struct net_device *dev, __be32 src_ip, in arp_send_dst() argument
311 if (dev->flags & IFF_NOARP) in arp_send_dst()
314 skb = arp_create(type, ptype, dest_ip, dev, src_ip, in arp_send_dst()
324 struct net_device *dev, __be32 src_ip, in arp_send() argument
328 arp_send_dst(type, ptype, dest_ip, dev, src_ip, dest_hw, src_hw, in arp_send()
337 struct net_device *dev = neigh->dev; in arp_solicit() local
344 in_dev = __in_dev_get_rcu(dev); in arp_solicit()
352 if (skb && inet_addr_type_dev_table(dev_net(dev), dev, in arp_solicit()
360 if (inet_addr_type_dev_table(dev_net(dev), dev, in arp_solicit()
374 saddr = inet_select_addr(dev, target, RT_SCOPE_LINK); in arp_solicit()
380 neigh_ha_snapshot(dst_ha, neigh, dev); in arp_solicit()
390 if (skb && !(dev->priv_flags & IFF_XMIT_DST_RELEASE)) in arp_solicit()
392 arp_send_dst(ARPOP_REQUEST, ETH_P_ARP, target, dev, saddr, in arp_solicit()
393 dst_hw, dev->dev_addr, NULL, dst); in arp_solicit()
398 struct net *net = dev_net(in_dev->dev); in arp_ignore()
434 struct net *net = dev_net(in_dev->dev); in arp_accept()
452 static int arp_filter(__be32 sip, __be32 tip, struct net_device *dev) in arp_filter() argument
457 struct net *net = dev_net(dev); in arp_filter()
459 rt = ip_route_output(net, sip, tip, 0, l3mdev_master_ifindex_rcu(dev), in arp_filter()
463 if (rt->dst.dev != dev) { in arp_filter()
475 struct net_device *dev, struct rtable *rt) in arp_fwd_proxy() argument
480 if (rt->dst.dev == dev) in arp_fwd_proxy()
493 out_dev = __in_dev_get_rcu(rt->dst.dev); in arp_fwd_proxy()
520 struct net_device *dev, struct rtable *rt, in arp_fwd_pvlan() argument
524 if (rt->dst.dev != dev) in arp_fwd_pvlan()
546 struct net_device *dev, __be32 src_ip, in arp_create() argument
554 int hlen = LL_RESERVED_SPACE(dev); in arp_create()
555 int tlen = dev->needed_tailroom; in arp_create()
561 skb = alloc_skb(arp_hdr_len(dev) + hlen + tlen, GFP_ATOMIC); in arp_create()
567 arp = skb_put(skb, arp_hdr_len(dev)); in arp_create()
568 skb->dev = dev; in arp_create()
571 src_hw = dev->dev_addr; in arp_create()
573 dest_hw = dev->broadcast; in arp_create()
578 if (dev_hard_header(skb, dev, ptype, dest_hw, src_hw, skb->len) < 0) in arp_create()
591 switch (dev->type) { in arp_create()
593 arp->ar_hrd = htons(dev->type); in arp_create()
619 arp->ar_hln = dev->addr_len; in arp_create()
625 memcpy(arp_ptr, src_hw, dev->addr_len); in arp_create()
626 arp_ptr += dev->addr_len; in arp_create()
630 switch (dev->type) { in arp_create()
637 memcpy(arp_ptr, target_hw, dev->addr_len); in arp_create()
639 memset(arp_ptr, 0, dev->addr_len); in arp_create()
640 arp_ptr += dev->addr_len; in arp_create()
665 dev_net_rcu(skb->dev), NULL, skb, NULL, skb->dev, in arp_xmit()
671 static bool arp_is_garp(struct net *net, struct net_device *dev, in arp_is_garp() argument
687 !memcmp(tha, sha, dev->addr_len); in arp_is_garp()
690 *addr_type = inet_addr_type_dev_table(net, dev, sip); in arp_is_garp()
703 struct net_device *dev = skb->dev; in arp_process() local
704 struct in_device *in_dev = __in_dev_get_rcu(dev); in arp_process()
711 u16 dev_type = dev->type; in arp_process()
772 arp_ptr += dev->addr_len; in arp_process()
782 arp_ptr += dev->addr_len; in arp_process()
805 sha = dev->broadcast; in arp_process()
832 inet_addr_type_dev_table(net, dev, tip) == RTN_LOCAL && in arp_process()
834 arp_send_dst(ARPOP_REPLY, ETH_P_ARP, sip, dev, tip, in arp_process()
835 sha, dev->dev_addr, sha, reply_dst); in arp_process()
840 ip_route_input_noref(skb, tip, sip, 0, dev) == 0) { in arp_process()
850 dont_send = arp_filter(sip, tip, dev); in arp_process()
852 n = neigh_event_ns(&arp_tbl, sha, &sip, dev); in arp_process()
855 sip, dev, tip, sha, in arp_process()
856 dev->dev_addr, sha, in arp_process()
864 (arp_fwd_proxy(in_dev, dev, rt) || in arp_process()
865 arp_fwd_pvlan(in_dev, dev, rt, sip, tip) || in arp_process()
866 (rt->dst.dev != dev && in arp_process()
867 pneigh_lookup(&arp_tbl, net, &tip, dev)))) { in arp_process()
868 n = neigh_event_ns(&arp_tbl, sha, &sip, dev); in arp_process()
876 sip, dev, tip, sha, in arp_process()
877 dev->dev_addr, sha, in arp_process()
891 n = __neigh_lookup(&arp_tbl, &sip, dev, 0); in arp_process()
895 is_garp = arp_is_garp(net, dev, &addr_type, arp->ar_op, in arp_process()
910 inet_addr_type_dev_table(net, dev, sip) == in arp_process()
912 n = __neigh_lookup(&arp_tbl, &sip, dev, 1); in arp_process()
954 arp_process(dev_net(skb->dev), NULL, skb); in parp_redo()
966 static int arp_rcv(struct sk_buff *skb, struct net_device *dev, in arp_rcv() argument
973 if (dev->flags & IFF_NOARP || in arp_rcv()
983 drop_reason = pskb_may_pull_reason(skb, arp_hdr_len(dev)); in arp_rcv()
988 if (arp->ar_hln != dev->addr_len || arp->ar_pln != 4) { in arp_rcv()
996 dev_net(dev), NULL, skb, dev, NULL, in arp_rcv()
1015 struct net_device *dev; in arp_req_dev_by_name() local
1018 dev = dev_get_by_name_rcu(net, r->arp_dev); in arp_req_dev_by_name()
1020 dev = __dev_get_by_name(net, r->arp_dev); in arp_req_dev_by_name()
1021 if (!dev) in arp_req_dev_by_name()
1026 r->arp_ha.sa_family = dev->type; in arp_req_dev_by_name()
1028 if ((r->arp_flags & ATF_COM) && r->arp_ha.sa_family != dev->type) in arp_req_dev_by_name()
1031 return dev; in arp_req_dev_by_name()
1036 struct net_device *dev; in arp_req_dev() local
1052 dev = rt->dst.dev; in arp_req_dev()
1055 if (!dev) in arp_req_dev()
1058 return dev; in arp_req_dev()
1065 static int arp_req_set_proxy(struct net *net, struct net_device *dev, int on) in arp_req_set_proxy() argument
1067 if (!dev) { in arp_req_set_proxy()
1071 if (__in_dev_get_rtnl_net(dev)) { in arp_req_set_proxy()
1072 IN_DEV_CONF_SET(__in_dev_get_rtnl_net(dev), PROXY_ARP, on); in arp_req_set_proxy()
1079 struct net_device *dev) in arp_req_set_public() argument
1083 if (!dev && (r->arp_flags & ATF_COM)) { in arp_req_set_public()
1084 dev = dev_getbyhwaddr(net, r->arp_ha.sa_family, in arp_req_set_public()
1086 if (!dev) in arp_req_set_public()
1092 return pneigh_create(&arp_tbl, net, &ip, dev, 0, 0, false); in arp_req_set_public()
1095 return arp_req_set_proxy(net, dev, 1); in arp_req_set_public()
1101 struct net_device *dev; in arp_req_set() local
1105 dev = arp_req_dev(net, r); in arp_req_set()
1106 if (IS_ERR(dev)) in arp_req_set()
1107 return PTR_ERR(dev); in arp_req_set()
1110 return arp_req_set_public(net, r, dev); in arp_req_set()
1112 switch (dev->type) { in arp_req_set()
1128 if (r->arp_ha.sa_family != dev->type) in arp_req_set()
1135 neigh = __neigh_lookup_errno(&arp_tbl, &ip, dev); in arp_req_set()
1172 struct net_device *dev; in arp_req_get() local
1177 dev = arp_req_dev_by_name(net, r, true); in arp_req_get()
1178 if (IS_ERR(dev)) in arp_req_get()
1179 return PTR_ERR(dev); in arp_req_get()
1181 neigh = neigh_lookup(&arp_tbl, &ip, dev); in arp_req_get()
1192 min(dev->addr_len, sizeof(r->arp_ha.sa_data_min))); in arp_req_get()
1198 r->arp_ha.sa_family = dev->type; in arp_req_get()
1199 netdev_copy_name(dev, r->arp_dev); in arp_req_get()
1204 int arp_invalidate(struct net_device *dev, __be32 ip, bool force) in arp_invalidate() argument
1206 struct neighbour *neigh = neigh_lookup(&arp_tbl, &ip, dev); in arp_invalidate()
1230 struct net_device *dev) in arp_req_delete_public() argument
1237 return pneigh_delete(&arp_tbl, net, &ip, dev); in arp_req_delete_public()
1240 return arp_req_set_proxy(net, dev, 0); in arp_req_delete_public()
1245 struct net_device *dev; in arp_req_delete() local
1248 dev = arp_req_dev(net, r); in arp_req_delete()
1249 if (IS_ERR(dev)) in arp_req_delete()
1250 return PTR_ERR(dev); in arp_req_delete()
1253 return arp_req_delete_public(net, r, dev); in arp_req_delete()
1257 return arp_invalidate(dev, ip, true); in arp_req_delete()
1325 struct net_device *dev = netdev_notifier_info_to_dev(ptr); in arp_netdev_event() local
1332 neigh_changeaddr(&arp_tbl, dev); in arp_netdev_event()
1333 rt_cache_flush(dev_net(dev)); in arp_netdev_event()
1338 neigh_changeaddr(&arp_tbl, dev); in arp_netdev_event()
1340 in_dev = __in_dev_get_rtnl(dev); in arp_netdev_event()
1346 if (evict_nocarrier && !netif_carrier_ok(dev)) in arp_netdev_event()
1347 neigh_carrier_down(&arp_tbl, dev); in arp_netdev_event()
1364 void arp_ifdown(struct net_device *dev) in arp_ifdown() argument
1366 neigh_ifdown(&arp_tbl, dev); in arp_ifdown()
1422 struct net_device *dev = n->dev; in arp_format_neigh_entry() local
1423 int hatype = dev->type; in arp_format_neigh_entry()
1432 for (k = 0, j = 0; k < HBUFFERLEN - 3 && j < dev->addr_len; j++) { in arp_format_neigh_entry()
1445 tbuf, hatype, arp_state_to_flags(n), hbuffer, dev->name); in arp_format_neigh_entry()
1452 struct net_device *dev = n->dev; in arp_format_pneigh_entry() local
1453 int hatype = dev ? dev->type : 0; in arp_format_pneigh_entry()
1459 dev ? dev->name : "*"); in arp_format_pneigh_entry()