netSetNATParam (Function)

Top  Previous  Next

Architecture:

NX32L

Device support:

All

Firmware version:

1.50.00


This sets the NAT parameters for a network interface. It has the same effect as setting the parameters via Device: Network: Network Settings.

The NAT parameters for the network interface are non-volatile and therefore need only to be set once.

The parameters set by netSetNATParam can be read using netGetNATParam.

 

Please note that not all interfaces support both forward and gateway. (See Device: Network: Network Settings for which interfaces support which)

 

 

Input:

Iface : SINT

The network interface. (See Network)

 

Forward : BOOL (default FALSE)

Controls whether requests from the interface will be forwarded to other interfaces.

 

Gateway : BOOL (default FALSE)

Controls whether the interface will be used as a gateway for requests.

Only one interface can be set as Gateway at the same time.

 

 

Returns:

1

- Success.

0

- Interface not available or not supported.

-2

- Illegal network interface.

-3

- Illegal parameter.

-4

- Another interface is set as gateway.

 

 

Declaration:

FUNCTION netSetNATParam;
VAR_INPUT
  Iface      : MANDATORY SINT;
  Forward    : BOOL := FALSE;
  Gateway    : BOOL := FALSE;
END_VAR;

 

 

Example:

INCLUDE rtcu.inc
 
VAR
  ap   : netGetAPParam;
  dhcp : netGetDHCPParam;
  lan  : netGetLANParam;
  nat  : netGetNATParam;
  wpa  : netWLANSecurityWPA;
END_VAR;
 
FUNCTION booltostr : STRING;
VAR_INPUT
v : BOOL;
END_VAR;
IF v THEN booltostr := "Yes"; ELSE booltostr := "No"; END_IF;
END_FUNCTION;
 
FUNCTION setup_lan;
 
  // Configure LAN
  netSetLANParam(iface := 2, DHCP := TRUE, AutoDNS := TRUE);
 
  // Configure NAT
  netSetNATParam(iface := 2, forward := FALSE, gateway := TRUE);
 
END_FUNCTION;
 
FUNCTION setup_ap;
 
  // Configure Access Point
  wpa.phrase               := "pass phrase";
  netSetAPParam(
                ssid       := "RTCU network",
                sec_config := ADDR(wpa),
                hidden     := FALSE,
                chnl       := 1,
                Address    := sockIPFromName(str := "192.168.1.1"),
                Subnet     := sockIPFromName(str := "255.255.255.0")
               );
 
  // Configure NAT
  netSetNATParam(iface := 5, forward := TRUE, gateway := FALSE);
 
  // Configure DHCP
  netSetDHCPParam(
                  iface    := 5,
                  enable   := ON,
                  time     := 24,
                  first    := sockIPFromName(str := "192.168.1.100"),
                  last     := sockIPFromName(str := "192.168.1.200"),
                  dns_type := 1,
                  applynow := TRUE
                 );
 
END_FUNCTION;
 
FUNCTION show_lan;
 
  // Show
  DebugMsg(message := "===== LAN =====");
 
  // Show LAN setup
  lan(iface := 2);
  DebugMsg(message := " Network=      IPv4");
  DebugMsg(message := "   DHCP=           " + booltostr(v := lan.dhcp));
  DebugMsg(message := "   IP=             " + sockIPToName(ip := lan.ip));
  DebugMsg(message := "   Subnet=         " + sockIPToName(ip := lan.SubnetMask));
  DebugMsg(message := "   Gw=             " + sockIPToName(ip := lan.Gateway));
  DebugMsg(message := "   Auto DNS=       " + booltostr(v := lan.AutoDNS));
  DebugMsg(message := "   DNS=            " + sockIPToName(ip := lan.DNS1));
  DebugMsg(message := "   DNS=            " + sockIPToName(ip := lan.DNS2));
 
  // Show NAT setup
  nat(iface := 2);
  DebugMsg(message := " NAT");
  DebugMsg(message := "   forward=        " + booltostr(v := nat.forward));
  DebugMsg(message := "   gateway=        " + booltostr(v := nat.gateway));
 
END_FUNCTION;
 
FUNCTION show_ap;
 
  // Show
  DebugMsg(message := "===== Access Point =====");
 
  // Show AP setup
  ap();
  DebugMsg(message := " SSID=         " + ap.ssid);
  IF ap.security = 0 THEN
    DebugMsg(message := " Security=     None");
  ELSIF ap.security = 1 THEN
    DebugFmt(message := " Security=     WPA/WPA2 PSK");
    netGetAPSecurity(sec_config := ADDR(wpa));
    DebugMsg(message := "   phrase=         " + wpa.phrase);
  ELSE
    DebugFmt(message := " Security=     Unknown (\1)", v1 := ap.security);
  END_IF;
  DebugMsg(message := " Network=      IPv4");
  DebugMsg(message := "   Address=        " + sockIPToName(ip := ap.Address));
  DebugMsg(message := "   Subnet=         " + sockIPToName(ip := ap.Subnet));
 
  // Show NAT setup
  nat(iface := 5);
  DebugMsg(message := " NAT");
  DebugMsg(message := "   forward=        " + booltostr(v := nat.forward));
  DebugMsg(message := "   gateway=        " + booltostr(v := nat.gateway));
 
  // Show DHCP setup
  dhcp(iface := 5);
  DebugMsg(message := " DHCP");
  DebugMsg(message := "   enable=         " + booltostr(v := dhcp.enable));
  DebugFmt(message := "   lease time=     \1 Hours", v1 := dhcp.time);
  DebugMsg(message := "   subnet=         " + sockIPToName(ip := dhcp.Subnet));
  DebugMsg(message := "   range, start=   " + sockIPToName(ip := dhcp.first));
  DebugMsg(message := "   range, end=     " + sockIPToName(ip := dhcp.last));
  IF dhcp.dns_type = 1 THEN
    DebugMsg(message := "   DNS type=       Self/Auto");
  ELSIF dhcp.dns_type = 2 THEN
    DebugMsg(message := "   DNS type=       Static");
  ELSE
    DebugFmt(message := "   DNS type=       Unknown (\1)", v1 := dhcp.dns_type);
  END_IF;
  DebugMsg(message := "   DNS=            " + sockIPToName(ip := dhcp.DNS1));
  DebugMsg(message := "   DNS=            " + sockIPToName(ip := dhcp.DNS2));
 
END_FUNCTION;
 
PROGRAM example;
 
// Setup
setup_lan();
setup_ap();
 
// Show
show_lan();
show_ap();
 
// Start
netOpen(iface := 2);
netOpen(iface := 5);
 
BEGIN
// ...
END;
END_PROGRAM;