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 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 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 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 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