platform/netlink: simplify socket flags and use boolean fields
- replace "s_flags" field by explicit boolean fields. - "s_msg_peek" now is simplified. Previously, we would default to peek, unless the user caller nl_socket_disable_msg_peek() or set nl_socket_set_msg_buf_size(). Simplify that. We now default to peek, unless NL_SOCKET_FLAGS_DISABLE_MSG_PEEK is set. We have no callers that call nl_socket_set_msg_buf_size(), so we can simplify that logic and just enable peeking by default. - keep "s_auto_ack" field, although it is always TRUE and there is no API to toggle that. However, it is kept as a self-documenting thing, so we would know the relevant places where auto-ack matters. - drop nl_socket_disable_msg_peek(). We have no caller of this function and we can set peeking in nl_socket_new(). We also don't need to change it after creation of the socket.
This commit is contained in:
@@ -28,10 +28,6 @@
|
||||
} \
|
||||
G_STMT_END
|
||||
|
||||
#define NL_MSG_PEEK (1 << 3)
|
||||
#define NL_MSG_PEEK_EXPLICIT (1 << 4)
|
||||
#define NL_NO_AUTO_ACK (1 << 5)
|
||||
|
||||
#ifndef NETLINK_EXT_ACK
|
||||
#define NETLINK_EXT_ACK 11
|
||||
#endif
|
||||
@@ -49,12 +45,13 @@ struct nl_msg {
|
||||
struct nl_sock {
|
||||
struct sockaddr_nl s_local;
|
||||
struct sockaddr_nl s_peer;
|
||||
size_t s_bufsize;
|
||||
int s_fd;
|
||||
int s_proto;
|
||||
unsigned int s_seq_next;
|
||||
unsigned int s_seq_expect;
|
||||
int s_flags;
|
||||
size_t s_bufsize;
|
||||
bool s_msg_peek : 1;
|
||||
bool s_auto_ack : 1;
|
||||
};
|
||||
|
||||
/*****************************************************************************/
|
||||
@@ -1051,13 +1048,6 @@ nl_socket_set_ext_ack(struct nl_sock *sk, gboolean enable)
|
||||
return 0;
|
||||
}
|
||||
|
||||
void
|
||||
nl_socket_disable_msg_peek(struct nl_sock *sk)
|
||||
{
|
||||
sk->s_flags |= NL_MSG_PEEK_EXPLICIT;
|
||||
sk->s_flags &= ~NL_MSG_PEEK;
|
||||
}
|
||||
|
||||
/*****************************************************************************/
|
||||
|
||||
int
|
||||
@@ -1103,7 +1093,9 @@ nl_socket_new(struct nl_sock **out_sk,
|
||||
},
|
||||
.s_seq_expect = t,
|
||||
.s_seq_next = t,
|
||||
.s_flags = NM_FLAGS_HAS(flags, NL_SOCKET_FLAGS_DISABLE_MSG_PEEK) ? 0 : NL_MSG_PEEK,
|
||||
.s_bufsize = 0,
|
||||
.s_msg_peek = !NM_FLAGS_HAS(flags, NL_SOCKET_FLAGS_DISABLE_MSG_PEEK),
|
||||
.s_auto_ack = TRUE,
|
||||
};
|
||||
|
||||
nmerr = nl_socket_set_buffer_size(sk, bufsize_rx, bufsize_tx);
|
||||
@@ -1229,7 +1221,7 @@ continue_reading:
|
||||
nrecv++;
|
||||
|
||||
/* Only do sequence checking if auto-ack mode is enabled */
|
||||
if (!(sk->s_flags & NL_NO_AUTO_ACK)) {
|
||||
if (sk->s_auto_ack) {
|
||||
if (hdr->nlmsg_seq != sk->s_seq_expect) {
|
||||
nmerr = -NME_NL_SEQ_MISMATCH;
|
||||
goto out;
|
||||
@@ -1414,7 +1406,7 @@ nl_complete_msg(struct nl_sock *sk, struct nl_msg *msg)
|
||||
|
||||
nlh->nlmsg_flags |= NLM_F_REQUEST;
|
||||
|
||||
if (!(sk->s_flags & NL_NO_AUTO_ACK))
|
||||
if (sk->s_auto_ack)
|
||||
nlh->nlmsg_flags |= NLM_F_ACK;
|
||||
}
|
||||
|
||||
@@ -1510,8 +1502,7 @@ nl_recv(struct nl_sock *sk,
|
||||
nm_assert(!out_creds_has || out_creds);
|
||||
nm_assert(!out_pktinfo_has || out_pktinfo_group);
|
||||
|
||||
if ((sk->s_flags & NL_MSG_PEEK)
|
||||
|| (!(sk->s_flags & NL_MSG_PEEK_EXPLICIT) && sk->s_bufsize == 0))
|
||||
if (sk->s_msg_peek)
|
||||
flags |= MSG_PEEK | MSG_TRUNC;
|
||||
|
||||
if (buf0_len > 0) {
|
||||
|
@@ -548,8 +548,6 @@ int nl_socket_set_pktinfo(struct nl_sock *sk, int state);
|
||||
|
||||
int nl_socket_set_nonblocking(const struct nl_sock *sk);
|
||||
|
||||
void nl_socket_disable_msg_peek(struct nl_sock *sk);
|
||||
|
||||
uint32_t nl_socket_get_local_port(const struct nl_sock *sk);
|
||||
|
||||
int nl_socket_add_memberships(struct nl_sock *sk, int group, ...);
|
||||
|
@@ -71,7 +71,6 @@ test_use_symbols(void)
|
||||
(void (*)(void)) nl_socket_set_buffer_size,
|
||||
(void (*)(void)) nl_socket_add_memberships,
|
||||
(void (*)(void)) nl_socket_set_ext_ack,
|
||||
(void (*)(void)) nl_socket_disable_msg_peek,
|
||||
(void (*)(void)) nl_wait_for_ack,
|
||||
(void (*)(void)) nl_recvmsgs,
|
||||
(void (*)(void)) nl_sendmsg,
|
||||
|
Reference in New Issue
Block a user