ke6jjj / ka9q-unix Goto Github PK
View Code? Open in Web Editor NEWPort of the KA9Q Network Operating System (NOS) to modern BSD Unix as a user process.
Port of the KA9Q Network Operating System (NOS) to modern BSD Unix as a user process.
XKISS is a protocol enhancement to TNCs which provides, among other things, notifications when packets have actually been transmitted over the air. This notification feature can be useful for improving the throughput and behavior of the station on the network.
This is a placeholder task for such a feature.
T3 should be started during idle periods to periodically poll the other side is there. However it isn't running.
Go figure out why and fix it.
(ax25 status dumps the timer state...)
Right now various BBS nodes on 145.090 are beaconing out INFO, ID, BEACON frames. It would be nice to cache these (and maybe NODES too?) locally so it's easy to dump out the current immediately visible ax25 network state.
This needs a few tweaks to compile/run on linux:
The ka9q (and n0ary-bbs) stack handles back to back RR and REJ's very poorly.
Notably, RNR/REJ can cause inv_rex() to be called, clearing axp->unack, and thus queuing a new set of transmit attempts. If the sender sends a bunch of RR/RNR/REJ's in a burst in response to sent traffic (eg if there's no T2 timer support, or it's too short, or it's broken!) then this results in the stack making some pretty poor decisions about what to send and when.
So, whilst I'm adding T2 support for data/control paths to KA9Q, it may be interesting to track when a full burst was sent and not re-trigger it until T1 expires and/or we receive an S/I frame with an updated sequence number. That way even if T2 expires and we're ready to send some more data, we won't be sending another packet burst if we've already /sent/ a packet burst.
right now a bunch of ax25 configuration parameters are global rather than per interface. This has the unfun side effect of making it less interesting to run a single ka9q instance with multiple TNCs spanning 1200 VHF, 9600 baud UHF and 300 baud HF.
The easiest way to address this would be to move a bunch of configuration to be per interface and configured using ifconfig. it means ifconfig will need to grow some per-linklevel state that gets copied over into the ax25 control block upon creating a connection but i think it's doable.
The ax25 UI socket handling is broken - notably there's only a single UI socket - Axui_sock - used for listening for AX25 ui frames.
The problem is that it's a special case with a special queue (Bcq) with special cases for being woken up (via ksignal). The normal close path (kshutdown, close_s in sock.c) doesn't see this as a "connected" socket, so it doesn't /actually/ close the socket properly and it doesn't signal the owner that it should unblock and start failing things.
Here's a fun one.
If maxframes is set to 8, retransmission bursts that SHOULD have been ACKed are .. not treated as ACKed.
Here's an example.
N0ARY-1 audio level = 99(56/40) [NONE] _||||||__
[0.3] N0ARY-1>KK6VQK-1:(RR res, n(r)=3, f=0)
[0L] KK6VQK-1>N0ARY-1:(I cmd, n(s)=3, n(r)=0, p=0, pid=0xf0) 3:So, to answer in reverse order. <0x0d>
[0L] KK6VQK-1>N0ARY-1:(I cmd, n(s)=4, n(r)=0, p=0, pid=0xf0) 4: <0x0d>
[0L] KK6VQK-1>N0ARY-1:(I cmd, n(s)=5, n(r)=0, p=0, pid=0xf0) 5:The sysop these days is KE6JJJ. I've been working with him on trying to <0x0d>
[0L] KK6VQK-1>N0ARY-1:(I cmd, n(s)=6, n(r)=0, p=0, pid=0xf0) 6:improve the AX.25 stack in both the n0ary-bbs TNC (which is the AX.25 <0x0d>
[0L] KK6VQK-1>N0ARY-1:(I cmd, n(s)=7, n(r)=0, p=0, pid=0xf0) 7:stack from an older copy of KA9Q) and the more recent (for values of <0x0d>
[0L] KK6VQK-1>N0ARY-1:(I cmd, n(s)=0, n(r)=0, p=0, pid=0xf0) 8:"recent" !) KA9Q stack Jeremy ported to *NIX. <0x0d>
[0L] KK6VQK-1>N0ARY-1:(I cmd, n(s)=1, n(r)=0, p=0, pid=0xf0) 9: <0x0d>
[0L] KK6VQK-1>N0ARY-1:(I cmd, n(s)=2, n(r)=0, p=0, pid=0xf0)10:The TL;DR is this: /abort<0x0d>
N0ARY-1 audio level = 100(59/39) [NONE] _|||||||_
[0.4] N0ARY-1>KK6VQK-1:(RR res, n(r)=3, f=0)
[0L] KK6VQK-1>N0ARY-1:(RR cmd, n(r)=0, p=1)
N0ARY-1 audio level = 99(55/40) [NONE] _|||||||_
[0.4] N0ARY-1>KK6VQK-1:(RR res, n(r)=3, f=1)
[0L] KK6VQK-1>N0ARY-1:(I cmd, n(s)=3, n(r)=0, p=0, pid=0xf0) 3:So, to answer in reverse order. <0x0d>
[0L] KK6VQK-1>N0ARY-1:(I cmd, n(s)=4, n(r)=0, p=0, pid=0xf0) 4: <0x0d>
[0L] KK6VQK-1>N0ARY-1:(I cmd, n(s)=5, n(r)=0, p=0, pid=0xf0) 5:The sysop these days is KE6JJJ. I've been working with him on trying to <0x0d>
[0L] KK6VQK-1>N0ARY-1:(I cmd, n(s)=6, n(r)=0, p=0, pid=0xf0) 6:improve the AX.25 stack in both the n0ary-bbs TNC (which is the AX.25 <0x0d>
[0L] KK6VQK-1>N0ARY-1:(I cmd, n(s)=7, n(r)=0, p=0, pid=0xf0) 7:stack from an older copy of KA9Q) and the more recent (for values of <0x0d>
[0L] KK6VQK-1>N0ARY-1:(I cmd, n(s)=0, n(r)=0, p=0, pid=0xf0) 8:"recent" !) KA9Q stack Jeremy ported to *NIX. <0x0d>
[0L] KK6VQK-1>N0ARY-1:(I cmd, n(s)=1, n(r)=0, p=0, pid=0xf0) 9: <0x0d>
[0L] KK6VQK-1>N0ARY-1:(I cmd, n(s)=2, n(r)=0, p=0, pid=0xf0)10:The TL;DR is this: /abort<0x0d>
N0ARY-1 audio level = 99(56/41) [NONE] _|||||||_
[0.4] N0ARY-1>KK6VQK-1:(RR res, n(r)=3, f=0)
[0L] KK6VQK-1>N0ARY-1:(RR cmd, n(r)=0, p=1)
This happens a number of times, until:
[0L] KK6VQK-1>N0ARY-1:(I cmd, n(s)=3, n(r)=0, p=0, pid=0xf0) 3:So, to answer in reverse order. <0x0d>
[0L] KK6VQK-1>N0ARY-1:(I cmd, n(s)=4, n(r)=0, p=0, pid=0xf0) 4: <0x0d>
[0L] KK6VQK-1>N0ARY-1:(I cmd, n(s)=5, n(r)=0, p=0, pid=0xf0) 5:The sysop these days is KE6JJJ. I've been working with him on trying to <0x0d>
Q[0L] KK6VQK-1>N0ARY-1:(I cmd, n(s)=6, n(r)=0, p=0, pid=0xf0) 6:improve the AX.25 stack in both the n0ary-bbs TNC (which is the AX.25 <0x0d>
Q[0L] KK6VQK-1>N0ARY-1:(I cmd, n(s)=7, n(r)=0, p=0, pid=0xf0) 7:stack from an older copy of KA9Q) and the more recent (for values of <0x0d>
[0L] KK6VQK-1>N0ARY-1:(I cmd, n(s)=0, n(r)=0, p=0, pid=0xf0) 8:"recent" !) KA9Q stack Jeremy ported to *NIX. <0x0d>
[0L] KK6VQK-1>N0ARY-1:(I cmd, n(s)=1, n(r)=0, p=0, pid=0xf0) 9: <0x0d>
[0L] KK6VQK-1>N0ARY-1:(I cmd, n(s)=2, n(r)=0, p=0, pid=0xf0)10:The TL;DR is this: /abort<0x0d>
N0ARY-1 audio level = 99(56/41) [NONE] _|||||||_
[0.4] N0ARY-1>KK6VQK-1:(RR res, n(r)=3, f=0)
[0L] KK6VQK-1>N0ARY-1:(RR cmd, n(r)=0, p=1)
N0ARY-1 audio level = 99(55/40) [NONE] _||||||__
[0.3] N0ARY-1>KK6VQK-1:(RR res, n(r)=3, f=1)
[0L] KK6VQK-1>N0ARY-1:(I cmd, n(s)=3, n(r)=0, p=0, pid=0xf0) 3:So, to answer in reverse order. <0x0d>
[0L] KK6VQK-1>N0ARY-1:(I cmd, n(s)=4, n(r)=0, p=0, pid=0xf0) 4: <0x0d>
[0L] KK6VQK-1>N0ARY-1:(I cmd, n(s)=5, n(r)=0, p=0, pid=0xf0) 5:The sysop these days is KE6JJJ. I've been working with him on trying to <0x0d>
[0L] KK6VQK-1>N0ARY-1:(I cmd, n(s)=6, n(r)=0, p=0, pid=0xf0) 6:improve the AX.25 stack in both the n0ary-bbs TNC (which is the AX.25 <0x0d>
[0L] KK6VQK-1>N0ARY-1:(I cmd, n(s)=7, n(r)=0, p=0, pid=0xf0) 7:stack from an older copy of KA9Q) and the more recent (for values of <0x0d>
[0L] KK6VQK-1>N0ARY-1:(I cmd, n(s)=0, n(r)=0, p=0, pid=0xf0) 8:"recent" !) KA9Q stack Jeremy ported to *NIX. <0x0d>
[0L] KK6VQK-1>N0ARY-1:(I cmd, n(s)=1, n(r)=0, p=0, pid=0xf0) 9: <0x0d>
[0L] KK6VQK-1>N0ARY-1:(I cmd, n(s)=2, n(r)=0, p=0, pid=0xf0)10:The TL;DR is this: /abort<0x0d>
N0ARY-1 audio level = 99(55/40) [NONE] _||||||||
[0.4] N0ARY-1>KK6VQK-1:(RR res, n(r)=1, f=0)
[0L] KK6VQK-1>N0ARY-1:(I cmd, n(s)=3, n(r)=0, p=0, pid=0xf0)/abort<0x0d>
N0ARY-1 audio level = 99(55/40) [NONE] _|||||||_
[0.4] N0ARY-1>KK6VQK-1:(REJ res, n(r)=1, f=0)
[0L] KK6VQK-1>N0ARY-1:(I cmd, n(s)=1, n(r)=0, p=0, pid=0xf0) 9: <0x0d>
[0L] KK6VQK-1>N0ARY-1:(I cmd, n(s)=2, n(r)=0, p=0, pid=0xf0)10:The TL;DR is this: /abort<0x0d>
[0L] KK6VQK-1>N0ARY-1:(I cmd, n(s)=3, n(r)=0, p=0, pid=0xf0)/abort<0x0d>
N0ARY-1 audio level = 99(54/40) [NONE] _||||||__
[0.3] N0ARY-1>KK6VQK-1:(I cmd, n(s)=0, n(r)=4, p=0, pid=0xf0)!! Aborting message, not sent.<0x0d><0x0d>(Type HELP A for menu of A commands, etc.)<0x0d>9) KK6VQK de N0ARY [77154]><0x0d>
[0L] KK6VQK-1>N0ARY-1:(RR res, n(r)=1, f=0)
[0L] KK6VQK-1>N0ARY-1:(RR cmd, n(r)=1, p=1)
N0ARY-1 audio level = 99(57/40) [NONE] _||||||||
[0.4] N0ARY-1>KK6VQK-1:(RR res, n(r)=4, f=1)
.. it's possible somewhere the ACK'ing logic for sequence numbers is wrong.. need to go digging.
For now I'll set maxframes locally to 7 instead of 8 so I can get data out!
When a session disconnects via the remote end sending a disconnect/eof, the telnet process used as part of ax25 connect will correctly close a session.
However if it's aborted locally the session socket gets closed down, but the session itself doesn't go away.
Here's what I see in the console.
net> ps
Uptime 0:00:00:22
ksigs 730 queued 511 hiwat 1 woken 637 nops 93 dups 0
kwaits 1328 nops 597 from int 0
PID stksize event fl in out name
0x800eab640 32768 0x293d30 IW keyboard
0x800eab3c0 32768 0x29333c IW timer
0x800eabc80 32768 0x8010c5120 IW connect
0x80189a140 32768 0x8010c5040 IW tel_out
0x800eab500 32768 0x291028 IW network
0x800eab780 32768 0x28ec98 IW encap tx
0x800eaba00 32768 0x292028 IW tnc0 asytx
0x800eab280 32768 0x293cd0 IW killer
0x800eab8c0 32768 0x291f88 IW tnc0 rx
0x800eab140 32768 0x800782380 IW display
0x800eabb40 32768 0x8007ff250 IW tnc0 tx
0x800eab000 0 0x0 I cmdintrp
net> session
# S# Snd-Q State Remote socket Command
1 8192 0 Connected N0ARY-1 on tnc0 connect tnc0 N0ARY-1
net> session 1
net> session
# S# Snd-Q State Remote socket Command
net> close
net> connect tnc0 N0ARY-1
net> close 1
net> session
# S# Snd-Q State Remote socket Command
1 8192 0 Disc pend N0ARY-1 on tnc0 connect tnc0 N0ARY-1
net> session
# S# Snd-Q State Remote socket Command
1 8192 0 Disc pend N0ARY-1 on tnc0 connect tnc0 N0ARY-1
net> session
# S# Snd-Q State Remote socket Command
1 8192 0 Disc pend N0ARY-1 on tnc0 connect tnc0 N0ARY-1
net> session
# S# Snd-Q State Remote socket Command
1 -1 0 connect tnc0 N0ARY-1
net> session
# S# Snd-Q State Remote socket Command
1 -1 0 connect tnc0 N0ARY-1
net> session
# S# Snd-Q State Remote socket Command
1 -1 0 connect tnc0 N0ARY-1
net> session
# S# Snd-Q State Remote socket Command
1 -1 0 connect tnc0 N0ARY-1
net> session
# S# Snd-Q State Remote socket Command
1 -1 0 connect tnc0 N0ARY-1
net>
net> ps
Uptime 0:00:02:39
ksigs 3983 queued 3261 hiwat 1 woken 3699 nops 284 dups 0
kwaits 7941 nops 3867 from int 0
PID stksize event fl in out name
0x800eab640 32768 0x293d30 IW keyboard
0x800eab3c0 32768 0x29333c IW timer
0x800eab500 32768 0x291028 IW network
0x800eabdc0 32768 0x8010c5040 IW connect
0x800eab780 32768 0x28ec98 IW encap tx
0x800eaba00 32768 0x292028 IW tnc0 asytx
0x800eab280 32768 0x293cd0 IW killer
0x800eab8c0 32768 0x291f88 IW tnc0 rx
0x800eab140 32768 0x800782380 IW display
0x800eabb40 32768 0x8007ff250 IW tnc0 tx
0x800eab000 0 0x0 I cmdintrp
net>
Ok, I was able to get KA9Q running in DOS with all the important stuff running. Came back here to see if I could do the same with the KA9Q for UNIX. I am able to login with the loopback only here in UNIX. With DOS, I can get the ethernet (FTP resident driver) to talk to my LAN and do FTP/TELNET. I was also able to get it to talk to my TNC over serial/KISS. With the UNIX code again I only have loopback. I tried reading the source in the unix folder, but alas I am not much of a programmer beyond stuff I do for physics algorithms. So I am not sure if there is some sort of tun/tap or the ability to talk to world via a UNIX socket. So some very minimal bootstrap doc would be super helpful. I have the rest of the DOS documents for this package.
I also built Phil's source here in gethub with IN DOS with a Borland C compiler. It functions exactly the same as the version here.
I ended up using an older version because Phil's latest seems to be missing the connection between the "attach asy" driver and the ax.25 stack. In the older version, I initiate the KISS/AX.25 radio port by doing:
DOS: attach asy 0x3f8 4 ax25 tnc0 2048 9600
UNIX: attach asy /dev/cuau0 ax25 tnc0 2048 9600
In Phil's Github version (and your fork of that source I presume), I get the error:
Mode ax25 unknown for interface tnc0,
but I can replace the ax25 with "slip" and I takes it with no error. This leads believe I could setup some sort of slip link with the outside world. However, I am thinking your folks already have other options for connectivity.
I would love to play with this some more.
-Chris KQ6UP
the following sequence of packets seems like a popular one when watching BBS traffic, and it leads to some pretty bad behaviour.
[0L] KK6VQK-1>N0ARY-1:(I cmd, n(s)=6, n(r)=4, p=0, pid=0xf0)read 77196 noprompt<0x0d>
N0ARY-1 audio level = 100(59/41) [NONE] _||||||||
[0.4] N0ARY-1>KK6VQK-1:(I cmd, n(s)=4, n(r)=7, p=0, pid=0xf0)=============================================================<0x0d>
N0ARY-1 audio level = 100(55/41) [NONE] _||||||||
[0.4] N0ARY-1>KK6VQK-1:(I cmd, n(s)=5, n(r)=7, p=0, pid=0xf0) Date: 25 Sep 2019 13:40<0x0d> Message #: 77196<0x0d> BID: <14795_CX2SA><0x0d>
N0ARY-1 audio level = 100(55/42) [NONE] _||||||||
[0.4] N0ARY-1>KK6VQK-1:(I cmd, n(s)=6, n(r)=7, p=0, pid=0xf0) From: CX2SA@CX2SA<0x0d> To: EQUAKE@WW<0x0d> Subject: (M5.2) southern Mid-Atlantic Ridge -40.7 -16.7<0x0d>
N0ARY-1 audio level = 100(59/40) [NONE] _||||||||
[0.4] N0ARY-1>KK6VQK-1:(I cmd, n(s)=7, n(r)=7, p=0, pid=0xf0)<0x0d>N6RME!I0OJJ!GB7CIP!N3HYM!CX2SA<0x0d>-------------------------------------------------------------<0x0d>
N0ARY-1 audio level = 100(57/41) [NONE] _||||||||
[0.4] N0ARY-1>KK6VQK-1:(I cmd, n(s)=0, n(r)=7, p=0, pid=0xf0)<0x0d>From: [email protected]<0x0d>To : EQUAKE@WW<0x0d><0x0d> == PRELIMINARY REPORT ==<0x0d>
N0ARY-1 audio level = 100(59/39) [NONE] _||||||||
[0.4] N0ARY-1>KK6VQK-1:(I cmd, n(s)=1, n(r)=7, p=0, pid=0xf0)Event type: Earthquake <0x0d>Region: southern Mid-Atlantic Ridge<0x0d>
N0ARY-1 audio level = 99(54/42) [NONE] _||||||||
[0.4] N0ARY-1>KK6VQK-1:(I cmd, n(s)=2, n(r)=7, p=0, pid=0xf0)Geographic coordinates: 40.679S, 16.745W<0x0d>
N0ARY-1 audio level = 99(57/42) [NONE] _|||||||_
[0.4] N0ARY-1>KK6VQK-1:(I cmd, n(s)=4, n(r)=7, p=1, pid=0xf0)=============================================================<0x0d>
[0L] KK6VQK-1>N0ARY-1:(RR res, n(r)=3, f=0)
[0L] KK6VQK-1>N0ARY-1:(REJ res, n(r)=3, f=1)
Now, note it sent a 7 packet burst (which is good!) and then it sent the I frame with the first sequence number in the burst again.
I sent a RR n(r)=3 to ACK everything up to 2 (which is good) but then since I got a frame with a seqno of 4, I assumed that I hit a sequence number issue and sent a REJ (which is bad.) It then gets stuck in its retransmission loop because it thinks the ACK means "send more data", but the REJ causes it to also send more data, so it double sends a whole lot of the same crap:
N0ARY-1 audio level = 100(58/41) [NONE] _||||||||
[0.4] N0ARY-1>KK6VQK-1:(I cmd, n(s)=3, n(r)=7, p=0, pid=0xf0)Magnitude: 5.2<0x0d>Depth: 10 km<0x0d>
N0ARY-1 audio level = 100(59/41) [NONE] _||||||||
[0.4] N0ARY-1>KK6VQK-1:(I cmd, n(s)=4, n(r)=7, p=0, pid=0xf0)Universal Time (UTC): 25 Sep 2019 20:15:54<0x0d>
N0ARY-1 audio level = 100(58/41) [NONE] _||||||||
[0.4] N0ARY-1>KK6VQK-1:(I cmd, n(s)=5, n(r)=7, p=0, pid=0xf0)Time near the Epicenter: 25 Sep 2019 19:15:54<0x0d>
N0ARY-1 audio level = 100(53/42) [NONE] _||||||||
[0.4] N0ARY-1>KK6VQK-1:(I cmd, n(s)=6, n(r)=7, p=0, pid=0xf0)<0x0d>Location with respect to nearby cities:<0x0d>555.5 km (344.4 mi) SW of Edinburgh of the Seven Seas, Saint Helena<0x0d>
N0ARY-1 audio level = 100(60/40) [NONE] _||||||||
[0.4] N0ARY-1>KK6VQK-1:(I cmd, n(s)=7, n(r)=7, p=0, pid=0xf0)3076.0 km (1907.1 mi) ESE of Arraial do Cabo, Brazil<0x0d>
N0ARY-1 audio level = 99(54/42) [NONE] _||||||||
[0.4] N0ARY-1>KK6VQK-1:(I cmd, n(s)=0, n(r)=7, p=0, pid=0xf0)3082.2 km (1911.0 mi) ESE of Cabo Frio, Brazil<0x0d>3083.0 km (1911.5 mi) ESE of Arma<0xef><0xbf><0xbd><0xef><0xbf><0xbd>o de B<0xef><0xbf><0xbd>zios, Brazil<0x0d>
N0ARY-1 audio level = 100(60/41) [NONE] _||||||||
[0.4] N0ARY-1>KK6VQK-1:(I cmd, n(s)=1, n(r)=7, p=0, pid=0xf0)3091.5 km (1916.7 mi) ESE of S<0xef><0xbf><0xbd>o Pedro da Aldeia, Brazil<0x0d>
N0ARY-1 audio level = 100(59/41) [NONE] _||||||||
[0.4] N0ARY-1>KK6VQK-1:(I cmd, n(s)=3, n(r)=7, p=0, pid=0xf0)Magnitude: 5.2<0x0d>Depth: 10 km<0x0d>
N0ARY-1 audio level = 99(57/41) [NONE] _||||||||
[0.4] N0ARY-1>KK6VQK-1:(I cmd, n(s)=4, n(r)=7, p=0, pid=0xf0)Universal Time (UTC): 25 Sep 2019 20:15:54<0x0d>
N0ARY-1 audio level = 100(59/41) [NONE] _||||||||
[0.4] N0ARY-1>KK6VQK-1:(I cmd, n(s)=5, n(r)=7, p=0, pid=0xf0)Time near the Epicenter: 25 Sep 2019 19:15:54<0x0d>
N0ARY-1 audio level = 100(59/39) [NONE] _||||||||
[0.4] N0ARY-1>KK6VQK-1:(I cmd, n(s)=6, n(r)=7, p=0, pid=0xf0)<0x0d>Location with respect to nearby cities:<0x0d>555.5 km (344.4 mi) SW of Edinburgh of the Seven Seas, Saint Helena<0x0d>
N0ARY-1 audio level = 99(56/42) [NONE] _||||||||
[0.4] N0ARY-1>KK6VQK-1:(I cmd, n(s)=7, n(r)=7, p=0, pid=0xf0)3076.0 km (1907.1 mi) ESE of Arraial do Cabo, Brazil<0x0d>
N0ARY-1 audio level = 100(59/39) [NONE] _||||||||
[0.4] N0ARY-1>KK6VQK-1:(I cmd, n(s)=0, n(r)=7, p=0, pid=0xf0)3082.2 km (1911.0 mi) ESE of Cabo Frio, Brazil<0x0d>3083.0 km (1911.5 mi) ESE of Arma<0xef><0xbf><0xbd><0xef><0xbf><0xbd>o de B<0xef><0xbf><0xbd>zios, Brazil<0x0d>
N0ARY-1 audio level = 99(58/41) [NONE] _||||||||
[0.4] N0ARY-1>KK6VQK-1:(I cmd, n(s)=1, n(r)=7, p=0, pid=0xf0)3091.5 km (1916.7 mi) ESE of S<0xef><0xbf><0xbd>o Pedro da Aldeia, Brazil<0x0d>
[0L] KK6VQK-1>N0ARY-1:(REJ res, n(r)=2, f=0)
The "sending too much crap" is a separate bug that'll end up being fixed when transmit delay (T2) is introduced. This bug is how it decides to send that final poll frame and the sequence number it's using to do so.
I've noticed that connecting to invalid length ax25 addresses doesn't fail in the socket routines, it fails when creating ax25 packets.
eg:
connect tnc0 PKTCHAT-1
PKTCHAT-1 is too long, which should fail when doing kbind, kconnect, ksendto, etc. However it isn't caught there!
A declarative, efficient, and flexible JavaScript library for building user interfaces.
๐ Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
An Open Source Machine Learning Framework for Everyone
The Web framework for perfectionists with deadlines.
A PHP framework for web artisans
Bring data to life with SVG, Canvas and HTML. ๐๐๐
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
Some thing interesting about web. New door for the world.
A server is a program made to process requests and deliver data to clients.
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
Some thing interesting about visualization, use data art
Some thing interesting about game, make everyone happy.
We are working to build community through open source technology. NB: members must have two-factor auth.
Open source projects and samples from Microsoft.
Google โค๏ธ Open Source for everyone.
Alibaba Open Source for everyone
Data-Driven Documents codes.
China tencent open source team.