Squid Web Cache
master
Loading...
Searching...
No Matches
NfMarkConfig.cc
Go to the documentation of this file.
1
/*
2
* Copyright (C) 1996-2025 The Squid Software Foundation and contributors
3
*
4
* Squid software is distributed under GPLv2+ license and includes
5
* contributions from numerous individuals and organizations.
6
* Please see the COPYING and CONTRIBUTORS files for details.
7
*/
8
9
#include "
squid.h
"
10
#include "
base/IoManip.h
"
11
#include "
ConfigParser.h
"
12
#include "
ip/NfMarkConfig.h
"
13
#include "
parser/Tokenizer.h
"
14
#include "
sbuf/Stream.h
"
15
16
#include <limits>
17
18
static
nfmark_t
19
getNfmark
(
Parser::Tokenizer
&tokenizer,
const
SBuf
&token)
20
{
21
int64_t
number
;
22
if
(!tokenizer.
int64
(
number
, 0,
false
))
23
throw
TexcHere
(
ToSBuf
(
"NfMarkConfig: invalid value '"
, tokenizer.
buf
(),
"' in '"
, token,
"'"
));
24
25
if
(
number
> std::numeric_limits<nfmark_t>::max())
26
throw
TexcHere
(
ToSBuf
(
"NfMarkConfig: number, "
,
number
,
"in '"
, token,
"' is too big"
));
27
28
return
static_cast<
nfmark_t
>
(
number
);
29
}
30
31
Ip::NfMarkConfig
32
Ip::NfMarkConfig::Parse
(
const
SBuf
&token)
33
{
34
Parser::Tokenizer
tokenizer(token);
35
36
const
nfmark_t
mark
=
getNfmark
(tokenizer, token);
37
const
nfmark_t
mask
= tokenizer.
skip
(
'/'
) ?
getNfmark
(tokenizer, token) : 0xffffffff;
38
39
if
(!tokenizer.
atEnd
())
40
throw
TexcHere
(
ToSBuf
(
"NfMarkConfig: trailing garbage in '"
, token,
"'"
));
41
42
return
Ip::NfMarkConfig
(
mark
,
mask
);
43
}
44
45
nfmark_t
46
Ip::NfMarkConfig::applyToMark
(
nfmark_t
m)
const
47
{
48
return
(m & ~mask) | mark;
49
}
50
51
std::ostream &
52
Ip::operator <<
(std::ostream &os,
const
NfMarkConfig
c)
53
{
54
os <<
asHex
(c.
mark
);
55
56
if
(c.
mask
!= 0xffffffff)
57
os <<
'/'
<<
asHex
(c.
mask
);
58
59
return
os;
60
}
61
ConfigParser.h
IoManip.h
asHex
AsHex< Integer > asHex(const Integer n)
a helper to ease AsHex object creation
Definition
IoManip.h:169
getNfmark
static nfmark_t getNfmark(Parser::Tokenizer &tokenizer, const SBuf &token)
Definition
NfMarkConfig.cc:19
NfMarkConfig.h
TexcHere
#define TexcHere(msg)
legacy convenience macro; it is not difficult to type Here() now
Definition
TextException.h:63
Ip::NfMarkConfig
a netfilter mark/mask pair
Definition
NfMarkConfig.h:23
Ip::NfMarkConfig::mark
nfmark_t mark
Definition
NfMarkConfig.h:43
Ip::NfMarkConfig::Parse
static NfMarkConfig Parse(const SBuf &token)
parses a token and returns an object, expects a "mark[/mask]" format
Definition
NfMarkConfig.cc:32
Ip::NfMarkConfig::applyToMark
nfmark_t applyToMark(nfmark_t m) const
Definition
NfMarkConfig.cc:46
Ip::NfMarkConfig::mask
nfmark_t mask
Definition
NfMarkConfig.h:44
Parser::Tokenizer
Definition
Tokenizer.h:30
Parser::Tokenizer::int64
bool int64(int64_t &result, int base=0, bool allowSign=true, SBuf::size_type limit=SBuf::npos)
Definition
Tokenizer.cc:238
Parser::Tokenizer::buf
SBuf buf() const
yet unparsed data
Definition
Tokenizer.h:35
Parser::Tokenizer::atEnd
bool atEnd() const
whether the end of the buffer has been reached
Definition
Tokenizer.h:41
Parser::Tokenizer::skip
bool skip(const SBuf &tokenToSkip)
Definition
Tokenizer.cc:189
SBuf
Definition
SBuf.h:94
nfmark_t
uint32_t nfmark_t
Definition
forward.h:26
Ip::operator<<
std::ostream & operator<<(std::ostream &os, const std::optional< Address > &optional)
Definition
Xaction.cc:140
Tokenizer.h
Stream.h
ToSBuf
SBuf ToSBuf(Args &&... args)
slowly stream-prints all arguments into a freshly allocated SBuf
Definition
Stream.h:63
squid.h
number
number
Definition
testStatHist.cc:32
squid
src
ip
NfMarkConfig.cc
Generated by
1.9.8