geneve            249 drivers/net/ethernet/mellanox/mlx5/core/en/tc_tun_geneve.c 	res = mlx5_geneve_tlv_option_add(priv->mdev->geneve, option_key);
geneve           1276 drivers/net/ethernet/mellanox/mlx5/core/en_tc.c 		mlx5_geneve_tlv_option_del(priv->mdev->geneve);
geneve             63 drivers/net/ethernet/mellanox/mlx5/core/lib/geneve.c int mlx5_geneve_tlv_option_add(struct mlx5_geneve *geneve, struct geneve_opt *opt)
geneve             67 drivers/net/ethernet/mellanox/mlx5/core/lib/geneve.c 	if (IS_ERR_OR_NULL(geneve))
geneve             70 drivers/net/ethernet/mellanox/mlx5/core/lib/geneve.c 	mutex_lock(&geneve->sync_lock);
geneve             72 drivers/net/ethernet/mellanox/mlx5/core/lib/geneve.c 	if (geneve->refcount) {
geneve             73 drivers/net/ethernet/mellanox/mlx5/core/lib/geneve.c 		if (geneve->opt_class == opt->opt_class &&
geneve             74 drivers/net/ethernet/mellanox/mlx5/core/lib/geneve.c 		    geneve->opt_type == opt->type) {
geneve             76 drivers/net/ethernet/mellanox/mlx5/core/lib/geneve.c 			geneve->refcount++;
geneve             82 drivers/net/ethernet/mellanox/mlx5/core/lib/geneve.c 			mlx5_core_warn(geneve->mdev,
geneve             93 drivers/net/ethernet/mellanox/mlx5/core/lib/geneve.c 		res = mlx5_geneve_tlv_option_create(geneve->mdev,
geneve             98 drivers/net/ethernet/mellanox/mlx5/core/lib/geneve.c 			mlx5_core_warn(geneve->mdev,
geneve            104 drivers/net/ethernet/mellanox/mlx5/core/lib/geneve.c 		geneve->opt_class = opt->opt_class;
geneve            105 drivers/net/ethernet/mellanox/mlx5/core/lib/geneve.c 		geneve->opt_type = opt->type;
geneve            106 drivers/net/ethernet/mellanox/mlx5/core/lib/geneve.c 		geneve->obj_id = res;
geneve            107 drivers/net/ethernet/mellanox/mlx5/core/lib/geneve.c 		geneve->refcount++;
geneve            111 drivers/net/ethernet/mellanox/mlx5/core/lib/geneve.c 	mutex_unlock(&geneve->sync_lock);
geneve            115 drivers/net/ethernet/mellanox/mlx5/core/lib/geneve.c void mlx5_geneve_tlv_option_del(struct mlx5_geneve *geneve)
geneve            117 drivers/net/ethernet/mellanox/mlx5/core/lib/geneve.c 	if (IS_ERR_OR_NULL(geneve))
geneve            120 drivers/net/ethernet/mellanox/mlx5/core/lib/geneve.c 	mutex_lock(&geneve->sync_lock);
geneve            121 drivers/net/ethernet/mellanox/mlx5/core/lib/geneve.c 	if (--geneve->refcount == 0) {
geneve            125 drivers/net/ethernet/mellanox/mlx5/core/lib/geneve.c 		mlx5_geneve_tlv_option_destroy(geneve->mdev, geneve->obj_id);
geneve            127 drivers/net/ethernet/mellanox/mlx5/core/lib/geneve.c 		geneve->opt_class = 0;
geneve            128 drivers/net/ethernet/mellanox/mlx5/core/lib/geneve.c 		geneve->opt_type = 0;
geneve            129 drivers/net/ethernet/mellanox/mlx5/core/lib/geneve.c 		geneve->obj_id = 0;
geneve            131 drivers/net/ethernet/mellanox/mlx5/core/lib/geneve.c 	mutex_unlock(&geneve->sync_lock);
geneve            136 drivers/net/ethernet/mellanox/mlx5/core/lib/geneve.c 	struct mlx5_geneve *geneve =
geneve            137 drivers/net/ethernet/mellanox/mlx5/core/lib/geneve.c 		kzalloc(sizeof(*geneve), GFP_KERNEL);
geneve            139 drivers/net/ethernet/mellanox/mlx5/core/lib/geneve.c 	if (!geneve)
geneve            141 drivers/net/ethernet/mellanox/mlx5/core/lib/geneve.c 	geneve->mdev = mdev;
geneve            142 drivers/net/ethernet/mellanox/mlx5/core/lib/geneve.c 	mutex_init(&geneve->sync_lock);
geneve            144 drivers/net/ethernet/mellanox/mlx5/core/lib/geneve.c 	return geneve;
geneve            147 drivers/net/ethernet/mellanox/mlx5/core/lib/geneve.c void mlx5_geneve_destroy(struct mlx5_geneve *geneve)
geneve            149 drivers/net/ethernet/mellanox/mlx5/core/lib/geneve.c 	if (IS_ERR_OR_NULL(geneve))
geneve            153 drivers/net/ethernet/mellanox/mlx5/core/lib/geneve.c 	if (geneve->refcount)
geneve            154 drivers/net/ethernet/mellanox/mlx5/core/lib/geneve.c 		mlx5_geneve_tlv_option_destroy(geneve->mdev, geneve->obj_id);
geneve            156 drivers/net/ethernet/mellanox/mlx5/core/lib/geneve.c 	kfree(geneve);
geneve             15 drivers/net/ethernet/mellanox/mlx5/core/lib/geneve.h void mlx5_geneve_destroy(struct mlx5_geneve *geneve);
geneve             17 drivers/net/ethernet/mellanox/mlx5/core/lib/geneve.h int mlx5_geneve_tlv_option_add(struct mlx5_geneve *geneve, struct geneve_opt *opt);
geneve             18 drivers/net/ethernet/mellanox/mlx5/core/lib/geneve.h void mlx5_geneve_tlv_option_del(struct mlx5_geneve *geneve);
geneve             25 drivers/net/ethernet/mellanox/mlx5/core/lib/geneve.h mlx5_geneve_destroy(struct mlx5_geneve *geneve) {}
geneve             27 drivers/net/ethernet/mellanox/mlx5/core/lib/geneve.h mlx5_geneve_tlv_option_add(struct mlx5_geneve *geneve, struct geneve_opt *opt) { return 0; }
geneve             29 drivers/net/ethernet/mellanox/mlx5/core/lib/geneve.h mlx5_geneve_tlv_option_del(struct mlx5_geneve *geneve) {}
geneve            852 drivers/net/ethernet/mellanox/mlx5/core/main.c 	dev->geneve = mlx5_geneve_create(dev);
geneve            902 drivers/net/ethernet/mellanox/mlx5/core/main.c 	mlx5_geneve_destroy(dev->geneve);
geneve            928 drivers/net/ethernet/mellanox/mlx5/core/main.c 	mlx5_geneve_destroy(dev->geneve);
geneve             48 drivers/net/geneve.c 	struct geneve_dev *geneve;
geneve            135 drivers/net/geneve.c 		if (eq_tun_id_and_vni((u8 *)&node->geneve->info.key.tun_id, vni) &&
geneve            136 drivers/net/geneve.c 		    addr == node->geneve->info.key.u.ipv4.dst)
geneve            137 drivers/net/geneve.c 			return node->geneve;
geneve            154 drivers/net/geneve.c 		if (eq_tun_id_and_vni((u8 *)&node->geneve->info.key.tun_id, vni) &&
geneve            155 drivers/net/geneve.c 		    ipv6_addr_equal(&addr6, &node->geneve->info.key.u.ipv6.dst))
geneve            156 drivers/net/geneve.c 			return node->geneve;
geneve            211 drivers/net/geneve.c static void geneve_rx(struct geneve_dev *geneve, struct geneve_sock *gs,
geneve            232 drivers/net/geneve.c 			geneve->dev->stats.rx_dropped++;
geneve            244 drivers/net/geneve.c 			geneve->dev->stats.rx_frame_errors++;
geneve            245 drivers/net/geneve.c 			geneve->dev->stats.rx_errors++;
geneve            251 drivers/net/geneve.c 	skb->protocol = eth_type_trans(skb, geneve->dev);
geneve            258 drivers/net/geneve.c 	if (ether_addr_equal(eth_hdr(skb)->h_source, geneve->dev->dev_addr)) {
geneve            259 drivers/net/geneve.c 		geneve->dev->stats.rx_errors++;
geneve            287 drivers/net/geneve.c 			++geneve->dev->stats.rx_frame_errors;
geneve            288 drivers/net/geneve.c 			++geneve->dev->stats.rx_errors;
geneve            294 drivers/net/geneve.c 	err = gro_cells_receive(&geneve->gro_cells, skb);
geneve            296 drivers/net/geneve.c 		stats = this_cpu_ptr(geneve->dev->tstats);
geneve            311 drivers/net/geneve.c 	struct geneve_dev *geneve = netdev_priv(dev);
geneve            318 drivers/net/geneve.c 	err = gro_cells_init(&geneve->gro_cells, dev);
geneve            324 drivers/net/geneve.c 	err = dst_cache_init(&geneve->info.dst_cache, GFP_KERNEL);
geneve            327 drivers/net/geneve.c 		gro_cells_destroy(&geneve->gro_cells);
geneve            335 drivers/net/geneve.c 	struct geneve_dev *geneve = netdev_priv(dev);
geneve            337 drivers/net/geneve.c 	dst_cache_destroy(&geneve->info.dst_cache);
geneve            338 drivers/net/geneve.c 	gro_cells_destroy(&geneve->gro_cells);
geneve            346 drivers/net/geneve.c 	struct geneve_dev *geneve;
geneve            366 drivers/net/geneve.c 	geneve = geneve_lookup_skb(gs, skb);
geneve            367 drivers/net/geneve.c 	if (!geneve)
geneve            373 drivers/net/geneve.c 				 !net_eq(geneve->net, dev_net(geneve->dev)))) {
geneve            374 drivers/net/geneve.c 		geneve->dev->stats.rx_dropped++;
geneve            378 drivers/net/geneve.c 	geneve_rx(geneve, gs, skb);
geneve            615 drivers/net/geneve.c static void geneve_sock_release(struct geneve_dev *geneve)
geneve            617 drivers/net/geneve.c 	struct geneve_sock *gs4 = rtnl_dereference(geneve->sock4);
geneve            619 drivers/net/geneve.c 	struct geneve_sock *gs6 = rtnl_dereference(geneve->sock6);
geneve            621 drivers/net/geneve.c 	rcu_assign_pointer(geneve->sock6, NULL);
geneve            624 drivers/net/geneve.c 	rcu_assign_pointer(geneve->sock4, NULL);
geneve            648 drivers/net/geneve.c static int geneve_sock_add(struct geneve_dev *geneve, bool ipv6)
geneve            650 drivers/net/geneve.c 	struct net *net = geneve->net;
geneve            657 drivers/net/geneve.c 	gs = geneve_find_sock(gn, ipv6 ? AF_INET6 : AF_INET, geneve->info.key.tp_dst);
geneve            663 drivers/net/geneve.c 	gs = geneve_socket_create(net, geneve->info.key.tp_dst, ipv6,
geneve            664 drivers/net/geneve.c 				  geneve->use_udp6_rx_checksums);
geneve            669 drivers/net/geneve.c 	gs->collect_md = geneve->collect_md;
geneve            672 drivers/net/geneve.c 		rcu_assign_pointer(geneve->sock6, gs);
geneve            673 drivers/net/geneve.c 		node = &geneve->hlist6;
geneve            677 drivers/net/geneve.c 		rcu_assign_pointer(geneve->sock4, gs);
geneve            678 drivers/net/geneve.c 		node = &geneve->hlist4;
geneve            680 drivers/net/geneve.c 	node->geneve = geneve;
geneve            682 drivers/net/geneve.c 	tunnel_id_to_vni(geneve->info.key.tun_id, vni);
geneve            690 drivers/net/geneve.c 	struct geneve_dev *geneve = netdev_priv(dev);
geneve            691 drivers/net/geneve.c 	bool metadata = geneve->collect_md;
geneve            695 drivers/net/geneve.c 	ipv6 = geneve->info.mode & IP_TUNNEL_INFO_IPV6 || metadata;
geneve            699 drivers/net/geneve.c 		ret = geneve_sock_add(geneve, true);
geneve            705 drivers/net/geneve.c 		ret = geneve_sock_add(geneve, false);
geneve            707 drivers/net/geneve.c 		geneve_sock_release(geneve);
geneve            714 drivers/net/geneve.c 	struct geneve_dev *geneve = netdev_priv(dev);
geneve            716 drivers/net/geneve.c 	hlist_del_init_rcu(&geneve->hlist4.hlist);
geneve            718 drivers/net/geneve.c 	hlist_del_init_rcu(&geneve->hlist6.hlist);
geneve            720 drivers/net/geneve.c 	geneve_sock_release(geneve);
geneve            779 drivers/net/geneve.c 	struct geneve_dev *geneve = netdev_priv(dev);
geneve            794 drivers/net/geneve.c 	if ((tos == 1) && !geneve->collect_md) {
geneve            806 drivers/net/geneve.c 	rt = ip_route_output_key(geneve->net, fl4);
geneve            829 drivers/net/geneve.c 	struct geneve_dev *geneve = netdev_priv(dev);
geneve            843 drivers/net/geneve.c 	if ((prio == 1) && !geneve->collect_md) {
geneve            856 drivers/net/geneve.c 	dst = ipv6_stub->ipv6_dst_lookup_flow(geneve->net, gs6->sock->sk, fl6,
geneve            875 drivers/net/geneve.c 			   struct geneve_dev *geneve,
geneve            878 drivers/net/geneve.c 	bool xnet = !net_eq(geneve->net, dev_net(geneve->dev));
geneve            879 drivers/net/geneve.c 	struct geneve_sock *gs4 = rcu_dereference(geneve->sock4);
geneve            895 drivers/net/geneve.c 	sport = udp_flow_src_port(geneve->net, skb, 1, USHRT_MAX, true);
geneve            896 drivers/net/geneve.c 	if (geneve->collect_md) {
geneve            903 drivers/net/geneve.c 		if (geneve->ttl_inherit)
geneve            909 drivers/net/geneve.c 		if (geneve->df == GENEVE_DF_SET) {
geneve            911 drivers/net/geneve.c 		} else if (geneve->df == GENEVE_DF_INHERIT) {
geneve            930 drivers/net/geneve.c 			    tos, ttl, df, sport, geneve->info.key.tp_dst,
geneve            931 drivers/net/geneve.c 			    !net_eq(geneve->net, dev_net(geneve->dev)),
geneve            938 drivers/net/geneve.c 			    struct geneve_dev *geneve,
geneve            941 drivers/net/geneve.c 	bool xnet = !net_eq(geneve->net, dev_net(geneve->dev));
geneve            942 drivers/net/geneve.c 	struct geneve_sock *gs6 = rcu_dereference(geneve->sock6);
geneve            956 drivers/net/geneve.c 	sport = udp_flow_src_port(geneve->net, skb, 1, USHRT_MAX, true);
geneve            957 drivers/net/geneve.c 	if (geneve->collect_md) {
geneve            963 drivers/net/geneve.c 		if (geneve->ttl_inherit)
geneve            975 drivers/net/geneve.c 			     info->key.label, sport, geneve->info.key.tp_dst,
geneve            983 drivers/net/geneve.c 	struct geneve_dev *geneve = netdev_priv(dev);
geneve            987 drivers/net/geneve.c 	if (geneve->collect_md) {
geneve            995 drivers/net/geneve.c 		info = &geneve->info;
geneve           1001 drivers/net/geneve.c 		err = geneve6_xmit_skb(skb, dev, geneve, info);
geneve           1004 drivers/net/geneve.c 		err = geneve_xmit_skb(skb, dev, geneve, info);
geneve           1035 drivers/net/geneve.c 	struct geneve_dev *geneve = netdev_priv(dev);
geneve           1040 drivers/net/geneve.c 		struct geneve_sock *gs4 = rcu_dereference(geneve->sock4);
geneve           1052 drivers/net/geneve.c 		struct geneve_sock *gs6 = rcu_dereference(geneve->sock6);
geneve           1065 drivers/net/geneve.c 	info->key.tp_src = udp_flow_src_port(geneve->net, skb,
geneve           1067 drivers/net/geneve.c 	info->key.tp_dst = geneve->info.key.tp_dst;
geneve           1224 drivers/net/geneve.c 	struct geneve_dev *geneve, *t = NULL;
geneve           1228 drivers/net/geneve.c 	list_for_each_entry(geneve, &gn->geneve_list, next) {
geneve           1229 drivers/net/geneve.c 		if (info->key.tp_dst == geneve->info.key.tp_dst) {
geneve           1230 drivers/net/geneve.c 			*tun_collect_md = geneve->collect_md;
geneve           1233 drivers/net/geneve.c 		if (info->key.tun_id == geneve->info.key.tun_id &&
geneve           1234 drivers/net/geneve.c 		    info->key.tp_dst == geneve->info.key.tp_dst &&
geneve           1235 drivers/net/geneve.c 		    !memcmp(&info->key.u, &geneve->info.key.u, sizeof(info->key.u)))
geneve           1236 drivers/net/geneve.c 			t = geneve;
geneve           1264 drivers/net/geneve.c 	struct geneve_dev *t, *geneve = netdev_priv(dev);
geneve           1274 drivers/net/geneve.c 	geneve->net = net;
geneve           1275 drivers/net/geneve.c 	geneve->dev = dev;
geneve           1306 drivers/net/geneve.c 	dst_cache_reset(&geneve->info.dst_cache);
geneve           1307 drivers/net/geneve.c 	geneve->info = *info;
geneve           1308 drivers/net/geneve.c 	geneve->collect_md = metadata;
geneve           1309 drivers/net/geneve.c 	geneve->use_udp6_rx_checksums = ipv6_rx_csum;
geneve           1310 drivers/net/geneve.c 	geneve->ttl_inherit = ttl_inherit;
geneve           1311 drivers/net/geneve.c 	geneve->df = df;
geneve           1317 drivers/net/geneve.c 	list_add(&geneve->next, &gn->geneve_list);
geneve           1497 drivers/net/geneve.c 	struct geneve_dev *geneve = netdev_priv(dev);
geneve           1508 drivers/net/geneve.c 		struct rtable *rt = ip_route_output_key(geneve->net, &fl4);
geneve           1523 drivers/net/geneve.c 		rt = rt6_lookup(geneve->net, &info->key.u.ipv6.dst, NULL, 0,
geneve           1579 drivers/net/geneve.c static void geneve_quiesce(struct geneve_dev *geneve, struct geneve_sock **gs4,
geneve           1582 drivers/net/geneve.c 	*gs4 = rtnl_dereference(geneve->sock4);
geneve           1583 drivers/net/geneve.c 	rcu_assign_pointer(geneve->sock4, NULL);
geneve           1587 drivers/net/geneve.c 	*gs6 = rtnl_dereference(geneve->sock6);
geneve           1588 drivers/net/geneve.c 	rcu_assign_pointer(geneve->sock6, NULL);
geneve           1598 drivers/net/geneve.c static void geneve_unquiesce(struct geneve_dev *geneve, struct geneve_sock *gs4,
geneve           1601 drivers/net/geneve.c 	rcu_assign_pointer(geneve->sock4, gs4);
geneve           1605 drivers/net/geneve.c 	rcu_assign_pointer(geneve->sock6, gs6);
geneve           1616 drivers/net/geneve.c 	struct geneve_dev *geneve = netdev_priv(dev);
geneve           1628 drivers/net/geneve.c 	if (geneve->collect_md)
geneve           1632 drivers/net/geneve.c 	memcpy(&info, &geneve->info, sizeof(info));
geneve           1633 drivers/net/geneve.c 	metadata = geneve->collect_md;
geneve           1634 drivers/net/geneve.c 	use_udp6_rx_checksums = geneve->use_udp6_rx_checksums;
geneve           1635 drivers/net/geneve.c 	ttl_inherit = geneve->ttl_inherit;
geneve           1641 drivers/net/geneve.c 	if (!geneve_dst_addr_equal(&geneve->info, &info)) {
geneve           1646 drivers/net/geneve.c 	geneve_quiesce(geneve, &gs4, &gs6);
geneve           1647 drivers/net/geneve.c 	geneve->info = info;
geneve           1648 drivers/net/geneve.c 	geneve->collect_md = metadata;
geneve           1649 drivers/net/geneve.c 	geneve->use_udp6_rx_checksums = use_udp6_rx_checksums;
geneve           1650 drivers/net/geneve.c 	geneve->ttl_inherit = ttl_inherit;
geneve           1651 drivers/net/geneve.c 	geneve_unquiesce(geneve, gs4, gs6);
geneve           1658 drivers/net/geneve.c 	struct geneve_dev *geneve = netdev_priv(dev);
geneve           1660 drivers/net/geneve.c 	list_del(&geneve->next);
geneve           1683 drivers/net/geneve.c 	struct geneve_dev *geneve = netdev_priv(dev);
geneve           1684 drivers/net/geneve.c 	struct ip_tunnel_info *info = &geneve->info;
geneve           1685 drivers/net/geneve.c 	bool ttl_inherit = geneve->ttl_inherit;
geneve           1686 drivers/net/geneve.c 	bool metadata = geneve->collect_md;
geneve           1719 drivers/net/geneve.c 	if (nla_put_u8(skb, IFLA_GENEVE_DF, geneve->df))
geneve           1730 drivers/net/geneve.c 		       !geneve->use_udp6_rx_checksums))
geneve           1832 drivers/net/geneve.c 	struct geneve_dev *geneve, *next;
geneve           1841 drivers/net/geneve.c 	list_for_each_entry_safe(geneve, next, &gn->geneve_list, next) {
geneve           1845 drivers/net/geneve.c 		if (!net_eq(dev_net(geneve->dev), net))
geneve           1846 drivers/net/geneve.c 			unregister_netdevice_queue(geneve->dev, head);
geneve            709 include/linux/mlx5/driver.h 	struct mlx5_geneve      *geneve;