Re: [PATCH v2] iplink_rmnet: Allow passing IFLA_RMNET_FLAGS
From: David Ahern <hidden>
Date: 2021-09-27 13:48:59
On 9/23/21 9:33 PM, Bjorn Andersson wrote:
quoted hunk ↗ jump to hunk
diff --git a/ip/iplink_rmnet.c b/ip/iplink_rmnet.c index 1d16440c6900..f629ca9976d9 100644 --- a/ip/iplink_rmnet.c +++ b/ip/iplink_rmnet.c@@ -16,6 +16,12 @@ static void print_explain(FILE *f) { fprintf(f, "Usage: ... rmnet mux_id MUXID\n" + " [ingress-deaggregation { on | off } ]\n" + " [ingress-commands { on | off } ]\n" + " [ingress-chksumv4 { on | off } ]\n" + " [ingress-chksumv5 { on | off } ]\n" + " [egress-chksumv4 { on | off } ]\n" + " [egress-chksumv5 { on | off } ]\n" "\n" "MUXID := 1-254\n" );@@ -26,9 +32,16 @@ static void explain(void) print_explain(stderr); } +static int on_off(const char *msg, const char *arg) +{ + fprintf(stderr, "Error: argument of \"%s\" must be \"on\" or \"off\", not \"%s\"\n", msg, arg); + return -1; +} + static int rmnet_parse_opt(struct link_util *lu, int argc, char **argv, struct nlmsghdr *n) { + struct ifla_rmnet_flags flags = { }; __u16 mux_id; while (argc > 0) {@@ -37,6 +50,60 @@ static int rmnet_parse_opt(struct link_util *lu, int argc, char **argv, if (get_u16(&mux_id, *argv, 0)) invarg("mux_id is invalid", *argv); addattr16(n, 1024, IFLA_RMNET_MUX_ID, mux_id); + } else if (matches(*argv, "ingress-deaggregation") == 0) { + NEXT_ARG(); + flags.mask |= RMNET_FLAGS_INGRESS_DEAGGREGATION; + if (strcmp(*argv, "on") == 0) + flags.flags |= RMNET_FLAGS_INGRESS_DEAGGREGATION; + else if (strcmp(*argv, "off") == 0) + flags.flags &= ~RMNET_FLAGS_INGRESS_DEAGGREGATION; + else + return on_off("ingress-deaggregation", *argv); + } else if (matches(*argv, "ingress-commands") == 0) { + NEXT_ARG(); + flags.mask |= RMNET_FLAGS_INGRESS_MAP_COMMANDS; + if (strcmp(*argv, "on") == 0) + flags.flags |= RMNET_FLAGS_INGRESS_MAP_COMMANDS; + else if (strcmp(*argv, "off") == 0) + flags.flags &= ~RMNET_FLAGS_INGRESS_MAP_COMMANDS; + else + return on_off("ingress-commands", *argv); + } else if (matches(*argv, "ingress-chksumv4") == 0) { + NEXT_ARG(); + flags.mask |= RMNET_FLAGS_INGRESS_MAP_CKSUMV4; + if (strcmp(*argv, "on") == 0) + flags.flags |= RMNET_FLAGS_INGRESS_MAP_CKSUMV4; + else if (strcmp(*argv, "off") == 0) + flags.flags &= ~RMNET_FLAGS_INGRESS_MAP_CKSUMV4; + else + return on_off("ingress-chksumv4", *argv); + } else if (matches(*argv, "ingress-chksumv5") == 0) { + NEXT_ARG(); + flags.mask |= RMNET_FLAGS_INGRESS_MAP_CKSUMV5; + if (strcmp(*argv, "on") == 0) + flags.flags |= RMNET_FLAGS_INGRESS_MAP_CKSUMV5; + else if (strcmp(*argv, "off") == 0) + flags.flags &= ~RMNET_FLAGS_INGRESS_MAP_CKSUMV5; + else + return on_off("ingress-chksumv5", *argv); + } else if (matches(*argv, "egress-chksumv4") == 0) { + NEXT_ARG(); + flags.mask |= RMNET_FLAGS_EGRESS_MAP_CKSUMV4; + if (strcmp(*argv, "on") == 0) + flags.flags |= RMNET_FLAGS_EGRESS_MAP_CKSUMV4; + else if (strcmp(*argv, "off") == 0) + flags.flags &= ~RMNET_FLAGS_EGRESS_MAP_CKSUMV4; + else + return on_off("egress-chksumv4", *argv); + } else if (matches(*argv, "egress-chksumv5") == 0) { + NEXT_ARG(); + flags.mask |= RMNET_FLAGS_EGRESS_MAP_CKSUMV5; + if (strcmp(*argv, "on") == 0) + flags.flags |= RMNET_FLAGS_EGRESS_MAP_CKSUMV5; + else if (strcmp(*argv, "off") == 0) + flags.flags &= ~RMNET_FLAGS_EGRESS_MAP_CKSUMV5; + else + return on_off("egress-chksumv5", *argv); } else if (matches(*argv, "help") == 0) { explain(); return -1;
use strcmp for new options. Also, please use 'csum' instead of 'chksum' in the names. csum is already widely used in ip commands.