+static inline bool virtio_net_hash_rss(const struct sk_buff *skb,
u32 types, const __be32 *key,
struct virtio_net_hash *hash)
Based on the guidelines, this function seems imperative rather than predicate and should return an error-code integer.
https://www.kernel.org/doc/html/latest/process/coding-style.html#function-re...
+{
- u16 report;
- struct virtio_net_toeplitz_state toeplitz_state = {
.key_buffer = be32_to_cpu(*key),
.key = key
- };
- struct flow_keys flow;
- if (!skb_flow_dissect_flow_keys(skb, &flow, 0))
return false;
- report = virtio_net_hash_report(types, flow.basic);
- switch (report) {
- case VIRTIO_NET_HASH_REPORT_IPv4:
virtio_net_toeplitz(&toeplitz_state,
(__be32 *)&flow.addrs.v4addrs,
sizeof(flow.addrs.v4addrs) / 4);
break;
- case VIRTIO_NET_HASH_REPORT_TCPv4:
virtio_net_toeplitz(&toeplitz_state,
(__be32 *)&flow.addrs.v4addrs,
sizeof(flow.addrs.v4addrs) / 4);
virtio_net_toeplitz(&toeplitz_state, &flow.ports.ports,
1);
break;
- case VIRTIO_NET_HASH_REPORT_UDPv4:
virtio_net_toeplitz(&toeplitz_state,
(__be32 *)&flow.addrs.v4addrs,
sizeof(flow.addrs.v4addrs) / 4);
virtio_net_toeplitz(&toeplitz_state, &flow.ports.ports,
1);
break;
- case VIRTIO_NET_HASH_REPORT_IPv6:
virtio_net_toeplitz(&toeplitz_state,
(__be32 *)&flow.addrs.v6addrs,
sizeof(flow.addrs.v6addrs) / 4);
break;
- case VIRTIO_NET_HASH_REPORT_TCPv6:
virtio_net_toeplitz(&toeplitz_state,
(__be32 *)&flow.addrs.v6addrs,
sizeof(flow.addrs.v6addrs) / 4);
virtio_net_toeplitz(&toeplitz_state, &flow.ports.ports,
1);
break;
- case VIRTIO_NET_HASH_REPORT_UDPv6:
virtio_net_toeplitz(&toeplitz_state,
(__be32 *)&flow.addrs.v6addrs,
sizeof(flow.addrs.v6addrs) / 4);
virtio_net_toeplitz(&toeplitz_state, &flow.ports.ports,
1);
break;
- default:
return false;
- }
- hash->value = toeplitz_state.hash;
- hash->report = report;
- return true;
+}