/* Copyright (c) 2010, Code Aurora Forum. 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 Code Aurora 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, FITNESS FOR A PARTICULAR PURPOSE AND * NON-INFRINGEMENT ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, * PROCUREMENT OF 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. * */ #ifndef CND_IPROUTE2_H #define CND_IPROUTE2_H /**---------------------------------------------------------------------------- @file cnd_iproute2.h cnd_iproute2 is an interface to make the necessary calls to iproute2 in order to set up and take down routing tables. Defines APIs so that a routing table associated with a network interface can be added or deleted. Also allows the user to change the default routing table when a given source address is not already associated with a network interface. -----------------------------------------------------------------------------*/ /*---------------------------------------------------------------------------- * Include Files * -------------------------------------------------------------------------*/ #include /*---------------------------------------------------------------------------- * Preprocessor Definitions and Constants * -------------------------------------------------------------------------*/ /*---------------------------------------------------------------------------- * Type Declarations * -------------------------------------------------------------------------*/ /*---------------------------------------------------------------------------- * Class Definitions * -------------------------------------------------------------------------*/ class cnd_iproute2 { public: /** * @brief Returns an instance of the Cnd_iproute2 class. * * The user of this class will call this function to get an * instance of the class. All other public functions will be * called on this instance * * @param None * @see None * @return An instance of the Cnd_iproute2 class is returned. */ static cnd_iproute2* getInstance ( void ); /** * @brief Creates a custom route in the main table using iproute2 * * The user of this function passes in the name of the network * interface that matches the name already defined in the Android * system. This radio will handle any packets that are sent to * the inputted destination address of a host. Optionally, a user * can pass the gateway address of the device. * * @param destinationAddress The destination address of the * custom entry in the main table that * will be added * @param deviceName The name of the device that will * handle packets to the host * @param gatewayAddress The gateway address of the device * (optional) * @return True if function is successful. * False otherwise. */ bool addCustomEntryInMainTable ( uint8_t *destinationAddress, uint8_t *deviceName, uint8_t *gatewayAddress ); /** * @brief Create a routing table for a network interface using * iproute2 * * The user of this function passes in the name of the network * interface that matches the name already defined in the Android * system. The user also needs to locate the source prefix, and, * optionally, the gateway address assocated with that radio. If * a table is added when no another tables exist, it will * automatically become the default table. * * @param deviceName The name of the device whose table * will be added * @param sourcePrefix The source network prefix or address * that will be routed to the device * (Such as 37.214.21/24 or 10.156.45.1) * @param gatewayAddress The gateway address of the device * (optional) * @return True if function is successful. False * otherwise. */ bool addRoutingTable ( uint8_t *deviceName, uint8_t *sourcePrefix, uint8_t *gatewayAddress ); /** * @brief Deletes the custom route to the inputted destination * address in the main table using iproute2 * * The custom route being deleted should have been added via * addCustomEntryToMainTable() * * @param destinationAddress The destination address of the * custom entry in the main table that * will be removed * @return True if function is successful. * False otherwise. */ bool deleteCustomEntryInMainTable ( uint8_t *destinationAddress ); /** * @brief Deletes all custom routes in the main table that route * through a specific interface name * * The custom routes being deleted should have been added via * addCustomEntryToMainTable() * * @param deviceName The name of the device whose custom * entries in the main table will be * removed * @return True if function is successful. False * otherwise. */ bool deleteDeviceCustomEntriesInMainTable ( uint8_t *deviceName ); /** * @brief Deletes a default entry from the main table. * * @param deviceName The name of the device whose default * entry in the main table will be * deleted * @return True if function is successful. False * otherwise. */ bool deleteDefaultEntryInMainTable ( uint8_t *deviceName ); /** * @brief Deletes a routing table from the system along with the * rule corresponding to that table. * * The table being deleted should have been added via * addRoutingTable() * * @param deviceName The name of the device whose table will be * deleted * @return True if function is successful. False * otherwise. */ bool deleteRoutingTable ( uint8_t *deviceName ); /** * @brief Change the default routing table that is associated * with any source addresses not bound to another table. * * The user of this function passes in the name of the network * interface that matches the name already defined in the Android * system. That device will become the new default. If this radio * is already the default, this function simply returns true. * * @param deviceName The name of the device whose table * will be added * @return True if function is successful. False * otherwise. */ bool replaceDefaultEntryInMainTable ( uint8_t *deviceName, uint8_t *gatewayAddress ); /** * Displays the contents of all routing tables for debugging * purposes. * * @return True if function is successful. False * otherwise. */ bool showAllRoutingTables ( void ); /** * Displays the contents of the routing table associated with * the inputted device name. * * @param deviceName The name of the device to be displayed * @return True if function is successful. False * otherwise. */ bool showRoutingTable ( uint8_t *deviceName ); /** * Displays the rules associated with all tables for debugging * purposes. * * @return True if function is successful. False * otherwise. */ bool showRules ( void ); private: /* constructor */ cnd_iproute2(){}; /* destructor */ ~cnd_iproute2(){}; static cnd_iproute2* instancePtr; }; #endif /* CND_IPROUTE2_H*/