kernel-netlink: Define netlink buffer as an union having a netlink header
This allows us to streamline the netlink buffers, and avoid extensive casting.
This commit is contained in:
parent
6fe02dda75
commit
0404a29bfe
|
@ -108,7 +108,7 @@ static job_requeue_t reset_cb(struct reset_cb_data_t *data)
|
|||
|
||||
memset(&request, 0, sizeof(request));
|
||||
|
||||
hdr = (struct nlmsghdr*)request;
|
||||
hdr = &request.hdr;
|
||||
hdr->nlmsg_flags = NLM_F_REQUEST | NLM_F_ACK | NLM_F_REPLACE;
|
||||
hdr->nlmsg_seq = 201;
|
||||
hdr->nlmsg_pid = getpid();
|
||||
|
|
|
@ -1065,7 +1065,7 @@ static status_t get_spi_internal(private_kernel_netlink_ipsec_t *this,
|
|||
|
||||
memset(&request, 0, sizeof(request));
|
||||
|
||||
hdr = (struct nlmsghdr*)request;
|
||||
hdr = &request.hdr;
|
||||
hdr->nlmsg_flags = NLM_F_REQUEST;
|
||||
hdr->nlmsg_type = XFRM_MSG_ALLOCSPI;
|
||||
hdr->nlmsg_len = NLMSG_LENGTH(sizeof(struct xfrm_userspi_info));
|
||||
|
@ -1214,7 +1214,7 @@ METHOD(kernel_ipsec_t, add_sa, status_t,
|
|||
DBG2(DBG_KNL, "adding SAD entry with SPI %.8x and reqid {%u} (mark "
|
||||
"%u/0x%08x)", ntohl(spi), reqid, mark.value, mark.mask);
|
||||
|
||||
hdr = (struct nlmsghdr*)request;
|
||||
hdr = &request.hdr;
|
||||
hdr->nlmsg_flags = NLM_F_REQUEST | NLM_F_ACK;
|
||||
hdr->nlmsg_type = inbound ? XFRM_MSG_UPDSA : XFRM_MSG_NEWSA;
|
||||
hdr->nlmsg_len = NLMSG_LENGTH(sizeof(struct xfrm_usersa_info));
|
||||
|
@ -1521,7 +1521,7 @@ METHOD(kernel_ipsec_t, add_sa, status_t,
|
|||
status = SUCCESS;
|
||||
|
||||
failed:
|
||||
memwipe(request, sizeof(request));
|
||||
memwipe(&request, sizeof(request));
|
||||
return status;
|
||||
}
|
||||
|
||||
|
@ -1549,7 +1549,7 @@ static void get_replay_state(private_kernel_netlink_ipsec_t *this,
|
|||
DBG2(DBG_KNL, "querying replay state from SAD entry with SPI %.8x",
|
||||
ntohl(spi));
|
||||
|
||||
hdr = (struct nlmsghdr*)request;
|
||||
hdr = &request.hdr;
|
||||
hdr->nlmsg_flags = NLM_F_REQUEST;
|
||||
hdr->nlmsg_type = XFRM_MSG_GETAE;
|
||||
hdr->nlmsg_len = NLMSG_LENGTH(sizeof(struct xfrm_aevent_id));
|
||||
|
@ -1641,7 +1641,7 @@ METHOD(kernel_ipsec_t, query_sa, status_t,
|
|||
DBG2(DBG_KNL, "querying SAD entry with SPI %.8x (mark %u/0x%08x)",
|
||||
ntohl(spi), mark.value, mark.mask);
|
||||
|
||||
hdr = (struct nlmsghdr*)request;
|
||||
hdr = &request.hdr;
|
||||
hdr->nlmsg_flags = NLM_F_REQUEST;
|
||||
hdr->nlmsg_type = XFRM_MSG_GETSA;
|
||||
hdr->nlmsg_len = NLMSG_LENGTH(sizeof(struct xfrm_usersa_id));
|
||||
|
@ -1744,7 +1744,7 @@ METHOD(kernel_ipsec_t, del_sa, status_t,
|
|||
DBG2(DBG_KNL, "deleting SAD entry with SPI %.8x (mark %u/0x%08x)",
|
||||
ntohl(spi), mark.value, mark.mask);
|
||||
|
||||
hdr = (struct nlmsghdr*)request;
|
||||
hdr = &request.hdr;
|
||||
hdr->nlmsg_flags = NLM_F_REQUEST | NLM_F_ACK;
|
||||
hdr->nlmsg_type = XFRM_MSG_DELSA;
|
||||
hdr->nlmsg_len = NLMSG_LENGTH(sizeof(struct xfrm_usersa_id));
|
||||
|
@ -1813,7 +1813,7 @@ METHOD(kernel_ipsec_t, update_sa, status_t,
|
|||
DBG2(DBG_KNL, "querying SAD entry with SPI %.8x for update", ntohl(spi));
|
||||
|
||||
/* query the existing SA first */
|
||||
hdr = (struct nlmsghdr*)request;
|
||||
hdr = &request.hdr;
|
||||
hdr->nlmsg_flags = NLM_F_REQUEST;
|
||||
hdr->nlmsg_type = XFRM_MSG_GETSA;
|
||||
hdr->nlmsg_len = NLMSG_LENGTH(sizeof(struct xfrm_usersa_id));
|
||||
|
@ -1876,7 +1876,7 @@ METHOD(kernel_ipsec_t, update_sa, status_t,
|
|||
DBG2(DBG_KNL, "updating SAD entry with SPI %.8x from %#H..%#H to %#H..%#H",
|
||||
ntohl(spi), src, dst, new_src, new_dst);
|
||||
/* copy over the SA from out to request */
|
||||
hdr = (struct nlmsghdr*)request;
|
||||
hdr = &request.hdr;
|
||||
hdr->nlmsg_flags = NLM_F_REQUEST | NLM_F_ACK;
|
||||
hdr->nlmsg_type = XFRM_MSG_NEWSA;
|
||||
hdr->nlmsg_len = NLMSG_LENGTH(sizeof(struct xfrm_usersa_info));
|
||||
|
@ -1967,7 +1967,7 @@ failed:
|
|||
free(replay);
|
||||
free(replay_esn);
|
||||
memwipe(out, len);
|
||||
memwipe(request, sizeof(request));
|
||||
memwipe(&request, sizeof(request));
|
||||
free(out);
|
||||
|
||||
return status;
|
||||
|
@ -1984,7 +1984,7 @@ METHOD(kernel_ipsec_t, flush_sas, status_t,
|
|||
|
||||
DBG2(DBG_KNL, "flushing all SAD entries");
|
||||
|
||||
hdr = (struct nlmsghdr*)request;
|
||||
hdr = &request.hdr;
|
||||
hdr->nlmsg_flags = NLM_F_REQUEST | NLM_F_ACK;
|
||||
hdr->nlmsg_type = XFRM_MSG_FLUSHSA;
|
||||
hdr->nlmsg_len = NLMSG_LENGTH(sizeof(struct xfrm_usersa_flush));
|
||||
|
@ -2020,7 +2020,7 @@ static status_t add_policy_internal(private_kernel_netlink_ipsec_t *this,
|
|||
memcpy(&clone, policy, sizeof(policy_entry_t));
|
||||
|
||||
memset(&request, 0, sizeof(request));
|
||||
hdr = (struct nlmsghdr*)request;
|
||||
hdr = &request.hdr;
|
||||
hdr->nlmsg_flags = NLM_F_REQUEST | NLM_F_ACK;
|
||||
hdr->nlmsg_type = update ? XFRM_MSG_UPDPOLICY : XFRM_MSG_NEWPOLICY;
|
||||
hdr->nlmsg_len = NLMSG_LENGTH(sizeof(struct xfrm_userpolicy_info));
|
||||
|
@ -2344,7 +2344,7 @@ METHOD(kernel_ipsec_t, query_policy, status_t,
|
|||
src_ts, dst_ts, policy_dir_names, direction,
|
||||
mark.value, mark.mask);
|
||||
|
||||
hdr = (struct nlmsghdr*)request;
|
||||
hdr = &request.hdr;
|
||||
hdr->nlmsg_flags = NLM_F_REQUEST;
|
||||
hdr->nlmsg_type = XFRM_MSG_GETPOLICY;
|
||||
hdr->nlmsg_len = NLMSG_LENGTH(sizeof(struct xfrm_userpolicy_id));
|
||||
|
@ -2501,7 +2501,7 @@ METHOD(kernel_ipsec_t, del_policy, status_t,
|
|||
|
||||
memset(&request, 0, sizeof(request));
|
||||
|
||||
hdr = (struct nlmsghdr*)request;
|
||||
hdr = &request.hdr;
|
||||
hdr->nlmsg_flags = NLM_F_REQUEST | NLM_F_ACK;
|
||||
hdr->nlmsg_type = XFRM_MSG_DELPOLICY;
|
||||
hdr->nlmsg_len = NLMSG_LENGTH(sizeof(struct xfrm_userpolicy_id));
|
||||
|
@ -2560,7 +2560,7 @@ METHOD(kernel_ipsec_t, flush_policies, status_t,
|
|||
|
||||
DBG2(DBG_KNL, "flushing all policies from SPD");
|
||||
|
||||
hdr = (struct nlmsghdr*)request;
|
||||
hdr = &request.hdr;
|
||||
hdr->nlmsg_flags = NLM_F_REQUEST | NLM_F_ACK;
|
||||
hdr->nlmsg_type = XFRM_MSG_FLUSHPOLICY;
|
||||
hdr->nlmsg_len = NLMSG_LENGTH(0); /* no data associated */
|
||||
|
|
|
@ -1625,7 +1625,7 @@ static host_t *get_route(private_kernel_netlink_net_t *this, host_t *dest,
|
|||
memset(&request, 0, sizeof(request));
|
||||
|
||||
family = dest->get_family(dest);
|
||||
hdr = (struct nlmsghdr*)request;
|
||||
hdr = &request.hdr;
|
||||
hdr->nlmsg_flags = NLM_F_REQUEST;
|
||||
if (family == AF_INET || this->rta_prefsrc_for_ipv6 ||
|
||||
this->routing_table || match_net)
|
||||
|
@ -1864,7 +1864,7 @@ static status_t manage_ipaddr(private_kernel_netlink_net_t *this, int nlmsg_type
|
|||
|
||||
chunk = ip->get_address(ip);
|
||||
|
||||
hdr = (struct nlmsghdr*)request;
|
||||
hdr = &request.hdr;
|
||||
hdr->nlmsg_flags = NLM_F_REQUEST | NLM_F_ACK | flags;
|
||||
hdr->nlmsg_type = nlmsg_type;
|
||||
hdr->nlmsg_len = NLMSG_LENGTH(sizeof(struct ifaddrmsg));
|
||||
|
@ -2092,7 +2092,7 @@ static status_t manage_srcroute(private_kernel_netlink_net_t *this,
|
|||
|
||||
memset(&request, 0, sizeof(request));
|
||||
|
||||
hdr = (struct nlmsghdr*)request;
|
||||
hdr = &request.hdr;
|
||||
hdr->nlmsg_flags = NLM_F_REQUEST | NLM_F_ACK | flags;
|
||||
hdr->nlmsg_type = nlmsg_type;
|
||||
hdr->nlmsg_len = NLMSG_LENGTH(sizeof(struct rtmsg));
|
||||
|
@ -2221,7 +2221,7 @@ static status_t init_address_list(private_kernel_netlink_net_t *this)
|
|||
|
||||
memset(&request, 0, sizeof(request));
|
||||
|
||||
in = (struct nlmsghdr*)&request;
|
||||
in = &request.hdr;
|
||||
in->nlmsg_len = NLMSG_LENGTH(sizeof(struct rtgenmsg));
|
||||
in->nlmsg_flags = NLM_F_REQUEST | NLM_F_MATCH | NLM_F_ROOT;
|
||||
msg = (struct rtgenmsg*)NLMSG_DATA(in);
|
||||
|
@ -2308,7 +2308,7 @@ static status_t manage_rule(private_kernel_netlink_net_t *this, int nlmsg_type,
|
|||
char *fwmark;
|
||||
|
||||
memset(&request, 0, sizeof(request));
|
||||
hdr = (struct nlmsghdr*)request;
|
||||
hdr = &request.hdr;
|
||||
hdr->nlmsg_flags = NLM_F_REQUEST | NLM_F_ACK;
|
||||
hdr->nlmsg_type = nlmsg_type;
|
||||
if (nlmsg_type == RTM_NEWRULE)
|
||||
|
|
|
@ -26,7 +26,10 @@
|
|||
* 1024 byte is currently sufficient for all operations. Some platform
|
||||
* require an enforced aligment to four bytes (e.g. ARM).
|
||||
*/
|
||||
typedef u_char netlink_buf_t[1024] __attribute__((aligned(RTA_ALIGNTO)));
|
||||
typedef union {
|
||||
struct nlmsghdr hdr;
|
||||
u_char bytes[1024];
|
||||
} netlink_buf_t __attribute__((aligned(RTA_ALIGNTO)));
|
||||
|
||||
typedef struct netlink_socket_t netlink_socket_t;
|
||||
|
||||
|
|
Loading…
Reference in New Issue