~ [ source navigation ] ~ [ diff markup ] ~ [ identifier search ] ~

TOMOYO Linux Cross Reference
Linux/net/openvswitch/datapath.h

Version: ~ [ linux-5.1-rc2 ] ~ [ linux-5.0.4 ] ~ [ linux-4.20.17 ] ~ [ linux-4.19.31 ] ~ [ linux-4.18.20 ] ~ [ linux-4.17.19 ] ~ [ linux-4.16.18 ] ~ [ linux-4.15.18 ] ~ [ linux-4.14.108 ] ~ [ linux-4.13.16 ] ~ [ linux-4.12.14 ] ~ [ linux-4.11.12 ] ~ [ linux-4.10.17 ] ~ [ linux-4.9.165 ] ~ [ linux-4.8.17 ] ~ [ linux-4.7.10 ] ~ [ linux-4.6.7 ] ~ [ linux-4.5.7 ] ~ [ linux-4.4.177 ] ~ [ linux-4.3.6 ] ~ [ linux-4.2.8 ] ~ [ linux-4.1.52 ] ~ [ linux-4.0.9 ] ~ [ linux-3.19.8 ] ~ [ linux-3.18.137 ] ~ [ linux-3.17.8 ] ~ [ linux-3.16.63 ] ~ [ linux-3.15.10 ] ~ [ linux-3.14.79 ] ~ [ linux-3.13.11 ] ~ [ linux-3.12.74 ] ~ [ linux-3.11.10 ] ~ [ linux-3.10.108 ] ~ [ linux-3.9.11 ] ~ [ linux-3.8.13 ] ~ [ linux-3.7.10 ] ~ [ linux-3.6.11 ] ~ [ linux-3.5.7 ] ~ [ linux-3.4.113 ] ~ [ linux-3.3.8 ] ~ [ linux-3.2.102 ] ~ [ linux-3.1.10 ] ~ [ linux-3.0.101 ] ~ [ linux-2.6.39.4 ] ~ [ linux-2.6.38.8 ] ~ [ linux-2.6.37.6 ] ~ [ linux-2.6.36.4 ] ~ [ linux-2.6.35.14 ] ~ [ linux-2.6.34.15 ] ~ [ linux-2.6.33.20 ] ~ [ linux-2.6.32.71 ] ~ [ linux-2.6.0 ] ~ [ linux-2.4.37.11 ] ~ [ unix-v6-master ] ~ [ ccs-tools-1.8.5 ] ~ [ policy-sample ] ~
Architecture: ~ [ i386 ] ~ [ alpha ] ~ [ m68k ] ~ [ mips ] ~ [ ppc ] ~ [ sparc ] ~ [ sparc64 ] ~

  1 /*
  2  * Copyright (c) 2007-2011 Nicira Networks.
  3  *
  4  * This program is free software; you can redistribute it and/or
  5  * modify it under the terms of version 2 of the GNU General Public
  6  * License as published by the Free Software Foundation.
  7  *
  8  * This program is distributed in the hope that it will be useful, but
  9  * WITHOUT ANY WARRANTY; without even the implied warranty of
 10  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
 11  * General Public License for more details.
 12  *
 13  * You should have received a copy of the GNU General Public License
 14  * along with this program; if not, write to the Free Software
 15  * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
 16  * 02110-1301, USA
 17  */
 18 
 19 #ifndef DATAPATH_H
 20 #define DATAPATH_H 1
 21 
 22 #include <asm/page.h>
 23 #include <linux/kernel.h>
 24 #include <linux/mutex.h>
 25 #include <linux/netdevice.h>
 26 #include <linux/skbuff.h>
 27 #include <linux/u64_stats_sync.h>
 28 
 29 #include "flow.h"
 30 
 31 struct vport;
 32 
 33 #define DP_MAX_PORTS 1024
 34 #define SAMPLE_ACTION_DEPTH 3
 35 
 36 /**
 37  * struct dp_stats_percpu - per-cpu packet processing statistics for a given
 38  * datapath.
 39  * @n_hit: Number of received packets for which a matching flow was found in
 40  * the flow table.
 41  * @n_miss: Number of received packets that had no matching flow in the flow
 42  * table.  The sum of @n_hit and @n_miss is the number of packets that have
 43  * been received by the datapath.
 44  * @n_lost: Number of received packets that had no matching flow in the flow
 45  * table that could not be sent to userspace (normally due to an overflow in
 46  * one of the datapath's queues).
 47  */
 48 struct dp_stats_percpu {
 49         u64 n_hit;
 50         u64 n_missed;
 51         u64 n_lost;
 52         struct u64_stats_sync sync;
 53 };
 54 
 55 /**
 56  * struct datapath - datapath for flow-based packet switching
 57  * @rcu: RCU callback head for deferred destruction.
 58  * @list_node: Element in global 'dps' list.
 59  * @n_flows: Number of flows currently in flow table.
 60  * @table: Current flow table.  Protected by genl_lock and RCU.
 61  * @ports: Map from port number to &struct vport.  %OVSP_LOCAL port
 62  * always exists, other ports may be %NULL.  Protected by RTNL and RCU.
 63  * @port_list: List of all ports in @ports in arbitrary order.  RTNL required
 64  * to iterate or modify.
 65  * @stats_percpu: Per-CPU datapath statistics.
 66  *
 67  * Context: See the comment on locking at the top of datapath.c for additional
 68  * locking information.
 69  */
 70 struct datapath {
 71         struct rcu_head rcu;
 72         struct list_head list_node;
 73 
 74         /* Flow table. */
 75         struct flow_table __rcu *table;
 76 
 77         /* Switch ports. */
 78         struct vport __rcu *ports[DP_MAX_PORTS];
 79         struct list_head port_list;
 80 
 81         /* Stats. */
 82         struct dp_stats_percpu __percpu *stats_percpu;
 83 };
 84 
 85 /**
 86  * struct ovs_skb_cb - OVS data in skb CB
 87  * @flow: The flow associated with this packet.  May be %NULL if no flow.
 88  */
 89 struct ovs_skb_cb {
 90         struct sw_flow          *flow;
 91 };
 92 #define OVS_CB(skb) ((struct ovs_skb_cb *)(skb)->cb)
 93 
 94 /**
 95  * struct dp_upcall - metadata to include with a packet to send to userspace
 96  * @cmd: One of %OVS_PACKET_CMD_*.
 97  * @key: Becomes %OVS_PACKET_ATTR_KEY.  Must be nonnull.
 98  * @userdata: If nonnull, its u64 value is extracted and passed to userspace as
 99  * %OVS_PACKET_ATTR_USERDATA.
100  * @pid: Netlink PID to which packet should be sent.  If @pid is 0 then no
101  * packet is sent and the packet is accounted in the datapath's @n_lost
102  * counter.
103  */
104 struct dp_upcall_info {
105         u8 cmd;
106         const struct sw_flow_key *key;
107         const struct nlattr *userdata;
108         u32 pid;
109 };
110 
111 extern struct notifier_block ovs_dp_device_notifier;
112 extern struct genl_multicast_group ovs_dp_vport_multicast_group;
113 
114 void ovs_dp_process_received_packet(struct vport *, struct sk_buff *);
115 void ovs_dp_detach_port(struct vport *);
116 int ovs_dp_upcall(struct datapath *, struct sk_buff *,
117                   const struct dp_upcall_info *);
118 
119 const char *ovs_dp_name(const struct datapath *dp);
120 struct sk_buff *ovs_vport_cmd_build_info(struct vport *, u32 pid, u32 seq,
121                                          u8 cmd);
122 
123 int ovs_execute_actions(struct datapath *dp, struct sk_buff *skb);
124 #endif /* datapath.h */
125 

~ [ source navigation ] ~ [ diff markup ] ~ [ identifier search ] ~

kernel.org | git.kernel.org | LWN.net | Project Home | Wiki (Japanese) | Wiki (English) | SVN repository | Mail admin

Linux® is a registered trademark of Linus Torvalds in the United States and other countries.
TOMOYO® is a registered trademark of NTT DATA CORPORATION.

osdn.jp