view rvinterf/lowlevel/pktfwd.c @ 1008:2b4c3e0f73fc
doc/High-speed-serial: update for current situation
author |
Mychaela Falconia <falcon@freecalypso.org> |
date |
Sun, 10 Dec 2023 23:42:12 +0000 (15 months ago) |
parents |
e7502631a0f9 |
children |
|
line source
/*
* This rvinterf module handles the forwarding of target->host packets
* to clients connected via the local socket interface.
*/
#include <sys/types.h>
#include <stdio.h>
#include <string.h>
#include <strings.h>
#include <stdlib.h>
#include <unistd.h>
#include "../include/pktmux.h"
#include "../include/localsock.h"
#include "client.h"
extern u_char rxpkt[];
extern size_t rxpkt_len;
extern struct client *client_head;
forward_pkt_to_client(cli)
struct client *cli;
{
int len1;
u_char hdr[3];
len1 = rxpkt_len + 1;
hdr[0] = len1 >> 8;
hdr[1] = len1 & 0xFF;
hdr[2] = RVI2CLI_PKT_FROM_TARGET;
write(cli->fd, hdr, 3);
write(cli->fd, rxpkt, rxpkt_len);
}
forward_rv_trace()
{
u32 useid;
struct client *cli;
int i, match;
useid = rxpkt[1] << 24 | rxpkt[2] << 16 | rxpkt[3] << 8 | rxpkt[4];
for (cli = client_head; cli; cli = cli->next) {
match = 0;
for (i = 0; i < cli->int_rvt_count; i++)
if ((useid & cli->int_rvt_mask[i]) ==
cli->int_rvt_match[i]) {
match = 1;
break;
}
if (match)
forward_pkt_to_client(cli);
}
}
forward_nonrvt_pkt()
{
struct client *cli;
for (cli = client_head; cli; cli = cli->next)
if (cli->int_proto[rxpkt[0] - 0x12])
forward_pkt_to_client(cli);
}