MCPcopy Create free account
hub / github.com/NetSys/bess / Init

Method Init

core/modules/nat.cc:65–113  ·  view source on GitHub ↗

TODO(torek): move this to set/get runtime config

Source from the content-addressed store, hash-verified

63
64// TODO(torek): move this to set/get runtime config
65CommandResponse NAT::Init(const bess::pb::NATArg &arg) {
66 // Check before committing any changes.
67 for (const auto &address_range : arg.ext_addrs()) {
68 for (const auto &range : address_range.port_ranges()) {
69 if (range.begin() >= range.end() || range.begin() > UINT16_MAX ||
70 range.end() > UINT16_MAX) {
71 return CommandFailure(EINVAL, "Port range for address %s is malformed",
72 address_range.ext_addr().c_str());
73 }
74 }
75 }
76
77 for (const auto &address_range : arg.ext_addrs()) {
78 auto ext_addr = address_range.ext_addr();
79 be32_t addr;
80
81 bool ret = bess::utils::ParseIpv4Address(ext_addr, &addr);
82 if (!ret) {
83 return CommandFailure(EINVAL, "invalid IP address %s", ext_addr.c_str());
84 }
85
86 ext_addrs_.push_back(addr);
87 // Add a port range list
88 std::vector<PortRange> port_list;
89 if (address_range.port_ranges().size() == 0) {
90 port_list.emplace_back(PortRange{
91 .begin = 0u, .end = 65535u, .suspended = false,
92 });
93 }
94 for (const auto &range : address_range.port_ranges()) {
95 port_list.emplace_back(PortRange{
96 .begin = (uint16_t)range.begin(),
97 .end = (uint16_t)range.end(),
98 // Control plane gets to decide if the port range can be used.
99 .suspended = range.suspended()});
100 }
101 port_ranges_.push_back(port_list);
102 }
103
104 if (ext_addrs_.empty()) {
105 return CommandFailure(EINVAL,
106 "at least one external IP address must be specified");
107 }
108
109 // Sort so that GetInitialArg is predictable and consistent.
110 std::sort(ext_addrs_.begin(), ext_addrs_.end());
111
112 return CommandSuccess();
113}
114
115CommandResponse NAT::GetInitialArg(const bess::pb::EmptyArg &) {
116 bess::pb::NATArg resp;

Callers

nothing calls this directly

Calls 7

CommandFailureFunction · 0.85
ParseIpv4AddressFunction · 0.85
CommandSuccessFunction · 0.85
sizeMethod · 0.80
emptyMethod · 0.80
beginMethod · 0.45
endMethod · 0.45

Tested by

no test coverage detected