Add DF configuration for VXLAN and GENEVE link types
Subsystems (2)
v2 cover Add DF configuration for VXLAN and GENEVE link types
This series adds configuration of the DF bit in outgoing IPv4 packets for VXLAN and GENEVE link types.
Stefano Brivio (2):
iplink_vxlan: Add DF configuration
iplink_geneve: Add DF configuration
include/uapi/linux/if_link.h | 18 ++++++++++++++++++ ip/iplink_geneve.c | 29 +++++++++++++++++++++++++++++ ip/iplink_vxlan.c | 29 +++++++++++++++++++++++++++++ man/man8/ip-link.8.in | 28 ++++++++++++++++++++++++++++ 4 files changed, 104 insertions(+)
Signature · 1 line
2.19.1
PATCH v2 1/2 iplink_vxlan: Add DF configuration
Allow to set the DF bit behaviour for outgoing IPv4 packets: it can be always on, inherited from the inner header, or, by default, always off, which is the current behaviour.
v2:
- Indicate in the man page what DF refers to, using RFC 791 wording (David Ahern)
--- include/uapi/linux/if_link.h | 9 +++++++++ ip/iplink_vxlan.c | 29 +++++++++++++++++++++++++++++ man/man8/ip-link.8.in | 14 ++++++++++++++ 3 files changed, 52 insertions(+)
include/uapi/linux/if_link.h +9 -0
@@ -530,6 +530,7 @@ enum {IFLA_VXLAN_LABEL ,IFLA_VXLAN_GPE ,IFLA_VXLAN_TTL_INHERIT , +IFLA_VXLAN_DF , __IFLA_VXLAN_MAX };#define IFLA_VXLAN_MAX (__IFLA_VXLAN_MAX - 1)
@@ -539,6 +540,14 @@ struct ifla_vxlan_port_range {__be16 high; }; +enum ifla_vxlan_df { +VXLAN_DF_UNSET =0 , +VXLAN_DF_SET , +VXLAN_DF_INHERIT , + __VXLAN_DF_END, +VXLAN_DF_MAX = __VXLAN_DF_END -1 , +}; +/* GENEVE section */ enum {IFLA_GENEVE_UNSPEC ,
ip/iplink_vxlan.c +29 -0
@@ -31,6 +31,7 @@ static void print_explain(FILE *f)" [ local ADDR ]\n" " [ ttl TTL ]\n" " [ tos TOS ]\n" +" [ df DF ]\n" " [ flowlabel LABEL ]\n" " [ dev PHYS_DEV ]\n" " [ dstport PORT ]\n"
@@ -52,6 +53,7 @@ static void print_explain(FILE *f)" ADDR := { IP_ADDRESS | any }\n" " TOS := { NUMBER | inherit }\n" " TTL := { 1..255 | auto | inherit }\n" +" DF := { unset | set | inherit }\n" " LABEL := 0-1048575\n" ); }
@@ -170,6 +172,22 @@ static int vxlan_parse_opt(struct link_util *lu, int argc, char **argv, }else tos =1 ;addattr8 (n,1024 ,IFLA_VXLAN_TOS , tos); + }else if (!matches (*argv,"df" )) { +enum ifla_vxlan_df df; + +NEXT_ARG (); +check_duparg (&attrs,IFLA_VXLAN_DF ,"df" , *argv); +if (strcmp (*argv,"unset" ) ==0 ) + df =VXLAN_DF_UNSET ; +else if (strcmp (*argv,"set" ) ==0 ) + df =VXLAN_DF_SET ; +else if (strcmp (*argv,"inherit" ) ==0 ) + df =VXLAN_DF_INHERIT ; +else +invarg ("DF must be 'unset', 'set' or 'inherit'" , + *argv); + +addattr8 (n,1024 ,IFLA_VXLAN_DF , df); }else if (!matches (*argv,"label" ) || !matches (*argv,"flowlabel" )) {__u32 uval;
@@ -538,6 +556,17 @@ static void vxlan_print_opt(struct link_util *lu, FILE *f, struct rtattr *tb[])print_string (PRINT_FP ,NULL ,"ttl %s " ,"auto" ); } +if (tb[IFLA_VXLAN_DF ]) { +enum ifla_vxlan_df df =rta_getattr_u8 (tb[IFLA_VXLAN_DF ]); + +if (df ==VXLAN_DF_UNSET ) +print_string (PRINT_JSON ,"df" ,"df %s " ,"unset" ); +else if (df ==VXLAN_DF_SET ) +print_string (PRINT_ANY ,"df" ,"df %s " ,"set" ); +else if (df ==VXLAN_DF_INHERIT ) +print_string (PRINT_ANY ,"df" ,"df %s " ,"inherit" ); + } +if (tb[IFLA_VXLAN_LABEL ]) {__u32 label =rta_getattr_u32 (tb[IFLA_VXLAN_LABEL ]);
man/man8/ip-link.8.in +14 -0
@@ -496,6 +496,8 @@ the following additional arguments are supported: ] [ .BI tos " TOS " ] [ +.BI df " DF " +] [ .BI flowlabel " FLOWLABEL " ] [ .BI dstport " PORT "
@@ -565,6 +567,18 @@ parameter. .BI tos " TOS" - specifies the TOS value to use in outgoing packets. +.sp +.BI df " DF" +- specifies the usage of the Don't Fragment flag (DF) bit in outgoing packets +with IPv4 headers. The value +.B inherit +causes the bit to be copied from the original IP header. The values +.B unset +and +.B set +cause the bit to be always unset or always set, respectively. By default, the +bit is not set. + .sp .BI flowlabel " FLOWLABEL" - specifies the flow label to use in outgoing packets.
Signature · 1 line
2.19.1
PATCH v2 2/2 iplink_geneve: Add DF configuration
In reply to Stefano BrivioAllow to set the DF bit behaviour for outgoing IPv4 packets: it can be always on, inherited from the inner header, or, by default, always off, which is the current behaviour.
v2:
- Indicate in the man page what DF refers to, using RFC 791 wording (David Ahern)
--- include/uapi/linux/if_link.h | 9 +++++++++ ip/iplink_geneve.c | 29 +++++++++++++++++++++++++++++ man/man8/ip-link.8.in | 14 ++++++++++++++ 3 files changed, 52 insertions(+)
include/uapi/linux/if_link.h +9 -0
@@ -563,10 +563,19 @@ enum {IFLA_GENEVE_UDP_ZERO_CSUM6_RX ,IFLA_GENEVE_LABEL ,IFLA_GENEVE_TTL_INHERIT , +IFLA_GENEVE_DF , __IFLA_GENEVE_MAX };#define IFLA_GENEVE_MAX (__IFLA_GENEVE_MAX - 1) +enum ifla_geneve_df { +GENEVE_DF_UNSET =0 , +GENEVE_DF_SET , +GENEVE_DF_INHERIT , + __GENEVE_DF_END, +GENEVE_DF_MAX = __GENEVE_DF_END -1 , +}; +/* PPP section */ enum { IFLA_PPP_UNSPEC,
ip/iplink_geneve.c +29 -0
@@ -24,6 +24,7 @@ static void print_explain(FILE *f)" remote ADDR\n" " [ ttl TTL ]\n" " [ tos TOS ]\n" +" [ df DF ]\n" " [ flowlabel LABEL ]\n" " [ dstport PORT ]\n" " [ [no]external ]\n"
@@ -35,6 +36,7 @@ static void print_explain(FILE *f)" ADDR := IP_ADDRESS\n" " TOS := { NUMBER | inherit }\n" " TTL := { 1..255 | auto | inherit }\n" +" DF := { unset | set | inherit }\n" " LABEL := 0-1048575\n" ); }
@@ -115,6 +117,22 @@ static int geneve_parse_opt(struct link_util *lu, int argc, char **argv, tos = uval; }else tos =1 ; + }else if (!matches (*argv,"df" )) { +enum ifla_geneve_df df; + +NEXT_ARG (); +check_duparg (&attrs,IFLA_GENEVE_DF ,"df" , *argv); +if (strcmp (*argv,"unset" ) ==0 ) + df =GENEVE_DF_UNSET ; +else if (strcmp (*argv,"set" ) ==0 ) + df =GENEVE_DF_SET ; +else if (strcmp (*argv,"inherit" ) ==0 ) + df =GENEVE_DF_INHERIT ; +else +invarg ("DF must be 'unset', 'set' or 'inherit'" , + *argv); + +addattr8 (n,1024 ,IFLA_GENEVE_DF , df); }else if (!matches (*argv,"label" ) || !matches (*argv,"flowlabel" )) {__u32 uval;
@@ -287,6 +305,17 @@ static void geneve_print_opt(struct link_util *lu, FILE *f, struct rtattr *tb[])print_string (PRINT_FP ,NULL ,"tos %s " ,"inherit" ); } +if (tb[IFLA_GENEVE_DF ]) { +enum ifla_geneve_df df =rta_getattr_u8 (tb[IFLA_GENEVE_DF ]); + +if (df ==GENEVE_DF_UNSET ) +print_string (PRINT_JSON ,"df" ,"df %s " ,"unset" ); +else if (df ==GENEVE_DF_SET ) +print_string (PRINT_ANY ,"df" ,"df %s " ,"set" ); +else if (df ==GENEVE_DF_INHERIT ) +print_string (PRINT_ANY ,"df" ,"df %s " ,"inherit" ); + } +if (tb[IFLA_GENEVE_LABEL ]) {__u32 label =rta_getattr_u32 (tb[IFLA_GENEVE_LABEL ]);
man/man8/ip-link.8.in +14 -0
@@ -1180,6 +1180,8 @@ the following additional arguments are supported: ] [ .BI tos " TOS " ] [ +.BI df " DF " +] [ .BI flowlabel " FLOWLABEL " ] [ .BI dstport " PORT"
@@ -1212,6 +1214,18 @@ ttl. Default option is "0". .BI tos " TOS" - specifies the TOS value to use in outgoing packets. +.sp +.BI df " DF" +- specifies the usage of the Don't Fragment flag (DF) bit in outgoing packets +with IPv4 headers. The value +.B inherit +causes the bit to be copied from the original IP header. The values +.B unset +and +.B set +cause the bit to be always unset or always set, respectively. By default, the +bit is not set. + .sp .BI flowlabel " FLOWLABEL" - specifies the flow label to use in outgoing packets.
Signature · 1 line
2.19.1
David Ahern
AppliedQuoted 7 lines · Stefano Brivio
This series adds configuration of the DF bit in outgoing IPv4 packets for VXLAN and GENEVE link types.
Stefano Brivio (2):
iplink_vxlan: Add DF configuration
iplink_geneve: Add DF configuration
Quoted 6 lines
include/uapi/linux/if_link.h | 18 ++++++++++++++++++ ip/iplink_geneve.c | 29 +++++++++++++++++++++++++++++ ip/iplink_vxlan.c | 29 +++++++++++++++++++++++++++++ man/man8/ip-link.8.in | 28 ++++++++++++++++++++++++++++ 4 files changed, 104 insertions(+)
applied to iproute2-next. Thanks