int main(int argc, char *argv[]) { int ch, del = 0, err; char *fingerprints = NULL; while ((ch = getopt(argc, argv, "f:dh")) != -1) { switch (ch) { case 'f': fingerprints = optarg; break; case 'd': del = 1; break; default: fprintf(stderr, "Usage: %s -f fingerprints -d <del rules> -h\n", argv[0]); return -1; } } if (!fingerprints) { err = -ENOENT; goto err_out_exit; } nfnlh = nfnl_open(); if (!nfnlh) { err = -EINVAL; ulog_err("Failed to create nfnl handler"); goto err_out_exit; } #ifndef NFNL_SUBSYS_OSF #define NFNL_SUBSYS_OSF 5 #endif nfnlssh = nfnl_subsys_open(nfnlh, NFNL_SUBSYS_OSF, OSF_MSG_MAX, 0); if (!nfnlssh) { err = -EINVAL; ulog_err("Faied to create nfnl subsystem"); goto err_out_close; } err = osf_load_entries(fingerprints, del); if (err) goto err_out_close_subsys; nfnl_subsys_close(nfnlssh); nfnl_close(nfnlh); return 0; err_out_close_subsys: nfnl_subsys_close(nfnlssh); err_out_close: nfnl_close(nfnlh); err_out_exit: return err; }
struct nfct_handle *nfct_open(u_int8_t subsys_id, unsigned subscriptions) { struct nfnl_handle *nfnlh = nfnl_open(); struct nfct_handle *nfcth; if (!nfnlh) return NULL; nfcth = nfct_open_nfnl(nfnlh, subsys_id, subscriptions); if (!nfcth) nfnl_close(nfnlh); return nfcth; }
struct nflog_handle *nflog_open(void) { struct nfnl_handle *nfnlh; struct nflog_handle *lh; nfnlh = nfnl_open(); if (!nfnlh) { /* FIXME: nflog_errno */ return NULL; } lh = nflog_open_nfnl(nfnlh); if (!lh) nfnl_close(nfnlh); return lh; }
/** * nflog_open - open a nflog handler * * This function obtains a netfilter log connection handle. When you are * finished with the handle returned by this function, you should destroy * it by calling nflog_close(). A new netlink connection is obtained internally * and associated with the log connection handle returned. * * \return a pointer to a new log handle or NULL on failure. */ struct nflog_handle *nflog_open(void) { struct nfnl_handle *nfnlh; struct nflog_handle *lh; nfnlh = nfnl_open(); if (!nfnlh) { /* FIXME: nflog_errno */ return NULL; } /* disable netlink sequence tracking by default */ nfnl_unset_sequence_tracking(nfnlh); lh = nflog_open_nfnl(nfnlh); if (!lh) nfnl_close(nfnlh); return lh; }