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/stack.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/stack.hh')
-rw-r--r-- | src/bin/dhcp4/stack.hh | 166 |
1 files changed, 157 insertions, 9 deletions
diff --git a/src/bin/dhcp4/stack.hh b/src/bin/dhcp4/stack.hh index 8d96cdf2b7..3dd2a2a393 100644 --- a/src/bin/dhcp4/stack.hh +++ b/src/bin/dhcp4/stack.hh @@ -1,9 +1,157 @@ -// 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 with the parser itself. -// -// 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. +// A Bison parser, made by GNU Bison 3.0.4. + +// Stack handling 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 stack.hh + ** Define the isc::dhcp::stack class. + */ + +#ifndef YY_PARSER4_STACK_HH_INCLUDED +# define YY_PARSER4_STACK_HH_INCLUDED + +# include <vector> + +#line 14 "dhcp4_parser.yy" // stack.hh:132 +namespace isc { namespace dhcp { +#line 46 "stack.hh" // stack.hh:132 + template <class T, class S = std::vector<T> > + class stack + { + public: + // Hide our reversed order. + typedef typename S::reverse_iterator iterator; + typedef typename S::const_reverse_iterator const_iterator; + + stack () + : seq_ () + { + seq_.reserve (200); + } + + stack (unsigned int n) + : seq_ (n) + {} + + inline + T& + operator[] (unsigned int i) + { + return seq_[seq_.size () - 1 - i]; + } + + inline + const T& + operator[] (unsigned int i) const + { + return seq_[seq_.size () - 1 - i]; + } + + /// Steal the contents of \a t. + /// + /// Close to move-semantics. + inline + void + push (T& t) + { + seq_.push_back (T()); + operator[](0).move (t); + } + + inline + void + pop (unsigned int n = 1) + { + for (; n; --n) + seq_.pop_back (); + } + + void + clear () + { + seq_.clear (); + } + + inline + typename S::size_type + size () const + { + return seq_.size (); + } + + inline + const_iterator + begin () const + { + return seq_.rbegin (); + } + + inline + const_iterator + end () const + { + return seq_.rend (); + } + + private: + stack (const stack&); + stack& operator= (const stack&); + /// The wrapped container. + S seq_; + }; + + /// Present a slice of the top of a stack. + template <class T, class S = stack<T> > + class slice + { + public: + slice (const S& stack, unsigned int range) + : stack_ (stack) + , range_ (range) + {} + + inline + const T& + operator [] (unsigned int i) const + { + return stack_[range_ - i]; + } + + private: + const S& stack_; + unsigned int range_; + }; + +#line 14 "dhcp4_parser.yy" // stack.hh:132 +} } // isc::dhcp +#line 156 "stack.hh" // stack.hh:132 + +#endif // !YY_PARSER4_STACK_HH_INCLUDED |