static int multiaddr_list(int argc, char **argv) { struct ma_info *list = NULL; if (!filter.family) filter.family = preferred_family; while (argc > 0) { if (1) { if (strcmp(*argv, "dev") == 0) { NEXT_ARG(); } else if (matches(*argv, "help") == 0) usage(); if (filter.dev) duparg2("dev", *argv); filter.dev = *argv; } argv++; argc--; } if (!filter.family || filter.family == AF_PACKET) read_dev_mcast(&list); if (!filter.family || filter.family == AF_INET) read_igmp(&list); if (!filter.family || filter.family == AF_INET6) read_igmp6(&list); print_mlist(stdout, list); return 0; }
static int multiaddr_list(int argc, char **argv) { struct ma_info *list = NULL; size_t l; while (argc > 0) { if (strcmp(*argv, "dev") == 0) { NEXT_ARG(); l = strlen(*argv); if (l <= 0 || l >= sizeof(filter_dev)) usage(); strncpy(filter_dev, *argv, sizeof (filter_dev)); } else if (strcmp(*argv, "all") == 0) { filter_family = AF_UNSPEC; } else if (strcmp(*argv, "ipv4") == 0) { filter_family = AF_INET; } else if (strcmp(*argv, "ipv6") == 0) { filter_family = AF_INET6; } else if (strcmp(*argv, "link") == 0) { filter_family = AF_PACKET; } else { l = strlen(*argv); if (l <= 0 || l >= sizeof(filter_dev)) usage(); strncpy(filter_dev, *argv, sizeof (filter_dev)); } argv++; argc--; } if (!filter_family || filter_family == AF_PACKET) read_dev_mcast(&list); if (!filter_family || filter_family == AF_INET) read_igmp(&list); if (!filter_family || filter_family == AF_INET6) read_igmp6(&list); print_mlist(stdout, list); return 0; }