-/* Parses the Ethernet frame in 'skb', which was received on 'in_port',
- * and initializes 'key' to match. Returns 1 if 'skb' contains an IP
- * fragment, 0 otherwise. */
-int flow_extract(struct sk_buff *skb, u16 in_port, struct odp_flow_key *key)
+/**
+ * flow_extract - extracts a flow key from an Ethernet frame.
+ * @skb: sk_buff that contains the frame, with skb->data pointing to the
+ * Ethernet header
+ * @in_port: port number on which @skb was received.
+ * @key: output flow key
+ * @is_frag: set to 1 if @skb contains an IPv4 fragment, or to 0 if @skb does
+ * not contain an IPv4 packet or if it is not a fragment.
+ *
+ * The caller must ensure that skb->len >= ETH_HLEN.
+ *
+ * Returns 0 if successful, otherwise a negative errno value.
+ *
+ * Initializes @skb header pointers as follows:
+ *
+ * - skb->mac_header: the Ethernet header.
+ *
+ * - skb->network_header: just past the Ethernet header, or just past the
+ * VLAN header, to the first byte of the Ethernet payload.
+ *
+ * - skb->transport_header: If key->dl_type is ETH_P_IP on output, then just
+ * past the IPv4 header, if one is present and of a correct length,
+ * otherwise the same as skb->network_header. For other key->dl_type
+ * values it is left untouched.
+ */
+int flow_extract(struct sk_buff *skb, u16 in_port, struct odp_flow_key *key,
+ bool *is_frag)