MCPcopy Index your code
hub / github.com/F-Stack/f-stack / rte_flow_copy

Function rte_flow_copy

dpdk/lib/ethdev/rte_flow.c:1158–1210  ·  view source on GitHub ↗

Store a full rte_flow description. */

Source from the content-addressed store, hash-verified

1156
1157/** Store a full rte_flow description. */
1158size_t
1159rte_flow_copy(struct rte_flow_desc *desc, size_t len,
1160 const struct rte_flow_attr *attr,
1161 const struct rte_flow_item *items,
1162 const struct rte_flow_action *actions)
1163{
1164 /*
1165 * Overlap struct rte_flow_conv with struct rte_flow_desc in order
1166 * to convert the former to the latter without wasting space.
1167 */
1168 struct rte_flow_conv_rule *dst =
1169 len ?
1170 (void *)((uintptr_t)desc +
1171 (offsetof(struct rte_flow_desc, actions) -
1172 offsetof(struct rte_flow_conv_rule, actions))) :
1173 NULL;
1174 size_t dst_size =
1175 len > sizeof(*desc) - sizeof(*dst) ?
1176 len - (sizeof(*desc) - sizeof(*dst)) :
1177 0;
1178 struct rte_flow_conv_rule src = {
1179 .attr_ro = NULL,
1180 .pattern_ro = items,
1181 .actions_ro = actions,
1182 };
1183 int ret;
1184
1185 RTE_BUILD_BUG_ON(sizeof(struct rte_flow_desc) <
1186 sizeof(struct rte_flow_conv_rule));
1187 if (dst_size &&
1188 (&dst->pattern != &desc->items ||
1189 &dst->actions != &desc->actions ||
1190 (uintptr_t)(dst + 1) != (uintptr_t)(desc + 1))) {
1191 rte_errno = EINVAL;
1192 return 0;
1193 }
1194 ret = rte_flow_conv(RTE_FLOW_CONV_OP_RULE, dst, dst_size, &src, NULL);
1195 if (ret < 0)
1196 return 0;
1197 ret += sizeof(*desc) - sizeof(*dst);
1198 rte_memcpy(desc,
1199 (&(struct rte_flow_desc){
1200 .size = ret,
1201 .attr = *attr,
1202 .items = dst_size ? dst->pattern : NULL,
1203 .actions = dst_size ? dst->actions : NULL,
1204 }),
1205 len > sizeof(*desc) ? sizeof(*desc) : len);
1206
1207 rte_flow_trace_copy(desc, len, attr, items, actions, ret);
1208
1209 return ret;
1210}
1211
1212int
1213rte_flow_dev_dump(uint16_t port_id, struct rte_flow *flow,

Callers

nothing calls this directly

Calls 2

rte_flow_convFunction · 0.85
rte_memcpyFunction · 0.50

Tested by

no test coverage detected