Lines Matching +full:open +full:- +full:circuit
1 /*-
2 * SPDX-License-Identifier: BSD-2-Clause-FreeBSD
90 if (modfind("netlink") == -1 && errno == ENOENT) { in nl_init_socket()
92 if (kldload("netlink") == -1) in nl_init_socket()
98 err(1, "unable to open netlink socket"); in nl_init_socket()
108 ctx->io_ss = &ss; in ifconfig_nl()
113 ctx->io_ss = NULL; in ifconfig_nl()
138 * Returns ifmap ifindex->snl_parsed_link.
148 hdr->nlmsg_flags |= NLM_F_DUMP; in prepare_ifmap()
154 uint32_t nlmsg_seq = hdr->nlmsg_seq; in prepare_ifmap()
161 if (!snl_parse_nlmsg(ss, hdr, &snl_rtm_link_parser, &iface->link)) in prepare_ifmap()
163 if (iface->link.ifi_index >= ifmap->size) { in prepare_ifmap()
164 size_t new_size = MAX(ifmap->size, 32); in prepare_ifmap()
166 while (new_size <= iface->link.ifi_index + 1) in prepare_ifmap()
170 memcpy(ifaces, ifmap->ifaces, ifmap->size * sizeof(void *)); in prepare_ifmap()
171 ifmap->ifaces = ifaces; in prepare_ifmap()
172 ifmap->size = new_size; in prepare_ifmap()
174 ifmap->ifaces[iface->link.ifi_index] = iface; in prepare_ifmap()
175 ifmap->count++; in prepare_ifmap()
176 iface->idx = ifmap->count; in prepare_ifmap()
195 hdr = snl_read_reply(ss, hdr->nlmsg_seq); in if_nametoindex_nl()
196 if (hdr->nlmsg_type != NL_RTM_NEWLINK) in if_nametoindex_nl()
224 hdr->nlmsg_flags |= NLM_F_DUMP; in prepare_ifaddrs()
230 uint32_t nlmsg_seq = hdr->nlmsg_seq; in prepare_ifaddrs()
237 if (!snl_parse_nlmsg(ss, hdr, &snl_rtm_addr_parser, &ifa->addr)) in prepare_ifaddrs()
240 const uint32_t ifindex = ifa->addr.ifa_index; in prepare_ifaddrs()
241 if (ifindex >= ifmap->size || ifmap->ifaces[ifindex] == NULL) in prepare_ifaddrs()
243 struct iface *iface = ifmap->ifaces[ifindex]; in prepare_ifaddrs()
244 ifa->next = iface->ifa; in prepare_ifaddrs()
245 ifa->idx = ++count; in prepare_ifaddrs()
246 iface->ifa = ifa; in prepare_ifaddrs()
247 iface->ifa_count++; in prepare_ifaddrs()
254 if_link_t *link = &iface->link; in match_iface()
256 if (args->ifname != NULL && strcmp(args->ifname, link->ifla_ifname)) in match_iface()
259 if (!match_if_flags(args, link->ifi_flags)) in match_iface()
262 if (!group_member(link->ifla_ifname, args->matchgroup, args->nogroup)) in match_iface()
265 if (args->afp == NULL) in match_iface()
268 if (!strcmp(args->afp->af_name, "ether")) { in match_iface()
269 if (link->ifla_address == NULL) in match_iface()
275 .sdl_type = convert_iftype(link->ifi_type), in match_iface()
276 .sdl_alen = NLA_DATA_LEN(link->ifla_address), in match_iface()
279 } else if (args->afp->af_af == AF_LINK) in match_iface()
283 * circuit on RTM_GETLINK has provided us an address. in match_iface()
285 return (link->ifla_address != NULL); in match_iface()
287 for (struct ifa *ifa = iface->ifa; ifa != NULL; ifa = ifa->next) { in match_iface()
288 if (args->afp->af_af == ifa->addr.ifa_family) in match_iface()
295 /* Sort according to the kernel-provided order */
302 return ((a->idx > b->idx) * 2 - 1); in cmp_iface()
311 if (a->addr.ifa_family != b->addr.ifa_family) in cmp_ifaddr()
312 return ((a->addr.ifa_family > b->addr.ifa_family) * 2 - 1); in cmp_ifaddr()
313 return ((a->idx > b->idx) * 2 - 1); in cmp_ifaddr()
319 if (iface->ifa_count == 0) in sort_iface_ifaddrs()
322 struct ifa **sorted_ifaddrs = snl_allocz(ss, iface->ifa_count * sizeof(void *)); in sort_iface_ifaddrs()
323 struct ifa *ifa = iface->ifa; in sort_iface_ifaddrs()
325 for (uint32_t i = 0; i < iface->ifa_count; i++) { in sort_iface_ifaddrs()
326 struct ifa *ifa_next = ifa->next; in sort_iface_ifaddrs()
329 ifa->next = NULL; in sort_iface_ifaddrs()
332 qsort(sorted_ifaddrs, iface->ifa_count, sizeof(void *), cmp_ifaddr); in sort_iface_ifaddrs()
334 iface->ifa = ifa; in sort_iface_ifaddrs()
335 for (uint32_t i = 1; i < iface->ifa_count; i++) { in sort_iface_ifaddrs()
336 ifa->next = sorted_ifaddrs[i]; in sort_iface_ifaddrs()
344 uint32_t sz_u32 = roundup2(link->iflaf_caps.nla_bitset_size, 32) / 32; in print_ifcaps()
347 uint32_t *caps = link->iflaf_caps.nla_bitset_value; in print_ifcaps()
354 if (ctx->args->supmedia && sz_u32 > 0) { in print_ifcaps()
355 uint32_t *caps = link->iflaf_caps.nla_bitset_mask; in print_ifcaps()
366 if_link_t *link = &iface->link; in status_nl()
367 struct ifconfig_args *args = ctx->args; in status_nl()
370 printf("%s: ", link->ifla_ifname); in status_nl()
372 printf("flags=%x", link->ifi_flags); in status_nl()
373 print_bits("IFF", &link->ifi_flags, 1, IFFBITS, nitems(IFFBITS)); in status_nl()
376 printf(" mtu %d\n", link->ifla_mtu); in status_nl()
378 if (link->ifla_ifalias != NULL) in status_nl()
379 printf("\tdescription: %s\n", link->ifla_ifalias); in status_nl()
384 if (args->allfamilies | (args->afp != NULL && args->afp->af_af == AF_LINK)) { in status_nl()
385 /* Start with link-level */ in status_nl()
387 if (p != NULL && link->ifla_address != NULL) in status_nl()
388 p->af_status(ctx, link, NULL); in status_nl()
391 sort_iface_ifaddrs(ctx->io_ss, iface); in status_nl()
393 for (struct ifa *ifa = iface->ifa; ifa != NULL; ifa = ifa->next) { in status_nl()
394 if (args->allfamilies) { in status_nl()
395 const struct afswtch *p = af_getbyfamily(ifa->addr.ifa_family); in status_nl()
398 p->af_status(ctx, link, &ifa->addr); in status_nl()
399 } else if (args->afp->af_af == ifa->addr.ifa_family) { in status_nl()
400 const struct afswtch *p = args->afp; in status_nl()
402 p->af_status(ctx, link, &ifa->addr); in status_nl()
407 if (args->allfamilies) in status_nl()
409 else if (args->afp->af_other_status != NULL) in status_nl()
410 args->afp->af_other_status(ctx); in status_nl()
413 if (args->drivername || args->verbose) { in status_nl()
414 if (ifconfig_get_orig_name(lifh, link->ifla_ifname, in status_nl()
429 if (args->verbose > 0) in status_nl()
457 struct iface **sorted_ifaces = snl_allocz(&ss, ifmap->count * sizeof(void *)); in list_interfaces_nl()
458 for (uint32_t i = 0, num = 0; i < ifmap->size; i++) { in list_interfaces_nl()
459 if (ifmap->ifaces[i] != NULL) { in list_interfaces_nl()
460 sorted_ifaces[num++] = ifmap->ifaces[i]; in list_interfaces_nl()
461 if (num == ifmap->count) in list_interfaces_nl()
465 qsort(sorted_ifaces, ifmap->count, sizeof(void *), cmp_iface); in list_interfaces_nl()
468 for (uint32_t i = 0, num = 0; i < ifmap->count; i++) { in list_interfaces_nl()
474 ctx->ifname = iface->link.ifla_ifname; in list_interfaces_nl()
476 if (args->namesonly) { in list_interfaces_nl()
479 fputs(iface->link.ifla_ifname, stdout); in list_interfaces_nl()
480 } else if (args->argc == 0) in list_interfaces_nl()
483 ifconfig_ioctl(ctx, 0, args->afp); in list_interfaces_nl()
485 if (args->namesonly) in list_interfaces_nl()
488 close(ctx->io_s); in list_interfaces_nl()