rtnetlink: Remove LINK specific messages from rtnetlink
[sliver-openvswitch.git] / datapath / datapath.h
index 07406da..e4c6534 100644 (file)
@@ -19,6 +19,8 @@
 #include <linux/seqlock.h>
 #include <linux/skbuff.h>
 #include <linux/version.h>
+
+#include "checksum.h"
 #include "flow.h"
 #include "dp_sysfs.h"
 
@@ -64,7 +66,7 @@ struct dp_stats_percpu {
  * @queues: %DP_N_QUEUES sets of queued packets for userspace to handle.
  * @waitqueue: Waitqueue, for waiting for new packets in @queues.
  * @n_flows: Number of flows currently in flow table.
- * @table: Current flow table (RCU protected).
+ * @table: Current flow table.
  * @n_ports: Number of ports currently in @ports.
  * @ports: Map from port number to &struct vport.  %ODPP_LOCAL port
  * always exists, other ports may be %NULL.
@@ -86,41 +88,36 @@ struct datapath {
        wait_queue_head_t waitqueue;
 
        /* Flow table. */
-       struct tbl *table;
+       struct tbl __rcu *table;
 
        /* Switch ports. */
        unsigned int n_ports;
-       struct vport *ports[DP_MAX_PORTS];
+       struct vport __rcu *ports[DP_MAX_PORTS];
        struct list_head port_list;
 
        /* Stats. */
-       struct dp_stats_percpu *stats_percpu;
+       struct dp_stats_percpu __percpu *stats_percpu;
 
        /* sFlow Sampling */
        unsigned int sflow_probability;
 };
 
-enum csum_type {
-       OVS_CSUM_NONE = 0,
-       OVS_CSUM_UNNECESSARY = 1,
-       OVS_CSUM_COMPLETE = 2,
-       OVS_CSUM_PARTIAL = 3,
-};
-
 /**
  * struct ovs_skb_cb - OVS data in skb CB
  * @vport: The datapath port on which the skb entered the switch.
  * @flow: The flow associated with this packet.  May be %NULL if no flow.
  * @ip_summed: Consistently stores L4 checksumming status across different
  * kernel versions.
- * @tun_id: ID (in network byte order) of the tunnel that encapsulated this
- * packet. It is 0 if the packet was not received on a tunnel.
+ * @tun_id: ID of the tunnel that encapsulated this packet.  It is 0 if the
+ * packet was not received on a tunnel.
  */
 struct ovs_skb_cb {
        struct vport            *vport;
        struct sw_flow          *flow;
+#ifdef NEED_CSUM_NORMALIZE
        enum csum_type          ip_summed;
-       __be32                  tun_id;
+#endif
+       __be64                  tun_id;
 };
 #define OVS_CB(skb) ((struct ovs_skb_cb *)(skb)->cb)
 
@@ -129,23 +126,11 @@ extern int (*dp_ioctl_hook)(struct net_device *dev, struct ifreq *rq, int cmd);
 
 void dp_process_received_packet(struct vport *, struct sk_buff *);
 int dp_detach_port(struct vport *);
-int dp_output_control(struct datapath *, struct sk_buff *, int, u32 arg);
+int dp_output_control(struct datapath *, struct sk_buff *, int, u64 arg);
 int dp_min_mtu(const struct datapath *dp);
 void set_internal_devs_mtu(const struct datapath *dp);
 
 struct datapath *get_dp(int dp_idx);
 const char *dp_name(const struct datapath *dp);
 
-#if defined(CONFIG_XEN) && defined(HAVE_PROTO_DATA_VALID)
-int vswitch_skb_checksum_setup(struct sk_buff *skb);
-#else
-static inline int vswitch_skb_checksum_setup(struct sk_buff *skb)
-{
-       return 0;
-}
-#endif
-
-void compute_ip_summed(struct sk_buff *skb, bool xmit);
-void forward_ip_summed(struct sk_buff *skb);
-
 #endif /* datapath.h */