123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566 |
- #include <netlink/netlink.h>
- #include <netlink/cache.h>
- #include <netlink/cli/utils.h>
- #include <signal.h>
- #include <netlink-private/cache-api.h>
- static int quit = 0;
- static struct nl_dump_params dp = {
- .dp_type = NL_DUMP_LINE,
- };
- static void change_cb(struct nl_cache *cache, struct nl_object *obj,
- int action, void *data)
- {
- if (action == NL_ACT_NEW)
- printf("NEW ");
- else if (action == NL_ACT_DEL)
- printf("DEL ");
- else if (action == NL_ACT_CHANGE)
- printf("CHANGE ");
- nl_object_dump(obj, &dp);
- }
- static void sigint(int arg)
- {
- quit = 1;
- }
- int main(int argc, char *argv[])
- {
- struct nl_cache_mngr *mngr;
- struct nl_cache *cache;
- int err, i;
- dp.dp_fd = stdout;
- signal(SIGINT, sigint);
- err = nl_cache_mngr_alloc(NULL, NETLINK_ROUTE, NL_AUTO_PROVIDE, &mngr);
- if (err < 0)
- nl_cli_fatal(err, "Unable to allocate cache manager: %s",
- nl_geterror(err));
- for (i = 1; i < argc; i++) {
- err = nl_cache_mngr_add(mngr, argv[i], &change_cb, NULL, &cache);
- if (err < 0)
- nl_cli_fatal(err, "Unable to add cache %s: %s",
- argv[i], nl_geterror(err));
- }
- while (!quit) {
- int err = nl_cache_mngr_poll(mngr, 1000);
- if (err < 0 && err != -NLE_INTR)
- nl_cli_fatal(err, "Polling failed: %s", nl_geterror(err));
- nl_cache_mngr_info(mngr, &dp);
- }
- nl_cache_mngr_free(mngr);
- return 0;
- }
|