Merge pull request #16957 from benpicco/tools/zep_dispatch-ack_fix
tools/zep_dispatch: forward based on source addr, not MAC addr
This commit is contained in:
commit
1b09720149
6
dist/tools/zep_dispatch/main.c
vendored
6
dist/tools/zep_dispatch/main.c
vendored
@ -78,10 +78,10 @@ static void _send_topology(void *ctx, void *buffer, size_t len,
|
|||||||
uint8_t mac_src[8];
|
uint8_t mac_src[8];
|
||||||
uint8_t mac_src_len;
|
uint8_t mac_src_len;
|
||||||
|
|
||||||
if (zep_parse_mac(buffer, len, mac_src, &mac_src_len) &&
|
if (zep_parse_mac(buffer, len, mac_src, &mac_src_len)) {
|
||||||
topology_add(ctx, mac_src, mac_src_len, src_addr)) {
|
topology_add(ctx, mac_src, mac_src_len, src_addr);
|
||||||
topology_send(ctx, sock, mac_src, mac_src_len, buffer, len);
|
|
||||||
}
|
}
|
||||||
|
topology_send(ctx, sock, src_addr, buffer, len);
|
||||||
}
|
}
|
||||||
|
|
||||||
static void dispatch_loop(int sock, dispatch_cb_t dispatch, void *ctx)
|
static void dispatch_loop(int sock, dispatch_cb_t dispatch, void *ctx)
|
||||||
|
|||||||
8
dist/tools/zep_dispatch/topology.c
vendored
8
dist/tools/zep_dispatch/topology.c
vendored
@ -198,7 +198,7 @@ int topology_parse(const char *file, topology_t *out)
|
|||||||
}
|
}
|
||||||
|
|
||||||
void topology_send(const topology_t *t, int sock,
|
void topology_send(const topology_t *t, int sock,
|
||||||
const uint8_t *mac_src, size_t mac_src_len,
|
const struct sockaddr_in6 *src_addr,
|
||||||
void *buffer, size_t len)
|
void *buffer, size_t len)
|
||||||
{
|
{
|
||||||
for (list_node_t *edge = t->edges.next; edge; edge = edge->next) {
|
for (list_node_t *edge = t->edges.next; edge; edge = edge->next) {
|
||||||
@ -208,8 +208,7 @@ void topology_send(const topology_t *t, int sock,
|
|||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
|
|
||||||
if ((mac_src_len == super->a->mac_len) &&
|
if (memcmp(&super->a->addr, src_addr, sizeof(*src_addr)) == 0) {
|
||||||
(memcmp(super->a->mac, mac_src, mac_src_len) == 0)) {
|
|
||||||
/* packet loss */
|
/* packet loss */
|
||||||
if (random() > super->weight_a_b * RAND_MAX) {
|
if (random() > super->weight_a_b * RAND_MAX) {
|
||||||
return;
|
return;
|
||||||
@ -219,8 +218,7 @@ void topology_send(const topology_t *t, int sock,
|
|||||||
(struct sockaddr *)&super->b->addr,
|
(struct sockaddr *)&super->b->addr,
|
||||||
sizeof(super->b->addr));
|
sizeof(super->b->addr));
|
||||||
}
|
}
|
||||||
else if ((mac_src_len == super->a->mac_len) &&
|
else if (memcmp(&super->b->addr, src_addr, sizeof(*src_addr)) == 0) {
|
||||||
(memcmp(super->b->mac, mac_src, mac_src_len) == 0)) {
|
|
||||||
/* packet loss */
|
/* packet loss */
|
||||||
if (random() > super->weight_b_a * RAND_MAX) {
|
if (random() > super->weight_b_a * RAND_MAX) {
|
||||||
return;
|
return;
|
||||||
|
|||||||
5
dist/tools/zep_dispatch/topology.h
vendored
5
dist/tools/zep_dispatch/topology.h
vendored
@ -63,13 +63,12 @@ bool topology_add(topology_t *t, const uint8_t *mac, uint8_t mac_len,
|
|||||||
*
|
*
|
||||||
* @param[in] t topology to use
|
* @param[in] t topology to use
|
||||||
* @param[in] sock socket to use for sending
|
* @param[in] sock socket to use for sending
|
||||||
* @param[in] mac_src ZEP source l2 address
|
* @param[in] src_addr source node address
|
||||||
* @param[in] mac_src_len ZEP source l2 address length
|
|
||||||
* @param[in] buffer ZEP frame to send
|
* @param[in] buffer ZEP frame to send
|
||||||
* @param[in] len ZEP frame length
|
* @param[in] len ZEP frame length
|
||||||
*/
|
*/
|
||||||
void topology_send(const topology_t *t, int sock,
|
void topology_send(const topology_t *t, int sock,
|
||||||
const uint8_t *mac_src, size_t mac_src_len,
|
const struct sockaddr_in6 *src_addr,
|
||||||
void *buffer, size_t len);
|
void *buffer, size_t len);
|
||||||
|
|
||||||
#ifdef __cplusplus
|
#ifdef __cplusplus
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user