FORGOT YOUR DETAILS?

CREATE ACCOUNT

Unison Help

  1. Unison Kernel
    1. Pthreads
      1. pthread_create()
      2. pthread_exit()
      3. pthread_self()
      4. pthread_equal()
      5. pthread_join()
      6. pthread_detach()
      7. pthread_setschedparam()
      8. pthread_getschedparam()
      9. pthread_attr_init()
      10. pthread_attr_destroy()
      11. pthread_attr_setstackaddr()
      12. pthread_attr_getstackaddr()
      13. pthread_attr_setstacksize()
      14. pthread_attr_getstacksize()
      15. pthread_attr_setschedparam()
      16. pthread_attr_getschedparam()
      17. pthread_attr_setdetachstate()
      18. pthread_attr_getdetachstate()
      19. pthread_stackinfo()
      20. pthread_setprio()
      21. pthread_getprio()
      22. sched_get_priority_max()
      23. sched_get_priority_min()
      24. sched_yield()
    2. Pthread Cancellation
      1. pthread_cleanup_pop()
      2. pthread_cleanup_push()
      3. pthread_cancel()
      4. pthread_setcanceltype()
      5. pthread_setcancelstate()
      6. pthread_testcancel()
    3. Mutex
      1. pthread_mutex_init()
      2. pthread_mutex_destroy()
      3. pthread_mutex_lock()
      4. pthread_mutex_trylock()
      5. pthread_mutex_unlock()
    4. Semaphores
      1. sem_open()
      2. sem_close()
      3. sem_unlink()
      4. sem_init()
      5. sem_destroy()
      6. sem_wait()
      7. sem_trywait()
      8. sem_timedwait()
      9. sem_post()
      10. sem_getvalue()
    5. Message Queues
      1. mq_open()
      2. mq_close()
      3. mq_unlink()
      4. mq_send()
      5. mq_receive()
      6. mq_notify()
      7. mq_setattr()
      8. mq_getattr()
      9. mq_timedreceive()
      10. mq_timedsend()
    6. Conditional Variables
      1. pthread_cond_init()
      2. pthread_cond_destroy()
      3. pthread_cond_wait()
      4. pthread_cond_timedwait()
      5. pthread_cond_signal()
      6. pthread_cond_broadcast()
      7. pthread_condattr_init()
      8. pthread_condattr_destroy()
    7. Barriers
      1. pthread_barrier_init()
      2. pthread_barrier_destroy()
      3. pthread_barrier_wait()
    8. Timers
      1. timer_create()
      2. timer_delete()
      3. timer_settime()
      4. timer_gettime()
      5. timer_getoverrun()
      6. timer_tick()
      7. nanosleep()
    9. Clocks
      1. time()
      2. uptime()
      3. sleep()
      4. clock_settime()
      5. clock_gettime()
      6. clock_getres()
      7. clock_init()
    10. Memory Allocation
      1. POSIX.1
        1. malloc()
        2. free()
      2. Variable Length (Pools)
        1. pool_create()
        2. pool_destroy()
        3. pool_alloc()
        4. pool_free()
      3. Fixed Length (Partitions)
        1. pt_create()
        2. pt_destroy()
        3. pt_getblock()
        4. pt_freeblock()
    11. Rendezvous
      1. mr_init()
      2. mr_send()
      3. mr_receive()
      4. mr_reply()
      5. mr_sigrecv()
      6. mr_sigpost()
    12. Interrupts
      1. interrupts
      2. i_disable()
      3. i_restore()
    13. Directory Services
      1. dir_register()
      2. dir_deregister()
      3. dir_lookup()
      4. dir_lookup_string()
    14. Miscellaneous
      1. checkIstack()
      2. NanoStart() or DSPexec_Start()
      3. _isrStackFill
      4. Kernel Scaling
      5. kfatal()
      6. kalloc()
      7. kfree()
      8. mpu or mmu
      9. pthreadStackFill
      10. thread_numb()
      11. thread_utilization_start()
      12. thread_utilization_stop()
      13. xprintf()
      14. xputs()
      15. xputchar()
  2. Unison I/O Library
    1. accept()
    2. bind()
    3. chmod()
    4. close()
    5. connect()
    6. creat()
    7. fstat()
    8. getpeername()
    9. getsockname()
    10. getsockopt()
    11. ioctl()
    12. link()
    13. listen()
    14. lseek()
    15. mkdir()
    16. mkfs()
    17. mount()
    18. open()
    19. read()
    20. recv()
    21. recvfrom()
    22. rename()
    23. renameat()
    24. rmdir()
    25. select()
    26. send()
    27. sendto()
    28. setsockopt()
    29. shutdown()
    30. socket()
    31. stat()
    32. sync()
    33. umount()
    34. unlink()
    35. write()
  3. Unison STDIO Library
    1. STDIO Library Calls
      1. clearerr()
      2. dprintf()
      3. fclose()
      4. fdopen()
      5. feof()
      6. ferror()
      7. fileno()
      8. fflush()
      9. fgetc()
      10. fgetpos()
      11. fgets()
      12. fopen()
      13. fprintf()
      14. fputc()
      15. fputs()
      16. fread()
      17. freopen()
      18. fscanf()
      19. fseek()
      20. fseeko()
      21. fsetpos()
      22. ftell()
      23. ftello()
      24. fwrite()
      25. getc()
      26. getc_unlocked()
      27. getchar()
      28. getchar_unlocked()
      29. getdelim()
      30. getline()
      31. gets()
      32. get_stderr_ptr()
      33. get_stdin_ptr()
      34. get_stdout_ptr()
      35. noperprintf()
      36. perprintf()
      37. perror()
      38. posix_compat()
      39. printf()
      40. putc()
      41. putc_unlocked()
      42. putchar()
      43. putchar_unlocked()
      44. puts()
      45. remove()
      46. rewind()
      47. scanf()
      48. setbuf()
      49. setvbuf()
      50. snprintf()
      51. sprintf()
      52. sscanf()
      53. stderr_init()
      54. stderr_close()
      55. stdin_init()
      56. stdin_close()
      57. stdout_init()
      58. stdout_close()
      59. vdprintf()
      60. vscanf()
      61. vsscanf()
      62. vfscanf()
      63. vprintf()
      64. vsnprintf()
      65. vsprintf()
      66. vfprintf()
      67. ungetc()
    2. Do-nothing Stubs
      1. ctermid()
      2. flockfile()
      3. fmemopen()
      4. ftrylockfile()
      5. open_memstream()
      6. pclose()
      7. popen()
      8. tempnam()
      9. tmpfile()
      10. tmpnam()
  4. Unison LIBC Library
    1. LIBC Library Calls
      1. assert()
      2. realloc()
      3. strcasecmp()
      4. strdup()
      5. strncasecmp()
      6. strftime()
    2. Do-nothing Stubs
      1. abort()
      2. execve()
      3. exit()
      4. _Exit()
      5. fork()
      6. getpid()
      7. isatty()
      8. kill()
      9. sbrk()
      10. times()
      11. wait()
    3. Do-nothing Wide-character Stubs
      1. <wchar.h>
      2. <wctype.h>
  5. Unison I/O Servers
    1. File Servers
      1. Multimedia File Server - fsys
      2. FAT File System - fatfs
      3. NAND File Server - nandfsys
      4. NOR File Server - norfsys
      5. Network File Server - nfs
  6. Graphics, Camera, Video, Audio
    1. Vendor Graphics
    2. Prism++ Graphics
    3. ADPCM Services - adpcmd
    4. Camera
  7. Network Protocols
    1. TCP and UDP Server - tcpd
      1. IPv4 only server
      2. IPv4/IPv6 server
    2. DHCP Client Service - dhcp client
    3. DHCP Server - dhcpd
    4. Telnet Server - telnetd
    5. Tiny FTP Server - tftpd
    6. Point to Point - pppd
    7. Network Translation - NAT with PAT
    8. Firewall
      1. Packet filter: pf
      2. Packet filter control: pfctl
      3. Fitler rules: pf.filtering
      4. Translation rules: pf.nat
    9. Tiny HTTP Server - thttpd
    10. Tiny HTTP Server with TLS
    11. POP3 Server
    12. Simple Mail Transfer Protocol Services (SMTP)
    13. Bootp Protocol
    14. File Transfer Protocol Server (FTP)
    15. File Transfer Client Services
    16. RPC / XDR
    17. DNS Client
    18. HTTP/HTTPS Client
    19. REST Client
    20. AutoIP Service - autoip client
    21. mDNS server - mdnsd
    22. SNTP Client
    23. SNMP Agent - Snmpd server
    24. SSL/TLS library
    25. SSH server
    26. IP security
      1. IPsec description
      2. IPsec administration: ipsecadm
      3. Virtual Private Network: VPN
    27. Power Control
      1. Motor and Motion Control Servers
      2. PWM, Encoders
    28. Serial I/O
      1. Asynchronous Serial I/O Server - ttyserver
      2. CAN Server - cand
      3. I2C Server - i2cd
      4. I2S Server - i2sd
    29. System Services
      1. Power Management Servers
      2. Login Service - login_services
      3. XML
      4. POSIX Shell and Login Service - posh
    30. Universal Serial Bus (USB)
      1. USB Server
      2. USB Device Server
      3. USB Embedded Host Server
    31. Wireless
      1. Wireless Servers and Drivers
      2. 802.15.4 Radio Servers
      3. TCP/v6 with 6loWPAN
      4. ZigBee
      5. BlueTooth Server
      6. 802.11 Wi-Fi
      7. GPRS, UHF and GPS Radio Servers
    32. Remedy Tools for Unison
      1. Remedy Data Logging and Event Display Tools
      2. Remedy Diagnostics
      3. Remedy Flash Downloader/Bootloader
      4. Remedy Power On Self Test - POST
      5. Remedy OS Object Viewer
      6. Remedy Remote Control Tools

7.8.2.Packet filter control: pfctl #

NAME

Packet filter control – pfctl

SYNOPSIS

#include <pfctl.h>

DESCRIPTION

The pfctl library communicates with the packet filter using the ioctl interface described in pf. It allows rule set and parameter configuration and retrieval of status information from the packet filter.

Packet filtering restricts the types of packets that pass through network interfaces entering or leaving the host based on filter rules as described in pf.filtering. The packet filter can also replace addresses and ports of packets. Replacing source addresses and ports of outgoing packets is called NAT (Network Address Translation) and is used to connect an internal network (usually reserved address space) to an external one (the Internet) by making all connections to external hosts appear to come from the gateway. Replacing destination addresses and ports of incoming packets is used to redirect connections to different hosts and/or ports. A combination of both translations, bidirectional NAT, is also supported. Translation rules are described in pf.nat.

User functions

The pfctl library provides many commands for user interface.

int pfctl_setup(int dev, int (*print_func)(const char *, …), int opts);
Setup pfctl library.
dev – control file descriptor (socket);
print_func – printout function;
opts – options:
PF_OPT_NOACTION – do not actually load rules, just parse them
PF_OPT_QUIET – only print errors and warnings

 

int pfctl_enable(void);
Enable the packet filter.

 

int pfctl_disable(void);
Disable the packet filter.

 

int pfctl_rules_begin(void);
Clears the inactive filter rule set.

 

int pfctl_rules_parse(char *line)
Adds filter rule at the end of the inactive filter rule set. line is a pointer to the string with the rule represented in format described in pf.filtering.

 

int pfctl_rules_commit(void);
Switch inactive to active filter rule set.

 

int pfctl_nat_begin(void);
Clears the inactive filter NAT set.

 

int pfctl_nat_parse(char *line)
Adds filter rule at the end of the inactive filter NAT set. line is a pointer to the string with the rule represented in format described in pf.nat.

 

int pfctl_nat_commit(void);
Switch inactive to active filter NAT set.

 

int pfctl_clear_rules(void);
Flush the filter rules.

 

int pfctl_clear_nat(void);
Flush the NAT rules.

 

int pfctl_clear_states(void);
Flush the state table (NAT and filter).
int pfctl_kill_states(const char *host1, const char *host2)
Kill all of the state entries from the host1. If host2 is not NULL, this command will kill all the state entries from the first host to the second host.

 

int pfctl_log(char *ifname);
Enable collection of packet and byte count statistics for interface ifname.

 

int pfctl_clear_stats(void);
Flush the filter information (statistics that are not bound to rules).

 

int pfctl_get_status(struct pf_status *status);
Gets filter information (statistics and counters).

struct pf_status {
    u_int64_t        counters[PFRES_MAX];
    u_int64_t        fcounters[FCNT_MAX];
    u_int64_t        pcounters[2][2][3];
    u_int64_t        bcounters[2][2];
    u_int32_t        running;
    u_int32_t        states;
    u_int32_t        since;
    u_int32_t        debug;
};

 

int pfctl_gettimeout(const char *opt);
Gets a timeout or interval value. opt is a pointer to the string with timeout or interval name:

"tcp.first"       - PFTM_TCP_FIRST_PACKET
"tcp.opening"     - PFTM_TCP_OPENING
"tcp.established" - PFTM_TCP_ESTABLISHED
"tcp.closing"     - PFTM_TCP_CLOSING
"tcp.finwait"     - PFTM_TCP_FIN_WAIT
"tcp.closed"      - PFTM_TCP_CLOSED
"udp.first"       - PFTM_UDP_FIRST_PACKET
"udp.single"      - PFTM_UDP_SINGLE
"udp.multiple"    - PFTM_UDP_MULTIPLE
"icmp.first"      - PFTM_ICMP_FIRST_PACKET
"icmp.error"      - PFTM_ICMP_ERROR_REPLY
"other.first"     - PFTM_OTHER_FIRST_PACKET
"other.single"    - PFTM_OTHER_SINGLE
"other.multiple"  - PFTM_OTHER_MULTIPLE
"frag"            - PFTM_FRAG
"interval"        - PFTM_INTERVAL
"all"             - print all values

Function print result using printout function specified by pfctl_setup().

 

int pfctl_settimeout(const char *opt, int seconds);
Sets a timeout or interval value. opt is a pointer to the string with timeout or interval name (see above), seconds – new value.

 

int pfctl_getlimit(const char *opt);
Gets hard limits on the memory pools used by the packet filter. opt is a pointer to the string with memory pool name:

"states"    - PF_LIMIT_STATES
"frags"     - PF_LIMIT_FRAGS
"all"       - print all values

Function print result using printout function specified by pfctl_setup().

 

int pfctl_setlimit(const char *opt, int limit);
Sets hard limits on the memory pools used by the packet filter. opt is a pointer to the string with memory pool name (see above), limit – new value.

 

int pfctl_debug(u_int32_t level);
Set the debug level. level can be:
PF_DEBUG_NONE – don’t generate debug messages
PF_DEBUG_URGENT – generate debug messages only for serious errors.
PF_DEBUG_MISC – generate debug messages for various errors
All messages will be printed using printout function specified by pfctl_setup().

 

EXAMPLE

The following example demonstrates how to use the pfctl commands to init NAT and filtering rules.

#define LAN_IP				"192.168.17.198"
#define WAN_IP				"192.168.20.198"
#define WAN_IF				"eth0"

void pf_setup(void)
{
	int i;
	int s;


	// Init the packet filter
	pfattach();


	/*
	 * open control socket
	 */
	s = socket(AF_INET, SOCK_DGRAM, IPPROTO_UDP);
	if (s < 0)
	{
		printf("pf sock open error %d\n", errno);
		return;
	}
	else
		printf("pf sock %d\n", s);


	// Set socket, printout function and options for pfctl library
	pfctl_setup(s, printf, 0);



	/*
	 * NAT
	 */
	pfctl_nat_begin();

	// Parse nat rules and put its to packet filter
	pfctl_nat_parse("nat on "WAN_IF" from "LAN_IP"/24 to any -> "WAN_IP"\n");

	pfctl_nat_commit();


	
	/*
	 * FILTER
	 */
	pfctl_rules_begin();

	// Parse pf rules and put its to packet filter
	pfctl_rules_parse("block out on "WAN_IF" proto udp from any port > 9000 to any\n");

	pfctl_rules_commit();



	pfctl_enable();

	close(s);
}

NOTES

There is a demo available for the Unison and DSPnano pfctl which is found in installdir/demos.

SEE ALSO

pf, pf.filtering, pf.nat

Suggest Edit

CONTACT US

TO GET YOUR PROJECT STARTED

TOP