uint16_t sadb_x_ipsecrequest_proto;
uint8_t sadb_x_ipsecrequest_mode;
uint8_t sadb_x_ipsecrequest_level;
- uint16_t sadb_x_ipsecrequest_reqid;
+ uint16_t sadb_x_ipsecrequest_reserved1;
+ uint32_t sadb_x_ipsecrequest_reqid;
+ uint32_t sadb_x_ipsecrequest_reserved2;
} __attribute__((packed));
/* sizeof(struct sadb_x_ipsecrequest) == 16 */
struct xfrm_user_tmpl {
struct xfrm_id id;
xfrm_address_t saddr;
- __u16 reqid;
+ __u32 reqid;
__u8 mode;
__u8 share;
__u8 optional;
struct xfrm_lifetime_cur curlft;
struct xfrm_stats stats;
__u32 seq;
+ __u32 reqid;
__u16 family;
- __u16 reqid;
__u8 mode; /* 0=transport,1=tunnel */
__u8 replay_window;
};
/* Parameters of this state. */
struct {
+ u32 reqid;
u8 mode;
u8 replay_window;
u8 aalgo, ealgo, calgo;
- u16 reqid;
u16 family;
xfrm_address_t saddr;
int header_len;
struct xfrm_tmpl *tmpl,
xfrm_address_t *daddr, xfrm_address_t *saddr);
struct xfrm_state *(*state_lookup)(xfrm_address_t *daddr, u32 spi, u8 proto);
- struct xfrm_state *(*find_acq)(u8 mode, u16 reqid, u8 proto,
+ struct xfrm_state *(*find_acq)(u8 mode, u32 reqid, u8 proto,
xfrm_address_t *daddr, xfrm_address_t *saddr,
int create);
};
/* Source address of tunnel. Ignored, if it is not a tunnel. */
xfrm_address_t saddr;
- __u16 reqid;
+ __u32 reqid;
/* Mode: transport/tunnel */
__u8 mode;
void xfrm_policy_flush(void);
u32 xfrm_get_acqseq(void);
void xfrm_alloc_spi(struct xfrm_state *x, u32 minspi, u32 maxspi);
-struct xfrm_state * xfrm_find_acq(u8 mode, u16 reqid, u8 proto,
+struct xfrm_state * xfrm_find_acq(u8 mode, u32 reqid, u8 proto,
xfrm_address_t *daddr, xfrm_address_t *saddr,
int create, unsigned short family);
extern void xfrm_policy_flush(void);
}
static struct xfrm_state *
-__xfrm4_find_acq(u8 mode, u16 reqid, u8 proto,
+__xfrm4_find_acq(u8 mode, u32 reqid, u8 proto,
xfrm_address_t *daddr, xfrm_address_t *saddr,
int create)
{
}
static struct xfrm_state *
-__xfrm6_find_acq(u8 mode, u16 reqid, u8 proto,
+__xfrm6_find_acq(u8 mode, u32 reqid, u8 proto,
xfrm_address_t *daddr, xfrm_address_t *saddr,
int create)
{
struct sadb_msg *out_hdr;
struct xfrm_state *x = NULL;
u8 mode;
- u16 reqid;
+ u32 reqid;
u8 proto;
unsigned short family;
xfrm_address_t *xsaddr = NULL, *xdaddr = NULL;
static int check_reqid(struct xfrm_policy *xp, int dir, int count, void *ptr)
{
int i;
- u16 reqid = *(u16*)ptr;
+ u32 reqid = *(u32*)ptr;
for (i=0; i<xp->xfrm_nr; i++) {
if (xp->xfrm_vec[i].reqid == reqid)
return 0;
}
-static u16 gen_reqid(void)
+static u32 gen_reqid(void)
{
- u16 start;
- static u16 reqid = IPSEC_MANUAL_REQID_MAX;
+ u32 start;
+ static u32 reqid = IPSEC_MANUAL_REQID_MAX;
start = reqid;
do {
size -= 2*socklen;
rq = (void*)skb_put(skb, req_size);
pol->sadb_x_policy_len += req_size/8;
+ memset(rq, 0, sizeof(*rq));
rq->sadb_x_ipsecrequest_len = req_size;
rq->sadb_x_ipsecrequest_proto = t->id.proto;
rq->sadb_x_ipsecrequest_mode = t->mode+1;
}
struct xfrm_state *
-xfrm_find_acq(u8 mode, u16 reqid, u8 proto,
+xfrm_find_acq(u8 mode, u32 reqid, u8 proto,
xfrm_address_t *daddr, xfrm_address_t *saddr,
int create, unsigned short family)
{