def callback(msg, _): """Callback function called by libnl upon receiving messages from the kernel. Positional arguments: msg -- nl_msg class instance containing the data sent by the kernel. Returns: An integer, value of NL_OK. It tells libnl to proceed with processing the next kernel message. """ # First convert `msg` into something more manageable. nlh = nlmsg_hdr(msg) iface = ifinfomsg(nlmsg_data(nlh)) hdr = IFLA_RTA(iface) remaining = ctypes.c_int(nlh.nlmsg_len - NLMSG_LENGTH(iface.SIZEOF)) # Now iterate through each rtattr stored in `iface`. while RTA_OK(hdr, remaining): # Each rtattr (which is what hdr is) instance is only one type. Looping through all of them until we run into # the ones we care about. if hdr.rta_type == IFLA_IFNAME: print('Found network interface {0}: {1}'.format( iface.ifi_index, get_string(RTA_DATA(hdr)).decode('ascii'))) hdr = RTA_NEXT(hdr, remaining) return NL_OK
def callback(msg, arg): nlh = nlmsg_hdr(msg) iface = ifinfomsg(nlmsg_data(nlh)) hdr = IFLA_RTA(iface) remaining = c_int(nlh.nlmsg_len - NLMSG_LENGTH(iface.SIZEOF)) while RTA_OK(hdr, remaining): if hdr.rta_type == IFLA_IFNAME: arg[int(iface.ifi_index)] = str(get_string(RTA_DATA(hdr)).decode('ascii')) hdr = RTA_NEXT(hdr, remaining) return NL_OK
def callback(msg, _): """Callback function called by libnl upon receiving messages from the kernel. Positional arguments: msg -- nl_msg class instance containing the data sent by the kernel. Returns: An integer, value of NL_OK. It tells libnl to proceed with processing the next kernel message. """ # First convert `msg` into something more manageable. nlh = nlmsg_hdr(msg) iface = ifinfomsg(nlmsg_data(nlh)) hdr = IFLA_RTA(iface) remaining = ctypes.c_int(nlh.nlmsg_len - NLMSG_LENGTH(iface.SIZEOF)) # Now iterate through each rtattr stored in `iface`. while RTA_OK(hdr, remaining): # Each rtattr (which is what hdr is) instance is only one type. Looping through all of them until we run into # the ones we care about. if hdr.rta_type == IFLA_IFNAME: print('Found network interface {0}: {1}'.format(iface.ifi_index, get_string(RTA_DATA(hdr)).decode('ascii'))) hdr = RTA_NEXT(hdr, remaining) return NL_OK