unsigned flavor = attr->nfa_type; 
unsigned flavor = NFA_TYPE(attr); 
nfnetlink_check_attributes(struct nfnetlink_subsystem *subsys,			   struct nlmsghdr *nlh, struct nfattr *cda[]){	int min_len;	u_int16_t attr_count;	u_int8_t cb_id = NFNL_MSG_TYPE(nlh->nlmsg_type);	if (unlikely(cb_id >= subsys->cb_count)) {		DEBUGP("msgtype %u >= %u, returning\n",			cb_id, subsys->cb_count);		return -EINVAL;	}	min_len = NLMSG_ALIGN(sizeof(struct nfgenmsg));	if (unlikely(nlh->nlmsg_len < min_len))		return -EINVAL;	attr_count = subsys->cb[cb_id].attr_count;	memset(cda, 0, sizeof(struct nfattr *) * attr_count);	/* check attribute lengths. */	if (likely(nlh->nlmsg_len > min_len)) {		struct nfattr *attr = NFM_NFA(NLMSG_DATA(nlh));		int attrlen = nlh->nlmsg_len - NLMSG_ALIGN(min_len);		while (NFA_OK(attr, attrlen)) {			unsigned flavor = attr->nfa_type;			if (flavor) {				if (flavor > attr_count)					return -EINVAL;				cda[flavor - 1] = attr;			}			attr = NFA_NEXT(attr, attrlen);		}	}	/* implicit: if nlmsg_len == min_len, we return 0, and an empty	 * (zeroed) cda[] array. The message is valid, but empty. */        return 0;}
10457	/local/tlutelli/issta_data/temp/c/2005_temp/2005/10457/ebe0bbf06c9e03613bdcb6b5a704595a9344b7ff/nfnetlink.c/clean/net/netfilter/nfnetlink.c