226 lines
5.4 KiB
C
226 lines
5.4 KiB
C
// Header file for BPQ32 IP over ax.25 support
|
|
|
|
#define BPQREREAD 403
|
|
#define BPQADDARP 404
|
|
|
|
//extern struct PORTCONTROL * PORTTABLE;
|
|
|
|
#define IDI_ICON2 123
|
|
|
|
#pragma pack(1)
|
|
|
|
typedef struct _ETHMSG
|
|
{
|
|
UCHAR DEST[6];
|
|
UCHAR SOURCE[6];
|
|
USHORT ETYPE;
|
|
|
|
} ETHMSG, *PETHMSG;
|
|
|
|
#define ICMP 1
|
|
|
|
typedef struct _BUFFHEADER
|
|
{
|
|
// BASIC LINK LEVEL HEADER BUFFER LAYOUT
|
|
|
|
struct _MESSAGE * CHAIN;
|
|
|
|
UCHAR PORT;
|
|
USHORT LENGTH;
|
|
|
|
UCHAR DEST[7];
|
|
UCHAR ORIGIN[7];
|
|
|
|
// MAY BE UP TO 56 BYTES OF DIGIS
|
|
|
|
UCHAR CTL;
|
|
UCHAR PID;
|
|
|
|
}BUFFHEADER, *PBUFFHEADER;
|
|
|
|
|
|
typedef struct _AXARP
|
|
{
|
|
struct _BUFFHEADER MSGHDDR;
|
|
|
|
USHORT HWTYPE; // DB 0,3 ; AX.25
|
|
USHORT PID; // DB 0,0CCH ; PID
|
|
|
|
UCHAR HWADDRLEN; // 7
|
|
UCHAR IPADDRLEN; // 4
|
|
|
|
USHORT ARPOPCODE; // 200H ; REQUEST/REPLY
|
|
|
|
UCHAR SENDHWADDR[7];
|
|
uint32_t SENDIPADDR;
|
|
|
|
UCHAR TARGETHWADDR[7];
|
|
uint32_t TARGETIPADDR;
|
|
|
|
} AXARP, *PAXARP;
|
|
|
|
|
|
typedef struct _ETHARP
|
|
{
|
|
struct _ETHMSG MSGHDDR;
|
|
|
|
USHORT HWTYPE; // DB 0,1 ; Eth
|
|
USHORT PID; // DB 8,0 ; PID
|
|
|
|
UCHAR HWADDRLEN; // 6
|
|
UCHAR IPADDRLEN; // 4
|
|
|
|
USHORT ARPOPCODE; // 200H ; REQUEST/REPLY
|
|
|
|
UCHAR SENDHWADDR[6];
|
|
uint32_t SENDIPADDR;
|
|
|
|
UCHAR TARGETHWADDR[6];
|
|
uint32_t TARGETIPADDR;
|
|
|
|
} ETHARP, *PETHARP;
|
|
|
|
typedef struct _RIP2HDDR
|
|
{
|
|
UCHAR Command;
|
|
UCHAR Version;
|
|
USHORT Padding;
|
|
} RIP2HDDR, *PRIP2HDDR;
|
|
|
|
typedef struct _RIP2ENTRY
|
|
{
|
|
USHORT AddrFamily;
|
|
USHORT RouteTAG;
|
|
uint32_t IPAddress;
|
|
uint32_t Mask;
|
|
uint32_t NextHop;
|
|
// Metric Defined as 32 bits, but sent in network order and limited to 16, so just use last byte
|
|
UCHAR Pad1;
|
|
UCHAR Pad2;
|
|
UCHAR Pad3;
|
|
UCHAR Metric;
|
|
} RIP2ENTRY, *PRIP2ENTRY;
|
|
|
|
#pragma pack()
|
|
|
|
// ARP DATA
|
|
|
|
// USED TO TRANSLATE IP ADDRESSES TO MAC (Ether or ax.25) ADDDRESSES
|
|
|
|
typedef struct _ARPDATA
|
|
{
|
|
// KEEP IP ADDR AT FRONT
|
|
|
|
uint32_t IPADDR;
|
|
UCHAR HWADDR[64]; // ETHERNET/ax.25 ADDR, maybe with digis
|
|
BOOL ARPVALID; // NONZERO IF ADDRESS HAS BEEN RESOLVED
|
|
uint32_t ARPTIMER;
|
|
UCHAR ARPINTERFACE; // Port to use. 0= NETROM, 0xff Ethernet
|
|
UCHAR ARPTYPE; // NETROM/VC/DG/ETH
|
|
BOOL LOCKED; // Locked entry from config file
|
|
struct _MESSAGE * ARP_Q; // CHAIN OF DATAGRAMS WAITING FOR RESOLUTION
|
|
struct _ROUTEENTRY * ARPROUTE; // Route Entry for this ARP entry
|
|
|
|
} ARPDATA, *PARPDATA;
|
|
|
|
typedef struct _ROUTEENTRY
|
|
{
|
|
uint32_t NETWORK; // NETWORK
|
|
uint32_t SUBNET; // SUBNET MASK
|
|
uint32_t GATEWAY; // GATEWAY IP ADDRESS
|
|
uint32_t Encap; // Encap if a Tunnelled 44 address
|
|
int FRAMECOUNT; // FRAMES SENT TO THIS NETWORK
|
|
UCHAR TYPE; // TYPE (NETROM/VC/DG/ETH)
|
|
UCHAR METRIC; // FOR RIP
|
|
UCHAR ROUTEINFO; // TYPE (RIP44, LEARNED, SYSOP Config, ETC)
|
|
UCHAR ROUTECHANGED;// CHANGED RECENTLY FLAG
|
|
int RIPTIMOUT; // FOR REMOVING ACTIVE ENTRIES
|
|
UCHAR GARTIMOUT; // FOR REMOVING DEAD ENTRIES
|
|
PARPDATA ARP; // Pointer to ARP entry if resolved
|
|
BOOL LOCKED;
|
|
struct sockaddr_in UDPADDR; // Send Tunnelled packets over UDP
|
|
|
|
} ROUTEENTRY, *PROUTEENTRY;
|
|
|
|
|
|
typedef struct _IPSTATS
|
|
{
|
|
int ARPEntries;
|
|
int FramesForwared;
|
|
int FramesDropped;
|
|
int ARPTimeouts;
|
|
|
|
} IPSTATS, PIPSTATS;
|
|
|
|
|
|
#define MAX_ENTRIES 128
|
|
|
|
struct map_table_entry
|
|
{
|
|
unsigned int sourceipaddr;
|
|
unsigned short sourceport;
|
|
unsigned int mappedipaddr;
|
|
unsigned short mappedport;
|
|
unsigned char hostname[64];
|
|
unsigned int error;
|
|
BOOL ResolveFlag; // True if need to resolve name
|
|
};
|
|
|
|
struct nat_table_entry
|
|
{
|
|
unsigned int origipaddr;
|
|
unsigned short origport;
|
|
unsigned int mappedipaddr;
|
|
unsigned short mappedport;
|
|
BOOL ThisHost; // Needed by LinBPQ to direct host mesgs to TAP
|
|
};
|
|
|
|
struct ipv6_header
|
|
{
|
|
unsigned int
|
|
version : 4,
|
|
traffic_class : 8,
|
|
flow_label : 20;
|
|
unsigned short length;
|
|
unsigned char next_header;
|
|
unsigned char hop_limit;
|
|
struct in6_addr src;
|
|
struct in6_addr dst;
|
|
};
|
|
|
|
static HANDLE hInstance;
|
|
|
|
//unsigned long _beginthread( void( *start_address )( void *), unsigned stack_size, char * arglist);
|
|
|
|
Dll BOOL APIENTRY Init_IP();
|
|
Dll BOOL APIENTRY Poll_IP();
|
|
VOID ProcessEthIPMsg(PETHMSG Buffer);
|
|
VOID ProcessAXARPMsg(PAXARP arpptr);
|
|
VOID ProcessIPMsg(PIPMSG IPptr, UCHAR * MACADDR, char Type, UCHAR Port);
|
|
BOOL CheckIPChecksum(PIPMSG IPptr);
|
|
VOID ProcessICMPMsg(PIPMSG IPptr);
|
|
VOID ProcessSNMPMessage(PIPMSG IPptr);
|
|
BOOL RouteIPMsg(PIPMSG IPptr);
|
|
VOID SendIPtoBPQDEV(PIPMSG IPptr, UCHAR * HWADDR);
|
|
VOID SendIPtoAX25(PIPMSG IPptr, UCHAR * HWADDR, int Port, char Mode);
|
|
PARPDATA AllocARPEntry();
|
|
PARPDATA LookupARP(uint32_t IPADDR, BOOL Add, BOOL * Found);
|
|
static BOOL ReadConfigFile();
|
|
static int ProcessLine(char * buf);
|
|
VOID DoARPTimer();
|
|
UINT SENDNETFRAME;
|
|
static VOID SendNetFrame(UCHAR * ToCall, UCHAR * FromCall, UCHAR * Block, DWORD Len, UCHAR Port);
|
|
VOID ReadARP();
|
|
VOID ReadIPRoutes();
|
|
BOOL ProcessARPLine(char * buf, BOOL Locked);
|
|
void IPResolveNames(void *dummy);
|
|
int CheckSumAndSend(PIPMSG IPptr, PTCPMSG TCPmsg, USHORT Len);
|
|
int CheckSumAndSendUDP(PIPMSG IPptr, PUDPMSG UDPmsg, USHORT Len);
|
|
VOID SaveARP();
|
|
VOID SaveIPRoutes();
|
|
VOID ReadIPRoutes();
|
|
VOID WriteARPLine(PARPDATA ArpRecord, FILE * file);
|
|
VOID SendIPtoEther(PIPMSG IPptr, UCHAR * HWADDR, BOOL SendtoTAP);
|
|
|
|
int InitPCAP(void);
|
|
int OpenPCAP(void); |