[OpenBIOS] r525 - ofw/inetv6

svn at openbios.org svn at openbios.org
Mon Aug 6 02:29:32 CEST 2007


Author: lwalter
Date: 2007-08-06 02:29:32 +0200 (Mon, 06 Aug 2007)
New Revision: 525

Modified:
   ofw/inetv6/http.fth
   ofw/inetv6/neighdis.fth
   ofw/inetv6/tcpv6.fth
Log:
HTTP from local IPv6 address debugged.

Modified: ofw/inetv6/http.fth
===================================================================
--- ofw/inetv6/http.fth	2007-08-04 20:14:30 UTC (rev 524)
+++ ofw/inetv6/http.fth	2007-08-06 00:29:32 UTC (rev 525)
@@ -88,9 +88,23 @@
    drop  swap -  update-ptr             ( len )
 ;
 
+false instance value ipv6-host$?
+: parse-ipv6-port  ( server$ -- server$' port$ )
+   1 /string
+   [char] ] left-parse-string		( port$ server$ )
+   2swap  [char] : left-parse-string    ( server$ port$ junk$ )
+   2drop                                ( server$ port$ )
+;
+
 : parse-port  ( server$ -- port# server$' )
-   [char] : left-parse-string           ( port$ server$ )
-   2swap  dup  if                       ( server$ port$ )
+   over c@ [char] [ =  dup to ipv6-host$?  if
+      parse-ipv6-port			( server$ port$ )
+   else
+
+      [char] : left-parse-string        ( port$ server$ )
+      2swap				( server$ port$ )
+   then
+   dup  if                              ( server$ port$ )
       push-decimal  $number  pop-base   ( server$ port# error? )
       abort" Bad port number"           ( server$ port# )
    else                                 ( server$ port$ )
@@ -260,8 +274,11 @@
 
    " GET " tcp-write                    ( send$ prefix$ server$ )
    2swap tcp-write  2swap tcp-write     ( server$ )
-   "  HTTP/1.1"r"nUser-Agent: FirmWorks/1.1"r"nHost: " tcp-write
-   tcp-write  " "r"n"r"n" tcp-write
+   "  HTTP/1.1"r"nUser-Agent: FirmWorks/1.1"r"nHost: "  tcp-write
+   ipv6-host$?  if  " [" tcp-write  then
+   ( server$ ) tcp-write
+   ipv6-host$?  if  " ]" tcp-write  then
+   " "r"n"r"n" tcp-write
 
    " flush-writes" $call-parent
 
@@ -276,7 +293,7 @@
       mount 0=
       bootnet-debug  if
          ." HTTP: "
-         dup  if   ." Succeded"  else ." Failed!"  then  cr
+         dup  if   ." Succeeded"  else ." Failed!"  then  cr
       then
    else
       2drop true

Modified: ofw/inetv6/neighdis.fth
===================================================================
--- ofw/inetv6/neighdis.fth	2007-08-04 20:14:30 UTC (rev 524)
+++ ofw/inetv6/neighdis.fth	2007-08-06 00:29:32 UTC (rev 525)
@@ -79,12 +79,21 @@
    then
 ;
 
+create default-ipv6-addr  h# fe c, h# 80 c, 0 c, 0 c, 0 c, 0 c, 0 c, 0 c,
+			  0 c, 0 c, 0 c, h# ff c, h# fe c, 0 c, 0 c, 0 c,
+: set-my-ipv6-addr  ( -- )
+   default-ipv6-addr my-ipv6-addr copy-ipv6-addr
+   my-en-addr     c@ 2 xor my-ipv6-addr     8 +   c!
+   my-en-addr 1+           my-ipv6-addr     9 + 2 move
+   my-en-addr 3 +          my-ipv6-addr d# 13 + 3 move
+;
+
 : configure-ipv6  ( -- )      \ Get discovery info
    ['] 4drop to icmpv6-err-callback-xt
    ['] 2drop to icmpv6-info-callback-xt
 
    d# 64 to prefix
-   " fe80::259:08ff:feb4:0061" my-ipv6-addr  $ipv6#
+   set-my-ipv6-addr
    set-my-mc-ipv6-addr
 
    \ XXX Duplicate address discovery; Router discovery

Modified: ofw/inetv6/tcpv6.fth
===================================================================
--- ofw/inetv6/tcpv6.fth	2007-08-04 20:14:30 UTC (rev 524)
+++ ofw/inetv6/tcpv6.fth	2007-08-06 00:29:32 UTC (rev 525)
@@ -212,40 +212,42 @@
 
 [ifndef] include-ipv4
 : +rcv_nxt  ( n -- )  rcv_nxt + to rcv_nxt  ;
+[then]
 
-0 value wbuf-start
-0 value wbuf-adr
-0 value wbuf-top
-0 value wbuf-end
-0 value wbuf-threshold
+0 value wbufv6-start
+0 value wbufv6-adr
+0 value wbufv6-top
+0 value wbufv6-end
+0 value wbufv6-threshold
 
-d# 1024 d# 16 * constant /wbuf
-: wbuf-clear  ( -- )
-   wbuf-start /wbuf + to wbuf-end
-   wbuf-start dup to wbuf-adr  to wbuf-top
-   wbuf-start /wbuf 2/ + to wbuf-threshold
+d# 1024 d# 16 * constant /wbufv6
+: wbufv6-clear  ( -- )
+   wbufv6-start /wbufv6 + to wbufv6-end
+   wbufv6-start dup to wbufv6-adr  to wbufv6-top
+   wbufv6-start /wbufv6 2/ + to wbufv6-threshold
 ;
-: wbuf-allocate  ( -- )
-   /wbuf alloc-mem to wbuf-start
-   wbuf-clear
+: wbufv6-allocate  ( -- )
+   /wbufv6 alloc-mem to wbufv6-start
+   wbufv6-clear
 ;
 
-: wbuf-actual  ( -- n )  wbuf-top wbuf-adr -  ;
-: wbuf-avail  ( -- n )  wbuf-end wbuf-top -  ;
+: wbufv6-actual  ( -- n )  wbufv6-top wbufv6-adr -  ;
+: wbufv6-avail  ( -- n )  wbufv6-end wbufv6-top -  ;
 
 \ Remove n bytes of data from the beginning of the write buffer
-: wbuf-drop  ( n -- )
-   wbuf-adr +  to wbuf-adr
+: wbufv6-drop  ( n -- )
+   wbufv6-adr +  to wbufv6-adr
    \ If there are enough empty bytes at the beginning to make
    \ it worthwhile to do so, copy the data down to make more
    \ space at the end.
-   wbuf-adr wbuf-threshold >=  if
-      wbuf-adr wbuf-start wbuf-actual move     \ Copy bytes down
-      wbuf-actual wbuf-start + to wbuf-top     \ Fix pointers
-      wbuf-start to wbuf-adr
+   wbufv6-adr wbufv6-threshold >=  if
+      wbufv6-adr wbufv6-start wbufv6-actual move     \ Copy bytes down
+      wbufv6-actual wbufv6-start + to wbufv6-top     \ Fix pointers
+      wbufv6-start to wbufv6-adr
    then
 ;
 
+[ifndef] include-ipv4
 \ send sequence variables
 0 instance value snd_una		\ send unacknowledged
 0 instance value snd_nxt		\ send next
@@ -728,7 +730,9 @@
 
 0 value win
 0 value offs
-: dont-send?   ( -- exit? )
+[then]
+
+: dont-sendv6?   ( -- exit? )
    false
 
    \ Sender silly window avoidance.  If connection is idle and can send
@@ -741,7 +745,7 @@
    len  if
       len t_maxseg =  ?exit
 
-      idle?  nodelay t_flag?  or   len offs +  wbuf-actual  >=  and  ?exit
+      idle?  nodelay t_flag?  or   len offs +  wbufv6-actual  >=  and  ?exit
      
       t_force  ?exit
 
@@ -796,7 +800,7 @@
    \ If nothing happens soon, send when timer expires:
    \ if window is nonzero, transmit what we can, otherwise force out a byte.
 
-   wbuf-actual 0<>  tcpt_rexmt @ 0=  and  tcpt_persist @ 0=  and  if
+   wbufv6-actual 0<>  tcpt_rexmt @ 0=  and  tcpt_persist @ 0=  and  if
       0 to t_rxtshift
       setpersist
    then
@@ -804,6 +808,7 @@
    drop true
 ;
 
+[ifndef] include-ipv4
 \ TCP output routine: figure out what should be sent and send it.
 d# 32 buffer: opt
 0 value hdrlen
@@ -849,14 +854,14 @@
    xmit_bufv6 set-struct
 
    len  if
-      wbuf-adr offs +   xmit_bufv6 hdrlen +  len  move
+      wbufv6-adr offs +   xmit_bufv6 hdrlen +  len  move
 
       \ If we're sending everything we've got, set PUSH.
       \ (This will keep happy those implementations which only
       \ give data to the user when a buffer fills or
       \ a PUSH comes in.)
 
-      offs len +  wbuf-actual  =  
+      offs len +  wbufv6-actual  =  
       len snd_cwnd =  or	\ Also PUSH when we have a lot
       if
          oflags th_push or  to oflags
@@ -1033,12 +1038,12 @@
             \
             \ We can't just blindly clear the FIN bit, because if we don't
             \ have any more data to send then the probe will be the FIN itself.
-            off wbuf-actual <  if  fin-off  then
+            off wbufv6-actual <  if  fin-off  then
             1 to win
          then
       then
 
-      win wbuf-actual <  if  fin-off  win  else  wbuf-actual  then  ( n )
+      win wbufv6-actual <  if  fin-off  win  else  wbufv6-actual  then  ( n )
       offs -  to len
 
       len 0<  if
@@ -1056,7 +1061,7 @@
 
       rbuf-space to win
 
-      dont-send?  ?exit
+      dont-sendv6?  ?exit
         
       sendv6
    sendalot? 0=  until
@@ -1106,7 +1111,7 @@
          then
          iack snd_una -  to acked
 				\ XXX drop-snd needs to "wakeup" the sender
-         acked wbuf-drop
+         acked wbufv6-drop
          iack to snd_una				
          \ We are now finished with the packet data
 
@@ -1121,7 +1126,7 @@
          snd_una snd_max =  if  tcpt_rexmt off  else
          tcpt_persist @ 0=  if  t_rxtcur tcpt_rexmt !  then then
 
-         wbuf-actual  if  tcp_outputv6  then
+         wbufv6-actual  if  tcp_outputv6  then
          true exit
       then
       false exit
@@ -1576,18 +1581,18 @@
 
    tcp_close
 ;
+[then]
 
 \ Discard from the buffer the transmitted data that was acked 
-: release-data  ( -- flag )
-   acked wbuf-actual >  dup  if                ( flag )
-      snd_wnd wbuf-actual -  to snd_wnd        ( flag )
-      wbuf-actual wbuf-drop                    ( flag )
+: release-datav6  ( -- flag )
+   acked wbufv6-actual >  dup  if                ( flag )
+      snd_wnd wbufv6-actual -  to snd_wnd        ( flag )
+      wbufv6-actual wbufv6-drop                    ( flag )
    else                                        ( flag )
-      acked wbuf-drop                          ( flag )
+      acked wbufv6-drop                          ( flag )
       snd_wnd acked -  to snd_wnd              ( flag )
    then                                        ( flag )
 ;
-[then]
 
 : do-ackv6  ( -- done? )
    ts syn_received =  if
@@ -1692,7 +1697,7 @@
    snd_cwnd snd_ssthresh u>  if  dup u*  snd_cwnd /  then  ( cwnd-increment )
    snd_cwnd +  maxwin min  set-cwnd
    
-   release-data to ourfinisacked?
+   release-datav6 to ourfinisacked?
 
    \ wakeup-sender
 
@@ -1987,24 +1992,24 @@
 /tcphdr d# 32 +  mssmax +  constant /xmit-max
 
 : alloc-buffers  ( -- )
-   wbuf-allocate
    d# 1024 d# 16 *  to rbuf-len
    rbuf-len alloc-mem to rbuf-adr
    0 to rbuf-actual
 ;
 : free-buffers  ( -- )
-   wbuf-start /wbuf free-mem
    rbuf-adr rbuf-len free-mem
 ;
 [then]
 
 \ This is basically attach
 : alloc-buffersv6  ( -- )
+   wbufv6-allocate
    /xmit-max " allocate-ipv6" $call-parent  to xmit_bufv6
 ;
 
 : free-buffersv6  ( -- )
    free-buffers
+   wbufv6-start /wbufv6 free-mem
    xmit_bufv6 /xmit-max " free-ipv6" $call-parent
 ;
 
@@ -2265,17 +2270,18 @@
    ?receivev6
 ;
 
-[ifndef] include-ipv4
-: wbuf-set  ( adr len -- )  over to wbuf-adr  + to wbuf-top  ;
-: wbuf-add  ( adr len -- #added )
-   wbuf-avail min                    ( adr #added )
+: wbufv6-set  ( adr len -- )  over to wbufv6-adr  + to wbufv6-top  ;
+: wbufv6-add  ( adr len -- #added )
+   wbufv6-avail min                    ( adr #added )
    dup  if                           ( adr #added )
-      tuck  wbuf-top swap move       ( #added )
-      dup wbuf-top +  to wbuf-top    ( #added )
+      tuck  wbufv6-top swap move       ( #added )
+      dup wbufv6-top +  to wbufv6-top    ( #added )
    else                              ( adr 0 )
       nip                            ( 0 )
    then                              ( #added )
 ;
+
+[ifndef] include-ipv4
 : read       ( adr len -- actual )  2drop 0  ;
 : write      ( adr len -- actual )  2drop 0  ;
 : write-oob  ( adr len -- actual )  2drop 0  ;
@@ -2285,7 +2291,7 @@
 : writev6  ( adr len -- actual )
    tuck  begin                   ( len adr remaining )
       alive? 0=  if  3drop -1 exit  then
-      2dup wbuf-add /string      ( len adr' remaining' )
+      2dup wbufv6-add /string      ( len adr' remaining' )
    dup  while                    ( len adr' remaining' )
       tcp_outputv6  pollv6       ( len adr' remaining' )
    repeat                        ( len adr 0 )
@@ -2465,11 +2471,11 @@
 
 : flush-writesv6  ( -- )
    \ If the connection is already down, just blow away any pending data
-   ts closed  =  if  wbuf-clear exit  then
+   ts closed  =  if  wbufv6-clear exit  then
 
    get-msecs
    begin  
-      wbuf-actual 0<>			( start-time flag )
+      wbufv6-actual 0<>			( start-time flag )
       get-msecs 2 pick - d# 10000 <	( start-time flag flag )
       and 				( start-time flag' )
    while                		( start-time )
@@ -2477,10 +2483,10 @@
    repeat				( start-time )
    drop					( )
 
-   wbuf-actual 0<>  if
+   wbufv6-actual 0<>  if
       show" TDROP"
       debug" TCP Timeout!"
-      wbuf-clear
+      wbufv6-clear
    then
 ;
 




More information about the OpenBIOS mailing list