VBoxPortForwardString.h revision 6d73c66200a04223ae56a22ff221ec32193717a5
25cf1a301a396c38e8adf52c15f537b80d2483f7jl/* $Id$ */
25cf1a301a396c38e8adf52c15f537b80d2483f7jl/** @file
25cf1a301a396c38e8adf52c15f537b80d2483f7jl * VBoxPortForwardString
25cf1a301a396c38e8adf52c15f537b80d2483f7jl */
25cf1a301a396c38e8adf52c15f537b80d2483f7jl
25cf1a301a396c38e8adf52c15f537b80d2483f7jl/*
25cf1a301a396c38e8adf52c15f537b80d2483f7jl * Copyright (C) 2009-2010 Oracle Corporation
25cf1a301a396c38e8adf52c15f537b80d2483f7jl *
25cf1a301a396c38e8adf52c15f537b80d2483f7jl * This file is part of VirtualBox Open Source Edition (OSE), as
25cf1a301a396c38e8adf52c15f537b80d2483f7jl * available from http://www.virtualbox.org. This file is free software;
25cf1a301a396c38e8adf52c15f537b80d2483f7jl * you can redistribute it and/or modify it under the terms of the GNU
25cf1a301a396c38e8adf52c15f537b80d2483f7jl * General Public License (GPL) as published by the Free Software
25cf1a301a396c38e8adf52c15f537b80d2483f7jl * Foundation, in version 2 as it comes in the "COPYING" file of the
25cf1a301a396c38e8adf52c15f537b80d2483f7jl * VirtualBox OSE distribution. VirtualBox OSE is distributed in the
25cf1a301a396c38e8adf52c15f537b80d2483f7jl * hope that it will be useful, but WITHOUT ANY WARRANTY of any kind.
25cf1a301a396c38e8adf52c15f537b80d2483f7jl */
25cf1a301a396c38e8adf52c15f537b80d2483f7jl
25cf1a301a396c38e8adf52c15f537b80d2483f7jl#ifndef ___VBoxPortForwardString_h___
25cf1a301a396c38e8adf52c15f537b80d2483f7jl#define ___VBoxPortForwardString_h___
25cf1a301a396c38e8adf52c15f537b80d2483f7jl
25cf1a301a396c38e8adf52c15f537b80d2483f7jl#include <iprt/net.h>
25cf1a301a396c38e8adf52c15f537b80d2483f7jl#include <VBox/intnet.h>
25cf1a301a396c38e8adf52c15f537b80d2483f7jl
25cf1a301a396c38e8adf52c15f537b80d2483f7jlRT_C_DECLS_BEGIN
25cf1a301a396c38e8adf52c15f537b80d2483f7jl
25cf1a301a396c38e8adf52c15f537b80d2483f7jl#ifndef INET6_ADDRSTRLEN
25cf1a301a396c38e8adf52c15f537b80d2483f7jl /* from netinet6/in6.h */
25cf1a301a396c38e8adf52c15f537b80d2483f7jl# define INET6_ADDRSTRLEN 46
25cf1a301a396c38e8adf52c15f537b80d2483f7jl#endif
25cf1a301a396c38e8adf52c15f537b80d2483f7jl
25cf1a301a396c38e8adf52c15f537b80d2483f7jl#define PF_NAMELEN 64
25cf1a301a396c38e8adf52c15f537b80d2483f7jl/*
25cf1a301a396c38e8adf52c15f537b80d2483f7jl * TBD: Here is shared implementation of parsing port-forward string
25cf1a301a396c38e8adf52c15f537b80d2483f7jl * of format:
25cf1a301a396c38e8adf52c15f537b80d2483f7jl * name:[ipv4 or ipv6 address]:host-port:[ipv4 or ipv6 guest addr]:guest port
25cf1a301a396c38e8adf52c15f537b80d2483f7jl *
25cf1a301a396c38e8adf52c15f537b80d2483f7jl * This code supposed to be used in NetService and Frontend and perhaps in corresponding
25cf1a301a396c38e8adf52c15f537b80d2483f7jl * services.
25cf1a301a396c38e8adf52c15f537b80d2483f7jl *
25cf1a301a396c38e8adf52c15f537b80d2483f7jl * Note: ports are in host format.
0b05a701b49058a6d47b581827961c6c39b1071amcwalter */
25cf1a301a396c38e8adf52c15f537b80d2483f7jl
25cf1a301a396c38e8adf52c15f537b80d2483f7jltypedef struct PORTFORWARDRULE
25cf1a301a396c38e8adf52c15f537b80d2483f7jl{
25cf1a301a396c38e8adf52c15f537b80d2483f7jl char aszPfrName[PF_NAMELEN];
25cf1a301a396c38e8adf52c15f537b80d2483f7jl /* true if ipv6 and false otherwise */
25cf1a301a396c38e8adf52c15f537b80d2483f7jl int fPfrIPv6;
/* IPPROTO_{UDP,TCP} */
int iPfrProto;
RTNETADDRU uPfrHostAddr;
char aszPfrHostAddr[INET6_ADDRSTRLEN];
uint16_t u16PfrHostPort;
RTNETADDRU uPfrGuestAddr;
char aszPfrGuestAddr[INET6_ADDRSTRLEN];
uint16_t u16PfrGuestPort;
} PORTFORWARDRULE, *PPORTFORWARDRULE;
int netPfStrToPf(const char *pcszStrPortForward,int fIPv6, PPORTFORWARDRULE pPfr);
RT_C_DECLS_END
#endif