Generalize boolean field to store more flags on the pktinfo structure.
Signed-off-by: Pablo Neira Ayuso <pablo@netfilter.org>
 
 #define NFT_JUMP_STACK_SIZE    16
 
+enum {
+       NFT_PKTINFO_L4PROTO     = (1 << 0),
+};
+
 struct nft_pktinfo {
        struct sk_buff                  *skb;
        const struct nf_hook_state      *state;
-       bool                            tprot_set;
+       u8                              flags;
        u8                              tprot;
        u16                             fragoff;
        unsigned int                    thoff;
 
 static inline void nft_set_pktinfo_unspec(struct nft_pktinfo *pkt)
 {
-       pkt->tprot_set = false;
+       pkt->flags = 0;
        pkt->tprot = 0;
        pkt->thoff = 0;
        pkt->fragoff = 0;
 
        struct iphdr *ip;
 
        ip = ip_hdr(pkt->skb);
-       pkt->tprot_set = true;
+       pkt->flags = NFT_PKTINFO_L4PROTO;
        pkt->tprot = ip->protocol;
        pkt->thoff = ip_hdrlen(pkt->skb);
        pkt->fragoff = ntohs(ip->frag_off) & IP_OFFSET;
        else if (len < thoff)
                return -1;
 
-       pkt->tprot_set = true;
+       pkt->flags = NFT_PKTINFO_L4PROTO;
        pkt->tprot = iph->protocol;
        pkt->thoff = thoff;
        pkt->fragoff = ntohs(iph->frag_off) & IP_OFFSET;
                goto inhdr_error;
        }
 
-       pkt->tprot_set = true;
+       pkt->flags = NFT_PKTINFO_L4PROTO;
        pkt->tprot = iph->protocol;
        pkt->thoff = thoff;
        pkt->fragoff = ntohs(iph->frag_off) & IP_OFFSET;
        __IP_INC_STATS(nft_net(pkt), IPSTATS_MIB_INHDRERRORS);
        return -1;
 }
+
 #endif
 
                return;
        }
 
-       pkt->tprot_set = true;
+       pkt->flags = NFT_PKTINFO_L4PROTO;
        pkt->tprot = protohdr;
        pkt->thoff = thoff;
        pkt->fragoff = frag_off;
        if (protohdr < 0)
                return -1;
 
-       pkt->tprot_set = true;
+       pkt->flags = NFT_PKTINFO_L4PROTO;
        pkt->tprot = protohdr;
        pkt->thoff = thoff;
        pkt->fragoff = frag_off;
        if (protohdr < 0)
                goto inhdr_error;
 
-       pkt->tprot_set = true;
+       pkt->flags = NFT_PKTINFO_L4PROTO;
        pkt->tprot = protohdr;
        pkt->thoff = thoff;
        pkt->fragoff = frag_off;
 
        if (priv->base == NFT_PAYLOAD_NETWORK_HEADER)
                ptr = skb_network_header(skb);
        else {
-               if (!pkt->tprot_set)
+               if (!(pkt->flags & NFT_PKTINFO_L4PROTO))
                        return false;
                ptr = skb_network_header(skb) + nft_thoff(pkt);
        }
 
        int off = skb_network_offset(skb);
        unsigned int len, nh_end;
 
-       nh_end = pkt->tprot_set ? nft_thoff(pkt) : skb->len;
+       nh_end = pkt->flags & NFT_PKTINFO_L4PROTO ? nft_thoff(pkt) : skb->len;
        len = min_t(unsigned int, nh_end - skb_network_offset(skb),
                    NFT_TRACETYPE_NETWORK_HSIZE);
        if (trace_fill_header(nlskb, NFTA_TRACE_NETWORK_HEADER, skb, off, len))
                return -1;
 
-       if (pkt->tprot_set) {
+       if (pkt->flags & NFT_PKTINFO_L4PROTO) {
                len = min_t(unsigned int, skb->len - nft_thoff(pkt),
                            NFT_TRACETYPE_TRANSPORT_HSIZE);
                if (trace_fill_header(nlskb, NFTA_TRACE_TRANSPORT_HEADER, skb,
 
                nft_reg_store8(dest, nft_pf(pkt));
                break;
        case NFT_META_L4PROTO:
-               if (!pkt->tprot_set)
+               if (!(pkt->flags & NFT_PKTINFO_L4PROTO))
                        goto err;
                nft_reg_store8(dest, pkt->tprot);
                break;
 
                offset = skb_network_offset(skb);
                break;
        case NFT_PAYLOAD_TRANSPORT_HEADER:
-               if (!pkt->tprot_set)
+               if (!(pkt->flags & NFT_PKTINFO_L4PROTO))
                        goto err;
                offset = nft_thoff(pkt);
                break;
                offset = skb_network_offset(skb);
                break;
        case NFT_PAYLOAD_TRANSPORT_HEADER:
-               if (!pkt->tprot_set)
+               if (!(pkt->flags & NFT_PKTINFO_L4PROTO))
                        goto err;
                offset = nft_thoff(pkt);
                break;