Thread (3 messages) flat view 3 messages, 3 authors, 2017-11-06

Re: [PATCH net-next v15] openvswitch: enable NSH support

From: Pravin Shelar <hidden>
Date: 2017-11-06 12:09:55

On Sun, Nov 5, 2017 at 8:19 PM, Yang, Yi [off-list ref] wrote:
On Sat, Nov 04, 2017 at 10:29:46PM +0800, Pravin Shelar wrote:
quoted
On Tue, Oct 31, 2017 at 9:03 PM, Yi Yang [off-list ref] wrote:
quoted
+int nsh_push(struct sk_buff *skb, const struct nshhdr *pushed_nh)
+{
+       struct nshhdr *nh;
+       size_t length = nsh_hdr_len(pushed_nh);
+       u8 next_proto;
+
+       if (skb->mac_len) {
+               next_proto = TUN_P_ETHERNET;
+       } else {
+               next_proto = tun_p_from_eth_p(skb->protocol);
+               if (!next_proto)
+                       return -EAFNOSUPPORT;
check for supported protocols can be moved to flow install validation
in __ovs_nla_copy_actions().
quoted
+       }
+
+       /* Add the NSH header */
+       if (skb_cow_head(skb, length) < 0)
+               return -ENOMEM;
+
+       skb_push(skb, length);
+       nh = (struct nshhdr *)(skb->data);
+       memcpy(nh, pushed_nh, length);
+       nh->np = next_proto;
+
+       skb->protocol = htons(ETH_P_NSH);
+       skb_reset_mac_header(skb);
+       skb_reset_network_header(skb);
+       skb_reset_mac_len(skb);
+
+       return 0;
+}
+EXPORT_SYMBOL_GPL(nsh_push);
+
+int nsh_pop(struct sk_buff *skb)
+{
+       struct nshhdr *nh;
+       size_t length;
+       __be16 inner_proto;
+
+       if (!pskb_may_pull(skb, NSH_BASE_HDR_LEN))
+               return -ENOMEM;
+       nh = (struct nshhdr *)(skb->data);
+       length = nsh_hdr_len(nh);
+       inner_proto = tun_p_to_eth_p(nh->np);
same as above, this check can be moved to flow install __ovs_nla_copy_actions().
Pravin, these two functions are not only for OVS, you can see it is
net/nsh/nsh.c, Jiri and Eric mentioned they also could be used by TC.
I think it can be easily done by other caller of these function, or
you can refactor the APIs itself.
I understand you expect some checks should be moved to slow path, but
for there two cases, we can't remove them into __ovs_nla_copy_actions.
It is not just about optimization, but having these check in flow
install allows OVS userspace to probe level of  NSH support in
datapath.
Keyboard shortcuts
hback out one level
jnext message in thread
kprevious message in thread
ldrill in
Escclose help / fold thread tree
?toggle this help