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