#include <linux/uaccess.h>
#include <linux/netdevice.h>
#include <linux/etherdevice.h>
#include <linux/if_ether.h>
#include <linux/if_vlan.h>
#include <net/llc_pdu.h>
#include <linux/kernel.h>
#include <linux/jhash.h>
#include <linux/jiffies.h>
#include <linux/llc.h>
#include <linux/module.h>
#include <linux/in.h>
#include <linux/rcupdate.h>
#include <linux/cpumask.h>
#include <linux/if_arp.h>
#include <linux/ip.h>
#include <linux/ipv6.h>
#include <linux/mpls.h>
#include <linux/sctp.h>
#include <linux/smp.h>
#include <linux/tcp.h>
#include <linux/udp.h>
#include <linux/icmp.h>
#include <linux/icmpv6.h>
#include <linux/rculist.h>
#include <net/ip.h>
#include <net/ip_tunnels.h>
#include <net/ipv6.h>
#include <net/mpls.h>
#include <net/ndisc.h>
#include <net/nsh.h>
#include <net/pkt_cls.h>
#include <net/netfilter/nf_conntrack_zones.h>
#include "conntrack.h"
#include "datapath.h"
#include "flow.h"
#include "flow_netlink.h"
#include "vport.h"
u64 ovs_flow_used_time(unsigned long flow_jiffies)
{ … }
#define TCP_FLAGS_BE16(tp) …
void ovs_flow_stats_update(struct sw_flow *flow, __be16 tcp_flags,
const struct sk_buff *skb)
{ … }
void ovs_flow_stats_get(const struct sw_flow *flow,
struct ovs_flow_stats *ovs_stats,
unsigned long *used, __be16 *tcp_flags)
{ … }
void ovs_flow_stats_clear(struct sw_flow *flow)
{ … }
static int check_header(struct sk_buff *skb, int len)
{ … }
static bool arphdr_ok(struct sk_buff *skb)
{ … }
static int check_iphdr(struct sk_buff *skb)
{ … }
static bool tcphdr_ok(struct sk_buff *skb)
{ … }
static bool udphdr_ok(struct sk_buff *skb)
{ … }
static bool sctphdr_ok(struct sk_buff *skb)
{ … }
static bool icmphdr_ok(struct sk_buff *skb)
{ … }
static void get_ipv6_ext_hdrs(struct sk_buff *skb, struct ipv6hdr *nh,
u16 *ext_hdrs)
{ … }
static int parse_ipv6hdr(struct sk_buff *skb, struct sw_flow_key *key)
{ … }
static bool icmp6hdr_ok(struct sk_buff *skb)
{ … }
static int parse_vlan_tag(struct sk_buff *skb, struct vlan_head *key_vh,
bool untag_vlan)
{ … }
static void clear_vlan(struct sw_flow_key *key)
{ … }
static int parse_vlan(struct sk_buff *skb, struct sw_flow_key *key)
{ … }
static __be16 parse_ethertype(struct sk_buff *skb)
{ … }
static int parse_icmpv6(struct sk_buff *skb, struct sw_flow_key *key,
int nh_len)
{ … }
static int parse_nsh(struct sk_buff *skb, struct sw_flow_key *key)
{ … }
static int key_extract_l3l4(struct sk_buff *skb, struct sw_flow_key *key)
{ … }
static int key_extract(struct sk_buff *skb, struct sw_flow_key *key)
{ … }
int ovs_flow_key_update_l3l4(struct sk_buff *skb, struct sw_flow_key *key)
{ … }
int ovs_flow_key_update(struct sk_buff *skb, struct sw_flow_key *key)
{ … }
static int key_extract_mac_proto(struct sk_buff *skb)
{ … }
int ovs_flow_key_extract(const struct ip_tunnel_info *tun_info,
struct sk_buff *skb, struct sw_flow_key *key)
{ … }
int ovs_flow_key_extract_userspace(struct net *net, const struct nlattr *attr,
struct sk_buff *skb,
struct sw_flow_key *key, bool log)
{ … }