test-cache-mngr.c 1.4 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273
  1. #include "../src/utils.h"
  2. static void change_cb(struct nl_cache *cache, struct nl_object *obj,
  3. int action)
  4. {
  5. struct nl_dump_params dp = {
  6. .dp_type = NL_DUMP_BRIEF,
  7. .dp_fd = stdout,
  8. };
  9. if (action == NL_ACT_NEW)
  10. printf("NEW ");
  11. else if (action == NL_ACT_DEL)
  12. printf("DEL ");
  13. else if (action == NL_ACT_CHANGE)
  14. printf("CHANGE ");
  15. nl_object_dump(obj, &dp);
  16. }
  17. int main(int argc, char *argv[])
  18. {
  19. struct nl_cache_mngr *mngr;
  20. struct nl_cache *lc, *nc, *ac, *rc;
  21. struct nl_handle *handle;
  22. nltool_init(argc, argv);
  23. handle = nltool_alloc_handle();
  24. mngr = nl_cache_mngr_alloc(handle, NETLINK_ROUTE, NL_AUTO_PROVIDE);
  25. if (!mngr) {
  26. nl_perror("nl_cache_mngr_alloc");
  27. return -1;
  28. }
  29. lc = nl_cache_mngr_add(mngr, "route/link", &change_cb);
  30. if (lc == NULL) {
  31. nl_perror("nl_cache_mngr_add(route/link");
  32. return -1;
  33. }
  34. nc = nl_cache_mngr_add(mngr, "route/neigh", &change_cb);
  35. if (nc == NULL) {
  36. nl_perror("nl_cache_mngr_add(route/neigh");
  37. return -1;
  38. }
  39. ac = nl_cache_mngr_add(mngr, "route/addr", &change_cb);
  40. if (ac == NULL) {
  41. nl_perror("nl_cache_mngr_add(route/addr");
  42. return -1;
  43. }
  44. rc = nl_cache_mngr_add(mngr, "route/route", &change_cb);
  45. if (rc == NULL) {
  46. nl_perror("nl_cache_mngr_add(route/route");
  47. return -1;
  48. }
  49. for (;;) {
  50. int err = nl_cache_mngr_poll(mngr, 5000);
  51. if (err < 0) {
  52. nl_perror("nl_cache_mngr_poll()");
  53. return -1;
  54. }
  55. }
  56. nl_cache_mngr_free(mngr);
  57. return 0;
  58. }