2005-04-16 15:20:36 -07:00
/*
* xfrm4_state . c
*
* Changes :
* YOSHIFUJI Hideaki @ USAGI
* Split up af - specific portion
*
*/
2005-06-20 13:21:43 -07:00
# include <net/ip.h>
2005-04-16 15:20:36 -07:00
# include <net/xfrm.h>
# include <linux/pfkeyv2.h>
# include <linux/ipsec.h>
static struct xfrm_state_afinfo xfrm4_state_afinfo ;
2005-06-20 13:21:43 -07: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-16 15:20:36 -07: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-27 18:46:11 -07:00
x - > sel . dport_mask = htons ( 0xffff ) ;
2005-04-16 15:20:36 -07:00
x - > sel . sport = xfrm_flowi_sport ( fl ) ;
2006-09-27 18:46:11 -07:00
x - > sel . sport_mask = htons ( 0xffff ) ;
2005-04-16 15:20:36 -07: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-20 13:21:43 -07:00
. init_flags = xfrm4_init_flags ,
2005-04-16 15:20:36 -07:00
. init_tempsel = __xfrm4_init_tempsel ,
2007-02-06 14:24:56 -08:00
. output = xfrm4_output ,
2005-04-16 15:20:36 -07:00
} ;
void __init xfrm4_state_init ( void )
{
xfrm_state_register_afinfo ( & xfrm4_state_afinfo ) ;
}
2005-08-09 19:35:47 -07:00
#if 0
2005-04-16 15:20:36 -07:00
void __exit xfrm4_state_fini ( void )
{
xfrm_state_unregister_afinfo ( & xfrm4_state_afinfo ) ;
}
2005-08-09 19:35:47 -07:00
# endif /* 0 */
2005-04-16 15:20:36 -07:00