Lines Matching refs:dev
76 static int ip6gre_tunnel_init(struct net_device *dev);
77 static void ip6gre_tunnel_setup(struct net_device *dev);
115 static struct ip6_tnl *ip6gre_tunnel_lookup(struct net_device *dev,
119 struct net *net = dev_net(dev);
120 int link = dev->ifindex;
136 !(t->dev->flags & IFF_UP))
139 if (t->dev->type != ARPHRD_IP6GRE &&
140 t->dev->type != dev_type)
146 if (t->dev->type != dev_type)
160 !(t->dev->flags & IFF_UP))
163 if (t->dev->type != ARPHRD_IP6GRE &&
164 t->dev->type != dev_type)
170 if (t->dev->type != dev_type)
186 !(t->dev->flags & IFF_UP))
189 if (t->dev->type != ARPHRD_IP6GRE &&
190 t->dev->type != dev_type)
196 if (t->dev->type != dev_type)
209 !(t->dev->flags & IFF_UP))
212 if (t->dev->type != ARPHRD_IP6GRE &&
213 t->dev->type != dev_type)
219 if (t->dev->type != dev_type)
239 if (t && t->dev->flags & IFF_UP)
340 type == t->dev->type)
350 struct net_device *dev;
367 dev = alloc_netdev(sizeof(*t), name, NET_NAME_UNKNOWN,
369 if (!dev)
372 dev_net_set(dev, net);
374 nt = netdev_priv(dev);
376 dev->rtnl_link_ops = &ip6gre_link_ops;
378 nt->dev = dev;
379 nt->net = dev_net(dev);
381 if (register_netdevice(dev) < 0)
388 dev->features |= NETIF_F_LLTX;
394 free_netdev(dev);
398 static void ip6erspan_tunnel_uninit(struct net_device *dev)
400 struct ip6_tnl *t = netdev_priv(dev);
406 dev_put(dev);
409 static void ip6gre_tunnel_uninit(struct net_device *dev)
411 struct ip6_tnl *t = netdev_priv(dev);
416 if (ign->fb_tunnel_dev == dev)
419 dev_put(dev);
426 struct net *net = dev_net(skb->dev);
436 t = ip6gre_tunnel_lookup(skb->dev, &ipv6h->daddr, &ipv6h->saddr,
479 ip6_redirect(skb, net, skb->dev->ifindex, 0,
499 tunnel = ip6gre_tunnel_lookup(skb->dev,
540 tunnel = ip6gre_tunnel_lookup(skb->dev,
637 struct net_device *dev,
642 struct ip6_tnl *t = netdev_priv(dev);
659 fl6->flowi6_uid = sock_net_uid(dev_net(dev), NULL);
663 struct net_device *dev,
668 struct ip6_tnl *t = netdev_priv(dev);
704 fl6->flowi6_uid = sock_net_uid(dev_net(dev), NULL);
721 struct net_device *dev, __u8 dsfield,
725 struct ip6_tnl *tunnel = netdev_priv(dev);
729 if (dev->type == ARPHRD_ETHER)
732 if (dev->header_ops && dev->type == ARPHRD_IP6GRE)
738 protocol = (dev->type == ARPHRD_ETHER) ? htons(ETH_P_TEB) : proto;
755 fl6->flowi6_uid = sock_net_uid(dev_net(dev), NULL);
763 if (skb_cow_head(skb, dev->needed_headroom ?: tun_hlen + tunnel->encap_hlen))
773 if (skb_cow_head(skb, dev->needed_headroom ?: tunnel->hlen))
784 return ip6_tnl_xmit(skb, dev, dsfield, fl6, encap_limit, pmtu,
788 static inline int ip6gre_xmit_ipv4(struct sk_buff *skb, struct net_device *dev)
790 struct ip6_tnl *t = netdev_priv(dev);
800 prepare_ip6gre_xmit_ipv4(skb, dev, &fl6,
807 err = __gre6_xmit(skb, dev, dsfield, &fl6, encap_limit, &mtu,
820 static inline int ip6gre_xmit_ipv6(struct sk_buff *skb, struct net_device *dev)
822 struct ip6_tnl *t = netdev_priv(dev);
834 prepare_ip6gre_xmit_ipv6(skb, dev, &fl6, &dsfield, &encap_limit))
840 err = __gre6_xmit(skb, dev, dsfield, &fl6, encap_limit,
871 static int ip6gre_xmit_other(struct sk_buff *skb, struct net_device *dev)
873 struct ip6_tnl *t = netdev_priv(dev);
889 err = __gre6_xmit(skb, dev, 0, &fl6, encap_limit, &mtu, skb->protocol);
895 struct net_device *dev)
897 struct ip6_tnl *t = netdev_priv(dev);
898 struct net_device_stats *stats = &t->dev->stats;
909 ret = ip6gre_xmit_ipv4(skb, dev);
912 ret = ip6gre_xmit_ipv6(skb, dev);
915 ret = ip6gre_xmit_other(skb, dev);
933 struct net_device *dev)
936 struct ip6_tnl *t = netdev_priv(dev);
957 if (skb->len > dev->mtu + dev->hard_header_len) {
958 if (pskb_trim(skb, dev->mtu + dev->hard_header_len))
979 if (skb_cow_head(skb, dev->needed_headroom ?: t->hlen))
1003 fl6.flowi6_uid = sock_net_uid(dev_net(dev), NULL);
1034 prepare_ip6gre_xmit_ipv4(skb, dev, &fl6,
1040 if (prepare_ip6gre_xmit_ipv6(skb, dev, &fl6,
1070 /* TooBig packet may have updated dst->dev's mtu */
1071 if (!t->parms.collect_md && dst && dst_mtu(dst) > dst->dev->mtu)
1072 dst->ops->update_pmtu(dst, NULL, skb, dst->dev->mtu, false);
1074 err = ip6_tnl_xmit(skb, dev, dsfield, &fl6, encap_limit, &mtu,
1091 stats = &t->dev->stats;
1101 struct net_device *dev = t->dev;
1105 if (dev->type != ARPHRD_ETHER) {
1106 memcpy(dev->dev_addr, &p->laddr, sizeof(struct in6_addr));
1107 memcpy(dev->broadcast, &p->raddr, sizeof(struct in6_addr));
1127 p->flags&IP6_TNL_F_CAP_RCV && dev->type != ARPHRD_ETHER)
1128 dev->flags |= IFF_POINTOPOINT;
1130 dev->flags &= ~IFF_POINTOPOINT;
1137 struct net_device *dev = t->dev;
1150 if (rt->dst.dev) {
1151 unsigned short dst_len = rt->dst.dev->hard_header_len +
1154 if (t->dev->header_ops)
1155 dev->hard_header_len = dst_len;
1157 dev->needed_headroom = dst_len;
1160 int mtu = rt->dst.dev->mtu - t_hlen;
1164 if (dev->type == ARPHRD_ETHER)
1169 WRITE_ONCE(dev->mtu, mtu);
1185 if (tunnel->dev->header_ops)
1186 tunnel->dev->hard_header_len = LL_MAX_HEADER + t_hlen;
1188 tunnel->dev->needed_headroom = LL_MAX_HEADER + t_hlen;
1265 static int ip6gre_tunnel_ioctl(struct net_device *dev,
1271 struct ip6_tnl *t = netdev_priv(dev);
1279 if (dev == ign->fb_tunnel_dev) {
1287 t = netdev_priv(dev);
1317 if (dev != ign->fb_tunnel_dev && cmd == SIOCCHGTUNNEL) {
1319 if (t->dev != dev) {
1324 t = netdev_priv(dev);
1330 netdev_state_change(dev);
1350 if (dev == ign->fb_tunnel_dev) {
1362 dev = t->dev;
1364 unregister_netdevice(dev);
1376 static int ip6gre_header(struct sk_buff *skb, struct net_device *dev,
1380 struct ip6_tnl *t = netdev_priv(dev);
1385 ip6_flow_hdr(ipv6h, 0, ip6_make_flowlabel(dev_net(dev), skb,
1425 static void ip6gre_dev_free(struct net_device *dev)
1427 struct ip6_tnl *t = netdev_priv(dev);
1431 free_percpu(dev->tstats);
1434 static void ip6gre_tunnel_setup(struct net_device *dev)
1436 dev->netdev_ops = &ip6gre_netdev_ops;
1437 dev->needs_free_netdev = true;
1438 dev->priv_destructor = ip6gre_dev_free;
1440 dev->type = ARPHRD_IP6GRE;
1442 dev->flags |= IFF_NOARP;
1443 dev->addr_len = sizeof(struct in6_addr);
1444 netif_keep_dst(dev);
1446 dev->addr_assign_type = NET_ADDR_RANDOM;
1447 eth_random_addr(dev->perm_addr);
1455 static void ip6gre_tnl_init_features(struct net_device *dev)
1457 struct ip6_tnl *nt = netdev_priv(dev);
1459 dev->features |= GRE6_FEATURES;
1460 dev->hw_features |= GRE6_FEATURES;
1469 dev->features |= NETIF_F_GSO_SOFTWARE;
1470 dev->hw_features |= NETIF_F_GSO_SOFTWARE;
1476 dev->features |= NETIF_F_LLTX;
1480 static int ip6gre_tunnel_init_common(struct net_device *dev)
1486 tunnel = netdev_priv(dev);
1488 tunnel->dev = dev;
1489 tunnel->net = dev_net(dev);
1490 strcpy(tunnel->parms.name, dev->name);
1492 dev->tstats = netdev_alloc_pcpu_stats(struct pcpu_sw_netstats);
1493 if (!dev->tstats)
1500 ret = gro_cells_init(&tunnel->gro_cells, dev);
1505 dev->mtu = ETH_DATA_LEN - t_hlen;
1506 if (dev->type == ARPHRD_ETHER)
1507 dev->mtu -= ETH_HLEN;
1509 dev->mtu -= 8;
1512 netif_keep_dst(dev);
1514 ip6gre_tnl_init_features(dev);
1516 dev_hold(dev);
1522 free_percpu(dev->tstats);
1523 dev->tstats = NULL;
1527 static int ip6gre_tunnel_init(struct net_device *dev)
1532 ret = ip6gre_tunnel_init_common(dev);
1536 tunnel = netdev_priv(dev);
1541 memcpy(dev->dev_addr, &tunnel->parms.laddr, sizeof(struct in6_addr));
1542 memcpy(dev->broadcast, &tunnel->parms.raddr, sizeof(struct in6_addr));
1545 dev->header_ops = &ip6gre_header_ops;
1550 static void ip6gre_fb_tunnel_init(struct net_device *dev)
1552 struct ip6_tnl *tunnel = netdev_priv(dev);
1554 tunnel->dev = dev;
1555 tunnel->net = dev_net(dev);
1556 strcpy(tunnel->parms.name, dev->name);
1570 struct net_device *dev, *aux;
1573 for_each_netdev_safe(net, dev, aux)
1574 if (dev->rtnl_link_ops == &ip6gre_link_ops ||
1575 dev->rtnl_link_ops == &ip6gre_tap_ops ||
1576 dev->rtnl_link_ops == &ip6erspan_tap_ops)
1577 unregister_netdevice_queue(dev, head);
1587 /* If dev is in the same netns, it has already
1590 if (!net_eq(dev_net(t->dev), net))
1591 unregister_netdevice_queue(t->dev,
1837 static int ip6gre_tap_init(struct net_device *dev)
1841 ret = ip6gre_tunnel_init_common(dev);
1845 dev->priv_flags |= IFF_LIVE_ADDR_CHANGE;
1870 tunnel->dev->needed_headroom = LL_MAX_HEADER + t_hlen;
1874 static int ip6erspan_tap_init(struct net_device *dev)
1880 tunnel = netdev_priv(dev);
1882 tunnel->dev = dev;
1883 tunnel->net = dev_net(dev);
1884 strcpy(tunnel->parms.name, dev->name);
1886 dev->tstats = netdev_alloc_pcpu_stats(struct pcpu_sw_netstats);
1887 if (!dev->tstats)
1894 ret = gro_cells_init(&tunnel->gro_cells, dev);
1899 dev->mtu = ETH_DATA_LEN - t_hlen;
1900 if (dev->type == ARPHRD_ETHER)
1901 dev->mtu -= ETH_HLEN;
1903 dev->mtu -= 8;
1905 dev->priv_flags |= IFF_LIVE_ADDR_CHANGE;
1908 dev_hold(dev);
1914 free_percpu(dev->tstats);
1915 dev->tstats = NULL;
1930 static void ip6gre_tap_setup(struct net_device *dev)
1933 ether_setup(dev);
1935 dev->max_mtu = 0;
1936 dev->netdev_ops = &ip6gre_tap_netdev_ops;
1937 dev->needs_free_netdev = true;
1938 dev->priv_destructor = ip6gre_dev_free;
1940 dev->priv_flags &= ~IFF_TX_SKB_SHARING;
1941 dev->priv_flags |= IFF_LIVE_ADDR_CHANGE;
1942 netif_keep_dst(dev);
1978 static int ip6gre_newlink_common(struct net *src_net, struct net_device *dev,
1986 nt = netdev_priv(dev);
1995 if (dev->type == ARPHRD_ETHER && !tb[IFLA_ADDRESS])
1996 eth_hw_addr_random(dev);
1998 nt->dev = dev;
1999 nt->net = dev_net(dev);
2001 err = register_netdevice(dev);
2006 ip6_tnl_change_mtu(dev, nla_get_u32(tb[IFLA_MTU]));
2012 static int ip6gre_newlink(struct net *src_net, struct net_device *dev,
2016 struct ip6_tnl *nt = netdev_priv(dev);
2017 struct net *net = dev_net(dev);
2028 if (ip6gre_tunnel_find(net, &nt->parms, dev->type))
2032 err = ip6gre_newlink_common(src_net, dev, tb, data, extack);
2042 ip6gre_changelink_common(struct net_device *dev, struct nlattr *tb[],
2046 struct ip6_tnl *t, *nt = netdev_priv(dev);
2051 if (dev == ign->fb_tunnel_dev)
2066 if (t->dev != dev)
2075 static int ip6gre_changelink(struct net_device *dev, struct nlattr *tb[],
2079 struct ip6_tnl *t = netdev_priv(dev);
2083 t = ip6gre_changelink_common(dev, tb, data, &p, extack);
2095 static void ip6gre_dellink(struct net_device *dev, struct list_head *head)
2097 struct net *net = dev_net(dev);
2100 if (dev != ign->fb_tunnel_dev)
2101 unregister_netdevice_queue(dev, head);
2104 static size_t ip6gre_get_size(const struct net_device *dev)
2146 static int ip6gre_fill_info(struct sk_buff *skb, const struct net_device *dev)
2148 struct ip6_tnl *t = netdev_priv(dev);
2231 static void ip6erspan_tap_setup(struct net_device *dev)
2233 ether_setup(dev);
2235 dev->max_mtu = 0;
2236 dev->netdev_ops = &ip6erspan_netdev_ops;
2237 dev->needs_free_netdev = true;
2238 dev->priv_destructor = ip6gre_dev_free;
2240 dev->priv_flags &= ~IFF_TX_SKB_SHARING;
2241 dev->priv_flags |= IFF_LIVE_ADDR_CHANGE;
2242 netif_keep_dst(dev);
2245 static int ip6erspan_newlink(struct net *src_net, struct net_device *dev,
2249 struct ip6_tnl *nt = netdev_priv(dev);
2250 struct net *net = dev_net(dev);
2262 if (ip6gre_tunnel_find(net, &nt->parms, dev->type))
2266 err = ip6gre_newlink_common(src_net, dev, tb, data, extack);
2289 static int ip6erspan_changelink(struct net_device *dev, struct nlattr *tb[],
2293 struct ip6gre_net *ign = net_generic(dev_net(dev), ip6gre_net_id);
2297 t = ip6gre_changelink_common(dev, tb, data, &p, extack);