| .. | .. |
|---|
| 180 | 180 | |
|---|
| 181 | 181 | #define emit_loadptr(BASE, STRUCT, FIELD, DEST) \ |
|---|
| 182 | 182 | do { unsigned int _off = offsetof(STRUCT, FIELD); \ |
|---|
| 183 | | - BUILD_BUG_ON(FIELD_SIZEOF(STRUCT, FIELD) != sizeof(void *)); \ |
|---|
| 183 | + BUILD_BUG_ON(sizeof_field(STRUCT, FIELD) != sizeof(void *)); \ |
|---|
| 184 | 184 | *prog++ = LDPTRI | RS1(BASE) | S13(_off) | RD(DEST); \ |
|---|
| 185 | 185 | } while (0) |
|---|
| 186 | 186 | |
|---|
| 187 | 187 | #define emit_load32(BASE, STRUCT, FIELD, DEST) \ |
|---|
| 188 | 188 | do { unsigned int _off = offsetof(STRUCT, FIELD); \ |
|---|
| 189 | | - BUILD_BUG_ON(FIELD_SIZEOF(STRUCT, FIELD) != sizeof(u32)); \ |
|---|
| 189 | + BUILD_BUG_ON(sizeof_field(STRUCT, FIELD) != sizeof(u32)); \ |
|---|
| 190 | 190 | *prog++ = LD32I | RS1(BASE) | S13(_off) | RD(DEST); \ |
|---|
| 191 | 191 | } while (0) |
|---|
| 192 | 192 | |
|---|
| 193 | 193 | #define emit_load16(BASE, STRUCT, FIELD, DEST) \ |
|---|
| 194 | 194 | do { unsigned int _off = offsetof(STRUCT, FIELD); \ |
|---|
| 195 | | - BUILD_BUG_ON(FIELD_SIZEOF(STRUCT, FIELD) != sizeof(u16)); \ |
|---|
| 195 | + BUILD_BUG_ON(sizeof_field(STRUCT, FIELD) != sizeof(u16)); \ |
|---|
| 196 | 196 | *prog++ = LD16I | RS1(BASE) | S13(_off) | RD(DEST); \ |
|---|
| 197 | 197 | } while (0) |
|---|
| 198 | 198 | |
|---|
| .. | .. |
|---|
| 202 | 202 | } while (0) |
|---|
| 203 | 203 | |
|---|
| 204 | 204 | #define emit_load8(BASE, STRUCT, FIELD, DEST) \ |
|---|
| 205 | | -do { BUILD_BUG_ON(FIELD_SIZEOF(STRUCT, FIELD) != sizeof(u8)); \ |
|---|
| 205 | +do { BUILD_BUG_ON(sizeof_field(STRUCT, FIELD) != sizeof(u8)); \ |
|---|
| 206 | 206 | __emit_load8(BASE, STRUCT, FIELD, DEST); \ |
|---|
| 207 | 207 | } while (0) |
|---|
| 208 | 208 | |
|---|
| .. | .. |
|---|
| 491 | 491 | } else { |
|---|
| 492 | 492 | emit_loadimm(K, r_A); |
|---|
| 493 | 493 | } |
|---|
| 494 | | - /* Fallthrough */ |
|---|
| 494 | + fallthrough; |
|---|
| 495 | 495 | case BPF_RET | BPF_A: |
|---|
| 496 | 496 | if (seen_or_pass0) { |
|---|
| 497 | 497 | if (i != flen - 1) { |
|---|
| .. | .. |
|---|
| 552 | 552 | emit_skb_load32(hash, r_A); |
|---|
| 553 | 553 | break; |
|---|
| 554 | 554 | case BPF_ANC | SKF_AD_VLAN_TAG: |
|---|
| 555 | | - case BPF_ANC | SKF_AD_VLAN_TAG_PRESENT: |
|---|
| 556 | 555 | emit_skb_load16(vlan_tci, r_A); |
|---|
| 557 | | - if (code != (BPF_ANC | SKF_AD_VLAN_TAG)) { |
|---|
| 558 | | - emit_alu_K(SRL, 12); |
|---|
| 556 | + break; |
|---|
| 557 | + case BPF_ANC | SKF_AD_VLAN_TAG_PRESENT: |
|---|
| 558 | + __emit_skb_load8(__pkt_vlan_present_offset, r_A); |
|---|
| 559 | + if (PKT_VLAN_PRESENT_BIT) |
|---|
| 560 | + emit_alu_K(SRL, PKT_VLAN_PRESENT_BIT); |
|---|
| 561 | + if (PKT_VLAN_PRESENT_BIT < 7) |
|---|
| 559 | 562 | emit_andi(r_A, 1, r_A); |
|---|
| 560 | | - } else { |
|---|
| 561 | | - emit_loadimm(~VLAN_TAG_PRESENT, r_TMP); |
|---|
| 562 | | - emit_and(r_A, r_TMP, r_A); |
|---|
| 563 | | - } |
|---|
| 564 | 563 | break; |
|---|
| 565 | 564 | case BPF_LD | BPF_W | BPF_LEN: |
|---|
| 566 | 565 | emit_skb_load32(len, r_A); |
|---|