.. | .. |
---|
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); |
---|