| 313 | } |
| 314 | |
| 315 | static void |
| 316 | p_rtentry_sysctl(const char *name, struct rt_msghdr *rtm) |
| 317 | { |
| 318 | struct sockaddr *sa, *addr[RTAX_MAX]; |
| 319 | char buffer[128]; |
| 320 | char prettyname[128]; |
| 321 | int i, protrusion; |
| 322 | |
| 323 | xo_open_instance(name); |
| 324 | sa = (struct sockaddr *)(rtm + 1); |
| 325 | for (i = 0; i < RTAX_MAX; i++) { |
| 326 | if (rtm->rtm_addrs & (1 << i)) { |
| 327 | addr[i] = sa; |
| 328 | sa = (struct sockaddr *)((char *)sa + SA_SIZE(sa)); |
| 329 | } |
| 330 | } |
| 331 | |
| 332 | protrusion = p_sockaddr("destination", addr[RTAX_DST], |
| 333 | addr[RTAX_NETMASK], |
| 334 | rtm->rtm_flags, wid_dst); |
| 335 | protrusion = p_sockaddr("gateway", addr[RTAX_GATEWAY], NULL, RTF_HOST, |
| 336 | wid_gw - protrusion); |
| 337 | snprintf(buffer, sizeof(buffer), "{[:-%d}{:flags/%%s}{]:} ", |
| 338 | wid_flags - protrusion); |
| 339 | p_flags(rtm->rtm_flags, buffer); |
| 340 | if (Wflag) { |
| 341 | /* XXX: use=0? */ |
| 342 | xo_emit("{t:nhop/%*lu} ", wid_mtu, rtm->rtm_rmx.rmx_nhidx); |
| 343 | |
| 344 | if (rtm->rtm_rmx.rmx_mtu != 0) |
| 345 | xo_emit("{t:mtu/%*lu} ", wid_mtu, rtm->rtm_rmx.rmx_mtu); |
| 346 | else |
| 347 | xo_emit("{P:/%*s} ", wid_mtu, ""); |
| 348 | } |
| 349 | |
| 350 | memset(prettyname, 0, sizeof(prettyname)); |
| 351 | if (rtm->rtm_index < ifmap_size) { |
| 352 | strlcpy(prettyname, ifmap[rtm->rtm_index].ifname, |
| 353 | sizeof(prettyname)); |
| 354 | if (*prettyname == '\0') |
| 355 | strlcpy(prettyname, "---", sizeof(prettyname)); |
| 356 | } |
| 357 | |
| 358 | if (Wflag) |
| 359 | xo_emit("{t:interface-name/%*s}", wid_if, prettyname); |
| 360 | else |
| 361 | xo_emit("{t:interface-name/%*.*s}", wid_if, wid_if, |
| 362 | prettyname); |
| 363 | if (rtm->rtm_rmx.rmx_expire) { |
| 364 | time_t expire_time; |
| 365 | |
| 366 | if ((expire_time = rtm->rtm_rmx.rmx_expire - uptime.tv_sec) > 0) |
| 367 | xo_emit(" {:expire-time/%*d}", wid_expire, |
| 368 | (int)expire_time); |
| 369 | } |
| 370 | |
| 371 | xo_emit("\n"); |
| 372 | xo_close_instance(name); |
no test coverage detected