master
cpp 44 lines 1.28 KB
Raw
1 // Copyright (C) Microsoft Corporation. All rights reserved.
2 #include <iostream>
3 #include "Rule.h"
4
5 Rule::Rule(int family, int routingTable, int priority) : family(family), routingTable(routingTable), priority(priority)
6 {
7 }
8
9 Rule::Rule(int family, int routingTable, int priority, const std::optional<Protocol> protocol) :
10 family(family), routingTable(routingTable), priority(priority), protocol(protocol)
11 {
12 }
13
14 Rule::Rule(int family, int routingTable, int priority, const std::string& oif, const std::optional<Protocol> protocol) :
15 family(family), routingTable(routingTable), priority(priority), oif(oif), protocol(protocol)
16 {
17 }
18
19 std::ostream& operator<<(std::ostream& out, const Rule& rule)
20 {
21 out << "priority " << rule.priority << " family " << (rule.family == AF_INET ? "ipv4" : "ipv6") << " ";
22
23 if (rule.sourceAddress)
24 {
25 out << "from " << rule.sourceAddress.value() << " ";
26 }
27
28 if (rule.protocol)
29 {
30 out << "ipproto " << (rule.protocol.value() == Protocol::Tcp ? "tcp" : "udp") << " ";
31 }
32
33 if (!rule.oif.empty())
34 {
35 out << "oif " << rule.oif << " ";
36 }
37
38 if (!rule.iif.empty())
39 {
40 out << "iif " << rule.iif << " ";
41 }
42
43 return out << "lookup table " << rule.routingTable << " ";
44 }