link.cpp 875 B

1234567891011121314151617181920212223242526272829303132333435
  1. #include "link.h"
  2. #include <libmnl/libmnl.h>
  3. #include <linux/if_link.h>
  4. #include <string>
  5. // https://netfilter.org/projects/libmnl/doxygen/html/group__attr.html
  6. int Link::mnl_attr_cb(const nlattr *attr, void *data) {
  7. Link *link = (Link *)data;
  8. switch (mnl_attr_get_type(attr)) {
  9. case IFLA_ADDRESS:
  10. link->hwaddr = attr;
  11. break;
  12. case IFLA_BROADCAST:
  13. link->broadcast = attr;
  14. break;
  15. case IFLA_IFNAME:
  16. link->ifname = mnl_attr_get_str(attr);
  17. break;
  18. }
  19. return MNL_CB_OK;
  20. }
  21. void Link::write_yaml(std::ostream &stream,
  22. const yaml_indent_level_t indent_level) const {
  23. const std::string indent(indent_level, ' ');
  24. stream << "ifname: " + ifname + "\n";
  25. stream << indent + "hwaddr: ";
  26. hwaddr.write_yaml(stream);
  27. stream << "\n";
  28. stream << indent + "broadcast: ";
  29. broadcast.write_yaml(stream);
  30. stream << "\n";
  31. }