diff options
author | Thomas Markwalder <tmark@isc.org> | 2018-11-10 19:20:22 +0100 |
---|---|---|
committer | Thomas Markwalder <tmark@isc.org> | 2018-11-20 19:22:59 +0100 |
commit | 33c86243dc8d9989c729bd5aeae991e202ff396f (patch) | |
tree | f6e270c7db0793a015df9560e6d494ad556690a5 /src/bin/dhcp4/position.hh | |
parent | [#260,!20] Packet queueing is now optional (diff) | |
download | kea-33c86243dc8d9989c729bd5aeae991e202ff396f.tar.xz kea-33c86243dc8d9989c729bd5aeae991e202ff396f.zip |
[#260,!120] Packet queueing is now optional
src/bin/dhcp<4/6>/ctrl_dhcp<4/6>_srv.cc
ControlledDhcpv<4/6>Srv::processConfig() - now calls
IfaceMgr::configureDHCPPacketQueue
src/bin/dhcp<4/6>/dhcp<4/6>_parser.yy
dhpc-queue-control parsing updated to enforce
enable-queue/queue-type rules
src/bin/dhcp<4/6>/tests/config_parser_unittest.cc
TEST_F(Dhcp<4/6>ParserTest, dhcpQueueControl)
TEST_F(Dhcp<4/6>ParserTest, dhcpQueueControlInvalid)
src/lib/dhcp/iface_mgr.*
IfaceMgr
- closeSockets() - now calls stopDHCPReceiver
- openSockets<4/6>() - now calls startDHCPReceiver
- receive<4/6>Indirect() - new function which monitors receiver
thread watch sockets, reads DHCP packets from queue
- receive<4/6>Direct() - new function which monitors and reads DHCP
packets from interface sockets directly
- receive<4/6>() - rewritten to call receive<4/6>Indirect
if receiver thread is running, otherwise it calls receive<4/6>Direct
- configureDHCPPacketQueue() - new function which either enables queuing
by creating a new packet queue, or disables it by destroying the
existing queue
src/lib/dhcp/packet_queue_mgr.h
PacketQueue::destroyPacketQueue() - new function
src/lib/dhcp/packet_queue_mgr<4/6>.cc
PacketQueueMgr<4/6>::PacketQueueMgr<4/6>() - no longer creates a
default packet queue
src/lib/dhcpsrv/cfg_iface.cc
CfgIface::closeSockets() - removed call to stopDHCPReceiver
CfgIface::openSockets() - removed call to startDHCPReceiver
src/lib/dhcpsrv/parsers/dhcp_queue_control_parser.*
DHCPQueueControlParser
- removed unused family_ member
- parse() - added support for enable-queue
src/lib/dhcpsrv/tests/dhcp_queue_control_parser_unittest.cc
- new file
Diffstat (limited to 'src/bin/dhcp4/position.hh')
-rw-r--r-- | src/bin/dhcp4/position.hh | 192 |
1 files changed, 180 insertions, 12 deletions
diff --git a/src/bin/dhcp4/position.hh b/src/bin/dhcp4/position.hh index 4a9a456ce0..c60fabbdf8 100644 --- a/src/bin/dhcp4/position.hh +++ b/src/bin/dhcp4/position.hh @@ -1,12 +1,180 @@ -// Generated 201811201411 -// A Bison parser, made by GNU Bison 3.2.1. - -// Starting with Bison 3.2, this file is useless: the structure it -// used to define is now defined in "location.hh". -// -// To get rid of this file: -// 1. add 'require "3.2"' (or newer) to your grammar file -// 2. remove references to this file from your build system -// 3. if you used to include it, include "location.hh" instead. - -#include "location.hh" +// A Bison parser, made by GNU Bison 3.0.4. + +// Positions for Bison parsers in C++ + +// Copyright (C) 2002-2015 Free Software Foundation, Inc. + +// This program is free software: you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. + +// This program is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. + +// You should have received a copy of the GNU General Public License +// along with this program. If not, see <http://www.gnu.org/licenses/>. + +// As a special exception, you may create a larger work that contains +// part or all of the Bison parser skeleton and distribute that work +// under terms of your choice, so long as that work isn't itself a +// parser generator using the skeleton or a modified version thereof +// as a parser skeleton. Alternatively, if you modify or redistribute +// the parser skeleton itself, you may (at your option) remove this +// special exception, which will cause the skeleton and the resulting +// Bison output files to be licensed under the GNU General Public +// License without this special exception. + +// This special exception was added by the Free Software Foundation in +// version 2.2 of Bison. + +/** + ** \file position.hh + ** Define the isc::dhcp::position class. + */ + +#ifndef YY_PARSER4_POSITION_HH_INCLUDED +# define YY_PARSER4_POSITION_HH_INCLUDED + +# include <algorithm> // std::max +# include <iostream> +# include <string> + +# ifndef YY_NULLPTR +# if defined __cplusplus && 201103L <= __cplusplus +# define YY_NULLPTR nullptr +# else +# define YY_NULLPTR 0 +# endif +# endif + +#line 14 "dhcp4_parser.yy" // location.cc:296 +namespace isc { namespace dhcp { +#line 56 "position.hh" // location.cc:296 + /// Abstract a position. + class position + { + public: + /// Construct a position. + explicit position (std::string* f = YY_NULLPTR, + unsigned int l = 1u, + unsigned int c = 1u) + : filename (f) + , line (l) + , column (c) + { + } + + + /// Initialization. + void initialize (std::string* fn = YY_NULLPTR, + unsigned int l = 1u, + unsigned int c = 1u) + { + filename = fn; + line = l; + column = c; + } + + /** \name Line and Column related manipulators + ** \{ */ + /// (line related) Advance to the COUNT next lines. + void lines (int count = 1) + { + if (count) + { + column = 1u; + line = add_ (line, count, 1); + } + } + + /// (column related) Advance to the COUNT next columns. + void columns (int count = 1) + { + column = add_ (column, count, 1); + } + /** \} */ + + /// File name to which this position refers. + std::string* filename; + /// Current line number. + unsigned int line; + /// Current column number. + unsigned int column; + + private: + /// Compute max(min, lhs+rhs) (provided min <= lhs). + static unsigned int add_ (unsigned int lhs, int rhs, unsigned int min) + { + return (0 < rhs || -static_cast<unsigned int>(rhs) < lhs + ? rhs + lhs + : min); + } + }; + + /// Add \a width columns, in place. + inline position& + operator+= (position& res, int width) + { + res.columns (width); + return res; + } + + /// Add \a width columns. + inline position + operator+ (position res, int width) + { + return res += width; + } + + /// Subtract \a width columns, in place. + inline position& + operator-= (position& res, int width) + { + return res += -width; + } + + /// Subtract \a width columns. + inline position + operator- (position res, int width) + { + return res -= width; + } + + /// Compare two position objects. + inline bool + operator== (const position& pos1, const position& pos2) + { + return (pos1.line == pos2.line + && pos1.column == pos2.column + && (pos1.filename == pos2.filename + || (pos1.filename && pos2.filename + && *pos1.filename == *pos2.filename))); + } + + /// Compare two position objects. + inline bool + operator!= (const position& pos1, const position& pos2) + { + return !(pos1 == pos2); + } + + /** \brief Intercept output stream redirection. + ** \param ostr the destination output stream + ** \param pos a reference to the position to redirect + */ + template <typename YYChar> + inline std::basic_ostream<YYChar>& + operator<< (std::basic_ostream<YYChar>& ostr, const position& pos) + { + if (pos.filename) + ostr << *pos.filename << ':'; + return ostr << pos.line << '.' << pos.column; + } + +#line 14 "dhcp4_parser.yy" // location.cc:296 +} } // isc::dhcp +#line 180 "position.hh" // location.cc:296 +#endif // !YY_PARSER4_POSITION_HH_INCLUDED |