| 280 | } |
| 281 | |
| 282 | static void |
| 283 | update_global_map(struct nhop_external *nh) |
| 284 | { |
| 285 | char iface_name[128]; |
| 286 | char gw_addr[144]; |
| 287 | struct nhop_addrs *na; |
| 288 | struct sockaddr *sa_gw; |
| 289 | |
| 290 | na = (struct nhop_addrs *)((char *)nh + nh->nh_len); |
| 291 | sa_gw = (struct sockaddr *)((char *)na + na->gw_sa_off); |
| 292 | |
| 293 | memset(iface_name, 0, sizeof(iface_name)); |
| 294 | if (nh->ifindex < (uint32_t)ifmap_size) { |
| 295 | strlcpy(iface_name, ifmap[nh->ifindex].ifname, |
| 296 | sizeof(iface_name)); |
| 297 | if (*iface_name == '\0') |
| 298 | strlcpy(iface_name, "---", sizeof(iface_name)); |
| 299 | } |
| 300 | |
| 301 | if (nh->nh_flags & NHF_GATEWAY) { |
| 302 | const char *cp; |
| 303 | cp = fmt_sockaddr(sa_gw, NULL, RTF_HOST); |
| 304 | strlcpy(gw_addr, cp, sizeof(gw_addr)); |
| 305 | } else |
| 306 | snprintf(gw_addr, sizeof(gw_addr), "%s/resolve", iface_name); |
| 307 | |
| 308 | nhop_map_update(&global_nhop_map, nh->nh_idx, gw_addr, iface_name); |
| 309 | } |
| 310 | |
| 311 | static void |
| 312 | prepare_nh_map(int fibnum, int af) |
no test coverage detected