.. | .. |
---|
694 | 694 | emit_load_imm(r_A, k, ctx); |
---|
695 | 695 | break; |
---|
696 | 696 | case BPF_LD | BPF_W | BPF_LEN: |
---|
697 | | - BUILD_BUG_ON(FIELD_SIZEOF(struct sk_buff, len) != 4); |
---|
| 697 | + BUILD_BUG_ON(sizeof_field(struct sk_buff, len) != 4); |
---|
698 | 698 | /* A <- len ==> lw r_A, offset(skb) */ |
---|
699 | 699 | ctx->flags |= SEEN_SKB | SEEN_A; |
---|
700 | 700 | off = offsetof(struct sk_buff, len); |
---|
.. | .. |
---|
1117 | 1117 | case BPF_ANC | SKF_AD_PROTOCOL: |
---|
1118 | 1118 | /* A = ntohs(skb->protocol */ |
---|
1119 | 1119 | ctx->flags |= SEEN_SKB | SEEN_OFF | SEEN_A; |
---|
1120 | | - BUILD_BUG_ON(FIELD_SIZEOF(struct sk_buff, |
---|
| 1120 | + BUILD_BUG_ON(sizeof_field(struct sk_buff, |
---|
1121 | 1121 | protocol) != 2); |
---|
1122 | 1122 | off = offsetof(struct sk_buff, protocol); |
---|
1123 | 1123 | emit_half_load(r_A, r_skb, off, ctx); |
---|
.. | .. |
---|
1142 | 1142 | case BPF_ANC | SKF_AD_CPU: |
---|
1143 | 1143 | ctx->flags |= SEEN_A | SEEN_OFF; |
---|
1144 | 1144 | /* A = current_thread_info()->cpu */ |
---|
1145 | | - BUILD_BUG_ON(FIELD_SIZEOF(struct thread_info, |
---|
| 1145 | + BUILD_BUG_ON(sizeof_field(struct thread_info, |
---|
1146 | 1146 | cpu) != 4); |
---|
1147 | 1147 | off = offsetof(struct thread_info, cpu); |
---|
1148 | 1148 | /* $28/gp points to the thread_info struct */ |
---|
.. | .. |
---|
1163 | 1163 | emit_bcond(MIPS_COND_EQ, r_s0, r_zero, b_off, ctx); |
---|
1164 | 1164 | emit_reg_move(r_ret, r_zero, ctx); |
---|
1165 | 1165 | if (code == (BPF_ANC | SKF_AD_IFINDEX)) { |
---|
1166 | | - BUILD_BUG_ON(FIELD_SIZEOF(struct net_device, ifindex) != 4); |
---|
| 1166 | + BUILD_BUG_ON(sizeof_field(struct net_device, ifindex) != 4); |
---|
1167 | 1167 | off = offsetof(struct net_device, ifindex); |
---|
1168 | 1168 | emit_load(r_A, r_s0, off, ctx); |
---|
1169 | 1169 | } else { /* (code == (BPF_ANC | SKF_AD_HATYPE) */ |
---|
1170 | | - BUILD_BUG_ON(FIELD_SIZEOF(struct net_device, type) != 2); |
---|
| 1170 | + BUILD_BUG_ON(sizeof_field(struct net_device, type) != 2); |
---|
1171 | 1171 | off = offsetof(struct net_device, type); |
---|
1172 | 1172 | emit_half_load_unsigned(r_A, r_s0, off, ctx); |
---|
1173 | 1173 | } |
---|
1174 | 1174 | break; |
---|
1175 | 1175 | case BPF_ANC | SKF_AD_MARK: |
---|
1176 | 1176 | ctx->flags |= SEEN_SKB | SEEN_A; |
---|
1177 | | - BUILD_BUG_ON(FIELD_SIZEOF(struct sk_buff, mark) != 4); |
---|
| 1177 | + BUILD_BUG_ON(sizeof_field(struct sk_buff, mark) != 4); |
---|
1178 | 1178 | off = offsetof(struct sk_buff, mark); |
---|
1179 | 1179 | emit_load(r_A, r_skb, off, ctx); |
---|
1180 | 1180 | break; |
---|
1181 | 1181 | case BPF_ANC | SKF_AD_RXHASH: |
---|
1182 | 1182 | ctx->flags |= SEEN_SKB | SEEN_A; |
---|
1183 | | - BUILD_BUG_ON(FIELD_SIZEOF(struct sk_buff, hash) != 4); |
---|
| 1183 | + BUILD_BUG_ON(sizeof_field(struct sk_buff, hash) != 4); |
---|
1184 | 1184 | off = offsetof(struct sk_buff, hash); |
---|
1185 | 1185 | emit_load(r_A, r_skb, off, ctx); |
---|
1186 | 1186 | break; |
---|
1187 | 1187 | case BPF_ANC | SKF_AD_VLAN_TAG: |
---|
1188 | | - case BPF_ANC | SKF_AD_VLAN_TAG_PRESENT: |
---|
1189 | 1188 | ctx->flags |= SEEN_SKB | SEEN_A; |
---|
1190 | | - BUILD_BUG_ON(FIELD_SIZEOF(struct sk_buff, |
---|
| 1189 | + BUILD_BUG_ON(sizeof_field(struct sk_buff, |
---|
1191 | 1190 | vlan_tci) != 2); |
---|
1192 | 1191 | off = offsetof(struct sk_buff, vlan_tci); |
---|
1193 | | - emit_half_load_unsigned(r_s0, r_skb, off, ctx); |
---|
1194 | | - if (code == (BPF_ANC | SKF_AD_VLAN_TAG)) { |
---|
1195 | | - emit_andi(r_A, r_s0, (u16)~VLAN_TAG_PRESENT, ctx); |
---|
1196 | | - } else { |
---|
1197 | | - emit_andi(r_A, r_s0, VLAN_TAG_PRESENT, ctx); |
---|
1198 | | - /* return 1 if present */ |
---|
1199 | | - emit_sltu(r_A, r_zero, r_A, ctx); |
---|
1200 | | - } |
---|
| 1192 | + emit_half_load_unsigned(r_A, r_skb, off, ctx); |
---|
| 1193 | + break; |
---|
| 1194 | + case BPF_ANC | SKF_AD_VLAN_TAG_PRESENT: |
---|
| 1195 | + ctx->flags |= SEEN_SKB | SEEN_A; |
---|
| 1196 | + emit_load_byte(r_A, r_skb, PKT_VLAN_PRESENT_OFFSET(), ctx); |
---|
| 1197 | + if (PKT_VLAN_PRESENT_BIT) |
---|
| 1198 | + emit_srl(r_A, r_A, PKT_VLAN_PRESENT_BIT, ctx); |
---|
| 1199 | + if (PKT_VLAN_PRESENT_BIT < 7) |
---|
| 1200 | + emit_andi(r_A, r_A, 1, ctx); |
---|
1201 | 1201 | break; |
---|
1202 | 1202 | case BPF_ANC | SKF_AD_PKTTYPE: |
---|
1203 | 1203 | ctx->flags |= SEEN_SKB; |
---|
.. | .. |
---|
1212 | 1212 | break; |
---|
1213 | 1213 | case BPF_ANC | SKF_AD_QUEUE: |
---|
1214 | 1214 | ctx->flags |= SEEN_SKB | SEEN_A; |
---|
1215 | | - BUILD_BUG_ON(FIELD_SIZEOF(struct sk_buff, |
---|
| 1215 | + BUILD_BUG_ON(sizeof_field(struct sk_buff, |
---|
1216 | 1216 | queue_mapping) != 2); |
---|
1217 | 1217 | BUILD_BUG_ON(offsetof(struct sk_buff, |
---|
1218 | 1218 | queue_mapping) > 0xff); |
---|