X-Git-Url: https://pintos-os.org/cgi-bin/gitweb.cgi?a=blobdiff_plain;f=datapath%2Ftunnel.h;h=6865ae61193b3088dae635ce3e20584d7d536202;hb=da327b18bdbd36ad3dc465e07f6700795c684b14;hp=9211740ab5106669164dad5f74e19487cb29669e;hpb=c2310ade7b550da9033963103ff1e318f34e1556;p=openvswitch diff --git a/datapath/tunnel.h b/datapath/tunnel.h index 9211740a..6865ae61 100644 --- a/datapath/tunnel.h +++ b/datapath/tunnel.h @@ -1,9 +1,19 @@ /* - * Copyright (c) 2010, 2011 Nicira Networks. - * Distributed under the terms of the GNU GPL version 2. + * Copyright (c) 2007-2011 Nicira Networks. * - * Significant portions of this file may be copied from parts of the Linux - * kernel, by Linus Torvalds and others. + * 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. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA + * 02110-1301, USA */ #ifndef TUNNEL_H @@ -35,8 +45,10 @@ #define TNL_T_KEY_MATCH (1 << 11) /* Private flags not exposed to userspace in this form. */ -#define TNL_F_IN_KEY_MATCH (1 << 16) /* Store the key in tun_id to match in flow table. */ -#define TNL_F_OUT_KEY_ACTION (1 << 17) /* Get the key from a SET_TUNNEL action. */ +#define TNL_F_IN_KEY_MATCH (1 << 16) /* Store the key in tun_id to + * match in flow table. */ +#define TNL_F_OUT_KEY_ACTION (1 << 17) /* Get the key from a SET_TUNNEL + * action. */ /* All public tunnel flags. */ #define TNL_F_PUBLIC (TNL_F_CSUM | TNL_F_TOS_INHERIT | TNL_F_TTL_INHERIT | \ @@ -57,7 +69,7 @@ struct port_lookup_key { u32 tunnel_type; }; -#define PORT_KEY_LEN (offsetof(struct port_lookup_key, tunnel_type) + \ +#define PORT_KEY_LEN (offsetof(struct port_lookup_key, tunnel_type) + \ FIELD_SIZEOF(struct port_lookup_key, tunnel_type)) /** @@ -89,6 +101,9 @@ struct tnl_mutable_config { u32 flags; u8 tos; u8 ttl; + + /* Multicast configuration. */ + int mlink; }; struct tnl_ops { @@ -150,7 +165,8 @@ struct tnl_cache { int len; /* Length of data to be memcpy'd from cache. */ int hh_len; /* Hardware hdr length, cached from hh_cache. */ - /* Sequence number of mutable->seq from which this cache was generated. */ + /* Sequence number of mutable->seq from which this cache was + * generated. */ unsigned mutable_seq; #ifdef HAVE_HH_SEQ @@ -213,7 +229,7 @@ struct tnl_vport { atomic_t frag_id; spinlock_t cache_lock; - struct tnl_cache __rcu *cache; /* Protected by RCU/cache_lock. */ + struct tnl_cache __rcu *cache; /* Protected by RCU/cache_lock. */ #ifdef NEED_CACHE_TIMEOUT /* @@ -226,33 +242,32 @@ struct tnl_vport { #endif }; -struct vport *tnl_create(const struct vport_parms *, const struct vport_ops *, - const struct tnl_ops *); -void tnl_destroy(struct vport *); - -int tnl_set_options(struct vport *, struct nlattr *); -int tnl_get_options(const struct vport *, struct sk_buff *); - -int tnl_set_addr(struct vport *vport, const unsigned char *addr); -const char *tnl_get_name(const struct vport *vport); -const unsigned char *tnl_get_addr(const struct vport *vport); -int tnl_send(struct vport *vport, struct sk_buff *skb); -void tnl_rcv(struct vport *vport, struct sk_buff *skb, u8 tos); - -struct vport *tnl_find_port(__be32 saddr, __be32 daddr, __be64 key, - int tunnel_type, - const struct tnl_mutable_config **mutable); -bool tnl_frag_needed(struct vport *vport, - const struct tnl_mutable_config *mutable, - struct sk_buff *skb, unsigned int mtu, __be64 flow_key); -void tnl_free_linked_skbs(struct sk_buff *skb); - -int tnl_init(void); -void tnl_exit(void); +struct vport *ovs_tnl_create(const struct vport_parms *, const struct vport_ops *, + const struct tnl_ops *); +void ovs_tnl_destroy(struct vport *); + +int ovs_tnl_set_options(struct vport *, struct nlattr *); +int ovs_tnl_get_options(const struct vport *, struct sk_buff *); + +int ovs_tnl_set_addr(struct vport *vport, const unsigned char *addr); +const char *ovs_tnl_get_name(const struct vport *vport); +const unsigned char *ovs_tnl_get_addr(const struct vport *vport); +int ovs_tnl_send(struct vport *vport, struct sk_buff *skb); +void ovs_tnl_rcv(struct vport *vport, struct sk_buff *skb, u8 tos); + +struct vport *ovs_tnl_find_port(__be32 saddr, __be32 daddr, __be64 key, + int tunnel_type, + const struct tnl_mutable_config **mutable); +bool ovs_tnl_frag_needed(struct vport *vport, + const struct tnl_mutable_config *mutable, + struct sk_buff *skb, unsigned int mtu, __be64 flow_key); +void ovs_tnl_free_linked_skbs(struct sk_buff *skb); + +int ovs_tnl_init(void); +void ovs_tnl_exit(void); static inline struct tnl_vport *tnl_vport_priv(const struct vport *vport) { return vport_priv(vport); } - #endif /* tunnel.h */