diff options
| -rw-r--r-- | tools/net/ynl/lib/ynl-priv.h | 6 | ||||
| -rw-r--r-- | tools/net/ynl/lib/ynl.c | 54 | ||||
| -rwxr-xr-x | tools/net/ynl/ynl-gen-c.py | 14 | 
3 files changed, 40 insertions, 34 deletions
diff --git a/tools/net/ynl/lib/ynl-priv.h b/tools/net/ynl/lib/ynl-priv.h index 5c0bd90c116b..a3a9367aacbe 100644 --- a/tools/net/ynl/lib/ynl-priv.h +++ b/tools/net/ynl/lib/ynl-priv.h @@ -29,6 +29,12 @@ enum ynl_policy_type {  	YNL_PT_BITFIELD32,  }; +enum ynl_parse_result { +	YNL_PARSE_CB_ERROR = -1, +	YNL_PARSE_CB_STOP = 0, +	YNL_PARSE_CB_OK = 1, +}; +  #define YNL_ARRAY_SIZE(array)	(sizeof(array) ?			\  				 sizeof(array) / sizeof(array[0]) : 0) diff --git a/tools/net/ynl/lib/ynl.c b/tools/net/ynl/lib/ynl.c index 27fb596aa791..968ab679b5e3 100644 --- a/tools/net/ynl/lib/ynl.c +++ b/tools/net/ynl/lib/ynl.c @@ -147,7 +147,7 @@ ynl_ext_ack_check(struct ynl_sock *ys, const struct nlmsghdr *nlh,  	if (!(nlh->nlmsg_flags & NLM_F_ACK_TLVS)) {  		yerr_msg(ys, "%s", strerror(ys->err.code)); -		return MNL_CB_OK; +		return YNL_PARSE_CB_OK;  	}  	ynl_attr_for_each(attr, nlh, hlen) { @@ -166,12 +166,12 @@ ynl_ext_ack_check(struct ynl_sock *ys, const struct nlmsghdr *nlh,  		case NLMSGERR_ATTR_MISS_TYPE:  		case NLMSGERR_ATTR_MISS_NEST:  			if (len != sizeof(__u32)) -				return MNL_CB_ERROR; +				return YNL_PARSE_CB_ERROR;  			break;  		case NLMSGERR_ATTR_MSG:  			str = ynl_attr_get_str(attr);  			if (str[len - 1]) -				return MNL_CB_ERROR; +				return YNL_PARSE_CB_ERROR;  			break;  		default:  			break; @@ -252,7 +252,7 @@ ynl_ext_ack_check(struct ynl_sock *ys, const struct nlmsghdr *nlh,  	else  		yerr_msg(ys, "%s", strerror(ys->err.code)); -	return MNL_CB_OK; +	return YNL_PARSE_CB_OK;  }  static int @@ -272,7 +272,7 @@ ynl_cb_error(const struct nlmsghdr *nlh, struct ynl_parse_arg *yarg)  	ynl_ext_ack_check(yarg->ys, nlh, hlen); -	return code ? MNL_CB_ERROR : MNL_CB_STOP; +	return code ? YNL_PARSE_CB_ERROR : YNL_PARSE_CB_STOP;  }  static int ynl_cb_done(const struct nlmsghdr *nlh, struct ynl_parse_arg *yarg) @@ -286,9 +286,9 @@ static int ynl_cb_done(const struct nlmsghdr *nlh, struct ynl_parse_arg *yarg)  		ynl_ext_ack_check(yarg->ys, nlh, sizeof(int)); -		return MNL_CB_ERROR; +		return YNL_PARSE_CB_ERROR;  	} -	return MNL_CB_STOP; +	return YNL_PARSE_CB_STOP;  }  /* Attribute validation */ @@ -454,7 +454,7 @@ static int ynl_cb_null(const struct nlmsghdr *nlh, struct ynl_parse_arg *yarg)  	yerr(yarg->ys, YNL_ERROR_UNEXPECT_MSG,  	     "Received a message when none were expected"); -	return MNL_CB_ERROR; +	return YNL_PARSE_CB_ERROR;  }  static int ynl_sock_read_msgs(struct ynl_parse_arg *yarg, ynl_parse_cb_t cb) @@ -468,30 +468,30 @@ static int ynl_sock_read_msgs(struct ynl_parse_arg *yarg, ynl_parse_cb_t cb)  	if (len < 0)  		return len; -	ret = MNL_CB_STOP; +	ret = YNL_PARSE_CB_STOP;  	for (rem = len; rem > 0; NLMSG_NEXT(nlh, rem)) {  		nlh = (struct nlmsghdr *)&ys->rx_buf[len - rem];  		if (!NLMSG_OK(nlh, rem)) {  			yerr(yarg->ys, YNL_ERROR_INV_RESP,  			     "Invalid message or trailing data in the response."); -			return MNL_CB_ERROR; +			return YNL_PARSE_CB_ERROR;  		}  		if (nlh->nlmsg_flags & NLM_F_DUMP_INTR) {  			/* TODO: handle this better */  			yerr(yarg->ys, YNL_ERROR_DUMP_INTER,  			     "Dump interrupted / inconsistent, please retry."); -			return MNL_CB_ERROR; +			return YNL_PARSE_CB_ERROR;  		}  		switch (nlh->nlmsg_type) {  		case 0:  			yerr(yarg->ys, YNL_ERROR_INV_RESP,  			     "Invalid message type in the response."); -			return MNL_CB_ERROR; +			return YNL_PARSE_CB_ERROR;  		case NLMSG_NOOP:  		case NLMSG_OVERRUN ... NLMSG_MIN_TYPE - 1: -			ret = MNL_CB_OK; +			ret = YNL_PARSE_CB_OK;  			break;  		case NLMSG_ERROR:  			ret = ynl_cb_error(nlh, yarg); @@ -537,7 +537,7 @@ ynl_get_family_info_mcast(struct ynl_sock *ys, const struct nlattr *mcasts)  	ys->mcast_groups = calloc(ys->n_mcast_groups,  				  sizeof(*ys->mcast_groups));  	if (!ys->mcast_groups) -		return MNL_CB_ERROR; +		return YNL_PARSE_CB_ERROR;  	i = 0;  	ynl_attr_for_each_nested(entry, mcasts) { @@ -566,14 +566,14 @@ ynl_get_family_info_cb(const struct nlmsghdr *nlh, struct ynl_parse_arg *yarg)  	ynl_attr_for_each(attr, nlh, sizeof(struct genlmsghdr)) {  		if (ynl_attr_type(attr) == CTRL_ATTR_MCAST_GROUPS)  			if (ynl_get_family_info_mcast(ys, attr)) -				return MNL_CB_ERROR; +				return YNL_PARSE_CB_ERROR;  		if (ynl_attr_type(attr) != CTRL_ATTR_FAMILY_ID)  			continue;  		if (ynl_attr_data_len(attr) != sizeof(__u16)) {  			yerr(ys, YNL_ERROR_ATTR_INVALID, "Invalid family ID"); -			return MNL_CB_ERROR; +			return YNL_PARSE_CB_ERROR;  		}  		ys->family_id = ynl_attr_get_u16(attr); @@ -582,9 +582,9 @@ ynl_get_family_info_cb(const struct nlmsghdr *nlh, struct ynl_parse_arg *yarg)  	if (!found_id) {  		yerr(ys, YNL_ERROR_ATTR_MISSING, "Family ID missing"); -		return MNL_CB_ERROR; +		return YNL_PARSE_CB_ERROR;  	} -	return MNL_CB_OK; +	return YNL_PARSE_CB_OK;  }  static int ynl_sock_read_family(struct ynl_sock *ys, const char *family_name) @@ -741,10 +741,10 @@ static int ynl_ntf_parse(struct ynl_sock *ys, const struct nlmsghdr *nlh)  	gehdr = ynl_nlmsg_data(nlh);  	if (gehdr->cmd >= ys->family->ntf_info_size) -		return MNL_CB_ERROR; +		return YNL_PARSE_CB_ERROR;  	info = &ys->family->ntf_info[gehdr->cmd];  	if (!info->cb) -		return MNL_CB_ERROR; +		return YNL_PARSE_CB_ERROR;  	rsp = calloc(1, info->alloc_sz);  	rsp->free = info->free; @@ -752,7 +752,7 @@ static int ynl_ntf_parse(struct ynl_sock *ys, const struct nlmsghdr *nlh)  	yarg.rsp_policy = info->policy;  	ret = info->cb(nlh, &yarg); -	if (ret <= MNL_CB_STOP) +	if (ret <= YNL_PARSE_CB_STOP)  		goto err_free;  	rsp->family = nlh->nlmsg_type; @@ -761,11 +761,11 @@ static int ynl_ntf_parse(struct ynl_sock *ys, const struct nlmsghdr *nlh)  	*ys->ntf_last_next = rsp;  	ys->ntf_last_next = &rsp->next; -	return MNL_CB_OK; +	return YNL_PARSE_CB_OK;  err_free:  	info->free(rsp); -	return MNL_CB_ERROR; +	return YNL_PARSE_CB_ERROR;  }  static int @@ -812,7 +812,7 @@ void ynl_error_unknown_notification(struct ynl_sock *ys, __u8 cmd)  int ynl_error_parse(struct ynl_parse_arg *yarg, const char *msg)  {  	yerr(yarg->ys, YNL_ERROR_INV_RESP, "Error parsing response: %s", msg); -	return MNL_CB_ERROR; +	return YNL_PARSE_CB_ERROR;  }  static int @@ -841,7 +841,7 @@ int ynl_req_trampoline(const struct nlmsghdr *nlh, struct ynl_parse_arg *yarg)  	ret = ynl_check_alien(yrs->yarg.ys, nlh, yrs->rsp_cmd);  	if (ret) -		return ret < 0 ? MNL_CB_ERROR : MNL_CB_OK; +		return ret < 0 ? YNL_PARSE_CB_ERROR : YNL_PARSE_CB_OK;  	return yrs->cb(nlh, &yrs->yarg);  } @@ -872,11 +872,11 @@ ynl_dump_trampoline(const struct nlmsghdr *nlh, struct ynl_parse_arg *data)  	ret = ynl_check_alien(ds->yarg.ys, nlh, ds->rsp_cmd);  	if (ret) -		return ret < 0 ? MNL_CB_ERROR : MNL_CB_OK; +		return ret < 0 ? YNL_PARSE_CB_ERROR : YNL_PARSE_CB_OK;  	obj = calloc(1, ds->alloc_sz);  	if (!obj) -		return MNL_CB_ERROR; +		return YNL_PARSE_CB_ERROR;  	if (!ds->first)  		ds->first = obj; diff --git a/tools/net/ynl/ynl-gen-c.py b/tools/net/ynl/ynl-gen-c.py index 15a9d3b2eed3..375d5f5e3052 100755 --- a/tools/net/ynl/ynl-gen-c.py +++ b/tools/net/ynl/ynl-gen-c.py @@ -200,7 +200,7 @@ class Type(SpecAttr):          if not self.is_multi_val():              ri.cw.p("if (ynl_attr_validate(yarg, attr))") -            ri.cw.p("return MNL_CB_ERROR;") +            ri.cw.p("return YNL_PARSE_CB_ERROR;")              if self.presence_type() == 'bit':                  ri.cw.p(f"{var}->_present.{self.c_name} = 1;") @@ -247,7 +247,7 @@ class TypeUnused(Type):          return []      def _attr_get(self, ri, var): -        return ['return MNL_CB_ERROR;'], None, None +        return ['return YNL_PARSE_CB_ERROR;'], None, None      def _attr_typol(self):          return '.type = YNL_PT_REJECT, ' @@ -543,7 +543,7 @@ class TypeNest(Type):      def _attr_get(self, ri, var):          get_lines = [f"if ({self.nested_render_name}_parse(&parg, attr))", -                     "return MNL_CB_ERROR;"] +                     "return YNL_PARSE_CB_ERROR;"]          init_lines = [f"parg.rsp_policy = &{self.nested_render_name}_nest;",                        f"parg.data = &{var}->{self.c_name};"]          return get_lines, init_lines, None @@ -1674,7 +1674,7 @@ def _multi_parse(ri, struct, init_lines, local_vars):          ri.cw.block_start(line=f"ynl_attr_for_each_nested(attr, attr_{aspec.c_name})")          ri.cw.p(f"parg.data = &dst->{aspec.c_name}[i];")          ri.cw.p(f"if ({aspec.nested_render_name}_parse(&parg, attr, ynl_attr_type(attr)))") -        ri.cw.p('return MNL_CB_ERROR;') +        ri.cw.p('return YNL_PARSE_CB_ERROR;')          ri.cw.p('i++;')          ri.cw.block_end()          ri.cw.block_end() @@ -1693,7 +1693,7 @@ def _multi_parse(ri, struct, init_lines, local_vars):          if 'nested-attributes' in aspec:              ri.cw.p(f"parg.data = &dst->{aspec.c_name}[i];")              ri.cw.p(f"if ({aspec.nested_render_name}_parse(&parg, attr))") -            ri.cw.p('return MNL_CB_ERROR;') +            ri.cw.p('return YNL_PARSE_CB_ERROR;')          elif aspec.type in scalars:              ri.cw.p(f"dst->{aspec.c_name}[i] = ynl_attr_get_{aspec.type}(attr);")          else: @@ -1707,7 +1707,7 @@ def _multi_parse(ri, struct, init_lines, local_vars):      if struct.nested:          ri.cw.p('return 0;')      else: -        ri.cw.p('return MNL_CB_OK;') +        ri.cw.p('return YNL_PARSE_CB_OK;')      ri.cw.block_end()      ri.cw.nl() @@ -1750,7 +1750,7 @@ def parse_rsp_msg(ri, deref=False):      else:          # Empty reply          ri.cw.block_start() -        ri.cw.p('return MNL_CB_OK;') +        ri.cw.p('return YNL_PARSE_CB_OK;')          ri.cw.block_end()          ri.cw.nl()  | 
