kernel-netlink: Provide error information for Netlink sockets

#1467.
This commit is contained in:
Tobias Brunner 2016-05-27 13:43:41 +02:00
parent fc21465c66
commit a0178fe26e
3 changed files with 25 additions and 19 deletions

View File

@ -1081,7 +1081,8 @@ static bool receive_events(private_kernel_netlink_ipsec_t *this, int fd,
/* no data ready, select again */ /* no data ready, select again */
return TRUE; return TRUE;
default: default:
DBG1(DBG_KNL, "unable to receive from xfrm event socket"); DBG1(DBG_KNL, "unable to receive from XFRM event socket: %s "
"(%d)", strerror(errno), errno);
sleep(1); sleep(1);
return TRUE; return TRUE;
} }
@ -1109,8 +1110,8 @@ static bool receive_events(private_kernel_netlink_ipsec_t *this, int fd,
process_mapping(this, hdr); process_mapping(this, hdr);
break; break;
default: default:
DBG1(DBG_KNL, "received unknown event from xfrm event " DBG1(DBG_KNL, "received unknown event from XFRM event "
"socket: %d", hdr->nlmsg_type); "socket: %d", hdr->nlmsg_type);
break; break;
} }
hdr = NLMSG_NEXT(hdr, len); hdr = NLMSG_NEXT(hdr, len);
@ -1678,8 +1679,7 @@ static void get_replay_state(private_kernel_netlink_ipsec_t *this,
{ {
struct nlmsgerr *err = NLMSG_DATA(hdr); struct nlmsgerr *err = NLMSG_DATA(hdr);
DBG1(DBG_KNL, "querying replay state from SAD entry " DBG1(DBG_KNL, "querying replay state from SAD entry "
"failed: %s (%d)", strerror(-err->error), "failed: %s (%d)", strerror(-err->error), -err->error);
-err->error);
break; break;
} }
default: default:
@ -2359,9 +2359,8 @@ static status_t add_policy_internal(private_kernel_netlink_ipsec_t *this,
old->src_ip, old->if_name) != SUCCESS) old->src_ip, old->if_name) != SUCCESS)
{ {
DBG1(DBG_KNL, "error uninstalling route installed with " DBG1(DBG_KNL, "error uninstalling route installed with "
"policy %R === %R %N", in->src_ts, "policy %R === %R %N", in->src_ts, in->dst_ts,
in->dst_ts, policy_dir_names, policy_dir_names, policy->direction);
policy->direction);
} }
route_entry_destroy(old); route_entry_destroy(old);
policy->route = NULL; policy->route = NULL;
@ -2787,15 +2786,15 @@ static bool add_socket_bypass(private_kernel_netlink_ipsec_t *this,
policy.dir = XFRM_POLICY_OUT; policy.dir = XFRM_POLICY_OUT;
if (setsockopt(fd, sol, ipsec_policy, &policy, sizeof(policy)) < 0) if (setsockopt(fd, sol, ipsec_policy, &policy, sizeof(policy)) < 0)
{ {
DBG1(DBG_KNL, "unable to set IPSEC_POLICY on socket: %s", DBG1(DBG_KNL, "unable to set IPSEC_POLICY on socket: %s (%d)",
strerror(errno)); strerror(errno), errno);
return FALSE; return FALSE;
} }
policy.dir = XFRM_POLICY_IN; policy.dir = XFRM_POLICY_IN;
if (setsockopt(fd, sol, ipsec_policy, &policy, sizeof(policy)) < 0) if (setsockopt(fd, sol, ipsec_policy, &policy, sizeof(policy)) < 0)
{ {
DBG1(DBG_KNL, "unable to set IPSEC_POLICY on socket: %s", DBG1(DBG_KNL, "unable to set IPSEC_POLICY on socket: %s (%d)",
strerror(errno)); strerror(errno), errno);
return FALSE; return FALSE;
} }
return TRUE; return TRUE;
@ -3068,7 +3067,8 @@ kernel_netlink_ipsec_t *kernel_netlink_ipsec_create()
this->socket_xfrm_events = socket(AF_NETLINK, SOCK_RAW, NETLINK_XFRM); this->socket_xfrm_events = socket(AF_NETLINK, SOCK_RAW, NETLINK_XFRM);
if (this->socket_xfrm_events <= 0) if (this->socket_xfrm_events <= 0)
{ {
DBG1(DBG_KNL, "unable to create XFRM event socket"); DBG1(DBG_KNL, "unable to create XFRM event socket: %s (%d)",
strerror(errno), errno);
destroy(this); destroy(this);
return NULL; return NULL;
} }
@ -3076,7 +3076,8 @@ kernel_netlink_ipsec_t *kernel_netlink_ipsec_create()
XFRMNLGRP(MIGRATE) | XFRMNLGRP(MAPPING); XFRMNLGRP(MIGRATE) | XFRMNLGRP(MAPPING);
if (bind(this->socket_xfrm_events, (struct sockaddr*)&addr, sizeof(addr))) if (bind(this->socket_xfrm_events, (struct sockaddr*)&addr, sizeof(addr)))
{ {
DBG1(DBG_KNL, "unable to bind XFRM event socket"); DBG1(DBG_KNL, "unable to bind XFRM event socket: %s (%d)",
strerror(errno), errno);
destroy(this); destroy(this);
return NULL; return NULL;
} }

View File

@ -1297,7 +1297,8 @@ static bool receive_events(private_kernel_netlink_net_t *this, int fd,
/* no data ready, select again */ /* no data ready, select again */
return TRUE; return TRUE;
default: default:
DBG1(DBG_KNL, "unable to receive from rt event socket"); DBG1(DBG_KNL, "unable to receive from RT event socket %s (%d)",
strerror(errno), errno);
sleep(1); sleep(1);
return TRUE; return TRUE;
} }
@ -2644,7 +2645,8 @@ kernel_netlink_net_t *kernel_netlink_net_create()
this->socket_events = socket(AF_NETLINK, SOCK_RAW, NETLINK_ROUTE); this->socket_events = socket(AF_NETLINK, SOCK_RAW, NETLINK_ROUTE);
if (this->socket_events < 0) if (this->socket_events < 0)
{ {
DBG1(DBG_KNL, "unable to create RT event socket"); DBG1(DBG_KNL, "unable to create RT event socket: %s (%d)",
strerror(errno), errno);
destroy(this); destroy(this);
return NULL; return NULL;
} }
@ -2652,7 +2654,8 @@ kernel_netlink_net_t *kernel_netlink_net_create()
RTMGRP_IPV4_ROUTE | RTMGRP_IPV6_ROUTE | RTMGRP_LINK; RTMGRP_IPV4_ROUTE | RTMGRP_IPV6_ROUTE | RTMGRP_LINK;
if (bind(this->socket_events, (struct sockaddr*)&addr, sizeof(addr))) if (bind(this->socket_events, (struct sockaddr*)&addr, sizeof(addr)))
{ {
DBG1(DBG_KNL, "unable to bind RT event socket"); DBG1(DBG_KNL, "unable to bind RT event socket: %s (%d)",
strerror(errno), errno);
destroy(this); destroy(this);
return NULL; return NULL;
} }

View File

@ -594,13 +594,15 @@ netlink_socket_t *netlink_socket_create(int protocol, enum_name_t *names,
} }
if (this->socket == -1) if (this->socket == -1)
{ {
DBG1(DBG_KNL, "unable to create netlink socket"); DBG1(DBG_KNL, "unable to create netlink socket: %s (%d)",
strerror(errno), errno);
destroy(this); destroy(this);
return NULL; return NULL;
} }
if (bind(this->socket, (struct sockaddr*)&addr, sizeof(addr))) if (bind(this->socket, (struct sockaddr*)&addr, sizeof(addr)))
{ {
DBG1(DBG_KNL, "unable to bind netlink socket"); DBG1(DBG_KNL, "unable to bind netlink socket: %s (%d)",
strerror(errno), errno);
destroy(this); destroy(this);
return NULL; return NULL;
} }