static int vlan_show(int argc, char **argv) { char *filter_dev = NULL; while (argc > 0) { if (strcmp(*argv, "dev") == 0) { NEXT_ARG(); if (filter_dev) duparg("dev", *argv); filter_dev = *argv; } else if (strcmp(*argv, "vid") == 0) { NEXT_ARG(); if (filter_vlan) duparg("vid", *argv); filter_vlan = atoi(*argv); } argc--; argv++; } if (filter_dev) { if ((filter_index = if_nametoindex(filter_dev)) == 0) { fprintf(stderr, "Cannot find device \"%s\"\n", filter_dev); return -1; } } if (rtnl_wilddump_req_filter(&rth, PF_BRIDGE, RTM_GETLINK, (compress_vlans ? RTEXT_FILTER_BRVLAN_COMPRESSED : RTEXT_FILTER_BRVLAN)) < 0) { perror("Cannont send dump request"); exit(1); } if (json_output) { jw_global = jsonw_new(stdout); if (!jw_global) { fprintf(stderr, "Error allocation json object\n"); exit(1); } jsonw_start_object(jw_global); } else { printf("port\tvlan ids\n"); } if (rtnl_dump_filter(&rth, print_vlan, stdout) < 0) { fprintf(stderr, "Dump ternminated\n"); exit(1); } if (jw_global) { jsonw_end_object(jw_global); jsonw_destroy(&jw_global); } return 0; }
static int vlan_show(int argc, char **argv) { char *filter_dev = NULL; while (argc > 0) { if (strcmp(*argv, "dev") == 0) { NEXT_ARG(); if (filter_dev) duparg("dev", *argv); filter_dev = *argv; } argc--; argv++; } if (filter_dev) { if ((filter_index = if_nametoindex(filter_dev)) == 0) { fprintf(stderr, "Cannot find device \"%s\"\n", filter_dev); return -1; } } if (rtnl_wilddump_req_filter(&rth, PF_BRIDGE, RTM_GETLINK, RTEXT_FILTER_BRVLAN) < 0) { perror("Cannont send dump request"); exit(1); } printf("port\tvlan ids\n"); if (rtnl_dump_filter(&rth, print_vlan, stdout) < 0) { fprintf(stderr, "Dump ternminated\n"); exit(1); } return 0; }
int rtnl_wilddump_request(struct rtnl_handle *rth, int family, int type) { return rtnl_wilddump_req_filter(rth, family, type, RTEXT_FILTER_VF); }