Home | History | Annotate | Download | only in tests
      1 #include "../src/utils.h"
      2 #include <signal.h>
      3 
      4 static int quit = 0;
      5 
      6 static void change_cb(struct nl_cache *cache, struct nl_object *obj,
      7 		      int action)
      8 {
      9 	struct nl_dump_params dp = {
     10 		.dp_type = NL_DUMP_LINE,
     11 		.dp_fd = stdout,
     12 	};
     13 
     14 	if (action == NL_ACT_NEW)
     15 		printf("NEW ");
     16 	else if (action == NL_ACT_DEL)
     17 		printf("DEL ");
     18 	else if (action == NL_ACT_CHANGE)
     19 		printf("CHANGE ");
     20 
     21 	nl_object_dump(obj, &dp);
     22 }
     23 
     24 static void sigint(int arg)
     25 {
     26 	quit = 1;
     27 }
     28 
     29 int main(int argc, char *argv[])
     30 {
     31 	struct nl_cache_mngr *mngr;
     32 	struct nl_cache *lc, *nc, *ac, *rc;
     33 	struct nl_sock *sock;
     34 	int err;
     35 
     36 	signal(SIGINT, sigint);
     37 
     38 	sock = nlt_alloc_socket();
     39 	err = nl_cache_mngr_alloc(sock, NETLINK_ROUTE, NL_AUTO_PROVIDE, &mngr);
     40 	if (err < 0)
     41 		fatal(err, "Unable to allocate cache manager: %s",
     42 		      nl_geterror(err));
     43 
     44 	if ((err = nl_cache_mngr_add(mngr, "route/link", &change_cb, &lc)) < 0)
     45 		fatal(err, "Unable to add cache route/link: %s",
     46 		      nl_geterror(err));
     47 
     48 	if ((err = nl_cache_mngr_add(mngr, "route/neigh", &change_cb, &nc)) < 0)
     49 		fatal(err, "Unable to add cache route/neigh: %s",
     50 		      nl_geterror(err));
     51 
     52 	if ((err = nl_cache_mngr_add(mngr, "route/addr", &change_cb, &ac)) < 0)
     53 		fatal(err, "Unable to add cache route/addr: %s",
     54 		      nl_geterror(err));
     55 
     56 	if ((err = nl_cache_mngr_add(mngr, "route/route", &change_cb, &rc)) < 0)
     57 		fatal(err, "Unable to add cache route/route: %s",
     58 		      nl_geterror(err));
     59 
     60 	while (!quit) {
     61 		int err = nl_cache_mngr_poll(mngr, 5000);
     62 		if (err < 0 && err != -NLE_INTR)
     63 			fatal(err, "Polling failed: %s", nl_geterror(err));
     64 
     65 	}
     66 
     67 	nl_cache_mngr_free(mngr);
     68 	nl_socket_free(sock);
     69 
     70 	return 0;
     71 }
     72