Lines Matching refs:geneve

50 	struct geneve_dev *geneve;  member
142 if (eq_tun_id_and_vni((u8 *)&node->geneve->cfg.info.key.tun_id, vni) && in geneve_lookup()
143 addr == node->geneve->cfg.info.key.u.ipv4.dst) in geneve_lookup()
144 return node->geneve; in geneve_lookup()
161 if (eq_tun_id_and_vni((u8 *)&node->geneve->cfg.info.key.tun_id, vni) && in geneve6_lookup()
162 ipv6_addr_equal(&addr6, &node->geneve->cfg.info.key.u.ipv6.dst)) in geneve6_lookup()
163 return node->geneve; in geneve6_lookup()
218 static void geneve_rx(struct geneve_dev *geneve, struct geneve_sock *gs, in geneve_rx() argument
237 geneve->dev->stats.rx_dropped++; in geneve_rx()
249 geneve->dev->stats.rx_frame_errors++; in geneve_rx()
250 geneve->dev->stats.rx_errors++; in geneve_rx()
260 skb->protocol = eth_type_trans(skb, geneve->dev); in geneve_rx()
265 geneve->dev->dev_addr)) { in geneve_rx()
266 geneve->dev->stats.rx_errors++; in geneve_rx()
271 skb->dev = geneve->dev; in geneve_rx()
299 ++geneve->dev->stats.rx_frame_errors; in geneve_rx()
300 ++geneve->dev->stats.rx_errors; in geneve_rx()
306 err = gro_cells_receive(&geneve->gro_cells, skb); in geneve_rx()
308 dev_sw_netstats_rx_add(geneve->dev, len); in geneve_rx()
319 struct geneve_dev *geneve = netdev_priv(dev); in geneve_init() local
326 err = gro_cells_init(&geneve->gro_cells, dev); in geneve_init()
332 err = dst_cache_init(&geneve->cfg.info.dst_cache, GFP_KERNEL); in geneve_init()
335 gro_cells_destroy(&geneve->gro_cells); in geneve_init()
343 struct geneve_dev *geneve = netdev_priv(dev); in geneve_uninit() local
345 dst_cache_destroy(&geneve->cfg.info.dst_cache); in geneve_uninit()
346 gro_cells_destroy(&geneve->gro_cells); in geneve_uninit()
354 struct geneve_dev *geneve; in geneve_udp_encap_recv() local
379 geneve = geneve_lookup_skb(gs, skb); in geneve_udp_encap_recv()
380 if (!geneve) in geneve_udp_encap_recv()
383 if (unlikely((!geneve->cfg.inner_proto_inherit && in geneve_udp_encap_recv()
385 geneve->dev->stats.rx_dropped++; in geneve_udp_encap_recv()
391 !net_eq(geneve->net, dev_net(geneve->dev)))) { in geneve_udp_encap_recv()
392 geneve->dev->stats.rx_dropped++; in geneve_udp_encap_recv()
396 geneve_rx(geneve, gs, skb); in geneve_udp_encap_recv()
631 static void geneve_sock_release(struct geneve_dev *geneve) in geneve_sock_release() argument
633 struct geneve_sock *gs4 = rtnl_dereference(geneve->sock4); in geneve_sock_release()
635 struct geneve_sock *gs6 = rtnl_dereference(geneve->sock6); in geneve_sock_release()
637 rcu_assign_pointer(geneve->sock6, NULL); in geneve_sock_release()
640 rcu_assign_pointer(geneve->sock4, NULL); in geneve_sock_release()
664 static int geneve_sock_add(struct geneve_dev *geneve, bool ipv6) in geneve_sock_add() argument
666 struct net *net = geneve->net; in geneve_sock_add()
673 gs = geneve_find_sock(gn, ipv6 ? AF_INET6 : AF_INET, geneve->cfg.info.key.tp_dst); in geneve_sock_add()
679 gs = geneve_socket_create(net, geneve->cfg.info.key.tp_dst, ipv6, in geneve_sock_add()
680 geneve->cfg.use_udp6_rx_checksums); in geneve_sock_add()
685 gs->collect_md = geneve->cfg.collect_md; in geneve_sock_add()
688 rcu_assign_pointer(geneve->sock6, gs); in geneve_sock_add()
689 node = &geneve->hlist6; in geneve_sock_add()
693 rcu_assign_pointer(geneve->sock4, gs); in geneve_sock_add()
694 node = &geneve->hlist4; in geneve_sock_add()
696 node->geneve = geneve; in geneve_sock_add()
698 tunnel_id_to_vni(geneve->cfg.info.key.tun_id, vni); in geneve_sock_add()
706 struct geneve_dev *geneve = netdev_priv(dev); in geneve_open() local
707 bool metadata = geneve->cfg.collect_md; in geneve_open()
711 ipv6 = geneve->cfg.info.mode & IP_TUNNEL_INFO_IPV6 || metadata; in geneve_open()
715 ret = geneve_sock_add(geneve, true); in geneve_open()
721 ret = geneve_sock_add(geneve, false); in geneve_open()
723 geneve_sock_release(geneve); in geneve_open()
730 struct geneve_dev *geneve = netdev_priv(dev); in geneve_stop() local
732 hlist_del_init_rcu(&geneve->hlist4.hlist); in geneve_stop()
734 hlist_del_init_rcu(&geneve->hlist6.hlist); in geneve_stop()
736 geneve_sock_release(geneve); in geneve_stop()
801 struct geneve_dev *geneve = netdev_priv(dev); in geneve_get_v4_rt() local
819 if ((tos == 1) && !geneve->cfg.collect_md) { in geneve_get_v4_rt()
833 rt = ip_route_output_key(geneve->net, fl4); in geneve_get_v4_rt()
857 struct geneve_dev *geneve = netdev_priv(dev); in geneve_get_v6_dst() local
874 if ((prio == 1) && !geneve->cfg.collect_md) { in geneve_get_v6_dst()
886 dst = ipv6_stub->ipv6_dst_lookup_flow(geneve->net, gs6->sock->sk, fl6, in geneve_get_v6_dst()
905 struct geneve_dev *geneve, in geneve_xmit_skb() argument
908 bool xnet = !net_eq(geneve->net, dev_net(geneve->dev)); in geneve_xmit_skb()
909 struct geneve_sock *gs4 = rcu_dereference(geneve->sock4); in geneve_xmit_skb()
922 sport = udp_flow_src_port(geneve->net, skb, 1, USHRT_MAX, true); in geneve_xmit_skb()
924 geneve->cfg.info.key.tp_dst, sport, &full_tos); in geneve_xmit_skb()
956 skb->protocol = eth_type_trans(skb, geneve->dev); in geneve_xmit_skb()
962 if (geneve->cfg.collect_md) { in geneve_xmit_skb()
969 if (geneve->cfg.ttl_inherit) in geneve_xmit_skb()
975 if (geneve->cfg.df == GENEVE_DF_SET) { in geneve_xmit_skb()
977 } else if (geneve->cfg.df == GENEVE_DF_INHERIT) { in geneve_xmit_skb()
992 geneve->cfg.inner_proto_inherit); in geneve_xmit_skb()
997 tos, ttl, df, sport, geneve->cfg.info.key.tp_dst, in geneve_xmit_skb()
998 !net_eq(geneve->net, dev_net(geneve->dev)), in geneve_xmit_skb()
1005 struct geneve_dev *geneve, in geneve6_xmit_skb() argument
1008 bool xnet = !net_eq(geneve->net, dev_net(geneve->dev)); in geneve6_xmit_skb()
1009 struct geneve_sock *gs6 = rcu_dereference(geneve->sock6); in geneve6_xmit_skb()
1020 sport = udp_flow_src_port(geneve->net, skb, 1, USHRT_MAX, true); in geneve6_xmit_skb()
1022 geneve->cfg.info.key.tp_dst, sport); in geneve6_xmit_skb()
1053 skb->protocol = eth_type_trans(skb, geneve->dev); in geneve6_xmit_skb()
1059 if (geneve->cfg.collect_md) { in geneve6_xmit_skb()
1065 if (geneve->cfg.ttl_inherit) in geneve6_xmit_skb()
1072 geneve->cfg.inner_proto_inherit); in geneve6_xmit_skb()
1078 info->key.label, sport, geneve->cfg.info.key.tp_dst, in geneve6_xmit_skb()
1086 struct geneve_dev *geneve = netdev_priv(dev); in geneve_xmit() local
1090 if (geneve->cfg.collect_md) { in geneve_xmit()
1099 info = &geneve->cfg.info; in geneve_xmit()
1105 err = geneve6_xmit_skb(skb, dev, geneve, info); in geneve_xmit()
1108 err = geneve_xmit_skb(skb, dev, geneve, info); in geneve_xmit()
1140 struct geneve_dev *geneve = netdev_priv(dev); in geneve_fill_metadata_dst() local
1147 struct geneve_sock *gs4 = rcu_dereference(geneve->sock4); in geneve_fill_metadata_dst()
1148 sport = udp_flow_src_port(geneve->net, skb, in geneve_fill_metadata_dst()
1152 geneve->cfg.info.key.tp_dst, sport, NULL); in geneve_fill_metadata_dst()
1163 struct geneve_sock *gs6 = rcu_dereference(geneve->sock6); in geneve_fill_metadata_dst()
1164 sport = udp_flow_src_port(geneve->net, skb, in geneve_fill_metadata_dst()
1168 geneve->cfg.info.key.tp_dst, sport); in geneve_fill_metadata_dst()
1180 info->key.tp_dst = geneve->cfg.info.key.tp_dst; in geneve_fill_metadata_dst()
1340 struct geneve_dev *geneve, *t = NULL; in geneve_find_dev() local
1344 list_for_each_entry(geneve, &gn->geneve_list, next) { in geneve_find_dev()
1345 if (info->key.tp_dst == geneve->cfg.info.key.tp_dst) { in geneve_find_dev()
1346 *tun_collect_md = geneve->cfg.collect_md; in geneve_find_dev()
1349 if (info->key.tun_id == geneve->cfg.info.key.tun_id && in geneve_find_dev()
1350 info->key.tp_dst == geneve->cfg.info.key.tp_dst && in geneve_find_dev()
1351 !memcmp(&info->key.u, &geneve->cfg.info.key.u, sizeof(info->key.u))) in geneve_find_dev()
1352 t = geneve; in geneve_find_dev()
1378 struct geneve_dev *t, *geneve = netdev_priv(dev); in geneve_configure() local
1389 geneve->net = net; in geneve_configure()
1390 geneve->dev = dev; in geneve_configure()
1421 dst_cache_reset(&geneve->cfg.info.dst_cache); in geneve_configure()
1422 memcpy(&geneve->cfg, cfg, sizeof(*cfg)); in geneve_configure()
1424 if (geneve->cfg.inner_proto_inherit) { in geneve_configure()
1436 list_add(&geneve->next, &gn->geneve_list); in geneve_configure()
1623 struct geneve_dev *geneve = netdev_priv(dev); in geneve_link_config() local
1634 struct rtable *rt = ip_route_output_key(geneve->net, &fl4); in geneve_link_config()
1649 rt = rt6_lookup(geneve->net, &info->key.u.ipv6.dst, NULL, 0, in geneve_link_config()
1704 static void geneve_quiesce(struct geneve_dev *geneve, struct geneve_sock **gs4, in geneve_quiesce() argument
1707 *gs4 = rtnl_dereference(geneve->sock4); in geneve_quiesce()
1708 rcu_assign_pointer(geneve->sock4, NULL); in geneve_quiesce()
1712 *gs6 = rtnl_dereference(geneve->sock6); in geneve_quiesce()
1713 rcu_assign_pointer(geneve->sock6, NULL); in geneve_quiesce()
1723 static void geneve_unquiesce(struct geneve_dev *geneve, struct geneve_sock *gs4, in geneve_unquiesce() argument
1726 rcu_assign_pointer(geneve->sock4, gs4); in geneve_unquiesce()
1730 rcu_assign_pointer(geneve->sock6, gs6); in geneve_unquiesce()
1741 struct geneve_dev *geneve = netdev_priv(dev); in geneve_changelink() local
1749 if (geneve->cfg.collect_md) in geneve_changelink()
1753 memcpy(&cfg, &geneve->cfg, sizeof(cfg)); in geneve_changelink()
1758 if (!geneve_dst_addr_equal(&geneve->cfg.info, &cfg.info)) { in geneve_changelink()
1763 geneve_quiesce(geneve, &gs4, &gs6); in geneve_changelink()
1764 memcpy(&geneve->cfg, &cfg, sizeof(cfg)); in geneve_changelink()
1765 geneve_unquiesce(geneve, gs4, gs6); in geneve_changelink()
1772 struct geneve_dev *geneve = netdev_priv(dev); in geneve_dellink() local
1774 list_del(&geneve->next); in geneve_dellink()
1798 struct geneve_dev *geneve = netdev_priv(dev); in geneve_fill_info() local
1799 struct ip_tunnel_info *info = &geneve->cfg.info; in geneve_fill_info()
1800 bool ttl_inherit = geneve->cfg.ttl_inherit; in geneve_fill_info()
1801 bool metadata = geneve->cfg.collect_md; in geneve_fill_info()
1834 if (nla_put_u8(skb, IFLA_GENEVE_DF, geneve->cfg.df)) in geneve_fill_info()
1845 !geneve->cfg.use_udp6_rx_checksums)) in geneve_fill_info()
1852 if (geneve->cfg.inner_proto_inherit && in geneve_fill_info()
1951 struct geneve_dev *geneve, *next; in geneve_destroy_tunnels() local
1960 list_for_each_entry_safe(geneve, next, &gn->geneve_list, next) { in geneve_destroy_tunnels()
1964 if (!net_eq(dev_net(geneve->dev), net)) in geneve_destroy_tunnels()
1965 unregister_netdevice_queue(geneve->dev, head); in geneve_destroy_tunnels()