Signed-off-by: Dmitry Skorodumov --- include/uapi/linux/if_link.h | 1 + ip/iplink_ipvlan.c | 7 +++++-- 2 files changed, 6 insertions(+), 2 deletions(-) diff --git a/include/uapi/linux/if_link.h b/include/uapi/linux/if_link.h index d05f5cc7..ec79f246 100644 --- a/include/uapi/linux/if_link.h +++ b/include/uapi/linux/if_link.h @@ -1267,6 +1267,7 @@ enum ipvlan_mode { IPVLAN_MODE_L2 = 0, IPVLAN_MODE_L3, IPVLAN_MODE_L3S, + IPVLAN_MODE_L2_MACNAT, IPVLAN_MODE_MAX }; diff --git a/ip/iplink_ipvlan.c b/ip/iplink_ipvlan.c index f29fa4f9..df2c1aa4 100644 --- a/ip/iplink_ipvlan.c +++ b/ip/iplink_ipvlan.c @@ -19,7 +19,7 @@ static void print_explain(struct link_util *lu, FILE *f) fprintf(f, "Usage: ... %s [ mode MODE ] [ FLAGS ]\n" "\n" - "MODE: l3 | l3s | l2\n" + "MODE: l3 | l3s | l2 | l2macnat\n" "FLAGS: bridge | private | vepa\n" "(first values are the defaults if nothing is specified).\n", lu->id); @@ -39,12 +39,15 @@ static int ipvlan_parse_opt(struct link_util *lu, int argc, char **argv, if (strcmp(*argv, "l2") == 0) mode = IPVLAN_MODE_L2; + else if (strcmp(*argv, "l2macnat") == 0) + mode = IPVLAN_MODE_L2_MACNAT; else if (strcmp(*argv, "l3") == 0) mode = IPVLAN_MODE_L3; else if (strcmp(*argv, "l3s") == 0) mode = IPVLAN_MODE_L3S; else { - fprintf(stderr, "Error: argument of \"mode\" must be either \"l2\", \"l3\" or \"l3s\"\n"); + fprintf(stderr, "Error: argument of \"mode\" must be either " + "\"l2\", \"l2macnat\", \"l3\" or \"l3s\"\n"); return -1; } addattr16(n, 1024, IFLA_IPVLAN_MODE, mode); -- 2.25.1