2005-04-17 02:20:36 +04:00
/*
* xfrm4_state . c
*
* Changes :
* YOSHIFUJI Hideaki @ USAGI
* Split up af - specific portion
*
*/
2005-06-21 00:21:43 +04:00
# include <net/ip.h>
2005-04-17 02:20:36 +04:00
# include <net/xfrm.h>
# include <linux/pfkeyv2.h>
# include <linux/ipsec.h>
static struct xfrm_state_afinfo xfrm4_state_afinfo ;
2005-06-21 00:21:43 +04:00
static int xfrm4_init_flags ( struct xfrm_state * x )
{
if ( ipv4_config . no_pmtu_disc )
x - > props . flags | = XFRM_STATE_NOPMTUDISC ;
return 0 ;
}
2005-04-17 02:20:36 +04:00
static void
__xfrm4_init_tempsel ( struct xfrm_state * x , struct flowi * fl ,
struct xfrm_tmpl * tmpl ,
xfrm_address_t * daddr , xfrm_address_t * saddr )
{
x - > sel . daddr . a4 = fl - > fl4_dst ;
x - > sel . saddr . a4 = fl - > fl4_src ;
x - > sel . dport = xfrm_flowi_dport ( fl ) ;
2006-09-28 05:46:11 +04:00
x - > sel . dport_mask = htons ( 0xffff ) ;
2005-04-17 02:20:36 +04:00
x - > sel . sport = xfrm_flowi_sport ( fl ) ;
2006-09-28 05:46:11 +04:00
x - > sel . sport_mask = htons ( 0xffff ) ;
2005-04-17 02:20:36 +04:00
x - > sel . prefixlen_d = 32 ;
x - > sel . prefixlen_s = 32 ;
x - > sel . proto = fl - > proto ;
x - > sel . ifindex = fl - > oif ;
x - > id = tmpl - > id ;
if ( x - > id . daddr . a4 = = 0 )
x - > id . daddr . a4 = daddr - > a4 ;
x - > props . saddr = tmpl - > saddr ;
if ( x - > props . saddr . a4 = = 0 )
x - > props . saddr . a4 = saddr - > a4 ;
x - > props . mode = tmpl - > mode ;
x - > props . reqid = tmpl - > reqid ;
x - > props . family = AF_INET ;
}
static struct xfrm_state_afinfo xfrm4_state_afinfo = {
. family = AF_INET ,
2005-06-21 00:21:43 +04:00
. init_flags = xfrm4_init_flags ,
2005-04-17 02:20:36 +04:00
. init_tempsel = __xfrm4_init_tempsel ,
2007-02-07 01:24:56 +03:00
. output = xfrm4_output ,
2005-04-17 02:20:36 +04:00
} ;
void __init xfrm4_state_init ( void )
{
xfrm_state_register_afinfo ( & xfrm4_state_afinfo ) ;
}
2005-08-10 06:35:47 +04:00
#if 0
2005-04-17 02:20:36 +04:00
void __exit xfrm4_state_fini ( void )
{
xfrm_state_unregister_afinfo ( & xfrm4_state_afinfo ) ;
}
2005-08-10 06:35:47 +04:00
# endif /* 0 */
2005-04-17 02:20:36 +04:00