ip0.fs 1.2 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970
  1. ( Variables for IP networking JCB 13:21 08/24/10)
  2. module[ ip0"
  3. create ip-id-counter d# 2 allot
  4. create ip-addr d# 4 allot
  5. create ip-router d# 4 allot
  6. create ip-subnetmask d# 4 allot
  7. create ip-dns d# 4 allot
  8. create icmp-alarm-ptr d# 1 allot
  9. : ethaddr-broadcast
  10. h# ffff dup dup
  11. ;
  12. : net-my-ip
  13. ip-addr 2@
  14. ;
  15. : ethaddr-pretty-w
  16. dup endian hex2
  17. [char] : emit
  18. hex2
  19. ;
  20. : ethaddr-pretty
  21. swap rot
  22. ethaddr-pretty-w [char] : emit
  23. ethaddr-pretty-w [char] : emit
  24. ethaddr-pretty-w
  25. ;
  26. : ip-pretty-byte
  27. h# ff and
  28. \ d# 0 u.r
  29. hex2
  30. ;
  31. : ip-pretty-2
  32. dup swab ip-pretty-byte [char] . emit ip-pretty-byte
  33. ;
  34. : ip-pretty
  35. swap
  36. ip-pretty-2 [char] . emit
  37. ip-pretty-2
  38. ;
  39. ( IP address literals JCB 14:30 10/26/10)
  40. ================================================================
  41. It is neat to write IP address literals e.g.
  42. ip# 192.168.0.1
  43. ================================================================
  44. meta
  45. : octet# ( c -- u ) 0. rot parse >number throw 2drop ;
  46. : ip#
  47. [char] . octet# 8 lshift
  48. [char] . octet# or do-number
  49. [char] . octet# 8 lshift
  50. bl octet# or do-number
  51. ;
  52. target
  53. ]module