| 1281 | } |
| 1282 | |
| 1283 | static void |
| 1284 | create_meter_profile(void) |
| 1285 | { |
| 1286 | uint16_t nr_ports; |
| 1287 | int ret, port_id; |
| 1288 | struct rte_mtr_meter_profile mp; |
| 1289 | struct rte_mtr_error error; |
| 1290 | |
| 1291 | /* |
| 1292 | *currently , only create one meter file for one port |
| 1293 | *1 meter profile -> N meter rules -> N rte flows |
| 1294 | */ |
| 1295 | memset(&mp, 0, sizeof(struct rte_mtr_meter_profile)); |
| 1296 | nr_ports = rte_eth_dev_count_avail(); |
| 1297 | for (port_id = 0; port_id < nr_ports; port_id++) { |
| 1298 | /* If port outside portmask */ |
| 1299 | if (!((ports_mask >> port_id) & 0x1)) |
| 1300 | continue; |
| 1301 | mp.alg = RTE_MTR_SRTCM_RFC2697; |
| 1302 | mp.srtcm_rfc2697.cir = meter_profile_values[0] ? |
| 1303 | meter_profile_values[0] : METER_CIR; |
| 1304 | mp.srtcm_rfc2697.cbs = meter_profile_values[1] ? |
| 1305 | meter_profile_values[1] : METER_CIR / 8; |
| 1306 | mp.srtcm_rfc2697.ebs = meter_profile_values[2]; |
| 1307 | mp.packet_mode = packet_mode; |
| 1308 | ret = rte_mtr_meter_profile_add |
| 1309 | (port_id, DEFAULT_METER_PROF_ID, &mp, &error); |
| 1310 | if (ret != 0) { |
| 1311 | printf("Port %u create Profile error(%d) message: %s\n", |
| 1312 | port_id, error.type, |
| 1313 | error.message ? error.message : "(no stated reason)"); |
| 1314 | rte_exit(EXIT_FAILURE, "Error: Creation meter profile Failed!\n"); |
| 1315 | } |
| 1316 | } |
| 1317 | } |
| 1318 | |
| 1319 | static inline void |
| 1320 | destroy_flows(int port_id, uint8_t core_id, struct rte_flow **flows_list) |
no test coverage detected