Code Review
/
samplevnf.git
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
review
|
tree
raw
|
inline
| side by side
Rework of statistics reporting
[samplevnf.git]
/
VNFs
/
DPPD-PROX
/
handle_qinq_encap6.c
diff --git
a/VNFs/DPPD-PROX/handle_qinq_encap6.c
b/VNFs/DPPD-PROX/handle_qinq_encap6.c
index
e5b774d
..
c653865
100644
(file)
--- a/
VNFs/DPPD-PROX/handle_qinq_encap6.c
+++ b/
VNFs/DPPD-PROX/handle_qinq_encap6.c
@@
-29,6
+29,8
@@
#include "mpls.h"
#include "hash_utils.h"
#include "quit.h"
#include "mpls.h"
#include "hash_utils.h"
#include "quit.h"
+#include "prox_compat.h"
+#include "handle_sched.h"
struct task_qinq_encap6 {
struct task_base base;
struct task_qinq_encap6 {
struct task_base base;
@@
-36,6
+38,7
@@
struct task_qinq_encap6 {
uint8_t tx_portid;
uint8_t runtime_flags;
struct rte_table_hash *cpe_table;
uint8_t tx_portid;
uint8_t runtime_flags;
struct rte_table_hash *cpe_table;
+ struct rte_sched_port *sched_port;
};
static void init_task_qinq_encap6(struct task_base *tbase, struct task_args *targ)
};
static void init_task_qinq_encap6(struct task_base *tbase, struct task_args *targ)
@@
-45,15
+48,19
@@
static void init_task_qinq_encap6(struct task_base *tbase, struct task_args *tar
task->qinq_tag = targ->qinq_tag;
task->cpe_table = targ->cpe_table;
task->runtime_flags = targ->runtime_flags;
task->qinq_tag = targ->qinq_tag;
task->cpe_table = targ->cpe_table;
task->runtime_flags = targ->runtime_flags;
+ if (task->runtime_flags & TASK_CLASSIFY) {
+ int rc = init_port_sched(&task->sched_port, targ);
+ PROX_PANIC(rc, "Did not find any QoS task to transmit to => undefined sched_port parameters\n");
+ }
}
/* Encapsulate IPv6 packet in QinQ where the QinQ is derived from the IPv6 address */
static inline uint8_t handle_qinq_encap6(struct rte_mbuf *mbuf, struct task_qinq_encap6 *task)
{
}
/* Encapsulate IPv6 packet in QinQ where the QinQ is derived from the IPv6 address */
static inline uint8_t handle_qinq_encap6(struct rte_mbuf *mbuf, struct task_qinq_encap6 *task)
{
- struct qinq_hdr *pqinq = (struct qinq_hdr *)rte_pktmbuf_prepend(mbuf, 2 * sizeof(
struct
vlan_hdr));
+ struct qinq_hdr *pqinq = (struct qinq_hdr *)rte_pktmbuf_prepend(mbuf, 2 * sizeof(
prox_rte_
vlan_hdr));
PROX_ASSERT(pqinq);
PROX_ASSERT(pqinq);
-
struct ipv6_hdr *pip6 = (struct
ipv6_hdr *)(pqinq + 1);
+
prox_rte_ipv6_hdr *pip6 = (prox_rte_
ipv6_hdr *)(pqinq + 1);
if (pip6->hop_limits) {
pip6->hop_limits--;
if (pip6->hop_limits) {
pip6->hop_limits--;
@@
-67,7
+74,7
@@
static inline uint8_t handle_qinq_encap6(struct rte_mbuf *mbuf, struct task_qinq
uint64_t pkts_mask = RTE_LEN2MASK(1, uint64_t);
uint64_t lookup_hit_mask;
struct cpe_data* entries[64]; // TODO: use bulk size
uint64_t pkts_mask = RTE_LEN2MASK(1, uint64_t);
uint64_t lookup_hit_mask;
struct cpe_data* entries[64]; // TODO: use bulk size
-
rte_table_hash_ext_dosig_ops.f
_lookup(task->cpe_table, &mbuf, pkts_mask, &lookup_hit_mask, (void**)entries);
+
prox_rte_table
_lookup(task->cpe_table, &mbuf, pkts_mask, &lookup_hit_mask, (void**)entries);
if (lookup_hit_mask == 0x1) {
/* will also overwrite part of the destination addr */
if (lookup_hit_mask == 0x1) {
/* will also overwrite part of the destination addr */
@@
-80,7
+87,7
@@
static inline uint8_t handle_qinq_encap6(struct rte_mbuf *mbuf, struct task_qinq
/* classification can only be done from this point */
if (task->runtime_flags & TASK_CLASSIFY) {
/* classification can only be done from this point */
if (task->runtime_flags & TASK_CLASSIFY) {
-
rte_sched_port_pkt_write(
mbuf, 0, entries[0]->user, 0, 0, 0);
+
prox_rte_sched_port_pkt_write(task->sched_port,
mbuf, 0, entries[0]->user, 0, 0, 0);
}
return 0;
}
}
return 0;
}
@@
-101,15
+108,17
@@
void init_cpe6_table(struct task_args *targ)
}
uint32_t n_entries = MAX_GRE / table_part;
}
uint32_t n_entries = MAX_GRE / table_part;
- struct rte_table_hash_ext_params table_hash_params = {
+ static char hash_name[30];
+ sprintf(hash_name, "cpe6_table_%03d", targ->lconf->id);
+ struct prox_rte_table_params table_hash_params = {
+ .name = hash_name,
.key_size = sizeof(struct ipv6_addr),
.n_keys = n_entries,
.n_buckets = n_entries >> 2,
.key_size = sizeof(struct ipv6_addr),
.n_keys = n_entries,
.n_buckets = n_entries >> 2,
- .n_buckets_ext = n_entries >> 3,
- .f_hash = hash_crc32,
+ .f_hash = (rte_table_hash_op_hash)hash_crc32,
.seed = 0,
.seed = 0,
- .signature_offset = HASH_METADATA_OFFSET(0),
.key_offset = HASH_METADATA_OFFSET(0),
.key_offset = HASH_METADATA_OFFSET(0),
+ .key_mask = NULL
};
size_t entry_size = sizeof(struct cpe_data);
};
size_t entry_size = sizeof(struct cpe_data);
@@
-117,8
+126,7
@@
void init_cpe6_table(struct task_args *targ)
entry_size = rte_align32pow2(entry_size);
}
entry_size = rte_align32pow2(entry_size);
}
- struct rte_table_hash* phash = rte_table_hash_ext_dosig_ops.
- f_create(&table_hash_params, rte_lcore_to_socket_id(targ->lconf->id), entry_size);
+ struct rte_table_hash* phash = prox_rte_table_create(&table_hash_params, rte_lcore_to_socket_id(targ->lconf->id), entry_size);
PROX_PANIC(phash == NULL, "Unable to allocate memory for IPv6 hash table on core %u\n", targ->lconf->id);
for (uint8_t task_id = 0; task_id < targ->lconf->n_tasks_all; ++task_id) {
PROX_PANIC(phash == NULL, "Unable to allocate memory for IPv6 hash table on core %u\n", targ->lconf->id);
for (uint8_t task_id = 0; task_id < targ->lconf->n_tasks_all; ++task_id) {