mirror of
https://github.com/apache/cloudstack.git
synced 2025-10-26 08:42:29 +01:00
Merge remote-tracking branch 'origin/4.11' into 4.12
This commit is contained in:
commit
fb555b11ae
@ -858,7 +858,7 @@ class CsForwardingRules(CsDataBag):
|
||||
rule['protocol'],
|
||||
rule['protocol'],
|
||||
public_fwports,
|
||||
hex(int(public_fwinterface[3:]))
|
||||
hex(100 + int(public_fwinterface[3:]))
|
||||
)
|
||||
fw6 = "-A PREROUTING -d %s/32 -i %s -p %s -m %s --dport %s -m state --state NEW -j CONNMARK --save-mark --nfmask 0xffffffff --ctmask 0xffffffff" % \
|
||||
(
|
||||
@ -927,7 +927,7 @@ class CsForwardingRules(CsDataBag):
|
||||
rule["internal_ip"]])
|
||||
self.fw.append(["mangle", "",
|
||||
"-I PREROUTING -s %s/32 -m state --state NEW -j MARK --set-xmark %s/0xffffffff" %
|
||||
(rule["internal_ip"], hex(int(device[len("eth"):])))])
|
||||
(rule["internal_ip"], hex(100 + int(device[len("eth"):])))])
|
||||
self.fw.append(["nat", "front",
|
||||
"-A PREROUTING -d %s/32 -j DNAT --to-destination %s" % (rule["public_ip"], rule["internal_ip"])])
|
||||
self.fw.append(["nat", "front",
|
||||
|
||||
@ -258,7 +258,7 @@ class CsIP:
|
||||
|
||||
def __init__(self, dev, config):
|
||||
self.dev = dev
|
||||
self.dnum = hex(int(dev[3:]))
|
||||
self.dnum = hex(100 + int(dev[3:]))
|
||||
self.iplist = {}
|
||||
self.address = {}
|
||||
self.list()
|
||||
@ -518,12 +518,11 @@ class CsIP:
|
||||
|
||||
if method == "add":
|
||||
if not self.config.is_vpc():
|
||||
# treat the first IP on a interface as special case to set up the routing rules
|
||||
if self.get_type() in ["public"] and (len(self.iplist) == 1):
|
||||
CsHelper.execute("sudo ip route add throw " + self.config.address().dbag['eth0'][0]['network'] + " table " + tableName + " proto static")
|
||||
CsHelper.execute("sudo ip route add throw " + self.config.address().dbag['eth1'][0]['network'] + " table " + tableName + " proto static")
|
||||
if self.get_type() in ["public"]:
|
||||
route.set_route("table %s throw %s proto static" % (tableName, self.config.address().dbag['eth0'][0]['network']))
|
||||
route.set_route("table %s throw %s proto static" % (tableName, self.config.address().dbag['eth1'][0]['network']))
|
||||
|
||||
# add 'defaul via gateway' rule in the device specific routing table
|
||||
# add 'default via gateway' rule in the device specific routing table
|
||||
if "gateway" in self.address and self.address["gateway"] and self.address["gateway"] != "None":
|
||||
route.add_route(self.dev, self.address["gateway"])
|
||||
if "network" in self.address and self.address["network"]:
|
||||
|
||||
@ -351,6 +351,33 @@ class CsRedundant(object):
|
||||
|
||||
interfaces = [interface for interface in self.address.get_interfaces() if interface.is_public()]
|
||||
CsHelper.reconfigure_interfaces(self.cl, interfaces)
|
||||
|
||||
public_devices = list(set([interface.get_device() for interface in interfaces]))
|
||||
if len(public_devices) > 1:
|
||||
# Handle specific failures when multiple public interfaces
|
||||
|
||||
public_devices.sort()
|
||||
|
||||
# Ensure the default route is added, or outgoing traffic from VMs with static NAT on
|
||||
# the subsequent interfaces will go from he wrong IP
|
||||
route = CsRoute()
|
||||
dev = ''
|
||||
for interface in interfaces:
|
||||
if dev == interface.get_device():
|
||||
continue
|
||||
dev = interface.get_device()
|
||||
gateway = interface.get_gateway()
|
||||
if gateway:
|
||||
route.add_route(dev, gateway)
|
||||
|
||||
# The first public interface has a static MAC address between VRs. Subsequent ones don't,
|
||||
# so an ARP announcement is needed on failover
|
||||
for device in public_devices[1:]:
|
||||
logging.info("Sending garp messages for IPs on %s" % device)
|
||||
for interface in interfaces:
|
||||
if interface.get_device() == device:
|
||||
CsHelper.execute("arping -I %s -U %s -c 1" % (device, interface.get_ip()))
|
||||
|
||||
logging.info("Router switched to master mode")
|
||||
|
||||
def _collect_ignore_ips(self):
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user