|
@@ -749,7 +749,8 @@ static int xfrm_get_spdinfo(struct sk_buff *skb, struct nlmsghdr *nlh,
|
|
|
|
|
|
static int build_sadinfo(struct sk_buff *skb, u32 pid, u32 seq, u32 flags)
|
|
|
{
|
|
|
- struct xfrm_sadinfo si;
|
|
|
+ struct xfrmk_sadinfo si;
|
|
|
+ struct xfrmu_sadhinfo sh;
|
|
|
struct nlmsghdr *nlh;
|
|
|
u32 *f;
|
|
|
|
|
@@ -761,12 +762,11 @@ static int build_sadinfo(struct sk_buff *skb, u32 pid, u32 seq, u32 flags)
|
|
|
*f = flags;
|
|
|
xfrm_sad_getinfo(&si);
|
|
|
|
|
|
- if (flags & XFRM_SAD_HMASK)
|
|
|
- NLA_PUT_U32(skb, XFRMA_SADHMASK, si.sadhcnt);
|
|
|
- if (flags & XFRM_SAD_HMAX)
|
|
|
- NLA_PUT_U32(skb, XFRMA_SADHMAX, si.sadhmcnt);
|
|
|
- if (flags & XFRM_SAD_CNT)
|
|
|
- NLA_PUT_U32(skb, XFRMA_SADCNT, si.sadcnt);
|
|
|
+ sh.sadhmcnt = si.sadhmcnt;
|
|
|
+ sh.sadhcnt = si.sadhcnt;
|
|
|
+
|
|
|
+ NLA_PUT_U32(skb, XFRMA_SAD_CNT, si.sadcnt);
|
|
|
+ NLA_PUT(skb, XFRMA_SAD_HINFO, sizeof(sh), &sh);
|
|
|
|
|
|
return nlmsg_end(skb, nlh);
|
|
|
|
|
@@ -784,12 +784,8 @@ static int xfrm_get_sadinfo(struct sk_buff *skb, struct nlmsghdr *nlh,
|
|
|
u32 seq = nlh->nlmsg_seq;
|
|
|
int len = NLMSG_LENGTH(sizeof(u32));
|
|
|
|
|
|
- if (*flags & XFRM_SAD_HMASK)
|
|
|
- len += RTA_SPACE(sizeof(u32));
|
|
|
- if (*flags & XFRM_SAD_HMAX)
|
|
|
- len += RTA_SPACE(sizeof(u32));
|
|
|
- if (*flags & XFRM_SAD_CNT)
|
|
|
- len += RTA_SPACE(sizeof(u32));
|
|
|
+ len += RTA_SPACE(sizeof(struct xfrmu_sadhinfo));
|
|
|
+ len += RTA_SPACE(sizeof(u32));
|
|
|
|
|
|
r_skb = alloc_skb(len, GFP_ATOMIC);
|
|
|
|