FreeCalypso > hg > freecalypso-sw
comparison rvinterf/lowlevel/pktfwd.c @ 178:7ab6b29e76bb
rvinterf: forwarding of Rx packets to clients implemented
| author | Michael Spacefalcon <msokolov@ivan.Harhan.ORG> |
|---|---|
| date | Sat, 23 Nov 2013 22:15:16 +0000 |
| parents | |
| children | 2f285f20d617 |
comparison
equal
deleted
inserted
replaced
| 177:fef035264dd4 | 178:7ab6b29e76bb |
|---|---|
| 1 /* | |
| 2 * This rvinterf module handles the forwarding of target->host packets | |
| 3 * to clients connected via the local socket interface. | |
| 4 */ | |
| 5 | |
| 6 #include <sys/types.h> | |
| 7 #include <stdio.h> | |
| 8 #include <string.h> | |
| 9 #include <strings.h> | |
| 10 #include <stdlib.h> | |
| 11 #include <unistd.h> | |
| 12 #include "../pktmux.h" | |
| 13 #include "../localsock.h" | |
| 14 #include "client.h" | |
| 15 | |
| 16 extern u_char rxpkt[]; | |
| 17 extern size_t rxpkt_len; | |
| 18 | |
| 19 extern struct client *client_head; | |
| 20 | |
| 21 forward_pkt_to_client(cli) | |
| 22 struct client *cli; | |
| 23 { | |
| 24 int len1; | |
| 25 u_char hdr[3]; | |
| 26 | |
| 27 len1 = rxpkt_len + 1; | |
| 28 hdr[0] = len1 >> 8; | |
| 29 hdr[1] = len1 & 0xFF; | |
| 30 hdr[2] = RVI2CLI_PKT_FROM_TARGET; | |
| 31 write(cli->fd, hdr, 3); | |
| 32 write(cli->fd, rxpkt, rxpkt_len); | |
| 33 } | |
| 34 | |
| 35 forward_rv_trace() | |
| 36 { | |
| 37 u32 useid; | |
| 38 struct client *cli; | |
| 39 int i, match; | |
| 40 | |
| 41 useid = rxpkt[1] << 24 | rxpkt[2] << 16 | rxpkt[3] << 8 | rxpkt[4]; | |
| 42 for (cli = client_head; cli; cli = cli->next) { | |
| 43 match = 0; | |
| 44 for (i = 0; i < cli->int_rvt_count; i++) | |
| 45 if ((useid & cli->int_rvt_mask[i]) == | |
| 46 cli->int_rvt_match[i]) { | |
| 47 match = 1; | |
| 48 break; | |
| 49 } | |
| 50 if (match) | |
| 51 forward_pkt_to_client(cli); | |
| 52 } | |
| 53 } | |
| 54 | |
| 55 forward_nonrvt_pkt() | |
| 56 { | |
| 57 struct client *cli; | |
| 58 | |
| 59 for (cli = client_head; cli; cli = cli->next) | |
| 60 if (cli->int_proto[rxpkt[0] - 0x12]) | |
| 61 forward_pkt_to_client(cli); | |
| 62 } |
