static int ipvlan_parse_opt(struct link_util *lu, int argc, char **argv, struct nlmsghdr *n) { while (argc > 0) { if (matches(*argv, "mode") == 0) { __u16 mode = 0; NEXT_ARG(); if (strcmp(*argv, "l2") == 0) mode = IPVLAN_MODE_L2; else if (strcmp(*argv, "l3") == 0) mode = IPVLAN_MODE_L3; else return mode_arg(); addattr16(n, 1024, IFLA_IPVLAN_MODE, mode); } else if (matches(*argv, "help") == 0) { explain(); return -1; } else { fprintf(stderr, "ipvlan: unknown option \"%s\"?\n", *argv); explain(); return -1; } argc--, argv++; } return 0; }
static int macvtap_parse_opt(struct link_util *lu, int argc, char **argv, struct nlmsghdr *n) { while (argc > 0) { if (matches(*argv, "mode") == 0) { __u32 mode = 0; NEXT_ARG(); if (strcmp(*argv, "private") == 0) mode = MACVLAN_MODE_PRIVATE; else if (strcmp(*argv, "vepa") == 0) mode = MACVLAN_MODE_VEPA; else if (strcmp(*argv, "bridge") == 0) mode = MACVLAN_MODE_BRIDGE; else if (strcmp(*argv, "passthru") == 0) mode = MACVLAN_MODE_PASSTHRU; else return mode_arg(*argv); addattr32(n, 1024, IFLA_MACVLAN_MODE, mode); } else if (matches(*argv, "help") == 0) { explain(); return -1; } else { fprintf(stderr, "macvtap: unknown command \"%s\"?\n", *argv); explain(); return -1; } argc--, argv++; } return 0; }
static int macvlan_parse_opt(struct link_util *lu, int argc, char **argv, struct nlmsghdr *n) { __u32 mode = 0; __u16 flags = 0; while (argc > 0) { if (matches(*argv, "mode") == 0) { NEXT_ARG(); if (strcmp(*argv, "private") == 0) mode = MACVLAN_MODE_PRIVATE; else if (strcmp(*argv, "vepa") == 0) mode = MACVLAN_MODE_VEPA; else if (strcmp(*argv, "bridge") == 0) mode = MACVLAN_MODE_BRIDGE; else if (strcmp(*argv, "passthru") == 0) mode = MACVLAN_MODE_PASSTHRU; else return mode_arg(*argv); } else if (matches(*argv, "nopromisc") == 0) { flags |= MACVLAN_FLAG_NOPROMISC; } else if (matches(*argv, "help") == 0) { explain(lu); return -1; } else { pfx_err(lu, "unknown option \"%s\"?", *argv); explain(lu); return -1; } argc--, argv++; } if (mode) addattr32(n, 1024, IFLA_MACVLAN_MODE, mode); if (flags) { if (flags & MACVLAN_FLAG_NOPROMISC && mode != MACVLAN_MODE_PASSTHRU) { pfx_err(lu, "nopromisc flag only valid in passthru mode"); explain(lu); return -1; } addattr16(n, 1024, IFLA_MACVLAN_FLAGS, flags); } return 0; }
static int ipoib_parse_opt(struct link_util *lu, int argc, char **argv, struct nlmsghdr *n) { __u16 pkey, mode, umcast; while (argc > 0) { if (matches(*argv, "pkey") == 0) { NEXT_ARG(); if (get_u16(&pkey, *argv, 0)) invarg("pkey is invalid", *argv); addattr_l(n, 1024, IFLA_IPOIB_PKEY, &pkey, 2); } else if (matches(*argv, "mode") == 0) { NEXT_ARG(); if (strcmp(*argv, "datagram") == 0) mode = IPOIB_MODE_DATAGRAM; else if (strcmp(*argv, "connected") == 0) mode = IPOIB_MODE_CONNECTED; else return mode_arg(); addattr_l(n, 1024, IFLA_IPOIB_MODE, &mode, 2); } else if (matches(*argv, "umcast") == 0) { NEXT_ARG(); if (get_u16(&umcast, *argv, 0)) invarg("umcast is invalid", *argv); addattr_l(n, 1024, IFLA_IPOIB_UMCAST, &umcast, 2); } else if (matches(*argv, "help") == 0) { explain(); return -1; } else { fprintf(stderr, "ipoib: unknown option \"%s\"?\n", *argv); explain(); return -1; } argc--, argv++; } return 0; }