Exemple #1
0
static int u32_clone(void *_dst, void *_src)
{
	struct rtnl_u32 *dst = _dst, *src = _src;

	if (src->cu_selector &&
	    !(dst->cu_selector = nl_data_clone(src->cu_selector)))
		return -NLE_NOMEM;

	if (src->cu_mark &&
	    !(dst->cu_mark = nl_data_clone(src->cu_mark)))
		return -NLE_NOMEM;

	if (src->cu_act) {
		if (!(dst->cu_act = rtnl_act_alloc()))
			return -NLE_NOMEM;

		memcpy(dst->cu_act, src->cu_act, sizeof(struct rtnl_act));
	}

	if (src->cu_police && !(dst->cu_police = nl_data_clone(src->cu_police)))
		return -NLE_NOMEM;

	if (src->cu_pcnt && !(dst->cu_pcnt = nl_data_clone(src->cu_pcnt)))
		return -NLE_NOMEM;

	return 0;
}
Exemple #2
0
static int fw_clone(struct rtnl_cls *_dst, struct rtnl_cls *_src)
{
	struct rtnl_fw *dst = rtnl_cls_data(_dst);
	struct rtnl_fw *src = rtnl_cls_data(_src);

	if (src->cf_act && !(dst->cf_act = nl_data_clone(src->cf_act)))
		return -NLE_NOMEM;
	
	if (src->cf_police && !(dst->cf_police = nl_data_clone(src->cf_police)))
		return -NLE_NOMEM;

	return 0;
}
Exemple #3
0
static int u32_clone(void *_dst, void *_src)
{
	struct rtnl_u32 *dst = _dst, *src = _src;

	if (src->cu_selector &&
	    !(dst->cu_selector = nl_data_clone(src->cu_selector)))
		return -NLE_NOMEM;

	if (src->cu_act && !(dst->cu_act = nl_data_clone(src->cu_act)))
		return -NLE_NOMEM;

	if (src->cu_police && !(dst->cu_police = nl_data_clone(src->cu_police)))
		return -NLE_NOMEM;

	if (src->cu_pcnt && !(dst->cu_pcnt = nl_data_clone(src->cu_pcnt)))
		return -NLE_NOMEM;

	return 0;
}
static int u32_clone(struct rtnl_cls *_dst, struct rtnl_cls *_src)
{
	struct rtnl_u32 *dst = rtnl_cls_data(_dst);
	struct rtnl_u32 *src = rtnl_cls_data(_src);

	if (src->cu_selector &&
	    !(dst->cu_selector = nl_data_clone(src->cu_selector)))
		return -NLE_NOMEM;

	if (src->cu_act && !(dst->cu_act = nl_data_clone(src->cu_act)))
		return -NLE_NOMEM;

	if (src->cu_police && !(dst->cu_police = nl_data_clone(src->cu_police)))
		return -NLE_NOMEM;

	if (src->cu_pcnt && !(dst->cu_pcnt = nl_data_clone(src->cu_pcnt)))
		return -NLE_NOMEM;

	return 0;
}
Exemple #5
0
int tca_clone(struct rtnl_tc *dst, struct rtnl_tc *src)
{
	if (src->tc_link) {
		dst->tc_link = (struct rtnl_link *)
					nl_object_clone(OBJ_CAST(src->tc_link));
		if (!dst->tc_link)
			return -NLE_NOMEM;
	}

	if (src->tc_opts) {
		dst->tc_opts = nl_data_clone(src->tc_opts);
		if (!dst->tc_opts)
			return -NLE_NOMEM;
	}
	
	if (src->tc_xstats) {
		dst->tc_xstats = nl_data_clone(src->tc_xstats);
		if (!dst->tc_xstats)
			return -NLE_NOMEM;
	}

	return 0;
}
static int cls_clone(struct nl_object *_dst, struct nl_object *_src)
{
	struct rtnl_cls *dst = nl_object_priv(_dst);
	struct rtnl_cls *src = nl_object_priv(_src);
	struct rtnl_cls_ops *cops;
	int err;
	
	err = tca_clone((struct rtnl_tca *) dst, (struct rtnl_tca *) src);
	if (err < 0)
		goto errout;

	if (src->c_subdata) {
		if (!(dst->c_subdata = nl_data_clone(src->c_subdata))) {
			err = -NLE_NOMEM;
			goto errout;
		}
	}

	cops = rtnl_cls_lookup_ops(src);
	if (cops && cops->co_clone)
		err = cops->co_clone(dst, src);
errout:
	return err;
}