Skip to content

Commit c6c6078

Browse files
authored
Merge pull request systemd#5752 from ssahani/geneve
networkd: Introduce geneve GEneric NEtwork Virtualization Encapsulation
2 parents b5bf6f6 + 6598e04 commit c6c6078

File tree

11 files changed

+632
-0
lines changed

11 files changed

+632
-0
lines changed

Makefile.am

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5776,6 +5776,8 @@ libnetworkd_core_la_SOURCES = \
57765776
src/network/netdev/veth.c \
57775777
src/network/netdev/vxlan.h \
57785778
src/network/netdev/vxlan.c \
5779+
src/network/netdev/geneve.h \
5780+
src/network/netdev/geneve.c \
57795781
src/network/netdev/vlan.h \
57805782
src/network/netdev/vlan.c \
57815783
src/network/netdev/macvlan.h \

configure.ac

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -368,6 +368,7 @@ AC_CHECK_DECLS([IFLA_INET6_ADDR_GEN_MODE,
368368
IFLA_BOND_AD_INFO,
369369
IFLA_VLAN_PROTOCOL,
370370
IFLA_VXLAN_GPE,
371+
IFLA_GENEVE_LABEL,
371372
IFLA_IPTUN_ENCAP_DPORT,
372373
IFLA_GRE_ENCAP_DPORT,
373374
IFLA_BRIDGE_VLAN_INFO,

man/systemd.netdev.xml

Lines changed: 66 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -169,6 +169,9 @@
169169
<row><entry><varname>vxlan</varname></entry>
170170
<entry>A virtual extensible LAN (vxlan), for connecting Cloud computing deployments.</entry></row>
171171

172+
<row><entry><varname>geneve</varname></entry>
173+
<entry>A GEneric NEtwork Virtualization Encapsulation (GENEVE) netdev driver.</entry></row>
174+
172175
<row><entry><varname>vrf</varname></entry>
173176
<entry>A Virtual Routing and Forwarding (<ulink url="https://www.kernel.org/doc/Documentation/networking/vrf.txt">VRF</ulink>) interface to create separate routing and forwarding domains.</entry></row>
174177

@@ -621,6 +624,69 @@
621624
</varlistentry>
622625
</variablelist>
623626
</refsect1>
627+
<refsect1>
628+
<title>[GENEVE] Section Options</title>
629+
<para>The <literal>[GENEVE]</literal> section only applies for
630+
netdevs of kind <literal>geneve</literal>, and accepts the
631+
following keys:</para>
632+
633+
<variablelist class='network-directives'>
634+
<varlistentry>
635+
<term><varname>Id=</varname></term>
636+
<listitem>
637+
<para>Specifies the Virtual Network Identifer (VNI) to use. Ranges [0-16777215].</para>
638+
</listitem>
639+
</varlistentry>
640+
<varlistentry>
641+
<term><varname>Remote=</varname></term>
642+
<listitem>
643+
<para>Specifies the unicast destination IP address to use in outgoing packets.</para>
644+
</listitem>
645+
</varlistentry>
646+
<varlistentry>
647+
<term><varname>TOS=</varname></term>
648+
<listitem>
649+
<para>Specifies the TOS value to use in outgoing packets. Ranges [1-255]. </para>
650+
</listitem>
651+
</varlistentry>
652+
<varlistentry>
653+
<term><varname>TTL=</varname></term>
654+
<listitem>
655+
<para>Specifies the TTL value to use in outgoing packets. Ranges [1-255]. </para>
656+
</listitem>
657+
</varlistentry>
658+
<varlistentry>
659+
<term><varname>UDPChecksum=</varname></term>
660+
<listitem>
661+
<para>A boolean. When true, specifies if UDP checksum is calculated for transmitted packets over IPv4.</para>
662+
</listitem>
663+
</varlistentry>
664+
<varlistentry>
665+
<term><varname>UDP6ZeroChecksumTx=</varname></term>
666+
<listitem>
667+
<para>A boolean. When true, skip UDP checksum calculation for transmitted packets over IPv6.</para>
668+
</listitem>
669+
</varlistentry>
670+
<varlistentry>
671+
<term><varname>UDP6ZeroChecksumRx=</varname></term>
672+
<listitem>
673+
<para>A boolean. When true, allows incoming UDP packets over IPv6 with zero checksum field.</para>
674+
</listitem>
675+
</varlistentry>
676+
<varlistentry>
677+
<term><varname>DestinationPort=</varname></term>
678+
<listitem>
679+
<para>Specifies destination port. Defaults to 6081.</para>
680+
</listitem>
681+
</varlistentry>
682+
<varlistentry>
683+
<term><varname>FlowLabel=</varname></term>
684+
<listitem>
685+
<para>Specifies the flow label to use in outgoing packets.</para>
686+
</listitem>
687+
</varlistentry>
688+
</variablelist>
689+
</refsect1>
624690
<refsect1>
625691
<title>[Tunnel] Section Options</title>
626692

src/basic/missing.h

Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -759,6 +759,25 @@ struct btrfs_ioctl_quota_ctl_args {
759759
#define IFLA_VXLAN_MAX (__IFLA_VXLAN_MAX - 1)
760760
#endif
761761

762+
#if !HAVE_DECL_IFLA_GENEVE_LABEL
763+
#define IFLA_GENEVE_UNSPEC 0
764+
#define IFLA_GENEVE_ID 1
765+
#define IFLA_GENEVE_REMOTE 2
766+
#define IFLA_GENEVE_TTL 3
767+
#define IFLA_GENEVE_TOS 4
768+
#define IFLA_GENEVE_PORT 5
769+
#define IFLA_GENEVE_COLLECT_METADATA 6
770+
#define IFLA_GENEVE_REMOTE6 7
771+
#define IFLA_GENEVE_UDP_CSUM 8
772+
#define IFLA_GENEVE_UDP_ZERO_CSUM6_TX 9
773+
#define IFLA_GENEVE_UDP_ZERO_CSUM6_RX 10
774+
#define IFLA_GENEVE_LABEL 11
775+
776+
#define __IFLA_GENEVE_MAX 12
777+
778+
#define IFLA_GENEVE_MAX (__IFLA_GENEVE_MAX - 1)
779+
#endif
780+
762781
#if !HAVE_DECL_IFLA_IPTUN_ENCAP_DPORT
763782
#define IFLA_IPTUN_UNSPEC 0
764783
#define IFLA_IPTUN_LINK 1

src/libsystemd/sd-netlink/netlink-types.c

Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -286,6 +286,19 @@ static const NLType rtnl_link_info_data_vrf_types[] = {
286286
[IFLA_VRF_TABLE] = { .type = NETLINK_TYPE_U32 },
287287
};
288288

289+
static const NLType rtnl_link_info_data_geneve_types[] = {
290+
[IFLA_GENEVE_ID] = { .type = NETLINK_TYPE_U32 },
291+
[IFLA_GENEVE_TTL] = { .type = NETLINK_TYPE_U8 },
292+
[IFLA_GENEVE_TOS] = { .type = NETLINK_TYPE_U8 },
293+
[IFLA_GENEVE_PORT] = { .type = NETLINK_TYPE_U16 },
294+
[IFLA_GENEVE_REMOTE] = { .type = NETLINK_TYPE_IN_ADDR },
295+
[IFLA_GENEVE_REMOTE6] = { .type = NETLINK_TYPE_IN_ADDR },
296+
[IFLA_GENEVE_UDP_CSUM] = { .type = NETLINK_TYPE_U8 },
297+
[IFLA_GENEVE_UDP_ZERO_CSUM6_TX] = { .type = NETLINK_TYPE_U8 },
298+
[IFLA_GENEVE_UDP_ZERO_CSUM6_RX] = { .type = NETLINK_TYPE_U8 },
299+
[IFLA_GENEVE_LABEL] = { .type = NETLINK_TYPE_U32 },
300+
};
301+
289302
/* these strings must match the .kind entries in the kernel */
290303
static const char* const nl_union_link_info_data_table[] = {
291304
[NL_UNION_LINK_INFO_DATA_BOND] = "bond",
@@ -308,6 +321,7 @@ static const char* const nl_union_link_info_data_table[] = {
308321
[NL_UNION_LINK_INFO_DATA_IP6TNL_TUNNEL] = "ip6tnl",
309322
[NL_UNION_LINK_INFO_DATA_VRF] = "vrf",
310323
[NL_UNION_LINK_INFO_DATA_VCAN] = "vcan",
324+
[NL_UNION_LINK_INFO_DATA_GENEVE] = "geneve",
311325
};
312326

313327
DEFINE_STRING_TABLE_LOOKUP(nl_union_link_info_data, NLUnionLinkInfoData);
@@ -349,6 +363,8 @@ static const NLTypeSystem rtnl_link_info_data_type_systems[] = {
349363
.types = rtnl_link_info_data_ip6tnl_types },
350364
[NL_UNION_LINK_INFO_DATA_VRF] = { .count = ELEMENTSOF(rtnl_link_info_data_vrf_types),
351365
.types = rtnl_link_info_data_vrf_types },
366+
[NL_UNION_LINK_INFO_DATA_GENEVE] = { .count = ELEMENTSOF(rtnl_link_info_data_geneve_types),
367+
.types = rtnl_link_info_data_geneve_types },
352368
};
353369

354370
static const NLTypeSystemUnion rtnl_link_info_data_type_system_union = {

src/libsystemd/sd-netlink/netlink-types.h

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -88,6 +88,7 @@ typedef enum NLUnionLinkInfoData {
8888
NL_UNION_LINK_INFO_DATA_IP6TNL_TUNNEL,
8989
NL_UNION_LINK_INFO_DATA_VRF,
9090
NL_UNION_LINK_INFO_DATA_VCAN,
91+
NL_UNION_LINK_INFO_DATA_GENEVE,
9192
_NL_UNION_LINK_INFO_DATA_MAX,
9293
_NL_UNION_LINK_INFO_DATA_INVALID = -1
9394
} NLUnionLinkInfoData;

0 commit comments

Comments
 (0)