Patch title: Release 85 bulk changes
Abstract:
File: /pliant/linux/network/net.pli
Key:
    Removed line
    Added line
   
abstract
  [This module will give you the ability to deal with Linux 



constant os_SIOCSIFADDR 8916h
constant os_SIOCSIFNETMASK 891Ch
constant os_SIOCGIFFLAGS 8913h
constant os_SIOCSIFFLAGS 8914h
abstract
  [This module will give you the ability to deal with Linux 



constant os_SIOCSIFADDR 8916h
constant os_SIOCSIFNETMASK 891Ch
constant os_SIOCGIFFLAGS 8913h
constant os_SIOCSIFFLAGS 8914h
constant os_SIOCGIFTXQLEN 8942h
constant os_SIOCSIFTXQLEN 8943h
constant os_IFF_UP 01h
constant os_IFF_RUNNING 40h


constant os_IFF_UP 01h
constant os_IFF_RUNNING 40h


function net_configure device def -> status
  arg Str device def ; arg Status status
  if not (def eparse (var Int i1) "." (var Int i2) "." (var 
    error error_id_unexpected "invalid interface definition 
    return failure
function net_configure device def options -> status
  arg Str device def options ; arg Status status
  var Int socket := os_socket os_AF_INET os_SOCK_DGRAM 0
  if socket<=0
    return failure
  status := success
  var os_ifreq req
  var Int socket := os_socket os_AF_INET os_SOCK_DGRAM 0
  if socket<=0
    return failure
  status := success
  var os_ifreq req
  req:addr sin_family := os_AF_INET
  req:addr sin_port := 0
  var Str devicez := device+"[0]"
  memory_copy devicez:characters (addressof req:name) device
  var Str devicez := device+"[0]"
  memory_copy devicez:characters (addressof req:name) device
  req:addr sin_addr := (cast i1 uInt)*256^3 + (cast i2 uInt)
  if (os_ioctl socket os_SIOCSIFADDR addressof:req)<0
    if debug
      console "failed to set address for net interface "+dev
    status := failure
  req:addr sin_addr := (cast m1 uInt)*256^3 + (cast m2 uInt)
  if (os_ioctl socket os_SIOCSIFNETMASK addressof:req)<0
    if debug
      console "failed to set mask for net interface "+device
    status := failure
  if def=""
    void
  eif (def eparse (var Int i1) "." (var Int i2) "." (var Int i3) "." (var Int i4) "/" (var Int m1) "." (var Int m2) "." (var Int m3) "." (var Int m4))
    req:addr sin_family := os_AF_INET
    req:addr sin_port := 0
    req:addr sin_addr := (cast i1 uInt)*256^3 + (cast i2 uInt)*256^2 + (cast i3 uInt)*256 + (cast i4 uInt)
    if (os_ioctl socket os_SIOCSIFADDR addressof:req)<0
      if debug
        console "failed to set address for net interface "+device eol
      status := failure
    req:addr sin_addr := (cast m1 uInt)*256^3 + (cast m2 uInt)*256^2 + (cast m3 uInt)*256 + (cast m4 uInt)
    if (os_ioctl socket os_SIOCSIFNETMASK addressof:req)<0
      if debug
        console "failed to set mask for net interface "+device eol
      status := failure
  else
    error error_id_unexpected "invalid interface definition "+def
    return failure
  if (os_ioctl socket os_SIOCGIFFLAGS addressof:req)<0
    if debug
      console "failed to get flags for net interface "+devic
    status := failure
  if (os_ioctl socket os_SIOCGIFFLAGS addressof:req)<0
    if debug
      console "failed to get flags for net interface "+devic
    status := failure
  var Int qlen := options option "queue_length" Int
  if qlen=defined
    (addressof:req map os_ifreq2) flags := qlen
    os_ioctl socket os_SIOCSIFTXQLEN addressof:req
  (addressof:req map os_ifreq2) flags := (addressof:req map 
  if (os_ioctl socket os_SIOCSIFFLAGS addressof:req)<0
    if debug
      console "failed to get up net interface "+device eol
    status := failure
  os_close socket

  (addressof:req map os_ifreq2) flags := (addressof:req map 
  if (os_ioctl socket os_SIOCSIFFLAGS addressof:req)<0
    if debug
      console "failed to get up net interface "+device eol
    status := failure
  os_close socket

function net_configure device def -> status
  arg Str device def ; arg Status status
  status := net_configure device def ""

function net_shutdown device -> status
  arg Str device ; arg Status status
  var Int socket := os_socket os_AF_INET os_SOCK_DGRAM 0

function net_shutdown device -> status
  arg Str device ; arg Status status
  var Int socket := os_socket os_AF_INET os_SOCK_DGRAM 0
  if socket<=0
    return failure
  var os_ifreq req
  var Str devicez := device+"[0]"
  memory_copy devicez:characters (addressof req:name) device
  var os_ifreq req
  var Str devicez := device+"[0]"
  memory_copy devicez:characters (addressof req:name) device
  if socket<=0
    return failure
  status := success
  if (os_ioctl socket os_SIOCGIFFLAGS addressof:req)<0
    if debug
      console "failed to get flags for net interface "+devic
    status := failure
  (addressof:req map os_ifreq2) flags := (addressof:req map 
  if (os_ioctl socket os_SIOCSIFFLAGS addressof:req)<0
    if debug
      console "failed to shut down net interface "+device eo
    status := failure
  os_close socket



function net_filter action device inside outside
  arg Str action device inside outside
  # possible actions: internet nat filter
  if (constant (file_query "file:/bin/iptables" standard)=de
    execute "insmod ip_tables" quiet
    execute "insmod iptable_filter" quiet
    # execute "insmod ipt_REJECT" quiet
  if action="nat"
    if (constant (file_query "file:/bin/iptables" standard)=
      execute "insmod ip_conntrack" quiet
      execute "insmod iptable_nat" quiet
      execute "insmod ipt_MASQUERADE" quiet
    net_rule_2_2 "-A forward -i "+device+" -j MASQ"
    net_rule_2_4 "-t nat -A POSTROUTING -o "+device+" -j MAS
  if action="internet" or action="nat" or (action="filter" a
    net_rule "-N "+device+"in"
    net_rule_2_2 "-A input -i "+device+" -j "+device+"in"
    net_rule_2_4 "-A INPUT -i "+device+" -j "+device+"in"
    net_rule_2_4 "-A FORWARD -i "+device+" -j "+device+"in"
    if action="internet" or action="nat"
      net_rule "-A "+device+"in -p udp --destination-port 11
      net_rule "-A "+device+"in -p tcp --destination-port 11
      net_rule "-A "+device+"in -p udp --destination-port 13
      net_rule "-A "+device+"in -p tcp --destination-port 13
  status := success
  if (os_ioctl socket os_SIOCGIFFLAGS addressof:req)<0
    if debug
      console "failed to get flags for net interface "+devic
    status := failure
  (addressof:req map os_ifreq2) flags := (addressof:req map 
  if (os_ioctl socket os_SIOCSIFFLAGS addressof:req)<0
    if debug
      console "failed to shut down net interface "+device eo
    status := failure
  os_close socket



function net_filter action device inside outside
  arg Str action device inside outside
  # possible actions: internet nat filter
  if (constant (file_query "file:/bin/iptables" standard)=de
    execute "insmod ip_tables" quiet
    execute "insmod iptable_filter" quiet
    # execute "insmod ipt_REJECT" quiet
  if action="nat"
    if (constant (file_query "file:/bin/iptables" standard)=
      execute "insmod ip_conntrack" quiet
      execute "insmod iptable_nat" quiet
      execute "insmod ipt_MASQUERADE" quiet
    net_rule_2_2 "-A forward -i "+device+" -j MASQ"
    net_rule_2_4 "-t nat -A POSTROUTING -o "+device+" -j MAS
  if action="internet" or action="nat" or (action="filter" a
    net_rule "-N "+device+"in"
    net_rule_2_2 "-A input -i "+device+" -j "+device+"in"
    net_rule_2_4 "-A INPUT -i "+device+" -j "+device+"in"
    net_rule_2_4 "-A FORWARD -i "+device+" -j "+device+"in"
    if action="internet" or action="nat"
      net_rule "-A "+device+"in -p udp --destination-port 11
      net_rule "-A "+device+"in -p tcp --destination-port 11
      net_rule "-A "+device+"in -p udp --destination-port 13
      net_rule "-A "+device+"in -p tcp --destination-port 13
      net_rule "-A "+device+"in -p tcp --destination-port 51
      # net_rule "-A "+device+"in -p tcp --destination-port 515 -j DROP" # LPD
      net_rule "-A "+device+"in -p udp --destination-port 54
      net_rule "-A "+device+"in -p tcp --destination-port 54
      net_rule "-A "+device+"in -p tcp --destination-port 60
    var Str all := outside
    while all<>""
      if not (all parse any:(var Str first) _ any:(var Str r
        first := all ; remain := ""
      if (first parse "-" any:(var Str exclude))
        net_rule "-A "+device+"in --destination "+exclude+" 
      else
        net_rule "-A "+device+"in --destination "+first+" -j
      all := remain
    if action="internet" or action="nat"
      # no access from the Internet to the internal network
      # usefull for security if ISP is broken
      # ... but broken if using NAT
      void # net_rule "-A "+device+"in -d 10.0.0.0/255.0.0.0
    net_rule_2_2 "-A "+device+"in -j "+(shunt action="intern
    if action="filter"
      net_rule_2_4 "-A "+device+"in -j DROP"
  if action="internet" or action="nat" or (action="filter" a
    net_rule "-N "+device+"out"
    net_rule_2_2 "-A output -i "+device+" -j "+device+"out"
    net_rule_2_4 "-A OUTPUT -o "+device+" -j "+device+"out"
    net_rule_2_4 "-A FORWARD -o "+device+" -j "+device+"out"
    var Str all := inside
    while all<>""
      if not (all parse any:(var Str first) _ any:(var Str r
        first := all ; remain := ""
      if (first parse "-" any:(var Str exclude))
        net_rule "-A "+device+"out --destination "+exclude+"
      else
        net_rule "-A "+device+"out --destination "+first+" -
      all := remain
    if action="internet" or action="nat"
      # don't route any internal network traffic to the Inte
      # usefull because the (ISDN) Linux routing table are n
      net_rule "-A "+device+"out -d 10.0.0.0/255.0.0.0 -j DR
    net_rule_2_2 "-A "+device+"out -j "+(shunt action="inter
    if action="filter"
      net_rule_2_4 "-A "+device+"out -j DROP"


      net_rule "-A "+device+"in -p udp --destination-port 54
      net_rule "-A "+device+"in -p tcp --destination-port 54
      net_rule "-A "+device+"in -p tcp --destination-port 60
    var Str all := outside
    while all<>""
      if not (all parse any:(var Str first) _ any:(var Str r
        first := all ; remain := ""
      if (first parse "-" any:(var Str exclude))
        net_rule "-A "+device+"in --destination "+exclude+" 
      else
        net_rule "-A "+device+"in --destination "+first+" -j
      all := remain
    if action="internet" or action="nat"
      # no access from the Internet to the internal network
      # usefull for security if ISP is broken
      # ... but broken if using NAT
      void # net_rule "-A "+device+"in -d 10.0.0.0/255.0.0.0
    net_rule_2_2 "-A "+device+"in -j "+(shunt action="intern
    if action="filter"
      net_rule_2_4 "-A "+device+"in -j DROP"
  if action="internet" or action="nat" or (action="filter" a
    net_rule "-N "+device+"out"
    net_rule_2_2 "-A output -i "+device+" -j "+device+"out"
    net_rule_2_4 "-A OUTPUT -o "+device+" -j "+device+"out"
    net_rule_2_4 "-A FORWARD -o "+device+" -j "+device+"out"
    var Str all := inside
    while all<>""
      if not (all parse any:(var Str first) _ any:(var Str r
        first := all ; remain := ""
      if (first parse "-" any:(var Str exclude))
        net_rule "-A "+device+"out --destination "+exclude+"
      else
        net_rule "-A "+device+"out --destination "+first+" -
      all := remain
    if action="internet" or action="nat"
      # don't route any internal network traffic to the Inte
      # usefull because the (ISDN) Linux routing table are n
      net_rule "-A "+device+"out -d 10.0.0.0/255.0.0.0 -j DR
    net_rule_2_2 "-A "+device+"out -j "+(shunt action="inter
    if action="filter"
      net_rule_2_4 "-A "+device+"out -j DROP"