Annotation of embedaddon/strongswan/src/libstrongswan/networking/tun_device.h, revision 1.1.1.1

1.1       misho       1: /*
                      2:  * Copyright (C) 2012 Tobias Brunner
                      3:  * Copyright (C) 2012 Giuliano Grassi
                      4:  * Copyright (C) 2012 Ralf Sager
                      5:  * HSR Hochschule fuer Technik Rapperswil
                      6:  *
                      7:  * This program is free software; you can redistribute it and/or modify it
                      8:  * under the terms of the GNU General Public License as published by the
                      9:  * Free Software Foundation; either version 2 of the License, or (at your
                     10:  * option) any later version.  See <http://www.fsf.org/copyleft/gpl.txt>.
                     11:  *
                     12:  * This program is distributed in the hope that it will be useful, but
                     13:  * WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
                     14:  * or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
                     15:  * for more details.
                     16:  */
                     17: 
                     18: /**
                     19:  * @defgroup tun_device tun_device
                     20:  * @{ @ingroup networking
                     21:  */
                     22: 
                     23: #ifndef TUN_DEVICE_H_
                     24: #define TUN_DEVICE_H_
                     25: 
                     26: #include <networking/host.h>
                     27: 
                     28: typedef struct tun_device_t tun_device_t;
                     29: 
                     30: /**
                     31:  * Class to create TUN devices
                     32:  *
                     33:  * Creating such a device requires the CAP_NET_ADMIN capability.
                     34:  */
                     35: struct tun_device_t {
                     36: 
                     37:        /**
                     38:         * Read a packet from the TUN device
                     39:         *
                     40:         * @note This call blocks until a packet is available. It is a thread
                     41:         * cancellation point.
                     42:         *
                     43:         * @param packet                the packet read from the device, allocated
                     44:         * @return                              TRUE if successful
                     45:         */
                     46:        bool (*read_packet)(tun_device_t *this, chunk_t *packet);
                     47: 
                     48:        /**
                     49:         * Write a packet to the TUN device
                     50:         *
                     51:         * @param packet                the packet to write to the TUN device
                     52:         * @return                              TRUE if successful
                     53:         */
                     54:        bool (*write_packet)(tun_device_t *this, chunk_t packet);
                     55: 
                     56:        /**
                     57:         * Set the IP address of the device
                     58:         *
                     59:         * @param addr                  the desired interface address
                     60:         * @param netmask               the netmask to use
                     61:         * @return                              TRUE if operation successful
                     62:         */
                     63:        bool (*set_address)(tun_device_t *this, host_t *addr, uint8_t netmask);
                     64: 
                     65:        /**
                     66:         * Get the IP address previously assigned to using set_address().
                     67:         *
                     68:         * @param netmask               pointer receiving the configured netmask, or NULL
                     69:         * @return                              address previously set, NULL if none
                     70:         */
                     71:        host_t* (*get_address)(tun_device_t *this, uint8_t *netmask);
                     72: 
                     73:        /**
                     74:         * Bring the TUN device up
                     75:         *
                     76:         * @return                              TRUE if operation successful
                     77:         */
                     78:        bool (*up)(tun_device_t *this);
                     79: 
                     80:        /**
                     81:         * Set the MTU for this TUN device
                     82:         *
                     83:         * @param mtu                   new MTU
                     84:         * @return                              TRUE if operation successful
                     85:         */
                     86:        bool (*set_mtu)(tun_device_t *this, int mtu);
                     87: 
                     88:        /**
                     89:         * Get the current MTU for this TUN device
                     90:         *
                     91:         * @return                              current MTU
                     92:         */
                     93:        int (*get_mtu)(tun_device_t *this);
                     94: 
                     95:        /**
                     96:         * Get the interface name of this device
                     97:         *
                     98:         * @return                              interface name
                     99:         */
                    100:        char *(*get_name)(tun_device_t *this);
                    101: 
                    102:        /**
                    103:         * Get the underlying tun file descriptor.
                    104:         *
                    105:         * @return                              file descriptor of this tun device
                    106:         */
                    107:        int (*get_fd)(tun_device_t *this);
                    108: 
                    109:        /**
                    110:         * Destroy a tun_device_t
                    111:         */
                    112:        void (*destroy)(tun_device_t *this);
                    113: 
                    114: };
                    115: 
                    116: /**
                    117:  * Create a TUN device using the given name template.
                    118:  *
                    119:  * @param name_tmpl                    name template, defaults to "tun%d" if not given
                    120:  * @return                                     TUN device
                    121:  */
                    122: tun_device_t *tun_device_create(const char *name_tmpl);
                    123: 
                    124: #endif /** TUN_DEVICE_H_ @}*/

FreeBSD-CVSweb <freebsd-cvsweb@FreeBSD.org>