On Wed, Aug 6, 2014 at 1:07 PM, Andy Zhou <az...@nicira.com> wrote: > This patch does not apply for me. Would you please rebase and repost? > It applies fine to me. It does depends on earlier patches, have you applied those?
> On Tue, Aug 5, 2014 at 4:46 PM, Pravin B Shelar <pshe...@nicira.com> wrote: >> Currently tun_info is used for passing tunnel information >> on ingress and egress path, this cause confusion. Following >> patch removes its use on ingress path make it egress only parameter. >> >> Signed-off-by: Pravin B Shelar <pshe...@nicira.com> >> --- >> datapath/actions.c | 2 +- >> datapath/datapath.c | 23 +++-------------------- >> datapath/datapath.h | 8 +++----- >> datapath/flow.c | 8 ++++---- >> datapath/flow.h | 3 ++- >> datapath/vport.c | 11 +++++++++-- >> 6 files changed, 22 insertions(+), 33 deletions(-) >> >> diff --git a/datapath/actions.c b/datapath/actions.c >> index 6de65d3..62d3ede 100644 >> --- a/datapath/actions.c >> +++ b/datapath/actions.c >> @@ -659,7 +659,7 @@ static int execute_recirc(struct datapath *dp, struct >> sk_buff *skb, >> } >> >> >> - ovs_dp_process_packet_with_key(skb, &recirc_key, true); >> + ovs_dp_process_packet(skb, true); >> >> return 0; >> } >> diff --git a/datapath/datapath.c b/datapath/datapath.c >> index 91c65a0..b662dd2 100644 >> --- a/datapath/datapath.c >> +++ b/datapath/datapath.c >> @@ -250,11 +250,11 @@ void ovs_dp_detach_port(struct vport *p) >> ovs_vport_del(p); >> } >> >> -void ovs_dp_process_packet_with_key(struct sk_buff *skb, >> - struct sw_flow_key *pkt_key, >> - bool recirc) >> +/* Must be called with rcu_read_lock. */ >> +void ovs_dp_process_packet(struct sk_buff *skb, bool recirc) >> { >> const struct vport *p = OVS_CB(skb)->input_vport; >> + struct sw_flow_key *pkt_key = OVS_CB(skb)->pkt_key; >> struct datapath *dp = p->dp; >> struct sw_flow *flow; >> struct dp_stats_percpu *stats; >> @@ -262,7 +262,6 @@ void ovs_dp_process_packet_with_key(struct sk_buff *skb, >> u32 n_mask_hit; >> >> stats = this_cpu_ptr(dp->stats_percpu); >> - OVS_CB(skb)->pkt_key = pkt_key; >> >> /* Look up flow. */ >> flow = ovs_flow_tbl_lookup_stats(&dp->table, pkt_key, >> skb_get_hash(skb), >> @@ -293,22 +292,6 @@ out: >> u64_stats_update_end(&stats->sync); >> } >> >> -/* Must be called with rcu_read_lock. */ >> -void ovs_dp_process_received_packet(struct sk_buff *skb) >> -{ >> - int error; >> - struct sw_flow_key key; >> - >> - /* Extract flow from 'skb' into 'key'. */ >> - error = ovs_flow_key_extract(skb, &key); >> - if (unlikely(error)) { >> - kfree_skb(skb); >> - return; >> - } >> - >> - ovs_dp_process_packet_with_key(skb, &key, false); >> -} >> - >> int ovs_dp_upcall(struct datapath *dp, struct sk_buff *skb, >> const struct dp_upcall_info *upcall_info) >> { >> diff --git a/datapath/datapath.h b/datapath/datapath.h >> index fb37fa1..684ac51 100644 >> --- a/datapath/datapath.h >> +++ b/datapath/datapath.h >> @@ -98,8 +98,8 @@ struct datapath { >> * struct ovs_skb_cb - OVS data in skb CB >> * @flow: The flow associated with this packet. May be %NULL if no flow. >> * @pkt_key: The flow information extracted from the packet. Must be >> nonnull. >> - * @tun_info: Tunnel information about this packet. NULL if the packet >> - * is not being tunneled. >> + * @tun_info: Tunnel information about this packet on egress path. NULL if >> the >> + * packet is not being tunneled. >> * @input_vport: The original vport packet came in on. This value is cached >> * when a packet is received by OVS. >> */ >> @@ -188,9 +188,7 @@ extern struct notifier_block ovs_dp_device_notifier; >> extern struct genl_family dp_vport_genl_family; >> extern struct genl_multicast_group ovs_dp_vport_multicast_group; >> >> -void ovs_dp_process_received_packet(struct sk_buff *); >> -void ovs_dp_process_packet_with_key(struct sk_buff *, >> - struct sw_flow_key *pkt_key, bool >> recirc); >> +void ovs_dp_process_packet(struct sk_buff *, bool recirc); >> void ovs_dp_detach_port(struct vport *); >> int ovs_dp_upcall(struct datapath *, struct sk_buff *, >> const struct dp_upcall_info *); >> diff --git a/datapath/flow.c b/datapath/flow.c >> index 1feca85..00819e7 100644 >> --- a/datapath/flow.c >> +++ b/datapath/flow.c >> @@ -669,16 +669,16 @@ static int key_extract(struct sk_buff *skb, struct >> sw_flow_key *key) >> } >> } >> >> + OVS_CB(skb)->pkt_key = key; >> return 0; >> } >> >> -int ovs_flow_key_extract(struct sk_buff *skb, struct sw_flow_key *key) >> +int ovs_flow_key_extract(struct ovs_tunnel_info *tun_info, struct sk_buff >> *skb, >> + struct sw_flow_key *key) >> { >> /* Extract metadata from packet. */ >> >> - if (OVS_CB(skb)->tun_info) { >> - struct ovs_tunnel_info *tun_info = OVS_CB(skb)->tun_info; >> - >> + if (tun_info) { >> memcpy(&key->tun_key, &tun_info->tunnel, >> sizeof(key->tun_key)); >> >> BUILD_BUG_ON(((1 << (sizeof(tun_info->options_len) * 8)) - >> 1) > >> diff --git a/datapath/flow.h b/datapath/flow.h >> index ee63b8b..30a3c55 100644 >> --- a/datapath/flow.h >> +++ b/datapath/flow.h >> @@ -222,7 +222,8 @@ void ovs_flow_stats_get(const struct sw_flow *, struct >> ovs_flow_stats *, >> void ovs_flow_stats_clear(struct sw_flow *); >> u64 ovs_flow_used_time(unsigned long flow_jiffies); >> >> -int ovs_flow_key_extract(struct sk_buff *skb, struct sw_flow_key *key); >> +int ovs_flow_key_extract(struct ovs_tunnel_info *tun_info, >> + struct sk_buff *skb, struct sw_flow_key *key); >> /* Extract key from packet coming from userspace. */ >> int ovs_flow_key_extract_userspace(const struct nlattr *attr, >> struct sk_buff *skb, >> diff --git a/datapath/vport.c b/datapath/vport.c >> index 5d250aa..2b218e8 100644 >> --- a/datapath/vport.c >> +++ b/datapath/vport.c >> @@ -475,6 +475,8 @@ void ovs_vport_receive(struct vport *vport, struct >> sk_buff *skb, >> struct ovs_tunnel_info *tun_info) >> { >> struct pcpu_sw_netstats *stats; >> + struct sw_flow_key key; >> + int error; >> >> stats = this_cpu_ptr(vport->percpu_stats); >> u64_stats_update_begin(&stats->syncp); >> @@ -483,9 +485,14 @@ void ovs_vport_receive(struct vport *vport, struct >> sk_buff *skb, >> u64_stats_update_end(&stats->syncp); >> >> ovs_skb_init_inner_protocol(skb); >> - OVS_CB(skb)->tun_info = tun_info; >> OVS_CB(skb)->input_vport = vport; >> - ovs_dp_process_received_packet(skb); >> + error = ovs_flow_key_extract(tun_info, skb, &key); >> + if (unlikely(error)) { >> + kfree_skb(skb); >> + return; >> + } >> + >> + ovs_dp_process_packet(skb, false); >> } >> >> /** >> -- >> 1.7.1 >> >> _______________________________________________ >> dev mailing list >> dev@openvswitch.org >> http://openvswitch.org/mailman/listinfo/dev _______________________________________________ dev mailing list dev@openvswitch.org http://openvswitch.org/mailman/listinfo/dev