Browse Source

MT#55283 add sequencing to netlink messages

Change-Id: I6346c79a204d0ee1f7587676848cdcfca7055262
pull/2043/head
Richard Fuchs 4 weeks ago
parent
commit
d891145474
3 changed files with 13 additions and 10 deletions
  1. +7
    -7
      daemon/nftables.c
  2. +5
    -2
      lib/netfilter_api.c
  3. +1
    -1
      lib/netfilter_api.h

+ 7
- 7
daemon/nftables.c View File

@ -165,7 +165,7 @@ static const char *nftables_do_rule(const int8_t *b, size_t l, void *data) {
static char *iterate_rules(nfapi_socket *nl, int family, const char *chain, static char *iterate_rules(nfapi_socket *nl, int family, const char *chain,
struct iterate_callbacks *callbacks) struct iterate_callbacks *callbacks)
{ {
g_autoptr(nfapi_buf) b = nfapi_buf_new();
g_autoptr(nfapi_buf) b = nfapi_buf_new(nl);
nfapi_add_msg(b, NFT_MSG_GETRULE, family, NLM_F_REQUEST | NLM_F_DUMP, "get all rules [%d]", family); nfapi_add_msg(b, NFT_MSG_GETRULE, family, NLM_F_REQUEST | NLM_F_DUMP, "get all rules [%d]", family);
@ -203,7 +203,7 @@ static void set_rule_handle(nfapi_buf *b, void *data) {
static char *delete_rules(nfapi_socket *nl, int family, const char *chain, static char *delete_rules(nfapi_socket *nl, int family, const char *chain,
void (*callback)(nfapi_buf *b, void *data), void *data) void (*callback)(nfapi_buf *b, void *data), void *data)
{ {
g_autoptr(nfapi_buf) b = nfapi_buf_new();
g_autoptr(nfapi_buf) b = nfapi_buf_new(nl);
nfapi_batch_begin(b); nfapi_batch_begin(b);
@ -269,7 +269,7 @@ static const char *nftables_do_chain(const int8_t *b, size_t l, void *userdata)
static bool chain_exists(nfapi_socket *nl, int family, const char *chain) { static bool chain_exists(nfapi_socket *nl, int family, const char *chain) {
g_autoptr(nfapi_buf) b = nfapi_buf_new();
g_autoptr(nfapi_buf) b = nfapi_buf_new(nl);
nfapi_add_msg(b, NFT_MSG_GETCHAIN, family, NLM_F_REQUEST | NLM_F_ACK, "get chain [%d]", family); nfapi_add_msg(b, NFT_MSG_GETCHAIN, family, NLM_F_REQUEST | NLM_F_ACK, "get chain [%d]", family);
nfapi_add_str_attr(b, NFTA_CHAIN_TABLE, "filter", "table 'filter'"); nfapi_add_str_attr(b, NFTA_CHAIN_TABLE, "filter", "table 'filter'");
@ -293,7 +293,7 @@ static char *add_chain(nfapi_socket *nl, int family, const char *chain,
if (chain_exists(nl, family, chain)) if (chain_exists(nl, family, chain))
return NULL; return NULL;
g_autoptr(nfapi_buf) b = nfapi_buf_new();
g_autoptr(nfapi_buf) b = nfapi_buf_new(nl);
nfapi_batch_begin(b); nfapi_batch_begin(b);
@ -330,7 +330,7 @@ static char *add_chain(nfapi_socket *nl, int family, const char *chain,
static char *add_rule(nfapi_socket *nl, int family, static char *add_rule(nfapi_socket *nl, int family,
struct add_rule_callbacks callbacks) struct add_rule_callbacks callbacks)
{ {
g_autoptr(nfapi_buf) b = nfapi_buf_new();
g_autoptr(nfapi_buf) b = nfapi_buf_new(nl);
nfapi_batch_begin(b); nfapi_batch_begin(b);
@ -611,7 +611,7 @@ static const char *rtpe_target_filter(nfapi_buf *b, int family, struct add_rule_
static char *delete_chain(nfapi_socket *nl, int family, const char *chain) { static char *delete_chain(nfapi_socket *nl, int family, const char *chain) {
g_autoptr(nfapi_buf) b = nfapi_buf_new();
g_autoptr(nfapi_buf) b = nfapi_buf_new(nl);
nfapi_batch_begin(b); nfapi_batch_begin(b);
@ -702,7 +702,7 @@ static char *nftables_shutdown_family(nfapi_socket *nl, int family,
static char *add_table(nfapi_socket *nl, int family) { static char *add_table(nfapi_socket *nl, int family) {
g_autoptr(nfapi_buf) b = nfapi_buf_new();
g_autoptr(nfapi_buf) b = nfapi_buf_new(nl);
nfapi_batch_begin(b); nfapi_batch_begin(b);


+ 5
- 2
lib/netfilter_api.c View File

@ -18,6 +18,7 @@
struct nfapi_socket { struct nfapi_socket {
int fd; int fd;
struct sockaddr_nl addr; // local struct sockaddr_nl addr; // local
uint16_t seq;
}; };
struct nfapi_buf { struct nfapi_buf {
@ -25,6 +26,7 @@ struct nfapi_buf {
ssize_t last_hdr; ssize_t last_hdr;
GQueue nested; GQueue nested;
GString *readable; GString *readable;
uint16_t seq;
}; };
@ -64,11 +66,12 @@ void nfapi_socket_close(nfapi_socket *s) {
} }
nfapi_buf *nfapi_buf_new(void) {
nfapi_buf *nfapi_buf_new(nfapi_socket *s) {
nfapi_buf *b = g_new0(__typeof(*b), 1); nfapi_buf *b = g_new0(__typeof(*b), 1);
b->s = g_string_new(""); b->s = g_string_new("");
b->last_hdr = -1; b->last_hdr = -1;
b->readable = g_string_new(""); b->readable = g_string_new("");
b->seq = ++s->seq;
return b; return b;
} }
@ -147,7 +150,7 @@ void nfapi_add_msg(nfapi_buf *b, uint16_t type, uint16_t family, uint16_t flags,
readable_vadd(b->readable, fmt, va); readable_vadd(b->readable, fmt, va);
va_end(va); va_end(va);
return add_msg(b, (NFNL_SUBSYS_NFTABLES << 8) | type, family, flags, 0, 0);
return add_msg(b, (NFNL_SUBSYS_NFTABLES << 8) | type, family, flags, b->seq, 0);
} }
void nfapi_batch_begin(nfapi_buf *b) { void nfapi_batch_begin(nfapi_buf *b) {


+ 1
- 1
lib/netfilter_api.h View File

@ -22,7 +22,7 @@ nfapi_socket *nfapi_socket_open(void);
void nfapi_socket_close(nfapi_socket *); void nfapi_socket_close(nfapi_socket *);
nfapi_buf *nfapi_buf_new(void);
nfapi_buf *nfapi_buf_new(nfapi_socket *);
void nfapi_buf_free(nfapi_buf *); void nfapi_buf_free(nfapi_buf *);
const char *nfapi_buf_msg(nfapi_buf *); const char *nfapi_buf_msg(nfapi_buf *);


Loading…
Cancel
Save