Browse Source

main.cpp: define mnl_read_links()

Fabian Peter Hammerle 7 years ago
parent
commit
a8a9512161
1 changed files with 11 additions and 6 deletions
  1. 11 6
      main.cpp

+ 11 - 6
main.cpp

@@ -19,10 +19,7 @@ static int link_cb(const nlmsghdr *nlh, void *data) {
   return MNL_CB_OK;
 }
 
-int main(int argc, char *argv[]) {
-  mnl_socket *nl = mnl_socket_open(NETLINK_ROUTE);
-  assert(nl);
-  assert(mnl_socket_bind(nl, 0, MNL_SOCKET_AUTOPID) == 0);
+void mnl_read_links(const mnl_socket *nl, vector<Link> *links) {
   unsigned int nlpid = mnl_socket_get_portid(nl);
 
   uint8_t msgbuf[MNL_SOCKET_BUFFER_SIZE];
@@ -33,10 +30,9 @@ int main(int argc, char *argv[]) {
   mnl_nlmsg_put_extra_header(nlh, sizeof(rtgenmsg));
   assert(mnl_socket_sendto(nl, nlh, nlh->nlmsg_len) > 0);
 
-  vector<Link> links;
   size_t numbytes = mnl_socket_recvfrom(nl, msgbuf, sizeof(msgbuf));
   while (numbytes > 0) {
-    if (mnl_cb_run(msgbuf, numbytes, nlh->nlmsg_seq, nlpid, link_cb, &links) <=
+    if (mnl_cb_run(msgbuf, numbytes, nlh->nlmsg_seq, nlpid, link_cb, links) <=
         MNL_CB_STOP) {
       break;
     } else {
@@ -44,6 +40,15 @@ int main(int argc, char *argv[]) {
     }
   }
   assert(numbytes != -1);
+}
+
+int main(int argc, char *argv[]) {
+  mnl_socket *nl = mnl_socket_open(NETLINK_ROUTE);
+  assert(nl);
+  assert(mnl_socket_bind(nl, 0, MNL_SOCKET_AUTOPID) == 0);
+
+  vector<Link> links;
+  mnl_read_links(nl, &links);
   links.write_yaml(std::cout);
   std::cout << std::endl;