VirtualBox

source: vbox/trunk/src/VBox/NetworkServices/Dhcpd/Config.h@ 71689

Last change on this file since 71689 was 71689, checked in by vboxsync, 7 years ago

NetworkServices/Dhcpd: implement reading config from a file.

  • Property svn:eol-style set to native
  • Property svn:keywords set to Author Date Id Revision
File size: 3.2 KB
Line 
1/* $Id: Config.h 71689 2018-04-05 15:20:32Z vboxsync $ */
2/** @file
3 * DHCP server - server configuration
4 */
5
6/*
7 * Copyright (C) 2017-2018 Oracle Corporation
8 *
9 * This file is part of VirtualBox Open Source Edition (OSE), as
10 * available from http://www.virtualbox.org. This file is free software;
11 * you can redistribute it and/or modify it under the terms of the GNU
12 * General Public License (GPL) as published by the Free Software
13 * Foundation, in version 2 as it comes in the "COPYING" file of the
14 * VirtualBox OSE distribution. VirtualBox OSE is distributed in the
15 * hope that it will be useful, but WITHOUT ANY WARRANTY of any kind.
16 */
17
18#ifndef _DHCPD_CONFIG_H_
19#define _DHCPD_CONFIG_H_
20
21#include <iprt/types.h>
22#include <iprt/net.h>
23#include <iprt/cpp/xml.h>
24
25#include <VBox/intnet.h>
26
27#include <string>
28
29#include "Defs.h"
30#include "DhcpOptions.h"
31#include "ClientId.h"
32
33
34class Config
35{
36 /* XXX: TODO: also store fixed address assignments, etc? */
37 typedef std::map<RTMAC, optmap_t> vmmap_t;
38
39 std::string m_strHome; /* path of ~/.VirtualBox or equivalent */
40
41 std::string m_strNetwork;
42 std::string m_strBaseName; /* m_strNetwork sanitized to be usable in a path component */
43
44 std::string m_strTrunk;
45 INTNETTRUNKTYPE m_enmTrunkType;
46
47 RTMAC m_MacAddress;
48
49 RTNETADDRIPV4 m_IPv4Address;
50 RTNETADDRIPV4 m_IPv4Netmask;
51
52 RTNETADDRIPV4 m_IPv4PoolFirst;
53 RTNETADDRIPV4 m_IPv4PoolLast;
54
55 optmap_t m_GlobalOptions;
56 vmmap_t m_VMMap;
57
58private:
59 Config();
60
61 int init();
62 int homeInit();
63 int logInit();
64 int complete();
65
66public: /* factory methods */
67 static Config *hardcoded(); /* for testing */
68 static Config *create(int argc, char **argv); /* --config */
69 static Config *compat(int argc, char **argv); /* old VBoxNetDHCP flags */
70
71public: /* accessors */
72 const std::string &getHome() const { return m_strHome; }
73
74 const std::string &getNetwork() const { return m_strNetwork; }
75 void setNetwork(const std::string &aStrNetwork);
76
77 const std::string &getBaseName() const { return m_strBaseName; }
78 const std::string &getTrunk() const { return m_strTrunk; }
79 INTNETTRUNKTYPE getTrunkType() const { return m_enmTrunkType; }
80
81 const RTMAC &getMacAddress() const { return m_MacAddress; }
82
83 RTNETADDRIPV4 getIPv4Address() const { return m_IPv4Address; }
84 RTNETADDRIPV4 getIPv4Netmask() const { return m_IPv4Netmask; }
85
86 RTNETADDRIPV4 getIPv4PoolFirst() const { return m_IPv4PoolFirst; }
87 RTNETADDRIPV4 getIPv4PoolLast() const { return m_IPv4PoolLast; }
88
89public:
90 optmap_t getOptions(const OptParameterRequest &reqOpts, const ClientId &id,
91 const OptVendorClassId &vendor = OptVendorClassId()) const;
92
93private:
94 static Config *read(const char *pszFileName);
95 void parseConfig(const xml::ElementNode *root);
96 void parseServer(const xml::ElementNode *server);
97 void parseGlobalOptions(const xml::ElementNode *options);
98 void parseVMConfig(const xml::ElementNode *config);
99 void parseOption(const xml::ElementNode *option, optmap_t &optmap);
100
101 int parseMACAddress(RTMAC &aMac, const RTCString &aStr);
102 int parseClientId(OptClientId &aId, const RTCString &aStr);
103
104 void sanitizeBaseName();
105};
106
107#endif /* _DHCPD_CONFIG_H_ */
Note: See TracBrowser for help on using the repository browser.

© 2024 Oracle Support Privacy / Do Not Sell My Info Terms of Use Trademark Policy Automated Access Etiquette