2015-08-26 21:31:48 +03:00
/*
* Copyright ( c ) 2015 Nicira , Inc .
*
* This program is free software ; you can redistribute it and / or
* modify it under the terms of version 2 of the GNU General Public
* License as published by the Free Software Foundation .
*
* This program is distributed in the hope that it will be useful , but
* WITHOUT ANY WARRANTY ; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE . See the GNU
* General Public License for more details .
*/
# ifndef OVS_CONNTRACK_H
# define OVS_CONNTRACK_H 1
# include "flow.h"
struct ovs_conntrack_info ;
enum ovs_key_attr ;
2015-09-04 23:07:40 +03:00
# if IS_ENABLED(CONFIG_NF_CONNTRACK)
2015-08-26 21:31:52 +03:00
void ovs_ct_init ( struct net * ) ;
void ovs_ct_exit ( struct net * ) ;
bool ovs_ct_verify ( struct net * , enum ovs_key_attr attr ) ;
2015-08-26 21:31:48 +03:00
int ovs_ct_copy_action ( struct net * , const struct nlattr * ,
const struct sw_flow_key * , struct sw_flow_actions * * ,
bool log ) ;
int ovs_ct_action_to_attr ( const struct ovs_conntrack_info * , struct sk_buff * ) ;
int ovs_ct_execute ( struct net * , struct sk_buff * , struct sw_flow_key * ,
const struct ovs_conntrack_info * ) ;
void ovs_ct_fill_key ( const struct sk_buff * skb , struct sw_flow_key * key ) ;
int ovs_ct_put_key ( const struct sw_flow_key * key , struct sk_buff * skb ) ;
void ovs_ct_free_action ( const struct nlattr * a ) ;
2015-10-06 20:59:59 +03:00
2015-10-20 05:18:57 +03:00
# define CT_SUPPORTED_MASK (OVS_CS_F_NEW | OVS_CS_F_ESTABLISHED | \
OVS_CS_F_RELATED | OVS_CS_F_REPLY_DIR | \
2016-03-10 21:54:23 +03:00
OVS_CS_F_INVALID | OVS_CS_F_TRACKED | \
OVS_CS_F_SRC_NAT | OVS_CS_F_DST_NAT )
2015-08-26 21:31:48 +03:00
# else
# include <linux/errno.h>
2015-08-26 21:31:52 +03:00
static inline void ovs_ct_init ( struct net * net ) { }
static inline void ovs_ct_exit ( struct net * net ) { }
static inline bool ovs_ct_verify ( struct net * net , int attr )
2015-08-26 21:31:48 +03:00
{
return false ;
}
static inline int ovs_ct_copy_action ( struct net * net , const struct nlattr * nla ,
const struct sw_flow_key * key ,
struct sw_flow_actions * * acts , bool log )
{
return - ENOTSUPP ;
}
static inline int ovs_ct_action_to_attr ( const struct ovs_conntrack_info * info ,
struct sk_buff * skb )
{
return - ENOTSUPP ;
}
static inline int ovs_ct_execute ( struct net * net , struct sk_buff * skb ,
struct sw_flow_key * key ,
const struct ovs_conntrack_info * info )
{
2015-10-26 06:21:48 +03:00
kfree_skb ( skb ) ;
2015-08-26 21:31:48 +03:00
return - ENOTSUPP ;
}
static inline void ovs_ct_fill_key ( const struct sk_buff * skb ,
struct sw_flow_key * key )
{
key - > ct . state = 0 ;
key - > ct . zone = 0 ;
2015-08-26 21:31:49 +03:00
key - > ct . mark = 0 ;
2015-10-02 01:00:37 +03:00
memset ( & key - > ct . labels , 0 , sizeof ( key - > ct . labels ) ) ;
2015-08-26 21:31:48 +03:00
}
static inline int ovs_ct_put_key ( const struct sw_flow_key * key ,
struct sk_buff * skb )
{
return 0 ;
}
static inline void ovs_ct_free_action ( const struct nlattr * a ) { }
2015-10-20 05:18:57 +03:00
# define CT_SUPPORTED_MASK 0
2015-09-04 23:07:40 +03:00
# endif /* CONFIG_NF_CONNTRACK */
2015-08-26 21:31:48 +03:00
# endif /* ovs_conntrack.h */