• Home
  • Raw
  • Download

Lines Matching refs:link

92 static struct rtnl_link_af_ops *af_lookup_and_alloc(struct rtnl_link *link,  in af_lookup_and_alloc()  argument
102 if (!(data = rtnl_link_af_alloc(link, af_ops))) { in af_lookup_and_alloc()
110 static int af_free(struct rtnl_link *link, struct rtnl_link_af_ops *ops, in af_free() argument
114 ops->ao_free(link, data); in af_free()
132 static int af_clone(struct rtnl_link *link, struct rtnl_link_af_ops *ops, in af_clone() argument
144 static int af_fill(struct rtnl_link *link, struct rtnl_link_af_ops *ops, in af_fill() argument
158 if ((err = ops->ao_fill_af(link, arg, data)) < 0) in af_fill()
167 static int af_fill_pi(struct rtnl_link *link, struct rtnl_link_af_ops *ops, in af_fill_pi() argument
183 if ((err = ops->ao_fill_pi(link, arg, data)) < 0) in af_fill_pi()
191 static int af_dump_line(struct rtnl_link *link, struct rtnl_link_af_ops *ops, in af_dump_line() argument
197 ops->ao_dump[NL_DUMP_LINE](link, p, data); in af_dump_line()
202 static int af_dump_details(struct rtnl_link *link, struct rtnl_link_af_ops *ops, in af_dump_details() argument
208 ops->ao_dump[NL_DUMP_DETAILS](link, p, data); in af_dump_details()
213 static int af_dump_stats(struct rtnl_link *link, struct rtnl_link_af_ops *ops, in af_dump_stats() argument
219 ops->ao_dump[NL_DUMP_STATS](link, p, data); in af_dump_stats()
224 static int do_foreach_af(struct rtnl_link *link, in do_foreach_af() argument
232 if (link->l_af_data[i]) { in do_foreach_af()
238 err = cb(link, ops, link->l_af_data[i], arg); in do_foreach_af()
250 static void release_link_info(struct rtnl_link *link) in release_link_info() argument
252 struct rtnl_link_info_ops *io = link->l_info_ops; in release_link_info()
256 io->io_free(link); in release_link_info()
259 BUG_ON(link->l_info); in release_link_info()
262 link->l_info_ops = NULL; in release_link_info()
268 struct rtnl_link *link = nl_object_priv(c); in link_free_data() local
270 if (link) { in link_free_data()
271 release_link_info(link); in link_free_data()
274 rtnl_link_af_ops_put(link->l_af_ops); in link_free_data()
276 nl_addr_put(link->l_addr); in link_free_data()
277 nl_addr_put(link->l_bcast); in link_free_data()
279 free(link->l_ifalias); in link_free_data()
280 free(link->l_info_kind); in link_free_data()
281 free(link->l_info_slave_kind); in link_free_data()
283 do_foreach_af(link, af_free, NULL); in link_free_data()
285 nl_data_free(link->l_phys_port_id); in link_free_data()
286 nl_data_free(link->l_phys_switch_id); in link_free_data()
288 if (link->ce_mask & LINK_ATTR_VF_LIST) in link_free_data()
289 rtnl_link_sriov_free_data(link); in link_free_data()
384 int rtnl_link_info_parse(struct rtnl_link *link, struct nlattr **tb) in rtnl_link_info_parse() argument
389 nla_strlcpy(link->l_name, tb[IFLA_IFNAME], IFNAMSIZ); in rtnl_link_info_parse()
395 link->l_stats[RTNL_LINK_RX_PACKETS] = st->rx_packets; in rtnl_link_info_parse()
396 link->l_stats[RTNL_LINK_TX_PACKETS] = st->tx_packets; in rtnl_link_info_parse()
397 link->l_stats[RTNL_LINK_RX_BYTES] = st->rx_bytes; in rtnl_link_info_parse()
398 link->l_stats[RTNL_LINK_TX_BYTES] = st->tx_bytes; in rtnl_link_info_parse()
399 link->l_stats[RTNL_LINK_RX_ERRORS] = st->rx_errors; in rtnl_link_info_parse()
400 link->l_stats[RTNL_LINK_TX_ERRORS] = st->tx_errors; in rtnl_link_info_parse()
401 link->l_stats[RTNL_LINK_RX_DROPPED] = st->rx_dropped; in rtnl_link_info_parse()
402 link->l_stats[RTNL_LINK_TX_DROPPED] = st->tx_dropped; in rtnl_link_info_parse()
403 link->l_stats[RTNL_LINK_MULTICAST] = st->multicast; in rtnl_link_info_parse()
404 link->l_stats[RTNL_LINK_COLLISIONS] = st->collisions; in rtnl_link_info_parse()
406 link->l_stats[RTNL_LINK_RX_LEN_ERR] = st->rx_length_errors; in rtnl_link_info_parse()
407 link->l_stats[RTNL_LINK_RX_OVER_ERR] = st->rx_over_errors; in rtnl_link_info_parse()
408 link->l_stats[RTNL_LINK_RX_CRC_ERR] = st->rx_crc_errors; in rtnl_link_info_parse()
409 link->l_stats[RTNL_LINK_RX_FRAME_ERR] = st->rx_frame_errors; in rtnl_link_info_parse()
410 link->l_stats[RTNL_LINK_RX_FIFO_ERR] = st->rx_fifo_errors; in rtnl_link_info_parse()
411 link->l_stats[RTNL_LINK_RX_MISSED_ERR] = st->rx_missed_errors; in rtnl_link_info_parse()
413 link->l_stats[RTNL_LINK_TX_ABORT_ERR] = st->tx_aborted_errors; in rtnl_link_info_parse()
414 link->l_stats[RTNL_LINK_TX_CARRIER_ERR] = st->tx_carrier_errors; in rtnl_link_info_parse()
415 link->l_stats[RTNL_LINK_TX_FIFO_ERR] = st->tx_fifo_errors; in rtnl_link_info_parse()
416 link->l_stats[RTNL_LINK_TX_HBEAT_ERR] = st->tx_heartbeat_errors; in rtnl_link_info_parse()
417 link->l_stats[RTNL_LINK_TX_WIN_ERR] = st->tx_window_errors; in rtnl_link_info_parse()
419 link->l_stats[RTNL_LINK_RX_COMPRESSED] = st->rx_compressed; in rtnl_link_info_parse()
420 link->l_stats[RTNL_LINK_TX_COMPRESSED] = st->tx_compressed; in rtnl_link_info_parse()
426 link->l_stats[RTNL_LINK_RX_NOHANDLER] = st->rx_nohandler; in rtnl_link_info_parse()
428 link->l_stats[RTNL_LINK_RX_NOHANDLER] = 0; in rtnl_link_info_parse()
430 link->ce_mask |= LINK_ATTR_STATS; in rtnl_link_info_parse()
445 link->l_stats[RTNL_LINK_RX_PACKETS] = st.rx_packets; in rtnl_link_info_parse()
446 link->l_stats[RTNL_LINK_TX_PACKETS] = st.tx_packets; in rtnl_link_info_parse()
447 link->l_stats[RTNL_LINK_RX_BYTES] = st.rx_bytes; in rtnl_link_info_parse()
448 link->l_stats[RTNL_LINK_TX_BYTES] = st.tx_bytes; in rtnl_link_info_parse()
449 link->l_stats[RTNL_LINK_RX_ERRORS] = st.rx_errors; in rtnl_link_info_parse()
450 link->l_stats[RTNL_LINK_TX_ERRORS] = st.tx_errors; in rtnl_link_info_parse()
451 link->l_stats[RTNL_LINK_RX_DROPPED] = st.rx_dropped; in rtnl_link_info_parse()
452 link->l_stats[RTNL_LINK_TX_DROPPED] = st.tx_dropped; in rtnl_link_info_parse()
453 link->l_stats[RTNL_LINK_MULTICAST] = st.multicast; in rtnl_link_info_parse()
454 link->l_stats[RTNL_LINK_COLLISIONS] = st.collisions; in rtnl_link_info_parse()
456 link->l_stats[RTNL_LINK_RX_LEN_ERR] = st.rx_length_errors; in rtnl_link_info_parse()
457 link->l_stats[RTNL_LINK_RX_OVER_ERR] = st.rx_over_errors; in rtnl_link_info_parse()
458 link->l_stats[RTNL_LINK_RX_CRC_ERR] = st.rx_crc_errors; in rtnl_link_info_parse()
459 link->l_stats[RTNL_LINK_RX_FRAME_ERR] = st.rx_frame_errors; in rtnl_link_info_parse()
460 link->l_stats[RTNL_LINK_RX_FIFO_ERR] = st.rx_fifo_errors; in rtnl_link_info_parse()
461 link->l_stats[RTNL_LINK_RX_MISSED_ERR] = st.rx_missed_errors; in rtnl_link_info_parse()
463 link->l_stats[RTNL_LINK_TX_ABORT_ERR] = st.tx_aborted_errors; in rtnl_link_info_parse()
464 link->l_stats[RTNL_LINK_TX_CARRIER_ERR] = st.tx_carrier_errors; in rtnl_link_info_parse()
465 link->l_stats[RTNL_LINK_TX_FIFO_ERR] = st.tx_fifo_errors; in rtnl_link_info_parse()
466 link->l_stats[RTNL_LINK_TX_HBEAT_ERR] = st.tx_heartbeat_errors; in rtnl_link_info_parse()
467 link->l_stats[RTNL_LINK_TX_WIN_ERR] = st.tx_window_errors; in rtnl_link_info_parse()
469 link->l_stats[RTNL_LINK_RX_COMPRESSED] = st.rx_compressed; in rtnl_link_info_parse()
470 link->l_stats[RTNL_LINK_TX_COMPRESSED] = st.tx_compressed; in rtnl_link_info_parse()
475 link->l_stats[RTNL_LINK_RX_NOHANDLER] = st.rx_nohandler; in rtnl_link_info_parse()
477 link->ce_mask |= LINK_ATTR_STATS; in rtnl_link_info_parse()
481 link->l_txqlen = nla_get_u32(tb[IFLA_TXQLEN]); in rtnl_link_info_parse()
482 link->ce_mask |= LINK_ATTR_TXQLEN; in rtnl_link_info_parse()
486 link->l_mtu = nla_get_u32(tb[IFLA_MTU]); in rtnl_link_info_parse()
487 link->ce_mask |= LINK_ATTR_MTU; in rtnl_link_info_parse()
491 link->l_addr = nl_addr_alloc_attr(tb[IFLA_ADDRESS], AF_UNSPEC); in rtnl_link_info_parse()
492 if (link->l_addr == NULL) in rtnl_link_info_parse()
494 nl_addr_set_family(link->l_addr, in rtnl_link_info_parse()
495 nl_addr_guess_family(link->l_addr)); in rtnl_link_info_parse()
496 link->ce_mask |= LINK_ATTR_ADDR; in rtnl_link_info_parse()
500 link->l_bcast = nl_addr_alloc_attr(tb[IFLA_BROADCAST], in rtnl_link_info_parse()
502 if (link->l_bcast == NULL) in rtnl_link_info_parse()
504 nl_addr_set_family(link->l_bcast, in rtnl_link_info_parse()
505 nl_addr_guess_family(link->l_bcast)); in rtnl_link_info_parse()
506 link->ce_mask |= LINK_ATTR_BRD; in rtnl_link_info_parse()
510 link->l_link = nla_get_u32(tb[IFLA_LINK]); in rtnl_link_info_parse()
511 link->ce_mask |= LINK_ATTR_LINK; in rtnl_link_info_parse()
515 link->l_link_netnsid = nla_get_s32(tb[IFLA_LINK_NETNSID]); in rtnl_link_info_parse()
516 link->ce_mask |= LINK_ATTR_LINK_NETNSID; in rtnl_link_info_parse()
520 link->l_weight = nla_get_u32(tb[IFLA_WEIGHT]); in rtnl_link_info_parse()
521 link->ce_mask |= LINK_ATTR_WEIGHT; in rtnl_link_info_parse()
525 nla_strlcpy(link->l_qdisc, tb[IFLA_QDISC], IFQDISCSIZ); in rtnl_link_info_parse()
526 link->ce_mask |= LINK_ATTR_QDISC; in rtnl_link_info_parse()
530 nla_memcpy(&link->l_map, tb[IFLA_MAP], in rtnl_link_info_parse()
532 link->ce_mask |= LINK_ATTR_MAP; in rtnl_link_info_parse()
536 link->l_master = nla_get_u32(tb[IFLA_MASTER]); in rtnl_link_info_parse()
537 link->ce_mask |= LINK_ATTR_MASTER; in rtnl_link_info_parse()
541 link->l_carrier = nla_get_u8(tb[IFLA_CARRIER]); in rtnl_link_info_parse()
542 link->ce_mask |= LINK_ATTR_CARRIER; in rtnl_link_info_parse()
546 link->l_carrier_changes = nla_get_u32(tb[IFLA_CARRIER_CHANGES]); in rtnl_link_info_parse()
547 link->ce_mask |= LINK_ATTR_CARRIER_CHANGES; in rtnl_link_info_parse()
551 link->l_operstate = nla_get_u8(tb[IFLA_OPERSTATE]); in rtnl_link_info_parse()
552 link->ce_mask |= LINK_ATTR_OPERSTATE; in rtnl_link_info_parse()
556 link->l_linkmode = nla_get_u8(tb[IFLA_LINKMODE]); in rtnl_link_info_parse()
557 link->ce_mask |= LINK_ATTR_LINKMODE; in rtnl_link_info_parse()
561 link->l_ifalias = nla_strdup(tb[IFLA_IFALIAS]); in rtnl_link_info_parse()
562 if (link->l_ifalias == NULL) in rtnl_link_info_parse()
564 link->ce_mask |= LINK_ATTR_IFALIAS; in rtnl_link_info_parse()
568 link->l_ns_fd = nla_get_u32(tb[IFLA_NET_NS_FD]); in rtnl_link_info_parse()
569 link->ce_mask |= LINK_ATTR_NS_FD; in rtnl_link_info_parse()
573 link->l_ns_pid = nla_get_u32(tb[IFLA_NET_NS_PID]); in rtnl_link_info_parse()
574 link->ce_mask |= LINK_ATTR_NS_PID; in rtnl_link_info_parse()
583 struct rtnl_link *link; in link_msg_parser() local
593 link = rtnl_link_alloc(); in link_msg_parser()
594 if (link == NULL) { in link_msg_parser()
599 link->ce_msgtype = n->nlmsg_type; in link_msg_parser()
607 link->l_family = family = ifi->ifi_family; in link_msg_parser()
608 link->l_arptype = ifi->ifi_type; in link_msg_parser()
609 link->l_index = ifi->ifi_index; in link_msg_parser()
610 link->l_flags = ifi->ifi_flags; in link_msg_parser()
611 link->l_change = ifi->ifi_change; in link_msg_parser()
612 link->ce_mask = (LINK_ATTR_IFNAME | LINK_ATTR_FAMILY | in link_msg_parser()
616 if ((af_ops_family = af_ops = af_lookup_and_alloc(link, family))) { in link_msg_parser()
623 link->l_af_ops = af_ops; in link_msg_parser()
630 err = rtnl_link_info_parse(link, tb); in link_msg_parser()
635 link->l_num_vf = nla_get_u32(tb[IFLA_NUM_VF]); in link_msg_parser()
636 link->ce_mask |= LINK_ATTR_NUM_VF; in link_msg_parser()
637 if (link->l_num_vf && tb[IFLA_VFINFO_LIST]) { in link_msg_parser()
638 if ((err = rtnl_link_sriov_parse_vflist(link, tb)) < 0) { in link_msg_parser()
641 link->ce_mask |= LINK_ATTR_VF_LIST; in link_msg_parser()
658 err = rtnl_link_set_type(link, kind); in link_msg_parser()
663 !af_ops && (af_ops = af_lookup_and_alloc(link, af))) { in link_msg_parser()
668 link->l_family = af; in link_msg_parser()
669 link->l_af_ops = af_ops; in link_msg_parser()
673 link->l_info_ops = ops; in link_msg_parser()
678 err = ops->io_parse(link, li[IFLA_INFO_DATA], in link_msg_parser()
687 link->ce_mask |= LINK_ATTR_LINKINFO; in link_msg_parser()
693 err = rtnl_link_set_slave_type(link, kind); in link_msg_parser()
697 link->ce_mask |= LINK_ATTR_LINKINFO_SLAVE_KIND; in link_msg_parser()
702 err = af_ops->ao_parse_protinfo(link, tb[IFLA_PROTINFO], in link_msg_parser()
703 link->l_af_data[link->l_family]); in link_msg_parser()
706 link->ce_mask |= LINK_ATTR_PROTINFO; in link_msg_parser()
714 err = af_ops_family->ao_parse_af_full(link, in link_msg_parser()
716 link->l_af_data[af_ops_family->ao_family]); in link_msg_parser()
719 link->ce_mask |= LINK_ATTR_AF_SPEC; in link_msg_parser()
725 af_ops = af_lookup_and_alloc(link, nla_type(af_attr)); in link_msg_parser()
727 char *af_data = link->l_af_data[nla_type(af_attr)]; in link_msg_parser()
729 err = af_ops->ao_parse_af(link, af_attr, af_data); in link_msg_parser()
734 link->ce_mask |= LINK_ATTR_AF_SPEC; in link_msg_parser()
742 link->l_promiscuity = nla_get_u32(tb[IFLA_PROMISCUITY]); in link_msg_parser()
743 link->ce_mask |= LINK_ATTR_PROMISCUITY; in link_msg_parser()
747 link->l_num_tx_queues = nla_get_u32(tb[IFLA_NUM_TX_QUEUES]); in link_msg_parser()
748 link->ce_mask |= LINK_ATTR_NUM_TX_QUEUES; in link_msg_parser()
752 link->l_num_rx_queues = nla_get_u32(tb[IFLA_NUM_RX_QUEUES]); in link_msg_parser()
753 link->ce_mask |= LINK_ATTR_NUM_RX_QUEUES; in link_msg_parser()
757 link->l_gso_max_segs = nla_get_u32(tb[IFLA_GSO_MAX_SEGS]); in link_msg_parser()
758 link->ce_mask |= LINK_ATTR_GSO_MAX_SEGS; in link_msg_parser()
762 link->l_gso_max_size = nla_get_u32(tb[IFLA_GSO_MAX_SIZE]); in link_msg_parser()
763 link->ce_mask |= LINK_ATTR_GSO_MAX_SIZE; in link_msg_parser()
767 link->l_group = nla_get_u32(tb[IFLA_GROUP]); in link_msg_parser()
768 link->ce_mask |= LINK_ATTR_GROUP; in link_msg_parser()
772 link->l_phys_port_id = nl_data_alloc_attr(tb[IFLA_PHYS_PORT_ID]); in link_msg_parser()
773 if (link->l_phys_port_id == NULL) { in link_msg_parser()
777 link->ce_mask |= LINK_ATTR_PHYS_PORT_ID; in link_msg_parser()
781 nla_strlcpy(link->l_phys_port_name, tb[IFLA_PHYS_PORT_NAME], IFNAMSIZ); in link_msg_parser()
782 link->ce_mask |= LINK_ATTR_PHYS_PORT_NAME; in link_msg_parser()
786 link->l_phys_switch_id = nl_data_alloc_attr(tb[IFLA_PHYS_SWITCH_ID]); in link_msg_parser()
787 if (link->l_phys_switch_id == NULL) { in link_msg_parser()
791 link->ce_mask |= LINK_ATTR_PHYS_SWITCH_ID; in link_msg_parser()
794 err = pp->pp_cb((struct nl_object *) link, pp); in link_msg_parser()
797 rtnl_link_put(link); in link_msg_parser()
844 struct rtnl_link *link = (struct rtnl_link *) obj; in link_dump_line() local
852 if (link->l_family != AF_UNSPEC) in link_dump_line()
853 nl_dump_line(p, "%s ", nl_af2str(link->l_family, buf, sizeof(buf))); in link_dump_line()
855 nl_dump_line(p, "%s %s ", link->l_name, in link_dump_line()
856 nl_llproto2str(link->l_arptype, buf, sizeof(buf))); in link_dump_line()
858 if (link->l_addr && !nl_addr_iszero(link->l_addr)) in link_dump_line()
859 nl_dump(p, "%s ", nl_addr2str(link->l_addr, buf, sizeof(buf))); in link_dump_line()
861 if (link->ce_mask & LINK_ATTR_MASTER) { in link_dump_line()
863 struct rtnl_link *master = rtnl_link_get(cache, link->l_master); in link_dump_line()
868 nl_dump(p, "master %d ", link->l_master); in link_dump_line()
871 rtnl_link_flags2str(link->l_flags, buf, sizeof(buf)); in link_dump_line()
875 if (link->ce_mask & LINK_ATTR_LINK) { in link_dump_line()
877 && !(link->ce_mask & LINK_ATTR_LINK_NETNSID)) { in link_dump_line()
878 struct rtnl_link *ll = rtnl_link_get(cache, link->l_link); in link_dump_line()
883 nl_dump(p, "slave-of %d ", link->l_link); in link_dump_line()
885 if (link->ce_mask & LINK_ATTR_LINK_NETNSID) in link_dump_line()
886 nl_dump(p, "link-netnsid %d ", link->l_link_netnsid); in link_dump_line()
888 if (link->ce_mask & LINK_ATTR_GROUP) in link_dump_line()
889 nl_dump(p, "group %u ", link->l_group); in link_dump_line()
891 if (link->l_info_ops && link->l_info_ops->io_dump[NL_DUMP_LINE]) in link_dump_line()
892 link->l_info_ops->io_dump[NL_DUMP_LINE](link, p); in link_dump_line()
894 do_foreach_af(link, af_dump_line, p); in link_dump_line()
904 struct rtnl_link *link = (struct rtnl_link *) obj; in link_dump_details() local
909 nl_dump_line(p, " mtu %u ", link->l_mtu); in link_dump_details()
910 nl_dump(p, "txqlen %u weight %u ", link->l_txqlen, link->l_weight); in link_dump_details()
912 if (link->ce_mask & LINK_ATTR_QDISC) in link_dump_details()
913 nl_dump(p, "qdisc %s ", link->l_qdisc); in link_dump_details()
915 if (link->ce_mask & LINK_ATTR_MAP && link->l_map.lm_irq) in link_dump_details()
916 nl_dump(p, "irq %u ", link->l_map.lm_irq); in link_dump_details()
918 if (link->ce_mask & LINK_ATTR_IFINDEX) in link_dump_details()
919 nl_dump(p, "index %u ", link->l_index); in link_dump_details()
921 if (link->ce_mask & LINK_ATTR_PROMISCUITY && link->l_promiscuity > 0) in link_dump_details()
922 nl_dump(p, "promisc-mode (%u users) ", link->l_promiscuity); in link_dump_details()
926 if (link->ce_mask & LINK_ATTR_IFALIAS) in link_dump_details()
927 nl_dump_line(p, " alias %s\n", link->l_ifalias); in link_dump_details()
931 if (link->ce_mask & LINK_ATTR_NUM_TX_QUEUES) in link_dump_details()
932 nl_dump(p, "txq %u ", link->l_num_tx_queues); in link_dump_details()
934 if (link->ce_mask & LINK_ATTR_NUM_RX_QUEUES) in link_dump_details()
935 nl_dump(p, "rxq %u ", link->l_num_rx_queues); in link_dump_details()
937 if (link->ce_mask & LINK_ATTR_BRD) in link_dump_details()
938 nl_dump(p, "brd %s ", nl_addr2str(link->l_bcast, buf, in link_dump_details()
941 if ((link->ce_mask & LINK_ATTR_OPERSTATE) && in link_dump_details()
942 link->l_operstate != IF_OPER_UNKNOWN) { in link_dump_details()
943 rtnl_link_operstate2str(link->l_operstate, buf, sizeof(buf)); in link_dump_details()
947 if (link->ce_mask & LINK_ATTR_NUM_VF) in link_dump_details()
948 nl_dump(p, "num-vf %u ", link->l_num_vf); in link_dump_details()
951 rtnl_link_mode2str(link->l_linkmode, buf, sizeof(buf))); in link_dump_details()
954 rtnl_link_carrier2str(link->l_carrier, buf, sizeof(buf))); in link_dump_details()
956 if (link->ce_mask & LINK_ATTR_CARRIER_CHANGES) in link_dump_details()
957 nl_dump(p, " carrier-changes %u", link->l_carrier_changes); in link_dump_details()
961 if (link->l_info_ops && link->l_info_ops->io_dump[NL_DUMP_DETAILS]) in link_dump_details()
962 link->l_info_ops->io_dump[NL_DUMP_DETAILS](link, p); in link_dump_details()
964 do_foreach_af(link, af_dump_details, p); in link_dump_details()
966 if (link->ce_mask & LINK_ATTR_VF_LIST) in link_dump_details()
967 rtnl_link_sriov_dump_details(link, p); in link_dump_details()
972 struct rtnl_link *link = (struct rtnl_link *) obj; in link_dump_stats() local
981 res = nl_cancel_down_bytes(link->l_stats[RTNL_LINK_RX_BYTES], &unit); in link_dump_stats()
987 link->l_stats[RTNL_LINK_RX_PACKETS], in link_dump_stats()
988 link->l_stats[RTNL_LINK_RX_ERRORS], in link_dump_stats()
989 link->l_stats[RTNL_LINK_RX_DROPPED], in link_dump_stats()
990 link->l_stats[RTNL_LINK_RX_FIFO_ERR], in link_dump_stats()
991 link->l_stats[RTNL_LINK_RX_COMPRESSED]); in link_dump_stats()
993 res = nl_cancel_down_bytes(link->l_stats[RTNL_LINK_TX_BYTES], &unit); in link_dump_stats()
999 link->l_stats[RTNL_LINK_TX_PACKETS], in link_dump_stats()
1000 link->l_stats[RTNL_LINK_TX_ERRORS], in link_dump_stats()
1001 link->l_stats[RTNL_LINK_TX_DROPPED], in link_dump_stats()
1002 link->l_stats[RTNL_LINK_TX_FIFO_ERR], in link_dump_stats()
1003 link->l_stats[RTNL_LINK_TX_COMPRESSED]); in link_dump_stats()
1011 link->l_stats[RTNL_LINK_RX_LEN_ERR], in link_dump_stats()
1012 link->l_stats[RTNL_LINK_RX_OVER_ERR], in link_dump_stats()
1013 link->l_stats[RTNL_LINK_RX_CRC_ERR], in link_dump_stats()
1014 link->l_stats[RTNL_LINK_RX_FRAME_ERR], in link_dump_stats()
1015 link->l_stats[RTNL_LINK_RX_MISSED_ERR], in link_dump_stats()
1016 link->l_stats[RTNL_LINK_MULTICAST]); in link_dump_stats()
1023 link->l_stats[RTNL_LINK_TX_ABORT_ERR], in link_dump_stats()
1024 link->l_stats[RTNL_LINK_TX_CARRIER_ERR], in link_dump_stats()
1025 link->l_stats[RTNL_LINK_TX_HBEAT_ERR], in link_dump_stats()
1026 link->l_stats[RTNL_LINK_TX_WIN_ERR], in link_dump_stats()
1027 link->l_stats[RTNL_LINK_COLLISIONS]); in link_dump_stats()
1029 if (link->l_info_ops && link->l_info_ops->io_dump[NL_DUMP_STATS]) in link_dump_stats()
1030 link->l_info_ops->io_dump[NL_DUMP_STATS](link, p); in link_dump_stats()
1032 do_foreach_af(link, af_dump_stats, p); in link_dump_stats()
1034 if (link->ce_mask & LINK_ATTR_VF_LIST) in link_dump_stats()
1035 rtnl_link_sriov_dump_stats(link, p); in link_dump_stats()
1088 struct rtnl_link *link = (struct rtnl_link *) obj; in link_keygen() local
1096 lkey.l_index = link->l_index; in link_keygen()
1097 lkey.l_family = link->l_family; in link_keygen()
1102 link, lkey.l_index, lkey.l_family, lkey_sz, *hashkey); in link_keygen()
1164 __ADD(LINK_ATTR_LINK, link),
1307 struct rtnl_link *link; in rtnl_link_get() local
1312 nl_list_for_each_entry(link, &cache->c_items, ce_list) { in rtnl_link_get()
1313 if (link->l_index == ifindex) { in rtnl_link_get()
1314 nl_object_get((struct nl_object *) link); in rtnl_link_get()
1315 return link; in rtnl_link_get()
1340 struct rtnl_link *link; in rtnl_link_get_by_name() local
1345 nl_list_for_each_entry(link, &cache->c_items, ce_list) { in rtnl_link_get_by_name()
1346 if (!strcmp(name, link->l_name)) { in rtnl_link_get_by_name()
1347 nl_object_get((struct nl_object *) link); in rtnl_link_get_by_name()
1348 return link; in rtnl_link_get_by_name()
1487 struct rtnl_link *link = rtnl_link_get(cache, ifindex); in rtnl_link_i2name() local
1489 if (link) { in rtnl_link_i2name()
1490 strncpy(dst, link->l_name, len - 1); in rtnl_link_i2name()
1491 rtnl_link_put(link); in rtnl_link_i2name()
1510 struct rtnl_link *link; in rtnl_link_name2i() local
1512 link = rtnl_link_get_by_name(cache, name); in rtnl_link_name2i()
1513 if (link) { in rtnl_link_name2i()
1514 ifindex = link->l_index; in rtnl_link_name2i()
1515 rtnl_link_put(link); in rtnl_link_name2i()
1523 int rtnl_link_fill_info(struct nl_msg *msg, struct rtnl_link *link) in rtnl_link_fill_info() argument
1525 if (link->ce_mask & LINK_ATTR_ADDR) in rtnl_link_fill_info()
1526 NLA_PUT_ADDR(msg, IFLA_ADDRESS, link->l_addr); in rtnl_link_fill_info()
1528 if (link->ce_mask & LINK_ATTR_BRD) in rtnl_link_fill_info()
1529 NLA_PUT_ADDR(msg, IFLA_BROADCAST, link->l_bcast); in rtnl_link_fill_info()
1531 if (link->ce_mask & LINK_ATTR_MTU) in rtnl_link_fill_info()
1532 NLA_PUT_U32(msg, IFLA_MTU, link->l_mtu); in rtnl_link_fill_info()
1534 if (link->ce_mask & LINK_ATTR_TXQLEN) in rtnl_link_fill_info()
1535 NLA_PUT_U32(msg, IFLA_TXQLEN, link->l_txqlen); in rtnl_link_fill_info()
1537 if (link->ce_mask & LINK_ATTR_WEIGHT) in rtnl_link_fill_info()
1538 NLA_PUT_U32(msg, IFLA_WEIGHT, link->l_weight); in rtnl_link_fill_info()
1540 if (link->ce_mask & LINK_ATTR_IFNAME) in rtnl_link_fill_info()
1541 NLA_PUT_STRING(msg, IFLA_IFNAME, link->l_name); in rtnl_link_fill_info()
1543 if (link->ce_mask & LINK_ATTR_OPERSTATE) in rtnl_link_fill_info()
1544 NLA_PUT_U8(msg, IFLA_OPERSTATE, link->l_operstate); in rtnl_link_fill_info()
1546 if (link->ce_mask & LINK_ATTR_CARRIER) in rtnl_link_fill_info()
1547 NLA_PUT_U8(msg, IFLA_CARRIER, link->l_carrier); in rtnl_link_fill_info()
1549 if (link->ce_mask & LINK_ATTR_LINKMODE) in rtnl_link_fill_info()
1550 NLA_PUT_U8(msg, IFLA_LINKMODE, link->l_linkmode); in rtnl_link_fill_info()
1552 if (link->ce_mask & LINK_ATTR_IFALIAS) in rtnl_link_fill_info()
1553 NLA_PUT_STRING(msg, IFLA_IFALIAS, link->l_ifalias); in rtnl_link_fill_info()
1555 if (link->ce_mask & LINK_ATTR_LINK) in rtnl_link_fill_info()
1556 NLA_PUT_U32(msg, IFLA_LINK, link->l_link); in rtnl_link_fill_info()
1558 if (link->ce_mask & LINK_ATTR_LINK_NETNSID) in rtnl_link_fill_info()
1559 NLA_PUT_S32(msg, IFLA_LINK_NETNSID, link->l_link_netnsid); in rtnl_link_fill_info()
1561 if (link->ce_mask & LINK_ATTR_MASTER) in rtnl_link_fill_info()
1562 NLA_PUT_U32(msg, IFLA_MASTER, link->l_master); in rtnl_link_fill_info()
1564 if (link->ce_mask & LINK_ATTR_NUM_TX_QUEUES) in rtnl_link_fill_info()
1565 NLA_PUT_U32(msg, IFLA_NUM_TX_QUEUES, link->l_num_tx_queues); in rtnl_link_fill_info()
1567 if (link->ce_mask & LINK_ATTR_NUM_RX_QUEUES) in rtnl_link_fill_info()
1568 NLA_PUT_U32(msg, IFLA_NUM_RX_QUEUES, link->l_num_rx_queues); in rtnl_link_fill_info()
1570 if (link->ce_mask & LINK_ATTR_NS_FD) in rtnl_link_fill_info()
1571 NLA_PUT_U32(msg, IFLA_NET_NS_FD, link->l_ns_fd); in rtnl_link_fill_info()
1573 if (link->ce_mask & LINK_ATTR_NS_PID) in rtnl_link_fill_info()
1574 NLA_PUT_U32(msg, IFLA_NET_NS_PID, link->l_ns_pid); in rtnl_link_fill_info()
1583 struct rtnl_link *link, int flags, struct nl_msg **result) in build_link_msg() argument
1595 if (rtnl_link_fill_info(msg, link)) in build_link_msg()
1598 if (link->ce_mask & LINK_ATTR_GROUP) in build_link_msg()
1599 NLA_PUT_U32(msg, IFLA_GROUP, link->l_group); in build_link_msg()
1601 if (link->ce_mask & (LINK_ATTR_LINKINFO|LINK_ATTR_LINKINFO_SLAVE_KIND)) { in build_link_msg()
1607 if (link->ce_mask & LINK_ATTR_LINKINFO) { in build_link_msg()
1608 NLA_PUT_STRING(msg, IFLA_INFO_KIND, link->l_info_kind); in build_link_msg()
1610 if (link->l_info_ops) { in build_link_msg()
1611 if (link->l_info_ops->io_put_attrs && in build_link_msg()
1612 link->l_info_ops->io_put_attrs(msg, link) < 0) in build_link_msg()
1617 if (link->ce_mask & LINK_ATTR_LINKINFO_SLAVE_KIND) { in build_link_msg()
1618 NLA_PUT_STRING(msg, IFLA_INFO_SLAVE_KIND, link->l_info_slave_kind); in build_link_msg()
1624 if (link->ce_mask & LINK_ATTR_VF_LIST) { in build_link_msg()
1625 if (rtnl_link_sriov_fill_vflist(msg, link) < 0) in build_link_msg()
1629 if (do_foreach_af(link, af_fill_pi, msg) < 0) in build_link_msg()
1635 if (do_foreach_af(link, af_fill, msg) < 0) in build_link_msg()
1669 int rtnl_link_build_add_request(struct rtnl_link *link, int flags, in rtnl_link_build_add_request() argument
1673 .ifi_family = link->l_family, in rtnl_link_build_add_request()
1674 .ifi_index = link->l_index, in rtnl_link_build_add_request()
1675 .ifi_flags = link->l_flags, in rtnl_link_build_add_request()
1676 .ifi_change = link->l_flag_mask, in rtnl_link_build_add_request()
1679 return build_link_msg(RTM_NEWLINK, &ifi, link, flags, result); in rtnl_link_build_add_request()
1699 int rtnl_link_add(struct nl_sock *sk, struct rtnl_link *link, int flags) in rtnl_link_add() argument
1704 err = rtnl_link_build_add_request(link, flags, &msg); in rtnl_link_add()
1853 int rtnl_link_build_delete_request(const struct rtnl_link *link, in rtnl_link_build_delete_request() argument
1858 .ifi_index = link->l_index, in rtnl_link_build_delete_request()
1861 if (!(link->ce_mask & (LINK_ATTR_IFINDEX | LINK_ATTR_IFNAME))) { in rtnl_link_build_delete_request()
1872 if (link->ce_mask & LINK_ATTR_IFNAME) in rtnl_link_build_delete_request()
1873 NLA_PUT_STRING(msg, IFLA_IFNAME, link->l_name); in rtnl_link_build_delete_request()
1907 int rtnl_link_delete(struct nl_sock *sk, const struct rtnl_link *link) in rtnl_link_delete() argument
1912 if ((err = rtnl_link_build_delete_request(link, &msg)) < 0) in rtnl_link_delete()
1940 void rtnl_link_put(struct rtnl_link *link) in rtnl_link_put() argument
1942 nl_object_put((struct nl_object *) link); in rtnl_link_put()
1959 void rtnl_link_set_name(struct rtnl_link *link, const char *name) in rtnl_link_set_name() argument
1961 strncpy(link->l_name, name, sizeof(link->l_name) - 1); in rtnl_link_set_name()
1962 link->ce_mask |= LINK_ATTR_IFNAME; in rtnl_link_set_name()
1973 char *rtnl_link_get_name(struct rtnl_link *link) in rtnl_link_get_name() argument
1975 return link->ce_mask & LINK_ATTR_IFNAME ? link->l_name : NULL; in rtnl_link_get_name()
1983 void rtnl_link_set_group(struct rtnl_link *link, uint32_t group) in rtnl_link_set_group() argument
1985 link->l_group = group; in rtnl_link_set_group()
1986 link->ce_mask |= LINK_ATTR_GROUP; in rtnl_link_set_group()
1995 uint32_t rtnl_link_get_group(struct rtnl_link *link) in rtnl_link_get_group() argument
1997 return link->l_group; in rtnl_link_get_group()
2000 static inline void __assign_addr(struct rtnl_link *link, struct nl_addr **pos, in __assign_addr() argument
2009 link->ce_mask |= flag; in __assign_addr()
2023 void rtnl_link_set_addr(struct rtnl_link *link, struct nl_addr *addr) in rtnl_link_set_addr() argument
2025 __assign_addr(link, &link->l_addr, addr, LINK_ATTR_ADDR); in rtnl_link_set_addr()
2037 struct nl_addr *rtnl_link_get_addr(struct rtnl_link *link) in rtnl_link_get_addr() argument
2039 return link->ce_mask & LINK_ATTR_ADDR ? link->l_addr : NULL; in rtnl_link_get_addr()
2054 void rtnl_link_set_broadcast(struct rtnl_link *link, struct nl_addr *addr) in rtnl_link_set_broadcast() argument
2056 __assign_addr(link, &link->l_bcast, addr, LINK_ATTR_BRD); in rtnl_link_set_broadcast()
2068 struct nl_addr *rtnl_link_get_broadcast(struct rtnl_link *link) in rtnl_link_get_broadcast() argument
2070 return link->ce_mask & LINK_ATTR_BRD ? link->l_bcast : NULL; in rtnl_link_get_broadcast()
2081 void rtnl_link_set_flags(struct rtnl_link *link, unsigned int flags) in rtnl_link_set_flags() argument
2083 link->l_flag_mask |= flags; in rtnl_link_set_flags()
2084 link->l_flags |= flags; in rtnl_link_set_flags()
2085 link->ce_mask |= LINK_ATTR_FLAGS; in rtnl_link_set_flags()
2096 void rtnl_link_unset_flags(struct rtnl_link *link, unsigned int flags) in rtnl_link_unset_flags() argument
2098 link->l_flag_mask |= flags; in rtnl_link_unset_flags()
2099 link->l_flags &= ~flags; in rtnl_link_unset_flags()
2100 link->ce_mask |= LINK_ATTR_FLAGS; in rtnl_link_unset_flags()
2112 unsigned int rtnl_link_get_flags(struct rtnl_link *link) in rtnl_link_get_flags() argument
2114 return link->l_flags; in rtnl_link_get_flags()
2122 void rtnl_link_set_family(struct rtnl_link *link, int family) in rtnl_link_set_family() argument
2124 link->l_family = family; in rtnl_link_set_family()
2125 link->ce_mask |= LINK_ATTR_FAMILY; in rtnl_link_set_family()
2127 if (link->l_af_ops) { in rtnl_link_set_family()
2128 af_free(link, link->l_af_ops, in rtnl_link_set_family()
2129 link->l_af_data[link->l_af_ops->ao_family], NULL); in rtnl_link_set_family()
2130 link->l_af_data[link->l_af_ops->ao_family] = NULL; in rtnl_link_set_family()
2133 link->l_af_ops = af_lookup_and_alloc(link, family); in rtnl_link_set_family()
2143 int rtnl_link_get_family(struct rtnl_link *link) in rtnl_link_get_family() argument
2145 return link->ce_mask & LINK_ATTR_FAMILY ? link->l_family : AF_UNSPEC; in rtnl_link_get_family()
2157 void rtnl_link_set_arptype(struct rtnl_link *link, unsigned int arptype) in rtnl_link_set_arptype() argument
2159 link->l_arptype = arptype; in rtnl_link_set_arptype()
2160 link->ce_mask |= LINK_ATTR_ARPTYPE; in rtnl_link_set_arptype()
2171 unsigned int rtnl_link_get_arptype(struct rtnl_link *link) in rtnl_link_get_arptype() argument
2173 if (link->ce_mask & LINK_ATTR_ARPTYPE) in rtnl_link_get_arptype()
2174 return link->l_arptype; in rtnl_link_get_arptype()
2187 void rtnl_link_set_ifindex(struct rtnl_link *link, int ifindex) in rtnl_link_set_ifindex() argument
2189 link->l_index = ifindex; in rtnl_link_set_ifindex()
2190 link->ce_mask |= LINK_ATTR_IFINDEX; in rtnl_link_set_ifindex()
2202 int rtnl_link_get_ifindex(struct rtnl_link *link) in rtnl_link_get_ifindex() argument
2204 return link->l_index; in rtnl_link_get_ifindex()
2215 void rtnl_link_set_mtu(struct rtnl_link *link, unsigned int mtu) in rtnl_link_set_mtu() argument
2217 link->l_mtu = mtu; in rtnl_link_set_mtu()
2218 link->ce_mask |= LINK_ATTR_MTU; in rtnl_link_set_mtu()
2229 unsigned int rtnl_link_get_mtu(struct rtnl_link *link) in rtnl_link_get_mtu() argument
2231 return link->l_mtu; in rtnl_link_get_mtu()
2244 void rtnl_link_set_txqlen(struct rtnl_link *link, unsigned int txqlen) in rtnl_link_set_txqlen() argument
2246 link->l_txqlen = txqlen; in rtnl_link_set_txqlen()
2247 link->ce_mask |= LINK_ATTR_TXQLEN; in rtnl_link_set_txqlen()
2260 unsigned int rtnl_link_get_txqlen(struct rtnl_link *link) in rtnl_link_get_txqlen() argument
2262 return link->ce_mask & LINK_ATTR_TXQLEN ? link->l_txqlen : 0; in rtnl_link_get_txqlen()
2265 void rtnl_link_set_link(struct rtnl_link *link, int ifindex) in rtnl_link_set_link() argument
2267 link->l_link = ifindex; in rtnl_link_set_link()
2268 link->ce_mask |= LINK_ATTR_LINK; in rtnl_link_set_link()
2271 int rtnl_link_get_link(struct rtnl_link *link) in rtnl_link_get_link() argument
2273 return link->l_link; in rtnl_link_get_link()
2284 int rtnl_link_set_link_netnsid(struct rtnl_link *link, int32_t link_netnsid) in rtnl_link_set_link_netnsid() argument
2286 link->l_link_netnsid = link_netnsid; in rtnl_link_set_link_netnsid()
2287 link->ce_mask |= LINK_ATTR_LINK_NETNSID; in rtnl_link_set_link_netnsid()
2301 int rtnl_link_get_link_netnsid(const struct rtnl_link *link, int32_t *out_link_netnsid) in rtnl_link_get_link_netnsid() argument
2303 if (!(link->ce_mask & LINK_ATTR_LINK_NETNSID)) in rtnl_link_get_link_netnsid()
2306 *out_link_netnsid = link->l_link_netnsid; in rtnl_link_get_link_netnsid()
2317 void rtnl_link_set_master(struct rtnl_link *link, int ifindex) in rtnl_link_set_master() argument
2319 link->l_master = ifindex; in rtnl_link_set_master()
2320 link->ce_mask |= LINK_ATTR_MASTER; in rtnl_link_set_master()
2330 int rtnl_link_get_master(struct rtnl_link *link) in rtnl_link_get_master() argument
2332 return link->l_master; in rtnl_link_get_master()
2342 void rtnl_link_set_carrier(struct rtnl_link *link, uint8_t status) in rtnl_link_set_carrier() argument
2344 link->l_carrier = status; in rtnl_link_set_carrier()
2345 link->ce_mask |= LINK_ATTR_CARRIER; in rtnl_link_set_carrier()
2355 uint8_t rtnl_link_get_carrier(struct rtnl_link *link) in rtnl_link_get_carrier() argument
2357 return link->l_carrier; in rtnl_link_get_carrier()
2367 int rtnl_link_get_carrier_changes(struct rtnl_link *link, uint32_t *carrier_changes) in rtnl_link_get_carrier_changes() argument
2369 if (!(link->ce_mask & LINK_ATTR_CARRIER_CHANGES)) in rtnl_link_get_carrier_changes()
2373 *carrier_changes = link->l_carrier_changes; in rtnl_link_get_carrier_changes()
2386 void rtnl_link_set_operstate(struct rtnl_link *link, uint8_t status) in rtnl_link_set_operstate() argument
2388 link->l_operstate = status; in rtnl_link_set_operstate()
2389 link->ce_mask |= LINK_ATTR_OPERSTATE; in rtnl_link_set_operstate()
2400 uint8_t rtnl_link_get_operstate(struct rtnl_link *link) in rtnl_link_get_operstate() argument
2402 return link->l_operstate; in rtnl_link_get_operstate()
2413 void rtnl_link_set_linkmode(struct rtnl_link *link, uint8_t mode) in rtnl_link_set_linkmode() argument
2415 link->l_linkmode = mode; in rtnl_link_set_linkmode()
2416 link->ce_mask |= LINK_ATTR_LINKMODE; in rtnl_link_set_linkmode()
2427 uint8_t rtnl_link_get_linkmode(struct rtnl_link *link) in rtnl_link_get_linkmode() argument
2429 return link->l_linkmode; in rtnl_link_get_linkmode()
2440 const char *rtnl_link_get_ifalias(struct rtnl_link *link) in rtnl_link_get_ifalias() argument
2442 return link->l_ifalias; in rtnl_link_get_ifalias()
2457 void rtnl_link_set_ifalias(struct rtnl_link *link, const char *alias) in rtnl_link_set_ifalias() argument
2459 free(link->l_ifalias); in rtnl_link_set_ifalias()
2462 link->l_ifalias = strdup(alias); in rtnl_link_set_ifalias()
2463 link->ce_mask |= LINK_ATTR_IFALIAS; in rtnl_link_set_ifalias()
2465 link->l_ifalias = NULL; in rtnl_link_set_ifalias()
2466 link->ce_mask &= ~LINK_ATTR_IFALIAS; in rtnl_link_set_ifalias()
2483 void rtnl_link_set_qdisc(struct rtnl_link *link, const char *name) in rtnl_link_set_qdisc() argument
2485 strncpy(link->l_qdisc, name, sizeof(link->l_qdisc) - 1); in rtnl_link_set_qdisc()
2486 link->ce_mask |= LINK_ATTR_QDISC; in rtnl_link_set_qdisc()
2497 char *rtnl_link_get_qdisc(struct rtnl_link *link) in rtnl_link_get_qdisc() argument
2499 return link->ce_mask & LINK_ATTR_QDISC ? link->l_qdisc : NULL; in rtnl_link_get_qdisc()
2510 int rtnl_link_get_num_vf(struct rtnl_link *link, uint32_t *num_vf) in rtnl_link_get_num_vf() argument
2512 if (link->ce_mask & LINK_ATTR_NUM_VF) { in rtnl_link_get_num_vf()
2513 *num_vf = link->l_num_vf; in rtnl_link_get_num_vf()
2526 uint64_t rtnl_link_get_stat(struct rtnl_link *link, rtnl_link_stat_id_t id) in rtnl_link_get_stat() argument
2531 return link->l_stats[id]; in rtnl_link_get_stat()
2545 int rtnl_link_set_stat(struct rtnl_link *link, rtnl_link_stat_id_t id, in rtnl_link_set_stat() argument
2551 link->l_stats[id] = value; in rtnl_link_set_stat()
2568 int rtnl_link_set_type(struct rtnl_link *link, const char *type) in rtnl_link_set_type() argument
2574 free(link->l_info_kind); in rtnl_link_set_type()
2575 link->ce_mask &= ~LINK_ATTR_LINKINFO; in rtnl_link_set_type()
2576 release_link_info(link); in rtnl_link_set_type()
2587 if (io->io_alloc && (err = io->io_alloc(link)) < 0) in rtnl_link_set_type()
2590 link->l_info_ops = io; in rtnl_link_set_type()
2593 link->l_info_kind = kind; in rtnl_link_set_type()
2594 link->ce_mask |= LINK_ATTR_LINKINFO; in rtnl_link_set_type()
2610 char *rtnl_link_get_type(struct rtnl_link *link) in rtnl_link_get_type() argument
2612 return link->l_info_kind; in rtnl_link_get_type()
2625 int rtnl_link_set_slave_type(struct rtnl_link *link, const char *type) in rtnl_link_set_slave_type() argument
2635 free(link->l_info_slave_kind); in rtnl_link_set_slave_type()
2636 link->l_info_slave_kind = kind; in rtnl_link_set_slave_type()
2639 link->ce_mask |= LINK_ATTR_LINKINFO_SLAVE_KIND; in rtnl_link_set_slave_type()
2641 link->ce_mask &= ~LINK_ATTR_LINKINFO_SLAVE_KIND; in rtnl_link_set_slave_type()
2652 const char *rtnl_link_get_slave_type(const struct rtnl_link *link) in rtnl_link_get_slave_type() argument
2654 return link->l_info_slave_kind; in rtnl_link_get_slave_type()
2667 void rtnl_link_set_promiscuity(struct rtnl_link *link, uint32_t count) in rtnl_link_set_promiscuity() argument
2669 link->l_promiscuity = count; in rtnl_link_set_promiscuity()
2670 link->ce_mask |= LINK_ATTR_PROMISCUITY; in rtnl_link_set_promiscuity()
2680 uint32_t rtnl_link_get_promiscuity(struct rtnl_link *link) in rtnl_link_get_promiscuity() argument
2682 return link->l_promiscuity; in rtnl_link_get_promiscuity()
2699 void rtnl_link_set_num_tx_queues(struct rtnl_link *link, uint32_t nqueues) in rtnl_link_set_num_tx_queues() argument
2701 link->l_num_tx_queues = nqueues; in rtnl_link_set_num_tx_queues()
2702 link->ce_mask |= LINK_ATTR_NUM_TX_QUEUES; in rtnl_link_set_num_tx_queues()
2711 uint32_t rtnl_link_get_num_tx_queues(struct rtnl_link *link) in rtnl_link_get_num_tx_queues() argument
2713 return link->l_num_tx_queues; in rtnl_link_get_num_tx_queues()
2730 void rtnl_link_set_num_rx_queues(struct rtnl_link *link, uint32_t nqueues) in rtnl_link_set_num_rx_queues() argument
2732 link->l_num_rx_queues = nqueues; in rtnl_link_set_num_rx_queues()
2733 link->ce_mask |= LINK_ATTR_NUM_RX_QUEUES; in rtnl_link_set_num_rx_queues()
2742 uint32_t rtnl_link_get_num_rx_queues(struct rtnl_link *link) in rtnl_link_get_num_rx_queues() argument
2744 return link->l_num_rx_queues; in rtnl_link_get_num_rx_queues()
2754 int rtnl_link_get_gso_max_segs(struct rtnl_link *link, uint32_t *gso_max_segs) in rtnl_link_get_gso_max_segs() argument
2756 if (!(link->ce_mask & LINK_ATTR_GSO_MAX_SEGS)) in rtnl_link_get_gso_max_segs()
2760 *gso_max_segs = link->l_gso_max_segs; in rtnl_link_get_gso_max_segs()
2772 int rtnl_link_get_gso_max_size(struct rtnl_link *link, uint32_t *gso_max_size) in rtnl_link_get_gso_max_size() argument
2774 if (!(link->ce_mask & LINK_ATTR_GSO_MAX_SIZE)) in rtnl_link_get_gso_max_size()
2778 *gso_max_size = link->l_gso_max_size; in rtnl_link_get_gso_max_size()
2789 struct nl_data *rtnl_link_get_phys_port_id(struct rtnl_link *link) in rtnl_link_get_phys_port_id() argument
2791 return link->l_phys_port_id; in rtnl_link_get_phys_port_id()
2800 char *rtnl_link_get_phys_port_name(struct rtnl_link *link) in rtnl_link_get_phys_port_name() argument
2802 return link->l_phys_port_name; in rtnl_link_get_phys_port_name()
2811 struct nl_data *rtnl_link_get_phys_switch_id(struct rtnl_link *link) in rtnl_link_get_phys_switch_id() argument
2813 return link->l_phys_switch_id; in rtnl_link_get_phys_switch_id()
2816 void rtnl_link_set_ns_fd(struct rtnl_link *link, int fd) in rtnl_link_set_ns_fd() argument
2818 link->l_ns_fd = fd; in rtnl_link_set_ns_fd()
2819 link->ce_mask |= LINK_ATTR_NS_FD; in rtnl_link_set_ns_fd()
2822 int rtnl_link_get_ns_fd(struct rtnl_link *link) in rtnl_link_get_ns_fd() argument
2824 return link->l_ns_fd; in rtnl_link_get_ns_fd()
2827 void rtnl_link_set_ns_pid(struct rtnl_link *link, pid_t pid) in rtnl_link_set_ns_pid() argument
2829 link->l_ns_pid = pid; in rtnl_link_set_ns_pid()
2830 link->ce_mask |= LINK_ATTR_NS_PID; in rtnl_link_set_ns_pid()
2833 pid_t rtnl_link_get_ns_pid(struct rtnl_link *link) in rtnl_link_get_ns_pid() argument
2835 return link->l_ns_pid; in rtnl_link_get_ns_pid()
2860 struct rtnl_link *link; in rtnl_link_enslave_ifindex() local
2863 if (!(link = rtnl_link_alloc())) in rtnl_link_enslave_ifindex()
2866 rtnl_link_set_ifindex(link, slave); in rtnl_link_enslave_ifindex()
2867 rtnl_link_set_master(link, master); in rtnl_link_enslave_ifindex()
2869 if ((err = rtnl_link_change(sock, link, link, 0)) < 0) in rtnl_link_enslave_ifindex()
2872 rtnl_link_put(link); in rtnl_link_enslave_ifindex()
2881 if ((err = rtnl_link_get_kernel(sock, slave, NULL, &link)) < 0) in rtnl_link_enslave_ifindex()
2884 if (rtnl_link_get_master(link) != master) in rtnl_link_enslave_ifindex()
2888 rtnl_link_put(link); in rtnl_link_enslave_ifindex()
3131 int rtnl_link_has_vf_list(struct rtnl_link *link) { in rtnl_link_has_vf_list() argument
3132 if (link->ce_mask & LINK_ATTR_VF_LIST) in rtnl_link_has_vf_list()
3138 void rtnl_link_set_vf_list(struct rtnl_link *link) { in rtnl_link_set_vf_list() argument
3141 if (!(err = rtnl_link_has_vf_list(link))) in rtnl_link_set_vf_list()
3142 link->ce_mask |= LINK_ATTR_VF_LIST; in rtnl_link_set_vf_list()
3147 void rtnl_link_unset_vf_list(struct rtnl_link *link) { in rtnl_link_unset_vf_list() argument
3150 if ((err = rtnl_link_has_vf_list(link))) in rtnl_link_unset_vf_list()
3151 link->ce_mask &= ~LINK_ATTR_VF_LIST; in rtnl_link_unset_vf_list()
3165 int rtnl_link_set_info_type(struct rtnl_link *link, const char *type) in rtnl_link_set_info_type() argument
3167 return rtnl_link_set_type(link, type); in rtnl_link_set_info_type()
3173 char *rtnl_link_get_info_type(struct rtnl_link *link) in rtnl_link_get_info_type() argument
3175 return rtnl_link_get_type(link); in rtnl_link_get_info_type()
3181 void rtnl_link_set_weight(struct rtnl_link *link, unsigned int weight) in rtnl_link_set_weight() argument
3183 link->l_weight = weight; in rtnl_link_set_weight()
3184 link->ce_mask |= LINK_ATTR_WEIGHT; in rtnl_link_set_weight()
3190 unsigned int rtnl_link_get_weight(struct rtnl_link *link) in rtnl_link_get_weight() argument
3192 return link->l_weight; in rtnl_link_get_weight()