Lines Matching refs:geneve
48 struct geneve_dev *geneve; member
139 if (eq_tun_id_and_vni((u8 *)&node->geneve->cfg.info.key.tun_id, vni) && in geneve_lookup()
140 addr == node->geneve->cfg.info.key.u.ipv4.dst) in geneve_lookup()
141 return node->geneve; in geneve_lookup()
158 if (eq_tun_id_and_vni((u8 *)&node->geneve->cfg.info.key.tun_id, vni) && in geneve6_lookup()
159 ipv6_addr_equal(&addr6, &node->geneve->cfg.info.key.u.ipv6.dst)) in geneve6_lookup()
160 return node->geneve; in geneve6_lookup()
215 static void geneve_rx(struct geneve_dev *geneve, struct geneve_sock *gs, in geneve_rx() argument
234 geneve->dev->stats.rx_dropped++; in geneve_rx()
246 geneve->dev->stats.rx_frame_errors++; in geneve_rx()
247 geneve->dev->stats.rx_errors++; in geneve_rx()
253 skb->protocol = eth_type_trans(skb, geneve->dev); in geneve_rx()
260 if (ether_addr_equal(eth_hdr(skb)->h_source, geneve->dev->dev_addr)) { in geneve_rx()
261 geneve->dev->stats.rx_errors++; in geneve_rx()
289 ++geneve->dev->stats.rx_frame_errors; in geneve_rx()
290 ++geneve->dev->stats.rx_errors; in geneve_rx()
296 err = gro_cells_receive(&geneve->gro_cells, skb); in geneve_rx()
298 dev_sw_netstats_rx_add(geneve->dev, len); in geneve_rx()
309 struct geneve_dev *geneve = netdev_priv(dev); in geneve_init() local
316 err = gro_cells_init(&geneve->gro_cells, dev); in geneve_init()
322 err = dst_cache_init(&geneve->cfg.info.dst_cache, GFP_KERNEL); in geneve_init()
325 gro_cells_destroy(&geneve->gro_cells); in geneve_init()
333 struct geneve_dev *geneve = netdev_priv(dev); in geneve_uninit() local
335 dst_cache_destroy(&geneve->cfg.info.dst_cache); in geneve_uninit()
336 gro_cells_destroy(&geneve->gro_cells); in geneve_uninit()
344 struct geneve_dev *geneve; in geneve_udp_encap_recv() local
364 geneve = geneve_lookup_skb(gs, skb); in geneve_udp_encap_recv()
365 if (!geneve) in geneve_udp_encap_recv()
371 !net_eq(geneve->net, dev_net(geneve->dev)))) { in geneve_udp_encap_recv()
372 geneve->dev->stats.rx_dropped++; in geneve_udp_encap_recv()
376 geneve_rx(geneve, gs, skb); in geneve_udp_encap_recv()
613 static void geneve_sock_release(struct geneve_dev *geneve) in geneve_sock_release() argument
615 struct geneve_sock *gs4 = rtnl_dereference(geneve->sock4); in geneve_sock_release()
617 struct geneve_sock *gs6 = rtnl_dereference(geneve->sock6); in geneve_sock_release()
619 rcu_assign_pointer(geneve->sock6, NULL); in geneve_sock_release()
622 rcu_assign_pointer(geneve->sock4, NULL); in geneve_sock_release()
646 static int geneve_sock_add(struct geneve_dev *geneve, bool ipv6) in geneve_sock_add() argument
648 struct net *net = geneve->net; in geneve_sock_add()
655 gs = geneve_find_sock(gn, ipv6 ? AF_INET6 : AF_INET, geneve->cfg.info.key.tp_dst); in geneve_sock_add()
661 gs = geneve_socket_create(net, geneve->cfg.info.key.tp_dst, ipv6, in geneve_sock_add()
662 geneve->cfg.use_udp6_rx_checksums); in geneve_sock_add()
667 gs->collect_md = geneve->cfg.collect_md; in geneve_sock_add()
670 rcu_assign_pointer(geneve->sock6, gs); in geneve_sock_add()
671 node = &geneve->hlist6; in geneve_sock_add()
675 rcu_assign_pointer(geneve->sock4, gs); in geneve_sock_add()
676 node = &geneve->hlist4; in geneve_sock_add()
678 node->geneve = geneve; in geneve_sock_add()
680 tunnel_id_to_vni(geneve->cfg.info.key.tun_id, vni); in geneve_sock_add()
688 struct geneve_dev *geneve = netdev_priv(dev); in geneve_open() local
689 bool metadata = geneve->cfg.collect_md; in geneve_open()
693 ipv6 = geneve->cfg.info.mode & IP_TUNNEL_INFO_IPV6 || metadata; in geneve_open()
697 ret = geneve_sock_add(geneve, true); in geneve_open()
703 ret = geneve_sock_add(geneve, false); in geneve_open()
705 geneve_sock_release(geneve); in geneve_open()
712 struct geneve_dev *geneve = netdev_priv(dev); in geneve_stop() local
714 hlist_del_init_rcu(&geneve->hlist4.hlist); in geneve_stop()
716 hlist_del_init_rcu(&geneve->hlist6.hlist); in geneve_stop()
718 geneve_sock_release(geneve); in geneve_stop()
779 struct geneve_dev *geneve = netdev_priv(dev); in geneve_get_v4_rt() local
796 if ((tos == 1) && !geneve->cfg.collect_md) { in geneve_get_v4_rt()
810 rt = ip_route_output_key(geneve->net, fl4); in geneve_get_v4_rt()
834 struct geneve_dev *geneve = netdev_priv(dev); in geneve_get_v6_dst() local
851 if ((prio == 1) && !geneve->cfg.collect_md) { in geneve_get_v6_dst()
863 dst = ipv6_stub->ipv6_dst_lookup_flow(geneve->net, gs6->sock->sk, fl6, in geneve_get_v6_dst()
882 struct geneve_dev *geneve, in geneve_xmit_skb() argument
885 bool xnet = !net_eq(geneve->net, dev_net(geneve->dev)); in geneve_xmit_skb()
886 struct geneve_sock *gs4 = rcu_dereference(geneve->sock4); in geneve_xmit_skb()
899 sport = udp_flow_src_port(geneve->net, skb, 1, USHRT_MAX, true); in geneve_xmit_skb()
901 geneve->cfg.info.key.tp_dst, sport, &full_tos); in geneve_xmit_skb()
933 skb->protocol = eth_type_trans(skb, geneve->dev); in geneve_xmit_skb()
939 if (geneve->cfg.collect_md) { in geneve_xmit_skb()
946 if (geneve->cfg.ttl_inherit) in geneve_xmit_skb()
952 if (geneve->cfg.df == GENEVE_DF_SET) { in geneve_xmit_skb()
954 } else if (geneve->cfg.df == GENEVE_DF_INHERIT) { in geneve_xmit_skb()
973 tos, ttl, df, sport, geneve->cfg.info.key.tp_dst, in geneve_xmit_skb()
974 !net_eq(geneve->net, dev_net(geneve->dev)), in geneve_xmit_skb()
981 struct geneve_dev *geneve, in geneve6_xmit_skb() argument
984 bool xnet = !net_eq(geneve->net, dev_net(geneve->dev)); in geneve6_xmit_skb()
985 struct geneve_sock *gs6 = rcu_dereference(geneve->sock6); in geneve6_xmit_skb()
996 sport = udp_flow_src_port(geneve->net, skb, 1, USHRT_MAX, true); in geneve6_xmit_skb()
998 geneve->cfg.info.key.tp_dst, sport); in geneve6_xmit_skb()
1029 skb->protocol = eth_type_trans(skb, geneve->dev); in geneve6_xmit_skb()
1035 if (geneve->cfg.collect_md) { in geneve6_xmit_skb()
1041 if (geneve->cfg.ttl_inherit) in geneve6_xmit_skb()
1053 info->key.label, sport, geneve->cfg.info.key.tp_dst, in geneve6_xmit_skb()
1061 struct geneve_dev *geneve = netdev_priv(dev); in geneve_xmit() local
1065 if (geneve->cfg.collect_md) { in geneve_xmit()
1074 info = &geneve->cfg.info; in geneve_xmit()
1080 err = geneve6_xmit_skb(skb, dev, geneve, info); in geneve_xmit()
1083 err = geneve_xmit_skb(skb, dev, geneve, info); in geneve_xmit()
1115 struct geneve_dev *geneve = netdev_priv(dev); in geneve_fill_metadata_dst() local
1122 struct geneve_sock *gs4 = rcu_dereference(geneve->sock4); in geneve_fill_metadata_dst()
1123 sport = udp_flow_src_port(geneve->net, skb, in geneve_fill_metadata_dst()
1127 geneve->cfg.info.key.tp_dst, sport, NULL); in geneve_fill_metadata_dst()
1138 struct geneve_sock *gs6 = rcu_dereference(geneve->sock6); in geneve_fill_metadata_dst()
1139 sport = udp_flow_src_port(geneve->net, skb, in geneve_fill_metadata_dst()
1143 geneve->cfg.info.key.tp_dst, sport); in geneve_fill_metadata_dst()
1155 info->key.tp_dst = geneve->cfg.info.key.tp_dst; in geneve_fill_metadata_dst()
1312 struct geneve_dev *geneve, *t = NULL; in geneve_find_dev() local
1316 list_for_each_entry(geneve, &gn->geneve_list, next) { in geneve_find_dev()
1317 if (info->key.tp_dst == geneve->cfg.info.key.tp_dst) { in geneve_find_dev()
1318 *tun_collect_md = geneve->cfg.collect_md; in geneve_find_dev()
1321 if (info->key.tun_id == geneve->cfg.info.key.tun_id && in geneve_find_dev()
1322 info->key.tp_dst == geneve->cfg.info.key.tp_dst && in geneve_find_dev()
1323 !memcmp(&info->key.u, &geneve->cfg.info.key.u, sizeof(info->key.u))) in geneve_find_dev()
1324 t = geneve; in geneve_find_dev()
1350 struct geneve_dev *t, *geneve = netdev_priv(dev); in geneve_configure() local
1361 geneve->net = net; in geneve_configure()
1362 geneve->dev = dev; in geneve_configure()
1393 dst_cache_reset(&geneve->cfg.info.dst_cache); in geneve_configure()
1394 memcpy(&geneve->cfg, cfg, sizeof(*cfg)); in geneve_configure()
1400 list_add(&geneve->next, &gn->geneve_list); in geneve_configure()
1579 struct geneve_dev *geneve = netdev_priv(dev); in geneve_link_config() local
1590 struct rtable *rt = ip_route_output_key(geneve->net, &fl4); in geneve_link_config()
1605 rt = rt6_lookup(geneve->net, &info->key.u.ipv6.dst, NULL, 0, in geneve_link_config()
1660 static void geneve_quiesce(struct geneve_dev *geneve, struct geneve_sock **gs4, in geneve_quiesce() argument
1663 *gs4 = rtnl_dereference(geneve->sock4); in geneve_quiesce()
1664 rcu_assign_pointer(geneve->sock4, NULL); in geneve_quiesce()
1668 *gs6 = rtnl_dereference(geneve->sock6); in geneve_quiesce()
1669 rcu_assign_pointer(geneve->sock6, NULL); in geneve_quiesce()
1679 static void geneve_unquiesce(struct geneve_dev *geneve, struct geneve_sock *gs4, in geneve_unquiesce() argument
1682 rcu_assign_pointer(geneve->sock4, gs4); in geneve_unquiesce()
1686 rcu_assign_pointer(geneve->sock6, gs6); in geneve_unquiesce()
1697 struct geneve_dev *geneve = netdev_priv(dev); in geneve_changelink() local
1705 if (geneve->cfg.collect_md) in geneve_changelink()
1709 memcpy(&cfg, &geneve->cfg, sizeof(cfg)); in geneve_changelink()
1714 if (!geneve_dst_addr_equal(&geneve->cfg.info, &cfg.info)) { in geneve_changelink()
1719 geneve_quiesce(geneve, &gs4, &gs6); in geneve_changelink()
1720 memcpy(&geneve->cfg, &cfg, sizeof(cfg)); in geneve_changelink()
1721 geneve_unquiesce(geneve, gs4, gs6); in geneve_changelink()
1728 struct geneve_dev *geneve = netdev_priv(dev); in geneve_dellink() local
1730 list_del(&geneve->next); in geneve_dellink()
1753 struct geneve_dev *geneve = netdev_priv(dev); in geneve_fill_info() local
1754 struct ip_tunnel_info *info = &geneve->cfg.info; in geneve_fill_info()
1755 bool ttl_inherit = geneve->cfg.ttl_inherit; in geneve_fill_info()
1756 bool metadata = geneve->cfg.collect_md; in geneve_fill_info()
1789 if (nla_put_u8(skb, IFLA_GENEVE_DF, geneve->cfg.df)) in geneve_fill_info()
1800 !geneve->cfg.use_udp6_rx_checksums)) in geneve_fill_info()
1908 struct geneve_dev *geneve, *next; in geneve_destroy_tunnels() local
1917 list_for_each_entry_safe(geneve, next, &gn->geneve_list, next) { in geneve_destroy_tunnels()
1921 if (!net_eq(dev_net(geneve->dev), net)) in geneve_destroy_tunnels()
1922 unregister_netdevice_queue(geneve->dev, head); in geneve_destroy_tunnels()