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