mirror of https://github.com/F-Stack/f-stack.git
Tools: All tools can work in parallel now.
This commit is contained in:
parent
7cb21a2b2b
commit
a8ea1bed90
|
@ -99,10 +99,10 @@ static uint16_t rss_reta_size[RTE_MAX_ETHPORTS];
|
||||||
static inline int send_single_packet(struct rte_mbuf *m, uint8_t port);
|
static inline int send_single_packet(struct rte_mbuf *m, uint8_t port);
|
||||||
|
|
||||||
struct ff_msg_ring {
|
struct ff_msg_ring {
|
||||||
char ring_name[2][RTE_RING_NAMESIZE];
|
char ring_name[FF_MAX][RTE_RING_NAMESIZE];
|
||||||
/* ring[0] for lcore recv msg, other send */
|
/* ring[0] for lcore recv msg, other send */
|
||||||
/* ring[1] for lcore send msg, other read */
|
/* ring[1] for lcore send msg, other read */
|
||||||
struct rte_ring *ring[2];
|
struct rte_ring *ring[FF_MAX];
|
||||||
} __rte_cache_aligned;
|
} __rte_cache_aligned;
|
||||||
|
|
||||||
static struct ff_msg_ring msg_ring[RTE_MAX_LCORE];
|
static struct ff_msg_ring msg_ring[RTE_MAX_LCORE];
|
||||||
|
@ -420,7 +420,7 @@ ff_msg_init(struct rte_mempool *mp,
|
||||||
static int
|
static int
|
||||||
init_msg_ring(void)
|
init_msg_ring(void)
|
||||||
{
|
{
|
||||||
uint16_t i;
|
uint16_t i, j;
|
||||||
uint16_t nb_procs = ff_global_cfg.dpdk.nb_procs;
|
uint16_t nb_procs = ff_global_cfg.dpdk.nb_procs;
|
||||||
unsigned socketid = lcore_conf.socket_id;
|
unsigned socketid = lcore_conf.socket_id;
|
||||||
|
|
||||||
|
@ -442,18 +442,19 @@ init_msg_ring(void)
|
||||||
for(i = 0; i < nb_procs; ++i) {
|
for(i = 0; i < nb_procs; ++i) {
|
||||||
snprintf(msg_ring[i].ring_name[0], RTE_RING_NAMESIZE,
|
snprintf(msg_ring[i].ring_name[0], RTE_RING_NAMESIZE,
|
||||||
"%s%u", FF_MSG_RING_IN, i);
|
"%s%u", FF_MSG_RING_IN, i);
|
||||||
snprintf(msg_ring[i].ring_name[1], RTE_RING_NAMESIZE,
|
|
||||||
"%s%u", FF_MSG_RING_OUT, i);
|
|
||||||
|
|
||||||
msg_ring[i].ring[0] = create_ring(msg_ring[i].ring_name[0],
|
msg_ring[i].ring[0] = create_ring(msg_ring[i].ring_name[0],
|
||||||
MSG_RING_SIZE, socketid, RING_F_SP_ENQ | RING_F_SC_DEQ);
|
MSG_RING_SIZE, socketid, RING_F_SP_ENQ | RING_F_SC_DEQ);
|
||||||
if (msg_ring[i].ring[0] == NULL)
|
if (msg_ring[i].ring[0] == NULL)
|
||||||
rte_panic("create ring::%s failed!\n", msg_ring[i].ring_name[0]);
|
rte_panic("create ring::%s failed!\n", msg_ring[i].ring_name[0]);
|
||||||
|
|
||||||
msg_ring[i].ring[1] = create_ring(msg_ring[i].ring_name[1],
|
for (j = FF_SYSCTL; j < FF_MAX; j++) {
|
||||||
MSG_RING_SIZE, socketid, RING_F_SP_ENQ | RING_F_SC_DEQ);
|
snprintf(msg_ring[i].ring_name[j], RTE_RING_NAMESIZE,
|
||||||
if (msg_ring[i].ring[1] == NULL)
|
"%s%u_%u", FF_MSG_RING_OUT, i, j);
|
||||||
rte_panic("create ring::%s failed!\n", msg_ring[i].ring_name[0]);
|
msg_ring[i].ring[j] = create_ring(msg_ring[i].ring_name[j],
|
||||||
|
MSG_RING_SIZE, socketid, RING_F_SP_ENQ | RING_F_SC_DEQ);
|
||||||
|
if (msg_ring[i].ring[j] == NULL)
|
||||||
|
rte_panic("create ring::%s failed!\n", msg_ring[i].ring_name[j]);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
|
@ -1208,7 +1209,7 @@ handle_msg(struct ff_msg *msg, uint16_t proc_id)
|
||||||
handle_default_msg(msg);
|
handle_default_msg(msg);
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
rte_ring_enqueue(msg_ring[proc_id].ring[1], msg);
|
rte_ring_enqueue(msg_ring[proc_id].ring[msg->msg_type], msg);
|
||||||
}
|
}
|
||||||
|
|
||||||
static inline int
|
static inline int
|
||||||
|
|
|
@ -44,6 +44,11 @@ enum FF_MSG_TYPE {
|
||||||
FF_NGCTL,
|
FF_NGCTL,
|
||||||
FF_IPFW_CTL,
|
FF_IPFW_CTL,
|
||||||
FF_TRAFFIC,
|
FF_TRAFFIC,
|
||||||
|
|
||||||
|
/*
|
||||||
|
* to add other msg type before FF_MAX
|
||||||
|
*/
|
||||||
|
FF_MAX,
|
||||||
};
|
};
|
||||||
|
|
||||||
struct ff_sysctl_args {
|
struct ff_sysctl_args {
|
||||||
|
|
|
@ -141,7 +141,7 @@ ff_ipc_send(const struct ff_msg *msg)
|
||||||
}
|
}
|
||||||
|
|
||||||
int
|
int
|
||||||
ff_ipc_recv(struct ff_msg **msg)
|
ff_ipc_recv(struct ff_msg **msg, enum FF_MSG_TYPE msg_type)
|
||||||
{
|
{
|
||||||
int ret, i;
|
int ret, i;
|
||||||
if (inited == 0) {
|
if (inited == 0) {
|
||||||
|
@ -150,8 +150,8 @@ ff_ipc_recv(struct ff_msg **msg)
|
||||||
}
|
}
|
||||||
|
|
||||||
char name[RTE_RING_NAMESIZE];
|
char name[RTE_RING_NAMESIZE];
|
||||||
snprintf(name, RTE_RING_NAMESIZE, "%s%u",
|
snprintf(name, RTE_RING_NAMESIZE, "%s%u_%u",
|
||||||
FF_MSG_RING_OUT, ff_proc_id);
|
FF_MSG_RING_OUT, ff_proc_id, msg_type);
|
||||||
struct rte_ring *ring = rte_ring_lookup(name);
|
struct rte_ring *ring = rte_ring_lookup(name);
|
||||||
if (ring == NULL) {
|
if (ring == NULL) {
|
||||||
printf("lookup message ring:%s failed!\n", name);
|
printf("lookup message ring:%s failed!\n", name);
|
||||||
|
|
|
@ -37,6 +37,6 @@ struct ff_msg *ff_ipc_msg_alloc(void);
|
||||||
int ff_ipc_msg_free(struct ff_msg *msg);
|
int ff_ipc_msg_free(struct ff_msg *msg);
|
||||||
|
|
||||||
int ff_ipc_send(const struct ff_msg *msg);
|
int ff_ipc_send(const struct ff_msg *msg);
|
||||||
int ff_ipc_recv(struct ff_msg **msg);
|
int ff_ipc_recv(struct ff_msg **msg, enum FF_MSG_TYPE msg_type);
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
|
|
@ -139,7 +139,7 @@ ioctl_va(int fd, unsigned long com, void *data, int argc, ...)
|
||||||
if (retmsg != NULL) {
|
if (retmsg != NULL) {
|
||||||
ff_ipc_msg_free(retmsg);
|
ff_ipc_msg_free(retmsg);
|
||||||
}
|
}
|
||||||
ret = ff_ipc_recv(&retmsg);
|
ret = ff_ipc_recv(&retmsg, msg->msg_type);
|
||||||
if (ret < 0) {
|
if (ret < 0) {
|
||||||
errno = EPIPE;
|
errno = EPIPE;
|
||||||
ff_ipc_msg_free(msg);
|
ff_ipc_msg_free(msg);
|
||||||
|
|
|
@ -113,7 +113,7 @@ rtioctl(char *data, unsigned len, unsigned read_len)
|
||||||
if (retmsg != NULL) {
|
if (retmsg != NULL) {
|
||||||
ff_ipc_msg_free(retmsg);
|
ff_ipc_msg_free(retmsg);
|
||||||
}
|
}
|
||||||
ret = ff_ipc_recv(&retmsg);
|
ret = ff_ipc_recv(&retmsg, msg->msg_type);
|
||||||
if (ret < 0) {
|
if (ret < 0) {
|
||||||
errno = EPIPE;
|
errno = EPIPE;
|
||||||
ff_ipc_msg_free(msg);
|
ff_ipc_msg_free(msg);
|
||||||
|
|
|
@ -117,7 +117,7 @@ sysctl(int *name, unsigned namelen, void *old,
|
||||||
if (retmsg != NULL) {
|
if (retmsg != NULL) {
|
||||||
ff_ipc_msg_free(retmsg);
|
ff_ipc_msg_free(retmsg);
|
||||||
}
|
}
|
||||||
ret = ff_ipc_recv(&retmsg);
|
ret = ff_ipc_recv(&retmsg, msg->msg_type);
|
||||||
if (ret < 0) {
|
if (ret < 0) {
|
||||||
errno = EPIPE;
|
errno = EPIPE;
|
||||||
ff_ipc_msg_free(msg);
|
ff_ipc_msg_free(msg);
|
||||||
|
|
|
@ -84,7 +84,7 @@ ipfw_ctl(int cmd, int level, int optname, void *optval, socklen_t *optlen)
|
||||||
if (retmsg != NULL) {
|
if (retmsg != NULL) {
|
||||||
ff_ipc_msg_free(retmsg);
|
ff_ipc_msg_free(retmsg);
|
||||||
}
|
}
|
||||||
ret = ff_ipc_recv(&retmsg);
|
ret = ff_ipc_recv(&retmsg, msg->msg_type);
|
||||||
if (ret < 0) {
|
if (ret < 0) {
|
||||||
errno = EPIPE;
|
errno = EPIPE;
|
||||||
ff_ipc_msg_free(msg);
|
ff_ipc_msg_free(msg);
|
||||||
|
|
|
@ -118,7 +118,7 @@ ngctl(int cmd, void *data, size_t len)
|
||||||
if (retmsg != NULL) {
|
if (retmsg != NULL) {
|
||||||
ff_ipc_msg_free(retmsg);
|
ff_ipc_msg_free(retmsg);
|
||||||
}
|
}
|
||||||
ret = ff_ipc_recv(&retmsg);
|
ret = ff_ipc_recv(&retmsg, msg->msg_type);
|
||||||
if (ret < 0) {
|
if (ret < 0) {
|
||||||
errno = EPIPE;
|
errno = EPIPE;
|
||||||
ff_ipc_msg_free(msg);
|
ff_ipc_msg_free(msg);
|
||||||
|
|
|
@ -32,7 +32,7 @@ int cpu_status(struct ff_top_args *top)
|
||||||
ff_ipc_msg_free(retmsg);
|
ff_ipc_msg_free(retmsg);
|
||||||
}
|
}
|
||||||
|
|
||||||
ret = ff_ipc_recv(&retmsg);
|
ret = ff_ipc_recv(&retmsg, msg->msg_type);
|
||||||
if (ret < 0) {
|
if (ret < 0) {
|
||||||
errno = EPIPE;
|
errno = EPIPE;
|
||||||
ff_ipc_msg_free(msg);
|
ff_ipc_msg_free(msg);
|
||||||
|
|
|
@ -32,7 +32,7 @@ int traffic_status(struct ff_traffic_args *traffic)
|
||||||
ff_ipc_msg_free(retmsg);
|
ff_ipc_msg_free(retmsg);
|
||||||
}
|
}
|
||||||
|
|
||||||
ret = ff_ipc_recv(&retmsg);
|
ret = ff_ipc_recv(&retmsg, msg->msg_type);
|
||||||
if (ret < 0) {
|
if (ret < 0) {
|
||||||
errno = EPIPE;
|
errno = EPIPE;
|
||||||
ff_ipc_msg_free(msg);
|
ff_ipc_msg_free(msg);
|
||||||
|
|
Loading…
Reference in New Issue