NEW PREFIX AUTO 4,1 .LIST OFF .OP 65C02 .OR $2000 .TF BIN/IPCONFIG2 *-------------------------------------- .INB INC/MACROS.I .INB INC/A2OSX.I .INB INC/KERNEL.I .INB INC/MLI.I .INB INC/MLI.E.I .INB INC/NIC.I .INB INC/ETH.I .INB INC/LIBTCPIP.I .INB INC/NET.DHCP.I *-------------------------------------- TIMEOUT.MAX .EQ 200 20 sec. *-------------------------------------- .DUMMY .OR ZPBIN ZS.START ZPPtr1 .BS 2 pIPCFG .BS 2 pFD .BS 2 ZPIPCfgPtr .BS 2 ZPFrameBase .BS 2 ZPFramePtr .BS 2 ZPTmpPtr1 .BS 2 ZPTmpPtr2 .BS 2 ZPTmpPtr3 .BS 2 *-------------------------------------- ZS.END .ED *-------------------------------------- * File Header (16 Bytes) *-------------------------------------- CS.START cld jmp (.1,x) .DA #$61 6502,Level 1 (65c02) .DA #1 BIN Layout Version 1 .DA 0 .DA CS.END-CS.START CS .DA DS.END-DS.START DS .DA #16 SS .DA #ZS.END-ZS.START Zero Page Size .DA 0 *-------------------------------------- * Relocation Table *-------------------------------------- .1 .DA CS.INIT .DA CS.RUN .DA CS.DOEVENT .DA CS.QUIT L.LIBTCPIP .DA LIBTCPIP L.MSG.USAGE .DA MSG.USAGE L.MSG0 .DA MSG0 L.MSG0.NL .DA MSG0.NL L.MSG0.L .DA MSG0.L L.MSG1.DEV .DA MSG1.DEV L.MSG1.DEV.ARP .DA MSG1.DEV.ARP L.MSG1.DEV.IP .DA MSG1.DEV.IP L.MSG1.LINK.OK .DA MSG1.LINK.OK L.MSG1.LINK.KO .DA MSG1.LINK.KO L.MSG1.LINKSPEED .DA MSG1.LINKSPEED L.MSG1.DPLX.FD .DA MSG1.DPLX.FD L.MSG1.DPLX.HD .DA MSG1.DPLX.HD L.MSG2 .DA MSG2 L.MSG2.C .DA MSG2.C L.MSG2.U .DA MSG2.U L.MSG2.DHCPSRVR .DA MSG2.DHCPSRVR L.MSG2.IP .DA MSG2.IP L.MSG2.GW .DA MSG2.GW L.MSG2.DNS .DA MSG2.DNS L.MSG2.HOSTNAME .DA MSG2.HOSTNAME L.DEVNAME .DA DEVNAME L.MSG.DEV.KO .DA MSG.DEV.KO L.MSG.DEV.OK .DA MSG.DEV.OK L.MSG.CFG .DA MSG.CFG L.MSG.CFG.KO .DA MSG.CFG.KO L.MSG.CFG.OK .DA MSG.CFG.OK L.MSG.DNS.ADD .DA MSG.DNS.ADD L.HOSTNAME .DA HOSTNAME L.TCPIP.CONF .DA TCPIP.CONF L.HOSTS .DA HOSTS L.IPCFG .DA IPCFG L.IOCTL .DA IOCTL L.DCB.NIC .DA DCB.NIC L.CFG.IP .DA CFG.IP L.HST.SScanF .DA HST.SScanF L.CFG.HOSTS.SScanF .DA CFG.HOSTS.SScanF L.CFG.Keywords .DA CFG.Keywords J.CFG.Keywords .DA CFG.Read.address .DA CFG.Read.netmask .DA CFG.Read.gateway .DA CFG.Read.nameserver .DA CFG.Read.dnsdomain .DA 0 *-------------------------------------- * DHCP *-------------------------------------- L.SA.LOCAL .DA SA.LOCAL L.SA.REMOTE .DA SA.REMOTE L.MSG.DHCP.CFG1 .DA MSG.DHCP.CFG1 L.MSG.DHCP.CFG2 .DA MSG.DHCP.CFG2 L.MSG.DHCP.KO .DA MSG.DHCP.KO L.MSG.DHCP.OK .DA MSG.DHCP.OK L.MSG.DHCP.ND .DA MSG.DHCP.ND L.MSG.DHCP.NA .DA MSG.DHCP.NA L.DHCP.DISC .DA DHCP.DISC L.DHCP.REQ .DA DHCP.REQ *-------------------------------------- CS.INIT >LDYA L.LIBTCPIP >SYSCALL LoadLib bcs .9 sta hLIBTCPIP .9 rts *-------------------------------------- CS.RUN .1 >INC.G ArgCount >SYSCALL ArgV bcs .7 >STYA ZPPtr1 lda (ZPPtr1) cmp #'-' bne .99 ldy #1 lda (ZPPtr1),y ldx OptionList .2 cmp OptionList,x beq .3 dex bne .2 .99 >PUSHBI 0 >LDYA L.MSG.USAGE >SYSCALL printf lda #E.SYN sec rts .3 ldy OptionVars-1,x lda #$80 sta (pData),y bra .1 .7 *-------------------------------------- CS.RUN.STATUS >PUSHBI 0 >LDYA L.MSG0 >SYSCALL printf >LIBCALL hLIBTCPIP,LIBTCPIP.GETCFG >STYA pIPCFG ldy #S.IPCFG.DevID lda (pIPCFG),y bne .1 >LDYA L.MSG0.NL >SYSCALL puts jmp CS.RUN.DONE .1 tax lda Dev.Table,x sta pFD lda Dev.Table+1,x sta pFD+1 >PUSHEA.G DIB ldy #S.IPCFG.DevID lda (pIPCFG),y >SYSCALL GetDevStatus >LEA.G DCB.NIC >STYA.G IOCTL+S.IOCTL.BUFPTR lda #S.IOCTL.STATCODE.GETDCB >STA.G IOCTL+S.IOCTL.STATCODE >PUSHEA.G IOCTL >PUSHBI IOCTL.STATUS ldy #S.IPCFG.DevID lda (pIPCFG),y >SYSCALL IOCTL CS.RUN.DUMP >LDYA L.MSG0.L >SYSCALL puts ldy #DCB.NIC+S.DCB.NIC.MAC+5 ldx #6 .1 lda (pData),y >PUSHA dey dex bne .1 >PUSHEA.G DIB+S.DIB.IDS lda pFD clc adc #S.FD.DEV tay lda pFD+1 adc /S.FD.DEV >PUSHYA ldy #S.IPCFG.DevID lda (pIPCFG),y >PUSHA >PUSHBI 11 >LDYA L.MSG1.DEV >SYSCALL printf >LDA.G DCB.NIC+S.DCB.NIC.FLAGS and #S.DCB.NIC.FLAGS.ARPOFFLOAD beq .2 lda #1 .2 >PUSHA >PUSHBI 1 >LDYA L.MSG1.DEV.ARP >SYSCALL printf >LDA.G DCB.NIC+S.DCB.NIC.FLAGS and #S.DCB.NIC.FLAGS.IPOFFLOAD beq .3 lda #1 .3 >PUSHA >PUSHBI 1 >LDYA L.MSG1.DEV.IP >SYSCALL printf >LDA.G DCB.NIC+S.DCB.NIC.LINK and #S.DCB.NIC.LINK.OK bne CS.RUN.LINK >LDYA L.MSG1.LINK.KO >SYSCALL puts bra CS.RUN.DUMPIP CS.RUN.LINK >LDYA L.MSG1.LINK.OK >SYSCALL puts >PUSHBI 0 >LDYA L.MSG1.LINKSPEED >SYSCALL printf >LDA.G DCB.NIC+S.DCB.NIC.SPEED and #$0F tax .4 phx lda #'0' >SYSCALL PutChar plx dex bne .4 >LDA.G DCB.NIC+S.DCB.NIC.LINK and #S.DCB.NIC.LINK.FD bne .5 >LDYA L.MSG1.DPLX.HD bra .6 .5 >LDYA L.MSG1.DPLX.FD .6 >SYSCALL puts CS.RUN.DUMPIP >PUSHBI 0 >LDYA L.MSG2 >SYSCALL printf lda (pIPCFG) and #S.IPCFG.STATUS.OK beq .11 >LDYA L.MSG2.C bra .10 .11 >LDYA L.MSG2.U .10 >SYSCALL puts ldy #S.IPCFG.DHCPSRVR+3 ldx #4 .2 >PUSHB (pIPCFG),y dey dex bne .2 >PUSHBI 4 >LDYA L.MSG2.DHCPSRVR >SYSCALL printf ldy #S.IPCFG.IP+7 IP/MASK ldx #8 .3 >PUSHB (pIPCFG),y dey dex bne .3 >PUSHBI 8 >LDYA L.MSG2.IP >SYSCALL printf ldy #S.IPCFG.GW+3 ldx #4 .4 >PUSHB (pIPCFG),y dey dex bne .4 >PUSHBI 4 >LDYA L.MSG2.GW >SYSCALL printf ldy #S.IPCFG.DNS1+7 ldx #8 .5 >PUSHB (pIPCFG),y dey dex bne .5 >PUSHBI 8 >LDYA L.MSG2.DNS >SYSCALL printf lda pIPCFG clc adc #S.IPCFG.DOMAIN tay lda pIPCFG+1 adc #0 >PUSHYA lda pIPCFG clc adc #S.IPCFG.HOSTNAME tay lda pIPCFG+1 adc #0 >PUSHYA >PUSHBI 4 >LDYA L.MSG2.HOSTNAME >SYSCALL printf CS.RUN.DONE lda #0 tell TSKMGR that all done ok, but sec we do not want to stay in memory rts *-------------------------------------- CS.DOEVENT lda (pEvent) bpl .9 is it a TIMER event? >LDA.G TimeOut beq .9 dec sta (pData),y .9 sec do not discard TIMER event rts *-------------------------------------- CS.QUIT lda hLIBTCPIP beq .8 >SYSCALL UnloadLib .8 clc rts *-------------------------------------- Init.Timeout ldy #TimeOut lda #TIMEOUT.MAX sta (pData),y rts *-------------------------------------- Wait.TimeOut ldy #TimeOut lda (pData),y rts *-------------------------------------- .INB USR/SRC/SBIN/IPCONFIG.S.DEV .INB USR/SRC/SBIN/IPCONFIG.S.DHCP .INB USR/SRC/SBIN/IPCONFIG.S.ETC *-------------------------------------- CS.END LIBTCPIP .AZ "libtcpip2" *-------------------------------------- OptionList >PSTR "DESdes" OptionVars .DA #bDHCP,#bETC,#bSet,#bDHCP,#bETC,#bSet *-------------------------------------- MSG.USAGE .AS "Usage : IPCONFIG \r\n" .AS " -D : Try to get IP address from DHCP\r\n" .AS " -E : Read ETC files\r\n" .AZ " -S : Set/Reset TCPIP configuration (-E, then -D if required)\r\n" *-------------------------------------- MSG0 .AZ "TCP/IP Status : " MSG0.L .AZ "Loaded" MSG0.NL .AZ "Not Loaded" *-------------------------------------- MSG1.DEV .AS "Device Configuration :\r\n" .AS " Device ID : $%h\r\n" .AS " Device Name : %s\r\n" .AS " Device Type : %S\r\n" .AZ " HW Address : %02h:%02h:%02h:%02h:%02h:%02h\r\n" MSG1.DEV.ARP .AZ " ARP Offload : %d\r\n" MSG1.DEV.IP .AS " IP Offload : %d\r\n" .AZ " Link Status : " MSG1.LINK.OK .AZ "OK" MSG1.LINK.KO .AZ "Media Disconnected" MSG1.LINKSPEED .AZ " Link Speed : 1" MSG1.DPLX.FD .AZ " Mbit/s,Full Duplex" MSG1.DPLX.HD .AZ " Mbit/s,Half Duplex" *-------------------------------------- MSG2 .AZ "IP Configuration : " MSG2.C .AZ "Configured" MSG2.U .AZ "Not Configured" MSG2.DHCPSRVR .AZ " DHCP Server : %d.%d.%d.%d\r\n" MSG2.IP .AZ " IP/Mask : %d.%d.%d.%d/%d.%d.%d.%d\r\n" MSG2.GW .AZ " Gateway : %d.%d.%d.%d\r\n" MSG2.DNS .AZ " DNS : %d.%d.%d.%d,%d.%d.%d.%d\r\n" MSG2.HOSTNAME .AZ " Hostname : %s.%s\r\n" hLIBTCPIP .BS 1 *-------------------------------------- DEVNAME .AZ "/DEV/ETH1" MSG.DEV.KO .AZ "No Device Found, exiting." MSG.DEV.OK .AZ "Bound To Device : %s\r\n" MSG.CFG .AZ "Reading %s..." MSG.CFG.KO .AZ "Failed!!! [%h]\r\n" MSG.CFG.OK .AZ "OK." MSG.DNS.ADD .AZ " - Adding static host %d.%d.%d.%d %s..." *-------------------------------------- HOSTNAME .AZ "${ROOT}ETC/HOSTNAME" TCPIP.CONF .AZ "${ROOT}ETC/TCPIP.CONF" HOSTS .AZ "${ROOT}ETC/HOSTS" HST.SScanF .AZ "%d.%d.%d.%d" *-------------------------------------- CFG.DefaultHost .AZ "a2osx-XXXX" CFG.Keywords >PSTR "address" >PSTR "netmask" >PSTR "gateway" >PSTR "nameserver" >PSTR "dnsdomain" .DA #0 CFG.hBuf1 .BS 1 CFG.hBuf2 .BS 1 CFG.hBuf3 .BS 1 CFG.hCfgPath .BS 1 CFG.hCfgFile .BS 1 CFG.IP .BS 4 CFG.HOSTS.SScanF .AZ "%d.%d.%d.%d %s %s" IPCFG .BS S.IPCFG *-------------------------------------- MSG.DHCP.CFG1 .AZ "Searching for DHCP servers..." MSG.DHCP.CFG2 .AZ "Reply from DHCP Server at %d.%d.%d.%d, requesting...\r\n" MSG.DHCP.KO .AZ "Time Out [%h].\r\n" MSG.DHCP.OK .AZ "Success:[IP=%d.%d.%d.%d/%d.%d.%d.%d]\r\n" MSG.DHCP.ND .AZ "No Device, exiting." MSG.DHCP.NA .AZ "TCPIP Already configured, exiting." *-------------------------------------- SA.LOCAL .DA #AF.INET S.SOCKADDR.AF .BS 1 .HS 00.00.00.00 S.SOCKADDR.ADDR .DA UDP.PORT.DHCPC S.SOCKADDR.PORT *-------------------------------------- SA.REMOTE .DA #AF.INET S.SOCKADDR.AF .BS 1 .HS FF.FF.FF.FF S.SOCKADDR.ADDR .DA UDP.PORT.DHCPS S.SOCKADDR.PORT *-------------------------------------- DHCP.DISC .HS 01010600 OP,HTYPE,HLEN,HOPS DHCP.DISC.XID .BS 4 .HS 0000 SECS .DA S.DHCP.FLAGS.BRDCST .HS 00000000 CIADDR DHCP.DISC.YIADDR .HS 00000000 .HS 00000000 SIADDR DHCP.DISC.GIADDR .HS 00000000 DHCP.DISC.CHADDR .HS 00000000.00000000.00000000.00000000 .BS 64 SNAME .BS 128 FILE .HS 63825363 COOKIE .HS 3501 OPT .DA #S.DHCP.OPTIONS.DHCPDiscover .HS 37040103060FFF DHCP.DISC.LEN .EQ *-DHCP.DISC *-------------------------------------- DHCP.REQ .HS 01010600 OP,HTYPE,HLEN,HOPS DHCP.REQ.XID .BS 4 .HS 0000 SECS .DA S.DHCP.FLAGS.BRDCST .HS 00000000 CIADDR DHCP.REQ.YIADDR .HS 00000000 .HS 00000000 SIADDR DHCP.REQ.GIADDR .HS 00000000 DHCP.REQ.CHADDR .HS 00000000.00000000.00000000.00000000 .BS 64 SNAME .BS 128 FILE .HS 63825363 COOKIE .HS 3501 OPT .DA #S.DHCP.OPTIONS.DHCPRequest .HS 3204 DHCP.REQ.OPT.REQIP .BS 4 .HS 3604 DHCP.REQ.OPT.SVRIP .BS 4 .HS FF DHCP.REQ.LEN .EQ *-DHCP.REQ *-------------------------------------- .DUMMY .OR 0 DS.START ArgCount .BS 1 bDHCP .BS 1 bETC .BS 1 bSet .BS 1 IOCTL .BS S.IOCTL DIB .BS S.DIB DCB.NIC .BS S.DCB.NIC TimeOut .BS 1 hSocket .BS 1 hFrame .BS 1 DS.END .ED *-------------------------------------- MAN SAVE USR/SRC/SBIN/IPCONFIG.S ASM