Outdated egg!

This is an egg for CHICKEN 4, the unsupported old release. You're almost certainly looking for the CHICKEN 5 version of this egg, if it exists.

If it does not exist, there may be equivalent functionality provided by another egg; have a look at the egg index. Otherwise, please consider porting this egg to the current version of CHICKEN.

tun

  1. Outdated egg!
  2. tun
    1. Description
    2. Current status
    3. Author
    4. Requirements
    5. API
    6. Examples
    7. Repository
    8. License
    9. Version History

Description

A library to create Linux TUN/TAP interfaces

Current status

The library currently allows the opening of a TUN/TAP interface in either TUN or TAP mode and keeps track of the interface name and its file descriptor. It provides two utility functions tun-up! and tun-mac which bring the interface up and return the interface MAC address respectively.

Note: the library assumes the presence of the "/dev/net/tun" device file. See https://www.kernel.org/doc/Documentation/networking/tuntap.txt.

Author

Omar Shorbaji

Requirements

defstruct lolevel socket

API

[procedure] (make-tun #!optional (mode 'tun) (pi #f))

returns a tun/tap interface. The mode argument can be 'tun for a tunnel interface or 'tap for a tap interface. When the argument pi is #t we do not send the IFF_NO_PI flag and the interface includes packet information (four bytes) when reading every packet or frame

[procedure] (tun-fd tun)

returns the file descriptor associated with the tunnel interface. Writing to this file descriptor sends data out of the interface. Note that written data must be well-formed packet (for tun) or ethernet frame (for tap).

[procedure] (tun-name)

returns the name of the TUN/TAP interface. Available after running make-tun

[procedure] (tun-mac tun)

returns the MAC address associated with a TUN or TAP interface as a list of 6 integers

Examples


(define tap (make-tun 'tap)) ; creates a TUN/TAP interface in tap mode

(tun-up! tun)                ; brings interface up

(print "MAC address: " (tun-mac tap))

(use posix ethernet)

(let* ((pr (file-read fd size))
       (buf (car pr))
       (n (cadr pr)))
  (with-input-from-string (string-take buf n)
     (read-ethernet-frame))) ; reads an ethernet frame from TAP interface
  

Repository

https://github.com/shorbaji/chicken-tun

License

;; Copyright (c) 2016, Omar Shorbaji
;; All rights reserved.
;; 
;; Redistribution and use in source and binary forms, with or without
;; modification, are permitted provided that the following conditions are met:
;; 
;; Redistributions of source code must retain the above copyright notice, this
;; list of conditions and the following disclaimer. 
;; Redistributions in binary form must reproduce the above copyright notice,
;; this list of conditions and the following disclaimer in the documentation
;; and/or other materials provided with the distribution.  
;; Neither the name of the author nor the names of its contributors may be
;; used to endorse or promote products derived from this software without
;; specific prior written permission.  
;; 
;; THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
;; AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
;; IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
;; ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDERS OR CONTRIBUTORS BE
;; LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR 
;; CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OFcl
;; SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
;; INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
;; CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
;; ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
;; POSSIBILITY OF SUCH DAMAGE.

Version History

0.1 alpha release