Lines Matching refs:geneve

18 #include <net/geneve.h>
48 struct geneve_dev *geneve;
66 struct net_device *dev; /* netdev for geneve tunnel */
67 struct geneve_sock __rcu *sock4; /* IPv4 socket used for geneve tunnel */
69 struct geneve_sock __rcu *sock6; /* IPv6 socket used for geneve tunnel */
71 struct list_head next; /* geneve's per namespace list */
139 if (eq_tun_id_and_vni((u8 *)&node->geneve->cfg.info.key.tun_id, vni) &&
140 addr == node->geneve->cfg.info.key.u.ipv4.dst)
141 return node->geneve;
158 if (eq_tun_id_and_vni((u8 *)&node->geneve->cfg.info.key.tun_id, vni) &&
159 ipv6_addr_equal(&addr6, &node->geneve->cfg.info.key.u.ipv6.dst))
160 return node->geneve;
214 /* geneve receive/decap routine */
215 static void geneve_rx(struct geneve_dev *geneve, struct geneve_sock *gs,
234 geneve->dev->stats.rx_dropped++;
246 geneve->dev->stats.rx_frame_errors++;
247 geneve->dev->stats.rx_errors++;
253 skb->protocol = eth_type_trans(skb, geneve->dev);
260 if (ether_addr_equal(eth_hdr(skb)->h_source, geneve->dev->dev_addr)) {
261 geneve->dev->stats.rx_errors++;
289 ++geneve->dev->stats.rx_frame_errors;
290 ++geneve->dev->stats.rx_errors;
296 err = gro_cells_receive(&geneve->gro_cells, skb);
298 dev_sw_netstats_rx_add(geneve->dev, len);
309 struct geneve_dev *geneve = netdev_priv(dev);
316 err = gro_cells_init(&geneve->gro_cells, dev);
322 err = dst_cache_init(&geneve->cfg.info.dst_cache, GFP_KERNEL);
325 gro_cells_destroy(&geneve->gro_cells);
333 struct geneve_dev *geneve = netdev_priv(dev);
335 dst_cache_destroy(&geneve->cfg.info.dst_cache);
336 gro_cells_destroy(&geneve->gro_cells);
344 struct geneve_dev *geneve;
364 geneve = geneve_lookup_skb(gs, skb);
365 if (!geneve)
371 !net_eq(geneve->net, dev_net(geneve->dev)))) {
372 geneve->dev->stats.rx_dropped++;
376 geneve_rx(geneve, gs, skb);
585 /* Initialize the geneve udp offloads structure */
613 static void geneve_sock_release(struct geneve_dev *geneve)
615 struct geneve_sock *gs4 = rtnl_dereference(geneve->sock4);
617 struct geneve_sock *gs6 = rtnl_dereference(geneve->sock6);
619 rcu_assign_pointer(geneve->sock6, NULL);
622 rcu_assign_pointer(geneve->sock4, NULL);
646 static int geneve_sock_add(struct geneve_dev *geneve, bool ipv6)
648 struct net *net = geneve->net;
655 gs = geneve_find_sock(gn, ipv6 ? AF_INET6 : AF_INET, geneve->cfg.info.key.tp_dst);
661 gs = geneve_socket_create(net, geneve->cfg.info.key.tp_dst, ipv6,
662 geneve->cfg.use_udp6_rx_checksums);
667 gs->collect_md = geneve->cfg.collect_md;
670 rcu_assign_pointer(geneve->sock6, gs);
671 node = &geneve->hlist6;
675 rcu_assign_pointer(geneve->sock4, gs);
676 node = &geneve->hlist4;
678 node->geneve = geneve;
680 tunnel_id_to_vni(geneve->cfg.info.key.tun_id, vni);
688 struct geneve_dev *geneve = netdev_priv(dev);
689 bool metadata = geneve->cfg.collect_md;
693 ipv6 = geneve->cfg.info.mode & IP_TUNNEL_INFO_IPV6 || metadata;
697 ret = geneve_sock_add(geneve, true);
703 ret = geneve_sock_add(geneve, false);
705 geneve_sock_release(geneve);
712 struct geneve_dev *geneve = netdev_priv(dev);
714 hlist_del_init_rcu(&geneve->hlist4.hlist);
716 hlist_del_init_rcu(&geneve->hlist6.hlist);
718 geneve_sock_release(geneve);
779 struct geneve_dev *geneve = netdev_priv(dev);
796 if ((tos == 1) && !geneve->cfg.collect_md) {
810 rt = ip_route_output_key(geneve->net, fl4);
834 struct geneve_dev *geneve = netdev_priv(dev);
851 if ((prio == 1) && !geneve->cfg.collect_md) {
863 dst = ipv6_stub->ipv6_dst_lookup_flow(geneve->net, gs6->sock->sk, fl6,
882 struct geneve_dev *geneve,
885 bool xnet = !net_eq(geneve->net, dev_net(geneve->dev));
886 struct geneve_sock *gs4 = rcu_dereference(geneve->sock4);
899 sport = udp_flow_src_port(geneve->net, skb, 1, USHRT_MAX, true);
901 geneve->cfg.info.key.tp_dst, sport, &full_tos);
933 skb->protocol = eth_type_trans(skb, geneve->dev);
939 if (geneve->cfg.collect_md) {
946 if (geneve->cfg.ttl_inherit)
952 if (geneve->cfg.df == GENEVE_DF_SET) {
954 } else if (geneve->cfg.df == GENEVE_DF_INHERIT) {
973 tos, ttl, df, sport, geneve->cfg.info.key.tp_dst,
974 !net_eq(geneve->net, dev_net(geneve->dev)),
981 struct geneve_dev *geneve,
984 bool xnet = !net_eq(geneve->net, dev_net(geneve->dev));
985 struct geneve_sock *gs6 = rcu_dereference(geneve->sock6);
996 sport = udp_flow_src_port(geneve->net, skb, 1, USHRT_MAX, true);
998 geneve->cfg.info.key.tp_dst, sport);
1029 skb->protocol = eth_type_trans(skb, geneve->dev);
1035 if (geneve->cfg.collect_md) {
1041 if (geneve->cfg.ttl_inherit)
1053 info->key.label, sport, geneve->cfg.info.key.tp_dst,
1061 struct geneve_dev *geneve = netdev_priv(dev);
1065 if (geneve->cfg.collect_md) {
1074 info = &geneve->cfg.info;
1080 err = geneve6_xmit_skb(skb, dev, geneve, info);
1083 err = geneve_xmit_skb(skb, dev, geneve, info);
1115 struct geneve_dev *geneve = netdev_priv(dev);
1122 struct geneve_sock *gs4 = rcu_dereference(geneve->sock4);
1123 sport = udp_flow_src_port(geneve->net, skb,
1127 geneve->cfg.info.key.tp_dst, sport, NULL);
1138 struct geneve_sock *gs6 = rcu_dereference(geneve->sock6);
1139 sport = udp_flow_src_port(geneve->net, skb,
1143 geneve->cfg.info.key.tp_dst, sport);
1155 info->key.tp_dst = geneve->cfg.info.key.tp_dst;
1176 strlcpy(drvinfo->driver, "geneve", sizeof(drvinfo->driver));
1186 .name = "geneve",
1312 struct geneve_dev *geneve, *t = NULL;
1316 list_for_each_entry(geneve, &gn->geneve_list, next) {
1317 if (info->key.tp_dst == geneve->cfg.info.key.tp_dst) {
1318 *tun_collect_md = geneve->cfg.collect_md;
1321 if (info->key.tun_id == geneve->cfg.info.key.tun_id &&
1322 info->key.tp_dst == geneve->cfg.info.key.tp_dst &&
1323 !memcmp(&info->key.u, &geneve->cfg.info.key.u, sizeof(info->key.u)))
1324 t = geneve;
1350 struct geneve_dev *t, *geneve = netdev_priv(dev);
1361 geneve->net = net;
1362 geneve->dev = dev;
1393 dst_cache_reset(&geneve->cfg.info.dst_cache);
1394 memcpy(&geneve->cfg, cfg, sizeof(*cfg));
1400 list_add(&geneve->next, &gn->geneve_list);
1579 struct geneve_dev *geneve = netdev_priv(dev);
1590 struct rtable *rt = ip_route_output_key(geneve->net, &fl4);
1605 rt = rt6_lookup(geneve->net, &info->key.u.ipv6.dst, NULL, 0,
1648 /* Quiesces the geneve device data path for both TX and RX.
1650 * On transmit geneve checks for non-NULL geneve_sock before it proceeds.
1656 * On receive geneve dereference the geneve_sock stashed in the socket. So,
1660 static void geneve_quiesce(struct geneve_dev *geneve, struct geneve_sock **gs4,
1663 *gs4 = rtnl_dereference(geneve->sock4);
1664 rcu_assign_pointer(geneve->sock4, NULL);
1668 *gs6 = rtnl_dereference(geneve->sock6);
1669 rcu_assign_pointer(geneve->sock6, NULL);
1678 /* Resumes the geneve device data path for both TX and RX. */
1679 static void geneve_unquiesce(struct geneve_dev *geneve, struct geneve_sock *gs4,
1682 rcu_assign_pointer(geneve->sock4, gs4);
1686 rcu_assign_pointer(geneve->sock6, gs6);
1697 struct geneve_dev *geneve = netdev_priv(dev);
1702 /* If the geneve device is configured for metadata (or externally
1705 if (geneve->cfg.collect_md)
1709 memcpy(&cfg, &geneve->cfg, sizeof(cfg));
1714 if (!geneve_dst_addr_equal(&geneve->cfg.info, &cfg.info)) {
1719 geneve_quiesce(geneve, &gs4, &gs6);
1720 memcpy(&geneve->cfg, &cfg, sizeof(cfg));
1721 geneve_unquiesce(geneve, gs4, gs6);
1728 struct geneve_dev *geneve = netdev_priv(dev);
1730 list_del(&geneve->next);
1753 struct geneve_dev *geneve = netdev_priv(dev);
1754 struct ip_tunnel_info *info = &geneve->cfg.info;
1755 bool ttl_inherit = geneve->cfg.ttl_inherit;
1756 bool metadata = geneve->cfg.collect_md;
1789 if (nla_put_u8(skb, IFLA_GENEVE_DF, geneve->cfg.df))
1800 !geneve->cfg.use_udp6_rx_checksums))
1814 .kind = "geneve",
1908 struct geneve_dev *geneve, *next;
1911 /* gather any geneve devices that were moved into this ns */
1916 /* now gather any other geneve devices that were created in this ns */
1917 list_for_each_entry_safe(geneve, next, &gn->geneve_list, next) {
1918 /* If geneve->dev is in the same netns, it was already added
1921 if (!net_eq(dev_net(geneve->dev), net))
1922 unregister_netdevice_queue(geneve->dev, head);
1991 MODULE_ALIAS_RTNL_LINK("geneve");