test-cache-mngr.c 1.3 KB

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