2 * GENEVE: Generic Network Virtualization Encapsulation
4 * Copyright (c) 2015 Red Hat, Inc.
6 * This program is free software; you can redistribute it and/or modify
7 * it under the terms of the GNU General Public License version 2 as
8 * published by the Free Software Foundation.
11 #define pr_fmt(fmt) KBUILD_MODNAME ": " fmt
13 #include <linux/kernel.h>
14 #include <linux/module.h>
15 #include <linux/netdevice.h>
16 #include <linux/etherdevice.h>
17 #include <linux/hash.h>
18 #include <linux/if_link.h>
20 #include <net/dst_metadata.h>
21 #include <net/net_namespace.h>
22 #include <net/netns/generic.h>
23 #include <net/rtnetlink.h>
24 #include <net/geneve.h>
25 #include <net/protocol.h>
28 #include "vport-netdev.h"
31 #ifndef HAVE_METADATA_DST
32 #define GENEVE_NETDEV_VER "0.6"
34 #define GENEVE_UDP_PORT 6081
36 #define GENEVE_N_VID (1u << 24)
37 #define GENEVE_VID_MASK (GENEVE_N_VID - 1)
39 #define VNI_HASH_BITS 10
40 #define VNI_HASH_SIZE (1<<VNI_HASH_BITS)
43 #define GENEVE_BASE_HLEN (sizeof(struct udphdr) + sizeof(struct genevehdr))
45 /* per-network namespace private data for this module */
47 struct list_head geneve_list
;
48 struct list_head sock_list
;
51 static int geneve_net_id
;
53 /* Pseudo network device */
55 struct hlist_node hlist
; /* vni hash table */
56 struct net
*net
; /* netns for packet i/o */
57 struct net_device
*dev
; /* netdev for geneve tunnel */
58 struct geneve_sock
*sock
; /* socket used for geneve tunnel */
59 u8 vni
[3]; /* virtual network ID for tunnel */
60 u8 ttl
; /* TTL override */
61 u8 tos
; /* TOS override */
62 struct sockaddr_in remote
; /* IPv4 address for link partner */
63 struct list_head next
; /* geneve's per namespace list */
70 struct list_head list
;
74 #ifdef HAVE_UDP_OFFLOAD
75 struct udp_offload udp_offloads
;
77 struct hlist_head vni_list
[VNI_HASH_SIZE
];
80 static inline __u32
geneve_net_vni_hash(u8 vni
[3])
84 vnid
= (vni
[0] << 16) | (vni
[1] << 8) | vni
[2];
85 return hash_32(vnid
, VNI_HASH_BITS
);
88 static __be64
vni_to_tunnel_id(const __u8
*vni
)
91 return (vni
[0] << 16) | (vni
[1] << 8) | vni
[2];
93 return (__force __be64
)(((__force u64
)vni
[0] << 40) |
94 ((__force u64
)vni
[1] << 48) |
95 ((__force u64
)vni
[2] << 56));
99 static struct geneve_dev
*geneve_lookup(struct geneve_sock
*gs
,
100 __be32 addr
, u8 vni
[])
102 struct hlist_head
*vni_list_head
;
103 struct geneve_dev
*geneve
;
106 /* Find the device for this VNI */
107 hash
= geneve_net_vni_hash(vni
);
108 vni_list_head
= &gs
->vni_list
[hash
];
109 hlist_for_each_entry_rcu(geneve
, vni_list_head
, hlist
) {
110 if (!memcmp(vni
, geneve
->vni
, sizeof(geneve
->vni
)) &&
111 addr
== geneve
->remote
.sin_addr
.s_addr
)
117 static inline struct genevehdr
*geneve_hdr(const struct sk_buff
*skb
)
119 return (struct genevehdr
*)(udp_hdr(skb
) + 1);
122 /* geneve receive/decap routine */
123 static void geneve_rx(struct geneve_sock
*gs
, struct sk_buff
*skb
)
125 struct genevehdr
*gnvh
= geneve_hdr(skb
);
126 struct metadata_dst
*tun_dst
;
127 struct geneve_dev
*geneve
= NULL
;
128 #ifdef HAVE_DEV_TSTATS
129 struct pcpu_sw_netstats
*stats
;
136 struct metadata_dst dst
;
137 char buf
[sizeof(struct metadata_dst
) + 256];
140 iph
= ip_hdr(skb
); /* outer IP header... */
142 if (gs
->collect_md
) {
143 static u8 zero_vni
[3];
152 geneve
= geneve_lookup(gs
, addr
, vni
);
156 if (ip_tunnel_collect_metadata() || gs
->collect_md
) {
159 flags
= TUNNEL_KEY
| TUNNEL_GENEVE_OPT
|
160 (gnvh
->oam
? TUNNEL_OAM
: 0) |
161 (gnvh
->critical
? TUNNEL_CRIT_OPT
: 0);
164 ovs_udp_tun_rx_dst(&tun_dst
->u
.tun_info
, skb
, AF_INET
, flags
,
165 vni_to_tunnel_id(gnvh
->vni
), gnvh
->opt_len
* 4);
166 /* Update tunnel dst according to Geneve options. */
167 ip_tunnel_info_opts_set(&tun_dst
->u
.tun_info
,
168 gnvh
->options
, gnvh
->opt_len
* 4);
170 /* Drop packets w/ critical options,
171 * since we don't support any...
178 skb_reset_mac_header(skb
);
179 skb_scrub_packet(skb
, !net_eq(geneve
->net
, dev_net(geneve
->dev
)));
180 skb
->protocol
= eth_type_trans(skb
, geneve
->dev
);
181 skb_postpull_rcsum(skb
, eth_hdr(skb
), ETH_HLEN
);
184 ovs_skb_dst_set(skb
, &tun_dst
->dst
);
187 /* Ignore packet loops (and multicast echo) */
188 if (ether_addr_equal(eth_hdr(skb
)->h_source
, geneve
->dev
->dev_addr
))
191 skb_reset_network_header(skb
);
193 err
= IP_ECN_decapsulate(iph
, skb
);
197 ++geneve
->dev
->stats
.rx_frame_errors
;
198 ++geneve
->dev
->stats
.rx_errors
;
203 #ifdef HAVE_DEV_TSTATS
204 stats
= this_cpu_ptr((struct pcpu_sw_netstats __percpu
*)geneve
->dev
->tstats
);
205 u64_stats_update_begin(&stats
->syncp
);
207 stats
->rx_bytes
+= skb
->len
;
208 u64_stats_update_end(&stats
->syncp
);
210 netdev_port_receive(skb
, &tun_dst
->u
.tun_info
);
213 /* Consume bad packet */
217 #ifdef HAVE_DEV_TSTATS
218 /* Setup stats when device is created */
219 static int geneve_init(struct net_device
*dev
)
221 dev
->tstats
= (typeof(dev
->tstats
)) netdev_alloc_pcpu_stats(struct pcpu_sw_netstats
);
228 static void geneve_uninit(struct net_device
*dev
)
230 free_percpu(dev
->tstats
);
234 /* Callback from net/ipv4/udp.c to receive packets */
235 static int geneve_udp_encap_recv(struct sock
*sk
, struct sk_buff
*skb
)
237 struct genevehdr
*geneveh
;
238 struct geneve_sock
*gs
;
241 /* Need Geneve and inner Ethernet header to be present */
242 if (unlikely(!pskb_may_pull(skb
, GENEVE_BASE_HLEN
)))
245 /* Return packets with reserved bits set */
246 geneveh
= geneve_hdr(skb
);
247 if (unlikely(geneveh
->ver
!= GENEVE_VER
))
250 if (unlikely(geneveh
->proto_type
!= htons(ETH_P_TEB
)))
253 opts_len
= geneveh
->opt_len
* 4;
254 if (iptunnel_pull_header(skb
, GENEVE_BASE_HLEN
+ opts_len
,
258 gs
= rcu_dereference_sk_user_data(sk
);
266 /* Consume bad packet */
271 /* Let the UDP layer deal with the skb */
275 static struct socket
*geneve_create_sock(struct net
*net
, bool ipv6
,
279 struct udp_port_cfg udp_conf
;
282 memset(&udp_conf
, 0, sizeof(udp_conf
));
285 udp_conf
.family
= AF_INET6
;
287 udp_conf
.family
= AF_INET
;
288 udp_conf
.local_ip
.s_addr
= htonl(INADDR_ANY
);
291 udp_conf
.local_udp_port
= port
;
293 /* Open UDP socket */
294 err
= udp_sock_create(net
, &udp_conf
, &sock
);
301 #ifdef HAVE_UDP_OFFLOAD
302 static void geneve_notify_add_rx_port(struct geneve_sock
*gs
)
304 struct sock
*sk
= gs
->sock
->sk
;
305 sa_family_t sa_family
= sk
->sk_family
;
308 if (sa_family
== AF_INET
) {
309 err
= udp_add_offload(&gs
->udp_offloads
);
311 pr_warn("geneve: udp_add_offload failed with status %d\n",
316 static int geneve_hlen(struct genevehdr
*gh
)
318 return sizeof(*gh
) + gh
->opt_len
* 4;
321 #ifndef HAVE_UDP_OFFLOAD_ARG_UOFF
322 static struct sk_buff
**geneve_gro_receive(struct sk_buff
**head
,
325 static struct sk_buff
**geneve_gro_receive(struct sk_buff
**head
,
327 struct udp_offload
*uoff
)
330 struct sk_buff
*p
, **pp
= NULL
;
331 struct genevehdr
*gh
, *gh2
;
332 unsigned int hlen
, gh_len
, off_gnv
;
333 const struct packet_offload
*ptype
;
337 off_gnv
= skb_gro_offset(skb
);
338 hlen
= off_gnv
+ sizeof(*gh
);
339 gh
= skb_gro_header_fast(skb
, off_gnv
);
340 if (skb_gro_header_hard(skb
, hlen
)) {
341 gh
= skb_gro_header_slow(skb
, hlen
, off_gnv
);
346 if (gh
->ver
!= GENEVE_VER
|| gh
->oam
)
348 gh_len
= geneve_hlen(gh
);
350 hlen
= off_gnv
+ gh_len
;
351 if (skb_gro_header_hard(skb
, hlen
)) {
352 gh
= skb_gro_header_slow(skb
, hlen
, off_gnv
);
359 for (p
= *head
; p
; p
= p
->next
) {
360 if (!NAPI_GRO_CB(p
)->same_flow
)
363 gh2
= (struct genevehdr
*)(p
->data
+ off_gnv
);
364 if (gh
->opt_len
!= gh2
->opt_len
||
365 memcmp(gh
, gh2
, gh_len
)) {
366 NAPI_GRO_CB(p
)->same_flow
= 0;
371 type
= gh
->proto_type
;
374 ptype
= gro_find_receive_by_type(type
);
380 skb_gro_pull(skb
, gh_len
);
381 skb_gro_postpull_rcsum(skb
, gh
, gh_len
);
382 pp
= ptype
->callbacks
.gro_receive(head
, skb
);
387 NAPI_GRO_CB(skb
)->flush
|= flush
;
392 #ifndef HAVE_UDP_OFFLOAD_ARG_UOFF
393 static int geneve_gro_complete(struct sk_buff
*skb
, int nhoff
)
395 static int geneve_gro_complete(struct sk_buff
*skb
, int nhoff
,
396 struct udp_offload
*uoff
)
399 struct genevehdr
*gh
;
400 struct packet_offload
*ptype
;
405 udp_tunnel_gro_complete(skb
, nhoff
);
407 gh
= (struct genevehdr
*)(skb
->data
+ nhoff
);
408 gh_len
= geneve_hlen(gh
);
409 type
= gh
->proto_type
;
412 ptype
= gro_find_complete_by_type(type
);
414 err
= ptype
->callbacks
.gro_complete(skb
, nhoff
+ gh_len
);
421 /* Create new listen socket if needed */
422 static struct geneve_sock
*geneve_socket_create(struct net
*net
, __be16 port
,
425 struct geneve_net
*gn
= net_generic(net
, geneve_net_id
);
426 struct geneve_sock
*gs
;
428 struct udp_tunnel_sock_cfg tunnel_cfg
;
431 gs
= kzalloc(sizeof(*gs
), GFP_KERNEL
);
433 return ERR_PTR(-ENOMEM
);
435 sock
= geneve_create_sock(net
, ipv6
, port
);
438 return ERR_CAST(sock
);
443 for (h
= 0; h
< VNI_HASH_SIZE
; ++h
)
444 INIT_HLIST_HEAD(&gs
->vni_list
[h
]);
446 /* Initialize the geneve udp offloads structure */
447 #ifdef HAVE_UDP_OFFLOAD
448 gs
->udp_offloads
.port
= port
;
449 gs
->udp_offloads
.callbacks
.gro_receive
= geneve_gro_receive
;
450 gs
->udp_offloads
.callbacks
.gro_complete
= geneve_gro_complete
;
451 geneve_notify_add_rx_port(gs
);
453 /* Mark socket as an encapsulation socket */
454 tunnel_cfg
.sk_user_data
= gs
;
455 tunnel_cfg
.encap_type
= 1;
456 tunnel_cfg
.encap_rcv
= geneve_udp_encap_recv
;
457 tunnel_cfg
.encap_destroy
= NULL
;
458 setup_udp_tunnel_sock(net
, sock
, &tunnel_cfg
);
459 list_add(&gs
->list
, &gn
->sock_list
);
463 static void geneve_notify_del_rx_port(struct geneve_sock
*gs
)
465 #ifdef HAVE_UDP_OFFLOAD
466 struct sock
*sk
= gs
->sock
->sk
;
467 sa_family_t sa_family
= sk
->sk_family
;
469 if (sa_family
== AF_INET
)
470 udp_del_offload(&gs
->udp_offloads
);
474 static void free_gs_rcu(struct rcu_head
*rcu
)
476 struct geneve_sock
*gs
= container_of(rcu
, struct geneve_sock
, rcu
);
481 static void geneve_sock_release(struct geneve_sock
*gs
)
487 geneve_notify_del_rx_port(gs
);
488 udp_tunnel_sock_release(gs
->sock
);
489 call_rcu(&gs
->rcu
, free_gs_rcu
);
492 static struct geneve_sock
*geneve_find_sock(struct geneve_net
*gn
,
495 struct geneve_sock
*gs
;
497 list_for_each_entry(gs
, &gn
->sock_list
, list
) {
498 if (inet_sport(gs
->sock
->sk
) == dst_port
&&
499 inet_sk(gs
->sock
->sk
)->sk
.sk_family
== AF_INET
) {
506 static int geneve_open(struct net_device
*dev
)
508 struct geneve_dev
*geneve
= netdev_priv(dev
);
509 struct net
*net
= geneve
->net
;
510 struct geneve_net
*gn
= net_generic(net
, geneve_net_id
);
511 struct geneve_sock
*gs
;
514 gs
= geneve_find_sock(gn
, geneve
->dst_port
);
520 gs
= geneve_socket_create(net
, geneve
->dst_port
, false);
525 gs
->collect_md
= geneve
->collect_md
;
528 hash
= geneve_net_vni_hash(geneve
->vni
);
529 hlist_add_head_rcu(&geneve
->hlist
, &gs
->vni_list
[hash
]);
533 static int geneve_stop(struct net_device
*dev
)
535 struct geneve_dev
*geneve
= netdev_priv(dev
);
536 struct geneve_sock
*gs
= geneve
->sock
;
538 if (!hlist_unhashed(&geneve
->hlist
))
539 hlist_del_rcu(&geneve
->hlist
);
540 geneve_sock_release(gs
);
544 static int geneve_build_skb(struct rtable
*rt
, struct sk_buff
*skb
,
545 __be16 tun_flags
, u8 vni
[3], u8 opt_len
, u8
*opt
,
548 struct genevehdr
*gnvh
;
552 min_headroom
= LL_RESERVED_SPACE(rt_dst(rt
).dev
) + rt_dst(rt
).header_len
553 + GENEVE_BASE_HLEN
+ opt_len
+ sizeof(struct iphdr
)
554 + (skb_vlan_tag_present(skb
) ? VLAN_HLEN
: 0);
555 err
= skb_cow_head(skb
, min_headroom
);
561 skb
= vlan_hwaccel_push_inside(skb
);
567 skb
= udp_tunnel_handle_offloads(skb
, csum
, 0, false);
572 gnvh
= (struct genevehdr
*)__skb_push(skb
, sizeof(*gnvh
) + opt_len
);
573 gnvh
->ver
= GENEVE_VER
;
574 gnvh
->opt_len
= opt_len
/ 4;
575 gnvh
->oam
= !!(tun_flags
& TUNNEL_OAM
);
576 gnvh
->critical
= !!(tun_flags
& TUNNEL_CRIT_OPT
);
578 memcpy(gnvh
->vni
, vni
, 3);
579 gnvh
->proto_type
= htons(ETH_P_TEB
);
581 memcpy(gnvh
->options
, opt
, opt_len
);
583 ovs_skb_set_inner_protocol(skb
, htons(ETH_P_TEB
));
591 static struct rtable
*geneve_get_rt(struct sk_buff
*skb
,
592 struct net_device
*dev
,
594 struct ip_tunnel_info
*info
)
596 struct geneve_dev
*geneve
= netdev_priv(dev
);
597 struct rtable
*rt
= NULL
;
600 memset(fl4
, 0, sizeof(*fl4
));
601 fl4
->flowi4_mark
= skb
->mark
;
602 fl4
->flowi4_proto
= IPPROTO_UDP
;
605 fl4
->daddr
= info
->key
.u
.ipv4
.dst
;
606 fl4
->saddr
= info
->key
.u
.ipv4
.src
;
607 fl4
->flowi4_tos
= RT_TOS(info
->key
.tos
);
611 const struct iphdr
*iip
= ip_hdr(skb
);
613 tos
= ip_tunnel_get_dsfield(iip
, skb
);
616 fl4
->flowi4_tos
= RT_TOS(tos
);
617 fl4
->daddr
= geneve
->remote
.sin_addr
.s_addr
;
620 rt
= ip_route_output_key(geneve
->net
, fl4
);
622 netdev_dbg(dev
, "no route to %pI4\n", &fl4
->daddr
);
623 dev
->stats
.tx_carrier_errors
++;
626 if (rt_dst(rt
).dev
== dev
) { /* is this necessary? */
627 netdev_dbg(dev
, "circular route to %pI4\n", &fl4
->daddr
);
628 dev
->stats
.collisions
++;
630 return ERR_PTR(-EINVAL
);
635 /* Convert 64 bit tunnel ID to 24 bit VNI. */
636 static void tunnel_id_to_vni(__be64 tun_id
, __u8
*vni
)
639 vni
[0] = (__force __u8
)(tun_id
>> 16);
640 vni
[1] = (__force __u8
)(tun_id
>> 8);
641 vni
[2] = (__force __u8
)tun_id
;
643 vni
[0] = (__force __u8
)((__force u64
)tun_id
>> 40);
644 vni
[1] = (__force __u8
)((__force u64
)tun_id
>> 48);
645 vni
[2] = (__force __u8
)((__force u64
)tun_id
>> 56);
649 netdev_tx_t
rpl_geneve_xmit(struct sk_buff
*skb
)
651 struct net_device
*dev
= skb
->dev
;
652 struct geneve_dev
*geneve
= netdev_priv(dev
);
653 struct geneve_sock
*gs
= geneve
->sock
;
654 struct ip_tunnel_info
*info
= NULL
;
655 struct rtable
*rt
= NULL
;
656 const struct iphdr
*iip
; /* interior IP header */
664 if (geneve
->collect_md
) {
665 info
= skb_tunnel_info(skb
);
666 if (unlikely(info
&& !(info
->mode
& IP_TUNNEL_INFO_TX
))) {
667 netdev_dbg(dev
, "no tunnel metadata\n");
670 if (info
&& ip_tunnel_info_af(info
) != AF_INET
)
674 rt
= geneve_get_rt(skb
, dev
, &fl4
, info
);
676 netdev_dbg(dev
, "no route to %pI4\n", &fl4
.daddr
);
677 dev
->stats
.tx_carrier_errors
++;
681 sport
= udp_flow_src_port(geneve
->net
, skb
, 1, USHRT_MAX
, true);
682 skb_reset_mac_header(skb
);
687 const struct ip_tunnel_key
*key
= &info
->key
;
691 tunnel_id_to_vni(key
->tun_id
, vni
);
692 if (key
->tun_flags
& TUNNEL_GENEVE_OPT
)
693 opts
= ip_tunnel_info_opts(info
);
695 udp_csum
= !!(key
->tun_flags
& TUNNEL_CSUM
);
696 err
= geneve_build_skb(rt
, skb
, key
->tun_flags
, vni
,
697 info
->options_len
, opts
, udp_csum
);
701 tos
= ip_tunnel_ecn_encap(key
->tos
, iip
, skb
);
703 df
= key
->tun_flags
& TUNNEL_DONT_FRAGMENT
? htons(IP_DF
) : 0;
706 err
= geneve_build_skb(rt
, skb
, 0, geneve
->vni
,
711 tos
= ip_tunnel_ecn_encap(fl4
.flowi4_tos
, iip
, skb
);
713 if (!ttl
&& IN_MULTICAST(ntohl(fl4
.daddr
)))
715 ttl
= ttl
? : ip4_dst_hoplimit(&rt_dst(rt
));
718 err
= udp_tunnel_xmit_skb(rt
, gs
->sock
->sk
, skb
, fl4
.saddr
, fl4
.daddr
,
719 tos
, ttl
, df
, sport
, geneve
->dst_port
,
720 !net_eq(geneve
->net
, dev_net(geneve
->dev
)),
723 iptunnel_xmit_stats(err
, &dev
->stats
, (struct pcpu_sw_netstats __percpu
*) dev
->tstats
);
729 dev
->stats
.tx_errors
++;
732 EXPORT_SYMBOL(rpl_geneve_xmit
);
734 static netdev_tx_t
geneve_dev_xmit(struct sk_buff
*skb
, struct net_device
*dev
)
736 /* Drop All packets coming from networking stack. OVS-CB is
737 * not initialized for these packets.
741 dev
->stats
.tx_dropped
++;
745 static const struct net_device_ops geneve_netdev_ops
= {
746 #ifdef HAVE_DEV_TSTATS
747 .ndo_init
= geneve_init
,
748 .ndo_uninit
= geneve_uninit
,
749 .ndo_get_stats64
= ip_tunnel_get_stats64
,
751 .ndo_open
= geneve_open
,
752 .ndo_stop
= geneve_stop
,
753 .ndo_start_xmit
= geneve_dev_xmit
,
754 .ndo_change_mtu
= eth_change_mtu
,
755 .ndo_validate_addr
= eth_validate_addr
,
756 .ndo_set_mac_address
= eth_mac_addr
,
759 static void geneve_get_drvinfo(struct net_device
*dev
,
760 struct ethtool_drvinfo
*drvinfo
)
762 strlcpy(drvinfo
->version
, GENEVE_NETDEV_VER
, sizeof(drvinfo
->version
));
763 strlcpy(drvinfo
->driver
, "geneve", sizeof(drvinfo
->driver
));
766 static const struct ethtool_ops geneve_ethtool_ops
= {
767 .get_drvinfo
= geneve_get_drvinfo
,
768 .get_link
= ethtool_op_get_link
,
771 /* Info for udev, that this is a virtual tunnel endpoint */
772 static struct device_type geneve_type
= {
776 /* Initialize the device structure. */
777 static void geneve_setup(struct net_device
*dev
)
781 dev
->netdev_ops
= &geneve_netdev_ops
;
782 dev
->ethtool_ops
= &geneve_ethtool_ops
;
783 dev
->destructor
= free_netdev
;
785 SET_NETDEV_DEVTYPE(dev
, &geneve_type
);
787 dev
->features
|= NETIF_F_LLTX
;
788 dev
->features
|= NETIF_F_SG
| NETIF_F_HW_CSUM
;
789 dev
->features
|= NETIF_F_RXCSUM
;
790 dev
->features
|= NETIF_F_GSO_SOFTWARE
;
792 #if LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,39)
793 dev
->hw_features
|= NETIF_F_SG
| NETIF_F_HW_CSUM
| NETIF_F_RXCSUM
;
794 dev
->hw_features
|= NETIF_F_GSO_SOFTWARE
;
800 dev
->priv_flags
|= IFF_LIVE_ADDR_CHANGE
| IFF_NO_QUEUE
;
801 eth_hw_addr_random(dev
);
804 static const struct nla_policy geneve_policy
[IFLA_GENEVE_MAX
+ 1] = {
805 [IFLA_GENEVE_ID
] = { .type
= NLA_U32
},
806 [IFLA_GENEVE_REMOTE
] = { .len
= FIELD_SIZEOF(struct iphdr
, daddr
) },
807 [IFLA_GENEVE_TTL
] = { .type
= NLA_U8
},
808 [IFLA_GENEVE_TOS
] = { .type
= NLA_U8
},
809 [IFLA_GENEVE_PORT
] = { .type
= NLA_U16
},
810 [IFLA_GENEVE_COLLECT_METADATA
] = { .type
= NLA_FLAG
},
813 static int geneve_validate(struct nlattr
*tb
[], struct nlattr
*data
[])
815 if (tb
[IFLA_ADDRESS
]) {
816 if (nla_len(tb
[IFLA_ADDRESS
]) != ETH_ALEN
)
819 if (!is_valid_ether_addr(nla_data(tb
[IFLA_ADDRESS
])))
820 return -EADDRNOTAVAIL
;
826 if (data
[IFLA_GENEVE_ID
]) {
827 __u32 vni
= nla_get_u32(data
[IFLA_GENEVE_ID
]);
829 if (vni
>= GENEVE_VID_MASK
)
836 static struct geneve_dev
*geneve_find_dev(struct geneve_net
*gn
,
840 bool *tun_on_same_port
,
841 bool *tun_collect_md
)
843 struct geneve_dev
*geneve
, *t
;
845 *tun_on_same_port
= false;
846 *tun_collect_md
= false;
848 list_for_each_entry(geneve
, &gn
->geneve_list
, next
) {
849 if (geneve
->dst_port
== dst_port
) {
850 *tun_collect_md
= geneve
->collect_md
;
851 *tun_on_same_port
= true;
853 if (!memcmp(vni
, geneve
->vni
, sizeof(geneve
->vni
)) &&
854 rem_addr
== geneve
->remote
.sin_addr
.s_addr
&&
855 dst_port
== geneve
->dst_port
)
861 static int geneve_configure(struct net
*net
, struct net_device
*dev
,
862 __be32 rem_addr
, __u32 vni
, __u8 ttl
, __u8 tos
,
863 __be16 dst_port
, bool metadata
)
865 struct geneve_net
*gn
= net_generic(net
, geneve_net_id
);
866 struct geneve_dev
*t
, *geneve
= netdev_priv(dev
);
867 bool tun_collect_md
, tun_on_same_port
;
871 if (rem_addr
|| vni
|| tos
|| ttl
)
878 geneve
->vni
[0] = (vni
& 0x00ff0000) >> 16;
879 geneve
->vni
[1] = (vni
& 0x0000ff00) >> 8;
880 geneve
->vni
[2] = vni
& 0x000000ff;
882 geneve
->remote
.sin_addr
.s_addr
= rem_addr
;
883 if (IN_MULTICAST(ntohl(geneve
->remote
.sin_addr
.s_addr
)))
888 geneve
->dst_port
= dst_port
;
889 geneve
->collect_md
= metadata
;
891 t
= geneve_find_dev(gn
, dst_port
, rem_addr
, geneve
->vni
,
892 &tun_on_same_port
, &tun_collect_md
);
897 if (tun_on_same_port
)
904 err
= register_netdevice(dev
);
908 list_add(&geneve
->next
, &gn
->geneve_list
);
912 #if LINUX_VERSION_CODE < KERNEL_VERSION(2,6,39)
913 static int geneve_newlink(struct net_device
*dev
,
914 struct nlattr
*tb
[], struct nlattr
*data
[])
916 struct net
*net
= &init_net
;
918 static int geneve_newlink(struct net
*net
, struct net_device
*dev
,
919 struct nlattr
*tb
[], struct nlattr
*data
[])
922 __be16 dst_port
= htons(GENEVE_UDP_PORT
);
923 __u8 ttl
= 0, tos
= 0;
924 bool metadata
= false;
928 if (!data
[IFLA_GENEVE_ID
] || !data
[IFLA_GENEVE_REMOTE
])
931 vni
= nla_get_u32(data
[IFLA_GENEVE_ID
]);
932 rem_addr
= nla_get_in_addr(data
[IFLA_GENEVE_REMOTE
]);
934 if (data
[IFLA_GENEVE_TTL
])
935 ttl
= nla_get_u8(data
[IFLA_GENEVE_TTL
]);
937 if (data
[IFLA_GENEVE_TOS
])
938 tos
= nla_get_u8(data
[IFLA_GENEVE_TOS
]);
940 if (data
[IFLA_GENEVE_PORT
])
941 dst_port
= nla_get_be16(data
[IFLA_GENEVE_PORT
]);
943 if (data
[IFLA_GENEVE_COLLECT_METADATA
])
946 return geneve_configure(net
, dev
, rem_addr
, vni
,
947 ttl
, tos
, dst_port
, metadata
);
950 #if LINUX_VERSION_CODE < KERNEL_VERSION(2,6,39)
951 static void geneve_dellink(struct net_device
*dev
)
953 static void geneve_dellink(struct net_device
*dev
, struct list_head
*head
)
956 struct geneve_dev
*geneve
= netdev_priv(dev
);
958 list_del(&geneve
->next
);
959 unregister_netdevice_queue(dev
, head
);
962 static size_t geneve_get_size(const struct net_device
*dev
)
964 return nla_total_size(sizeof(__u32
)) + /* IFLA_GENEVE_ID */
965 nla_total_size(sizeof(struct in_addr
)) + /* IFLA_GENEVE_REMOTE */
966 nla_total_size(sizeof(__u8
)) + /* IFLA_GENEVE_TTL */
967 nla_total_size(sizeof(__u8
)) + /* IFLA_GENEVE_TOS */
968 nla_total_size(sizeof(__be16
)) + /* IFLA_GENEVE_PORT */
969 nla_total_size(0) + /* IFLA_GENEVE_COLLECT_METADATA */
973 static int geneve_fill_info(struct sk_buff
*skb
, const struct net_device
*dev
)
975 struct geneve_dev
*geneve
= netdev_priv(dev
);
978 vni
= (geneve
->vni
[0] << 16) | (geneve
->vni
[1] << 8) | geneve
->vni
[2];
979 if (nla_put_u32(skb
, IFLA_GENEVE_ID
, vni
))
980 goto nla_put_failure
;
982 if (nla_put_in_addr(skb
, IFLA_GENEVE_REMOTE
,
983 geneve
->remote
.sin_addr
.s_addr
))
984 goto nla_put_failure
;
986 if (nla_put_u8(skb
, IFLA_GENEVE_TTL
, geneve
->ttl
) ||
987 nla_put_u8(skb
, IFLA_GENEVE_TOS
, geneve
->tos
))
988 goto nla_put_failure
;
990 if (nla_put_be16(skb
, IFLA_GENEVE_PORT
, geneve
->dst_port
))
991 goto nla_put_failure
;
993 if (geneve
->collect_md
) {
994 if (nla_put_flag(skb
, IFLA_GENEVE_COLLECT_METADATA
))
995 goto nla_put_failure
;
1004 static struct rtnl_link_ops geneve_link_ops __read_mostly
= {
1005 .kind
= "ovs_geneve",
1006 .maxtype
= IFLA_GENEVE_MAX
,
1007 .policy
= geneve_policy
,
1008 .priv_size
= sizeof(struct geneve_dev
),
1009 .setup
= geneve_setup
,
1010 .validate
= geneve_validate
,
1011 .newlink
= geneve_newlink
,
1012 .dellink
= geneve_dellink
,
1013 .get_size
= geneve_get_size
,
1014 .fill_info
= geneve_fill_info
,
1017 struct net_device
*rpl_geneve_dev_create_fb(struct net
*net
, const char *name
,
1018 u8 name_assign_type
, u16 dst_port
)
1020 struct nlattr
*tb
[IFLA_MAX
+ 1];
1021 struct net_device
*dev
;
1024 memset(tb
, 0, sizeof(tb
));
1025 dev
= rtnl_create_link(net
, (char *) name
, name_assign_type
,
1026 &geneve_link_ops
, tb
);
1030 err
= geneve_configure(net
, dev
, 0, 0, 0, 0, htons(dst_port
), true);
1033 return ERR_PTR(err
);
1037 EXPORT_SYMBOL_GPL(rpl_geneve_dev_create_fb
);
1039 static __net_init
int geneve_init_net(struct net
*net
)
1041 struct geneve_net
*gn
= net_generic(net
, geneve_net_id
);
1043 INIT_LIST_HEAD(&gn
->geneve_list
);
1044 INIT_LIST_HEAD(&gn
->sock_list
);
1048 static void __net_exit
geneve_exit_net(struct net
*net
)
1050 struct geneve_net
*gn
= net_generic(net
, geneve_net_id
);
1051 struct geneve_dev
*geneve
, *next
;
1052 struct net_device
*dev
, *aux
;
1057 /* gather any geneve devices that were moved into this ns */
1058 for_each_netdev_safe(net
, dev
, aux
)
1059 if (dev
->rtnl_link_ops
== &geneve_link_ops
)
1060 unregister_netdevice_queue(dev
, &list
);
1062 /* now gather any other geneve devices that were created in this ns */
1063 list_for_each_entry_safe(geneve
, next
, &gn
->geneve_list
, next
) {
1064 /* If geneve->dev is in the same netns, it was already added
1065 * to the list by the previous loop.
1067 if (!net_eq(dev_net(geneve
->dev
), net
))
1068 unregister_netdevice_queue(geneve
->dev
, &list
);
1071 /* unregister the devices gathered above */
1072 unregister_netdevice_many(&list
);
1076 static struct pernet_operations geneve_net_ops
= {
1077 .init
= geneve_init_net
,
1078 .exit
= geneve_exit_net
,
1079 .id
= &geneve_net_id
,
1080 .size
= sizeof(struct geneve_net
),
1083 DEFINE_COMPAT_PNET_REG_FUNC(device
)
1084 int rpl_geneve_init_module(void)
1088 rc
= register_pernet_subsys(&geneve_net_ops
);
1092 rc
= rtnl_link_register(&geneve_link_ops
);
1096 pr_info("Geneve tunneling driver\n");
1099 unregister_pernet_subsys(&geneve_net_ops
);
1104 void rpl_geneve_cleanup_module(void)
1106 rtnl_link_unregister(&geneve_link_ops
);
1107 unregister_pernet_subsys(&geneve_net_ops
);