| 12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152 |
- /* include if_indextoname */
- #include "unpifi.h"
- #include "unproute.h"
- char *
- if_indextoname(unsigned int idx, char *name)
- {
- char *buf, *next, *lim;
- size_t len;
- struct if_msghdr *ifm;
- struct sockaddr *sa, *rti_info[RTAX_MAX];
- struct sockaddr_dl *sdl;
- if ( (buf = net_rt_iflist(0, idx, &len)) == NULL)
- return(NULL);
- lim = buf + len;
- for (next = buf; next < lim; next += ifm->ifm_msglen) {
- ifm = (struct if_msghdr *) next;
- if (ifm->ifm_type == RTM_IFINFO) {
- sa = (struct sockaddr *) (ifm + 1);
- get_rtaddrs(ifm->ifm_addrs, sa, rti_info);
- if ( (sa = rti_info[RTAX_IFP]) != NULL) {
- if (sa->sa_family == AF_LINK) {
- sdl = (struct sockaddr_dl *) sa;
- if (sdl->sdl_index == idx) {
- int slen = min(IFNAMSIZ - 1, sdl->sdl_nlen);
- strncpy(name, sdl->sdl_data, slen);
- name[slen] = 0; /* null terminate */
- free(buf);
- return(name);
- }
- }
- }
- }
- }
- free(buf);
- return(NULL); /* no match for index */
- }
- /* end if_indextoname */
- char *
- If_indextoname(unsigned int idx, char *name)
- {
- char *ptr;
- if ( (ptr = if_indextoname(idx, name)) == NULL)
- err_quit("if_indextoname error for %d", idx);
- return(ptr);
- }
|