Created
February 17, 2017 16:39
-
-
Save williamtu/97fcfe025ada712d91881fac53a9d1e3 to your computer and use it in GitHub Desktop.
xdp12 Verifier: cannot add integer value with 0 upper zero bits to ptr_to_packet
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| /* Automatically generated by p4c-xdp from xdp12.p4 on Fri Feb 17 08:32:10 2017 | |
| */ | |
| #include "xdp12.h" | |
| #define KBUILD_MODNAME "xdptest" | |
| #include <linux/bpf.h> | |
| #include "bpf_helpers.h" | |
| #define load_byte(data, b) (*(((u8*)(data)) + (b))) | |
| #define load_half(data, b) __constant_ntohs(*(u16 *)((u8*)(data) + (b))) | |
| #define load_word(data, b) __constant_ntohl(*(u32 *)((u8*)(data) + (b))) | |
| #define htonl(d) __constant_htonl(d) | |
| #define htons(d) __constant_htons(d) | |
| enum ebpf_errorCodes { | |
| NoError, | |
| PacketTooShort, | |
| NoMatch, | |
| StackOutOfBounds, | |
| OverwritingHeader, | |
| HeaderTooShort, | |
| ParserTimeout, | |
| }; | |
| #define EBPF_MASK(t, w) ((((t)(1)) << (w)) - (t)1) | |
| #define BYTES(w) ((w) / 8) | |
| #define write_partial(a, s, v) do { u8 mask = EBPF_MASK(u8, s); *((u8*)a) = ((*((u8*)a)) & ~mask) | (((v) >> (8 - (s))) & mask); } while (0) | |
| #define write_byte(base, offset, v) do { *(u8*)((base) + (offset)) = (v); } while (0) | |
| void* memcpy(void* dest, const void* src, size_t num); | |
| inline u16 ebpf_ipv4_checksum(u8 version, u8 ihl, u8 diffserv, | |
| u16 totalLen, u16 identification, u8 flags, | |
| u16 fragOffset, u8 ttl, u8 protocol, | |
| u32 srcAddr, u32 dstAddr) { | |
| u32 checksum = htons(((u16)version << 12) | ((u16)ihl << 8) | (u16)diffserv); | |
| checksum += htons(totalLen); | |
| checksum += htons(identification); | |
| checksum += htons(((u16)flags << 13) | fragOffset); | |
| checksum += htons(((u16)ttl << 8) | (u16)protocol); | |
| srcAddr = htonl(srcAddr); | |
| dstAddr = htonl(dstAddr); | |
| checksum += (srcAddr >> 16) + (u16)srcAddr; | |
| checksum += (dstAddr >> 16) + (u16)dstAddr; | |
| // Fields in 'struct Headers' are host byte order. Deparser converts to network byte-order | |
| return __constant_ntohs(~((checksum & 0xFFFF) + (checksum >> 16))); | |
| } | |
| struct bpf_map_def SEC("maps") ebpf_outTable = { | |
| .type = BPF_MAP_TYPE_PERCPU_ARRAY, | |
| .key_size = sizeof(u32), | |
| .value_size = sizeof(u32), | |
| .pinning = 2, /* PIN_GLOBAL_NS */ | |
| .max_entries = 1 /* No multicast support */ | |
| }; | |
| SEC("prog") | |
| int ebpf_filter(struct xdp_md* skb){ | |
| struct Headers hd = { | |
| .ethernet = { | |
| .ebpf_valid = 0 | |
| }, | |
| .vlan_tag = { | |
| .ebpf_valid = 0 | |
| }, | |
| .ipv6 = { | |
| .ebpf_valid = 0 | |
| }, | |
| }; | |
| unsigned ebpf_packetOffsetInBits = 0; | |
| enum ebpf_errorCodes ebpf_errorCode = NoError; | |
| void* ebpf_packetStart = ((void*)(long)skb->data); | |
| void* ebpf_packetEnd = ((void*)(long)skb->data_end); | |
| u32 ebpf_zero = 0; | |
| u8 ebpf_byte = 0; | |
| u32 ebpf_outHeaderLength = 0; | |
| struct xdp_output xout; | |
| /* TODO: this should be initialized by the environment. HOW? */ | |
| struct xdp_input xin; | |
| goto start; | |
| start: { | |
| /* extract(hd.ethernet)*/ | |
| if (ebpf_packetEnd < ebpf_packetStart + BYTES(ebpf_packetOffsetInBits + 112)) { | |
| ebpf_errorCode = PacketTooShort; | |
| goto reject; | |
| } | |
| hd.ethernet.source[0] = (u8)((load_byte(ebpf_packetStart, BYTES(ebpf_packetOffsetInBits) + 0) >> 0)); | |
| hd.ethernet.source[1] = (u8)((load_byte(ebpf_packetStart, BYTES(ebpf_packetOffsetInBits) + 1) >> 0)); | |
| hd.ethernet.source[2] = (u8)((load_byte(ebpf_packetStart, BYTES(ebpf_packetOffsetInBits) + 2) >> 0)); | |
| hd.ethernet.source[3] = (u8)((load_byte(ebpf_packetStart, BYTES(ebpf_packetOffsetInBits) + 3) >> 0)); | |
| hd.ethernet.source[4] = (u8)((load_byte(ebpf_packetStart, BYTES(ebpf_packetOffsetInBits) + 4) >> 0)); | |
| hd.ethernet.source[5] = (u8)((load_byte(ebpf_packetStart, BYTES(ebpf_packetOffsetInBits) + 5) >> 0)); | |
| ebpf_packetOffsetInBits += 48; | |
| hd.ethernet.destination[0] = (u8)((load_byte(ebpf_packetStart, BYTES(ebpf_packetOffsetInBits) + 0) >> 0)); | |
| hd.ethernet.destination[1] = (u8)((load_byte(ebpf_packetStart, BYTES(ebpf_packetOffsetInBits) + 1) >> 0)); | |
| hd.ethernet.destination[2] = (u8)((load_byte(ebpf_packetStart, BYTES(ebpf_packetOffsetInBits) + 2) >> 0)); | |
| hd.ethernet.destination[3] = (u8)((load_byte(ebpf_packetStart, BYTES(ebpf_packetOffsetInBits) + 3) >> 0)); | |
| hd.ethernet.destination[4] = (u8)((load_byte(ebpf_packetStart, BYTES(ebpf_packetOffsetInBits) + 4) >> 0)); | |
| hd.ethernet.destination[5] = (u8)((load_byte(ebpf_packetStart, BYTES(ebpf_packetOffsetInBits) + 5) >> 0)); | |
| ebpf_packetOffsetInBits += 48; | |
| hd.ethernet.protocol = (u16)((load_half(ebpf_packetStart, BYTES(ebpf_packetOffsetInBits)))); | |
| ebpf_packetOffsetInBits += 16; | |
| hd.ethernet.ebpf_valid = 1; | |
| switch (hd.ethernet.protocol) { | |
| case 33024: goto parse_vlan_tag; | |
| case 37120: goto parse_vlan_tag; | |
| case 34525: goto parse_ipv6; | |
| default: goto accept; | |
| } | |
| } | |
| parse_vlan_tag: { | |
| /* extract(hd.vlan_tag)*/ | |
| if (ebpf_packetEnd < ebpf_packetStart + BYTES(ebpf_packetOffsetInBits + 32)) { | |
| ebpf_errorCode = PacketTooShort; | |
| goto reject; | |
| } | |
| hd.vlan_tag.pcp = (u8)((load_byte(ebpf_packetStart, BYTES(ebpf_packetOffsetInBits)) >> 5) & EBPF_MASK(u8, 3)); | |
| ebpf_packetOffsetInBits += 3; | |
| hd.vlan_tag.cfi = (u8)((load_byte(ebpf_packetStart, BYTES(ebpf_packetOffsetInBits)) >> 4) & EBPF_MASK(u8, 1)); | |
| ebpf_packetOffsetInBits += 1; | |
| hd.vlan_tag.vid = (u16)((load_half(ebpf_packetStart, BYTES(ebpf_packetOffsetInBits))) & EBPF_MASK(u16, 12)); | |
| ebpf_packetOffsetInBits += 12; | |
| hd.vlan_tag.etherType = (u16)((load_half(ebpf_packetStart, BYTES(ebpf_packetOffsetInBits)))); | |
| ebpf_packetOffsetInBits += 16; | |
| hd.vlan_tag.ebpf_valid = 1; | |
| switch (hd.vlan_tag.etherType) { | |
| case 34525: goto parse_ipv6; | |
| default: goto accept; | |
| } | |
| } | |
| parse_ipv6: { | |
| /* extract(hd.ipv6)*/ | |
| if (ebpf_packetEnd < ebpf_packetStart + BYTES(ebpf_packetOffsetInBits + 320)) { | |
| ebpf_errorCode = PacketTooShort; | |
| goto reject; | |
| } | |
| hd.ipv6.version = (u8)((load_byte(ebpf_packetStart, BYTES(ebpf_packetOffsetInBits)) >> 4) & EBPF_MASK(u8, 4)); | |
| ebpf_packetOffsetInBits += 4; | |
| hd.ipv6.trafficClass = (u8)((load_half(ebpf_packetStart, BYTES(ebpf_packetOffsetInBits)) >> 4) & EBPF_MASK(u8, 8)); | |
| ebpf_packetOffsetInBits += 8; | |
| hd.ipv6.flowLabel = (u32)((load_word(ebpf_packetStart, BYTES(ebpf_packetOffsetInBits)) >> 8) & EBPF_MASK(u32, 20)); | |
| ebpf_packetOffsetInBits += 20; | |
| hd.ipv6.payloadLen = (u16)((load_half(ebpf_packetStart, BYTES(ebpf_packetOffsetInBits)))); | |
| ebpf_packetOffsetInBits += 16; | |
| hd.ipv6.nextHdr = (u8)((load_byte(ebpf_packetStart, BYTES(ebpf_packetOffsetInBits)))); | |
| ebpf_packetOffsetInBits += 8; | |
| hd.ipv6.hopLimit = (u8)((load_byte(ebpf_packetStart, BYTES(ebpf_packetOffsetInBits)))); | |
| ebpf_packetOffsetInBits += 8; | |
| hd.ipv6.srcAddr[0] = (u8)((load_byte(ebpf_packetStart, BYTES(ebpf_packetOffsetInBits) + 0) >> 0)); | |
| hd.ipv6.srcAddr[1] = (u8)((load_byte(ebpf_packetStart, BYTES(ebpf_packetOffsetInBits) + 1) >> 0)); | |
| hd.ipv6.srcAddr[2] = (u8)((load_byte(ebpf_packetStart, BYTES(ebpf_packetOffsetInBits) + 2) >> 0)); | |
| hd.ipv6.srcAddr[3] = (u8)((load_byte(ebpf_packetStart, BYTES(ebpf_packetOffsetInBits) + 3) >> 0)); | |
| hd.ipv6.srcAddr[4] = (u8)((load_byte(ebpf_packetStart, BYTES(ebpf_packetOffsetInBits) + 4) >> 0)); | |
| hd.ipv6.srcAddr[5] = (u8)((load_byte(ebpf_packetStart, BYTES(ebpf_packetOffsetInBits) + 5) >> 0)); | |
| hd.ipv6.srcAddr[6] = (u8)((load_byte(ebpf_packetStart, BYTES(ebpf_packetOffsetInBits) + 6) >> 0)); | |
| hd.ipv6.srcAddr[7] = (u8)((load_byte(ebpf_packetStart, BYTES(ebpf_packetOffsetInBits) + 7) >> 0)); | |
| hd.ipv6.srcAddr[8] = (u8)((load_byte(ebpf_packetStart, BYTES(ebpf_packetOffsetInBits) + 8) >> 0)); | |
| hd.ipv6.srcAddr[9] = (u8)((load_byte(ebpf_packetStart, BYTES(ebpf_packetOffsetInBits) + 9) >> 0)); | |
| hd.ipv6.srcAddr[10] = (u8)((load_byte(ebpf_packetStart, BYTES(ebpf_packetOffsetInBits) + 10) >> 0)); | |
| hd.ipv6.srcAddr[11] = (u8)((load_byte(ebpf_packetStart, BYTES(ebpf_packetOffsetInBits) + 11) >> 0)); | |
| hd.ipv6.srcAddr[12] = (u8)((load_byte(ebpf_packetStart, BYTES(ebpf_packetOffsetInBits) + 12) >> 0)); | |
| hd.ipv6.srcAddr[13] = (u8)((load_byte(ebpf_packetStart, BYTES(ebpf_packetOffsetInBits) + 13) >> 0)); | |
| hd.ipv6.srcAddr[14] = (u8)((load_byte(ebpf_packetStart, BYTES(ebpf_packetOffsetInBits) + 14) >> 0)); | |
| hd.ipv6.srcAddr[15] = (u8)((load_byte(ebpf_packetStart, BYTES(ebpf_packetOffsetInBits) + 15) >> 0)); | |
| ebpf_packetOffsetInBits += 128; | |
| hd.ipv6.dstAddr[0] = (u8)((load_byte(ebpf_packetStart, BYTES(ebpf_packetOffsetInBits) + 0) >> 0)); | |
| hd.ipv6.dstAddr[1] = (u8)((load_byte(ebpf_packetStart, BYTES(ebpf_packetOffsetInBits) + 1) >> 0)); | |
| hd.ipv6.dstAddr[2] = (u8)((load_byte(ebpf_packetStart, BYTES(ebpf_packetOffsetInBits) + 2) >> 0)); | |
| hd.ipv6.dstAddr[3] = (u8)((load_byte(ebpf_packetStart, BYTES(ebpf_packetOffsetInBits) + 3) >> 0)); | |
| hd.ipv6.dstAddr[4] = (u8)((load_byte(ebpf_packetStart, BYTES(ebpf_packetOffsetInBits) + 4) >> 0)); | |
| hd.ipv6.dstAddr[5] = (u8)((load_byte(ebpf_packetStart, BYTES(ebpf_packetOffsetInBits) + 5) >> 0)); | |
| hd.ipv6.dstAddr[6] = (u8)((load_byte(ebpf_packetStart, BYTES(ebpf_packetOffsetInBits) + 6) >> 0)); | |
| hd.ipv6.dstAddr[7] = (u8)((load_byte(ebpf_packetStart, BYTES(ebpf_packetOffsetInBits) + 7) >> 0)); | |
| hd.ipv6.dstAddr[8] = (u8)((load_byte(ebpf_packetStart, BYTES(ebpf_packetOffsetInBits) + 8) >> 0)); | |
| hd.ipv6.dstAddr[9] = (u8)((load_byte(ebpf_packetStart, BYTES(ebpf_packetOffsetInBits) + 9) >> 0)); | |
| hd.ipv6.dstAddr[10] = (u8)((load_byte(ebpf_packetStart, BYTES(ebpf_packetOffsetInBits) + 10) >> 0)); | |
| hd.ipv6.dstAddr[11] = (u8)((load_byte(ebpf_packetStart, BYTES(ebpf_packetOffsetInBits) + 11) >> 0)); | |
| hd.ipv6.dstAddr[12] = (u8)((load_byte(ebpf_packetStart, BYTES(ebpf_packetOffsetInBits) + 12) >> 0)); | |
| hd.ipv6.dstAddr[13] = (u8)((load_byte(ebpf_packetStart, BYTES(ebpf_packetOffsetInBits) + 13) >> 0)); | |
| hd.ipv6.dstAddr[14] = (u8)((load_byte(ebpf_packetStart, BYTES(ebpf_packetOffsetInBits) + 14) >> 0)); | |
| hd.ipv6.dstAddr[15] = (u8)((load_byte(ebpf_packetStart, BYTES(ebpf_packetOffsetInBits) + 15) >> 0)); | |
| ebpf_packetOffsetInBits += 128; | |
| hd.ipv6.ebpf_valid = 1; | |
| goto accept; | |
| } | |
| reject: { return XDP_ABORTED; } | |
| accept: | |
| { | |
| u8 hit; | |
| u8 tmp_1; | |
| enum xdp_action tmp_2; | |
| { | |
| xout.output_port = 0; | |
| tmp_1 = (hd.ipv6.version != 6); | |
| if (tmp_1) | |
| tmp_2 = XDP_DROP; | |
| else | |
| tmp_2 = XDP_PASS; | |
| xout.output_action = tmp_2; | |
| } | |
| } | |
| /* deparser */ | |
| { | |
| { | |
| if (hd.ethernet.ebpf_valid) ebpf_outHeaderLength += 112; | |
| if (hd.vlan_tag.ebpf_valid) ebpf_outHeaderLength += 32; | |
| if (hd.ipv6.ebpf_valid) ebpf_outHeaderLength += 320; | |
| } | |
| //bpf_xdp_adjust_head(skb, BYTES(ebpf_packetOffsetInBits) - ebpf_outHeaderLength); | |
| ebpf_packetStart = ((void*)(long)skb->data); | |
| ebpf_packetEnd = ((void*)(long)skb->data_end); | |
| ebpf_packetOffsetInBits = 0; | |
| u8 hit_0; | |
| { | |
| /* packet.emit(hd.ethernet)*/ | |
| if (hd.ethernet.ebpf_valid) { | |
| if (ebpf_packetEnd < ebpf_packetStart + BYTES(ebpf_packetOffsetInBits + 112)) { | |
| ebpf_errorCode = PacketTooShort; | |
| return XDP_ABORTED; | |
| } | |
| ebpf_byte = ((char*)(&hd.ethernet.source))[0]; | |
| write_byte(ebpf_packetStart, BYTES(ebpf_packetOffsetInBits) + 0, (ebpf_byte) << 0); | |
| ebpf_byte = ((char*)(&hd.ethernet.source))[1]; | |
| write_byte(ebpf_packetStart, BYTES(ebpf_packetOffsetInBits) + 1, (ebpf_byte) << 0); | |
| ebpf_byte = ((char*)(&hd.ethernet.source))[2]; | |
| write_byte(ebpf_packetStart, BYTES(ebpf_packetOffsetInBits) + 2, (ebpf_byte) << 0); | |
| ebpf_byte = ((char*)(&hd.ethernet.source))[3]; | |
| write_byte(ebpf_packetStart, BYTES(ebpf_packetOffsetInBits) + 3, (ebpf_byte) << 0); | |
| ebpf_byte = ((char*)(&hd.ethernet.source))[4]; | |
| write_byte(ebpf_packetStart, BYTES(ebpf_packetOffsetInBits) + 4, (ebpf_byte) << 0); | |
| ebpf_byte = ((char*)(&hd.ethernet.source))[5]; | |
| write_byte(ebpf_packetStart, BYTES(ebpf_packetOffsetInBits) + 5, (ebpf_byte) << 0); | |
| ebpf_packetOffsetInBits += 48; | |
| ebpf_byte = ((char*)(&hd.ethernet.destination))[0]; | |
| write_byte(ebpf_packetStart, BYTES(ebpf_packetOffsetInBits) + 0, (ebpf_byte) << 0); | |
| ebpf_byte = ((char*)(&hd.ethernet.destination))[1]; | |
| write_byte(ebpf_packetStart, BYTES(ebpf_packetOffsetInBits) + 1, (ebpf_byte) << 0); | |
| ebpf_byte = ((char*)(&hd.ethernet.destination))[2]; | |
| write_byte(ebpf_packetStart, BYTES(ebpf_packetOffsetInBits) + 2, (ebpf_byte) << 0); | |
| ebpf_byte = ((char*)(&hd.ethernet.destination))[3]; | |
| write_byte(ebpf_packetStart, BYTES(ebpf_packetOffsetInBits) + 3, (ebpf_byte) << 0); | |
| ebpf_byte = ((char*)(&hd.ethernet.destination))[4]; | |
| write_byte(ebpf_packetStart, BYTES(ebpf_packetOffsetInBits) + 4, (ebpf_byte) << 0); | |
| ebpf_byte = ((char*)(&hd.ethernet.destination))[5]; | |
| write_byte(ebpf_packetStart, BYTES(ebpf_packetOffsetInBits) + 5, (ebpf_byte) << 0); | |
| ebpf_packetOffsetInBits += 48; | |
| hd.ethernet.protocol = htons(hd.ethernet.protocol); | |
| ebpf_byte = ((char*)(&hd.ethernet.protocol))[0]; | |
| write_byte(ebpf_packetStart, BYTES(ebpf_packetOffsetInBits) + 0, (ebpf_byte) << 0); | |
| ebpf_byte = ((char*)(&hd.ethernet.protocol))[1]; | |
| write_byte(ebpf_packetStart, BYTES(ebpf_packetOffsetInBits) + 1, (ebpf_byte) << 0); | |
| ebpf_packetOffsetInBits += 16; | |
| } | |
| ; | |
| /* packet.emit(hd.vlan_tag)*/ | |
| if (hd.vlan_tag.ebpf_valid) { | |
| if (ebpf_packetEnd < ebpf_packetStart + BYTES(ebpf_packetOffsetInBits + 32)) { | |
| ebpf_errorCode = PacketTooShort; | |
| return XDP_ABORTED; | |
| } | |
| ebpf_byte = ((char*)(&hd.vlan_tag.pcp))[0]; | |
| write_byte(ebpf_packetStart, BYTES(ebpf_packetOffsetInBits) + 0, (ebpf_byte) << 5); | |
| ebpf_packetOffsetInBits += 3; | |
| ebpf_byte = ((char*)(&hd.vlan_tag.cfi))[0]; | |
| write_partial(ebpf_packetStart + BYTES(ebpf_packetOffsetInBits) + 0, 3, (ebpf_byte) << 7); | |
| ebpf_packetOffsetInBits += 1; | |
| ebpf_byte = ((char*)(&hd.vlan_tag.vid))[0]; | |
| write_partial(ebpf_packetStart + BYTES(ebpf_packetOffsetInBits) + 0, 4, (ebpf_byte) << 4); | |
| ebpf_byte = ((char*)(&hd.vlan_tag.vid))[1]; | |
| write_byte(ebpf_packetStart, BYTES(ebpf_packetOffsetInBits) + 1, (ebpf_byte) << 0); | |
| ebpf_packetOffsetInBits += 12; | |
| hd.vlan_tag.etherType = htons(hd.vlan_tag.etherType); | |
| ebpf_byte = ((char*)(&hd.vlan_tag.etherType))[0]; | |
| write_byte(ebpf_packetStart, BYTES(ebpf_packetOffsetInBits) + 0, (ebpf_byte) << 0); | |
| ebpf_byte = ((char*)(&hd.vlan_tag.etherType))[1]; | |
| write_byte(ebpf_packetStart, BYTES(ebpf_packetOffsetInBits) + 1, (ebpf_byte) << 0); | |
| ebpf_packetOffsetInBits += 16; | |
| } | |
| ; | |
| /* packet.emit(hd.ipv6)*/ | |
| if (hd.ipv6.ebpf_valid) { | |
| if (ebpf_packetEnd < ebpf_packetStart + BYTES(ebpf_packetOffsetInBits + 320)) { | |
| ebpf_errorCode = PacketTooShort; | |
| return XDP_ABORTED; | |
| } | |
| ebpf_byte = ((char*)(&hd.ipv6.version))[0]; | |
| write_byte(ebpf_packetStart, BYTES(ebpf_packetOffsetInBits) + 0, (ebpf_byte) << 4); | |
| ebpf_packetOffsetInBits += 4; | |
| ebpf_byte = ((char*)(&hd.ipv6.trafficClass))[0]; | |
| write_partial(ebpf_packetStart + BYTES(ebpf_packetOffsetInBits) + 0, 4, (ebpf_byte) << 0); | |
| ebpf_packetOffsetInBits += 8; | |
| ebpf_byte = ((char*)(&hd.ipv6.flowLabel))[0]; | |
| write_partial(ebpf_packetStart + BYTES(ebpf_packetOffsetInBits) + 0, 4, (ebpf_byte) << 4); | |
| ebpf_byte = ((char*)(&hd.ipv6.flowLabel))[1]; | |
| write_byte(ebpf_packetStart, BYTES(ebpf_packetOffsetInBits) + 1, (ebpf_byte) << 0); | |
| ebpf_byte = ((char*)(&hd.ipv6.flowLabel))[2]; | |
| write_byte(ebpf_packetStart, BYTES(ebpf_packetOffsetInBits) + 2, (ebpf_byte) << 0); | |
| ebpf_packetOffsetInBits += 20; | |
| hd.ipv6.payloadLen = htons(hd.ipv6.payloadLen); | |
| ebpf_byte = ((char*)(&hd.ipv6.payloadLen))[0]; | |
| write_byte(ebpf_packetStart, BYTES(ebpf_packetOffsetInBits) + 0, (ebpf_byte) << 0); | |
| ebpf_byte = ((char*)(&hd.ipv6.payloadLen))[1]; | |
| write_byte(ebpf_packetStart, BYTES(ebpf_packetOffsetInBits) + 1, (ebpf_byte) << 0); | |
| ebpf_packetOffsetInBits += 16; | |
| ebpf_byte = ((char*)(&hd.ipv6.nextHdr))[0]; | |
| write_byte(ebpf_packetStart, BYTES(ebpf_packetOffsetInBits) + 0, (ebpf_byte) << 0); | |
| ebpf_packetOffsetInBits += 8; | |
| ebpf_byte = ((char*)(&hd.ipv6.hopLimit))[0]; | |
| write_byte(ebpf_packetStart, BYTES(ebpf_packetOffsetInBits) + 0, (ebpf_byte) << 0); | |
| ebpf_packetOffsetInBits += 8; | |
| ebpf_byte = ((char*)(&hd.ipv6.srcAddr))[0]; | |
| write_byte(ebpf_packetStart, BYTES(ebpf_packetOffsetInBits) + 0, (ebpf_byte) << 0); | |
| ebpf_byte = ((char*)(&hd.ipv6.srcAddr))[1]; | |
| write_byte(ebpf_packetStart, BYTES(ebpf_packetOffsetInBits) + 1, (ebpf_byte) << 0); | |
| ebpf_byte = ((char*)(&hd.ipv6.srcAddr))[2]; | |
| write_byte(ebpf_packetStart, BYTES(ebpf_packetOffsetInBits) + 2, (ebpf_byte) << 0); | |
| ebpf_byte = ((char*)(&hd.ipv6.srcAddr))[3]; | |
| write_byte(ebpf_packetStart, BYTES(ebpf_packetOffsetInBits) + 3, (ebpf_byte) << 0); | |
| ebpf_byte = ((char*)(&hd.ipv6.srcAddr))[4]; | |
| write_byte(ebpf_packetStart, BYTES(ebpf_packetOffsetInBits) + 4, (ebpf_byte) << 0); | |
| ebpf_byte = ((char*)(&hd.ipv6.srcAddr))[5]; | |
| write_byte(ebpf_packetStart, BYTES(ebpf_packetOffsetInBits) + 5, (ebpf_byte) << 0); | |
| ebpf_byte = ((char*)(&hd.ipv6.srcAddr))[6]; | |
| write_byte(ebpf_packetStart, BYTES(ebpf_packetOffsetInBits) + 6, (ebpf_byte) << 0); | |
| ebpf_byte = ((char*)(&hd.ipv6.srcAddr))[7]; | |
| write_byte(ebpf_packetStart, BYTES(ebpf_packetOffsetInBits) + 7, (ebpf_byte) << 0); | |
| ebpf_byte = ((char*)(&hd.ipv6.srcAddr))[8]; | |
| write_byte(ebpf_packetStart, BYTES(ebpf_packetOffsetInBits) + 8, (ebpf_byte) << 0); | |
| ebpf_byte = ((char*)(&hd.ipv6.srcAddr))[9]; | |
| write_byte(ebpf_packetStart, BYTES(ebpf_packetOffsetInBits) + 9, (ebpf_byte) << 0); | |
| ebpf_byte = ((char*)(&hd.ipv6.srcAddr))[10]; | |
| write_byte(ebpf_packetStart, BYTES(ebpf_packetOffsetInBits) + 10, (ebpf_byte) << 0); | |
| ebpf_byte = ((char*)(&hd.ipv6.srcAddr))[11]; | |
| write_byte(ebpf_packetStart, BYTES(ebpf_packetOffsetInBits) + 11, (ebpf_byte) << 0); | |
| ebpf_byte = ((char*)(&hd.ipv6.srcAddr))[12]; | |
| write_byte(ebpf_packetStart, BYTES(ebpf_packetOffsetInBits) + 12, (ebpf_byte) << 0); | |
| ebpf_byte = ((char*)(&hd.ipv6.srcAddr))[13]; | |
| write_byte(ebpf_packetStart, BYTES(ebpf_packetOffsetInBits) + 13, (ebpf_byte) << 0); | |
| ebpf_byte = ((char*)(&hd.ipv6.srcAddr))[14]; | |
| write_byte(ebpf_packetStart, BYTES(ebpf_packetOffsetInBits) + 14, (ebpf_byte) << 0); | |
| ebpf_byte = ((char*)(&hd.ipv6.srcAddr))[15]; | |
| write_byte(ebpf_packetStart, BYTES(ebpf_packetOffsetInBits) + 15, (ebpf_byte) << 0); | |
| ebpf_packetOffsetInBits += 128; | |
| ebpf_byte = ((char*)(&hd.ipv6.dstAddr))[0]; | |
| write_byte(ebpf_packetStart, BYTES(ebpf_packetOffsetInBits) + 0, (ebpf_byte) << 0); | |
| ebpf_byte = ((char*)(&hd.ipv6.dstAddr))[1]; | |
| write_byte(ebpf_packetStart, BYTES(ebpf_packetOffsetInBits) + 1, (ebpf_byte) << 0); | |
| ebpf_byte = ((char*)(&hd.ipv6.dstAddr))[2]; | |
| write_byte(ebpf_packetStart, BYTES(ebpf_packetOffsetInBits) + 2, (ebpf_byte) << 0); | |
| ebpf_byte = ((char*)(&hd.ipv6.dstAddr))[3]; | |
| write_byte(ebpf_packetStart, BYTES(ebpf_packetOffsetInBits) + 3, (ebpf_byte) << 0); | |
| ebpf_byte = ((char*)(&hd.ipv6.dstAddr))[4]; | |
| write_byte(ebpf_packetStart, BYTES(ebpf_packetOffsetInBits) + 4, (ebpf_byte) << 0); | |
| ebpf_byte = ((char*)(&hd.ipv6.dstAddr))[5]; | |
| write_byte(ebpf_packetStart, BYTES(ebpf_packetOffsetInBits) + 5, (ebpf_byte) << 0); | |
| ebpf_byte = ((char*)(&hd.ipv6.dstAddr))[6]; | |
| write_byte(ebpf_packetStart, BYTES(ebpf_packetOffsetInBits) + 6, (ebpf_byte) << 0); | |
| ebpf_byte = ((char*)(&hd.ipv6.dstAddr))[7]; | |
| write_byte(ebpf_packetStart, BYTES(ebpf_packetOffsetInBits) + 7, (ebpf_byte) << 0); | |
| ebpf_byte = ((char*)(&hd.ipv6.dstAddr))[8]; | |
| write_byte(ebpf_packetStart, BYTES(ebpf_packetOffsetInBits) + 8, (ebpf_byte) << 0); | |
| ebpf_byte = ((char*)(&hd.ipv6.dstAddr))[9]; | |
| write_byte(ebpf_packetStart, BYTES(ebpf_packetOffsetInBits) + 9, (ebpf_byte) << 0); | |
| ebpf_byte = ((char*)(&hd.ipv6.dstAddr))[10]; | |
| write_byte(ebpf_packetStart, BYTES(ebpf_packetOffsetInBits) + 10, (ebpf_byte) << 0); | |
| ebpf_byte = ((char*)(&hd.ipv6.dstAddr))[11]; | |
| write_byte(ebpf_packetStart, BYTES(ebpf_packetOffsetInBits) + 11, (ebpf_byte) << 0); | |
| ebpf_byte = ((char*)(&hd.ipv6.dstAddr))[12]; | |
| write_byte(ebpf_packetStart, BYTES(ebpf_packetOffsetInBits) + 12, (ebpf_byte) << 0); | |
| ebpf_byte = ((char*)(&hd.ipv6.dstAddr))[13]; | |
| write_byte(ebpf_packetStart, BYTES(ebpf_packetOffsetInBits) + 13, (ebpf_byte) << 0); | |
| ebpf_byte = ((char*)(&hd.ipv6.dstAddr))[14]; | |
| write_byte(ebpf_packetStart, BYTES(ebpf_packetOffsetInBits) + 14, (ebpf_byte) << 0); | |
| ebpf_byte = ((char*)(&hd.ipv6.dstAddr))[15]; | |
| write_byte(ebpf_packetStart, BYTES(ebpf_packetOffsetInBits) + 15, (ebpf_byte) << 0); | |
| ebpf_packetOffsetInBits += 128; | |
| } | |
| ; | |
| } | |
| } | |
| ebpf_end: | |
| bpf_map_update_elem(&ebpf_outTable, &ebpf_zero, &xout.output_port, BPF_ANY); | |
| return xout.output_action; | |
| } | |
| char _license[] SEC("license") = "GPL"; |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| xdp12.o: file format ELF64-BPF | |
| Disassembly of section prog: | |
| ebpf_filter: | |
| ; int ebpf_filter(struct xdp_md* skb){ | |
| 0: r8 = r1 | |
| ; void* ebpf_packetEnd = ((void*)(long)skb->data_end); | |
| 1: r5 = *(u32 *)(r8 + 4) | |
| ; void* ebpf_packetStart = ((void*)(long)skb->data); | |
| 2: r9 = *(u32 *)(r8 + 0) | |
| 3: r0 = 0 | |
| ; u32 ebpf_zero = 0; | |
| 4: *(u32 *)(r10 - 4) = r0 | |
| ; if (ebpf_packetEnd < ebpf_packetStart + BYTES(ebpf_packetOffsetInBits + 112)) { | |
| 5: r1 = r9 | |
| 6: r1 += 14 | |
| 7: if r1 > r5 goto 598 | |
| ; hd.ethernet.destination[5] = (u8)((load_byte(ebpf_packetStart, BYTES(ebpf_packetOffsetInBits) + 5) >> 0)); | |
| 8: r1 = *(u8 *)(r9 + 11) | |
| ; hd.ethernet.destination[4] = (u8)((load_byte(ebpf_packetStart, BYTES(ebpf_packetOffsetInBits) + 4) >> 0)); | |
| 9: *(u64 *)(r10 - 24) = r1 | |
| 10: r1 = *(u8 *)(r9 + 10) | |
| ; hd.ethernet.destination[3] = (u8)((load_byte(ebpf_packetStart, BYTES(ebpf_packetOffsetInBits) + 3) >> 0)); | |
| 11: *(u64 *)(r10 - 72) = r1 | |
| 12: r1 = *(u8 *)(r9 + 9) | |
| ; hd.ethernet.destination[2] = (u8)((load_byte(ebpf_packetStart, BYTES(ebpf_packetOffsetInBits) + 2) >> 0)); | |
| 13: *(u64 *)(r10 - 80) = r1 | |
| 14: r1 = *(u8 *)(r9 + 8) | |
| ; hd.ethernet.destination[1] = (u8)((load_byte(ebpf_packetStart, BYTES(ebpf_packetOffsetInBits) + 1) >> 0)); | |
| 15: *(u64 *)(r10 - 88) = r1 | |
| 16: r1 = *(u8 *)(r9 + 7) | |
| ; hd.ethernet.destination[0] = (u8)((load_byte(ebpf_packetStart, BYTES(ebpf_packetOffsetInBits) + 0) >> 0)); | |
| 17: *(u64 *)(r10 - 96) = r1 | |
| 18: r1 = *(u8 *)(r9 + 6) | |
| ; hd.ethernet.source[5] = (u8)((load_byte(ebpf_packetStart, BYTES(ebpf_packetOffsetInBits) + 5) >> 0)); | |
| 19: *(u64 *)(r10 - 104) = r1 | |
| 20: r1 = *(u8 *)(r9 + 5) | |
| ; hd.ethernet.source[4] = (u8)((load_byte(ebpf_packetStart, BYTES(ebpf_packetOffsetInBits) + 4) >> 0)); | |
| 21: *(u64 *)(r10 - 128) = r1 | |
| 22: r1 = *(u8 *)(r9 + 4) | |
| ; hd.ethernet.source[3] = (u8)((load_byte(ebpf_packetStart, BYTES(ebpf_packetOffsetInBits) + 3) >> 0)); | |
| 23: *(u64 *)(r10 - 136) = r1 | |
| 24: r1 = *(u8 *)(r9 + 3) | |
| ; hd.ethernet.source[2] = (u8)((load_byte(ebpf_packetStart, BYTES(ebpf_packetOffsetInBits) + 2) >> 0)); | |
| 25: *(u64 *)(r10 - 144) = r1 | |
| 26: r1 = *(u8 *)(r9 + 2) | |
| ; hd.ethernet.source[1] = (u8)((load_byte(ebpf_packetStart, BYTES(ebpf_packetOffsetInBits) + 1) >> 0)); | |
| 27: *(u64 *)(r10 - 152) = r1 | |
| 28: r1 = *(u8 *)(r9 + 1) | |
| ; hd.ethernet.source[0] = (u8)((load_byte(ebpf_packetStart, BYTES(ebpf_packetOffsetInBits) + 0) >> 0)); | |
| 29: *(u64 *)(r10 - 160) = r1 | |
| 30: r1 = *(u8 *)(r9 + 0) | |
| ; hd.ethernet.protocol = (u16)((load_half(ebpf_packetStart, BYTES(ebpf_packetOffsetInBits)))); | |
| 31: *(u64 *)(r10 - 168) = r1 | |
| 32: r1 = *(u16 *)(r9 + 12) | |
| 33: r3 = r1 | |
| 34: r3 >>= 8 | |
| 35: *(u64 *)(r10 - 112) = r1 | |
| ; switch (hd.ethernet.protocol) { | |
| 36: r0 = r1 | |
| 37: r0 <<= 8 | |
| 38: *(u64 *)(r10 - 120) = r3 | |
| 39: r0 |= r3 | |
| 40: r0 &= 65535 | |
| 41: if r0 == 37120 goto 105 | |
| 42: r6 = 112 | |
| 43: r1 = 0 | |
| 44: *(u64 *)(r10 - 176) = r1 | |
| 45: r4 = 0 | |
| 46: r1 = 0 | |
| 47: *(u64 *)(r10 - 40) = r1 | |
| 48: r1 = 0 | |
| 49: *(u64 *)(r10 - 56) = r1 | |
| 50: r1 = 0 | |
| 51: *(u64 *)(r10 - 32) = r1 | |
| 52: r1 = 0 | |
| 53: *(u64 *)(r10 - 48) = r1 | |
| 54: if r0 == 34525 goto 197 | |
| 55: r1 = 0 | |
| 56: *(u64 *)(r10 - 312) = r1 | |
| 57: r1 = 0 | |
| 58: *(u64 *)(r10 - 384) = r1 | |
| 59: r1 = 0 | |
| 60: *(u64 *)(r10 - 184) = r1 | |
| 61: r1 = 0 | |
| 62: *(u64 *)(r10 - 192) = r1 | |
| 63: r1 = 0 | |
| 64: *(u64 *)(r10 - 200) = r1 | |
| 65: r1 = 0 | |
| 66: *(u64 *)(r10 - 208) = r1 | |
| 67: r1 = 0 | |
| 68: *(u64 *)(r10 - 216) = r1 | |
| 69: r1 = 0 | |
| 70: *(u64 *)(r10 - 224) = r1 | |
| 71: r1 = 0 | |
| 72: *(u64 *)(r10 - 232) = r1 | |
| 73: r1 = 0 | |
| 74: *(u64 *)(r10 - 240) = r1 | |
| 75: r1 = 0 | |
| 76: *(u64 *)(r10 - 248) = r1 | |
| 77: r1 = 0 | |
| 78: *(u64 *)(r10 - 256) = r1 | |
| 79: r1 = 0 | |
| 80: *(u64 *)(r10 - 264) = r1 | |
| 81: r1 = 0 | |
| 82: *(u64 *)(r10 - 272) = r1 | |
| 83: r1 = 0 | |
| 84: *(u64 *)(r10 - 280) = r1 | |
| 85: r1 = 0 | |
| 86: *(u64 *)(r10 - 288) = r1 | |
| 87: r1 = 0 | |
| 88: *(u64 *)(r10 - 296) = r1 | |
| 89: r1 = 0 | |
| 90: *(u64 *)(r10 - 336) = r1 | |
| 91: r1 = 0 | |
| 92: *(u64 *)(r10 - 304) = r1 | |
| 93: r1 = 0 | |
| 94: *(u64 *)(r10 - 320) = r1 | |
| 95: r1 = 0 | |
| 96: *(u64 *)(r10 - 328) = r1 | |
| 97: r1 = 0 | |
| 98: *(u64 *)(r10 - 344) = r1 | |
| 99: r1 = 0 | |
| 100: *(u64 *)(r10 - 352) = r1 | |
| 101: r1 = 0 | |
| 102: *(u64 *)(r10 - 360) = r1 | |
| 103: r1 = 0 | |
| 104: *(u64 *)(r10 - 368) = r1 | |
| 105: r1 = 0 | |
| 106: *(u64 *)(r10 - 376) = r1 | |
| 107: r1 = 0 | |
| 108: *(u64 *)(r10 - 392) = r1 | |
| 109: r1 = 0 | |
| 110: *(u64 *)(r10 - 400) = r1 | |
| 111: r1 = 0 | |
| 112: *(u64 *)(r10 - 408) = r1 | |
| 113: r1 = 0 | |
| 114: *(u64 *)(r10 - 416) = r1 | |
| 115: r1 = 0 | |
| 116: *(u64 *)(r10 - 424) = r1 | |
| 117: r1 = 0 | |
| 118: *(u64 *)(r10 - 432) = r1 | |
| 119: r1 = 0 | |
| 120: *(u64 *)(r10 - 440) = r1 | |
| 121: r1 = 0 | |
| 122: *(u64 *)(r10 - 456) = r1 | |
| 123: r1 = 0 | |
| 124: *(u64 *)(r10 - 448) = r1 | |
| 125: r1 = 0 | |
| 126: *(u64 *)(r10 - 464) = r1 | |
| 127: r1 = 0 | |
| 128: *(u64 *)(r10 - 472) = r1 | |
| 129: r7 = 0 | |
| 130: r1 = 0 | |
| 131: *(u64 *)(r10 - 480) = r1 | |
| 132: r1 = 0 | |
| 133: *(u64 *)(r10 - 64) = r1 | |
| 134: r1 = 0 | |
| 135: *(u64 *)(r10 - 488) = r1 | |
| 136: r4 = 0 | |
| 137: r3 = 0 | |
| 138: r1 = 0 | |
| 139: *(u64 *)(r10 - 40) = r1 | |
| 140: r1 = 0 | |
| 141: *(u64 *)(r10 - 56) = r1 | |
| 142: r1 = 0 | |
| 143: *(u64 *)(r10 - 32) = r1 | |
| 144: r1 = 0 | |
| 145: *(u64 *)(r10 - 48) = r1 | |
| 146: if r0 != 33024 goto 255 | |
| LBB0_4: | |
| 147: r0 = 0 | |
| ; if (ebpf_packetEnd < ebpf_packetStart + BYTES(ebpf_packetOffsetInBits + 32)) { | |
| 148: r1 = r9 | |
| 149: r1 += 18 | |
| 150: if r1 > r5 goto 455 | |
| 151: r1 = 0 | |
| 152: *(u64 *)(r10 - 312) = r1 | |
| 153: r6 = 144 | |
| 154: r1 = 1 | |
| ; hd.vlan_tag.vid = (u16)((load_half(ebpf_packetStart, BYTES(ebpf_packetOffsetInBits))) & EBPF_MASK(u16, 12)); | |
| 155: *(u64 *)(r10 - 176) = r1 | |
| 156: r1 = *(u16 *)(r9 + 14) | |
| 157: r3 = r1 | |
| 158: r3 &= 15 | |
| 159: *(u64 *)(r10 - 48) = r3 | |
| 160: r1 >>= 8 | |
| 161: *(u64 *)(r10 - 32) = r1 | |
| ; hd.vlan_tag.pcp = (u8)((load_byte(ebpf_packetStart, BYTES(ebpf_packetOffsetInBits)) >> 5) & EBPF_MASK(u8, 3)); | |
| 162: r4 = *(u8 *)(r9 + 14) | |
| 163: r4 >>= 5 | |
| ; hd.vlan_tag.etherType = (u16)((load_half(ebpf_packetStart, BYTES(ebpf_packetOffsetInBits)))); | |
| 164: r0 = *(u16 *)(r9 + 16) | |
| 165: r1 = r0 | |
| 166: bswap64 r1 | |
| 167: r1 >>= 56 | |
| 168: *(u64 *)(r10 - 56) = r1 | |
| 169: bswap16 r0 | |
| 170: r1 = 0 | |
| 171: *(u64 *)(r10 - 384) = r1 | |
| 172: r1 = 0 | |
| 173: *(u64 *)(r10 - 184) = r1 | |
| 174: r1 = 0 | |
| 175: *(u64 *)(r10 - 192) = r1 | |
| 176: r1 = 0 | |
| 177: *(u64 *)(r10 - 200) = r1 | |
| 178: r1 = 0 | |
| 179: *(u64 *)(r10 - 208) = r1 | |
| 180: r1 = 0 | |
| 181: *(u64 *)(r10 - 216) = r1 | |
| 182: r1 = 0 | |
| 183: *(u64 *)(r10 - 224) = r1 | |
| 184: r1 = 0 | |
| 185: *(u64 *)(r10 - 232) = r1 | |
| 186: r1 = 0 | |
| 187: *(u64 *)(r10 - 240) = r1 | |
| 188: r1 = 0 | |
| 189: *(u64 *)(r10 - 248) = r1 | |
| 190: r1 = 0 | |
| 191: *(u64 *)(r10 - 256) = r1 | |
| 192: r1 = 0 | |
| 193: *(u64 *)(r10 - 264) = r1 | |
| 194: r1 = 0 | |
| 195: *(u64 *)(r10 - 272) = r1 | |
| 196: r1 = 0 | |
| 197: *(u64 *)(r10 - 280) = r1 | |
| 198: r1 = 0 | |
| 199: *(u64 *)(r10 - 288) = r1 | |
| 200: r1 = 0 | |
| 201: *(u64 *)(r10 - 296) = r1 | |
| 202: r1 = 0 | |
| 203: *(u64 *)(r10 - 336) = r1 | |
| 204: r1 = 0 | |
| 205: *(u64 *)(r10 - 304) = r1 | |
| 206: r1 = 0 | |
| 207: *(u64 *)(r10 - 320) = r1 | |
| 208: r1 = 0 | |
| 209: *(u64 *)(r10 - 328) = r1 | |
| 210: r1 = 0 | |
| 211: *(u64 *)(r10 - 344) = r1 | |
| 212: r1 = 0 | |
| 213: *(u64 *)(r10 - 352) = r1 | |
| 214: r1 = 0 | |
| 215: *(u64 *)(r10 - 360) = r1 | |
| 216: r1 = 0 | |
| 217: *(u64 *)(r10 - 368) = r1 | |
| 218: r1 = 0 | |
| 219: *(u64 *)(r10 - 376) = r1 | |
| 220: r1 = 0 | |
| 221: *(u64 *)(r10 - 392) = r1 | |
| 222: r1 = 0 | |
| 223: *(u64 *)(r10 - 400) = r1 | |
| 224: r1 = 0 | |
| 225: *(u64 *)(r10 - 408) = r1 | |
| 226: r1 = 0 | |
| 227: *(u64 *)(r10 - 416) = r1 | |
| 228: r1 = 0 | |
| 229: *(u64 *)(r10 - 424) = r1 | |
| 230: r1 = 0 | |
| 231: *(u64 *)(r10 - 432) = r1 | |
| 232: r1 = 0 | |
| 233: *(u64 *)(r10 - 440) = r1 | |
| 234: r1 = 0 | |
| 235: *(u64 *)(r10 - 456) = r1 | |
| 236: r1 = 0 | |
| 237: *(u64 *)(r10 - 448) = r1 | |
| 238: r1 = 0 | |
| 239: *(u64 *)(r10 - 464) = r1 | |
| 240: r1 = 0 | |
| 241: *(u64 *)(r10 - 472) = r1 | |
| 242: r7 = 0 | |
| 243: r1 = 0 | |
| 244: *(u64 *)(r10 - 480) = r1 | |
| 245: r1 = 0 | |
| 246: *(u64 *)(r10 - 64) = r1 | |
| 247: r1 = 0 | |
| 248: *(u64 *)(r10 - 488) = r1 | |
| 249: r3 = 0 | |
| 250: *(u64 *)(r10 - 40) = r0 | |
| ; switch (hd.vlan_tag.etherType) { | |
| 251: if r0 != 34525 goto 150 | |
| LBB0_6: | |
| 252: *(u64 *)(r10 - 496) = r4 | |
| ; if (ebpf_packetEnd < ebpf_packetStart + BYTES(ebpf_packetOffsetInBits + 320)) { | |
| 253: r1 = r6 | |
| 254: r1 += 320 | |
| 255: r1 >>= 3 | |
| 256: r3 = r9 | |
| 257: r3 += r1 | |
| 258: r0 = 0 | |
| 259: if r3 > r5 goto 346 | |
| ; ebpf_packetOffsetInBits += 8; | |
| 260: r5 = r6 | |
| 261: r5 |= 12 | |
| ; ebpf_packetOffsetInBits += 8; | |
| 262: r1 = r5 | |
| 263: r1 += 44 | |
| ; hd.ipv6.hopLimit = (u8)((load_byte(ebpf_packetStart, BYTES(ebpf_packetOffsetInBits)))); | |
| 264: r1 >>= 3 | |
| 265: *(u64 *)(r10 - 64) = r1 | |
| ; ebpf_packetOffsetInBits += 16; | |
| 266: r7 = r5 | |
| 267: r7 += 36 | |
| ; hd.ipv6.nextHdr = (u8)((load_byte(ebpf_packetStart, BYTES(ebpf_packetOffsetInBits)))); | |
| 268: r7 >>= 3 | |
| ; ebpf_packetOffsetInBits += 20; | |
| 269: r0 = r5 | |
| 270: r0 += 20 | |
| ; hd.ipv6.payloadLen = (u16)((load_half(ebpf_packetStart, BYTES(ebpf_packetOffsetInBits)))); | |
| 271: r0 >>= 3 | |
| ; ebpf_packetOffsetInBits += 8; | |
| 272: r1 = r5 | |
| 273: r1 += 52 | |
| ; hd.ipv6.srcAddr[0] = (u8)((load_byte(ebpf_packetStart, BYTES(ebpf_packetOffsetInBits) + 0) >> 0)); | |
| 274: r1 >>= 3 | |
| ; hd.ipv6.version = (u8)((load_byte(ebpf_packetStart, BYTES(ebpf_packetOffsetInBits)) >> 4) & EBPF_MASK(u8, 4)); | |
| 275: r6 >>= 3 | |
| 276: r2 = *(u64 *)(r10 - 24) | |
| ; hd.ipv6.flowLabel = (u32)((load_word(ebpf_packetStart, BYTES(ebpf_packetOffsetInBits)) >> 8) & EBPF_MASK(u32, 20)); | |
| 277: r2 = r5 | |
| 278: r2 >>= 3 | |
| 279: *(u64 *)(r10 - 184) = r2 | |
| ; ebpf_packetOffsetInBits += 128; | |
| 280: r5 += 180 | |
| ; hd.ipv6.dstAddr[0] = (u8)((load_byte(ebpf_packetStart, BYTES(ebpf_packetOffsetInBits) + 0) >> 0)); | |
| 281: r5 >>= 3 | |
| 282: r4 = r9 | |
| 283: r4 += r5 | |
| ; hd.ipv6.dstAddr[1] = (u8)((load_byte(ebpf_packetStart, BYTES(ebpf_packetOffsetInBits) + 1) >> 0)); | |
| 284: r5 |= 1 | |
| ; hd.ipv6.version = (u8)((load_byte(ebpf_packetStart, BYTES(ebpf_packetOffsetInBits)) >> 4) & EBPF_MASK(u8, 4)); | |
| 285: r3 = r9 | |
| 286: r3 += r6 | |
| 287: r6 = r9 | |
| 288: r6 += r1 | |
| ; hd.ipv6.srcAddr[1] = (u8)((load_byte(ebpf_packetStart, BYTES(ebpf_packetOffsetInBits) + 1) >> 0)); | |
| 289: r1 |= 1 | |
| ; hd.ipv6.payloadLen = (u16)((load_half(ebpf_packetStart, BYTES(ebpf_packetOffsetInBits)))); | |
| 290: r2 = r9 | |
| 291: r2 += r0 | |
| 292: *(u64 *)(r10 - 312) = r2 | |
| ; hd.ipv6.flowLabel = (u32)((load_word(ebpf_packetStart, BYTES(ebpf_packetOffsetInBits)) >> 8) & EBPF_MASK(u32, 20)); | |
| 293: r2 = r9 | |
| 294: r0 = *(u64 *)(r10 - 184) | |
| 295: r2 += r0 | |
| 296: *(u64 *)(r10 - 336) = r2 | |
| ; hd.ipv6.nextHdr = (u8)((load_byte(ebpf_packetStart, BYTES(ebpf_packetOffsetInBits)))); | |
| 297: r2 = r9 | |
| 298: r2 += r7 | |
| ; hd.ipv6.hopLimit = (u8)((load_byte(ebpf_packetStart, BYTES(ebpf_packetOffsetInBits)))); | |
| 299: r0 = r9 | |
| 300: r7 = *(u64 *)(r10 - 64) | |
| 301: r0 += r7 | |
| ; hd.ipv6.srcAddr[1] = (u8)((load_byte(ebpf_packetStart, BYTES(ebpf_packetOffsetInBits) + 1) >> 0)); | |
| 302: r7 = r9 | |
| 303: r7 += r1 | |
| ; hd.ipv6.dstAddr[1] = (u8)((load_byte(ebpf_packetStart, BYTES(ebpf_packetOffsetInBits) + 1) >> 0)); | |
| 304: r9 += r5 | |
| 305: r1 = 1 | |
| 306: *(u64 *)(r10 - 184) = r1 | |
| 307: r5 = *(u32 *)(r8 + 4) | |
| 308: r1 = *(u32 *)(r8 + 0) | |
| ; goto accept; | |
| 309: r8 = *(u16 *)(r3 + 0) | |
| 310: r8 &= 15 | |
| 311: *(u64 *)(r10 - 480) = r8 | |
| ; hd.ipv6.version = (u8)((load_byte(ebpf_packetStart, BYTES(ebpf_packetOffsetInBits)) >> 4) & EBPF_MASK(u8, 4)); | |
| 312: r3 = *(u8 *)(r3 + 0) | |
| 313: r3 >>= 4 | |
| 314: *(u64 *)(r10 - 64) = r3 | |
| ; hd.ipv6.dstAddr[15] = (u8)((load_byte(ebpf_packetStart, BYTES(ebpf_packetOffsetInBits) + 15) >> 0)); | |
| 315: r3 = *(u8 *)(r4 + 15) | |
| ; hd.ipv6.dstAddr[14] = (u8)((load_byte(ebpf_packetStart, BYTES(ebpf_packetOffsetInBits) + 14) >> 0)); | |
| 316: *(u64 *)(r10 - 192) = r3 | |
| 317: r3 = *(u8 *)(r4 + 14) | |
| ; hd.ipv6.dstAddr[13] = (u8)((load_byte(ebpf_packetStart, BYTES(ebpf_packetOffsetInBits) + 13) >> 0)); | |
| 318: *(u64 *)(r10 - 200) = r3 | |
| 319: r3 = *(u8 *)(r4 + 13) | |
| ; hd.ipv6.dstAddr[12] = (u8)((load_byte(ebpf_packetStart, BYTES(ebpf_packetOffsetInBits) + 12) >> 0)); | |
| 320: *(u64 *)(r10 - 208) = r3 | |
| 321: r3 = *(u8 *)(r4 + 12) | |
| ; hd.ipv6.dstAddr[11] = (u8)((load_byte(ebpf_packetStart, BYTES(ebpf_packetOffsetInBits) + 11) >> 0)); | |
| 322: *(u64 *)(r10 - 216) = r3 | |
| 323: r3 = *(u8 *)(r4 + 11) | |
| ; hd.ipv6.dstAddr[10] = (u8)((load_byte(ebpf_packetStart, BYTES(ebpf_packetOffsetInBits) + 10) >> 0)); | |
| 324: *(u64 *)(r10 - 224) = r3 | |
| 325: r3 = *(u8 *)(r4 + 10) | |
| ; hd.ipv6.dstAddr[9] = (u8)((load_byte(ebpf_packetStart, BYTES(ebpf_packetOffsetInBits) + 9) >> 0)); | |
| 326: *(u64 *)(r10 - 232) = r3 | |
| 327: r3 = *(u8 *)(r4 + 9) | |
| ; hd.ipv6.dstAddr[8] = (u8)((load_byte(ebpf_packetStart, BYTES(ebpf_packetOffsetInBits) + 8) >> 0)); | |
| 328: *(u64 *)(r10 - 240) = r3 | |
| 329: r3 = *(u8 *)(r4 + 8) | |
| ; hd.ipv6.dstAddr[7] = (u8)((load_byte(ebpf_packetStart, BYTES(ebpf_packetOffsetInBits) + 7) >> 0)); | |
| 330: *(u64 *)(r10 - 248) = r3 | |
| 331: r3 = *(u8 *)(r4 + 7) | |
| ; hd.ipv6.dstAddr[6] = (u8)((load_byte(ebpf_packetStart, BYTES(ebpf_packetOffsetInBits) + 6) >> 0)); | |
| 332: *(u64 *)(r10 - 256) = r3 | |
| 333: r3 = *(u8 *)(r4 + 6) | |
| ; hd.ipv6.dstAddr[5] = (u8)((load_byte(ebpf_packetStart, BYTES(ebpf_packetOffsetInBits) + 5) >> 0)); | |
| 334: *(u64 *)(r10 - 264) = r3 | |
| 335: r3 = *(u8 *)(r4 + 5) | |
| ; hd.ipv6.dstAddr[4] = (u8)((load_byte(ebpf_packetStart, BYTES(ebpf_packetOffsetInBits) + 4) >> 0)); | |
| 336: *(u64 *)(r10 - 272) = r3 | |
| 337: r3 = *(u8 *)(r4 + 4) | |
| ; hd.ipv6.dstAddr[3] = (u8)((load_byte(ebpf_packetStart, BYTES(ebpf_packetOffsetInBits) + 3) >> 0)); | |
| 338: *(u64 *)(r10 - 280) = r3 | |
| 339: r3 = *(u8 *)(r4 + 3) | |
| ; hd.ipv6.dstAddr[2] = (u8)((load_byte(ebpf_packetStart, BYTES(ebpf_packetOffsetInBits) + 2) >> 0)); | |
| 340: *(u64 *)(r10 - 288) = r3 | |
| 341: r3 = *(u8 *)(r4 + 2) | |
| ; hd.ipv6.dstAddr[0] = (u8)((load_byte(ebpf_packetStart, BYTES(ebpf_packetOffsetInBits) + 0) >> 0)); | |
| 342: *(u64 *)(r10 - 296) = r3 | |
| 343: r3 = *(u8 *)(r4 + 0) | |
| ; hd.ipv6.srcAddr[15] = (u8)((load_byte(ebpf_packetStart, BYTES(ebpf_packetOffsetInBits) + 15) >> 0)); | |
| 344: *(u64 *)(r10 - 304) = r3 | |
| 345: r3 = *(u8 *)(r6 + 15) | |
| ; hd.ipv6.srcAddr[14] = (u8)((load_byte(ebpf_packetStart, BYTES(ebpf_packetOffsetInBits) + 14) >> 0)); | |
| 346: *(u64 *)(r10 - 320) = r3 | |
| 347: r3 = *(u8 *)(r6 + 14) | |
| ; hd.ipv6.srcAddr[13] = (u8)((load_byte(ebpf_packetStart, BYTES(ebpf_packetOffsetInBits) + 13) >> 0)); | |
| 348: *(u64 *)(r10 - 328) = r3 | |
| 349: r3 = *(u8 *)(r6 + 13) | |
| ; hd.ipv6.srcAddr[12] = (u8)((load_byte(ebpf_packetStart, BYTES(ebpf_packetOffsetInBits) + 12) >> 0)); | |
| 350: *(u64 *)(r10 - 344) = r3 | |
| 351: r3 = *(u8 *)(r6 + 12) | |
| ; hd.ipv6.srcAddr[11] = (u8)((load_byte(ebpf_packetStart, BYTES(ebpf_packetOffsetInBits) + 11) >> 0)); | |
| 352: *(u64 *)(r10 - 352) = r3 | |
| 353: r3 = *(u8 *)(r6 + 11) | |
| ; hd.ipv6.srcAddr[10] = (u8)((load_byte(ebpf_packetStart, BYTES(ebpf_packetOffsetInBits) + 10) >> 0)); | |
| 354: *(u64 *)(r10 - 360) = r3 | |
| 355: r3 = *(u8 *)(r6 + 10) | |
| ; hd.ipv6.srcAddr[9] = (u8)((load_byte(ebpf_packetStart, BYTES(ebpf_packetOffsetInBits) + 9) >> 0)); | |
| 356: *(u64 *)(r10 - 368) = r3 | |
| 357: r3 = *(u8 *)(r6 + 9) | |
| ; hd.ipv6.srcAddr[8] = (u8)((load_byte(ebpf_packetStart, BYTES(ebpf_packetOffsetInBits) + 8) >> 0)); | |
| 358: *(u64 *)(r10 - 376) = r3 | |
| 359: r3 = *(u8 *)(r6 + 8) | |
| ; hd.ipv6.srcAddr[7] = (u8)((load_byte(ebpf_packetStart, BYTES(ebpf_packetOffsetInBits) + 7) >> 0)); | |
| 360: *(u64 *)(r10 - 392) = r3 | |
| 361: r3 = *(u8 *)(r6 + 7) | |
| ; hd.ipv6.srcAddr[6] = (u8)((load_byte(ebpf_packetStart, BYTES(ebpf_packetOffsetInBits) + 6) >> 0)); | |
| 362: *(u64 *)(r10 - 400) = r3 | |
| 363: r3 = *(u8 *)(r6 + 6) | |
| ; hd.ipv6.srcAddr[5] = (u8)((load_byte(ebpf_packetStart, BYTES(ebpf_packetOffsetInBits) + 5) >> 0)); | |
| 364: *(u64 *)(r10 - 408) = r3 | |
| 365: r3 = *(u8 *)(r6 + 5) | |
| ; hd.ipv6.srcAddr[4] = (u8)((load_byte(ebpf_packetStart, BYTES(ebpf_packetOffsetInBits) + 4) >> 0)); | |
| 366: *(u64 *)(r10 - 416) = r3 | |
| 367: r3 = *(u8 *)(r6 + 4) | |
| ; hd.ipv6.srcAddr[3] = (u8)((load_byte(ebpf_packetStart, BYTES(ebpf_packetOffsetInBits) + 3) >> 0)); | |
| 368: *(u64 *)(r10 - 424) = r3 | |
| 369: r3 = *(u8 *)(r6 + 3) | |
| ; hd.ipv6.srcAddr[2] = (u8)((load_byte(ebpf_packetStart, BYTES(ebpf_packetOffsetInBits) + 2) >> 0)); | |
| 370: *(u64 *)(r10 - 432) = r3 | |
| 371: r3 = *(u8 *)(r6 + 2) | |
| ; hd.ipv6.srcAddr[0] = (u8)((load_byte(ebpf_packetStart, BYTES(ebpf_packetOffsetInBits) + 0) >> 0)); | |
| 372: *(u64 *)(r10 - 440) = r3 | |
| 373: r3 = *(u8 *)(r6 + 0) | |
| ; hd.ipv6.hopLimit = (u8)((load_byte(ebpf_packetStart, BYTES(ebpf_packetOffsetInBits)))); | |
| 374: *(u64 *)(r10 - 448) = r3 | |
| 375: r3 = *(u8 *)(r0 + 0) | |
| ; hd.ipv6.nextHdr = (u8)((load_byte(ebpf_packetStart, BYTES(ebpf_packetOffsetInBits)))); | |
| 376: *(u64 *)(r10 - 464) = r3 | |
| 377: r3 = *(u8 *)(r2 + 0) | |
| 378: *(u64 *)(r10 - 472) = r3 | |
| 379: r2 = *(u64 *)(r10 - 24) | |
| ; hd.ipv6.flowLabel = (u32)((load_word(ebpf_packetStart, BYTES(ebpf_packetOffsetInBits)) >> 8) & EBPF_MASK(u32, 20)); | |
| 380: r2 = *(u64 *)(r10 - 336) | |
| 381: r3 = *(u32 *)(r2 + 0) | |
| 382: r4 = r3 | |
| 383: bswap16 r4 | |
| 384: *(u64 *)(r10 - 488) = r4 | |
| ; hd.ipv6.payloadLen = (u16)((load_half(ebpf_packetStart, BYTES(ebpf_packetOffsetInBits)))); | |
| 385: r2 = *(u64 *)(r10 - 312) | |
| 386: r4 = *(u16 *)(r2 + 0) | |
| 387: *(u64 *)(r10 - 312) = r4 | |
| 388: r4 >>= 8 | |
| 389: *(u64 *)(r10 - 384) = r4 | |
| ; hd.ipv6.dstAddr[1] = (u8)((load_byte(ebpf_packetStart, BYTES(ebpf_packetOffsetInBits) + 1) >> 0)); | |
| 390: r2 = *(u8 *)(r9 + 0) | |
| ; hd.ipv6.srcAddr[1] = (u8)((load_byte(ebpf_packetStart, BYTES(ebpf_packetOffsetInBits) + 1) >> 0)); | |
| 391: *(u64 *)(r10 - 336) = r2 | |
| 392: r2 = *(u8 *)(r7 + 0) | |
| ; hd.ipv6.flowLabel = (u32)((load_word(ebpf_packetStart, BYTES(ebpf_packetOffsetInBits)) >> 8) & EBPF_MASK(u32, 20)); | |
| 393: *(u64 *)(r10 - 456) = r2 | |
| 394: bswap64 r3 | |
| 395: r7 = r3 | |
| 396: r7 >>= 40 | |
| ; goto accept; | |
| 397: r7 &= 15 | |
| ; hd.ipv6.flowLabel = (u32)((load_word(ebpf_packetStart, BYTES(ebpf_packetOffsetInBits)) >> 8) & EBPF_MASK(u32, 20)); | |
| 398: r3 >>= 56 | |
| 399: r3 &= 15 | |
| ; ebpf_packetStart = ((void*)(long)skb->data); | |
| 400: r9 = r1 | |
| 401: r4 = *(u64 *)(r10 - 496) | |
| LBB0_8: | |
| 402: r6 = r4 | |
| 403: r1 = 2 | |
| ; tmp_1 = (hd.ipv6.version != 6); | |
| 404: r4 = 6 | |
| 405: r8 = *(u64 *)(r10 - 64) | |
| 406: if r8 == r4 goto 1 | |
| 407: r1 = 1 | |
| LBB0_10: | |
| 408: r0 = 0 | |
| ; xout.output_port = 0; | |
| 409: *(u32 *)(r10 - 12) = r0 | |
| ; xout.output_action = tmp_2; | |
| 410: *(u32 *)(r10 - 16) = r1 | |
| ; ebpf_packetEnd = ((void*)(long)skb->data_end); | |
| 411: r5 <<= 32 | |
| 412: r5 >>= 32 | |
| ; ebpf_packetStart = ((void*)(long)skb->data); | |
| 413: r9 <<= 32 | |
| 414: r9 >>= 32 | |
| ; if (ebpf_packetEnd < ebpf_packetStart + BYTES(ebpf_packetOffsetInBits + 112)) { | |
| 415: r1 = r9 | |
| 416: r1 += 14 | |
| 417: if r1 > r5 goto 188 | |
| ; write_byte(ebpf_packetStart, BYTES(ebpf_packetOffsetInBits) + 0, (ebpf_byte) << 0); | |
| 418: r1 = *(u64 *)(r10 - 168) | |
| 419: *(u8 *)(r9 + 0) = r1 | |
| ; write_byte(ebpf_packetStart, BYTES(ebpf_packetOffsetInBits) + 1, (ebpf_byte) << 0); | |
| 420: r1 = *(u64 *)(r10 - 160) | |
| 421: *(u8 *)(r9 + 1) = r1 | |
| ; write_byte(ebpf_packetStart, BYTES(ebpf_packetOffsetInBits) + 2, (ebpf_byte) << 0); | |
| 422: r1 = *(u64 *)(r10 - 152) | |
| 423: *(u8 *)(r9 + 2) = r1 | |
| ; write_byte(ebpf_packetStart, BYTES(ebpf_packetOffsetInBits) + 3, (ebpf_byte) << 0); | |
| 424: r1 = *(u64 *)(r10 - 144) | |
| 425: *(u8 *)(r9 + 3) = r1 | |
| ; write_byte(ebpf_packetStart, BYTES(ebpf_packetOffsetInBits) + 4, (ebpf_byte) << 0); | |
| 426: r1 = *(u64 *)(r10 - 136) | |
| 427: *(u8 *)(r9 + 4) = r1 | |
| ; write_byte(ebpf_packetStart, BYTES(ebpf_packetOffsetInBits) + 5, (ebpf_byte) << 0); | |
| 428: r1 = *(u64 *)(r10 - 128) | |
| 429: *(u8 *)(r9 + 5) = r1 | |
| ; write_byte(ebpf_packetStart, BYTES(ebpf_packetOffsetInBits) + 0, (ebpf_byte) << 0); | |
| 430: r1 = *(u64 *)(r10 - 104) | |
| 431: *(u8 *)(r9 + 6) = r1 | |
| ; write_byte(ebpf_packetStart, BYTES(ebpf_packetOffsetInBits) + 1, (ebpf_byte) << 0); | |
| 432: r1 = *(u64 *)(r10 - 96) | |
| 433: *(u8 *)(r9 + 7) = r1 | |
| ; write_byte(ebpf_packetStart, BYTES(ebpf_packetOffsetInBits) + 2, (ebpf_byte) << 0); | |
| 434: r1 = *(u64 *)(r10 - 88) | |
| 435: *(u8 *)(r9 + 8) = r1 | |
| ; write_byte(ebpf_packetStart, BYTES(ebpf_packetOffsetInBits) + 3, (ebpf_byte) << 0); | |
| 436: r1 = *(u64 *)(r10 - 80) | |
| 437: *(u8 *)(r9 + 9) = r1 | |
| ; write_byte(ebpf_packetStart, BYTES(ebpf_packetOffsetInBits) + 4, (ebpf_byte) << 0); | |
| 438: r1 = *(u64 *)(r10 - 72) | |
| 439: *(u8 *)(r9 + 10) = r1 | |
| ; write_byte(ebpf_packetStart, BYTES(ebpf_packetOffsetInBits) + 5, (ebpf_byte) << 0); | |
| 440: r1 = *(u64 *)(r10 - 24) | |
| 441: *(u8 *)(r9 + 11) = r1 | |
| ; write_byte(ebpf_packetStart, BYTES(ebpf_packetOffsetInBits) + 0, (ebpf_byte) << 0); | |
| 442: r1 = *(u64 *)(r10 - 112) | |
| 443: *(u8 *)(r9 + 12) = r1 | |
| ; write_byte(ebpf_packetStart, BYTES(ebpf_packetOffsetInBits) + 1, (ebpf_byte) << 0); | |
| 444: r1 = *(u64 *)(r10 - 120) | |
| 445: *(u8 *)(r9 + 13) = r1 | |
| 446: r1 = 112 | |
| ; if (hd.vlan_tag.ebpf_valid) { | |
| 447: r4 = *(u64 *)(r10 - 176) | |
| 448: if r4 == 0 goto 15 | |
| ; if (ebpf_packetEnd < ebpf_packetStart + BYTES(ebpf_packetOffsetInBits + 32)) { | |
| 449: r1 = r9 | |
| 450: r1 += 18 | |
| 451: if r1 > r5 goto 154 | |
| ; write_byte(ebpf_packetStart, BYTES(ebpf_packetOffsetInBits) + 0, (ebpf_byte) << 5); | |
| 452: r6 <<= 5 | |
| 453: r1 = *(u64 *)(r10 - 32) | |
| ; write_partial(ebpf_packetStart + BYTES(ebpf_packetOffsetInBits) + 0, 4, (ebpf_byte) << 4); | |
| 454: r1 &= 15 | |
| 455: r1 |= r6 | |
| 456: *(u8 *)(r9 + 14) = r1 | |
| ; write_byte(ebpf_packetStart, BYTES(ebpf_packetOffsetInBits) + 1, (ebpf_byte) << 0); | |
| 457: r1 = *(u64 *)(r10 - 48) | |
| 458: *(u8 *)(r9 + 15) = r1 | |
| ; write_byte(ebpf_packetStart, BYTES(ebpf_packetOffsetInBits) + 0, (ebpf_byte) << 0); | |
| 459: r1 = *(u64 *)(r10 - 56) | |
| 460: *(u8 *)(r9 + 16) = r1 | |
| ; write_byte(ebpf_packetStart, BYTES(ebpf_packetOffsetInBits) + 1, (ebpf_byte) << 0); | |
| 461: r1 = *(u64 *)(r10 - 40) | |
| 462: *(u8 *)(r9 + 17) = r1 | |
| 463: r1 = 144 | |
| LBB0_14: | |
| ; if (hd.ipv6.ebpf_valid) { | |
| 464: r4 = *(u64 *)(r10 - 184) | |
| 465: if r4 == 0 goto 131 | |
| ; if (ebpf_packetEnd < ebpf_packetStart + BYTES(ebpf_packetOffsetInBits + 320)) { | |
| 466: r4 = r1 | |
| 467: r4 += 320 | |
| 468: r4 >>= 3 | |
| 469: r6 = r9 | |
| 470: r6 += r4 | |
| 471: if r6 > r5 goto 134 | |
| ; write_byte(ebpf_packetStart, BYTES(ebpf_packetOffsetInBits) + 0, (ebpf_byte) << 4); | |
| 472: r8 <<= 4 | |
| ; write_partial(ebpf_packetStart + BYTES(ebpf_packetOffsetInBits) + 0, 4, (ebpf_byte) << 0); | |
| 473: r4 = *(u64 *)(r10 - 480) | |
| 474: r8 |= r4 | |
| ; write_byte(ebpf_packetStart, BYTES(ebpf_packetOffsetInBits) + 0, (ebpf_byte) << 4); | |
| 475: r4 = r1 | |
| 476: r4 >>= 3 | |
| 477: r5 = r9 | |
| 478: r5 += r4 | |
| ; write_partial(ebpf_packetStart + BYTES(ebpf_packetOffsetInBits) + 0, 4, (ebpf_byte) << 0); | |
| 479: *(u8 *)(r5 + 0) = r8 | |
| ; ebpf_packetOffsetInBits += 8; | |
| 480: r1 |= 12 | |
| ; write_partial(ebpf_packetStart + BYTES(ebpf_packetOffsetInBits) + 0, 4, (ebpf_byte) << 4); | |
| 481: r4 = r1 | |
| 482: r4 >>= 3 | |
| 483: r5 = r9 | |
| 484: r5 += r4 | |
| 485: r4 = *(u8 *)(r5 + 0) | |
| 486: r4 &= 240 | |
| 487: r7 |= r4 | |
| 488: *(u8 *)(r5 + 0) = r7 | |
| ; write_byte(ebpf_packetStart, BYTES(ebpf_packetOffsetInBits) + 1, (ebpf_byte) << 0); | |
| 489: r4 = *(u64 *)(r10 - 488) | |
| 490: *(u8 *)(r5 + 1) = r4 | |
| ; write_byte(ebpf_packetStart, BYTES(ebpf_packetOffsetInBits) + 2, (ebpf_byte) << 0); | |
| 491: *(u8 *)(r5 + 2) = r3 | |
| ; ebpf_packetOffsetInBits += 20; | |
| 492: r3 = r1 | |
| 493: r3 += 20 | |
| ; write_byte(ebpf_packetStart, BYTES(ebpf_packetOffsetInBits) + 0, (ebpf_byte) << 0); | |
| 494: r3 >>= 3 | |
| 495: r4 = r9 | |
| 496: r4 += r3 | |
| 497: r5 = *(u64 *)(r10 - 312) | |
| 498: *(u8 *)(r4 + 0) = r5 | |
| ; write_byte(ebpf_packetStart, BYTES(ebpf_packetOffsetInBits) + 1, (ebpf_byte) << 0); | |
| 499: r3 |= 1 | |
| 500: r4 = r9 | |
| 501: r4 += r3 | |
| 502: r3 = *(u64 *)(r10 - 384) | |
| 503: *(u8 *)(r4 + 0) = r3 | |
| ; ebpf_packetOffsetInBits += 16; | |
| 504: r3 = r1 | |
| 505: r3 += 36 | |
| ; write_byte(ebpf_packetStart, BYTES(ebpf_packetOffsetInBits) + 0, (ebpf_byte) << 0); | |
| 506: r3 >>= 3 | |
| 507: r4 = r9 | |
| 508: r4 += r3 | |
| 509: r3 = *(u64 *)(r10 - 472) | |
| 510: *(u8 *)(r4 + 0) = r3 | |
| ; ebpf_packetOffsetInBits += 8; | |
| 511: r3 = r1 | |
| 512: r3 += 44 | |
| ; write_byte(ebpf_packetStart, BYTES(ebpf_packetOffsetInBits) + 0, (ebpf_byte) << 0); | |
| 513: r3 >>= 3 | |
| 514: r4 = r9 | |
| 515: r4 += r3 | |
| 516: r3 = *(u64 *)(r10 - 464) | |
| 517: *(u8 *)(r4 + 0) = r3 | |
| ; ebpf_packetOffsetInBits += 8; | |
| 518: r3 = r1 | |
| 519: r3 += 52 | |
| ; write_byte(ebpf_packetStart, BYTES(ebpf_packetOffsetInBits) + 0, (ebpf_byte) << 0); | |
| 520: r3 >>= 3 | |
| 521: r4 = r9 | |
| 522: r4 += r3 | |
| 523: r5 = *(u64 *)(r10 - 448) | |
| 524: *(u8 *)(r4 + 0) = r5 | |
| ; write_byte(ebpf_packetStart, BYTES(ebpf_packetOffsetInBits) + 1, (ebpf_byte) << 0); | |
| 525: r3 |= 1 | |
| 526: r5 = r9 | |
| 527: r5 += r3 | |
| 528: r3 = *(u64 *)(r10 - 456) | |
| 529: *(u8 *)(r5 + 0) = r3 | |
| ; write_byte(ebpf_packetStart, BYTES(ebpf_packetOffsetInBits) + 2, (ebpf_byte) << 0); | |
| 530: r3 = *(u64 *)(r10 - 440) | |
| 531: *(u8 *)(r4 + 2) = r3 | |
| ; write_byte(ebpf_packetStart, BYTES(ebpf_packetOffsetInBits) + 3, (ebpf_byte) << 0); | |
| 532: r3 = *(u64 *)(r10 - 432) | |
| 533: *(u8 *)(r4 + 3) = r3 | |
| ; write_byte(ebpf_packetStart, BYTES(ebpf_packetOffsetInBits) + 4, (ebpf_byte) << 0); | |
| 534: r3 = *(u64 *)(r10 - 424) | |
| 535: *(u8 *)(r4 + 4) = r3 | |
| ; write_byte(ebpf_packetStart, BYTES(ebpf_packetOffsetInBits) + 5, (ebpf_byte) << 0); | |
| 536: r3 = *(u64 *)(r10 - 416) | |
| 537: *(u8 *)(r4 + 5) = r3 | |
| ; write_byte(ebpf_packetStart, BYTES(ebpf_packetOffsetInBits) + 6, (ebpf_byte) << 0); | |
| 538: r3 = *(u64 *)(r10 - 408) | |
| 539: *(u8 *)(r4 + 6) = r3 | |
| ; write_byte(ebpf_packetStart, BYTES(ebpf_packetOffsetInBits) + 7, (ebpf_byte) << 0); | |
| 540: r3 = *(u64 *)(r10 - 400) | |
| 541: *(u8 *)(r4 + 7) = r3 | |
| ; write_byte(ebpf_packetStart, BYTES(ebpf_packetOffsetInBits) + 8, (ebpf_byte) << 0); | |
| 542: r3 = *(u64 *)(r10 - 392) | |
| 543: *(u8 *)(r4 + 8) = r3 | |
| ; write_byte(ebpf_packetStart, BYTES(ebpf_packetOffsetInBits) + 9, (ebpf_byte) << 0); | |
| 544: r3 = *(u64 *)(r10 - 376) | |
| 545: *(u8 *)(r4 + 9) = r3 | |
| ; write_byte(ebpf_packetStart, BYTES(ebpf_packetOffsetInBits) + 10, (ebpf_byte) << 0); | |
| 546: r3 = *(u64 *)(r10 - 368) | |
| 547: *(u8 *)(r4 + 10) = r3 | |
| ; write_byte(ebpf_packetStart, BYTES(ebpf_packetOffsetInBits) + 11, (ebpf_byte) << 0); | |
| 548: r3 = *(u64 *)(r10 - 360) | |
| 549: *(u8 *)(r4 + 11) = r3 | |
| ; write_byte(ebpf_packetStart, BYTES(ebpf_packetOffsetInBits) + 12, (ebpf_byte) << 0); | |
| 550: r3 = *(u64 *)(r10 - 352) | |
| 551: *(u8 *)(r4 + 12) = r3 | |
| ; write_byte(ebpf_packetStart, BYTES(ebpf_packetOffsetInBits) + 13, (ebpf_byte) << 0); | |
| 552: r3 = *(u64 *)(r10 - 344) | |
| 553: *(u8 *)(r4 + 13) = r3 | |
| ; write_byte(ebpf_packetStart, BYTES(ebpf_packetOffsetInBits) + 14, (ebpf_byte) << 0); | |
| 554: r3 = *(u64 *)(r10 - 328) | |
| 555: *(u8 *)(r4 + 14) = r3 | |
| ; write_byte(ebpf_packetStart, BYTES(ebpf_packetOffsetInBits) + 15, (ebpf_byte) << 0); | |
| 556: r3 = *(u64 *)(r10 - 320) | |
| 557: *(u8 *)(r4 + 15) = r3 | |
| ; ebpf_packetOffsetInBits += 128; | |
| 558: r1 += 180 | |
| ; write_byte(ebpf_packetStart, BYTES(ebpf_packetOffsetInBits) + 0, (ebpf_byte) << 0); | |
| 559: r1 >>= 3 | |
| ; write_byte(ebpf_packetStart, BYTES(ebpf_packetOffsetInBits) + 1, (ebpf_byte) << 0); | |
| 560: r3 = r1 | |
| 561: r3 |= 1 | |
| 562: r4 = r9 | |
| 563: r4 += r3 | |
| 564: r9 += r1 | |
| ; write_byte(ebpf_packetStart, BYTES(ebpf_packetOffsetInBits) + 0, (ebpf_byte) << 0); | |
| 565: r1 = *(u64 *)(r10 - 304) | |
| 566: *(u8 *)(r9 + 0) = r1 | |
| ; write_byte(ebpf_packetStart, BYTES(ebpf_packetOffsetInBits) + 1, (ebpf_byte) << 0); | |
| 567: r1 = *(u64 *)(r10 - 336) | |
| 568: *(u8 *)(r4 + 0) = r1 | |
| ; write_byte(ebpf_packetStart, BYTES(ebpf_packetOffsetInBits) + 2, (ebpf_byte) << 0); | |
| 569: r1 = *(u64 *)(r10 - 296) | |
| 570: *(u8 *)(r9 + 2) = r1 | |
| ; write_byte(ebpf_packetStart, BYTES(ebpf_packetOffsetInBits) + 3, (ebpf_byte) << 0); | |
| 571: r1 = *(u64 *)(r10 - 288) | |
| 572: *(u8 *)(r9 + 3) = r1 | |
| ; write_byte(ebpf_packetStart, BYTES(ebpf_packetOffsetInBits) + 4, (ebpf_byte) << 0); | |
| 573: r1 = *(u64 *)(r10 - 280) | |
| 574: *(u8 *)(r9 + 4) = r1 | |
| ; write_byte(ebpf_packetStart, BYTES(ebpf_packetOffsetInBits) + 5, (ebpf_byte) << 0); | |
| 575: r1 = *(u64 *)(r10 - 272) | |
| 576: *(u8 *)(r9 + 5) = r1 | |
| ; write_byte(ebpf_packetStart, BYTES(ebpf_packetOffsetInBits) + 6, (ebpf_byte) << 0); | |
| 577: r1 = *(u64 *)(r10 - 264) | |
| 578: *(u8 *)(r9 + 6) = r1 | |
| ; write_byte(ebpf_packetStart, BYTES(ebpf_packetOffsetInBits) + 7, (ebpf_byte) << 0); | |
| 579: r1 = *(u64 *)(r10 - 256) | |
| 580: *(u8 *)(r9 + 7) = r1 | |
| ; write_byte(ebpf_packetStart, BYTES(ebpf_packetOffsetInBits) + 8, (ebpf_byte) << 0); | |
| 581: r1 = *(u64 *)(r10 - 248) | |
| 582: *(u8 *)(r9 + 8) = r1 | |
| ; write_byte(ebpf_packetStart, BYTES(ebpf_packetOffsetInBits) + 9, (ebpf_byte) << 0); | |
| 583: r1 = *(u64 *)(r10 - 240) | |
| 584: *(u8 *)(r9 + 9) = r1 | |
| ; write_byte(ebpf_packetStart, BYTES(ebpf_packetOffsetInBits) + 10, (ebpf_byte) << 0); | |
| 585: r1 = *(u64 *)(r10 - 232) | |
| 586: *(u8 *)(r9 + 10) = r1 | |
| ; write_byte(ebpf_packetStart, BYTES(ebpf_packetOffsetInBits) + 11, (ebpf_byte) << 0); | |
| 587: r1 = *(u64 *)(r10 - 224) | |
| 588: *(u8 *)(r9 + 11) = r1 | |
| ; write_byte(ebpf_packetStart, BYTES(ebpf_packetOffsetInBits) + 12, (ebpf_byte) << 0); | |
| 589: r1 = *(u64 *)(r10 - 216) | |
| 590: *(u8 *)(r9 + 12) = r1 | |
| ; write_byte(ebpf_packetStart, BYTES(ebpf_packetOffsetInBits) + 13, (ebpf_byte) << 0); | |
| 591: r1 = *(u64 *)(r10 - 208) | |
| 592: *(u8 *)(r9 + 13) = r1 | |
| ; write_byte(ebpf_packetStart, BYTES(ebpf_packetOffsetInBits) + 14, (ebpf_byte) << 0); | |
| 593: r1 = *(u64 *)(r10 - 200) | |
| 594: *(u8 *)(r9 + 14) = r1 | |
| ; write_byte(ebpf_packetStart, BYTES(ebpf_packetOffsetInBits) + 15, (ebpf_byte) << 0); | |
| 595: r1 = *(u64 *)(r10 - 192) | |
| 596: *(u8 *)(r9 + 15) = r1 | |
| LBB0_17: | |
| ; xout.output_port = 0; | |
| 597: r3 = r10 | |
| 598: r3 += -12 | |
| 599: r2 = r10 | |
| 600: r2 += -4 | |
| ; bpf_map_update_elem(&ebpf_outTable, &ebpf_zero, &xout.output_port, BPF_ANY); | |
| 601: r1 = 0ll | |
| 603: r4 = 0 | |
| 604: call 2 | |
| ; return xout.output_action; | |
| 605: r0 = *(u32 *)(r10 - 16) | |
| LBB0_18: | |
| ; } | |
| 606: exit |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| #include "xdp_model.p4" | |
| header ethernet_t { | |
| bit<48> source; | |
| bit<48> destination; | |
| bit<16> protocol; | |
| } | |
| header vlan_tag_t { | |
| bit<3> pcp; | |
| bit<1> cfi; | |
| bit<12> vid; | |
| bit<16> etherType; | |
| } | |
| header ipv6_t { | |
| bit<4> version; | |
| bit<8> trafficClass; | |
| bit<20> flowLabel; | |
| bit<16> payloadLen; | |
| bit<8> nextHdr; | |
| bit<8> hopLimit; | |
| bit<128> srcAddr; | |
| bit<128> dstAddr; | |
| } | |
| struct Headers { | |
| ethernet_t ethernet; | |
| vlan_tag_t vlan_tag; | |
| ipv6_t ipv6; | |
| } | |
| parser Parser(packet_in packet, out Headers hd) { | |
| state start { | |
| packet.extract(hd.ethernet); | |
| transition select(hd.ethernet.protocol) { | |
| 16w0x8100: parse_vlan_tag; | |
| 16w0x9100: parse_vlan_tag; | |
| 16w0x86dd: parse_ipv6; | |
| default: accept; | |
| } | |
| } | |
| state parse_vlan_tag { | |
| packet.extract(hd.vlan_tag); | |
| transition select(hd.vlan_tag.etherType) { | |
| 16w0x86dd: parse_ipv6; | |
| default: accept; | |
| } | |
| } | |
| state parse_ipv6 { | |
| packet.extract(hd.ipv6); | |
| transition accept; | |
| } | |
| } | |
| control Ingress(inout Headers hdr, in xdp_input xin, out xdp_output xout) { | |
| apply { | |
| xout.output_port = 0; | |
| xout.output_action = (hdr.ipv6.version != 0x6) ? xdp_action.XDP_DROP : xdp_action.XDP_PASS; | |
| } | |
| } | |
| control Deparser(in Headers hdrs, packet_out packet) { | |
| apply { | |
| packet.emit(hdrs.ethernet); | |
| packet.emit(hdrs.vlan_tag); | |
| packet.emit(hdrs.ipv6); | |
| } | |
| } | |
| xdp(Parser(), Ingress(), Deparser()) main; |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| root@prmh-nsx-perf-server139:~/p4c-clone/extensions/p4c-xdp/tests# make | |
| clang \ | |
| -D__KERNEL__ -D__ASM_SYSREG_H -Wno-unused-value -Wno-pointer-sign \ | |
| -Wno-compare-distinct-pointer-types \ | |
| -Wno-gnu-variable-sized-type-not-at-end \ | |
| -Wno-tautological-compare \ | |
| -O2 -emit-llvm -g -c xdp12.c -o -| llc -march=bpf -filetype=obj -o xdp12.o | |
| ./bpfloader xdp12.o | |
| bpf_prog_load() err=13 | |
| 0: (bf) r8 = r1 | |
| 1: (61) r5 = *(u32 *)(r8 +4) | |
| 2: (61) r9 = *(u32 *)(r8 +0) | |
| 3: (b7) r0 = 0 | |
| 4: (63) *(u32 *)(r10 -4) = r0 | |
| 5: (bf) r1 = r9 | |
| 6: (07) r1 += 14 | |
| 7: (2d) if r1 > r5 goto pc+598 | |
| R0=imm0,min_value=0,max_value=0 R1=pkt(id=0,off=14,r=14) R5=pkt_end R8=ctx R9=pkt(id=0,off=0,r=14) R10=fp | |
| 8: (71) r1 = *(u8 *)(r9 +11) | |
| 9: (7b) *(u64 *)(r10 -24) = r1 | |
| 10: (71) r1 = *(u8 *)(r9 +10) | |
| 11: (7b) *(u64 *)(r10 -72) = r1 | |
| 12: (71) r1 = *(u8 *)(r9 +9) | |
| 13: (7b) *(u64 *)(r10 -80) = r1 | |
| 14: (71) r1 = *(u8 *)(r9 +8) | |
| 15: (7b) *(u64 *)(r10 -88) = r1 | |
| 16: (71) r1 = *(u8 *)(r9 +7) | |
| 17: (7b) *(u64 *)(r10 -96) = r1 | |
| 18: (71) r1 = *(u8 *)(r9 +6) | |
| 19: (7b) *(u64 *)(r10 -104) = r1 | |
| 20: (71) r1 = *(u8 *)(r9 +5) | |
| 21: (7b) *(u64 *)(r10 -128) = r1 | |
| 22: (71) r1 = *(u8 *)(r9 +4) | |
| 23: (7b) *(u64 *)(r10 -136) = r1 | |
| 24: (71) r1 = *(u8 *)(r9 +3) | |
| 25: (7b) *(u64 *)(r10 -144) = r1 | |
| 26: (71) r1 = *(u8 *)(r9 +2) | |
| 27: (7b) *(u64 *)(r10 -152) = r1 | |
| 28: (71) r1 = *(u8 *)(r9 +1) | |
| 29: (7b) *(u64 *)(r10 -160) = r1 | |
| 30: (71) r1 = *(u8 *)(r9 +0) | |
| 31: (7b) *(u64 *)(r10 -168) = r1 | |
| 32: (69) r1 = *(u16 *)(r9 +12) | |
| 33: (bf) r3 = r1 | |
| 34: (77) r3 >>= 8 | |
| 35: (7b) *(u64 *)(r10 -112) = r1 | |
| 36: (bf) r0 = r1 | |
| 37: (67) r0 <<= 8 | |
| 38: (7b) *(u64 *)(r10 -120) = r3 | |
| 39: (4f) r0 |= r3 | |
| 40: (57) r0 &= 65535 | |
| 41: (15) if r0 == 0x9100 goto pc+105 | |
| R0=inv48,min_value=0,max_value=65535 R1=inv48 R3=inv56 R5=pkt_end R8=ctx R9=pkt(id=0,off=0,r=14) R10=fp | |
| 42: (b7) r6 = 112 | |
| 43: (b7) r1 = 0 | |
| 44: (7b) *(u64 *)(r10 -176) = r1 | |
| 45: (b7) r4 = 0 | |
| 46: (b7) r1 = 0 | |
| 47: (7b) *(u64 *)(r10 -40) = r1 | |
| 48: (b7) r1 = 0 | |
| 49: (7b) *(u64 *)(r10 -56) = r1 | |
| 50: (b7) r1 = 0 | |
| 51: (7b) *(u64 *)(r10 -32) = r1 | |
| 52: (b7) r1 = 0 | |
| 53: (7b) *(u64 *)(r10 -48) = r1 | |
| 54: (15) if r0 == 0x86dd goto pc+197 | |
| R0=inv48,min_value=0,max_value=65535 R1=imm0,min_value=0,max_value=0 R3=inv56 R4=imm0,min_value=0,max_value=0 R5=pkt_end R6=imm112,min_value=112,max_value=112 R8=ctx R9=pkt(id=0,off=0,r=14) R10=fp | |
| 55: (b7) r1 = 0 | |
| 56: (7b) *(u64 *)(r10 -312) = r1 | |
| 57: (b7) r1 = 0 | |
| 58: (7b) *(u64 *)(r10 -384) = r1 | |
| 59: (b7) r1 = 0 | |
| 60: (7b) *(u64 *)(r10 -184) = r1 | |
| 61: (b7) r1 = 0 | |
| 62: (7b) *(u64 *)(r10 -192) = r1 | |
| 63: (b7) r1 = 0 | |
| 64: (7b) *(u64 *)(r10 -200) = r1 | |
| 65: (b7) r1 = 0 | |
| 66: (7b) *(u64 *)(r10 -208) = r1 | |
| 67: (b7) r1 = 0 | |
| 68: (7b) *(u64 *)(r10 -216) = r1 | |
| 69: (b7) r1 = 0 | |
| 70: (7b) *(u64 *)(r10 -224) = r1 | |
| 71: (b7) r1 = 0 | |
| 72: (7b) *(u64 *)(r10 -232) = r1 | |
| 73: (b7) r1 = 0 | |
| 74: (7b) *(u64 *)(r10 -240) = r1 | |
| 75: (b7) r1 = 0 | |
| 76: (7b) *(u64 *)(r10 -248) = r1 | |
| 77: (b7) r1 = 0 | |
| 78: (7b) *(u64 *)(r10 -256) = r1 | |
| 79: (b7) r1 = 0 | |
| 80: (7b) *(u64 *)(r10 -264) = r1 | |
| 81: (b7) r1 = 0 | |
| 82: (7b) *(u64 *)(r10 -272) = r1 | |
| 83: (b7) r1 = 0 | |
| 84: (7b) *(u64 *)(r10 -280) = r1 | |
| 85: (b7) r1 = 0 | |
| 86: (7b) *(u64 *)(r10 -288) = r1 | |
| 87: (b7) r1 = 0 | |
| 88: (7b) *(u64 *)(r10 -296) = r1 | |
| 89: (b7) r1 = 0 | |
| 90: (7b) *(u64 *)(r10 -336) = r1 | |
| 91: (b7) r1 = 0 | |
| 92: (7b) *(u64 *)(r10 -304) = r1 | |
| 93: (b7) r1 = 0 | |
| 94: (7b) *(u64 *)(r10 -320) = r1 | |
| 95: (b7) r1 = 0 | |
| 96: (7b) *(u64 *)(r10 -328) = r1 | |
| 97: (b7) r1 = 0 | |
| 98: (7b) *(u64 *)(r10 -344) = r1 | |
| 99: (b7) r1 = 0 | |
| 100: (7b) *(u64 *)(r10 -352) = r1 | |
| 101: (b7) r1 = 0 | |
| 102: (7b) *(u64 *)(r10 -360) = r1 | |
| 103: (b7) r1 = 0 | |
| 104: (7b) *(u64 *)(r10 -368) = r1 | |
| 105: (b7) r1 = 0 | |
| 106: (7b) *(u64 *)(r10 -376) = r1 | |
| 107: (b7) r1 = 0 | |
| 108: (7b) *(u64 *)(r10 -392) = r1 | |
| 109: (b7) r1 = 0 | |
| 110: (7b) *(u64 *)(r10 -400) = r1 | |
| 111: (b7) r1 = 0 | |
| 112: (7b) *(u64 *)(r10 -408) = r1 | |
| 113: (b7) r1 = 0 | |
| 114: (7b) *(u64 *)(r10 -416) = r1 | |
| 115: (b7) r1 = 0 | |
| 116: (7b) *(u64 *)(r10 -424) = r1 | |
| 117: (b7) r1 = 0 | |
| 118: (7b) *(u64 *)(r10 -432) = r1 | |
| 119: (b7) r1 = 0 | |
| 120: (7b) *(u64 *)(r10 -440) = r1 | |
| 121: (b7) r1 = 0 | |
| 122: (7b) *(u64 *)(r10 -456) = r1 | |
| 123: (b7) r1 = 0 | |
| 124: (7b) *(u64 *)(r10 -448) = r1 | |
| 125: (b7) r1 = 0 | |
| 126: (7b) *(u64 *)(r10 -464) = r1 | |
| 127: (b7) r1 = 0 | |
| 128: (7b) *(u64 *)(r10 -472) = r1 | |
| 129: (b7) r7 = 0 | |
| 130: (b7) r1 = 0 | |
| 131: (7b) *(u64 *)(r10 -480) = r1 | |
| 132: (b7) r1 = 0 | |
| 133: (7b) *(u64 *)(r10 -64) = r1 | |
| 134: (b7) r1 = 0 | |
| 135: (7b) *(u64 *)(r10 -488) = r1 | |
| 136: (b7) r4 = 0 | |
| 137: (b7) r3 = 0 | |
| 138: (b7) r1 = 0 | |
| 139: (7b) *(u64 *)(r10 -40) = r1 | |
| 140: (b7) r1 = 0 | |
| 141: (7b) *(u64 *)(r10 -56) = r1 | |
| 142: (b7) r1 = 0 | |
| 143: (7b) *(u64 *)(r10 -32) = r1 | |
| 144: (b7) r1 = 0 | |
| 145: (7b) *(u64 *)(r10 -48) = r1 | |
| 146: (55) if r0 != 0x8100 goto pc+255 | |
| R0=inv48,min_value=33024,max_value=33024 R1=imm0,min_value=0,max_value=0 R3=imm0,min_value=0,max_value=0 R4=imm0,min_value=0,max_value=0 R5=pkt_end R6=imm112,min_value=112,max_value=112 R7=imm0,min_value=0,max_value=0 R8=ctx R9=pkt(id=0,off=0,r=14) R10=fp | |
| 147: (b7) r0 = 0 | |
| 148: (bf) r1 = r9 | |
| 149: (07) r1 += 18 | |
| 150: (2d) if r1 > r5 goto pc+455 | |
| R0=imm0,min_value=0,max_value=0 R1=pkt(id=0,off=18,r=18) R3=imm0,min_value=0,max_value=0 R4=imm0,min_value=0,max_value=0 R5=pkt_end R6=imm112,min_value=112,max_value=112 R7=imm0,min_value=0,max_value=0 R8=ctx R9=pkt(id=0,off=0,r=18) R10=fp | |
| 151: (b7) r1 = 0 | |
| 152: (7b) *(u64 *)(r10 -312) = r1 | |
| 153: (b7) r6 = 144 | |
| 154: (b7) r1 = 1 | |
| 155: (7b) *(u64 *)(r10 -176) = r1 | |
| 156: (69) r1 = *(u16 *)(r9 +14) | |
| 157: (bf) r3 = r1 | |
| 158: (57) r3 &= 15 | |
| 159: (7b) *(u64 *)(r10 -48) = r3 | |
| 160: (77) r1 >>= 8 | |
| 161: (7b) *(u64 *)(r10 -32) = r1 | |
| 162: (71) r4 = *(u8 *)(r9 +14) | |
| 163: (77) r4 >>= 5 | |
| 164: (69) r0 = *(u16 *)(r9 +16) | |
| 165: (bf) r1 = r0 | |
| 166: (dc) (u32) r1 endian (u32) r0 | |
| 167: (77) r1 >>= 56 | |
| 168: (7b) *(u64 *)(r10 -56) = r1 | |
| 169: (dc) (u32) r0 endian (u32) r0 | |
| 170: (b7) r1 = 0 | |
| 171: (7b) *(u64 *)(r10 -384) = r1 | |
| 172: (b7) r1 = 0 | |
| 173: (7b) *(u64 *)(r10 -184) = r1 | |
| 174: (b7) r1 = 0 | |
| 175: (7b) *(u64 *)(r10 -192) = r1 | |
| 176: (b7) r1 = 0 | |
| 177: (7b) *(u64 *)(r10 -200) = r1 | |
| 178: (b7) r1 = 0 | |
| 179: (7b) *(u64 *)(r10 -208) = r1 | |
| 180: (b7) r1 = 0 | |
| 181: (7b) *(u64 *)(r10 -216) = r1 | |
| 182: (b7) r1 = 0 | |
| 183: (7b) *(u64 *)(r10 -224) = r1 | |
| 184: (b7) r1 = 0 | |
| 185: (7b) *(u64 *)(r10 -232) = r1 | |
| 186: (b7) r1 = 0 | |
| 187: (7b) *(u64 *)(r10 -240) = r1 | |
| 188: (b7) r1 = 0 | |
| 189: (7b) *(u64 *)(r10 -248) = r1 | |
| 190: (b7) r1 = 0 | |
| 191: (7b) *(u64 *)(r10 -256) = r1 | |
| 192: (b7) r1 = 0 | |
| 193: (7b) *(u64 *)(r10 -264) = r1 | |
| 194: (b7) r1 = 0 | |
| 195: (7b) *(u64 *)(r10 -272) = r1 | |
| 196: (b7) r1 = 0 | |
| 197: (7b) *(u64 *)(r10 -280) = r1 | |
| 198: (b7) r1 = 0 | |
| 199: (7b) *(u64 *)(r10 -288) = r1 | |
| 200: (b7) r1 = 0 | |
| 201: (7b) *(u64 *)(r10 -296) = r1 | |
| 202: (b7) r1 = 0 | |
| 203: (7b) *(u64 *)(r10 -336) = r1 | |
| 204: (b7) r1 = 0 | |
| 205: (7b) *(u64 *)(r10 -304) = r1 | |
| 206: (b7) r1 = 0 | |
| 207: (7b) *(u64 *)(r10 -320) = r1 | |
| 208: (b7) r1 = 0 | |
| 209: (7b) *(u64 *)(r10 -328) = r1 | |
| 210: (b7) r1 = 0 | |
| 211: (7b) *(u64 *)(r10 -344) = r1 | |
| 212: (b7) r1 = 0 | |
| 213: (7b) *(u64 *)(r10 -352) = r1 | |
| 214: (b7) r1 = 0 | |
| 215: (7b) *(u64 *)(r10 -360) = r1 | |
| 216: (b7) r1 = 0 | |
| 217: (7b) *(u64 *)(r10 -368) = r1 | |
| 218: (b7) r1 = 0 | |
| 219: (7b) *(u64 *)(r10 -376) = r1 | |
| 220: (b7) r1 = 0 | |
| 221: (7b) *(u64 *)(r10 -392) = r1 | |
| 222: (b7) r1 = 0 | |
| 223: (7b) *(u64 *)(r10 -400) = r1 | |
| 224: (b7) r1 = 0 | |
| 225: (7b) *(u64 *)(r10 -408) = r1 | |
| 226: (b7) r1 = 0 | |
| 227: (7b) *(u64 *)(r10 -416) = r1 | |
| 228: (b7) r1 = 0 | |
| 229: (7b) *(u64 *)(r10 -424) = r1 | |
| 230: (b7) r1 = 0 | |
| 231: (7b) *(u64 *)(r10 -432) = r1 | |
| 232: (b7) r1 = 0 | |
| 233: (7b) *(u64 *)(r10 -440) = r1 | |
| 234: (b7) r1 = 0 | |
| 235: (7b) *(u64 *)(r10 -456) = r1 | |
| 236: (b7) r1 = 0 | |
| 237: (7b) *(u64 *)(r10 -448) = r1 | |
| 238: (b7) r1 = 0 | |
| 239: (7b) *(u64 *)(r10 -464) = r1 | |
| 240: (b7) r1 = 0 | |
| 241: (7b) *(u64 *)(r10 -472) = r1 | |
| 242: (b7) r7 = 0 | |
| 243: (b7) r1 = 0 | |
| 244: (7b) *(u64 *)(r10 -480) = r1 | |
| 245: (b7) r1 = 0 | |
| 246: (7b) *(u64 *)(r10 -64) = r1 | |
| 247: (b7) r1 = 0 | |
| 248: (7b) *(u64 *)(r10 -488) = r1 | |
| 249: (b7) r3 = 0 | |
| 250: (7b) *(u64 *)(r10 -40) = r0 | |
| 251: (55) if r0 != 0x86dd goto pc+150 | |
| R0=inv,min_value=34525,max_value=34525 R1=imm0,min_value=0,max_value=0 R3=imm0,min_value=0,max_value=0 R4=inv61 R5=pkt_end R6=imm144,min_value=144,max_value=144 R7=imm0,min_value=0,max_value=0 R8=ctx R9=pkt(id=0,off=0,r=18) R10=fp | |
| 252: (7b) *(u64 *)(r10 -496) = r4 | |
| 253: (bf) r1 = r6 | |
| 254: (07) r1 += 320 | |
| 255: (77) r1 >>= 3 | |
| 256: (bf) r3 = r9 | |
| 257: (0f) r3 += r1 | |
| 258: (b7) r0 = 0 | |
| 259: (2d) if r3 > r5 goto pc+346 | |
| R0=imm0,min_value=0,max_value=0 R1=imm58,min_value=58,max_value=58 R3=pkt(id=0,off=58,r=58) R4=inv61 R5=pkt_end R6=imm144,min_value=144,max_value=144 R7=imm0,min_value=0,max_value=0 R8=ctx R9=pkt(id=0,off=0,r=58) R10=fp | |
| 260: (bf) r5 = r6 | |
| 261: (47) r5 |= 12 | |
| 262: (bf) r1 = r5 | |
| 263: (07) r1 += 44 | |
| 264: (77) r1 >>= 3 | |
| 265: (7b) *(u64 *)(r10 -64) = r1 | |
| 266: (bf) r7 = r5 | |
| 267: (07) r7 += 36 | |
| 268: (77) r7 >>= 3 | |
| 269: (bf) r0 = r5 | |
| 270: (07) r0 += 20 | |
| 271: (77) r0 >>= 3 | |
| 272: (bf) r1 = r5 | |
| 273: (07) r1 += 52 | |
| 274: (77) r1 >>= 3 | |
| 275: (77) r6 >>= 3 | |
| 276: (79) r2 = *(u64 *)(r10 -24) | |
| 277: (bf) r2 = r5 | |
| 278: (77) r2 >>= 3 | |
| 279: (7b) *(u64 *)(r10 -184) = r2 | |
| 280: (07) r5 += 180 | |
| 281: (77) r5 >>= 3 | |
| 282: (bf) r4 = r9 | |
| 283: (0f) r4 += r5 | |
| 284: (47) r5 |= 1 | |
| 285: (bf) r3 = r9 | |
| 286: (0f) r3 += r6 | |
| 287: (bf) r6 = r9 | |
| 288: (0f) r6 += r1 | |
| 289: (47) r1 |= 1 | |
| 290: (bf) r2 = r9 | |
| 291: (0f) r2 += r0 | |
| 292: (7b) *(u64 *)(r10 -312) = r2 | |
| 293: (bf) r2 = r9 | |
| 294: (79) r0 = *(u64 *)(r10 -184) | |
| 295: (0f) r2 += r0 | |
| cannot add integer value with 0 upper zero bits to ptr_to_packet | |
| FAILED: 0: (bf) r8 = r1 |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment