176404edcSAsim Jamshed #ifndef __ADDR_POOL_H_
276404edcSAsim Jamshed #define __ADDR_POOL_H_
376404edcSAsim Jamshed 
476404edcSAsim Jamshed #include <netinet/in.h>
576404edcSAsim Jamshed #include <sys/queue.h>
676404edcSAsim Jamshed 
776404edcSAsim Jamshed /*----------------------------------------------------------------------------*/
876404edcSAsim Jamshed typedef struct addr_pool *addr_pool_t;
976404edcSAsim Jamshed /*----------------------------------------------------------------------------*/
1076404edcSAsim Jamshed /* CreateAddressPool()                                                        */
1176404edcSAsim Jamshed /* Create address pool for given address range.                               */
1276404edcSAsim Jamshed /* addr_base: the base address in network order.                              */
1376404edcSAsim Jamshed /* num_addr: number of addresses to use as source IP                          */
1476404edcSAsim Jamshed /*----------------------------------------------------------------------------*/
1576404edcSAsim Jamshed addr_pool_t
1676404edcSAsim Jamshed CreateAddressPool(in_addr_t addr_base, int num_addr);
1776404edcSAsim Jamshed /*----------------------------------------------------------------------------*/
1876404edcSAsim Jamshed /* CreateAddressPoolPerCore()                                                 */
1976404edcSAsim Jamshed /* Create address pool only for the given core number.                        */
2076404edcSAsim Jamshed /* All addresses and port numbers should be in network order.                 */
2176404edcSAsim Jamshed /*----------------------------------------------------------------------------*/
2276404edcSAsim Jamshed addr_pool_t
2376404edcSAsim Jamshed CreateAddressPoolPerCore(int core, int num_queues,
2476404edcSAsim Jamshed 		in_addr_t saddr_base, int num_addr, in_addr_t daddr, in_port_t dport);
2576404edcSAsim Jamshed /*----------------------------------------------------------------------------*/
2676404edcSAsim Jamshed void
2776404edcSAsim Jamshed DestroyAddressPool(addr_pool_t ap);
2876404edcSAsim Jamshed /*----------------------------------------------------------------------------*/
2976404edcSAsim Jamshed int
3076404edcSAsim Jamshed FetchAddress(addr_pool_t ap, int core, int num_queues,
3176404edcSAsim Jamshed 		const struct sockaddr_in *daddr, struct sockaddr_in *saddr);
3276404edcSAsim Jamshed /*----------------------------------------------------------------------------*/
3376404edcSAsim Jamshed int
34*2efd908dSAsim Jamshed FetchAddressPerCore(addr_pool_t ap, int core, int num_queues,
35*2efd908dSAsim Jamshed 		    const struct sockaddr_in *daddr, struct sockaddr_in *saddr);
36*2efd908dSAsim Jamshed /*----------------------------------------------------------------------------*/
37*2efd908dSAsim Jamshed int
3876404edcSAsim Jamshed FreeAddress(addr_pool_t ap, const struct sockaddr_in *addr);
3976404edcSAsim Jamshed /*----------------------------------------------------------------------------*/
4076404edcSAsim Jamshed 
4176404edcSAsim Jamshed #endif /* __ADDR_POOL_H_ */
42