Lines Matching +full:use +full:- +full:rtm

1 /*-
2 * SPDX-License-Identifier: BSD-3-Clause
7 * Redistribution and use in source and binary forms, with or without
25 * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
28 * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
75 { RTF_DONE, 'd', "done" }, /* Completed -- for routing msgs only */
120 if (fibnum == -1 && in routepr()
121 sysctlbyname("net.my_fibnum", &fibnum, &intsize, NULL, 0) == -1) in routepr()
123 if (sysctlbyname("net.fibs", &numfibs, &intsize, NULL, 0) == -1) in routepr()
125 if (fibnum < 0 || fibnum > numfibs - 1) in routepr()
128 * Since kernel & userland use different timebase in routepr()
130 * directly we should do rt_expire --> expire_time conversion. in routepr()
135 xo_open_container("route-information"); in routepr()
145 xo_close_container("route-information"); in routepr()
180 xo_emit("\n{k:address-family/%s}:\n", afname); in pr_family()
182 xo_emit("\n{L:Protocol Family} {k:address-family/%d}:\n", af1); in pr_family()
207 xo_emit("{T:/%-*.*s} {T:/%-*.*s} {T:/%-*.*s} {T:/%*.*s} " in pr_rthdr()
217 xo_emit("{T:/%-*.*s} {T:/%-*.*s} {T:/%-*.*s} {T:/%*.*s} " in pr_rthdr()
246 struct rt_msghdr *rtm; in p_rtable_sysctl() local
268 xo_open_container("route-table"); in p_rtable_sysctl()
269 xo_open_list("rt-family"); in p_rtable_sysctl()
270 for (next = buf; next < lim; next += rtm->rtm_msglen) { in p_rtable_sysctl()
271 rtm = (struct rt_msghdr *)next; in p_rtable_sysctl()
272 if (rtm->rtm_version != RTM_VERSION) in p_rtable_sysctl()
277 sa = (struct sockaddr *)(rtm + 1); in p_rtable_sysctl()
279 if (fam != sa->sa_family) { in p_rtable_sysctl()
281 xo_close_list("rt-entry"); in p_rtable_sysctl()
282 xo_close_instance("rt-family"); in p_rtable_sysctl()
285 fam = sa->sa_family; in p_rtable_sysctl()
287 xo_open_instance("rt-family"); in p_rtable_sysctl()
289 xo_open_list("rt-entry"); in p_rtable_sysctl()
293 p_rtentry_sysctl("rt-entry", rtm); in p_rtable_sysctl()
296 xo_close_list("rt-entry"); in p_rtable_sysctl()
297 xo_close_instance("rt-family"); in p_rtable_sysctl()
299 xo_close_list("rt-family"); in p_rtable_sysctl()
300 xo_close_container("route-table"); in p_rtable_sysctl()
305 p_rtentry_sysctl(const char *name, struct rt_msghdr *rtm) in p_rtentry_sysctl() argument
313 sa = (struct sockaddr *)(rtm + 1); in p_rtentry_sysctl()
315 if (rtm->rtm_addrs & (1 << i)) { in p_rtentry_sysctl()
323 rtm->rtm_flags, wid.dst); in p_rtentry_sysctl()
325 wid.gw - protrusion); in p_rtentry_sysctl()
326 snprintf(buffer, sizeof(buffer), "{[:-%d}{:flags/%%s}{]:} ", in p_rtentry_sysctl()
327 wid.flags - protrusion); in p_rtentry_sysctl()
328 p_flags(rtm->rtm_flags, buffer); in p_rtentry_sysctl()
329 /* Output path weight as non-visual property */ in p_rtentry_sysctl()
330 xo_emit("{e:weight/%u}", rtm->rtm_rmx.rmx_weight); in p_rtentry_sysctl()
332 /* XXX: use=0? */ in p_rtentry_sysctl()
333 xo_emit("{t:nhop/%*lu} ", wid.mtu, rtm->rtm_rmx.rmx_nhidx); in p_rtentry_sysctl()
335 if (rtm->rtm_rmx.rmx_mtu != 0) in p_rtentry_sysctl()
336 xo_emit("{t:mtu/%*lu} ", wid.mtu, rtm->rtm_rmx.rmx_mtu); in p_rtentry_sysctl()
342 if (rtm->rtm_index < ifmap_size) { in p_rtentry_sysctl()
343 strlcpy(prettyname, ifmap[rtm->rtm_index].ifname, in p_rtentry_sysctl()
346 strlcpy(prettyname, "---", sizeof(prettyname)); in p_rtentry_sysctl()
350 xo_emit("{t:interface-name/%*s}", wid.iface, prettyname); in p_rtentry_sysctl()
352 xo_emit("{t:interface-name/%*.*s}", wid.iface, wid.iface, in p_rtentry_sysctl()
354 if (rtm->rtm_rmx.rmx_expire) { in p_rtentry_sysctl()
357 if ((expire_time = rtm->rtm_rmx.rmx_expire - uptime.tv_sec) > 0) in p_rtentry_sysctl()
358 xo_emit(" {:expire-time/%*d}", wid.expire, in p_rtentry_sysctl()
384 -width, name); in p_sockaddr()
386 protrusion = strlen(cp) - width; in p_sockaddr()
390 snprintf(buf, sizeof(buf), "{[:%d}{:%s/%%-.*s}{]:} ", in p_sockaddr()
391 -width, name); in p_sockaddr()
408 switch(sa->sa_family) { in fmt_sockaddr()
412 * The sa6->sin6_scope_id must be filled here because in fmt_sockaddr()
414 * and has KAME-specific embedded scope id in in fmt_sockaddr()
415 * sa6->sin6_addr.s6_addr[2]. in fmt_sockaddr()
430 strlcpy(buf, ((struct sockaddr_ng *)sa)->sg_data, in fmt_sockaddr()
441 if (sdl->sdl_nlen) in fmt_sockaddr()
442 cp = sdl->sdl_data; in fmt_sockaddr()
450 u_char *s = (u_char *)sa->sa_data, *slim; in fmt_sockaddr()
454 slim = sa->sa_len + (u_char *) sa; in fmt_sockaddr()
455 cqlim = cq + sizeof(buf) - sizeof(" ffff"); in fmt_sockaddr()
456 snprintf(cq, sizeof(buf), "(%d)", sa->sa_family); in fmt_sockaddr()
488 error = getnameinfo(sa, sa->sa_len, line, sizeof(line), in routename()
492 switch (sa->sa_family) { in routename()
495 src = &satosin(sa)->sin_addr; in routename()
500 src = &satosin6(sa)->sin6_addr; in routename()
506 inet_ntop(sa->sa_family, src, line, sizeof(line) - 1); in routename()
537 i = -1; /* noncontig */ in domask()
542 if (i == -1) in domask()
545 snprintf(dst, buflen, "/%d", 32-i); in domask()
554 switch (sa->sa_family) { in netname()
557 return (netname4(satosin(sa)->sin_addr.s_addr, in netname()
558 satosin(mask)->sin_addr.s_addr)); in netname()
560 return (netname4(satosin(sa)->sin_addr.s_addr, in netname()
593 cp = np->n_name; in netname4()
602 domask(line + strlen(line), sizeof(line) - strlen(line), ntohl(mask)); in netname4()
619 if (IN6_IS_ADDR_LINKLOCAL(&sa6->sin6_addr) || in in6_fillscopeid()
620 IN6_IS_ADDR_MC_NODELOCAL(&sa6->sin6_addr) || in in6_fillscopeid()
621 IN6_IS_ADDR_MC_LINKLOCAL(&sa6->sin6_addr)) { in in6_fillscopeid()
622 if (sa6->sin6_scope_id == 0) in in6_fillscopeid()
623 sa6->sin6_scope_id = in in6_fillscopeid()
624 ntohs(*(u_int16_t *)&sa6->sin6_addr.s6_addr[2]); in in6_fillscopeid()
625 sa6->sin6_addr.s6_addr[2] = sa6->sin6_addr.s6_addr[3] = 0; in in6_fillscopeid()
646 static char line[NI_MAXHOST + sizeof("/xxx") - 1]; in netname6()
656 p = (u_char *)&mask->sin6_addr; in netname6()
659 /* -1 is required. */ in netname6()
660 masklen += (masktolen[*p] - 1); in netname6()
670 mask->sin6_addr.s6_addr[i]; in netname6()
677 IN6_IS_ADDR_UNSPECIFIED(&sa6->sin6_addr)) in netname6()
680 getnameinfo((struct sockaddr *)sa6, sa6->sin6_len, nline, sizeof(nline), in netname6()
685 getnameinfo((struct sockaddr *)sa6, sa6->sin6_len, line, in netname6()
713 p(rts_badredirect, "\t{:bad-redirects/%ju} " in rt_stats()
715 p(rts_dynamic, "\t{:dynamically-created/%ju} " in rt_stats()
717 p(rts_newgateway, "\t{:new-gateways/%ju} " in rt_stats()
719 p(rts_unreach, "\t{:unreachable-destination/%ju} " in rt_stats()
721 p(rts_wildcard, "\t{:wildcard-uses/%ju} " in rt_stats()
722 "{N:/use%s of a wildcard route}\n"); in rt_stats()