Update upstream source from tag 'upstream/6.0.25.11+repack'
Update to upstream version '6.0.25.11+repack'
with Debian dir 9c0f82ee4c
This commit is contained in:
commit
1338e2c0a4
2
Bpq32.c
2
Bpq32.c
|
|
@ -1298,6 +1298,8 @@ along with LinBPQ/BPQ32. If not, see http://www.gnu.org/licenses
|
||||||
// Add Paula's Netromx (allows connects to different applications using Node call) (8)
|
// Add Paula's Netromx (allows connects to different applications using Node call) (8)
|
||||||
// Add Netrom over TCP (8)
|
// Add Netrom over TCP (8)
|
||||||
// Fix FRMR caused by sending SREJ when no frames outstanding (8)
|
// Fix FRMR caused by sending SREJ when no frames outstanding (8)
|
||||||
|
// Fix some issues with NetromX connects and Route Selection when running INP3 and NODES routing (9)
|
||||||
|
// Fix connecting to a netrom node with c p node command (10)
|
||||||
|
|
||||||
|
|
||||||
#define CKernel
|
#define CKernel
|
||||||
|
|
|
||||||
2
Cmd.c
2
Cmd.c
|
|
@ -2737,7 +2737,7 @@ NoPort:
|
||||||
while (cmdCopy[i] >= '0' && cmdCopy[i]<= '9')
|
while (cmdCopy[i] >= '0' && cmdCopy[i]<= '9')
|
||||||
i++;
|
i++;
|
||||||
|
|
||||||
if (cmdCopy[i] != ' ')
|
if (i && cmdCopy[i] != ' ') // have an all digit param = probably a service
|
||||||
goto Downlink;
|
goto Downlink;
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
|
|
|
||||||
155
Events.c
155
Events.c
|
|
@ -26,6 +26,7 @@ along with LinBPQ/BPQ32. If not, see http://www.gnu.org/licenses
|
||||||
#include "asmstrucs.h"
|
#include "asmstrucs.h"
|
||||||
#include "tncinfo.h"
|
#include "tncinfo.h"
|
||||||
#include "cheaders.h"
|
#include "cheaders.h"
|
||||||
|
#include "kiss.h"
|
||||||
|
|
||||||
VOID __cdecl Debugprintf(const char * format, ...);
|
VOID __cdecl Debugprintf(const char * format, ...);
|
||||||
|
|
||||||
|
|
@ -44,7 +45,9 @@ void MQTTReportSession(char * Msg);
|
||||||
extern int MQTT;
|
extern int MQTT;
|
||||||
extern time_t TimeLoaded;
|
extern time_t TimeLoaded;
|
||||||
|
|
||||||
int UDPSeq = 1;
|
uint16_t UDPSeq = 1;
|
||||||
|
int linkSeq = 1;
|
||||||
|
int cctSeq = 1;
|
||||||
|
|
||||||
extern SOCKET NodeAPISocket;
|
extern SOCKET NodeAPISocket;
|
||||||
extern SOCKADDR_IN UDPreportdest;
|
extern SOCKADDR_IN UDPreportdest;
|
||||||
|
|
@ -149,6 +152,7 @@ void hookL2SessionAccepted(int Port, char * remotecall, char * ourcall, struct _
|
||||||
int udplen;
|
int udplen;
|
||||||
|
|
||||||
L2CONNECTSIN++;
|
L2CONNECTSIN++;
|
||||||
|
LINK->apiSeq = linkSeq++;
|
||||||
|
|
||||||
LINK->lastStatusSentTime = LINK->ConnectTime = time(NULL);
|
LINK->lastStatusSentTime = LINK->ConnectTime = time(NULL);
|
||||||
LINK->bytesTXed = LINK->bytesRXed = LINK->framesResent = LINK->framesRXed = LINK->framesTXed = 0;
|
LINK->bytesTXed = LINK->bytesRXed = LINK->framesResent = LINK->framesRXed = LINK->framesTXed = 0;
|
||||||
|
|
@ -161,8 +165,8 @@ void hookL2SessionAccepted(int Port, char * remotecall, char * ourcall, struct _
|
||||||
{
|
{
|
||||||
LINK->lastStatusSentTime = time(NULL);
|
LINK->lastStatusSentTime = time(NULL);
|
||||||
|
|
||||||
udplen = sprintf(UDPMsg, "{\"@type\":\"LinkUpEvent\", \"node\": \"%s\", \"id\": %d, \"direction\": \"incoming\", \"port\": \"%d\", \"remote\": \"%s\", \"local\": \"%s\"}",
|
udplen = sprintf(UDPMsg, "{\"@type\":\"LinkUpEvent\", \"node\": \"%s\", \"id\": %d, \"direction\": \"incoming\", \"port\": \"%d\", \"remote\": \"%s\", \"local\": \"%s\", \"isRF\": %s}",
|
||||||
NODECALLLOPPED, UDPSeq++, LINK->LINKPORT->PORTNUMBER, LINK->callingCall, LINK->receivingCall);
|
NODECALLLOPPED, LINK->apiSeq, LINK->LINKPORT->PORTNUMBER, LINK->callingCall, LINK->receivingCall, (LINK->LINKPORT->isRF)?"true":"false");
|
||||||
|
|
||||||
// Debugprintf(UDPMsg);
|
// Debugprintf(UDPMsg);
|
||||||
|
|
||||||
|
|
@ -238,13 +242,14 @@ void hookL2SessionConnected(struct _LINKTABLE * LINK)
|
||||||
int udplen;
|
int udplen;
|
||||||
|
|
||||||
L2CONNECTSOUT++;
|
L2CONNECTSOUT++;
|
||||||
|
LINK->apiSeq = linkSeq++;
|
||||||
|
|
||||||
if (NodeAPISocket)
|
if (NodeAPISocket)
|
||||||
{
|
{
|
||||||
LINK->lastStatusSentTime = time(NULL);
|
LINK->lastStatusSentTime = time(NULL);
|
||||||
|
|
||||||
udplen = sprintf(UDPMsg, "{\"@type\":\"LinkUpEvent\", \"node\": \"%s\", \"id\": %d, \"direction\": \"outgoing\", \"port\": \"%d\", \"remote\": \"%s\", \"local\": \"%s\"}",
|
udplen = sprintf(UDPMsg, "{\"@type\":\"LinkUpEvent\", \"node\": \"%s\", \"id\": %d, \"direction\": \"outgoing\", \"port\": \"%d\", \"remote\": \"%s\", \"local\": \"%s\", \"isRF\": %s}",
|
||||||
NODECALLLOPPED, UDPSeq++, LINK->LINKPORT->PORTNUMBER, LINK->callingCall, LINK->receivingCall);
|
NODECALLLOPPED, LINK->apiSeq, LINK->LINKPORT->PORTNUMBER, LINK->callingCall, LINK->receivingCall, (LINK->LINKPORT->isRF)?"true":"false");
|
||||||
|
|
||||||
// Debugprintf(UDPMsg);
|
// Debugprintf(UDPMsg);
|
||||||
|
|
||||||
|
|
@ -268,20 +273,19 @@ void hookL2SessionClosed(struct _LINKTABLE * LINK, char * Reason, char * Directi
|
||||||
if (strcmp(Direction, "Out") == 0)
|
if (strcmp(Direction, "Out") == 0)
|
||||||
udplen = sprintf(UDPMsg, "{\"@type\":\"LinkDownEvent\", \"node\": \"%s\", \"id\": %d, \"direction\": \"outgoing\", \"port\": \"%d\", \"remote\": \"%s\", \"local\": \"%s\","
|
udplen = sprintf(UDPMsg, "{\"@type\":\"LinkDownEvent\", \"node\": \"%s\", \"id\": %d, \"direction\": \"outgoing\", \"port\": \"%d\", \"remote\": \"%s\", \"local\": \"%s\","
|
||||||
"\"bytesSent\": %d, \"bytesRcvd\": %d, \"frmsSent\": %d, \"frmsRcvd\": %d, \"frmsQueued\": %d, \"frmsResent\": %d, \"reason\": \"%s\","
|
"\"bytesSent\": %d, \"bytesRcvd\": %d, \"frmsSent\": %d, \"frmsRcvd\": %d, \"frmsQueued\": %d, \"frmsResent\": %d, \"reason\": \"%s\","
|
||||||
" \"time\": %d, \"upForSecs\": %d, \"frmsQdPeak\": %d}",
|
" \"time\": %d, \"upForSecs\": %d, \"frmsQdPeak\": %d, \"isRF\": %s}",
|
||||||
NODECALLLOPPED, UDPSeq++, LINK->LINKPORT->PORTNUMBER, LINK->receivingCall, LINK->callingCall,
|
NODECALLLOPPED, LINK->apiSeq, LINK->LINKPORT->PORTNUMBER, LINK->receivingCall, LINK->callingCall,
|
||||||
LINK->bytesTXed , LINK->bytesRXed, LINK->framesTXed, LINK->framesRXed, COUNT_AT_L2(LINK), LINK->framesResent, Reason,
|
LINK->bytesTXed , LINK->bytesRXed, LINK->framesTXed, LINK->framesRXed, COUNT_AT_L2(LINK), LINK->framesResent, Reason,
|
||||||
(int)Now, (int)Now - LINK->ConnectTime, LINK->maxQueued);
|
(int)Now, (int)Now - LINK->ConnectTime, LINK->maxQueued, (LINK->LINKPORT->isRF)?"true":"false");
|
||||||
else
|
else
|
||||||
udplen = sprintf(UDPMsg, "{\"@type\":\"LinkDownEvent\", \"node\": \"%s\", \"id\": %d, \"direction\": \"incoming\", \"port\": \"%d\", \"remote\": \"%s\", \"local\": \"%s\","
|
udplen = sprintf(UDPMsg, "{\"@type\":\"LinkDownEvent\", \"node\": \"%s\", \"id\": %d, \"direction\": \"incoming\", \"port\": \"%d\", \"remote\": \"%s\", \"local\": \"%s\","
|
||||||
"\"bytesSent\": %d, \"bytesRcvd\": %d, \"frmsSent\": %d, \"frmsRcvd\": %d, \"frmsQueued\": %d, \"frmsResent\": %d, \"reason\": \"%s\","
|
"\"bytesSent\": %d, \"bytesRcvd\": %d, \"frmsSent\": %d, \"frmsRcvd\": %d, \"frmsQueued\": %d, \"frmsResent\": %d, \"reason\": \"%s\","
|
||||||
" \"time\": %d, \"upForSecs\": %d, \"frmsQdPeak\": %d}",
|
" \"time\": %d, \"upForSecs\": %d, \"frmsQdPeak\": %d, \"isRF\": %s}",
|
||||||
NODECALLLOPPED, UDPSeq++, LINK->LINKPORT->PORTNUMBER, LINK->callingCall, LINK->receivingCall,
|
NODECALLLOPPED, LINK->apiSeq, LINK->LINKPORT->PORTNUMBER, LINK->callingCall, LINK->receivingCall,
|
||||||
LINK->bytesTXed , LINK->bytesRXed, LINK->framesTXed, LINK->framesRXed, COUNT_AT_L2(LINK), LINK->framesResent, Reason,
|
LINK->bytesTXed , LINK->bytesRXed, LINK->framesTXed, LINK->framesRXed, COUNT_AT_L2(LINK), LINK->framesResent, Reason,
|
||||||
(int)Now, (int)Now - LINK->ConnectTime, LINK->maxQueued);
|
(int)Now, (int)Now - LINK->ConnectTime, LINK->maxQueued, (LINK->LINKPORT->isRF)?"true":"false");
|
||||||
|
|
||||||
|
// Debugprintf(UDPMsg);
|
||||||
Debugprintf(UDPMsg);
|
|
||||||
|
|
||||||
sendto(NodeAPISocket, UDPMsg, udplen, 0, (struct sockaddr *)&UDPreportdest, sizeof(UDPreportdest));
|
sendto(NodeAPISocket, UDPMsg, udplen, 0, (struct sockaddr *)&UDPreportdest, sizeof(UDPreportdest));
|
||||||
}
|
}
|
||||||
|
|
@ -309,22 +313,21 @@ void hookL2SessionStatus(struct _LINKTABLE * LINK)
|
||||||
if (strcmp(LINK->Direction, "Out") == 0)
|
if (strcmp(LINK->Direction, "Out") == 0)
|
||||||
udplen = sprintf(UDPMsg, "{\"@type\":\"LinkStatus\", \"node\": \"%s\", \"id\": %d, \"direction\": \"outgoing\", \"port\": \"%d\", \"remote\": \"%s\", \"local\": \"%s\","
|
udplen = sprintf(UDPMsg, "{\"@type\":\"LinkStatus\", \"node\": \"%s\", \"id\": %d, \"direction\": \"outgoing\", \"port\": \"%d\", \"remote\": \"%s\", \"local\": \"%s\","
|
||||||
"\"bytesSent\": %d, \"bytesRcvd\": %d, \"frmsSent\": %d, \"frmsRcvd\": %d, \"frmsQueued\": %d, \"frmsResent\": %d,"
|
"\"bytesSent\": %d, \"bytesRcvd\": %d, \"frmsSent\": %d, \"frmsRcvd\": %d, \"frmsQueued\": %d, \"frmsResent\": %d,"
|
||||||
"\"upForSecs\": %d, \"frmsQdPeak\": %d, \"bpsTxMean\": %d, \"bpsRxMean\": %d, \"frmQMax\": %d, \"l2rttMs\": %d}",
|
"\"upForSecs\": %d, \"frmsQdPeak\": %d, \"bpsTxMean\": %d, \"bpsRxMean\": %d, \"frmQMax\": %d, \"l2rttMs\": %d, \"isRF\": %s}",
|
||||||
NODECALLLOPPED, UDPSeq++, LINK->LINKPORT->PORTNUMBER, LINK->receivingCall, LINK->callingCall,
|
NODECALLLOPPED, LINK->apiSeq, LINK->LINKPORT->PORTNUMBER, LINK->receivingCall, LINK->callingCall,
|
||||||
LINK->bytesTXed, LINK->bytesRXed, LINK->framesTXed, LINK->framesRXed, 0, LINK->framesResent,
|
LINK->bytesTXed, LINK->bytesRXed, LINK->framesTXed, LINK->framesRXed, 0, LINK->framesResent,
|
||||||
(int)Now - LINK->ConnectTime, LINK->maxQueued, bpsTx, bpsRx, LINK->intervalMaxQueued, LINK->RTT);
|
(int)Now - LINK->ConnectTime, LINK->maxQueued, bpsTx, bpsRx, LINK->intervalMaxQueued, LINK->RTT, (LINK->LINKPORT->isRF)?"true":"false");
|
||||||
else
|
else
|
||||||
udplen = sprintf(UDPMsg, "{\"@type\":\"LinkStatus\", \"node\": \"%s\", \"id\": %d, \"direction\": \"incoming\", \"port\": \"%d\", \"remote\": \"%s\", \"local\": \"%s\","
|
udplen = sprintf(UDPMsg, "{\"@type\":\"LinkStatus\", \"node\": \"%s\", \"id\": %d, \"direction\": \"incoming\", \"port\": \"%d\", \"remote\": \"%s\", \"local\": \"%s\","
|
||||||
"\"bytesSent\": %d, \"bytesRcvd\": %d, \"frmsSent\": %d, \"frmsRcvd\": %d, \"frmsQueued\": %d, \"frmsResent\": %d,"
|
"\"bytesSent\": %d, \"bytesRcvd\": %d, \"frmsSent\": %d, \"frmsRcvd\": %d, \"frmsQueued\": %d, \"frmsResent\": %d,"
|
||||||
"\"upForSecs\": %d, \"frmsQdPeak\": %d, \"bpsTxMean\": %d, \"bpsRxMean\": %d, \"frmQMax\": %d, \"l2rttMs\": %d}",
|
"\"upForSecs\": %d, \"frmsQdPeak\": %d, \"bpsTxMean\": %d, \"bpsRxMean\": %d, \"frmQMax\": %d, \"l2rttMs\": %d, \"isRF\": %s}",
|
||||||
NODECALLLOPPED, UDPSeq++, LINK->LINKPORT->PORTNUMBER, LINK->callingCall, LINK->receivingCall,
|
NODECALLLOPPED, LINK->apiSeq, LINK->LINKPORT->PORTNUMBER, LINK->callingCall, LINK->receivingCall,
|
||||||
LINK->bytesTXed, LINK->bytesRXed, LINK->framesTXed, LINK->framesRXed, 0, LINK->framesResent,
|
LINK->bytesTXed, LINK->bytesRXed, LINK->framesTXed, LINK->framesRXed, 0, LINK->framesResent,
|
||||||
(int)Now - LINK->ConnectTime, LINK->maxQueued, bpsTx, bpsRx, LINK->intervalMaxQueued, LINK->RTT);
|
(int)Now - LINK->ConnectTime, LINK->maxQueued, bpsTx, bpsRx, LINK->intervalMaxQueued, LINK->RTT, (LINK->LINKPORT->isRF)?"true":"false");
|
||||||
|
|
||||||
LINK->intervalMaxQueued = 0;
|
LINK->intervalMaxQueued = 0;
|
||||||
|
|
||||||
Debugprintf(UDPMsg);
|
// Debugprintf(UDPMsg);
|
||||||
|
|
||||||
sendto(NodeAPISocket, UDPMsg, udplen, 0, (struct sockaddr *)&UDPreportdest, sizeof(UDPreportdest));
|
sendto(NodeAPISocket, UDPMsg, udplen, 0, (struct sockaddr *)&UDPreportdest, sizeof(UDPreportdest));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
@ -485,11 +488,17 @@ void IncomingL4ConnectionEvent(TRANSPORTENTRY * L4)
|
||||||
char remotecall[64];
|
char remotecall[64];
|
||||||
char ourcall[64];
|
char ourcall[64];
|
||||||
char circuitinfo[32];
|
char circuitinfo[32];
|
||||||
|
int Service = L4->Service;
|
||||||
|
|
||||||
// CACK sent to CREQ
|
// CACK sent to CREQ
|
||||||
|
|
||||||
|
L4->apiSeq = cctSeq++;
|
||||||
|
strcpy(L4->Direction, "incoming");
|
||||||
|
|
||||||
if (NodeAPISocket)
|
if (NodeAPISocket)
|
||||||
{
|
{
|
||||||
|
L4->lastStatusSentTime = time(NULL);
|
||||||
|
|
||||||
remotecall[ConvFromAX25(L4->L4TARGET.DEST->DEST_CALL, remotecall)] = 0;
|
remotecall[ConvFromAX25(L4->L4TARGET.DEST->DEST_CALL, remotecall)] = 0;
|
||||||
// remotecall[ConvFromAX25(L4->L4USER, remotecall)] = 0;
|
// remotecall[ConvFromAX25(L4->L4USER, remotecall)] = 0;
|
||||||
ourcall[ConvFromAX25(L4->L4MYCALL, ourcall)] = 0;
|
ourcall[ConvFromAX25(L4->L4MYCALL, ourcall)] = 0;
|
||||||
|
|
@ -499,10 +508,16 @@ void IncomingL4ConnectionEvent(TRANSPORTENTRY * L4)
|
||||||
|
|
||||||
sprintf(circuitinfo, ":%02x%02x", L4->CIRCUITINDEX, L4->CIRCUITID);
|
sprintf(circuitinfo, ":%02x%02x", L4->CIRCUITINDEX, L4->CIRCUITID);
|
||||||
strcat(ourcall, circuitinfo);
|
strcat(ourcall, circuitinfo);
|
||||||
|
|
||||||
udplen = sprintf(UDPMsg, "{\"@type\": \"CircuitUpEvent\", \"node\": \"%s\", \"id\": %d, \"direction\": \"incoming\","
|
if (Service == -1)
|
||||||
|
udplen = sprintf(UDPMsg, "{\"@type\": \"CircuitUpEvent\", \"node\": \"%s\", \"id\": %d, \"direction\": \"incoming\", "
|
||||||
|
"\"remote\": \"%s\", \"local\": \"%s\"}",
|
||||||
|
NODECALLLOPPED, L4->apiSeq, remotecall, ourcall);
|
||||||
|
else
|
||||||
|
udplen = sprintf(UDPMsg, "{\"@type\": \"CircuitUpEvent\", \"node\": \"%s\", \"id\": %d, \"direction\": \"incoming\", "
|
||||||
"\"service\": %d, \"remote\": \"%s\", \"local\": \"%s\"}",
|
"\"service\": %d, \"remote\": \"%s\", \"local\": \"%s\"}",
|
||||||
NODECALLLOPPED, UDPSeq++, L4->Service, remotecall, ourcall);
|
NODECALLLOPPED, L4->apiSeq, Service, remotecall, ourcall);
|
||||||
|
|
||||||
|
|
||||||
// Debugprintf(UDPMsg);
|
// Debugprintf(UDPMsg);
|
||||||
sendto(NodeAPISocket, UDPMsg, udplen, 0, (struct sockaddr *)&UDPreportdest, sizeof(UDPreportdest));
|
sendto(NodeAPISocket, UDPMsg, udplen, 0, (struct sockaddr *)&UDPreportdest, sizeof(UDPreportdest));
|
||||||
|
|
@ -517,11 +532,18 @@ void OutgoingL4ConnectionEvent(TRANSPORTENTRY * L4)
|
||||||
char remotecall[64];
|
char remotecall[64];
|
||||||
char ourcall[64];
|
char ourcall[64];
|
||||||
char circuitinfo[32];
|
char circuitinfo[32];
|
||||||
|
int Service = L4->Service;
|
||||||
|
|
||||||
// CACK received
|
// CACK received
|
||||||
|
|
||||||
|
strcpy(L4->Direction, "outgoing");
|
||||||
|
|
||||||
|
L4->apiSeq = cctSeq++;
|
||||||
|
|
||||||
if (NodeAPISocket)
|
if (NodeAPISocket)
|
||||||
{
|
{
|
||||||
|
L4->lastStatusSentTime = time(NULL);
|
||||||
|
|
||||||
remotecall[ConvFromAX25(L4->L4TARGET.DEST->DEST_CALL, remotecall)] = 0;
|
remotecall[ConvFromAX25(L4->L4TARGET.DEST->DEST_CALL, remotecall)] = 0;
|
||||||
// remotecall[ConvFromAX25(L4->L4USER, remotecall)] = 0;
|
// remotecall[ConvFromAX25(L4->L4USER, remotecall)] = 0;
|
||||||
ourcall[ConvFromAX25(L4->L4MYCALL, ourcall)] = 0;
|
ourcall[ConvFromAX25(L4->L4MYCALL, ourcall)] = 0;
|
||||||
|
|
@ -532,9 +554,14 @@ void OutgoingL4ConnectionEvent(TRANSPORTENTRY * L4)
|
||||||
sprintf(circuitinfo, ":%02x%02x", L4->CIRCUITID, L4->CIRCUITINDEX);
|
sprintf(circuitinfo, ":%02x%02x", L4->CIRCUITID, L4->CIRCUITINDEX);
|
||||||
strcat(ourcall, circuitinfo);
|
strcat(ourcall, circuitinfo);
|
||||||
|
|
||||||
udplen = sprintf(UDPMsg, "{\"@type\": \"CircuitUpEvent\", \"node\": \"%s\", \"id\": %d, \"direction\": \"outgoing\","
|
if (Service == -1)
|
||||||
|
udplen = sprintf(UDPMsg, "{\"@type\": \"CircuitUpEvent\", \"node\": \"%s\", \"id\": %d, \"direction\": \"outgoing\", "
|
||||||
|
"\"remote\": \"%s\", \"local\": \"%s\"}",
|
||||||
|
NODECALLLOPPED, L4->apiSeq, remotecall, ourcall);
|
||||||
|
else
|
||||||
|
udplen = sprintf(UDPMsg, "{\"@type\": \"CircuitUpEvent\", \"node\": \"%s\", \"id\": %d, \"direction\": \"outgoing\", "
|
||||||
"\"service\": %d, \"remote\": \"%s\", \"local\": \"%s\"}",
|
"\"service\": %d, \"remote\": \"%s\", \"local\": \"%s\"}",
|
||||||
NODECALLLOPPED, UDPSeq++, L4->Service, remotecall, ourcall);
|
NODECALLLOPPED, L4->apiSeq, Service, remotecall, ourcall);
|
||||||
|
|
||||||
// Debugprintf(UDPMsg);
|
// Debugprintf(UDPMsg);
|
||||||
sendto(NodeAPISocket, UDPMsg, udplen, 0, (struct sockaddr *)&UDPreportdest, sizeof(UDPreportdest));
|
sendto(NodeAPISocket, UDPMsg, udplen, 0, (struct sockaddr *)&UDPreportdest, sizeof(UDPreportdest));
|
||||||
|
|
@ -592,7 +619,7 @@ void L4DisconnectEvent(TRANSPORTENTRY * L4, char * Direction, char * Reason)
|
||||||
|
|
||||||
udplen = sprintf(UDPMsg, "{\"@type\": \"CircuitDownEvent\", \"node\": \"%s\", \"id\": %d, \"direction\": \"%s\","
|
udplen = sprintf(UDPMsg, "{\"@type\": \"CircuitDownEvent\", \"node\": \"%s\", \"id\": %d, \"direction\": \"%s\","
|
||||||
"\"service\": %d, \"remote\": \"%s\", \"local\": \"%s\", \"segsSent\": %d, \"segsRcvd\": %d, \"segsResent\": %d, \"segsQueued\": %d, \"reason\": \"%s\"}",
|
"\"service\": %d, \"remote\": \"%s\", \"local\": \"%s\", \"segsSent\": %d, \"segsRcvd\": %d, \"segsResent\": %d, \"segsQueued\": %d, \"reason\": \"%s\"}",
|
||||||
NODECALLLOPPED, UDPSeq++, Direction, 0, remotecall, ourcall,L4->segsSent, L4->segsRcvd, L4->segsResent, Count, Reason);
|
NODECALLLOPPED, L4->apiSeq, Direction, 0, remotecall, ourcall,L4->segsSent, L4->segsRcvd, L4->segsResent, Count, Reason);
|
||||||
|
|
||||||
// Debugprintf(UDPMsg);
|
// Debugprintf(UDPMsg);
|
||||||
sendto(NodeAPISocket, UDPMsg, udplen, 0, (struct sockaddr *)&UDPreportdest, sizeof(UDPreportdest));
|
sendto(NodeAPISocket, UDPMsg, udplen, 0, (struct sockaddr *)&UDPreportdest, sizeof(UDPreportdest));
|
||||||
|
|
@ -608,11 +635,16 @@ void L4StatusSeport(TRANSPORTENTRY * L4)
|
||||||
char nodecall[16];
|
char nodecall[16];
|
||||||
char circuitinfo[32];
|
char circuitinfo[32];
|
||||||
int Count;
|
int Count;
|
||||||
|
time_t Now = time(NULL);
|
||||||
|
int Service = L4->Service;
|
||||||
|
|
||||||
// CACK received
|
|
||||||
|
|
||||||
|
// Regular Status reports
|
||||||
|
|
||||||
if (NodeAPISocket)
|
if (NodeAPISocket)
|
||||||
{
|
{
|
||||||
|
L4->lastStatusSentTime = Now;
|
||||||
nodecall[ConvFromAX25(L4->L4TARGET.DEST->DEST_CALL, nodecall)] = 0;
|
nodecall[ConvFromAX25(L4->L4TARGET.DEST->DEST_CALL, nodecall)] = 0;
|
||||||
remotecall[ConvFromAX25(L4->L4USER, remotecall)] = 0;
|
remotecall[ConvFromAX25(L4->L4USER, remotecall)] = 0;
|
||||||
ourcall[ConvFromAX25(L4->L4MYCALL, ourcall)] = 0;
|
ourcall[ConvFromAX25(L4->L4MYCALL, ourcall)] = 0;
|
||||||
|
|
@ -628,10 +660,15 @@ void L4StatusSeport(TRANSPORTENTRY * L4)
|
||||||
Count = CountFramesQueuedOnSession(L4->L4CROSSLINK);
|
Count = CountFramesQueuedOnSession(L4->L4CROSSLINK);
|
||||||
else
|
else
|
||||||
Count = CountFramesQueuedOnSession(L4);
|
Count = CountFramesQueuedOnSession(L4);
|
||||||
|
|
||||||
udplen = sprintf(UDPMsg, "{\"@type\": \"CircuitStatus\", \"node\": \"%s\", \"id\": %d, \"direction\": \"outgoing\","
|
if (Service == -1)
|
||||||
"\"service\": %d, \"remote\": %s, \"local\": \"%s\", \"segsSent\": %d, \"segsRcvd\": %d, \"segsResent\": %d, \"segsQueued\": %d}",
|
udplen = sprintf(UDPMsg, "{\"@type\": \"CircuitStatus\", \"node\": \"%s\", \"id\": %d, \"direction\": \"%s\","
|
||||||
NODECALLLOPPED, UDPSeq++, 0, remotecall, ourcall,L4->segsSent, L4->segsRcvd, L4->segsResent, Count);
|
"\"upForSecs\": %d,\"remote\": \"%s\", \"local\": \"%s\", \"segsSent\": %d, \"segsRcvd\": %d, \"segsResent\": %d, \"segsQueued\": %d}",
|
||||||
|
NODECALLLOPPED, L4->apiSeq, L4->Direction, Now - L4->ConnectTime, remotecall, ourcall,L4->segsSent, L4->segsRcvd, L4->segsResent, Count);
|
||||||
|
else
|
||||||
|
udplen = sprintf(UDPMsg, "{\"@type\": \"CircuitStatus\", \"node\": \"%s\", \"id\": %d, \"direction\": \"%s\","
|
||||||
|
"\"upForSecs\": %d, \"service\": %d, \"remote\": \"%s\", \"local\": \"%s\", \"segsSent\": %d, \"segsRcvd\": %d, \"segsResent\": %d, \"segsQueued\": %d}",
|
||||||
|
NODECALLLOPPED, L4->apiSeq, L4->Direction, Now - L4->ConnectTime, Service, remotecall, ourcall,L4->segsSent, L4->segsRcvd, L4->segsResent, Count);
|
||||||
|
|
||||||
// Debugprintf(UDPMsg);
|
// Debugprintf(UDPMsg);
|
||||||
sendto(NodeAPISocket, UDPMsg, udplen, 0, (struct sockaddr *)&UDPreportdest, sizeof(UDPreportdest));
|
sendto(NodeAPISocket, UDPMsg, udplen, 0, (struct sockaddr *)&UDPreportdest, sizeof(UDPreportdest));
|
||||||
|
|
@ -713,8 +750,13 @@ void APIL2Trace(struct _MESSAGE * Message, char * Dirn)
|
||||||
int UFlag = 0;
|
int UFlag = 0;
|
||||||
int NS;
|
int NS;
|
||||||
int NR;
|
int NR;
|
||||||
|
struct PORTCONTROL * PORT = GetPortTableEntryFromPortNum(Message->PORT);
|
||||||
|
time_t Now = time(NULL);
|
||||||
|
|
||||||
|
|
||||||
|
if (PORT == 0)
|
||||||
|
return;
|
||||||
|
|
||||||
if ((Message->ORIGIN[6] & 1) == 0) // Digis
|
if ((Message->ORIGIN[6] & 1) == 0) // Digis
|
||||||
return;
|
return;
|
||||||
|
|
||||||
|
|
@ -734,7 +776,6 @@ void APIL2Trace(struct _MESSAGE * Message, char * Dirn)
|
||||||
if ((Message->ORIGIN[6] & 1) == 0) // Digis - ignore for now
|
if ((Message->ORIGIN[6] & 1) == 0) // Digis - ignore for now
|
||||||
return;
|
return;
|
||||||
|
|
||||||
|
|
||||||
if ((Message->DEST[6] & 0x80) == 0 && (Message->ORIGIN[6] & 0x80) == 0)
|
if ((Message->DEST[6] & 0x80) == 0 && (Message->ORIGIN[6] & 0x80) == 0)
|
||||||
strcpy(CR, "V1");
|
strcpy(CR, "V1");
|
||||||
else if ((Message->DEST[6] & 0x80))
|
else if ((Message->DEST[6] & 0x80))
|
||||||
|
|
@ -857,9 +898,9 @@ void APIL2Trace(struct _MESSAGE * Message, char * Dirn)
|
||||||
// Common to all frame types
|
// Common to all frame types
|
||||||
|
|
||||||
udplen = snprintf(UDPMsg, 2048,
|
udplen = snprintf(UDPMsg, 2048,
|
||||||
"{\"@type\": \"L2Trace\", \"dirn\": \"%s\", \"reportFrom\": \"%s\", \"port\": \"%d\", \"srce\": \"%s\", \"dest\": \"%s\", \"ctrl\": %d,"
|
"{\"@type\": \"L2Trace\", \"serial\": %d, \"time\": %d, \"dirn\": \"%s\", \"isRF\": %s, \"reportFrom\": \"%s\", \"port\": \"%d\", \"srce\": \"%s\", \"dest\": \"%s\", \"ctrl\": %d,"
|
||||||
"\"l2Type\": \"%s\", \"modulo\": 8, \"cr\": \"%s\"",
|
"\"l2Type\": \"%s\", \"modulo\": 8, \"cr\": \"%s\"",
|
||||||
Dirn, NODECALLLOPPED, Message->PORT, srcecall, destcall, Message->CTL, Type, CR);
|
UDPSeq++, (int)Now, Dirn, (PORT->isRF)?"true":"false", NODECALLLOPPED, Message->PORT, srcecall, destcall, Message->CTL, Type, CR);
|
||||||
|
|
||||||
if (UIFlag)
|
if (UIFlag)
|
||||||
{
|
{
|
||||||
|
|
@ -917,6 +958,48 @@ void APIL2Trace(struct _MESSAGE * Message, char * Dirn)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
//"@type" = @L3Trace, reportFrom, time, dirn,
|
||||||
|
|
||||||
|
void NetromTCPTrace(struct _MESSAGE * Message, char * Dirn)
|
||||||
|
{
|
||||||
|
char UDPMsg[2048];
|
||||||
|
int udplen;
|
||||||
|
time_t Now = time(NULL);
|
||||||
|
int iLen = Message->LENGTH - (15 + MSGHDDRLEN);
|
||||||
|
int isRF = 0;
|
||||||
|
|
||||||
|
|
||||||
|
udplen = snprintf(UDPMsg, 2048,
|
||||||
|
"{\"@type\": \"L3Trace\", \"serial\": %d, \"time\": %d, \"dirn\": \"%s\", \"isRF\": %s, \"reportFrom\": \"%s\", \"port\": %d",
|
||||||
|
UDPSeq++, (int)Now, Dirn, (isRF)?"true":"false", NODECALLLOPPED, Message->PORT);
|
||||||
|
|
||||||
|
|
||||||
|
udplen += snprintf(&UDPMsg[udplen], 2048 - udplen,
|
||||||
|
", \"ilen\": %d, \"pid\": %d, \"ptcl\": \"%s\"",
|
||||||
|
iLen, Message->PID, PIDtoText(Message->PID));
|
||||||
|
|
||||||
|
if (Message->PID == NETROM_PID)
|
||||||
|
{
|
||||||
|
int n = decodeNETROMIFrame(Message->L2DATA, iLen, &UDPMsg[udplen], 2048 - udplen);
|
||||||
|
|
||||||
|
if (n == 0)
|
||||||
|
return; // Can't decode so don't trace anything;
|
||||||
|
|
||||||
|
udplen += n;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
UDPMsg[udplen++] = '}';
|
||||||
|
UDPMsg[udplen] = 0;
|
||||||
|
// Debugprintf(UDPMsg);
|
||||||
|
sendto(NodeAPISocket, UDPMsg, udplen, 0, (struct sockaddr *)&UDPreportdest, sizeof(UDPreportdest));
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
int decodeNETROMUIMsg(unsigned char * Msg, int iLen, char * Buffer, int BufferLen)
|
int decodeNETROMUIMsg(unsigned char * Msg, int iLen, char * Buffer, int BufferLen)
|
||||||
{
|
{
|
||||||
int Len = 0;
|
int Len = 0;
|
||||||
|
|
@ -943,7 +1026,7 @@ int decodeNETROMUIMsg(unsigned char * Msg, int iLen, char * Buffer, int BufferLe
|
||||||
|
|
||||||
Msg += 7; // to first field
|
Msg += 7; // to first field
|
||||||
|
|
||||||
Len = snprintf(Buffer, BufferLen, ", \"l3Type\": \"Routing info\", \"type\": \"NODES\", \"nodes\": [");
|
Len = snprintf(Buffer, BufferLen, ", \"l3Type\": \"Routing info\", \"type\": \"NODES\", \"fromAlias\": \"%s\", \"nodes\": [", Alias);
|
||||||
|
|
||||||
iLen -= 7; //Header, mnemonic and signature length
|
iLen -= 7; //Header, mnemonic and signature length
|
||||||
|
|
||||||
|
|
|
||||||
18
L4Code.c
18
L4Code.c
|
|
@ -73,6 +73,7 @@ void OutgoingL4ConnectionEvent(TRANSPORTENTRY * L4);
|
||||||
void IncomingL4ConnectionEvent(TRANSPORTENTRY * L4);
|
void IncomingL4ConnectionEvent(TRANSPORTENTRY * L4);
|
||||||
void L4DisconnectEvent(TRANSPORTENTRY * L4, char * Direction, char * Reason);
|
void L4DisconnectEvent(TRANSPORTENTRY * L4, char * Direction, char * Reason);
|
||||||
VOID TCPNETROMSend(struct ROUTE * Route, struct _L3MESSAGEBUFFER * Frame);
|
VOID TCPNETROMSend(struct ROUTE * Route, struct _L3MESSAGEBUFFER * Frame);
|
||||||
|
void L4StatusSeport(TRANSPORTENTRY * L4);
|
||||||
|
|
||||||
static UINT APPLMASK;
|
static UINT APPLMASK;
|
||||||
|
|
||||||
|
|
@ -89,6 +90,8 @@ extern int L2Compress;
|
||||||
extern int L2CompMaxframe;
|
extern int L2CompMaxframe;
|
||||||
extern int L2CompPaclen;
|
extern int L2CompPaclen;
|
||||||
|
|
||||||
|
int sessionStatusInterval = 300; // 5 mins
|
||||||
|
|
||||||
// L4 Flags Values
|
// L4 Flags Values
|
||||||
|
|
||||||
#define DISCPENDING 8 // SEND DISC WHEN ALL DATA ACK'ED
|
#define DISCPENDING 8 // SEND DISC WHEN ALL DATA ACK'ED
|
||||||
|
|
@ -1128,6 +1131,7 @@ VOID L4TimerProc()
|
||||||
TRANSPORTENTRY * L4 = L4TABLE;
|
TRANSPORTENTRY * L4 = L4TABLE;
|
||||||
TRANSPORTENTRY * Partner;
|
TRANSPORTENTRY * Partner;
|
||||||
int MaxLinks = MAXLINKS;
|
int MaxLinks = MAXLINKS;
|
||||||
|
time_t Now = time(NULL);
|
||||||
|
|
||||||
while (n--)
|
while (n--)
|
||||||
{
|
{
|
||||||
|
|
@ -1136,6 +1140,12 @@ VOID L4TimerProc()
|
||||||
L4++;
|
L4++;
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Check for Status report time
|
||||||
|
|
||||||
|
if (L4->lastStatusSentTime && (Now - L4->lastStatusSentTime) > sessionStatusInterval)
|
||||||
|
L4StatusSeport(L4);
|
||||||
|
|
||||||
|
|
||||||
// CHECK FOR L4BUSY SET AND NO LONGER BUSY
|
// CHECK FOR L4BUSY SET AND NO LONGER BUSY
|
||||||
|
|
||||||
|
|
@ -2261,6 +2271,14 @@ VOID FRAMEFORUS(struct _LINKTABLE * LINK, L3MESSAGEBUFFER * L3MSG, int ApplMask,
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// if connect to service don't send connected to node messsage as service will send own message
|
||||||
|
|
||||||
|
// if (L4->Service)
|
||||||
|
// {
|
||||||
|
// ReleaseBuffer(L3MSG);
|
||||||
|
// return;
|
||||||
|
// }
|
||||||
|
|
||||||
Msg = (PDATAMESSAGE)L3MSG; // reuse input buffer
|
Msg = (PDATAMESSAGE)L3MSG; // reuse input buffer
|
||||||
|
|
||||||
Msg->PID = 0xf0;
|
Msg->PID = 0xf0;
|
||||||
|
|
|
||||||
23
NETROMTCP.c
23
NETROMTCP.c
|
|
@ -59,6 +59,9 @@ BOOL FindNeighbour(UCHAR * Call, int Port, struct ROUTE ** REQROUTE);
|
||||||
VOID NETROMMSG(struct _LINKTABLE * LINK, L3MESSAGEBUFFER * L3MSG);
|
VOID NETROMMSG(struct _LINKTABLE * LINK, L3MESSAGEBUFFER * L3MSG);
|
||||||
int BPQTRACE(MESSAGE * Msg, BOOL TOAPRS);
|
int BPQTRACE(MESSAGE * Msg, BOOL TOAPRS);
|
||||||
VOID L3LINKCLOSED(struct _LINKTABLE * LINK, int Reason);
|
VOID L3LINKCLOSED(struct _LINKTABLE * LINK, int Reason);
|
||||||
|
void NetromTCPTrace(struct _MESSAGE * Message, char * Dirn);
|
||||||
|
|
||||||
|
extern SOCKET NodeAPISocket;
|
||||||
|
|
||||||
struct NRTCPMsg
|
struct NRTCPMsg
|
||||||
{
|
{
|
||||||
|
|
@ -210,8 +213,11 @@ int NETROMOpenConnection(struct ROUTE * Route)
|
||||||
{
|
{
|
||||||
struct NRTCPSTRUCT * Info;
|
struct NRTCPSTRUCT * Info;
|
||||||
struct ConnectionInfo * sockptr;
|
struct ConnectionInfo * sockptr;
|
||||||
|
char farCall[10];
|
||||||
|
|
||||||
Debugprintf("Opening NRTCP Connection");
|
farCall[ConvFromAX25(Route->NEIGHBOUR_CALL, farCall)] = 0;
|
||||||
|
|
||||||
|
Debugprintf("Opening NRTCP Connection to %s", farCall);
|
||||||
|
|
||||||
if (Route->TCPSession)
|
if (Route->TCPSession)
|
||||||
{
|
{
|
||||||
|
|
@ -232,7 +238,7 @@ int NETROMOpenConnection(struct ROUTE * Route)
|
||||||
return 0;
|
return 0;
|
||||||
|
|
||||||
Info = Route->TCPSession = NRTCPInfo[sockptr->Number];
|
Info = Route->TCPSession = NRTCPInfo[sockptr->Number];
|
||||||
memcpy(Info->Call, MYNETROMCALL, 10);
|
memcpy(Info->Call, farCall, 10);
|
||||||
Route->NEIGHBOUR_LINK = Info->LINK;
|
Route->NEIGHBOUR_LINK = Info->LINK;
|
||||||
|
|
||||||
Info->Route = Route;
|
Info->Route = Route;
|
||||||
|
|
@ -455,6 +461,7 @@ checkLen:
|
||||||
|
|
||||||
if (memcmp(Info->Call, Msg->Call, 10) != 0)
|
if (memcmp(Info->Call, Msg->Call, 10) != 0)
|
||||||
{
|
{
|
||||||
|
Debugprintf("Mismatch");
|
||||||
// something wrong - maybe connection reused
|
// something wrong - maybe connection reused
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -491,6 +498,10 @@ checkLen:
|
||||||
time(&Buffer->Timestamp);
|
time(&Buffer->Timestamp);
|
||||||
|
|
||||||
BPQTRACE(Buffer, FALSE);
|
BPQTRACE(Buffer, FALSE);
|
||||||
|
|
||||||
|
if(NodeAPISocket)
|
||||||
|
NetromTCPTrace(Buffer, "rcvd");
|
||||||
|
|
||||||
ReleaseBuffer(Buffer);
|
ReleaseBuffer(Buffer);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -535,7 +546,7 @@ VOID TCPNETROMSend(struct ROUTE * Route, struct _L3MESSAGEBUFFER * Frame)
|
||||||
{
|
{
|
||||||
Buffer->CHAIN = 0;
|
Buffer->CHAIN = 0;
|
||||||
Buffer->CTL = 0;
|
Buffer->CTL = 0;
|
||||||
Buffer->PORT = Route->NEIGHBOUR_PORT | 128; // TX Flag
|
Buffer->PORT = Route->NEIGHBOUR_PORT;
|
||||||
|
|
||||||
ConvToAX25(Route->TCPSession->Call, Buffer->DEST);
|
ConvToAX25(Route->TCPSession->Call, Buffer->DEST);
|
||||||
ConvToAX25(MYNETROMCALL, Buffer->ORIGIN);
|
ConvToAX25(MYNETROMCALL, Buffer->ORIGIN);
|
||||||
|
|
@ -546,7 +557,13 @@ VOID TCPNETROMSend(struct ROUTE * Route, struct _L3MESSAGEBUFFER * Frame)
|
||||||
Buffer->LENGTH = DataLen + 15 + MSGHDDRLEN;
|
Buffer->LENGTH = DataLen + 15 + MSGHDDRLEN;
|
||||||
time(&Buffer->Timestamp);
|
time(&Buffer->Timestamp);
|
||||||
|
|
||||||
|
if(NodeAPISocket)
|
||||||
|
NetromTCPTrace(Buffer, "sent");
|
||||||
|
|
||||||
|
Buffer->PORT = Route->NEIGHBOUR_PORT | 128; // TX Flag
|
||||||
BPQTRACE(Buffer, FALSE);
|
BPQTRACE(Buffer, FALSE);
|
||||||
|
|
||||||
|
|
||||||
ReleaseBuffer(Buffer);
|
ReleaseBuffer(Buffer);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -10,8 +10,8 @@
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#define KVers 6,0,25,9
|
#define KVers 6,0,25,11
|
||||||
#define KVerstring "6.0.25.9\0"
|
#define KVerstring "6.0.25.11\0"
|
||||||
|
|
||||||
|
|
||||||
#ifdef CKernel
|
#ifdef CKernel
|
||||||
|
|
|
||||||
|
|
@ -184,7 +184,13 @@ typedef struct _TRANSPORTENTRY
|
||||||
int NRRID;
|
int NRRID;
|
||||||
time_t NRRTime;
|
time_t NRRTime;
|
||||||
|
|
||||||
|
time_t ConnectTime;
|
||||||
|
char Direction[16]; // In or Out
|
||||||
|
|
||||||
int Service; // For Paula's Connnect to Service
|
int Service; // For Paula's Connnect to Service
|
||||||
|
int apiSeq; // for OARC event reporting
|
||||||
|
time_t lastStatusSentTime;
|
||||||
|
|
||||||
|
|
||||||
} TRANSPORTENTRY;
|
} TRANSPORTENTRY;
|
||||||
|
|
||||||
|
|
@ -737,6 +743,7 @@ typedef struct PORTCONTROL
|
||||||
UCHAR * BUSY; // % Active (Normally DCD active or TX)
|
UCHAR * BUSY; // % Active (Normally DCD active or TX)
|
||||||
|
|
||||||
int Hardware; // TNC H_TYPE. Copied here for access from application context
|
int Hardware; // TNC H_TYPE. Copied here for access from application context
|
||||||
|
int isRF; // For API reporting. -1 is unspecified
|
||||||
|
|
||||||
|
|
||||||
} PORTCONTROLX, *PPORTCONTROL;
|
} PORTCONTROLX, *PPORTCONTROL;
|
||||||
|
|
@ -1004,6 +1011,7 @@ typedef struct _LINKTABLE
|
||||||
|
|
||||||
char ApplName[16];
|
char ApplName[16];
|
||||||
time_t lastStatusSentTime;
|
time_t lastStatusSentTime;
|
||||||
|
int apiSeq; // for OARC event reporting
|
||||||
|
|
||||||
} LINKTABLE;
|
} LINKTABLE;
|
||||||
|
|
||||||
|
|
|
||||||
66
cMain.c
66
cMain.c
|
|
@ -38,6 +38,7 @@ along with LinBPQ/BPQ32. If not, see http://www.gnu.org/licenses
|
||||||
#include "cheaders.h"
|
#include "cheaders.h"
|
||||||
#include "tncinfo.h"
|
#include "tncinfo.h"
|
||||||
#include "mqtt.h"
|
#include "mqtt.h"
|
||||||
|
#include "kiss.h"
|
||||||
|
|
||||||
VOID L2Routine(struct PORTCONTROL * PORT, PMESSAGE Buffer);
|
VOID L2Routine(struct PORTCONTROL * PORT, PMESSAGE Buffer);
|
||||||
VOID ProcessIframe(struct _LINKTABLE * LINK, PDATAMESSAGE Buffer);
|
VOID ProcessIframe(struct _LINKTABLE * LINK, PDATAMESSAGE Buffer);
|
||||||
|
|
@ -1017,6 +1018,7 @@ BOOL Start()
|
||||||
PORT->INP3ONLY = PortRec->INP3ONLY;
|
PORT->INP3ONLY = PortRec->INP3ONLY;
|
||||||
PORT->ALLOWINP3 = PortRec->AllowINP3;
|
PORT->ALLOWINP3 = PortRec->AllowINP3;
|
||||||
PORT->ENABLEINP3 = PortRec->EnableINP3;
|
PORT->ENABLEINP3 = PortRec->EnableINP3;
|
||||||
|
PORT->isRF = PortRec->isRF;
|
||||||
|
|
||||||
PORT->PORTWINDOW = (UCHAR)PortRec->MAXFRAME;
|
PORT->PORTWINDOW = (UCHAR)PortRec->MAXFRAME;
|
||||||
|
|
||||||
|
|
@ -2768,6 +2770,7 @@ VOID INITIALISEPORTS()
|
||||||
{
|
{
|
||||||
char INITMSG[80];
|
char INITMSG[80];
|
||||||
struct PORTCONTROL * PORT = PORTTABLE;
|
struct PORTCONTROL * PORT = PORTTABLE;
|
||||||
|
struct PORTCONTROL * SAVEPORT;
|
||||||
|
|
||||||
while (PORT)
|
while (PORT)
|
||||||
{
|
{
|
||||||
|
|
@ -2775,7 +2778,68 @@ VOID INITIALISEPORTS()
|
||||||
WritetoConsoleLocal(INITMSG);
|
WritetoConsoleLocal(INITMSG);
|
||||||
|
|
||||||
PORT->PORTINITCODE(PORT);
|
PORT->PORTINITCODE(PORT);
|
||||||
PORT = PORT->PORTPOINTER;
|
SAVEPORT=PORT;
|
||||||
|
|
||||||
|
// See if it is an RF port
|
||||||
|
|
||||||
|
if (PORT->isRF == -1) // Not set
|
||||||
|
{
|
||||||
|
// Try to determine if RF
|
||||||
|
|
||||||
|
if (PORT->PORTTYPE == 0)
|
||||||
|
{
|
||||||
|
struct KISSINFO * KISS = (struct KISSINFO *)PORT;
|
||||||
|
NPASYINFO Port;
|
||||||
|
|
||||||
|
if (KISS->FIRSTPORT && KISS->FIRSTPORT != KISS)
|
||||||
|
{
|
||||||
|
// Not first port on device
|
||||||
|
|
||||||
|
PORT = (struct PORTCONTROL *)KISS->FIRSTPORT;
|
||||||
|
}
|
||||||
|
|
||||||
|
Port = KISSInfo[PORT->PORTNUMBER];
|
||||||
|
|
||||||
|
if (Port)
|
||||||
|
{
|
||||||
|
// KISS like
|
||||||
|
|
||||||
|
if (PORT->PORTIPADDR.s_addr || PORT->KISSSLAVE)
|
||||||
|
{
|
||||||
|
// KISS over UDP or TCP
|
||||||
|
|
||||||
|
if (PORT->KISSTCP)
|
||||||
|
PORT->isRF = 1; // Assume TCP is RF (software modem)
|
||||||
|
else
|
||||||
|
PORT->isRF = 0; // Assuem UDP is Internet
|
||||||
|
}
|
||||||
|
else
|
||||||
|
PORT->isRF = 1; // Serial port
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else if (PORT->PORTTYPE == 14) // Loopback
|
||||||
|
PORT->isRF = 0;
|
||||||
|
|
||||||
|
else if (PORT->PORTTYPE == 16) // External
|
||||||
|
{
|
||||||
|
if (PORT->PROTOCOL == 10) // 'HF' Port
|
||||||
|
{
|
||||||
|
struct TNCINFO * TNC = TNCInfo[PORT->PORTNUMBER];
|
||||||
|
|
||||||
|
if (TNC && TNC->Hardware == H_TELNET)
|
||||||
|
PORT->isRF = 0;
|
||||||
|
else
|
||||||
|
PORT->isRF = 1; // ARDOP etc
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
// External but not HF - AXIP, BPQETHER VKISS, ??
|
||||||
|
|
||||||
|
PORT->isRF = 0;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
PORT = SAVEPORT->PORTPOINTER;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
10
config.c
10
config.c
|
|
@ -379,7 +379,8 @@ static char *pkeywords[] =
|
||||||
"BCALL", "DIGIMASK", "NOKEEPALIVES", "COMPORT", "DRIVER", "WL2KREPORT", "UIONLY",
|
"BCALL", "DIGIMASK", "NOKEEPALIVES", "COMPORT", "DRIVER", "WL2KREPORT", "UIONLY",
|
||||||
"UDPPORT", "IPADDR", "I2CBUS", "I2CDEVICE", "UDPTXPORT", "UDPRXPORT", "NONORMALIZE",
|
"UDPPORT", "IPADDR", "I2CBUS", "I2CDEVICE", "UDPTXPORT", "UDPRXPORT", "NONORMALIZE",
|
||||||
"IGNOREUNLOCKEDROUTES", "INP3ONLY", "TCPPORT", "RIGPORT", "PERMITTEDAPPLS", "HIDE",
|
"IGNOREUNLOCKEDROUTES", "INP3ONLY", "TCPPORT", "RIGPORT", "PERMITTEDAPPLS", "HIDE",
|
||||||
"SMARTID", "KISSCOMMAND", "SendtoM0LTEMap", "PortFreq", "M0LTEMapInfo", "QTSMPort", "ALLOWINP3", "ENABLEINP3"}; /* parameter keywords */
|
"SMARTID", "KISSCOMMAND", "SendtoM0LTEMap", "PortFreq", "M0LTEMapInfo", "QTSMPort",
|
||||||
|
"ALLOWINP3", "ENABLEINP3", "isRF"}; /* parameter keywords */
|
||||||
|
|
||||||
static void * poffset[] =
|
static void * poffset[] =
|
||||||
{
|
{
|
||||||
|
|
@ -393,7 +394,8 @@ static void * poffset[] =
|
||||||
&xxp.BCALL, &xxp.DIGIMASK, &xxp.DefaultNoKeepAlives, &xxp.IOADDR, &xxp.DLLNAME, &xxp.WL2K, &xxp.UIONLY,
|
&xxp.BCALL, &xxp.DIGIMASK, &xxp.DefaultNoKeepAlives, &xxp.IOADDR, &xxp.DLLNAME, &xxp.WL2K, &xxp.UIONLY,
|
||||||
&xxp.IOADDR, &xxp.IPADDR, &xxp.INTLEVEL, &xxp.IOADDR, &xxp.IOADDR, &xxp.ListenPort, &xxp.NoNormalize,
|
&xxp.IOADDR, &xxp.IPADDR, &xxp.INTLEVEL, &xxp.IOADDR, &xxp.IOADDR, &xxp.ListenPort, &xxp.NoNormalize,
|
||||||
&xxp.IGNOREUNLOCKED, &xxp.INP3ONLY, &xxp.TCPPORT, &xxp.RIGPORT, &xxp.PERMITTEDAPPLS, &xxp.Hide,
|
&xxp.IGNOREUNLOCKED, &xxp.INP3ONLY, &xxp.TCPPORT, &xxp.RIGPORT, &xxp.PERMITTEDAPPLS, &xxp.Hide,
|
||||||
&xxp.SmartID, &xxp.KissParams, &xxp.SendtoM0LTEMap, &xxp.PortFreq, &xxp.M0LTEMapInfo, &xxp.QtSMPort, &xxp.AllowINP3, &xxp.EnableINP3}; /* offset for corresponding data in config file */
|
&xxp.SmartID, &xxp.KissParams, &xxp.SendtoM0LTEMap, &xxp.PortFreq, &xxp.M0LTEMapInfo, &xxp.QtSMPort,
|
||||||
|
&xxp.AllowINP3, &xxp.EnableINP3, &xxp.isRF}; /* offset for corresponding data in config file */
|
||||||
|
|
||||||
static int proutine[] =
|
static int proutine[] =
|
||||||
{
|
{
|
||||||
|
|
@ -407,7 +409,8 @@ static int proutine[] =
|
||||||
0, 1, 2, 18, 15, 16, 2,
|
0, 1, 2, 18, 15, 16, 2,
|
||||||
1, 17, 1, 1, 1, 1, 2,
|
1, 17, 1, 1, 1, 1, 2,
|
||||||
2, 2, 1, 1, 19, 2,
|
2, 2, 1, 1, 19, 2,
|
||||||
1, 20, 1, 21, 22, 1, 1, 1}; /* routine to process parameter */
|
1, 20, 1, 21, 22, 1,
|
||||||
|
1, 1, 1}; /* routine to process parameter */
|
||||||
|
|
||||||
int PPARAMLIM = sizeof(proutine)/sizeof(int);
|
int PPARAMLIM = sizeof(proutine)/sizeof(int);
|
||||||
|
|
||||||
|
|
@ -1820,6 +1823,7 @@ int ports(int i)
|
||||||
}
|
}
|
||||||
|
|
||||||
xxp.SendtoM0LTEMap = 1; // Default to enabled
|
xxp.SendtoM0LTEMap = 1; // Default to enabled
|
||||||
|
xxp.isRF = -1; // Default to undefined
|
||||||
|
|
||||||
while (endport == 0 && !feof(fp1))
|
while (endport == 0 && !feof(fp1))
|
||||||
{
|
{
|
||||||
|
|
|
||||||
|
|
@ -83,6 +83,7 @@ struct PORTCONFIG
|
||||||
int QtSMPort;
|
int QtSMPort;
|
||||||
int AllowINP3;
|
int AllowINP3;
|
||||||
int EnableINP3;
|
int EnableINP3;
|
||||||
|
short isRF;
|
||||||
};
|
};
|
||||||
|
|
||||||
struct ROUTECONFIG
|
struct ROUTECONFIG
|
||||||
|
|
|
||||||
Loading…
Reference in a new issue