Project

General

Profile

« Previous | Next » 

Revision 51b682d9

Added by Reid Linnemann over 2 years ago

Add ovpn qinqs to bridges instead of rebuilding them. Fixes #13666

qinq interfaces defined with parent openvpn interfaces are configured late in
rc.bootup, after qinqs for other physical and logical interfaces and bridges are
configured. The resolution to #13225 ensured that these late interfaces were
added to bridges by calling interfaces_bridge_configure() to reconfigure all
bridges interfaces but this had the inadvertent effect of removing all IP
configuration from bridge interfaces, which must be restored via
interface_configure(). This measure was also overly aggressive in destroying all
bridges when few or no openvpn qinqs exist. Since interface_configure() is never
called for these interfaces, they also lack a description at the OS level.

This change:

  • Alters the behavior of openvpn_resync_all() to cycle through all configured
    openvpn interfaces, calling interface_configure() on them.
  • Alters the behavior of interface_configure() to always call
    interface_bridge_add_member() for openvpn and ipsec interfaces, not just
    after platform booting is complete.
  • Alters the behavior of interface_bridge_add_member() to reconfigure either
    the bridge or member interface to the lower of their respective MTUs. gif
    interface MTUs associated with a bridge MTU <= 1500 are not reconfigured
    according to prior precendent.

View differences:

src/etc/inc/interfaces.inc
897 897
	if ($flagsapplied == false) {
898 898
		$mtu = get_interface_mtu($bridgeif);
899 899
		$mtum = get_interface_mtu($interface);
900
		if ($mtu != $mtum && !(substr($interface, 0, 3) == "gif" && $mtu <= 1500)) {
900
		/* Reconfigure the bridge mtu if the new member's MTU is lower, or
901
		 * reconfigure a non-gif interface MTU if the bridge's MTU is lower */
902
		if ($mtu > $mtum) {
903
			pfSense_interface_mtu($bridgeif, $mtum);
904
		} else if ($mtu < $mtum && !(substr($interface, 0, 3) == "gif" && $mtu <= 1500)) {
901 905
			pfSense_interface_mtu($interface, $mtu);
902 906
		}
903 907

  
......
4257 4261
			break;
4258 4262
	}
4259 4263

  
4264
	if (($linkupevent == false) || (substr($realif, 0, 4) == "ovpn") || (substr($realif, 0, 5) == "ipsec")) {
4265
		$bridgetmp = link_interface_to_bridge($interface);
4266
		if (!empty($bridgetmp)) {
4267
			interface_bridge_add_member($bridgetmp, $realif);
4268
		}
4269
	}
4270

  
4260 4271
	if (!platform_booting()) {
4261 4272
		link_interface_to_vips($interface, "update");
4262 4273

  
......
4270 4281
			array_walk($gif, 'interface_gif_configure');
4271 4282
		}
4272 4283

  
4273
		if (($linkupevent == false) || (substr($realif, 0, 4) == "ovpn") || (substr($realif, 0, 5) == "ipsec")) {
4274
			unset($bridgetmp);
4275
			$bridgetmp = link_interface_to_bridge($interface);
4276
			if (!empty($bridgetmp)) {
4277
				interface_bridge_add_member($bridgetmp, $realif);
4278
			}
4279
		}
4280

  
4281 4284
		$grouptmp = link_interface_to_group($interface);
4282 4285
		if (!empty($grouptmp)) {
4283 4286
			array_walk($grouptmp, 'interface_group_add_member');
src/etc/inc/openvpn.inc
1860 1860
		 * see https://redmine.pfsense.org/issues/11662 */
1861 1861
		if (platform_booting()) {
1862 1862
			interfaces_qinq_configure(true);
1863
			/* reconfigure bridges with QinQ interfaces,
1864
			 * see https://redmine.pfsense.org/issues/13225 */
1865
			interfaces_bridge_configure(1);
1863
			/* Configure all qinq interface addresses and add them to their
1864
			 * bridges. See https://redmine.pfsense.org/issues/13225,
1865
			 * https://redmine.pfsense.org/issues/13666 */
1866
			foreach (config_get_path('interfaces', []) as $ifname => $iface) {
1867
				$qinq = interface_is_qinq($iface['if']);
1868
				if ($qinq && strstr($qinq['if'], "ovpn")) {
1869
					interface_configure($ifname);
1870
				}
1871
			}
1866 1872
		}
1867 1873
	}
1868 1874
}

Also available in: Unified diff