Lines Matching refs:geneve

109 	struct geneve_dev *geneve;  in geneve_lookup()  local
115 hlist_for_each_entry_rcu(geneve, vni_list_head, hlist) { in geneve_lookup()
116 if (!memcmp(vni, geneve->vni, sizeof(geneve->vni)) && in geneve_lookup()
117 addr == geneve->remote.sin.sin_addr.s_addr) in geneve_lookup()
118 return geneve; in geneve_lookup()
128 struct geneve_dev *geneve; in geneve6_lookup() local
134 hlist_for_each_entry_rcu(geneve, vni_list_head, hlist) { in geneve6_lookup()
135 if (!memcmp(vni, geneve->vni, sizeof(geneve->vni)) && in geneve6_lookup()
136 ipv6_addr_equal(&addr6, &geneve->remote.sin6.sin6_addr)) in geneve6_lookup()
137 return geneve; in geneve6_lookup()
153 struct geneve_dev *geneve = NULL; in geneve_rx() local
181 geneve = geneve_lookup(gs, addr, vni); in geneve_rx()
195 geneve = geneve6_lookup(gs, addr6, vni); in geneve_rx()
198 if (!geneve) in geneve_rx()
225 skb_scrub_packet(skb, !net_eq(geneve->net, dev_net(geneve->dev))); in geneve_rx()
226 skb->protocol = eth_type_trans(skb, geneve->dev); in geneve_rx()
233 if (ether_addr_equal(eth_hdr(skb)->h_source, geneve->dev->dev_addr)) in geneve_rx()
258 ++geneve->dev->stats.rx_frame_errors; in geneve_rx()
259 ++geneve->dev->stats.rx_errors; in geneve_rx()
264 stats = this_cpu_ptr(geneve->dev->tstats); in geneve_rx()
270 gro_cells_receive(&geneve->gro_cells, skb); in geneve_rx()
280 struct geneve_dev *geneve = netdev_priv(dev); in geneve_init() local
287 err = gro_cells_init(&geneve->gro_cells, dev); in geneve_init()
298 struct geneve_dev *geneve = netdev_priv(dev); in geneve_uninit() local
300 gro_cells_destroy(&geneve->gro_cells); in geneve_uninit()
538 static void geneve_sock_release(struct geneve_dev *geneve) in geneve_sock_release() argument
540 __geneve_sock_release(geneve->sock4); in geneve_sock_release()
542 __geneve_sock_release(geneve->sock6); in geneve_sock_release()
561 static int geneve_sock_add(struct geneve_dev *geneve, bool ipv6) in geneve_sock_add() argument
563 struct net *net = geneve->net; in geneve_sock_add()
568 gs = geneve_find_sock(gn, ipv6 ? AF_INET6 : AF_INET, geneve->dst_port); in geneve_sock_add()
574 gs = geneve_socket_create(net, geneve->dst_port, ipv6); in geneve_sock_add()
579 gs->collect_md = geneve->collect_md; in geneve_sock_add()
582 geneve->sock6 = gs; in geneve_sock_add()
585 geneve->sock4 = gs; in geneve_sock_add()
587 hash = geneve_net_vni_hash(geneve->vni); in geneve_sock_add()
588 hlist_add_head_rcu(&geneve->hlist, &gs->vni_list[hash]); in geneve_sock_add()
594 struct geneve_dev *geneve = netdev_priv(dev); in geneve_open() local
595 bool ipv6 = geneve->remote.sa.sa_family == AF_INET6; in geneve_open()
596 bool metadata = geneve->collect_md; in geneve_open()
599 geneve->sock4 = NULL; in geneve_open()
601 geneve->sock6 = NULL; in geneve_open()
603 ret = geneve_sock_add(geneve, true); in geneve_open()
606 ret = geneve_sock_add(geneve, false); in geneve_open()
608 geneve_sock_release(geneve); in geneve_open()
615 struct geneve_dev *geneve = netdev_priv(dev); in geneve_stop() local
617 if (!hlist_unhashed(&geneve->hlist)) in geneve_stop()
618 hlist_del_rcu(&geneve->hlist); in geneve_stop()
619 geneve_sock_release(geneve); in geneve_stop()
716 struct geneve_dev *geneve = netdev_priv(dev); in geneve_get_v4_rt() local
729 tos = geneve->tos; in geneve_get_v4_rt()
737 fl4->daddr = geneve->remote.sin.sin_addr.s_addr; in geneve_get_v4_rt()
740 rt = ip_route_output_key(geneve->net, fl4); in geneve_get_v4_rt()
759 struct geneve_dev *geneve = netdev_priv(dev); in geneve_get_v6_dst() local
760 struct geneve_sock *gs6 = geneve->sock6; in geneve_get_v6_dst()
773 prio = geneve->tos; in geneve_get_v6_dst()
781 fl6->daddr = geneve->remote.sin6.sin6_addr; in geneve_get_v6_dst()
784 if (ipv6_stub->ipv6_dst_lookup(geneve->net, gs6->sock->sk, &dst, fl6)) { in geneve_get_v6_dst()
815 struct geneve_dev *geneve = netdev_priv(dev); in geneve_xmit_skb() local
816 struct geneve_sock *gs4 = geneve->sock4; in geneve_xmit_skb()
825 bool xnet = !net_eq(geneve->net, dev_net(geneve->dev)); in geneve_xmit_skb()
827 if (geneve->collect_md) { in geneve_xmit_skb()
842 sport = udp_flow_src_port(geneve->net, skb, 1, USHRT_MAX, true); in geneve_xmit_skb()
867 err = geneve_build_skb(rt, skb, 0, geneve->vni, in geneve_xmit_skb()
873 ttl = geneve->ttl; in geneve_xmit_skb()
880 tos, ttl, df, sport, geneve->dst_port, in geneve_xmit_skb()
881 !net_eq(geneve->net, dev_net(geneve->dev)), in geneve_xmit_skb()
903 struct geneve_dev *geneve = netdev_priv(dev); in geneve6_xmit_skb() local
904 struct geneve_sock *gs6 = geneve->sock6; in geneve6_xmit_skb()
912 bool xnet = !net_eq(geneve->net, dev_net(geneve->dev)); in geneve6_xmit_skb()
914 if (geneve->collect_md) { in geneve6_xmit_skb()
927 sport = udp_flow_src_port(geneve->net, skb, 1, USHRT_MAX, true); in geneve6_xmit_skb()
952 err = geneve6_build_skb(dst, skb, 0, geneve->vni, in geneve6_xmit_skb()
958 ttl = geneve->ttl; in geneve6_xmit_skb()
965 sport, geneve->dst_port, !udp_csum); in geneve6_xmit_skb()
983 struct geneve_dev *geneve = netdev_priv(dev); in geneve_xmit() local
986 if (geneve->collect_md) in geneve_xmit()
991 (!info && geneve->remote.sa.sa_family == AF_INET6)) in geneve_xmit()
1011 struct geneve_dev *geneve = netdev_priv(dev); in geneve_fill_metadata_dst() local
1039 info->key.tp_src = udp_flow_src_port(geneve->net, skb, in geneve_fill_metadata_dst()
1041 info->key.tp_dst = geneve->dst_port; in geneve_fill_metadata_dst()
1139 struct geneve_dev *geneve, *t; in geneve_find_dev() local
1144 list_for_each_entry(geneve, &gn->geneve_list, next) { in geneve_find_dev()
1145 if (geneve->dst_port == dst_port) { in geneve_find_dev()
1146 *tun_collect_md = geneve->collect_md; in geneve_find_dev()
1149 if (!memcmp(vni, geneve->vni, sizeof(geneve->vni)) && in geneve_find_dev()
1150 !memcmp(remote, &geneve->remote, sizeof(geneve->remote)) && in geneve_find_dev()
1151 dst_port == geneve->dst_port) in geneve_find_dev()
1152 t = geneve; in geneve_find_dev()
1163 struct geneve_dev *t, *geneve = netdev_priv(dev); in geneve_configure() local
1173 geneve->net = net; in geneve_configure()
1174 geneve->dev = dev; in geneve_configure()
1176 geneve->vni[0] = (vni & 0x00ff0000) >> 16; in geneve_configure()
1177 geneve->vni[1] = (vni & 0x0000ff00) >> 8; in geneve_configure()
1178 geneve->vni[2] = vni & 0x000000ff; in geneve_configure()
1185 geneve->remote = *remote; in geneve_configure()
1187 geneve->ttl = ttl; in geneve_configure()
1188 geneve->tos = tos; in geneve_configure()
1189 geneve->dst_port = dst_port; in geneve_configure()
1190 geneve->collect_md = metadata; in geneve_configure()
1192 t = geneve_find_dev(gn, dst_port, remote, geneve->vni, in geneve_configure()
1217 list_add(&geneve->next, &gn->geneve_list); in geneve_configure()
1275 struct geneve_dev *geneve = netdev_priv(dev); in geneve_dellink() local
1277 list_del(&geneve->next); in geneve_dellink()
1294 struct geneve_dev *geneve = netdev_priv(dev); in geneve_fill_info() local
1297 vni = (geneve->vni[0] << 16) | (geneve->vni[1] << 8) | geneve->vni[2]; in geneve_fill_info()
1301 if (geneve->remote.sa.sa_family == AF_INET) { in geneve_fill_info()
1303 geneve->remote.sin.sin_addr.s_addr)) in geneve_fill_info()
1308 &geneve->remote.sin6.sin6_addr)) in geneve_fill_info()
1313 if (nla_put_u8(skb, IFLA_GENEVE_TTL, geneve->ttl) || in geneve_fill_info()
1314 nla_put_u8(skb, IFLA_GENEVE_TOS, geneve->tos)) in geneve_fill_info()
1317 if (nla_put_be16(skb, IFLA_GENEVE_PORT, geneve->dst_port)) in geneve_fill_info()
1320 if (geneve->collect_md) { in geneve_fill_info()
1389 struct geneve_dev *geneve, *next; in geneve_exit_net() local
1401 list_for_each_entry_safe(geneve, next, &gn->geneve_list, next) { in geneve_exit_net()
1405 if (!net_eq(dev_net(geneve->dev), net)) in geneve_exit_net()
1406 unregister_netdevice_queue(geneve->dev, &list); in geneve_exit_net()