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;