diff options
author | Tobias Brunner <tobias@strongswan.org> | 2013-10-15 17:59:26 +0200 |
---|---|---|
committer | Tobias Brunner <tobias@strongswan.org> | 2013-10-17 16:57:39 +0200 |
commit | 406a504ca7afeb51a585e494d1be77b245977953 (patch) | |
tree | 63b03932c8b4737f993fadf5d12224b7fbbbbd1a /src/libhydra/plugins/kernel_netlink/kernel_netlink_ipsec.c | |
parent | ddc2d3c8e4f561a35de615858428f31544f0b472 (diff) | |
download | strongswan-406a504ca7afeb51a585e494d1be77b245977953.tar.bz2 strongswan-406a504ca7afeb51a585e494d1be77b245977953.tar.xz |
kernel-netlink: Convert ports in acquires to ICMP[v6] type and code
Diffstat (limited to 'src/libhydra/plugins/kernel_netlink/kernel_netlink_ipsec.c')
-rw-r--r-- | src/libhydra/plugins/kernel_netlink/kernel_netlink_ipsec.c | 11 |
1 files changed, 8 insertions, 3 deletions
diff --git a/src/libhydra/plugins/kernel_netlink/kernel_netlink_ipsec.c b/src/libhydra/plugins/kernel_netlink/kernel_netlink_ipsec.c index 2e8d54e38..8352b9311 100644 --- a/src/libhydra/plugins/kernel_netlink/kernel_netlink_ipsec.c +++ b/src/libhydra/plugins/kernel_netlink/kernel_netlink_ipsec.c @@ -777,7 +777,7 @@ static traffic_selector_t* selector2ts(struct xfrm_selector *sel, bool src) prefixlen = sel->prefixlen_s; if (sel->sport_mask) { - port = htons(sel->sport); + port = ntohs(sel->sport); } } else @@ -786,10 +786,15 @@ static traffic_selector_t* selector2ts(struct xfrm_selector *sel, bool src) prefixlen = sel->prefixlen_d; if (sel->dport_mask) { - port = htons(sel->dport); + port = ntohs(sel->dport); } } - + if (sel->proto == IPPROTO_ICMP || sel->proto == IPPROTO_ICMPV6) + { /* convert ICMP[v6] message type and code as supplied by the kernel in + * source and destination ports (both in network order) */ + port = (sel->sport >> 8) | (sel->dport & 0xff00); + port = ntohs(port); + } /* The Linux 2.6 kernel does not set the selector's family field, * so as a kludge we additionally test the prefix length. */ |