144d362409d5469aed47d19e7908d19bd194493aThomas Graf#include "../src/utils.h" 244d362409d5469aed47d19e7908d19bd194493aThomas Graf 344d362409d5469aed47d19e7908d19bd194493aThomas Grafstatic void change_cb(struct nl_cache *cache, struct nl_object *obj, 444d362409d5469aed47d19e7908d19bd194493aThomas Graf int action) 544d362409d5469aed47d19e7908d19bd194493aThomas Graf{ 644d362409d5469aed47d19e7908d19bd194493aThomas Graf struct nfnl_ct *ct = (struct nfnl_ct *) obj; 744d362409d5469aed47d19e7908d19bd194493aThomas Graf static struct nl_addr *hack = NULL; 844d362409d5469aed47d19e7908d19bd194493aThomas Graf 944d362409d5469aed47d19e7908d19bd194493aThomas Graf if (!hack) 1044d362409d5469aed47d19e7908d19bd194493aThomas Graf hack = nl_addr_parse("194.88.212.233", AF_INET); 1144d362409d5469aed47d19e7908d19bd194493aThomas Graf 1244d362409d5469aed47d19e7908d19bd194493aThomas Graf if (!nl_addr_cmp(hack, nfnl_ct_get_src(ct, 1)) || 1344d362409d5469aed47d19e7908d19bd194493aThomas Graf !nl_addr_cmp(hack, nfnl_ct_get_dst(ct, 1))) { 1444d362409d5469aed47d19e7908d19bd194493aThomas Graf struct nl_dump_params dp = { 15562c5323af89b4386eabf90aaf47bb67dca0fb6eThomas Graf .dp_type = NL_DUMP_LINE, 1644d362409d5469aed47d19e7908d19bd194493aThomas Graf .dp_fd = stdout, 1744d362409d5469aed47d19e7908d19bd194493aThomas Graf }; 1844d362409d5469aed47d19e7908d19bd194493aThomas Graf 1944d362409d5469aed47d19e7908d19bd194493aThomas Graf printf("UPDATE "); 2044d362409d5469aed47d19e7908d19bd194493aThomas Graf nl_object_dump(obj, &dp); 2144d362409d5469aed47d19e7908d19bd194493aThomas Graf } 2244d362409d5469aed47d19e7908d19bd194493aThomas Graf} 2344d362409d5469aed47d19e7908d19bd194493aThomas Graf 2444d362409d5469aed47d19e7908d19bd194493aThomas Grafint main(int argc, char *argv[]) 2544d362409d5469aed47d19e7908d19bd194493aThomas Graf{ 2644d362409d5469aed47d19e7908d19bd194493aThomas Graf struct nl_cache_mngr *mngr; 27562c5323af89b4386eabf90aaf47bb67dca0fb6eThomas Graf struct nl_sock *sock; 2844d362409d5469aed47d19e7908d19bd194493aThomas Graf struct nl_cache *ct; 2944d362409d5469aed47d19e7908d19bd194493aThomas Graf 30562c5323af89b4386eabf90aaf47bb67dca0fb6eThomas Graf sock = nlt_socket_alloc(); 3144d362409d5469aed47d19e7908d19bd194493aThomas Graf 32562c5323af89b4386eabf90aaf47bb67dca0fb6eThomas Graf mngr = nl_cache_mngr_alloc(sock, NETLINK_NETFILTER, NL_AUTO_PROVIDE); 3344d362409d5469aed47d19e7908d19bd194493aThomas Graf if (!mngr) { 3444d362409d5469aed47d19e7908d19bd194493aThomas Graf nl_perror("nl_cache_mngr_alloc"); 3544d362409d5469aed47d19e7908d19bd194493aThomas Graf return -1; 3644d362409d5469aed47d19e7908d19bd194493aThomas Graf } 3744d362409d5469aed47d19e7908d19bd194493aThomas Graf 3844d362409d5469aed47d19e7908d19bd194493aThomas Graf ct = nl_cache_mngr_add(mngr, "netfilter/ct", &change_cb); 3944d362409d5469aed47d19e7908d19bd194493aThomas Graf if (ct == NULL) { 4044d362409d5469aed47d19e7908d19bd194493aThomas Graf nl_perror("nl_cache_mngr_add(netfilter/ct)"); 4144d362409d5469aed47d19e7908d19bd194493aThomas Graf return -1; 4244d362409d5469aed47d19e7908d19bd194493aThomas Graf } 4344d362409d5469aed47d19e7908d19bd194493aThomas Graf 4444d362409d5469aed47d19e7908d19bd194493aThomas Graf for (;;) { 4544d362409d5469aed47d19e7908d19bd194493aThomas Graf int err = nl_cache_mngr_poll(mngr, 5000); 4644d362409d5469aed47d19e7908d19bd194493aThomas Graf if (err < 0) { 4744d362409d5469aed47d19e7908d19bd194493aThomas Graf nl_perror("nl_cache_mngr_poll()"); 4844d362409d5469aed47d19e7908d19bd194493aThomas Graf return -1; 4944d362409d5469aed47d19e7908d19bd194493aThomas Graf } 5044d362409d5469aed47d19e7908d19bd194493aThomas Graf 5144d362409d5469aed47d19e7908d19bd194493aThomas Graf } 5244d362409d5469aed47d19e7908d19bd194493aThomas Graf 5344d362409d5469aed47d19e7908d19bd194493aThomas Graf nl_cache_mngr_free(mngr); 5444d362409d5469aed47d19e7908d19bd194493aThomas Graf 5544d362409d5469aed47d19e7908d19bd194493aThomas Graf return 0; 5644d362409d5469aed47d19e7908d19bd194493aThomas Graf} 57