|
@@ -360,6 +360,74 @@ u32 xenvif_set_hash_mapping(struct xenvif *vif, u32 gref, u32 len,
|
|
return XEN_NETIF_CTRL_STATUS_SUCCESS;
|
|
return XEN_NETIF_CTRL_STATUS_SUCCESS;
|
|
}
|
|
}
|
|
|
|
|
|
|
|
+#ifdef CONFIG_DEBUG_FS
|
|
|
|
+void xenvif_dump_hash_info(struct xenvif *vif, struct seq_file *m)
|
|
|
|
+{
|
|
|
|
+ unsigned int i;
|
|
|
|
+
|
|
|
|
+ switch (vif->hash.alg) {
|
|
|
|
+ case XEN_NETIF_CTRL_HASH_ALGORITHM_TOEPLITZ:
|
|
|
|
+ seq_puts(m, "Hash Algorithm: TOEPLITZ\n");
|
|
|
|
+ break;
|
|
|
|
+
|
|
|
|
+ case XEN_NETIF_CTRL_HASH_ALGORITHM_NONE:
|
|
|
|
+ seq_puts(m, "Hash Algorithm: NONE\n");
|
|
|
|
+ /* FALLTHRU */
|
|
|
|
+ default:
|
|
|
|
+ return;
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ if (vif->hash.flags) {
|
|
|
|
+ seq_puts(m, "\nHash Flags:\n");
|
|
|
|
+
|
|
|
|
+ if (vif->hash.flags & XEN_NETIF_CTRL_HASH_TYPE_IPV4)
|
|
|
|
+ seq_puts(m, "- IPv4\n");
|
|
|
|
+ if (vif->hash.flags & XEN_NETIF_CTRL_HASH_TYPE_IPV4_TCP)
|
|
|
|
+ seq_puts(m, "- IPv4 + TCP\n");
|
|
|
|
+ if (vif->hash.flags & XEN_NETIF_CTRL_HASH_TYPE_IPV6)
|
|
|
|
+ seq_puts(m, "- IPv6\n");
|
|
|
|
+ if (vif->hash.flags & XEN_NETIF_CTRL_HASH_TYPE_IPV6_TCP)
|
|
|
|
+ seq_puts(m, "- IPv6 + TCP\n");
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ seq_puts(m, "\nHash Key:\n");
|
|
|
|
+
|
|
|
|
+ for (i = 0; i < XEN_NETBK_MAX_HASH_KEY_SIZE; ) {
|
|
|
|
+ unsigned int j, n;
|
|
|
|
+
|
|
|
|
+ n = 8;
|
|
|
|
+ if (i + n >= XEN_NETBK_MAX_HASH_KEY_SIZE)
|
|
|
|
+ n = XEN_NETBK_MAX_HASH_KEY_SIZE - i;
|
|
|
|
+
|
|
|
|
+ seq_printf(m, "[%2u - %2u]: ", i, i + n - 1);
|
|
|
|
+
|
|
|
|
+ for (j = 0; j < n; j++, i++)
|
|
|
|
+ seq_printf(m, "%02x ", vif->hash.key[i]);
|
|
|
|
+
|
|
|
|
+ seq_puts(m, "\n");
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ if (vif->hash.size != 0) {
|
|
|
|
+ seq_puts(m, "\nHash Mapping:\n");
|
|
|
|
+
|
|
|
|
+ for (i = 0; i < vif->hash.size; ) {
|
|
|
|
+ unsigned int j, n;
|
|
|
|
+
|
|
|
|
+ n = 8;
|
|
|
|
+ if (i + n >= vif->hash.size)
|
|
|
|
+ n = vif->hash.size - i;
|
|
|
|
+
|
|
|
|
+ seq_printf(m, "[%4u - %4u]: ", i, i + n - 1);
|
|
|
|
+
|
|
|
|
+ for (j = 0; j < n; j++, i++)
|
|
|
|
+ seq_printf(m, "%4u ", vif->hash.mapping[i]);
|
|
|
|
+
|
|
|
|
+ seq_puts(m, "\n");
|
|
|
|
+ }
|
|
|
|
+ }
|
|
|
|
+}
|
|
|
|
+#endif /* CONFIG_DEBUG_FS */
|
|
|
|
+
|
|
void xenvif_init_hash(struct xenvif *vif)
|
|
void xenvif_init_hash(struct xenvif *vif)
|
|
{
|
|
{
|
|
if (xenvif_hash_cache_size == 0)
|
|
if (xenvif_hash_cache_size == 0)
|