more debug logs / address printing

master
Harald Welte 8 months ago
parent 995ac55d0e
commit 84e4ad616c
  1. 29
      tr-bridge.c
  2. 8
      utils.c
  3. 3
      utils.h

@ -172,6 +172,7 @@ static int write_tr(int socket, const struct tr_hdr *trh, const uint8_t *payload
static int eth2tr(struct bridge_state *bst)
{
char tr_src[MAC_STR_SIZE], tr_dst[MAC_STR_SIZE], eth_src[MAC_STR_SIZE], eth_dst[MAC_STR_SIZE];
uint8_t buf[2000];
const struct ethhdr *ethh = (struct ethhdr *) buf;
struct tr_hdr trh;
@ -189,8 +190,12 @@ static int eth2tr(struct bridge_state *bst)
return 0;
}
mac2str_buf(eth_src, ethh->h_source);
mac2str_buf(eth_dst, ethh->h_dest);
if (ethh->h_proto != htons(ETH_P_802_2)) {
fprintf(stderr, "TR<-ETH: Not bridging unexpected frame for proto 0x%04x\n", ntohs(ethh->h_proto));
fprintf(stderr, "TR<-ETH: Not bridging unexpected frame for proto %s->%s 0x%04x\n",
eth_src, eth_dst, ntohs(ethh->h_proto));
return 0;
}
@ -201,9 +206,13 @@ static int eth2tr(struct bridge_state *bst)
memcpy(&trh.saddr, ethh->h_source, sizeof(trh.saddr));
osmo_revbytebits_buf(trh.saddr, TR_ALEN);
if (mac_table_empty(&bst->tr.mac_tbl) || mac_table_contains(&bst->tr.mac_tbl, trh.daddr))
mac2str_buf(tr_src, trh.saddr);
mac2str_buf(tr_dst, trh.daddr);
if (mac_table_empty(&bst->tr.mac_tbl) || mac_table_contains(&bst->tr.mac_tbl, trh.daddr)) {
printf("TR<-ETH: %s/%s <- %s/%s\n", tr_src, eth_src, tr_dst, eth_dst);
return write_tr(bst->tr.socket, &trh, buf + sizeof(*ethh), ethlen - sizeof(*ethh));
else {
} else {
printf("TR<-ETH: Ignoring frame to unknown MAC %s\n", mac2str(trh.daddr));
return 0;
}
@ -227,6 +236,7 @@ static int write_eth(int socket, const struct ethhdr *ethh, const uint8_t *paylo
static int tr2eth(struct bridge_state *bst)
{
char tr_src[MAC_STR_SIZE], tr_dst[MAC_STR_SIZE], eth_src[MAC_STR_SIZE], eth_dst[MAC_STR_SIZE];
uint8_t buf[2000];
const struct tr_hdr *trh = (const struct tr_hdr *) buf;
struct ethhdr ethh;
@ -243,9 +253,12 @@ static int tr2eth(struct bridge_state *bst)
fprintf(stderr, "short frame from TR\n");
return 0;
}
mac2str_buf(tr_src, trh->saddr);
mac2str_buf(tr_dst, trh->daddr);
if (trh->fc != LLC_FRAME) {
fprintf(stderr, "TR->ETH: Not bridging unexpected non-LLC frame for FC 0x%02x\n", trh->fc);
fprintf(stderr, "TR->ETH: Not bridging unexpected non-LLC frame %s->%s FC 0x%02x\n",
tr_src, tr_dst, trh->fc);
return 0;
}
@ -255,9 +268,13 @@ static int tr2eth(struct bridge_state *bst)
osmo_revbytebits_buf(ethh.h_source, TR_ALEN);
ethh.h_proto = htons(ETH_P_802_2);
if (mac_table_empty(&bst->eth.mac_tbl) || mac_table_contains(&bst->eth.mac_tbl, ethh.h_dest))
mac2str_buf(eth_src, ethh.h_source);
mac2str_buf(eth_dst, ethh.h_dest);
if (mac_table_empty(&bst->eth.mac_tbl) || mac_table_contains(&bst->eth.mac_tbl, ethh.h_dest)) {
printf("TR->ETH: %s/%s -> %s/%s\n", tr_src, eth_src, tr_dst, eth_dst);
return write_eth(bst->eth.socket, &ethh, buf + sizeof(*trh), trlen - sizeof(*trh));
else {
} else {
printf("TR->ETH: Ignoring frame to unknown MAC %s\n", mac2str(ethh.h_dest));
return 0;
}

@ -42,6 +42,14 @@ void osmo_revbytebits_buf(uint8_t *buf, int len)
buf[i] = flip_table[buf[i]];
}
const char *mac2str_buf(char *buf, const uint8_t *addr)
{
sprintf(buf, "%02x:%02x:%02x:%02x:%02x:%02x",
addr[0], addr[1], addr[2], addr[3], addr[4], addr[5]);
return buf;
}
const char *mac2str(const uint8_t *addr)
{
static char buf[32];

@ -3,3 +3,6 @@
void osmo_revbytebits_buf(uint8_t *buf, int len);
const char *mac2str(const uint8_t *addr);
const char *mac2str_buf(char *buf, const uint8_t *addr);
#define MAC_STR_SIZE (6*3)

Loading…
Cancel
Save