* [RFC] net/tap: remove kernel side RSS via BPF
@ 2023-12-15 16:31 Stephen Hemminger
0 siblings, 0 replies; only message in thread
From: Stephen Hemminger @ 2023-12-15 16:31 UTC (permalink / raw)
To: dev; +Cc: Stephen Hemminger
The support of BPF in TAP device was problematic since the
API to BPF in kernel is not stable and keeps changing.
Since the RTE_FLOW_ACTION_TYPE_RSS is the only part using this
remove support for kernel side flow remapping.
Signed-off-by: Stephen Hemminger <stephen@networkplumber.org>
---
doc/guides/nics/tap.rst | 74 --
drivers/net/tap/bpf/Makefile | 19 -
drivers/net/tap/bpf/bpf_api.h | 276 ----
drivers/net/tap/bpf/bpf_elf.h | 53 -
| 86 --
drivers/net/tap/bpf/tap_bpf_program.c | 255 ----
drivers/net/tap/meson.build | 5 -
drivers/net/tap/rte_eth_tap.h | 5 +-
drivers/net/tap/tap_bpf.h | 121 --
drivers/net/tap/tap_bpf_api.c | 190 ---
drivers/net/tap/tap_bpf_insns.h | 1743 -------------------------
drivers/net/tap/tap_flow.c | 496 +------
drivers/net/tap/tap_flow.h | 12 -
drivers/net/tap/tap_tcmsgs.h | 3 -
14 files changed, 4 insertions(+), 3334 deletions(-)
delete mode 100644 drivers/net/tap/bpf/Makefile
delete mode 100644 drivers/net/tap/bpf/bpf_api.h
delete mode 100644 drivers/net/tap/bpf/bpf_elf.h
delete mode 100644 drivers/net/tap/bpf/bpf_extract.py
delete mode 100644 drivers/net/tap/bpf/tap_bpf_program.c
delete mode 100644 drivers/net/tap/tap_bpf.h
delete mode 100644 drivers/net/tap/tap_bpf_api.c
delete mode 100644 drivers/net/tap/tap_bpf_insns.h
diff --git a/doc/guides/nics/tap.rst b/doc/guides/nics/tap.rst
index d4f45c02a1e5..5779f5d08e31 100644
--- a/doc/guides/nics/tap.rst
+++ b/doc/guides/nics/tap.rst
@@ -123,7 +123,6 @@ Supported actions:
- DROP
- QUEUE
- PASSTHRU
-- RSS (requires kernel 4.9)
It is generally not possible to provide a "last" item. However, if the "last"
item, once masked, is identical to the masked spec, then it is supported.
@@ -153,10 +152,6 @@ Drop UDP packets in vlan 3::
testpmd> flow create 0 priority 3 ingress pattern eth / vlan vid is 3 / \
ipv4 proto is 17 / end actions drop / end
-Distribute IPv4 TCP packets using RSS to a given MAC address over queues 0-3::
-
- testpmd> flow create 0 priority 4 ingress pattern eth dst is 0a:0b:0c:0d:0e:0f \
- / ipv4 / tcp / end actions rss queues 0 1 2 3 end / end
Multi-process sharing
---------------------
@@ -227,80 +222,11 @@ size of the packets after you stop the traffic. Use pktgen ``help``
command to see a list of all commands. You can also use the ``-f`` option to
load commands at startup in command line or Lua script in pktgen.
-RSS specifics
--------------
-Packet distribution in TAP is done by the kernel which has a default
-distribution. This feature is adding RSS distribution based on eBPF code.
-The default eBPF code calculates RSS hash based on Toeplitz algorithm for
-a fixed RSS key. It is calculated on fixed packet offsets. For IPv4 and IPv6 it
-is calculated over src/dst addresses (8 or 32 bytes for IPv4 or IPv6
-respectively) and src/dst TCP/UDP ports (4 bytes).
-
-The RSS algorithm is written in file ``tap_bpf_program.c`` which
-does not take part in TAP PMD compilation. Instead this file is compiled
-in advance to eBPF object file. The eBPF object file is then parsed and
-translated into eBPF byte code in the format of C arrays of eBPF
-instructions. The C array of eBPF instructions is part of TAP PMD tree and
-is taking part in TAP PMD compilation. At run time the C arrays are uploaded to
-the kernel via BPF system calls and the RSS hash is calculated by the
-kernel.
-
-It is possible to support different RSS hash algorithms by updating file
-``tap_bpf_program.c`` In order to add a new RSS hash algorithm follow these
-steps:
-
-#. Write the new RSS implementation in file ``tap_bpf_program.c``
-
- BPF programs which are uploaded to the kernel correspond to
- C functions under different ELF sections.
-
-#. Install ``LLVM`` library and ``clang`` compiler versions 3.7 and above
-
-#. Use make to compile `tap_bpf_program.c`` via ``LLVM`` into an object file
- and extract the resulting instructions into ``tap_bpf_insn.h``::
-
- cd bpf; make
-
-#. Recompile the TAP PMD.
-
-The C arrays are uploaded to the kernel using BPF system calls.
-
-``tc`` (traffic control) is a well known user space utility program used to
-configure the Linux kernel packet scheduler. It is usually packaged as
-part of the ``iproute2`` package.
-Since commit 11c39b5e9 ("tc: add eBPF support to f_bpf") ``tc`` can be used
-to uploads eBPF code to the kernel and can be patched in order to print the
-C arrays of eBPF instructions just before calling the BPF system call.
-Please refer to ``iproute2`` package file ``lib/bpf.c`` function
-``bpf_prog_load()``.
-
-An example utility for eBPF instruction generation in the format of C arrays will
-be added in next releases
-
-TAP reports on supported RSS functions as part of dev_infos_get callback:
-``RTE_ETH_RSS_IP``, ``RTE_ETH_RSS_UDP`` and ``RTE_ETH_RSS_TCP``.
-**Known limitation:** TAP supports all of the above hash functions together
-and not in partial combinations.
Systems supporting flow API
---------------------------
- "tc flower" classifier requires linux kernel above 4.2
-- eBPF/RSS requires linux kernel above 4.9
-
-+--------------------+-----------------------+
-| RH7.3 | No flow rule support |
-+--------------------+-----------------------+
-| RH7.4 | No RSS action support |
-+--------------------+-----------------------+
-| RH7.5 | No RSS action support |
-+--------------------+-----------------------+
-| SLES 15, | No limitation |
-| kernel 4.12 | |
-+--------------------+-----------------------+
-| Azure Ubuntu 16.04,| No limitation |
-| kernel 4.13 | |
-+--------------------+-----------------------+
Limitations
-----------
diff --git a/drivers/net/tap/bpf/Makefile b/drivers/net/tap/bpf/Makefile
deleted file mode 100644
index 9efeeb1bc704..000000000000
--- a/drivers/net/tap/bpf/Makefile
+++ /dev/null
@@ -1,19 +0,0 @@
-# SPDX-License-Identifier: BSD-3-Clause
-# This file is not built as part of normal DPDK build.
-# It is used to generate the eBPF code for TAP RSS.
-
-CLANG=clang
-CLANG_OPTS=-O2
-TARGET=../tap_bpf_insns.h
-
-all: $(TARGET)
-
-clean:
- rm tap_bpf_program.o $(TARGET)
-
-tap_bpf_program.o: tap_bpf_program.c
- $(CLANG) $(CLANG_OPTS) -emit-llvm -c $< -o - | \
- llc -march=bpf -filetype=obj -o $@
-
-$(TARGET): tap_bpf_program.o
- python3 bpf_extract.py -stap_bpf_program.c -o $@ $<
diff --git a/drivers/net/tap/bpf/bpf_api.h b/drivers/net/tap/bpf/bpf_api.h
deleted file mode 100644
index 2638a8a4ac9a..000000000000
--- a/drivers/net/tap/bpf/bpf_api.h
+++ /dev/null
@@ -1,276 +0,0 @@
-/* SPDX-License-Identifier: GPL-2.0 or BSD-3-Clause */
-
-#ifndef __BPF_API__
-#define __BPF_API__
-
-/* Note:
- *
- * This file can be included into eBPF kernel programs. It contains
- * a couple of useful helper functions, map/section ABI (bpf_elf.h),
- * misc macros and some eBPF specific LLVM built-ins.
- */
-
-#include <stdint.h>
-
-#include <linux/pkt_cls.h>
-#include <linux/bpf.h>
-#include <linux/filter.h>
-
-#include <asm/byteorder.h>
-
-#include "bpf_elf.h"
-
-/** libbpf pin type. */
-enum libbpf_pin_type {
- LIBBPF_PIN_NONE,
- /* PIN_BY_NAME: pin maps by name (in /sys/fs/bpf by default) */
- LIBBPF_PIN_BY_NAME,
-};
-
-/** Type helper macros. */
-
-#define __uint(name, val) int (*name)[val]
-#define __type(name, val) typeof(val) *name
-#define __array(name, val) typeof(val) *name[]
-
-/** Misc macros. */
-
-#ifndef __stringify
-# define __stringify(X) #X
-#endif
-
-#ifndef __maybe_unused
-# define __maybe_unused __attribute__((__unused__))
-#endif
-
-#ifndef offsetof
-# define offsetof(TYPE, MEMBER) __builtin_offsetof(TYPE, MEMBER)
-#endif
-
-#ifndef likely
-# define likely(X) __builtin_expect(!!(X), 1)
-#endif
-
-#ifndef unlikely
-# define unlikely(X) __builtin_expect(!!(X), 0)
-#endif
-
-#ifndef htons
-# define htons(X) __constant_htons((X))
-#endif
-
-#ifndef ntohs
-# define ntohs(X) __constant_ntohs((X))
-#endif
-
-#ifndef htonl
-# define htonl(X) __constant_htonl((X))
-#endif
-
-#ifndef ntohl
-# define ntohl(X) __constant_ntohl((X))
-#endif
-
-#ifndef __inline__
-# define __inline__ __attribute__((always_inline))
-#endif
-
-/** Section helper macros. */
-
-#ifndef __section
-# define __section(NAME) \
- __attribute__((section(NAME), used))
-#endif
-
-#ifndef __section_tail
-# define __section_tail(ID, KEY) \
- __section(__stringify(ID) "/" __stringify(KEY))
-#endif
-
-#ifndef __section_xdp_entry
-# define __section_xdp_entry \
- __section(ELF_SECTION_PROG)
-#endif
-
-#ifndef __section_cls_entry
-# define __section_cls_entry \
- __section(ELF_SECTION_CLASSIFIER)
-#endif
-
-#ifndef __section_act_entry
-# define __section_act_entry \
- __section(ELF_SECTION_ACTION)
-#endif
-
-#ifndef __section_lwt_entry
-# define __section_lwt_entry \
- __section(ELF_SECTION_PROG)
-#endif
-
-#ifndef __section_license
-# define __section_license \
- __section(ELF_SECTION_LICENSE)
-#endif
-
-#ifndef __section_maps
-# define __section_maps \
- __section(ELF_SECTION_MAPS)
-#endif
-
-/** Declaration helper macros. */
-
-#ifndef BPF_LICENSE
-# define BPF_LICENSE(NAME) \
- char ____license[] __section_license = NAME
-#endif
-
-/** Classifier helper */
-
-#ifndef BPF_H_DEFAULT
-# define BPF_H_DEFAULT -1
-#endif
-
-/** BPF helper functions for tc. Individual flags are in linux/bpf.h */
-
-#ifndef __BPF_FUNC
-# define __BPF_FUNC(NAME, ...) \
- (* NAME)(__VA_ARGS__) __maybe_unused
-#endif
-
-#ifndef BPF_FUNC
-# define BPF_FUNC(NAME, ...) \
- __BPF_FUNC(NAME, __VA_ARGS__) = (void *) BPF_FUNC_##NAME
-#endif
-
-/* Map access/manipulation */
-static void *BPF_FUNC(map_lookup_elem, void *map, const void *key);
-static int BPF_FUNC(map_update_elem, void *map, const void *key,
- const void *value, uint32_t flags);
-static int BPF_FUNC(map_delete_elem, void *map, const void *key);
-
-/* Time access */
-static uint64_t BPF_FUNC(ktime_get_ns);
-
-/* Debugging */
-
-/* FIXME: __attribute__ ((format(printf, 1, 3))) not possible unless
- * llvm bug https://llvm.org/bugs/show_bug.cgi?id=26243 gets resolved.
- * It would require ____fmt to be made const, which generates a reloc
- * entry (non-map).
- */
-static void BPF_FUNC(trace_printk, const char *fmt, int fmt_size, ...);
-
-#ifndef printt
-# define printt(fmt, ...) \
- ({ \
- char ____fmt[] = fmt; \
- trace_printk(____fmt, sizeof(____fmt), ##__VA_ARGS__); \
- })
-#endif
-
-/* Random numbers */
-static uint32_t BPF_FUNC(get_prandom_u32);
-
-/* Tail calls */
-static void BPF_FUNC(tail_call, struct __sk_buff *skb, void *map,
- uint32_t index);
-
-/* System helpers */
-static uint32_t BPF_FUNC(get_smp_processor_id);
-static uint32_t BPF_FUNC(get_numa_node_id);
-
-/* Packet misc meta data */
-static uint32_t BPF_FUNC(get_cgroup_classid, struct __sk_buff *skb);
-static int BPF_FUNC(skb_under_cgroup, void *map, uint32_t index);
-
-static uint32_t BPF_FUNC(get_route_realm, struct __sk_buff *skb);
-static uint32_t BPF_FUNC(get_hash_recalc, struct __sk_buff *skb);
-static uint32_t BPF_FUNC(set_hash_invalid, struct __sk_buff *skb);
-
-/* Packet redirection */
-static int BPF_FUNC(redirect, int ifindex, uint32_t flags);
-static int BPF_FUNC(clone_redirect, struct __sk_buff *skb, int ifindex,
- uint32_t flags);
-
-/* Packet manipulation */
-static int BPF_FUNC(skb_load_bytes, struct __sk_buff *skb, uint32_t off,
- void *to, uint32_t len);
-static int BPF_FUNC(skb_store_bytes, struct __sk_buff *skb, uint32_t off,
- const void *from, uint32_t len, uint32_t flags);
-
-static int BPF_FUNC(l3_csum_replace, struct __sk_buff *skb, uint32_t off,
- uint32_t from, uint32_t to, uint32_t flags);
-static int BPF_FUNC(l4_csum_replace, struct __sk_buff *skb, uint32_t off,
- uint32_t from, uint32_t to, uint32_t flags);
-static int BPF_FUNC(csum_diff, const void *from, uint32_t from_size,
- const void *to, uint32_t to_size, uint32_t seed);
-static int BPF_FUNC(csum_update, struct __sk_buff *skb, uint32_t wsum);
-
-static int BPF_FUNC(skb_change_type, struct __sk_buff *skb, uint32_t type);
-static int BPF_FUNC(skb_change_proto, struct __sk_buff *skb, uint32_t proto,
- uint32_t flags);
-static int BPF_FUNC(skb_change_tail, struct __sk_buff *skb, uint32_t nlen,
- uint32_t flags);
-
-static int BPF_FUNC(skb_pull_data, struct __sk_buff *skb, uint32_t len);
-
-/* Event notification */
-static int __BPF_FUNC(skb_event_output, struct __sk_buff *skb, void *map,
- uint64_t index, const void *data, uint32_t size) =
- (void *) BPF_FUNC_perf_event_output;
-
-/* Packet vlan encap/decap */
-static int BPF_FUNC(skb_vlan_push, struct __sk_buff *skb, uint16_t proto,
- uint16_t vlan_tci);
-static int BPF_FUNC(skb_vlan_pop, struct __sk_buff *skb);
-
-/* Packet tunnel encap/decap */
-static int BPF_FUNC(skb_get_tunnel_key, struct __sk_buff *skb,
- struct bpf_tunnel_key *to, uint32_t size, uint32_t flags);
-static int BPF_FUNC(skb_set_tunnel_key, struct __sk_buff *skb,
- const struct bpf_tunnel_key *from, uint32_t size,
- uint32_t flags);
-
-static int BPF_FUNC(skb_get_tunnel_opt, struct __sk_buff *skb,
- void *to, uint32_t size);
-static int BPF_FUNC(skb_set_tunnel_opt, struct __sk_buff *skb,
- const void *from, uint32_t size);
-
-/** LLVM built-ins, mem*() routines work for constant size */
-
-#ifndef lock_xadd
-# define lock_xadd(ptr, val) ((void) __sync_fetch_and_add(ptr, val))
-#endif
-
-#ifndef memset
-# define memset(s, c, n) __builtin_memset((s), (c), (n))
-#endif
-
-#ifndef memcpy
-# define memcpy(d, s, n) __builtin_memcpy((d), (s), (n))
-#endif
-
-#ifndef memmove
-# define memmove(d, s, n) __builtin_memmove((d), (s), (n))
-#endif
-
-/* FIXME: __builtin_memcmp() is not yet fully usable unless llvm bug
- * https://llvm.org/bugs/show_bug.cgi?id=26218 gets resolved. Also
- * this one would generate a reloc entry (non-map), otherwise.
- */
-#if 0
-#ifndef memcmp
-# define memcmp(a, b, n) __builtin_memcmp((a), (b), (n))
-#endif
-#endif
-
-unsigned long long load_byte(void *skb, unsigned long long off)
- asm ("llvm.bpf.load.byte");
-
-unsigned long long load_half(void *skb, unsigned long long off)
- asm ("llvm.bpf.load.half");
-
-unsigned long long load_word(void *skb, unsigned long long off)
- asm ("llvm.bpf.load.word");
-
-#endif /* __BPF_API__ */
diff --git a/drivers/net/tap/bpf/bpf_elf.h b/drivers/net/tap/bpf/bpf_elf.h
deleted file mode 100644
index ea8a11c95c0f..000000000000
--- a/drivers/net/tap/bpf/bpf_elf.h
+++ /dev/null
@@ -1,53 +0,0 @@
-/* SPDX-License-Identifier: GPL-2.0 or BSD-3-Clause */
-#ifndef __BPF_ELF__
-#define __BPF_ELF__
-
-#include <asm/types.h>
-
-/* Note:
- *
- * Below ELF section names and bpf_elf_map structure definition
- * are not (!) kernel ABI. It's rather a "contract" between the
- * application and the BPF loader in tc. For compatibility, the
- * section names should stay as-is. Introduction of aliases, if
- * needed, are a possibility, though.
- */
-
-/* ELF section names, etc */
-#define ELF_SECTION_LICENSE "license"
-#define ELF_SECTION_MAPS "maps"
-#define ELF_SECTION_PROG "prog"
-#define ELF_SECTION_CLASSIFIER "classifier"
-#define ELF_SECTION_ACTION "action"
-
-#define ELF_MAX_MAPS 64
-#define ELF_MAX_LICENSE_LEN 128
-
-/* Object pinning settings */
-#define PIN_NONE 0
-#define PIN_OBJECT_NS 1
-#define PIN_GLOBAL_NS 2
-
-/* ELF map definition */
-struct bpf_elf_map {
- __u32 type;
- __u32 size_key;
- __u32 size_value;
- __u32 max_elem;
- __u32 flags;
- __u32 id;
- __u32 pinning;
- __u32 inner_id;
- __u32 inner_idx;
-};
-
-#define BPF_ANNOTATE_KV_PAIR(name, type_key, type_val) \
- struct ____btf_map_##name { \
- type_key key; \
- type_val value; \
- }; \
- struct ____btf_map_##name \
- __attribute__ ((section(".maps." #name), used)) \
- ____btf_map_##name = { }
-
-#endif /* __BPF_ELF__ */
diff --git a/drivers/net/tap/bpf/bpf_extract.py b/drivers/net/tap/bpf/bpf_extract.py
deleted file mode 100644
index b630c42b809f..000000000000
--- a/drivers/net/tap/bpf/bpf_extract.py
+++ /dev/null
@@ -1,86 +0,0 @@
-#!/usr/bin/env python3
-# SPDX-License-Identifier: BSD-3-Clause
-# Copyright (c) 2023 Stephen Hemminger <stephen@networkplumber.org>
-
-import argparse
-import sys
-import struct
-from tempfile import TemporaryFile
-from elftools.elf.elffile import ELFFile
-
-
-def load_sections(elffile):
- """Get sections of interest from ELF"""
- result = []
- parts = [("cls_q", "cls_q_insns"), ("l3_l4", "l3_l4_hash_insns")]
- for name, tag in parts:
- section = elffile.get_section_by_name(name)
- if section:
- insns = struct.iter_unpack('<BBhL', section.data())
- result.append([tag, insns])
- return result
-
-
-def dump_section(name, insns, out):
- """Dump the array of BPF instructions"""
- print(f'\nstatic struct bpf_insn {name}[] = {{', file=out)
- for bpf in insns:
- code = bpf[0]
- src = bpf[1] >> 4
- dst = bpf[1] & 0xf
- off = bpf[2]
- imm = bpf[3]
- print(f'\t{{{code:#04x}, {dst:4d}, {src:4d}, {off:8d}, {imm:#010x}}},',
- file=out)
- print('};', file=out)
-
-
-def parse_args():
- """Parse command line arguments"""
- parser = argparse.ArgumentParser()
- parser.add_argument('-s',
- '--source',
- type=str,
- help="original source file")
- parser.add_argument('-o', '--out', type=str, help="output C file path")
- parser.add_argument("file",
- nargs='+',
- help="object file path or '-' for stdin")
- return parser.parse_args()
-
-
-def open_input(path):
- """Open the file or stdin"""
- if path == "-":
- temp = TemporaryFile()
- temp.write(sys.stdin.buffer.read())
- return temp
- return open(path, 'rb')
-
-
-def write_header(out, source):
- """Write file intro header"""
- print("/* SPDX-License-Identifier: BSD-3-Clause", file=out)
- if source:
- print(f' * Auto-generated from {source}', file=out)
- print(" * This not the original source file. Do NOT edit it.", file=out)
- print(" */\n", file=out)
- print("#include <tap_bpf.h>", file=out)
-
-
-def main():
- '''program main function'''
- args = parse_args()
-
- with open(args.out, 'w',
- encoding="utf-8") if args.out else sys.stdout as out:
- write_header(out, args.source)
- for path in args.file:
- elffile = ELFFile(open_input(path))
- sections = load_sections(elffile)
- for name, insns in sections:
- dump_section(name, insns, out)
-
-
-if __name__ == "__main__":
- main()
diff --git a/drivers/net/tap/bpf/tap_bpf_program.c b/drivers/net/tap/bpf/tap_bpf_program.c
deleted file mode 100644
index f05aed021c30..000000000000
--- a/drivers/net/tap/bpf/tap_bpf_program.c
+++ /dev/null
@@ -1,255 +0,0 @@
-/* SPDX-License-Identifier: BSD-3-Clause OR GPL-2.0
- * Copyright 2017 Mellanox Technologies, Ltd
- */
-
-#include <stdint.h>
-#include <stdbool.h>
-#include <sys/types.h>
-#include <sys/socket.h>
-#include <asm/types.h>
-#include <linux/in.h>
-#include <linux/if.h>
-#include <linux/if_ether.h>
-#include <linux/ip.h>
-#include <linux/ipv6.h>
-#include <linux/if_tunnel.h>
-#include <linux/filter.h>
-
-#include "bpf_api.h"
-#include "bpf_elf.h"
-#include "../tap_rss.h"
-
-/** Create IPv4 address */
-#define IPv4(a, b, c, d) ((__u32)(((a) & 0xff) << 24) | \
- (((b) & 0xff) << 16) | \
- (((c) & 0xff) << 8) | \
- ((d) & 0xff))
-
-#define PORT(a, b) ((__u16)(((a) & 0xff) << 8) | \
- ((b) & 0xff))
-
-/*
- * The queue number is offset by a unique QUEUE_OFFSET, to distinguish
- * packets that have gone through this rule (skb->cb[1] != 0) from others.
- */
-#define QUEUE_OFFSET 0x7cafe800
-#define PIN_GLOBAL_NS 2
-
-#define KEY_IDX 0
-#define BPF_MAP_ID_KEY 1
-
-struct vlan_hdr {
- __be16 proto;
- __be16 tci;
-};
-
-struct bpf_elf_map __attribute__((section("maps"), used))
-map_keys = {
- .type = BPF_MAP_TYPE_HASH,
- .id = BPF_MAP_ID_KEY,
- .size_key = sizeof(__u32),
- .size_value = sizeof(struct rss_key),
- .max_elem = 256,
- .pinning = PIN_GLOBAL_NS,
-};
-
-__section("cls_q") int
-match_q(struct __sk_buff *skb)
-{
- __u32 queue = skb->cb[1];
- /* queue is set by tap_flow_bpf_cls_q() before load */
- volatile __u32 q = 0xdeadbeef;
- __u32 match_queue = QUEUE_OFFSET + q;
-
- /* printt("match_q$i() queue = %d\n", queue); */
-
- if (queue != match_queue)
- return TC_ACT_OK;
-
- /* queue match */
- skb->cb[1] = 0;
- return TC_ACT_UNSPEC;
-}
-
-
-struct ipv4_l3_l4_tuple {
- __u32 src_addr;
- __u32 dst_addr;
- __u16 dport;
- __u16 sport;
-} __attribute__((packed));
-
-struct ipv6_l3_l4_tuple {
- __u8 src_addr[16];
- __u8 dst_addr[16];
- __u16 dport;
- __u16 sport;
-} __attribute__((packed));
-
-static const __u8 def_rss_key[TAP_RSS_HASH_KEY_SIZE] = {
- 0xd1, 0x81, 0xc6, 0x2c,
- 0xf7, 0xf4, 0xdb, 0x5b,
- 0x19, 0x83, 0xa2, 0xfc,
- 0x94, 0x3e, 0x1a, 0xdb,
- 0xd9, 0x38, 0x9e, 0x6b,
- 0xd1, 0x03, 0x9c, 0x2c,
- 0xa7, 0x44, 0x99, 0xad,
- 0x59, 0x3d, 0x56, 0xd9,
- 0xf3, 0x25, 0x3c, 0x06,
- 0x2a, 0xdc, 0x1f, 0xfc,
-};
-
-static __u32 __attribute__((always_inline))
-rte_softrss_be(const __u32 *input_tuple, const uint8_t *rss_key,
- __u8 input_len)
-{
- __u32 i, j, hash = 0;
-#pragma unroll
- for (j = 0; j < input_len; j++) {
-#pragma unroll
- for (i = 0; i < 32; i++) {
- if (input_tuple[j] & (1U << (31 - i))) {
- hash ^= ((const __u32 *)def_rss_key)[j] << i |
- (__u32)((uint64_t)
- (((const __u32 *)def_rss_key)[j + 1])
- >> (32 - i));
- }
- }
- }
- return hash;
-}
-
-static int __attribute__((always_inline))
-rss_l3_l4(struct __sk_buff *skb)
-{
- void *data_end = (void *)(long)skb->data_end;
- void *data = (void *)(long)skb->data;
- __u16 proto = (__u16)skb->protocol;
- __u32 key_idx = 0xdeadbeef;
- __u32 hash;
- struct rss_key *rsskey;
- __u64 off = ETH_HLEN;
- int j;
- __u8 *key = 0;
- __u32 len;
- __u32 queue = 0;
- bool mf = 0;
- __u16 frag_off = 0;
-
- rsskey = map_lookup_elem(&map_keys, &key_idx);
- if (!rsskey) {
- printt("hash(): rss key is not configured\n");
- return TC_ACT_OK;
- }
- key = (__u8 *)rsskey->key;
-
- /* Get correct proto for 802.1ad */
- if (skb->vlan_present && skb->vlan_proto == htons(ETH_P_8021AD)) {
- if (data + ETH_ALEN * 2 + sizeof(struct vlan_hdr) +
- sizeof(proto) > data_end)
- return TC_ACT_OK;
- proto = *(__u16 *)(data + ETH_ALEN * 2 +
- sizeof(struct vlan_hdr));
- off += sizeof(struct vlan_hdr);
- }
-
- if (proto == htons(ETH_P_IP)) {
- if (data + off + sizeof(struct iphdr) + sizeof(__u32)
- > data_end)
- return TC_ACT_OK;
-
- __u8 *src_dst_addr = data + off + offsetof(struct iphdr, saddr);
- __u8 *frag_off_addr = data + off + offsetof(struct iphdr, frag_off);
- __u8 *prot_addr = data + off + offsetof(struct iphdr, protocol);
- __u8 *src_dst_port = data + off + sizeof(struct iphdr);
- struct ipv4_l3_l4_tuple v4_tuple = {
- .src_addr = IPv4(*(src_dst_addr + 0),
- *(src_dst_addr + 1),
- *(src_dst_addr + 2),
- *(src_dst_addr + 3)),
- .dst_addr = IPv4(*(src_dst_addr + 4),
- *(src_dst_addr + 5),
- *(src_dst_addr + 6),
- *(src_dst_addr + 7)),
- .sport = 0,
- .dport = 0,
- };
- /** Fetch the L4-payer port numbers only in-case of TCP/UDP
- ** and also if the packet is not fragmented. Since fragmented
- ** chunks do not have L4 TCP/UDP header.
- **/
- if (*prot_addr == IPPROTO_UDP || *prot_addr == IPPROTO_TCP) {
- frag_off = PORT(*(frag_off_addr + 0),
- *(frag_off_addr + 1));
- mf = frag_off & 0x2000;
- frag_off = frag_off & 0x1fff;
- if (mf == 0 && frag_off == 0) {
- v4_tuple.sport = PORT(*(src_dst_port + 0),
- *(src_dst_port + 1));
- v4_tuple.dport = PORT(*(src_dst_port + 2),
- *(src_dst_port + 3));
- }
- }
- __u8 input_len = sizeof(v4_tuple) / sizeof(__u32);
- if (rsskey->hash_fields & (1 << HASH_FIELD_IPV4_L3))
- input_len--;
- hash = rte_softrss_be((__u32 *)&v4_tuple, key, 3);
- } else if (proto == htons(ETH_P_IPV6)) {
- if (data + off + sizeof(struct ipv6hdr) +
- sizeof(__u32) > data_end)
- return TC_ACT_OK;
- __u8 *src_dst_addr = data + off +
- offsetof(struct ipv6hdr, saddr);
- __u8 *src_dst_port = data + off +
- sizeof(struct ipv6hdr);
- __u8 *next_hdr = data + off +
- offsetof(struct ipv6hdr, nexthdr);
-
- struct ipv6_l3_l4_tuple v6_tuple;
- for (j = 0; j < 4; j++)
- *((uint32_t *)&v6_tuple.src_addr + j) =
- __builtin_bswap32(*((uint32_t *)
- src_dst_addr + j));
- for (j = 0; j < 4; j++)
- *((uint32_t *)&v6_tuple.dst_addr + j) =
- __builtin_bswap32(*((uint32_t *)
- src_dst_addr + 4 + j));
-
- /** Fetch the L4 header port-numbers only if next-header
- * is TCP/UDP **/
- if (*next_hdr == IPPROTO_UDP || *next_hdr == IPPROTO_TCP) {
- v6_tuple.sport = PORT(*(src_dst_port + 0),
- *(src_dst_port + 1));
- v6_tuple.dport = PORT(*(src_dst_port + 2),
- *(src_dst_port + 3));
- } else {
- v6_tuple.sport = 0;
- v6_tuple.dport = 0;
- }
-
- __u8 input_len = sizeof(v6_tuple) / sizeof(__u32);
- if (rsskey->hash_fields & (1 << HASH_FIELD_IPV6_L3))
- input_len--;
- hash = rte_softrss_be((__u32 *)&v6_tuple, key, 9);
- } else {
- return TC_ACT_PIPE;
- }
-
- queue = rsskey->queues[(hash % rsskey->nb_queues) &
- (TAP_MAX_QUEUES - 1)];
- skb->cb[1] = QUEUE_OFFSET + queue;
- /* printt(">>>>> rss_l3_l4 hash=0x%x queue=%u\n", hash, queue); */
-
- return TC_ACT_RECLASSIFY;
-}
-
-#define RSS(L) \
- __section(#L) int \
- L ## _hash(struct __sk_buff *skb) \
- { \
- return rss_ ## L (skb); \
- }
-
-RSS(l3_l4)
-
-BPF_LICENSE("Dual BSD/GPL");
diff --git a/drivers/net/tap/meson.build b/drivers/net/tap/meson.build
index 5099ccdff11b..f83f460a7808 100644
--- a/drivers/net/tap/meson.build
+++ b/drivers/net/tap/meson.build
@@ -7,7 +7,6 @@ if not is_linux
endif
sources = files(
'rte_eth_tap.c',
- 'tap_bpf_api.c',
'tap_flow.c',
'tap_intr.c',
'tap_netlink.c',
@@ -25,10 +24,6 @@ cflags += '-DTAP_MAX_QUEUES=16'
args = [
[ 'HAVE_TC_FLOWER', 'linux/pkt_cls.h', 'TCA_FLOWER_UNSPEC' ],
[ 'HAVE_TC_VLAN_ID', 'linux/pkt_cls.h', 'TCA_FLOWER_KEY_VLAN_PRIO' ],
- [ 'HAVE_TC_BPF', 'linux/pkt_cls.h', 'TCA_BPF_UNSPEC' ],
- [ 'HAVE_TC_BPF_FD', 'linux/pkt_cls.h', 'TCA_BPF_FD' ],
- [ 'HAVE_TC_ACT_BPF', 'linux/tc_act/tc_bpf.h', 'TCA_ACT_BPF_UNSPEC' ],
- [ 'HAVE_TC_ACT_BPF_FD', 'linux/tc_act/tc_bpf.h', 'TCA_ACT_BPF_FD' ],
]
config = configuration_data()
foreach arg:args
diff --git a/drivers/net/tap/rte_eth_tap.h b/drivers/net/tap/rte_eth_tap.h
index 5ac93f93e961..e19824583651 100644
--- a/drivers/net/tap/rte_eth_tap.h
+++ b/drivers/net/tap/rte_eth_tap.h
@@ -79,11 +79,8 @@ struct pmd_internals {
int flow_isolate; /* 1 if flow isolation is enabled */
int flower_support; /* 1 if kernel supports, else 0 */
int flower_vlan_support; /* 1 if kernel supports, else 0 */
- int rss_enabled; /* 1 if RSS is enabled, else 0 */
int persist; /* 1 if keep link up, else 0 */
- /* implicit rules set when RSS is enabled */
- int map_fd; /* BPF RSS map fd */
- int bpf_fd[RTE_PMD_TAP_MAX_QUEUES];/* List of bpf fds per queue */
+
LIST_HEAD(tap_rss_flows, rte_flow) rss_flows;
LIST_HEAD(tap_flows, rte_flow) flows; /* rte_flow rules */
/* implicit rte_flow rules set when a remote device is active */
diff --git a/drivers/net/tap/tap_bpf.h b/drivers/net/tap/tap_bpf.h
deleted file mode 100644
index 0d38bc111fe0..000000000000
--- a/drivers/net/tap/tap_bpf.h
+++ /dev/null
@@ -1,121 +0,0 @@
-/* SPDX-License-Identifier: BSD-3-Clause OR GPL-2.0
- * Copyright 2017 Mellanox Technologies, Ltd
- */
-
-#ifndef __TAP_BPF_H__
-#define __TAP_BPF_H__
-
-#include <tap_autoconf.h>
-
-/* Do not #include <linux/bpf.h> since eBPF must compile on different
- * distros which may include partial definitions for eBPF (while the
- * kernel itself may support eBPF). Instead define here all that is needed
- */
-
-/* BPF_MAP_UPDATE_ELEM command flags */
-#define BPF_ANY 0 /* create a new element or update an existing */
-
-/* BPF architecture instruction struct */
-struct bpf_insn {
- __u8 code;
- __u8 dst_reg:4;
- __u8 src_reg:4;
- __s16 off;
- __s32 imm; /* immediate value */
-};
-
-/* BPF program types */
-enum bpf_prog_type {
- BPF_PROG_TYPE_UNSPEC,
- BPF_PROG_TYPE_SOCKET_FILTER,
- BPF_PROG_TYPE_KPROBE,
- BPF_PROG_TYPE_SCHED_CLS,
- BPF_PROG_TYPE_SCHED_ACT,
-};
-
-/* BPF commands types */
-enum bpf_cmd {
- BPF_MAP_CREATE,
- BPF_MAP_LOOKUP_ELEM,
- BPF_MAP_UPDATE_ELEM,
- BPF_MAP_DELETE_ELEM,
- BPF_MAP_GET_NEXT_KEY,
- BPF_PROG_LOAD,
-};
-
-/* BPF maps types */
-enum bpf_map_type {
- BPF_MAP_TYPE_UNSPEC,
- BPF_MAP_TYPE_HASH,
-};
-
-/* union of anonymous structs used with TAP BPF commands */
-union bpf_attr {
- /* BPF_MAP_CREATE command */
- struct {
- __u32 map_type;
- __u32 key_size;
- __u32 value_size;
- __u32 max_entries;
- __u32 map_flags;
- __u32 inner_map_fd;
- };
-
- /* BPF_MAP_UPDATE_ELEM, BPF_MAP_DELETE_ELEM commands */
- struct {
- __u32 map_fd;
- __aligned_u64 key;
- union {
- __aligned_u64 value;
- __aligned_u64 next_key;
- };
- __u64 flags;
- };
-
- /* BPF_PROG_LOAD command */
- struct {
- __u32 prog_type;
- __u32 insn_cnt;
- __aligned_u64 insns;
- __aligned_u64 license;
- __u32 log_level;
- __u32 log_size;
- __aligned_u64 log_buf;
- __u32 kern_version;
- __u32 prog_flags;
- };
-} __rte_aligned(8);
-
-#ifndef __NR_bpf
-# if defined(__i386__)
-# define __NR_bpf 357
-# elif defined(__x86_64__)
-# define __NR_bpf 321
-# elif defined(__arm__)
-# define __NR_bpf 386
-# elif defined(__aarch64__)
-# define __NR_bpf 280
-# elif defined(__sparc__)
-# define __NR_bpf 349
-# elif defined(__s390__)
-# define __NR_bpf 351
-# elif defined(__powerpc__)
-# define __NR_bpf 361
-# elif defined(__riscv)
-# define __NR_bpf 280
-# elif defined(__loongarch__)
-# define __NR_bpf 280
-# else
-# error __NR_bpf not defined
-# endif
-#endif
-
-enum {
- BPF_MAP_ID_KEY,
- BPF_MAP_ID_SIMPLE,
-};
-
-static int bpf_load(enum bpf_prog_type type, const struct bpf_insn *insns,
- size_t insns_cnt, const char *license);
-
-#endif /* __TAP_BPF_H__ */
diff --git a/drivers/net/tap/tap_bpf_api.c b/drivers/net/tap/tap_bpf_api.c
deleted file mode 100644
index 15283f8917ed..000000000000
--- a/drivers/net/tap/tap_bpf_api.c
+++ /dev/null
@@ -1,190 +0,0 @@
-/* SPDX-License-Identifier: BSD-3-Clause
- * Copyright 2017 Mellanox Technologies, Ltd
- */
-
-#include <errno.h>
-#include <string.h>
-#include <unistd.h>
-#include <sys/queue.h>
-
-#include <rte_malloc.h>
-#include <rte_eth_tap.h>
-#include <tap_flow.h>
-#include <tap_autoconf.h>
-#include <tap_tcmsgs.h>
-#include <tap_bpf.h>
-#include <tap_bpf_insns.h>
-
-/**
- * Load BPF program (section cls_q) into the kernel and return a bpf fd
- *
- * @param queue_idx
- * Queue index matching packet cb
- *
- * @return
- * -1 if the BPF program couldn't be loaded. An fd (int) otherwise.
- */
-int tap_flow_bpf_cls_q(__u32 queue_idx)
-{
- cls_q_insns[1].imm = queue_idx;
-
- return bpf_load(BPF_PROG_TYPE_SCHED_CLS,
- (struct bpf_insn *)cls_q_insns,
- RTE_DIM(cls_q_insns),
- "Dual BSD/GPL");
-}
-
-/**
- * Load BPF program (section l3_l4) into the kernel and return a bpf fd.
- *
- * @param[in] key_idx
- * RSS MAP key index
- *
- * @param[in] map_fd
- * BPF RSS map file descriptor
- *
- * @return
- * -1 if the BPF program couldn't be loaded. An fd (int) otherwise.
- */
-int tap_flow_bpf_calc_l3_l4_hash(__u32 key_idx, int map_fd)
-{
- l3_l4_hash_insns[4].imm = key_idx;
- l3_l4_hash_insns[9].imm = map_fd;
-
- return bpf_load(BPF_PROG_TYPE_SCHED_ACT,
- (struct bpf_insn *)l3_l4_hash_insns,
- RTE_DIM(l3_l4_hash_insns),
- "Dual BSD/GPL");
-}
-
-/**
- * Helper function to convert a pointer to unsigned 64 bits
- *
- * @param[in] ptr
- * pointer to address
- *
- * @return
- * 64 bit unsigned long type of pointer address
- */
-static inline __u64 ptr_to_u64(const void *ptr)
-{
- return (__u64)(unsigned long)ptr;
-}
-
-/**
- * Call BPF system call
- *
- * @param[in] cmd
- * BPF command for program loading, map creation, map entry update, etc
- *
- * @param[in] attr
- * System call attributes relevant to system call command
- *
- * @param[in] size
- * size of attr parameter
- *
- * @return
- * -1 if BPF system call failed, 0 otherwise
- */
-static inline int sys_bpf(enum bpf_cmd cmd, union bpf_attr *attr,
- unsigned int size)
-{
- return syscall(__NR_bpf, cmd, attr, size);
-}
-
-/**
- * Load BPF instructions to kernel
- *
- * @param[in] type
- * BPF program type: classifier or action
- *
- * @param[in] insns
- * Array of BPF instructions (equivalent to BPF instructions)
- *
- * @param[in] insns_cnt
- * Number of BPF instructions (size of array)
- *
- * @param[in] license
- * License string that must be acknowledged by the kernel
- *
- * @return
- * -1 if the BPF program couldn't be loaded, fd (file descriptor) otherwise
- */
-static int bpf_load(enum bpf_prog_type type,
- const struct bpf_insn *insns,
- size_t insns_cnt,
- const char *license)
-{
- union bpf_attr attr = {};
-
- bzero(&attr, sizeof(attr));
- attr.prog_type = type;
- attr.insn_cnt = (__u32)insns_cnt;
- attr.insns = ptr_to_u64(insns);
- attr.license = ptr_to_u64(license);
- attr.log_buf = ptr_to_u64(NULL);
- attr.log_level = 0;
- attr.kern_version = 0;
-
- return sys_bpf(BPF_PROG_LOAD, &attr, sizeof(attr));
-}
-
-/**
- * Create BPF map for RSS rules
- *
- * @param[in] key_size
- * map RSS key size
- *
- * @param[in] value_size
- * Map RSS value size
- *
- * @param[in] max_entries
- * Map max number of RSS entries (limit on max RSS rules)
- *
- * @return
- * -1 if BPF map couldn't be created, map fd otherwise
- */
-int tap_flow_bpf_rss_map_create(unsigned int key_size,
- unsigned int value_size,
- unsigned int max_entries)
-{
- union bpf_attr attr = {};
-
- bzero(&attr, sizeof(attr));
- attr.map_type = BPF_MAP_TYPE_HASH;
- attr.key_size = key_size;
- attr.value_size = value_size;
- attr.max_entries = max_entries;
-
- return sys_bpf(BPF_MAP_CREATE, &attr, sizeof(attr));
-}
-
-/**
- * Update RSS entry in BPF map
- *
- * @param[in] fd
- * RSS map fd
- *
- * @param[in] key
- * Pointer to RSS key whose entry is updated
- *
- * @param[in] value
- * Pointer to RSS new updated value
- *
- * @return
- * -1 if RSS entry failed to be updated, 0 otherwise
- */
-int tap_flow_bpf_update_rss_elem(int fd, void *key, void *value)
-{
- union bpf_attr attr = {};
-
- bzero(&attr, sizeof(attr));
-
- attr.map_type = BPF_MAP_TYPE_HASH;
- attr.map_fd = fd;
- attr.key = ptr_to_u64(key);
- attr.value = ptr_to_u64(value);
- attr.flags = BPF_ANY;
-
- return sys_bpf(BPF_MAP_UPDATE_ELEM, &attr, sizeof(attr));
-}
diff --git a/drivers/net/tap/tap_bpf_insns.h b/drivers/net/tap/tap_bpf_insns.h
deleted file mode 100644
index 53fa76c4e6b0..000000000000
--- a/drivers/net/tap/tap_bpf_insns.h
+++ /dev/null
@@ -1,1743 +0,0 @@
-/* SPDX-License-Identifier: BSD-3-Clause
- * Auto-generated from tap_bpf_program.c
- * This not the original source file. Do NOT edit it.
- */
-
-#include <tap_bpf.h>
-
-static struct bpf_insn cls_q_insns[] = {
- {0x61, 2, 1, 52, 0x00000000},
- {0x18, 3, 0, 0, 0xdeadbeef},
- {0x00, 0, 0, 0, 0x00000000},
- {0x63, 10, 3, -4, 0x00000000},
- {0xb7, 0, 0, 0, 0x00000000},
- {0x61, 3, 10, -4, 0x00000000},
- {0x07, 3, 0, 0, 0x7cafe800},
- {0x67, 3, 0, 0, 0x00000020},
- {0x77, 3, 0, 0, 0x00000020},
- {0x5d, 2, 3, 4, 0x00000000},
- {0xb7, 2, 0, 0, 0x00000000},
- {0x63, 1, 2, 52, 0x00000000},
- {0x18, 0, 0, 0, 0xffffffff},
- {0x00, 0, 0, 0, 0x00000000},
- {0x95, 0, 0, 0, 0x00000000},
-};
-
-static struct bpf_insn l3_l4_hash_insns[] = {
- {0xbf, 7, 1, 0, 0x00000000},
- {0x61, 6, 7, 16, 0x00000000},
- {0x61, 8, 7, 76, 0x00000000},
- {0x61, 9, 7, 80, 0x00000000},
- {0x18, 1, 0, 0, 0xdeadbeef},
- {0x00, 0, 0, 0, 0x00000000},
- {0x63, 10, 1, -4, 0x00000000},
- {0xbf, 2, 10, 0, 0x00000000},
- {0x07, 2, 0, 0, 0xfffffffc},
- {0x18, 1, 0, 0, 0x00000000},
- {0x00, 0, 0, 0, 0x00000000},
- {0x85, 0, 0, 0, 0x00000001},
- {0x55, 0, 0, 21, 0x00000000},
- {0xb7, 1, 0, 0, 0x00000a64},
- {0x6b, 10, 1, -16, 0x00000000},
- {0x18, 1, 0, 0, 0x69666e6f},
- {0x00, 0, 0, 0, 0x65727567},
- {0x7b, 10, 1, -24, 0x00000000},
- {0x18, 1, 0, 0, 0x6e207369},
- {0x00, 0, 0, 0, 0x6320746f},
- {0x7b, 10, 1, -32, 0x00000000},
- {0x18, 1, 0, 0, 0x20737372},
- {0x00, 0, 0, 0, 0x2079656b},
- {0x7b, 10, 1, -40, 0x00000000},
- {0x18, 1, 0, 0, 0x68736168},
- {0x00, 0, 0, 0, 0x203a2928},
- {0x7b, 10, 1, -48, 0x00000000},
- {0xb7, 7, 0, 0, 0x00000000},
- {0x73, 10, 7, -14, 0x00000000},
- {0xbf, 1, 10, 0, 0x00000000},
- {0x07, 1, 0, 0, 0xffffffd0},
- {0xb7, 2, 0, 0, 0x00000023},
- {0x85, 0, 0, 0, 0x00000006},
- {0x05, 0, 0, 1680, 0x00000000},
- {0xb7, 1, 0, 0, 0x0000000e},
- {0x61, 2, 7, 20, 0x00000000},
- {0x15, 2, 0, 10, 0x00000000},
- {0x61, 2, 7, 28, 0x00000000},
- {0x55, 2, 0, 8, 0x0000a888},
- {0xbf, 2, 7, 0, 0x00000000},
- {0xb7, 7, 0, 0, 0x00000000},
- {0xbf, 1, 8, 0, 0x00000000},
- {0x07, 1, 0, 0, 0x00000012},
- {0x2d, 1, 9, 1670, 0x00000000},
- {0xb7, 1, 0, 0, 0x00000012},
- {0x69, 6, 8, 16, 0x00000000},
- {0xbf, 7, 2, 0, 0x00000000},
- {0x57, 6, 0, 0, 0x0000ffff},
- {0x7b, 10, 7, -56, 0x00000000},
- {0x15, 6, 0, 443, 0x0000dd86},
- {0xb7, 7, 0, 0, 0x00000003},
- {0x55, 6, 0, 1662, 0x00000008},
- {0x0f, 8, 1, 0, 0x00000000},
- {0xb7, 7, 0, 0, 0x00000000},
- {0xbf, 1, 8, 0, 0x00000000},
- {0x07, 1, 0, 0, 0x00000018},
- {0x2d, 1, 9, 1657, 0x00000000},
- {0xb7, 1, 0, 0, 0x00000000},
- {0x71, 3, 8, 12, 0x00000000},
- {0x71, 2, 8, 9, 0x00000000},
- {0x15, 2, 0, 1, 0x00000011},
- {0x55, 2, 0, 21, 0x00000006},
- {0x71, 2, 8, 7, 0x00000000},
- {0x71, 4, 8, 6, 0x00000000},
- {0xbf, 5, 4, 0, 0x00000000},
- {0x67, 5, 0, 0, 0x00000008},
- {0x57, 5, 0, 0, 0x00001f00},
- {0x4f, 5, 2, 0, 0x00000000},
- {0x57, 4, 0, 0, 0x00000020},
- {0x4f, 4, 5, 0, 0x00000000},
- {0x55, 4, 0, 12, 0x00000000},
- {0xbf, 2, 8, 0, 0x00000000},
- {0x07, 2, 0, 0, 0x00000014},
- {0x71, 4, 2, 0, 0x00000000},
- {0x67, 4, 0, 0, 0x00000018},
- {0x71, 1, 2, 1, 0x00000000},
- {0x67, 1, 0, 0, 0x00000010},
- {0x4f, 1, 4, 0, 0x00000000},
- {0x71, 4, 2, 3, 0x00000000},
- {0x4f, 1, 4, 0, 0x00000000},
- {0x71, 2, 2, 2, 0x00000000},
- {0x67, 2, 0, 0, 0x00000008},
- {0x4f, 1, 2, 0, 0x00000000},
- {0xbf, 4, 3, 0, 0x00000000},
- {0x67, 4, 0, 0, 0x00000038},
- {0xc7, 4, 0, 0, 0x00000038},
- {0xb7, 2, 0, 0, 0x00000000},
- {0x65, 4, 0, 1, 0xffffffff},
- {0xb7, 7, 0, 0, 0x2cc681d1},
- {0xbf, 4, 3, 0, 0x00000000},
- {0x57, 4, 0, 0, 0x00000040},
- {0x15, 4, 0, 1, 0x00000000},
- {0xa7, 7, 0, 0, 0x598d03a2},
- {0xbf, 4, 3, 0, 0x00000000},
- {0x57, 4, 0, 0, 0x00000020},
- {0x15, 4, 0, 1, 0x00000000},
- {0xa7, 7, 0, 0, 0xb31a0745},
- {0xbf, 4, 3, 0, 0x00000000},
- {0x57, 4, 0, 0, 0x00000010},
- {0x15, 4, 0, 1, 0x00000000},
- {0xa7, 7, 0, 0, 0x66340e8a},
- {0xbf, 4, 3, 0, 0x00000000},
- {0x57, 4, 0, 0, 0x00000008},
- {0x15, 4, 0, 1, 0x00000000},
- {0xa7, 7, 0, 0, 0xcc681d15},
- {0xbf, 4, 3, 0, 0x00000000},
- {0x57, 4, 0, 0, 0x00000004},
- {0x15, 4, 0, 1, 0x00000000},
- {0xa7, 7, 0, 0, 0x98d03a2b},
- {0xbf, 4, 3, 0, 0x00000000},
- {0x57, 4, 0, 0, 0x00000002},
- {0x15, 4, 0, 1, 0x00000000},
- {0xa7, 7, 0, 0, 0x31a07456},
- {0x71, 4, 8, 13, 0x00000000},
- {0x57, 3, 0, 0, 0x00000001},
- {0x15, 3, 0, 1, 0x00000000},
- {0xa7, 7, 0, 0, 0x6340e8ad},
- {0xbf, 3, 4, 0, 0x00000000},
- {0x67, 3, 0, 0, 0x00000038},
- {0xc7, 3, 0, 0, 0x00000038},
- {0xbf, 5, 7, 0, 0x00000000},
- {0xa7, 5, 0, 0, 0xc681d15b},
- {0x6d, 2, 3, 1, 0x00000000},
- {0xbf, 5, 7, 0, 0x00000000},
- {0xbf, 3, 4, 0, 0x00000000},
- {0x57, 3, 0, 0, 0x00000040},
- {0x15, 3, 0, 1, 0x00000000},
- {0xa7, 5, 0, 0, 0x8d03a2b7},
- {0xbf, 3, 4, 0, 0x00000000},
- {0x57, 3, 0, 0, 0x00000020},
- {0x15, 3, 0, 1, 0x00000000},
- {0xa7, 5, 0, 0, 0x1a07456f},
- {0xbf, 3, 4, 0, 0x00000000},
- {0x57, 3, 0, 0, 0x00000010},
- {0x15, 3, 0, 1, 0x00000000},
- {0xa7, 5, 0, 0, 0x340e8ade},
- {0xbf, 3, 4, 0, 0x00000000},
- {0x57, 3, 0, 0, 0x00000008},
- {0x15, 3, 0, 1, 0x00000000},
- {0xa7, 5, 0, 0, 0x681d15bd},
- {0xbf, 3, 4, 0, 0x00000000},
- {0x57, 3, 0, 0, 0x00000004},
- {0x15, 3, 0, 1, 0x00000000},
- {0xa7, 5, 0, 0, 0xd03a2b7b},
- {0xbf, 3, 4, 0, 0x00000000},
- {0x57, 3, 0, 0, 0x00000002},
- {0x15, 3, 0, 1, 0x00000000},
- {0xa7, 5, 0, 0, 0xa07456f6},
- {0x71, 3, 8, 14, 0x00000000},
- {0x57, 4, 0, 0, 0x00000001},
- {0x15, 4, 0, 1, 0x00000000},
- {0xa7, 5, 0, 0, 0x40e8aded},
- {0xbf, 4, 3, 0, 0x00000000},
- {0x67, 4, 0, 0, 0x00000038},
- {0xc7, 4, 0, 0, 0x00000038},
- {0xbf, 7, 5, 0, 0x00000000},
- {0xa7, 7, 0, 0, 0x81d15bdb},
- {0x6d, 2, 4, 1, 0x00000000},
- {0xbf, 7, 5, 0, 0x00000000},
- {0xbf, 4, 3, 0, 0x00000000},
- {0x57, 4, 0, 0, 0x00000040},
- {0x15, 4, 0, 1, 0x00000000},
- {0xa7, 7, 0, 0, 0x03a2b7b7},
- {0xbf, 4, 3, 0, 0x00000000},
- {0x57, 4, 0, 0, 0x00000020},
- {0x15, 4, 0, 1, 0x00000000},
- {0xa7, 7, 0, 0, 0x07456f6f},
- {0xbf, 4, 3, 0, 0x00000000},
- {0x57, 4, 0, 0, 0x00000010},
- {0x15, 4, 0, 1, 0x00000000},
- {0xa7, 7, 0, 0, 0x0e8adedf},
- {0xbf, 4, 3, 0, 0x00000000},
- {0x57, 4, 0, 0, 0x00000008},
- {0x15, 4, 0, 1, 0x00000000},
- {0xa7, 7, 0, 0, 0x1d15bdbf},
- {0xbf, 4, 3, 0, 0x00000000},
- {0x57, 4, 0, 0, 0x00000004},
- {0x15, 4, 0, 1, 0x00000000},
- {0xa7, 7, 0, 0, 0x3a2b7b7e},
- {0xbf, 4, 3, 0, 0x00000000},
- {0x57, 4, 0, 0, 0x00000002},
- {0x15, 4, 0, 1, 0x00000000},
- {0xa7, 7, 0, 0, 0x7456f6fd},
- {0x71, 4, 8, 15, 0x00000000},
- {0x57, 3, 0, 0, 0x00000001},
- {0x15, 3, 0, 1, 0x00000000},
- {0xa7, 7, 0, 0, 0xe8adedfa},
- {0xbf, 3, 4, 0, 0x00000000},
- {0x67, 3, 0, 0, 0x00000038},
- {0xc7, 3, 0, 0, 0x00000038},
- {0xbf, 5, 7, 0, 0x00000000},
- {0xa7, 5, 0, 0, 0xd15bdbf4},
- {0x6d, 2, 3, 1, 0x00000000},
- {0xbf, 5, 7, 0, 0x00000000},
- {0xbf, 3, 4, 0, 0x00000000},
- {0x57, 3, 0, 0, 0x00000040},
- {0x15, 3, 0, 1, 0x00000000},
- {0xa7, 5, 0, 0, 0xa2b7b7e9},
- {0xbf, 3, 4, 0, 0x00000000},
- {0x57, 3, 0, 0, 0x00000020},
- {0x15, 3, 0, 1, 0x00000000},
- {0xa7, 5, 0, 0, 0x456f6fd3},
- {0xbf, 3, 4, 0, 0x00000000},
- {0x57, 3, 0, 0, 0x00000010},
- {0x15, 3, 0, 1, 0x00000000},
- {0xa7, 5, 0, 0, 0x8adedfa7},
- {0xbf, 3, 4, 0, 0x00000000},
- {0x57, 3, 0, 0, 0x00000008},
- {0x15, 3, 0, 1, 0x00000000},
- {0xa7, 5, 0, 0, 0x15bdbf4f},
- {0xbf, 3, 4, 0, 0x00000000},
- {0x57, 3, 0, 0, 0x00000004},
- {0x15, 3, 0, 1, 0x00000000},
- {0xa7, 5, 0, 0, 0x2b7b7e9e},
- {0xbf, 3, 4, 0, 0x00000000},
- {0x57, 3, 0, 0, 0x00000002},
- {0x15, 3, 0, 1, 0x00000000},
- {0xa7, 5, 0, 0, 0x56f6fd3d},
- {0x71, 3, 8, 16, 0x00000000},
- {0x57, 4, 0, 0, 0x00000001},
- {0x15, 4, 0, 1, 0x00000000},
- {0xa7, 5, 0, 0, 0xadedfa7b},
- {0xbf, 4, 3, 0, 0x00000000},
- {0x67, 4, 0, 0, 0x00000038},
- {0xc7, 4, 0, 0, 0x00000038},
- {0xbf, 7, 5, 0, 0x00000000},
- {0xa7, 7, 0, 0, 0x5bdbf4f7},
- {0x6d, 2, 4, 1, 0x00000000},
- {0xbf, 7, 5, 0, 0x00000000},
- {0xbf, 4, 3, 0, 0x00000000},
- {0x57, 4, 0, 0, 0x00000040},
- {0x15, 4, 0, 1, 0x00000000},
- {0xa7, 7, 0, 0, 0xb7b7e9ef},
- {0xbf, 4, 3, 0, 0x00000000},
- {0x57, 4, 0, 0, 0x00000020},
- {0x15, 4, 0, 1, 0x00000000},
- {0xa7, 7, 0, 0, 0x6f6fd3df},
- {0xbf, 4, 3, 0, 0x00000000},
- {0x57, 4, 0, 0, 0x00000010},
- {0x15, 4, 0, 1, 0x00000000},
- {0xa7, 7, 0, 0, 0xdedfa7bf},
- {0xbf, 4, 3, 0, 0x00000000},
- {0x57, 4, 0, 0, 0x00000008},
- {0x15, 4, 0, 1, 0x00000000},
- {0xa7, 7, 0, 0, 0xbdbf4f7f},
- {0xbf, 4, 3, 0, 0x00000000},
- {0x57, 4, 0, 0, 0x00000004},
- {0x15, 4, 0, 1, 0x00000000},
- {0xa7, 7, 0, 0, 0x7b7e9eff},
- {0xbf, 4, 3, 0, 0x00000000},
- {0x57, 4, 0, 0, 0x00000002},
- {0x15, 4, 0, 1, 0x00000000},
- {0xa7, 7, 0, 0, 0xf6fd3dff},
- {0x71, 4, 8, 17, 0x00000000},
- {0x57, 3, 0, 0, 0x00000001},
- {0x15, 3, 0, 1, 0x00000000},
- {0xa7, 7, 0, 0, 0xedfa7bfe},
- {0xbf, 3, 4, 0, 0x00000000},
- {0x67, 3, 0, 0, 0x00000038},
- {0xc7, 3, 0, 0, 0x00000038},
- {0xbf, 5, 7, 0, 0x00000000},
- {0xa7, 5, 0, 0, 0xdbf4f7fc},
- {0x6d, 2, 3, 1, 0x00000000},
- {0xbf, 5, 7, 0, 0x00000000},
- {0xbf, 3, 4, 0, 0x00000000},
- {0x57, 3, 0, 0, 0x00000040},
- {0x15, 3, 0, 1, 0x00000000},
- {0xa7, 5, 0, 0, 0xb7e9eff9},
- {0xbf, 3, 4, 0, 0x00000000},
- {0x57, 3, 0, 0, 0x00000020},
- {0x15, 3, 0, 1, 0x00000000},
- {0xa7, 5, 0, 0, 0x6fd3dff2},
- {0xbf, 3, 4, 0, 0x00000000},
- {0x57, 3, 0, 0, 0x00000010},
- {0x15, 3, 0, 1, 0x00000000},
- {0xa7, 5, 0, 0, 0xdfa7bfe5},
- {0xbf, 3, 4, 0, 0x00000000},
- {0x57, 3, 0, 0, 0x00000008},
- {0x15, 3, 0, 1, 0x00000000},
- {0xa7, 5, 0, 0, 0xbf4f7fca},
- {0xbf, 3, 4, 0, 0x00000000},
- {0x57, 3, 0, 0, 0x00000004},
- {0x15, 3, 0, 1, 0x00000000},
- {0xa7, 5, 0, 0, 0x7e9eff94},
- {0xbf, 3, 4, 0, 0x00000000},
- {0x57, 3, 0, 0, 0x00000002},
- {0x15, 3, 0, 1, 0x00000000},
- {0xa7, 5, 0, 0, 0xfd3dff28},
- {0x71, 3, 8, 18, 0x00000000},
- {0x57, 4, 0, 0, 0x00000001},
- {0x15, 4, 0, 1, 0x00000000},
- {0xa7, 5, 0, 0, 0xfa7bfe51},
- {0xbf, 6, 3, 0, 0x00000000},
- {0x67, 6, 0, 0, 0x00000038},
- {0xc7, 6, 0, 0, 0x00000038},
- {0xbf, 4, 5, 0, 0x00000000},
- {0xa7, 4, 0, 0, 0xf4f7fca2},
- {0x6d, 2, 6, 1, 0x00000000},
- {0xbf, 4, 5, 0, 0x00000000},
- {0xbf, 5, 3, 0, 0x00000000},
- {0x57, 5, 0, 0, 0x00000040},
- {0x15, 5, 0, 1, 0x00000000},
- {0xa7, 4, 0, 0, 0xe9eff945},
- {0xbf, 5, 3, 0, 0x00000000},
- {0x57, 5, 0, 0, 0x00000020},
- {0x15, 5, 0, 1, 0x00000000},
- {0xa7, 4, 0, 0, 0xd3dff28a},
- {0xbf, 5, 3, 0, 0x00000000},
- {0x57, 5, 0, 0, 0x00000010},
- {0x15, 5, 0, 1, 0x00000000},
- {0xa7, 4, 0, 0, 0xa7bfe514},
- {0xbf, 5, 3, 0, 0x00000000},
- {0x57, 5, 0, 0, 0x00000008},
- {0x15, 5, 0, 1, 0x00000000},
- {0xa7, 4, 0, 0, 0x4f7fca28},
- {0xbf, 5, 3, 0, 0x00000000},
- {0x57, 5, 0, 0, 0x00000004},
- {0x15, 5, 0, 1, 0x00000000},
- {0xa7, 4, 0, 0, 0x9eff9450},
- {0xbf, 5, 3, 0, 0x00000000},
- {0x57, 5, 0, 0, 0x00000002},
- {0x15, 5, 0, 1, 0x00000000},
- {0xa7, 4, 0, 0, 0x3dff28a0},
- {0x71, 5, 8, 19, 0x00000000},
- {0x57, 3, 0, 0, 0x00000001},
- {0x15, 3, 0, 1, 0x00000000},
- {0xa7, 4, 0, 0, 0x7bfe5141},
- {0xbf, 3, 5, 0, 0x00000000},
- {0x67, 3, 0, 0, 0x00000038},
- {0xc7, 3, 0, 0, 0x00000038},
- {0xbf, 7, 4, 0, 0x00000000},
- {0xa7, 7, 0, 0, 0xf7fca283},
- {0x6d, 2, 3, 1, 0x00000000},
- {0xbf, 7, 4, 0, 0x00000000},
- {0xbf, 3, 5, 0, 0x00000000},
- {0x57, 3, 0, 0, 0x00000040},
- {0x15, 3, 0, 1, 0x00000000},
- {0xa7, 7, 0, 0, 0xeff94506},
- {0xbf, 3, 5, 0, 0x00000000},
- {0x57, 3, 0, 0, 0x00000020},
- {0x15, 3, 0, 1, 0x00000000},
- {0xa7, 7, 0, 0, 0xdff28a0c},
- {0xbf, 3, 5, 0, 0x00000000},
- {0x57, 3, 0, 0, 0x00000010},
- {0x15, 3, 0, 1, 0x00000000},
- {0xa7, 7, 0, 0, 0xbfe51418},
- {0xbf, 3, 5, 0, 0x00000000},
- {0x57, 3, 0, 0, 0x00000008},
- {0x15, 3, 0, 1, 0x00000000},
- {0xa7, 7, 0, 0, 0x7fca2831},
- {0xbf, 3, 5, 0, 0x00000000},
- {0x57, 3, 0, 0, 0x00000004},
- {0x15, 3, 0, 1, 0x00000000},
- {0xa7, 7, 0, 0, 0xff945063},
- {0xbf, 3, 5, 0, 0x00000000},
- {0x57, 3, 0, 0, 0x00000002},
- {0x15, 3, 0, 1, 0x00000000},
- {0xa7, 7, 0, 0, 0xff28a0c6},
- {0x57, 5, 0, 0, 0x00000001},
- {0x15, 5, 0, 1, 0x00000000},
- {0xa7, 7, 0, 0, 0xfe51418c},
- {0xbf, 4, 1, 0, 0x00000000},
- {0x67, 4, 0, 0, 0x00000020},
- {0xc7, 4, 0, 0, 0x00000020},
- {0xbf, 3, 7, 0, 0x00000000},
- {0xa7, 3, 0, 0, 0xfca28319},
- {0x6d, 2, 4, 1, 0x00000000},
- {0xbf, 3, 7, 0, 0x00000000},
- {0xbf, 2, 1, 0, 0x00000000},
- {0x57, 2, 0, 0, 0x40000000},
- {0x15, 2, 0, 1, 0x00000000},
- {0xa7, 3, 0, 0, 0xf9450633},
- {0xbf, 2, 1, 0, 0x00000000},
- {0x57, 2, 0, 0, 0x20000000},
- {0x79, 6, 10, -56, 0x00000000},
- {0x15, 2, 0, 1, 0x00000000},
- {0xa7, 3, 0, 0, 0xf28a0c67},
- {0xbf, 2, 1, 0, 0x00000000},
- {0x57, 2, 0, 0, 0x10000000},
- {0x15, 2, 0, 1, 0x00000000},
- {0xa7, 3, 0, 0, 0xe51418ce},
- {0xbf, 2, 1, 0, 0x00000000},
- {0x57, 2, 0, 0, 0x08000000},
- {0x15, 2, 0, 1, 0x00000000},
- {0xa7, 3, 0, 0, 0xca28319d},
- {0xbf, 2, 1, 0, 0x00000000},
- {0x57, 2, 0, 0, 0x04000000},
- {0x15, 2, 0, 1, 0x00000000},
- {0xa7, 3, 0, 0, 0x9450633b},
- {0xbf, 2, 1, 0, 0x00000000},
- {0x57, 2, 0, 0, 0x02000000},
- {0x15, 2, 0, 1, 0x00000000},
- {0xa7, 3, 0, 0, 0x28a0c676},
- {0xbf, 2, 1, 0, 0x00000000},
- {0x57, 2, 0, 0, 0x01000000},
- {0x15, 2, 0, 1, 0x00000000},
- {0xa7, 3, 0, 0, 0x51418ced},
- {0xbf, 2, 1, 0, 0x00000000},
- {0x57, 2, 0, 0, 0x00800000},
- {0x15, 2, 0, 1, 0x00000000},
- {0xa7, 3, 0, 0, 0xa28319db},
- {0xbf, 2, 1, 0, 0x00000000},
- {0x57, 2, 0, 0, 0x00400000},
- {0x15, 2, 0, 1, 0x00000000},
- {0xa7, 3, 0, 0, 0x450633b6},
- {0xbf, 2, 1, 0, 0x00000000},
- {0x57, 2, 0, 0, 0x00200000},
- {0x15, 2, 0, 1, 0x00000000},
- {0xa7, 3, 0, 0, 0x8a0c676c},
- {0xbf, 2, 1, 0, 0x00000000},
- {0x57, 2, 0, 0, 0x00100000},
- {0x15, 2, 0, 1, 0x00000000},
- {0xa7, 3, 0, 0, 0x1418ced8},
- {0xbf, 2, 1, 0, 0x00000000},
- {0x57, 2, 0, 0, 0x00080000},
- {0x15, 2, 0, 1, 0x00000000},
- {0xa7, 3, 0, 0, 0x28319db1},
- {0xbf, 2, 1, 0, 0x00000000},
- {0x57, 2, 0, 0, 0x00040000},
- {0x15, 2, 0, 1, 0x00000000},
- {0xa7, 3, 0, 0, 0x50633b63},
- {0xbf, 2, 1, 0, 0x00000000},
- {0x57, 2, 0, 0, 0x00020000},
- {0x15, 2, 0, 1, 0x00000000},
- {0xa7, 3, 0, 0, 0xa0c676c6},
- {0xbf, 2, 1, 0, 0x00000000},
- {0x57, 2, 0, 0, 0x00010000},
- {0x15, 2, 0, 1, 0x00000000},
- {0xa7, 3, 0, 0, 0x418ced8d},
- {0xbf, 2, 1, 0, 0x00000000},
- {0x57, 2, 0, 0, 0x00008000},
- {0x15, 2, 0, 1, 0x00000000},
- {0xa7, 3, 0, 0, 0x8319db1a},
- {0xbf, 2, 1, 0, 0x00000000},
- {0x57, 2, 0, 0, 0x00004000},
- {0x15, 2, 0, 1, 0x00000000},
- {0xa7, 3, 0, 0, 0x0633b634},
- {0xbf, 2, 1, 0, 0x00000000},
- {0x57, 2, 0, 0, 0x00002000},
- {0x15, 2, 0, 1, 0x00000000},
- {0xa7, 3, 0, 0, 0x0c676c68},
- {0xbf, 2, 1, 0, 0x00000000},
- {0x57, 2, 0, 0, 0x00001000},
- {0x15, 2, 0, 1, 0x00000000},
- {0xa7, 3, 0, 0, 0x18ced8d1},
- {0xbf, 2, 1, 0, 0x00000000},
- {0x57, 2, 0, 0, 0x00000800},
- {0x15, 2, 0, 1, 0x00000000},
- {0xa7, 3, 0, 0, 0x319db1a3},
- {0xbf, 2, 1, 0, 0x00000000},
- {0x57, 2, 0, 0, 0x00000400},
- {0x15, 2, 0, 1, 0x00000000},
- {0xa7, 3, 0, 0, 0x633b6347},
- {0xbf, 2, 1, 0, 0x00000000},
- {0x57, 2, 0, 0, 0x00000200},
- {0x15, 2, 0, 1, 0x00000000},
- {0xa7, 3, 0, 0, 0xc676c68f},
- {0xbf, 2, 1, 0, 0x00000000},
- {0x57, 2, 0, 0, 0x00000100},
- {0x15, 2, 0, 1, 0x00000000},
- {0xa7, 3, 0, 0, 0x8ced8d1f},
- {0xbf, 2, 1, 0, 0x00000000},
- {0x57, 2, 0, 0, 0x00000080},
- {0x15, 2, 0, 1, 0x00000000},
- {0xa7, 3, 0, 0, 0x19db1a3e},
- {0xbf, 2, 1, 0, 0x00000000},
- {0x57, 2, 0, 0, 0x00000040},
- {0x15, 2, 0, 1, 0x00000000},
- {0xa7, 3, 0, 0, 0x33b6347d},
- {0xbf, 2, 1, 0, 0x00000000},
- {0x57, 2, 0, 0, 0x00000020},
- {0x15, 2, 0, 1, 0x00000000},
- {0xa7, 3, 0, 0, 0x676c68fa},
- {0xbf, 2, 1, 0, 0x00000000},
- {0x57, 2, 0, 0, 0x00000010},
- {0x15, 2, 0, 1, 0x00000000},
- {0xa7, 3, 0, 0, 0xced8d1f4},
- {0xbf, 2, 1, 0, 0x00000000},
- {0x57, 2, 0, 0, 0x00000008},
- {0x15, 2, 0, 1, 0x00000000},
- {0xa7, 3, 0, 0, 0x9db1a3e9},
- {0xbf, 2, 1, 0, 0x00000000},
- {0x57, 2, 0, 0, 0x00000004},
- {0x15, 2, 0, 1, 0x00000000},
- {0xa7, 3, 0, 0, 0x3b6347d2},
- {0xbf, 2, 1, 0, 0x00000000},
- {0x57, 2, 0, 0, 0x00000002},
- {0x15, 2, 0, 1, 0x00000000},
- {0xa7, 3, 0, 0, 0x76c68fa5},
- {0x57, 1, 0, 0, 0x00000001},
- {0x15, 1, 0, 1194, 0x00000000},
- {0xa7, 3, 0, 0, 0xed8d1f4a},
- {0x05, 0, 0, 1192, 0x00000000},
- {0x0f, 8, 1, 0, 0x00000000},
- {0xb7, 7, 0, 0, 0x00000000},
- {0xbf, 1, 8, 0, 0x00000000},
- {0x07, 1, 0, 0, 0x0000002c},
- {0x2d, 1, 9, 1216, 0x00000000},
- {0x61, 2, 8, 8, 0x00000000},
- {0xdc, 2, 0, 0, 0x00000040},
- {0xc7, 2, 0, 0, 0x00000020},
- {0x71, 3, 8, 6, 0x00000000},
- {0x15, 3, 0, 2, 0x00000011},
- {0xb7, 1, 0, 0, 0x00000000},
- {0x55, 3, 0, 12, 0x00000006},
- {0xbf, 3, 8, 0, 0x00000000},
- {0x07, 3, 0, 0, 0x00000028},
- {0x71, 4, 3, 0, 0x00000000},
- {0x67, 4, 0, 0, 0x00000018},
- {0x71, 1, 3, 1, 0x00000000},
- {0x67, 1, 0, 0, 0x00000010},
- {0x4f, 1, 4, 0, 0x00000000},
- {0x71, 4, 3, 3, 0x00000000},
- {0x4f, 1, 4, 0, 0x00000000},
- {0x71, 3, 3, 2, 0x00000000},
- {0x67, 3, 0, 0, 0x00000008},
- {0x4f, 1, 3, 0, 0x00000000},
- {0xbf, 4, 2, 0, 0x00000000},
- {0x77, 4, 0, 0, 0x0000001f},
- {0x57, 4, 0, 0, 0x2cc681d1},
- {0xbf, 3, 2, 0, 0x00000000},
- {0x57, 3, 0, 0, 0x40000000},
- {0x15, 3, 0, 1, 0x00000000},
- {0xa7, 4, 0, 0, 0x598d03a2},
- {0xbf, 3, 2, 0, 0x00000000},
- {0x57, 3, 0, 0, 0x20000000},
- {0x15, 3, 0, 1, 0x00000000},
- {0xa7, 4, 0, 0, 0xb31a0745},
- {0xbf, 3, 2, 0, 0x00000000},
- {0x57, 3, 0, 0, 0x10000000},
- {0x15, 3, 0, 1, 0x00000000},
- {0xa7, 4, 0, 0, 0x66340e8a},
- {0xbf, 3, 2, 0, 0x00000000},
- {0x57, 3, 0, 0, 0x08000000},
- {0x15, 3, 0, 1, 0x00000000},
- {0xa7, 4, 0, 0, 0xcc681d15},
- {0xbf, 3, 2, 0, 0x00000000},
- {0x57, 3, 0, 0, 0x04000000},
- {0x15, 3, 0, 1, 0x00000000},
- {0xa7, 4, 0, 0, 0x98d03a2b},
- {0xbf, 3, 2, 0, 0x00000000},
- {0x57, 3, 0, 0, 0x02000000},
- {0x15, 3, 0, 1, 0x00000000},
- {0xa7, 4, 0, 0, 0x31a07456},
- {0xbf, 3, 2, 0, 0x00000000},
- {0x57, 3, 0, 0, 0x01000000},
- {0x15, 3, 0, 1, 0x00000000},
- {0xa7, 4, 0, 0, 0x6340e8ad},
- {0xbf, 3, 2, 0, 0x00000000},
- {0x57, 3, 0, 0, 0x00800000},
- {0x15, 3, 0, 1, 0x00000000},
- {0xa7, 4, 0, 0, 0xc681d15b},
- {0xbf, 3, 2, 0, 0x00000000},
- {0x57, 3, 0, 0, 0x00400000},
- {0x15, 3, 0, 1, 0x00000000},
- {0xa7, 4, 0, 0, 0x8d03a2b7},
- {0xbf, 3, 2, 0, 0x00000000},
- {0x57, 3, 0, 0, 0x00200000},
- {0x15, 3, 0, 1, 0x00000000},
- {0xa7, 4, 0, 0, 0x1a07456f},
- {0xbf, 3, 2, 0, 0x00000000},
- {0x57, 3, 0, 0, 0x00100000},
- {0x15, 3, 0, 1, 0x00000000},
- {0xa7, 4, 0, 0, 0x340e8ade},
- {0xbf, 3, 2, 0, 0x00000000},
- {0x57, 3, 0, 0, 0x00080000},
- {0x15, 3, 0, 1, 0x00000000},
- {0xa7, 4, 0, 0, 0x681d15bd},
- {0xbf, 3, 2, 0, 0x00000000},
- {0x57, 3, 0, 0, 0x00040000},
- {0x15, 3, 0, 1, 0x00000000},
- {0xa7, 4, 0, 0, 0xd03a2b7b},
- {0xbf, 3, 2, 0, 0x00000000},
- {0x57, 3, 0, 0, 0x00020000},
- {0x15, 3, 0, 1, 0x00000000},
- {0xa7, 4, 0, 0, 0xa07456f6},
- {0xbf, 3, 2, 0, 0x00000000},
- {0x57, 3, 0, 0, 0x00010000},
- {0x15, 3, 0, 1, 0x00000000},
- {0xa7, 4, 0, 0, 0x40e8aded},
- {0xbf, 3, 2, 0, 0x00000000},
- {0x57, 3, 0, 0, 0x00008000},
- {0x15, 3, 0, 1, 0x00000000},
- {0xa7, 4, 0, 0, 0x81d15bdb},
- {0xbf, 3, 2, 0, 0x00000000},
- {0x57, 3, 0, 0, 0x00004000},
- {0x15, 3, 0, 1, 0x00000000},
- {0xa7, 4, 0, 0, 0x03a2b7b7},
- {0xbf, 3, 2, 0, 0x00000000},
- {0x57, 3, 0, 0, 0x00002000},
- {0x15, 3, 0, 1, 0x00000000},
- {0xa7, 4, 0, 0, 0x07456f6f},
- {0xbf, 3, 2, 0, 0x00000000},
- {0x57, 3, 0, 0, 0x00001000},
- {0x15, 3, 0, 1, 0x00000000},
- {0xa7, 4, 0, 0, 0x0e8adedf},
- {0xbf, 3, 2, 0, 0x00000000},
- {0x57, 3, 0, 0, 0x00000800},
- {0x15, 3, 0, 1, 0x00000000},
- {0xa7, 4, 0, 0, 0x1d15bdbf},
- {0xbf, 3, 2, 0, 0x00000000},
- {0x57, 3, 0, 0, 0x00000400},
- {0x15, 3, 0, 1, 0x00000000},
- {0xa7, 4, 0, 0, 0x3a2b7b7e},
- {0xbf, 3, 2, 0, 0x00000000},
- {0x57, 3, 0, 0, 0x00000200},
- {0x15, 3, 0, 1, 0x00000000},
- {0xa7, 4, 0, 0, 0x7456f6fd},
- {0xbf, 3, 2, 0, 0x00000000},
- {0x57, 3, 0, 0, 0x00000100},
- {0x15, 3, 0, 1, 0x00000000},
- {0xa7, 4, 0, 0, 0xe8adedfa},
- {0xbf, 3, 2, 0, 0x00000000},
- {0x57, 3, 0, 0, 0x00000080},
- {0x15, 3, 0, 1, 0x00000000},
- {0xa7, 4, 0, 0, 0xd15bdbf4},
- {0xbf, 3, 2, 0, 0x00000000},
- {0x57, 3, 0, 0, 0x00000040},
- {0x15, 3, 0, 1, 0x00000000},
- {0xa7, 4, 0, 0, 0xa2b7b7e9},
- {0xbf, 3, 2, 0, 0x00000000},
- {0x57, 3, 0, 0, 0x00000020},
- {0x15, 3, 0, 1, 0x00000000},
- {0xa7, 4, 0, 0, 0x456f6fd3},
- {0xbf, 3, 2, 0, 0x00000000},
- {0x57, 3, 0, 0, 0x00000010},
- {0x15, 3, 0, 1, 0x00000000},
- {0xa7, 4, 0, 0, 0x8adedfa7},
- {0xbf, 3, 2, 0, 0x00000000},
- {0x57, 3, 0, 0, 0x00000008},
- {0x15, 3, 0, 1, 0x00000000},
- {0xa7, 4, 0, 0, 0x15bdbf4f},
- {0x61, 3, 8, 12, 0x00000000},
- {0xbf, 5, 2, 0, 0x00000000},
- {0x57, 5, 0, 0, 0x00000004},
- {0x15, 5, 0, 1, 0x00000000},
- {0xa7, 4, 0, 0, 0x2b7b7e9e},
- {0xdc, 3, 0, 0, 0x00000040},
- {0xbf, 5, 2, 0, 0x00000000},
- {0x57, 5, 0, 0, 0x00000002},
- {0x15, 5, 0, 1, 0x00000000},
- {0xa7, 4, 0, 0, 0x56f6fd3d},
- {0xc7, 3, 0, 0, 0x00000020},
- {0x57, 2, 0, 0, 0x00000001},
- {0x15, 2, 0, 1, 0x00000000},
- {0xa7, 4, 0, 0, 0xadedfa7b},
- {0xb7, 2, 0, 0, 0x00000000},
- {0xbf, 5, 4, 0, 0x00000000},
- {0xa7, 5, 0, 0, 0x5bdbf4f7},
- {0x6d, 2, 3, 1, 0x00000000},
- {0xbf, 5, 4, 0, 0x00000000},
- {0xbf, 4, 3, 0, 0x00000000},
- {0x57, 4, 0, 0, 0x40000000},
- {0x15, 4, 0, 1, 0x00000000},
- {0xa7, 5, 0, 0, 0xb7b7e9ef},
- {0xbf, 4, 3, 0, 0x00000000},
- {0x57, 4, 0, 0, 0x20000000},
- {0x15, 4, 0, 1, 0x00000000},
- {0xa7, 5, 0, 0, 0x6f6fd3df},
- {0xbf, 4, 3, 0, 0x00000000},
- {0x57, 4, 0, 0, 0x10000000},
- {0x15, 4, 0, 1, 0x00000000},
- {0xa7, 5, 0, 0, 0xdedfa7bf},
- {0xbf, 4, 3, 0, 0x00000000},
- {0x57, 4, 0, 0, 0x08000000},
- {0x15, 4, 0, 1, 0x00000000},
- {0xa7, 5, 0, 0, 0xbdbf4f7f},
- {0xbf, 4, 3, 0, 0x00000000},
- {0x57, 4, 0, 0, 0x04000000},
- {0x15, 4, 0, 1, 0x00000000},
- {0xa7, 5, 0, 0, 0x7b7e9eff},
- {0xbf, 4, 3, 0, 0x00000000},
- {0x57, 4, 0, 0, 0x02000000},
- {0x15, 4, 0, 1, 0x00000000},
- {0xa7, 5, 0, 0, 0xf6fd3dff},
- {0xbf, 4, 3, 0, 0x00000000},
- {0x57, 4, 0, 0, 0x01000000},
- {0x15, 4, 0, 1, 0x00000000},
- {0xa7, 5, 0, 0, 0xedfa7bfe},
- {0xbf, 4, 3, 0, 0x00000000},
- {0x57, 4, 0, 0, 0x00800000},
- {0x15, 4, 0, 1, 0x00000000},
- {0xa7, 5, 0, 0, 0xdbf4f7fc},
- {0xbf, 4, 3, 0, 0x00000000},
- {0x57, 4, 0, 0, 0x00400000},
- {0x15, 4, 0, 1, 0x00000000},
- {0xa7, 5, 0, 0, 0xb7e9eff9},
- {0xbf, 4, 3, 0, 0x00000000},
- {0x57, 4, 0, 0, 0x00200000},
- {0x15, 4, 0, 1, 0x00000000},
- {0xa7, 5, 0, 0, 0x6fd3dff2},
- {0xbf, 4, 3, 0, 0x00000000},
- {0x57, 4, 0, 0, 0x00100000},
- {0x15, 4, 0, 1, 0x00000000},
- {0xa7, 5, 0, 0, 0xdfa7bfe5},
- {0xbf, 4, 3, 0, 0x00000000},
- {0x57, 4, 0, 0, 0x00080000},
- {0x15, 4, 0, 1, 0x00000000},
- {0xa7, 5, 0, 0, 0xbf4f7fca},
- {0xbf, 4, 3, 0, 0x00000000},
- {0x57, 4, 0, 0, 0x00040000},
- {0x15, 4, 0, 1, 0x00000000},
- {0xa7, 5, 0, 0, 0x7e9eff94},
- {0xbf, 4, 3, 0, 0x00000000},
- {0x57, 4, 0, 0, 0x00020000},
- {0x15, 4, 0, 1, 0x00000000},
- {0xa7, 5, 0, 0, 0xfd3dff28},
- {0xbf, 4, 3, 0, 0x00000000},
- {0x57, 4, 0, 0, 0x00010000},
- {0x15, 4, 0, 1, 0x00000000},
- {0xa7, 5, 0, 0, 0xfa7bfe51},
- {0xbf, 4, 3, 0, 0x00000000},
- {0x57, 4, 0, 0, 0x00008000},
- {0x15, 4, 0, 1, 0x00000000},
- {0xa7, 5, 0, 0, 0xf4f7fca2},
- {0xbf, 4, 3, 0, 0x00000000},
- {0x57, 4, 0, 0, 0x00004000},
- {0x15, 4, 0, 1, 0x00000000},
- {0xa7, 5, 0, 0, 0xe9eff945},
- {0xbf, 4, 3, 0, 0x00000000},
- {0x57, 4, 0, 0, 0x00002000},
- {0x15, 4, 0, 1, 0x00000000},
- {0xa7, 5, 0, 0, 0xd3dff28a},
- {0xbf, 4, 3, 0, 0x00000000},
- {0x57, 4, 0, 0, 0x00001000},
- {0x15, 4, 0, 1, 0x00000000},
- {0xa7, 5, 0, 0, 0xa7bfe514},
- {0xbf, 4, 3, 0, 0x00000000},
- {0x57, 4, 0, 0, 0x00000800},
- {0x15, 4, 0, 1, 0x00000000},
- {0xa7, 5, 0, 0, 0x4f7fca28},
- {0xbf, 4, 3, 0, 0x00000000},
- {0x57, 4, 0, 0, 0x00000400},
- {0x15, 4, 0, 1, 0x00000000},
- {0xa7, 5, 0, 0, 0x9eff9450},
- {0xbf, 4, 3, 0, 0x00000000},
- {0x57, 4, 0, 0, 0x00000200},
- {0x15, 4, 0, 1, 0x00000000},
- {0xa7, 5, 0, 0, 0x3dff28a0},
- {0xbf, 4, 3, 0, 0x00000000},
- {0x57, 4, 0, 0, 0x00000100},
- {0x15, 4, 0, 1, 0x00000000},
- {0xa7, 5, 0, 0, 0x7bfe5141},
- {0xbf, 4, 3, 0, 0x00000000},
- {0x57, 4, 0, 0, 0x00000080},
- {0x15, 4, 0, 1, 0x00000000},
- {0xa7, 5, 0, 0, 0xf7fca283},
- {0xbf, 4, 3, 0, 0x00000000},
- {0x57, 4, 0, 0, 0x00000040},
- {0x15, 4, 0, 1, 0x00000000},
- {0xa7, 5, 0, 0, 0xeff94506},
- {0xbf, 4, 3, 0, 0x00000000},
- {0x57, 4, 0, 0, 0x00000020},
- {0x15, 4, 0, 1, 0x00000000},
- {0xa7, 5, 0, 0, 0xdff28a0c},
- {0xbf, 4, 3, 0, 0x00000000},
- {0x57, 4, 0, 0, 0x00000010},
- {0x15, 4, 0, 1, 0x00000000},
- {0xa7, 5, 0, 0, 0xbfe51418},
- {0xbf, 4, 3, 0, 0x00000000},
- {0x57, 4, 0, 0, 0x00000008},
- {0x15, 4, 0, 1, 0x00000000},
- {0xa7, 5, 0, 0, 0x7fca2831},
- {0x61, 4, 8, 16, 0x00000000},
- {0xbf, 6, 3, 0, 0x00000000},
- {0x57, 6, 0, 0, 0x00000004},
- {0x15, 6, 0, 1, 0x00000000},
- {0xa7, 5, 0, 0, 0xff945063},
- {0xdc, 4, 0, 0, 0x00000040},
- {0xbf, 6, 3, 0, 0x00000000},
- {0x57, 6, 0, 0, 0x00000002},
- {0x15, 6, 0, 1, 0x00000000},
- {0xa7, 5, 0, 0, 0xff28a0c6},
- {0xc7, 4, 0, 0, 0x00000020},
- {0x57, 3, 0, 0, 0x00000001},
- {0x15, 3, 0, 1, 0x00000000},
- {0xa7, 5, 0, 0, 0xfe51418c},
- {0xbf, 7, 5, 0, 0x00000000},
- {0xa7, 7, 0, 0, 0xfca28319},
- {0x6d, 2, 4, 1, 0x00000000},
- {0xbf, 7, 5, 0, 0x00000000},
- {0xbf, 3, 4, 0, 0x00000000},
- {0x57, 3, 0, 0, 0x40000000},
- {0x15, 3, 0, 1, 0x00000000},
- {0xa7, 7, 0, 0, 0xf9450633},
- {0xbf, 3, 4, 0, 0x00000000},
- {0x57, 3, 0, 0, 0x20000000},
- {0x15, 3, 0, 1, 0x00000000},
- {0xa7, 7, 0, 0, 0xf28a0c67},
- {0xbf, 3, 4, 0, 0x00000000},
- {0x57, 3, 0, 0, 0x10000000},
- {0x15, 3, 0, 1, 0x00000000},
- {0xa7, 7, 0, 0, 0xe51418ce},
- {0xbf, 3, 4, 0, 0x00000000},
- {0x57, 3, 0, 0, 0x08000000},
- {0x15, 3, 0, 1, 0x00000000},
- {0xa7, 7, 0, 0, 0xca28319d},
- {0xbf, 3, 4, 0, 0x00000000},
- {0x57, 3, 0, 0, 0x04000000},
- {0x15, 3, 0, 1, 0x00000000},
- {0xa7, 7, 0, 0, 0x9450633b},
- {0xbf, 3, 4, 0, 0x00000000},
- {0x57, 3, 0, 0, 0x02000000},
- {0x15, 3, 0, 1, 0x00000000},
- {0xa7, 7, 0, 0, 0x28a0c676},
- {0xbf, 3, 4, 0, 0x00000000},
- {0x57, 3, 0, 0, 0x01000000},
- {0x15, 3, 0, 1, 0x00000000},
- {0xa7, 7, 0, 0, 0x51418ced},
- {0xbf, 3, 4, 0, 0x00000000},
- {0x57, 3, 0, 0, 0x00800000},
- {0x15, 3, 0, 1, 0x00000000},
- {0xa7, 7, 0, 0, 0xa28319db},
- {0xbf, 3, 4, 0, 0x00000000},
- {0x57, 3, 0, 0, 0x00400000},
- {0x15, 3, 0, 1, 0x00000000},
- {0xa7, 7, 0, 0, 0x450633b6},
- {0xbf, 3, 4, 0, 0x00000000},
- {0x57, 3, 0, 0, 0x00200000},
- {0x15, 3, 0, 1, 0x00000000},
- {0xa7, 7, 0, 0, 0x8a0c676c},
- {0xbf, 3, 4, 0, 0x00000000},
- {0x57, 3, 0, 0, 0x00100000},
- {0x15, 3, 0, 1, 0x00000000},
- {0xa7, 7, 0, 0, 0x1418ced8},
- {0xbf, 3, 4, 0, 0x00000000},
- {0x57, 3, 0, 0, 0x00080000},
- {0x15, 3, 0, 1, 0x00000000},
- {0xa7, 7, 0, 0, 0x28319db1},
- {0xbf, 3, 4, 0, 0x00000000},
- {0x57, 3, 0, 0, 0x00040000},
- {0x15, 3, 0, 1, 0x00000000},
- {0xa7, 7, 0, 0, 0x50633b63},
- {0xbf, 3, 4, 0, 0x00000000},
- {0x57, 3, 0, 0, 0x00020000},
- {0x15, 3, 0, 1, 0x00000000},
- {0xa7, 7, 0, 0, 0xa0c676c6},
- {0xbf, 3, 4, 0, 0x00000000},
- {0x57, 3, 0, 0, 0x00010000},
- {0x15, 3, 0, 1, 0x00000000},
- {0xa7, 7, 0, 0, 0x418ced8d},
- {0xbf, 3, 4, 0, 0x00000000},
- {0x57, 3, 0, 0, 0x00008000},
- {0x15, 3, 0, 1, 0x00000000},
- {0xa7, 7, 0, 0, 0x8319db1a},
- {0xbf, 3, 4, 0, 0x00000000},
- {0x57, 3, 0, 0, 0x00004000},
- {0x15, 3, 0, 1, 0x00000000},
- {0xa7, 7, 0, 0, 0x0633b634},
- {0xbf, 3, 4, 0, 0x00000000},
- {0x57, 3, 0, 0, 0x00002000},
- {0x15, 3, 0, 1, 0x00000000},
- {0xa7, 7, 0, 0, 0x0c676c68},
- {0xbf, 3, 4, 0, 0x00000000},
- {0x57, 3, 0, 0, 0x00001000},
- {0x15, 3, 0, 1, 0x00000000},
- {0xa7, 7, 0, 0, 0x18ced8d1},
- {0xbf, 3, 4, 0, 0x00000000},
- {0x57, 3, 0, 0, 0x00000800},
- {0x15, 3, 0, 1, 0x00000000},
- {0xa7, 7, 0, 0, 0x319db1a3},
- {0xbf, 3, 4, 0, 0x00000000},
- {0x57, 3, 0, 0, 0x00000400},
- {0x15, 3, 0, 1, 0x00000000},
- {0xa7, 7, 0, 0, 0x633b6347},
- {0xbf, 3, 4, 0, 0x00000000},
- {0x57, 3, 0, 0, 0x00000200},
- {0x15, 3, 0, 1, 0x00000000},
- {0xa7, 7, 0, 0, 0xc676c68f},
- {0xbf, 3, 4, 0, 0x00000000},
- {0x57, 3, 0, 0, 0x00000100},
- {0x15, 3, 0, 1, 0x00000000},
- {0xa7, 7, 0, 0, 0x8ced8d1f},
- {0xbf, 3, 4, 0, 0x00000000},
- {0x57, 3, 0, 0, 0x00000080},
- {0x15, 3, 0, 1, 0x00000000},
- {0xa7, 7, 0, 0, 0x19db1a3e},
- {0xbf, 3, 4, 0, 0x00000000},
- {0x57, 3, 0, 0, 0x00000040},
- {0x15, 3, 0, 1, 0x00000000},
- {0xa7, 7, 0, 0, 0x33b6347d},
- {0xbf, 3, 4, 0, 0x00000000},
- {0x57, 3, 0, 0, 0x00000020},
- {0x15, 3, 0, 1, 0x00000000},
- {0xa7, 7, 0, 0, 0x676c68fa},
- {0xbf, 3, 4, 0, 0x00000000},
- {0x57, 3, 0, 0, 0x00000010},
- {0x15, 3, 0, 1, 0x00000000},
- {0xa7, 7, 0, 0, 0xced8d1f4},
- {0xbf, 3, 4, 0, 0x00000000},
- {0x57, 3, 0, 0, 0x00000008},
- {0x15, 3, 0, 1, 0x00000000},
- {0xa7, 7, 0, 0, 0x9db1a3e9},
- {0x61, 3, 8, 20, 0x00000000},
- {0xbf, 5, 4, 0, 0x00000000},
- {0x57, 5, 0, 0, 0x00000004},
- {0x15, 5, 0, 1, 0x00000000},
- {0xa7, 7, 0, 0, 0x3b6347d2},
- {0xdc, 3, 0, 0, 0x00000040},
- {0xbf, 5, 4, 0, 0x00000000},
- {0x57, 5, 0, 0, 0x00000002},
- {0x15, 5, 0, 1, 0x00000000},
- {0xa7, 7, 0, 0, 0x76c68fa5},
- {0xc7, 3, 0, 0, 0x00000020},
- {0x57, 4, 0, 0, 0x00000001},
- {0x15, 4, 0, 1, 0x00000000},
- {0xa7, 7, 0, 0, 0xed8d1f4a},
- {0xbf, 5, 7, 0, 0x00000000},
- {0xa7, 5, 0, 0, 0xdb1a3e94},
- {0x6d, 2, 3, 1, 0x00000000},
- {0xbf, 5, 7, 0, 0x00000000},
- {0xbf, 4, 3, 0, 0x00000000},
- {0x57, 4, 0, 0, 0x40000000},
- {0x15, 4, 0, 1, 0x00000000},
- {0xa7, 5, 0, 0, 0xb6347d28},
- {0xbf, 4, 3, 0, 0x00000000},
- {0x57, 4, 0, 0, 0x20000000},
- {0x15, 4, 0, 1, 0x00000000},
- {0xa7, 5, 0, 0, 0x6c68fa51},
- {0xbf, 4, 3, 0, 0x00000000},
- {0x57, 4, 0, 0, 0x10000000},
- {0x15, 4, 0, 1, 0x00000000},
- {0xa7, 5, 0, 0, 0xd8d1f4a3},
- {0xbf, 4, 3, 0, 0x00000000},
- {0x57, 4, 0, 0, 0x08000000},
- {0x15, 4, 0, 1, 0x00000000},
- {0xa7, 5, 0, 0, 0xb1a3e946},
- {0xbf, 4, 3, 0, 0x00000000},
- {0x57, 4, 0, 0, 0x04000000},
- {0x15, 4, 0, 1, 0x00000000},
- {0xa7, 5, 0, 0, 0x6347d28d},
- {0xbf, 4, 3, 0, 0x00000000},
- {0x57, 4, 0, 0, 0x02000000},
- {0x15, 4, 0, 1, 0x00000000},
- {0xa7, 5, 0, 0, 0xc68fa51a},
- {0xbf, 4, 3, 0, 0x00000000},
- {0x57, 4, 0, 0, 0x01000000},
- {0x15, 4, 0, 1, 0x00000000},
- {0xa7, 5, 0, 0, 0x8d1f4a35},
- {0xbf, 4, 3, 0, 0x00000000},
- {0x57, 4, 0, 0, 0x00800000},
- {0x15, 4, 0, 1, 0x00000000},
- {0xa7, 5, 0, 0, 0x1a3e946b},
- {0xbf, 4, 3, 0, 0x00000000},
- {0x57, 4, 0, 0, 0x00400000},
- {0x15, 4, 0, 1, 0x00000000},
- {0xa7, 5, 0, 0, 0x347d28d7},
- {0xbf, 4, 3, 0, 0x00000000},
- {0x57, 4, 0, 0, 0x00200000},
- {0x15, 4, 0, 1, 0x00000000},
- {0xa7, 5, 0, 0, 0x68fa51ae},
- {0xbf, 4, 3, 0, 0x00000000},
- {0x57, 4, 0, 0, 0x00100000},
- {0x15, 4, 0, 1, 0x00000000},
- {0xa7, 5, 0, 0, 0xd1f4a35c},
- {0xbf, 4, 3, 0, 0x00000000},
- {0x57, 4, 0, 0, 0x00080000},
- {0x15, 4, 0, 1, 0x00000000},
- {0xa7, 5, 0, 0, 0xa3e946b9},
- {0xbf, 4, 3, 0, 0x00000000},
- {0x57, 4, 0, 0, 0x00040000},
- {0x15, 4, 0, 1, 0x00000000},
- {0xa7, 5, 0, 0, 0x47d28d73},
- {0xbf, 4, 3, 0, 0x00000000},
- {0x57, 4, 0, 0, 0x00020000},
- {0x15, 4, 0, 1, 0x00000000},
- {0xa7, 5, 0, 0, 0x8fa51ae7},
- {0xbf, 4, 3, 0, 0x00000000},
- {0x57, 4, 0, 0, 0x00010000},
- {0x15, 4, 0, 1, 0x00000000},
- {0xa7, 5, 0, 0, 0x1f4a35cf},
- {0xbf, 4, 3, 0, 0x00000000},
- {0x57, 4, 0, 0, 0x00008000},
- {0x15, 4, 0, 1, 0x00000000},
- {0xa7, 5, 0, 0, 0x3e946b9e},
- {0xbf, 4, 3, 0, 0x00000000},
- {0x57, 4, 0, 0, 0x00004000},
- {0x15, 4, 0, 1, 0x00000000},
- {0xa7, 5, 0, 0, 0x7d28d73c},
- {0xbf, 4, 3, 0, 0x00000000},
- {0x57, 4, 0, 0, 0x00002000},
- {0x15, 4, 0, 1, 0x00000000},
- {0xa7, 5, 0, 0, 0xfa51ae78},
- {0xbf, 4, 3, 0, 0x00000000},
- {0x57, 4, 0, 0, 0x00001000},
- {0x15, 4, 0, 1, 0x00000000},
- {0xa7, 5, 0, 0, 0xf4a35cf1},
- {0xbf, 4, 3, 0, 0x00000000},
- {0x57, 4, 0, 0, 0x00000800},
- {0x15, 4, 0, 1, 0x00000000},
- {0xa7, 5, 0, 0, 0xe946b9e3},
- {0xbf, 4, 3, 0, 0x00000000},
- {0x57, 4, 0, 0, 0x00000400},
- {0x15, 4, 0, 1, 0x00000000},
- {0xa7, 5, 0, 0, 0xd28d73c7},
- {0xbf, 4, 3, 0, 0x00000000},
- {0x57, 4, 0, 0, 0x00000200},
- {0x15, 4, 0, 1, 0x00000000},
- {0xa7, 5, 0, 0, 0xa51ae78e},
- {0xbf, 4, 3, 0, 0x00000000},
- {0x57, 4, 0, 0, 0x00000100},
- {0x15, 4, 0, 1, 0x00000000},
- {0xa7, 5, 0, 0, 0x4a35cf1c},
- {0xbf, 4, 3, 0, 0x00000000},
- {0x57, 4, 0, 0, 0x00000080},
- {0x15, 4, 0, 1, 0x00000000},
- {0xa7, 5, 0, 0, 0x946b9e38},
- {0xbf, 4, 3, 0, 0x00000000},
- {0x57, 4, 0, 0, 0x00000040},
- {0x15, 4, 0, 1, 0x00000000},
- {0xa7, 5, 0, 0, 0x28d73c71},
- {0xbf, 4, 3, 0, 0x00000000},
- {0x57, 4, 0, 0, 0x00000020},
- {0x15, 4, 0, 1, 0x00000000},
- {0xa7, 5, 0, 0, 0x51ae78e3},
- {0xbf, 4, 3, 0, 0x00000000},
- {0x57, 4, 0, 0, 0x00000010},
- {0x15, 4, 0, 1, 0x00000000},
- {0xa7, 5, 0, 0, 0xa35cf1c6},
- {0xbf, 4, 3, 0, 0x00000000},
- {0x57, 4, 0, 0, 0x00000008},
- {0x15, 4, 0, 1, 0x00000000},
- {0xa7, 5, 0, 0, 0x46b9e38d},
- {0x61, 4, 8, 24, 0x00000000},
- {0xbf, 6, 3, 0, 0x00000000},
- {0x57, 6, 0, 0, 0x00000004},
- {0x15, 6, 0, 1, 0x00000000},
- {0xa7, 5, 0, 0, 0x8d73c71b},
- {0xdc, 4, 0, 0, 0x00000040},
- {0xbf, 6, 3, 0, 0x00000000},
- {0x57, 6, 0, 0, 0x00000002},
- {0x15, 6, 0, 1, 0x00000000},
- {0xa7, 5, 0, 0, 0x1ae78e36},
- {0xc7, 4, 0, 0, 0x00000020},
- {0x57, 3, 0, 0, 0x00000001},
- {0x15, 3, 0, 1, 0x00000000},
- {0xa7, 5, 0, 0, 0x35cf1c6c},
- {0xbf, 7, 5, 0, 0x00000000},
- {0xa7, 7, 0, 0, 0x6b9e38d9},
- {0x6d, 2, 4, 1, 0x00000000},
- {0xbf, 7, 5, 0, 0x00000000},
- {0xbf, 3, 4, 0, 0x00000000},
- {0x57, 3, 0, 0, 0x40000000},
- {0x15, 3, 0, 1, 0x00000000},
- {0xa7, 7, 0, 0, 0xd73c71b2},
- {0xbf, 3, 4, 0, 0x00000000},
- {0x57, 3, 0, 0, 0x20000000},
- {0x15, 3, 0, 1, 0x00000000},
- {0xa7, 7, 0, 0, 0xae78e364},
- {0xbf, 3, 4, 0, 0x00000000},
- {0x57, 3, 0, 0, 0x10000000},
- {0x15, 3, 0, 1, 0x00000000},
- {0xa7, 7, 0, 0, 0x5cf1c6c9},
- {0xbf, 3, 4, 0, 0x00000000},
- {0x57, 3, 0, 0, 0x08000000},
- {0x15, 3, 0, 1, 0x00000000},
- {0xa7, 7, 0, 0, 0xb9e38d92},
- {0xbf, 3, 4, 0, 0x00000000},
- {0x57, 3, 0, 0, 0x04000000},
- {0x15, 3, 0, 1, 0x00000000},
- {0xa7, 7, 0, 0, 0x73c71b25},
- {0xbf, 3, 4, 0, 0x00000000},
- {0x57, 3, 0, 0, 0x02000000},
- {0x15, 3, 0, 1, 0x00000000},
- {0xa7, 7, 0, 0, 0xe78e364b},
- {0xbf, 3, 4, 0, 0x00000000},
- {0x57, 3, 0, 0, 0x01000000},
- {0x15, 3, 0, 1, 0x00000000},
- {0xa7, 7, 0, 0, 0xcf1c6c96},
- {0xbf, 3, 4, 0, 0x00000000},
- {0x57, 3, 0, 0, 0x00800000},
- {0x15, 3, 0, 1, 0x00000000},
- {0xa7, 7, 0, 0, 0x9e38d92c},
- {0xbf, 3, 4, 0, 0x00000000},
- {0x57, 3, 0, 0, 0x00400000},
- {0x15, 3, 0, 1, 0x00000000},
- {0xa7, 7, 0, 0, 0x3c71b259},
- {0xbf, 3, 4, 0, 0x00000000},
- {0x57, 3, 0, 0, 0x00200000},
- {0x15, 3, 0, 1, 0x00000000},
- {0xa7, 7, 0, 0, 0x78e364b2},
- {0xbf, 3, 4, 0, 0x00000000},
- {0x57, 3, 0, 0, 0x00100000},
- {0x15, 3, 0, 1, 0x00000000},
- {0xa7, 7, 0, 0, 0xf1c6c964},
- {0xbf, 3, 4, 0, 0x00000000},
- {0x57, 3, 0, 0, 0x00080000},
- {0x15, 3, 0, 1, 0x00000000},
- {0xa7, 7, 0, 0, 0xe38d92c9},
- {0xbf, 3, 4, 0, 0x00000000},
- {0x57, 3, 0, 0, 0x00040000},
- {0x15, 3, 0, 1, 0x00000000},
- {0xa7, 7, 0, 0, 0xc71b2593},
- {0xbf, 3, 4, 0, 0x00000000},
- {0x57, 3, 0, 0, 0x00020000},
- {0x15, 3, 0, 1, 0x00000000},
- {0xa7, 7, 0, 0, 0x8e364b27},
- {0xbf, 3, 4, 0, 0x00000000},
- {0x57, 3, 0, 0, 0x00010000},
- {0x15, 3, 0, 1, 0x00000000},
- {0xa7, 7, 0, 0, 0x1c6c964e},
- {0xbf, 3, 4, 0, 0x00000000},
- {0x57, 3, 0, 0, 0x00008000},
- {0x15, 3, 0, 1, 0x00000000},
- {0xa7, 7, 0, 0, 0x38d92c9c},
- {0xbf, 3, 4, 0, 0x00000000},
- {0x57, 3, 0, 0, 0x00004000},
- {0x15, 3, 0, 1, 0x00000000},
- {0xa7, 7, 0, 0, 0x71b25938},
- {0xbf, 3, 4, 0, 0x00000000},
- {0x57, 3, 0, 0, 0x00002000},
- {0x15, 3, 0, 1, 0x00000000},
- {0xa7, 7, 0, 0, 0xe364b270},
- {0xbf, 3, 4, 0, 0x00000000},
- {0x57, 3, 0, 0, 0x00001000},
- {0x15, 3, 0, 1, 0x00000000},
- {0xa7, 7, 0, 0, 0xc6c964e0},
- {0xbf, 3, 4, 0, 0x00000000},
- {0x57, 3, 0, 0, 0x00000800},
- {0x15, 3, 0, 1, 0x00000000},
- {0xa7, 7, 0, 0, 0x8d92c9c0},
- {0xbf, 3, 4, 0, 0x00000000},
- {0x57, 3, 0, 0, 0x00000400},
- {0x15, 3, 0, 1, 0x00000000},
- {0xa7, 7, 0, 0, 0x1b259380},
- {0xbf, 3, 4, 0, 0x00000000},
- {0x57, 3, 0, 0, 0x00000200},
- {0x15, 3, 0, 1, 0x00000000},
- {0xa7, 7, 0, 0, 0x364b2700},
- {0xbf, 3, 4, 0, 0x00000000},
- {0x57, 3, 0, 0, 0x00000100},
- {0x15, 3, 0, 1, 0x00000000},
- {0xa7, 7, 0, 0, 0x6c964e01},
- {0xbf, 3, 4, 0, 0x00000000},
- {0x57, 3, 0, 0, 0x00000080},
- {0x15, 3, 0, 1, 0x00000000},
- {0xa7, 7, 0, 0, 0xd92c9c03},
- {0xbf, 3, 4, 0, 0x00000000},
- {0x57, 3, 0, 0, 0x00000040},
- {0x15, 3, 0, 1, 0x00000000},
- {0xa7, 7, 0, 0, 0xb2593807},
- {0xbf, 3, 4, 0, 0x00000000},
- {0x57, 3, 0, 0, 0x00000020},
- {0x15, 3, 0, 1, 0x00000000},
- {0xa7, 7, 0, 0, 0x64b2700f},
- {0xbf, 3, 4, 0, 0x00000000},
- {0x57, 3, 0, 0, 0x00000010},
- {0x15, 3, 0, 1, 0x00000000},
- {0xa7, 7, 0, 0, 0xc964e01e},
- {0xbf, 3, 4, 0, 0x00000000},
- {0x57, 3, 0, 0, 0x00000008},
- {0x15, 3, 0, 1, 0x00000000},
- {0xa7, 7, 0, 0, 0x92c9c03d},
- {0x61, 3, 8, 28, 0x00000000},
- {0xbf, 5, 4, 0, 0x00000000},
- {0x57, 5, 0, 0, 0x00000004},
- {0x15, 5, 0, 1, 0x00000000},
- {0xa7, 7, 0, 0, 0x2593807a},
- {0xdc, 3, 0, 0, 0x00000040},
- {0xbf, 5, 4, 0, 0x00000000},
- {0x57, 5, 0, 0, 0x00000002},
- {0x15, 5, 0, 1, 0x00000000},
- {0xa7, 7, 0, 0, 0x4b2700f4},
- {0xc7, 3, 0, 0, 0x00000020},
- {0x57, 4, 0, 0, 0x00000001},
- {0x15, 4, 0, 1, 0x00000000},
- {0xa7, 7, 0, 0, 0x964e01e8},
- {0xbf, 5, 7, 0, 0x00000000},
- {0xa7, 5, 0, 0, 0x2c9c03d1},
- {0x6d, 2, 3, 1, 0x00000000},
- {0xbf, 5, 7, 0, 0x00000000},
- {0xbf, 4, 3, 0, 0x00000000},
- {0x57, 4, 0, 0, 0x40000000},
- {0x15, 4, 0, 1, 0x00000000},
- {0xa7, 5, 0, 0, 0x593807a3},
- {0xbf, 4, 3, 0, 0x00000000},
- {0x57, 4, 0, 0, 0x20000000},
- {0x15, 4, 0, 1, 0x00000000},
- {0xa7, 5, 0, 0, 0xb2700f46},
- {0xbf, 4, 3, 0, 0x00000000},
- {0x57, 4, 0, 0, 0x10000000},
- {0x15, 4, 0, 1, 0x00000000},
- {0xa7, 5, 0, 0, 0x64e01e8d},
- {0xbf, 4, 3, 0, 0x00000000},
- {0x57, 4, 0, 0, 0x08000000},
- {0x15, 4, 0, 1, 0x00000000},
- {0xa7, 5, 0, 0, 0xc9c03d1a},
- {0xbf, 4, 3, 0, 0x00000000},
- {0x57, 4, 0, 0, 0x04000000},
- {0x15, 4, 0, 1, 0x00000000},
- {0xa7, 5, 0, 0, 0x93807a35},
- {0xbf, 4, 3, 0, 0x00000000},
- {0x57, 4, 0, 0, 0x02000000},
- {0x15, 4, 0, 1, 0x00000000},
- {0xa7, 5, 0, 0, 0x2700f46b},
- {0xbf, 4, 3, 0, 0x00000000},
- {0x57, 4, 0, 0, 0x01000000},
- {0x15, 4, 0, 1, 0x00000000},
- {0xa7, 5, 0, 0, 0x4e01e8d6},
- {0xbf, 4, 3, 0, 0x00000000},
- {0x57, 4, 0, 0, 0x00800000},
- {0x15, 4, 0, 1, 0x00000000},
- {0xa7, 5, 0, 0, 0x9c03d1ad},
- {0xbf, 4, 3, 0, 0x00000000},
- {0x57, 4, 0, 0, 0x00400000},
- {0x15, 4, 0, 1, 0x00000000},
- {0xa7, 5, 0, 0, 0x3807a35b},
- {0xbf, 4, 3, 0, 0x00000000},
- {0x57, 4, 0, 0, 0x00200000},
- {0x15, 4, 0, 1, 0x00000000},
- {0xa7, 5, 0, 0, 0x700f46b6},
- {0xbf, 4, 3, 0, 0x00000000},
- {0x57, 4, 0, 0, 0x00100000},
- {0x15, 4, 0, 1, 0x00000000},
- {0xa7, 5, 0, 0, 0xe01e8d6c},
- {0xbf, 4, 3, 0, 0x00000000},
- {0x57, 4, 0, 0, 0x00080000},
- {0x15, 4, 0, 1, 0x00000000},
- {0xa7, 5, 0, 0, 0xc03d1ad9},
- {0xbf, 4, 3, 0, 0x00000000},
- {0x57, 4, 0, 0, 0x00040000},
- {0x15, 4, 0, 1, 0x00000000},
- {0xa7, 5, 0, 0, 0x807a35b3},
- {0xbf, 4, 3, 0, 0x00000000},
- {0x57, 4, 0, 0, 0x00020000},
- {0x15, 4, 0, 1, 0x00000000},
- {0xa7, 5, 0, 0, 0x00f46b66},
- {0xbf, 4, 3, 0, 0x00000000},
- {0x57, 4, 0, 0, 0x00010000},
- {0x15, 4, 0, 1, 0x00000000},
- {0xa7, 5, 0, 0, 0x01e8d6cc},
- {0xbf, 4, 3, 0, 0x00000000},
- {0x57, 4, 0, 0, 0x00008000},
- {0x15, 4, 0, 1, 0x00000000},
- {0xa7, 5, 0, 0, 0x03d1ad99},
- {0xbf, 4, 3, 0, 0x00000000},
- {0x57, 4, 0, 0, 0x00004000},
- {0x15, 4, 0, 1, 0x00000000},
- {0xa7, 5, 0, 0, 0x07a35b32},
- {0xbf, 4, 3, 0, 0x00000000},
- {0x57, 4, 0, 0, 0x00002000},
- {0x15, 4, 0, 1, 0x00000000},
- {0xa7, 5, 0, 0, 0x0f46b665},
- {0xbf, 4, 3, 0, 0x00000000},
- {0x57, 4, 0, 0, 0x00001000},
- {0x15, 4, 0, 1, 0x00000000},
- {0xa7, 5, 0, 0, 0x1e8d6cca},
- {0xbf, 4, 3, 0, 0x00000000},
- {0x57, 4, 0, 0, 0x00000800},
- {0x15, 4, 0, 1, 0x00000000},
- {0xa7, 5, 0, 0, 0x3d1ad994},
- {0xbf, 4, 3, 0, 0x00000000},
- {0x57, 4, 0, 0, 0x00000400},
- {0x15, 4, 0, 1, 0x00000000},
- {0xa7, 5, 0, 0, 0x7a35b328},
- {0xbf, 4, 3, 0, 0x00000000},
- {0x57, 4, 0, 0, 0x00000200},
- {0x15, 4, 0, 1, 0x00000000},
- {0xa7, 5, 0, 0, 0xf46b6651},
- {0xbf, 4, 3, 0, 0x00000000},
- {0x57, 4, 0, 0, 0x00000100},
- {0x15, 4, 0, 1, 0x00000000},
- {0xa7, 5, 0, 0, 0xe8d6cca2},
- {0xbf, 4, 3, 0, 0x00000000},
- {0x57, 4, 0, 0, 0x00000080},
- {0x15, 4, 0, 1, 0x00000000},
- {0xa7, 5, 0, 0, 0xd1ad9944},
- {0xbf, 4, 3, 0, 0x00000000},
- {0x57, 4, 0, 0, 0x00000040},
- {0x15, 4, 0, 1, 0x00000000},
- {0xa7, 5, 0, 0, 0xa35b3289},
- {0xbf, 4, 3, 0, 0x00000000},
- {0x57, 4, 0, 0, 0x00000020},
- {0x15, 4, 0, 1, 0x00000000},
- {0xa7, 5, 0, 0, 0x46b66512},
- {0xbf, 4, 3, 0, 0x00000000},
- {0x57, 4, 0, 0, 0x00000010},
- {0x15, 4, 0, 1, 0x00000000},
- {0xa7, 5, 0, 0, 0x8d6cca25},
- {0xbf, 4, 3, 0, 0x00000000},
- {0x57, 4, 0, 0, 0x00000008},
- {0x15, 4, 0, 1, 0x00000000},
- {0xa7, 5, 0, 0, 0x1ad9944a},
- {0x61, 4, 8, 32, 0x00000000},
- {0xbf, 6, 3, 0, 0x00000000},
- {0x57, 6, 0, 0, 0x00000004},
- {0x15, 6, 0, 1, 0x00000000},
- {0xa7, 5, 0, 0, 0x35b32894},
- {0xdc, 4, 0, 0, 0x00000040},
- {0xbf, 6, 3, 0, 0x00000000},
- {0x57, 6, 0, 0, 0x00000002},
- {0x15, 6, 0, 1, 0x00000000},
- {0xa7, 5, 0, 0, 0x6b665129},
- {0xc7, 4, 0, 0, 0x00000020},
- {0x57, 3, 0, 0, 0x00000001},
- {0x15, 3, 0, 1, 0x00000000},
- {0xa7, 5, 0, 0, 0xd6cca253},
- {0xbf, 7, 5, 0, 0x00000000},
- {0xa7, 7, 0, 0, 0xad9944a7},
- {0x6d, 2, 4, 1, 0x00000000},
- {0xbf, 7, 5, 0, 0x00000000},
- {0xbf, 3, 4, 0, 0x00000000},
- {0x57, 3, 0, 0, 0x40000000},
- {0x15, 3, 0, 1, 0x00000000},
- {0xa7, 7, 0, 0, 0x5b32894f},
- {0xbf, 3, 4, 0, 0x00000000},
- {0x57, 3, 0, 0, 0x20000000},
- {0x15, 3, 0, 1, 0x00000000},
- {0xa7, 7, 0, 0, 0xb665129f},
- {0xbf, 3, 4, 0, 0x00000000},
- {0x57, 3, 0, 0, 0x10000000},
- {0x15, 3, 0, 1, 0x00000000},
- {0xa7, 7, 0, 0, 0x6cca253e},
- {0xbf, 3, 4, 0, 0x00000000},
- {0x57, 3, 0, 0, 0x08000000},
- {0x15, 3, 0, 1, 0x00000000},
- {0xa7, 7, 0, 0, 0xd9944a7d},
- {0xbf, 3, 4, 0, 0x00000000},
- {0x57, 3, 0, 0, 0x04000000},
- {0x15, 3, 0, 1, 0x00000000},
- {0xa7, 7, 0, 0, 0xb32894fb},
- {0xbf, 3, 4, 0, 0x00000000},
- {0x57, 3, 0, 0, 0x02000000},
- {0x15, 3, 0, 1, 0x00000000},
- {0xa7, 7, 0, 0, 0x665129f6},
- {0xbf, 3, 4, 0, 0x00000000},
- {0x57, 3, 0, 0, 0x01000000},
- {0x15, 3, 0, 1, 0x00000000},
- {0xa7, 7, 0, 0, 0xcca253ec},
- {0xbf, 3, 4, 0, 0x00000000},
- {0x57, 3, 0, 0, 0x00800000},
- {0x15, 3, 0, 1, 0x00000000},
- {0xa7, 7, 0, 0, 0x9944a7d9},
- {0xbf, 3, 4, 0, 0x00000000},
- {0x57, 3, 0, 0, 0x00400000},
- {0x15, 3, 0, 1, 0x00000000},
- {0xa7, 7, 0, 0, 0x32894fb2},
- {0xbf, 3, 4, 0, 0x00000000},
- {0x57, 3, 0, 0, 0x00200000},
- {0x15, 3, 0, 1, 0x00000000},
- {0xa7, 7, 0, 0, 0x65129f65},
- {0xbf, 3, 4, 0, 0x00000000},
- {0x57, 3, 0, 0, 0x00100000},
- {0x15, 3, 0, 1, 0x00000000},
- {0xa7, 7, 0, 0, 0xca253eca},
- {0xbf, 3, 4, 0, 0x00000000},
- {0x57, 3, 0, 0, 0x00080000},
- {0x15, 3, 0, 1, 0x00000000},
- {0xa7, 7, 0, 0, 0x944a7d95},
- {0xbf, 3, 4, 0, 0x00000000},
- {0x57, 3, 0, 0, 0x00040000},
- {0x15, 3, 0, 1, 0x00000000},
- {0xa7, 7, 0, 0, 0x2894fb2a},
- {0xbf, 3, 4, 0, 0x00000000},
- {0x57, 3, 0, 0, 0x00020000},
- {0x15, 3, 0, 1, 0x00000000},
- {0xa7, 7, 0, 0, 0x5129f655},
- {0xbf, 3, 4, 0, 0x00000000},
- {0x57, 3, 0, 0, 0x00010000},
- {0x15, 3, 0, 1, 0x00000000},
- {0xa7, 7, 0, 0, 0xa253ecab},
- {0xbf, 3, 4, 0, 0x00000000},
- {0x57, 3, 0, 0, 0x00008000},
- {0x15, 3, 0, 1, 0x00000000},
- {0xa7, 7, 0, 0, 0x44a7d956},
- {0xbf, 3, 4, 0, 0x00000000},
- {0x57, 3, 0, 0, 0x00004000},
- {0x15, 3, 0, 1, 0x00000000},
- {0xa7, 7, 0, 0, 0x894fb2ac},
- {0xbf, 3, 4, 0, 0x00000000},
- {0x57, 3, 0, 0, 0x00002000},
- {0x15, 3, 0, 1, 0x00000000},
- {0xa7, 7, 0, 0, 0x129f6558},
- {0xbf, 3, 4, 0, 0x00000000},
- {0x57, 3, 0, 0, 0x00001000},
- {0x15, 3, 0, 1, 0x00000000},
- {0xa7, 7, 0, 0, 0x253ecab1},
- {0xbf, 3, 4, 0, 0x00000000},
- {0x57, 3, 0, 0, 0x00000800},
- {0x15, 3, 0, 1, 0x00000000},
- {0xa7, 7, 0, 0, 0x4a7d9563},
- {0xbf, 3, 4, 0, 0x00000000},
- {0x57, 3, 0, 0, 0x00000400},
- {0x15, 3, 0, 1, 0x00000000},
- {0xa7, 7, 0, 0, 0x94fb2ac7},
- {0xbf, 3, 4, 0, 0x00000000},
- {0x57, 3, 0, 0, 0x00000200},
- {0x15, 3, 0, 1, 0x00000000},
- {0xa7, 7, 0, 0, 0x29f6558f},
- {0xbf, 3, 4, 0, 0x00000000},
- {0x57, 3, 0, 0, 0x00000100},
- {0x15, 3, 0, 1, 0x00000000},
- {0xa7, 7, 0, 0, 0x53ecab1e},
- {0xbf, 3, 4, 0, 0x00000000},
- {0x57, 3, 0, 0, 0x00000080},
- {0x15, 3, 0, 1, 0x00000000},
- {0xa7, 7, 0, 0, 0xa7d9563d},
- {0xbf, 3, 4, 0, 0x00000000},
- {0x57, 3, 0, 0, 0x00000040},
- {0x15, 3, 0, 1, 0x00000000},
- {0xa7, 7, 0, 0, 0x4fb2ac7a},
- {0xbf, 3, 4, 0, 0x00000000},
- {0x57, 3, 0, 0, 0x00000020},
- {0x15, 3, 0, 1, 0x00000000},
- {0xa7, 7, 0, 0, 0x9f6558f5},
- {0xbf, 3, 4, 0, 0x00000000},
- {0x57, 3, 0, 0, 0x00000010},
- {0x15, 3, 0, 1, 0x00000000},
- {0xa7, 7, 0, 0, 0x3ecab1ea},
- {0xbf, 3, 4, 0, 0x00000000},
- {0x57, 3, 0, 0, 0x00000008},
- {0x15, 3, 0, 1, 0x00000000},
- {0xa7, 7, 0, 0, 0x7d9563d5},
- {0x61, 3, 8, 36, 0x00000000},
- {0xbf, 5, 4, 0, 0x00000000},
- {0x57, 5, 0, 0, 0x00000004},
- {0x15, 5, 0, 1, 0x00000000},
- {0xa7, 7, 0, 0, 0xfb2ac7ab},
- {0xdc, 3, 0, 0, 0x00000040},
- {0xbf, 5, 4, 0, 0x00000000},
- {0x57, 5, 0, 0, 0x00000002},
- {0x15, 5, 0, 1, 0x00000000},
- {0xa7, 7, 0, 0, 0xf6558f56},
- {0xc7, 3, 0, 0, 0x00000020},
- {0x57, 4, 0, 0, 0x00000001},
- {0x15, 4, 0, 1, 0x00000000},
- {0xa7, 7, 0, 0, 0xecab1eac},
- {0xbf, 4, 7, 0, 0x00000000},
- {0xa7, 4, 0, 0, 0xd9563d59},
- {0x6d, 2, 3, 1, 0x00000000},
- {0xbf, 4, 7, 0, 0x00000000},
- {0xbf, 5, 3, 0, 0x00000000},
- {0x57, 5, 0, 0, 0x40000000},
- {0x15, 5, 0, 1, 0x00000000},
- {0xa7, 4, 0, 0, 0xb2ac7ab2},
- {0xbf, 5, 3, 0, 0x00000000},
- {0x57, 5, 0, 0, 0x20000000},
- {0x79, 6, 10, -56, 0x00000000},
- {0x15, 5, 0, 1, 0x00000000},
- {0xa7, 4, 0, 0, 0x6558f564},
- {0xbf, 5, 3, 0, 0x00000000},
- {0x57, 5, 0, 0, 0x10000000},
- {0x15, 5, 0, 1, 0x00000000},
- {0xa7, 4, 0, 0, 0xcab1eac8},
- {0xbf, 5, 3, 0, 0x00000000},
- {0x57, 5, 0, 0, 0x08000000},
- {0x15, 5, 0, 1, 0x00000000},
- {0xa7, 4, 0, 0, 0x9563d590},
- {0xbf, 5, 3, 0, 0x00000000},
- {0x57, 5, 0, 0, 0x04000000},
- {0x15, 5, 0, 1, 0x00000000},
- {0xa7, 4, 0, 0, 0x2ac7ab20},
- {0xbf, 5, 3, 0, 0x00000000},
- {0x57, 5, 0, 0, 0x02000000},
- {0x15, 5, 0, 1, 0x00000000},
- {0xa7, 4, 0, 0, 0x558f5641},
- {0xbf, 5, 3, 0, 0x00000000},
- {0x57, 5, 0, 0, 0x01000000},
- {0x15, 5, 0, 1, 0x00000000},
- {0xa7, 4, 0, 0, 0xab1eac83},
- {0xbf, 5, 3, 0, 0x00000000},
- {0x57, 5, 0, 0, 0x00800000},
- {0x15, 5, 0, 1, 0x00000000},
- {0xa7, 4, 0, 0, 0x563d5906},
- {0xbf, 5, 3, 0, 0x00000000},
- {0x57, 5, 0, 0, 0x00400000},
- {0x15, 5, 0, 1, 0x00000000},
- {0xa7, 4, 0, 0, 0xac7ab20c},
- {0xbf, 5, 3, 0, 0x00000000},
- {0x57, 5, 0, 0, 0x00200000},
- {0x15, 5, 0, 1, 0x00000000},
- {0xa7, 4, 0, 0, 0x58f56418},
- {0xbf, 5, 3, 0, 0x00000000},
- {0x57, 5, 0, 0, 0x00100000},
- {0x15, 5, 0, 1, 0x00000000},
- {0xa7, 4, 0, 0, 0xb1eac831},
- {0xbf, 5, 3, 0, 0x00000000},
- {0x57, 5, 0, 0, 0x00080000},
- {0x15, 5, 0, 1, 0x00000000},
- {0xa7, 4, 0, 0, 0x63d59063},
- {0xbf, 5, 3, 0, 0x00000000},
- {0x57, 5, 0, 0, 0x00040000},
- {0x15, 5, 0, 1, 0x00000000},
- {0xa7, 4, 0, 0, 0xc7ab20c7},
- {0xbf, 5, 3, 0, 0x00000000},
- {0x57, 5, 0, 0, 0x00020000},
- {0x15, 5, 0, 1, 0x00000000},
- {0xa7, 4, 0, 0, 0x8f56418f},
- {0xbf, 5, 3, 0, 0x00000000},
- {0x57, 5, 0, 0, 0x00010000},
- {0x15, 5, 0, 1, 0x00000000},
- {0xa7, 4, 0, 0, 0x1eac831e},
- {0xbf, 5, 3, 0, 0x00000000},
- {0x57, 5, 0, 0, 0x00008000},
- {0x15, 5, 0, 1, 0x00000000},
- {0xa7, 4, 0, 0, 0x3d59063c},
- {0xbf, 5, 3, 0, 0x00000000},
- {0x57, 5, 0, 0, 0x00004000},
- {0x15, 5, 0, 1, 0x00000000},
- {0xa7, 4, 0, 0, 0x7ab20c78},
- {0xbf, 5, 3, 0, 0x00000000},
- {0x57, 5, 0, 0, 0x00002000},
- {0x15, 5, 0, 1, 0x00000000},
- {0xa7, 4, 0, 0, 0xf56418f0},
- {0xbf, 5, 3, 0, 0x00000000},
- {0x57, 5, 0, 0, 0x00001000},
- {0x15, 5, 0, 1, 0x00000000},
- {0xa7, 4, 0, 0, 0xeac831e1},
- {0xbf, 5, 3, 0, 0x00000000},
- {0x57, 5, 0, 0, 0x00000800},
- {0x15, 5, 0, 1, 0x00000000},
- {0xa7, 4, 0, 0, 0xd59063c2},
- {0xbf, 5, 3, 0, 0x00000000},
- {0x57, 5, 0, 0, 0x00000400},
- {0x15, 5, 0, 1, 0x00000000},
- {0xa7, 4, 0, 0, 0xab20c784},
- {0xbf, 5, 3, 0, 0x00000000},
- {0x57, 5, 0, 0, 0x00000200},
- {0x15, 5, 0, 1, 0x00000000},
- {0xa7, 4, 0, 0, 0x56418f09},
- {0xbf, 5, 3, 0, 0x00000000},
- {0x57, 5, 0, 0, 0x00000100},
- {0x15, 5, 0, 1, 0x00000000},
- {0xa7, 4, 0, 0, 0xac831e12},
- {0xbf, 5, 3, 0, 0x00000000},
- {0x57, 5, 0, 0, 0x00000080},
- {0x15, 5, 0, 1, 0x00000000},
- {0xa7, 4, 0, 0, 0x59063c25},
- {0xbf, 5, 3, 0, 0x00000000},
- {0x57, 5, 0, 0, 0x00000040},
- {0x15, 5, 0, 1, 0x00000000},
- {0xa7, 4, 0, 0, 0xb20c784b},
- {0xbf, 5, 3, 0, 0x00000000},
- {0x57, 5, 0, 0, 0x00000020},
- {0x15, 5, 0, 1, 0x00000000},
- {0xa7, 4, 0, 0, 0x6418f097},
- {0xbf, 5, 3, 0, 0x00000000},
- {0x57, 5, 0, 0, 0x00000010},
- {0x15, 5, 0, 1, 0x00000000},
- {0xa7, 4, 0, 0, 0xc831e12f},
- {0xbf, 5, 3, 0, 0x00000000},
- {0x57, 5, 0, 0, 0x00000008},
- {0x15, 5, 0, 1, 0x00000000},
- {0xa7, 4, 0, 0, 0x9063c25f},
- {0xbf, 5, 3, 0, 0x00000000},
- {0x57, 5, 0, 0, 0x00000004},
- {0x15, 5, 0, 1, 0x00000000},
- {0xa7, 4, 0, 0, 0x20c784be},
- {0xbf, 5, 3, 0, 0x00000000},
- {0x57, 5, 0, 0, 0x00000002},
- {0x15, 5, 0, 1, 0x00000000},
- {0xa7, 4, 0, 0, 0x418f097c},
- {0x57, 3, 0, 0, 0x00000001},
- {0x15, 3, 0, 1, 0x00000000},
- {0xa7, 4, 0, 0, 0x831e12f9},
- {0xbf, 5, 1, 0, 0x00000000},
- {0x67, 5, 0, 0, 0x00000020},
- {0xc7, 5, 0, 0, 0x00000020},
- {0xbf, 3, 4, 0, 0x00000000},
- {0xa7, 3, 0, 0, 0x063c25f3},
- {0x6d, 2, 5, 1, 0x00000000},
- {0xbf, 3, 4, 0, 0x00000000},
- {0xbf, 2, 1, 0, 0x00000000},
- {0x57, 2, 0, 0, 0x40000000},
- {0x15, 2, 0, 1, 0x00000000},
- {0xa7, 3, 0, 0, 0x0c784be7},
- {0xbf, 2, 1, 0, 0x00000000},
- {0x57, 2, 0, 0, 0x20000000},
- {0x15, 2, 0, 1, 0x00000000},
- {0xa7, 3, 0, 0, 0x18f097cf},
- {0xbf, 2, 1, 0, 0x00000000},
- {0x57, 2, 0, 0, 0x10000000},
- {0x15, 2, 0, 1, 0x00000000},
- {0xa7, 3, 0, 0, 0x31e12f9f},
- {0xbf, 2, 1, 0, 0x00000000},
- {0x57, 2, 0, 0, 0x08000000},
- {0x15, 2, 0, 1, 0x00000000},
- {0xa7, 3, 0, 0, 0x63c25f3f},
- {0xbf, 2, 1, 0, 0x00000000},
- {0x57, 2, 0, 0, 0x04000000},
- {0x15, 2, 0, 1, 0x00000000},
- {0xa7, 3, 0, 0, 0xc784be7f},
- {0xbf, 2, 1, 0, 0x00000000},
- {0x57, 2, 0, 0, 0x02000000},
- {0x15, 2, 0, 1, 0x00000000},
- {0xa7, 3, 0, 0, 0x8f097cff},
- {0xbf, 2, 1, 0, 0x00000000},
- {0x57, 2, 0, 0, 0x01000000},
- {0x15, 2, 0, 1, 0x00000000},
- {0xa7, 3, 0, 0, 0x1e12f9fe},
- {0xbf, 2, 1, 0, 0x00000000},
- {0x57, 2, 0, 0, 0x00800000},
- {0x15, 2, 0, 1, 0x00000000},
- {0xa7, 3, 0, 0, 0x3c25f3fc},
- {0xbf, 2, 1, 0, 0x00000000},
- {0x57, 2, 0, 0, 0x00400000},
- {0x15, 2, 0, 1, 0x00000000},
- {0xa7, 3, 0, 0, 0x784be7f8},
- {0xbf, 2, 1, 0, 0x00000000},
- {0x57, 2, 0, 0, 0x00200000},
- {0x15, 2, 0, 1, 0x00000000},
- {0xa7, 3, 0, 0, 0xf097cff0},
- {0xbf, 2, 1, 0, 0x00000000},
- {0x57, 2, 0, 0, 0x00100000},
- {0x15, 2, 0, 1, 0x00000000},
- {0xa7, 3, 0, 0, 0xe12f9fe0},
- {0xbf, 2, 1, 0, 0x00000000},
- {0x57, 2, 0, 0, 0x00080000},
- {0x15, 2, 0, 1, 0x00000000},
- {0xa7, 3, 0, 0, 0xc25f3fc1},
- {0xbf, 2, 1, 0, 0x00000000},
- {0x57, 2, 0, 0, 0x00040000},
- {0x15, 2, 0, 1, 0x00000000},
- {0xa7, 3, 0, 0, 0x84be7f83},
- {0xbf, 2, 1, 0, 0x00000000},
- {0x57, 2, 0, 0, 0x00020000},
- {0x15, 2, 0, 1, 0x00000000},
- {0xa7, 3, 0, 0, 0x097cff07},
- {0xbf, 2, 1, 0, 0x00000000},
- {0x57, 2, 0, 0, 0x00010000},
- {0x15, 2, 0, 1, 0x00000000},
- {0xa7, 3, 0, 0, 0x12f9fe0f},
- {0xbf, 2, 1, 0, 0x00000000},
- {0x57, 2, 0, 0, 0x00008000},
- {0x15, 2, 0, 1, 0x00000000},
- {0xa7, 3, 0, 0, 0x25f3fc1f},
- {0xbf, 2, 1, 0, 0x00000000},
- {0x57, 2, 0, 0, 0x00004000},
- {0x15, 2, 0, 1, 0x00000000},
- {0xa7, 3, 0, 0, 0x4be7f83f},
- {0xbf, 2, 1, 0, 0x00000000},
- {0x57, 2, 0, 0, 0x00002000},
- {0x15, 2, 0, 1, 0x00000000},
- {0xa7, 3, 0, 0, 0x97cff07f},
- {0xbf, 2, 1, 0, 0x00000000},
- {0x57, 2, 0, 0, 0x00001000},
- {0x15, 2, 0, 1, 0x00000000},
- {0xa7, 3, 0, 0, 0x2f9fe0fe},
- {0xbf, 2, 1, 0, 0x00000000},
- {0x57, 2, 0, 0, 0x00000800},
- {0x15, 2, 0, 1, 0x00000000},
- {0xa7, 3, 0, 0, 0x5f3fc1fd},
- {0xbf, 2, 1, 0, 0x00000000},
- {0x57, 2, 0, 0, 0x00000400},
- {0x15, 2, 0, 1, 0x00000000},
- {0xa7, 3, 0, 0, 0xbe7f83fb},
- {0xbf, 2, 1, 0, 0x00000000},
- {0x57, 2, 0, 0, 0x00000200},
- {0x15, 2, 0, 1, 0x00000000},
- {0xa7, 3, 0, 0, 0x7cff07f7},
- {0xbf, 2, 1, 0, 0x00000000},
- {0x57, 2, 0, 0, 0x00000100},
- {0x15, 2, 0, 1, 0x00000000},
- {0xa7, 3, 0, 0, 0xf9fe0fee},
- {0xbf, 2, 1, 0, 0x00000000},
- {0x57, 2, 0, 0, 0x00000080},
- {0x15, 2, 0, 1, 0x00000000},
- {0xa7, 3, 0, 0, 0xf3fc1fdc},
- {0xbf, 2, 1, 0, 0x00000000},
- {0x57, 2, 0, 0, 0x00000040},
- {0x15, 2, 0, 1, 0x00000000},
- {0xa7, 3, 0, 0, 0xe7f83fb8},
- {0xbf, 2, 1, 0, 0x00000000},
- {0x57, 2, 0, 0, 0x00000020},
- {0x15, 2, 0, 1, 0x00000000},
- {0xa7, 3, 0, 0, 0xcff07f70},
- {0xbf, 2, 1, 0, 0x00000000},
- {0x57, 2, 0, 0, 0x00000010},
- {0x15, 2, 0, 1, 0x00000000},
- {0xa7, 3, 0, 0, 0x9fe0fee1},
- {0xbf, 2, 1, 0, 0x00000000},
- {0x57, 2, 0, 0, 0x00000008},
- {0x15, 2, 0, 1, 0x00000000},
- {0xa7, 3, 0, 0, 0x3fc1fdc2},
- {0xbf, 2, 1, 0, 0x00000000},
- {0x57, 2, 0, 0, 0x00000004},
- {0x15, 2, 0, 1, 0x00000000},
- {0xa7, 3, 0, 0, 0x7f83fb85},
- {0xbf, 2, 1, 0, 0x00000000},
- {0x57, 2, 0, 0, 0x00000002},
- {0x15, 2, 0, 1, 0x00000000},
- {0xa7, 3, 0, 0, 0xff07f70a},
- {0x57, 1, 0, 0, 0x00000001},
- {0x15, 1, 0, 1, 0x00000000},
- {0xa7, 3, 0, 0, 0xfe0fee15},
- {0x71, 1, 0, 201, 0x00000000},
- {0x67, 1, 0, 0, 0x00000008},
- {0x71, 2, 0, 200, 0x00000000},
- {0x4f, 1, 2, 0, 0x00000000},
- {0x71, 2, 0, 202, 0x00000000},
- {0x67, 2, 0, 0, 0x00000010},
- {0x71, 4, 0, 203, 0x00000000},
- {0x67, 4, 0, 0, 0x00000018},
- {0x4f, 4, 2, 0, 0x00000000},
- {0x4f, 4, 1, 0, 0x00000000},
- {0x67, 3, 0, 0, 0x00000020},
- {0x77, 3, 0, 0, 0x00000020},
- {0x9f, 3, 4, 0, 0x00000000},
- {0x57, 3, 0, 0, 0x0000000f},
- {0x67, 3, 0, 0, 0x00000002},
- {0x0f, 0, 3, 0, 0x00000000},
- {0x71, 1, 0, 137, 0x00000000},
- {0x67, 1, 0, 0, 0x00000008},
- {0x71, 2, 0, 136, 0x00000000},
- {0x4f, 1, 2, 0, 0x00000000},
- {0x71, 2, 0, 138, 0x00000000},
- {0x67, 2, 0, 0, 0x00000010},
- {0x71, 3, 0, 139, 0x00000000},
- {0x67, 3, 0, 0, 0x00000018},
- {0x4f, 3, 2, 0, 0x00000000},
- {0x4f, 3, 1, 0, 0x00000000},
- {0x07, 3, 0, 0, 0x7cafe800},
- {0x63, 6, 3, 52, 0x00000000},
- {0xb7, 7, 0, 0, 0x00000001},
- {0xbf, 0, 7, 0, 0x00000000},
- {0x95, 0, 0, 0, 0x00000000},
-};
diff --git a/drivers/net/tap/tap_flow.c b/drivers/net/tap/tap_flow.c
index ed4d42f92f9f..84e816d80043 100644
--- a/drivers/net/tap/tap_flow.c
+++ b/drivers/net/tap/tap_flow.c
@@ -56,71 +56,6 @@ enum {
TCA_FLOWER_KEY_VLAN_ETH_TYPE, /* be16 */
};
#endif
-/*
- * For kernels < 4.2 BPF related enums may not be defined.
- * Runtime checks will be carried out to gracefully report on TC messages that
- * are rejected by the kernel. Rejection reasons may be due to:
- * 1. enum is not defined
- * 2. enum is defined but kernel is not configured to support BPF system calls,
- * BPF classifications or BPF actions.
- */
-#ifndef HAVE_TC_BPF
-enum {
- TCA_BPF_UNSPEC,
- TCA_BPF_ACT,
- TCA_BPF_POLICE,
- TCA_BPF_CLASSID,
- TCA_BPF_OPS_LEN,
- TCA_BPF_OPS,
-};
-#endif
-#ifndef HAVE_TC_BPF_FD
-enum {
- TCA_BPF_FD = TCA_BPF_OPS + 1,
- TCA_BPF_NAME,
-};
-#endif
-#ifndef HAVE_TC_ACT_BPF
-#define tc_gen \
- __u32 index; \
- __u32 capab; \
- int action; \
- int refcnt; \
- int bindcnt
-
-struct tc_act_bpf {
- tc_gen;
-};
-
-enum {
- TCA_ACT_BPF_UNSPEC,
- TCA_ACT_BPF_TM,
- TCA_ACT_BPF_PARMS,
- TCA_ACT_BPF_OPS_LEN,
- TCA_ACT_BPF_OPS,
-};
-
-#endif
-#ifndef HAVE_TC_ACT_BPF_FD
-enum {
- TCA_ACT_BPF_FD = TCA_ACT_BPF_OPS + 1,
- TCA_ACT_BPF_NAME,
-};
-#endif
-
-/* RSS key management */
-enum bpf_rss_key_e {
- KEY_CMD_GET = 1,
- KEY_CMD_RELEASE,
- KEY_CMD_INIT,
- KEY_CMD_DEINIT,
-};
-
-enum key_status_e {
- KEY_STAT_UNSPEC,
- KEY_STAT_USED,
- KEY_STAT_AVAILABLE,
-};
#define ISOLATE_HANDLE 1
#define REMOTE_PROMISCUOUS_HANDLE 2
@@ -128,8 +63,6 @@ enum key_status_e {
struct rte_flow {
LIST_ENTRY(rte_flow) next; /* Pointer to the next rte_flow structure */
struct rte_flow *remote_flow; /* associated remote flow */
- int bpf_fd[SEC_MAX]; /* list of bfs fds per ELF section */
- uint32_t key_idx; /* RSS rule key index into BPF map */
struct nlmsg msg;
};
@@ -157,11 +90,6 @@ struct action_data {
struct tc_skbedit skbedit;
uint16_t queue;
} skbedit;
- struct bpf {
- struct tc_act_bpf bpf;
- int bpf_fd;
- const char *annotation;
- } bpf;
};
};
@@ -185,10 +113,6 @@ tap_flow_create(struct rte_eth_dev *dev,
const struct rte_flow_action actions[],
struct rte_flow_error *error);
-static void
-tap_flow_free(struct pmd_internals *pmd,
- struct rte_flow *flow);
-
static int
tap_flow_destroy(struct rte_eth_dev *dev,
struct rte_flow *flow,
@@ -199,14 +123,6 @@ tap_flow_isolate(struct rte_eth_dev *dev,
int set,
struct rte_flow_error *error);
-static int bpf_rss_key(enum bpf_rss_key_e cmd, __u32 *key_idx);
-static int rss_enable(struct pmd_internals *pmd,
- const struct rte_flow_attr *attr,
- struct rte_flow_error *error);
-static int rss_add_actions(struct rte_flow *flow, struct pmd_internals *pmd,
- const struct rte_flow_action_rss *rss,
- struct rte_flow_error *error);
-
static const struct rte_flow_ops tap_flow_ops = {
.validate = tap_flow_validate,
.create = tap_flow_create,
@@ -901,7 +817,7 @@ tap_flow_item_validate(const struct rte_flow_item *item,
/**
* Configure the kernel with a TC action and its configured parameters
- * Handled actions: "gact", "mirred", "skbedit", "bpf"
+ * Handled actions: "gact", "mirred", "skbedit"
*
* @param[in] flow
* Pointer to rte flow containing the netlink message
@@ -944,14 +860,6 @@ add_action(struct rte_flow *flow, size_t *act_index, struct action_data *adata)
&adata->skbedit.skbedit);
tap_nlattr_add16(&msg->nh, TCA_SKBEDIT_QUEUE_MAPPING,
adata->skbedit.queue);
- } else if (strcmp("bpf", adata->id) == 0) {
- tap_nlattr_add32(&msg->nh, TCA_ACT_BPF_FD, adata->bpf.bpf_fd);
- tap_nlattr_add(&msg->nh, TCA_ACT_BPF_NAME,
- strlen(adata->bpf.annotation) + 1,
- adata->bpf.annotation);
- tap_nlattr_add(&msg->nh, TCA_ACT_BPF_PARMS,
- sizeof(adata->bpf.bpf),
- &adata->bpf.bpf);
} else {
return -1;
}
@@ -1216,21 +1124,6 @@ priv_flow_process(struct pmd_internals *pmd,
err = add_actions(flow, 1, &adata,
TCA_FLOWER_ACT);
}
- } else if (actions->type == RTE_FLOW_ACTION_TYPE_RSS) {
- const struct rte_flow_action_rss *rss =
- (const struct rte_flow_action_rss *)
- actions->conf;
-
- if (action++)
- goto exit_action_not_supported;
-
- if (!pmd->rss_enabled) {
- err = rss_enable(pmd, attr, error);
- if (err)
- goto exit_action_not_supported;
- }
- if (flow)
- err = rss_add_actions(flow, pmd, rss, error);
} else {
goto exit_action_not_supported;
}
@@ -1318,38 +1211,6 @@ tap_flow_set_handle(struct rte_flow *flow)
flow->msg.t.tcm_handle = handle;
}
-/**
- * Free the flow opened file descriptors and allocated memory
- *
- * @param[in] flow
- * Pointer to the flow to free
- *
- */
-static void
-tap_flow_free(struct pmd_internals *pmd, struct rte_flow *flow)
-{
- int i;
-
- if (!flow)
- return;
-
- if (pmd->rss_enabled) {
- /* Close flow BPF file descriptors */
- for (i = 0; i < SEC_MAX; i++)
- if (flow->bpf_fd[i] != 0) {
- close(flow->bpf_fd[i]);
- flow->bpf_fd[i] = 0;
- }
-
- /* Release the map key for this RSS rule */
- bpf_rss_key(KEY_CMD_RELEASE, &flow->key_idx);
- flow->key_idx = 0;
- }
-
- /* Free flow allocated memory */
- rte_free(flow);
-}
-
/**
* Create a flow.
*
@@ -1466,8 +1327,7 @@ tap_flow_create(struct rte_eth_dev *dev,
return flow;
fail:
rte_free(remote_flow);
- if (flow)
- tap_flow_free(pmd, flow);
+ rte_free(flow);
return NULL;
}
@@ -1541,7 +1401,7 @@ tap_flow_destroy_pmd(struct pmd_internals *pmd,
}
end:
rte_free(remote_flow);
- tap_flow_free(pmd, flow);
+ rte_free(flow);
return ret;
}
@@ -1812,356 +1672,6 @@ tap_flow_implicit_flush(struct pmd_internals *pmd, struct rte_flow_error *error)
return 0;
}
-#define MAX_RSS_KEYS 256
-#define KEY_IDX_OFFSET (3 * MAX_RSS_KEYS)
-#define SEC_NAME_CLS_Q "cls_q"
-
-static const char *sec_name[SEC_MAX] = {
- [SEC_L3_L4] = "l3_l4",
-};
-
-/**
- * Enable RSS on tap: create TC rules for queuing.
- *
- * @param[in, out] pmd
- * Pointer to private structure.
- *
- * @param[in] attr
- * Pointer to rte_flow to get flow group
- *
- * @param[out] error
- * Pointer to error reporting if not NULL.
- *
- * @return 0 on success, negative value on failure.
- */
-static int rss_enable(struct pmd_internals *pmd,
- const struct rte_flow_attr *attr,
- struct rte_flow_error *error)
-{
- struct rte_flow *rss_flow = NULL;
- struct nlmsg *msg = NULL;
- /* 4096 is the maximum number of instructions for a BPF program */
- char annotation[64];
- int i;
- int err = 0;
-
- /* unlimit locked memory */
- struct rlimit memlock_limit = {
- .rlim_cur = RLIM_INFINITY,
- .rlim_max = RLIM_INFINITY,
- };
- setrlimit(RLIMIT_MEMLOCK, &memlock_limit);
-
- /* Get a new map key for a new RSS rule */
- err = bpf_rss_key(KEY_CMD_INIT, NULL);
- if (err < 0) {
- rte_flow_error_set(
- error, EINVAL, RTE_FLOW_ERROR_TYPE_HANDLE, NULL,
- "Failed to initialize BPF RSS keys");
-
- return -1;
- }
-
- /*
- * Create BPF RSS MAP
- */
- pmd->map_fd = tap_flow_bpf_rss_map_create(sizeof(__u32), /* key size */
- sizeof(struct rss_key),
- MAX_RSS_KEYS);
- if (pmd->map_fd < 0) {
- TAP_LOG(ERR,
- "Failed to create BPF map (%d): %s",
- errno, strerror(errno));
- rte_flow_error_set(
- error, ENOTSUP, RTE_FLOW_ERROR_TYPE_HANDLE, NULL,
- "Kernel too old or not configured "
- "to support BPF maps");
-
- return -ENOTSUP;
- }
-
- /*
- * Add a rule per queue to match reclassified packets and direct them to
- * the correct queue.
- */
- for (i = 0; i < pmd->dev->data->nb_rx_queues; i++) {
- pmd->bpf_fd[i] = tap_flow_bpf_cls_q(i);
- if (pmd->bpf_fd[i] < 0) {
- TAP_LOG(ERR,
- "Failed to load BPF section %s for queue %d",
- SEC_NAME_CLS_Q, i);
- rte_flow_error_set(
- error, ENOTSUP, RTE_FLOW_ERROR_TYPE_HANDLE,
- NULL,
- "Kernel too old or not configured "
- "to support BPF programs loading");
-
- return -ENOTSUP;
- }
-
- rss_flow = rte_zmalloc(__func__, sizeof(struct rte_flow), 0);
- if (!rss_flow) {
- TAP_LOG(ERR,
- "Cannot allocate memory for rte_flow");
- return -1;
- }
- msg = &rss_flow->msg;
- tc_init_msg(msg, pmd->if_index, RTM_NEWTFILTER, NLM_F_REQUEST |
- NLM_F_ACK | NLM_F_EXCL | NLM_F_CREATE);
- msg->t.tcm_info = TC_H_MAKE(0, htons(ETH_P_ALL));
- tap_flow_set_handle(rss_flow);
- uint16_t group = attr->group << GROUP_SHIFT;
- uint16_t prio = group | (i + PRIORITY_OFFSET);
- msg->t.tcm_info = TC_H_MAKE(prio << 16, msg->t.tcm_info);
- msg->t.tcm_parent = TC_H_MAKE(MULTIQ_MAJOR_HANDLE, 0);
-
- tap_nlattr_add(&msg->nh, TCA_KIND, sizeof("bpf"), "bpf");
- if (tap_nlattr_nested_start(msg, TCA_OPTIONS) < 0)
- return -1;
- tap_nlattr_add32(&msg->nh, TCA_BPF_FD, pmd->bpf_fd[i]);
- snprintf(annotation, sizeof(annotation), "[%s%d]",
- SEC_NAME_CLS_Q, i);
- tap_nlattr_add(&msg->nh, TCA_BPF_NAME, strlen(annotation) + 1,
- annotation);
- /* Actions */
- {
- struct action_data adata = {
- .id = "skbedit",
- .skbedit = {
- .skbedit = {
- .action = TC_ACT_PIPE,
- },
- .queue = i,
- },
- };
- if (add_actions(rss_flow, 1, &adata, TCA_BPF_ACT) < 0)
- return -1;
- }
- tap_nlattr_nested_finish(msg); /* nested TCA_OPTIONS */
-
- /* Netlink message is now ready to be sent */
- if (tap_nl_send(pmd->nlsk_fd, &msg->nh) < 0)
- return -1;
- err = tap_nl_recv_ack(pmd->nlsk_fd);
- if (err < 0) {
- TAP_LOG(ERR,
- "Kernel refused TC filter rule creation (%d): %s",
- errno, strerror(errno));
- return err;
- }
- LIST_INSERT_HEAD(&pmd->rss_flows, rss_flow, next);
- }
-
- pmd->rss_enabled = 1;
- return err;
-}
-
-/**
- * Manage bpf RSS keys repository with operations: init, get, release
- *
- * @param[in] cmd
- * Command on RSS keys: init, get, release
- *
- * @param[in, out] key_idx
- * Pointer to RSS Key index (out for get command, in for release command)
- *
- * @return -1 if couldn't get, release or init the RSS keys, 0 otherwise.
- */
-static int bpf_rss_key(enum bpf_rss_key_e cmd, __u32 *key_idx)
-{
- __u32 i;
- int err = 0;
- static __u32 num_used_keys;
- static __u32 rss_keys[MAX_RSS_KEYS] = {KEY_STAT_UNSPEC};
- static __u32 rss_keys_initialized;
- __u32 key;
-
- switch (cmd) {
- case KEY_CMD_GET:
- if (!rss_keys_initialized) {
- err = -1;
- break;
- }
-
- if (num_used_keys == RTE_DIM(rss_keys)) {
- err = -1;
- break;
- }
-
- *key_idx = num_used_keys % RTE_DIM(rss_keys);
- while (rss_keys[*key_idx] == KEY_STAT_USED)
- *key_idx = (*key_idx + 1) % RTE_DIM(rss_keys);
-
- rss_keys[*key_idx] = KEY_STAT_USED;
-
- /*
- * Add an offset to key_idx in order to handle a case of
- * RSS and non RSS flows mixture.
- * If a non RSS flow is destroyed it has an eBPF map
- * index 0 (initialized on flow creation) and might
- * unintentionally remove RSS entry 0 from eBPF map.
- * To avoid this issue, add an offset to the real index
- * during a KEY_CMD_GET operation and subtract this offset
- * during a KEY_CMD_RELEASE operation in order to restore
- * the real index.
- */
- *key_idx += KEY_IDX_OFFSET;
- num_used_keys++;
- break;
-
- case KEY_CMD_RELEASE:
- if (!rss_keys_initialized)
- break;
-
- /*
- * Subtract offset to restore real key index
- * If a non RSS flow is falsely trying to release map
- * entry 0 - the offset subtraction will calculate the real
- * map index as an out-of-range value and the release operation
- * will be silently ignored.
- */
- key = *key_idx - KEY_IDX_OFFSET;
- if (key >= RTE_DIM(rss_keys))
- break;
-
- if (rss_keys[key] == KEY_STAT_USED) {
- rss_keys[key] = KEY_STAT_AVAILABLE;
- num_used_keys--;
- }
- break;
-
- case KEY_CMD_INIT:
- for (i = 0; i < RTE_DIM(rss_keys); i++)
- rss_keys[i] = KEY_STAT_AVAILABLE;
-
- rss_keys_initialized = 1;
- num_used_keys = 0;
- break;
-
- case KEY_CMD_DEINIT:
- for (i = 0; i < RTE_DIM(rss_keys); i++)
- rss_keys[i] = KEY_STAT_UNSPEC;
-
- rss_keys_initialized = 0;
- num_used_keys = 0;
- break;
-
- default:
- break;
- }
-
- return err;
-}
-
-/**
- * Add RSS hash calculations and queue selection
- *
- * @param[in, out] pmd
- * Pointer to internal structure. Used to set/get RSS map fd
- *
- * @param[in] rss
- * Pointer to RSS flow actions
- *
- * @param[out] error
- * Pointer to error reporting if not NULL.
- *
- * @return 0 on success, negative value on failure
- */
-static int rss_add_actions(struct rte_flow *flow, struct pmd_internals *pmd,
- const struct rte_flow_action_rss *rss,
- struct rte_flow_error *error)
-{
- /* 4096 is the maximum number of instructions for a BPF program */
- unsigned int i;
- int err;
- struct rss_key rss_entry = { .hash_fields = 0,
- .key_size = 0 };
-
- /* Check supported RSS features */
- if (rss->func != RTE_ETH_HASH_FUNCTION_DEFAULT)
- return rte_flow_error_set
- (error, ENOTSUP, RTE_FLOW_ERROR_TYPE_UNSPECIFIED, NULL,
- "non-default RSS hash functions are not supported");
- if (rss->level)
- return rte_flow_error_set
- (error, ENOTSUP, RTE_FLOW_ERROR_TYPE_UNSPECIFIED, NULL,
- "a nonzero RSS encapsulation level is not supported");
-
- /* Get a new map key for a new RSS rule */
- err = bpf_rss_key(KEY_CMD_GET, &flow->key_idx);
- if (err < 0) {
- rte_flow_error_set(
- error, EINVAL, RTE_FLOW_ERROR_TYPE_HANDLE, NULL,
- "Failed to get BPF RSS key");
-
- return -1;
- }
-
- /* Update RSS map entry with queues */
- rss_entry.nb_queues = rss->queue_num;
- for (i = 0; i < rss->queue_num; i++)
- rss_entry.queues[i] = rss->queue[i];
- rss_entry.hash_fields =
- (1 << HASH_FIELD_IPV4_L3_L4) | (1 << HASH_FIELD_IPV6_L3_L4);
-
- /* Add this RSS entry to map */
- err = tap_flow_bpf_update_rss_elem(pmd->map_fd,
- &flow->key_idx, &rss_entry);
-
- if (err) {
- TAP_LOG(ERR,
- "Failed to update BPF map entry #%u (%d): %s",
- flow->key_idx, errno, strerror(errno));
- rte_flow_error_set(
- error, ENOTSUP, RTE_FLOW_ERROR_TYPE_HANDLE, NULL,
- "Kernel too old or not configured "
- "to support BPF maps updates");
-
- return -ENOTSUP;
- }
-
-
- /*
- * Load bpf rules to calculate hash for this key_idx
- */
-
- flow->bpf_fd[SEC_L3_L4] =
- tap_flow_bpf_calc_l3_l4_hash(flow->key_idx, pmd->map_fd);
- if (flow->bpf_fd[SEC_L3_L4] < 0) {
- TAP_LOG(ERR,
- "Failed to load BPF section %s (%d): %s",
- sec_name[SEC_L3_L4], errno, strerror(errno));
- rte_flow_error_set(
- error, ENOTSUP, RTE_FLOW_ERROR_TYPE_HANDLE, NULL,
- "Kernel too old or not configured "
- "to support BPF program loading");
-
- return -ENOTSUP;
- }
-
- /* Actions */
- {
- struct action_data adata[] = {
- {
- .id = "bpf",
- .bpf = {
- .bpf_fd = flow->bpf_fd[SEC_L3_L4],
- .annotation = sec_name[SEC_L3_L4],
- .bpf = {
- .action = TC_ACT_PIPE,
- },
- },
- },
- };
-
- if (add_actions(flow, RTE_DIM(adata), adata,
- TCA_FLOWER_ACT) < 0)
- return -1;
- }
-
- return 0;
-}
-
/**
* Get rte_flow operations.
*
diff --git a/drivers/net/tap/tap_flow.h b/drivers/net/tap/tap_flow.h
index 240fbc3dfaef..099704437b2f 100644
--- a/drivers/net/tap/tap_flow.h
+++ b/drivers/net/tap/tap_flow.h
@@ -41,11 +41,6 @@ enum implicit_rule_index {
TAP_REMOTE_MAX_IDX,
};
-enum bpf_fd_idx {
- SEC_L3_L4,
- SEC_MAX,
-};
-
int tap_dev_flow_ops_get(struct rte_eth_dev *dev,
const struct rte_flow_ops **ops);
int tap_flow_flush(struct rte_eth_dev *dev, struct rte_flow_error *error);
@@ -56,11 +51,4 @@ int tap_flow_implicit_destroy(struct pmd_internals *pmd,
enum implicit_rule_index idx);
int tap_flow_implicit_flush(struct pmd_internals *pmd,
struct rte_flow_error *error);
-
-int tap_flow_bpf_cls_q(__u32 queue_idx);
-int tap_flow_bpf_calc_l3_l4_hash(__u32 key_idx, int map_fd);
-int tap_flow_bpf_rss_map_create(unsigned int key_size, unsigned int value_size,
- unsigned int max_entries);
-int tap_flow_bpf_update_rss_elem(int fd, void *key, void *value);
-
#endif /* _TAP_FLOW_H_ */
diff --git a/drivers/net/tap/tap_tcmsgs.h b/drivers/net/tap/tap_tcmsgs.h
index a64cb29d6fa8..4b0413579749 100644
--- a/drivers/net/tap/tap_tcmsgs.h
+++ b/drivers/net/tap/tap_tcmsgs.h
@@ -14,9 +14,6 @@
#include <linux/tc_act/tc_mirred.h>
#include <linux/tc_act/tc_gact.h>
#include <linux/tc_act/tc_skbedit.h>
-#ifdef HAVE_TC_ACT_BPF
-#include <linux/tc_act/tc_bpf.h>
-#endif
#include <inttypes.h>
#include <rte_ether.h>
--
2.43.0
^ permalink raw reply [flat|nested] only message in thread
only message in thread, other threads:[~2023-12-15 16:32 UTC | newest]
Thread overview: (only message) (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2023-12-15 16:31 [RFC] net/tap: remove kernel side RSS via BPF Stephen Hemminger
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).