]> git.saurik.com Git - apple/configd.git/commitdiff
configd-1061.0.2.tar.gz macos-1015 v1061.0.2
authorApple <opensource@apple.com>
Fri, 31 Jan 2020 02:19:03 +0000 (02:19 +0000)
committerApple <opensource@apple.com>
Fri, 31 Jan 2020 02:19:03 +0000 (02:19 +0000)
198 files changed:
EventFactory/EventFactory.h
EventFactory/EventFactory.m
EventFactory/IPConfigurationParser.h [new file with mode: 0644]
EventFactory/IPConfigurationParser.m [new file with mode: 0644]
EventFactory/IPMonitorParser.h [new file with mode: 0644]
EventFactory/IPMonitorParser.m [new file with mode: 0644]
EventFactory/Info.plist
EventFactory/InterfaceNamerParser.h [new file with mode: 0644]
EventFactory/InterfaceNamerParser.m [new file with mode: 0644]
EventFactory/KernelEventMonitorParser.h [new file with mode: 0644]
EventFactory/KernelEventMonitorParser.m [new file with mode: 0644]
EventFactory/PreferencesMonitorParser.h [new file with mode: 0644]
EventFactory/PreferencesMonitorParser.m [new file with mode: 0644]
EventFactory/SCLogParser.h [new file with mode: 0644]
EventFactory/SCLogParser.m [new file with mode: 0644]
EventFactory/StateDumpParser.h [new file with mode: 0644]
EventFactory/StateDumpParser.m [new file with mode: 0644]
Plugins/IPMonitor/Info-EmbeddedSimulator.plist
Plugins/IPMonitor/Info.plist
Plugins/IPMonitor/Makefile
Plugins/IPMonitor/agent-monitor.m
Plugins/IPMonitor/configAgent.m
Plugins/IPMonitor/dns-configuration.c
Plugins/IPMonitor/dns-configuration.h
Plugins/IPMonitor/ip_plugin.c
Plugins/IPMonitor/ip_plugin.h
Plugins/IPMonitor/nat64-configuration.c
Plugins/IPMonitor/nat64-configuration.h
Plugins/IPMonitor/routelist_output_filter.sh
Plugins/IPMonitor/serviceIDNumber.c [new file with mode: 0644]
Plugins/IPMonitor/serviceIDNumber.h [new file with mode: 0644]
Plugins/IPMonitor/set-hostname.c
Plugins/IPMonitor/smb-configuration.c
Plugins/IPMonitor/test_ipv4_routelist_reference.txt
Plugins/IPMonitor/test_ipv6_routelist_reference.txt
Plugins/InterfaceNamer/Info.plist
Plugins/InterfaceNamer/ifnamer.c
Plugins/KernelEventMonitor/Info.plist
Plugins/KernelEventMonitor/ev_dlil.c
Plugins/KernelEventMonitor/ev_dlil.h
Plugins/KernelEventMonitor/ev_extra.m
Plugins/KernelEventMonitor/ev_ipv4.c
Plugins/KernelEventMonitor/ev_ipv6.c
Plugins/KernelEventMonitor/eventmon.c
Plugins/KernelEventMonitor/eventmon.h
Plugins/LinkConfiguration/Info.plist
Plugins/LinkConfiguration/linkconfig.c
Plugins/PreferencesMonitor/Info.plist
Plugins/PreferencesMonitor/prefsmon.c
Plugins/QoSMarking/Info-Embedded.plist
Plugins/QoSMarking/Info.plist
Plugins/QoSMarking/qos-marking.m
Plugins/SimulatorSupport/Info.plist
Plugins/SimulatorSupport/simulator_support.c
Plugins/common/IPMonitorControlPrefs.c
Plugins/common/InterfaceNamerControlPrefs.c
Plugins/common/cache.c [deleted file]
Plugins/common/cache.h [deleted file]
Plugins/common/plugin_shared.h
SCMonitor/English.lproj/Localizable.strings [deleted file]
SCMonitor/Info.plist
SCMonitor/en.lproj/Localizable.strings [new file with mode: 0644]
SCMonitor/monitor.c
SCTest-ObjC/test-objC.m
SCTest-Swift/main.swift
SystemConfiguration.fproj/AppWorkaround.plist [deleted file]
SystemConfiguration.fproj/BondConfiguration.c
SystemConfiguration.fproj/BridgeConfiguration.c
SystemConfiguration.fproj/CaptiveNetwork.c
SystemConfiguration.fproj/CaptiveNetwork.h
SystemConfiguration.fproj/English.lproj/Localizable.strings [deleted file]
SystemConfiguration.fproj/English.lproj/NetworkInterface.strings [deleted file]
SystemConfiguration.fproj/Info-Embedded.plist
SystemConfiguration.fproj/Info.plist
SystemConfiguration.fproj/LinkConfiguration.c
SystemConfiguration.fproj/Modules/SystemConfiguration.modulemap [new file with mode: 0644]
SystemConfiguration.fproj/Modules/SystemConfiguration.private.modulemap [new file with mode: 0644]
SystemConfiguration.fproj/Modules/sc_modules.modulemap [deleted file]
SystemConfiguration.fproj/NetworkConfiguration.plist
SystemConfiguration.fproj/SCD.c
SystemConfiguration.fproj/SCDAdd.c
SystemConfiguration.fproj/SCDCache.c [new file with mode: 0644]
SystemConfiguration.fproj/SCDGet.c
SystemConfiguration.fproj/SCDList.c
SystemConfiguration.fproj/SCDNotifierAdd.c
SystemConfiguration.fproj/SCDNotifierCancel.c
SystemConfiguration.fproj/SCDNotifierGetChanges.c
SystemConfiguration.fproj/SCDNotifierInformViaCallback.c
SystemConfiguration.fproj/SCDNotifierInformViaFD.c
SystemConfiguration.fproj/SCDNotifierInformViaSignal.c [deleted file]
SystemConfiguration.fproj/SCDNotifierRemove.c
SystemConfiguration.fproj/SCDNotifierSetKeys.c
SystemConfiguration.fproj/SCDNotifierWait.c
SystemConfiguration.fproj/SCDNotify.c
SystemConfiguration.fproj/SCDOpen.c
SystemConfiguration.fproj/SCDPlugin.c
SystemConfiguration.fproj/SCDPlugin.h
SystemConfiguration.fproj/SCDPrivate.c
SystemConfiguration.fproj/SCDRemove.c
SystemConfiguration.fproj/SCDSet.c
SystemConfiguration.fproj/SCDSnapshot.c
SystemConfiguration.fproj/SCDynamicStoreInternal.h
SystemConfiguration.fproj/SCDynamicStorePrivate.h
SystemConfiguration.fproj/SCNetwork.c
SystemConfiguration.fproj/SCNetworkConfiguration.h
SystemConfiguration.fproj/SCNetworkConfigurationInternal.c
SystemConfiguration.fproj/SCNetworkConfigurationInternal.h
SystemConfiguration.fproj/SCNetworkConfigurationPrivate.h
SystemConfiguration.fproj/SCNetworkConnection.c
SystemConfiguration.fproj/SCNetworkConnectionInternal.h
SystemConfiguration.fproj/SCNetworkConnectionPrivate.c
SystemConfiguration.fproj/SCNetworkInterface.c
SystemConfiguration.fproj/SCNetworkMigration.c
SystemConfiguration.fproj/SCNetworkProtocol.c
SystemConfiguration.fproj/SCNetworkReachability.c
SystemConfiguration.fproj/SCNetworkReachabilityInternal.h
SystemConfiguration.fproj/SCNetworkService.c
SystemConfiguration.fproj/SCNetworkSet.c
SystemConfiguration.fproj/SCNetworkSignature.c
SystemConfiguration.fproj/SCP.c
SystemConfiguration.fproj/SCPCommit.c
SystemConfiguration.fproj/SCPLock.c
SystemConfiguration.fproj/SCPOpen.c
SystemConfiguration.fproj/SCPUnlock.c
SystemConfiguration.fproj/SCPreferencesInternal.h
SystemConfiguration.fproj/SCPreferencesKeychainPrivate.h
SystemConfiguration.fproj/SCPrivate.h
SystemConfiguration.fproj/SCSchemaDefinitions.c
SystemConfiguration.fproj/SCSchemaDefinitions.h
SystemConfiguration.fproj/SCSchemaDefinitionsPrivate.h
SystemConfiguration.fproj/SNHelper.c
SystemConfiguration.fproj/SystemConfiguration.h
SystemConfiguration.fproj/SystemConfigurationInternal.h
SystemConfiguration.fproj/VLANConfiguration.c
SystemConfiguration.fproj/VPNAppLayer.c
SystemConfiguration.fproj/config.defs
SystemConfiguration.fproj/en.lproj/Localizable.strings [new file with mode: 0644]
SystemConfiguration.fproj/en.lproj/NetworkInterface.strings [new file with mode: 0644]
SystemConfiguration.fproj/genSCPreferences.c
SystemConfiguration.fproj/helper/SCHelper_client.c
SystemConfiguration.fproj/helper/SCHelper_server.c
SystemConfiguration.fproj/restore-temporary-headers
SystemConfiguration.fproj/scprefs_observer.c
configd.tproj/_SCD.c
configd.tproj/_SCD.h
configd.tproj/_configadd.c
configd.tproj/_configclose.c
configd.tproj/_configopen.c
configd.tproj/_configset.c
configd.tproj/_configunlock.c
configd.tproj/_notifycancel.c
configd.tproj/_notifychanges.c
configd.tproj/_notifyviafd.c
configd.tproj/_notifyviaport.c
configd.tproj/_notifyviasignal.c [deleted file]
configd.tproj/_snapshot.c
configd.tproj/configd.h
configd.tproj/configd.m
configd.tproj/configd_server.c
configd.tproj/configd_server.h
configd.tproj/entitlements-ios.plist
configd.tproj/notify_server.c [deleted file]
configd.tproj/notify_server.h [deleted file]
configd.tproj/plugin_support.c
configd.tproj/session.c
configd.tproj/session.h
configd.xcodeproj/project.pbxproj
dnsinfo/dnsinfo_copy.c
dnsinfo/dnsinfo_create.c
dnsinfo/dnsinfo_create.h
dnsinfo/dnsinfo_flatfile.c
dnsinfo/dnsinfo_internal.h
dnsinfo/dnsinfo_server.c
get-mobility-info
get-network-info
libSystemConfiguration/libSystemConfiguration_client.c
libSystemConfiguration/libSystemConfiguration_internal.h
libSystemConfiguration/libSystemConfiguration_server.c
logging/liblog_SystemConfiguration_internal.h
nwi/network_information.c
nwi/network_information.h
nwi/network_information_server.c
nwi/network_state_information_logging.h
nwi/network_state_information_priv.c
nwi/network_state_information_priv.h
scselect.tproj/scselect.c
scutil.tproj/cache.c
scutil.tproj/cache.h
scutil.tproj/commands.c
scutil.tproj/entitlements.plist [new file with mode: 0644]
scutil.tproj/nc.c
scutil.tproj/net_interface.c
scutil.tproj/net_protocol.c
scutil.tproj/notifications.c
scutil.tproj/notifications.h
scutil.tproj/scutil.h
scutil.tproj/session.c
scutil.tproj/tests.c

index 5ccf3b97138d7ea11e46bff55f1bed1d466dbd6b..3fdbb6e52c82827c88c7bd57aaa14406e6a825ae 100644 (file)
@@ -1,10 +1,32 @@
-//
-//  EventFactory.h
-//  SystemConfigurationNetworkEventFactory
-//
-//  Created by Allan Nathanson on 11/15/17.
-//
-//
+/*
+ * Copyright (c) 2017-2018 Apple Inc. All rights reserved.
+ *
+ * @APPLE_LICENSE_HEADER_START@
+ *
+ * This file contains Original Code and/or Modifications of Original Code
+ * as defined in and that are subject to the Apple Public Source License
+ * Version 2.0 (the 'License'). You may not use this file except in
+ * compliance with the License. Please obtain a copy of the License at
+ * http://www.opensource.apple.com/apsl/ and read it before using this
+ * file.
+ *
+ * The Original Code and all software distributed under the License are
+ * distributed on an 'AS IS' basis, WITHOUT WARRANTY OF ANY KIND, EITHER
+ * EXPRESS OR IMPLIED, AND APPLE HEREBY DISCLAIMS ALL SUCH WARRANTIES,
+ * INCLUDING WITHOUT LIMITATION, ANY WARRANTIES OF MERCHANTABILITY,
+ * FITNESS FOR A PARTICULAR PURPOSE, QUIET ENJOYMENT OR NON-INFRINGEMENT.
+ * Please see the License for the specific language governing rights and
+ * limitations under the License.
+ *
+ * @APPLE_LICENSE_HEADER_END@
+ */
+
+/*
+ * Modification History
+ *
+ * November 15, 2017   Allan Nathanson <ajn@apple.com>
+ * - initial revision
+ */
 
 #import <EventFactory/EventFactory.h>
 
index 1886b5dbd00755037b93f887ea0e2a745eff959f..d1eb8e680b52501a276173a713ef95d6a6101f3a 100644 (file)
@@ -1,18 +1,47 @@
-//
-//  EventFactory.m
-//  SystemConfigurationNetworkEventFactory
-//
-//  Created by Allan Nathanson on 11/15/17.
-//
-//
+/*
+ * Copyright (c) 2017-2018 Apple Inc. All rights reserved.
+ *
+ * @APPLE_LICENSE_HEADER_START@
+ *
+ * This file contains Original Code and/or Modifications of Original Code
+ * as defined in and that are subject to the Apple Public Source License
+ * Version 2.0 (the 'License'). You may not use this file except in
+ * compliance with the License. Please obtain a copy of the License at
+ * http://www.opensource.apple.com/apsl/ and read it before using this
+ * file.
+ *
+ * The Original Code and all software distributed under the License are
+ * distributed on an 'AS IS' basis, WITHOUT WARRANTY OF ANY KIND, EITHER
+ * EXPRESS OR IMPLIED, AND APPLE HEREBY DISCLAIMS ALL SUCH WARRANTIES,
+ * INCLUDING WITHOUT LIMITATION, ANY WARRANTIES OF MERCHANTABILITY,
+ * FITNESS FOR A PARTICULAR PURPOSE, QUIET ENJOYMENT OR NON-INFRINGEMENT.
+ * Please see the License for the specific language governing rights and
+ * limitations under the License.
+ *
+ * @APPLE_LICENSE_HEADER_END@
+ */
+
+/*
+ * Modification History
+ *
+ * November 15, 2017   Allan Nathanson <ajn@apple.com>
+ * - initial revision
+ */
 
-#import "EventFactory.h"
 #import <os/log.h>
+#import "EventFactory.h"
+#import "SCLogParser.h"
+#import "InterfaceNamerParser.h"
+#import "IPMonitorParser.h"
+#import "KernelEventMonitorParser.h"
+#import "PreferencesMonitorParser.h"
+#import "StateDumpParser.h"
+#import "IPConfigurationParser.h"
 
 #pragma mark -
 #pragma mark Logging
 
-static os_log_t
+os_log_t
 __log_Spectacles(void)
 {
        static os_log_t log     = NULL;
@@ -24,201 +53,75 @@ __log_Spectacles(void)
        return log;
 }
 
-#define specs_log_err(format, ...)     os_log_error(__log_Spectacles(), format, ##__VA_ARGS__)
-#define specs_log_notice(format, ...)  os_log      (__log_Spectacles(), format, ##__VA_ARGS__)
-#define specs_log_info(format, ...)    os_log_info (__log_Spectacles(), format, ##__VA_ARGS__)
-#define specs_log_debug(format, ...)   os_log_debug(__log_Spectacles(), format, ##__VA_ARGS__)
-
-#pragma mark -
-#pragma mark Matching
-
-#define REMatched(re_matches, args)            \
-       ((re_matches != nil) && (re_matches.count == 1) && (re_matches[0].numberOfRanges == (args + 1)))
-
-#define REMatchRange(re_matches, arg)  \
-       [re_matches[0] rangeAtIndex:arg]
-
 #pragma mark -
 #pragma mark SystemConfiguratioin Network Event Factory
 
 @interface EventFactory ()
-
-@property (readonly, nonatomic) NSRegularExpression *kevExpressionInterfaceAttach;
-@property (readonly, nonatomic) NSRegularExpression *kevExpressionLink;
-@property (readonly, nonatomic) NSRegularExpression *kevExpressionLinkQuality;
-
+@property NSDictionary<NSString *, SCLogParser *> *parserMap;
 @end
 
 @implementation EventFactory
 
-- (instancetype)init
+- (void)startWithLogSourceAttributes:(__unused NSDictionary<NSString *, NSObject *> *)attributes
 {
-       self = [super init];
-       if (self) {
-               NSError *expressionError;
-
-               expressionError = nil;
-               _kevExpressionInterfaceAttach = [[NSRegularExpression alloc] initWithPattern:@"Process interface (attach|detach): (\\w+)" options:0 error:&expressionError];
-               if (expressionError != nil) {
-                       specs_log_info("Failed to create a regular expression: %@", expressionError);
-               }
-
-               expressionError = nil;
-               _kevExpressionLink = [[NSRegularExpression alloc] initWithPattern:@"Process interface link (down|up): (\\w+)" options:0 error:&expressionError];
-               if (expressionError != nil) {
-                       specs_log_info("Failed to create a regular expression: %@", expressionError);
-               }
-
-               expressionError = nil;
-               _kevExpressionLinkQuality = [[NSRegularExpression alloc] initWithPattern:@"Process interface quality: (\\w+) \\(q=([-\\d]+)\\)" options:0 error:&expressionError];
-               if (expressionError != nil) {
-                       specs_log_info("Failed to create a regular expression: %@", expressionError);
-               }
-       }
+       NSMutableDictionary<NSString *, SCLogParser *> *newParserMap = [[NSMutableDictionary alloc] init];
+       SCLogParser *parser;
 
-       return self;
-}
+       parser = [[InterfaceNamerParser alloc] init];
+       newParserMap[parser.category] = parser;
 
-- (void)startWithLogSourceAttributes:(NSDictionary<NSString *, NSObject *> *)attributes
-{
-       //
-       // Prepare for parsing logs
-       //
-       specs_log_info("Event factory is starting with attributes: %@", attributes);
+       parser = [[IPConfigurationParser alloc] init];
+       newParserMap[parser.category] = parser;
+
+       parser = [[IPMonitorParser alloc] init];
+       newParserMap[parser.category] = parser;
+
+       parser = [[KernelEventMonitorParser alloc] init];
+       newParserMap[parser.category] = parser;
+
+       parser = [[PreferencesMonitorParser alloc] init];
+       newParserMap[parser.category] = parser;
+
+       parser = [[StateDumpParser alloc] init];
+       newParserMap[parser.category] = parser;
+
+       _parserMap = [[NSDictionary alloc] initWithDictionary:newParserMap];
 }
 
 - (void)handleLogEvent:(EFLogEvent *)logEvent completionHandler:(void (^)(NSArray<EFEvent *> * _Nullable))completionHandler
 {
-       NSString                                        *category;
-       NSString                                        *message;
-       EFNetworkControlPathEvent       *newNetworkEvent        = nil;
-
-       message = logEvent.eventMessage;
-       if (message == nil) {
-               return;
+       NSString *category = nil;
+       if ([logEvent.eventType isEqualToString:@"stateEvent"]) {
+               category = @"StateDump";
+               logEvent.subsystem = @"com.apple.SystemConfiguration";
+               logEvent.category = category;
+       } else if ([logEvent.subsystem isEqualToString:@"com.apple.IPConfiguration"]) {
+               logEvent.category = @"IPConfiguration";
        }
 
-       //
-       // Parse logEvent and continue constructing SpectaclesNetworkEvent objects
-       //
-       // Note: if one or more NetworkEvent objects are complete, send them to the
-       // app in the completion handler block.
-       //
-
-
-       category = logEvent.category;
-       if ([category isEqualToString:@"InterfaceNamer"]) {
-
-               do {
-               } while (false);
-
-               specs_log_debug("Skipped [%@] message: %@", category, message);
-
-       } else if ([category isEqualToString:@"IPMonitor"]) {
-
-               do {
-               } while (false);
-
-               specs_log_debug("Skipped [%@] message: %@", category, message);
-
-       } else if ([category isEqualToString:@"KernelEventMonitor"]) {
-
-               do {
-                       NSArray<NSTextCheckingResult *> *matches;
-                       NSRange                                                 range   = NSMakeRange(0, message.length);
-
-                       //
-                       // interface attach/detach
-                       //
-                       matches = [_kevExpressionInterfaceAttach matchesInString:message
-                                                                                                                        options:NSMatchingReportProgress
-                                                                                                                          range:range];
-                       if (REMatched(matches, 2)) {
-                               NSString        *event;
-                               NSString        *interface;
-
-                               interface = [message substringWithRange:REMatchRange(matches, 2)];
-                               event     = [message substringWithRange:REMatchRange(matches, 1)];
-                               specs_log_debug("interface attach/detach: %@ --> %@", interface, event);
-
-                               newNetworkEvent = [[EFNetworkControlPathEvent alloc] initWithLogEvent:logEvent subsystemIdentifier:[[NSData alloc] init]];
-                               newNetworkEvent.interfaceBSDName = interface;
-                               newNetworkEvent.interfaceStatus = [event isEqualToString:@"attach"] ? @"interface attached" : @"interface detached";
-                               break;
-                       }
-
-                       //
-                       // interface link up/down
-                       //
-                       matches = [_kevExpressionLink matchesInString:message
-                                                                                                 options:NSMatchingReportProgress
-                                                                                                       range:range];
-                       if (REMatched(matches, 2)) {
-                               NSString        *event;
-                               NSString        *interface;
-
-                               interface = [message substringWithRange:REMatchRange(matches, 2)];
-                               event     = [message substringWithRange:REMatchRange(matches, 1)];
-                               specs_log_debug("link change: %@ --> %@", interface, event);
-
-                               newNetworkEvent = [[EFNetworkControlPathEvent alloc] initWithLogEvent:logEvent subsystemIdentifier:[[NSData alloc] init]];
-                               newNetworkEvent.interfaceBSDName = interface;
-                               newNetworkEvent.interfaceStatus = [event isEqualToString:@"up"] ? @"link up" : @"link down";
-                               break;
-                       }
-
-                       //
-                       // interface link quality
-                       //
-                       matches = [_kevExpressionLinkQuality matchesInString:message
-                                                                                                                options:NSMatchingReportProgress
-                                                                                                                  range:range];
-                       if (REMatched(matches, 2)) {
-                               NSString        *interface;
-                               NSString        *quality;
-
-                               interface = [message substringWithRange:REMatchRange(matches, 1)];
-                               quality   = [message substringWithRange:REMatchRange(matches, 2)];
-                               specs_log_debug("link quality: %@ --> %@", interface, quality);
-
-                               newNetworkEvent = [[EFNetworkControlPathEvent alloc] initWithLogEvent:logEvent subsystemIdentifier:[[NSData alloc] init]];
-                               newNetworkEvent.interfaceBSDName = interface;
-                               newNetworkEvent.interfaceStatus = [NSString stringWithFormat:@"link quality = %@", quality];
-                               break;
-                       }
-
-                       specs_log_debug("Skipped [%@] message: %@", category, message);
-               } while (false);
-
-       } else if ([category isEqualToString:@"PreferencesMonitor"]) {
-
-                       do {
-                       } while (false);
-
-                       specs_log_debug("Skipped [%@] message: %@", category, message);
-
-       } else {
-               // if we have no handler for this category
-               specs_log_debug("Skipped [%@] message: %@", category, message);
+       if (logEvent.category.length == 0) {
+               specs_log_debug("Skipped message without a category: %@", logEvent.eventMessage);
+               completionHandler(nil);
+               return;
        }
 
-       if (newNetworkEvent != nil) {
-               completionHandler(@[ newNetworkEvent ]);
-       } else {
+       SCLogParser *parser = _parserMap[logEvent.category];
+       if (parser == nil) {
+               specs_log_debug("Skipped message with an unknown category (%@): %@", logEvent.category, logEvent.eventMessage);
                completionHandler(nil);
+               return;
        }
+
+       NSArray<EFEvent *> *completeEvents = [parser.eventParser parseLogEventIntoMultipleEvents:logEvent];
+       completionHandler(completeEvents);
 }
 
 - (void)finishWithCompletionHandler:(void (^)(NSArray<EFEvent *> * _Nullable))completionHandler
 {
-       //
-       // Clean up
-       //
-       // Note: if one or more SpectaclesNetworkEvent objects are in the process of
-       // being built, return them in the completion handler block.
-       //
        specs_log_notice("Event factory is finishing");
        completionHandler(nil);
 }
 
 @end
+
+
diff --git a/EventFactory/IPConfigurationParser.h b/EventFactory/IPConfigurationParser.h
new file mode 100644 (file)
index 0000000..0dc0a28
--- /dev/null
@@ -0,0 +1,27 @@
+/*
+ * Copyright (c) 2018 Apple Inc. All rights reserved.
+ *
+ * @APPLE_LICENSE_HEADER_START@
+ *
+ * This file contains Original Code and/or Modifications of Original Code
+ * as defined in and that are subject to the Apple Public Source License
+ * Version 2.0 (the 'License'). You may not use this file except in
+ * compliance with the License. Please obtain a copy of the License at
+ * http://www.opensource.apple.com/apsl/ and read it before using this
+ * file.
+ *
+ * The Original Code and all software distributed under the License are
+ * distributed on an 'AS IS' basis, WITHOUT WARRANTY OF ANY KIND, EITHER
+ * EXPRESS OR IMPLIED, AND APPLE HEREBY DISCLAIMS ALL SUCH WARRANTIES,
+ * INCLUDING WITHOUT LIMITATION, ANY WARRANTIES OF MERCHANTABILITY,
+ * FITNESS FOR A PARTICULAR PURPOSE, QUIET ENJOYMENT OR NON-INFRINGEMENT.
+ * Please see the License for the specific language governing rights and
+ * limitations under the License.
+ *
+ * @APPLE_LICENSE_HEADER_END@
+ */
+
+#import "SCLogParser.h"
+
+@interface IPConfigurationParser : SCLogParser
+@end
diff --git a/EventFactory/IPConfigurationParser.m b/EventFactory/IPConfigurationParser.m
new file mode 100644 (file)
index 0000000..32717a9
--- /dev/null
@@ -0,0 +1,105 @@
+/*
+ * Copyright (c) 2018 Apple Inc. All rights reserved.
+ *
+ * @APPLE_LICENSE_HEADER_START@
+ *
+ * This file contains Original Code and/or Modifications of Original Code
+ * as defined in and that are subject to the Apple Public Source License
+ * Version 2.0 (the 'License'). You may not use this file except in
+ * compliance with the License. Please obtain a copy of the License at
+ * http://www.opensource.apple.com/apsl/ and read it before using this
+ * file.
+ *
+ * The Original Code and all software distributed under the License are
+ * distributed on an 'AS IS' basis, WITHOUT WARRANTY OF ANY KIND, EITHER
+ * EXPRESS OR IMPLIED, AND APPLE HEREBY DISCLAIMS ALL SUCH WARRANTIES,
+ * INCLUDING WITHOUT LIMITATION, ANY WARRANTIES OF MERCHANTABILITY,
+ * FITNESS FOR A PARTICULAR PURPOSE, QUIET ENJOYMENT OR NON-INFRINGEMENT.
+ * Please see the License for the specific language governing rights and
+ * limitations under the License.
+ *
+ * @APPLE_LICENSE_HEADER_END@
+ */
+
+#import <Foundation/Foundation.h>
+#import <EventFactory/EventFactory.h>
+#import "IPConfigurationParser.h"
+
+#define TokenLinkStatus "linkStatus"
+#define TokenSSID "ssid"
+#define TokenMessage "message"
+#define TokenAddress "address"
+#define TokenComponentName "component"
+
+@implementation IPConfigurationParser
+
+- (instancetype)init
+{
+       NSArray<EFLogEventMatch *> *matches = @[
+               [[EFLogEventMatch alloc] initWithPattern:@"(?<"TokenInterfaceName">\\w+) link (?<"TokenLinkStatus">ACTIVE|INACTIVE)"
+                                        newEventHandler:
+                ^EFEvent *(NSTextCheckingResult *matchResult, EFLogEvent *logEvent, BOOL *isComplete) {
+                        NSString *statusString = [logEvent substringForCaptureGroup:@TokenLinkStatus inMatchResult:matchResult];
+                        EFNetworkControlPathEvent *newEvent = [self createInterfaceEventWithLogEvent:logEvent matchResult:matchResult];
+                        if ([statusString isEqualToString:@"ACTIVE"]) {
+                                newEvent.link = @"link up";
+                        } else {
+                                newEvent.link = @"link down";
+                        }
+                        *isComplete = YES;
+                        return newEvent;
+                }],
+               [[EFLogEventMatch alloc] initWithPattern:@"(?<"TokenInterfaceName">\\w+): SSID (?<"TokenSSID">\\S+) BSSID"
+                                        newEventHandler:
+                ^EFEvent *(NSTextCheckingResult *matchResult, EFLogEvent *logEvent, BOOL *isComplete) {
+                        NSString *ssid = [logEvent substringForCaptureGroup:@TokenSSID inMatchResult:matchResult];
+                        EFNetworkControlPathEvent *newEvent = [self createInterfaceEventWithLogEvent:logEvent matchResult:matchResult];
+                        EFSubEvent *subEvent = [[EFSubEvent alloc] initWithTimestamp:logEvent.date textDescription:ssid];
+                        [newEvent addSubEvent:subEvent];
+                        *isComplete = YES;
+                        return newEvent;
+                }],
+               [[EFLogEventMatch alloc] initWithPattern:@"\\[(?<"TokenComponentName">\\w+ )?(?<"TokenInterfaceName">\\w+)\\] (?<"TokenMessage">(?:Transmit|Receive) \\d+ byte packet xid \\w+ (?:to|from) .*)"
+                                        newEventHandler:
+                ^EFEvent *(NSTextCheckingResult *matchResult, EFLogEvent *logEvent, BOOL *isComplete) {
+                        NSString *message = [logEvent substringForCaptureGroup:@TokenMessage inMatchResult:matchResult];
+                        NSString *component = [logEvent substringForCaptureGroup:@TokenComponentName inMatchResult:matchResult];
+                        EFNetworkControlPathEvent *newEvent = [self createInterfaceEventWithLogEvent:logEvent matchResult:matchResult];
+                        NSString *description = [[NSString alloc] initWithFormat:@"%@ %@", component, message];
+                        EFSubEvent *subEvent = [[EFSubEvent alloc] initWithTimestamp:logEvent.date textDescription:description];
+                        [newEvent addSubEvent:subEvent];
+                        *isComplete = YES;
+                        return newEvent;
+                }],
+               [[EFLogEventMatch alloc] initWithPattern:@"\\w+ (?<"TokenInterfaceName">\\w+): setting (?<"TokenAddress">\\S+) netmask \\S+ broadcast \\S+"
+                                        newEventHandler:
+                ^EFEvent *(NSTextCheckingResult *matchResult, EFLogEvent *logEvent, BOOL *isComplete) {
+                        *isComplete = YES;
+                        NSString *addressString = [logEvent substringForCaptureGroup:@TokenAddress inMatchResult:matchResult];
+                        if (addressString.length > 0) {
+                                EFNetworkControlPathEvent *newEvent = [self createInterfaceEventWithLogEvent:logEvent matchResult:matchResult];
+                                [self addAddress:addressString toInterfaceEvent:newEvent];
+                                return newEvent;
+                        }
+                        return nil;
+                }],
+               [[EFLogEventMatch alloc] initWithPattern:@"\\w+ (?<"TokenInterfaceName">\\w+): removing (?<"TokenAddress">.+)"
+                                        newEventHandler:
+                ^EFEvent *(NSTextCheckingResult *matchResult, EFLogEvent *logEvent, BOOL *isComplete) {
+                        *isComplete = YES;
+                        NSString *addressString = [logEvent substringForCaptureGroup:@TokenAddress inMatchResult:matchResult];
+                        if (addressString.length > 0) {
+                                EFNetworkControlPathEvent *newEvent = [self createInterfaceEventWithLogEvent:logEvent matchResult:matchResult];
+                                if ([self removeAddress:addressString fromInterfaceEvent:newEvent]) {
+                                        return newEvent;
+                                }
+                        }
+                        return nil;
+                }]
+       ];
+
+       EFLogEventParser *parser = [[EFLogEventParser alloc] initWithMatches:matches];
+       return [super initWithCategory:@"IPConfiguration" eventParser:parser];
+}
+
+@end
diff --git a/EventFactory/IPMonitorParser.h b/EventFactory/IPMonitorParser.h
new file mode 100644 (file)
index 0000000..4a31210
--- /dev/null
@@ -0,0 +1,27 @@
+/*
+ * Copyright (c) 2018 Apple Inc. All rights reserved.
+ *
+ * @APPLE_LICENSE_HEADER_START@
+ *
+ * This file contains Original Code and/or Modifications of Original Code
+ * as defined in and that are subject to the Apple Public Source License
+ * Version 2.0 (the 'License'). You may not use this file except in
+ * compliance with the License. Please obtain a copy of the License at
+ * http://www.opensource.apple.com/apsl/ and read it before using this
+ * file.
+ *
+ * The Original Code and all software distributed under the License are
+ * distributed on an 'AS IS' basis, WITHOUT WARRANTY OF ANY KIND, EITHER
+ * EXPRESS OR IMPLIED, AND APPLE HEREBY DISCLAIMS ALL SUCH WARRANTIES,
+ * INCLUDING WITHOUT LIMITATION, ANY WARRANTIES OF MERCHANTABILITY,
+ * FITNESS FOR A PARTICULAR PURPOSE, QUIET ENJOYMENT OR NON-INFRINGEMENT.
+ * Please see the License for the specific language governing rights and
+ * limitations under the License.
+ *
+ * @APPLE_LICENSE_HEADER_END@
+ */
+
+#import "SCLogParser.h"
+
+@interface IPMonitorParser: SCLogParser
+@end
diff --git a/EventFactory/IPMonitorParser.m b/EventFactory/IPMonitorParser.m
new file mode 100644 (file)
index 0000000..ecc1151
--- /dev/null
@@ -0,0 +1,148 @@
+/*
+ * Copyright (c) 2018 Apple Inc. All rights reserved.
+ *
+ * @APPLE_LICENSE_HEADER_START@
+ *
+ * This file contains Original Code and/or Modifications of Original Code
+ * as defined in and that are subject to the Apple Public Source License
+ * Version 2.0 (the 'License'). You may not use this file except in
+ * compliance with the License. Please obtain a copy of the License at
+ * http://www.opensource.apple.com/apsl/ and read it before using this
+ * file.
+ *
+ * The Original Code and all software distributed under the License are
+ * distributed on an 'AS IS' basis, WITHOUT WARRANTY OF ANY KIND, EITHER
+ * EXPRESS OR IMPLIED, AND APPLE HEREBY DISCLAIMS ALL SUCH WARRANTIES,
+ * INCLUDING WITHOUT LIMITATION, ANY WARRANTIES OF MERCHANTABILITY,
+ * FITNESS FOR A PARTICULAR PURPOSE, QUIET ENJOYMENT OR NON-INFRINGEMENT.
+ * Please see the License for the specific language governing rights and
+ * limitations under the License.
+ *
+ * @APPLE_LICENSE_HEADER_END@
+ */
+
+#import <Foundation/Foundation.h>
+#import <EventFactory/EventFactory.h>
+
+#import "IPMonitorParser.h"
+
+#define TokenInterfaceNameV6 "interfaceNameV6"
+#define TokenAddressAction "addressAction"
+#define TokenAddressAction6 "addressAction6"
+#define TokenAddress "address"
+#define TokenAddress6 "address6"
+#define TokenServiceID "serviceID"
+#define TokenV4Changes "v4Changes"
+#define TokenV6Changes "v6Changes"
+
+@interface IPMonitorParser ()
+@property (readonly, nonatomic) NSRegularExpression *netChangeRegex;
+@end
+
+@implementation IPMonitorParser
+
+- (instancetype)init
+{
+       NSError *regexError = nil;
+       _netChangeRegex = [[NSRegularExpression alloc] initWithPattern:@"(?<"TokenInterfaceName">\\w+)(?<"TokenAddressAction">[\\+\\-\\!\\/\\\\]?)(:(?<"TokenAddress">[:.0-9a-f]+))?" options:0 error:&regexError];
+       if (_netChangeRegex == nil) {
+               specs_log_err("Failed to create the network change regex: %@", regexError);
+               return nil;
+       }
+
+       NSArray<EFLogEventMatch *> *matches = @[
+               [[EFLogEventMatch alloc] initWithPattern:@"\\d+. (?<"TokenInterfaceName">\\w+) serviceID=(?<"TokenServiceID">[-\\w]+) addr=(?<"TokenAddress">) rank=\\w+"
+                                        newEventHandler:
+                ^EFEvent *(NSTextCheckingResult *matchResult, EFLogEvent *logEvent, BOOL *isComplete) {
+                        *isComplete = YES;
+                        EFNetworkControlPathEvent *newEvent = nil;
+                        NSString *serviceID = [logEvent substringForCaptureGroup:@TokenServiceID inMatchResult:matchResult];
+                        NSString *addressString = [logEvent substringForCaptureGroup:@TokenAddress inMatchResult:matchResult];
+                        if (serviceID != nil && addressString != nil) {
+                                newEvent = [self createInterfaceEventWithLogEvent:logEvent matchResult:matchResult];
+                                if (newEvent != nil) {
+                                        newEvent.serviceID = serviceID;
+                                        [self addAddress:addressString toInterfaceEvent:newEvent];
+                                }
+                        }
+                        return newEvent;
+                }],
+               [[EFLogEventMatch alloc] initWithPattern:@"network changed:( v4\\((?<"TokenV4Changes">[^\\)]+)\\))?( v6\\((?<"TokenV6Changes">[^\\)]+)\\))?"
+                                multipleNewEventHandler:
+                ^NSArray<EFEvent *> *(NSTextCheckingResult *matchResult, EFLogEvent *logEvent) {
+                        NSMutableDictionary<NSString *, EFNetworkControlPathEvent *> *newEventsMap = nil;
+                        NSArray<NSString *> *tokens = @[ @TokenV4Changes, @TokenV6Changes ];
+                        for (NSString *token in tokens) {
+                                BOOL isIPv4 = [token isEqualToString:@TokenV4Changes];
+                                NSString *changes = [logEvent substringForCaptureGroup:token inMatchResult:matchResult];
+                                if (changes == nil) {
+                                        continue;
+                                }
+                                NSArray<NSTextCheckingResult *> *matches = [self.netChangeRegex matchesInString:changes options:0 range:NSMakeRange(0, changes.length)];
+                                BOOL isPrimary = YES;
+                                for (NSTextCheckingResult *match in matches) {
+                                        NSString *interfaceName = [self substringOfString:changes forCaptureGroup:@TokenInterfaceName inMatchResult:match];
+                                        NSString *addressAction = [self substringOfString:changes forCaptureGroup:@TokenAddressAction inMatchResult:match];
+                                        NSString *address = [self substringOfString:changes forCaptureGroup:@TokenAddress inMatchResult:match];
+
+                                        if (interfaceName == nil || address.length == 0) {
+                                                continue;
+                                        }
+
+                                        EFNetworkControlPathEvent *event = newEventsMap[interfaceName];
+                                        if (event == nil) {
+                                                event = [self createInterfaceEventWithLogEvent:logEvent interfaceName:interfaceName];
+                                                if (newEventsMap == nil) {
+                                                        newEventsMap = [[NSMutableDictionary alloc] init];
+                                                }
+                                                newEventsMap[interfaceName] = event;
+                                        }
+
+                                        if (addressAction.length > 0 && [addressAction isEqualToString:@"-"]) {
+                                                if (isPrimary) {
+                                                        if (isIPv4) {
+                                                                event.primaryStateIPv4 = EFPrimaryStateNotPrimary;
+                                                        } else {
+                                                                event.primaryStateIPv6 = EFPrimaryStateNotPrimary;
+                                                        }
+                                                }
+                                                [self removeAddress:address fromInterfaceEvent:event];
+                                        } else {
+                                                if (isPrimary) {
+                                                        if (isIPv4) {
+                                                                event.primaryStateIPv4 = EFPrimaryStatePrimary;
+                                                        } else {
+                                                                event.primaryStateIPv6 = EFPrimaryStatePrimary;
+                                                        }
+                                                        for (NSString *otherInterfaceName in SCLogParser.interfaceMap) {
+                                                                if ([otherInterfaceName isEqualToString:interfaceName]) {
+                                                                        continue;
+                                                                }
+                                                                EFNetworkControlPathEvent *otherEvent = newEventsMap[otherInterfaceName];
+                                                                if (otherEvent == nil) {
+                                                                        otherEvent = [self createInterfaceEventWithLogEvent:logEvent interfaceName:otherInterfaceName];
+                                                                        if (newEventsMap == nil) {
+                                                                                newEventsMap = [[NSMutableDictionary alloc] init];
+                                                                        }
+                                                                        newEventsMap[otherInterfaceName] = otherEvent;
+                                                                }
+                                                                if (isIPv4) {
+                                                                        otherEvent.primaryStateIPv4 = EFPrimaryStateNotPrimary;
+                                                                } else {
+                                                                        otherEvent.primaryStateIPv6 = EFPrimaryStateNotPrimary;
+                                                                }
+                                                        }
+                                                        isPrimary = NO;
+                                                }
+                                                [self addAddress:address toInterfaceEvent:event];
+                                        }
+                                }
+                        }
+                        return newEventsMap.allValues;
+                }],
+       ];
+       EFLogEventParser *parser = [[EFLogEventParser alloc] initWithMatches:matches];
+       return [super initWithCategory:@"IPMonitor" eventParser:parser];
+}
+
+@end
index 8978e660c6ad523f0ea4cabf4f18e9640153ec9f..b76c3291497d2bd7c5bdcf97877e502f01b1df9d 100644 (file)
        <key>CFBundlePackageType</key>
        <string>BNDL</string>
        <key>CFBundleShortVersionString</key>
-       <string>1.0</string>
+       <string>1.19</string>
        <key>CFBundleVersion</key>
        <string>1</string>
-       <key>LSMinimumSystemVersion</key>
-       <string>$(MACOSX_DEPLOYMENT_TARGET)</string>
-       <key>NSHumanReadableCopyright</key>
-       <string>Copyright Â© 2017 Apple Inc. All rights reserved.</string>
        <key>NSPrincipalClass</key>
        <string>EventFactory</string>
        <key>LogEventPredicate</key>
-       <string>subsystem == &quot;com.apple.SystemConfiguration&quot;</string>
+       <string>subsystem == &quot;com.apple.SystemConfiguration&quot; || (processImagePath contains &quot;configd&quot; &amp;&amp; eventType == &quot;stateEvent&quot;) || subsystem == &quot;com.apple.IPConfiguration&quot;</string>
 </dict>
 </plist>
diff --git a/EventFactory/InterfaceNamerParser.h b/EventFactory/InterfaceNamerParser.h
new file mode 100644 (file)
index 0000000..ae15baf
--- /dev/null
@@ -0,0 +1,27 @@
+/*
+ * Copyright (c) 2018 Apple Inc. All rights reserved.
+ *
+ * @APPLE_LICENSE_HEADER_START@
+ *
+ * This file contains Original Code and/or Modifications of Original Code
+ * as defined in and that are subject to the Apple Public Source License
+ * Version 2.0 (the 'License'). You may not use this file except in
+ * compliance with the License. Please obtain a copy of the License at
+ * http://www.opensource.apple.com/apsl/ and read it before using this
+ * file.
+ *
+ * The Original Code and all software distributed under the License are
+ * distributed on an 'AS IS' basis, WITHOUT WARRANTY OF ANY KIND, EITHER
+ * EXPRESS OR IMPLIED, AND APPLE HEREBY DISCLAIMS ALL SUCH WARRANTIES,
+ * INCLUDING WITHOUT LIMITATION, ANY WARRANTIES OF MERCHANTABILITY,
+ * FITNESS FOR A PARTICULAR PURPOSE, QUIET ENJOYMENT OR NON-INFRINGEMENT.
+ * Please see the License for the specific language governing rights and
+ * limitations under the License.
+ *
+ * @APPLE_LICENSE_HEADER_END@
+ */
+
+#import "SCLogParser.h"
+
+@interface InterfaceNamerParser: SCLogParser
+@end
diff --git a/EventFactory/InterfaceNamerParser.m b/EventFactory/InterfaceNamerParser.m
new file mode 100644 (file)
index 0000000..d68b6c7
--- /dev/null
@@ -0,0 +1,38 @@
+/*
+ * Copyright (c) 2018 Apple Inc. All rights reserved.
+ *
+ * @APPLE_LICENSE_HEADER_START@
+ *
+ * This file contains Original Code and/or Modifications of Original Code
+ * as defined in and that are subject to the Apple Public Source License
+ * Version 2.0 (the 'License'). You may not use this file except in
+ * compliance with the License. Please obtain a copy of the License at
+ * http://www.opensource.apple.com/apsl/ and read it before using this
+ * file.
+ *
+ * The Original Code and all software distributed under the License are
+ * distributed on an 'AS IS' basis, WITHOUT WARRANTY OF ANY KIND, EITHER
+ * EXPRESS OR IMPLIED, AND APPLE HEREBY DISCLAIMS ALL SUCH WARRANTIES,
+ * INCLUDING WITHOUT LIMITATION, ANY WARRANTIES OF MERCHANTABILITY,
+ * FITNESS FOR A PARTICULAR PURPOSE, QUIET ENJOYMENT OR NON-INFRINGEMENT.
+ * Please see the License for the specific language governing rights and
+ * limitations under the License.
+ *
+ * @APPLE_LICENSE_HEADER_END@
+ */
+
+#import <Foundation/Foundation.h>
+#import <EventFactory/EventFactory.h>
+
+#import "InterfaceNamerParser.h"
+
+@implementation InterfaceNamerParser
+
+- (instancetype)init
+{
+       NSArray<EFLogEventMatch *> *matches = @[];
+       EFLogEventParser *parser = [[EFLogEventParser alloc] initWithMatches:matches];
+       return [super initWithCategory:@"InterfaceNamer" eventParser:parser];
+}
+
+@end
diff --git a/EventFactory/KernelEventMonitorParser.h b/EventFactory/KernelEventMonitorParser.h
new file mode 100644 (file)
index 0000000..7fa79ca
--- /dev/null
@@ -0,0 +1,28 @@
+/*
+ * Copyright (c) 2018 Apple Inc. All rights reserved.
+ *
+ * @APPLE_LICENSE_HEADER_START@
+ *
+ * This file contains Original Code and/or Modifications of Original Code
+ * as defined in and that are subject to the Apple Public Source License
+ * Version 2.0 (the 'License'). You may not use this file except in
+ * compliance with the License. Please obtain a copy of the License at
+ * http://www.opensource.apple.com/apsl/ and read it before using this
+ * file.
+ *
+ * The Original Code and all software distributed under the License are
+ * distributed on an 'AS IS' basis, WITHOUT WARRANTY OF ANY KIND, EITHER
+ * EXPRESS OR IMPLIED, AND APPLE HEREBY DISCLAIMS ALL SUCH WARRANTIES,
+ * INCLUDING WITHOUT LIMITATION, ANY WARRANTIES OF MERCHANTABILITY,
+ * FITNESS FOR A PARTICULAR PURPOSE, QUIET ENJOYMENT OR NON-INFRINGEMENT.
+ * Please see the License for the specific language governing rights and
+ * limitations under the License.
+ *
+ * @APPLE_LICENSE_HEADER_END@
+ */
+
+#import "SCLogParser.h"
+
+@interface KernelEventMonitorParser: SCLogParser
+@end
+
diff --git a/EventFactory/KernelEventMonitorParser.m b/EventFactory/KernelEventMonitorParser.m
new file mode 100644 (file)
index 0000000..3b856a5
--- /dev/null
@@ -0,0 +1,91 @@
+/*
+ * Copyright (c) 2018 Apple Inc. All rights reserved.
+ *
+ * @APPLE_LICENSE_HEADER_START@
+ *
+ * This file contains Original Code and/or Modifications of Original Code
+ * as defined in and that are subject to the Apple Public Source License
+ * Version 2.0 (the 'License'). You may not use this file except in
+ * compliance with the License. Please obtain a copy of the License at
+ * http://www.opensource.apple.com/apsl/ and read it before using this
+ * file.
+ *
+ * The Original Code and all software distributed under the License are
+ * distributed on an 'AS IS' basis, WITHOUT WARRANTY OF ANY KIND, EITHER
+ * EXPRESS OR IMPLIED, AND APPLE HEREBY DISCLAIMS ALL SUCH WARRANTIES,
+ * INCLUDING WITHOUT LIMITATION, ANY WARRANTIES OF MERCHANTABILITY,
+ * FITNESS FOR A PARTICULAR PURPOSE, QUIET ENJOYMENT OR NON-INFRINGEMENT.
+ * Please see the License for the specific language governing rights and
+ * limitations under the License.
+ *
+ * @APPLE_LICENSE_HEADER_END@
+ */
+
+#import <Foundation/Foundation.h>
+#import <EventFactory/EventFactory.h>
+
+#import "KernelEventMonitorParser.h"
+
+#define TokenStatus "status"
+#define TokenLinkStatus "linkStatus"
+#define TokenLinkQuality "linkQuality"
+
+@implementation KernelEventMonitorParser
+
+- (instancetype)init
+{
+       NSArray<EFLogEventMatch *> *matches = @[
+               [[EFLogEventMatch alloc] initWithPattern:@"Process interface (?<"TokenStatus">attach|detach): (?<"TokenInterfaceName">\\w+)"
+                                        newEventHandler:
+                ^EFEvent *(NSTextCheckingResult *matchResult, EFLogEvent *logEvent, BOOL *isComplete) {
+                        *isComplete = YES;
+                        EFNetworkControlPathEvent *newEvent = nil;
+                        NSString *statusString = [logEvent substringForCaptureGroup:@TokenStatus inMatchResult:matchResult];
+                        if (statusString != nil) {
+                                newEvent = [self createInterfaceEventWithLogEvent:logEvent matchResult:matchResult];
+                                if (newEvent != nil) {
+                                       newEvent.interfaceStatus = statusString;
+                                }
+                        }
+                        return newEvent;
+                }],
+               [[EFLogEventMatch alloc] initWithPattern:@"Process interface link (?<"TokenLinkStatus">down|up): (?<"TokenInterfaceName">\\w+)"
+                                        newEventHandler:
+                ^EFEvent *(NSTextCheckingResult *matchResult, EFLogEvent *logEvent, BOOL *isComplete) {
+                        *isComplete = YES;
+                        EFNetworkControlPathEvent *newEvent = nil;
+                        NSString *linkStatusString = [logEvent substringForCaptureGroup:@TokenLinkStatus inMatchResult:matchResult];
+                        if (linkStatusString != nil) {
+                                newEvent = [self createInterfaceEventWithLogEvent:logEvent matchResult:matchResult];
+                                if (newEvent != nil) {
+                                        if ([linkStatusString isEqualToString:@"up"]) {
+                                                newEvent.link = @"link up";
+                                        } else if ([linkStatusString isEqualToString:@"down"]) {
+                                                newEvent.link = @"link down";
+                                        } else {
+                                                newEvent.link = linkStatusString;
+                                        }
+                                }
+                        }
+                        return newEvent;
+                }],
+               [[EFLogEventMatch alloc] initWithPattern:@"Process interface quality: (?<"TokenInterfaceName">\\w+) \\(q=(?<"TokenLinkQuality">[-\\d]+)\\)"
+                                        newEventHandler:
+                ^EFEvent * _Nullable(NSTextCheckingResult * _Nonnull matchResult, EFLogEvent * _Nonnull logEvent, BOOL * _Nonnull isComplete) {
+                        *isComplete = YES;
+                        EFNetworkControlPathEvent *newEvent = nil;
+                        NSString *qualityString = [logEvent substringForCaptureGroup:@TokenLinkQuality inMatchResult:matchResult];
+                        if (qualityString != nil) {
+                                newEvent = [self createInterfaceEventWithLogEvent:logEvent matchResult:matchResult];
+                                if (newEvent != nil) {
+                                       newEvent.linkQuality = qualityString.integerValue;
+                                }
+                        }
+                        return newEvent;
+                }],
+       ];
+       EFLogEventParser *parser = [[EFLogEventParser alloc] initWithMatches:matches];
+       return [super initWithCategory:@"KernelEventMonitor" eventParser:parser];
+}
+
+@end
diff --git a/EventFactory/PreferencesMonitorParser.h b/EventFactory/PreferencesMonitorParser.h
new file mode 100644 (file)
index 0000000..bd4205d
--- /dev/null
@@ -0,0 +1,27 @@
+/*
+ * Copyright (c) 2018 Apple Inc. All rights reserved.
+ *
+ * @APPLE_LICENSE_HEADER_START@
+ *
+ * This file contains Original Code and/or Modifications of Original Code
+ * as defined in and that are subject to the Apple Public Source License
+ * Version 2.0 (the 'License'). You may not use this file except in
+ * compliance with the License. Please obtain a copy of the License at
+ * http://www.opensource.apple.com/apsl/ and read it before using this
+ * file.
+ *
+ * The Original Code and all software distributed under the License are
+ * distributed on an 'AS IS' basis, WITHOUT WARRANTY OF ANY KIND, EITHER
+ * EXPRESS OR IMPLIED, AND APPLE HEREBY DISCLAIMS ALL SUCH WARRANTIES,
+ * INCLUDING WITHOUT LIMITATION, ANY WARRANTIES OF MERCHANTABILITY,
+ * FITNESS FOR A PARTICULAR PURPOSE, QUIET ENJOYMENT OR NON-INFRINGEMENT.
+ * Please see the License for the specific language governing rights and
+ * limitations under the License.
+ *
+ * @APPLE_LICENSE_HEADER_END@
+ */
+
+#import "SCLogParser.h"
+
+@interface PreferencesMonitorParser: SCLogParser
+@end
diff --git a/EventFactory/PreferencesMonitorParser.m b/EventFactory/PreferencesMonitorParser.m
new file mode 100644 (file)
index 0000000..8b10acd
--- /dev/null
@@ -0,0 +1,38 @@
+/*
+ * Copyright (c) 2018 Apple Inc. All rights reserved.
+ *
+ * @APPLE_LICENSE_HEADER_START@
+ *
+ * This file contains Original Code and/or Modifications of Original Code
+ * as defined in and that are subject to the Apple Public Source License
+ * Version 2.0 (the 'License'). You may not use this file except in
+ * compliance with the License. Please obtain a copy of the License at
+ * http://www.opensource.apple.com/apsl/ and read it before using this
+ * file.
+ *
+ * The Original Code and all software distributed under the License are
+ * distributed on an 'AS IS' basis, WITHOUT WARRANTY OF ANY KIND, EITHER
+ * EXPRESS OR IMPLIED, AND APPLE HEREBY DISCLAIMS ALL SUCH WARRANTIES,
+ * INCLUDING WITHOUT LIMITATION, ANY WARRANTIES OF MERCHANTABILITY,
+ * FITNESS FOR A PARTICULAR PURPOSE, QUIET ENJOYMENT OR NON-INFRINGEMENT.
+ * Please see the License for the specific language governing rights and
+ * limitations under the License.
+ *
+ * @APPLE_LICENSE_HEADER_END@
+ */
+
+#import <Foundation/Foundation.h>
+#import <EventFactory/EventFactory.h>
+
+#import "PreferencesMonitorParser.h"
+
+@implementation PreferencesMonitorParser
+
+- (instancetype)init
+{
+       NSArray<EFLogEventMatch *> *matches = @[];
+       EFLogEventParser *parser = [[EFLogEventParser alloc] initWithMatches:matches];
+       return [super initWithCategory:@"PreferencesMonitor" eventParser:parser];
+}
+
+@end
diff --git a/EventFactory/SCLogParser.h b/EventFactory/SCLogParser.h
new file mode 100644 (file)
index 0000000..099def9
--- /dev/null
@@ -0,0 +1,50 @@
+/*
+ * Copyright (c) 2018 Apple Inc. All rights reserved.
+ *
+ * @APPLE_LICENSE_HEADER_START@
+ *
+ * This file contains Original Code and/or Modifications of Original Code
+ * as defined in and that are subject to the Apple Public Source License
+ * Version 2.0 (the 'License'). You may not use this file except in
+ * compliance with the License. Please obtain a copy of the License at
+ * http://www.opensource.apple.com/apsl/ and read it before using this
+ * file.
+ *
+ * The Original Code and all software distributed under the License are
+ * distributed on an 'AS IS' basis, WITHOUT WARRANTY OF ANY KIND, EITHER
+ * EXPRESS OR IMPLIED, AND APPLE HEREBY DISCLAIMS ALL SUCH WARRANTIES,
+ * INCLUDING WITHOUT LIMITATION, ANY WARRANTIES OF MERCHANTABILITY,
+ * FITNESS FOR A PARTICULAR PURPOSE, QUIET ENJOYMENT OR NON-INFRINGEMENT.
+ * Please see the License for the specific language governing rights and
+ * limitations under the License.
+ *
+ * @APPLE_LICENSE_HEADER_END@
+ */
+
+#import <os/log.h>
+
+@class EFLogEventParser;
+
+os_log_t __log_Spectacles(void);
+#define specs_log_err(format, ...)     os_log_error(__log_Spectacles(), format, ##__VA_ARGS__)
+#define specs_log_notice(format, ...)  os_log      (__log_Spectacles(), format, ##__VA_ARGS__)
+#define specs_log_info(format, ...)    os_log_info (__log_Spectacles(), format, ##__VA_ARGS__)
+#define specs_log_debug(format, ...)   os_log_debug(__log_Spectacles(), format, ##__VA_ARGS__)
+
+#define TokenInterfaceName "ifname"
+
+@interface SCLogParser: NSObject
+- (instancetype)initWithCategory:(NSString *)category eventParser:(EFLogEventParser *)eventParser;
+- (NSData *)createSubsystemIdentifier;
+- (NSArray<NSString *> *)addUniqueString:(NSString *)newString toArray:(NSArray<NSString *> *)array;
+- (NSArray<NSString *> *)addUniqueStrings:(NSArray<NSString *> *)strings toArray:(NSArray<NSString *> *)array;
+- (EFNetworkControlPathEvent *)createInterfaceEventWithLogEvent:(EFLogEvent *)logEvent matchResult:(NSTextCheckingResult *)matchResult;
+- (EFNetworkControlPathEvent *)createInterfaceEventWithLogEvent:(EFLogEvent *)logEvent interfaceName:(NSString *)interfaceName;
+- (void)addAddress:(NSString *)addressString toInterfaceEvent:(EFNetworkControlPathEvent *)event;
+- (BOOL)removeAddress:(NSString *)addressString fromInterfaceEvent:(EFNetworkControlPathEvent *)event;
+- (NSString *)substringOfString:(NSString *)matchedString forCaptureGroup:(NSString *)groupName inMatchResult:(NSTextCheckingResult *)result;
+- (sa_family_t)getAddressFamilyOfAddress:(NSString *)addressString;
+@property (readonly) EFLogEventParser *eventParser;
+@property (readonly) NSString *category;
+@property (class, readonly) NSMutableDictionary<NSString *, NSArray<NSString *> *> *interfaceMap;
+@end
diff --git a/EventFactory/SCLogParser.m b/EventFactory/SCLogParser.m
new file mode 100644 (file)
index 0000000..17bcf59
--- /dev/null
@@ -0,0 +1,178 @@
+/*
+ * Copyright (c) 2018 Apple Inc. All rights reserved.
+ *
+ * @APPLE_LICENSE_HEADER_START@
+ *
+ * This file contains Original Code and/or Modifications of Original Code
+ * as defined in and that are subject to the Apple Public Source License
+ * Version 2.0 (the 'License'). You may not use this file except in
+ * compliance with the License. Please obtain a copy of the License at
+ * http://www.opensource.apple.com/apsl/ and read it before using this
+ * file.
+ *
+ * The Original Code and all software distributed under the License are
+ * distributed on an 'AS IS' basis, WITHOUT WARRANTY OF ANY KIND, EITHER
+ * EXPRESS OR IMPLIED, AND APPLE HEREBY DISCLAIMS ALL SUCH WARRANTIES,
+ * INCLUDING WITHOUT LIMITATION, ANY WARRANTIES OF MERCHANTABILITY,
+ * FITNESS FOR A PARTICULAR PURPOSE, QUIET ENJOYMENT OR NON-INFRINGEMENT.
+ * Please see the License for the specific language governing rights and
+ * limitations under the License.
+ *
+ * @APPLE_LICENSE_HEADER_END@
+ */
+
+#import <Foundation/Foundation.h>
+#import <EventFactory/EventFactory.h>
+#import <arpa/inet.h>
+
+#import "SCLogParser.h"
+
+@interface SCLogParser ()
+@property uint64_t nextEventCounter;
+@end
+
+@implementation SCLogParser
+
+- (instancetype)initWithCategory:(NSString *)category eventParser:(EFLogEventParser *)eventParser
+{
+       self = [super init];
+       if (self) {
+               _category = category;
+               _eventParser = eventParser;
+               _nextEventCounter = 1;
+       }
+       return self;
+}
+
++ (NSMutableDictionary<NSString *, NSArray<NSString *> *> *)interfaceMap
+{
+       static NSMutableDictionary<NSString *, NSArray<NSString *> *> *_interfaceMap = nil;
+       static dispatch_once_t onceToken;
+       dispatch_once(&onceToken, ^{
+               _interfaceMap = [[NSMutableDictionary alloc] init];
+       });
+       return _interfaceMap;
+}
+
+- (NSData *)createSubsystemIdentifier
+{
+       NSString *identifierString = [[NSString alloc] initWithFormat:@"%@.%llu", _category, _nextEventCounter];
+       _nextEventCounter++;
+       const char *utf8String = identifierString.UTF8String;
+       return [[NSData alloc] initWithBytes:utf8String length:strlen(utf8String)];
+}
+
+- (NSArray<NSString *> *)addUniqueString:(NSString *)newString toArray:(NSArray<NSString *> *)array
+{
+       if (array.count > 0) {
+               NSInteger index = [array indexOfObject:newString];
+               return (index == NSNotFound ? [array arrayByAddingObject:newString] : array);
+       } else {
+               return @[ newString ];
+       }
+}
+
+- (NSArray<NSString *> *)addUniqueStrings:(NSArray<NSString *> *)strings toArray:(NSArray<NSString *> *)array
+{
+       if (array == nil) {
+               return strings;
+       }
+
+       NSMutableArray<NSString *> *uniqueStrings = [[NSMutableArray alloc] init];
+       for (NSString *string in strings) {
+               NSInteger index = [array indexOfObject:string];
+               if (index == NSNotFound) {
+                       [uniqueStrings addObject:string];
+               }
+       }
+       if (uniqueStrings.count > 0) {
+               return [array arrayByAddingObjectsFromArray:uniqueStrings];
+       } else {
+               return array;
+       }
+}
+
+- (EFNetworkControlPathEvent *)createInterfaceEventWithLogEvent:(EFLogEvent *)logEvent matchResult:(NSTextCheckingResult *)matchResult
+{
+       EFNetworkControlPathEvent *newEvent = nil;
+       NSString *interfaceName = [logEvent substringForCaptureGroup:@TokenInterfaceName inMatchResult:matchResult];
+       if (interfaceName != nil) {
+               if (SCLogParser.interfaceMap[interfaceName] == nil) {
+                       SCLogParser.interfaceMap[interfaceName] = @[];
+               }
+               NSData *identifier = [self createSubsystemIdentifier];
+               newEvent = [[EFNetworkControlPathEvent alloc] initWithLogEvent:logEvent subsystemIdentifier:identifier];
+               newEvent.interfaceBSDName = interfaceName;
+       }
+       return newEvent;
+}
+
+- (EFNetworkControlPathEvent *)createInterfaceEventWithLogEvent:(EFLogEvent *)logEvent interfaceName:(NSString *)interfaceName
+{
+       EFNetworkControlPathEvent *newEvent = nil;
+       if (SCLogParser.interfaceMap[interfaceName] == nil) {
+               SCLogParser.interfaceMap[interfaceName] = @[];
+       }
+       NSData *identifier = [self createSubsystemIdentifier];
+       newEvent = [[EFNetworkControlPathEvent alloc] initWithLogEvent:logEvent subsystemIdentifier:identifier];
+       newEvent.interfaceBSDName = interfaceName;
+       return newEvent;
+}
+
+- (void)addAddress:(NSString *)addressString toInterfaceEvent:(EFNetworkControlPathEvent *)event
+{
+       if (event.interfaceBSDName != nil) {
+               NSArray<NSString *> *addresses = SCLogParser.interfaceMap[event.interfaceBSDName];
+               event.addresses = [self addUniqueString:addressString toArray:addresses];
+               SCLogParser.interfaceMap[event.interfaceBSDName] = event.addresses;
+       }
+}
+
+- (BOOL)removeAddress:(NSString *)addressString fromInterfaceEvent:(EFNetworkControlPathEvent *)event
+{
+       if (event.interfaceBSDName != nil) {
+               NSArray<NSString *> *addresses = SCLogParser.interfaceMap[event.interfaceBSDName];
+               if (addresses.count > 0) {
+                       NSPredicate *matchPredicate = [NSPredicate predicateWithBlock:^BOOL(id evaluatedObject, __unused NSDictionary<NSString *,id> *bindings) {
+                               NSString *matchString = (NSString *)evaluatedObject;
+                               if (matchString != nil) {
+                                       return ![matchString isEqualToString:addressString];
+                               } else {
+                                       return NO;
+                               }
+                       }];
+                       event.addresses = [addresses filteredArrayUsingPredicate:matchPredicate];
+                       SCLogParser.interfaceMap[event.interfaceBSDName] = event.addresses;
+                       return YES;
+               }
+       }
+
+       return NO;
+}
+
+- (NSString *)substringOfString:(NSString *)matchedString forCaptureGroup:(NSString *)groupName inMatchResult:(NSTextCheckingResult *)result
+{
+       NSString *substring = nil;
+       NSRange groupRange = [result rangeWithName:groupName];
+       if (!NSEqualRanges(groupRange, NSMakeRange(NSNotFound, 0))) {
+               substring = [matchedString substringWithRange:groupRange];
+       }
+       return substring;
+}
+
+- (sa_family_t)getAddressFamilyOfAddress:(NSString *)addressString
+{
+       sa_family_t af = AF_UNSPEC;
+       struct in6_addr v6addr;
+       struct in_addr v4addr;
+
+       if (inet_pton(AF_INET6, addressString.UTF8String, &v6addr) == 1) {
+               af = AF_INET6;
+       } else if (inet_pton(AF_INET, addressString.UTF8String, &v4addr)) {
+               af = AF_INET;
+       }
+
+       return af;
+}
+
+@end
diff --git a/EventFactory/StateDumpParser.h b/EventFactory/StateDumpParser.h
new file mode 100644 (file)
index 0000000..af2c745
--- /dev/null
@@ -0,0 +1,27 @@
+/*
+ * Copyright (c) 2018 Apple Inc. All rights reserved.
+ *
+ * @APPLE_LICENSE_HEADER_START@
+ *
+ * This file contains Original Code and/or Modifications of Original Code
+ * as defined in and that are subject to the Apple Public Source License
+ * Version 2.0 (the 'License'). You may not use this file except in
+ * compliance with the License. Please obtain a copy of the License at
+ * http://www.opensource.apple.com/apsl/ and read it before using this
+ * file.
+ *
+ * The Original Code and all software distributed under the License are
+ * distributed on an 'AS IS' basis, WITHOUT WARRANTY OF ANY KIND, EITHER
+ * EXPRESS OR IMPLIED, AND APPLE HEREBY DISCLAIMS ALL SUCH WARRANTIES,
+ * INCLUDING WITHOUT LIMITATION, ANY WARRANTIES OF MERCHANTABILITY,
+ * FITNESS FOR A PARTICULAR PURPOSE, QUIET ENJOYMENT OR NON-INFRINGEMENT.
+ * Please see the License for the specific language governing rights and
+ * limitations under the License.
+ *
+ * @APPLE_LICENSE_HEADER_END@
+ */
+
+#import "SCLogParser.h"
+
+@interface StateDumpParser : SCLogParser
+@end
diff --git a/EventFactory/StateDumpParser.m b/EventFactory/StateDumpParser.m
new file mode 100644 (file)
index 0000000..ef223dd
--- /dev/null
@@ -0,0 +1,315 @@
+/*
+ * Copyright (c) 2018 Apple Inc. All rights reserved.
+ *
+ * @APPLE_LICENSE_HEADER_START@
+ *
+ * This file contains Original Code and/or Modifications of Original Code
+ * as defined in and that are subject to the Apple Public Source License
+ * Version 2.0 (the 'License'). You may not use this file except in
+ * compliance with the License. Please obtain a copy of the License at
+ * http://www.opensource.apple.com/apsl/ and read it before using this
+ * file.
+ *
+ * The Original Code and all software distributed under the License are
+ * distributed on an 'AS IS' basis, WITHOUT WARRANTY OF ANY KIND, EITHER
+ * EXPRESS OR IMPLIED, AND APPLE HEREBY DISCLAIMS ALL SUCH WARRANTIES,
+ * INCLUDING WITHOUT LIMITATION, ANY WARRANTIES OF MERCHANTABILITY,
+ * FITNESS FOR A PARTICULAR PURPOSE, QUIET ENJOYMENT OR NON-INFRINGEMENT.
+ * Please see the License for the specific language governing rights and
+ * limitations under the License.
+ *
+ * @APPLE_LICENSE_HEADER_END@
+ */
+
+#import <Foundation/Foundation.h>
+#import <EventFactory/EventFactory.h>
+#import <arpa/inet.h>
+
+#import "StateDumpParser.h"
+
+#define TokenFlagsDescription "flagsDescription"
+#define TokenAddress "address"
+#define TokenReachabilityDescription "reachabilityDescription"
+#define TokenRank "rank"
+#define TokenOrder "order"
+#define TokenDomain "domain"
+#define TokenSearchDomains "searchDomains"
+#define TokenNameServers "nameServers"
+
+#define ResolverSearchDomainsKey @"searchDomains"
+#define ResolverNameServersKey @"nameServers"
+#define ResolverInterfaceNameKey @"interfaceName"
+#define ResolverFlagsDescriptionKey @"flagsDescription"
+#define ResolverReachabilityDescriptionKey @"reachabilityDescription"
+#define ResolverMatchDomainsKey @"matchDomains"
+
+@interface StateDumpParser ()
+@property (readonly, nonatomic) NSRegularExpression *nwiRegex;
+@property (readonly, nonatomic) NSRegularExpression *dnsRegex;
+@property (readonly, nonatomic) NSRegularExpression *nameserverRegex;
+@property (readonly, nonatomic) NSRegularExpression *searchDomainRegex;
+@end
+
+@implementation StateDumpParser
+
+- (instancetype)init
+{
+       NSError *regexError = nil;
+
+       _nwiRegex = [[NSRegularExpression alloc] initWithPattern:@"\\s+(?<"TokenInterfaceName">\\w+) : flags\\s+: \\w+ \\(.+\\)\\n"
+                                                                 "\\s+address\\s+: (?<"TokenAddress">\\S+)\\n"
+                                                                 "(\\s+VPN server\\s+: \\S+\\n)?"
+                                                                 "\\s+reach\\s+: \\w+ \\(.+\\)\\n"
+                                                                 "\\s+rank\\s+: \\w+ \\((?<"TokenRank">\\w+), (?<"TokenOrder">\\w+)\\)"
+                                                        options:0
+                                                          error:&regexError];
+       if (_nwiRegex == nil || regexError != nil) {
+               specs_log_err("Failed to create NWI regex: %@", regexError);
+               return nil;
+       }
+
+       regexError = nil;
+       _dnsRegex = [[NSRegularExpression alloc] initWithPattern:@"resolver #\\d+\\n"
+                                                                 "(  domain   : (?<"TokenDomain">\\S+)\\n)?"
+                                                                 "(?<"TokenSearchDomains">(?:  search domain\\[\\d+\\] : \\S+\\n)*)"
+                                                                 "(?<"TokenNameServers">(?:  nameserver\\[\\d+\\] : \\S+\\n)*)"
+                                                                 "(  if_index : \\d+ \\((?<"TokenInterfaceName">\\w+)\\)\\n)"
+                                                                 "(  flags    : \\w+ \\((?<"TokenFlagsDescription">.+)\\)\\n)"
+                                                                 "(  reach    : \\w+ \\((?<"TokenReachabilityDescription">.+)\\)\\n)"
+                                                        options:0
+                                                          error:&regexError];
+       if (_dnsRegex == nil || regexError != nil) {
+               specs_log_err("Failed to create DNS configuration regex: %@", regexError);
+               return nil;
+       }
+
+       regexError = nil;
+       _nameserverRegex = [[NSRegularExpression alloc] initWithPattern:@"  nameserver\\[\\d+\\] : (?<"TokenAddress">\\S+)\\n"
+                                                               options:0
+                                                                 error:&regexError];
+       if (_nameserverRegex == nil || regexError != nil) {
+               specs_log_err("Failed to create the nameserver regex: %@", regexError);
+               return nil;
+       }
+
+       regexError = nil;
+       _searchDomainRegex = [[NSRegularExpression alloc] initWithPattern:@"  search domain\\[\\d+\\] : (?<"TokenDomain">\\S+)\\n"
+                                                                 options:0
+                                                                   error:&regexError];
+       if (_searchDomainRegex == nil || regexError != nil) {
+               specs_log_err("Failed to create the search domain regex: %@", regexError);
+               return nil;
+       }
+
+       NSArray<EFLogEventMatch *> *matches = @[
+               [[EFLogEventMatch alloc] initWithPattern:@"^Network information"
+                                multipleNewEventHandler:
+                ^NSArray<EFEvent *> *(__unused NSTextCheckingResult *matchResult, EFLogEvent *logEvent) {
+                        NSMutableDictionary<NSString *, EFNetworkControlPathEvent *> *newEvents = nil;
+                        NSArray<NSTextCheckingResult *> *matches = [self.nwiRegex matchesInString:logEvent.eventMessage options:0 range:NSMakeRange(0, logEvent.eventMessage.length)];
+                        BOOL primaryV4 = YES;
+                        BOOL primaryV6 = YES;
+
+                        for (NSString *interfaceName in SCLogParser.interfaceMap.allKeys) {
+                                SCLogParser.interfaceMap[interfaceName] = @[ ];
+                        }
+
+                        for (NSTextCheckingResult *match in matches) {
+                                NSString *interfaceName = [logEvent substringForCaptureGroup:@TokenInterfaceName inMatchResult:match];
+                                if (interfaceName == nil) {
+                                        continue;
+                                }
+                                EFNetworkControlPathEvent *event = newEvents[interfaceName];
+                                if (event == nil) {
+                                        event = [self createInterfaceEventWithLogEvent:logEvent matchResult:match];
+                                        if (newEvents == nil) {
+                                                newEvents = [[NSMutableDictionary alloc] init];
+                                        }
+                                        newEvents[event.interfaceBSDName] = event;
+                                        event.primaryStateIPv4 = EFPrimaryStateNotPrimary;
+                                        event.primaryStateIPv6 = EFPrimaryStateNotPrimary;
+                                }
+                                NSString *addressString = [logEvent substringForCaptureGroup:@TokenAddress inMatchResult:match];
+                                if (addressString.length > 0) {
+                                        if (primaryV4 || primaryV6) {
+                                                sa_family_t addressFamily = [self getAddressFamilyOfAddress:addressString];
+                                                if (primaryV4 && addressFamily == AF_INET) {
+                                                        event.primaryStateIPv4 = EFPrimaryStatePrimary;
+                                                        primaryV4 = NO;
+                                                } else if (primaryV6 && addressFamily == AF_INET6) {
+                                                        event.primaryStateIPv6 = EFPrimaryStatePrimary;
+                                                        primaryV6 = NO;
+                                                }
+                                        }
+                                        [self addAddress:addressString toInterfaceEvent:event];
+                                }
+                                NSString *rankString = [logEvent substringForCaptureGroup:@TokenRank inMatchResult:match];
+                                if (rankString.length > 0) {
+                                        event.rank = rankString;
+                                }
+                                NSString *orderString = [logEvent substringForCaptureGroup:@TokenOrder inMatchResult:match];
+                                if (orderString.length > 0) {
+                                        if ([orderString isEqualToString:@"Last"]) {
+                                                event.order = -1;
+                                        } else {
+                                                event.order = orderString.integerValue;
+                                        }
+                                }
+                        }
+                        return newEvents.allValues;
+                }],
+               [[EFLogEventMatch alloc] initWithPattern:@"^DNS Configuration"
+                                multipleNewEventHandler:
+                ^NSArray<EFEvent *> *(__unused NSTextCheckingResult *matchResult, EFLogEvent *logEvent) {
+                        NSMutableArray<EFNetworkControlPathEvent *> *newEvents = nil;
+                        NSArray<NSTextCheckingResult *> *matches = [self.dnsRegex matchesInString:logEvent.eventMessage options:0 range:NSMakeRange(0, logEvent.eventMessage.length)];
+                        NSMutableDictionary<NSString *, NSDictionary<NSString *, NSObject *> *> *interfaceDNSConfigurations = nil;
+                        NSMutableArray<NSDictionary<NSString *, NSObject *> *> *orderedDNSConfigurations = nil;
+
+                        for (NSTextCheckingResult *match in matches) {
+                                NSMutableDictionary<NSString *, NSObject *> *dnsConfiguration = [[NSMutableDictionary alloc] init];
+                                NSString *matchDomain = [logEvent substringForCaptureGroup:@TokenDomain inMatchResult:match];
+                                BOOL scoped = NO;
+                                if (matchDomain.length > 0) {
+                                        NSArray<NSString *> *domains = (NSArray<NSString *> *)dnsConfiguration[ResolverMatchDomainsKey];
+                                        dnsConfiguration[ResolverMatchDomainsKey] = [self addUniqueString:matchDomain toArray:domains];
+                                }
+                                NSString *searchDomainsString = [logEvent substringForCaptureGroup:@TokenSearchDomains inMatchResult:match];
+                                if (searchDomainsString.length > 0) {
+                                        [self addSubstringsFromString:searchDomainsString
+                                                      forCaptureGroup:@TokenDomain
+                                                              inRegex:self.searchDomainRegex
+                                                         toArrayAtKey:ResolverSearchDomainsKey
+                                                         inDictionary:dnsConfiguration];
+                                }
+                                NSString *nameServersString = [logEvent substringForCaptureGroup:@TokenNameServers inMatchResult:match];
+                                if (nameServersString.length > 0) {
+                                        [self addSubstringsFromString:nameServersString
+                                                      forCaptureGroup:@TokenAddress
+                                                              inRegex:self.nameserverRegex
+                                                         toArrayAtKey:ResolverNameServersKey
+                                                         inDictionary:dnsConfiguration];
+                                }
+                                NSString *flagsDescription = [logEvent substringForCaptureGroup:@TokenFlagsDescription inMatchResult:match];
+                                if (flagsDescription.length > 0) {
+                                        dnsConfiguration[ResolverFlagsDescriptionKey] = flagsDescription;
+                                        if ([flagsDescription containsString:@"Scoped"]) {
+                                                scoped = YES;
+                                        }
+                                }
+                                NSString *reachabilityDescription = [logEvent substringForCaptureGroup:@TokenReachabilityDescription inMatchResult:match];
+                                if (reachabilityDescription.length > 0) {
+                                        dnsConfiguration[ResolverReachabilityDescriptionKey] = reachabilityDescription;
+                                }
+
+                                NSString *interfaceName = [logEvent substringForCaptureGroup:@TokenInterfaceName inMatchResult:match];
+                                if (interfaceName != nil) {
+                                        dnsConfiguration[ResolverInterfaceNameKey] = interfaceName;
+                                }
+
+                                NSDictionary<NSString *, NSObject *> *newConfiguration = nil;
+                                if (interfaceName != nil && (scoped || matchDomain.length > 0)) {
+                                        NSDictionary<NSString *, NSObject *> *existingConfiguration = interfaceDNSConfigurations[interfaceName];
+                                        if (existingConfiguration != nil) {
+                                                if (matchDomain.length > 0) {
+                                                        NSArray<NSString *> *matchDomains = (NSArray<NSString *> *)existingConfiguration[ResolverMatchDomainsKey];
+                                                        dnsConfiguration[ResolverMatchDomainsKey] = [self addUniqueString:matchDomain toArray:matchDomains];
+                                                } else {
+                                                        dnsConfiguration[ResolverMatchDomainsKey] = existingConfiguration[ResolverMatchDomainsKey];
+                                                }
+                                        }
+                                        newConfiguration = [[NSDictionary alloc] initWithDictionary:dnsConfiguration];
+                                        if (interfaceDNSConfigurations == nil) {
+                                                interfaceDNSConfigurations = [[NSMutableDictionary alloc] init];
+                                        }
+                                        interfaceDNSConfigurations[interfaceName] = newConfiguration;
+                                } else {
+                                        newConfiguration = [[NSDictionary alloc] initWithDictionary:dnsConfiguration];
+                                }
+
+                                if (!scoped) {
+                                        if (orderedDNSConfigurations == nil) {
+                                                orderedDNSConfigurations = [[NSMutableArray alloc] init];
+                                        }
+                                        NSUInteger existingIndex = [orderedDNSConfigurations indexOfObjectPassingTest:
+                                               ^BOOL(NSDictionary<NSString *,NSObject *> *obj, __unused NSUInteger idx, __unused BOOL *stop) {
+                                                       NSString *existingInterfaceName = (NSString *)obj[ResolverInterfaceNameKey];
+                                                       return (existingInterfaceName != nil && [interfaceName isEqualToString:existingInterfaceName]);
+                                               }];
+                                        if (existingIndex == NSNotFound) {
+                                                [orderedDNSConfigurations addObject:newConfiguration];
+                                        } else {
+                                                orderedDNSConfigurations[existingIndex] = newConfiguration;
+                                        }
+                                }
+                        }
+
+                        for (NSString *interfaceName in interfaceDNSConfigurations) {
+                                NSDictionary<NSString *, NSObject *> *dnsConfiguration = interfaceDNSConfigurations[interfaceName];
+                                if (dnsConfiguration == nil || ![NSJSONSerialization isValidJSONObject:dnsConfiguration]) {
+                                        specs_log_err("DNS configuration is not valid JSON: %@", dnsConfiguration);
+                                        continue;
+                                }
+                                NSError *jsonError = nil;
+                                NSData *jsonData = [NSJSONSerialization dataWithJSONObject:dnsConfiguration options:NSJSONWritingPrettyPrinted error:&jsonError];
+                                if (jsonData == nil) {
+                                        specs_log_err("Failed to generate JSON from %@: %@", dnsConfiguration, jsonError);
+                                        continue;
+                                }
+                                EFNetworkControlPathEvent *newEvent = [self createInterfaceEventWithLogEvent:logEvent interfaceName:interfaceName];
+                                newEvent.dnsConfiguration = [[NSString alloc] initWithData:jsonData encoding:NSUTF8StringEncoding];
+
+                                if (newEvents == nil) {
+                                        newEvents = [[NSMutableArray alloc] init];
+                                }
+                                [newEvents addObject:newEvent];
+                        }
+                        if (orderedDNSConfigurations.count > 0) {
+                                NSError *jsonError = nil;
+                                NSData *jsonData = [NSJSONSerialization dataWithJSONObject:orderedDNSConfigurations options:NSJSONWritingPrettyPrinted error:&jsonError];
+                                if (jsonData != nil) {
+                                        NSData *subsystemIdentifier = [self createSubsystemIdentifier];
+                                        EFNetworkControlPathEvent *newEvent = [[EFNetworkControlPathEvent alloc] initWithLogEvent:logEvent subsystemIdentifier:subsystemIdentifier];
+                                        newEvent.interfaceBSDName = @"system";
+                                        newEvent.interfaceDescription = @"System Configuration";
+                                        newEvent.dnsConfiguration = [[NSString alloc] initWithData:jsonData encoding:NSUTF8StringEncoding];
+
+                                        if (newEvents == nil) {
+                                                newEvents = [[NSMutableArray alloc] init];
+                                        }
+                                        [newEvents addObject:newEvent];
+                                }
+                        }
+                        for (NSString *interfaceName in SCLogParser.interfaceMap) {
+                                if (interfaceDNSConfigurations[interfaceName] == nil) {
+                                        EFNetworkControlPathEvent *newEvent = [self createInterfaceEventWithLogEvent:logEvent interfaceName:interfaceName];
+                                        newEvent.dnsConfiguration = EFNetworkControlPathEvent.configurationNotSet;
+                                        if (newEvents == nil) {
+                                                newEvents = [[NSMutableArray alloc] init];
+                                        }
+                                        [newEvents addObject:newEvent];
+                                }
+                        }
+                        return newEvents;
+                }],
+       ];
+       EFLogEventParser *parser = [[EFLogEventParser alloc] initWithMatches:matches];
+       return [super initWithCategory:@"StateDump" eventParser:parser];
+}
+
+- (void)addSubstringsFromString:(NSString *)string forCaptureGroup:(NSString *)groupName inRegex:(NSRegularExpression *)regex toArrayAtKey:(NSString *)configKey inDictionary:(NSMutableDictionary<NSString *, NSObject *> *)dictionary
+{
+       NSArray<NSTextCheckingResult *> *matches = [regex matchesInString:string options:0 range:NSMakeRange(0, string.length)];
+       for (NSTextCheckingResult *match in matches) {
+               NSRange groupRange = [match rangeWithName:groupName];
+               if (!NSEqualRanges(groupRange, NSMakeRange(NSNotFound, 0))) {
+                       NSString *substring = [string substringWithRange:groupRange];
+                       if (substring.length > 0) {
+                               NSArray<NSString *> *existingList = (NSArray<NSString *> *)dictionary[configKey];
+                               dictionary[configKey] = [self addUniqueString:substring toArray:existingList];
+                       }
+               }
+       }
+}
+
+@end
index 406507609aca9c86d0df38489bade5398048a86b..b5f8f83b8a856cb5da4521bcda821b3c895222f7 100644 (file)
        <key>CFBundlePackageType</key>
        <string>BNDL</string>
        <key>CFBundleShortVersionString</key>
-       <string>1.17</string>
+       <string>1.19</string>
        <key>CFBundleSignature</key>
        <string>????</string>
        <key>CFBundleVersion</key>
-       <string>1.17</string>
+       <string>1.19</string>
        <key>MachServices</key>
        <dict>
                <key>com.apple.SystemConfiguration.DNSConfiguration_sim</key>
index 6c63c55ecc2ca720b3aa23860be4179ae4ee4e05..3bd882d14689dbac77eb99aeb076e7f5e96e31dc 100644 (file)
        <key>CFBundlePackageType</key>
        <string>BNDL</string>
        <key>CFBundleShortVersionString</key>
-       <string>1.17</string>
+       <string>1.19</string>
        <key>CFBundleSignature</key>
        <string>????</string>
        <key>CFBundleVersion</key>
-       <string>1.17</string>
+       <string>1.19</string>
        <key>MachServices</key>
        <dict>
                <key>com.apple.SystemConfiguration.DNSConfiguration</key>
index 7517809914d0b95e3e3a51778611c5e6eeb3f72f..1214754f8dc642b13d3a3a78b3ca37da7405ab6a 100644 (file)
@@ -1,6 +1,6 @@
 ifeq ($(PLATFORM),iphoneos)
 # iOS internal SDK
-ARCHS=armv7
+ARCHS=arm64
 endif
 
 ifeq ($(PLATFORM),)
@@ -21,7 +21,7 @@ PF_INC = -F$(SYSROOT)/System/Library/PrivateFrameworks
 ARCH_FLAGS=$(foreach a,$(ARCHS),-arch $(a))
 
 EXTRA_CFLAGS=
-TEST_INCLUDE=-I. -I../common -I../../dnsinfo -I../../nwi -I../../libSystemConfiguration -I../../SystemConfiguration.fproj -I../../IPMonitorControl -I$(SYSROOT)/System/Library/Frameworks/System.framework/PrivateHeaders
+TEST_INCLUDE=-I. -I../common -I../../dnsinfo -I../../nwi -I../../libSystemConfiguration -I../../SystemConfiguration.fproj -I../../IPMonitorControl -I../../IPMonitorControl/AWD -I$(SYSROOT)/System/Library/Frameworks/System.framework/PrivateHeaders
 
 REFERENCE_OUTPUT=../../common/reference_output.sh
 
@@ -83,6 +83,9 @@ IPMonitorControlPrefs.o: ../common/IPMonitorControlPrefs.h ../common/IPMonitorCo
 IPMonitorControlServer.o: ../../IPMonitorControl/IPMonitorControlServer.c
        $(CC) $(PF_INC) $(ARCH_FLAGS) -isysroot $(SYSROOT) ${TEST_INCLUDE} -Wall -O0 -g -c $^
 
+serviceIDNumber.o: serviceIDNumber.c
+       $(CC) $(PF_INC) $(ARCH_FLAGS) -isysroot $(SYSROOT) ${TEST_INCLUDE} -Wall -O0 -g -c $^
+
 # ----------
 
 ip_pluginX.o: Makefile ip_plugin.c
@@ -129,38 +132,37 @@ test_dns_order: test_dns_order.o IPMonitorControlPrefs.o agent-monitor.o configA
        $(CC) $(PF_INC) $(ARCH_FLAGS) -isysroot $(SYSROOT) -Wall -O0 -g -o test_dns_order test_dns_order.o IPMonitorControlPrefs.o agent-monitor.o configAgent.o controller.o dnsAgent.o proxyAgent.o dnsinfo_create.o dnsinfo_flatfile.o dnsinfo_server.o network_state_information_priv.o network_information_server.o dns-configuration.o proxy-configuration.o set-hostname.o smb-configuration.o IPMonitorControlServer.o libSystemConfiguration_client.o libSystemConfiguration_server.o ${EXTRA_CFLAGS} -lnetwork -framework SystemConfiguration -framework CoreFoundation -framework Foundation -framework Network -framework NetworkExtension
 
 # ----------
-
 test_ipv4_routelist.o: ip_plugin.c
        $(CC) $(PF_INC) $(ARCH_FLAGS) -isysroot $(SYSROOT) -DTEST_IPV4_ROUTELIST ${TEST_INCLUDE} ${EXTRA_CFLAGS} -Wall -O0 -g -c -o $@ $^
 
-test_ipv4_routelist: test_ipv4_routelist.o IPMonitorControlPrefs.o agent-monitor.o configAgent.o controller.o dnsAgent.o proxyAgent.o dnsinfo_create.o dnsinfo_flatfile.o dnsinfo_server.o network_state_information_priv.o network_information_server.o dns-configuration.o proxy-configuration.o set-hostname.o smb-configuration.o IPMonitorControlServer.o libSystemConfiguration_client.o libSystemConfiguration_server.o
-       $(CC) $(PF_INC) $(ARCH_FLAGS) -isysroot $(SYSROOT) -Wall -O0 -g -o test_ipv4_routelist test_ipv4_routelist.o IPMonitorControlPrefs.o agent-monitor.o configAgent.o controller.o dnsAgent.o proxyAgent.o dnsinfo_create.o dnsinfo_flatfile.o dnsinfo_server.o network_state_information_priv.o network_information_server.o dns-configuration.o proxy-configuration.o set-hostname.o smb-configuration.o IPMonitorControlServer.o libSystemConfiguration_client.o libSystemConfiguration_server.o ${EXTRA_CFLAGS} -lnetwork -framework SystemConfiguration -framework CoreFoundation -framework Foundation -framework Network -framework NetworkExtension
+test_ipv4_routelist: test_ipv4_routelist.o IPMonitorControlPrefs.o dnsinfo_create.o dnsinfo_flatfile.o dnsinfo_server.o dns-configuration.o proxy-configuration.o set-hostname.o smb-configuration.o libSystemConfiguration_client.o libSystemConfiguration_server.o serviceIDNumber.o
+       $(CC) $(PF_INC) $(ARCH_FLAGS) -isysroot $(SYSROOT) -Wall -O0 -g -o test_ipv4_routelist $^ ${EXTRA_CFLAGS} -lnetwork -framework SystemConfiguration -framework CoreFoundation -framework Foundation -framework Network -framework NetworkExtension
 
 test_ipv4_routelist_reference.txt: test_ipv4_routelist
-       sh $(REFERENCE_OUTPUT) create test_ipv4_routelist test_ipv4_routelist_reference.txt routelist_output_filter.sh
+       sh $(REFERENCE_OUTPUT) create ./test_ipv4_routelist test_ipv4_routelist_reference.txt routelist_output_filter.sh
 
 test_ipv4_routelist_test: test_ipv4_routelist
-       sh $(REFERENCE_OUTPUT) test test_ipv4_routelist test_ipv4_routelist_reference.txt routelist_output_filter.sh
+       sh $(REFERENCE_OUTPUT) test ./test_ipv4_routelist test_ipv4_routelist_reference.txt routelist_output_filter.sh
 
 test_ipv4_routelist_coverage: test_ipv4_routelist
-       test_ipv4_routelist -1 | grep Hit | awk '{print $$2}' | sort | uniq
+       ./test_ipv4_routelist -1 | grep Hit | awk '{print $$2}' | sort | uniq
 
 # ----------
 
 test_ipv6_routelist.o: ip_plugin.c
-       $(CC) $(PF_INC) $(ARCH_FLAGS) -isysroot $(SYSROOT) -DTEST_IPV6_ROUTELIST ${TEST_INCLUDE} ${EXTRA_CFLAGS} -Wall -O0 -g -c -o $@ $^
+       $(CC) $(PF_INC) $(ARCH_FLAGS) -isysroot $(SYSROOT) -DTEST_IPV6_ROUTELIST=1 ${TEST_INCLUDE} ${EXTRA_CFLAGS} -Wall -O0 -g -c -o $@ $^
 
-test_ipv6_routelist: test_ipv6_routelist.o IPMonitorControlPrefs.o agent-monitor.o configAgent.o controller.o dnsAgent.o proxyAgent.o dnsinfo_create.o dnsinfo_flatfile.o dnsinfo_server.o network_state_information_priv.o network_information_server.o dns-configuration.o proxy-configuration.o set-hostname.o smb-configuration.o IPMonitorControlServer.o libSystemConfiguration_client.o libSystemConfiguration_server.o
-       $(CC) $(PF_INC) $(ARCH_FLAGS) -isysroot $(SYSROOT) -Wall -O0 -g -o test_ipv6_routelist test_ipv6_routelist.o IPMonitorControlPrefs.o agent-monitor.o configAgent.o controller.o dnsAgent.o proxyAgent.o dnsinfo_create.o dnsinfo_flatfile.o dnsinfo_server.o network_state_information_priv.o network_information_server.o dns-configuration.o proxy-configuration.o set-hostname.o smb-configuration.o IPMonitorControlServer.o libSystemConfiguration_client.o libSystemConfiguration_server.o ${EXTRA_CFLAGS} -lnetwork -framework SystemConfiguration -framework CoreFoundation -framework Foundation -framework Network -framework NetworkExtension
+test_ipv6_routelist: test_ipv6_routelist.o IPMonitorControlPrefs.o dnsinfo_create.o dnsinfo_flatfile.o dnsinfo_server.o dns-configuration.o proxy-configuration.o set-hostname.o smb-configuration.o libSystemConfiguration_client.o libSystemConfiguration_server.o serviceIDNumber.o
+       $(CC) $(PF_INC) $(ARCH_FLAGS) -isysroot $(SYSROOT) -Wall -O0 -g -o test_ipv6_routelist $^ ${EXTRA_CFLAGS} -lnetwork -framework SystemConfiguration -framework CoreFoundation -framework Foundation -framework Network -framework NetworkExtension
 
 test_ipv6_routelist_reference.txt: test_ipv6_routelist
-       sh $(REFERENCE_OUTPUT) create test_ipv6_routelist test_ipv6_routelist_reference.txt routelist_output_filter.sh
+       sh $(REFERENCE_OUTPUT) create ./test_ipv6_routelist test_ipv6_routelist_reference.txt routelist_output_filter.sh
 
 test_ipv6_routelist_test: test_ipv6_routelist
-       sh $(REFERENCE_OUTPUT) test test_ipv6_routelist test_ipv6_routelist_reference.txt routelist_output_filter.sh
+       sh $(REFERENCE_OUTPUT) test ./test_ipv6_routelist test_ipv6_routelist_reference.txt routelist_output_filter.sh
 
 test_ipv6_routelist_coverage: test_ipv6_routelist
-       test_ipv6_routelist -1 | grep Hit | awk '{print $$2}' | sort | uniq
+       ./test_ipv6_routelist -1 | grep Hit | awk '{print $$2}' | sort | uniq
 
 # ----------
 
@@ -172,5 +174,15 @@ IPMonitor: IPMonitor.o IPMonitorControlPrefs.o agent-monitor.o configAgent.o con
 
 # ----------
 
+serviceIDNumberTest: serviceIDNumber.c
+       $(CC) $(PF_INC) $(ARCH_FLAGS) -isysroot $(SYSROOT) -DTEST_SERVICEID_NUMBER=1 ${TEST_INCLUDE} ${EXTRA_CFLAGS} -Wall -O0 -g -o $@ $^ -framework SystemConfiguration -framework CoreFoundation
+
+# ----------
+
+nat64: nat64-configuration.c
+       $(CC) -DTEST_NAT64_CONFIGURATION $(TEST_INCLUDE) $(PF_INC) $(ARCH_FLAGS) -isysroot $(SYSROOT) -lnetwork -framework CoreFoundation -framework SystemConfiguration -Wall -O0 -g -o $@ $^
+
+# ----------
+
 clean:
-       rm -rf *.dSYM *.o test_dns test_hostname test_proxy test_smb test_ipv4_routelist test_ipv6_routelist test_dns_order IPMonitor
+       rm -rf *.dSYM *.o test_dns test_hostname test_proxy test_smb test_ipv4_routelist test_ipv6_routelist test_dns_order serviceIDNumberTest IPMonitor nat64
index e53d3a61def057d84728b8d22e5576aeca845060..9c329c41c5c7d8279a69864a292405e5c021f821 100644 (file)
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2015-2017 Apple Inc. All rights reserved.
+ * Copyright (c) 2015-2018 Apple Inc. All rights reserved.
  *
  * @APPLE_LICENSE_HEADER_START@
  *
 
 #import "controller.h"
 
+static Boolean
+haveNetworkExtensionFramework()
+{
+       Boolean haveFramework;
+
+       haveFramework = ([NEPolicy class] != nil);
+       return haveFramework;
+}
+
 void
 process_AgentMonitor(void)
 {
+       if (!haveNetworkExtensionFramework()) {
+               return;
+       }
+
        SC_log(LOG_DEBUG, "Triggering AgentMonitor");
        @autoreleasepool {
                AgentController *controller = [AgentController sharedController];
@@ -46,6 +59,10 @@ process_AgentMonitor(void)
 void
 process_AgentMonitor_DNS(void)
 {
+       if (!haveNetworkExtensionFramework()) {
+               return;
+       }
+
        SC_log(LOG_DEBUG, "Triggering AgentMonitor for DNS");
        @autoreleasepool {
                AgentController *controller = [AgentController sharedController];
@@ -65,6 +82,10 @@ process_AgentMonitor_DNS(void)
 void
 process_AgentMonitor_Proxy(void)
 {
+       if (!haveNetworkExtensionFramework()) {
+               return;
+       }
+
        SC_log(LOG_DEBUG, "Triggering AgentMonitor for Proxy");
        @autoreleasepool {
                AgentController *controller = [AgentController sharedController];
@@ -85,6 +106,11 @@ const void *
 copy_proxy_information_for_agent_uuid(uuid_t uuid, uint64_t *length)
 {
        __block const void *buffer = NULL;
+
+       if (!haveNetworkExtensionFramework()) {
+               return NULL;
+       }
+
        @autoreleasepool {
                AgentController *controller = [AgentController sharedController];
                if (controller == nil) {
@@ -105,6 +131,11 @@ const void *
 copy_dns_information_for_agent_uuid(uuid_t uuid, uint64_t *length)
 {
        __block const void *buffer = NULL;
+
+       if (!haveNetworkExtensionFramework()) {
+               return NULL;
+       }
+
        @autoreleasepool {
                AgentController *controller = [AgentController sharedController];
                if (controller == nil) {
index 8b57188a8a286c7147652428695dd31532c88453..5af5b4746db2c1ad38c974a81cce52bbbc3c1d98 100644 (file)
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2015-2017 Apple Inc. All rights reserved.
+ * Copyright (c) 2015-2018 Apple Inc. All rights reserved.
  *
  * @APPLE_LICENSE_HEADER_START@
  *
         - So for a name, we would always have the same UUID.
 
         */
-       unsigned char hashValue[CC_MD5_DIGEST_LENGTH];
+       unsigned char hashValue[CC_SHA256_DIGEST_LENGTH];
        const char *strForHash = [agentName UTF8String];
-       CC_MD5(strForHash, (CC_LONG)strlen(strForHash), hashValue);
-       
+       CC_SHA256(strForHash, (CC_LONG)strlen(strForHash), hashValue);
+
        return [[NSUUID alloc] initWithUUIDBytes:hashValue];
 }
 
index 8fc79cce15ec231186604c9147b67d668692ad9b..3d0121f32724b1382d214a78dd7c89cdb01a1ada 100644 (file)
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2004-2018 Apple Inc. All rights reserved.
+ * Copyright (c) 2004-2019 Apple Inc. All rights reserved.
  *
  * @APPLE_LICENSE_HEADER_START@
  *
 #include <arpa/inet.h>
 #include <arpa/nameser.h>
 #include <resolv.h>
-#if    !TARGET_OS_IPHONE
 #include <notify.h>
 extern uint32_t notify_monitor_file(int token, const char *name, int flags);
-#endif // !TARGET_OS_IPHONE
 #include <CommonCrypto/CommonDigest.h>
 
 #include <CoreFoundation/CoreFoundation.h>
@@ -97,13 +95,13 @@ dns_resolver_flags_service(CFDictionaryRef service, uint32_t resolver_flags)
 
        // check if the service has v4 configured
        if (((resolver_flags & DNS_RESOLVER_FLAGS_REQUEST_A_RECORDS) == 0) &&
-           service_contains_protocol(service, AF_INET)) {
+           service_is_routable(service, AF_INET)) {
                resolver_flags |= DNS_RESOLVER_FLAGS_REQUEST_A_RECORDS;
        }
 
        // check if the service has v6 configured
        if (((resolver_flags & DNS_RESOLVER_FLAGS_REQUEST_AAAA_RECORDS) == 0) &&
-           service_contains_protocol(service, AF_INET6)) {
+           service_is_routable(service, AF_INET6)) {
                resolver_flags |= DNS_RESOLVER_FLAGS_REQUEST_AAAA_RECORDS;
        }
 
@@ -1321,7 +1319,7 @@ create_resolver(CFDictionaryRef dns)
                                *slash = '\0';
                        }
 
-                       bzero(&sortaddr, sizeof(sortaddr));
+                       memset(&sortaddr, 0, sizeof(sortaddr));
                        if (inet_aton(buf, &sortaddr.address) != 1) {
                                /* if address not valid */
                                continue;
@@ -1564,8 +1562,8 @@ dns_configuration_set(CFDictionaryRef   defaultResolver,
        CFArrayRef              mySearchDomains         = NULL;
        CFIndex                 n_resolvers;
        CFMutableArrayRef       resolvers;
-       unsigned char           signature[CC_SHA1_DIGEST_LENGTH];
-       static unsigned char    signature_last[CC_SHA1_DIGEST_LENGTH];
+       unsigned char           signature[CC_SHA256_DIGEST_LENGTH];
+       static unsigned char    signature_last[CC_SHA256_DIGEST_LENGTH];
 
        // establish list of resolvers
 
@@ -1700,19 +1698,17 @@ dns_configuration_set(CFDictionaryRef   defaultResolver,
                        }
                }
 
-#if    !TARGET_OS_IPHONE
                // add flatfile resolvers
 
                _dnsinfo_flatfile_set_flags(default_resolver_flags);
                _dnsinfo_flatfile_add_resolvers(&dns_create_config);
-#endif // !TARGET_OS_IPHONE
        }
 
        // check if the configuration changed
        _dns_configuration_signature(&dns_create_config, signature, sizeof(signature));
        if (bcmp(signature, signature_last, sizeof(signature)) != 0) {
                // save [new] signature
-               bcopy(signature, signature_last, sizeof(signature));
+               memcpy(signature_last, signature, sizeof(signature));
 
                my_log(LOG_INFO, "Updating DNS configuration");
                if (dns_create_config != NULL) {
@@ -1757,7 +1753,6 @@ dns_configuration_set(CFDictionaryRef   defaultResolver,
 }
 
 
-#if    !TARGET_OS_IPHONE
 static SCDynamicStoreRef       dns_configuration_store;
 static SCDynamicStoreCallBack  dns_configuration_callout;
 
@@ -1768,24 +1763,18 @@ dns_configuration_changed(CFMachPortRef port, void *msg, CFIndex size, void *inf
 #pragma unused(msg)
 #pragma unused(size)
 #pragma unused(info)
-       os_activity_t                   activity;
        static const CFStringRef        key     = CFSTR(_PATH_RESOLVER_DIR);
        CFArrayRef                      keys;
        Boolean                         resolvers_now;
        static Boolean                  resolvers_save  = FALSE;
        struct stat                     statbuf;
 
-       activity = os_activity_create("processing DNS configuration change",
-                                     OS_ACTIVITY_CURRENT,
-                                     OS_ACTIVITY_FLAG_DEFAULT);
-       os_activity_scope(activity);
-
        resolvers_now = (stat(_PATH_RESOLVER_DIR, &statbuf) == 0);
        if (!resolvers_save && (resolvers_save == resolvers_now)) {
                // if we did not (and still do not) have an "/etc/resolvers"
                // directory than this notification is the result of a change
                // to the "/etc" directory.
-               goto done;
+               return;
        }
        resolvers_save = resolvers_now;
 
@@ -1796,11 +1785,34 @@ dns_configuration_changed(CFMachPortRef port, void *msg, CFIndex size, void *inf
        (*dns_configuration_callout)(dns_configuration_store, keys, NULL);
        CFRelease(keys);
 
-    done :
+       return;
+}
 
-       os_release(activity);
 
-       return;
+static Boolean
+normalize_path(const char *file_name, char resolved_name[PATH_MAX])
+{
+       char    *ch;
+       char    path[PATH_MAX];
+
+       strlcpy(path, file_name, sizeof(path));
+       if (realpath(path, resolved_name) != NULL) {
+               // if the path exists
+               return TRUE;
+       }
+
+       ch = strrchr(path, '/');
+       if (ch != NULL) {
+               *ch = '\0';
+               if (realpath(path, resolved_name) != NULL) {
+                       // if a parent path exists
+                       strlcat(resolved_name, "/", PATH_MAX);
+                       strlcat(resolved_name, ch+1, PATH_MAX);
+                       return TRUE;
+               }
+       }
+
+       return FALSE;
 }
 
 
@@ -1811,9 +1823,15 @@ dns_configuration_monitor(SCDynamicStoreRef store, SCDynamicStoreCallBack callou
        CFMachPortRef           mp;
        mach_port_t             notify_port;
        int                     notify_token;
+       char                    resolver_directory_path[PATH_MAX];
        CFRunLoopSourceRef      rls;
        uint32_t                status;
 
+       if (!normalize_path(_PATH_RESOLVER_DIR, resolver_directory_path)) {
+               my_log(LOG_ERR, "Not monitoring \"%s\", could not resolve directory path", _PATH_RESOLVER_DIR);
+               return;
+       }
+
        dns_configuration_store   = store;
        dns_configuration_callout = callout;
 
@@ -1823,7 +1841,7 @@ dns_configuration_monitor(SCDynamicStoreRef store, SCDynamicStoreCallBack callou
                return;
        }
 
-       status = notify_monitor_file(notify_token, "/private" _PATH_RESOLVER_DIR, 0);
+       status = notify_monitor_file(notify_token, resolver_directory_path, 0);
        if (status != NOTIFY_STATUS_OK) {
                my_log(LOG_ERR, "notify_monitor_file() failed");
                (void)notify_cancel(notify_token);
@@ -1848,7 +1866,6 @@ dns_configuration_monitor(SCDynamicStoreRef store, SCDynamicStoreCallBack callou
        CFRelease(mp);
        return;
 }
-#endif // !TARGET_OS_IPHONE
 
 
 __private_extern__
index e047cb1b4e3b0fb436e1f10e7f3b940556876d32..1753f7096079eda7c604181c56c57963d654a19b 100644 (file)
@@ -1,15 +1,15 @@
 /*
- * Copyright (c) 2006, 2008, 2009, 2011, 2012, 2015 Apple Inc. All rights reserved.
+ * Copyright (c) 2006, 2008, 2009, 2011, 2012, 2015, 2018 Apple Inc. All rights reserved.
  *
  * @APPLE_LICENSE_HEADER_START@
- * 
+ *
  * This file contains Original Code and/or Modifications of Original Code
  * as defined in and that are subject to the Apple Public Source License
  * Version 2.0 (the 'License'). You may not use this file except in
  * compliance with the License. Please obtain a copy of the License at
  * http://www.opensource.apple.com/apsl/ and read it before using this
  * file.
- * 
+ *
  * The Original Code and all software distributed under the License are
  * distributed on an 'AS IS' basis, WITHOUT WARRANTY OF ANY KIND, EITHER
  * EXPRESS OR IMPLIED, AND APPLE HEREBY DISCLAIMS ALL SUCH WARRANTIES,
@@ -17,7 +17,7 @@
  * FITNESS FOR A PARTICULAR PURPOSE, QUIET ENJOYMENT OR NON-INFRINGEMENT.
  * Please see the License for the specific language governing rights and
  * limitations under the License.
- * 
+ *
  * @APPLE_LICENSE_HEADER_END@
  */
 
@@ -37,10 +37,8 @@ __BEGIN_DECLS
 void   dns_configuration_init          (CFBundleRef            bundle);
 
 
-#if    !TARGET_OS_IPHONE
 void   dns_configuration_monitor       (SCDynamicStoreRef      store,
                                         SCDynamicStoreCallBack callout);
-#endif // !TARGET_OS_IPHONE
 
 Boolean        dns_configuration_set           (CFDictionaryRef        defaultResolver,
                                         CFDictionaryRef        services,
@@ -50,5 +48,5 @@ Boolean       dns_configuration_set           (CFDictionaryRef        defaultResolver,
 
 __END_DECLS
 
-#endif /* _DNS_CONFIGURATION_H */
+#endif /* _DNS_CONFIGURATION_H */
 
index 7f5f479cca667da68aed75a08e537aee7a376772..97d14d0493d6c5dbd0d29f96f8bb216926c415cd 100644 (file)
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2000-2018 Apple Inc.  All Rights Reserved.
+ * Copyright (c) 2000-2019 Apple Inc.  All Rights Reserved.
  *
  * @APPLE_LICENSE_HEADER_START@
  *
 #include <netinet/icmp6.h>
 #include <netinet6/in6_var.h>
 #include <netinet6/nd6.h>
-#if __has_include(<si_compare.h>)
-#include <si_compare.h>
-#else // __has_include(<si_compare.h>)
-#include <network/sa_compare.h>
-#endif // __has_include(<si_compare.h>)
+#include <nw/sa_compare.h>
 #include <arpa/inet.h>
 #include <sys/sysctl.h>
 #include <limits.h>
 #include <CommonCrypto/CommonDigest.h>
 
 #include "ip_plugin.h"
+#include "serviceIDNumber.h"
 
 #include <SystemConfiguration/SystemConfiguration.h>
 #include <SystemConfiguration/SCDynamicStoreCopyDHCPInfo.h>
 #include "network_state_information_logging.h"
 #include "network_information_server.h"
 #include <ppp/ppp_msg.h>
-#if    !TARGET_OS_SIMULATOR
+#if    !TARGET_OS_SIMULATOR && !TEST_IPV4_ROUTELIST && !TEST_IPV6_ROUTELIST
 #include "set-hostname.h"
-#endif /* !TARGET_OS_SIMULATOR */
-
-#include "dns-configuration.h"
-
-#if    !TARGET_OS_SIMULATOR
 #include "nat64-configuration.h"
-#endif /* !TARGET_OS_SIMULATOR */
+#include "agent-monitor.h"
+#endif /* TARGET_OS_SIMULATOR && !TEST_IPV4_ROUTELIST && !TEST_IPV6_ROUTELIST */
 
+#include "dns-configuration.h"
 #include "proxy-configuration.h"
 
-#if !TARGET_OS_SIMULATOR
-#include "agent-monitor.h"
-#endif // !TARGET_OS_SIMULATOR
-
 #if    !TARGET_OS_IPHONE
 #include "smb-configuration.h"
 #endif /* !TARGET_OS_IPHONE */
@@ -159,7 +149,7 @@ enum {
     kDebugFlagAll      = 0xffffffff
 };
 
-typedef unsigned int   IFIndex;
+typedef unsigned int   IFIndex;        /* interface index */
 
 static dispatch_queue_t                __network_change_queue(void);
 
@@ -180,7 +170,6 @@ __log_IPMonitor(void)
     return log;
 }
 
-
 #pragma mark -
 #pragma mark interface index
 
@@ -426,7 +415,8 @@ typedef CF_ENUM(uint16_t, ControlFlags) {
     IFIndex            exclude_ifindex;        \
     Rank               rank;                   \
     RouteFlags         flags;                  \
-    ControlFlags       control_flags;
+    ControlFlags       control_flags;          \
+    serviceIDNumber    sidn;
 
 typedef struct {
     ROUTE_COMMON
@@ -600,11 +590,13 @@ static Boolean                    S_IPMonitor_verbose = FALSE;
 static boolean_t               S_netboot = FALSE;
 
 /* dictionary to hold per-service state: key is the serviceID */
-static CFMutableDictionaryRef  S_service_state_dict = NULL;
-static CFMutableDictionaryRef  S_ipv4_service_rank_dict = NULL;
-static CFMutableDictionaryRef  S_ipv6_service_rank_dict = NULL;
+static CFMutableDictionaryRef  S_service_state_dict;
+
+/* dictionaries to hold per-service rank: key is the serviceID */
+static CFMutableDictionaryRef  S_ipv4_service_rank_dict;
+static CFMutableDictionaryRef  S_ipv6_service_rank_dict;
 
-/* dictionary to hold per-interface rank information */
+/* dictionary to hold per-interface rank information: key is the ifname */
 static CFDictionaryRef         S_if_rank_dict;
 
 /* if set, a PPP interface overrides the primary */
@@ -628,6 +620,8 @@ static CFStringRef          S_state_service_prefix = NULL;
 static CFStringRef             S_setup_global_ipv4 = NULL;
 static CFStringRef             S_setup_service_prefix = NULL;
 
+static CFStringRef             S_interface_delegation_prefix = NULL;
+
 static CFStringRef             S_multicast_resolvers = NULL;
 static CFStringRef             S_private_resolvers = NULL;
 
@@ -642,12 +636,6 @@ static CFDictionaryRef             S_dns_dict = NULL;
 
 static Boolean                 S_dnsinfo_synced = TRUE;
 
-#if    !TARGET_OS_SIMULATOR
-// Note: access should be gated with __network_change_queue()
-static CFMutableSetRef         S_nat64_prefix_changes = NULL;
-static CFMutableSetRef         S_nat64_prefix_requests = NULL;
-#endif /* !TARGET_OS_SIMULATOR */
-
 static nwi_state_t             S_nwi_state = NULL;
 static Boolean                 S_nwi_synced = TRUE;
 
@@ -707,6 +695,7 @@ static const CFStringRef *entityTypeNames[ENTITY_TYPES_COUNT] = {
 #endif /* !TARGET_OS_IPHONE */
 };
 
+
 static Boolean
 S_dict_get_boolean(CFDictionaryRef dict, CFStringRef key, Boolean def_value);
 
@@ -976,7 +965,7 @@ siocdradd_in6(int s, int if_index, const struct in6_addr * addr, u_char flags)
     struct in6_defrouter       dr;
     struct sockaddr_in6 *      sin6;
 
-    bzero(&dr, sizeof(dr));
+    memset(&dr, 0, sizeof(dr));
     sin6 = &dr.rtaddr;
     sin6->sin6_len = sizeof(struct sockaddr_in6);
     sin6->sin6_family = AF_INET6;
@@ -992,7 +981,7 @@ siocdrdel_in6(int s, int if_index, const struct in6_addr * addr)
     struct in6_defrouter       dr;
     struct sockaddr_in6 *      sin6;
 
-    bzero(&dr, sizeof(dr));
+    memset(&dr, 0, sizeof(dr));
     sin6 = &dr.rtaddr;
     sin6->sin6_len = sizeof(struct sockaddr_in6);
     sin6->sin6_family = AF_INET6;
@@ -1060,16 +1049,83 @@ my_CFDictionaryGetArray(CFDictionaryRef dict, CFStringRef key)
 }
 
 #if    !TARGET_OS_SIMULATOR
+
+typedef CF_ENUM(uint16_t, PLATDiscoveryOption) {
+    kPLATDiscoveryOptionStart,
+    kPLATDiscoveryOptionUpdate,
+    kPLATDiscoveryOptionCancel
+};
+
 static void
-my_CFSetAddValue_async(dispatch_queue_t queue, CFMutableSetRef *set, CFTypeRef value)
+my_CFSetAddValue(CFMutableSetRef * set_p, CFTypeRef value)
 {
-    CFRetain(value);
-    dispatch_async(queue, ^{
-       if (*set == NULL) {
-           *set = CFSetCreateMutable(NULL, 0, &kCFTypeSetCallBacks);
+       if (*set_p == NULL) {
+           *set_p = CFSetCreateMutable(NULL, 0, &kCFTypeSetCallBacks);
        }
-       CFSetAddValue(*set, value);
-       CFRelease(value);
+       CFSetAddValue(*set_p, value);
+}
+
+static void
+my_CFSetRemoveValue(CFMutableSetRef * set_p, CFTypeRef value)
+{
+    if (*set_p == NULL) {
+       return;
+    }
+    CFSetRemoveValue(*set_p, value);
+    if (CFSetGetCount(*set_p) == 0) {
+       my_CFRelease(set_p);
+    }
+}
+
+static Boolean
+my_CFSetContainsValue(CFSetRef set, CFTypeRef value)
+{
+    if (set == NULL) {
+       return (FALSE);
+    }
+    return (CFSetContainsValue(set, value));
+}
+
+// Note: must only accessed on __network_change_queue()
+static CFMutableSetRef         S_nat64_cancel_prefix_requests;
+static CFMutableSetRef         S_nat64_prefix_updates;
+static CFMutableSetRef         S_nat64_prefix_requests;
+
+static void
+set_plat_discovery_locked(PLATDiscoveryOption option, CFStringRef interface)
+{
+    switch (option) {
+    case kPLATDiscoveryOptionStart:
+       my_log(LOG_DEBUG, "NAT64 Start %@", interface);
+       my_CFSetAddValue(&S_nat64_prefix_requests, interface);
+       my_CFSetRemoveValue(&S_nat64_prefix_updates, interface);
+       my_CFSetRemoveValue(&S_nat64_cancel_prefix_requests, interface);
+       break;
+    case kPLATDiscoveryOptionUpdate:
+       my_log(LOG_DEBUG, "NAT64 Update %@", interface);
+       if (!my_CFSetContainsValue(S_nat64_prefix_requests, interface)) {
+           my_CFSetAddValue(&S_nat64_prefix_updates, interface);
+       }
+       my_CFSetRemoveValue(&S_nat64_cancel_prefix_requests, interface);
+       break;
+    case kPLATDiscoveryOptionCancel:
+       my_log(LOG_DEBUG, "NAT64 Cancel %@", interface);
+       my_CFSetRemoveValue(&S_nat64_prefix_requests, interface);
+       my_CFSetRemoveValue(&S_nat64_prefix_updates, interface);
+       my_CFSetAddValue(&S_nat64_cancel_prefix_requests, interface);
+       break;
+    default:
+       break;
+    }
+}
+
+static void
+set_plat_discovery(PLATDiscoveryOption option, CFStringRef interface)
+{
+    CFRetain(interface);
+    dispatch_async(__network_change_queue(), ^{
+           set_plat_discovery_locked(option, interface);
+           CFRelease(interface);
     });
 
     return;
@@ -1104,7 +1160,7 @@ cfstring_to_ipvx(int family, CFStringRef str, void * addr, size_t addr_size)
        return (TRUE);
     }
  done:
-    bzero(addr, addr_size);
+    memset(addr, 0, addr_size);
     return (FALSE);
 }
 
@@ -1465,12 +1521,12 @@ RouteListAddRouteAtIndex(RouteListInfoRef info, RouteListRef routes,
     else {
        /* make space at [where] */
        insert_route = RouteListGetRouteAtIndexSimple(info, routes, where);
-       bcopy(insert_route,
-             (void *)insert_route + info->element_size,
-             info->element_size * (routes->count - where));
+       memcpy((void *)insert_route + info->element_size,
+              insert_route,
+              info->element_size * (routes->count - where));
     }
     /* copy the route */
-    bcopy(this_route, insert_route, info->element_size);
+    memcpy(insert_route, this_route, info->element_size);
     routes->count++;
     return (insert_route);
 }
@@ -1491,9 +1547,9 @@ RouteListRemoveRouteAtIndex(RouteListInfoRef info, RouteListRef routes,
        RouteRef        remove_route;
 
        remove_route = RouteListGetRouteAtIndexSimple(info, routes, where);
-       bcopy((void *)remove_route + info->element_size,
-             remove_route,
-             info->element_size * (routes->count - where));
+       memcpy(remove_route,
+              (void *)remove_route + info->element_size,
+              info->element_size * (routes->count - where));
     }
     return;
 }
@@ -1535,7 +1591,7 @@ RouteListAddRoute(RouteListInfoRef info,
        size_t  alloc_size = (*info->list_compute_size)(init_size);
 
        routes = (RouteListRef)malloc(alloc_size);
-       bzero(routes, sizeof(*routes));
+       memset(routes, 0, alloc_size);
        routes->size = init_size;
     }
     for (i = 0, scan = RouteListGetFirstRoute(info, routes);
@@ -1610,7 +1666,7 @@ RouteListAddRoute(RouteListInfoRef info,
                else if (this_route->ifindex != 0) {
                    ifindex = this_route->ifindex;
                }
-               bcopy(this_route, scan, info->element_size);
+               memcpy(scan, this_route, info->element_size);
                scan->rank = this_rank;
                scan->ifindex = ifindex;
                scan->exclude_ifindex = 0;
@@ -2006,7 +2062,7 @@ RouteListApply(RouteListInfoRef info,
        /* both old and new are NULL, so there's nothing to do */
        return;
     }
-    bzero(&context, sizeof(context));
+    memset(&context, 0, sizeof(context));
     context.old_routes = old_routes;
     context.new_routes = new_routes;
     context.sockfd = sockfd;
@@ -2036,7 +2092,7 @@ RouteListApply(RouteListInfoRef info,
                RouteRef        old_route = NULL;
 
                old_route = RouteListFindRoute(info, old_routes, scan);
-               if (old_route != NULL) {
+               if (old_route != NULL && scan->sidn == old_route->sidn) {
                    /* preserve the control state in the new route */
                    scan->control_flags = old_route->control_flags;
                }
@@ -2164,6 +2220,11 @@ IPv4RouteCopyDescriptionWithString(IPv4RouteRef r, CFMutableStringRef str)
                             CFSTR(" Ifa " IP_FORMAT),
                             IP_LIST(&r->ifa));
     }
+#if !TEST_IPV4_ROUTELIST
+    CFStringAppendFormat(str, NULL,
+                        CFSTR(" <SID %ld>"),
+                        r->sidn);
+#endif
     RouteAddFlagsToDescription((RouteRef)r, str);
     return;
 }
@@ -2552,7 +2613,7 @@ IPv4RouteListFinalize(IPv4RouteListRef routes)
 }
 #endif /* !TARGET_OS_SIMULATOR */
 
-#ifdef TEST_IPV4_ROUTELIST
+#if TEST_IPV4_ROUTELIST
 static IPv4RouteListRef
 IPv4RouteListAddRouteList(IPv4RouteListRef routes, int init_size,
                          IPv4RouteListRef service_routes, Rank rank)
@@ -2588,6 +2649,7 @@ typedef struct {
     IPv4RouteRef *     route_p;
     Rank               rank;
     const char *       descr;
+    serviceIDNumber    sidn;
 } AddIPv4RouteContext, * AddIPv4RouteContextRef;
 
 static void
@@ -2619,6 +2681,7 @@ AddIPv4Route(const void * value, void * context)
     }
     r->rank = ctx->rank;
     r->exclude_ifindex = ctx->exclude_ifindex;
+    r->sidn = ctx->sidn;
     if (ctx->ifindex != 0) {
        r->ifindex = ctx->ifindex;
        r->ifa = ctx->addr;
@@ -2696,7 +2759,8 @@ confirm_interface_name(CFDictionaryRef dict, CFStringRef ifname)
 static IPv4RouteListRef
 IPv4RouteListCreateWithDictionary(IPv4RouteListRef routes,
                                  CFDictionaryRef dict,
-                                 CFNumberRef rank_assertion)
+                                 CFNumberRef rank_assertion,
+                                 serviceIDNumber sidn)
 {
     boolean_t          add_broadcast_multicast = FALSE;
     boolean_t          add_default = FALSE;
@@ -2848,11 +2912,11 @@ IPv4RouteListCreateWithDictionary(IPv4RouteListRef routes,
     }
     if (routes == NULL || routes->size < n) {
        routes = (IPv4RouteListRef)malloc(IPv4RouteListComputeSize(n));
-       bzero(routes, IPv4RouteListComputeSize(n));
+       memset(routes, 0, IPv4RouteListComputeSize(n));
        routes->size = n;
     }
     else {
-       bzero(routes->list, sizeof(routes->list[0]) * n);
+       memset(routes->list, 0, sizeof(routes->list[0]) * n);
     }
     routes->count = n;
     if (exclude_from_nwi) {
@@ -2868,6 +2932,7 @@ IPv4RouteListCreateWithDictionary(IPv4RouteListRef routes,
     if (add_default) {
        /* add the default route */
        routes->flags |= kRouteListFlagsHasDefault;
+       r->sidn = sidn;
        r->ifindex = ifindex;
        r->ifa = addr;
        r->flags = flags;
@@ -2889,6 +2954,7 @@ IPv4RouteListCreateWithDictionary(IPv4RouteListRef routes,
        r->mask.s_addr = INADDR_BROADCAST;
        r->prefix_length = IPV4_ROUTE_ALL_BITS_SET;
        r->ifindex = ifindex;
+       r->sidn = sidn;
        r->ifa = addr;
        r->rank = rank;
        r++;
@@ -2901,6 +2967,7 @@ IPv4RouteListCreateWithDictionary(IPv4RouteListRef routes,
        r->mask.s_addr = htonl(IN_CLASSD_NET);
        r->prefix_length = PREFIX_LENGTH_IN_CLASSD;
        r->ifindex = ifindex;
+       r->sidn = sidn;
        r->ifa = addr;
        r->rank = rank;
        r++;
@@ -2913,6 +2980,7 @@ IPv4RouteListCreateWithDictionary(IPv4RouteListRef routes,
            r->flags |= kRouteFlagsIsNULL;
        }
        r->ifindex = ifindex;
+       r->sidn = sidn;
        r->gateway = addr;
        r->dest = subnet;
        r->mask = mask;
@@ -2928,6 +2996,7 @@ IPv4RouteListCreateWithDictionary(IPv4RouteListRef routes,
            r->flags |= kRouteFlagsIsNULL;
        }
        r->ifindex = ifindex;
+       r->sidn = sidn;
        r->gateway = addr;
        r->dest = router;
        r->mask.s_addr = INADDR_BROADCAST;
@@ -2940,7 +3009,7 @@ IPv4RouteListCreateWithDictionary(IPv4RouteListRef routes,
     if (additional_routes != NULL || excluded_routes != NULL) {
        AddIPv4RouteContext             context;
 
-       bzero(&context, sizeof(context));
+       memset(&context, 0, sizeof(context));
        context.count_p = &routes->count;
        context.route_p = &r;
        context.rank = rank;
@@ -2950,6 +3019,7 @@ IPv4RouteListCreateWithDictionary(IPv4RouteListRef routes,
            context.ifindex = ifindex;
            context.addr = addr;
            context.descr = "AdditionalRoutes";
+           context.sidn = sidn;
            CFArrayApplyFunction(additional_routes,
                                 CFRangeMake(0, additional_routes_count),
                                 AddIPv4Route, &context);
@@ -2960,6 +3030,7 @@ IPv4RouteListCreateWithDictionary(IPv4RouteListRef routes,
            /* exclude this interface */
            context.ifindex = 0;
            context.exclude_ifindex = ifindex;
+           context.sidn = sidn;
            CFArrayApplyFunction(excluded_routes,
                                 CFRangeMake(0, excluded_routes_count),
                                 AddIPv4Route, &context);
@@ -2976,7 +3047,7 @@ IPv4RouteListCopyMulticastLoopback(void)
     IPv4RouteListRef   routes;
 
     routes = (IPv4RouteListRef)malloc(IPv4RouteListComputeSize(1));
-    bzero(routes, IPv4RouteListComputeSize(1));
+    memset(routes, 0, IPv4RouteListComputeSize(1));
     routes->count = routes->size = 1;
 
     r = routes->list;
@@ -2984,6 +3055,7 @@ IPv4RouteListCopyMulticastLoopback(void)
     r->mask.s_addr = htonl(IN_CLASSC_NET);
     r->prefix_length = PREFIX_LENGTH_IN_CLASSC;
     r->ifindex = lo0_ifindex();
+    r->sidn = kserviceIDNumberZero;
     return (routes);
 }
 #endif /* !TARGET_OS_SIMULATOR */
@@ -3010,7 +3082,7 @@ in6_len2mask(struct in6_addr * mask, int len)
 {
     int i;
 
-    bzero(mask, sizeof(*mask));
+    memset(mask, 0, sizeof(*mask));
     for (i = 0; i < len / 8; i++)
        mask->s6_addr[i] = 0xff;
     if (len % 8)
@@ -3078,6 +3150,11 @@ IPv6RouteCopyDescriptionWithString(IPv6RouteRef r, CFMutableStringRef str)
        CFStringAppend(str, CFSTR(" Ifa "));
        string_append_in6_addr(str, &r->ifa);
     }
+#if !TEST_IPV6_ROUTELIST
+    CFStringAppendFormat(str, NULL,
+                        CFSTR(" <SID %ld>"),
+                        r->sidn);
+#endif
     RouteAddFlagsToDescription((RouteRef)r, str);
     return;
 }
@@ -3110,7 +3187,7 @@ IPv6RouteListCopyDescription(IPv6RouteListRef routes)
     return (str);
 }
 
-#ifdef TEST_IPV6_ROUTELIST
+#if TEST_IPV6_ROUTELIST
 
 static void
 IPv6RouteLog(int level, RouteRef route, const char * msg)
@@ -3171,6 +3248,7 @@ typedef struct {
     IPv6RouteRef *     route_p;
     Rank               rank;
     const char *       descr;
+    serviceIDNumber    sidn;
 } AddIPv6RouteContext, * AddIPv6RouteContextRef;
 
 static void
@@ -3199,6 +3277,7 @@ AddIPv6Route(const void * value, void * context)
     }
     r->rank = ctx->rank;
     r->exclude_ifindex = ctx->exclude_ifindex;
+    r->sidn = ctx->sidn;
     if (ctx->ifindex != 0) {
        r->ifindex = ctx->ifindex;
        r->ifa = *ctx->addr;
@@ -3257,7 +3336,8 @@ AddIPv6Route(const void * value, void * context)
 static IPv6RouteListRef
 IPv6RouteListCreateWithDictionary(IPv6RouteListRef routes,
                                  CFDictionaryRef dict,
-                                 CFNumberRef rank_assertion)
+                                 CFNumberRef rank_assertion,
+                                 serviceIDNumber sidn)
 {
     boolean_t          add_default = FALSE;
     boolean_t          add_prefix = FALSE;
@@ -3387,11 +3467,11 @@ IPv6RouteListCreateWithDictionary(IPv6RouteListRef routes,
 
     if (routes == NULL || routes->size < n) {
        routes = (IPv6RouteListRef)malloc(IPv6RouteListComputeSize(n));
-       bzero(routes, IPv6RouteListComputeSize(n));
+       memset(routes, 0, IPv6RouteListComputeSize(n));
        routes->size = n;
     }
     else {
-       bzero(routes->list, sizeof(routes->list[0]) * n);
+       memset(routes->list, 0, sizeof(routes->list[0]) * n);
     }
     routes->count = n;
     if (exclude_from_nwi) {
@@ -3407,6 +3487,7 @@ IPv6RouteListCreateWithDictionary(IPv6RouteListRef routes,
        /* add the default route */
        routes->flags |= kRouteListFlagsHasDefault;
        r->ifindex = ifindex;
+       r->sidn = sidn;
        r->ifa = addr;
        r->flags = flags;
        if ((flags & kRouteFlagsHasGateway) != 0) {
@@ -3423,6 +3504,7 @@ IPv6RouteListCreateWithDictionary(IPv6RouteListRef routes,
 
     /* add IPv6LL route */
     r->ifindex = ifindex;
+    r->sidn = sidn;
     r->dest.s6_addr[0] = 0xfe;
     r->dest.s6_addr[1] = 0x80;
     r->prefix_length = 64;
@@ -3438,6 +3520,7 @@ IPv6RouteListCreateWithDictionary(IPv6RouteListRef routes,
            r->flags |= kRouteFlagsIsNULL;
        }
        r->ifindex = ifindex;
+       r->sidn = sidn;
        r->gateway = addr;
        r->dest = addr;
        in6_netaddr(&r->dest, prefix_length);
@@ -3450,7 +3533,7 @@ IPv6RouteListCreateWithDictionary(IPv6RouteListRef routes,
     if (additional_routes != NULL || excluded_routes != NULL) {
        AddIPv6RouteContext             context;
 
-       bzero(&context, sizeof(context));
+       memset(&context, 0, sizeof(context));
        context.count_p = &routes->count;
        context.route_p = &r;
        context.rank = rank;
@@ -3460,6 +3543,7 @@ IPv6RouteListCreateWithDictionary(IPv6RouteListRef routes,
            context.ifindex = ifindex;
            context.addr = &addr;
            context.descr = "AdditionalRoutes";
+           context.sidn = sidn;
            CFArrayApplyFunction(additional_routes,
                                 CFRangeMake(0, additional_routes_count),
                                 AddIPv6Route, &context);
@@ -3471,6 +3555,7 @@ IPv6RouteListCreateWithDictionary(IPv6RouteListRef routes,
            context.ifindex = 0;
            context.exclude_ifindex = ifindex;
            context.addr = NULL;
+           context.sidn = sidn;
            CFArrayApplyFunction(excluded_routes,
                                 CFRangeMake(0, excluded_routes_count),
                                 AddIPv6Route, &context);
@@ -3573,7 +3658,7 @@ IPv6RouteApply(RouteRef r_route, int cmd, int sockfd)
        return (ENXIO);
     }
     if (sockfd == -1) {
-#ifdef TEST_IPV6_ROUTELIST
+#if TEST_IPV6_ROUTELIST
        return (0);
 #else /* TEST_IPV6_ROUTELIST */
        return (EBADF);
@@ -3680,7 +3765,7 @@ static const RouteListInfo IPv6RouteListInfo = {
     IPV6_ROUTE_ALL_BITS_SET
 };
 
-#ifdef TEST_IPV6_ROUTELIST
+#if TEST_IPV6_ROUTELIST
 static IPv6RouteListRef
 IPv6RouteListAddRouteList(IPv6RouteListRef routes, int init_size,
                          IPv6RouteListRef service_routes, Rank rank)
@@ -3759,7 +3844,7 @@ parse_component(CFStringRef key, CFStringRef prefix)
 
 
 static boolean_t
-entity_routes_protocol(CFDictionaryRef entity_dict)
+ipdict_is_routable(CFDictionaryRef entity_dict)
 {
     RouteListRef       routes;
 
@@ -3784,7 +3869,7 @@ entity_routes_protocol(CFDictionaryRef entity_dict)
 
 
 __private_extern__ boolean_t
-service_contains_protocol(CFDictionaryRef service_dict, int af)
+service_is_routable(CFDictionaryRef service_dict, int af)
 {
     boolean_t          contains_protocol;
     CFStringRef                entity;
@@ -3796,7 +3881,7 @@ service_contains_protocol(CFDictionaryRef service_dict, int af)
        return FALSE;
     }
 
-    contains_protocol = entity_routes_protocol(entity_dict);
+    contains_protocol = ipdict_is_routable(entity_dict);
     return contains_protocol;
 }
 
@@ -3821,7 +3906,6 @@ service_dict_copy(CFStringRef serviceID)
     return (service_dict);
 }
 
-
 __private_extern__ boolean_t
 service_is_scoped_only(CFDictionaryRef service_dict)
 {
@@ -3882,7 +3966,8 @@ static void
 log_service_entity(int level, CFStringRef serviceID, CFStringRef entity,
                   CFStringRef operation, CFTypeRef val)
 {
-    CFMutableStringRef this_val = NULL;
+    serviceIDNumber    service_number;
+    CFMutableStringRef         this_val = NULL;
 
     if (val != NULL) {
        boolean_t       is_ipv4;
@@ -3915,8 +4000,14 @@ log_service_entity(int level, CFStringRef serviceID, CFStringRef entity,
     if (val == NULL) {
        val = CFSTR("<none>");
     }
-    my_log(level, "serviceID %@ %@ %@ value = %@",
-          serviceID, operation, entity, val);
+    if (serviceIDNumberGetIfPresent(serviceID, &service_number)) {
+       my_log(level, "serviceID %@ <SID %ld> %@ %@ value = %@",
+              serviceID, service_number, operation, entity, val);
+    }
+    else {
+       my_log(level, "serviceID %@ %@ %@ value = %@",
+              serviceID, operation, entity, val);
+    }
     my_CFRelease(&this_val);
     return;
 }
@@ -3955,6 +4046,7 @@ service_dict_set(CFStringRef serviceID, CFStringRef entity,
     }
     if (CFDictionaryGetCount(service_dict) == 0) {
        CFDictionaryRemoveValue(S_service_state_dict, serviceID);
+       serviceIDNumberRemove(serviceID);
     }
     else {
        CFDictionarySetValue(S_service_state_dict, serviceID, service_dict);
@@ -4282,13 +4374,15 @@ pick_prop(CFMutableDictionaryRef        dict,
     routes->flags = 0;
 
 static CFDataRef
-IPv4RouteListDataCreate(CFDictionaryRef dict, CFNumberRef rank_assertion)
+IPv4RouteListDataCreate(CFDictionaryRef dict, CFNumberRef rank_assertion,
+                       serviceIDNumber sidn)
 {
     IPv4RouteListRef   r;
     CFDataRef          routes_data;
     IPV4_ROUTES_BUF_DECL(routes);
 
-    r = IPv4RouteListCreateWithDictionary(routes, dict, rank_assertion);
+    r = IPv4RouteListCreateWithDictionary(routes, dict, rank_assertion,
+                                         sidn);
     if (r != NULL) {
        routes_data = CFDataCreate(NULL,
                                   (const void *)r,
@@ -4318,13 +4412,15 @@ IPv4RouteListDataCreate(CFDictionaryRef dict, CFNumberRef rank_assertion)
     routes->flags = 0;
 
 static CFDataRef
-IPv6RouteListDataCreate(CFDictionaryRef dict, CFNumberRef rank_assertion)
+IPv6RouteListDataCreate(CFDictionaryRef dict, CFNumberRef rank_assertion,
+                       serviceIDNumber sidn)
 {
     IPv6RouteListRef   r;
     CFDataRef          routes_data;
     IPV6_ROUTES_BUF_DECL(routes);
 
-    r = IPv6RouteListCreateWithDictionary(routes, dict, rank_assertion);
+    r = IPv6RouteListCreateWithDictionary(routes, dict, rank_assertion,
+                                         sidn);
     if (r != NULL) {
        routes_data = CFDataCreate(NULL,
                                   (const void *)r,
@@ -4340,22 +4436,25 @@ IPv6RouteListDataCreate(CFDictionaryRef dict, CFNumberRef rank_assertion)
 }
 
 static CFDictionaryRef
-IPDictCreate(int af, CFDictionaryRef state_dict, CFDictionaryRef setup_dict,
-            CFNumberRef rank_assertion)
+IPDictCreate(int af, _Nonnull CFDictionaryRef state_dict,
+            CFDictionaryRef setup_dict,
+            CFNumberRef rank_assertion, CFStringRef serviceID)
 {
     CFDictionaryRef            aggregated_dict = NULL;
     CFDictionaryRef            dict;
     CFMutableDictionaryRef     modified_dict = NULL;
     CFDataRef                  routes_data;
+    serviceIDNumber            sidn;
 
+    sidn = serviceIDNumberGet(serviceID);
     dict = state_dict;
-    if (dict != NULL && setup_dict != NULL) {
+    if (setup_dict != NULL) {
        /* look for keys in Setup: that override/merge with State: */
        CFArrayRef      additional_routes;
+       CFStringRef     route_list_prop;
        CFStringRef     router;
        in_addr         router_ip;
        CFStringRef     router_prop;
-       CFStringRef     route_list_prop;
 
        /* Router */
        switch (af) {
@@ -4412,11 +4511,11 @@ IPDictCreate(int af, CFDictionaryRef state_dict, CFDictionaryRef setup_dict,
     }
     switch (af) {
     case AF_INET:
-       routes_data = IPv4RouteListDataCreate(dict, rank_assertion);
+       routes_data = IPv4RouteListDataCreate(dict, rank_assertion, sidn);
        break;
     default:
     case AF_INET6:
-       routes_data = IPv6RouteListDataCreate(dict, rank_assertion);
+       routes_data = IPv6RouteListDataCreate(dict, rank_assertion, sidn);
        break;
     }
     if (routes_data != NULL) {
@@ -4448,7 +4547,8 @@ get_ipv4_changes(CFStringRef serviceID, CFDictionaryRef state_dict,
            = CFDictionaryGetValue(service_options,
                                   kServiceOptionRankAssertion);
     }
-    dict = IPDictCreate(AF_INET, state_dict, setup_dict, rank_assertion);
+    dict = IPDictCreate(AF_INET, state_dict, setup_dict, rank_assertion,
+                       serviceID);
 
   done:
     changed = service_dict_set(serviceID, kSCEntNetIPv4, dict);
@@ -4475,10 +4575,8 @@ get_ipv6_changes(CFStringRef serviceID, CFDictionaryRef state_dict,
     CFDictionaryRef            service_options;
 
     if (state_dict == NULL) {
-       // if no State:
        goto done;
     }
-
     service_options = service_dict_get(serviceID, kSCEntNetService);
     if (service_options != NULL) {
        rank_assertion
@@ -4486,15 +4584,13 @@ get_ipv6_changes(CFStringRef serviceID, CFDictionaryRef state_dict,
                                   kServiceOptionRankAssertion);
     }
 
-    dict = IPDictCreate(AF_INET6, state_dict, setup_dict, rank_assertion);
+    dict = IPDictCreate(AF_INET6, state_dict, setup_dict, rank_assertion,
+                       serviceID);
 
   done:
 
 #if    !TARGET_OS_SIMULATOR
     interface = service_copy_interface(serviceID, dict);
-#endif /* !TARGET_OS_SIMULATOR */
-
-#if    !TARGET_OS_SIMULATOR
     ipv6_service_update_router(serviceID, dict);
 #endif /* !TARGET_OS_SIMULATOR */
 
@@ -4505,17 +4601,20 @@ get_ipv6_changes(CFStringRef serviceID, CFDictionaryRef state_dict,
        if (changed) {
            CFBooleanRef        needs_plat      = NULL;
 
-           if ((state_dict != NULL) &&
+           if (dict == NULL) {
+               // if service is unpublished, cancel the request
+               set_plat_discovery(kPLATDiscoveryOptionCancel, interface);
+           } else if ((state_dict != NULL) &&
                CFDictionaryGetValueIfPresent(state_dict,
                                              kSCPropNetIPv6PerformPLATDiscovery,
                                              (const void **)&needs_plat) &&
-               isA_CFBoolean(needs_plat) &&
+               isA_CFBoolean(needs_plat) &&
                CFBooleanGetValue(needs_plat)) {
                // perform PLAT discovery
-               my_CFSetAddValue_async(__network_change_queue(), &S_nat64_prefix_requests, interface);
+               set_plat_discovery(kPLATDiscoveryOptionStart, interface);
            } else {
                // IPv6 configuration changed for this interface, poke NAT64
-               my_CFSetAddValue_async(__network_change_queue(), &S_nat64_prefix_changes, interface);
+               set_plat_discovery(kPLATDiscoveryOptionUpdate, interface);
            }
        }
        CFRelease(interface);
@@ -4535,13 +4634,13 @@ get_ipv6_changes(CFStringRef serviceID, CFDictionaryRef state_dict,
 __private_extern__ CFDictionaryRef
 ipv4_dict_create(CFDictionaryRef state_dict)
 {
-    return (IPDictCreate(AF_INET, state_dict, NULL, NULL));
+    return (IPDictCreate(AF_INET, state_dict, NULL, NULL, NULL));
 }
 
 __private_extern__ CFDictionaryRef
 ipv6_dict_create(CFDictionaryRef state_dict)
 {
-    return (IPDictCreate(AF_INET6, state_dict, NULL, NULL));
+    return (IPDictCreate(AF_INET6, state_dict, NULL, NULL, NULL));
 }
 
 #endif /* TEST_DNS */
@@ -4654,7 +4753,7 @@ order_dns_servers(CFArrayRef servers, ProtocolFlags active_protos)
        } else if (cfstring_to_ip6(server, &ia6)) {
            proto = kProtocolFlagsIPv6;
            if (v6_n++ == 0) {
-               bcopy(&ia6, &v6_dns1.sin6_addr, sizeof(ia6));
+               memcpy(&v6_dns1.sin6_addr, &ia6, sizeof(ia6));
            }
        } else {
            CFRelease(ordered_servers);
@@ -4666,13 +4765,8 @@ order_dns_servers(CFArrayRef servers, ProtocolFlags active_protos)
            if (((proto == kProtocolFlagsIPv4) && (v4_n == 1)) ||
                ((proto == kProtocolFlagsIPv6) && (v6_n == 1))) {
                /* if we now have the 1st server address of another protocol */
-#if __has_include(<si_compare.h>)
-               favor_v4 = (si_destination_compare_no_dependencies((struct sockaddr *)&v4_dns1,
-                                                                  (struct sockaddr *)&v6_dns1) >= 0);
-#else // __has_include(<si_compare.h>)
                favor_v4 = (sa_dst_compare_no_dependencies((struct sockaddr *)&v4_dns1,
                                                           (struct sockaddr *)&v6_dns1) >= 0);
-#endif // __has_include(<si_compare.h>)
 #ifdef TEST_DNS_ORDER
                char v4_buf[INET_ADDRSTRLEN];
                char v6_buf[INET6_ADDRSTRLEN];
@@ -4825,7 +4919,7 @@ get_dns_changes(CFStringRef serviceID, CFDictionaryRef state_dict,
     }
 
     ipv4 = service_dict_get(serviceID, kSCEntNetIPv4);
-    if (entity_routes_protocol(ipv4)) {
+    if (ipdict_is_routable(ipv4)) {
        if (get_service_setup_entity(info, serviceID, kSCEntNetIPv4) != NULL) {
            have_setup = TRUE;
        }
@@ -4834,7 +4928,7 @@ get_dns_changes(CFStringRef serviceID, CFDictionaryRef state_dict,
     }
 
     ipv6 = service_dict_get(serviceID, kSCEntNetIPv6);
-    if (entity_routes_protocol(ipv6)) {
+    if (ipdict_is_routable(ipv6)) {
        if (!have_setup &&
            (get_service_setup_entity(info, serviceID, kSCEntNetIPv6) != NULL)) {
            have_setup = TRUE;
@@ -4982,7 +5076,9 @@ get_dns_changes(CFStringRef serviceID, CFDictionaryRef state_dict,
     if (interface != NULL) {
        if (changed) {
            // DNS configuration changed for this interface, poke NAT64
-           my_CFSetAddValue_async(__network_change_queue(), &S_nat64_prefix_changes, interface);
+           if ((active_protos & kProtocolFlagsIPv6) != 0) {
+               set_plat_discovery(kPLATDiscoveryOptionUpdate, interface);
+           }
        }
        CFRelease(interface);
     }
@@ -5102,12 +5198,12 @@ get_proxies_changes(CFStringRef serviceID, CFDictionaryRef state_dict,
        goto done;
     }
     ipv4 = service_dict_get(serviceID, kSCEntNetIPv4);
-    if (entity_routes_protocol(ipv4)) {
+    if (ipdict_is_routable(ipv4)) {
        active_protos |= kProtocolFlagsIPv4;
        interface = ipdict_get_ifname(ipv4);
     }
     ipv6 = service_dict_get(serviceID, kSCEntNetIPv6);
-    if (entity_routes_protocol(ipv6)) {
+    if (ipdict_is_routable(ipv6)) {
        active_protos |= kProtocolFlagsIPv6;
        if (interface == NULL) {
            interface = ipdict_get_ifname(ipv6);
@@ -5521,11 +5617,12 @@ get_rank_changes(CFStringRef serviceID, CFDictionaryRef state_options,
     CFStringRef                interface;
     boolean_t                  ip_is_coupled   = FALSE;
     CFMutableDictionaryRef      new_dict       = NULL;
-    Rank                       rank_assertion = kRankAssertionDefault;
+    Rank                       rank_assertion  = kRankAssertionDefault;
     Boolean                    rank_assertion_is_set = FALSE;
     CFStringRef                        setup_rank      = NULL;
     CFStringRef                        state_rank      = NULL;
     CFNumberRef                        service_index   = NULL;
+    boolean_t                  use_setup_rank  = TRUE;
 
 
     if (setup_options != NULL) {
@@ -5534,6 +5631,11 @@ get_rank_changes(CFStringRef serviceID, CFDictionaryRef state_options,
        setup_rank
            = CFDictionaryGetValue(setup_options, kSCPropNetServicePrimaryRank);
        setup_rank = isA_CFString(setup_rank);
+       if (setup_rank != NULL && !use_setup_rank) {
+           my_log(LOG_DEBUG, "%@ ignoring Setup PrimaryRank = %@",
+                  serviceID, setup_rank);
+           setup_rank = NULL;
+       }
        coupled = CFDictionaryGetValue(setup_options, kIPIsCoupled);
        if (isA_CFBoolean(coupled) != NULL && CFBooleanGetValue(coupled)) {
            ip_is_coupled = TRUE;
@@ -5653,8 +5755,9 @@ get_rank_changes(CFStringRef serviceID, CFDictionaryRef state_options,
 }
 
 static void
-add_service_keys(CFStringRef serviceID,
-                CFMutableArrayRef keys, CFMutableArrayRef patterns)
+add_service_keys(CFStringRef           serviceID,
+                CFMutableArrayRef      keys,
+                CFMutableArrayRef      patterns)
 {
     int                        i;
     CFStringRef                key;
@@ -5667,37 +5770,43 @@ add_service_keys(CFStringRef serviceID,
        CFStringRef     name    = *entityTypeNames[i];
 
        key = setup_service_key(serviceID, name);
-       CFArrayAppendValue(keys, key);
+       my_CFArrayAppendUniqueValue(keys, key);
        CFRelease(key);
        key = state_service_key(serviceID, name);
-       CFArrayAppendValue(keys, key);
+       my_CFArrayAppendUniqueValue(keys, key);
        CFRelease(key);
     }
 
     key = state_service_key(serviceID, kSCEntNetDHCP);
-    CFArrayAppendValue(patterns, key);
+    my_CFArrayAppendUniqueValue(keys, key);
     CFRelease(key);
 
     key = setup_service_key(serviceID, NULL);
-    CFArrayAppendValue(patterns, key);
+    my_CFArrayAppendUniqueValue(keys, key);
     CFRelease(key);
     key = state_service_key(serviceID, NULL);
-    CFArrayAppendValue(patterns, key);
+    my_CFArrayAppendUniqueValue(keys, key);
     CFRelease(key);
 
     return;
 }
 
 static void
-add_transient_status_keys(CFStringRef service_id, CFMutableArrayRef patterns)
+add_transient_status_keys(CFStringRef          serviceID,
+                         CFMutableArrayRef     keys,
+                         CFMutableArrayRef     patterns)
 {
+    if (CFEqual(serviceID, kSCCompAnyRegex)) {
+       keys = patterns;
+    }
+
     for (size_t i = 0; i < countof(transientServiceInfo); i++) {
-       CFStringRef     pattern;
+       CFStringRef     key;
 
-       pattern = state_service_key(service_id,
-                                   *transientServiceInfo[i].entityName);
-       CFArrayAppendValue(patterns, pattern);
-       CFRelease(pattern);
+       key = state_service_key(serviceID,
+                               *transientServiceInfo[i].entityName);
+       my_CFArrayAppendUniqueValue(keys, key);
+       CFRelease(key);
     }
 
     return;
@@ -5717,7 +5826,7 @@ add_reachability_patterns(CFMutableArrayRef patterns)
     for (size_t i = 0; i < countof(reachabilitySetupKeys); i++) {
        CFStringRef pattern;
        pattern = setup_service_key(kSCCompAnyRegex, *reachabilitySetupKeys[i]);
-       CFArrayAppendValue(patterns, pattern);
+       my_CFArrayAppendUniqueValue(patterns, pattern);
        CFRelease(pattern);
     }
 }
@@ -5729,7 +5838,7 @@ add_vpn_pattern(CFMutableArrayRef patterns)
     CFStringRef        pattern;
 
     pattern = setup_service_key(kSCCompAnyRegex, kSCEntNetVPN);
-    CFArrayAppendValue(patterns, pattern);
+    my_CFArrayAppendUniqueValue(patterns, pattern);
     CFRelease(pattern);
 }
 
@@ -5739,7 +5848,7 @@ add_interface_link_pattern(CFMutableArrayRef patterns)
     CFStringRef        pattern;
 
     pattern = interface_entity_key_copy(kSCCompAnyRegex, kSCEntNetLink);
-    CFArrayAppendValue(patterns, pattern);
+    my_CFArrayAppendUniqueValue(patterns, pattern);
     CFRelease(pattern);
 }
 
@@ -5747,34 +5856,34 @@ static CFDictionaryRef
 services_info_copy(SCDynamicStoreRef session, CFArrayRef service_list)
 {
     CFIndex            count;
-    CFMutableArrayRef  get_keys;
-    CFMutableArrayRef  get_patterns;
+    CFMutableArrayRef  keys;
     CFDictionaryRef    info;
+    CFMutableArrayRef  patterns;
 
-    count = CFArrayGetCount(service_list);
-    get_keys = CFArrayCreateMutable(NULL, 0, &kCFTypeArrayCallBacks);
-    get_patterns = CFArrayCreateMutable(NULL, 0, &kCFTypeArrayCallBacks);
+    keys     = CFArrayCreateMutable(NULL, 0, &kCFTypeArrayCallBacks);
+    patterns = CFArrayCreateMutable(NULL, 0, &kCFTypeArrayCallBacks);
 
-    CFArrayAppendValue(get_keys, S_setup_global_ipv4);
-    CFArrayAppendValue(get_keys, S_multicast_resolvers);
-    CFArrayAppendValue(get_keys, S_private_resolvers);
+    CFArrayAppendValue(keys, S_setup_global_ipv4);
+    CFArrayAppendValue(keys, S_multicast_resolvers);
+    CFArrayAppendValue(keys, S_private_resolvers);
 
+    count = CFArrayGetCount(service_list);
     for (CFIndex s = 0; s < count; s++) {
        CFStringRef     serviceID = CFArrayGetValueAtIndex(service_list, s);
 
-       add_service_keys(serviceID, get_keys, get_patterns);
-       add_transient_status_keys(serviceID, get_keys);
+       add_service_keys(serviceID, keys, patterns);
+       add_transient_status_keys(serviceID, keys, patterns);
     }
 
-    add_reachability_patterns(get_patterns);
+    add_reachability_patterns(patterns);
 
-    add_vpn_pattern(get_patterns);
+    add_vpn_pattern(patterns);
 
-    add_interface_link_pattern(get_patterns);
+    add_interface_link_pattern(patterns);
 
-    info = SCDynamicStoreCopyMultiple(session, get_keys, get_patterns);
-    my_CFRelease(&get_keys);
-    my_CFRelease(&get_patterns);
+    info = SCDynamicStoreCopyMultiple(session, keys, patterns);
+    my_CFRelease(&keys);
+    my_CFRelease(&patterns);
     return (info);
 }
 
@@ -5787,7 +5896,7 @@ set_ipv6_default_interface(IFIndex ifindex)
     int                        sock;
     boolean_t          success = FALSE;
 
-    bzero((char *)&ndifreq, sizeof(ndifreq));
+    memset((char *)&ndifreq, 0, sizeof(ndifreq));
     strlcpy(ndifreq.ifname, kLoopbackInterface, sizeof(ndifreq.ifname));
     if (ifindex != 0) {
        ndifreq.ifindex = ifindex;
@@ -6225,25 +6334,27 @@ update_dnsinfo(CFDictionaryRef  services_info,
 static Boolean
 update_nwi(nwi_state_t state)
 {
-    unsigned char              signature[CC_SHA1_DIGEST_LENGTH];
-    static unsigned char       signature_last[CC_SHA1_DIGEST_LENGTH];
+    unsigned char              signature[CC_SHA256_DIGEST_LENGTH];
+    static unsigned char       signature_last[CC_SHA256_DIGEST_LENGTH];
 
-    _nwi_state_compute_sha1_hash(state, signature);
+    _nwi_state_compute_sha256_hash(state, signature);
     if (bcmp(signature, signature_last, sizeof(signature)) == 0) {
        my_log(LOG_DEBUG, "Not updating network information");
        return FALSE;
     }
 
     // save [new] signature
-    bcopy(signature, signature_last, sizeof(signature));
+    memcpy(signature_last, signature, sizeof(signature));
 
     // save [new] configuration
     my_log(LOG_INFO, "Updating network information");
     _nwi_state_log(state, TRUE, NULL);
 
+#if !TEST_IPV4_ROUTELIST && !TEST_IPV6_ROUTELIST
     if (!_nwi_state_store(state)) {
        my_log(LOG_ERR, "Notifying nwi_state_store failed");
     }
+#endif /* !TEST_IPV4_ROUTELIST && !TEST_IPV6_ROUTELIST */
 
     return TRUE;
 }
@@ -6425,7 +6536,7 @@ CollectTransientServices(const void * key,
 
     for (size_t i = 0; i < countof(transientInterfaceEntityNames); i++) {
        if (CFStringHasSuffix(service, *transientInterfaceEntityNames[i])) {
-           CFArrayAppendValue(vif_setup_keys, service);
+           my_CFArrayAppendUniqueValue(vif_setup_keys, service);
            break;
        }
     }
@@ -6997,22 +7108,22 @@ ElectionResultsCandidateNeedsDemotion(CandidateRef other_candidate,
 
 
 static void
-get_signature_sha1(CFStringRef         signature,
-                  unsigned char        * sha1)
+get_signature_sha256(CFStringRef               signature,
+                  unsigned char        * sha256)
 {
-    CC_SHA1_CTX            ctx;
-    CFDataRef      signature_data;
+    CC_SHA256_CTX      ctx;
+    CFDataRef          signature_data;
 
     signature_data = CFStringCreateExternalRepresentation(NULL,
                                                          signature,
                                                          kCFStringEncodingUTF8,
                                                          0);
 
-    CC_SHA1_Init(&ctx);
-    CC_SHA1_Update(&ctx,
+    CC_SHA256_Init(&ctx);
+    CC_SHA256_Update(&ctx,
                   CFDataGetBytePtr(signature_data),
                   (CC_LONG)CFDataGetLength(signature_data));
-    CC_SHA1_Final(sha1, &ctx);
+    CC_SHA256_Final(sha256, &ctx);
 
     CFRelease(signature_data);
 
@@ -7064,9 +7175,9 @@ add_candidate_to_nwi_state(nwi_state_t nwi_state, int af,
                                    (void *)&candidate->vpn_server_addr,
                                    candidate->reachability_flags);
     if (ifstate != NULL && candidate->signature) {
-       uint8_t     hash[CC_SHA1_DIGEST_LENGTH];
+       uint8_t     hash[CC_SHA256_DIGEST_LENGTH];
 
-       get_signature_sha1(candidate->signature, hash);
+       get_signature_sha256(candidate->signature, hash);
        nwi_ifstate_set_signature(ifstate, hash);
     }
     return;
@@ -7076,8 +7187,8 @@ add_candidate_to_nwi_state(nwi_state_t nwi_state, int af,
 static void
 add_reachability_flags_to_candidate(CandidateRef candidate, CFDictionaryRef services_info, int af)
 {
-    SCNetworkReachabilityFlags flags = kSCNetworkReachabilityFlagsReachable;
-    CFStringRef                        vpn_server_address = NULL;
+    SCNetworkReachabilityFlags flags                   = kSCNetworkReachabilityFlagsReachable;
+    CFStringRef                        vpn_server_address      = NULL;
 
     assert(candidate != NULL);
     assert(services_info != NULL);
@@ -7091,7 +7202,7 @@ add_reachability_flags_to_candidate(CandidateRef candidate, CFDictionaryRef serv
     candidate->reachability_flags = flags;
 
     if (vpn_server_address == NULL) {
-       bzero(&candidate->vpn_server_addr, sizeof(candidate->vpn_server_addr));
+       memset(&candidate->vpn_server_addr, 0, sizeof(candidate->vpn_server_addr));
     } else {
        char buf[128];
 
@@ -7291,7 +7402,7 @@ elect_ip(const void * key, const void * value, void * context)
        /* don't process loopback */
        return;
     }
-    bzero(&candidate, sizeof(candidate));
+    memset(&candidate, 0, sizeof(candidate));
     candidate.serviceID = (CFStringRef)key;
     if ((routelist.common->flags & kRouteListFlagsHasDefault) == 0) {
        /* no default route means it's ineligible to become primary */
@@ -7644,7 +7755,7 @@ siocsifnetsignature(int s, const char * ifname, int af,
 {
     struct if_nsreq    nsreq;
 
-    bzero(&nsreq, sizeof(nsreq));
+    memset(&nsreq, 0, sizeof(nsreq));
     strlcpy(nsreq.ifnsr_name, ifname, sizeof(nsreq.ifnsr_name));
     nsreq.ifnsr_family = af;
     if (signature_length > 0) {
@@ -7940,7 +8051,7 @@ post_network_change_when_ready()
 
 
     /* We are about to post a network change to everyone, get the agents up to date */
-#if    !TARGET_OS_SIMULATOR
+#if    !TARGET_OS_SIMULATOR && !TEST_IPV4_ROUTELIST && !TEST_IPV6_ROUTELIST
     if ((S_network_change_needed & NETWORK_CHANGE_DNS) != 0) {
        /* Setup or Update config agents */
        process_AgentMonitor_DNS();
@@ -7964,7 +8075,7 @@ post_network_change_when_ready()
     }
 
     if ((S_network_change_needed & NETWORK_CHANGE_PROXY) != 0) {
-#if    !TARGET_OS_SIMULATOR
+#if    !TARGET_OS_SIMULATOR && !TEST_IPV4_ROUTELIST && !TEST_IPV6_ROUTELIST
        /* Setup or Update config agents */
        process_AgentMonitor_Proxy();
 #endif //!TARGET_OS_SIMULATOR
@@ -7976,14 +8087,18 @@ post_network_change_when_ready()
     }
 
     if ((S_network_change_needed & NETWORK_CHANGE_NAT64) != 0) {
-#if    !TARGET_OS_SIMULATOR
+#if    !TARGET_OS_SIMULATOR && !TEST_IPV4_ROUTELIST && !TEST_IPV6_ROUTELIST
        // process any NAT64 prefix update requests (and refresh existing prefixes on change)
-       if ((S_nat64_prefix_requests != NULL) || (S_nat64_prefix_changes != NULL)) {
-           nat64_configuration_update(S_nat64_prefix_requests, S_nat64_prefix_changes);
+       if (S_nat64_prefix_requests != NULL || S_nat64_prefix_updates != NULL
+           || S_nat64_cancel_prefix_requests != NULL) {
+           nat64_configuration_update(S_nat64_prefix_requests,
+                                      S_nat64_prefix_updates,
+                                      S_nat64_cancel_prefix_requests);
            my_CFRelease(&S_nat64_prefix_requests);
-           my_CFRelease(&S_nat64_prefix_changes);
+           my_CFRelease(&S_nat64_prefix_updates);
+           my_CFRelease(&S_nat64_cancel_prefix_requests);
        }
-#endif /* !TARGET_OS_SIMULATOR */
+#endif /* TARGET_OS_SIMULATOR && !TEST_IPV4_ROUTELIST && !TEST_IPV6_ROUTELIST */
 
        S_network_change_needed &= ~(NETWORK_CHANGE_NAT64);
     }
@@ -8032,17 +8147,8 @@ post_network_change(uint32_t change)
                                                        0,
                                                        __network_change_queue());
        dispatch_source_set_event_handler(S_network_change_timer, ^{
-           os_activity_t       activity;
-
-           activity = os_activity_create("posting delayed network change",
-                                         OS_ACTIVITY_CURRENT,
-                                         OS_ACTIVITY_FLAG_DEFAULT);
-           os_activity_scope(activity);
-
            S_network_change_timeout = TRUE;
            post_network_change_when_ready();
-
-           os_release(activity);
        });
        dispatch_source_set_timer(S_network_change_timer,
                                  dispatch_time(DISPATCH_TIME_NOW,
@@ -8135,9 +8241,9 @@ IPMonitorProcessChanges(SCDynamicStoreRef session, CFArrayRef changed_keys,
 
     for (CFIndex i = 0; i < count; i++) {
        CFStringRef     change;
-#if    !TARGET_OS_SIMULATOR
+#if    !TARGET_OS_SIMULATOR && !TEST_IPV4_ROUTELIST && !TEST_IPV6_ROUTELIST
        CFStringRef     interface       = NULL;
-#endif /* !TARGET_OS_SIMULATOR */
+#endif /* TARGET_OS_SIMULATOR && !TEST_IPV4_ROUTELIST && !TEST_IPV6_ROUTELIST */
 
        change = CFArrayGetValueAtIndex(changed_keys, i);
        if (CFEqual(change, S_setup_global_ipv4)) {
@@ -8150,24 +8256,27 @@ IPMonitorProcessChanges(SCDynamicStoreRef session, CFArrayRef changed_keys,
        else if (CFEqual(change, S_private_resolvers)) {
            dnsinfo_changed = TRUE;
        }
-#if    !TARGET_OS_IPHONE
        else if (CFEqual(change, CFSTR(_PATH_RESOLVER_DIR))) {
            dnsinfo_changed = TRUE;
        }
-#endif /* !TARGET_OS_IPHONE */
+       else if (CFStringHasPrefix(change, S_interface_delegation_prefix) &&
+                CFStringHasSuffix(change, kSCEntNetInterfaceDelegation)) {
+               reachability_changed = TRUE;
+       }
        else if (CFStringHasPrefix(change, S_state_service_prefix)) {
            CFStringRef serviceID;
 
            serviceID = parse_component(change, S_state_service_prefix);
-           if (serviceID) {
+           if (serviceID != NULL) {
                my_CFArrayAppendUniqueValue(service_changes, serviceID);
                CFRelease(serviceID);
            }
        }
        else if (CFStringHasPrefix(change, S_setup_service_prefix)) {
-           CFStringRef serviceID = parse_component(change,
-                                                   S_setup_service_prefix);
-           if (serviceID) {
+           CFStringRef serviceID;
+
+           serviceID = parse_component(change, S_setup_service_prefix);
+           if (serviceID != NULL) {
                my_CFArrayAppendUniqueValue(service_changes, serviceID);
                CFRelease(serviceID);
            }
@@ -8184,12 +8293,12 @@ IPMonitorProcessChanges(SCDynamicStoreRef session, CFArrayRef changed_keys,
                 reachability_changed = TRUE;
            }
        }
-#if    !TARGET_OS_SIMULATOR
+#if    !TARGET_OS_SIMULATOR && !TEST_IPV4_ROUTELIST && !TEST_IPV6_ROUTELIST
        else if (is_nat64_prefix_request(change, &interface)) {
-           my_CFSetAddValue_async(__network_change_queue(), &S_nat64_prefix_requests, interface);
+           set_plat_discovery(kPLATDiscoveryOptionStart, interface);
            nat64_changed = TRUE;
        }
-#endif /* !TARGET_OS_SIMULATOR */
+#endif /* TARGET_OS_SIMULATOR && !TEST_IPV4_ROUTELIST && !TEST_IPV6_ROUTELIST */
     }
 
     /* determine which serviceIDs are impacted by the interface rank changes */
@@ -8566,7 +8675,7 @@ watch_proxies()
                             proxy_cb_queue,
                             ^{
                                 SCDynamicStoreNotifyValue(NULL, S_state_global_proxies);
-#if    !TARGET_OS_SIMULATOR
+#if    !TARGET_OS_SIMULATOR && !TEST_IPV4_ROUTELIST && !TEST_IPV6_ROUTELIST
                                 /* Setup or Update config agents */
                                 process_AgentMonitor_Proxy();
 #endif //!TARGET_OS_SIMULATOR
@@ -8577,6 +8686,15 @@ watch_proxies()
     return;
 }
 
+#if TEST_IPV4_ROUTELIST || TEST_IPV6_ROUTELIST
+
+static void
+prefs_changed_callback_init(void)
+{
+}
+
+#else /* TEST_IPV4_ROUTELIST || TEST_IPV6_ROUTELIST */
+
 #include "IPMonitorControlPrefs.h"
 
 static void
@@ -8595,6 +8713,17 @@ prefs_changed(SCPreferencesRef prefs)
     return;
 }
 
+static void
+prefs_changed_callback_init(void)
+{
+    IPMonitorControlPrefsInit(CFRunLoopGetCurrent(), prefs_changed);
+    prefs_changed(NULL);
+    return;
+}
+
+
+#endif /* TEST_IPV4_ROUTELIST || TEST_IPV6_ROUTELIST */
+
 #if    !TARGET_OS_SIMULATOR
 static int
 flush_routes(int s)
@@ -8752,6 +8881,10 @@ ip_plugin_init()
                                                      kSCDynamicStoreDomainSetup,
                                                      CFSTR(""),
                                                      NULL);
+    S_interface_delegation_prefix
+       = SCDynamicStoreKeyCreateNetworkInterface(NULL,
+                                                 kSCDynamicStoreDomainState);
+
     S_service_state_dict
        = CFDictionaryCreateMutable(NULL, 0,
                                    &kCFTypeDictionaryKeyCallBacks,
@@ -8786,7 +8919,7 @@ ip_plugin_init()
     CFRelease(pattern);
 
     /* register for State: per-service PPP/VPN/IPSec status notifications */
-    add_transient_status_keys(kSCCompAnyRegex, patterns);
+    add_transient_status_keys(kSCCompAnyRegex, NULL, patterns);
 
     /* add notifier for ServiceOrder/PPPOverridePrimary changes for IPv4 */
     CFArrayAppendValue(keys, S_setup_global_ipv4);
@@ -8805,10 +8938,15 @@ ip_plugin_init()
                                                  CFSTR(kDNSServiceCompPrivateDNS));
     CFArrayAppendValue(keys, S_private_resolvers);
 
-#if    !TARGET_OS_SIMULATOR
+#if    !TARGET_OS_SIMULATOR && !TEST_IPV4_ROUTELIST && !TEST_IPV6_ROUTELIST
     /* add NAT64 prefix request pattern */
     nat64_prefix_request_add_pattern(patterns);
-#endif /* !TARGET_OS_SIMULATOR */
+#endif /* TARGET_OS_SIMULATOR && !TEST_IPV4_ROUTELIST && !TEST_IPV6_ROUTELIST */
+
+    /* add interface delegation pattern */
+    pattern = interface_entity_key_copy(kSCCompAnyRegex, kSCEntNetInterfaceDelegation);
+    CFArrayAppendValue(patterns, pattern);
+    CFRelease(pattern);
 
     if (!SCDynamicStoreSetNotificationKeys(S_session, keys, patterns)) {
        my_log(LOG_ERR,
@@ -8828,6 +8966,8 @@ ip_plugin_init()
     CFRunLoopAddSource(CFRunLoopGetCurrent(), rls, kCFRunLoopDefaultMode);
     CFRelease(rls);
 
+    serviceIDNumberInit();
+
     /* initialize dns configuration */
     (void)dns_configuration_set(NULL, NULL, NULL, NULL, NULL);
 #if    !TARGET_OS_IPHONE
@@ -8855,7 +8995,7 @@ prime_IPMonitor()
     /* initialize multicast route */
     update_ipv4(NULL, NULL, NULL);
 
-#if    !TARGET_OS_SIMULATOR
+#if    !TARGET_OS_SIMULATOR && !TEST_IPV4_ROUTELIST && !TEST_IPV6_ROUTELIST
     process_AgentMonitor();
 #endif // !TARGET_OS_SIMULATOR
 
@@ -8876,22 +9016,16 @@ S_get_plist_boolean(CFDictionaryRef plist, CFStringRef key,
     return (ret);
 }
 
-#if    !TARGET_OS_SIMULATOR
+#if    !TARGET_OS_SIMULATOR && !TEST_IPV4_ROUTELIST && !TEST_IPV6_ROUTELIST
 #include "IPMonitorControlServer.h"
 
 static void
 InterfaceRankChanged(void * info)
 {
 #pragma unused(info)
-    os_activity_t      activity;
     CFDictionaryRef    assertions = NULL;
     CFArrayRef         changes;
 
-    activity = os_activity_create("processing IPMonitor [rank] change",
-                                 OS_ACTIVITY_CURRENT,
-                                 OS_ACTIVITY_FLAG_DEFAULT);
-    os_activity_scope(activity);
-
     changes = IPMonitorControlServerCopyInterfaceRankInformation(&assertions);
     if (S_if_rank_dict != NULL) {
        CFRelease(S_if_rank_dict);
@@ -8902,8 +9036,6 @@ InterfaceRankChanged(void * info)
        CFRelease(changes);
     }
 
-    os_release(activity);
-
     return;
 }
 
@@ -8913,7 +9045,7 @@ StartIPMonitorControlServer(void)
     CFRunLoopSourceContext     context;
     CFRunLoopSourceRef rls;
 
-    bzero(&context, sizeof(context));
+    memset(&context, 0, sizeof(context));
     context.perform = InterfaceRankChanged;
     rls = CFRunLoopSourceCreate(NULL, 0, &context);
     if (!IPMonitorControlServerStart(CFRunLoopGetCurrent(),
@@ -8952,9 +9084,9 @@ load_IPMonitor(CFBundleRef bundle, Boolean bundleVerbose)
     }
 
     /* register to receive changes to the "verbose" flag and read the initial setting  */
-    IPMonitorControlPrefsInit(CFRunLoopGetCurrent(), prefs_changed);
-    prefs_changed(NULL);
+    prefs_changed_callback_init();
 
+#if !TEST_IPV4_ROUTELIST && !TEST_IPV6_ROUTELIST
     /* start DNS configuration (dnsinfo) server */
     load_DNSConfiguration(bundle,                      // bundle
                          ^(Boolean inSync) {           // syncHandler
@@ -8980,8 +9112,9 @@ load_IPMonitor(CFBundleRef bundle, Boolean bundleVerbose)
                                    post_network_change_when_ready();
                                });
                            });
+#endif /* !TEST_IPV4_ROUTELIST && !TEST_IPV6_ROUTELIST */
 
-#if    !TARGET_OS_SIMULATOR
+#if    !TARGET_OS_SIMULATOR && !TEST_IPV4_ROUTELIST && !TEST_IPV6_ROUTELIST
     /* start IPMonitor Control (InterfaceRank) server */
     StartIPMonitorControlServer();
 #endif /* !TARGET_OS_IPHONE */
@@ -8989,25 +9122,18 @@ load_IPMonitor(CFBundleRef bundle, Boolean bundleVerbose)
     /* initialize DNS configuration */
     dns_configuration_init(bundle);
 
-#if    !TARGET_OS_SIMULATOR
-    /* initialize NAT64 configuration */
-    nat64_configuration_init(bundle);
-#endif /* !TARGET_OS_SIMULATOR */
-
     /* initialize proxy configuration */
     proxy_configuration_init(bundle);
 
     ip_plugin_init();
 
-#if    !TARGET_OS_IPHONE
     if (S_session != NULL) {
        dns_configuration_monitor(S_session, IPMonitorNotify);
     }
-#endif /* !TARGET_OS_IPHONE */
 
-#if    !TARGET_OS_SIMULATOR
+#if    !TARGET_OS_SIMULATOR && !TEST_IPV4_ROUTELIST && !TEST_IPV6_ROUTELIST
     load_hostname(TRUE);
-#endif /* !TARGET_OS_SIMULATOR */
+#endif /* TARGET_OS_SIMULATOR && !TEST_IPV4_ROUTELIST && !TEST_IPV6_ROUTELIST */
 
 #if    !TARGET_OS_IPHONE
     load_smb_configuration(TRUE);
@@ -9054,7 +9180,7 @@ struct route {
 
 #endif
 
-#ifdef TEST_IPV4_ROUTELIST
+#if TEST_IPV4_ROUTELIST
 
 typedef struct {
     const char *       addr;
@@ -9651,8 +9777,7 @@ make_IPv4RouteList_for_test(IPv4RouteListRef list,
                = CFNumberCreate(NULL, kCFNumberSInt32Type, &rank_assertion);
        }
     }
-    r = IPv4RouteListCreateWithDictionary(routes, dict,
-                                         rank_assertion_cf);
+    r = IPv4RouteListCreateWithDictionary(routes, dict, rank_assertion_cf, 0);
     my_CFRelease(&rank_assertion_cf);
     if (r == NULL) {
        fprintf(stderr, "IPv4RouteListCreateWithDictionary failed\n");
@@ -9668,7 +9793,7 @@ make_IPv4RouteList_for_test(IPv4RouteListRef list,
        CFStringRef     descr;
 
        descr = IPv4RouteListCopyDescription(r);
-       SCPrint(TRUE, stdout, CFSTR("Adding %@"), descr);
+       SCPrint(TRUE, stdout, CFSTR("Adding %@\n"), descr);
        CFRelease(descr);
     }
     ret = IPv4RouteListAddRouteList(list, 1, r, rank);
@@ -9866,7 +9991,7 @@ main(int argc, char **argv)
 
 #endif /* TEST_IPV4_ROUTELIST */
 
-#ifdef TEST_IPV6_ROUTELIST
+#if TEST_IPV6_ROUTELIST
 
 typedef struct {
     const char *       addr;
@@ -10319,8 +10444,7 @@ make_IPv6RouteList_for_test(IPv6RouteListRef list,
                = CFNumberCreate(NULL, kCFNumberSInt32Type, &rank_assertion);
        }
     }
-    r = IPv6RouteListCreateWithDictionary(routes, dict,
-                                         rank_assertion_cf);
+    r = IPv6RouteListCreateWithDictionary(routes, dict, rank_assertion_cf, 0);
     my_CFRelease(&rank_assertion_cf);
     if (r == NULL) {
        fprintf(stderr, "IPv6RouteListCreateWithDictionary failed\n");
@@ -10336,7 +10460,7 @@ make_IPv6RouteList_for_test(IPv6RouteListRef list,
        CFStringRef     descr;
 
        descr = IPv6RouteListCopyDescription(r);
-       SCPrint(TRUE, stdout, CFSTR("Adding %@"), descr);
+       SCPrint(TRUE, stdout, CFSTR("Adding %@\n"), descr);
        CFRelease(descr);
     }
     ret = IPv6RouteListAddRouteList(list, 1, r, rank);
index bf0b54bac71ea9090b9492392fcd21d239350b6d..83970e2d50755094309aecc74d00d133affa3172 100644 (file)
@@ -72,7 +72,7 @@ const char *
 my_if_indextoname(unsigned int idx, char if_name[IFNAMSIZ]);
 
 boolean_t
-service_contains_protocol(CFDictionaryRef service_dict, int af);
+service_is_routable(CFDictionaryRef service_dict, int af);
 
 boolean_t
 service_is_scoped_only(CFDictionaryRef service_dict);
index 80ec61d61f22c386468f4d6c9cd205ad909a4f88..02e6160b6071723370d329be36e878590cb88f4a 100644 (file)
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2017, 2018 Apple Inc. All rights reserved.
+ * Copyright (c) 2017-2019 Apple Inc. All rights reserved.
  *
  * @APPLE_LICENSE_HEADER_START@
  *
 #include <CoreFoundation/CoreFoundation.h>
 #include <SystemConfiguration/SystemConfiguration.h>
 #include <SystemConfiguration/SCPrivate.h>
+#if TEST_NAT64_CONFIGURATION
+static Boolean                 G_set_prefixes_force_failure;
+#define my_if_nametoindex      if_nametoindex
+#else
 #include "ip_plugin.h"
+#endif
 
 #define        INET6   1
 
 #include <sys/ioctl.h>
 #include <sys/socket.h>
 #include <sys/sockio.h>
-#if __has_include(<nw/private.h>)
+#include <netinet/in.h>
 #include <nw/private.h>
-#else // __has_include(<nw/private.h>)
-#include <network/nat64.h>
-#endif // __has_include(<nw/private.h>)
-
-
-static CFMutableSetRef nat64_prefix_requests   = NULL;
+#include <sys/queue.h>
 
 
+/**
+ ** Support functions
+ **/
 static dispatch_queue_t
-nat64_dispatch_queue()
+nat64_dispatch_queue(void)
 {
        static dispatch_once_t  once;
        static dispatch_queue_t q;
@@ -67,7 +70,6 @@ nat64_dispatch_queue()
        return q;
 }
 
-
 static Boolean
 _nat64_prefix_set(const char           *if_name,
                  int32_t               num_prefixes,
@@ -77,27 +79,25 @@ _nat64_prefix_set(const char                *if_name,
        int                     ret;
        int                     s;
 
-       SC_log(LOG_DEBUG, "%s: _nat64_prefix_set", if_name);
-
        // pass NAT64 prefixes to the kernel
-       bzero(&req, sizeof(req));
+       memset(&req, 0, sizeof(req));
        strlcpy(req.ifnat64_name, if_name, sizeof(req.ifnat64_name));
 
        if (num_prefixes == 0) {
-               SC_log(LOG_INFO, "%s: nat64 prefix not (or no longer) available", if_name);
+               SC_log(LOG_NOTICE, "%s: nat64 prefix unavailable", if_name);
        }
 
        for (int32_t i = 0; i < num_prefixes; i++) {
                char    prefix_str[NW_NAT64_PREFIX_STR_LENGTH]  = {0};
 
                nw_nat64_write_prefix_to_string(&prefixes[i], prefix_str, sizeof(prefix_str));
-               SC_log(LOG_DEBUG, "%s: nat64 prefix[%d] = %s", if_name, i, prefix_str);
+               SC_log(LOG_NOTICE, "%s: nat64 prefix[%d] = %s", if_name, i, prefix_str);
 
                if (i < NAT64_MAX_NUM_PREFIXES) {
                        req.ifnat64_prefixes[i].prefix_len = prefixes[i].length;
-                       bcopy(&prefixes[i].data,
-                             &req.ifnat64_prefixes[i].ipv6_prefix,
-                             MIN(sizeof(req.ifnat64_prefixes[i].ipv6_prefix), sizeof(prefixes[i].data)));      // MIN(16, 12)
+                       memcpy(&req.ifnat64_prefixes[i].ipv6_prefix,
+                              &prefixes[i].data,
+                              MIN(sizeof(req.ifnat64_prefixes[i].ipv6_prefix), sizeof(prefixes[i].data)));     // MIN(16, 12)
                }
        }
 
@@ -115,7 +115,7 @@ _nat64_prefix_set(const char                *if_name,
                return (FALSE);
        }
 
-       SC_log(LOG_INFO, "%s: nat64 prefix%s updated", if_name, (num_prefixes != 1) ? "es" : "");
+       SC_log(LOG_NOTICE, "%s: nat64 prefix%s updated", if_name, (num_prefixes != 1) ? "es" : "");
        return (TRUE);
 }
 
@@ -126,6 +126,14 @@ _nat64_prefix_post(CFStringRef             interface,
                   nw_nat64_prefix_t    *prefixes,
                   CFAbsoluteTime       start_time)
 {
+#if TEST_NAT64_CONFIGURATION
+#pragma unused(interface)
+#pragma unused(num_prefixes)
+#pragma unused(prefixes)
+#pragma unused(start_time)
+       return;
+#else /* TEST_NAT64_CONFIGURATION */
+
        CFStringRef     key;
 
        key = SCDynamicStoreKeyCreateNetworkInterfaceEntity(NULL,
@@ -172,113 +180,334 @@ _nat64_prefix_post(CFStringRef          interface,
                CFRelease(date);
 
                (void)SCDynamicStoreSetValue(NULL, key, plat_dict);
-               SC_log(LOG_INFO, "%@: PLAT discovery complete %@",
+               SC_log(LOG_NOTICE, "%@: PLAT discovery complete %@",
                       interface, plat_dict);
                CFRelease(plat_dict);
        } else {
                (void)SCDynamicStoreRemoveValue(NULL, key);
        }
        CFRelease(key);
+#endif /* TEST_NAT64_CONFIGURATION */
        return;
 }
 
+static nw_nat64_prefixes_resolver_t
+_nat64_resolver_create(unsigned int if_index)
+{
+       nw_interface_t                  interface;
+       nw_parameters_t                 params;
+       nw_nat64_prefixes_resolver_t    resolver;
+
+       params = nw_parameters_create();
+       interface = nw_interface_create_with_index(if_index);
+       if (interface == NULL) {
+               SC_log(LOG_NOTICE,
+                      "nw_interface_create_with_index(%u) failed",
+                      if_index);
+               return (NULL);
+       }
+       nw_parameters_require_interface(params, interface);
+       nw_parameters_set_required_address_family(params, AF_INET6);
+       nw_release(interface);
+       resolver = nw_nat64_prefixes_resolver_create(params);
+       nw_release(params);
+       return (resolver);
+}
+
+/**
+ ** NAT64PrefixRequest
+ **/
+struct NAT64PrefixRequest;
+typedef struct NAT64PrefixRequest NAT64PrefixRequest, * NAT64PrefixRequestRef;
+#define NAT64PrefixRequest_LIST_ENTRY LIST_ENTRY(NAT64PrefixRequest)
+#define NAT64PrefixRequest_LIST_HEAD LIST_HEAD(NAT64PrefixRequestHead, \
+                                              NAT64PrefixRequest)
+static NAT64PrefixRequest_LIST_HEAD    S_request_head;
+static struct NAT64PrefixRequestHead *         S_request_head_p = &S_request_head;
+
+typedef CF_ENUM(uint16_t, RequestFlags) {
+       kRequestFlagsNone = 0x0000,
+       kRequestFlagsValid = 0x0001,
+};
+
+struct NAT64PrefixRequest {
+       NAT64PrefixRequest_LIST_ENTRY   link;
+       nw_nat64_prefixes_resolver_t    resolver;
+       const char *                    if_name;
+       CFStringRef                     if_name_cf;
+       unsigned int                    if_index;
+       unsigned int                    retain_count;
+       RequestFlags                    flags;
+};
+
+static Boolean
+NAT64PrefixRequestFlagsIsSet(NAT64PrefixRequestRef request, RequestFlags flags)
+{
+    return ((request->flags & flags) != 0);
+}
 
 static void
-_nat64_prefix_request_start(const void *value)
+NAT64PrefixRequestFlagsSet(NAT64PrefixRequestRef request, RequestFlags flags)
 {
-       unsigned int    if_index;
-       char            *if_name;
-       CFStringRef     interface       = (CFStringRef)value;
-       bool            ok;
-       CFAbsoluteTime  start_time;
+    request->flags |= flags;
+}
 
-       SC_log(LOG_DEBUG, "%@: _nat64_prefix_request_start", interface);
+static void
+NAT64PrefixRequestFlagsClear(NAT64PrefixRequestRef request, RequestFlags flags)
+{
+    request->flags &= ~flags;
+}
 
-       if_name = _SC_cfstring_to_cstring(interface, NULL, 0, kCFStringEncodingASCII);
-       if (if_name == NULL) {
-               SC_log(LOG_NOTICE, "%@: could not convert interface name", interface);
-               return;
+static NAT64PrefixRequestRef
+NAT64PrefixRequestFindInterface(CFStringRef if_name_cf)
+{
+       NAT64PrefixRequestRef           scan;
+
+       LIST_FOREACH(scan, S_request_head_p, link) {
+               if (CFEqual(if_name_cf, scan->if_name_cf)) {
+                       return (scan);
+               }
        }
+       return (NULL);
+}
+
+static void
+NAT64PrefixRequestRetain(NAT64PrefixRequestRef request)
+{
+       request->retain_count++;
+       SC_log(LOG_DEBUG, "%s: %s %p %u",
+              request->if_name, __FUNCTION__,
+              request, request->retain_count);
+       return;
+}
 
+static NAT64PrefixRequestRef
+NAT64PrefixRequestCreate(CFStringRef if_name_cf)
+{
+       unsigned int            if_index;
+       char *                  if_name;
+       NAT64PrefixRequestRef   request;
+
+       if_name = _SC_cfstring_to_cstring(if_name_cf, NULL, 0,
+                                         kCFStringEncodingASCII);
+       if (if_name == NULL) {
+               SC_log(LOG_ERR,
+                      "%@: could not convert interface name",
+                      if_name_cf);
+               return (NULL);
+       }
        if_index = my_if_nametoindex(if_name);
        if (if_index == 0) {
-               SC_log(LOG_NOTICE, "%s: no interface index", if_name);
+               SC_log(LOG_NOTICE,
+                      "%s: interface does not exist", if_name);
                CFAllocatorDeallocate(NULL, if_name);
-               return;
+               return (NULL);
        }
+       request = malloc(sizeof(*request));
+       SC_log(LOG_DEBUG, "%@: %s %p", if_name_cf, __FUNCTION__, request);
+       bzero(request, sizeof(*request));
+       request->if_name_cf = CFRetain(if_name_cf);
+       request->if_name = if_name;
+       request->if_index = if_index;
+       LIST_INSERT_HEAD(S_request_head_p, request, link);
+       NAT64PrefixRequestFlagsSet(request, kRequestFlagsValid);
+       NAT64PrefixRequestRetain(request);
+       return (request);
+}
 
-       // keep track of interfaces with active nat64 prefix requests
-       CFSetAddValue(nat64_prefix_requests, interface);
+static void
+NAT64PrefixRequestStopResolver(NAT64PrefixRequestRef request)
+{
+       if (request->resolver != NULL) {
+               SC_log(LOG_DEBUG, "%s: %s",
+                      request->if_name, __FUNCTION__);
+               nw_nat64_prefixes_resolver_cancel(request->resolver);
+               nw_release(request->resolver);
+               request->resolver = NULL;
+       }
+       return;
+}
 
-       CFRetain(interface);
-       start_time = CFAbsoluteTimeGetCurrent();
-       ok = nw_nat64_copy_prefixes_async(&if_index,
-                                         nat64_dispatch_queue(),
-                                         ^(int32_t num_prefixes, nw_nat64_prefix_t *prefixes) {
-                                                 if (num_prefixes >= 0) {
-                                                         // update interface
-                                                         if (!_nat64_prefix_set(if_name, num_prefixes, prefixes)) {
-                                                                 num_prefixes = -1;
-                                                         }
-                                                 } else {
-                                                         SC_log(LOG_ERR,
-                                                                "%s: nw_nat64_copy_prefixes_async() num_prefixes(%d) < 0",
-                                                                if_name,
-                                                                num_prefixes);
-                                                 }
-
-                                                 if (num_prefixes <= 0) {
-                                                         // remove from active list
-                                                         CFSetRemoveValue(nat64_prefix_requests, interface);
-                                                 }
-
-                                                 _nat64_prefix_post(interface, num_prefixes, prefixes, start_time);
-
-                                                 // cleanup
-                                                 CFRelease(interface);
-                                                 CFAllocatorDeallocate(NULL, if_name);
-                                         });
-       if (!ok) {
-               SC_log(LOG_ERR, "%s: nw_nat64_copy_prefixes_async() failed", if_name);
-
-               // remove from active list
-               CFSetRemoveValue(nat64_prefix_requests, interface);
-
-               CFRelease(interface);
-               CFAllocatorDeallocate(NULL, if_name);
+static void
+NAT64PrefixRequestInvalidate(NAT64PrefixRequestRef request)
+{
+       SC_log(LOG_DEBUG, "%s: %s", request->if_name, __FUNCTION__);
+       NAT64PrefixRequestStopResolver(request);
+       if (NAT64PrefixRequestFlagsIsSet(request, kRequestFlagsValid)) {
+               NAT64PrefixRequestFlagsClear(request, kRequestFlagsValid);
+               LIST_REMOVE(request, link);
        }
+       return;
+}
 
+static void
+NAT64PrefixRequestRelease(NAT64PrefixRequestRef request)
+{
+       if (request->retain_count == 0) {
+               SC_log(LOG_ERR, "%s: retain count is zero %p",
+                      __FUNCTION__, request);
+               return;
+       }
+       request->retain_count--;
+       SC_log(LOG_DEBUG,
+              "%s: %s %p %u",
+              request->if_name, __FUNCTION__, request, request->retain_count);
+       if (request->retain_count != 0) {
+               return;
+       }
+       NAT64PrefixRequestInvalidate(request);
+       SC_log(LOG_DEBUG, "%s %s: deallocate %p",
+              request->if_name, __FUNCTION__, request);
+       if (request->if_name_cf != NULL) {
+               CFRelease(request->if_name_cf);
+               request->if_name_cf = NULL;
+       }
+       if (request->if_name != NULL) {
+               CFAllocatorDeallocate(NULL, (void *)request->if_name);
+               request->if_name = NULL;
+       }
+       free(request);
        return;
 }
 
+static void
+NAT64PrefixRequestStart(NAT64PrefixRequestRef request)
+{
+       dispatch_block_t                cancel_handler;
+       nw_nat64_copy_prefixes_block_t  handler;
+       nw_nat64_prefixes_resolver_t    resolver;
+       CFAbsoluteTime                  start_time;
+
+       SC_log(LOG_INFO, "%s: %s",  request->if_name, __FUNCTION__);
+       if (request->resolver != NULL) {
+               SC_log(LOG_DEBUG, "%s %s: resolver is already active",
+                      request->if_name, __FUNCTION__);
+               return;
+       }
+       resolver = _nat64_resolver_create(request->if_index);
+       if (resolver == NULL) {
+               return;
+       }
+       NAT64PrefixRequestRetain(request);
+       cancel_handler = ^{
+               SC_log(LOG_DEBUG, "%s: NAT64 resolver cancelled",
+                      request->if_name);
+               NAT64PrefixRequestRelease(request);
+               return;
+       };
+       start_time = CFAbsoluteTimeGetCurrent();
+       handler = ^(int32_t num_prefixes, nw_nat64_prefix_t *prefixes) {
+               Boolean set_prefix_failed = FALSE;
+
+               if (!NAT64PrefixRequestFlagsIsSet(request,
+                                                 kRequestFlagsValid)) {
+                       SC_log(LOG_INFO, "%s: NAT64 request is stale %p",
+                              request->if_name, request);
+                       return;
+               }
+               if (prefixes != NULL) {
+                       /* set prefixes on the interface */
+                       if (!_nat64_prefix_set(request->if_name,
+                                              num_prefixes, prefixes)) {
+                               set_prefix_failed = TRUE;
+                       }
+               } else {
+                       SC_log(LOG_ERR, "%s: NAT64 no prefixes",
+                              request->if_name);
+               }
+               _nat64_prefix_post(request->if_name_cf,
+                                  num_prefixes, prefixes, start_time);
+#if TEST_NAT64_CONFIGURATION
+               if (G_set_prefixes_force_failure) {
+                       set_prefix_failed = TRUE;
+               }
+#endif /* TEST_NAT64_CONFIGURATION */
+               if (set_prefix_failed) {
+                       /* remove resolver */
+                       NAT64PrefixRequestInvalidate(request);
+                       NAT64PrefixRequestRelease(request);
+                       return;
+               }
+       };
+       nw_nat64_prefixes_resolver_set_cancel_handler(resolver, cancel_handler);
+       nw_nat64_prefixes_resolver_set_update_handler(resolver,
+                                                     nat64_dispatch_queue(),
+                                                     handler);
+       nw_nat64_prefixes_resolver_start(resolver);
+       request->resolver = resolver;
+       return;
+}
 
+/**
+ ** Set iterators
+ **/
 static void
-_nat64_prefix_request(const void *value, void *context)
+_nat64_process_prefix_request(const void *value, void *context)
 {
-       CFSetRef        changes         = (CFSetRef)context;
-       CFStringRef     interface       = (CFStringRef)value;
+#pragma unused(context)
+       CFStringRef             interface = (CFStringRef)value;
+       NAT64PrefixRequestRef   request;
 
-       if (!CFSetContainsValue(nat64_prefix_requests, interface) ||
-           ((changes != NULL) && CFSetContainsValue(changes, interface))) {
-               // if new request
-               // ... or a [refresh] request that hasn't already been started
-               _nat64_prefix_request_start(interface);
+       request = NAT64PrefixRequestFindInterface(interface);
+       if (request != NULL) {
+               return;
        }
 
+       /* start a new request */
+       request = NAT64PrefixRequestCreate(interface);
+       if (request != NULL) {
+               NAT64PrefixRequestStart(request);
+       }
        return;
 }
 
-
 static void
-_nat64_prefix_update(const void *value, void *context)
+_nat64_process_prefix_update(const void *value, void *context)
 {
 #pragma unused(context)
-       CFStringRef     interface       = (CFStringRef)value;
+       CFStringRef             interface = (CFStringRef)value;
+       NAT64PrefixRequestRef   request;
 
-       if (CFSetContainsValue(nat64_prefix_requests, interface)) {
-               _nat64_prefix_request_start(interface);
+       request = NAT64PrefixRequestFindInterface(interface);
+       if (request == NULL) {
+               SC_log(LOG_DEBUG, "%@ %s: no existing request",
+                      interface, __FUNCTION__);
+               return;
        }
 
+       /* destroy the old one, start a new one */
+       SC_log(LOG_INFO, "%@: %s", interface, __FUNCTION__);
+       NAT64PrefixRequestInvalidate(request);
+       NAT64PrefixRequestRelease(request);
+
+       /* start a new request */
+       request = NAT64PrefixRequestCreate(interface);
+       if (request != NULL) {
+               NAT64PrefixRequestStart(request);
+       }
+       return;
+}
+
+static void
+_nat64_process_cancel_request(const void * value, void * context)
+{
+#pragma unused(context)
+       CFStringRef             interface = (CFStringRef)value;
+       NAT64PrefixRequestRef   request;
+
+       /* if there's an in-flight request, remove it */
+       request = NAT64PrefixRequestFindInterface(interface);
+       if (request == NULL) {
+               /* no resolver */
+               SC_log(LOG_DEBUG, "%@ %s: no active NAT64 request",
+                      interface, __FUNCTION__);
+               return;
+       }
+       SC_log(LOG_DEBUG, "%s %s: removing NAT64 request",
+              request->if_name,  __FUNCTION__);
+       _nat64_prefix_set(request->if_name, 0, NULL);
+       NAT64PrefixRequestInvalidate(request);
+       NAT64PrefixRequestRelease(request);
        return;
 }
 
@@ -332,30 +561,109 @@ nat64_prefix_request_add_pattern(CFMutableArrayRef patterns)
        return;
 }
 
-
-__private_extern__
-void
-nat64_configuration_init(CFBundleRef bundle)
+static void
+nat64_configuration_update_locked(CFSetRef requests, CFSetRef updates,
+                                 CFSetRef cancellations)
 {
-#pragma unused(bundle)
-       nat64_prefix_requests = CFSetCreateMutable(NULL, 0, &kCFTypeSetCallBacks);
+       if (cancellations != NULL) {
+               CFSetApplyFunction(cancellations,
+                                  _nat64_process_cancel_request,
+                                  NULL);
+       }
+       // for any interface that changed, refresh the nat64 prefix
+       if (updates != NULL) {
+               CFSetApplyFunction(updates, _nat64_process_prefix_update, NULL);
+       }
+
+       // for any requested interface, query the nat64 prefix
+       if (requests != NULL) {
+               CFSetApplyFunction(requests, _nat64_process_prefix_request,
+                                  NULL);
+       }
        return;
 }
 
-
 __private_extern__
 void
-nat64_configuration_update(CFSetRef requests, CFSetRef changes)
+nat64_configuration_update(CFSetRef requests, CFSetRef updates,
+                          CFSetRef cancellations)
 {
-       // for any interface that changed, refresh the nat64 prefix
-       if (changes != NULL) {
-               CFSetApplyFunction(changes, _nat64_prefix_update, NULL);
-       }
+       dispatch_block_t        update_block;
 
-       // for any requested interface, query the nat64 prefix
        if (requests != NULL) {
-               CFSetApplyFunction(requests, _nat64_prefix_request, (void *)changes);
+               CFRetain(requests);
        }
-
+       if (updates != NULL) {
+               CFRetain(updates);
+       }
+       if (cancellations != NULL) {
+               CFRetain(cancellations);
+       }
+       update_block = ^{
+               SC_log(LOG_DEBUG,
+                      "NAT64 requests %@ updates %@ cancellations %@",
+                      requests, updates, cancellations);
+               nat64_configuration_update_locked(requests, updates,
+                                                 cancellations);
+               if (requests != NULL) {
+                       CFRelease(requests);
+               }
+               if (updates != NULL) {
+                       CFRelease(updates);
+               }
+               if (cancellations != NULL) {
+                       CFRelease(cancellations);
+               }
+       };
+       dispatch_async(nat64_dispatch_queue(), update_block);
        return;
 }
+
+#if TEST_NAT64_CONFIGURATION
+int
+main(int argc, char * argv[])
+{
+       CFStringRef     if_name_cf;
+       CFMutableSetRef set;
+
+       set = CFSetCreateMutable(NULL, 0, &kCFTypeSetCallBacks);
+       for (int i = 1; i < argc; i++) {
+               if_name_cf = CFStringCreateWithCString(NULL,
+                                                      argv[i],
+                                                      kCFStringEncodingASCII);
+               CFSetAddValue(set, if_name_cf);
+               CFRelease(if_name_cf);
+       }
+       if (CFSetGetCount(set) == 0) {
+               fprintf(stderr, "nothing to do\n");
+               exit(0);
+       }
+       SC_log(LOG_NOTICE, "Starting %@", set);
+       nat64_configuration_update(set, NULL, NULL);
+       sleep(2);
+
+       SC_log(LOG_NOTICE, "Starting 2 %@", set);
+       nat64_configuration_update(set, NULL, NULL);
+       sleep(2);
+
+       SC_log(LOG_NOTICE, "Updating");
+       nat64_configuration_update(NULL, set, NULL);
+       sleep(2);
+
+       SC_log(LOG_NOTICE, "Cancelling");
+       nat64_configuration_update(NULL, NULL, set);
+       sleep(2);
+
+       G_set_prefixes_force_failure = TRUE;
+       SC_log(LOG_NOTICE, "Starting (with forced failure) %@", set);
+       nat64_configuration_update(set, NULL, NULL);
+       sleep(2);
+
+       SC_log(LOG_NOTICE, "Starting (with forced failure 2) %@", set);
+       nat64_configuration_update(set, NULL, NULL);
+
+       dispatch_main();
+       exit(0);
+       return (0);
+}
+#endif /* TEST_NAT64_CONFIGURATION */
index eea5652e28aef4074eabb78a46874ea838aa6fea..aa6ebb2ba0ac0868798db0426dcf3741debb11c9 100644 (file)
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2017 Apple Inc. All rights reserved.
+ * Copyright (c) 2017-2019 Apple Inc. All rights reserved.
  *
  * @APPLE_LICENSE_HEADER_START@
  *
@@ -39,11 +39,9 @@ void
 nat64_prefix_request_add_pattern       (CFMutableArrayRef      patterns);
 
 void
-nat64_configuration_init               (CFBundleRef            bundle);
-
-void
-nat64_configuration_update             (CFSetRef               interface_changes,
-                                        CFSetRef               interface_requests);
+nat64_configuration_update             (CFSetRef       updates,
+                                        CFSetRef       requests,
+                                        CFSetRef       cancellations);
 
 __END_DECLS
 
index 6e5d7f761f92e29820420145876b21e9a05b2fe8..e53f71ca02e963bc64f3c3ebd3c694415fee6d84 100644 (file)
@@ -9,4 +9,8 @@ sed -e 's/^\(Process:.*\[\)[0-9][0-9]*/\1XXXX/'                 \
     -e '/Process [0-9][0-9]*: [0-9][0-9]* nodes malloced/d'    \
     -e 's/^\(Process \)[0-9][0-9]*:\(.*\)/\1XXXX\2/'           \
     -e 's/^\(Path: \)\(.*$\)/\1XXXX/'                          \
-    -e 's/^\(OS Version: \)\(.*$\)/\1XXXX/'
+    -e 's/^\(OS Version: \)\(.*$\)/\1XXXX/'                    \
+    -e '/^Load Address:.*/d'                                   \
+    -e '/^Launch Time:.*/d'                                    \
+    -e '/^Physical footprint:.*/d'                             \
+    -e '/^Physical footprint (peak):.*/d'
diff --git a/Plugins/IPMonitor/serviceIDNumber.c b/Plugins/IPMonitor/serviceIDNumber.c
new file mode 100644 (file)
index 0000000..240748d
--- /dev/null
@@ -0,0 +1,241 @@
+/*
+ * Copyright (c) 2019 Apple Inc.  All Rights Reserved.
+ *
+ * @APPLE_LICENSE_HEADER_START@
+ *
+ * This file contains Original Code and/or Modifications of Original Code
+ * as defined in and that are subject to the Apple Public Source License
+ * Version 2.0 (the 'License'). You may not use this file except in
+ * compliance with the License. Please obtain a copy of the License at
+ * http://www.opensource.apple.com/apsl/ and read it before using this
+ * file.
+ *
+ * The Original Code and all software distributed under the License are
+ * distributed on an 'AS IS' basis, WITHOUT WARRANTY OF ANY KIND, EITHER
+ * EXPRESS OR IMPLIED, AND APPLE HEREBY DISCLAIMS ALL SUCH WARRANTIES,
+ * INCLUDING WITHOUT LIMITATION, ANY WARRANTIES OF MERCHANTABILITY,
+ * FITNESS FOR A PARTICULAR PURPOSE, QUIET ENJOYMENT OR NON-INFRINGEMENT.
+ * Please see the License for the specific language governing rights and
+ * limitations under the License.
+ *
+ * @APPLE_LICENSE_HEADER_END@
+ */
+
+/*
+ * serviceID_number.c
+ * - assigns numbers to serviceID strings
+ */
+
+#include <stdio.h>
+#include <stdlib.h>
+#include <unistd.h>
+
+#include "serviceIDNumber.h"
+#include <CoreFoundation/CFDictionary.h>
+
+#if TEST_SERVICEID_NUMBER
+#include <SystemConfiguration/SCPrivate.h>
+#endif /* TEST_SERVICEID_NUMBER */
+
+
+/* dictionary to hold serviceIDNumber: key is the serviceID */
+static CFMutableDictionaryRef  S_serviceID_to_number_dict;
+
+/* dictionary to hold serviceID: key is the serviceIDNumber */
+static CFMutableDictionaryRef  S_number_to_serviceID_dict;
+
+static Boolean
+serviceIDNumberEqual(const void * ptr1, const void * ptr2)
+{
+       return (((serviceIDNumber)ptr1) == ((serviceIDNumber)ptr2));
+}
+
+static CFStringRef
+serviceIDNumberCopyDescription(const void * ptr)
+{
+       return CFStringCreateWithFormat(NULL, NULL, CFSTR("%ld"),
+                                       (serviceIDNumber)ptr);
+}
+
+static CFHashCode
+serviceIDNumberHash(const void * ptr) {
+       return (CFHashCode)((serviceIDNumber)ptr);
+}
+
+static const CFDictionaryValueCallBacks kserviceIDNumberValueCallBacks = {
+       0, NULL, NULL, serviceIDNumberCopyDescription, serviceIDNumberEqual
+};
+
+static const CFDictionaryKeyCallBacks kserviceIDNumberKeyCallBacks = {
+       0, NULL, NULL, serviceIDNumberCopyDescription, serviceIDNumberEqual,
+       serviceIDNumberHash
+};
+
+/**
+ ** S_serviceID_numbers
+ **/
+
+__private_extern__ Boolean
+serviceIDNumberGetIfPresent(CFStringRef serviceID, serviceIDNumber *sidn)
+{
+       Boolean                 has_number;
+       const void *            val;
+
+       has_number = CFDictionaryGetValueIfPresent(S_serviceID_to_number_dict,
+                                                  serviceID, &val);
+       if (has_number) {
+               *sidn = (serviceIDNumber)val;
+       }
+       return (has_number);
+}
+
+/*
+ * Function: serviceIDNumberGet
+ * Purpose:
+ *   Return the currently assigned serviceIDNumber for the given serviceID.
+ *   If one is already assigned, return that. If one isn't assigned, check
+ *   the next integer value after 'current_sidn', but skip zero.
+ *   If that number is assigned, pick the next one.
+ */
+static serviceIDNumber S_current_sidn;
+
+__private_extern__ serviceIDNumber
+serviceIDNumberGet(CFStringRef serviceID)
+{
+       serviceIDNumber         sidn;
+
+       if (serviceIDNumberGetIfPresent(serviceID, &sidn)) {
+               return (sidn);
+       }
+       while (1) {
+               /* assign a number to the serviceID */
+               S_current_sidn++;
+               if (S_current_sidn == kserviceIDNumberZero) {
+                       /* skip zero */
+                       S_current_sidn++;
+               }
+               /* if it's in use, skip to the next value */
+               if (CFDictionaryContainsKey(S_number_to_serviceID_dict,
+                                           (const void *)S_current_sidn)) {
+                       continue;
+               }
+               /* it's not in use, use it */
+               sidn = S_current_sidn;
+               CFDictionarySetValue(S_serviceID_to_number_dict,
+                                    serviceID, (const void *)sidn);
+               CFDictionarySetValue(S_number_to_serviceID_dict,
+                                    (const void *)sidn, serviceID);
+               break;
+       }
+       return (sidn);
+}
+
+
+__private_extern__ void
+serviceIDNumberRemove(CFStringRef serviceID)
+{
+       const void *    val;
+
+       if (CFDictionaryGetValueIfPresent(S_serviceID_to_number_dict, serviceID,
+                                         &val)) {
+#if TEST_SERVICEID_NUMBER
+               SCPrint(TRUE, stdout, CFSTR("Removing %@ %ld\n"),
+                       serviceID, (serviceIDNumber)val);
+#endif
+               CFDictionaryRemoveValue(S_serviceID_to_number_dict, serviceID);
+               CFDictionaryRemoveValue(S_number_to_serviceID_dict, val);
+       }
+}
+
+__private_extern__ void
+serviceIDNumberInit(void)
+{
+       S_serviceID_to_number_dict
+               = CFDictionaryCreateMutable(NULL, 0,
+                                           &kCFTypeDictionaryKeyCallBacks,
+                                           &kserviceIDNumberValueCallBacks);
+       S_number_to_serviceID_dict
+               = CFDictionaryCreateMutable(NULL, 0,
+                                           &kserviceIDNumberKeyCallBacks,
+                                           &kCFTypeDictionaryValueCallBacks);
+}
+
+#if TEST_SERVICEID_NUMBER
+
+static CFStringRef
+my_CFUUIDStringCreate(CFAllocatorRef alloc)
+{
+       CFUUIDRef       uuid;
+       CFStringRef     uuid_str;
+
+       uuid = CFUUIDCreate(alloc);
+       uuid_str = CFUUIDCreateString(alloc, uuid);
+       CFRelease(uuid);
+       return (uuid_str);
+}
+
+int
+main()
+{
+#define N_LIST         10
+       CFStringRef     serviceID_list[N_LIST];
+
+       serviceIDNumberInit();
+       for (int i = 0; i < N_LIST; i++) {
+               CFStringRef     serviceID = my_CFUUIDStringCreate(NULL);
+               serviceIDNumber sidn;
+
+               /* force a collision */
+               S_current_sidn = -1;
+
+               sidn = serviceIDNumberGet(serviceID);
+               SCPrint(TRUE, stdout, CFSTR("%d: %@ %ld\n"),
+                       i, serviceID, sidn);
+               serviceID_list[i] = serviceID;
+
+       }
+       for (int i = 0; i < N_LIST; i++) {
+               CFStringRef     serviceID = serviceID_list[i];
+               serviceIDNumber sidn;
+
+               if (!serviceIDNumberGetIfPresent(serviceID, &sidn)) {
+                       SCPrint(TRUE, stderr, CFSTR("Failed to find %@\n"),
+                               serviceID);
+                       exit(1);
+               }
+               SCPrint(TRUE, stdout, CFSTR("%@ => %ld\n"), serviceID, sidn);
+       }
+       {
+               serviceIDNumber sidn;
+
+               if (serviceIDNumberGetIfPresent(CFSTR("blah"), &sidn)) {
+                       fprintf(stderr,
+                               "Shouldn't have been able to look that up\n");
+                       exit(1);
+               }
+       }
+
+       for (int i = 0; i < N_LIST / 2; i++) {
+               CFStringRef     serviceID = serviceID_list[i];
+               serviceIDNumber sidn;
+
+               serviceIDNumberRemove(serviceID);
+               if (serviceIDNumberGetIfPresent(serviceID, &sidn)) {
+                       SCPrint(TRUE, stderr,
+                               CFSTR("Found %@, but shouldn't have\n"),
+                               serviceID);
+                       exit(1);
+               }
+       }
+
+       for (int i = 0; i < N_LIST; i++) {
+               CFStringRef     serviceID = serviceID_list[i];
+               serviceIDNumber sidn;
+
+               sidn = serviceIDNumberGet(serviceID);
+               SCPrint(TRUE, stdout, CFSTR("%d: %@ %ld\n"),
+                       i, serviceID, sidn);
+       }
+       exit(0);
+}
+#endif /* TEST_SERVICEID_NUMBER */
diff --git a/Plugins/IPMonitor/serviceIDNumber.h b/Plugins/IPMonitor/serviceIDNumber.h
new file mode 100644 (file)
index 0000000..1d02021
--- /dev/null
@@ -0,0 +1,90 @@
+/*
+ * Copyright (c) 2019 Apple Inc.  All Rights Reserved.
+ *
+ * @APPLE_LICENSE_HEADER_START@
+ *
+ * This file contains Original Code and/or Modifications of Original Code
+ * as defined in and that are subject to the Apple Public Source License
+ * Version 2.0 (the 'License'). You may not use this file except in
+ * compliance with the License. Please obtain a copy of the License at
+ * http://www.opensource.apple.com/apsl/ and read it before using this
+ * file.
+ *
+ * The Original Code and all software distributed under the License are
+ * distributed on an 'AS IS' basis, WITHOUT WARRANTY OF ANY KIND, EITHER
+ * EXPRESS OR IMPLIED, AND APPLE HEREBY DISCLAIMS ALL SUCH WARRANTIES,
+ * INCLUDING WITHOUT LIMITATION, ANY WARRANTIES OF MERCHANTABILITY,
+ * FITNESS FOR A PARTICULAR PURPOSE, QUIET ENJOYMENT OR NON-INFRINGEMENT.
+ * Please see the License for the specific language governing rights and
+ * limitations under the License.
+ *
+ * @APPLE_LICENSE_HEADER_END@
+ */
+
+/*
+ * serviceID_number.h
+ * - assigns numbers to serviceID strings
+ */
+
+#ifndef        _SERVICEID_NUMBER_H
+#define        _SERVICEID_NUMBER_H
+
+#include <CoreFoundation/CFString.h>
+#include <sys/types.h>
+
+/*
+ * Type: serviceIDNumber
+ * Purpose:
+ *   A compact way to represent a serviceID that doesn't involve needing
+ *   to worry about memory allocation or large comparisions.
+ */
+typedef u_long         serviceIDNumber, *serviceIDNumberRef;
+
+/*
+ * Const: kserviceIDNumberZero
+ *
+ * Purpose:
+ *   The zero value for serviceIDNumber. It will never be returned,
+ *   it is a reserved value.
+ */
+#define kserviceIDNumberZero   (serviceIDNumber)(0)
+
+/*
+ * Function: serviceIDNumberGetIfPresent
+ *
+ * Purpose:
+ *   Returns TRUE and the serviceIDNumber for the given serviceID, if it
+ *   is present, FALSE otherwise.
+ */
+Boolean
+serviceIDNumberGetIfPresent(CFStringRef serviceID, serviceIDNumberRef sidn);
+
+/*
+ * Function: serviceIDNumberGet
+ *
+ * Purpose:
+ *   Returns a unique serviceIDNumber for the given serviceID.
+ */
+serviceIDNumber
+serviceIDNumberGet(CFStringRef serviceID);
+
+/*
+ * Function: serviceIDNumberRemove
+ *
+ * Purpose:
+ *   Removes the assigned serviceIDNumber for the given serviceID.
+ */
+void
+serviceIDNumberRemove(CFStringRef serviceID);
+
+
+/*
+ * Function: serviceIDNumberInit
+ *
+ * Purpose:
+ *   Initialize the serviceID number database.
+ */
+void
+serviceIDNumberInit(void);
+
+#endif /* _SERVICEID_NUMBER_H */
index d91c409c20743551b4c6ccf2b77f0b63b6729736..b97697ee42849111b6b11489ec8966edb6d91e30 100644 (file)
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2004-2017 Apple Inc. All rights reserved.
+ * Copyright (c) 2004-2018 Apple Inc. All rights reserved.
  *
  * @APPLE_LICENSE_HEADER_START@
  *
@@ -433,6 +433,7 @@ ptr_query_start(CFStringRef address)
 
        my_log(LOG_INFO, "hostname: ptr query start");
 
+       (void) gettimeofday(&ptrQueryStart, NULL);
        (void) SCNetworkReachabilitySetCallback(ptrTarget, ptr_query_callback, NULL);
        (void) SCNetworkReachabilityScheduleWithRunLoop(ptrTarget, rl, kCFRunLoopDefaultMode);
 
index a6ac14e9875d25b9f590a38a3c9ce37e83c80afa..2bb434aacd5b8a573cbc9749554a95f268fcee29 100644 (file)
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2006-2017 Apple Inc. All rights reserved.
+ * Copyright (c) 2006-2018 Apple Inc. All rights reserved.
  *
  * @APPLE_LICENSE_HEADER_START@
  *
@@ -613,6 +613,7 @@ ptr_query_start(CFStringRef address)
 
        my_log(LOG_INFO, "NetBIOS name: ptr query start");
 
+       (void) gettimeofday(&ptrQueryStart, NULL);
        (void) SCNetworkReachabilitySetCallback(ptrTarget, ptr_query_callback, NULL);
        (void) SCNetworkReachabilityScheduleWithRunLoop(ptrTarget, rl, kCFRunLoopDefaultMode);
 
index 19f84cf0ca7e7b922bbd684661d852eef043ab8a..e0e92102dccf8836057de1967b91348f82e1dbdd 100644 (file)
@@ -1,41 +1,55 @@
 
 =================> RouteList Build 'test1' <=================
-Adding <IPv4RouteList[3]> = {
+Adding <IPv4RouteList[5]> = {
  0. Net 0.0.0.0/0 Gate 10.0.0.1 Ifp en0 Ifa 10.0.0.12
- 1. Net 10.0.0.0/24 Ifp en0 Ifa 10.0.0.12
- 2. Net 10.0.0.1/32 Ifp en0 Ifa 10.0.0.12
+ 1. Net 255.255.255.255/32 Ifp en0 Ifa 10.0.0.12
+ 2. Net 224.0.0.0/4 Ifp en0 Ifa 10.0.0.12
+ 3. Net 10.0.0.0/24 Ifp en0 Ifa 10.0.0.12
+ 4. Net 10.0.0.1/32 Ifp en0 Ifa 10.0.0.12
 }
-Adding <IPv4RouteList[3]> = {
+Adding <IPv4RouteList[5]> = {
  0. Net 0.0.0.0/0 Gate 10.0.0.1 Ifp en0 Ifa 10.0.0.19
- 1. Net 10.0.0.0/24 Ifp en0 Ifa 10.0.0.19
- 2. Net 10.0.0.1/32 Ifp en0 Ifa 10.0.0.19
+ 1. Net 255.255.255.255/32 Ifp en0 Ifa 10.0.0.19
+ 2. Net 224.0.0.0/4 Ifp en0 Ifa 10.0.0.19
+ 3. Net 10.0.0.0/24 Ifp en0 Ifa 10.0.0.19
+ 4. Net 10.0.0.1/32 Ifp en0 Ifa 10.0.0.19
 }
-Adding <IPv4RouteList[3]> = {
+Adding <IPv4RouteList[5]> = {
  0. Net 0.0.0.0/0 Gate 192.168.2.1 Ifp fw0 Ifa 192.168.2.30
- 1. Net 192.168.2.0/24 Ifp fw0 Ifa 192.168.2.30
- 2. Net 192.168.2.1/32 Ifp fw0 Ifa 192.168.2.30
+ 1. Net 255.255.255.255/32 Ifp fw0 Ifa 192.168.2.30
+ 2. Net 224.0.0.0/4 Ifp fw0 Ifa 192.168.2.30
+ 3. Net 192.168.2.0/24 Ifp fw0 Ifa 192.168.2.30
+ 4. Net 192.168.2.1/32 Ifp fw0 Ifa 192.168.2.30
 }
-Adding <IPv4RouteList[3]> = {
+Adding <IPv4RouteList[5]> = {
  0. Net 0.0.0.0/0 Gate 10.0.0.1 Ifp en0 Ifa 10.0.0.11
- 1. Net 10.0.0.0/24 Ifp en0 Ifa 10.0.0.11
- 2. Net 10.0.0.1/32 Ifp en0 Ifa 10.0.0.11
+ 1. Net 255.255.255.255/32 Ifp en0 Ifa 10.0.0.11
+ 2. Net 224.0.0.0/4 Ifp en0 Ifa 10.0.0.11
+ 3. Net 10.0.0.0/24 Ifp en0 Ifa 10.0.0.11
+ 4. Net 10.0.0.1/32 Ifp en0 Ifa 10.0.0.11
 }
-Adding <IPv4RouteList[3]> = {
+Adding <IPv4RouteList[5]> = {
  0. Net 0.0.0.0/0 Gate 10.0.0.1 Ifp en1 Ifa 10.0.0.20
- 1. Net 10.0.0.0/24 Ifp en1 Ifa 10.0.0.20
- 2. Net 10.0.0.1/32 Ifp en1 Ifa 10.0.0.20
+ 1. Net 255.255.255.255/32 Ifp en1 Ifa 10.0.0.20
+ 2. Net 224.0.0.0/4 Ifp en1 Ifa 10.0.0.20
+ 3. Net 10.0.0.0/24 Ifp en1 Ifa 10.0.0.20
+ 4. Net 10.0.0.1/32 Ifp en1 Ifa 10.0.0.20
 }
-Adding <IPv4RouteList[3]> = {
+Adding <IPv4RouteList[5]> = {
  0. Net 0.0.0.0/0 Gate 10.0.0.1 Ifp en0 Ifa 10.0.0.13
- 1. Net 10.0.0.0/24 Ifp en0 Ifa 10.0.0.13
- 2. Net 10.0.0.1/32 Ifp en0 Ifa 10.0.0.13
+ 1. Net 255.255.255.255/32 Ifp en0 Ifa 10.0.0.13
+ 2. Net 224.0.0.0/4 Ifp en0 Ifa 10.0.0.13
+ 3. Net 10.0.0.0/24 Ifp en0 Ifa 10.0.0.13
+ 4. Net 10.0.0.1/32 Ifp en0 Ifa 10.0.0.13
 }
-Adding <IPv4RouteList[3]> = {
+Adding <IPv4RouteList[5]> = {
  0. Net 0.0.0.0/0 Gate 10.0.0.1 Ifp en0 Ifa 10.0.0.10
- 1. Net 10.0.0.0/24 Ifp en0 Ifa 10.0.0.10
- 2. Net 10.0.0.1/32 Ifp en0 Ifa 10.0.0.10
+ 1. Net 255.255.255.255/32 Ifp en0 Ifa 10.0.0.10
+ 2. Net 224.0.0.0/4 Ifp en0 Ifa 10.0.0.10
+ 3. Net 10.0.0.0/24 Ifp en0 Ifa 10.0.0.10
+ 4. Net 10.0.0.1/32 Ifp en0 Ifa 10.0.0.10
 }
-Routes are <IPv4RouteList[9]> = {
+Routes are <IPv4RouteList[15]> = {
  0. Net 0.0.0.0/0 Gate 10.0.0.1 Ifp en0 Ifa 10.0.0.10
  1. Net 0.0.0.0/0 Gate 10.0.0.1 Ifp en1 Ifa 10.0.0.20 [SCOPED]
  2. Net 0.0.0.0/0 Gate 192.168.2.1 Ifp fw0 Ifa 192.168.2.30 [SCOPED]
@@ -45,43 +59,63 @@ Routes are <IPv4RouteList[9]> = {
  6. Net 10.0.0.1/32 Ifp en1 Ifa 10.0.0.20 [SCOPED]
  7. Net 192.168.2.0/24 Ifp fw0 Ifa 192.168.2.30
  8. Net 192.168.2.1/32 Ifp fw0 Ifa 192.168.2.30
+ 9. Net 224.0.0.0/4 Ifp en0 Ifa 10.0.0.10
+10. Net 224.0.0.0/4 Ifp en1 Ifa 10.0.0.20 [SCOPED]
+11. Net 224.0.0.0/4 Ifp fw0 Ifa 192.168.2.30 [SCOPED]
+12. Net 255.255.255.255/32 Ifp en0 Ifa 10.0.0.10
+13. Net 255.255.255.255/32 Ifp en1 Ifa 10.0.0.20 [SCOPED]
+14. Net 255.255.255.255/32 Ifp fw0 Ifa 192.168.2.30 [SCOPED]
 }
-Adding <IPv4RouteList[3]> = {
+Adding <IPv4RouteList[5]> = {
  0. Net 0.0.0.0/0 Gate 10.0.0.1 Ifp en0 Ifa 10.0.0.10
- 1. Net 10.0.0.0/24 Ifp en0 Ifa 10.0.0.10
- 2. Net 10.0.0.1/32 Ifp en0 Ifa 10.0.0.10
+ 1. Net 255.255.255.255/32 Ifp en0 Ifa 10.0.0.10
+ 2. Net 224.0.0.0/4 Ifp en0 Ifa 10.0.0.10
+ 3. Net 10.0.0.0/24 Ifp en0 Ifa 10.0.0.10
+ 4. Net 10.0.0.1/32 Ifp en0 Ifa 10.0.0.10
 }
-Adding <IPv4RouteList[3]> = {
+Adding <IPv4RouteList[5]> = {
  0. Net 0.0.0.0/0 Gate 10.0.0.1 Ifp en0 Ifa 10.0.0.13
- 1. Net 10.0.0.0/24 Ifp en0 Ifa 10.0.0.13
- 2. Net 10.0.0.1/32 Ifp en0 Ifa 10.0.0.13
+ 1. Net 255.255.255.255/32 Ifp en0 Ifa 10.0.0.13
+ 2. Net 224.0.0.0/4 Ifp en0 Ifa 10.0.0.13
+ 3. Net 10.0.0.0/24 Ifp en0 Ifa 10.0.0.13
+ 4. Net 10.0.0.1/32 Ifp en0 Ifa 10.0.0.13
 }
-Adding <IPv4RouteList[3]> = {
+Adding <IPv4RouteList[5]> = {
  0. Net 0.0.0.0/0 Gate 10.0.0.1 Ifp en1 Ifa 10.0.0.20
- 1. Net 10.0.0.0/24 Ifp en1 Ifa 10.0.0.20
- 2. Net 10.0.0.1/32 Ifp en1 Ifa 10.0.0.20
+ 1. Net 255.255.255.255/32 Ifp en1 Ifa 10.0.0.20
+ 2. Net 224.0.0.0/4 Ifp en1 Ifa 10.0.0.20
+ 3. Net 10.0.0.0/24 Ifp en1 Ifa 10.0.0.20
+ 4. Net 10.0.0.1/32 Ifp en1 Ifa 10.0.0.20
 }
-Adding <IPv4RouteList[3]> = {
+Adding <IPv4RouteList[5]> = {
  0. Net 0.0.0.0/0 Gate 10.0.0.1 Ifp en0 Ifa 10.0.0.11
- 1. Net 10.0.0.0/24 Ifp en0 Ifa 10.0.0.11
- 2. Net 10.0.0.1/32 Ifp en0 Ifa 10.0.0.11
+ 1. Net 255.255.255.255/32 Ifp en0 Ifa 10.0.0.11
+ 2. Net 224.0.0.0/4 Ifp en0 Ifa 10.0.0.11
+ 3. Net 10.0.0.0/24 Ifp en0 Ifa 10.0.0.11
+ 4. Net 10.0.0.1/32 Ifp en0 Ifa 10.0.0.11
 }
-Adding <IPv4RouteList[3]> = {
+Adding <IPv4RouteList[5]> = {
  0. Net 0.0.0.0/0 Gate 192.168.2.1 Ifp fw0 Ifa 192.168.2.30
- 1. Net 192.168.2.0/24 Ifp fw0 Ifa 192.168.2.30
- 2. Net 192.168.2.1/32 Ifp fw0 Ifa 192.168.2.30
+ 1. Net 255.255.255.255/32 Ifp fw0 Ifa 192.168.2.30
+ 2. Net 224.0.0.0/4 Ifp fw0 Ifa 192.168.2.30
+ 3. Net 192.168.2.0/24 Ifp fw0 Ifa 192.168.2.30
+ 4. Net 192.168.2.1/32 Ifp fw0 Ifa 192.168.2.30
 }
-Adding <IPv4RouteList[3]> = {
+Adding <IPv4RouteList[5]> = {
  0. Net 0.0.0.0/0 Gate 10.0.0.1 Ifp en0 Ifa 10.0.0.19
- 1. Net 10.0.0.0/24 Ifp en0 Ifa 10.0.0.19
- 2. Net 10.0.0.1/32 Ifp en0 Ifa 10.0.0.19
+ 1. Net 255.255.255.255/32 Ifp en0 Ifa 10.0.0.19
+ 2. Net 224.0.0.0/4 Ifp en0 Ifa 10.0.0.19
+ 3. Net 10.0.0.0/24 Ifp en0 Ifa 10.0.0.19
+ 4. Net 10.0.0.1/32 Ifp en0 Ifa 10.0.0.19
 }
-Adding <IPv4RouteList[3]> = {
+Adding <IPv4RouteList[5]> = {
  0. Net 0.0.0.0/0 Gate 10.0.0.1 Ifp en0 Ifa 10.0.0.12
- 1. Net 10.0.0.0/24 Ifp en0 Ifa 10.0.0.12
- 2. Net 10.0.0.1/32 Ifp en0 Ifa 10.0.0.12
+ 1. Net 255.255.255.255/32 Ifp en0 Ifa 10.0.0.12
+ 2. Net 224.0.0.0/4 Ifp en0 Ifa 10.0.0.12
+ 3. Net 10.0.0.0/24 Ifp en0 Ifa 10.0.0.12
+ 4. Net 10.0.0.1/32 Ifp en0 Ifa 10.0.0.12
 }
-Routes are <IPv4RouteList[9]> = {
+Routes are <IPv4RouteList[15]> = {
  0. Net 0.0.0.0/0 Gate 10.0.0.1 Ifp en0 Ifa 10.0.0.10
  1. Net 0.0.0.0/0 Gate 10.0.0.1 Ifp en1 Ifa 10.0.0.20 [SCOPED]
  2. Net 0.0.0.0/0 Gate 192.168.2.1 Ifp fw0 Ifa 192.168.2.30 [SCOPED]
@@ -91,42 +125,60 @@ Routes are <IPv4RouteList[9]> = {
  6. Net 10.0.0.1/32 Ifp en1 Ifa 10.0.0.20 [SCOPED]
  7. Net 192.168.2.0/24 Ifp fw0 Ifa 192.168.2.30
  8. Net 192.168.2.1/32 Ifp fw0 Ifa 192.168.2.30
+ 9. Net 224.0.0.0/4 Ifp en0 Ifa 10.0.0.10
+10. Net 224.0.0.0/4 Ifp en1 Ifa 10.0.0.20 [SCOPED]
+11. Net 224.0.0.0/4 Ifp fw0 Ifa 192.168.2.30 [SCOPED]
+12. Net 255.255.255.255/32 Ifp en0 Ifa 10.0.0.10
+13. Net 255.255.255.255/32 Ifp en1 Ifa 10.0.0.20 [SCOPED]
+14. Net 255.255.255.255/32 Ifp fw0 Ifa 192.168.2.30 [SCOPED]
 }
 routes1 and routes2 are the same
 =================> RouteList Build 'test1': PASSED <=================
 
 =================> RouteList Build 'test2' <=================
-Adding <IPv4RouteList[3]> = {
+Adding <IPv4RouteList[5]> = {
  0. Net 0.0.0.0/0 Gate 10.0.0.1 Ifp en0 Ifa 10.0.0.12
- 1. Net 10.0.0.0/24 Ifp en0 Ifa 10.0.0.12
- 2. Net 10.0.0.1/32 Ifp en0 Ifa 10.0.0.12
+ 1. Net 255.255.255.255/32 Ifp en0 Ifa 10.0.0.12
+ 2. Net 224.0.0.0/4 Ifp en0 Ifa 10.0.0.12
+ 3. Net 10.0.0.0/24 Ifp en0 Ifa 10.0.0.12
+ 4. Net 10.0.0.1/32 Ifp en0 Ifa 10.0.0.12
 }
-Adding <IPv4RouteList[3]> = {
+Adding <IPv4RouteList[5]> = {
  0. Net 0.0.0.0/0 Gate 192.168.2.1 Ifp fw0 Ifa 192.168.2.30
- 1. Net 192.168.2.0/24 Ifp fw0 Ifa 192.168.2.30
- 2. Net 192.168.2.1/32 Ifp fw0 Ifa 192.168.2.30
+ 1. Net 255.255.255.255/32 Ifp fw0 Ifa 192.168.2.30
+ 2. Net 224.0.0.0/4 Ifp fw0 Ifa 192.168.2.30
+ 3. Net 192.168.2.0/24 Ifp fw0 Ifa 192.168.2.30
+ 4. Net 192.168.2.1/32 Ifp fw0 Ifa 192.168.2.30
 }
-Adding <IPv4RouteList[3]> = {
+Adding <IPv4RouteList[5]> = {
  0. Net 0.0.0.0/0 Gate 10.0.0.1 Ifp en0 Ifa 10.0.0.11
- 1. Net 10.0.0.0/24 Ifp en0 Ifa 10.0.0.11
- 2. Net 10.0.0.1/32 Ifp en0 Ifa 10.0.0.11
+ 1. Net 255.255.255.255/32 Ifp en0 Ifa 10.0.0.11
+ 2. Net 224.0.0.0/4 Ifp en0 Ifa 10.0.0.11
+ 3. Net 10.0.0.0/24 Ifp en0 Ifa 10.0.0.11
+ 4. Net 10.0.0.1/32 Ifp en0 Ifa 10.0.0.11
 }
-Adding <IPv4RouteList[3]> = {
+Adding <IPv4RouteList[5]> = {
  0. Net 0.0.0.0/0 Gate 10.0.0.1 Ifp en1 Ifa 10.0.0.20
- 1. Net 10.0.0.0/24 Ifp en1 Ifa 10.0.0.20
- 2. Net 10.0.0.1/32 Ifp en1 Ifa 10.0.0.20
+ 1. Net 255.255.255.255/32 Ifp en1 Ifa 10.0.0.20
+ 2. Net 224.0.0.0/4 Ifp en1 Ifa 10.0.0.20
+ 3. Net 10.0.0.0/24 Ifp en1 Ifa 10.0.0.20
+ 4. Net 10.0.0.1/32 Ifp en1 Ifa 10.0.0.20
 }
-Adding <IPv4RouteList[3]> = {
+Adding <IPv4RouteList[5]> = {
  0. Net 0.0.0.0/0 Gate 10.0.0.1 Ifp en0 Ifa 10.0.0.13
- 1. Net 10.0.0.0/24 Ifp en0 Ifa 10.0.0.13
- 2. Net 10.0.0.1/32 Ifp en0 Ifa 10.0.0.13
+ 1. Net 255.255.255.255/32 Ifp en0 Ifa 10.0.0.13
+ 2. Net 224.0.0.0/4 Ifp en0 Ifa 10.0.0.13
+ 3. Net 10.0.0.0/24 Ifp en0 Ifa 10.0.0.13
+ 4. Net 10.0.0.1/32 Ifp en0 Ifa 10.0.0.13
 }
-Adding <IPv4RouteList[3]> = {
+Adding <IPv4RouteList[5]> = {
  0. Net 0.0.0.0/0 Gate 10.0.0.1 Ifp en0 Ifa 10.0.0.10
- 1. Net 10.0.0.0/24 Ifp en0 Ifa 10.0.0.10
- 2. Net 10.0.0.1/32 Ifp en0 Ifa 10.0.0.10
+ 1. Net 255.255.255.255/32 Ifp en0 Ifa 10.0.0.10
+ 2. Net 224.0.0.0/4 Ifp en0 Ifa 10.0.0.10
+ 3. Net 10.0.0.0/24 Ifp en0 Ifa 10.0.0.10
+ 4. Net 10.0.0.1/32 Ifp en0 Ifa 10.0.0.10
 }
-Routes are <IPv4RouteList[9]> = {
+Routes are <IPv4RouteList[15]> = {
  0. Net 0.0.0.0/0 Gate 10.0.0.1 Ifp en0 Ifa 10.0.0.10
  1. Net 0.0.0.0/0 Gate 10.0.0.1 Ifp en1 Ifa 10.0.0.20 [SCOPED]
  2. Net 0.0.0.0/0 Gate 192.168.2.1 Ifp fw0 Ifa 192.168.2.30 [SCOPED]
@@ -136,38 +188,56 @@ Routes are <IPv4RouteList[9]> = {
  6. Net 10.0.0.1/32 Ifp en1 Ifa 10.0.0.20 [SCOPED]
  7. Net 192.168.2.0/24 Ifp fw0 Ifa 192.168.2.30
  8. Net 192.168.2.1/32 Ifp fw0 Ifa 192.168.2.30
+ 9. Net 224.0.0.0/4 Ifp en0 Ifa 10.0.0.10
+10. Net 224.0.0.0/4 Ifp en1 Ifa 10.0.0.20 [SCOPED]
+11. Net 224.0.0.0/4 Ifp fw0 Ifa 192.168.2.30 [SCOPED]
+12. Net 255.255.255.255/32 Ifp en0 Ifa 10.0.0.10
+13. Net 255.255.255.255/32 Ifp en1 Ifa 10.0.0.20 [SCOPED]
+14. Net 255.255.255.255/32 Ifp fw0 Ifa 192.168.2.30 [SCOPED]
 }
-Adding <IPv4RouteList[3]> = {
+Adding <IPv4RouteList[5]> = {
  0. Net 0.0.0.0/0 Gate 10.0.0.1 Ifp en0 Ifa 10.0.0.10
- 1. Net 10.0.0.0/24 Ifp en0 Ifa 10.0.0.10
- 2. Net 10.0.0.1/32 Ifp en0 Ifa 10.0.0.10
+ 1. Net 255.255.255.255/32 Ifp en0 Ifa 10.0.0.10
+ 2. Net 224.0.0.0/4 Ifp en0 Ifa 10.0.0.10
+ 3. Net 10.0.0.0/24 Ifp en0 Ifa 10.0.0.10
+ 4. Net 10.0.0.1/32 Ifp en0 Ifa 10.0.0.10
 }
-Adding <IPv4RouteList[3]> = {
+Adding <IPv4RouteList[5]> = {
  0. Net 0.0.0.0/0 Gate 10.0.0.1 Ifp en0 Ifa 10.0.0.13
- 1. Net 10.0.0.0/24 Ifp en0 Ifa 10.0.0.13
- 2. Net 10.0.0.1/32 Ifp en0 Ifa 10.0.0.13
+ 1. Net 255.255.255.255/32 Ifp en0 Ifa 10.0.0.13
+ 2. Net 224.0.0.0/4 Ifp en0 Ifa 10.0.0.13
+ 3. Net 10.0.0.0/24 Ifp en0 Ifa 10.0.0.13
+ 4. Net 10.0.0.1/32 Ifp en0 Ifa 10.0.0.13
 }
-Adding <IPv4RouteList[3]> = {
+Adding <IPv4RouteList[5]> = {
  0. Net 0.0.0.0/0 Gate 10.0.0.1 Ifp en1 Ifa 10.0.0.20
- 1. Net 10.0.0.0/24 Ifp en1 Ifa 10.0.0.20
- 2. Net 10.0.0.1/32 Ifp en1 Ifa 10.0.0.20
+ 1. Net 255.255.255.255/32 Ifp en1 Ifa 10.0.0.20
+ 2. Net 224.0.0.0/4 Ifp en1 Ifa 10.0.0.20
+ 3. Net 10.0.0.0/24 Ifp en1 Ifa 10.0.0.20
+ 4. Net 10.0.0.1/32 Ifp en1 Ifa 10.0.0.20
 }
-Adding <IPv4RouteList[3]> = {
+Adding <IPv4RouteList[5]> = {
  0. Net 0.0.0.0/0 Gate 10.0.0.1 Ifp en0 Ifa 10.0.0.11
- 1. Net 10.0.0.0/24 Ifp en0 Ifa 10.0.0.11
- 2. Net 10.0.0.1/32 Ifp en0 Ifa 10.0.0.11
+ 1. Net 255.255.255.255/32 Ifp en0 Ifa 10.0.0.11
+ 2. Net 224.0.0.0/4 Ifp en0 Ifa 10.0.0.11
+ 3. Net 10.0.0.0/24 Ifp en0 Ifa 10.0.0.11
+ 4. Net 10.0.0.1/32 Ifp en0 Ifa 10.0.0.11
 }
-Adding <IPv4RouteList[3]> = {
+Adding <IPv4RouteList[5]> = {
  0. Net 0.0.0.0/0 Gate 192.168.2.1 Ifp fw0 Ifa 192.168.2.30
- 1. Net 192.168.2.0/24 Ifp fw0 Ifa 192.168.2.30
- 2. Net 192.168.2.1/32 Ifp fw0 Ifa 192.168.2.30
+ 1. Net 255.255.255.255/32 Ifp fw0 Ifa 192.168.2.30
+ 2. Net 224.0.0.0/4 Ifp fw0 Ifa 192.168.2.30
+ 3. Net 192.168.2.0/24 Ifp fw0 Ifa 192.168.2.30
+ 4. Net 192.168.2.1/32 Ifp fw0 Ifa 192.168.2.30
 }
-Adding <IPv4RouteList[3]> = {
+Adding <IPv4RouteList[5]> = {
  0. Net 0.0.0.0/0 Gate 10.0.0.1 Ifp en0 Ifa 10.0.0.12
- 1. Net 10.0.0.0/24 Ifp en0 Ifa 10.0.0.12
- 2. Net 10.0.0.1/32 Ifp en0 Ifa 10.0.0.12
+ 1. Net 255.255.255.255/32 Ifp en0 Ifa 10.0.0.12
+ 2. Net 224.0.0.0/4 Ifp en0 Ifa 10.0.0.12
+ 3. Net 10.0.0.0/24 Ifp en0 Ifa 10.0.0.12
+ 4. Net 10.0.0.1/32 Ifp en0 Ifa 10.0.0.12
 }
-Routes are <IPv4RouteList[9]> = {
+Routes are <IPv4RouteList[15]> = {
  0. Net 0.0.0.0/0 Gate 10.0.0.1 Ifp en0 Ifa 10.0.0.10
  1. Net 0.0.0.0/0 Gate 10.0.0.1 Ifp en1 Ifa 10.0.0.20 [SCOPED]
  2. Net 0.0.0.0/0 Gate 192.168.2.1 Ifp fw0 Ifa 192.168.2.30 [SCOPED]
@@ -177,62 +247,88 @@ Routes are <IPv4RouteList[9]> = {
  6. Net 10.0.0.1/32 Ifp en1 Ifa 10.0.0.20 [SCOPED]
  7. Net 192.168.2.0/24 Ifp fw0 Ifa 192.168.2.30
  8. Net 192.168.2.1/32 Ifp fw0 Ifa 192.168.2.30
+ 9. Net 224.0.0.0/4 Ifp en0 Ifa 10.0.0.10
+10. Net 224.0.0.0/4 Ifp en1 Ifa 10.0.0.20 [SCOPED]
+11. Net 224.0.0.0/4 Ifp fw0 Ifa 192.168.2.30 [SCOPED]
+12. Net 255.255.255.255/32 Ifp en0 Ifa 10.0.0.10
+13. Net 255.255.255.255/32 Ifp en1 Ifa 10.0.0.20 [SCOPED]
+14. Net 255.255.255.255/32 Ifp fw0 Ifa 192.168.2.30 [SCOPED]
 }
 routes1 and routes2 are the same
 =================> RouteList Build 'test2': PASSED <=================
 
 =================> RouteList Build 'test3' <=================
-Adding <IPv4RouteList[3]> = {
+Adding <IPv4RouteList[5]> = {
  0. Net 0.0.0.0/0 Gate 10.0.0.1 Ifp en0 Ifa 10.0.0.12
- 1. Net 10.0.0.0/24 Ifp en0 Ifa 10.0.0.12
- 2. Net 10.0.0.1/32 Ifp en0 Ifa 10.0.0.12
+ 1. Net 255.255.255.255/32 Ifp en0 Ifa 10.0.0.12
+ 2. Net 224.0.0.0/4 Ifp en0 Ifa 10.0.0.12
+ 3. Net 10.0.0.0/24 Ifp en0 Ifa 10.0.0.12
+ 4. Net 10.0.0.1/32 Ifp en0 Ifa 10.0.0.12
 }
-Adding <IPv4RouteList[3]> = {
+Adding <IPv4RouteList[5]> = {
  0. Net 0.0.0.0/0 Gate 10.0.0.1 Ifp en1 Ifa 10.0.0.20
- 1. Net 10.0.0.0/24 Ifp en1 Ifa 10.0.0.20
- 2. Net 10.0.0.1/32 Ifp en1 Ifa 10.0.0.20
+ 1. Net 255.255.255.255/32 Ifp en1 Ifa 10.0.0.20
+ 2. Net 224.0.0.0/4 Ifp en1 Ifa 10.0.0.20
+ 3. Net 10.0.0.0/24 Ifp en1 Ifa 10.0.0.20
+ 4. Net 10.0.0.1/32 Ifp en1 Ifa 10.0.0.20
 }
-Adding <IPv4RouteList[3]> = {
+Adding <IPv4RouteList[5]> = {
  0. Net 0.0.0.0/0 Gate 10.0.0.1 Ifp en0 Ifa 10.0.0.13
- 1. Net 10.0.0.0/24 Ifp en0 Ifa 10.0.0.13
- 2. Net 10.0.0.1/32 Ifp en0 Ifa 10.0.0.13
+ 1. Net 255.255.255.255/32 Ifp en0 Ifa 10.0.0.13
+ 2. Net 224.0.0.0/4 Ifp en0 Ifa 10.0.0.13
+ 3. Net 10.0.0.0/24 Ifp en0 Ifa 10.0.0.13
+ 4. Net 10.0.0.1/32 Ifp en0 Ifa 10.0.0.13
 }
-Adding <IPv4RouteList[3]> = {
+Adding <IPv4RouteList[5]> = {
  0. Net 0.0.0.0/0 Gate 10.0.0.1 Ifp en0 Ifa 10.0.0.10
- 1. Net 10.0.0.0/24 Ifp en0 Ifa 10.0.0.10
- 2. Net 10.0.0.1/32 Ifp en0 Ifa 10.0.0.10
+ 1. Net 255.255.255.255/32 Ifp en0 Ifa 10.0.0.10
+ 2. Net 224.0.0.0/4 Ifp en0 Ifa 10.0.0.10
+ 3. Net 10.0.0.0/24 Ifp en0 Ifa 10.0.0.10
+ 4. Net 10.0.0.1/32 Ifp en0 Ifa 10.0.0.10
 }
-Adding <IPv4RouteList[3]> = {
+Adding <IPv4RouteList[5]> = {
  0. Net 0.0.0.0/0 Gate 192.168.2.1 Ifp en0 Ifa 192.168.2.10
- 1. Net 192.168.2.0/24 Ifp en0 Ifa 192.168.2.10
- 2. Net 192.168.2.1/32 Ifp en0 Ifa 192.168.2.10
+ 1. Net 255.255.255.255/32 Ifp en0 Ifa 192.168.2.10
+ 2. Net 224.0.0.0/4 Ifp en0 Ifa 192.168.2.10
+ 3. Net 192.168.2.0/24 Ifp en0 Ifa 192.168.2.10
+ 4. Net 192.168.2.1/32 Ifp en0 Ifa 192.168.2.10
 }
-Adding <IPv4RouteList[3]> = {
+Adding <IPv4RouteList[5]> = {
  0. Net 0.0.0.0/0 Gate 192.168.2.1 Ifp en1 Ifa 192.168.2.20
- 1. Net 192.168.2.0/24 Ifp en1 Ifa 192.168.2.20
- 2. Net 192.168.2.1/32 Ifp en1 Ifa 192.168.2.20
+ 1. Net 255.255.255.255/32 Ifp en1 Ifa 192.168.2.20
+ 2. Net 224.0.0.0/4 Ifp en1 Ifa 192.168.2.20
+ 3. Net 192.168.2.0/24 Ifp en1 Ifa 192.168.2.20
+ 4. Net 192.168.2.1/32 Ifp en1 Ifa 192.168.2.20
 }
-Adding <IPv4RouteList[3]> = {
+Adding <IPv4RouteList[5]> = {
  0. Net 0.0.0.0/0 Gate 192.168.2.1 Ifp fw0 Ifa 192.168.2.30
- 1. Net 192.168.2.0/24 Ifp fw0 Ifa 192.168.2.30
- 2. Net 192.168.2.1/32 Ifp fw0 Ifa 192.168.2.30
+ 1. Net 255.255.255.255/32 Ifp fw0 Ifa 192.168.2.30
+ 2. Net 224.0.0.0/4 Ifp fw0 Ifa 192.168.2.30
+ 3. Net 192.168.2.0/24 Ifp fw0 Ifa 192.168.2.30
+ 4. Net 192.168.2.1/32 Ifp fw0 Ifa 192.168.2.30
 }
-Adding <IPv4RouteList[3]> = {
+Adding <IPv4RouteList[5]> = {
  0. Net 0.0.0.0/0 Gate 192.168.3.1 Ifp fw0 Ifa 192.168.3.30
- 1. Net 192.168.3.0/24 Ifp fw0 Ifa 192.168.3.30
- 2. Net 192.168.3.1/32 Ifp fw0 Ifa 192.168.3.30
+ 1. Net 255.255.255.255/32 Ifp fw0 Ifa 192.168.3.30
+ 2. Net 224.0.0.0/4 Ifp fw0 Ifa 192.168.3.30
+ 3. Net 192.168.3.0/24 Ifp fw0 Ifa 192.168.3.30
+ 4. Net 192.168.3.1/32 Ifp fw0 Ifa 192.168.3.30
 }
-Adding <IPv4RouteList[3]> = {
+Adding <IPv4RouteList[5]> = {
  0. Net 0.0.0.0/0 Gate 10.0.0.1 Ifp en0 Ifa 10.0.0.12
- 1. Net 10.0.0.0/24 Ifp en0 Ifa 10.0.0.12
- 2. Net 10.0.0.1/32 Ifp en0 Ifa 10.0.0.12
+ 1. Net 255.255.255.255/32 Ifp en0 Ifa 10.0.0.12
+ 2. Net 224.0.0.0/4 Ifp en0 Ifa 10.0.0.12
+ 3. Net 10.0.0.0/24 Ifp en0 Ifa 10.0.0.12
+ 4. Net 10.0.0.1/32 Ifp en0 Ifa 10.0.0.12
 }
-Adding <IPv4RouteList[3]> = {
+Adding <IPv4RouteList[5]> = {
  0. Net 0.0.0.0/0 Gate 10.0.0.1 Ifp en0 Ifa 10.0.0.11
- 1. Net 10.0.0.0/24 Ifp en0 Ifa 10.0.0.11
- 2. Net 10.0.0.1/32 Ifp en0 Ifa 10.0.0.11
+ 1. Net 255.255.255.255/32 Ifp en0 Ifa 10.0.0.11
+ 2. Net 224.0.0.0/4 Ifp en0 Ifa 10.0.0.11
+ 3. Net 10.0.0.0/24 Ifp en0 Ifa 10.0.0.11
+ 4. Net 10.0.0.1/32 Ifp en0 Ifa 10.0.0.11
 }
-Routes are <IPv4RouteList[15]> = {
+Routes are <IPv4RouteList[21]> = {
  0. Net 0.0.0.0/0 Gate 10.0.0.1 Ifp en0 Ifa 10.0.0.10
  1. Net 0.0.0.0/0 Gate 10.0.0.1 Ifp en1 Ifa 10.0.0.20 [SCOPED]
  2. Net 0.0.0.0/0 Gate 192.168.3.1 Ifp fw0 Ifa 192.168.3.30 [SCOPED]
@@ -248,58 +344,84 @@ Routes are <IPv4RouteList[15]> = {
 12. Net 192.168.2.1/32 Ifp en1 Ifa 192.168.2.20 [SCOPED]
 13. Net 192.168.3.0/24 Ifp fw0 Ifa 192.168.3.30
 14. Net 192.168.3.1/32 Ifp fw0 Ifa 192.168.3.30
-}
-Adding <IPv4RouteList[3]> = {
+15. Net 224.0.0.0/4 Ifp en0 Ifa 10.0.0.10
+16. Net 224.0.0.0/4 Ifp en1 Ifa 10.0.0.20 [SCOPED]
+17. Net 224.0.0.0/4 Ifp fw0 Ifa 192.168.3.30 [SCOPED]
+18. Net 255.255.255.255/32 Ifp en0 Ifa 10.0.0.10
+19. Net 255.255.255.255/32 Ifp en1 Ifa 10.0.0.20 [SCOPED]
+20. Net 255.255.255.255/32 Ifp fw0 Ifa 192.168.3.30 [SCOPED]
+}
+Adding <IPv4RouteList[5]> = {
  0. Net 0.0.0.0/0 Gate 10.0.0.1 Ifp en0 Ifa 10.0.0.11
- 1. Net 10.0.0.0/24 Ifp en0 Ifa 10.0.0.11
- 2. Net 10.0.0.1/32 Ifp en0 Ifa 10.0.0.11
+ 1. Net 255.255.255.255/32 Ifp en0 Ifa 10.0.0.11
+ 2. Net 224.0.0.0/4 Ifp en0 Ifa 10.0.0.11
+ 3. Net 10.0.0.0/24 Ifp en0 Ifa 10.0.0.11
+ 4. Net 10.0.0.1/32 Ifp en0 Ifa 10.0.0.11
 }
-Adding <IPv4RouteList[3]> = {
+Adding <IPv4RouteList[5]> = {
  0. Net 0.0.0.0/0 Gate 10.0.0.1 Ifp en0 Ifa 10.0.0.12
- 1. Net 10.0.0.0/24 Ifp en0 Ifa 10.0.0.12
- 2. Net 10.0.0.1/32 Ifp en0 Ifa 10.0.0.12
+ 1. Net 255.255.255.255/32 Ifp en0 Ifa 10.0.0.12
+ 2. Net 224.0.0.0/4 Ifp en0 Ifa 10.0.0.12
+ 3. Net 10.0.0.0/24 Ifp en0 Ifa 10.0.0.12
+ 4. Net 10.0.0.1/32 Ifp en0 Ifa 10.0.0.12
 }
-Adding <IPv4RouteList[3]> = {
+Adding <IPv4RouteList[5]> = {
  0. Net 0.0.0.0/0 Gate 192.168.3.1 Ifp fw0 Ifa 192.168.3.30
- 1. Net 192.168.3.0/24 Ifp fw0 Ifa 192.168.3.30
- 2. Net 192.168.3.1/32 Ifp fw0 Ifa 192.168.3.30
+ 1. Net 255.255.255.255/32 Ifp fw0 Ifa 192.168.3.30
+ 2. Net 224.0.0.0/4 Ifp fw0 Ifa 192.168.3.30
+ 3. Net 192.168.3.0/24 Ifp fw0 Ifa 192.168.3.30
+ 4. Net 192.168.3.1/32 Ifp fw0 Ifa 192.168.3.30
 }
-Adding <IPv4RouteList[3]> = {
+Adding <IPv4RouteList[5]> = {
  0. Net 0.0.0.0/0 Gate 192.168.2.1 Ifp fw0 Ifa 192.168.2.30
- 1. Net 192.168.2.0/24 Ifp fw0 Ifa 192.168.2.30
- 2. Net 192.168.2.1/32 Ifp fw0 Ifa 192.168.2.30
+ 1. Net 255.255.255.255/32 Ifp fw0 Ifa 192.168.2.30
+ 2. Net 224.0.0.0/4 Ifp fw0 Ifa 192.168.2.30
+ 3. Net 192.168.2.0/24 Ifp fw0 Ifa 192.168.2.30
+ 4. Net 192.168.2.1/32 Ifp fw0 Ifa 192.168.2.30
 }
-Adding <IPv4RouteList[3]> = {
+Adding <IPv4RouteList[5]> = {
  0. Net 0.0.0.0/0 Gate 192.168.2.1 Ifp en1 Ifa 192.168.2.20
- 1. Net 192.168.2.0/24 Ifp en1 Ifa 192.168.2.20
- 2. Net 192.168.2.1/32 Ifp en1 Ifa 192.168.2.20
+ 1. Net 255.255.255.255/32 Ifp en1 Ifa 192.168.2.20
+ 2. Net 224.0.0.0/4 Ifp en1 Ifa 192.168.2.20
+ 3. Net 192.168.2.0/24 Ifp en1 Ifa 192.168.2.20
+ 4. Net 192.168.2.1/32 Ifp en1 Ifa 192.168.2.20
 }
-Adding <IPv4RouteList[3]> = {
+Adding <IPv4RouteList[5]> = {
  0. Net 0.0.0.0/0 Gate 192.168.2.1 Ifp en0 Ifa 192.168.2.10
- 1. Net 192.168.2.0/24 Ifp en0 Ifa 192.168.2.10
- 2. Net 192.168.2.1/32 Ifp en0 Ifa 192.168.2.10
+ 1. Net 255.255.255.255/32 Ifp en0 Ifa 192.168.2.10
+ 2. Net 224.0.0.0/4 Ifp en0 Ifa 192.168.2.10
+ 3. Net 192.168.2.0/24 Ifp en0 Ifa 192.168.2.10
+ 4. Net 192.168.2.1/32 Ifp en0 Ifa 192.168.2.10
 }
-Adding <IPv4RouteList[3]> = {
+Adding <IPv4RouteList[5]> = {
  0. Net 0.0.0.0/0 Gate 10.0.0.1 Ifp en0 Ifa 10.0.0.10
- 1. Net 10.0.0.0/24 Ifp en0 Ifa 10.0.0.10
- 2. Net 10.0.0.1/32 Ifp en0 Ifa 10.0.0.10
+ 1. Net 255.255.255.255/32 Ifp en0 Ifa 10.0.0.10
+ 2. Net 224.0.0.0/4 Ifp en0 Ifa 10.0.0.10
+ 3. Net 10.0.0.0/24 Ifp en0 Ifa 10.0.0.10
+ 4. Net 10.0.0.1/32 Ifp en0 Ifa 10.0.0.10
 }
-Adding <IPv4RouteList[3]> = {
+Adding <IPv4RouteList[5]> = {
  0. Net 0.0.0.0/0 Gate 10.0.0.1 Ifp en0 Ifa 10.0.0.13
- 1. Net 10.0.0.0/24 Ifp en0 Ifa 10.0.0.13
- 2. Net 10.0.0.1/32 Ifp en0 Ifa 10.0.0.13
+ 1. Net 255.255.255.255/32 Ifp en0 Ifa 10.0.0.13
+ 2. Net 224.0.0.0/4 Ifp en0 Ifa 10.0.0.13
+ 3. Net 10.0.0.0/24 Ifp en0 Ifa 10.0.0.13
+ 4. Net 10.0.0.1/32 Ifp en0 Ifa 10.0.0.13
 }
-Adding <IPv4RouteList[3]> = {
+Adding <IPv4RouteList[5]> = {
  0. Net 0.0.0.0/0 Gate 10.0.0.1 Ifp en1 Ifa 10.0.0.20
- 1. Net 10.0.0.0/24 Ifp en1 Ifa 10.0.0.20
- 2. Net 10.0.0.1/32 Ifp en1 Ifa 10.0.0.20
+ 1. Net 255.255.255.255/32 Ifp en1 Ifa 10.0.0.20
+ 2. Net 224.0.0.0/4 Ifp en1 Ifa 10.0.0.20
+ 3. Net 10.0.0.0/24 Ifp en1 Ifa 10.0.0.20
+ 4. Net 10.0.0.1/32 Ifp en1 Ifa 10.0.0.20
 }
-Adding <IPv4RouteList[3]> = {
+Adding <IPv4RouteList[5]> = {
  0. Net 0.0.0.0/0 Gate 10.0.0.1 Ifp en0 Ifa 10.0.0.12
- 1. Net 10.0.0.0/24 Ifp en0 Ifa 10.0.0.12
- 2. Net 10.0.0.1/32 Ifp en0 Ifa 10.0.0.12
+ 1. Net 255.255.255.255/32 Ifp en0 Ifa 10.0.0.12
+ 2. Net 224.0.0.0/4 Ifp en0 Ifa 10.0.0.12
+ 3. Net 10.0.0.0/24 Ifp en0 Ifa 10.0.0.12
+ 4. Net 10.0.0.1/32 Ifp en0 Ifa 10.0.0.12
 }
-Routes are <IPv4RouteList[15]> = {
+Routes are <IPv4RouteList[21]> = {
  0. Net 0.0.0.0/0 Gate 10.0.0.1 Ifp en0 Ifa 10.0.0.10
  1. Net 0.0.0.0/0 Gate 10.0.0.1 Ifp en1 Ifa 10.0.0.20 [SCOPED]
  2. Net 0.0.0.0/0 Gate 192.168.3.1 Ifp fw0 Ifa 192.168.3.30 [SCOPED]
@@ -315,37 +437,53 @@ Routes are <IPv4RouteList[15]> = {
 12. Net 192.168.2.1/32 Ifp en1 Ifa 192.168.2.20 [SCOPED]
 13. Net 192.168.3.0/24 Ifp fw0 Ifa 192.168.3.30
 14. Net 192.168.3.1/32 Ifp fw0 Ifa 192.168.3.30
+15. Net 224.0.0.0/4 Ifp en0 Ifa 10.0.0.10
+16. Net 224.0.0.0/4 Ifp en1 Ifa 10.0.0.20 [SCOPED]
+17. Net 224.0.0.0/4 Ifp fw0 Ifa 192.168.3.30 [SCOPED]
+18. Net 255.255.255.255/32 Ifp en0 Ifa 10.0.0.10
+19. Net 255.255.255.255/32 Ifp en1 Ifa 10.0.0.20 [SCOPED]
+20. Net 255.255.255.255/32 Ifp fw0 Ifa 192.168.3.30 [SCOPED]
 }
 routes1 and routes2 are the same
 =================> RouteList Build 'test3': PASSED <=================
 
 =================> RouteList Build 'test4' <=================
-Adding <IPv4RouteList[3]> = {
+Adding <IPv4RouteList[5]> = {
  0. Net 0.0.0.0/0 Gate 17.202.20.1 Ifp en0 Ifa 17.202.40.191
- 1. Net 17.202.40.0/22 Ifp en0 Ifa 17.202.40.191
- 2. Net 17.202.20.1/32 Ifp en0 Ifa 17.202.40.191
+ 1. Net 255.255.255.255/32 Ifp en0 Ifa 17.202.40.191
+ 2. Net 224.0.0.0/4 Ifp en0 Ifa 17.202.40.191
+ 3. Net 17.202.40.0/22 Ifp en0 Ifa 17.202.40.191
+ 4. Net 17.202.20.1/32 Ifp en0 Ifa 17.202.40.191
 }
-Adding <IPv4RouteList[3]> = {
+Adding <IPv4RouteList[5]> = {
  0. Net 0.0.0.0/0 Gate 10.0.0.1 Ifp en0 Ifa 10.0.0.12
- 1. Net 10.0.0.0/24 Ifp en0 Ifa 10.0.0.12
- 2. Net 10.0.0.1/32 Ifp en0 Ifa 10.0.0.12
+ 1. Net 255.255.255.255/32 Ifp en0 Ifa 10.0.0.12
+ 2. Net 224.0.0.0/4 Ifp en0 Ifa 10.0.0.12
+ 3. Net 10.0.0.0/24 Ifp en0 Ifa 10.0.0.12
+ 4. Net 10.0.0.1/32 Ifp en0 Ifa 10.0.0.12
 }
-Adding <IPv4RouteList[3]> = {
+Adding <IPv4RouteList[5]> = {
  0. Net 0.0.0.0/0 Gate 10.0.0.1 Ifp en0 Ifa 10.0.0.11
- 1. Net 10.0.0.0/24 Ifp en0 Ifa 10.0.0.11
- 2. Net 10.0.0.1/32 Ifp en0 Ifa 10.0.0.11
+ 1. Net 255.255.255.255/32 Ifp en0 Ifa 10.0.0.11
+ 2. Net 224.0.0.0/4 Ifp en0 Ifa 10.0.0.11
+ 3. Net 10.0.0.0/24 Ifp en0 Ifa 10.0.0.11
+ 4. Net 10.0.0.1/32 Ifp en0 Ifa 10.0.0.11
 }
-Adding <IPv4RouteList[3]> = {
+Adding <IPv4RouteList[5]> = {
  0. Net 0.0.0.0/0 Gate 10.0.0.1 Ifp en1 Ifa 10.0.0.20
- 1. Net 10.0.0.0/24 Ifp en1 Ifa 10.0.0.20
- 2. Net 10.0.0.1/32 Ifp en1 Ifa 10.0.0.20
+ 1. Net 255.255.255.255/32 Ifp en1 Ifa 10.0.0.20
+ 2. Net 224.0.0.0/4 Ifp en1 Ifa 10.0.0.20
+ 3. Net 10.0.0.0/24 Ifp en1 Ifa 10.0.0.20
+ 4. Net 10.0.0.1/32 Ifp en1 Ifa 10.0.0.20
 }
-Adding <IPv4RouteList[3]> = {
+Adding <IPv4RouteList[5]> = {
  0. Net 0.0.0.0/0 Gate 17.202.20.1 Ifp en1 Ifa 17.202.42.24
- 1. Net 17.202.40.0/22 Ifp en1 Ifa 17.202.42.24
- 2. Net 17.202.20.1/32 Ifp en1 Ifa 17.202.42.24
+ 1. Net 255.255.255.255/32 Ifp en1 Ifa 17.202.42.24
+ 2. Net 224.0.0.0/4 Ifp en1 Ifa 17.202.42.24
+ 3. Net 17.202.40.0/22 Ifp en1 Ifa 17.202.42.24
+ 4. Net 17.202.20.1/32 Ifp en1 Ifa 17.202.42.24
 }
-Routes are <IPv4RouteList[10]> = {
+Routes are <IPv4RouteList[14]> = {
  0. Net 0.0.0.0/0 Gate 17.202.20.1 Ifp en0 Ifa 17.202.40.191
  1. Net 0.0.0.0/0 Gate 17.202.20.1 Ifp en1 Ifa 17.202.42.24 [SCOPED]
  2. Net 10.0.0.0/24 Ifp en1 Ifa 10.0.0.20
@@ -356,33 +494,47 @@ Routes are <IPv4RouteList[10]> = {
  7. Net 17.202.20.1/32 Ifp en1 Ifa 17.202.42.24 [SCOPED]
  8. Net 17.202.40.0/22 Ifp en0 Ifa 17.202.40.191
  9. Net 17.202.40.0/22 Ifp en1 Ifa 17.202.42.24 [SCOPED]
+10. Net 224.0.0.0/4 Ifp en0 Ifa 17.202.40.191
+11. Net 224.0.0.0/4 Ifp en1 Ifa 17.202.42.24 [SCOPED]
+12. Net 255.255.255.255/32 Ifp en0 Ifa 17.202.40.191
+13. Net 255.255.255.255/32 Ifp en1 Ifa 17.202.42.24 [SCOPED]
 }
-Adding <IPv4RouteList[3]> = {
+Adding <IPv4RouteList[5]> = {
  0. Net 0.0.0.0/0 Gate 17.202.20.1 Ifp en1 Ifa 17.202.42.24
- 1. Net 17.202.40.0/22 Ifp en1 Ifa 17.202.42.24
- 2. Net 17.202.20.1/32 Ifp en1 Ifa 17.202.42.24
+ 1. Net 255.255.255.255/32 Ifp en1 Ifa 17.202.42.24
+ 2. Net 224.0.0.0/4 Ifp en1 Ifa 17.202.42.24
+ 3. Net 17.202.40.0/22 Ifp en1 Ifa 17.202.42.24
+ 4. Net 17.202.20.1/32 Ifp en1 Ifa 17.202.42.24
 }
-Adding <IPv4RouteList[3]> = {
+Adding <IPv4RouteList[5]> = {
  0. Net 0.0.0.0/0 Gate 10.0.0.1 Ifp en1 Ifa 10.0.0.20
- 1. Net 10.0.0.0/24 Ifp en1 Ifa 10.0.0.20
- 2. Net 10.0.0.1/32 Ifp en1 Ifa 10.0.0.20
+ 1. Net 255.255.255.255/32 Ifp en1 Ifa 10.0.0.20
+ 2. Net 224.0.0.0/4 Ifp en1 Ifa 10.0.0.20
+ 3. Net 10.0.0.0/24 Ifp en1 Ifa 10.0.0.20
+ 4. Net 10.0.0.1/32 Ifp en1 Ifa 10.0.0.20
 }
-Adding <IPv4RouteList[3]> = {
+Adding <IPv4RouteList[5]> = {
  0. Net 0.0.0.0/0 Gate 10.0.0.1 Ifp en0 Ifa 10.0.0.11
- 1. Net 10.0.0.0/24 Ifp en0 Ifa 10.0.0.11
- 2. Net 10.0.0.1/32 Ifp en0 Ifa 10.0.0.11
+ 1. Net 255.255.255.255/32 Ifp en0 Ifa 10.0.0.11
+ 2. Net 224.0.0.0/4 Ifp en0 Ifa 10.0.0.11
+ 3. Net 10.0.0.0/24 Ifp en0 Ifa 10.0.0.11
+ 4. Net 10.0.0.1/32 Ifp en0 Ifa 10.0.0.11
 }
-Adding <IPv4RouteList[3]> = {
+Adding <IPv4RouteList[5]> = {
  0. Net 0.0.0.0/0 Gate 10.0.0.1 Ifp en0 Ifa 10.0.0.12
- 1. Net 10.0.0.0/24 Ifp en0 Ifa 10.0.0.12
- 2. Net 10.0.0.1/32 Ifp en0 Ifa 10.0.0.12
+ 1. Net 255.255.255.255/32 Ifp en0 Ifa 10.0.0.12
+ 2. Net 224.0.0.0/4 Ifp en0 Ifa 10.0.0.12
+ 3. Net 10.0.0.0/24 Ifp en0 Ifa 10.0.0.12
+ 4. Net 10.0.0.1/32 Ifp en0 Ifa 10.0.0.12
 }
-Adding <IPv4RouteList[3]> = {
+Adding <IPv4RouteList[5]> = {
  0. Net 0.0.0.0/0 Gate 17.202.20.1 Ifp en0 Ifa 17.202.40.191
- 1. Net 17.202.40.0/22 Ifp en0 Ifa 17.202.40.191
- 2. Net 17.202.20.1/32 Ifp en0 Ifa 17.202.40.191
+ 1. Net 255.255.255.255/32 Ifp en0 Ifa 17.202.40.191
+ 2. Net 224.0.0.0/4 Ifp en0 Ifa 17.202.40.191
+ 3. Net 17.202.40.0/22 Ifp en0 Ifa 17.202.40.191
+ 4. Net 17.202.20.1/32 Ifp en0 Ifa 17.202.40.191
 }
-Routes are <IPv4RouteList[10]> = {
+Routes are <IPv4RouteList[14]> = {
  0. Net 0.0.0.0/0 Gate 17.202.20.1 Ifp en0 Ifa 17.202.40.191
  1. Net 0.0.0.0/0 Gate 17.202.20.1 Ifp en1 Ifa 17.202.42.24 [SCOPED]
  2. Net 10.0.0.0/24 Ifp en1 Ifa 10.0.0.20
@@ -393,41 +545,57 @@ Routes are <IPv4RouteList[10]> = {
  7. Net 17.202.20.1/32 Ifp en1 Ifa 17.202.42.24 [SCOPED]
  8. Net 17.202.40.0/22 Ifp en0 Ifa 17.202.40.191
  9. Net 17.202.40.0/22 Ifp en1 Ifa 17.202.42.24 [SCOPED]
+10. Net 224.0.0.0/4 Ifp en0 Ifa 17.202.40.191
+11. Net 224.0.0.0/4 Ifp en1 Ifa 17.202.42.24 [SCOPED]
+12. Net 255.255.255.255/32 Ifp en0 Ifa 17.202.40.191
+13. Net 255.255.255.255/32 Ifp en1 Ifa 17.202.42.24 [SCOPED]
 }
 routes1 and routes2 are the same
 =================> RouteList Build 'test4': PASSED <=================
 
 =================> RouteList Build 'test5' <=================
-Adding <IPv4RouteList[2]> = {
+Adding <IPv4RouteList[4]> = {
  0. Net 0.0.0.0/0 Gate 17.219.156.1 Ifp ppp0 Ifa 17.219.156.22
- 1. Net 17.219.156.1/32 Ifp ppp0 Ifa 17.219.156.22
+ 1. Net 255.255.255.255/32 Ifp ppp0 Ifa 17.219.156.22
+ 2. Net 224.0.0.0/4 Ifp ppp0 Ifa 17.219.156.22
+ 3. Net 17.219.156.1/32 Ifp ppp0 Ifa 17.219.156.22
 }
-Adding <IPv4RouteList[3]> = {
+Adding <IPv4RouteList[5]> = {
  0. Net 0.0.0.0/0 Gate 17.202.20.1 Ifp en0 Ifa 17.202.40.191
- 1. Net 17.202.40.0/22 Ifp en0 Ifa 17.202.40.191
- 2. Net 17.202.20.1/32 Ifp en0 Ifa 17.202.40.191
+ 1. Net 255.255.255.255/32 Ifp en0 Ifa 17.202.40.191
+ 2. Net 224.0.0.0/4 Ifp en0 Ifa 17.202.40.191
+ 3. Net 17.202.40.0/22 Ifp en0 Ifa 17.202.40.191
+ 4. Net 17.202.20.1/32 Ifp en0 Ifa 17.202.40.191
 }
-Adding <IPv4RouteList[3]> = {
+Adding <IPv4RouteList[5]> = {
  0. Net 0.0.0.0/0 Gate 10.0.0.1 Ifp en0 Ifa 10.0.0.12
- 1. Net 10.0.0.0/24 Ifp en0 Ifa 10.0.0.12
- 2. Net 10.0.0.1/32 Ifp en0 Ifa 10.0.0.12
+ 1. Net 255.255.255.255/32 Ifp en0 Ifa 10.0.0.12
+ 2. Net 224.0.0.0/4 Ifp en0 Ifa 10.0.0.12
+ 3. Net 10.0.0.0/24 Ifp en0 Ifa 10.0.0.12
+ 4. Net 10.0.0.1/32 Ifp en0 Ifa 10.0.0.12
 }
-Adding <IPv4RouteList[3]> = {
+Adding <IPv4RouteList[5]> = {
  0. Net 0.0.0.0/0 Gate 10.0.0.1 Ifp en0 Ifa 10.0.0.11
- 1. Net 10.0.0.0/24 Ifp en0 Ifa 10.0.0.11
- 2. Net 10.0.0.1/32 Ifp en0 Ifa 10.0.0.11
+ 1. Net 255.255.255.255/32 Ifp en0 Ifa 10.0.0.11
+ 2. Net 224.0.0.0/4 Ifp en0 Ifa 10.0.0.11
+ 3. Net 10.0.0.0/24 Ifp en0 Ifa 10.0.0.11
+ 4. Net 10.0.0.1/32 Ifp en0 Ifa 10.0.0.11
 }
-Adding <IPv4RouteList[3]> = {
+Adding <IPv4RouteList[5]> = {
  0. Net 0.0.0.0/0 Gate 10.0.0.1 Ifp en1 Ifa 10.0.0.20
- 1. Net 10.0.0.0/24 Ifp en1 Ifa 10.0.0.20
- 2. Net 10.0.0.1/32 Ifp en1 Ifa 10.0.0.20
+ 1. Net 255.255.255.255/32 Ifp en1 Ifa 10.0.0.20
+ 2. Net 224.0.0.0/4 Ifp en1 Ifa 10.0.0.20
+ 3. Net 10.0.0.0/24 Ifp en1 Ifa 10.0.0.20
+ 4. Net 10.0.0.1/32 Ifp en1 Ifa 10.0.0.20
 }
-Adding <IPv4RouteList[3]> = {
+Adding <IPv4RouteList[5]> = {
  0. Net 0.0.0.0/0 Gate 17.202.20.1 Ifp en1 Ifa 17.202.42.24
- 1. Net 17.202.40.0/22 Ifp en1 Ifa 17.202.42.24
- 2. Net 17.202.20.1/32 Ifp en1 Ifa 17.202.42.24
+ 1. Net 255.255.255.255/32 Ifp en1 Ifa 17.202.42.24
+ 2. Net 224.0.0.0/4 Ifp en1 Ifa 17.202.42.24
+ 3. Net 17.202.40.0/22 Ifp en1 Ifa 17.202.42.24
+ 4. Net 17.202.20.1/32 Ifp en1 Ifa 17.202.42.24
 }
-Routes are <IPv4RouteList[12]> = {
+Routes are <IPv4RouteList[18]> = {
  0. Net 0.0.0.0/0 Gate 17.219.156.1 Ifp ppp0 Ifa 17.219.156.22
  1. Net 0.0.0.0/0 Gate 17.202.20.1 Ifp en0 Ifa 17.202.40.191 [SCOPED]
  2. Net 0.0.0.0/0 Gate 17.202.20.1 Ifp en1 Ifa 17.202.42.24 [SCOPED]
@@ -440,37 +608,55 @@ Routes are <IPv4RouteList[12]> = {
  9. Net 17.202.40.0/22 Ifp en0 Ifa 17.202.40.191
 10. Net 17.202.40.0/22 Ifp en1 Ifa 17.202.42.24 [SCOPED]
 11. Net 17.219.156.1/32 Ifp ppp0 Ifa 17.219.156.22
-}
-Adding <IPv4RouteList[3]> = {
+12. Net 224.0.0.0/4 Ifp ppp0 Ifa 17.219.156.22
+13. Net 224.0.0.0/4 Ifp en0 Ifa 17.202.40.191 [SCOPED]
+14. Net 224.0.0.0/4 Ifp en1 Ifa 17.202.42.24 [SCOPED]
+15. Net 255.255.255.255/32 Ifp ppp0 Ifa 17.219.156.22
+16. Net 255.255.255.255/32 Ifp en0 Ifa 17.202.40.191 [SCOPED]
+17. Net 255.255.255.255/32 Ifp en1 Ifa 17.202.42.24 [SCOPED]
+}
+Adding <IPv4RouteList[5]> = {
  0. Net 0.0.0.0/0 Gate 17.202.20.1 Ifp en1 Ifa 17.202.42.24
- 1. Net 17.202.40.0/22 Ifp en1 Ifa 17.202.42.24
- 2. Net 17.202.20.1/32 Ifp en1 Ifa 17.202.42.24
+ 1. Net 255.255.255.255/32 Ifp en1 Ifa 17.202.42.24
+ 2. Net 224.0.0.0/4 Ifp en1 Ifa 17.202.42.24
+ 3. Net 17.202.40.0/22 Ifp en1 Ifa 17.202.42.24
+ 4. Net 17.202.20.1/32 Ifp en1 Ifa 17.202.42.24
 }
-Adding <IPv4RouteList[3]> = {
+Adding <IPv4RouteList[5]> = {
  0. Net 0.0.0.0/0 Gate 10.0.0.1 Ifp en1 Ifa 10.0.0.20
- 1. Net 10.0.0.0/24 Ifp en1 Ifa 10.0.0.20
- 2. Net 10.0.0.1/32 Ifp en1 Ifa 10.0.0.20
+ 1. Net 255.255.255.255/32 Ifp en1 Ifa 10.0.0.20
+ 2. Net 224.0.0.0/4 Ifp en1 Ifa 10.0.0.20
+ 3. Net 10.0.0.0/24 Ifp en1 Ifa 10.0.0.20
+ 4. Net 10.0.0.1/32 Ifp en1 Ifa 10.0.0.20
 }
-Adding <IPv4RouteList[3]> = {
+Adding <IPv4RouteList[5]> = {
  0. Net 0.0.0.0/0 Gate 10.0.0.1 Ifp en0 Ifa 10.0.0.11
- 1. Net 10.0.0.0/24 Ifp en0 Ifa 10.0.0.11
- 2. Net 10.0.0.1/32 Ifp en0 Ifa 10.0.0.11
+ 1. Net 255.255.255.255/32 Ifp en0 Ifa 10.0.0.11
+ 2. Net 224.0.0.0/4 Ifp en0 Ifa 10.0.0.11
+ 3. Net 10.0.0.0/24 Ifp en0 Ifa 10.0.0.11
+ 4. Net 10.0.0.1/32 Ifp en0 Ifa 10.0.0.11
 }
-Adding <IPv4RouteList[3]> = {
+Adding <IPv4RouteList[5]> = {
  0. Net 0.0.0.0/0 Gate 10.0.0.1 Ifp en0 Ifa 10.0.0.12
- 1. Net 10.0.0.0/24 Ifp en0 Ifa 10.0.0.12
- 2. Net 10.0.0.1/32 Ifp en0 Ifa 10.0.0.12
+ 1. Net 255.255.255.255/32 Ifp en0 Ifa 10.0.0.12
+ 2. Net 224.0.0.0/4 Ifp en0 Ifa 10.0.0.12
+ 3. Net 10.0.0.0/24 Ifp en0 Ifa 10.0.0.12
+ 4. Net 10.0.0.1/32 Ifp en0 Ifa 10.0.0.12
 }
-Adding <IPv4RouteList[3]> = {
+Adding <IPv4RouteList[5]> = {
  0. Net 0.0.0.0/0 Gate 17.202.20.1 Ifp en0 Ifa 17.202.40.191
- 1. Net 17.202.40.0/22 Ifp en0 Ifa 17.202.40.191
- 2. Net 17.202.20.1/32 Ifp en0 Ifa 17.202.40.191
+ 1. Net 255.255.255.255/32 Ifp en0 Ifa 17.202.40.191
+ 2. Net 224.0.0.0/4 Ifp en0 Ifa 17.202.40.191
+ 3. Net 17.202.40.0/22 Ifp en0 Ifa 17.202.40.191
+ 4. Net 17.202.20.1/32 Ifp en0 Ifa 17.202.40.191
 }
-Adding <IPv4RouteList[2]> = {
+Adding <IPv4RouteList[4]> = {
  0. Net 0.0.0.0/0 Gate 17.219.156.1 Ifp ppp0 Ifa 17.219.156.22
- 1. Net 17.219.156.1/32 Ifp ppp0 Ifa 17.219.156.22
+ 1. Net 255.255.255.255/32 Ifp ppp0 Ifa 17.219.156.22
+ 2. Net 224.0.0.0/4 Ifp ppp0 Ifa 17.219.156.22
+ 3. Net 17.219.156.1/32 Ifp ppp0 Ifa 17.219.156.22
 }
-Routes are <IPv4RouteList[12]> = {
+Routes are <IPv4RouteList[18]> = {
  0. Net 0.0.0.0/0 Gate 17.219.156.1 Ifp ppp0 Ifa 17.219.156.22
  1. Net 0.0.0.0/0 Gate 17.202.20.1 Ifp en0 Ifa 17.202.40.191 [SCOPED]
  2. Net 0.0.0.0/0 Gate 17.202.20.1 Ifp en1 Ifa 17.202.42.24 [SCOPED]
@@ -483,195 +669,287 @@ Routes are <IPv4RouteList[12]> = {
  9. Net 17.202.40.0/22 Ifp en0 Ifa 17.202.40.191
 10. Net 17.202.40.0/22 Ifp en1 Ifa 17.202.42.24 [SCOPED]
 11. Net 17.219.156.1/32 Ifp ppp0 Ifa 17.219.156.22
+12. Net 224.0.0.0/4 Ifp ppp0 Ifa 17.219.156.22
+13. Net 224.0.0.0/4 Ifp en0 Ifa 17.202.40.191 [SCOPED]
+14. Net 224.0.0.0/4 Ifp en1 Ifa 17.202.42.24 [SCOPED]
+15. Net 255.255.255.255/32 Ifp ppp0 Ifa 17.219.156.22
+16. Net 255.255.255.255/32 Ifp en0 Ifa 17.202.40.191 [SCOPED]
+17. Net 255.255.255.255/32 Ifp en1 Ifa 17.202.42.24 [SCOPED]
 }
 routes1 and routes2 are the same
 =================> RouteList Build 'test5': PASSED <=================
 
 =================> RouteList Build 'test6' <=================
-Adding <IPv4RouteList[3]> = {
+Adding <IPv4RouteList[5]> = {
  0. Net 0.0.0.0/0 Gate 17.202.40.1 Ifp en0 Ifa 17.202.42.113
- 1. Net 17.202.40.0/22 Ifp en0 Ifa 17.202.42.113
- 2. Net 17.202.40.1/32 Ifp en0 Ifa 17.202.42.113
+ 1. Net 255.255.255.255/32 Ifp en0 Ifa 17.202.42.113
+ 2. Net 224.0.0.0/4 Ifp en0 Ifa 17.202.42.113
+ 3. Net 17.202.40.0/22 Ifp en0 Ifa 17.202.42.113
+ 4. Net 17.202.40.1/32 Ifp en0 Ifa 17.202.42.113
 }
-Adding <IPv4RouteList[3]> = {
+Adding <IPv4RouteList[5]> = {
  0. Net 0.0.0.0/0 Gate 17.202.40.1 Ifp en1 Ifa 17.202.42.111
- 1. Net 17.202.40.0/22 Ifp en1 Ifa 17.202.42.111
- 2. Net 17.202.40.1/32 Ifp en1 Ifa 17.202.42.111
+ 1. Net 255.255.255.255/32 Ifp en1 Ifa 17.202.42.111
+ 2. Net 224.0.0.0/4 Ifp en1 Ifa 17.202.42.111
+ 3. Net 17.202.40.0/22 Ifp en1 Ifa 17.202.42.111
+ 4. Net 17.202.40.1/32 Ifp en1 Ifa 17.202.42.111
 }
-Adding <IPv4RouteList[3]> = {
+Adding <IPv4RouteList[5]> = {
  0. Net 0.0.0.0/0 Gate 17.255.96.1 Ifp en2 Ifa 17.255.98.164
- 1. Net 17.255.96.0/20 Ifp en2 Ifa 17.255.98.164
- 2. Net 17.255.96.1/32 Ifp en2 Ifa 17.255.98.164
+ 1. Net 255.255.255.255/32 Ifp en2 Ifa 17.255.98.164
+ 2. Net 224.0.0.0/4 Ifp en2 Ifa 17.255.98.164
+ 3. Net 17.255.96.0/20 Ifp en2 Ifa 17.255.98.164
+ 4. Net 17.255.96.1/32 Ifp en2 Ifa 17.255.98.164
 }
-Adding <IPv4RouteList[1]> = {
- 0. Net 0.0.0.0/0 Ifp fw0 Ifa 169.254.11.33 [last]
+Adding <IPv4RouteList[3]> = {
+ 0. Net 255.255.255.255/32 Ifp fw0 Ifa 169.254.11.33 [last]
+ 1. Net 224.0.0.0/4 Ifp fw0 Ifa 169.254.11.33 [last]
+ 2. Net 169.254.0.0/16 Ifp fw0 Ifa 169.254.11.33 [last]
 }
-Routes are <IPv4RouteList[10]> = {
+Routes are <IPv4RouteList[18]> = {
  0. Net 0.0.0.0/0 Gate 17.255.96.1 Ifp en2 Ifa 17.255.98.164
  1. Net 0.0.0.0/0 Gate 17.202.40.1 Ifp en0 Ifa 17.202.42.113 [SCOPED]
  2. Net 0.0.0.0/0 Gate 17.202.40.1 Ifp en1 Ifa 17.202.42.111 [SCOPED]
- 3. Net 0.0.0.0/0 Ifp fw0 Ifa 169.254.11.33 [SCOPED]
- 4. Net 17.202.40.0/22 Ifp en0 Ifa 17.202.42.113
- 5. Net 17.202.40.0/22 Ifp en1 Ifa 17.202.42.111 [SCOPED]
- 6. Net 17.202.40.1/32 Ifp en0 Ifa 17.202.42.113
- 7. Net 17.202.40.1/32 Ifp en1 Ifa 17.202.42.111 [SCOPED]
- 8. Net 17.255.96.0/20 Ifp en2 Ifa 17.255.98.164
- 9. Net 17.255.96.1/32 Ifp en2 Ifa 17.255.98.164
-}
-Adding <IPv4RouteList[1]> = {
- 0. Net 0.0.0.0/0 Ifp fw0 Ifa 169.254.11.33 [last]
+ 3. Net 17.202.40.0/22 Ifp en0 Ifa 17.202.42.113
+ 4. Net 17.202.40.0/22 Ifp en1 Ifa 17.202.42.111 [SCOPED]
+ 5. Net 17.202.40.1/32 Ifp en0 Ifa 17.202.42.113
+ 6. Net 17.202.40.1/32 Ifp en1 Ifa 17.202.42.111 [SCOPED]
+ 7. Net 17.255.96.0/20 Ifp en2 Ifa 17.255.98.164
+ 8. Net 17.255.96.1/32 Ifp en2 Ifa 17.255.98.164
+ 9. Net 169.254.0.0/16 Ifp fw0 Ifa 169.254.11.33 [last]
+10. Net 224.0.0.0/4 Ifp en2 Ifa 17.255.98.164
+11. Net 224.0.0.0/4 Ifp en0 Ifa 17.202.42.113 [SCOPED]
+12. Net 224.0.0.0/4 Ifp en1 Ifa 17.202.42.111 [SCOPED]
+13. Net 224.0.0.0/4 Ifp fw0 Ifa 169.254.11.33 [last] [SCOPED]
+14. Net 255.255.255.255/32 Ifp en2 Ifa 17.255.98.164
+15. Net 255.255.255.255/32 Ifp en0 Ifa 17.202.42.113 [SCOPED]
+16. Net 255.255.255.255/32 Ifp en1 Ifa 17.202.42.111 [SCOPED]
+17. Net 255.255.255.255/32 Ifp fw0 Ifa 169.254.11.33 [last] [SCOPED]
 }
 Adding <IPv4RouteList[3]> = {
+ 0. Net 255.255.255.255/32 Ifp fw0 Ifa 169.254.11.33 [last]
+ 1. Net 224.0.0.0/4 Ifp fw0 Ifa 169.254.11.33 [last]
+ 2. Net 169.254.0.0/16 Ifp fw0 Ifa 169.254.11.33 [last]
+}
+Adding <IPv4RouteList[5]> = {
  0. Net 0.0.0.0/0 Gate 17.255.96.1 Ifp en2 Ifa 17.255.98.164
- 1. Net 17.255.96.0/20 Ifp en2 Ifa 17.255.98.164
- 2. Net 17.255.96.1/32 Ifp en2 Ifa 17.255.98.164
+ 1. Net 255.255.255.255/32 Ifp en2 Ifa 17.255.98.164
+ 2. Net 224.0.0.0/4 Ifp en2 Ifa 17.255.98.164
+ 3. Net 17.255.96.0/20 Ifp en2 Ifa 17.255.98.164
+ 4. Net 17.255.96.1/32 Ifp en2 Ifa 17.255.98.164
 }
-Adding <IPv4RouteList[3]> = {
+Adding <IPv4RouteList[5]> = {
  0. Net 0.0.0.0/0 Gate 17.202.40.1 Ifp en1 Ifa 17.202.42.111
- 1. Net 17.202.40.0/22 Ifp en1 Ifa 17.202.42.111
- 2. Net 17.202.40.1/32 Ifp en1 Ifa 17.202.42.111
+ 1. Net 255.255.255.255/32 Ifp en1 Ifa 17.202.42.111
+ 2. Net 224.0.0.0/4 Ifp en1 Ifa 17.202.42.111
+ 3. Net 17.202.40.0/22 Ifp en1 Ifa 17.202.42.111
+ 4. Net 17.202.40.1/32 Ifp en1 Ifa 17.202.42.111
 }
-Adding <IPv4RouteList[3]> = {
+Adding <IPv4RouteList[5]> = {
  0. Net 0.0.0.0/0 Gate 17.202.40.1 Ifp en0 Ifa 17.202.42.113
- 1. Net 17.202.40.0/22 Ifp en0 Ifa 17.202.42.113
- 2. Net 17.202.40.1/32 Ifp en0 Ifa 17.202.42.113
+ 1. Net 255.255.255.255/32 Ifp en0 Ifa 17.202.42.113
+ 2. Net 224.0.0.0/4 Ifp en0 Ifa 17.202.42.113
+ 3. Net 17.202.40.0/22 Ifp en0 Ifa 17.202.42.113
+ 4. Net 17.202.40.1/32 Ifp en0 Ifa 17.202.42.113
 }
-Routes are <IPv4RouteList[10]> = {
+Routes are <IPv4RouteList[18]> = {
  0. Net 0.0.0.0/0 Gate 17.255.96.1 Ifp en2 Ifa 17.255.98.164
  1. Net 0.0.0.0/0 Gate 17.202.40.1 Ifp en0 Ifa 17.202.42.113 [SCOPED]
  2. Net 0.0.0.0/0 Gate 17.202.40.1 Ifp en1 Ifa 17.202.42.111 [SCOPED]
- 3. Net 0.0.0.0/0 Ifp fw0 Ifa 169.254.11.33 [SCOPED]
- 4. Net 17.202.40.0/22 Ifp en0 Ifa 17.202.42.113
- 5. Net 17.202.40.0/22 Ifp en1 Ifa 17.202.42.111 [SCOPED]
- 6. Net 17.202.40.1/32 Ifp en0 Ifa 17.202.42.113
- 7. Net 17.202.40.1/32 Ifp en1 Ifa 17.202.42.111 [SCOPED]
- 8. Net 17.255.96.0/20 Ifp en2 Ifa 17.255.98.164
- 9. Net 17.255.96.1/32 Ifp en2 Ifa 17.255.98.164
+ 3. Net 17.202.40.0/22 Ifp en0 Ifa 17.202.42.113
+ 4. Net 17.202.40.0/22 Ifp en1 Ifa 17.202.42.111 [SCOPED]
+ 5. Net 17.202.40.1/32 Ifp en0 Ifa 17.202.42.113
+ 6. Net 17.202.40.1/32 Ifp en1 Ifa 17.202.42.111 [SCOPED]
+ 7. Net 17.255.96.0/20 Ifp en2 Ifa 17.255.98.164
+ 8. Net 17.255.96.1/32 Ifp en2 Ifa 17.255.98.164
+ 9. Net 169.254.0.0/16 Ifp fw0 Ifa 169.254.11.33 [last]
+10. Net 224.0.0.0/4 Ifp en2 Ifa 17.255.98.164
+11. Net 224.0.0.0/4 Ifp en0 Ifa 17.202.42.113 [SCOPED]
+12. Net 224.0.0.0/4 Ifp en1 Ifa 17.202.42.111 [SCOPED]
+13. Net 224.0.0.0/4 Ifp fw0 Ifa 169.254.11.33 [last] [SCOPED]
+14. Net 255.255.255.255/32 Ifp en2 Ifa 17.255.98.164
+15. Net 255.255.255.255/32 Ifp en0 Ifa 17.202.42.113 [SCOPED]
+16. Net 255.255.255.255/32 Ifp en1 Ifa 17.202.42.111 [SCOPED]
+17. Net 255.255.255.255/32 Ifp fw0 Ifa 169.254.11.33 [last] [SCOPED]
 }
 routes1 and routes2 are the same
 =================> RouteList Build 'test6': PASSED <=================
 
 =================> RouteList Build 'test7' <=================
-Adding <IPv4RouteList[3]> = {
+Adding <IPv4RouteList[5]> = {
  0. Net 0.0.0.0/0 Gate 17.202.40.1 Ifp en0 Ifa 17.202.42.113
- 1. Net 17.202.40.0/22 Ifp en0 Ifa 17.202.42.113
- 2. Net 17.202.40.1/32 Ifp en0 Ifa 17.202.42.113
+ 1. Net 255.255.255.255/32 Ifp en0 Ifa 17.202.42.113
+ 2. Net 224.0.0.0/4 Ifp en0 Ifa 17.202.42.113
+ 3. Net 17.202.40.0/22 Ifp en0 Ifa 17.202.42.113
+ 4. Net 17.202.40.1/32 Ifp en0 Ifa 17.202.42.113
 }
-Adding <IPv4RouteList[3]> = {
+Adding <IPv4RouteList[5]> = {
  0. Net 0.0.0.0/0 Gate 17.202.40.1 Ifp en1 Ifa 17.202.42.111
- 1. Net 17.202.40.0/22 Ifp en1 Ifa 17.202.42.111
- 2. Net 17.202.40.1/32 Ifp en1 Ifa 17.202.42.111
+ 1. Net 255.255.255.255/32 Ifp en1 Ifa 17.202.42.111
+ 2. Net 224.0.0.0/4 Ifp en1 Ifa 17.202.42.111
+ 3. Net 17.202.40.0/22 Ifp en1 Ifa 17.202.42.111
+ 4. Net 17.202.40.1/32 Ifp en1 Ifa 17.202.42.111
 }
-Adding <IPv4RouteList[3]> = {
+Adding <IPv4RouteList[5]> = {
  0. Net 0.0.0.0/0 Gate 17.255.96.1 Ifp en2 Ifa 17.255.98.164
- 1. Net 17.255.96.0/20 Ifp en2 Ifa 17.255.98.164
- 2. Net 17.255.96.1/32 Ifp en2 Ifa 17.255.98.164
+ 1. Net 255.255.255.255/32 Ifp en2 Ifa 17.255.98.164
+ 2. Net 224.0.0.0/4 Ifp en2 Ifa 17.255.98.164
+ 3. Net 17.255.96.0/20 Ifp en2 Ifa 17.255.98.164
+ 4. Net 17.255.96.1/32 Ifp en2 Ifa 17.255.98.164
 }
-Adding <IPv4RouteList[1]> = {
- 0. Net 0.0.0.0/0 Ifp fw0 Ifa 169.254.11.33 [last]
+Adding <IPv4RouteList[3]> = {
+ 0. Net 255.255.255.255/32 Ifp fw0 Ifa 169.254.11.33 [last]
+ 1. Net 224.0.0.0/4 Ifp fw0 Ifa 169.254.11.33 [last]
+ 2. Net 169.254.0.0/16 Ifp fw0 Ifa 169.254.11.33 [last]
 }
-Routes are <IPv4RouteList[10]> = {
+Routes are <IPv4RouteList[18]> = {
  0. Net 0.0.0.0/0 Gate 17.255.96.1 Ifp en2 Ifa 17.255.98.164
  1. Net 0.0.0.0/0 Gate 17.202.40.1 Ifp en1 Ifa 17.202.42.111 [SCOPED]
  2. Net 0.0.0.0/0 Gate 17.202.40.1 Ifp en0 Ifa 17.202.42.113 [SCOPED]
- 3. Net 0.0.0.0/0 Ifp fw0 Ifa 169.254.11.33 [SCOPED]
- 4. Net 17.202.40.0/22 Ifp en1 Ifa 17.202.42.111
- 5. Net 17.202.40.0/22 Ifp en0 Ifa 17.202.42.113 [SCOPED]
- 6. Net 17.202.40.1/32 Ifp en1 Ifa 17.202.42.111
- 7. Net 17.202.40.1/32 Ifp en0 Ifa 17.202.42.113 [SCOPED]
- 8. Net 17.255.96.0/20 Ifp en2 Ifa 17.255.98.164
- 9. Net 17.255.96.1/32 Ifp en2 Ifa 17.255.98.164
-}
-Adding <IPv4RouteList[1]> = {
- 0. Net 0.0.0.0/0 Ifp fw0 Ifa 169.254.11.33 [last]
+ 3. Net 17.202.40.0/22 Ifp en1 Ifa 17.202.42.111
+ 4. Net 17.202.40.0/22 Ifp en0 Ifa 17.202.42.113 [SCOPED]
+ 5. Net 17.202.40.1/32 Ifp en1 Ifa 17.202.42.111
+ 6. Net 17.202.40.1/32 Ifp en0 Ifa 17.202.42.113 [SCOPED]
+ 7. Net 17.255.96.0/20 Ifp en2 Ifa 17.255.98.164
+ 8. Net 17.255.96.1/32 Ifp en2 Ifa 17.255.98.164
+ 9. Net 169.254.0.0/16 Ifp fw0 Ifa 169.254.11.33 [last]
+10. Net 224.0.0.0/4 Ifp en2 Ifa 17.255.98.164
+11. Net 224.0.0.0/4 Ifp en1 Ifa 17.202.42.111 [SCOPED]
+12. Net 224.0.0.0/4 Ifp en0 Ifa 17.202.42.113 [SCOPED]
+13. Net 224.0.0.0/4 Ifp fw0 Ifa 169.254.11.33 [last] [SCOPED]
+14. Net 255.255.255.255/32 Ifp en2 Ifa 17.255.98.164
+15. Net 255.255.255.255/32 Ifp en1 Ifa 17.202.42.111 [SCOPED]
+16. Net 255.255.255.255/32 Ifp en0 Ifa 17.202.42.113 [SCOPED]
+17. Net 255.255.255.255/32 Ifp fw0 Ifa 169.254.11.33 [last] [SCOPED]
 }
 Adding <IPv4RouteList[3]> = {
+ 0. Net 255.255.255.255/32 Ifp fw0 Ifa 169.254.11.33 [last]
+ 1. Net 224.0.0.0/4 Ifp fw0 Ifa 169.254.11.33 [last]
+ 2. Net 169.254.0.0/16 Ifp fw0 Ifa 169.254.11.33 [last]
+}
+Adding <IPv4RouteList[5]> = {
  0. Net 0.0.0.0/0 Gate 17.255.96.1 Ifp en2 Ifa 17.255.98.164
- 1. Net 17.255.96.0/20 Ifp en2 Ifa 17.255.98.164
- 2. Net 17.255.96.1/32 Ifp en2 Ifa 17.255.98.164
+ 1. Net 255.255.255.255/32 Ifp en2 Ifa 17.255.98.164
+ 2. Net 224.0.0.0/4 Ifp en2 Ifa 17.255.98.164
+ 3. Net 17.255.96.0/20 Ifp en2 Ifa 17.255.98.164
+ 4. Net 17.255.96.1/32 Ifp en2 Ifa 17.255.98.164
 }
-Adding <IPv4RouteList[3]> = {
+Adding <IPv4RouteList[5]> = {
  0. Net 0.0.0.0/0 Gate 17.202.40.1 Ifp en1 Ifa 17.202.42.111
- 1. Net 17.202.40.0/22 Ifp en1 Ifa 17.202.42.111
- 2. Net 17.202.40.1/32 Ifp en1 Ifa 17.202.42.111
+ 1. Net 255.255.255.255/32 Ifp en1 Ifa 17.202.42.111
+ 2. Net 224.0.0.0/4 Ifp en1 Ifa 17.202.42.111
+ 3. Net 17.202.40.0/22 Ifp en1 Ifa 17.202.42.111
+ 4. Net 17.202.40.1/32 Ifp en1 Ifa 17.202.42.111
 }
-Adding <IPv4RouteList[3]> = {
+Adding <IPv4RouteList[5]> = {
  0. Net 0.0.0.0/0 Gate 17.202.40.1 Ifp en0 Ifa 17.202.42.113
- 1. Net 17.202.40.0/22 Ifp en0 Ifa 17.202.42.113
- 2. Net 17.202.40.1/32 Ifp en0 Ifa 17.202.42.113
+ 1. Net 255.255.255.255/32 Ifp en0 Ifa 17.202.42.113
+ 2. Net 224.0.0.0/4 Ifp en0 Ifa 17.202.42.113
+ 3. Net 17.202.40.0/22 Ifp en0 Ifa 17.202.42.113
+ 4. Net 17.202.40.1/32 Ifp en0 Ifa 17.202.42.113
 }
-Routes are <IPv4RouteList[10]> = {
+Routes are <IPv4RouteList[18]> = {
  0. Net 0.0.0.0/0 Gate 17.255.96.1 Ifp en2 Ifa 17.255.98.164
  1. Net 0.0.0.0/0 Gate 17.202.40.1 Ifp en1 Ifa 17.202.42.111 [SCOPED]
  2. Net 0.0.0.0/0 Gate 17.202.40.1 Ifp en0 Ifa 17.202.42.113 [SCOPED]
- 3. Net 0.0.0.0/0 Ifp fw0 Ifa 169.254.11.33 [SCOPED]
- 4. Net 17.202.40.0/22 Ifp en1 Ifa 17.202.42.111
- 5. Net 17.202.40.0/22 Ifp en0 Ifa 17.202.42.113 [SCOPED]
- 6. Net 17.202.40.1/32 Ifp en1 Ifa 17.202.42.111
- 7. Net 17.202.40.1/32 Ifp en0 Ifa 17.202.42.113 [SCOPED]
- 8. Net 17.255.96.0/20 Ifp en2 Ifa 17.255.98.164
- 9. Net 17.255.96.1/32 Ifp en2 Ifa 17.255.98.164
+ 3. Net 17.202.40.0/22 Ifp en1 Ifa 17.202.42.111
+ 4. Net 17.202.40.0/22 Ifp en0 Ifa 17.202.42.113 [SCOPED]
+ 5. Net 17.202.40.1/32 Ifp en1 Ifa 17.202.42.111
+ 6. Net 17.202.40.1/32 Ifp en0 Ifa 17.202.42.113 [SCOPED]
+ 7. Net 17.255.96.0/20 Ifp en2 Ifa 17.255.98.164
+ 8. Net 17.255.96.1/32 Ifp en2 Ifa 17.255.98.164
+ 9. Net 169.254.0.0/16 Ifp fw0 Ifa 169.254.11.33 [last]
+10. Net 224.0.0.0/4 Ifp en2 Ifa 17.255.98.164
+11. Net 224.0.0.0/4 Ifp en1 Ifa 17.202.42.111 [SCOPED]
+12. Net 224.0.0.0/4 Ifp en0 Ifa 17.202.42.113 [SCOPED]
+13. Net 224.0.0.0/4 Ifp fw0 Ifa 169.254.11.33 [last] [SCOPED]
+14. Net 255.255.255.255/32 Ifp en2 Ifa 17.255.98.164
+15. Net 255.255.255.255/32 Ifp en1 Ifa 17.202.42.111 [SCOPED]
+16. Net 255.255.255.255/32 Ifp en0 Ifa 17.202.42.113 [SCOPED]
+17. Net 255.255.255.255/32 Ifp fw0 Ifa 169.254.11.33 [last] [SCOPED]
 }
 routes1 and routes2 are the same
 =================> RouteList Build 'test7': PASSED <=================
 
 =================> RouteList Build 'test8' <=================
-Adding <IPv4RouteList[3]> = {
+Adding <IPv4RouteList[5]> = {
  0. Net 0.0.0.0/0 Gate 10.0.0.1 Ifp en0 Ifa 10.0.0.10
- 1. Net 10.0.0.0/24 Ifp en0 Ifa 10.0.0.10
- 2. Net 10.0.0.1/32 Ifp en0 Ifa 10.0.0.10
+ 1. Net 255.255.255.255/32 Ifp en0 Ifa 10.0.0.10
+ 2. Net 224.0.0.0/4 Ifp en0 Ifa 10.0.0.10
+ 3. Net 10.0.0.0/24 Ifp en0 Ifa 10.0.0.10
+ 4. Net 10.0.0.1/32 Ifp en0 Ifa 10.0.0.10
 }
-Adding <IPv4RouteList[3]> = {
+Adding <IPv4RouteList[5]> = {
  0. Net 0.0.0.0/0 Gate 10.0.0.1 Ifp en1 Ifa 10.0.0.20
- 1. Net 10.0.0.0/24 Ifp en1 Ifa 10.0.0.20
- 2. Net 10.0.0.1/32 Ifp en1 Ifa 10.0.0.20
+ 1. Net 255.255.255.255/32 Ifp en1 Ifa 10.0.0.20
+ 2. Net 224.0.0.0/4 Ifp en1 Ifa 10.0.0.20
+ 3. Net 10.0.0.0/24 Ifp en1 Ifa 10.0.0.20
+ 4. Net 10.0.0.1/32 Ifp en1 Ifa 10.0.0.20
 }
-Routes are <IPv4RouteList[6]> = {
+Routes are <IPv4RouteList[10]> = {
  0. Net 0.0.0.0/0 Gate 10.0.0.1 Ifp en0 Ifa 10.0.0.10
  1. Net 0.0.0.0/0 Gate 10.0.0.1 Ifp en1 Ifa 10.0.0.20 [SCOPED]
  2. Net 10.0.0.0/24 Ifp en0 Ifa 10.0.0.10
  3. Net 10.0.0.0/24 Ifp en1 Ifa 10.0.0.20 [SCOPED]
  4. Net 10.0.0.1/32 Ifp en0 Ifa 10.0.0.10
  5. Net 10.0.0.1/32 Ifp en1 Ifa 10.0.0.20 [SCOPED]
+ 6. Net 224.0.0.0/4 Ifp en0 Ifa 10.0.0.10
+ 7. Net 224.0.0.0/4 Ifp en1 Ifa 10.0.0.20 [SCOPED]
+ 8. Net 255.255.255.255/32 Ifp en0 Ifa 10.0.0.10
+ 9. Net 255.255.255.255/32 Ifp en1 Ifa 10.0.0.20 [SCOPED]
 }
-Adding <IPv4RouteList[3]> = {
+Adding <IPv4RouteList[5]> = {
  0. Net 0.0.0.0/0 Gate 10.0.0.1 Ifp en1 Ifa 10.0.0.20
- 1. Net 10.0.0.0/24 Ifp en1 Ifa 10.0.0.20
- 2. Net 10.0.0.1/32 Ifp en1 Ifa 10.0.0.20
+ 1. Net 255.255.255.255/32 Ifp en1 Ifa 10.0.0.20
+ 2. Net 224.0.0.0/4 Ifp en1 Ifa 10.0.0.20
+ 3. Net 10.0.0.0/24 Ifp en1 Ifa 10.0.0.20
+ 4. Net 10.0.0.1/32 Ifp en1 Ifa 10.0.0.20
 }
-Adding <IPv4RouteList[3]> = {
+Adding <IPv4RouteList[5]> = {
  0. Net 0.0.0.0/0 Gate 10.0.0.1 Ifp en0 Ifa 10.0.0.10
- 1. Net 10.0.0.0/24 Ifp en0 Ifa 10.0.0.10
- 2. Net 10.0.0.1/32 Ifp en0 Ifa 10.0.0.10
+ 1. Net 255.255.255.255/32 Ifp en0 Ifa 10.0.0.10
+ 2. Net 224.0.0.0/4 Ifp en0 Ifa 10.0.0.10
+ 3. Net 10.0.0.0/24 Ifp en0 Ifa 10.0.0.10
+ 4. Net 10.0.0.1/32 Ifp en0 Ifa 10.0.0.10
 }
-Routes are <IPv4RouteList[6]> = {
+Routes are <IPv4RouteList[10]> = {
  0. Net 0.0.0.0/0 Gate 10.0.0.1 Ifp en0 Ifa 10.0.0.10
  1. Net 0.0.0.0/0 Gate 10.0.0.1 Ifp en1 Ifa 10.0.0.20 [SCOPED]
  2. Net 10.0.0.0/24 Ifp en0 Ifa 10.0.0.10
  3. Net 10.0.0.0/24 Ifp en1 Ifa 10.0.0.20 [SCOPED]
  4. Net 10.0.0.1/32 Ifp en0 Ifa 10.0.0.10
  5. Net 10.0.0.1/32 Ifp en1 Ifa 10.0.0.20 [SCOPED]
+ 6. Net 224.0.0.0/4 Ifp en0 Ifa 10.0.0.10
+ 7. Net 224.0.0.0/4 Ifp en1 Ifa 10.0.0.20 [SCOPED]
+ 8. Net 255.255.255.255/32 Ifp en0 Ifa 10.0.0.10
+ 9. Net 255.255.255.255/32 Ifp en1 Ifa 10.0.0.20 [SCOPED]
 }
 routes1 and routes2 are the same
 =================> RouteList Build 'test8': PASSED <=================
 
 =================> RouteList Build 'test9' <=================
-Adding <IPv4RouteList[3]> = {
+Adding <IPv4RouteList[5]> = {
  0. Net 0.0.0.0/0 Gate 10.0.0.1 Ifp en0 Ifa 10.0.0.10
- 1. Net 10.0.0.0/24 Ifp en0 Ifa 10.0.0.10
- 2. Net 10.0.0.1/32 Ifp en0 Ifa 10.0.0.10
+ 1. Net 255.255.255.255/32 Ifp en0 Ifa 10.0.0.10
+ 2. Net 224.0.0.0/4 Ifp en0 Ifa 10.0.0.10
+ 3. Net 10.0.0.0/24 Ifp en0 Ifa 10.0.0.10
+ 4. Net 10.0.0.1/32 Ifp en0 Ifa 10.0.0.10
 }
-Adding <IPv4RouteList[3]> = {
+Adding <IPv4RouteList[5]> = {
  0. Net 0.0.0.0/0 Gate 10.0.0.1 Ifp en1 Ifa 10.0.0.20 [first]
- 1. Net 10.0.0.0/24 Ifp en1 Ifa 10.0.0.20 [first]
- 2. Net 10.0.0.1/32 Ifp en1 Ifa 10.0.0.20 [first]
+ 1. Net 255.255.255.255/32 Ifp en1 Ifa 10.0.0.20 [first]
+ 2. Net 224.0.0.0/4 Ifp en1 Ifa 10.0.0.20 [first]
+ 3. Net 10.0.0.0/24 Ifp en1 Ifa 10.0.0.20 [first]
+ 4. Net 10.0.0.1/32 Ifp en1 Ifa 10.0.0.20 [first]
 }
-Adding <IPv4RouteList[3]> = {
+Adding <IPv4RouteList[5]> = {
  0. Net 0.0.0.0/0 Gate 192.168.2.1 Ifp fw0 Ifa 192.168.2.30
- 1. Net 192.168.2.0/24 Ifp fw0 Ifa 192.168.2.30
- 2. Net 192.168.2.1/32 Ifp fw0 Ifa 192.168.2.30
+ 1. Net 255.255.255.255/32 Ifp fw0 Ifa 192.168.2.30
+ 2. Net 224.0.0.0/4 Ifp fw0 Ifa 192.168.2.30
+ 3. Net 192.168.2.0/24 Ifp fw0 Ifa 192.168.2.30
+ 4. Net 192.168.2.1/32 Ifp fw0 Ifa 192.168.2.30
 }
-Routes are <IPv4RouteList[9]> = {
+Routes are <IPv4RouteList[15]> = {
  0. Net 0.0.0.0/0 Gate 10.0.0.1 Ifp en1 Ifa 10.0.0.20 [first]
  1. Net 0.0.0.0/0 Gate 10.0.0.1 Ifp en0 Ifa 10.0.0.10 [SCOPED]
  2. Net 0.0.0.0/0 Gate 192.168.2.1 Ifp fw0 Ifa 192.168.2.30 [SCOPED]
@@ -681,23 +959,35 @@ Routes are <IPv4RouteList[9]> = {
  6. Net 10.0.0.1/32 Ifp en0 Ifa 10.0.0.10 [SCOPED]
  7. Net 192.168.2.0/24 Ifp fw0 Ifa 192.168.2.30
  8. Net 192.168.2.1/32 Ifp fw0 Ifa 192.168.2.30
-}
-Adding <IPv4RouteList[3]> = {
+ 9. Net 224.0.0.0/4 Ifp en1 Ifa 10.0.0.20 [first]
+10. Net 224.0.0.0/4 Ifp en0 Ifa 10.0.0.10 [SCOPED]
+11. Net 224.0.0.0/4 Ifp fw0 Ifa 192.168.2.30 [SCOPED]
+12. Net 255.255.255.255/32 Ifp en1 Ifa 10.0.0.20 [first]
+13. Net 255.255.255.255/32 Ifp en0 Ifa 10.0.0.10 [SCOPED]
+14. Net 255.255.255.255/32 Ifp fw0 Ifa 192.168.2.30 [SCOPED]
+}
+Adding <IPv4RouteList[5]> = {
  0. Net 0.0.0.0/0 Gate 192.168.2.1 Ifp fw0 Ifa 192.168.2.30
- 1. Net 192.168.2.0/24 Ifp fw0 Ifa 192.168.2.30
- 2. Net 192.168.2.1/32 Ifp fw0 Ifa 192.168.2.30
+ 1. Net 255.255.255.255/32 Ifp fw0 Ifa 192.168.2.30
+ 2. Net 224.0.0.0/4 Ifp fw0 Ifa 192.168.2.30
+ 3. Net 192.168.2.0/24 Ifp fw0 Ifa 192.168.2.30
+ 4. Net 192.168.2.1/32 Ifp fw0 Ifa 192.168.2.30
 }
-Adding <IPv4RouteList[3]> = {
+Adding <IPv4RouteList[5]> = {
  0. Net 0.0.0.0/0 Gate 10.0.0.1 Ifp en1 Ifa 10.0.0.20 [first]
- 1. Net 10.0.0.0/24 Ifp en1 Ifa 10.0.0.20 [first]
- 2. Net 10.0.0.1/32 Ifp en1 Ifa 10.0.0.20 [first]
+ 1. Net 255.255.255.255/32 Ifp en1 Ifa 10.0.0.20 [first]
+ 2. Net 224.0.0.0/4 Ifp en1 Ifa 10.0.0.20 [first]
+ 3. Net 10.0.0.0/24 Ifp en1 Ifa 10.0.0.20 [first]
+ 4. Net 10.0.0.1/32 Ifp en1 Ifa 10.0.0.20 [first]
 }
-Adding <IPv4RouteList[3]> = {
+Adding <IPv4RouteList[5]> = {
  0. Net 0.0.0.0/0 Gate 10.0.0.1 Ifp en0 Ifa 10.0.0.10
- 1. Net 10.0.0.0/24 Ifp en0 Ifa 10.0.0.10
- 2. Net 10.0.0.1/32 Ifp en0 Ifa 10.0.0.10
+ 1. Net 255.255.255.255/32 Ifp en0 Ifa 10.0.0.10
+ 2. Net 224.0.0.0/4 Ifp en0 Ifa 10.0.0.10
+ 3. Net 10.0.0.0/24 Ifp en0 Ifa 10.0.0.10
+ 4. Net 10.0.0.1/32 Ifp en0 Ifa 10.0.0.10
 }
-Routes are <IPv4RouteList[9]> = {
+Routes are <IPv4RouteList[15]> = {
  0. Net 0.0.0.0/0 Gate 10.0.0.1 Ifp en1 Ifa 10.0.0.20 [first]
  1. Net 0.0.0.0/0 Gate 10.0.0.1 Ifp en0 Ifa 10.0.0.10 [SCOPED]
  2. Net 0.0.0.0/0 Gate 192.168.2.1 Ifp fw0 Ifa 192.168.2.30 [SCOPED]
@@ -707,27 +997,39 @@ Routes are <IPv4RouteList[9]> = {
  6. Net 10.0.0.1/32 Ifp en0 Ifa 10.0.0.10 [SCOPED]
  7. Net 192.168.2.0/24 Ifp fw0 Ifa 192.168.2.30
  8. Net 192.168.2.1/32 Ifp fw0 Ifa 192.168.2.30
+ 9. Net 224.0.0.0/4 Ifp en1 Ifa 10.0.0.20 [first]
+10. Net 224.0.0.0/4 Ifp en0 Ifa 10.0.0.10 [SCOPED]
+11. Net 224.0.0.0/4 Ifp fw0 Ifa 192.168.2.30 [SCOPED]
+12. Net 255.255.255.255/32 Ifp en1 Ifa 10.0.0.20 [first]
+13. Net 255.255.255.255/32 Ifp en0 Ifa 10.0.0.10 [SCOPED]
+14. Net 255.255.255.255/32 Ifp fw0 Ifa 192.168.2.30 [SCOPED]
 }
 routes1 and routes2 are the same
 =================> RouteList Build 'test9': PASSED <=================
 
 =================> RouteList Build 'test10' <=================
-Adding <IPv4RouteList[3]> = {
+Adding <IPv4RouteList[5]> = {
  0. Net 0.0.0.0/0 Gate 10.0.0.1 Ifp en0 Ifa 10.0.0.10 [last]
- 1. Net 10.0.0.0/24 Ifp en0 Ifa 10.0.0.10 [last]
- 2. Net 10.0.0.1/32 Ifp en0 Ifa 10.0.0.10 [last]
+ 1. Net 255.255.255.255/32 Ifp en0 Ifa 10.0.0.10 [last]
+ 2. Net 224.0.0.0/4 Ifp en0 Ifa 10.0.0.10 [last]
+ 3. Net 10.0.0.0/24 Ifp en0 Ifa 10.0.0.10 [last]
+ 4. Net 10.0.0.1/32 Ifp en0 Ifa 10.0.0.10 [last]
 }
-Adding <IPv4RouteList[3]> = {
+Adding <IPv4RouteList[5]> = {
  0. Net 0.0.0.0/0 Gate 10.0.0.1 Ifp en1 Ifa 10.0.0.20
- 1. Net 10.0.0.0/24 Ifp en1 Ifa 10.0.0.20
- 2. Net 10.0.0.1/32 Ifp en1 Ifa 10.0.0.20
+ 1. Net 255.255.255.255/32 Ifp en1 Ifa 10.0.0.20
+ 2. Net 224.0.0.0/4 Ifp en1 Ifa 10.0.0.20
+ 3. Net 10.0.0.0/24 Ifp en1 Ifa 10.0.0.20
+ 4. Net 10.0.0.1/32 Ifp en1 Ifa 10.0.0.20
 }
-Adding <IPv4RouteList[3]> = {
+Adding <IPv4RouteList[5]> = {
  0. Net 0.0.0.0/0 Gate 192.168.2.1 Ifp fw0 Ifa 192.168.2.30
- 1. Net 192.168.2.0/24 Ifp fw0 Ifa 192.168.2.30
- 2. Net 192.168.2.1/32 Ifp fw0 Ifa 192.168.2.30
+ 1. Net 255.255.255.255/32 Ifp fw0 Ifa 192.168.2.30
+ 2. Net 224.0.0.0/4 Ifp fw0 Ifa 192.168.2.30
+ 3. Net 192.168.2.0/24 Ifp fw0 Ifa 192.168.2.30
+ 4. Net 192.168.2.1/32 Ifp fw0 Ifa 192.168.2.30
 }
-Routes are <IPv4RouteList[9]> = {
+Routes are <IPv4RouteList[15]> = {
  0. Net 0.0.0.0/0 Gate 10.0.0.1 Ifp en1 Ifa 10.0.0.20
  1. Net 0.0.0.0/0 Gate 192.168.2.1 Ifp fw0 Ifa 192.168.2.30 [SCOPED]
  2. Net 0.0.0.0/0 Gate 10.0.0.1 Ifp en0 Ifa 10.0.0.10 [last] [SCOPED]
@@ -737,23 +1039,35 @@ Routes are <IPv4RouteList[9]> = {
  6. Net 10.0.0.1/32 Ifp en0 Ifa 10.0.0.10 [last] [SCOPED]
  7. Net 192.168.2.0/24 Ifp fw0 Ifa 192.168.2.30
  8. Net 192.168.2.1/32 Ifp fw0 Ifa 192.168.2.30
-}
-Adding <IPv4RouteList[3]> = {
+ 9. Net 224.0.0.0/4 Ifp en1 Ifa 10.0.0.20
+10. Net 224.0.0.0/4 Ifp fw0 Ifa 192.168.2.30 [SCOPED]
+11. Net 224.0.0.0/4 Ifp en0 Ifa 10.0.0.10 [last] [SCOPED]
+12. Net 255.255.255.255/32 Ifp en1 Ifa 10.0.0.20
+13. Net 255.255.255.255/32 Ifp fw0 Ifa 192.168.2.30 [SCOPED]
+14. Net 255.255.255.255/32 Ifp en0 Ifa 10.0.0.10 [last] [SCOPED]
+}
+Adding <IPv4RouteList[5]> = {
  0. Net 0.0.0.0/0 Gate 192.168.2.1 Ifp fw0 Ifa 192.168.2.30
- 1. Net 192.168.2.0/24 Ifp fw0 Ifa 192.168.2.30
- 2. Net 192.168.2.1/32 Ifp fw0 Ifa 192.168.2.30
+ 1. Net 255.255.255.255/32 Ifp fw0 Ifa 192.168.2.30
+ 2. Net 224.0.0.0/4 Ifp fw0 Ifa 192.168.2.30
+ 3. Net 192.168.2.0/24 Ifp fw0 Ifa 192.168.2.30
+ 4. Net 192.168.2.1/32 Ifp fw0 Ifa 192.168.2.30
 }
-Adding <IPv4RouteList[3]> = {
+Adding <IPv4RouteList[5]> = {
  0. Net 0.0.0.0/0 Gate 10.0.0.1 Ifp en1 Ifa 10.0.0.20
- 1. Net 10.0.0.0/24 Ifp en1 Ifa 10.0.0.20
- 2. Net 10.0.0.1/32 Ifp en1 Ifa 10.0.0.20
+ 1. Net 255.255.255.255/32 Ifp en1 Ifa 10.0.0.20
+ 2. Net 224.0.0.0/4 Ifp en1 Ifa 10.0.0.20
+ 3. Net 10.0.0.0/24 Ifp en1 Ifa 10.0.0.20
+ 4. Net 10.0.0.1/32 Ifp en1 Ifa 10.0.0.20
 }
-Adding <IPv4RouteList[3]> = {
+Adding <IPv4RouteList[5]> = {
  0. Net 0.0.0.0/0 Gate 10.0.0.1 Ifp en0 Ifa 10.0.0.10 [last]
- 1. Net 10.0.0.0/24 Ifp en0 Ifa 10.0.0.10 [last]
- 2. Net 10.0.0.1/32 Ifp en0 Ifa 10.0.0.10 [last]
+ 1. Net 255.255.255.255/32 Ifp en0 Ifa 10.0.0.10 [last]
+ 2. Net 224.0.0.0/4 Ifp en0 Ifa 10.0.0.10 [last]
+ 3. Net 10.0.0.0/24 Ifp en0 Ifa 10.0.0.10 [last]
+ 4. Net 10.0.0.1/32 Ifp en0 Ifa 10.0.0.10 [last]
 }
-Routes are <IPv4RouteList[9]> = {
+Routes are <IPv4RouteList[15]> = {
  0. Net 0.0.0.0/0 Gate 10.0.0.1 Ifp en1 Ifa 10.0.0.20
  1. Net 0.0.0.0/0 Gate 192.168.2.1 Ifp fw0 Ifa 192.168.2.30 [SCOPED]
  2. Net 0.0.0.0/0 Gate 10.0.0.1 Ifp en0 Ifa 10.0.0.10 [last] [SCOPED]
@@ -763,27 +1077,39 @@ Routes are <IPv4RouteList[9]> = {
  6. Net 10.0.0.1/32 Ifp en0 Ifa 10.0.0.10 [last] [SCOPED]
  7. Net 192.168.2.0/24 Ifp fw0 Ifa 192.168.2.30
  8. Net 192.168.2.1/32 Ifp fw0 Ifa 192.168.2.30
+ 9. Net 224.0.0.0/4 Ifp en1 Ifa 10.0.0.20
+10. Net 224.0.0.0/4 Ifp fw0 Ifa 192.168.2.30 [SCOPED]
+11. Net 224.0.0.0/4 Ifp en0 Ifa 10.0.0.10 [last] [SCOPED]
+12. Net 255.255.255.255/32 Ifp en1 Ifa 10.0.0.20
+13. Net 255.255.255.255/32 Ifp fw0 Ifa 192.168.2.30 [SCOPED]
+14. Net 255.255.255.255/32 Ifp en0 Ifa 10.0.0.10 [last] [SCOPED]
 }
 routes1 and routes2 are the same
 =================> RouteList Build 'test10': PASSED <=================
 
 =================> RouteList Build 'test11' <=================
-Adding <IPv4RouteList[3]> = {
+Adding <IPv4RouteList[5]> = {
  0. Net 0.0.0.0/0 Gate 10.0.0.1 Ifp en0 Ifa 10.0.0.10 [never] [SCOPED]
- 1. Net 10.0.0.0/24 Ifp en0 Ifa 10.0.0.10 [last]
- 2. Net 10.0.0.1/32 Ifp en0 Ifa 10.0.0.10 [last]
+ 1. Net 255.255.255.255/32 Ifp en0 Ifa 10.0.0.10 [last]
+ 2. Net 224.0.0.0/4 Ifp en0 Ifa 10.0.0.10 [last]
+ 3. Net 10.0.0.0/24 Ifp en0 Ifa 10.0.0.10 [last]
+ 4. Net 10.0.0.1/32 Ifp en0 Ifa 10.0.0.10 [last]
 }
-Adding <IPv4RouteList[3]> = {
+Adding <IPv4RouteList[5]> = {
  0. Net 0.0.0.0/0 Gate 10.0.0.1 Ifp en1 Ifa 10.0.0.20
- 1. Net 10.0.0.0/24 Ifp en1 Ifa 10.0.0.20
- 2. Net 10.0.0.1/32 Ifp en1 Ifa 10.0.0.20
+ 1. Net 255.255.255.255/32 Ifp en1 Ifa 10.0.0.20
+ 2. Net 224.0.0.0/4 Ifp en1 Ifa 10.0.0.20
+ 3. Net 10.0.0.0/24 Ifp en1 Ifa 10.0.0.20
+ 4. Net 10.0.0.1/32 Ifp en1 Ifa 10.0.0.20
 }
-Adding <IPv4RouteList[3]> = {
+Adding <IPv4RouteList[5]> = {
  0. Net 0.0.0.0/0 Gate 192.168.2.1 Ifp fw0 Ifa 192.168.2.30
- 1. Net 192.168.2.0/24 Ifp fw0 Ifa 192.168.2.30
- 2. Net 192.168.2.1/32 Ifp fw0 Ifa 192.168.2.30
+ 1. Net 255.255.255.255/32 Ifp fw0 Ifa 192.168.2.30
+ 2. Net 224.0.0.0/4 Ifp fw0 Ifa 192.168.2.30
+ 3. Net 192.168.2.0/24 Ifp fw0 Ifa 192.168.2.30
+ 4. Net 192.168.2.1/32 Ifp fw0 Ifa 192.168.2.30
 }
-Routes are <IPv4RouteList[9]> = {
+Routes are <IPv4RouteList[15]> = {
  0. Net 0.0.0.0/0 Gate 10.0.0.1 Ifp en1 Ifa 10.0.0.20
  1. Net 0.0.0.0/0 Gate 192.168.2.1 Ifp fw0 Ifa 192.168.2.30 [SCOPED]
  2. Net 0.0.0.0/0 Gate 10.0.0.1 Ifp en0 Ifa 10.0.0.10 [never] [SCOPED]
@@ -793,23 +1119,35 @@ Routes are <IPv4RouteList[9]> = {
  6. Net 10.0.0.1/32 Ifp en0 Ifa 10.0.0.10 [last] [SCOPED]
  7. Net 192.168.2.0/24 Ifp fw0 Ifa 192.168.2.30
  8. Net 192.168.2.1/32 Ifp fw0 Ifa 192.168.2.30
-}
-Adding <IPv4RouteList[3]> = {
+ 9. Net 224.0.0.0/4 Ifp en1 Ifa 10.0.0.20
+10. Net 224.0.0.0/4 Ifp fw0 Ifa 192.168.2.30 [SCOPED]
+11. Net 224.0.0.0/4 Ifp en0 Ifa 10.0.0.10 [last] [SCOPED]
+12. Net 255.255.255.255/32 Ifp en1 Ifa 10.0.0.20
+13. Net 255.255.255.255/32 Ifp fw0 Ifa 192.168.2.30 [SCOPED]
+14. Net 255.255.255.255/32 Ifp en0 Ifa 10.0.0.10 [last] [SCOPED]
+}
+Adding <IPv4RouteList[5]> = {
  0. Net 0.0.0.0/0 Gate 192.168.2.1 Ifp fw0 Ifa 192.168.2.30
- 1. Net 192.168.2.0/24 Ifp fw0 Ifa 192.168.2.30
- 2. Net 192.168.2.1/32 Ifp fw0 Ifa 192.168.2.30
+ 1. Net 255.255.255.255/32 Ifp fw0 Ifa 192.168.2.30
+ 2. Net 224.0.0.0/4 Ifp fw0 Ifa 192.168.2.30
+ 3. Net 192.168.2.0/24 Ifp fw0 Ifa 192.168.2.30
+ 4. Net 192.168.2.1/32 Ifp fw0 Ifa 192.168.2.30
 }
-Adding <IPv4RouteList[3]> = {
+Adding <IPv4RouteList[5]> = {
  0. Net 0.0.0.0/0 Gate 10.0.0.1 Ifp en1 Ifa 10.0.0.20
- 1. Net 10.0.0.0/24 Ifp en1 Ifa 10.0.0.20
- 2. Net 10.0.0.1/32 Ifp en1 Ifa 10.0.0.20
+ 1. Net 255.255.255.255/32 Ifp en1 Ifa 10.0.0.20
+ 2. Net 224.0.0.0/4 Ifp en1 Ifa 10.0.0.20
+ 3. Net 10.0.0.0/24 Ifp en1 Ifa 10.0.0.20
+ 4. Net 10.0.0.1/32 Ifp en1 Ifa 10.0.0.20
 }
-Adding <IPv4RouteList[3]> = {
+Adding <IPv4RouteList[5]> = {
  0. Net 0.0.0.0/0 Gate 10.0.0.1 Ifp en0 Ifa 10.0.0.10 [never] [SCOPED]
- 1. Net 10.0.0.0/24 Ifp en0 Ifa 10.0.0.10 [last]
- 2. Net 10.0.0.1/32 Ifp en0 Ifa 10.0.0.10 [last]
+ 1. Net 255.255.255.255/32 Ifp en0 Ifa 10.0.0.10 [last]
+ 2. Net 224.0.0.0/4 Ifp en0 Ifa 10.0.0.10 [last]
+ 3. Net 10.0.0.0/24 Ifp en0 Ifa 10.0.0.10 [last]
+ 4. Net 10.0.0.1/32 Ifp en0 Ifa 10.0.0.10 [last]
 }
-Routes are <IPv4RouteList[9]> = {
+Routes are <IPv4RouteList[15]> = {
  0. Net 0.0.0.0/0 Gate 10.0.0.1 Ifp en1 Ifa 10.0.0.20
  1. Net 0.0.0.0/0 Gate 192.168.2.1 Ifp fw0 Ifa 192.168.2.30 [SCOPED]
  2. Net 0.0.0.0/0 Gate 10.0.0.1 Ifp en0 Ifa 10.0.0.10 [never] [SCOPED]
@@ -819,187 +1157,245 @@ Routes are <IPv4RouteList[9]> = {
  6. Net 10.0.0.1/32 Ifp en0 Ifa 10.0.0.10 [last] [SCOPED]
  7. Net 192.168.2.0/24 Ifp fw0 Ifa 192.168.2.30
  8. Net 192.168.2.1/32 Ifp fw0 Ifa 192.168.2.30
+ 9. Net 224.0.0.0/4 Ifp en1 Ifa 10.0.0.20
+10. Net 224.0.0.0/4 Ifp fw0 Ifa 192.168.2.30 [SCOPED]
+11. Net 224.0.0.0/4 Ifp en0 Ifa 10.0.0.10 [last] [SCOPED]
+12. Net 255.255.255.255/32 Ifp en1 Ifa 10.0.0.20
+13. Net 255.255.255.255/32 Ifp fw0 Ifa 192.168.2.30 [SCOPED]
+14. Net 255.255.255.255/32 Ifp en0 Ifa 10.0.0.10 [last] [SCOPED]
 }
 routes1 and routes2 are the same
 =================> RouteList Build 'test11': PASSED <=================
 
 =================> RouteList Build 'test12' <=================
-Adding <IPv4RouteList[3]> = {
+Adding <IPv4RouteList[5]> = {
  0. Net 0.0.0.0/0 Gate 10.0.0.1 Ifp en0 Ifa 10.0.0.10
- 1. Net 10.0.0.0/24 Ifp en0 Ifa 10.0.0.10
- 2. Net 10.0.0.1/32 Ifp en0 Ifa 10.0.0.10
+ 1. Net 255.255.255.255/32 Ifp en0 Ifa 10.0.0.10
+ 2. Net 224.0.0.0/4 Ifp en0 Ifa 10.0.0.10
+ 3. Net 10.0.0.0/24 Ifp en0 Ifa 10.0.0.10
+ 4. Net 10.0.0.1/32 Ifp en0 Ifa 10.0.0.10
 }
-Adding <IPv4RouteList[3]> = {
+Adding <IPv4RouteList[5]> = {
  0. Net 0.0.0.0/0 Gate 10.0.0.1 Ifp en1 Ifa 10.0.0.20
- 1. Net 10.0.0.0/24 Ifp en1 Ifa 10.0.0.20
- 2. Net 10.0.0.1/32 Ifp en1 Ifa 10.0.0.20
+ 1. Net 255.255.255.255/32 Ifp en1 Ifa 10.0.0.20
+ 2. Net 224.0.0.0/4 Ifp en1 Ifa 10.0.0.20
+ 3. Net 10.0.0.0/24 Ifp en1 Ifa 10.0.0.20
+ 4. Net 10.0.0.1/32 Ifp en1 Ifa 10.0.0.20
 }
-Routes are <IPv4RouteList[6]> = {
+Routes are <IPv4RouteList[10]> = {
  0. Net 0.0.0.0/0 Gate 10.0.0.1 Ifp en0 Ifa 10.0.0.10
  1. Net 0.0.0.0/0 Gate 10.0.0.1 Ifp en1 Ifa 10.0.0.20 [SCOPED]
  2. Net 10.0.0.0/24 Ifp en0 Ifa 10.0.0.10
  3. Net 10.0.0.0/24 Ifp en1 Ifa 10.0.0.20 [SCOPED]
  4. Net 10.0.0.1/32 Ifp en0 Ifa 10.0.0.10
  5. Net 10.0.0.1/32 Ifp en1 Ifa 10.0.0.20 [SCOPED]
+ 6. Net 224.0.0.0/4 Ifp en0 Ifa 10.0.0.10
+ 7. Net 224.0.0.0/4 Ifp en1 Ifa 10.0.0.20 [SCOPED]
+ 8. Net 255.255.255.255/32 Ifp en0 Ifa 10.0.0.10
+ 9. Net 255.255.255.255/32 Ifp en1 Ifa 10.0.0.20 [SCOPED]
 }
-Adding <IPv4RouteList[3]> = {
+Adding <IPv4RouteList[5]> = {
  0. Net 0.0.0.0/0 Gate 10.0.0.1 Ifp en1 Ifa 10.0.0.20
- 1. Net 10.0.0.0/24 Ifp en1 Ifa 10.0.0.20
- 2. Net 10.0.0.1/32 Ifp en1 Ifa 10.0.0.20
+ 1. Net 255.255.255.255/32 Ifp en1 Ifa 10.0.0.20
+ 2. Net 224.0.0.0/4 Ifp en1 Ifa 10.0.0.20
+ 3. Net 10.0.0.0/24 Ifp en1 Ifa 10.0.0.20
+ 4. Net 10.0.0.1/32 Ifp en1 Ifa 10.0.0.20
 }
-Adding <IPv4RouteList[3]> = {
+Adding <IPv4RouteList[5]> = {
  0. Net 0.0.0.0/0 Gate 10.0.0.1 Ifp en0 Ifa 10.0.0.10
- 1. Net 10.0.0.0/24 Ifp en0 Ifa 10.0.0.10
- 2. Net 10.0.0.1/32 Ifp en0 Ifa 10.0.0.10
+ 1. Net 255.255.255.255/32 Ifp en0 Ifa 10.0.0.10
+ 2. Net 224.0.0.0/4 Ifp en0 Ifa 10.0.0.10
+ 3. Net 10.0.0.0/24 Ifp en0 Ifa 10.0.0.10
+ 4. Net 10.0.0.1/32 Ifp en0 Ifa 10.0.0.10
 }
-Routes are <IPv4RouteList[6]> = {
+Routes are <IPv4RouteList[10]> = {
  0. Net 0.0.0.0/0 Gate 10.0.0.1 Ifp en0 Ifa 10.0.0.10
  1. Net 0.0.0.0/0 Gate 10.0.0.1 Ifp en1 Ifa 10.0.0.20 [SCOPED]
  2. Net 10.0.0.0/24 Ifp en0 Ifa 10.0.0.10
  3. Net 10.0.0.0/24 Ifp en1 Ifa 10.0.0.20 [SCOPED]
  4. Net 10.0.0.1/32 Ifp en0 Ifa 10.0.0.10
  5. Net 10.0.0.1/32 Ifp en1 Ifa 10.0.0.20 [SCOPED]
+ 6. Net 224.0.0.0/4 Ifp en0 Ifa 10.0.0.10
+ 7. Net 224.0.0.0/4 Ifp en1 Ifa 10.0.0.20 [SCOPED]
+ 8. Net 255.255.255.255/32 Ifp en0 Ifa 10.0.0.10
+ 9. Net 255.255.255.255/32 Ifp en1 Ifa 10.0.0.20 [SCOPED]
 }
 routes1 and routes2 are the same
 =================> RouteList Build 'test12': PASSED <=================
 
 =================> RouteList Build 'test13' <=================
-Adding <IPv4RouteList[3]> = {
+Adding <IPv4RouteList[5]> = {
  0. Net 0.0.0.0/0 Gate 10.0.0.1 Ifp en0 Ifa 10.0.0.10
- 1. Net 10.0.0.0/24 Ifp en0 Ifa 10.0.0.10
- 2. Net 10.0.0.1/32 Ifp en0 Ifa 10.0.0.10
+ 1. Net 255.255.255.255/32 Ifp en0 Ifa 10.0.0.10
+ 2. Net 224.0.0.0/4 Ifp en0 Ifa 10.0.0.10
+ 3. Net 10.0.0.0/24 Ifp en0 Ifa 10.0.0.10
+ 4. Net 10.0.0.1/32 Ifp en0 Ifa 10.0.0.10
 }
-Adding <IPv4RouteList[3]> = {
+Adding <IPv4RouteList[5]> = {
  0. Net 0.0.0.0/0 Gate 10.0.0.1 Ifp en1 Ifa 10.0.0.20 [never] [SCOPED]
- 1. Net 10.0.0.0/24 Ifp en1 Ifa 10.0.0.20 [last]
- 2. Net 10.0.0.1/32 Ifp en1 Ifa 10.0.0.20 [last]
+ 1. Net 255.255.255.255/32 Ifp en1 Ifa 10.0.0.20 [last]
+ 2. Net 224.0.0.0/4 Ifp en1 Ifa 10.0.0.20 [last]
+ 3. Net 10.0.0.0/24 Ifp en1 Ifa 10.0.0.20 [last]
+ 4. Net 10.0.0.1/32 Ifp en1 Ifa 10.0.0.20 [last]
 }
-Routes are <IPv4RouteList[6]> = {
+Routes are <IPv4RouteList[10]> = {
  0. Net 0.0.0.0/0 Gate 10.0.0.1 Ifp en0 Ifa 10.0.0.10
  1. Net 0.0.0.0/0 Gate 10.0.0.1 Ifp en1 Ifa 10.0.0.20 [never] [SCOPED]
  2. Net 10.0.0.0/24 Ifp en0 Ifa 10.0.0.10
  3. Net 10.0.0.0/24 Ifp en1 Ifa 10.0.0.20 [last] [SCOPED]
  4. Net 10.0.0.1/32 Ifp en0 Ifa 10.0.0.10
  5. Net 10.0.0.1/32 Ifp en1 Ifa 10.0.0.20 [last] [SCOPED]
+ 6. Net 224.0.0.0/4 Ifp en0 Ifa 10.0.0.10
+ 7. Net 224.0.0.0/4 Ifp en1 Ifa 10.0.0.20 [last] [SCOPED]
+ 8. Net 255.255.255.255/32 Ifp en0 Ifa 10.0.0.10
+ 9. Net 255.255.255.255/32 Ifp en1 Ifa 10.0.0.20 [last] [SCOPED]
 }
-Adding <IPv4RouteList[3]> = {
+Adding <IPv4RouteList[5]> = {
  0. Net 0.0.0.0/0 Gate 10.0.0.1 Ifp en1 Ifa 10.0.0.20 [never] [SCOPED]
- 1. Net 10.0.0.0/24 Ifp en1 Ifa 10.0.0.20 [last]
- 2. Net 10.0.0.1/32 Ifp en1 Ifa 10.0.0.20 [last]
+ 1. Net 255.255.255.255/32 Ifp en1 Ifa 10.0.0.20 [last]
+ 2. Net 224.0.0.0/4 Ifp en1 Ifa 10.0.0.20 [last]
+ 3. Net 10.0.0.0/24 Ifp en1 Ifa 10.0.0.20 [last]
+ 4. Net 10.0.0.1/32 Ifp en1 Ifa 10.0.0.20 [last]
 }
-Adding <IPv4RouteList[3]> = {
+Adding <IPv4RouteList[5]> = {
  0. Net 0.0.0.0/0 Gate 10.0.0.1 Ifp en0 Ifa 10.0.0.10
- 1. Net 10.0.0.0/24 Ifp en0 Ifa 10.0.0.10
- 2. Net 10.0.0.1/32 Ifp en0 Ifa 10.0.0.10
+ 1. Net 255.255.255.255/32 Ifp en0 Ifa 10.0.0.10
+ 2. Net 224.0.0.0/4 Ifp en0 Ifa 10.0.0.10
+ 3. Net 10.0.0.0/24 Ifp en0 Ifa 10.0.0.10
+ 4. Net 10.0.0.1/32 Ifp en0 Ifa 10.0.0.10
 }
-Routes are <IPv4RouteList[6]> = {
+Routes are <IPv4RouteList[10]> = {
  0. Net 0.0.0.0/0 Gate 10.0.0.1 Ifp en0 Ifa 10.0.0.10
  1. Net 0.0.0.0/0 Gate 10.0.0.1 Ifp en1 Ifa 10.0.0.20 [never] [SCOPED]
  2. Net 10.0.0.0/24 Ifp en0 Ifa 10.0.0.10
  3. Net 10.0.0.0/24 Ifp en1 Ifa 10.0.0.20 [last] [SCOPED]
  4. Net 10.0.0.1/32 Ifp en0 Ifa 10.0.0.10
  5. Net 10.0.0.1/32 Ifp en1 Ifa 10.0.0.20 [last] [SCOPED]
+ 6. Net 224.0.0.0/4 Ifp en0 Ifa 10.0.0.10
+ 7. Net 224.0.0.0/4 Ifp en1 Ifa 10.0.0.20 [last] [SCOPED]
+ 8. Net 255.255.255.255/32 Ifp en0 Ifa 10.0.0.10
+ 9. Net 255.255.255.255/32 Ifp en1 Ifa 10.0.0.20 [last] [SCOPED]
 }
 routes1 and routes2 are the same
 =================> RouteList Build 'test13': PASSED <=================
 
 =================> RouteList Build 'test14' <=================
-Adding <IPv4RouteList[3]> = {
+Adding <IPv4RouteList[5]> = {
  0. Net 0.0.0.0/0 Gate 10.0.0.1 Ifp en1 Ifa 10.0.0.20 [never] [SCOPED]
- 1. Net 10.0.0.0/24 Ifp en1 Ifa 10.0.0.20 [last]
- 2. Net 10.0.0.1/32 Ifp en1 Ifa 10.0.0.20 [last]
+ 1. Net 255.255.255.255/32 Ifp en1 Ifa 10.0.0.20 [last]
+ 2. Net 224.0.0.0/4 Ifp en1 Ifa 10.0.0.20 [last]
+ 3. Net 10.0.0.0/24 Ifp en1 Ifa 10.0.0.20 [last]
+ 4. Net 10.0.0.1/32 Ifp en1 Ifa 10.0.0.20 [last]
 }
-Routes are <IPv4RouteList[3]> = {
+Routes are <IPv4RouteList[5]> = {
  0. Net 0.0.0.0/0 Gate 10.0.0.1 Ifp en1 Ifa 10.0.0.20 [never] [SCOPED]
  1. Net 10.0.0.0/24 Ifp en1 Ifa 10.0.0.20 [last]
  2. Net 10.0.0.1/32 Ifp en1 Ifa 10.0.0.20 [last]
+ 3. Net 224.0.0.0/4 Ifp en1 Ifa 10.0.0.20 [last]
+ 4. Net 255.255.255.255/32 Ifp en1 Ifa 10.0.0.20 [last]
 }
-Adding <IPv4RouteList[3]> = {
+Adding <IPv4RouteList[5]> = {
  0. Net 0.0.0.0/0 Gate 10.0.0.1 Ifp en1 Ifa 10.0.0.20 [never] [SCOPED]
- 1. Net 10.0.0.0/24 Ifp en1 Ifa 10.0.0.20 [last]
- 2. Net 10.0.0.1/32 Ifp en1 Ifa 10.0.0.20 [last]
+ 1. Net 255.255.255.255/32 Ifp en1 Ifa 10.0.0.20 [last]
+ 2. Net 224.0.0.0/4 Ifp en1 Ifa 10.0.0.20 [last]
+ 3. Net 10.0.0.0/24 Ifp en1 Ifa 10.0.0.20 [last]
+ 4. Net 10.0.0.1/32 Ifp en1 Ifa 10.0.0.20 [last]
 }
-Routes are <IPv4RouteList[3]> = {
+Routes are <IPv4RouteList[5]> = {
  0. Net 0.0.0.0/0 Gate 10.0.0.1 Ifp en1 Ifa 10.0.0.20 [never] [SCOPED]
  1. Net 10.0.0.0/24 Ifp en1 Ifa 10.0.0.20 [last]
  2. Net 10.0.0.1/32 Ifp en1 Ifa 10.0.0.20 [last]
+ 3. Net 224.0.0.0/4 Ifp en1 Ifa 10.0.0.20 [last]
+ 4. Net 255.255.255.255/32 Ifp en1 Ifa 10.0.0.20 [last]
 }
 routes1 and routes2 are the same
 =================> RouteList Build 'test14': PASSED <=================
 
 =================> RouteList Build 'test15' <=================
-Adding <IPv4RouteList[1]> = {
- 0. Net 0.0.0.0/0 Ifp en0 Ifa 169.254.22.44 [last]
+Adding <IPv4RouteList[3]> = {
+ 0. Net 255.255.255.255/32 Ifp en0 Ifa 169.254.22.44 [last]
+ 1. Net 224.0.0.0/4 Ifp en0 Ifa 169.254.22.44 [last]
+ 2. Net 169.254.0.0/16 Ifp en0 Ifa 169.254.22.44 [last]
 }
-Routes are <IPv4RouteList[1]> = {
- 0. Net 0.0.0.0/0 Ifp en0 Ifa 169.254.22.44
+Routes are <IPv4RouteList[3]> = {
+ 0. Net 169.254.0.0/16 Ifp en0 Ifa 169.254.22.44 [last]
+ 1. Net 224.0.0.0/4 Ifp en0 Ifa 169.254.22.44 [last]
+ 2. Net 255.255.255.255/32 Ifp en0 Ifa 169.254.22.44 [last]
 }
-Adding <IPv4RouteList[1]> = {
- 0. Net 0.0.0.0/0 Ifp en0 Ifa 169.254.22.44 [last]
+Adding <IPv4RouteList[3]> = {
+ 0. Net 255.255.255.255/32 Ifp en0 Ifa 169.254.22.44 [last]
+ 1. Net 224.0.0.0/4 Ifp en0 Ifa 169.254.22.44 [last]
+ 2. Net 169.254.0.0/16 Ifp en0 Ifa 169.254.22.44 [last]
 }
-Routes are <IPv4RouteList[1]> = {
- 0. Net 0.0.0.0/0 Ifp en0 Ifa 169.254.22.44
+Routes are <IPv4RouteList[3]> = {
+ 0. Net 169.254.0.0/16 Ifp en0 Ifa 169.254.22.44 [last]
+ 1. Net 224.0.0.0/4 Ifp en0 Ifa 169.254.22.44 [last]
+ 2. Net 255.255.255.255/32 Ifp en0 Ifa 169.254.22.44 [last]
 }
 routes1 and routes2 are the same
 =================> RouteList Build 'test15': PASSED <=================
 
 =================> RouteList Build 'test16' <=================
-Adding <IPv4RouteList[3]> = {
+Adding <IPv4RouteList[5]> = {
  0. Net 0.0.0.0/0 Gate 10.0.0.1 Ifp en0 Ifa 10.0.0.10
- 1. Net 10.0.0.0/24 Ifp en0 Ifa 10.0.0.10
- 2. Net 10.0.0.1/32 Ifp en0 Ifa 10.0.0.10
+ 1. Net 255.255.255.255/32 Ifp en0 Ifa 10.0.0.10
+ 2. Net 224.0.0.0/4 Ifp en0 Ifa 10.0.0.10
+ 3. Net 10.0.0.0/24 Ifp en0 Ifa 10.0.0.10
+ 4. Net 10.0.0.1/32 Ifp en0 Ifa 10.0.0.10
 }
-Adding <IPv4RouteList[48]> = {
+Adding <IPv4RouteList[50]> = {
  0. Net 0.0.0.0/0 Ifp utun0 Ifa 17.153.46.24
- 1. Net 10.1.3.0/24 Gate 17.153.46.24 Ifp utun0 Ifa 17.153.46.24
- 2. Net 10.1.4.0/24 Gate 17.153.46.24 Ifp utun0 Ifa 17.153.46.24
- 3. Net 10.1.5.0/24 Gate 17.153.46.24 Ifp utun0 Ifa 17.153.46.24
- 4. Net 10.1.6.0/24 Gate 17.153.46.24 Ifp utun0 Ifa 17.153.46.24
- 5. Net 10.1.7.0/24 Gate 17.153.46.24 Ifp utun0 Ifa 17.153.46.24
- 6. Net 10.16.0.0/12 Gate 17.153.46.24 Ifp utun0 Ifa 17.153.46.24
- 7. Net 10.45.0.0/16 Gate 17.153.46.24 Ifp utun0 Ifa 17.153.46.24
- 8. Net 10.53.0.0/16 Gate 17.153.46.24 Ifp utun0 Ifa 17.153.46.24
- 9. Net 10.70.0.0/15 Gate 17.153.46.24 Ifp utun0 Ifa 17.153.46.24
-10. Net 10.74.0.0/15 Gate 17.153.46.24 Ifp utun0 Ifa 17.153.46.24
-11. Net 10.90.0.0/15 Gate 17.153.46.24 Ifp utun0 Ifa 17.153.46.24
-12. Net 10.91.0.0/16 Gate 17.153.46.24 Ifp utun0 Ifa 17.153.46.24
-13. Net 10.100.0.0/16 Gate 17.153.46.24 Ifp utun0 Ifa 17.153.46.24
-14. Net 10.113.0.0/16 Gate 17.153.46.24 Ifp utun0 Ifa 17.153.46.24
-15. Net 10.128.0.0/9 Gate 17.153.46.24 Ifp utun0 Ifa 17.153.46.24
-16. Net 17.0.0.0/9 Gate 17.153.46.24 Ifp utun0 Ifa 17.153.46.24
-17. Net 17.34.0.0/16 Gate 17.153.46.24 Ifp utun0 Ifa 17.153.46.24
-18. Host 17.112.156.53 Gate 17.153.46.24 Ifp utun0 Ifa 17.153.46.24
-19. Net 17.128.0.0/10 Gate 17.153.46.24 Ifp utun0 Ifa 17.153.46.24
-20. Host 17.149.0.121 Gate 17.153.46.24 Ifp utun0 Ifa 17.153.46.24
-21. Host 17.149.7.200 Gate 17.153.46.24 Ifp utun0 Ifa 17.153.46.24
-22. Host 17.153.46.24 Gate 17.153.46.24 Ifp utun0 Ifa 17.153.46.24
-23. Net 17.192.0.0/12 Gate 17.153.46.24 Ifp utun0 Ifa 17.153.46.24
-24. Net 17.208.0.0/15 Gate 17.153.46.24 Ifp utun0 Ifa 17.153.46.24
-25. Net 17.211.0.0/16 Gate 17.153.46.24 Ifp utun0 Ifa 17.153.46.24
-26. Net 17.212.0.0/14 Gate 17.153.46.24 Ifp utun0 Ifa 17.153.46.24
-27. Net 17.216.0.0/13 Gate 17.153.46.24 Ifp utun0 Ifa 17.153.46.24
-28. Net 17.224.0.0/12 Gate 17.153.46.24 Ifp utun0 Ifa 17.153.46.24
-29. Net 17.240.0.0/16 Gate 17.153.46.24 Ifp utun0 Ifa 17.153.46.24
-30. Net 17.241.0.0/16 Gate 17.153.46.24 Ifp utun0 Ifa 17.153.46.24
-31. Net 17.248.0.0/14 Gate 17.153.46.24 Ifp utun0 Ifa 17.153.46.24
-32. Host 17.251.104.200 Gate 17.153.46.24 Ifp utun0 Ifa 17.153.46.24
-33. Net 17.252.0.0/16 Gate 17.153.46.24 Ifp utun0 Ifa 17.153.46.24
-34. Net 17.253.0.0/16 Gate 17.153.46.24 Ifp utun0 Ifa 17.153.46.24
-35. Net 17.254.0.0/16 Gate 17.153.46.24 Ifp utun0 Ifa 17.153.46.24
-36. Net 17.255.0.0/16 Gate 17.153.46.24 Ifp utun0 Ifa 17.153.46.24
-37. Net 151.193.141.0/27 Gate 17.153.46.24 Ifp utun0 Ifa 17.153.46.24
-38. Net 172.16.2.0/24 Gate 17.153.46.24 Ifp utun0 Ifa 17.153.46.24
-39. Net 192.35.50.0/24 Gate 17.153.46.24 Ifp utun0 Ifa 17.153.46.24
-40. Net 204.179.20.0/24 Gate 17.153.46.24 Ifp utun0 Ifa 17.153.46.24
-41. Net 206.112.116.0/24 Gate 17.153.46.24 Ifp utun0 Ifa 17.153.46.24
-42. Net 17.151.63.82/32 Ifp en0 !Ifp utun0
-43. Net 17.151.63.81/32 Ifp en0 !Ifp utun0
-44. Net 17.151.63.80/32 !Ifp utun0
-45. Net 17.1.0.0/16 !Ifp utun0
-46. Net 17.2.0.0/24 !Ifp utun0
-47. Net 10.0.0.0/24 !Ifp utun0
-}
-Routes are <IPv4RouteList[50]> = {
+ 1. Net 255.255.255.255/32 Ifp utun0 Ifa 17.153.46.24
+ 2. Net 224.0.0.0/4 Ifp utun0 Ifa 17.153.46.24
+ 3. Net 10.1.3.0/24 Gate 17.153.46.24 Ifp utun0 Ifa 17.153.46.24
+ 4. Net 10.1.4.0/24 Gate 17.153.46.24 Ifp utun0 Ifa 17.153.46.24
+ 5. Net 10.1.5.0/24 Gate 17.153.46.24 Ifp utun0 Ifa 17.153.46.24
+ 6. Net 10.1.6.0/24 Gate 17.153.46.24 Ifp utun0 Ifa 17.153.46.24
+ 7. Net 10.1.7.0/24 Gate 17.153.46.24 Ifp utun0 Ifa 17.153.46.24
+ 8. Net 10.16.0.0/12 Gate 17.153.46.24 Ifp utun0 Ifa 17.153.46.24
+ 9. Net 10.45.0.0/16 Gate 17.153.46.24 Ifp utun0 Ifa 17.153.46.24
+10. Net 10.53.0.0/16 Gate 17.153.46.24 Ifp utun0 Ifa 17.153.46.24
+11. Net 10.70.0.0/15 Gate 17.153.46.24 Ifp utun0 Ifa 17.153.46.24
+12. Net 10.74.0.0/15 Gate 17.153.46.24 Ifp utun0 Ifa 17.153.46.24
+13. Net 10.90.0.0/15 Gate 17.153.46.24 Ifp utun0 Ifa 17.153.46.24
+14. Net 10.91.0.0/16 Gate 17.153.46.24 Ifp utun0 Ifa 17.153.46.24
+15. Net 10.100.0.0/16 Gate 17.153.46.24 Ifp utun0 Ifa 17.153.46.24
+16. Net 10.113.0.0/16 Gate 17.153.46.24 Ifp utun0 Ifa 17.153.46.24
+17. Net 10.128.0.0/9 Gate 17.153.46.24 Ifp utun0 Ifa 17.153.46.24
+18. Net 17.0.0.0/9 Gate 17.153.46.24 Ifp utun0 Ifa 17.153.46.24
+19. Net 17.34.0.0/16 Gate 17.153.46.24 Ifp utun0 Ifa 17.153.46.24
+20. Host 17.112.156.53 Gate 17.153.46.24 Ifp utun0 Ifa 17.153.46.24
+21. Net 17.128.0.0/10 Gate 17.153.46.24 Ifp utun0 Ifa 17.153.46.24
+22. Host 17.149.0.121 Gate 17.153.46.24 Ifp utun0 Ifa 17.153.46.24
+23. Host 17.149.7.200 Gate 17.153.46.24 Ifp utun0 Ifa 17.153.46.24
+24. Host 17.153.46.24 Gate 17.153.46.24 Ifp utun0 Ifa 17.153.46.24
+25. Net 17.192.0.0/12 Gate 17.153.46.24 Ifp utun0 Ifa 17.153.46.24
+26. Net 17.208.0.0/15 Gate 17.153.46.24 Ifp utun0 Ifa 17.153.46.24
+27. Net 17.211.0.0/16 Gate 17.153.46.24 Ifp utun0 Ifa 17.153.46.24
+28. Net 17.212.0.0/14 Gate 17.153.46.24 Ifp utun0 Ifa 17.153.46.24
+29. Net 17.216.0.0/13 Gate 17.153.46.24 Ifp utun0 Ifa 17.153.46.24
+30. Net 17.224.0.0/12 Gate 17.153.46.24 Ifp utun0 Ifa 17.153.46.24
+31. Net 17.240.0.0/16 Gate 17.153.46.24 Ifp utun0 Ifa 17.153.46.24
+32. Net 17.241.0.0/16 Gate 17.153.46.24 Ifp utun0 Ifa 17.153.46.24
+33. Net 17.248.0.0/14 Gate 17.153.46.24 Ifp utun0 Ifa 17.153.46.24
+34. Host 17.251.104.200 Gate 17.153.46.24 Ifp utun0 Ifa 17.153.46.24
+35. Net 17.252.0.0/16 Gate 17.153.46.24 Ifp utun0 Ifa 17.153.46.24
+36. Net 17.253.0.0/16 Gate 17.153.46.24 Ifp utun0 Ifa 17.153.46.24
+37. Net 17.254.0.0/16 Gate 17.153.46.24 Ifp utun0 Ifa 17.153.46.24
+38. Net 17.255.0.0/16 Gate 17.153.46.24 Ifp utun0 Ifa 17.153.46.24
+39. Net 151.193.141.0/27 Gate 17.153.46.24 Ifp utun0 Ifa 17.153.46.24
+40. Net 172.16.2.0/24 Gate 17.153.46.24 Ifp utun0 Ifa 17.153.46.24
+41. Net 192.35.50.0/24 Gate 17.153.46.24 Ifp utun0 Ifa 17.153.46.24
+42. Net 204.179.20.0/24 Gate 17.153.46.24 Ifp utun0 Ifa 17.153.46.24
+43. Net 206.112.116.0/24 Gate 17.153.46.24 Ifp utun0 Ifa 17.153.46.24
+44. Net 17.151.63.82/32 Ifp en0 !Ifp utun0
+45. Net 17.151.63.81/32 Ifp en0 !Ifp utun0
+46. Net 17.151.63.80/32 !Ifp utun0
+47. Net 17.1.0.0/16 !Ifp utun0
+48. Net 17.2.0.0/24 !Ifp utun0
+49. Net 10.0.0.0/24 !Ifp utun0
+}
+Routes are <IPv4RouteList[54]> = {
  0. Net 0.0.0.0/0 Gate 10.0.0.1 Ifp en0 Ifa 10.0.0.10
  1. Net 0.0.0.0/0 Ifp utun0 Ifa 17.153.46.24 [SCOPED]
  2. Net 10.0.0.0/24 Ifp en0 Ifa 10.0.0.10
@@ -1050,63 +1446,71 @@ Routes are <IPv4RouteList[50]> = {
 47. Net 192.35.50.0/24 Gate 17.153.46.24 Ifp utun0 Ifa 17.153.46.24
 48. Net 204.179.20.0/24 Gate 17.153.46.24 Ifp utun0 Ifa 17.153.46.24
 49. Net 206.112.116.0/24 Gate 17.153.46.24 Ifp utun0 Ifa 17.153.46.24
+50. Net 224.0.0.0/4 Ifp en0 Ifa 10.0.0.10
+51. Net 224.0.0.0/4 Ifp utun0 Ifa 17.153.46.24 [SCOPED]
+52. Net 255.255.255.255/32 Ifp en0 Ifa 10.0.0.10
+53. Net 255.255.255.255/32 Ifp utun0 Ifa 17.153.46.24 [SCOPED]
 }
-Adding <IPv4RouteList[48]> = {
+Adding <IPv4RouteList[50]> = {
  0. Net 0.0.0.0/0 Ifp utun0 Ifa 17.153.46.24
- 1. Net 10.1.3.0/24 Gate 17.153.46.24 Ifp utun0 Ifa 17.153.46.24
- 2. Net 10.1.4.0/24 Gate 17.153.46.24 Ifp utun0 Ifa 17.153.46.24
- 3. Net 10.1.5.0/24 Gate 17.153.46.24 Ifp utun0 Ifa 17.153.46.24
- 4. Net 10.1.6.0/24 Gate 17.153.46.24 Ifp utun0 Ifa 17.153.46.24
- 5. Net 10.1.7.0/24 Gate 17.153.46.24 Ifp utun0 Ifa 17.153.46.24
- 6. Net 10.16.0.0/12 Gate 17.153.46.24 Ifp utun0 Ifa 17.153.46.24
- 7. Net 10.45.0.0/16 Gate 17.153.46.24 Ifp utun0 Ifa 17.153.46.24
- 8. Net 10.53.0.0/16 Gate 17.153.46.24 Ifp utun0 Ifa 17.153.46.24
- 9. Net 10.70.0.0/15 Gate 17.153.46.24 Ifp utun0 Ifa 17.153.46.24
-10. Net 10.74.0.0/15 Gate 17.153.46.24 Ifp utun0 Ifa 17.153.46.24
-11. Net 10.90.0.0/15 Gate 17.153.46.24 Ifp utun0 Ifa 17.153.46.24
-12. Net 10.91.0.0/16 Gate 17.153.46.24 Ifp utun0 Ifa 17.153.46.24
-13. Net 10.100.0.0/16 Gate 17.153.46.24 Ifp utun0 Ifa 17.153.46.24
-14. Net 10.113.0.0/16 Gate 17.153.46.24 Ifp utun0 Ifa 17.153.46.24
-15. Net 10.128.0.0/9 Gate 17.153.46.24 Ifp utun0 Ifa 17.153.46.24
-16. Net 17.0.0.0/9 Gate 17.153.46.24 Ifp utun0 Ifa 17.153.46.24
-17. Net 17.34.0.0/16 Gate 17.153.46.24 Ifp utun0 Ifa 17.153.46.24
-18. Host 17.112.156.53 Gate 17.153.46.24 Ifp utun0 Ifa 17.153.46.24
-19. Net 17.128.0.0/10 Gate 17.153.46.24 Ifp utun0 Ifa 17.153.46.24
-20. Host 17.149.0.121 Gate 17.153.46.24 Ifp utun0 Ifa 17.153.46.24
-21. Host 17.149.7.200 Gate 17.153.46.24 Ifp utun0 Ifa 17.153.46.24
-22. Host 17.153.46.24 Gate 17.153.46.24 Ifp utun0 Ifa 17.153.46.24
-23. Net 17.192.0.0/12 Gate 17.153.46.24 Ifp utun0 Ifa 17.153.46.24
-24. Net 17.208.0.0/15 Gate 17.153.46.24 Ifp utun0 Ifa 17.153.46.24
-25. Net 17.211.0.0/16 Gate 17.153.46.24 Ifp utun0 Ifa 17.153.46.24
-26. Net 17.212.0.0/14 Gate 17.153.46.24 Ifp utun0 Ifa 17.153.46.24
-27. Net 17.216.0.0/13 Gate 17.153.46.24 Ifp utun0 Ifa 17.153.46.24
-28. Net 17.224.0.0/12 Gate 17.153.46.24 Ifp utun0 Ifa 17.153.46.24
-29. Net 17.240.0.0/16 Gate 17.153.46.24 Ifp utun0 Ifa 17.153.46.24
-30. Net 17.241.0.0/16 Gate 17.153.46.24 Ifp utun0 Ifa 17.153.46.24
-31. Net 17.248.0.0/14 Gate 17.153.46.24 Ifp utun0 Ifa 17.153.46.24
-32. Host 17.251.104.200 Gate 17.153.46.24 Ifp utun0 Ifa 17.153.46.24
-33. Net 17.252.0.0/16 Gate 17.153.46.24 Ifp utun0 Ifa 17.153.46.24
-34. Net 17.253.0.0/16 Gate 17.153.46.24 Ifp utun0 Ifa 17.153.46.24
-35. Net 17.254.0.0/16 Gate 17.153.46.24 Ifp utun0 Ifa 17.153.46.24
-36. Net 17.255.0.0/16 Gate 17.153.46.24 Ifp utun0 Ifa 17.153.46.24
-37. Net 151.193.141.0/27 Gate 17.153.46.24 Ifp utun0 Ifa 17.153.46.24
-38. Net 172.16.2.0/24 Gate 17.153.46.24 Ifp utun0 Ifa 17.153.46.24
-39. Net 192.35.50.0/24 Gate 17.153.46.24 Ifp utun0 Ifa 17.153.46.24
-40. Net 204.179.20.0/24 Gate 17.153.46.24 Ifp utun0 Ifa 17.153.46.24
-41. Net 206.112.116.0/24 Gate 17.153.46.24 Ifp utun0 Ifa 17.153.46.24
-42. Net 17.151.63.82/32 Ifp en0 !Ifp utun0
-43. Net 17.151.63.81/32 Ifp en0 !Ifp utun0
-44. Net 17.151.63.80/32 !Ifp utun0
-45. Net 17.1.0.0/16 !Ifp utun0
-46. Net 17.2.0.0/24 !Ifp utun0
-47. Net 10.0.0.0/24 !Ifp utun0
-}
-Adding <IPv4RouteList[3]> = {
- 0. Net 0.0.0.0/0 Gate 10.0.0.1 Ifp en0 Ifa 10.0.0.10
- 1. Net 10.0.0.0/24 Ifp en0 Ifa 10.0.0.10
- 2. Net 10.0.0.1/32 Ifp en0 Ifa 10.0.0.10
+ 1. Net 255.255.255.255/32 Ifp utun0 Ifa 17.153.46.24
+ 2. Net 224.0.0.0/4 Ifp utun0 Ifa 17.153.46.24
+ 3. Net 10.1.3.0/24 Gate 17.153.46.24 Ifp utun0 Ifa 17.153.46.24
+ 4. Net 10.1.4.0/24 Gate 17.153.46.24 Ifp utun0 Ifa 17.153.46.24
+ 5. Net 10.1.5.0/24 Gate 17.153.46.24 Ifp utun0 Ifa 17.153.46.24
+ 6. Net 10.1.6.0/24 Gate 17.153.46.24 Ifp utun0 Ifa 17.153.46.24
+ 7. Net 10.1.7.0/24 Gate 17.153.46.24 Ifp utun0 Ifa 17.153.46.24
+ 8. Net 10.16.0.0/12 Gate 17.153.46.24 Ifp utun0 Ifa 17.153.46.24
+ 9. Net 10.45.0.0/16 Gate 17.153.46.24 Ifp utun0 Ifa 17.153.46.24
+10. Net 10.53.0.0/16 Gate 17.153.46.24 Ifp utun0 Ifa 17.153.46.24
+11. Net 10.70.0.0/15 Gate 17.153.46.24 Ifp utun0 Ifa 17.153.46.24
+12. Net 10.74.0.0/15 Gate 17.153.46.24 Ifp utun0 Ifa 17.153.46.24
+13. Net 10.90.0.0/15 Gate 17.153.46.24 Ifp utun0 Ifa 17.153.46.24
+14. Net 10.91.0.0/16 Gate 17.153.46.24 Ifp utun0 Ifa 17.153.46.24
+15. Net 10.100.0.0/16 Gate 17.153.46.24 Ifp utun0 Ifa 17.153.46.24
+16. Net 10.113.0.0/16 Gate 17.153.46.24 Ifp utun0 Ifa 17.153.46.24
+17. Net 10.128.0.0/9 Gate 17.153.46.24 Ifp utun0 Ifa 17.153.46.24
+18. Net 17.0.0.0/9 Gate 17.153.46.24 Ifp utun0 Ifa 17.153.46.24
+19. Net 17.34.0.0/16 Gate 17.153.46.24 Ifp utun0 Ifa 17.153.46.24
+20. Host 17.112.156.53 Gate 17.153.46.24 Ifp utun0 Ifa 17.153.46.24
+21. Net 17.128.0.0/10 Gate 17.153.46.24 Ifp utun0 Ifa 17.153.46.24
+22. Host 17.149.0.121 Gate 17.153.46.24 Ifp utun0 Ifa 17.153.46.24
+23. Host 17.149.7.200 Gate 17.153.46.24 Ifp utun0 Ifa 17.153.46.24
+24. Host 17.153.46.24 Gate 17.153.46.24 Ifp utun0 Ifa 17.153.46.24
+25. Net 17.192.0.0/12 Gate 17.153.46.24 Ifp utun0 Ifa 17.153.46.24
+26. Net 17.208.0.0/15 Gate 17.153.46.24 Ifp utun0 Ifa 17.153.46.24
+27. Net 17.211.0.0/16 Gate 17.153.46.24 Ifp utun0 Ifa 17.153.46.24
+28. Net 17.212.0.0/14 Gate 17.153.46.24 Ifp utun0 Ifa 17.153.46.24
+29. Net 17.216.0.0/13 Gate 17.153.46.24 Ifp utun0 Ifa 17.153.46.24
+30. Net 17.224.0.0/12 Gate 17.153.46.24 Ifp utun0 Ifa 17.153.46.24
+31. Net 17.240.0.0/16 Gate 17.153.46.24 Ifp utun0 Ifa 17.153.46.24
+32. Net 17.241.0.0/16 Gate 17.153.46.24 Ifp utun0 Ifa 17.153.46.24
+33. Net 17.248.0.0/14 Gate 17.153.46.24 Ifp utun0 Ifa 17.153.46.24
+34. Host 17.251.104.200 Gate 17.153.46.24 Ifp utun0 Ifa 17.153.46.24
+35. Net 17.252.0.0/16 Gate 17.153.46.24 Ifp utun0 Ifa 17.153.46.24
+36. Net 17.253.0.0/16 Gate 17.153.46.24 Ifp utun0 Ifa 17.153.46.24
+37. Net 17.254.0.0/16 Gate 17.153.46.24 Ifp utun0 Ifa 17.153.46.24
+38. Net 17.255.0.0/16 Gate 17.153.46.24 Ifp utun0 Ifa 17.153.46.24
+39. Net 151.193.141.0/27 Gate 17.153.46.24 Ifp utun0 Ifa 17.153.46.24
+40. Net 172.16.2.0/24 Gate 17.153.46.24 Ifp utun0 Ifa 17.153.46.24
+41. Net 192.35.50.0/24 Gate 17.153.46.24 Ifp utun0 Ifa 17.153.46.24
+42. Net 204.179.20.0/24 Gate 17.153.46.24 Ifp utun0 Ifa 17.153.46.24
+43. Net 206.112.116.0/24 Gate 17.153.46.24 Ifp utun0 Ifa 17.153.46.24
+44. Net 17.151.63.82/32 Ifp en0 !Ifp utun0
+45. Net 17.151.63.81/32 Ifp en0 !Ifp utun0
+46. Net 17.151.63.80/32 !Ifp utun0
+47. Net 17.1.0.0/16 !Ifp utun0
+48. Net 17.2.0.0/24 !Ifp utun0
+49. Net 10.0.0.0/24 !Ifp utun0
+}
+Adding <IPv4RouteList[5]> = {
+ 0. Net 0.0.0.0/0 Gate 10.0.0.1 Ifp en0 Ifa 10.0.0.10
+ 1. Net 255.255.255.255/32 Ifp en0 Ifa 10.0.0.10
+ 2. Net 224.0.0.0/4 Ifp en0 Ifa 10.0.0.10
+ 3. Net 10.0.0.0/24 Ifp en0 Ifa 10.0.0.10
+ 4. Net 10.0.0.1/32 Ifp en0 Ifa 10.0.0.10
 }
-Routes are <IPv4RouteList[50]> = {
+Routes are <IPv4RouteList[54]> = {
  0. Net 0.0.0.0/0 Gate 10.0.0.1 Ifp en0 Ifa 10.0.0.10
  1. Net 0.0.0.0/0 Ifp utun0 Ifa 17.153.46.24 [SCOPED]
  2. Net 10.0.0.0/24 Ifp en0 Ifa 10.0.0.10
@@ -1157,68 +1561,90 @@ Routes are <IPv4RouteList[50]> = {
 47. Net 192.35.50.0/24 Gate 17.153.46.24 Ifp utun0 Ifa 17.153.46.24
 48. Net 204.179.20.0/24 Gate 17.153.46.24 Ifp utun0 Ifa 17.153.46.24
 49. Net 206.112.116.0/24 Gate 17.153.46.24 Ifp utun0 Ifa 17.153.46.24
+50. Net 224.0.0.0/4 Ifp en0 Ifa 10.0.0.10
+51. Net 224.0.0.0/4 Ifp utun0 Ifa 17.153.46.24 [SCOPED]
+52. Net 255.255.255.255/32 Ifp en0 Ifa 10.0.0.10
+53. Net 255.255.255.255/32 Ifp utun0 Ifa 17.153.46.24 [SCOPED]
 }
 routes1 and routes2 are the same
 =================> RouteList Build 'test16': PASSED <=================
 
 =================> RouteList Build 'test17' <=================
-Adding <IPv4RouteList[3]> = {
+Adding <IPv4RouteList[5]> = {
  0. Net 0.0.0.0/0 Gate 10.0.0.1 Ifp en0 Ifa 10.0.0.10
- 1. Net 10.0.0.0/24 Ifp en0 Ifa 10.0.0.10
- 2. Net 10.0.0.1/32 Ifp en0 Ifa 10.0.0.10
+ 1. Net 255.255.255.255/32 Ifp en0 Ifa 10.0.0.10
+ 2. Net 224.0.0.0/4 Ifp en0 Ifa 10.0.0.10
+ 3. Net 10.0.0.0/24 Ifp en0 Ifa 10.0.0.10
+ 4. Net 10.0.0.1/32 Ifp en0 Ifa 10.0.0.10
 }
-Adding <IPv4RouteList[3]> = {
+Adding <IPv4RouteList[5]> = {
  0. Net 0.0.0.0/0 Gate 192.168.2.1 Ifp en1 Ifa 192.168.2.50 [never] [SCOPED]
- 1. Net 192.168.2.0/24 Ifp en1 Ifa 192.168.2.50 [last]
- 2. Net 192.168.2.1/32 Ifp en1 Ifa 192.168.2.50 [last]
+ 1. Net 255.255.255.255/32 Ifp en1 Ifa 192.168.2.50 [last]
+ 2. Net 224.0.0.0/4 Ifp en1 Ifa 192.168.2.50 [last]
+ 3. Net 192.168.2.0/24 Ifp en1 Ifa 192.168.2.50 [last]
+ 4. Net 192.168.2.1/32 Ifp en1 Ifa 192.168.2.50 [last]
 }
-Routes are <IPv4RouteList[6]> = {
+Routes are <IPv4RouteList[10]> = {
  0. Net 0.0.0.0/0 Gate 10.0.0.1 Ifp en0 Ifa 10.0.0.10
  1. Net 0.0.0.0/0 Gate 192.168.2.1 Ifp en1 Ifa 192.168.2.50 [never] [SCOPED]
  2. Net 10.0.0.0/24 Ifp en0 Ifa 10.0.0.10
  3. Net 10.0.0.1/32 Ifp en0 Ifa 10.0.0.10
  4. Net 192.168.2.0/24 Ifp en1 Ifa 192.168.2.50 [last]
  5. Net 192.168.2.1/32 Ifp en1 Ifa 192.168.2.50 [last]
+ 6. Net 224.0.0.0/4 Ifp en0 Ifa 10.0.0.10
+ 7. Net 224.0.0.0/4 Ifp en1 Ifa 192.168.2.50 [last] [SCOPED]
+ 8. Net 255.255.255.255/32 Ifp en0 Ifa 10.0.0.10
+ 9. Net 255.255.255.255/32 Ifp en1 Ifa 192.168.2.50 [last] [SCOPED]
 }
-Adding <IPv4RouteList[3]> = {
+Adding <IPv4RouteList[5]> = {
  0. Net 0.0.0.0/0 Gate 192.168.2.1 Ifp en1 Ifa 192.168.2.50 [never] [SCOPED]
- 1. Net 192.168.2.0/24 Ifp en1 Ifa 192.168.2.50 [last]
- 2. Net 192.168.2.1/32 Ifp en1 Ifa 192.168.2.50 [last]
+ 1. Net 255.255.255.255/32 Ifp en1 Ifa 192.168.2.50 [last]
+ 2. Net 224.0.0.0/4 Ifp en1 Ifa 192.168.2.50 [last]
+ 3. Net 192.168.2.0/24 Ifp en1 Ifa 192.168.2.50 [last]
+ 4. Net 192.168.2.1/32 Ifp en1 Ifa 192.168.2.50 [last]
 }
-Adding <IPv4RouteList[3]> = {
+Adding <IPv4RouteList[5]> = {
  0. Net 0.0.0.0/0 Gate 10.0.0.1 Ifp en0 Ifa 10.0.0.10
- 1. Net 10.0.0.0/24 Ifp en0 Ifa 10.0.0.10
- 2. Net 10.0.0.1/32 Ifp en0 Ifa 10.0.0.10
+ 1. Net 255.255.255.255/32 Ifp en0 Ifa 10.0.0.10
+ 2. Net 224.0.0.0/4 Ifp en0 Ifa 10.0.0.10
+ 3. Net 10.0.0.0/24 Ifp en0 Ifa 10.0.0.10
+ 4. Net 10.0.0.1/32 Ifp en0 Ifa 10.0.0.10
 }
-Routes are <IPv4RouteList[6]> = {
+Routes are <IPv4RouteList[10]> = {
  0. Net 0.0.0.0/0 Gate 10.0.0.1 Ifp en0 Ifa 10.0.0.10
  1. Net 0.0.0.0/0 Gate 192.168.2.1 Ifp en1 Ifa 192.168.2.50 [never] [SCOPED]
  2. Net 10.0.0.0/24 Ifp en0 Ifa 10.0.0.10
  3. Net 10.0.0.1/32 Ifp en0 Ifa 10.0.0.10
  4. Net 192.168.2.0/24 Ifp en1 Ifa 192.168.2.50 [last]
  5. Net 192.168.2.1/32 Ifp en1 Ifa 192.168.2.50 [last]
+ 6. Net 224.0.0.0/4 Ifp en0 Ifa 10.0.0.10
+ 7. Net 224.0.0.0/4 Ifp en1 Ifa 192.168.2.50 [last] [SCOPED]
+ 8. Net 255.255.255.255/32 Ifp en0 Ifa 10.0.0.10
+ 9. Net 255.255.255.255/32 Ifp en1 Ifa 192.168.2.50 [last] [SCOPED]
 }
 routes1 and routes2 are the same
 =================> RouteList Build 'test17': PASSED <=================
 
 =================> RouteList Build 'test18' <=================
-Adding <IPv4RouteList[14]> = {
+Adding <IPv4RouteList[16]> = {
  0. Net 0.0.0.0/0 Gate 192.168.130.1 Ifp en0 Ifa 192.168.130.16
- 1. Net 192.168.130.0/24 Ifp en0 Ifa 192.168.130.16
- 2. Net 192.168.130.1/32 Ifp en0 Ifa 192.168.130.16
- 3. Host 1.1.1.1 Gate 1.1.1.2 Ifp en0 Ifa 192.168.130.16
- 4. Host 1.1.1.2 Gate 1.1.1.3 Ifp en0 Ifa 192.168.130.16
- 5. Host 1.1.1.3 Gate 1.1.1.4 Ifp en0 Ifa 192.168.130.16
- 6. Host 1.1.1.4 Gate 1.1.1.5 Ifp en0 Ifa 192.168.130.16
- 7. Host 1.1.1.5 Gate 1.1.1.6 Ifp en0 Ifa 192.168.130.16
- 8. Host 1.1.1.6 Gate 1.1.1.7 Ifp en0 Ifa 192.168.130.16
- 9. Host 1.1.1.7 Gate 1.1.1.8 Ifp en0 Ifa 192.168.130.16
-10. Host 1.1.1.8 Gate 1.1.1.9 Ifp en0 Ifa 192.168.130.16
-11. Host 1.1.1.9 Gate 1.1.1.10 Ifp en0 Ifa 192.168.130.16
-12. Host 1.1.1.10 Gate 1.1.1.11 Ifp en0 Ifa 192.168.130.16
-13. Host 1.1.1.11 Gate 1.1.1.1 Ifp en0 Ifa 192.168.130.16
-}
-Routes are <IPv4RouteList[14]> = {
+ 1. Net 255.255.255.255/32 Ifp en0 Ifa 192.168.130.16
+ 2. Net 224.0.0.0/4 Ifp en0 Ifa 192.168.130.16
+ 3. Net 192.168.130.0/24 Ifp en0 Ifa 192.168.130.16
+ 4. Net 192.168.130.1/32 Ifp en0 Ifa 192.168.130.16
+ 5. Host 1.1.1.1 Gate 1.1.1.2 Ifp en0 Ifa 192.168.130.16
+ 6. Host 1.1.1.2 Gate 1.1.1.3 Ifp en0 Ifa 192.168.130.16
+ 7. Host 1.1.1.3 Gate 1.1.1.4 Ifp en0 Ifa 192.168.130.16
+ 8. Host 1.1.1.4 Gate 1.1.1.5 Ifp en0 Ifa 192.168.130.16
+ 9. Host 1.1.1.5 Gate 1.1.1.6 Ifp en0 Ifa 192.168.130.16
+10. Host 1.1.1.6 Gate 1.1.1.7 Ifp en0 Ifa 192.168.130.16
+11. Host 1.1.1.7 Gate 1.1.1.8 Ifp en0 Ifa 192.168.130.16
+12. Host 1.1.1.8 Gate 1.1.1.9 Ifp en0 Ifa 192.168.130.16
+13. Host 1.1.1.9 Gate 1.1.1.10 Ifp en0 Ifa 192.168.130.16
+14. Host 1.1.1.10 Gate 1.1.1.11 Ifp en0 Ifa 192.168.130.16
+15. Host 1.1.1.11 Gate 1.1.1.1 Ifp en0 Ifa 192.168.130.16
+}
+Routes are <IPv4RouteList[16]> = {
  0. Net 0.0.0.0/0 Gate 192.168.130.1 Ifp en0 Ifa 192.168.130.16
  1. Host 1.1.1.1 Gate 1.1.1.2 Ifp en0 Ifa 192.168.130.16
  2. Host 1.1.1.2 Gate 1.1.1.3 Ifp en0 Ifa 192.168.130.16
@@ -1233,24 +1659,28 @@ Routes are <IPv4RouteList[14]> = {
 11. Host 1.1.1.11 Gate 1.1.1.1 Ifp en0 Ifa 192.168.130.16
 12. Net 192.168.130.0/24 Ifp en0 Ifa 192.168.130.16
 13. Net 192.168.130.1/32 Ifp en0 Ifa 192.168.130.16
+14. Net 224.0.0.0/4 Ifp en0 Ifa 192.168.130.16
+15. Net 255.255.255.255/32 Ifp en0 Ifa 192.168.130.16
 }
-Adding <IPv4RouteList[14]> = {
+Adding <IPv4RouteList[16]> = {
  0. Net 0.0.0.0/0 Gate 192.168.130.1 Ifp en0 Ifa 192.168.130.16
- 1. Net 192.168.130.0/24 Ifp en0 Ifa 192.168.130.16
- 2. Net 192.168.130.1/32 Ifp en0 Ifa 192.168.130.16
- 3. Host 1.1.1.1 Gate 1.1.1.2 Ifp en0 Ifa 192.168.130.16
- 4. Host 1.1.1.2 Gate 1.1.1.3 Ifp en0 Ifa 192.168.130.16
- 5. Host 1.1.1.3 Gate 1.1.1.4 Ifp en0 Ifa 192.168.130.16
- 6. Host 1.1.1.4 Gate 1.1.1.5 Ifp en0 Ifa 192.168.130.16
- 7. Host 1.1.1.5 Gate 1.1.1.6 Ifp en0 Ifa 192.168.130.16
- 8. Host 1.1.1.6 Gate 1.1.1.7 Ifp en0 Ifa 192.168.130.16
- 9. Host 1.1.1.7 Gate 1.1.1.8 Ifp en0 Ifa 192.168.130.16
-10. Host 1.1.1.8 Gate 1.1.1.9 Ifp en0 Ifa 192.168.130.16
-11. Host 1.1.1.9 Gate 1.1.1.10 Ifp en0 Ifa 192.168.130.16
-12. Host 1.1.1.10 Gate 1.1.1.11 Ifp en0 Ifa 192.168.130.16
-13. Host 1.1.1.11 Gate 1.1.1.1 Ifp en0 Ifa 192.168.130.16
-}
-Routes are <IPv4RouteList[14]> = {
+ 1. Net 255.255.255.255/32 Ifp en0 Ifa 192.168.130.16
+ 2. Net 224.0.0.0/4 Ifp en0 Ifa 192.168.130.16
+ 3. Net 192.168.130.0/24 Ifp en0 Ifa 192.168.130.16
+ 4. Net 192.168.130.1/32 Ifp en0 Ifa 192.168.130.16
+ 5. Host 1.1.1.1 Gate 1.1.1.2 Ifp en0 Ifa 192.168.130.16
+ 6. Host 1.1.1.2 Gate 1.1.1.3 Ifp en0 Ifa 192.168.130.16
+ 7. Host 1.1.1.3 Gate 1.1.1.4 Ifp en0 Ifa 192.168.130.16
+ 8. Host 1.1.1.4 Gate 1.1.1.5 Ifp en0 Ifa 192.168.130.16
+ 9. Host 1.1.1.5 Gate 1.1.1.6 Ifp en0 Ifa 192.168.130.16
+10. Host 1.1.1.6 Gate 1.1.1.7 Ifp en0 Ifa 192.168.130.16
+11. Host 1.1.1.7 Gate 1.1.1.8 Ifp en0 Ifa 192.168.130.16
+12. Host 1.1.1.8 Gate 1.1.1.9 Ifp en0 Ifa 192.168.130.16
+13. Host 1.1.1.9 Gate 1.1.1.10 Ifp en0 Ifa 192.168.130.16
+14. Host 1.1.1.10 Gate 1.1.1.11 Ifp en0 Ifa 192.168.130.16
+15. Host 1.1.1.11 Gate 1.1.1.1 Ifp en0 Ifa 192.168.130.16
+}
+Routes are <IPv4RouteList[16]> = {
  0. Net 0.0.0.0/0 Gate 192.168.130.1 Ifp en0 Ifa 192.168.130.16
  1. Host 1.1.1.1 Gate 1.1.1.2 Ifp en0 Ifa 192.168.130.16
  2. Host 1.1.1.2 Gate 1.1.1.3 Ifp en0 Ifa 192.168.130.16
@@ -1265,12 +1695,14 @@ Routes are <IPv4RouteList[14]> = {
 11. Host 1.1.1.11 Gate 1.1.1.1 Ifp en0 Ifa 192.168.130.16
 12. Net 192.168.130.0/24 Ifp en0 Ifa 192.168.130.16
 13. Net 192.168.130.1/32 Ifp en0 Ifa 192.168.130.16
+14. Net 224.0.0.0/4 Ifp en0 Ifa 192.168.130.16
+15. Net 255.255.255.255/32 Ifp en0 Ifa 192.168.130.16
 }
 routes1 and routes2 are the same
 =================> RouteList Build 'test18': PASSED <=================
 
 =================> Apply 'test1', 'test2' Begin <=================
-Old routes ('test1') = <IPv4RouteList[9]> = {
+Old routes ('test1') = <IPv4RouteList[15]> = {
  0. Net 0.0.0.0/0 Gate 10.0.0.1 Ifp en0 Ifa 10.0.0.10
  1. Net 0.0.0.0/0 Gate 10.0.0.1 Ifp en1 Ifa 10.0.0.20 [SCOPED]
  2. Net 0.0.0.0/0 Gate 192.168.2.1 Ifp fw0 Ifa 192.168.2.30 [SCOPED]
@@ -1280,6 +1712,12 @@ Old routes ('test1') = <IPv4RouteList[9]> = {
  6. Net 10.0.0.1/32 Ifp en1 Ifa 10.0.0.20 [SCOPED]
  7. Net 192.168.2.0/24 Ifp fw0 Ifa 192.168.2.30
  8. Net 192.168.2.1/32 Ifp fw0 Ifa 192.168.2.30
+ 9. Net 224.0.0.0/4 Ifp en0 Ifa 10.0.0.10
+10. Net 224.0.0.0/4 Ifp en1 Ifa 10.0.0.20 [SCOPED]
+11. Net 224.0.0.0/4 Ifp fw0 Ifa 192.168.2.30 [SCOPED]
+12. Net 255.255.255.255/32 Ifp en0 Ifa 10.0.0.10
+13. Net 255.255.255.255/32 Ifp en1 Ifa 10.0.0.20 [SCOPED]
+14. Net 255.255.255.255/32 Ifp fw0 Ifa 192.168.2.30 [SCOPED]
 }
 Add new[5]: Net 10.0.0.1/32 Ifp en0 Ifa 10.0.0.10
 Add new[0]: Net 0.0.0.0/0 Gate 10.0.0.1 Ifp en0 Ifa 10.0.0.10
@@ -1290,7 +1728,13 @@ Add new[2]: Net 0.0.0.0/0 Gate 192.168.2.1 Ifp fw0 Ifa 192.168.2.30 [SCOPED]
 Add new[3]: Net 10.0.0.0/24 Ifp en0 Ifa 10.0.0.10
 Add new[4]: Net 10.0.0.0/24 Ifp en1 Ifa 10.0.0.20 [SCOPED]
 Add new[7]: Net 192.168.2.0/24 Ifp fw0 Ifa 192.168.2.30
-New Routes ('test2') = <IPv4RouteList[9]> = {
+Add new[9]: Net 224.0.0.0/4 Ifp en0 Ifa 10.0.0.10
+Add new[10]: Net 224.0.0.0/4 Ifp en1 Ifa 10.0.0.20 [SCOPED]
+Add new[11]: Net 224.0.0.0/4 Ifp fw0 Ifa 192.168.2.30 [SCOPED]
+Add new[12]: Net 255.255.255.255/32 Ifp en0 Ifa 10.0.0.10
+Add new[13]: Net 255.255.255.255/32 Ifp en1 Ifa 10.0.0.20 [SCOPED]
+Add new[14]: Net 255.255.255.255/32 Ifp fw0 Ifa 192.168.2.30 [SCOPED]
+New Routes ('test2') = <IPv4RouteList[15]> = {
  0. Net 0.0.0.0/0 Gate 10.0.0.1 Ifp en0 Ifa 10.0.0.10
  1. Net 0.0.0.0/0 Gate 10.0.0.1 Ifp en1 Ifa 10.0.0.20 [SCOPED]
  2. Net 0.0.0.0/0 Gate 192.168.2.1 Ifp fw0 Ifa 192.168.2.30 [SCOPED]
@@ -1300,11 +1744,17 @@ New Routes ('test2') = <IPv4RouteList[9]> = {
  6. Net 10.0.0.1/32 Ifp en1 Ifa 10.0.0.20 [SCOPED]
  7. Net 192.168.2.0/24 Ifp fw0 Ifa 192.168.2.30
  8. Net 192.168.2.1/32 Ifp fw0 Ifa 192.168.2.30
+ 9. Net 224.0.0.0/4 Ifp en0 Ifa 10.0.0.10
+10. Net 224.0.0.0/4 Ifp en1 Ifa 10.0.0.20 [SCOPED]
+11. Net 224.0.0.0/4 Ifp fw0 Ifa 192.168.2.30 [SCOPED]
+12. Net 255.255.255.255/32 Ifp en0 Ifa 10.0.0.10
+13. Net 255.255.255.255/32 Ifp en1 Ifa 10.0.0.20 [SCOPED]
+14. Net 255.255.255.255/32 Ifp fw0 Ifa 192.168.2.30 [SCOPED]
 }
 =================> Apply 'test1', 'test2' End <=================
 
 =================> Apply 'test2', 'test1' Begin <=================
-Old routes ('test2') = <IPv4RouteList[9]> = {
+Old routes ('test2') = <IPv4RouteList[15]> = {
  0. Net 0.0.0.0/0 Gate 10.0.0.1 Ifp en0 Ifa 10.0.0.10
  1. Net 0.0.0.0/0 Gate 10.0.0.1 Ifp en1 Ifa 10.0.0.20 [SCOPED]
  2. Net 0.0.0.0/0 Gate 192.168.2.1 Ifp fw0 Ifa 192.168.2.30 [SCOPED]
@@ -1314,6 +1764,12 @@ Old routes ('test2') = <IPv4RouteList[9]> = {
  6. Net 10.0.0.1/32 Ifp en1 Ifa 10.0.0.20 [SCOPED]
  7. Net 192.168.2.0/24 Ifp fw0 Ifa 192.168.2.30
  8. Net 192.168.2.1/32 Ifp fw0 Ifa 192.168.2.30
+ 9. Net 224.0.0.0/4 Ifp en0 Ifa 10.0.0.10
+10. Net 224.0.0.0/4 Ifp en1 Ifa 10.0.0.20 [SCOPED]
+11. Net 224.0.0.0/4 Ifp fw0 Ifa 192.168.2.30 [SCOPED]
+12. Net 255.255.255.255/32 Ifp en0 Ifa 10.0.0.10
+13. Net 255.255.255.255/32 Ifp en1 Ifa 10.0.0.20 [SCOPED]
+14. Net 255.255.255.255/32 Ifp fw0 Ifa 192.168.2.30 [SCOPED]
 }
 Add new[5]: Net 10.0.0.1/32 Ifp en0 Ifa 10.0.0.10
 Add new[0]: Net 0.0.0.0/0 Gate 10.0.0.1 Ifp en0 Ifa 10.0.0.10
@@ -1324,7 +1780,13 @@ Add new[2]: Net 0.0.0.0/0 Gate 192.168.2.1 Ifp fw0 Ifa 192.168.2.30 [SCOPED]
 Add new[3]: Net 10.0.0.0/24 Ifp en0 Ifa 10.0.0.10
 Add new[4]: Net 10.0.0.0/24 Ifp en1 Ifa 10.0.0.20 [SCOPED]
 Add new[7]: Net 192.168.2.0/24 Ifp fw0 Ifa 192.168.2.30
-New Routes ('test1') = <IPv4RouteList[9]> = {
+Add new[9]: Net 224.0.0.0/4 Ifp en0 Ifa 10.0.0.10
+Add new[10]: Net 224.0.0.0/4 Ifp en1 Ifa 10.0.0.20 [SCOPED]
+Add new[11]: Net 224.0.0.0/4 Ifp fw0 Ifa 192.168.2.30 [SCOPED]
+Add new[12]: Net 255.255.255.255/32 Ifp en0 Ifa 10.0.0.10
+Add new[13]: Net 255.255.255.255/32 Ifp en1 Ifa 10.0.0.20 [SCOPED]
+Add new[14]: Net 255.255.255.255/32 Ifp fw0 Ifa 192.168.2.30 [SCOPED]
+New Routes ('test1') = <IPv4RouteList[15]> = {
  0. Net 0.0.0.0/0 Gate 10.0.0.1 Ifp en0 Ifa 10.0.0.10
  1. Net 0.0.0.0/0 Gate 10.0.0.1 Ifp en1 Ifa 10.0.0.20 [SCOPED]
  2. Net 0.0.0.0/0 Gate 192.168.2.1 Ifp fw0 Ifa 192.168.2.30 [SCOPED]
@@ -1334,11 +1796,17 @@ New Routes ('test1') = <IPv4RouteList[9]> = {
  6. Net 10.0.0.1/32 Ifp en1 Ifa 10.0.0.20 [SCOPED]
  7. Net 192.168.2.0/24 Ifp fw0 Ifa 192.168.2.30
  8. Net 192.168.2.1/32 Ifp fw0 Ifa 192.168.2.30
+ 9. Net 224.0.0.0/4 Ifp en0 Ifa 10.0.0.10
+10. Net 224.0.0.0/4 Ifp en1 Ifa 10.0.0.20 [SCOPED]
+11. Net 224.0.0.0/4 Ifp fw0 Ifa 192.168.2.30 [SCOPED]
+12. Net 255.255.255.255/32 Ifp en0 Ifa 10.0.0.10
+13. Net 255.255.255.255/32 Ifp en1 Ifa 10.0.0.20 [SCOPED]
+14. Net 255.255.255.255/32 Ifp fw0 Ifa 192.168.2.30 [SCOPED]
 }
 =================> Apply 'test2', 'test1' End <=================
 
 =================> Apply 'test1', 'test3' Begin <=================
-Old routes ('test1') = <IPv4RouteList[9]> = {
+Old routes ('test1') = <IPv4RouteList[15]> = {
  0. Net 0.0.0.0/0 Gate 10.0.0.1 Ifp en0 Ifa 10.0.0.10
  1. Net 0.0.0.0/0 Gate 10.0.0.1 Ifp en1 Ifa 10.0.0.20 [SCOPED]
  2. Net 0.0.0.0/0 Gate 192.168.2.1 Ifp fw0 Ifa 192.168.2.30 [SCOPED]
@@ -1348,6 +1816,12 @@ Old routes ('test1') = <IPv4RouteList[9]> = {
  6. Net 10.0.0.1/32 Ifp en1 Ifa 10.0.0.20 [SCOPED]
  7. Net 192.168.2.0/24 Ifp fw0 Ifa 192.168.2.30
  8. Net 192.168.2.1/32 Ifp fw0 Ifa 192.168.2.30
+ 9. Net 224.0.0.0/4 Ifp en0 Ifa 10.0.0.10
+10. Net 224.0.0.0/4 Ifp en1 Ifa 10.0.0.20 [SCOPED]
+11. Net 224.0.0.0/4 Ifp fw0 Ifa 192.168.2.30 [SCOPED]
+12. Net 255.255.255.255/32 Ifp en0 Ifa 10.0.0.10
+13. Net 255.255.255.255/32 Ifp en1 Ifa 10.0.0.20 [SCOPED]
+14. Net 255.255.255.255/32 Ifp fw0 Ifa 192.168.2.30 [SCOPED]
 }
 Add new[5]: Net 10.0.0.1/32 Ifp en0 Ifa 10.0.0.10
 Add new[0]: Net 0.0.0.0/0 Gate 10.0.0.1 Ifp en0 Ifa 10.0.0.10
@@ -1358,7 +1832,13 @@ Add new[2]: Net 0.0.0.0/0 Gate 192.168.2.1 Ifp fw0 Ifa 192.168.2.30 [SCOPED]
 Add new[3]: Net 10.0.0.0/24 Ifp en0 Ifa 10.0.0.10
 Add new[4]: Net 10.0.0.0/24 Ifp en1 Ifa 10.0.0.20 [SCOPED]
 Add new[7]: Net 192.168.2.0/24 Ifp fw0 Ifa 192.168.2.30
-New Routes ('test3') = <IPv4RouteList[15]> = {
+Add new[9]: Net 224.0.0.0/4 Ifp en0 Ifa 10.0.0.10
+Add new[10]: Net 224.0.0.0/4 Ifp en1 Ifa 10.0.0.20 [SCOPED]
+Add new[11]: Net 224.0.0.0/4 Ifp fw0 Ifa 192.168.2.30 [SCOPED]
+Add new[12]: Net 255.255.255.255/32 Ifp en0 Ifa 10.0.0.10
+Add new[13]: Net 255.255.255.255/32 Ifp en1 Ifa 10.0.0.20 [SCOPED]
+Add new[14]: Net 255.255.255.255/32 Ifp fw0 Ifa 192.168.2.30 [SCOPED]
+New Routes ('test3') = <IPv4RouteList[21]> = {
  0. Net 0.0.0.0/0 Gate 10.0.0.1 Ifp en0 Ifa 10.0.0.10
  1. Net 0.0.0.0/0 Gate 10.0.0.1 Ifp en1 Ifa 10.0.0.20 [SCOPED]
  2. Net 0.0.0.0/0 Gate 192.168.3.1 Ifp fw0 Ifa 192.168.3.30 [SCOPED]
@@ -1374,8 +1854,16 @@ New Routes ('test3') = <IPv4RouteList[15]> = {
 12. Net 192.168.2.1/32 Ifp en1 Ifa 192.168.2.20 [SCOPED]
 13. Net 192.168.3.0/24 Ifp fw0 Ifa 192.168.3.30
 14. Net 192.168.3.1/32 Ifp fw0 Ifa 192.168.3.30
+15. Net 224.0.0.0/4 Ifp en0 Ifa 10.0.0.10
+16. Net 224.0.0.0/4 Ifp en1 Ifa 10.0.0.20 [SCOPED]
+17. Net 224.0.0.0/4 Ifp fw0 Ifa 192.168.3.30 [SCOPED]
+18. Net 255.255.255.255/32 Ifp en0 Ifa 10.0.0.10
+19. Net 255.255.255.255/32 Ifp en1 Ifa 10.0.0.20 [SCOPED]
+20. Net 255.255.255.255/32 Ifp fw0 Ifa 192.168.3.30 [SCOPED]
 }
 Remove old[2]: Net 0.0.0.0/0 Gate 192.168.2.1 Ifp fw0 Ifa 192.168.2.30 [SCOPED]
+Remove old[11]: Net 224.0.0.0/4 Ifp fw0 Ifa 192.168.2.30 [SCOPED]
+Remove old[14]: Net 255.255.255.255/32 Ifp fw0 Ifa 192.168.2.30 [SCOPED]
 Add new[14]: Net 192.168.3.1/32 Ifp fw0 Ifa 192.168.3.30
 Add new[2]: Net 0.0.0.0/0 Gate 192.168.3.1 Ifp fw0 Ifa 192.168.3.30 [SCOPED]
 Add new[8]: Net 192.168.2.0/24 Ifp en0 Ifa 192.168.2.10 [SCOPED]
@@ -1383,10 +1871,12 @@ Add new[9]: Net 192.168.2.0/24 Ifp en1 Ifa 192.168.2.20 [SCOPED]
 Add new[11]: Net 192.168.2.1/32 Ifp en0 Ifa 192.168.2.10 [SCOPED]
 Add new[12]: Net 192.168.2.1/32 Ifp en1 Ifa 192.168.2.20 [SCOPED]
 Add new[13]: Net 192.168.3.0/24 Ifp fw0 Ifa 192.168.3.30
+Add new[17]: Net 224.0.0.0/4 Ifp fw0 Ifa 192.168.3.30 [SCOPED]
+Add new[20]: Net 255.255.255.255/32 Ifp fw0 Ifa 192.168.3.30 [SCOPED]
 =================> Apply 'test1', 'test3' End <=================
 
 =================> Apply 'test3', 'test1' Begin <=================
-Old routes ('test3') = <IPv4RouteList[15]> = {
+Old routes ('test3') = <IPv4RouteList[21]> = {
  0. Net 0.0.0.0/0 Gate 10.0.0.1 Ifp en0 Ifa 10.0.0.10
  1. Net 0.0.0.0/0 Gate 10.0.0.1 Ifp en1 Ifa 10.0.0.20 [SCOPED]
  2. Net 0.0.0.0/0 Gate 192.168.3.1 Ifp fw0 Ifa 192.168.3.30 [SCOPED]
@@ -1402,6 +1892,12 @@ Old routes ('test3') = <IPv4RouteList[15]> = {
 12. Net 192.168.2.1/32 Ifp en1 Ifa 192.168.2.20 [SCOPED]
 13. Net 192.168.3.0/24 Ifp fw0 Ifa 192.168.3.30
 14. Net 192.168.3.1/32 Ifp fw0 Ifa 192.168.3.30
+15. Net 224.0.0.0/4 Ifp en0 Ifa 10.0.0.10
+16. Net 224.0.0.0/4 Ifp en1 Ifa 10.0.0.20 [SCOPED]
+17. Net 224.0.0.0/4 Ifp fw0 Ifa 192.168.3.30 [SCOPED]
+18. Net 255.255.255.255/32 Ifp en0 Ifa 10.0.0.10
+19. Net 255.255.255.255/32 Ifp en1 Ifa 10.0.0.20 [SCOPED]
+20. Net 255.255.255.255/32 Ifp fw0 Ifa 192.168.3.30 [SCOPED]
 }
 Add new[5]: Net 10.0.0.1/32 Ifp en0 Ifa 10.0.0.10
 Add new[0]: Net 0.0.0.0/0 Gate 10.0.0.1 Ifp en0 Ifa 10.0.0.10
@@ -1418,7 +1914,13 @@ Add new[10]: Net 192.168.2.1/32 Ifp fw0 Ifa 192.168.2.30
 Add new[11]: Net 192.168.2.1/32 Ifp en0 Ifa 192.168.2.10 [SCOPED]
 Add new[12]: Net 192.168.2.1/32 Ifp en1 Ifa 192.168.2.20 [SCOPED]
 Add new[13]: Net 192.168.3.0/24 Ifp fw0 Ifa 192.168.3.30
-New Routes ('test1') = <IPv4RouteList[9]> = {
+Add new[15]: Net 224.0.0.0/4 Ifp en0 Ifa 10.0.0.10
+Add new[16]: Net 224.0.0.0/4 Ifp en1 Ifa 10.0.0.20 [SCOPED]
+Add new[17]: Net 224.0.0.0/4 Ifp fw0 Ifa 192.168.3.30 [SCOPED]
+Add new[18]: Net 255.255.255.255/32 Ifp en0 Ifa 10.0.0.10
+Add new[19]: Net 255.255.255.255/32 Ifp en1 Ifa 10.0.0.20 [SCOPED]
+Add new[20]: Net 255.255.255.255/32 Ifp fw0 Ifa 192.168.3.30 [SCOPED]
+New Routes ('test1') = <IPv4RouteList[15]> = {
  0. Net 0.0.0.0/0 Gate 10.0.0.1 Ifp en0 Ifa 10.0.0.10
  1. Net 0.0.0.0/0 Gate 10.0.0.1 Ifp en1 Ifa 10.0.0.20 [SCOPED]
  2. Net 0.0.0.0/0 Gate 192.168.2.1 Ifp fw0 Ifa 192.168.2.30 [SCOPED]
@@ -1428,6 +1930,12 @@ New Routes ('test1') = <IPv4RouteList[9]> = {
  6. Net 10.0.0.1/32 Ifp en1 Ifa 10.0.0.20 [SCOPED]
  7. Net 192.168.2.0/24 Ifp fw0 Ifa 192.168.2.30
  8. Net 192.168.2.1/32 Ifp fw0 Ifa 192.168.2.30
+ 9. Net 224.0.0.0/4 Ifp en0 Ifa 10.0.0.10
+10. Net 224.0.0.0/4 Ifp en1 Ifa 10.0.0.20 [SCOPED]
+11. Net 224.0.0.0/4 Ifp fw0 Ifa 192.168.2.30 [SCOPED]
+12. Net 255.255.255.255/32 Ifp en0 Ifa 10.0.0.10
+13. Net 255.255.255.255/32 Ifp en1 Ifa 10.0.0.20 [SCOPED]
+14. Net 255.255.255.255/32 Ifp fw0 Ifa 192.168.2.30 [SCOPED]
 }
 Remove old[2]: Net 0.0.0.0/0 Gate 192.168.3.1 Ifp fw0 Ifa 192.168.3.30 [SCOPED]
 Remove old[8]: Net 192.168.2.0/24 Ifp en0 Ifa 192.168.2.10 [SCOPED]
@@ -1436,11 +1944,15 @@ Remove old[11]: Net 192.168.2.1/32 Ifp en0 Ifa 192.168.2.10 [SCOPED]
 Remove old[12]: Net 192.168.2.1/32 Ifp en1 Ifa 192.168.2.20 [SCOPED]
 Remove old[13]: Net 192.168.3.0/24 Ifp fw0 Ifa 192.168.3.30
 Remove old[14]: Net 192.168.3.1/32 Ifp fw0 Ifa 192.168.3.30
+Remove old[17]: Net 224.0.0.0/4 Ifp fw0 Ifa 192.168.3.30 [SCOPED]
+Remove old[20]: Net 255.255.255.255/32 Ifp fw0 Ifa 192.168.3.30 [SCOPED]
 Add new[2]: Net 0.0.0.0/0 Gate 192.168.2.1 Ifp fw0 Ifa 192.168.2.30 [SCOPED]
+Add new[11]: Net 224.0.0.0/4 Ifp fw0 Ifa 192.168.2.30 [SCOPED]
+Add new[14]: Net 255.255.255.255/32 Ifp fw0 Ifa 192.168.2.30 [SCOPED]
 =================> Apply 'test3', 'test1' End <=================
 
 =================> Apply 'test1', 'test4' Begin <=================
-Old routes ('test1') = <IPv4RouteList[9]> = {
+Old routes ('test1') = <IPv4RouteList[15]> = {
  0. Net 0.0.0.0/0 Gate 10.0.0.1 Ifp en0 Ifa 10.0.0.10
  1. Net 0.0.0.0/0 Gate 10.0.0.1 Ifp en1 Ifa 10.0.0.20 [SCOPED]
  2. Net 0.0.0.0/0 Gate 192.168.2.1 Ifp fw0 Ifa 192.168.2.30 [SCOPED]
@@ -1450,6 +1962,12 @@ Old routes ('test1') = <IPv4RouteList[9]> = {
  6. Net 10.0.0.1/32 Ifp en1 Ifa 10.0.0.20 [SCOPED]
  7. Net 192.168.2.0/24 Ifp fw0 Ifa 192.168.2.30
  8. Net 192.168.2.1/32 Ifp fw0 Ifa 192.168.2.30
+ 9. Net 224.0.0.0/4 Ifp en0 Ifa 10.0.0.10
+10. Net 224.0.0.0/4 Ifp en1 Ifa 10.0.0.20 [SCOPED]
+11. Net 224.0.0.0/4 Ifp fw0 Ifa 192.168.2.30 [SCOPED]
+12. Net 255.255.255.255/32 Ifp en0 Ifa 10.0.0.10
+13. Net 255.255.255.255/32 Ifp en1 Ifa 10.0.0.20 [SCOPED]
+14. Net 255.255.255.255/32 Ifp fw0 Ifa 192.168.2.30 [SCOPED]
 }
 Add new[5]: Net 10.0.0.1/32 Ifp en0 Ifa 10.0.0.10
 Add new[0]: Net 0.0.0.0/0 Gate 10.0.0.1 Ifp en0 Ifa 10.0.0.10
@@ -1460,7 +1978,13 @@ Add new[2]: Net 0.0.0.0/0 Gate 192.168.2.1 Ifp fw0 Ifa 192.168.2.30 [SCOPED]
 Add new[3]: Net 10.0.0.0/24 Ifp en0 Ifa 10.0.0.10
 Add new[4]: Net 10.0.0.0/24 Ifp en1 Ifa 10.0.0.20 [SCOPED]
 Add new[7]: Net 192.168.2.0/24 Ifp fw0 Ifa 192.168.2.30
-New Routes ('test4') = <IPv4RouteList[10]> = {
+Add new[9]: Net 224.0.0.0/4 Ifp en0 Ifa 10.0.0.10
+Add new[10]: Net 224.0.0.0/4 Ifp en1 Ifa 10.0.0.20 [SCOPED]
+Add new[11]: Net 224.0.0.0/4 Ifp fw0 Ifa 192.168.2.30 [SCOPED]
+Add new[12]: Net 255.255.255.255/32 Ifp en0 Ifa 10.0.0.10
+Add new[13]: Net 255.255.255.255/32 Ifp en1 Ifa 10.0.0.20 [SCOPED]
+Add new[14]: Net 255.255.255.255/32 Ifp fw0 Ifa 192.168.2.30 [SCOPED]
+New Routes ('test4') = <IPv4RouteList[14]> = {
  0. Net 0.0.0.0/0 Gate 17.202.20.1 Ifp en0 Ifa 17.202.40.191
  1. Net 0.0.0.0/0 Gate 17.202.20.1 Ifp en1 Ifa 17.202.42.24 [SCOPED]
  2. Net 10.0.0.0/24 Ifp en1 Ifa 10.0.0.20
@@ -1471,6 +1995,10 @@ New Routes ('test4') = <IPv4RouteList[10]> = {
  7. Net 17.202.20.1/32 Ifp en1 Ifa 17.202.42.24 [SCOPED]
  8. Net 17.202.40.0/22 Ifp en0 Ifa 17.202.40.191
  9. Net 17.202.40.0/22 Ifp en1 Ifa 17.202.42.24 [SCOPED]
+10. Net 224.0.0.0/4 Ifp en0 Ifa 17.202.40.191
+11. Net 224.0.0.0/4 Ifp en1 Ifa 17.202.42.24 [SCOPED]
+12. Net 255.255.255.255/32 Ifp en0 Ifa 17.202.40.191
+13. Net 255.255.255.255/32 Ifp en1 Ifa 17.202.42.24 [SCOPED]
 }
 Remove old[0]: Net 0.0.0.0/0 Gate 10.0.0.1 Ifp en0 Ifa 10.0.0.10
 Remove old[1]: Net 0.0.0.0/0 Gate 10.0.0.1 Ifp en1 Ifa 10.0.0.20 [SCOPED]
@@ -1481,6 +2009,12 @@ Remove old[5]: Net 10.0.0.1/32 Ifp en0 Ifa 10.0.0.10
 Remove old[6]: Net 10.0.0.1/32 Ifp en1 Ifa 10.0.0.20 [SCOPED]
 Remove old[7]: Net 192.168.2.0/24 Ifp fw0 Ifa 192.168.2.30
 Remove old[8]: Net 192.168.2.1/32 Ifp fw0 Ifa 192.168.2.30
+Remove old[9]: Net 224.0.0.0/4 Ifp en0 Ifa 10.0.0.10
+Remove old[10]: Net 224.0.0.0/4 Ifp en1 Ifa 10.0.0.20 [SCOPED]
+Remove old[11]: Net 224.0.0.0/4 Ifp fw0 Ifa 192.168.2.30 [SCOPED]
+Remove old[12]: Net 255.255.255.255/32 Ifp en0 Ifa 10.0.0.10
+Remove old[13]: Net 255.255.255.255/32 Ifp en1 Ifa 10.0.0.20 [SCOPED]
+Remove old[14]: Net 255.255.255.255/32 Ifp fw0 Ifa 192.168.2.30 [SCOPED]
 Add new[6]: Net 17.202.20.1/32 Ifp en0 Ifa 17.202.40.191
 Add new[0]: Net 0.0.0.0/0 Gate 17.202.20.1 Ifp en0 Ifa 17.202.40.191
 Add new[7]: Net 17.202.20.1/32 Ifp en1 Ifa 17.202.42.24 [SCOPED]
@@ -1491,10 +2025,14 @@ Add new[4]: Net 10.0.0.1/32 Ifp en1 Ifa 10.0.0.20
 Add new[5]: Net 10.0.0.1/32 Ifp en0 Ifa 10.0.0.11 [SCOPED]
 Add new[8]: Net 17.202.40.0/22 Ifp en0 Ifa 17.202.40.191
 Add new[9]: Net 17.202.40.0/22 Ifp en1 Ifa 17.202.42.24 [SCOPED]
+Add new[10]: Net 224.0.0.0/4 Ifp en0 Ifa 17.202.40.191
+Add new[11]: Net 224.0.0.0/4 Ifp en1 Ifa 17.202.42.24 [SCOPED]
+Add new[12]: Net 255.255.255.255/32 Ifp en0 Ifa 17.202.40.191
+Add new[13]: Net 255.255.255.255/32 Ifp en1 Ifa 17.202.42.24 [SCOPED]
 =================> Apply 'test1', 'test4' End <=================
 
 =================> Apply 'test4', 'test1' Begin <=================
-Old routes ('test4') = <IPv4RouteList[10]> = {
+Old routes ('test4') = <IPv4RouteList[14]> = {
  0. Net 0.0.0.0/0 Gate 17.202.20.1 Ifp en0 Ifa 17.202.40.191
  1. Net 0.0.0.0/0 Gate 17.202.20.1 Ifp en1 Ifa 17.202.42.24 [SCOPED]
  2. Net 10.0.0.0/24 Ifp en1 Ifa 10.0.0.20
@@ -1505,6 +2043,10 @@ Old routes ('test4') = <IPv4RouteList[10]> = {
  7. Net 17.202.20.1/32 Ifp en1 Ifa 17.202.42.24 [SCOPED]
  8. Net 17.202.40.0/22 Ifp en0 Ifa 17.202.40.191
  9. Net 17.202.40.0/22 Ifp en1 Ifa 17.202.42.24 [SCOPED]
+10. Net 224.0.0.0/4 Ifp en0 Ifa 17.202.40.191
+11. Net 224.0.0.0/4 Ifp en1 Ifa 17.202.42.24 [SCOPED]
+12. Net 255.255.255.255/32 Ifp en0 Ifa 17.202.40.191
+13. Net 255.255.255.255/32 Ifp en1 Ifa 17.202.42.24 [SCOPED]
 }
 Add new[6]: Net 17.202.20.1/32 Ifp en0 Ifa 17.202.40.191
 Add new[0]: Net 0.0.0.0/0 Gate 17.202.20.1 Ifp en0 Ifa 17.202.40.191
@@ -1516,7 +2058,11 @@ Add new[4]: Net 10.0.0.1/32 Ifp en1 Ifa 10.0.0.20
 Add new[5]: Net 10.0.0.1/32 Ifp en0 Ifa 10.0.0.11 [SCOPED]
 Add new[8]: Net 17.202.40.0/22 Ifp en0 Ifa 17.202.40.191
 Add new[9]: Net 17.202.40.0/22 Ifp en1 Ifa 17.202.42.24 [SCOPED]
-New Routes ('test1') = <IPv4RouteList[9]> = {
+Add new[10]: Net 224.0.0.0/4 Ifp en0 Ifa 17.202.40.191
+Add new[11]: Net 224.0.0.0/4 Ifp en1 Ifa 17.202.42.24 [SCOPED]
+Add new[12]: Net 255.255.255.255/32 Ifp en0 Ifa 17.202.40.191
+Add new[13]: Net 255.255.255.255/32 Ifp en1 Ifa 17.202.42.24 [SCOPED]
+New Routes ('test1') = <IPv4RouteList[15]> = {
  0. Net 0.0.0.0/0 Gate 10.0.0.1 Ifp en0 Ifa 10.0.0.10
  1. Net 0.0.0.0/0 Gate 10.0.0.1 Ifp en1 Ifa 10.0.0.20 [SCOPED]
  2. Net 0.0.0.0/0 Gate 192.168.2.1 Ifp fw0 Ifa 192.168.2.30 [SCOPED]
@@ -1526,6 +2072,12 @@ New Routes ('test1') = <IPv4RouteList[9]> = {
  6. Net 10.0.0.1/32 Ifp en1 Ifa 10.0.0.20 [SCOPED]
  7. Net 192.168.2.0/24 Ifp fw0 Ifa 192.168.2.30
  8. Net 192.168.2.1/32 Ifp fw0 Ifa 192.168.2.30
+ 9. Net 224.0.0.0/4 Ifp en0 Ifa 10.0.0.10
+10. Net 224.0.0.0/4 Ifp en1 Ifa 10.0.0.20 [SCOPED]
+11. Net 224.0.0.0/4 Ifp fw0 Ifa 192.168.2.30 [SCOPED]
+12. Net 255.255.255.255/32 Ifp en0 Ifa 10.0.0.10
+13. Net 255.255.255.255/32 Ifp en1 Ifa 10.0.0.20 [SCOPED]
+14. Net 255.255.255.255/32 Ifp fw0 Ifa 192.168.2.30 [SCOPED]
 }
 Remove old[0]: Net 0.0.0.0/0 Gate 17.202.20.1 Ifp en0 Ifa 17.202.40.191
 Remove old[1]: Net 0.0.0.0/0 Gate 17.202.20.1 Ifp en1 Ifa 17.202.42.24 [SCOPED]
@@ -1537,6 +2089,10 @@ Remove old[6]: Net 17.202.20.1/32 Ifp en0 Ifa 17.202.40.191
 Remove old[7]: Net 17.202.20.1/32 Ifp en1 Ifa 17.202.42.24 [SCOPED]
 Remove old[8]: Net 17.202.40.0/22 Ifp en0 Ifa 17.202.40.191
 Remove old[9]: Net 17.202.40.0/22 Ifp en1 Ifa 17.202.42.24 [SCOPED]
+Remove old[10]: Net 224.0.0.0/4 Ifp en0 Ifa 17.202.40.191
+Remove old[11]: Net 224.0.0.0/4 Ifp en1 Ifa 17.202.42.24 [SCOPED]
+Remove old[12]: Net 255.255.255.255/32 Ifp en0 Ifa 17.202.40.191
+Remove old[13]: Net 255.255.255.255/32 Ifp en1 Ifa 17.202.42.24 [SCOPED]
 Add new[5]: Net 10.0.0.1/32 Ifp en0 Ifa 10.0.0.10
 Add new[0]: Net 0.0.0.0/0 Gate 10.0.0.1 Ifp en0 Ifa 10.0.0.10
 Add new[6]: Net 10.0.0.1/32 Ifp en1 Ifa 10.0.0.20 [SCOPED]
@@ -1546,10 +2102,16 @@ Add new[2]: Net 0.0.0.0/0 Gate 192.168.2.1 Ifp fw0 Ifa 192.168.2.30 [SCOPED]
 Add new[3]: Net 10.0.0.0/24 Ifp en0 Ifa 10.0.0.10
 Add new[4]: Net 10.0.0.0/24 Ifp en1 Ifa 10.0.0.20 [SCOPED]
 Add new[7]: Net 192.168.2.0/24 Ifp fw0 Ifa 192.168.2.30
+Add new[9]: Net 224.0.0.0/4 Ifp en0 Ifa 10.0.0.10
+Add new[10]: Net 224.0.0.0/4 Ifp en1 Ifa 10.0.0.20 [SCOPED]
+Add new[11]: Net 224.0.0.0/4 Ifp fw0 Ifa 192.168.2.30 [SCOPED]
+Add new[12]: Net 255.255.255.255/32 Ifp en0 Ifa 10.0.0.10
+Add new[13]: Net 255.255.255.255/32 Ifp en1 Ifa 10.0.0.20 [SCOPED]
+Add new[14]: Net 255.255.255.255/32 Ifp fw0 Ifa 192.168.2.30 [SCOPED]
 =================> Apply 'test4', 'test1' End <=================
 
 =================> Apply 'test1', 'test5' Begin <=================
-Old routes ('test1') = <IPv4RouteList[9]> = {
+Old routes ('test1') = <IPv4RouteList[15]> = {
  0. Net 0.0.0.0/0 Gate 10.0.0.1 Ifp en0 Ifa 10.0.0.10
  1. Net 0.0.0.0/0 Gate 10.0.0.1 Ifp en1 Ifa 10.0.0.20 [SCOPED]
  2. Net 0.0.0.0/0 Gate 192.168.2.1 Ifp fw0 Ifa 192.168.2.30 [SCOPED]
@@ -1559,6 +2121,12 @@ Old routes ('test1') = <IPv4RouteList[9]> = {
  6. Net 10.0.0.1/32 Ifp en1 Ifa 10.0.0.20 [SCOPED]
  7. Net 192.168.2.0/24 Ifp fw0 Ifa 192.168.2.30
  8. Net 192.168.2.1/32 Ifp fw0 Ifa 192.168.2.30
+ 9. Net 224.0.0.0/4 Ifp en0 Ifa 10.0.0.10
+10. Net 224.0.0.0/4 Ifp en1 Ifa 10.0.0.20 [SCOPED]
+11. Net 224.0.0.0/4 Ifp fw0 Ifa 192.168.2.30 [SCOPED]
+12. Net 255.255.255.255/32 Ifp en0 Ifa 10.0.0.10
+13. Net 255.255.255.255/32 Ifp en1 Ifa 10.0.0.20 [SCOPED]
+14. Net 255.255.255.255/32 Ifp fw0 Ifa 192.168.2.30 [SCOPED]
 }
 Add new[5]: Net 10.0.0.1/32 Ifp en0 Ifa 10.0.0.10
 Add new[0]: Net 0.0.0.0/0 Gate 10.0.0.1 Ifp en0 Ifa 10.0.0.10
@@ -1569,7 +2137,13 @@ Add new[2]: Net 0.0.0.0/0 Gate 192.168.2.1 Ifp fw0 Ifa 192.168.2.30 [SCOPED]
 Add new[3]: Net 10.0.0.0/24 Ifp en0 Ifa 10.0.0.10
 Add new[4]: Net 10.0.0.0/24 Ifp en1 Ifa 10.0.0.20 [SCOPED]
 Add new[7]: Net 192.168.2.0/24 Ifp fw0 Ifa 192.168.2.30
-New Routes ('test5') = <IPv4RouteList[12]> = {
+Add new[9]: Net 224.0.0.0/4 Ifp en0 Ifa 10.0.0.10
+Add new[10]: Net 224.0.0.0/4 Ifp en1 Ifa 10.0.0.20 [SCOPED]
+Add new[11]: Net 224.0.0.0/4 Ifp fw0 Ifa 192.168.2.30 [SCOPED]
+Add new[12]: Net 255.255.255.255/32 Ifp en0 Ifa 10.0.0.10
+Add new[13]: Net 255.255.255.255/32 Ifp en1 Ifa 10.0.0.20 [SCOPED]
+Add new[14]: Net 255.255.255.255/32 Ifp fw0 Ifa 192.168.2.30 [SCOPED]
+New Routes ('test5') = <IPv4RouteList[18]> = {
  0. Net 0.0.0.0/0 Gate 17.219.156.1 Ifp ppp0 Ifa 17.219.156.22
  1. Net 0.0.0.0/0 Gate 17.202.20.1 Ifp en0 Ifa 17.202.40.191 [SCOPED]
  2. Net 0.0.0.0/0 Gate 17.202.20.1 Ifp en1 Ifa 17.202.42.24 [SCOPED]
@@ -1582,6 +2156,12 @@ New Routes ('test5') = <IPv4RouteList[12]> = {
  9. Net 17.202.40.0/22 Ifp en0 Ifa 17.202.40.191
 10. Net 17.202.40.0/22 Ifp en1 Ifa 17.202.42.24 [SCOPED]
 11. Net 17.219.156.1/32 Ifp ppp0 Ifa 17.219.156.22
+12. Net 224.0.0.0/4 Ifp ppp0 Ifa 17.219.156.22
+13. Net 224.0.0.0/4 Ifp en0 Ifa 17.202.40.191 [SCOPED]
+14. Net 224.0.0.0/4 Ifp en1 Ifa 17.202.42.24 [SCOPED]
+15. Net 255.255.255.255/32 Ifp ppp0 Ifa 17.219.156.22
+16. Net 255.255.255.255/32 Ifp en0 Ifa 17.202.40.191 [SCOPED]
+17. Net 255.255.255.255/32 Ifp en1 Ifa 17.202.42.24 [SCOPED]
 }
 Remove old[0]: Net 0.0.0.0/0 Gate 10.0.0.1 Ifp en0 Ifa 10.0.0.10
 Remove old[1]: Net 0.0.0.0/0 Gate 10.0.0.1 Ifp en1 Ifa 10.0.0.20 [SCOPED]
@@ -1592,6 +2172,12 @@ Remove old[5]: Net 10.0.0.1/32 Ifp en0 Ifa 10.0.0.10
 Remove old[6]: Net 10.0.0.1/32 Ifp en1 Ifa 10.0.0.20 [SCOPED]
 Remove old[7]: Net 192.168.2.0/24 Ifp fw0 Ifa 192.168.2.30
 Remove old[8]: Net 192.168.2.1/32 Ifp fw0 Ifa 192.168.2.30
+Remove old[9]: Net 224.0.0.0/4 Ifp en0 Ifa 10.0.0.10
+Remove old[10]: Net 224.0.0.0/4 Ifp en1 Ifa 10.0.0.20 [SCOPED]
+Remove old[11]: Net 224.0.0.0/4 Ifp fw0 Ifa 192.168.2.30 [SCOPED]
+Remove old[12]: Net 255.255.255.255/32 Ifp en0 Ifa 10.0.0.10
+Remove old[13]: Net 255.255.255.255/32 Ifp en1 Ifa 10.0.0.20 [SCOPED]
+Remove old[14]: Net 255.255.255.255/32 Ifp fw0 Ifa 192.168.2.30 [SCOPED]
 Add new[11]: Net 17.219.156.1/32 Ifp ppp0 Ifa 17.219.156.22
 Add new[0]: Net 0.0.0.0/0 Gate 17.219.156.1 Ifp ppp0 Ifa 17.219.156.22
 Add new[7]: Net 17.202.20.1/32 Ifp en0 Ifa 17.202.40.191
@@ -1604,10 +2190,16 @@ Add new[5]: Net 10.0.0.1/32 Ifp en1 Ifa 10.0.0.20
 Add new[6]: Net 10.0.0.1/32 Ifp en0 Ifa 10.0.0.11 [SCOPED]
 Add new[9]: Net 17.202.40.0/22 Ifp en0 Ifa 17.202.40.191
 Add new[10]: Net 17.202.40.0/22 Ifp en1 Ifa 17.202.42.24 [SCOPED]
+Add new[12]: Net 224.0.0.0/4 Ifp ppp0 Ifa 17.219.156.22
+Add new[13]: Net 224.0.0.0/4 Ifp en0 Ifa 17.202.40.191 [SCOPED]
+Add new[14]: Net 224.0.0.0/4 Ifp en1 Ifa 17.202.42.24 [SCOPED]
+Add new[15]: Net 255.255.255.255/32 Ifp ppp0 Ifa 17.219.156.22
+Add new[16]: Net 255.255.255.255/32 Ifp en0 Ifa 17.202.40.191 [SCOPED]
+Add new[17]: Net 255.255.255.255/32 Ifp en1 Ifa 17.202.42.24 [SCOPED]
 =================> Apply 'test1', 'test5' End <=================
 
 =================> Apply 'test5', 'test1' Begin <=================
-Old routes ('test5') = <IPv4RouteList[12]> = {
+Old routes ('test5') = <IPv4RouteList[18]> = {
  0. Net 0.0.0.0/0 Gate 17.219.156.1 Ifp ppp0 Ifa 17.219.156.22
  1. Net 0.0.0.0/0 Gate 17.202.20.1 Ifp en0 Ifa 17.202.40.191 [SCOPED]
  2. Net 0.0.0.0/0 Gate 17.202.20.1 Ifp en1 Ifa 17.202.42.24 [SCOPED]
@@ -1620,6 +2212,12 @@ Old routes ('test5') = <IPv4RouteList[12]> = {
  9. Net 17.202.40.0/22 Ifp en0 Ifa 17.202.40.191
 10. Net 17.202.40.0/22 Ifp en1 Ifa 17.202.42.24 [SCOPED]
 11. Net 17.219.156.1/32 Ifp ppp0 Ifa 17.219.156.22
+12. Net 224.0.0.0/4 Ifp ppp0 Ifa 17.219.156.22
+13. Net 224.0.0.0/4 Ifp en0 Ifa 17.202.40.191 [SCOPED]
+14. Net 224.0.0.0/4 Ifp en1 Ifa 17.202.42.24 [SCOPED]
+15. Net 255.255.255.255/32 Ifp ppp0 Ifa 17.219.156.22
+16. Net 255.255.255.255/32 Ifp en0 Ifa 17.202.40.191 [SCOPED]
+17. Net 255.255.255.255/32 Ifp en1 Ifa 17.202.42.24 [SCOPED]
 }
 Add new[11]: Net 17.219.156.1/32 Ifp ppp0 Ifa 17.219.156.22
 Add new[0]: Net 0.0.0.0/0 Gate 17.219.156.1 Ifp ppp0 Ifa 17.219.156.22
@@ -1633,7 +2231,13 @@ Add new[5]: Net 10.0.0.1/32 Ifp en1 Ifa 10.0.0.20
 Add new[6]: Net 10.0.0.1/32 Ifp en0 Ifa 10.0.0.11 [SCOPED]
 Add new[9]: Net 17.202.40.0/22 Ifp en0 Ifa 17.202.40.191
 Add new[10]: Net 17.202.40.0/22 Ifp en1 Ifa 17.202.42.24 [SCOPED]
-New Routes ('test1') = <IPv4RouteList[9]> = {
+Add new[12]: Net 224.0.0.0/4 Ifp ppp0 Ifa 17.219.156.22
+Add new[13]: Net 224.0.0.0/4 Ifp en0 Ifa 17.202.40.191 [SCOPED]
+Add new[14]: Net 224.0.0.0/4 Ifp en1 Ifa 17.202.42.24 [SCOPED]
+Add new[15]: Net 255.255.255.255/32 Ifp ppp0 Ifa 17.219.156.22
+Add new[16]: Net 255.255.255.255/32 Ifp en0 Ifa 17.202.40.191 [SCOPED]
+Add new[17]: Net 255.255.255.255/32 Ifp en1 Ifa 17.202.42.24 [SCOPED]
+New Routes ('test1') = <IPv4RouteList[15]> = {
  0. Net 0.0.0.0/0 Gate 10.0.0.1 Ifp en0 Ifa 10.0.0.10
  1. Net 0.0.0.0/0 Gate 10.0.0.1 Ifp en1 Ifa 10.0.0.20 [SCOPED]
  2. Net 0.0.0.0/0 Gate 192.168.2.1 Ifp fw0 Ifa 192.168.2.30 [SCOPED]
@@ -1643,6 +2247,12 @@ New Routes ('test1') = <IPv4RouteList[9]> = {
  6. Net 10.0.0.1/32 Ifp en1 Ifa 10.0.0.20 [SCOPED]
  7. Net 192.168.2.0/24 Ifp fw0 Ifa 192.168.2.30
  8. Net 192.168.2.1/32 Ifp fw0 Ifa 192.168.2.30
+ 9. Net 224.0.0.0/4 Ifp en0 Ifa 10.0.0.10
+10. Net 224.0.0.0/4 Ifp en1 Ifa 10.0.0.20 [SCOPED]
+11. Net 224.0.0.0/4 Ifp fw0 Ifa 192.168.2.30 [SCOPED]
+12. Net 255.255.255.255/32 Ifp en0 Ifa 10.0.0.10
+13. Net 255.255.255.255/32 Ifp en1 Ifa 10.0.0.20 [SCOPED]
+14. Net 255.255.255.255/32 Ifp fw0 Ifa 192.168.2.30 [SCOPED]
 }
 Remove old[0]: Net 0.0.0.0/0 Gate 17.219.156.1 Ifp ppp0 Ifa 17.219.156.22
 Remove old[1]: Net 0.0.0.0/0 Gate 17.202.20.1 Ifp en0 Ifa 17.202.40.191 [SCOPED]
@@ -1656,6 +2266,12 @@ Remove old[8]: Net 17.202.20.1/32 Ifp en1 Ifa 17.202.42.24 [SCOPED]
 Remove old[9]: Net 17.202.40.0/22 Ifp en0 Ifa 17.202.40.191
 Remove old[10]: Net 17.202.40.0/22 Ifp en1 Ifa 17.202.42.24 [SCOPED]
 Remove old[11]: Net 17.219.156.1/32 Ifp ppp0 Ifa 17.219.156.22
+Remove old[12]: Net 224.0.0.0/4 Ifp ppp0 Ifa 17.219.156.22
+Remove old[13]: Net 224.0.0.0/4 Ifp en0 Ifa 17.202.40.191 [SCOPED]
+Remove old[14]: Net 224.0.0.0/4 Ifp en1 Ifa 17.202.42.24 [SCOPED]
+Remove old[15]: Net 255.255.255.255/32 Ifp ppp0 Ifa 17.219.156.22
+Remove old[16]: Net 255.255.255.255/32 Ifp en0 Ifa 17.202.40.191 [SCOPED]
+Remove old[17]: Net 255.255.255.255/32 Ifp en1 Ifa 17.202.42.24 [SCOPED]
 Add new[5]: Net 10.0.0.1/32 Ifp en0 Ifa 10.0.0.10
 Add new[0]: Net 0.0.0.0/0 Gate 10.0.0.1 Ifp en0 Ifa 10.0.0.10
 Add new[6]: Net 10.0.0.1/32 Ifp en1 Ifa 10.0.0.20 [SCOPED]
@@ -1665,10 +2281,16 @@ Add new[2]: Net 0.0.0.0/0 Gate 192.168.2.1 Ifp fw0 Ifa 192.168.2.30 [SCOPED]
 Add new[3]: Net 10.0.0.0/24 Ifp en0 Ifa 10.0.0.10
 Add new[4]: Net 10.0.0.0/24 Ifp en1 Ifa 10.0.0.20 [SCOPED]
 Add new[7]: Net 192.168.2.0/24 Ifp fw0 Ifa 192.168.2.30
+Add new[9]: Net 224.0.0.0/4 Ifp en0 Ifa 10.0.0.10
+Add new[10]: Net 224.0.0.0/4 Ifp en1 Ifa 10.0.0.20 [SCOPED]
+Add new[11]: Net 224.0.0.0/4 Ifp fw0 Ifa 192.168.2.30 [SCOPED]
+Add new[12]: Net 255.255.255.255/32 Ifp en0 Ifa 10.0.0.10
+Add new[13]: Net 255.255.255.255/32 Ifp en1 Ifa 10.0.0.20 [SCOPED]
+Add new[14]: Net 255.255.255.255/32 Ifp fw0 Ifa 192.168.2.30 [SCOPED]
 =================> Apply 'test5', 'test1' End <=================
 
 =================> Apply 'test1', 'test6' Begin <=================
-Old routes ('test1') = <IPv4RouteList[9]> = {
+Old routes ('test1') = <IPv4RouteList[15]> = {
  0. Net 0.0.0.0/0 Gate 10.0.0.1 Ifp en0 Ifa 10.0.0.10
  1. Net 0.0.0.0/0 Gate 10.0.0.1 Ifp en1 Ifa 10.0.0.20 [SCOPED]
  2. Net 0.0.0.0/0 Gate 192.168.2.1 Ifp fw0 Ifa 192.168.2.30 [SCOPED]
@@ -1678,6 +2300,12 @@ Old routes ('test1') = <IPv4RouteList[9]> = {
  6. Net 10.0.0.1/32 Ifp en1 Ifa 10.0.0.20 [SCOPED]
  7. Net 192.168.2.0/24 Ifp fw0 Ifa 192.168.2.30
  8. Net 192.168.2.1/32 Ifp fw0 Ifa 192.168.2.30
+ 9. Net 224.0.0.0/4 Ifp en0 Ifa 10.0.0.10
+10. Net 224.0.0.0/4 Ifp en1 Ifa 10.0.0.20 [SCOPED]
+11. Net 224.0.0.0/4 Ifp fw0 Ifa 192.168.2.30 [SCOPED]
+12. Net 255.255.255.255/32 Ifp en0 Ifa 10.0.0.10
+13. Net 255.255.255.255/32 Ifp en1 Ifa 10.0.0.20 [SCOPED]
+14. Net 255.255.255.255/32 Ifp fw0 Ifa 192.168.2.30 [SCOPED]
 }
 Add new[5]: Net 10.0.0.1/32 Ifp en0 Ifa 10.0.0.10
 Add new[0]: Net 0.0.0.0/0 Gate 10.0.0.1 Ifp en0 Ifa 10.0.0.10
@@ -1688,17 +2316,31 @@ Add new[2]: Net 0.0.0.0/0 Gate 192.168.2.1 Ifp fw0 Ifa 192.168.2.30 [SCOPED]
 Add new[3]: Net 10.0.0.0/24 Ifp en0 Ifa 10.0.0.10
 Add new[4]: Net 10.0.0.0/24 Ifp en1 Ifa 10.0.0.20 [SCOPED]
 Add new[7]: Net 192.168.2.0/24 Ifp fw0 Ifa 192.168.2.30
-New Routes ('test6') = <IPv4RouteList[10]> = {
+Add new[9]: Net 224.0.0.0/4 Ifp en0 Ifa 10.0.0.10
+Add new[10]: Net 224.0.0.0/4 Ifp en1 Ifa 10.0.0.20 [SCOPED]
+Add new[11]: Net 224.0.0.0/4 Ifp fw0 Ifa 192.168.2.30 [SCOPED]
+Add new[12]: Net 255.255.255.255/32 Ifp en0 Ifa 10.0.0.10
+Add new[13]: Net 255.255.255.255/32 Ifp en1 Ifa 10.0.0.20 [SCOPED]
+Add new[14]: Net 255.255.255.255/32 Ifp fw0 Ifa 192.168.2.30 [SCOPED]
+New Routes ('test6') = <IPv4RouteList[18]> = {
  0. Net 0.0.0.0/0 Gate 17.255.96.1 Ifp en2 Ifa 17.255.98.164
  1. Net 0.0.0.0/0 Gate 17.202.40.1 Ifp en0 Ifa 17.202.42.113 [SCOPED]
  2. Net 0.0.0.0/0 Gate 17.202.40.1 Ifp en1 Ifa 17.202.42.111 [SCOPED]
- 3. Net 0.0.0.0/0 Ifp fw0 Ifa 169.254.11.33 [SCOPED]
- 4. Net 17.202.40.0/22 Ifp en0 Ifa 17.202.42.113
- 5. Net 17.202.40.0/22 Ifp en1 Ifa 17.202.42.111 [SCOPED]
- 6. Net 17.202.40.1/32 Ifp en0 Ifa 17.202.42.113
- 7. Net 17.202.40.1/32 Ifp en1 Ifa 17.202.42.111 [SCOPED]
- 8. Net 17.255.96.0/20 Ifp en2 Ifa 17.255.98.164
- 9. Net 17.255.96.1/32 Ifp en2 Ifa 17.255.98.164
+ 3. Net 17.202.40.0/22 Ifp en0 Ifa 17.202.42.113
+ 4. Net 17.202.40.0/22 Ifp en1 Ifa 17.202.42.111 [SCOPED]
+ 5. Net 17.202.40.1/32 Ifp en0 Ifa 17.202.42.113
+ 6. Net 17.202.40.1/32 Ifp en1 Ifa 17.202.42.111 [SCOPED]
+ 7. Net 17.255.96.0/20 Ifp en2 Ifa 17.255.98.164
+ 8. Net 17.255.96.1/32 Ifp en2 Ifa 17.255.98.164
+ 9. Net 169.254.0.0/16 Ifp fw0 Ifa 169.254.11.33 [last]
+10. Net 224.0.0.0/4 Ifp en2 Ifa 17.255.98.164
+11. Net 224.0.0.0/4 Ifp en0 Ifa 17.202.42.113 [SCOPED]
+12. Net 224.0.0.0/4 Ifp en1 Ifa 17.202.42.111 [SCOPED]
+13. Net 224.0.0.0/4 Ifp fw0 Ifa 169.254.11.33 [last] [SCOPED]
+14. Net 255.255.255.255/32 Ifp en2 Ifa 17.255.98.164
+15. Net 255.255.255.255/32 Ifp en0 Ifa 17.202.42.113 [SCOPED]
+16. Net 255.255.255.255/32 Ifp en1 Ifa 17.202.42.111 [SCOPED]
+17. Net 255.255.255.255/32 Ifp fw0 Ifa 169.254.11.33 [last] [SCOPED]
 }
 Remove old[0]: Net 0.0.0.0/0 Gate 10.0.0.1 Ifp en0 Ifa 10.0.0.10
 Remove old[1]: Net 0.0.0.0/0 Gate 10.0.0.1 Ifp en1 Ifa 10.0.0.20 [SCOPED]
@@ -1709,42 +2351,72 @@ Remove old[5]: Net 10.0.0.1/32 Ifp en0 Ifa 10.0.0.10
 Remove old[6]: Net 10.0.0.1/32 Ifp en1 Ifa 10.0.0.20 [SCOPED]
 Remove old[7]: Net 192.168.2.0/24 Ifp fw0 Ifa 192.168.2.30
 Remove old[8]: Net 192.168.2.1/32 Ifp fw0 Ifa 192.168.2.30
-Add new[9]: Net 17.255.96.1/32 Ifp en2 Ifa 17.255.98.164
+Remove old[9]: Net 224.0.0.0/4 Ifp en0 Ifa 10.0.0.10
+Remove old[10]: Net 224.0.0.0/4 Ifp en1 Ifa 10.0.0.20 [SCOPED]
+Remove old[11]: Net 224.0.0.0/4 Ifp fw0 Ifa 192.168.2.30 [SCOPED]
+Remove old[12]: Net 255.255.255.255/32 Ifp en0 Ifa 10.0.0.10
+Remove old[13]: Net 255.255.255.255/32 Ifp en1 Ifa 10.0.0.20 [SCOPED]
+Remove old[14]: Net 255.255.255.255/32 Ifp fw0 Ifa 192.168.2.30 [SCOPED]
+Add new[8]: Net 17.255.96.1/32 Ifp en2 Ifa 17.255.98.164
 Add new[0]: Net 0.0.0.0/0 Gate 17.255.96.1 Ifp en2 Ifa 17.255.98.164
-Add new[6]: Net 17.202.40.1/32 Ifp en0 Ifa 17.202.42.113
+Add new[5]: Net 17.202.40.1/32 Ifp en0 Ifa 17.202.42.113
 Add new[1]: Net 0.0.0.0/0 Gate 17.202.40.1 Ifp en0 Ifa 17.202.42.113 [SCOPED]
-Add new[7]: Net 17.202.40.1/32 Ifp en1 Ifa 17.202.42.111 [SCOPED]
+Add new[6]: Net 17.202.40.1/32 Ifp en1 Ifa 17.202.42.111 [SCOPED]
 Add new[2]: Net 0.0.0.0/0 Gate 17.202.40.1 Ifp en1 Ifa 17.202.42.111 [SCOPED]
-Add new[3]: Net 0.0.0.0/0 Ifp fw0 Ifa 169.254.11.33 [SCOPED]
-Add new[4]: Net 17.202.40.0/22 Ifp en0 Ifa 17.202.42.113
-Add new[5]: Net 17.202.40.0/22 Ifp en1 Ifa 17.202.42.111 [SCOPED]
-Add new[8]: Net 17.255.96.0/20 Ifp en2 Ifa 17.255.98.164
+Add new[3]: Net 17.202.40.0/22 Ifp en0 Ifa 17.202.42.113
+Add new[4]: Net 17.202.40.0/22 Ifp en1 Ifa 17.202.42.111 [SCOPED]
+Add new[7]: Net 17.255.96.0/20 Ifp en2 Ifa 17.255.98.164
+Add new[9]: Net 169.254.0.0/16 Ifp fw0 Ifa 169.254.11.33 [last]
+Add new[10]: Net 224.0.0.0/4 Ifp en2 Ifa 17.255.98.164
+Add new[11]: Net 224.0.0.0/4 Ifp en0 Ifa 17.202.42.113 [SCOPED]
+Add new[12]: Net 224.0.0.0/4 Ifp en1 Ifa 17.202.42.111 [SCOPED]
+Add new[13]: Net 224.0.0.0/4 Ifp fw0 Ifa 169.254.11.33 [last] [SCOPED]
+Add new[14]: Net 255.255.255.255/32 Ifp en2 Ifa 17.255.98.164
+Add new[15]: Net 255.255.255.255/32 Ifp en0 Ifa 17.202.42.113 [SCOPED]
+Add new[16]: Net 255.255.255.255/32 Ifp en1 Ifa 17.202.42.111 [SCOPED]
+Add new[17]: Net 255.255.255.255/32 Ifp fw0 Ifa 169.254.11.33 [last] [SCOPED]
 =================> Apply 'test1', 'test6' End <=================
 
 =================> Apply 'test6', 'test1' Begin <=================
-Old routes ('test6') = <IPv4RouteList[10]> = {
+Old routes ('test6') = <IPv4RouteList[18]> = {
  0. Net 0.0.0.0/0 Gate 17.255.96.1 Ifp en2 Ifa 17.255.98.164
  1. Net 0.0.0.0/0 Gate 17.202.40.1 Ifp en0 Ifa 17.202.42.113 [SCOPED]
  2. Net 0.0.0.0/0 Gate 17.202.40.1 Ifp en1 Ifa 17.202.42.111 [SCOPED]
- 3. Net 0.0.0.0/0 Ifp fw0 Ifa 169.254.11.33 [SCOPED]
- 4. Net 17.202.40.0/22 Ifp en0 Ifa 17.202.42.113
- 5. Net 17.202.40.0/22 Ifp en1 Ifa 17.202.42.111 [SCOPED]
- 6. Net 17.202.40.1/32 Ifp en0 Ifa 17.202.42.113
- 7. Net 17.202.40.1/32 Ifp en1 Ifa 17.202.42.111 [SCOPED]
- 8. Net 17.255.96.0/20 Ifp en2 Ifa 17.255.98.164
- 9. Net 17.255.96.1/32 Ifp en2 Ifa 17.255.98.164
-}
-Add new[9]: Net 17.255.96.1/32 Ifp en2 Ifa 17.255.98.164
+ 3. Net 17.202.40.0/22 Ifp en0 Ifa 17.202.42.113
+ 4. Net 17.202.40.0/22 Ifp en1 Ifa 17.202.42.111 [SCOPED]
+ 5. Net 17.202.40.1/32 Ifp en0 Ifa 17.202.42.113
+ 6. Net 17.202.40.1/32 Ifp en1 Ifa 17.202.42.111 [SCOPED]
+ 7. Net 17.255.96.0/20 Ifp en2 Ifa 17.255.98.164
+ 8. Net 17.255.96.1/32 Ifp en2 Ifa 17.255.98.164
+ 9. Net 169.254.0.0/16 Ifp fw0 Ifa 169.254.11.33 [last]
+10. Net 224.0.0.0/4 Ifp en2 Ifa 17.255.98.164
+11. Net 224.0.0.0/4 Ifp en0 Ifa 17.202.42.113 [SCOPED]
+12. Net 224.0.0.0/4 Ifp en1 Ifa 17.202.42.111 [SCOPED]
+13. Net 224.0.0.0/4 Ifp fw0 Ifa 169.254.11.33 [last] [SCOPED]
+14. Net 255.255.255.255/32 Ifp en2 Ifa 17.255.98.164
+15. Net 255.255.255.255/32 Ifp en0 Ifa 17.202.42.113 [SCOPED]
+16. Net 255.255.255.255/32 Ifp en1 Ifa 17.202.42.111 [SCOPED]
+17. Net 255.255.255.255/32 Ifp fw0 Ifa 169.254.11.33 [last] [SCOPED]
+}
+Add new[8]: Net 17.255.96.1/32 Ifp en2 Ifa 17.255.98.164
 Add new[0]: Net 0.0.0.0/0 Gate 17.255.96.1 Ifp en2 Ifa 17.255.98.164
-Add new[6]: Net 17.202.40.1/32 Ifp en0 Ifa 17.202.42.113
+Add new[5]: Net 17.202.40.1/32 Ifp en0 Ifa 17.202.42.113
 Add new[1]: Net 0.0.0.0/0 Gate 17.202.40.1 Ifp en0 Ifa 17.202.42.113 [SCOPED]
-Add new[7]: Net 17.202.40.1/32 Ifp en1 Ifa 17.202.42.111 [SCOPED]
+Add new[6]: Net 17.202.40.1/32 Ifp en1 Ifa 17.202.42.111 [SCOPED]
 Add new[2]: Net 0.0.0.0/0 Gate 17.202.40.1 Ifp en1 Ifa 17.202.42.111 [SCOPED]
-Add new[3]: Net 0.0.0.0/0 Ifp fw0 Ifa 169.254.11.33 [SCOPED]
-Add new[4]: Net 17.202.40.0/22 Ifp en0 Ifa 17.202.42.113
-Add new[5]: Net 17.202.40.0/22 Ifp en1 Ifa 17.202.42.111 [SCOPED]
-Add new[8]: Net 17.255.96.0/20 Ifp en2 Ifa 17.255.98.164
-New Routes ('test1') = <IPv4RouteList[9]> = {
+Add new[3]: Net 17.202.40.0/22 Ifp en0 Ifa 17.202.42.113
+Add new[4]: Net 17.202.40.0/22 Ifp en1 Ifa 17.202.42.111 [SCOPED]
+Add new[7]: Net 17.255.96.0/20 Ifp en2 Ifa 17.255.98.164
+Add new[9]: Net 169.254.0.0/16 Ifp fw0 Ifa 169.254.11.33 [last]
+Add new[10]: Net 224.0.0.0/4 Ifp en2 Ifa 17.255.98.164
+Add new[11]: Net 224.0.0.0/4 Ifp en0 Ifa 17.202.42.113 [SCOPED]
+Add new[12]: Net 224.0.0.0/4 Ifp en1 Ifa 17.202.42.111 [SCOPED]
+Add new[13]: Net 224.0.0.0/4 Ifp fw0 Ifa 169.254.11.33 [last] [SCOPED]
+Add new[14]: Net 255.255.255.255/32 Ifp en2 Ifa 17.255.98.164
+Add new[15]: Net 255.255.255.255/32 Ifp en0 Ifa 17.202.42.113 [SCOPED]
+Add new[16]: Net 255.255.255.255/32 Ifp en1 Ifa 17.202.42.111 [SCOPED]
+Add new[17]: Net 255.255.255.255/32 Ifp fw0 Ifa 169.254.11.33 [last] [SCOPED]
+New Routes ('test1') = <IPv4RouteList[15]> = {
  0. Net 0.0.0.0/0 Gate 10.0.0.1 Ifp en0 Ifa 10.0.0.10
  1. Net 0.0.0.0/0 Gate 10.0.0.1 Ifp en1 Ifa 10.0.0.20 [SCOPED]
  2. Net 0.0.0.0/0 Gate 192.168.2.1 Ifp fw0 Ifa 192.168.2.30 [SCOPED]
@@ -1754,17 +2426,31 @@ New Routes ('test1') = <IPv4RouteList[9]> = {
  6. Net 10.0.0.1/32 Ifp en1 Ifa 10.0.0.20 [SCOPED]
  7. Net 192.168.2.0/24 Ifp fw0 Ifa 192.168.2.30
  8. Net 192.168.2.1/32 Ifp fw0 Ifa 192.168.2.30
+ 9. Net 224.0.0.0/4 Ifp en0 Ifa 10.0.0.10
+10. Net 224.0.0.0/4 Ifp en1 Ifa 10.0.0.20 [SCOPED]
+11. Net 224.0.0.0/4 Ifp fw0 Ifa 192.168.2.30 [SCOPED]
+12. Net 255.255.255.255/32 Ifp en0 Ifa 10.0.0.10
+13. Net 255.255.255.255/32 Ifp en1 Ifa 10.0.0.20 [SCOPED]
+14. Net 255.255.255.255/32 Ifp fw0 Ifa 192.168.2.30 [SCOPED]
 }
 Remove old[0]: Net 0.0.0.0/0 Gate 17.255.96.1 Ifp en2 Ifa 17.255.98.164
 Remove old[1]: Net 0.0.0.0/0 Gate 17.202.40.1 Ifp en0 Ifa 17.202.42.113 [SCOPED]
 Remove old[2]: Net 0.0.0.0/0 Gate 17.202.40.1 Ifp en1 Ifa 17.202.42.111 [SCOPED]
-Remove old[3]: Net 0.0.0.0/0 Ifp fw0 Ifa 169.254.11.33 [SCOPED]
-Remove old[4]: Net 17.202.40.0/22 Ifp en0 Ifa 17.202.42.113
-Remove old[5]: Net 17.202.40.0/22 Ifp en1 Ifa 17.202.42.111 [SCOPED]
-Remove old[6]: Net 17.202.40.1/32 Ifp en0 Ifa 17.202.42.113
-Remove old[7]: Net 17.202.40.1/32 Ifp en1 Ifa 17.202.42.111 [SCOPED]
-Remove old[8]: Net 17.255.96.0/20 Ifp en2 Ifa 17.255.98.164
-Remove old[9]: Net 17.255.96.1/32 Ifp en2 Ifa 17.255.98.164
+Remove old[3]: Net 17.202.40.0/22 Ifp en0 Ifa 17.202.42.113
+Remove old[4]: Net 17.202.40.0/22 Ifp en1 Ifa 17.202.42.111 [SCOPED]
+Remove old[5]: Net 17.202.40.1/32 Ifp en0 Ifa 17.202.42.113
+Remove old[6]: Net 17.202.40.1/32 Ifp en1 Ifa 17.202.42.111 [SCOPED]
+Remove old[7]: Net 17.255.96.0/20 Ifp en2 Ifa 17.255.98.164
+Remove old[8]: Net 17.255.96.1/32 Ifp en2 Ifa 17.255.98.164
+Remove old[9]: Net 169.254.0.0/16 Ifp fw0 Ifa 169.254.11.33 [last]
+Remove old[10]: Net 224.0.0.0/4 Ifp en2 Ifa 17.255.98.164
+Remove old[11]: Net 224.0.0.0/4 Ifp en0 Ifa 17.202.42.113 [SCOPED]
+Remove old[12]: Net 224.0.0.0/4 Ifp en1 Ifa 17.202.42.111 [SCOPED]
+Remove old[13]: Net 224.0.0.0/4 Ifp fw0 Ifa 169.254.11.33 [last] [SCOPED]
+Remove old[14]: Net 255.255.255.255/32 Ifp en2 Ifa 17.255.98.164
+Remove old[15]: Net 255.255.255.255/32 Ifp en0 Ifa 17.202.42.113 [SCOPED]
+Remove old[16]: Net 255.255.255.255/32 Ifp en1 Ifa 17.202.42.111 [SCOPED]
+Remove old[17]: Net 255.255.255.255/32 Ifp fw0 Ifa 169.254.11.33 [last] [SCOPED]
 Add new[5]: Net 10.0.0.1/32 Ifp en0 Ifa 10.0.0.10
 Add new[0]: Net 0.0.0.0/0 Gate 10.0.0.1 Ifp en0 Ifa 10.0.0.10
 Add new[6]: Net 10.0.0.1/32 Ifp en1 Ifa 10.0.0.20 [SCOPED]
@@ -1774,10 +2460,16 @@ Add new[2]: Net 0.0.0.0/0 Gate 192.168.2.1 Ifp fw0 Ifa 192.168.2.30 [SCOPED]
 Add new[3]: Net 10.0.0.0/24 Ifp en0 Ifa 10.0.0.10
 Add new[4]: Net 10.0.0.0/24 Ifp en1 Ifa 10.0.0.20 [SCOPED]
 Add new[7]: Net 192.168.2.0/24 Ifp fw0 Ifa 192.168.2.30
+Add new[9]: Net 224.0.0.0/4 Ifp en0 Ifa 10.0.0.10
+Add new[10]: Net 224.0.0.0/4 Ifp en1 Ifa 10.0.0.20 [SCOPED]
+Add new[11]: Net 224.0.0.0/4 Ifp fw0 Ifa 192.168.2.30 [SCOPED]
+Add new[12]: Net 255.255.255.255/32 Ifp en0 Ifa 10.0.0.10
+Add new[13]: Net 255.255.255.255/32 Ifp en1 Ifa 10.0.0.20 [SCOPED]
+Add new[14]: Net 255.255.255.255/32 Ifp fw0 Ifa 192.168.2.30 [SCOPED]
 =================> Apply 'test6', 'test1' End <=================
 
 =================> Apply 'test1', 'test7' Begin <=================
-Old routes ('test1') = <IPv4RouteList[9]> = {
+Old routes ('test1') = <IPv4RouteList[15]> = {
  0. Net 0.0.0.0/0 Gate 10.0.0.1 Ifp en0 Ifa 10.0.0.10
  1. Net 0.0.0.0/0 Gate 10.0.0.1 Ifp en1 Ifa 10.0.0.20 [SCOPED]
  2. Net 0.0.0.0/0 Gate 192.168.2.1 Ifp fw0 Ifa 192.168.2.30 [SCOPED]
@@ -1787,6 +2479,12 @@ Old routes ('test1') = <IPv4RouteList[9]> = {
  6. Net 10.0.0.1/32 Ifp en1 Ifa 10.0.0.20 [SCOPED]
  7. Net 192.168.2.0/24 Ifp fw0 Ifa 192.168.2.30
  8. Net 192.168.2.1/32 Ifp fw0 Ifa 192.168.2.30
+ 9. Net 224.0.0.0/4 Ifp en0 Ifa 10.0.0.10
+10. Net 224.0.0.0/4 Ifp en1 Ifa 10.0.0.20 [SCOPED]
+11. Net 224.0.0.0/4 Ifp fw0 Ifa 192.168.2.30 [SCOPED]
+12. Net 255.255.255.255/32 Ifp en0 Ifa 10.0.0.10
+13. Net 255.255.255.255/32 Ifp en1 Ifa 10.0.0.20 [SCOPED]
+14. Net 255.255.255.255/32 Ifp fw0 Ifa 192.168.2.30 [SCOPED]
 }
 Add new[5]: Net 10.0.0.1/32 Ifp en0 Ifa 10.0.0.10
 Add new[0]: Net 0.0.0.0/0 Gate 10.0.0.1 Ifp en0 Ifa 10.0.0.10
@@ -1797,17 +2495,31 @@ Add new[2]: Net 0.0.0.0/0 Gate 192.168.2.1 Ifp fw0 Ifa 192.168.2.30 [SCOPED]
 Add new[3]: Net 10.0.0.0/24 Ifp en0 Ifa 10.0.0.10
 Add new[4]: Net 10.0.0.0/24 Ifp en1 Ifa 10.0.0.20 [SCOPED]
 Add new[7]: Net 192.168.2.0/24 Ifp fw0 Ifa 192.168.2.30
-New Routes ('test7') = <IPv4RouteList[10]> = {
+Add new[9]: Net 224.0.0.0/4 Ifp en0 Ifa 10.0.0.10
+Add new[10]: Net 224.0.0.0/4 Ifp en1 Ifa 10.0.0.20 [SCOPED]
+Add new[11]: Net 224.0.0.0/4 Ifp fw0 Ifa 192.168.2.30 [SCOPED]
+Add new[12]: Net 255.255.255.255/32 Ifp en0 Ifa 10.0.0.10
+Add new[13]: Net 255.255.255.255/32 Ifp en1 Ifa 10.0.0.20 [SCOPED]
+Add new[14]: Net 255.255.255.255/32 Ifp fw0 Ifa 192.168.2.30 [SCOPED]
+New Routes ('test7') = <IPv4RouteList[18]> = {
  0. Net 0.0.0.0/0 Gate 17.255.96.1 Ifp en2 Ifa 17.255.98.164
  1. Net 0.0.0.0/0 Gate 17.202.40.1 Ifp en1 Ifa 17.202.42.111 [SCOPED]
  2. Net 0.0.0.0/0 Gate 17.202.40.1 Ifp en0 Ifa 17.202.42.113 [SCOPED]
- 3. Net 0.0.0.0/0 Ifp fw0 Ifa 169.254.11.33 [SCOPED]
- 4. Net 17.202.40.0/22 Ifp en1 Ifa 17.202.42.111
- 5. Net 17.202.40.0/22 Ifp en0 Ifa 17.202.42.113 [SCOPED]
- 6. Net 17.202.40.1/32 Ifp en1 Ifa 17.202.42.111
- 7. Net 17.202.40.1/32 Ifp en0 Ifa 17.202.42.113 [SCOPED]
- 8. Net 17.255.96.0/20 Ifp en2 Ifa 17.255.98.164
- 9. Net 17.255.96.1/32 Ifp en2 Ifa 17.255.98.164
+ 3. Net 17.202.40.0/22 Ifp en1 Ifa 17.202.42.111
+ 4. Net 17.202.40.0/22 Ifp en0 Ifa 17.202.42.113 [SCOPED]
+ 5. Net 17.202.40.1/32 Ifp en1 Ifa 17.202.42.111
+ 6. Net 17.202.40.1/32 Ifp en0 Ifa 17.202.42.113 [SCOPED]
+ 7. Net 17.255.96.0/20 Ifp en2 Ifa 17.255.98.164
+ 8. Net 17.255.96.1/32 Ifp en2 Ifa 17.255.98.164
+ 9. Net 169.254.0.0/16 Ifp fw0 Ifa 169.254.11.33 [last]
+10. Net 224.0.0.0/4 Ifp en2 Ifa 17.255.98.164
+11. Net 224.0.0.0/4 Ifp en1 Ifa 17.202.42.111 [SCOPED]
+12. Net 224.0.0.0/4 Ifp en0 Ifa 17.202.42.113 [SCOPED]
+13. Net 224.0.0.0/4 Ifp fw0 Ifa 169.254.11.33 [last] [SCOPED]
+14. Net 255.255.255.255/32 Ifp en2 Ifa 17.255.98.164
+15. Net 255.255.255.255/32 Ifp en1 Ifa 17.202.42.111 [SCOPED]
+16. Net 255.255.255.255/32 Ifp en0 Ifa 17.202.42.113 [SCOPED]
+17. Net 255.255.255.255/32 Ifp fw0 Ifa 169.254.11.33 [last] [SCOPED]
 }
 Remove old[0]: Net 0.0.0.0/0 Gate 10.0.0.1 Ifp en0 Ifa 10.0.0.10
 Remove old[1]: Net 0.0.0.0/0 Gate 10.0.0.1 Ifp en1 Ifa 10.0.0.20 [SCOPED]
@@ -1818,42 +2530,72 @@ Remove old[5]: Net 10.0.0.1/32 Ifp en0 Ifa 10.0.0.10
 Remove old[6]: Net 10.0.0.1/32 Ifp en1 Ifa 10.0.0.20 [SCOPED]
 Remove old[7]: Net 192.168.2.0/24 Ifp fw0 Ifa 192.168.2.30
 Remove old[8]: Net 192.168.2.1/32 Ifp fw0 Ifa 192.168.2.30
-Add new[9]: Net 17.255.96.1/32 Ifp en2 Ifa 17.255.98.164
+Remove old[9]: Net 224.0.0.0/4 Ifp en0 Ifa 10.0.0.10
+Remove old[10]: Net 224.0.0.0/4 Ifp en1 Ifa 10.0.0.20 [SCOPED]
+Remove old[11]: Net 224.0.0.0/4 Ifp fw0 Ifa 192.168.2.30 [SCOPED]
+Remove old[12]: Net 255.255.255.255/32 Ifp en0 Ifa 10.0.0.10
+Remove old[13]: Net 255.255.255.255/32 Ifp en1 Ifa 10.0.0.20 [SCOPED]
+Remove old[14]: Net 255.255.255.255/32 Ifp fw0 Ifa 192.168.2.30 [SCOPED]
+Add new[8]: Net 17.255.96.1/32 Ifp en2 Ifa 17.255.98.164
 Add new[0]: Net 0.0.0.0/0 Gate 17.255.96.1 Ifp en2 Ifa 17.255.98.164
-Add new[6]: Net 17.202.40.1/32 Ifp en1 Ifa 17.202.42.111
+Add new[5]: Net 17.202.40.1/32 Ifp en1 Ifa 17.202.42.111
 Add new[1]: Net 0.0.0.0/0 Gate 17.202.40.1 Ifp en1 Ifa 17.202.42.111 [SCOPED]
-Add new[7]: Net 17.202.40.1/32 Ifp en0 Ifa 17.202.42.113 [SCOPED]
+Add new[6]: Net 17.202.40.1/32 Ifp en0 Ifa 17.202.42.113 [SCOPED]
 Add new[2]: Net 0.0.0.0/0 Gate 17.202.40.1 Ifp en0 Ifa 17.202.42.113 [SCOPED]
-Add new[3]: Net 0.0.0.0/0 Ifp fw0 Ifa 169.254.11.33 [SCOPED]
-Add new[4]: Net 17.202.40.0/22 Ifp en1 Ifa 17.202.42.111
-Add new[5]: Net 17.202.40.0/22 Ifp en0 Ifa 17.202.42.113 [SCOPED]
-Add new[8]: Net 17.255.96.0/20 Ifp en2 Ifa 17.255.98.164
+Add new[3]: Net 17.202.40.0/22 Ifp en1 Ifa 17.202.42.111
+Add new[4]: Net 17.202.40.0/22 Ifp en0 Ifa 17.202.42.113 [SCOPED]
+Add new[7]: Net 17.255.96.0/20 Ifp en2 Ifa 17.255.98.164
+Add new[9]: Net 169.254.0.0/16 Ifp fw0 Ifa 169.254.11.33 [last]
+Add new[10]: Net 224.0.0.0/4 Ifp en2 Ifa 17.255.98.164
+Add new[11]: Net 224.0.0.0/4 Ifp en1 Ifa 17.202.42.111 [SCOPED]
+Add new[12]: Net 224.0.0.0/4 Ifp en0 Ifa 17.202.42.113 [SCOPED]
+Add new[13]: Net 224.0.0.0/4 Ifp fw0 Ifa 169.254.11.33 [last] [SCOPED]
+Add new[14]: Net 255.255.255.255/32 Ifp en2 Ifa 17.255.98.164
+Add new[15]: Net 255.255.255.255/32 Ifp en1 Ifa 17.202.42.111 [SCOPED]
+Add new[16]: Net 255.255.255.255/32 Ifp en0 Ifa 17.202.42.113 [SCOPED]
+Add new[17]: Net 255.255.255.255/32 Ifp fw0 Ifa 169.254.11.33 [last] [SCOPED]
 =================> Apply 'test1', 'test7' End <=================
 
 =================> Apply 'test7', 'test1' Begin <=================
-Old routes ('test7') = <IPv4RouteList[10]> = {
+Old routes ('test7') = <IPv4RouteList[18]> = {
  0. Net 0.0.0.0/0 Gate 17.255.96.1 Ifp en2 Ifa 17.255.98.164
  1. Net 0.0.0.0/0 Gate 17.202.40.1 Ifp en1 Ifa 17.202.42.111 [SCOPED]
  2. Net 0.0.0.0/0 Gate 17.202.40.1 Ifp en0 Ifa 17.202.42.113 [SCOPED]
- 3. Net 0.0.0.0/0 Ifp fw0 Ifa 169.254.11.33 [SCOPED]
- 4. Net 17.202.40.0/22 Ifp en1 Ifa 17.202.42.111
- 5. Net 17.202.40.0/22 Ifp en0 Ifa 17.202.42.113 [SCOPED]
- 6. Net 17.202.40.1/32 Ifp en1 Ifa 17.202.42.111
- 7. Net 17.202.40.1/32 Ifp en0 Ifa 17.202.42.113 [SCOPED]
- 8. Net 17.255.96.0/20 Ifp en2 Ifa 17.255.98.164
- 9. Net 17.255.96.1/32 Ifp en2 Ifa 17.255.98.164
-}
-Add new[9]: Net 17.255.96.1/32 Ifp en2 Ifa 17.255.98.164
+ 3. Net 17.202.40.0/22 Ifp en1 Ifa 17.202.42.111
+ 4. Net 17.202.40.0/22 Ifp en0 Ifa 17.202.42.113 [SCOPED]
+ 5. Net 17.202.40.1/32 Ifp en1 Ifa 17.202.42.111
+ 6. Net 17.202.40.1/32 Ifp en0 Ifa 17.202.42.113 [SCOPED]
+ 7. Net 17.255.96.0/20 Ifp en2 Ifa 17.255.98.164
+ 8. Net 17.255.96.1/32 Ifp en2 Ifa 17.255.98.164
+ 9. Net 169.254.0.0/16 Ifp fw0 Ifa 169.254.11.33 [last]
+10. Net 224.0.0.0/4 Ifp en2 Ifa 17.255.98.164
+11. Net 224.0.0.0/4 Ifp en1 Ifa 17.202.42.111 [SCOPED]
+12. Net 224.0.0.0/4 Ifp en0 Ifa 17.202.42.113 [SCOPED]
+13. Net 224.0.0.0/4 Ifp fw0 Ifa 169.254.11.33 [last] [SCOPED]
+14. Net 255.255.255.255/32 Ifp en2 Ifa 17.255.98.164
+15. Net 255.255.255.255/32 Ifp en1 Ifa 17.202.42.111 [SCOPED]
+16. Net 255.255.255.255/32 Ifp en0 Ifa 17.202.42.113 [SCOPED]
+17. Net 255.255.255.255/32 Ifp fw0 Ifa 169.254.11.33 [last] [SCOPED]
+}
+Add new[8]: Net 17.255.96.1/32 Ifp en2 Ifa 17.255.98.164
 Add new[0]: Net 0.0.0.0/0 Gate 17.255.96.1 Ifp en2 Ifa 17.255.98.164
-Add new[6]: Net 17.202.40.1/32 Ifp en1 Ifa 17.202.42.111
+Add new[5]: Net 17.202.40.1/32 Ifp en1 Ifa 17.202.42.111
 Add new[1]: Net 0.0.0.0/0 Gate 17.202.40.1 Ifp en1 Ifa 17.202.42.111 [SCOPED]
-Add new[7]: Net 17.202.40.1/32 Ifp en0 Ifa 17.202.42.113 [SCOPED]
+Add new[6]: Net 17.202.40.1/32 Ifp en0 Ifa 17.202.42.113 [SCOPED]
 Add new[2]: Net 0.0.0.0/0 Gate 17.202.40.1 Ifp en0 Ifa 17.202.42.113 [SCOPED]
-Add new[3]: Net 0.0.0.0/0 Ifp fw0 Ifa 169.254.11.33 [SCOPED]
-Add new[4]: Net 17.202.40.0/22 Ifp en1 Ifa 17.202.42.111
-Add new[5]: Net 17.202.40.0/22 Ifp en0 Ifa 17.202.42.113 [SCOPED]
-Add new[8]: Net 17.255.96.0/20 Ifp en2 Ifa 17.255.98.164
-New Routes ('test1') = <IPv4RouteList[9]> = {
+Add new[3]: Net 17.202.40.0/22 Ifp en1 Ifa 17.202.42.111
+Add new[4]: Net 17.202.40.0/22 Ifp en0 Ifa 17.202.42.113 [SCOPED]
+Add new[7]: Net 17.255.96.0/20 Ifp en2 Ifa 17.255.98.164
+Add new[9]: Net 169.254.0.0/16 Ifp fw0 Ifa 169.254.11.33 [last]
+Add new[10]: Net 224.0.0.0/4 Ifp en2 Ifa 17.255.98.164
+Add new[11]: Net 224.0.0.0/4 Ifp en1 Ifa 17.202.42.111 [SCOPED]
+Add new[12]: Net 224.0.0.0/4 Ifp en0 Ifa 17.202.42.113 [SCOPED]
+Add new[13]: Net 224.0.0.0/4 Ifp fw0 Ifa 169.254.11.33 [last] [SCOPED]
+Add new[14]: Net 255.255.255.255/32 Ifp en2 Ifa 17.255.98.164
+Add new[15]: Net 255.255.255.255/32 Ifp en1 Ifa 17.202.42.111 [SCOPED]
+Add new[16]: Net 255.255.255.255/32 Ifp en0 Ifa 17.202.42.113 [SCOPED]
+Add new[17]: Net 255.255.255.255/32 Ifp fw0 Ifa 169.254.11.33 [last] [SCOPED]
+New Routes ('test1') = <IPv4RouteList[15]> = {
  0. Net 0.0.0.0/0 Gate 10.0.0.1 Ifp en0 Ifa 10.0.0.10
  1. Net 0.0.0.0/0 Gate 10.0.0.1 Ifp en1 Ifa 10.0.0.20 [SCOPED]
  2. Net 0.0.0.0/0 Gate 192.168.2.1 Ifp fw0 Ifa 192.168.2.30 [SCOPED]
@@ -1863,17 +2605,31 @@ New Routes ('test1') = <IPv4RouteList[9]> = {
  6. Net 10.0.0.1/32 Ifp en1 Ifa 10.0.0.20 [SCOPED]
  7. Net 192.168.2.0/24 Ifp fw0 Ifa 192.168.2.30
  8. Net 192.168.2.1/32 Ifp fw0 Ifa 192.168.2.30
+ 9. Net 224.0.0.0/4 Ifp en0 Ifa 10.0.0.10
+10. Net 224.0.0.0/4 Ifp en1 Ifa 10.0.0.20 [SCOPED]
+11. Net 224.0.0.0/4 Ifp fw0 Ifa 192.168.2.30 [SCOPED]
+12. Net 255.255.255.255/32 Ifp en0 Ifa 10.0.0.10
+13. Net 255.255.255.255/32 Ifp en1 Ifa 10.0.0.20 [SCOPED]
+14. Net 255.255.255.255/32 Ifp fw0 Ifa 192.168.2.30 [SCOPED]
 }
 Remove old[0]: Net 0.0.0.0/0 Gate 17.255.96.1 Ifp en2 Ifa 17.255.98.164
 Remove old[1]: Net 0.0.0.0/0 Gate 17.202.40.1 Ifp en1 Ifa 17.202.42.111 [SCOPED]
 Remove old[2]: Net 0.0.0.0/0 Gate 17.202.40.1 Ifp en0 Ifa 17.202.42.113 [SCOPED]
-Remove old[3]: Net 0.0.0.0/0 Ifp fw0 Ifa 169.254.11.33 [SCOPED]
-Remove old[4]: Net 17.202.40.0/22 Ifp en1 Ifa 17.202.42.111
-Remove old[5]: Net 17.202.40.0/22 Ifp en0 Ifa 17.202.42.113 [SCOPED]
-Remove old[6]: Net 17.202.40.1/32 Ifp en1 Ifa 17.202.42.111
-Remove old[7]: Net 17.202.40.1/32 Ifp en0 Ifa 17.202.42.113 [SCOPED]
-Remove old[8]: Net 17.255.96.0/20 Ifp en2 Ifa 17.255.98.164
-Remove old[9]: Net 17.255.96.1/32 Ifp en2 Ifa 17.255.98.164
+Remove old[3]: Net 17.202.40.0/22 Ifp en1 Ifa 17.202.42.111
+Remove old[4]: Net 17.202.40.0/22 Ifp en0 Ifa 17.202.42.113 [SCOPED]
+Remove old[5]: Net 17.202.40.1/32 Ifp en1 Ifa 17.202.42.111
+Remove old[6]: Net 17.202.40.1/32 Ifp en0 Ifa 17.202.42.113 [SCOPED]
+Remove old[7]: Net 17.255.96.0/20 Ifp en2 Ifa 17.255.98.164
+Remove old[8]: Net 17.255.96.1/32 Ifp en2 Ifa 17.255.98.164
+Remove old[9]: Net 169.254.0.0/16 Ifp fw0 Ifa 169.254.11.33 [last]
+Remove old[10]: Net 224.0.0.0/4 Ifp en2 Ifa 17.255.98.164
+Remove old[11]: Net 224.0.0.0/4 Ifp en1 Ifa 17.202.42.111 [SCOPED]
+Remove old[12]: Net 224.0.0.0/4 Ifp en0 Ifa 17.202.42.113 [SCOPED]
+Remove old[13]: Net 224.0.0.0/4 Ifp fw0 Ifa 169.254.11.33 [last] [SCOPED]
+Remove old[14]: Net 255.255.255.255/32 Ifp en2 Ifa 17.255.98.164
+Remove old[15]: Net 255.255.255.255/32 Ifp en1 Ifa 17.202.42.111 [SCOPED]
+Remove old[16]: Net 255.255.255.255/32 Ifp en0 Ifa 17.202.42.113 [SCOPED]
+Remove old[17]: Net 255.255.255.255/32 Ifp fw0 Ifa 169.254.11.33 [last] [SCOPED]
 Add new[5]: Net 10.0.0.1/32 Ifp en0 Ifa 10.0.0.10
 Add new[0]: Net 0.0.0.0/0 Gate 10.0.0.1 Ifp en0 Ifa 10.0.0.10
 Add new[6]: Net 10.0.0.1/32 Ifp en1 Ifa 10.0.0.20 [SCOPED]
@@ -1883,10 +2639,16 @@ Add new[2]: Net 0.0.0.0/0 Gate 192.168.2.1 Ifp fw0 Ifa 192.168.2.30 [SCOPED]
 Add new[3]: Net 10.0.0.0/24 Ifp en0 Ifa 10.0.0.10
 Add new[4]: Net 10.0.0.0/24 Ifp en1 Ifa 10.0.0.20 [SCOPED]
 Add new[7]: Net 192.168.2.0/24 Ifp fw0 Ifa 192.168.2.30
+Add new[9]: Net 224.0.0.0/4 Ifp en0 Ifa 10.0.0.10
+Add new[10]: Net 224.0.0.0/4 Ifp en1 Ifa 10.0.0.20 [SCOPED]
+Add new[11]: Net 224.0.0.0/4 Ifp fw0 Ifa 192.168.2.30 [SCOPED]
+Add new[12]: Net 255.255.255.255/32 Ifp en0 Ifa 10.0.0.10
+Add new[13]: Net 255.255.255.255/32 Ifp en1 Ifa 10.0.0.20 [SCOPED]
+Add new[14]: Net 255.255.255.255/32 Ifp fw0 Ifa 192.168.2.30 [SCOPED]
 =================> Apply 'test7', 'test1' End <=================
 
 =================> Apply 'test1', 'test8' Begin <=================
-Old routes ('test1') = <IPv4RouteList[9]> = {
+Old routes ('test1') = <IPv4RouteList[15]> = {
  0. Net 0.0.0.0/0 Gate 10.0.0.1 Ifp en0 Ifa 10.0.0.10
  1. Net 0.0.0.0/0 Gate 10.0.0.1 Ifp en1 Ifa 10.0.0.20 [SCOPED]
  2. Net 0.0.0.0/0 Gate 192.168.2.1 Ifp fw0 Ifa 192.168.2.30 [SCOPED]
@@ -1896,6 +2658,12 @@ Old routes ('test1') = <IPv4RouteList[9]> = {
  6. Net 10.0.0.1/32 Ifp en1 Ifa 10.0.0.20 [SCOPED]
  7. Net 192.168.2.0/24 Ifp fw0 Ifa 192.168.2.30
  8. Net 192.168.2.1/32 Ifp fw0 Ifa 192.168.2.30
+ 9. Net 224.0.0.0/4 Ifp en0 Ifa 10.0.0.10
+10. Net 224.0.0.0/4 Ifp en1 Ifa 10.0.0.20 [SCOPED]
+11. Net 224.0.0.0/4 Ifp fw0 Ifa 192.168.2.30 [SCOPED]
+12. Net 255.255.255.255/32 Ifp en0 Ifa 10.0.0.10
+13. Net 255.255.255.255/32 Ifp en1 Ifa 10.0.0.20 [SCOPED]
+14. Net 255.255.255.255/32 Ifp fw0 Ifa 192.168.2.30 [SCOPED]
 }
 Add new[5]: Net 10.0.0.1/32 Ifp en0 Ifa 10.0.0.10
 Add new[0]: Net 0.0.0.0/0 Gate 10.0.0.1 Ifp en0 Ifa 10.0.0.10
@@ -1906,27 +2674,43 @@ Add new[2]: Net 0.0.0.0/0 Gate 192.168.2.1 Ifp fw0 Ifa 192.168.2.30 [SCOPED]
 Add new[3]: Net 10.0.0.0/24 Ifp en0 Ifa 10.0.0.10
 Add new[4]: Net 10.0.0.0/24 Ifp en1 Ifa 10.0.0.20 [SCOPED]
 Add new[7]: Net 192.168.2.0/24 Ifp fw0 Ifa 192.168.2.30
-New Routes ('test8') = <IPv4RouteList[6]> = {
+Add new[9]: Net 224.0.0.0/4 Ifp en0 Ifa 10.0.0.10
+Add new[10]: Net 224.0.0.0/4 Ifp en1 Ifa 10.0.0.20 [SCOPED]
+Add new[11]: Net 224.0.0.0/4 Ifp fw0 Ifa 192.168.2.30 [SCOPED]
+Add new[12]: Net 255.255.255.255/32 Ifp en0 Ifa 10.0.0.10
+Add new[13]: Net 255.255.255.255/32 Ifp en1 Ifa 10.0.0.20 [SCOPED]
+Add new[14]: Net 255.255.255.255/32 Ifp fw0 Ifa 192.168.2.30 [SCOPED]
+New Routes ('test8') = <IPv4RouteList[10]> = {
  0. Net 0.0.0.0/0 Gate 10.0.0.1 Ifp en0 Ifa 10.0.0.10
  1. Net 0.0.0.0/0 Gate 10.0.0.1 Ifp en1 Ifa 10.0.0.20 [SCOPED]
  2. Net 10.0.0.0/24 Ifp en0 Ifa 10.0.0.10
  3. Net 10.0.0.0/24 Ifp en1 Ifa 10.0.0.20 [SCOPED]
  4. Net 10.0.0.1/32 Ifp en0 Ifa 10.0.0.10
  5. Net 10.0.0.1/32 Ifp en1 Ifa 10.0.0.20 [SCOPED]
+ 6. Net 224.0.0.0/4 Ifp en0 Ifa 10.0.0.10
+ 7. Net 224.0.0.0/4 Ifp en1 Ifa 10.0.0.20 [SCOPED]
+ 8. Net 255.255.255.255/32 Ifp en0 Ifa 10.0.0.10
+ 9. Net 255.255.255.255/32 Ifp en1 Ifa 10.0.0.20 [SCOPED]
 }
 Remove old[2]: Net 0.0.0.0/0 Gate 192.168.2.1 Ifp fw0 Ifa 192.168.2.30 [SCOPED]
 Remove old[7]: Net 192.168.2.0/24 Ifp fw0 Ifa 192.168.2.30
 Remove old[8]: Net 192.168.2.1/32 Ifp fw0 Ifa 192.168.2.30
+Remove old[11]: Net 224.0.0.0/4 Ifp fw0 Ifa 192.168.2.30 [SCOPED]
+Remove old[14]: Net 255.255.255.255/32 Ifp fw0 Ifa 192.168.2.30 [SCOPED]
 =================> Apply 'test1', 'test8' End <=================
 
 =================> Apply 'test8', 'test1' Begin <=================
-Old routes ('test8') = <IPv4RouteList[6]> = {
+Old routes ('test8') = <IPv4RouteList[10]> = {
  0. Net 0.0.0.0/0 Gate 10.0.0.1 Ifp en0 Ifa 10.0.0.10
  1. Net 0.0.0.0/0 Gate 10.0.0.1 Ifp en1 Ifa 10.0.0.20 [SCOPED]
  2. Net 10.0.0.0/24 Ifp en0 Ifa 10.0.0.10
  3. Net 10.0.0.0/24 Ifp en1 Ifa 10.0.0.20 [SCOPED]
  4. Net 10.0.0.1/32 Ifp en0 Ifa 10.0.0.10
  5. Net 10.0.0.1/32 Ifp en1 Ifa 10.0.0.20 [SCOPED]
+ 6. Net 224.0.0.0/4 Ifp en0 Ifa 10.0.0.10
+ 7. Net 224.0.0.0/4 Ifp en1 Ifa 10.0.0.20 [SCOPED]
+ 8. Net 255.255.255.255/32 Ifp en0 Ifa 10.0.0.10
+ 9. Net 255.255.255.255/32 Ifp en1 Ifa 10.0.0.20 [SCOPED]
 }
 Add new[4]: Net 10.0.0.1/32 Ifp en0 Ifa 10.0.0.10
 Add new[0]: Net 0.0.0.0/0 Gate 10.0.0.1 Ifp en0 Ifa 10.0.0.10
@@ -1934,7 +2718,11 @@ Add new[5]: Net 10.0.0.1/32 Ifp en1 Ifa 10.0.0.20 [SCOPED]
 Add new[1]: Net 0.0.0.0/0 Gate 10.0.0.1 Ifp en1 Ifa 10.0.0.20 [SCOPED]
 Add new[2]: Net 10.0.0.0/24 Ifp en0 Ifa 10.0.0.10
 Add new[3]: Net 10.0.0.0/24 Ifp en1 Ifa 10.0.0.20 [SCOPED]
-New Routes ('test1') = <IPv4RouteList[9]> = {
+Add new[6]: Net 224.0.0.0/4 Ifp en0 Ifa 10.0.0.10
+Add new[7]: Net 224.0.0.0/4 Ifp en1 Ifa 10.0.0.20 [SCOPED]
+Add new[8]: Net 255.255.255.255/32 Ifp en0 Ifa 10.0.0.10
+Add new[9]: Net 255.255.255.255/32 Ifp en1 Ifa 10.0.0.20 [SCOPED]
+New Routes ('test1') = <IPv4RouteList[15]> = {
  0. Net 0.0.0.0/0 Gate 10.0.0.1 Ifp en0 Ifa 10.0.0.10
  1. Net 0.0.0.0/0 Gate 10.0.0.1 Ifp en1 Ifa 10.0.0.20 [SCOPED]
  2. Net 0.0.0.0/0 Gate 192.168.2.1 Ifp fw0 Ifa 192.168.2.30 [SCOPED]
@@ -1944,14 +2732,22 @@ New Routes ('test1') = <IPv4RouteList[9]> = {
  6. Net 10.0.0.1/32 Ifp en1 Ifa 10.0.0.20 [SCOPED]
  7. Net 192.168.2.0/24 Ifp fw0 Ifa 192.168.2.30
  8. Net 192.168.2.1/32 Ifp fw0 Ifa 192.168.2.30
+ 9. Net 224.0.0.0/4 Ifp en0 Ifa 10.0.0.10
+10. Net 224.0.0.0/4 Ifp en1 Ifa 10.0.0.20 [SCOPED]
+11. Net 224.0.0.0/4 Ifp fw0 Ifa 192.168.2.30 [SCOPED]
+12. Net 255.255.255.255/32 Ifp en0 Ifa 10.0.0.10
+13. Net 255.255.255.255/32 Ifp en1 Ifa 10.0.0.20 [SCOPED]
+14. Net 255.255.255.255/32 Ifp fw0 Ifa 192.168.2.30 [SCOPED]
 }
 Add new[8]: Net 192.168.2.1/32 Ifp fw0 Ifa 192.168.2.30
 Add new[2]: Net 0.0.0.0/0 Gate 192.168.2.1 Ifp fw0 Ifa 192.168.2.30 [SCOPED]
 Add new[7]: Net 192.168.2.0/24 Ifp fw0 Ifa 192.168.2.30
+Add new[11]: Net 224.0.0.0/4 Ifp fw0 Ifa 192.168.2.30 [SCOPED]
+Add new[14]: Net 255.255.255.255/32 Ifp fw0 Ifa 192.168.2.30 [SCOPED]
 =================> Apply 'test8', 'test1' End <=================
 
 =================> Apply 'test1', 'test9' Begin <=================
-Old routes ('test1') = <IPv4RouteList[9]> = {
+Old routes ('test1') = <IPv4RouteList[15]> = {
  0. Net 0.0.0.0/0 Gate 10.0.0.1 Ifp en0 Ifa 10.0.0.10
  1. Net 0.0.0.0/0 Gate 10.0.0.1 Ifp en1 Ifa 10.0.0.20 [SCOPED]
  2. Net 0.0.0.0/0 Gate 192.168.2.1 Ifp fw0 Ifa 192.168.2.30 [SCOPED]
@@ -1961,6 +2757,12 @@ Old routes ('test1') = <IPv4RouteList[9]> = {
  6. Net 10.0.0.1/32 Ifp en1 Ifa 10.0.0.20 [SCOPED]
  7. Net 192.168.2.0/24 Ifp fw0 Ifa 192.168.2.30
  8. Net 192.168.2.1/32 Ifp fw0 Ifa 192.168.2.30
+ 9. Net 224.0.0.0/4 Ifp en0 Ifa 10.0.0.10
+10. Net 224.0.0.0/4 Ifp en1 Ifa 10.0.0.20 [SCOPED]
+11. Net 224.0.0.0/4 Ifp fw0 Ifa 192.168.2.30 [SCOPED]
+12. Net 255.255.255.255/32 Ifp en0 Ifa 10.0.0.10
+13. Net 255.255.255.255/32 Ifp en1 Ifa 10.0.0.20 [SCOPED]
+14. Net 255.255.255.255/32 Ifp fw0 Ifa 192.168.2.30 [SCOPED]
 }
 Add new[5]: Net 10.0.0.1/32 Ifp en0 Ifa 10.0.0.10
 Add new[0]: Net 0.0.0.0/0 Gate 10.0.0.1 Ifp en0 Ifa 10.0.0.10
@@ -1971,7 +2773,13 @@ Add new[2]: Net 0.0.0.0/0 Gate 192.168.2.1 Ifp fw0 Ifa 192.168.2.30 [SCOPED]
 Add new[3]: Net 10.0.0.0/24 Ifp en0 Ifa 10.0.0.10
 Add new[4]: Net 10.0.0.0/24 Ifp en1 Ifa 10.0.0.20 [SCOPED]
 Add new[7]: Net 192.168.2.0/24 Ifp fw0 Ifa 192.168.2.30
-New Routes ('test9') = <IPv4RouteList[9]> = {
+Add new[9]: Net 224.0.0.0/4 Ifp en0 Ifa 10.0.0.10
+Add new[10]: Net 224.0.0.0/4 Ifp en1 Ifa 10.0.0.20 [SCOPED]
+Add new[11]: Net 224.0.0.0/4 Ifp fw0 Ifa 192.168.2.30 [SCOPED]
+Add new[12]: Net 255.255.255.255/32 Ifp en0 Ifa 10.0.0.10
+Add new[13]: Net 255.255.255.255/32 Ifp en1 Ifa 10.0.0.20 [SCOPED]
+Add new[14]: Net 255.255.255.255/32 Ifp fw0 Ifa 192.168.2.30 [SCOPED]
+New Routes ('test9') = <IPv4RouteList[15]> = {
  0. Net 0.0.0.0/0 Gate 10.0.0.1 Ifp en1 Ifa 10.0.0.20 [first]
  1. Net 0.0.0.0/0 Gate 10.0.0.1 Ifp en0 Ifa 10.0.0.10 [SCOPED]
  2. Net 0.0.0.0/0 Gate 192.168.2.1 Ifp fw0 Ifa 192.168.2.30 [SCOPED]
@@ -1981,6 +2789,12 @@ New Routes ('test9') = <IPv4RouteList[9]> = {
  6. Net 10.0.0.1/32 Ifp en0 Ifa 10.0.0.10 [SCOPED]
  7. Net 192.168.2.0/24 Ifp fw0 Ifa 192.168.2.30
  8. Net 192.168.2.1/32 Ifp fw0 Ifa 192.168.2.30
+ 9. Net 224.0.0.0/4 Ifp en1 Ifa 10.0.0.20 [first]
+10. Net 224.0.0.0/4 Ifp en0 Ifa 10.0.0.10 [SCOPED]
+11. Net 224.0.0.0/4 Ifp fw0 Ifa 192.168.2.30 [SCOPED]
+12. Net 255.255.255.255/32 Ifp en1 Ifa 10.0.0.20 [first]
+13. Net 255.255.255.255/32 Ifp en0 Ifa 10.0.0.10 [SCOPED]
+14. Net 255.255.255.255/32 Ifp fw0 Ifa 192.168.2.30 [SCOPED]
 }
 Remove old[0]: Net 0.0.0.0/0 Gate 10.0.0.1 Ifp en0 Ifa 10.0.0.10
 Remove old[1]: Net 0.0.0.0/0 Gate 10.0.0.1 Ifp en1 Ifa 10.0.0.20 [SCOPED]
@@ -1988,16 +2802,24 @@ Remove old[3]: Net 10.0.0.0/24 Ifp en0 Ifa 10.0.0.10
 Remove old[4]: Net 10.0.0.0/24 Ifp en1 Ifa 10.0.0.20 [SCOPED]
 Remove old[5]: Net 10.0.0.1/32 Ifp en0 Ifa 10.0.0.10
 Remove old[6]: Net 10.0.0.1/32 Ifp en1 Ifa 10.0.0.20 [SCOPED]
+Remove old[9]: Net 224.0.0.0/4 Ifp en0 Ifa 10.0.0.10
+Remove old[10]: Net 224.0.0.0/4 Ifp en1 Ifa 10.0.0.20 [SCOPED]
+Remove old[12]: Net 255.255.255.255/32 Ifp en0 Ifa 10.0.0.10
+Remove old[13]: Net 255.255.255.255/32 Ifp en1 Ifa 10.0.0.20 [SCOPED]
 Add new[5]: Net 10.0.0.1/32 Ifp en1 Ifa 10.0.0.20 [first]
 Add new[0]: Net 0.0.0.0/0 Gate 10.0.0.1 Ifp en1 Ifa 10.0.0.20 [first]
 Add new[6]: Net 10.0.0.1/32 Ifp en0 Ifa 10.0.0.10 [SCOPED]
 Add new[1]: Net 0.0.0.0/0 Gate 10.0.0.1 Ifp en0 Ifa 10.0.0.10 [SCOPED]
 Add new[3]: Net 10.0.0.0/24 Ifp en1 Ifa 10.0.0.20 [first]
 Add new[4]: Net 10.0.0.0/24 Ifp en0 Ifa 10.0.0.10 [SCOPED]
+Add new[9]: Net 224.0.0.0/4 Ifp en1 Ifa 10.0.0.20 [first]
+Add new[10]: Net 224.0.0.0/4 Ifp en0 Ifa 10.0.0.10 [SCOPED]
+Add new[12]: Net 255.255.255.255/32 Ifp en1 Ifa 10.0.0.20 [first]
+Add new[13]: Net 255.255.255.255/32 Ifp en0 Ifa 10.0.0.10 [SCOPED]
 =================> Apply 'test1', 'test9' End <=================
 
 =================> Apply 'test9', 'test1' Begin <=================
-Old routes ('test9') = <IPv4RouteList[9]> = {
+Old routes ('test9') = <IPv4RouteList[15]> = {
  0. Net 0.0.0.0/0 Gate 10.0.0.1 Ifp en1 Ifa 10.0.0.20 [first]
  1. Net 0.0.0.0/0 Gate 10.0.0.1 Ifp en0 Ifa 10.0.0.10 [SCOPED]
  2. Net 0.0.0.0/0 Gate 192.168.2.1 Ifp fw0 Ifa 192.168.2.30 [SCOPED]
@@ -2007,6 +2829,12 @@ Old routes ('test9') = <IPv4RouteList[9]> = {
  6. Net 10.0.0.1/32 Ifp en0 Ifa 10.0.0.10 [SCOPED]
  7. Net 192.168.2.0/24 Ifp fw0 Ifa 192.168.2.30
  8. Net 192.168.2.1/32 Ifp fw0 Ifa 192.168.2.30
+ 9. Net 224.0.0.0/4 Ifp en1 Ifa 10.0.0.20 [first]
+10. Net 224.0.0.0/4 Ifp en0 Ifa 10.0.0.10 [SCOPED]
+11. Net 224.0.0.0/4 Ifp fw0 Ifa 192.168.2.30 [SCOPED]
+12. Net 255.255.255.255/32 Ifp en1 Ifa 10.0.0.20 [first]
+13. Net 255.255.255.255/32 Ifp en0 Ifa 10.0.0.10 [SCOPED]
+14. Net 255.255.255.255/32 Ifp fw0 Ifa 192.168.2.30 [SCOPED]
 }
 Add new[5]: Net 10.0.0.1/32 Ifp en1 Ifa 10.0.0.20 [first]
 Add new[0]: Net 0.0.0.0/0 Gate 10.0.0.1 Ifp en1 Ifa 10.0.0.20 [first]
@@ -2017,7 +2845,13 @@ Add new[2]: Net 0.0.0.0/0 Gate 192.168.2.1 Ifp fw0 Ifa 192.168.2.30 [SCOPED]
 Add new[3]: Net 10.0.0.0/24 Ifp en1 Ifa 10.0.0.20 [first]
 Add new[4]: Net 10.0.0.0/24 Ifp en0 Ifa 10.0.0.10 [SCOPED]
 Add new[7]: Net 192.168.2.0/24 Ifp fw0 Ifa 192.168.2.30
-New Routes ('test1') = <IPv4RouteList[9]> = {
+Add new[9]: Net 224.0.0.0/4 Ifp en1 Ifa 10.0.0.20 [first]
+Add new[10]: Net 224.0.0.0/4 Ifp en0 Ifa 10.0.0.10 [SCOPED]
+Add new[11]: Net 224.0.0.0/4 Ifp fw0 Ifa 192.168.2.30 [SCOPED]
+Add new[12]: Net 255.255.255.255/32 Ifp en1 Ifa 10.0.0.20 [first]
+Add new[13]: Net 255.255.255.255/32 Ifp en0 Ifa 10.0.0.10 [SCOPED]
+Add new[14]: Net 255.255.255.255/32 Ifp fw0 Ifa 192.168.2.30 [SCOPED]
+New Routes ('test1') = <IPv4RouteList[15]> = {
  0. Net 0.0.0.0/0 Gate 10.0.0.1 Ifp en0 Ifa 10.0.0.10
  1. Net 0.0.0.0/0 Gate 10.0.0.1 Ifp en1 Ifa 10.0.0.20 [SCOPED]
  2. Net 0.0.0.0/0 Gate 192.168.2.1 Ifp fw0 Ifa 192.168.2.30 [SCOPED]
@@ -2027,6 +2861,12 @@ New Routes ('test1') = <IPv4RouteList[9]> = {
  6. Net 10.0.0.1/32 Ifp en1 Ifa 10.0.0.20 [SCOPED]
  7. Net 192.168.2.0/24 Ifp fw0 Ifa 192.168.2.30
  8. Net 192.168.2.1/32 Ifp fw0 Ifa 192.168.2.30
+ 9. Net 224.0.0.0/4 Ifp en0 Ifa 10.0.0.10
+10. Net 224.0.0.0/4 Ifp en1 Ifa 10.0.0.20 [SCOPED]
+11. Net 224.0.0.0/4 Ifp fw0 Ifa 192.168.2.30 [SCOPED]
+12. Net 255.255.255.255/32 Ifp en0 Ifa 10.0.0.10
+13. Net 255.255.255.255/32 Ifp en1 Ifa 10.0.0.20 [SCOPED]
+14. Net 255.255.255.255/32 Ifp fw0 Ifa 192.168.2.30 [SCOPED]
 }
 Remove old[0]: Net 0.0.0.0/0 Gate 10.0.0.1 Ifp en1 Ifa 10.0.0.20 [first]
 Remove old[1]: Net 0.0.0.0/0 Gate 10.0.0.1 Ifp en0 Ifa 10.0.0.10 [SCOPED]
@@ -2034,16 +2874,24 @@ Remove old[3]: Net 10.0.0.0/24 Ifp en1 Ifa 10.0.0.20 [first]
 Remove old[4]: Net 10.0.0.0/24 Ifp en0 Ifa 10.0.0.10 [SCOPED]
 Remove old[5]: Net 10.0.0.1/32 Ifp en1 Ifa 10.0.0.20 [first]
 Remove old[6]: Net 10.0.0.1/32 Ifp en0 Ifa 10.0.0.10 [SCOPED]
+Remove old[9]: Net 224.0.0.0/4 Ifp en1 Ifa 10.0.0.20 [first]
+Remove old[10]: Net 224.0.0.0/4 Ifp en0 Ifa 10.0.0.10 [SCOPED]
+Remove old[12]: Net 255.255.255.255/32 Ifp en1 Ifa 10.0.0.20 [first]
+Remove old[13]: Net 255.255.255.255/32 Ifp en0 Ifa 10.0.0.10 [SCOPED]
 Add new[5]: Net 10.0.0.1/32 Ifp en0 Ifa 10.0.0.10
 Add new[0]: Net 0.0.0.0/0 Gate 10.0.0.1 Ifp en0 Ifa 10.0.0.10
 Add new[6]: Net 10.0.0.1/32 Ifp en1 Ifa 10.0.0.20 [SCOPED]
 Add new[1]: Net 0.0.0.0/0 Gate 10.0.0.1 Ifp en1 Ifa 10.0.0.20 [SCOPED]
 Add new[3]: Net 10.0.0.0/24 Ifp en0 Ifa 10.0.0.10
 Add new[4]: Net 10.0.0.0/24 Ifp en1 Ifa 10.0.0.20 [SCOPED]
+Add new[9]: Net 224.0.0.0/4 Ifp en0 Ifa 10.0.0.10
+Add new[10]: Net 224.0.0.0/4 Ifp en1 Ifa 10.0.0.20 [SCOPED]
+Add new[12]: Net 255.255.255.255/32 Ifp en0 Ifa 10.0.0.10
+Add new[13]: Net 255.255.255.255/32 Ifp en1 Ifa 10.0.0.20 [SCOPED]
 =================> Apply 'test9', 'test1' End <=================
 
 =================> Apply 'test1', 'test10' Begin <=================
-Old routes ('test1') = <IPv4RouteList[9]> = {
+Old routes ('test1') = <IPv4RouteList[15]> = {
  0. Net 0.0.0.0/0 Gate 10.0.0.1 Ifp en0 Ifa 10.0.0.10
  1. Net 0.0.0.0/0 Gate 10.0.0.1 Ifp en1 Ifa 10.0.0.20 [SCOPED]
  2. Net 0.0.0.0/0 Gate 192.168.2.1 Ifp fw0 Ifa 192.168.2.30 [SCOPED]
@@ -2053,6 +2901,12 @@ Old routes ('test1') = <IPv4RouteList[9]> = {
  6. Net 10.0.0.1/32 Ifp en1 Ifa 10.0.0.20 [SCOPED]
  7. Net 192.168.2.0/24 Ifp fw0 Ifa 192.168.2.30
  8. Net 192.168.2.1/32 Ifp fw0 Ifa 192.168.2.30
+ 9. Net 224.0.0.0/4 Ifp en0 Ifa 10.0.0.10
+10. Net 224.0.0.0/4 Ifp en1 Ifa 10.0.0.20 [SCOPED]
+11. Net 224.0.0.0/4 Ifp fw0 Ifa 192.168.2.30 [SCOPED]
+12. Net 255.255.255.255/32 Ifp en0 Ifa 10.0.0.10
+13. Net 255.255.255.255/32 Ifp en1 Ifa 10.0.0.20 [SCOPED]
+14. Net 255.255.255.255/32 Ifp fw0 Ifa 192.168.2.30 [SCOPED]
 }
 Add new[5]: Net 10.0.0.1/32 Ifp en0 Ifa 10.0.0.10
 Add new[0]: Net 0.0.0.0/0 Gate 10.0.0.1 Ifp en0 Ifa 10.0.0.10
@@ -2063,7 +2917,13 @@ Add new[2]: Net 0.0.0.0/0 Gate 192.168.2.1 Ifp fw0 Ifa 192.168.2.30 [SCOPED]
 Add new[3]: Net 10.0.0.0/24 Ifp en0 Ifa 10.0.0.10
 Add new[4]: Net 10.0.0.0/24 Ifp en1 Ifa 10.0.0.20 [SCOPED]
 Add new[7]: Net 192.168.2.0/24 Ifp fw0 Ifa 192.168.2.30
-New Routes ('test10') = <IPv4RouteList[9]> = {
+Add new[9]: Net 224.0.0.0/4 Ifp en0 Ifa 10.0.0.10
+Add new[10]: Net 224.0.0.0/4 Ifp en1 Ifa 10.0.0.20 [SCOPED]
+Add new[11]: Net 224.0.0.0/4 Ifp fw0 Ifa 192.168.2.30 [SCOPED]
+Add new[12]: Net 255.255.255.255/32 Ifp en0 Ifa 10.0.0.10
+Add new[13]: Net 255.255.255.255/32 Ifp en1 Ifa 10.0.0.20 [SCOPED]
+Add new[14]: Net 255.255.255.255/32 Ifp fw0 Ifa 192.168.2.30 [SCOPED]
+New Routes ('test10') = <IPv4RouteList[15]> = {
  0. Net 0.0.0.0/0 Gate 10.0.0.1 Ifp en1 Ifa 10.0.0.20
  1. Net 0.0.0.0/0 Gate 192.168.2.1 Ifp fw0 Ifa 192.168.2.30 [SCOPED]
  2. Net 0.0.0.0/0 Gate 10.0.0.1 Ifp en0 Ifa 10.0.0.10 [last] [SCOPED]
@@ -2073,6 +2933,12 @@ New Routes ('test10') = <IPv4RouteList[9]> = {
  6. Net 10.0.0.1/32 Ifp en0 Ifa 10.0.0.10 [last] [SCOPED]
  7. Net 192.168.2.0/24 Ifp fw0 Ifa 192.168.2.30
  8. Net 192.168.2.1/32 Ifp fw0 Ifa 192.168.2.30
+ 9. Net 224.0.0.0/4 Ifp en1 Ifa 10.0.0.20
+10. Net 224.0.0.0/4 Ifp fw0 Ifa 192.168.2.30 [SCOPED]
+11. Net 224.0.0.0/4 Ifp en0 Ifa 10.0.0.10 [last] [SCOPED]
+12. Net 255.255.255.255/32 Ifp en1 Ifa 10.0.0.20
+13. Net 255.255.255.255/32 Ifp fw0 Ifa 192.168.2.30 [SCOPED]
+14. Net 255.255.255.255/32 Ifp en0 Ifa 10.0.0.10 [last] [SCOPED]
 }
 Remove old[0]: Net 0.0.0.0/0 Gate 10.0.0.1 Ifp en0 Ifa 10.0.0.10
 Remove old[1]: Net 0.0.0.0/0 Gate 10.0.0.1 Ifp en1 Ifa 10.0.0.20 [SCOPED]
@@ -2080,16 +2946,24 @@ Remove old[3]: Net 10.0.0.0/24 Ifp en0 Ifa 10.0.0.10
 Remove old[4]: Net 10.0.0.0/24 Ifp en1 Ifa 10.0.0.20 [SCOPED]
 Remove old[5]: Net 10.0.0.1/32 Ifp en0 Ifa 10.0.0.10
 Remove old[6]: Net 10.0.0.1/32 Ifp en1 Ifa 10.0.0.20 [SCOPED]
+Remove old[9]: Net 224.0.0.0/4 Ifp en0 Ifa 10.0.0.10
+Remove old[10]: Net 224.0.0.0/4 Ifp en1 Ifa 10.0.0.20 [SCOPED]
+Remove old[12]: Net 255.255.255.255/32 Ifp en0 Ifa 10.0.0.10
+Remove old[13]: Net 255.255.255.255/32 Ifp en1 Ifa 10.0.0.20 [SCOPED]
 Add new[5]: Net 10.0.0.1/32 Ifp en1 Ifa 10.0.0.20
 Add new[0]: Net 0.0.0.0/0 Gate 10.0.0.1 Ifp en1 Ifa 10.0.0.20
 Add new[6]: Net 10.0.0.1/32 Ifp en0 Ifa 10.0.0.10 [last] [SCOPED]
 Add new[2]: Net 0.0.0.0/0 Gate 10.0.0.1 Ifp en0 Ifa 10.0.0.10 [last] [SCOPED]
 Add new[3]: Net 10.0.0.0/24 Ifp en1 Ifa 10.0.0.20
 Add new[4]: Net 10.0.0.0/24 Ifp en0 Ifa 10.0.0.10 [last] [SCOPED]
+Add new[9]: Net 224.0.0.0/4 Ifp en1 Ifa 10.0.0.20
+Add new[11]: Net 224.0.0.0/4 Ifp en0 Ifa 10.0.0.10 [last] [SCOPED]
+Add new[12]: Net 255.255.255.255/32 Ifp en1 Ifa 10.0.0.20
+Add new[14]: Net 255.255.255.255/32 Ifp en0 Ifa 10.0.0.10 [last] [SCOPED]
 =================> Apply 'test1', 'test10' End <=================
 
 =================> Apply 'test10', 'test1' Begin <=================
-Old routes ('test10') = <IPv4RouteList[9]> = {
+Old routes ('test10') = <IPv4RouteList[15]> = {
  0. Net 0.0.0.0/0 Gate 10.0.0.1 Ifp en1 Ifa 10.0.0.20
  1. Net 0.0.0.0/0 Gate 192.168.2.1 Ifp fw0 Ifa 192.168.2.30 [SCOPED]
  2. Net 0.0.0.0/0 Gate 10.0.0.1 Ifp en0 Ifa 10.0.0.10 [last] [SCOPED]
@@ -2099,6 +2973,12 @@ Old routes ('test10') = <IPv4RouteList[9]> = {
  6. Net 10.0.0.1/32 Ifp en0 Ifa 10.0.0.10 [last] [SCOPED]
  7. Net 192.168.2.0/24 Ifp fw0 Ifa 192.168.2.30
  8. Net 192.168.2.1/32 Ifp fw0 Ifa 192.168.2.30
+ 9. Net 224.0.0.0/4 Ifp en1 Ifa 10.0.0.20
+10. Net 224.0.0.0/4 Ifp fw0 Ifa 192.168.2.30 [SCOPED]
+11. Net 224.0.0.0/4 Ifp en0 Ifa 10.0.0.10 [last] [SCOPED]
+12. Net 255.255.255.255/32 Ifp en1 Ifa 10.0.0.20
+13. Net 255.255.255.255/32 Ifp fw0 Ifa 192.168.2.30 [SCOPED]
+14. Net 255.255.255.255/32 Ifp en0 Ifa 10.0.0.10 [last] [SCOPED]
 }
 Add new[5]: Net 10.0.0.1/32 Ifp en1 Ifa 10.0.0.20
 Add new[0]: Net 0.0.0.0/0 Gate 10.0.0.1 Ifp en1 Ifa 10.0.0.20
@@ -2109,7 +2989,13 @@ Add new[2]: Net 0.0.0.0/0 Gate 10.0.0.1 Ifp en0 Ifa 10.0.0.10 [last] [SCOPED]
 Add new[3]: Net 10.0.0.0/24 Ifp en1 Ifa 10.0.0.20
 Add new[4]: Net 10.0.0.0/24 Ifp en0 Ifa 10.0.0.10 [last] [SCOPED]
 Add new[7]: Net 192.168.2.0/24 Ifp fw0 Ifa 192.168.2.30
-New Routes ('test1') = <IPv4RouteList[9]> = {
+Add new[9]: Net 224.0.0.0/4 Ifp en1 Ifa 10.0.0.20
+Add new[10]: Net 224.0.0.0/4 Ifp fw0 Ifa 192.168.2.30 [SCOPED]
+Add new[11]: Net 224.0.0.0/4 Ifp en0 Ifa 10.0.0.10 [last] [SCOPED]
+Add new[12]: Net 255.255.255.255/32 Ifp en1 Ifa 10.0.0.20
+Add new[13]: Net 255.255.255.255/32 Ifp fw0 Ifa 192.168.2.30 [SCOPED]
+Add new[14]: Net 255.255.255.255/32 Ifp en0 Ifa 10.0.0.10 [last] [SCOPED]
+New Routes ('test1') = <IPv4RouteList[15]> = {
  0. Net 0.0.0.0/0 Gate 10.0.0.1 Ifp en0 Ifa 10.0.0.10
  1. Net 0.0.0.0/0 Gate 10.0.0.1 Ifp en1 Ifa 10.0.0.20 [SCOPED]
  2. Net 0.0.0.0/0 Gate 192.168.2.1 Ifp fw0 Ifa 192.168.2.30 [SCOPED]
@@ -2119,6 +3005,12 @@ New Routes ('test1') = <IPv4RouteList[9]> = {
  6. Net 10.0.0.1/32 Ifp en1 Ifa 10.0.0.20 [SCOPED]
  7. Net 192.168.2.0/24 Ifp fw0 Ifa 192.168.2.30
  8. Net 192.168.2.1/32 Ifp fw0 Ifa 192.168.2.30
+ 9. Net 224.0.0.0/4 Ifp en0 Ifa 10.0.0.10
+10. Net 224.0.0.0/4 Ifp en1 Ifa 10.0.0.20 [SCOPED]
+11. Net 224.0.0.0/4 Ifp fw0 Ifa 192.168.2.30 [SCOPED]
+12. Net 255.255.255.255/32 Ifp en0 Ifa 10.0.0.10
+13. Net 255.255.255.255/32 Ifp en1 Ifa 10.0.0.20 [SCOPED]
+14. Net 255.255.255.255/32 Ifp fw0 Ifa 192.168.2.30 [SCOPED]
 }
 Remove old[0]: Net 0.0.0.0/0 Gate 10.0.0.1 Ifp en1 Ifa 10.0.0.20
 Remove old[2]: Net 0.0.0.0/0 Gate 10.0.0.1 Ifp en0 Ifa 10.0.0.10 [last] [SCOPED]
@@ -2126,16 +3018,24 @@ Remove old[3]: Net 10.0.0.0/24 Ifp en1 Ifa 10.0.0.20
 Remove old[4]: Net 10.0.0.0/24 Ifp en0 Ifa 10.0.0.10 [last] [SCOPED]
 Remove old[5]: Net 10.0.0.1/32 Ifp en1 Ifa 10.0.0.20
 Remove old[6]: Net 10.0.0.1/32 Ifp en0 Ifa 10.0.0.10 [last] [SCOPED]
+Remove old[9]: Net 224.0.0.0/4 Ifp en1 Ifa 10.0.0.20
+Remove old[11]: Net 224.0.0.0/4 Ifp en0 Ifa 10.0.0.10 [last] [SCOPED]
+Remove old[12]: Net 255.255.255.255/32 Ifp en1 Ifa 10.0.0.20
+Remove old[14]: Net 255.255.255.255/32 Ifp en0 Ifa 10.0.0.10 [last] [SCOPED]
 Add new[5]: Net 10.0.0.1/32 Ifp en0 Ifa 10.0.0.10
 Add new[0]: Net 0.0.0.0/0 Gate 10.0.0.1 Ifp en0 Ifa 10.0.0.10
 Add new[6]: Net 10.0.0.1/32 Ifp en1 Ifa 10.0.0.20 [SCOPED]
 Add new[1]: Net 0.0.0.0/0 Gate 10.0.0.1 Ifp en1 Ifa 10.0.0.20 [SCOPED]
 Add new[3]: Net 10.0.0.0/24 Ifp en0 Ifa 10.0.0.10
 Add new[4]: Net 10.0.0.0/24 Ifp en1 Ifa 10.0.0.20 [SCOPED]
+Add new[9]: Net 224.0.0.0/4 Ifp en0 Ifa 10.0.0.10
+Add new[10]: Net 224.0.0.0/4 Ifp en1 Ifa 10.0.0.20 [SCOPED]
+Add new[12]: Net 255.255.255.255/32 Ifp en0 Ifa 10.0.0.10
+Add new[13]: Net 255.255.255.255/32 Ifp en1 Ifa 10.0.0.20 [SCOPED]
 =================> Apply 'test10', 'test1' End <=================
 
 =================> Apply 'test1', 'test11' Begin <=================
-Old routes ('test1') = <IPv4RouteList[9]> = {
+Old routes ('test1') = <IPv4RouteList[15]> = {
  0. Net 0.0.0.0/0 Gate 10.0.0.1 Ifp en0 Ifa 10.0.0.10
  1. Net 0.0.0.0/0 Gate 10.0.0.1 Ifp en1 Ifa 10.0.0.20 [SCOPED]
  2. Net 0.0.0.0/0 Gate 192.168.2.1 Ifp fw0 Ifa 192.168.2.30 [SCOPED]
@@ -2145,6 +3045,12 @@ Old routes ('test1') = <IPv4RouteList[9]> = {
  6. Net 10.0.0.1/32 Ifp en1 Ifa 10.0.0.20 [SCOPED]
  7. Net 192.168.2.0/24 Ifp fw0 Ifa 192.168.2.30
  8. Net 192.168.2.1/32 Ifp fw0 Ifa 192.168.2.30
+ 9. Net 224.0.0.0/4 Ifp en0 Ifa 10.0.0.10
+10. Net 224.0.0.0/4 Ifp en1 Ifa 10.0.0.20 [SCOPED]
+11. Net 224.0.0.0/4 Ifp fw0 Ifa 192.168.2.30 [SCOPED]
+12. Net 255.255.255.255/32 Ifp en0 Ifa 10.0.0.10
+13. Net 255.255.255.255/32 Ifp en1 Ifa 10.0.0.20 [SCOPED]
+14. Net 255.255.255.255/32 Ifp fw0 Ifa 192.168.2.30 [SCOPED]
 }
 Add new[5]: Net 10.0.0.1/32 Ifp en0 Ifa 10.0.0.10
 Add new[0]: Net 0.0.0.0/0 Gate 10.0.0.1 Ifp en0 Ifa 10.0.0.10
@@ -2155,7 +3061,13 @@ Add new[2]: Net 0.0.0.0/0 Gate 192.168.2.1 Ifp fw0 Ifa 192.168.2.30 [SCOPED]
 Add new[3]: Net 10.0.0.0/24 Ifp en0 Ifa 10.0.0.10
 Add new[4]: Net 10.0.0.0/24 Ifp en1 Ifa 10.0.0.20 [SCOPED]
 Add new[7]: Net 192.168.2.0/24 Ifp fw0 Ifa 192.168.2.30
-New Routes ('test11') = <IPv4RouteList[9]> = {
+Add new[9]: Net 224.0.0.0/4 Ifp en0 Ifa 10.0.0.10
+Add new[10]: Net 224.0.0.0/4 Ifp en1 Ifa 10.0.0.20 [SCOPED]
+Add new[11]: Net 224.0.0.0/4 Ifp fw0 Ifa 192.168.2.30 [SCOPED]
+Add new[12]: Net 255.255.255.255/32 Ifp en0 Ifa 10.0.0.10
+Add new[13]: Net 255.255.255.255/32 Ifp en1 Ifa 10.0.0.20 [SCOPED]
+Add new[14]: Net 255.255.255.255/32 Ifp fw0 Ifa 192.168.2.30 [SCOPED]
+New Routes ('test11') = <IPv4RouteList[15]> = {
  0. Net 0.0.0.0/0 Gate 10.0.0.1 Ifp en1 Ifa 10.0.0.20
  1. Net 0.0.0.0/0 Gate 192.168.2.1 Ifp fw0 Ifa 192.168.2.30 [SCOPED]
  2. Net 0.0.0.0/0 Gate 10.0.0.1 Ifp en0 Ifa 10.0.0.10 [never] [SCOPED]
@@ -2165,6 +3077,12 @@ New Routes ('test11') = <IPv4RouteList[9]> = {
  6. Net 10.0.0.1/32 Ifp en0 Ifa 10.0.0.10 [last] [SCOPED]
  7. Net 192.168.2.0/24 Ifp fw0 Ifa 192.168.2.30
  8. Net 192.168.2.1/32 Ifp fw0 Ifa 192.168.2.30
+ 9. Net 224.0.0.0/4 Ifp en1 Ifa 10.0.0.20
+10. Net 224.0.0.0/4 Ifp fw0 Ifa 192.168.2.30 [SCOPED]
+11. Net 224.0.0.0/4 Ifp en0 Ifa 10.0.0.10 [last] [SCOPED]
+12. Net 255.255.255.255/32 Ifp en1 Ifa 10.0.0.20
+13. Net 255.255.255.255/32 Ifp fw0 Ifa 192.168.2.30 [SCOPED]
+14. Net 255.255.255.255/32 Ifp en0 Ifa 10.0.0.10 [last] [SCOPED]
 }
 Remove old[0]: Net 0.0.0.0/0 Gate 10.0.0.1 Ifp en0 Ifa 10.0.0.10
 Remove old[1]: Net 0.0.0.0/0 Gate 10.0.0.1 Ifp en1 Ifa 10.0.0.20 [SCOPED]
@@ -2172,16 +3090,24 @@ Remove old[3]: Net 10.0.0.0/24 Ifp en0 Ifa 10.0.0.10
 Remove old[4]: Net 10.0.0.0/24 Ifp en1 Ifa 10.0.0.20 [SCOPED]
 Remove old[5]: Net 10.0.0.1/32 Ifp en0 Ifa 10.0.0.10
 Remove old[6]: Net 10.0.0.1/32 Ifp en1 Ifa 10.0.0.20 [SCOPED]
+Remove old[9]: Net 224.0.0.0/4 Ifp en0 Ifa 10.0.0.10
+Remove old[10]: Net 224.0.0.0/4 Ifp en1 Ifa 10.0.0.20 [SCOPED]
+Remove old[12]: Net 255.255.255.255/32 Ifp en0 Ifa 10.0.0.10
+Remove old[13]: Net 255.255.255.255/32 Ifp en1 Ifa 10.0.0.20 [SCOPED]
 Add new[5]: Net 10.0.0.1/32 Ifp en1 Ifa 10.0.0.20
 Add new[0]: Net 0.0.0.0/0 Gate 10.0.0.1 Ifp en1 Ifa 10.0.0.20
 Add new[6]: Net 10.0.0.1/32 Ifp en0 Ifa 10.0.0.10 [last] [SCOPED]
 Add new[2]: Net 0.0.0.0/0 Gate 10.0.0.1 Ifp en0 Ifa 10.0.0.10 [never] [SCOPED]
 Add new[3]: Net 10.0.0.0/24 Ifp en1 Ifa 10.0.0.20
 Add new[4]: Net 10.0.0.0/24 Ifp en0 Ifa 10.0.0.10 [last] [SCOPED]
+Add new[9]: Net 224.0.0.0/4 Ifp en1 Ifa 10.0.0.20
+Add new[11]: Net 224.0.0.0/4 Ifp en0 Ifa 10.0.0.10 [last] [SCOPED]
+Add new[12]: Net 255.255.255.255/32 Ifp en1 Ifa 10.0.0.20
+Add new[14]: Net 255.255.255.255/32 Ifp en0 Ifa 10.0.0.10 [last] [SCOPED]
 =================> Apply 'test1', 'test11' End <=================
 
 =================> Apply 'test11', 'test1' Begin <=================
-Old routes ('test11') = <IPv4RouteList[9]> = {
+Old routes ('test11') = <IPv4RouteList[15]> = {
  0. Net 0.0.0.0/0 Gate 10.0.0.1 Ifp en1 Ifa 10.0.0.20
  1. Net 0.0.0.0/0 Gate 192.168.2.1 Ifp fw0 Ifa 192.168.2.30 [SCOPED]
  2. Net 0.0.0.0/0 Gate 10.0.0.1 Ifp en0 Ifa 10.0.0.10 [never] [SCOPED]
@@ -2191,6 +3117,12 @@ Old routes ('test11') = <IPv4RouteList[9]> = {
  6. Net 10.0.0.1/32 Ifp en0 Ifa 10.0.0.10 [last] [SCOPED]
  7. Net 192.168.2.0/24 Ifp fw0 Ifa 192.168.2.30
  8. Net 192.168.2.1/32 Ifp fw0 Ifa 192.168.2.30
+ 9. Net 224.0.0.0/4 Ifp en1 Ifa 10.0.0.20
+10. Net 224.0.0.0/4 Ifp fw0 Ifa 192.168.2.30 [SCOPED]
+11. Net 224.0.0.0/4 Ifp en0 Ifa 10.0.0.10 [last] [SCOPED]
+12. Net 255.255.255.255/32 Ifp en1 Ifa 10.0.0.20
+13. Net 255.255.255.255/32 Ifp fw0 Ifa 192.168.2.30 [SCOPED]
+14. Net 255.255.255.255/32 Ifp en0 Ifa 10.0.0.10 [last] [SCOPED]
 }
 Add new[5]: Net 10.0.0.1/32 Ifp en1 Ifa 10.0.0.20
 Add new[0]: Net 0.0.0.0/0 Gate 10.0.0.1 Ifp en1 Ifa 10.0.0.20
@@ -2201,7 +3133,13 @@ Add new[2]: Net 0.0.0.0/0 Gate 10.0.0.1 Ifp en0 Ifa 10.0.0.10 [never] [SCOPED]
 Add new[3]: Net 10.0.0.0/24 Ifp en1 Ifa 10.0.0.20
 Add new[4]: Net 10.0.0.0/24 Ifp en0 Ifa 10.0.0.10 [last] [SCOPED]
 Add new[7]: Net 192.168.2.0/24 Ifp fw0 Ifa 192.168.2.30
-New Routes ('test1') = <IPv4RouteList[9]> = {
+Add new[9]: Net 224.0.0.0/4 Ifp en1 Ifa 10.0.0.20
+Add new[10]: Net 224.0.0.0/4 Ifp fw0 Ifa 192.168.2.30 [SCOPED]
+Add new[11]: Net 224.0.0.0/4 Ifp en0 Ifa 10.0.0.10 [last] [SCOPED]
+Add new[12]: Net 255.255.255.255/32 Ifp en1 Ifa 10.0.0.20
+Add new[13]: Net 255.255.255.255/32 Ifp fw0 Ifa 192.168.2.30 [SCOPED]
+Add new[14]: Net 255.255.255.255/32 Ifp en0 Ifa 10.0.0.10 [last] [SCOPED]
+New Routes ('test1') = <IPv4RouteList[15]> = {
  0. Net 0.0.0.0/0 Gate 10.0.0.1 Ifp en0 Ifa 10.0.0.10
  1. Net 0.0.0.0/0 Gate 10.0.0.1 Ifp en1 Ifa 10.0.0.20 [SCOPED]
  2. Net 0.0.0.0/0 Gate 192.168.2.1 Ifp fw0 Ifa 192.168.2.30 [SCOPED]
@@ -2211,6 +3149,12 @@ New Routes ('test1') = <IPv4RouteList[9]> = {
  6. Net 10.0.0.1/32 Ifp en1 Ifa 10.0.0.20 [SCOPED]
  7. Net 192.168.2.0/24 Ifp fw0 Ifa 192.168.2.30
  8. Net 192.168.2.1/32 Ifp fw0 Ifa 192.168.2.30
+ 9. Net 224.0.0.0/4 Ifp en0 Ifa 10.0.0.10
+10. Net 224.0.0.0/4 Ifp en1 Ifa 10.0.0.20 [SCOPED]
+11. Net 224.0.0.0/4 Ifp fw0 Ifa 192.168.2.30 [SCOPED]
+12. Net 255.255.255.255/32 Ifp en0 Ifa 10.0.0.10
+13. Net 255.255.255.255/32 Ifp en1 Ifa 10.0.0.20 [SCOPED]
+14. Net 255.255.255.255/32 Ifp fw0 Ifa 192.168.2.30 [SCOPED]
 }
 Remove old[0]: Net 0.0.0.0/0 Gate 10.0.0.1 Ifp en1 Ifa 10.0.0.20
 Remove old[2]: Net 0.0.0.0/0 Gate 10.0.0.1 Ifp en0 Ifa 10.0.0.10 [never] [SCOPED]
@@ -2218,16 +3162,24 @@ Remove old[3]: Net 10.0.0.0/24 Ifp en1 Ifa 10.0.0.20
 Remove old[4]: Net 10.0.0.0/24 Ifp en0 Ifa 10.0.0.10 [last] [SCOPED]
 Remove old[5]: Net 10.0.0.1/32 Ifp en1 Ifa 10.0.0.20
 Remove old[6]: Net 10.0.0.1/32 Ifp en0 Ifa 10.0.0.10 [last] [SCOPED]
+Remove old[9]: Net 224.0.0.0/4 Ifp en1 Ifa 10.0.0.20
+Remove old[11]: Net 224.0.0.0/4 Ifp en0 Ifa 10.0.0.10 [last] [SCOPED]
+Remove old[12]: Net 255.255.255.255/32 Ifp en1 Ifa 10.0.0.20
+Remove old[14]: Net 255.255.255.255/32 Ifp en0 Ifa 10.0.0.10 [last] [SCOPED]
 Add new[5]: Net 10.0.0.1/32 Ifp en0 Ifa 10.0.0.10
 Add new[0]: Net 0.0.0.0/0 Gate 10.0.0.1 Ifp en0 Ifa 10.0.0.10
 Add new[6]: Net 10.0.0.1/32 Ifp en1 Ifa 10.0.0.20 [SCOPED]
 Add new[1]: Net 0.0.0.0/0 Gate 10.0.0.1 Ifp en1 Ifa 10.0.0.20 [SCOPED]
 Add new[3]: Net 10.0.0.0/24 Ifp en0 Ifa 10.0.0.10
 Add new[4]: Net 10.0.0.0/24 Ifp en1 Ifa 10.0.0.20 [SCOPED]
+Add new[9]: Net 224.0.0.0/4 Ifp en0 Ifa 10.0.0.10
+Add new[10]: Net 224.0.0.0/4 Ifp en1 Ifa 10.0.0.20 [SCOPED]
+Add new[12]: Net 255.255.255.255/32 Ifp en0 Ifa 10.0.0.10
+Add new[13]: Net 255.255.255.255/32 Ifp en1 Ifa 10.0.0.20 [SCOPED]
 =================> Apply 'test11', 'test1' End <=================
 
 =================> Apply 'test1', 'test12' Begin <=================
-Old routes ('test1') = <IPv4RouteList[9]> = {
+Old routes ('test1') = <IPv4RouteList[15]> = {
  0. Net 0.0.0.0/0 Gate 10.0.0.1 Ifp en0 Ifa 10.0.0.10
  1. Net 0.0.0.0/0 Gate 10.0.0.1 Ifp en1 Ifa 10.0.0.20 [SCOPED]
  2. Net 0.0.0.0/0 Gate 192.168.2.1 Ifp fw0 Ifa 192.168.2.30 [SCOPED]
@@ -2237,6 +3189,12 @@ Old routes ('test1') = <IPv4RouteList[9]> = {
  6. Net 10.0.0.1/32 Ifp en1 Ifa 10.0.0.20 [SCOPED]
  7. Net 192.168.2.0/24 Ifp fw0 Ifa 192.168.2.30
  8. Net 192.168.2.1/32 Ifp fw0 Ifa 192.168.2.30
+ 9. Net 224.0.0.0/4 Ifp en0 Ifa 10.0.0.10
+10. Net 224.0.0.0/4 Ifp en1 Ifa 10.0.0.20 [SCOPED]
+11. Net 224.0.0.0/4 Ifp fw0 Ifa 192.168.2.30 [SCOPED]
+12. Net 255.255.255.255/32 Ifp en0 Ifa 10.0.0.10
+13. Net 255.255.255.255/32 Ifp en1 Ifa 10.0.0.20 [SCOPED]
+14. Net 255.255.255.255/32 Ifp fw0 Ifa 192.168.2.30 [SCOPED]
 }
 Add new[5]: Net 10.0.0.1/32 Ifp en0 Ifa 10.0.0.10
 Add new[0]: Net 0.0.0.0/0 Gate 10.0.0.1 Ifp en0 Ifa 10.0.0.10
@@ -2247,27 +3205,43 @@ Add new[2]: Net 0.0.0.0/0 Gate 192.168.2.1 Ifp fw0 Ifa 192.168.2.30 [SCOPED]
 Add new[3]: Net 10.0.0.0/24 Ifp en0 Ifa 10.0.0.10
 Add new[4]: Net 10.0.0.0/24 Ifp en1 Ifa 10.0.0.20 [SCOPED]
 Add new[7]: Net 192.168.2.0/24 Ifp fw0 Ifa 192.168.2.30
-New Routes ('test12') = <IPv4RouteList[6]> = {
+Add new[9]: Net 224.0.0.0/4 Ifp en0 Ifa 10.0.0.10
+Add new[10]: Net 224.0.0.0/4 Ifp en1 Ifa 10.0.0.20 [SCOPED]
+Add new[11]: Net 224.0.0.0/4 Ifp fw0 Ifa 192.168.2.30 [SCOPED]
+Add new[12]: Net 255.255.255.255/32 Ifp en0 Ifa 10.0.0.10
+Add new[13]: Net 255.255.255.255/32 Ifp en1 Ifa 10.0.0.20 [SCOPED]
+Add new[14]: Net 255.255.255.255/32 Ifp fw0 Ifa 192.168.2.30 [SCOPED]
+New Routes ('test12') = <IPv4RouteList[10]> = {
  0. Net 0.0.0.0/0 Gate 10.0.0.1 Ifp en0 Ifa 10.0.0.10
  1. Net 0.0.0.0/0 Gate 10.0.0.1 Ifp en1 Ifa 10.0.0.20 [SCOPED]
  2. Net 10.0.0.0/24 Ifp en0 Ifa 10.0.0.10
  3. Net 10.0.0.0/24 Ifp en1 Ifa 10.0.0.20 [SCOPED]
  4. Net 10.0.0.1/32 Ifp en0 Ifa 10.0.0.10
  5. Net 10.0.0.1/32 Ifp en1 Ifa 10.0.0.20 [SCOPED]
+ 6. Net 224.0.0.0/4 Ifp en0 Ifa 10.0.0.10
+ 7. Net 224.0.0.0/4 Ifp en1 Ifa 10.0.0.20 [SCOPED]
+ 8. Net 255.255.255.255/32 Ifp en0 Ifa 10.0.0.10
+ 9. Net 255.255.255.255/32 Ifp en1 Ifa 10.0.0.20 [SCOPED]
 }
 Remove old[2]: Net 0.0.0.0/0 Gate 192.168.2.1 Ifp fw0 Ifa 192.168.2.30 [SCOPED]
 Remove old[7]: Net 192.168.2.0/24 Ifp fw0 Ifa 192.168.2.30
 Remove old[8]: Net 192.168.2.1/32 Ifp fw0 Ifa 192.168.2.30
+Remove old[11]: Net 224.0.0.0/4 Ifp fw0 Ifa 192.168.2.30 [SCOPED]
+Remove old[14]: Net 255.255.255.255/32 Ifp fw0 Ifa 192.168.2.30 [SCOPED]
 =================> Apply 'test1', 'test12' End <=================
 
 =================> Apply 'test12', 'test1' Begin <=================
-Old routes ('test12') = <IPv4RouteList[6]> = {
+Old routes ('test12') = <IPv4RouteList[10]> = {
  0. Net 0.0.0.0/0 Gate 10.0.0.1 Ifp en0 Ifa 10.0.0.10
  1. Net 0.0.0.0/0 Gate 10.0.0.1 Ifp en1 Ifa 10.0.0.20 [SCOPED]
  2. Net 10.0.0.0/24 Ifp en0 Ifa 10.0.0.10
  3. Net 10.0.0.0/24 Ifp en1 Ifa 10.0.0.20 [SCOPED]
  4. Net 10.0.0.1/32 Ifp en0 Ifa 10.0.0.10
  5. Net 10.0.0.1/32 Ifp en1 Ifa 10.0.0.20 [SCOPED]
+ 6. Net 224.0.0.0/4 Ifp en0 Ifa 10.0.0.10
+ 7. Net 224.0.0.0/4 Ifp en1 Ifa 10.0.0.20 [SCOPED]
+ 8. Net 255.255.255.255/32 Ifp en0 Ifa 10.0.0.10
+ 9. Net 255.255.255.255/32 Ifp en1 Ifa 10.0.0.20 [SCOPED]
 }
 Add new[4]: Net 10.0.0.1/32 Ifp en0 Ifa 10.0.0.10
 Add new[0]: Net 0.0.0.0/0 Gate 10.0.0.1 Ifp en0 Ifa 10.0.0.10
@@ -2275,7 +3249,11 @@ Add new[5]: Net 10.0.0.1/32 Ifp en1 Ifa 10.0.0.20 [SCOPED]
 Add new[1]: Net 0.0.0.0/0 Gate 10.0.0.1 Ifp en1 Ifa 10.0.0.20 [SCOPED]
 Add new[2]: Net 10.0.0.0/24 Ifp en0 Ifa 10.0.0.10
 Add new[3]: Net 10.0.0.0/24 Ifp en1 Ifa 10.0.0.20 [SCOPED]
-New Routes ('test1') = <IPv4RouteList[9]> = {
+Add new[6]: Net 224.0.0.0/4 Ifp en0 Ifa 10.0.0.10
+Add new[7]: Net 224.0.0.0/4 Ifp en1 Ifa 10.0.0.20 [SCOPED]
+Add new[8]: Net 255.255.255.255/32 Ifp en0 Ifa 10.0.0.10
+Add new[9]: Net 255.255.255.255/32 Ifp en1 Ifa 10.0.0.20 [SCOPED]
+New Routes ('test1') = <IPv4RouteList[15]> = {
  0. Net 0.0.0.0/0 Gate 10.0.0.1 Ifp en0 Ifa 10.0.0.10
  1. Net 0.0.0.0/0 Gate 10.0.0.1 Ifp en1 Ifa 10.0.0.20 [SCOPED]
  2. Net 0.0.0.0/0 Gate 192.168.2.1 Ifp fw0 Ifa 192.168.2.30 [SCOPED]
@@ -2285,14 +3263,22 @@ New Routes ('test1') = <IPv4RouteList[9]> = {
  6. Net 10.0.0.1/32 Ifp en1 Ifa 10.0.0.20 [SCOPED]
  7. Net 192.168.2.0/24 Ifp fw0 Ifa 192.168.2.30
  8. Net 192.168.2.1/32 Ifp fw0 Ifa 192.168.2.30
+ 9. Net 224.0.0.0/4 Ifp en0 Ifa 10.0.0.10
+10. Net 224.0.0.0/4 Ifp en1 Ifa 10.0.0.20 [SCOPED]
+11. Net 224.0.0.0/4 Ifp fw0 Ifa 192.168.2.30 [SCOPED]
+12. Net 255.255.255.255/32 Ifp en0 Ifa 10.0.0.10
+13. Net 255.255.255.255/32 Ifp en1 Ifa 10.0.0.20 [SCOPED]
+14. Net 255.255.255.255/32 Ifp fw0 Ifa 192.168.2.30 [SCOPED]
 }
 Add new[8]: Net 192.168.2.1/32 Ifp fw0 Ifa 192.168.2.30
 Add new[2]: Net 0.0.0.0/0 Gate 192.168.2.1 Ifp fw0 Ifa 192.168.2.30 [SCOPED]
 Add new[7]: Net 192.168.2.0/24 Ifp fw0 Ifa 192.168.2.30
+Add new[11]: Net 224.0.0.0/4 Ifp fw0 Ifa 192.168.2.30 [SCOPED]
+Add new[14]: Net 255.255.255.255/32 Ifp fw0 Ifa 192.168.2.30 [SCOPED]
 =================> Apply 'test12', 'test1' End <=================
 
 =================> Apply 'test1', 'test13' Begin <=================
-Old routes ('test1') = <IPv4RouteList[9]> = {
+Old routes ('test1') = <IPv4RouteList[15]> = {
  0. Net 0.0.0.0/0 Gate 10.0.0.1 Ifp en0 Ifa 10.0.0.10
  1. Net 0.0.0.0/0 Gate 10.0.0.1 Ifp en1 Ifa 10.0.0.20 [SCOPED]
  2. Net 0.0.0.0/0 Gate 192.168.2.1 Ifp fw0 Ifa 192.168.2.30 [SCOPED]
@@ -2302,6 +3288,12 @@ Old routes ('test1') = <IPv4RouteList[9]> = {
  6. Net 10.0.0.1/32 Ifp en1 Ifa 10.0.0.20 [SCOPED]
  7. Net 192.168.2.0/24 Ifp fw0 Ifa 192.168.2.30
  8. Net 192.168.2.1/32 Ifp fw0 Ifa 192.168.2.30
+ 9. Net 224.0.0.0/4 Ifp en0 Ifa 10.0.0.10
+10. Net 224.0.0.0/4 Ifp en1 Ifa 10.0.0.20 [SCOPED]
+11. Net 224.0.0.0/4 Ifp fw0 Ifa 192.168.2.30 [SCOPED]
+12. Net 255.255.255.255/32 Ifp en0 Ifa 10.0.0.10
+13. Net 255.255.255.255/32 Ifp en1 Ifa 10.0.0.20 [SCOPED]
+14. Net 255.255.255.255/32 Ifp fw0 Ifa 192.168.2.30 [SCOPED]
 }
 Add new[5]: Net 10.0.0.1/32 Ifp en0 Ifa 10.0.0.10
 Add new[0]: Net 0.0.0.0/0 Gate 10.0.0.1 Ifp en0 Ifa 10.0.0.10
@@ -2312,27 +3304,43 @@ Add new[2]: Net 0.0.0.0/0 Gate 192.168.2.1 Ifp fw0 Ifa 192.168.2.30 [SCOPED]
 Add new[3]: Net 10.0.0.0/24 Ifp en0 Ifa 10.0.0.10
 Add new[4]: Net 10.0.0.0/24 Ifp en1 Ifa 10.0.0.20 [SCOPED]
 Add new[7]: Net 192.168.2.0/24 Ifp fw0 Ifa 192.168.2.30
-New Routes ('test13') = <IPv4RouteList[6]> = {
+Add new[9]: Net 224.0.0.0/4 Ifp en0 Ifa 10.0.0.10
+Add new[10]: Net 224.0.0.0/4 Ifp en1 Ifa 10.0.0.20 [SCOPED]
+Add new[11]: Net 224.0.0.0/4 Ifp fw0 Ifa 192.168.2.30 [SCOPED]
+Add new[12]: Net 255.255.255.255/32 Ifp en0 Ifa 10.0.0.10
+Add new[13]: Net 255.255.255.255/32 Ifp en1 Ifa 10.0.0.20 [SCOPED]
+Add new[14]: Net 255.255.255.255/32 Ifp fw0 Ifa 192.168.2.30 [SCOPED]
+New Routes ('test13') = <IPv4RouteList[10]> = {
  0. Net 0.0.0.0/0 Gate 10.0.0.1 Ifp en0 Ifa 10.0.0.10
  1. Net 0.0.0.0/0 Gate 10.0.0.1 Ifp en1 Ifa 10.0.0.20 [never] [SCOPED]
  2. Net 10.0.0.0/24 Ifp en0 Ifa 10.0.0.10
  3. Net 10.0.0.0/24 Ifp en1 Ifa 10.0.0.20 [last] [SCOPED]
  4. Net 10.0.0.1/32 Ifp en0 Ifa 10.0.0.10
  5. Net 10.0.0.1/32 Ifp en1 Ifa 10.0.0.20 [last] [SCOPED]
+ 6. Net 224.0.0.0/4 Ifp en0 Ifa 10.0.0.10
+ 7. Net 224.0.0.0/4 Ifp en1 Ifa 10.0.0.20 [last] [SCOPED]
+ 8. Net 255.255.255.255/32 Ifp en0 Ifa 10.0.0.10
+ 9. Net 255.255.255.255/32 Ifp en1 Ifa 10.0.0.20 [last] [SCOPED]
 }
 Remove old[2]: Net 0.0.0.0/0 Gate 192.168.2.1 Ifp fw0 Ifa 192.168.2.30 [SCOPED]
 Remove old[7]: Net 192.168.2.0/24 Ifp fw0 Ifa 192.168.2.30
 Remove old[8]: Net 192.168.2.1/32 Ifp fw0 Ifa 192.168.2.30
+Remove old[11]: Net 224.0.0.0/4 Ifp fw0 Ifa 192.168.2.30 [SCOPED]
+Remove old[14]: Net 255.255.255.255/32 Ifp fw0 Ifa 192.168.2.30 [SCOPED]
 =================> Apply 'test1', 'test13' End <=================
 
 =================> Apply 'test13', 'test1' Begin <=================
-Old routes ('test13') = <IPv4RouteList[6]> = {
+Old routes ('test13') = <IPv4RouteList[10]> = {
  0. Net 0.0.0.0/0 Gate 10.0.0.1 Ifp en0 Ifa 10.0.0.10
  1. Net 0.0.0.0/0 Gate 10.0.0.1 Ifp en1 Ifa 10.0.0.20 [never] [SCOPED]
  2. Net 10.0.0.0/24 Ifp en0 Ifa 10.0.0.10
  3. Net 10.0.0.0/24 Ifp en1 Ifa 10.0.0.20 [last] [SCOPED]
  4. Net 10.0.0.1/32 Ifp en0 Ifa 10.0.0.10
  5. Net 10.0.0.1/32 Ifp en1 Ifa 10.0.0.20 [last] [SCOPED]
+ 6. Net 224.0.0.0/4 Ifp en0 Ifa 10.0.0.10
+ 7. Net 224.0.0.0/4 Ifp en1 Ifa 10.0.0.20 [last] [SCOPED]
+ 8. Net 255.255.255.255/32 Ifp en0 Ifa 10.0.0.10
+ 9. Net 255.255.255.255/32 Ifp en1 Ifa 10.0.0.20 [last] [SCOPED]
 }
 Add new[4]: Net 10.0.0.1/32 Ifp en0 Ifa 10.0.0.10
 Add new[0]: Net 0.0.0.0/0 Gate 10.0.0.1 Ifp en0 Ifa 10.0.0.10
@@ -2340,7 +3348,11 @@ Add new[5]: Net 10.0.0.1/32 Ifp en1 Ifa 10.0.0.20 [last] [SCOPED]
 Add new[1]: Net 0.0.0.0/0 Gate 10.0.0.1 Ifp en1 Ifa 10.0.0.20 [never] [SCOPED]
 Add new[2]: Net 10.0.0.0/24 Ifp en0 Ifa 10.0.0.10
 Add new[3]: Net 10.0.0.0/24 Ifp en1 Ifa 10.0.0.20 [last] [SCOPED]
-New Routes ('test1') = <IPv4RouteList[9]> = {
+Add new[6]: Net 224.0.0.0/4 Ifp en0 Ifa 10.0.0.10
+Add new[7]: Net 224.0.0.0/4 Ifp en1 Ifa 10.0.0.20 [last] [SCOPED]
+Add new[8]: Net 255.255.255.255/32 Ifp en0 Ifa 10.0.0.10
+Add new[9]: Net 255.255.255.255/32 Ifp en1 Ifa 10.0.0.20 [last] [SCOPED]
+New Routes ('test1') = <IPv4RouteList[15]> = {
  0. Net 0.0.0.0/0 Gate 10.0.0.1 Ifp en0 Ifa 10.0.0.10
  1. Net 0.0.0.0/0 Gate 10.0.0.1 Ifp en1 Ifa 10.0.0.20 [SCOPED]
  2. Net 0.0.0.0/0 Gate 192.168.2.1 Ifp fw0 Ifa 192.168.2.30 [SCOPED]
@@ -2350,14 +3362,22 @@ New Routes ('test1') = <IPv4RouteList[9]> = {
  6. Net 10.0.0.1/32 Ifp en1 Ifa 10.0.0.20 [SCOPED]
  7. Net 192.168.2.0/24 Ifp fw0 Ifa 192.168.2.30
  8. Net 192.168.2.1/32 Ifp fw0 Ifa 192.168.2.30
+ 9. Net 224.0.0.0/4 Ifp en0 Ifa 10.0.0.10
+10. Net 224.0.0.0/4 Ifp en1 Ifa 10.0.0.20 [SCOPED]
+11. Net 224.0.0.0/4 Ifp fw0 Ifa 192.168.2.30 [SCOPED]
+12. Net 255.255.255.255/32 Ifp en0 Ifa 10.0.0.10
+13. Net 255.255.255.255/32 Ifp en1 Ifa 10.0.0.20 [SCOPED]
+14. Net 255.255.255.255/32 Ifp fw0 Ifa 192.168.2.30 [SCOPED]
 }
 Add new[8]: Net 192.168.2.1/32 Ifp fw0 Ifa 192.168.2.30
 Add new[2]: Net 0.0.0.0/0 Gate 192.168.2.1 Ifp fw0 Ifa 192.168.2.30 [SCOPED]
 Add new[7]: Net 192.168.2.0/24 Ifp fw0 Ifa 192.168.2.30
+Add new[11]: Net 224.0.0.0/4 Ifp fw0 Ifa 192.168.2.30 [SCOPED]
+Add new[14]: Net 255.255.255.255/32 Ifp fw0 Ifa 192.168.2.30 [SCOPED]
 =================> Apply 'test13', 'test1' End <=================
 
 =================> Apply 'test1', 'test14' Begin <=================
-Old routes ('test1') = <IPv4RouteList[9]> = {
+Old routes ('test1') = <IPv4RouteList[15]> = {
  0. Net 0.0.0.0/0 Gate 10.0.0.1 Ifp en0 Ifa 10.0.0.10
  1. Net 0.0.0.0/0 Gate 10.0.0.1 Ifp en1 Ifa 10.0.0.20 [SCOPED]
  2. Net 0.0.0.0/0 Gate 192.168.2.1 Ifp fw0 Ifa 192.168.2.30 [SCOPED]
@@ -2367,6 +3387,12 @@ Old routes ('test1') = <IPv4RouteList[9]> = {
  6. Net 10.0.0.1/32 Ifp en1 Ifa 10.0.0.20 [SCOPED]
  7. Net 192.168.2.0/24 Ifp fw0 Ifa 192.168.2.30
  8. Net 192.168.2.1/32 Ifp fw0 Ifa 192.168.2.30
+ 9. Net 224.0.0.0/4 Ifp en0 Ifa 10.0.0.10
+10. Net 224.0.0.0/4 Ifp en1 Ifa 10.0.0.20 [SCOPED]
+11. Net 224.0.0.0/4 Ifp fw0 Ifa 192.168.2.30 [SCOPED]
+12. Net 255.255.255.255/32 Ifp en0 Ifa 10.0.0.10
+13. Net 255.255.255.255/32 Ifp en1 Ifa 10.0.0.20 [SCOPED]
+14. Net 255.255.255.255/32 Ifp fw0 Ifa 192.168.2.30 [SCOPED]
 }
 Add new[5]: Net 10.0.0.1/32 Ifp en0 Ifa 10.0.0.10
 Add new[0]: Net 0.0.0.0/0 Gate 10.0.0.1 Ifp en0 Ifa 10.0.0.10
@@ -2377,10 +3403,18 @@ Add new[2]: Net 0.0.0.0/0 Gate 192.168.2.1 Ifp fw0 Ifa 192.168.2.30 [SCOPED]
 Add new[3]: Net 10.0.0.0/24 Ifp en0 Ifa 10.0.0.10
 Add new[4]: Net 10.0.0.0/24 Ifp en1 Ifa 10.0.0.20 [SCOPED]
 Add new[7]: Net 192.168.2.0/24 Ifp fw0 Ifa 192.168.2.30
-New Routes ('test14') = <IPv4RouteList[3]> = {
+Add new[9]: Net 224.0.0.0/4 Ifp en0 Ifa 10.0.0.10
+Add new[10]: Net 224.0.0.0/4 Ifp en1 Ifa 10.0.0.20 [SCOPED]
+Add new[11]: Net 224.0.0.0/4 Ifp fw0 Ifa 192.168.2.30 [SCOPED]
+Add new[12]: Net 255.255.255.255/32 Ifp en0 Ifa 10.0.0.10
+Add new[13]: Net 255.255.255.255/32 Ifp en1 Ifa 10.0.0.20 [SCOPED]
+Add new[14]: Net 255.255.255.255/32 Ifp fw0 Ifa 192.168.2.30 [SCOPED]
+New Routes ('test14') = <IPv4RouteList[5]> = {
  0. Net 0.0.0.0/0 Gate 10.0.0.1 Ifp en1 Ifa 10.0.0.20 [never] [SCOPED]
  1. Net 10.0.0.0/24 Ifp en1 Ifa 10.0.0.20 [last]
  2. Net 10.0.0.1/32 Ifp en1 Ifa 10.0.0.20 [last]
+ 3. Net 224.0.0.0/4 Ifp en1 Ifa 10.0.0.20 [last]
+ 4. Net 255.255.255.255/32 Ifp en1 Ifa 10.0.0.20 [last]
 }
 Remove old[0]: Net 0.0.0.0/0 Gate 10.0.0.1 Ifp en0 Ifa 10.0.0.10
 Remove old[2]: Net 0.0.0.0/0 Gate 192.168.2.1 Ifp fw0 Ifa 192.168.2.30 [SCOPED]
@@ -2390,20 +3424,32 @@ Remove old[5]: Net 10.0.0.1/32 Ifp en0 Ifa 10.0.0.10
 Remove old[6]: Net 10.0.0.1/32 Ifp en1 Ifa 10.0.0.20 [SCOPED]
 Remove old[7]: Net 192.168.2.0/24 Ifp fw0 Ifa 192.168.2.30
 Remove old[8]: Net 192.168.2.1/32 Ifp fw0 Ifa 192.168.2.30
+Remove old[9]: Net 224.0.0.0/4 Ifp en0 Ifa 10.0.0.10
+Remove old[10]: Net 224.0.0.0/4 Ifp en1 Ifa 10.0.0.20 [SCOPED]
+Remove old[11]: Net 224.0.0.0/4 Ifp fw0 Ifa 192.168.2.30 [SCOPED]
+Remove old[12]: Net 255.255.255.255/32 Ifp en0 Ifa 10.0.0.10
+Remove old[13]: Net 255.255.255.255/32 Ifp en1 Ifa 10.0.0.20 [SCOPED]
+Remove old[14]: Net 255.255.255.255/32 Ifp fw0 Ifa 192.168.2.30 [SCOPED]
 Add new[1]: Net 10.0.0.0/24 Ifp en1 Ifa 10.0.0.20 [last]
 Add new[2]: Net 10.0.0.1/32 Ifp en1 Ifa 10.0.0.20 [last]
+Add new[3]: Net 224.0.0.0/4 Ifp en1 Ifa 10.0.0.20 [last]
+Add new[4]: Net 255.255.255.255/32 Ifp en1 Ifa 10.0.0.20 [last]
 =================> Apply 'test1', 'test14' End <=================
 
 =================> Apply 'test14', 'test1' Begin <=================
-Old routes ('test14') = <IPv4RouteList[3]> = {
+Old routes ('test14') = <IPv4RouteList[5]> = {
  0. Net 0.0.0.0/0 Gate 10.0.0.1 Ifp en1 Ifa 10.0.0.20 [never] [SCOPED]
  1. Net 10.0.0.0/24 Ifp en1 Ifa 10.0.0.20 [last]
  2. Net 10.0.0.1/32 Ifp en1 Ifa 10.0.0.20 [last]
+ 3. Net 224.0.0.0/4 Ifp en1 Ifa 10.0.0.20 [last]
+ 4. Net 255.255.255.255/32 Ifp en1 Ifa 10.0.0.20 [last]
 }
 Add new[2]: Net 10.0.0.1/32 Ifp en1 Ifa 10.0.0.20 [last]
 Add new[0]: Net 0.0.0.0/0 Gate 10.0.0.1 Ifp en1 Ifa 10.0.0.20 [never] [SCOPED]
 Add new[1]: Net 10.0.0.0/24 Ifp en1 Ifa 10.0.0.20 [last]
-New Routes ('test1') = <IPv4RouteList[9]> = {
+Add new[3]: Net 224.0.0.0/4 Ifp en1 Ifa 10.0.0.20 [last]
+Add new[4]: Net 255.255.255.255/32 Ifp en1 Ifa 10.0.0.20 [last]
+New Routes ('test1') = <IPv4RouteList[15]> = {
  0. Net 0.0.0.0/0 Gate 10.0.0.1 Ifp en0 Ifa 10.0.0.10
  1. Net 0.0.0.0/0 Gate 10.0.0.1 Ifp en1 Ifa 10.0.0.20 [SCOPED]
  2. Net 0.0.0.0/0 Gate 192.168.2.1 Ifp fw0 Ifa 192.168.2.30 [SCOPED]
@@ -2413,9 +3459,17 @@ New Routes ('test1') = <IPv4RouteList[9]> = {
  6. Net 10.0.0.1/32 Ifp en1 Ifa 10.0.0.20 [SCOPED]
  7. Net 192.168.2.0/24 Ifp fw0 Ifa 192.168.2.30
  8. Net 192.168.2.1/32 Ifp fw0 Ifa 192.168.2.30
+ 9. Net 224.0.0.0/4 Ifp en0 Ifa 10.0.0.10
+10. Net 224.0.0.0/4 Ifp en1 Ifa 10.0.0.20 [SCOPED]
+11. Net 224.0.0.0/4 Ifp fw0 Ifa 192.168.2.30 [SCOPED]
+12. Net 255.255.255.255/32 Ifp en0 Ifa 10.0.0.10
+13. Net 255.255.255.255/32 Ifp en1 Ifa 10.0.0.20 [SCOPED]
+14. Net 255.255.255.255/32 Ifp fw0 Ifa 192.168.2.30 [SCOPED]
 }
 Remove old[1]: Net 10.0.0.0/24 Ifp en1 Ifa 10.0.0.20 [last]
 Remove old[2]: Net 10.0.0.1/32 Ifp en1 Ifa 10.0.0.20 [last]
+Remove old[3]: Net 224.0.0.0/4 Ifp en1 Ifa 10.0.0.20 [last]
+Remove old[4]: Net 255.255.255.255/32 Ifp en1 Ifa 10.0.0.20 [last]
 Add new[5]: Net 10.0.0.1/32 Ifp en0 Ifa 10.0.0.10
 Add new[0]: Net 0.0.0.0/0 Gate 10.0.0.1 Ifp en0 Ifa 10.0.0.10
 Add new[8]: Net 192.168.2.1/32 Ifp fw0 Ifa 192.168.2.30
@@ -2424,10 +3478,16 @@ Add new[3]: Net 10.0.0.0/24 Ifp en0 Ifa 10.0.0.10
 Add new[4]: Net 10.0.0.0/24 Ifp en1 Ifa 10.0.0.20 [SCOPED]
 Add new[6]: Net 10.0.0.1/32 Ifp en1 Ifa 10.0.0.20 [SCOPED]
 Add new[7]: Net 192.168.2.0/24 Ifp fw0 Ifa 192.168.2.30
+Add new[9]: Net 224.0.0.0/4 Ifp en0 Ifa 10.0.0.10
+Add new[10]: Net 224.0.0.0/4 Ifp en1 Ifa 10.0.0.20 [SCOPED]
+Add new[11]: Net 224.0.0.0/4 Ifp fw0 Ifa 192.168.2.30 [SCOPED]
+Add new[12]: Net 255.255.255.255/32 Ifp en0 Ifa 10.0.0.10
+Add new[13]: Net 255.255.255.255/32 Ifp en1 Ifa 10.0.0.20 [SCOPED]
+Add new[14]: Net 255.255.255.255/32 Ifp fw0 Ifa 192.168.2.30 [SCOPED]
 =================> Apply 'test14', 'test1' End <=================
 
 =================> Apply 'test1', 'test15' Begin <=================
-Old routes ('test1') = <IPv4RouteList[9]> = {
+Old routes ('test1') = <IPv4RouteList[15]> = {
  0. Net 0.0.0.0/0 Gate 10.0.0.1 Ifp en0 Ifa 10.0.0.10
  1. Net 0.0.0.0/0 Gate 10.0.0.1 Ifp en1 Ifa 10.0.0.20 [SCOPED]
  2. Net 0.0.0.0/0 Gate 192.168.2.1 Ifp fw0 Ifa 192.168.2.30 [SCOPED]
@@ -2437,6 +3497,12 @@ Old routes ('test1') = <IPv4RouteList[9]> = {
  6. Net 10.0.0.1/32 Ifp en1 Ifa 10.0.0.20 [SCOPED]
  7. Net 192.168.2.0/24 Ifp fw0 Ifa 192.168.2.30
  8. Net 192.168.2.1/32 Ifp fw0 Ifa 192.168.2.30
+ 9. Net 224.0.0.0/4 Ifp en0 Ifa 10.0.0.10
+10. Net 224.0.0.0/4 Ifp en1 Ifa 10.0.0.20 [SCOPED]
+11. Net 224.0.0.0/4 Ifp fw0 Ifa 192.168.2.30 [SCOPED]
+12. Net 255.255.255.255/32 Ifp en0 Ifa 10.0.0.10
+13. Net 255.255.255.255/32 Ifp en1 Ifa 10.0.0.20 [SCOPED]
+14. Net 255.255.255.255/32 Ifp fw0 Ifa 192.168.2.30 [SCOPED]
 }
 Add new[5]: Net 10.0.0.1/32 Ifp en0 Ifa 10.0.0.10
 Add new[0]: Net 0.0.0.0/0 Gate 10.0.0.1 Ifp en0 Ifa 10.0.0.10
@@ -2447,8 +3513,16 @@ Add new[2]: Net 0.0.0.0/0 Gate 192.168.2.1 Ifp fw0 Ifa 192.168.2.30 [SCOPED]
 Add new[3]: Net 10.0.0.0/24 Ifp en0 Ifa 10.0.0.10
 Add new[4]: Net 10.0.0.0/24 Ifp en1 Ifa 10.0.0.20 [SCOPED]
 Add new[7]: Net 192.168.2.0/24 Ifp fw0 Ifa 192.168.2.30
-New Routes ('test15') = <IPv4RouteList[1]> = {
- 0. Net 0.0.0.0/0 Ifp en0 Ifa 169.254.22.44
+Add new[9]: Net 224.0.0.0/4 Ifp en0 Ifa 10.0.0.10
+Add new[10]: Net 224.0.0.0/4 Ifp en1 Ifa 10.0.0.20 [SCOPED]
+Add new[11]: Net 224.0.0.0/4 Ifp fw0 Ifa 192.168.2.30 [SCOPED]
+Add new[12]: Net 255.255.255.255/32 Ifp en0 Ifa 10.0.0.10
+Add new[13]: Net 255.255.255.255/32 Ifp en1 Ifa 10.0.0.20 [SCOPED]
+Add new[14]: Net 255.255.255.255/32 Ifp fw0 Ifa 192.168.2.30 [SCOPED]
+New Routes ('test15') = <IPv4RouteList[3]> = {
+ 0. Net 169.254.0.0/16 Ifp en0 Ifa 169.254.22.44 [last]
+ 1. Net 224.0.0.0/4 Ifp en0 Ifa 169.254.22.44 [last]
+ 2. Net 255.255.255.255/32 Ifp en0 Ifa 169.254.22.44 [last]
 }
 Remove old[0]: Net 0.0.0.0/0 Gate 10.0.0.1 Ifp en0 Ifa 10.0.0.10
 Remove old[1]: Net 0.0.0.0/0 Gate 10.0.0.1 Ifp en1 Ifa 10.0.0.20 [SCOPED]
@@ -2459,15 +3533,27 @@ Remove old[5]: Net 10.0.0.1/32 Ifp en0 Ifa 10.0.0.10
 Remove old[6]: Net 10.0.0.1/32 Ifp en1 Ifa 10.0.0.20 [SCOPED]
 Remove old[7]: Net 192.168.2.0/24 Ifp fw0 Ifa 192.168.2.30
 Remove old[8]: Net 192.168.2.1/32 Ifp fw0 Ifa 192.168.2.30
-Add new[0]: Net 0.0.0.0/0 Ifp en0 Ifa 169.254.22.44
+Remove old[9]: Net 224.0.0.0/4 Ifp en0 Ifa 10.0.0.10
+Remove old[10]: Net 224.0.0.0/4 Ifp en1 Ifa 10.0.0.20 [SCOPED]
+Remove old[11]: Net 224.0.0.0/4 Ifp fw0 Ifa 192.168.2.30 [SCOPED]
+Remove old[12]: Net 255.255.255.255/32 Ifp en0 Ifa 10.0.0.10
+Remove old[13]: Net 255.255.255.255/32 Ifp en1 Ifa 10.0.0.20 [SCOPED]
+Remove old[14]: Net 255.255.255.255/32 Ifp fw0 Ifa 192.168.2.30 [SCOPED]
+Add new[0]: Net 169.254.0.0/16 Ifp en0 Ifa 169.254.22.44 [last]
+Add new[1]: Net 224.0.0.0/4 Ifp en0 Ifa 169.254.22.44 [last]
+Add new[2]: Net 255.255.255.255/32 Ifp en0 Ifa 169.254.22.44 [last]
 =================> Apply 'test1', 'test15' End <=================
 
 =================> Apply 'test15', 'test1' Begin <=================
-Old routes ('test15') = <IPv4RouteList[1]> = {
- 0. Net 0.0.0.0/0 Ifp en0 Ifa 169.254.22.44
+Old routes ('test15') = <IPv4RouteList[3]> = {
+ 0. Net 169.254.0.0/16 Ifp en0 Ifa 169.254.22.44 [last]
+ 1. Net 224.0.0.0/4 Ifp en0 Ifa 169.254.22.44 [last]
+ 2. Net 255.255.255.255/32 Ifp en0 Ifa 169.254.22.44 [last]
 }
-Add new[0]: Net 0.0.0.0/0 Ifp en0 Ifa 169.254.22.44
-New Routes ('test1') = <IPv4RouteList[9]> = {
+Add new[0]: Net 169.254.0.0/16 Ifp en0 Ifa 169.254.22.44 [last]
+Add new[1]: Net 224.0.0.0/4 Ifp en0 Ifa 169.254.22.44 [last]
+Add new[2]: Net 255.255.255.255/32 Ifp en0 Ifa 169.254.22.44 [last]
+New Routes ('test1') = <IPv4RouteList[15]> = {
  0. Net 0.0.0.0/0 Gate 10.0.0.1 Ifp en0 Ifa 10.0.0.10
  1. Net 0.0.0.0/0 Gate 10.0.0.1 Ifp en1 Ifa 10.0.0.20 [SCOPED]
  2. Net 0.0.0.0/0 Gate 192.168.2.1 Ifp fw0 Ifa 192.168.2.30 [SCOPED]
@@ -2477,8 +3563,16 @@ New Routes ('test1') = <IPv4RouteList[9]> = {
  6. Net 10.0.0.1/32 Ifp en1 Ifa 10.0.0.20 [SCOPED]
  7. Net 192.168.2.0/24 Ifp fw0 Ifa 192.168.2.30
  8. Net 192.168.2.1/32 Ifp fw0 Ifa 192.168.2.30
-}
-Remove old[0]: Net 0.0.0.0/0 Ifp en0 Ifa 169.254.22.44
+ 9. Net 224.0.0.0/4 Ifp en0 Ifa 10.0.0.10
+10. Net 224.0.0.0/4 Ifp en1 Ifa 10.0.0.20 [SCOPED]
+11. Net 224.0.0.0/4 Ifp fw0 Ifa 192.168.2.30 [SCOPED]
+12. Net 255.255.255.255/32 Ifp en0 Ifa 10.0.0.10
+13. Net 255.255.255.255/32 Ifp en1 Ifa 10.0.0.20 [SCOPED]
+14. Net 255.255.255.255/32 Ifp fw0 Ifa 192.168.2.30 [SCOPED]
+}
+Remove old[0]: Net 169.254.0.0/16 Ifp en0 Ifa 169.254.22.44 [last]
+Remove old[1]: Net 224.0.0.0/4 Ifp en0 Ifa 169.254.22.44 [last]
+Remove old[2]: Net 255.255.255.255/32 Ifp en0 Ifa 169.254.22.44 [last]
 Add new[5]: Net 10.0.0.1/32 Ifp en0 Ifa 10.0.0.10
 Add new[0]: Net 0.0.0.0/0 Gate 10.0.0.1 Ifp en0 Ifa 10.0.0.10
 Add new[6]: Net 10.0.0.1/32 Ifp en1 Ifa 10.0.0.20 [SCOPED]
@@ -2488,10 +3582,16 @@ Add new[2]: Net 0.0.0.0/0 Gate 192.168.2.1 Ifp fw0 Ifa 192.168.2.30 [SCOPED]
 Add new[3]: Net 10.0.0.0/24 Ifp en0 Ifa 10.0.0.10
 Add new[4]: Net 10.0.0.0/24 Ifp en1 Ifa 10.0.0.20 [SCOPED]
 Add new[7]: Net 192.168.2.0/24 Ifp fw0 Ifa 192.168.2.30
+Add new[9]: Net 224.0.0.0/4 Ifp en0 Ifa 10.0.0.10
+Add new[10]: Net 224.0.0.0/4 Ifp en1 Ifa 10.0.0.20 [SCOPED]
+Add new[11]: Net 224.0.0.0/4 Ifp fw0 Ifa 192.168.2.30 [SCOPED]
+Add new[12]: Net 255.255.255.255/32 Ifp en0 Ifa 10.0.0.10
+Add new[13]: Net 255.255.255.255/32 Ifp en1 Ifa 10.0.0.20 [SCOPED]
+Add new[14]: Net 255.255.255.255/32 Ifp fw0 Ifa 192.168.2.30 [SCOPED]
 =================> Apply 'test15', 'test1' End <=================
 
 =================> Apply 'test1', 'test16' Begin <=================
-Old routes ('test1') = <IPv4RouteList[9]> = {
+Old routes ('test1') = <IPv4RouteList[15]> = {
  0. Net 0.0.0.0/0 Gate 10.0.0.1 Ifp en0 Ifa 10.0.0.10
  1. Net 0.0.0.0/0 Gate 10.0.0.1 Ifp en1 Ifa 10.0.0.20 [SCOPED]
  2. Net 0.0.0.0/0 Gate 192.168.2.1 Ifp fw0 Ifa 192.168.2.30 [SCOPED]
@@ -2501,6 +3601,12 @@ Old routes ('test1') = <IPv4RouteList[9]> = {
  6. Net 10.0.0.1/32 Ifp en1 Ifa 10.0.0.20 [SCOPED]
  7. Net 192.168.2.0/24 Ifp fw0 Ifa 192.168.2.30
  8. Net 192.168.2.1/32 Ifp fw0 Ifa 192.168.2.30
+ 9. Net 224.0.0.0/4 Ifp en0 Ifa 10.0.0.10
+10. Net 224.0.0.0/4 Ifp en1 Ifa 10.0.0.20 [SCOPED]
+11. Net 224.0.0.0/4 Ifp fw0 Ifa 192.168.2.30 [SCOPED]
+12. Net 255.255.255.255/32 Ifp en0 Ifa 10.0.0.10
+13. Net 255.255.255.255/32 Ifp en1 Ifa 10.0.0.20 [SCOPED]
+14. Net 255.255.255.255/32 Ifp fw0 Ifa 192.168.2.30 [SCOPED]
 }
 Add new[5]: Net 10.0.0.1/32 Ifp en0 Ifa 10.0.0.10
 Add new[0]: Net 0.0.0.0/0 Gate 10.0.0.1 Ifp en0 Ifa 10.0.0.10
@@ -2511,7 +3617,13 @@ Add new[2]: Net 0.0.0.0/0 Gate 192.168.2.1 Ifp fw0 Ifa 192.168.2.30 [SCOPED]
 Add new[3]: Net 10.0.0.0/24 Ifp en0 Ifa 10.0.0.10
 Add new[4]: Net 10.0.0.0/24 Ifp en1 Ifa 10.0.0.20 [SCOPED]
 Add new[7]: Net 192.168.2.0/24 Ifp fw0 Ifa 192.168.2.30
-New Routes ('test16') = <IPv4RouteList[50]> = {
+Add new[9]: Net 224.0.0.0/4 Ifp en0 Ifa 10.0.0.10
+Add new[10]: Net 224.0.0.0/4 Ifp en1 Ifa 10.0.0.20 [SCOPED]
+Add new[11]: Net 224.0.0.0/4 Ifp fw0 Ifa 192.168.2.30 [SCOPED]
+Add new[12]: Net 255.255.255.255/32 Ifp en0 Ifa 10.0.0.10
+Add new[13]: Net 255.255.255.255/32 Ifp en1 Ifa 10.0.0.20 [SCOPED]
+Add new[14]: Net 255.255.255.255/32 Ifp fw0 Ifa 192.168.2.30 [SCOPED]
+New Routes ('test16') = <IPv4RouteList[54]> = {
  0. Net 0.0.0.0/0 Gate 10.0.0.1 Ifp en0 Ifa 10.0.0.10
  1. Net 0.0.0.0/0 Ifp utun0 Ifa 17.153.46.24 [SCOPED]
  2. Net 10.0.0.0/24 Ifp en0 Ifa 10.0.0.10
@@ -2562,6 +3674,10 @@ New Routes ('test16') = <IPv4RouteList[50]> = {
 47. Net 192.35.50.0/24 Gate 17.153.46.24 Ifp utun0 Ifa 17.153.46.24
 48. Net 204.179.20.0/24 Gate 17.153.46.24 Ifp utun0 Ifa 17.153.46.24
 49. Net 206.112.116.0/24 Gate 17.153.46.24 Ifp utun0 Ifa 17.153.46.24
+50. Net 224.0.0.0/4 Ifp en0 Ifa 10.0.0.10
+51. Net 224.0.0.0/4 Ifp utun0 Ifa 17.153.46.24 [SCOPED]
+52. Net 255.255.255.255/32 Ifp en0 Ifa 10.0.0.10
+53. Net 255.255.255.255/32 Ifp utun0 Ifa 17.153.46.24 [SCOPED]
 }
 Remove old[1]: Net 0.0.0.0/0 Gate 10.0.0.1 Ifp en1 Ifa 10.0.0.20 [SCOPED]
 Remove old[2]: Net 0.0.0.0/0 Gate 192.168.2.1 Ifp fw0 Ifa 192.168.2.30 [SCOPED]
@@ -2569,6 +3685,10 @@ Remove old[4]: Net 10.0.0.0/24 Ifp en1 Ifa 10.0.0.20 [SCOPED]
 Remove old[6]: Net 10.0.0.1/32 Ifp en1 Ifa 10.0.0.20 [SCOPED]
 Remove old[7]: Net 192.168.2.0/24 Ifp fw0 Ifa 192.168.2.30
 Remove old[8]: Net 192.168.2.1/32 Ifp fw0 Ifa 192.168.2.30
+Remove old[10]: Net 224.0.0.0/4 Ifp en1 Ifa 10.0.0.20 [SCOPED]
+Remove old[11]: Net 224.0.0.0/4 Ifp fw0 Ifa 192.168.2.30 [SCOPED]
+Remove old[13]: Net 255.255.255.255/32 Ifp en1 Ifa 10.0.0.20 [SCOPED]
+Remove old[14]: Net 255.255.255.255/32 Ifp fw0 Ifa 192.168.2.30 [SCOPED]
 Add new[1]: Net 0.0.0.0/0 Ifp utun0 Ifa 17.153.46.24 [SCOPED]
 Add new[4]: Net 10.1.3.0/24 Gate 17.153.46.24 Ifp utun0 Ifa 17.153.46.24
 Add new[5]: Net 10.1.4.0/24 Gate 17.153.46.24 Ifp utun0 Ifa 17.153.46.24
@@ -2616,10 +3736,12 @@ Add new[46]: Net 172.16.2.0/24 Gate 17.153.46.24 Ifp utun0 Ifa 17.153.46.24
 Add new[47]: Net 192.35.50.0/24 Gate 17.153.46.24 Ifp utun0 Ifa 17.153.46.24
 Add new[48]: Net 204.179.20.0/24 Gate 17.153.46.24 Ifp utun0 Ifa 17.153.46.24
 Add new[49]: Net 206.112.116.0/24 Gate 17.153.46.24 Ifp utun0 Ifa 17.153.46.24
+Add new[51]: Net 224.0.0.0/4 Ifp utun0 Ifa 17.153.46.24 [SCOPED]
+Add new[53]: Net 255.255.255.255/32 Ifp utun0 Ifa 17.153.46.24 [SCOPED]
 =================> Apply 'test1', 'test16' End <=================
 
 =================> Apply 'test16', 'test1' Begin <=================
-Old routes ('test16') = <IPv4RouteList[50]> = {
+Old routes ('test16') = <IPv4RouteList[54]> = {
  0. Net 0.0.0.0/0 Gate 10.0.0.1 Ifp en0 Ifa 10.0.0.10
  1. Net 0.0.0.0/0 Ifp utun0 Ifa 17.153.46.24 [SCOPED]
  2. Net 10.0.0.0/24 Ifp en0 Ifa 10.0.0.10
@@ -2670,6 +3792,10 @@ Old routes ('test16') = <IPv4RouteList[50]> = {
 47. Net 192.35.50.0/24 Gate 17.153.46.24 Ifp utun0 Ifa 17.153.46.24
 48. Net 204.179.20.0/24 Gate 17.153.46.24 Ifp utun0 Ifa 17.153.46.24
 49. Net 206.112.116.0/24 Gate 17.153.46.24 Ifp utun0 Ifa 17.153.46.24
+50. Net 224.0.0.0/4 Ifp en0 Ifa 10.0.0.10
+51. Net 224.0.0.0/4 Ifp utun0 Ifa 17.153.46.24 [SCOPED]
+52. Net 255.255.255.255/32 Ifp en0 Ifa 10.0.0.10
+53. Net 255.255.255.255/32 Ifp utun0 Ifa 17.153.46.24 [SCOPED]
 }
 Add new[3]: Net 10.0.0.1/32 Ifp en0 Ifa 10.0.0.10
 Add new[0]: Net 0.0.0.0/0 Gate 10.0.0.1 Ifp en0 Ifa 10.0.0.10
@@ -2721,7 +3847,11 @@ Add new[46]: Net 172.16.2.0/24 Gate 17.153.46.24 Ifp utun0 Ifa 17.153.46.24
 Add new[47]: Net 192.35.50.0/24 Gate 17.153.46.24 Ifp utun0 Ifa 17.153.46.24
 Add new[48]: Net 204.179.20.0/24 Gate 17.153.46.24 Ifp utun0 Ifa 17.153.46.24
 Add new[49]: Net 206.112.116.0/24 Gate 17.153.46.24 Ifp utun0 Ifa 17.153.46.24
-New Routes ('test1') = <IPv4RouteList[9]> = {
+Add new[50]: Net 224.0.0.0/4 Ifp en0 Ifa 10.0.0.10
+Add new[51]: Net 224.0.0.0/4 Ifp utun0 Ifa 17.153.46.24 [SCOPED]
+Add new[52]: Net 255.255.255.255/32 Ifp en0 Ifa 10.0.0.10
+Add new[53]: Net 255.255.255.255/32 Ifp utun0 Ifa 17.153.46.24 [SCOPED]
+New Routes ('test1') = <IPv4RouteList[15]> = {
  0. Net 0.0.0.0/0 Gate 10.0.0.1 Ifp en0 Ifa 10.0.0.10
  1. Net 0.0.0.0/0 Gate 10.0.0.1 Ifp en1 Ifa 10.0.0.20 [SCOPED]
  2. Net 0.0.0.0/0 Gate 192.168.2.1 Ifp fw0 Ifa 192.168.2.30 [SCOPED]
@@ -2731,6 +3861,12 @@ New Routes ('test1') = <IPv4RouteList[9]> = {
  6. Net 10.0.0.1/32 Ifp en1 Ifa 10.0.0.20 [SCOPED]
  7. Net 192.168.2.0/24 Ifp fw0 Ifa 192.168.2.30
  8. Net 192.168.2.1/32 Ifp fw0 Ifa 192.168.2.30
+ 9. Net 224.0.0.0/4 Ifp en0 Ifa 10.0.0.10
+10. Net 224.0.0.0/4 Ifp en1 Ifa 10.0.0.20 [SCOPED]
+11. Net 224.0.0.0/4 Ifp fw0 Ifa 192.168.2.30 [SCOPED]
+12. Net 255.255.255.255/32 Ifp en0 Ifa 10.0.0.10
+13. Net 255.255.255.255/32 Ifp en1 Ifa 10.0.0.20 [SCOPED]
+14. Net 255.255.255.255/32 Ifp fw0 Ifa 192.168.2.30 [SCOPED]
 }
 Remove old[1]: Net 0.0.0.0/0 Ifp utun0 Ifa 17.153.46.24 [SCOPED]
 Remove old[4]: Net 10.1.3.0/24 Gate 17.153.46.24 Ifp utun0 Ifa 17.153.46.24
@@ -2779,16 +3915,22 @@ Remove old[46]: Net 172.16.2.0/24 Gate 17.153.46.24 Ifp utun0 Ifa 17.153.46.24
 Remove old[47]: Net 192.35.50.0/24 Gate 17.153.46.24 Ifp utun0 Ifa 17.153.46.24
 Remove old[48]: Net 204.179.20.0/24 Gate 17.153.46.24 Ifp utun0 Ifa 17.153.46.24
 Remove old[49]: Net 206.112.116.0/24 Gate 17.153.46.24 Ifp utun0 Ifa 17.153.46.24
+Remove old[51]: Net 224.0.0.0/4 Ifp utun0 Ifa 17.153.46.24 [SCOPED]
+Remove old[53]: Net 255.255.255.255/32 Ifp utun0 Ifa 17.153.46.24 [SCOPED]
 Add new[6]: Net 10.0.0.1/32 Ifp en1 Ifa 10.0.0.20 [SCOPED]
 Add new[1]: Net 0.0.0.0/0 Gate 10.0.0.1 Ifp en1 Ifa 10.0.0.20 [SCOPED]
 Add new[8]: Net 192.168.2.1/32 Ifp fw0 Ifa 192.168.2.30
 Add new[2]: Net 0.0.0.0/0 Gate 192.168.2.1 Ifp fw0 Ifa 192.168.2.30 [SCOPED]
 Add new[4]: Net 10.0.0.0/24 Ifp en1 Ifa 10.0.0.20 [SCOPED]
 Add new[7]: Net 192.168.2.0/24 Ifp fw0 Ifa 192.168.2.30
+Add new[10]: Net 224.0.0.0/4 Ifp en1 Ifa 10.0.0.20 [SCOPED]
+Add new[11]: Net 224.0.0.0/4 Ifp fw0 Ifa 192.168.2.30 [SCOPED]
+Add new[13]: Net 255.255.255.255/32 Ifp en1 Ifa 10.0.0.20 [SCOPED]
+Add new[14]: Net 255.255.255.255/32 Ifp fw0 Ifa 192.168.2.30 [SCOPED]
 =================> Apply 'test16', 'test1' End <=================
 
 =================> Apply 'test1', 'test17' Begin <=================
-Old routes ('test1') = <IPv4RouteList[9]> = {
+Old routes ('test1') = <IPv4RouteList[15]> = {
  0. Net 0.0.0.0/0 Gate 10.0.0.1 Ifp en0 Ifa 10.0.0.10
  1. Net 0.0.0.0/0 Gate 10.0.0.1 Ifp en1 Ifa 10.0.0.20 [SCOPED]
  2. Net 0.0.0.0/0 Gate 192.168.2.1 Ifp fw0 Ifa 192.168.2.30 [SCOPED]
@@ -2798,6 +3940,12 @@ Old routes ('test1') = <IPv4RouteList[9]> = {
  6. Net 10.0.0.1/32 Ifp en1 Ifa 10.0.0.20 [SCOPED]
  7. Net 192.168.2.0/24 Ifp fw0 Ifa 192.168.2.30
  8. Net 192.168.2.1/32 Ifp fw0 Ifa 192.168.2.30
+ 9. Net 224.0.0.0/4 Ifp en0 Ifa 10.0.0.10
+10. Net 224.0.0.0/4 Ifp en1 Ifa 10.0.0.20 [SCOPED]
+11. Net 224.0.0.0/4 Ifp fw0 Ifa 192.168.2.30 [SCOPED]
+12. Net 255.255.255.255/32 Ifp en0 Ifa 10.0.0.10
+13. Net 255.255.255.255/32 Ifp en1 Ifa 10.0.0.20 [SCOPED]
+14. Net 255.255.255.255/32 Ifp fw0 Ifa 192.168.2.30 [SCOPED]
 }
 Add new[5]: Net 10.0.0.1/32 Ifp en0 Ifa 10.0.0.10
 Add new[0]: Net 0.0.0.0/0 Gate 10.0.0.1 Ifp en0 Ifa 10.0.0.10
@@ -2808,13 +3956,23 @@ Add new[2]: Net 0.0.0.0/0 Gate 192.168.2.1 Ifp fw0 Ifa 192.168.2.30 [SCOPED]
 Add new[3]: Net 10.0.0.0/24 Ifp en0 Ifa 10.0.0.10
 Add new[4]: Net 10.0.0.0/24 Ifp en1 Ifa 10.0.0.20 [SCOPED]
 Add new[7]: Net 192.168.2.0/24 Ifp fw0 Ifa 192.168.2.30
-New Routes ('test17') = <IPv4RouteList[6]> = {
+Add new[9]: Net 224.0.0.0/4 Ifp en0 Ifa 10.0.0.10
+Add new[10]: Net 224.0.0.0/4 Ifp en1 Ifa 10.0.0.20 [SCOPED]
+Add new[11]: Net 224.0.0.0/4 Ifp fw0 Ifa 192.168.2.30 [SCOPED]
+Add new[12]: Net 255.255.255.255/32 Ifp en0 Ifa 10.0.0.10
+Add new[13]: Net 255.255.255.255/32 Ifp en1 Ifa 10.0.0.20 [SCOPED]
+Add new[14]: Net 255.255.255.255/32 Ifp fw0 Ifa 192.168.2.30 [SCOPED]
+New Routes ('test17') = <IPv4RouteList[10]> = {
  0. Net 0.0.0.0/0 Gate 10.0.0.1 Ifp en0 Ifa 10.0.0.10
  1. Net 0.0.0.0/0 Gate 192.168.2.1 Ifp en1 Ifa 192.168.2.50 [never] [SCOPED]
  2. Net 10.0.0.0/24 Ifp en0 Ifa 10.0.0.10
  3. Net 10.0.0.1/32 Ifp en0 Ifa 10.0.0.10
  4. Net 192.168.2.0/24 Ifp en1 Ifa 192.168.2.50 [last]
  5. Net 192.168.2.1/32 Ifp en1 Ifa 192.168.2.50 [last]
+ 6. Net 224.0.0.0/4 Ifp en0 Ifa 10.0.0.10
+ 7. Net 224.0.0.0/4 Ifp en1 Ifa 192.168.2.50 [last] [SCOPED]
+ 8. Net 255.255.255.255/32 Ifp en0 Ifa 10.0.0.10
+ 9. Net 255.255.255.255/32 Ifp en1 Ifa 192.168.2.50 [last] [SCOPED]
 }
 Remove old[1]: Net 0.0.0.0/0 Gate 10.0.0.1 Ifp en1 Ifa 10.0.0.20 [SCOPED]
 Remove old[2]: Net 0.0.0.0/0 Gate 192.168.2.1 Ifp fw0 Ifa 192.168.2.30 [SCOPED]
@@ -2822,19 +3980,29 @@ Remove old[4]: Net 10.0.0.0/24 Ifp en1 Ifa 10.0.0.20 [SCOPED]
 Remove old[6]: Net 10.0.0.1/32 Ifp en1 Ifa 10.0.0.20 [SCOPED]
 Remove old[7]: Net 192.168.2.0/24 Ifp fw0 Ifa 192.168.2.30
 Remove old[8]: Net 192.168.2.1/32 Ifp fw0 Ifa 192.168.2.30
+Remove old[10]: Net 224.0.0.0/4 Ifp en1 Ifa 10.0.0.20 [SCOPED]
+Remove old[11]: Net 224.0.0.0/4 Ifp fw0 Ifa 192.168.2.30 [SCOPED]
+Remove old[13]: Net 255.255.255.255/32 Ifp en1 Ifa 10.0.0.20 [SCOPED]
+Remove old[14]: Net 255.255.255.255/32 Ifp fw0 Ifa 192.168.2.30 [SCOPED]
 Add new[5]: Net 192.168.2.1/32 Ifp en1 Ifa 192.168.2.50 [last]
 Add new[1]: Net 0.0.0.0/0 Gate 192.168.2.1 Ifp en1 Ifa 192.168.2.50 [never] [SCOPED]
 Add new[4]: Net 192.168.2.0/24 Ifp en1 Ifa 192.168.2.50 [last]
+Add new[7]: Net 224.0.0.0/4 Ifp en1 Ifa 192.168.2.50 [last] [SCOPED]
+Add new[9]: Net 255.255.255.255/32 Ifp en1 Ifa 192.168.2.50 [last] [SCOPED]
 =================> Apply 'test1', 'test17' End <=================
 
 =================> Apply 'test17', 'test1' Begin <=================
-Old routes ('test17') = <IPv4RouteList[6]> = {
+Old routes ('test17') = <IPv4RouteList[10]> = {
  0. Net 0.0.0.0/0 Gate 10.0.0.1 Ifp en0 Ifa 10.0.0.10
  1. Net 0.0.0.0/0 Gate 192.168.2.1 Ifp en1 Ifa 192.168.2.50 [never] [SCOPED]
  2. Net 10.0.0.0/24 Ifp en0 Ifa 10.0.0.10
  3. Net 10.0.0.1/32 Ifp en0 Ifa 10.0.0.10
  4. Net 192.168.2.0/24 Ifp en1 Ifa 192.168.2.50 [last]
  5. Net 192.168.2.1/32 Ifp en1 Ifa 192.168.2.50 [last]
+ 6. Net 224.0.0.0/4 Ifp en0 Ifa 10.0.0.10
+ 7. Net 224.0.0.0/4 Ifp en1 Ifa 192.168.2.50 [last] [SCOPED]
+ 8. Net 255.255.255.255/32 Ifp en0 Ifa 10.0.0.10
+ 9. Net 255.255.255.255/32 Ifp en1 Ifa 192.168.2.50 [last] [SCOPED]
 }
 Add new[3]: Net 10.0.0.1/32 Ifp en0 Ifa 10.0.0.10
 Add new[0]: Net 0.0.0.0/0 Gate 10.0.0.1 Ifp en0 Ifa 10.0.0.10
@@ -2842,7 +4010,11 @@ Add new[5]: Net 192.168.2.1/32 Ifp en1 Ifa 192.168.2.50 [last]
 Add new[1]: Net 0.0.0.0/0 Gate 192.168.2.1 Ifp en1 Ifa 192.168.2.50 [never] [SCOPED]
 Add new[2]: Net 10.0.0.0/24 Ifp en0 Ifa 10.0.0.10
 Add new[4]: Net 192.168.2.0/24 Ifp en1 Ifa 192.168.2.50 [last]
-New Routes ('test1') = <IPv4RouteList[9]> = {
+Add new[6]: Net 224.0.0.0/4 Ifp en0 Ifa 10.0.0.10
+Add new[7]: Net 224.0.0.0/4 Ifp en1 Ifa 192.168.2.50 [last] [SCOPED]
+Add new[8]: Net 255.255.255.255/32 Ifp en0 Ifa 10.0.0.10
+Add new[9]: Net 255.255.255.255/32 Ifp en1 Ifa 192.168.2.50 [last] [SCOPED]
+New Routes ('test1') = <IPv4RouteList[15]> = {
  0. Net 0.0.0.0/0 Gate 10.0.0.1 Ifp en0 Ifa 10.0.0.10
  1. Net 0.0.0.0/0 Gate 10.0.0.1 Ifp en1 Ifa 10.0.0.20 [SCOPED]
  2. Net 0.0.0.0/0 Gate 192.168.2.1 Ifp fw0 Ifa 192.168.2.30 [SCOPED]
@@ -2852,20 +4024,32 @@ New Routes ('test1') = <IPv4RouteList[9]> = {
  6. Net 10.0.0.1/32 Ifp en1 Ifa 10.0.0.20 [SCOPED]
  7. Net 192.168.2.0/24 Ifp fw0 Ifa 192.168.2.30
  8. Net 192.168.2.1/32 Ifp fw0 Ifa 192.168.2.30
+ 9. Net 224.0.0.0/4 Ifp en0 Ifa 10.0.0.10
+10. Net 224.0.0.0/4 Ifp en1 Ifa 10.0.0.20 [SCOPED]
+11. Net 224.0.0.0/4 Ifp fw0 Ifa 192.168.2.30 [SCOPED]
+12. Net 255.255.255.255/32 Ifp en0 Ifa 10.0.0.10
+13. Net 255.255.255.255/32 Ifp en1 Ifa 10.0.0.20 [SCOPED]
+14. Net 255.255.255.255/32 Ifp fw0 Ifa 192.168.2.30 [SCOPED]
 }
 Remove old[1]: Net 0.0.0.0/0 Gate 192.168.2.1 Ifp en1 Ifa 192.168.2.50 [never] [SCOPED]
 Remove old[4]: Net 192.168.2.0/24 Ifp en1 Ifa 192.168.2.50 [last]
 Remove old[5]: Net 192.168.2.1/32 Ifp en1 Ifa 192.168.2.50 [last]
+Remove old[7]: Net 224.0.0.0/4 Ifp en1 Ifa 192.168.2.50 [last] [SCOPED]
+Remove old[9]: Net 255.255.255.255/32 Ifp en1 Ifa 192.168.2.50 [last] [SCOPED]
 Add new[6]: Net 10.0.0.1/32 Ifp en1 Ifa 10.0.0.20 [SCOPED]
 Add new[1]: Net 0.0.0.0/0 Gate 10.0.0.1 Ifp en1 Ifa 10.0.0.20 [SCOPED]
 Add new[8]: Net 192.168.2.1/32 Ifp fw0 Ifa 192.168.2.30
 Add new[2]: Net 0.0.0.0/0 Gate 192.168.2.1 Ifp fw0 Ifa 192.168.2.30 [SCOPED]
 Add new[4]: Net 10.0.0.0/24 Ifp en1 Ifa 10.0.0.20 [SCOPED]
 Add new[7]: Net 192.168.2.0/24 Ifp fw0 Ifa 192.168.2.30
+Add new[10]: Net 224.0.0.0/4 Ifp en1 Ifa 10.0.0.20 [SCOPED]
+Add new[11]: Net 224.0.0.0/4 Ifp fw0 Ifa 192.168.2.30 [SCOPED]
+Add new[13]: Net 255.255.255.255/32 Ifp en1 Ifa 10.0.0.20 [SCOPED]
+Add new[14]: Net 255.255.255.255/32 Ifp fw0 Ifa 192.168.2.30 [SCOPED]
 =================> Apply 'test17', 'test1' End <=================
 
 =================> Apply 'test1', 'test18' Begin <=================
-Old routes ('test1') = <IPv4RouteList[9]> = {
+Old routes ('test1') = <IPv4RouteList[15]> = {
  0. Net 0.0.0.0/0 Gate 10.0.0.1 Ifp en0 Ifa 10.0.0.10
  1. Net 0.0.0.0/0 Gate 10.0.0.1 Ifp en1 Ifa 10.0.0.20 [SCOPED]
  2. Net 0.0.0.0/0 Gate 192.168.2.1 Ifp fw0 Ifa 192.168.2.30 [SCOPED]
@@ -2875,6 +4059,12 @@ Old routes ('test1') = <IPv4RouteList[9]> = {
  6. Net 10.0.0.1/32 Ifp en1 Ifa 10.0.0.20 [SCOPED]
  7. Net 192.168.2.0/24 Ifp fw0 Ifa 192.168.2.30
  8. Net 192.168.2.1/32 Ifp fw0 Ifa 192.168.2.30
+ 9. Net 224.0.0.0/4 Ifp en0 Ifa 10.0.0.10
+10. Net 224.0.0.0/4 Ifp en1 Ifa 10.0.0.20 [SCOPED]
+11. Net 224.0.0.0/4 Ifp fw0 Ifa 192.168.2.30 [SCOPED]
+12. Net 255.255.255.255/32 Ifp en0 Ifa 10.0.0.10
+13. Net 255.255.255.255/32 Ifp en1 Ifa 10.0.0.20 [SCOPED]
+14. Net 255.255.255.255/32 Ifp fw0 Ifa 192.168.2.30 [SCOPED]
 }
 Add new[5]: Net 10.0.0.1/32 Ifp en0 Ifa 10.0.0.10
 Add new[0]: Net 0.0.0.0/0 Gate 10.0.0.1 Ifp en0 Ifa 10.0.0.10
@@ -2885,7 +4075,13 @@ Add new[2]: Net 0.0.0.0/0 Gate 192.168.2.1 Ifp fw0 Ifa 192.168.2.30 [SCOPED]
 Add new[3]: Net 10.0.0.0/24 Ifp en0 Ifa 10.0.0.10
 Add new[4]: Net 10.0.0.0/24 Ifp en1 Ifa 10.0.0.20 [SCOPED]
 Add new[7]: Net 192.168.2.0/24 Ifp fw0 Ifa 192.168.2.30
-New Routes ('test18') = <IPv4RouteList[14]> = {
+Add new[9]: Net 224.0.0.0/4 Ifp en0 Ifa 10.0.0.10
+Add new[10]: Net 224.0.0.0/4 Ifp en1 Ifa 10.0.0.20 [SCOPED]
+Add new[11]: Net 224.0.0.0/4 Ifp fw0 Ifa 192.168.2.30 [SCOPED]
+Add new[12]: Net 255.255.255.255/32 Ifp en0 Ifa 10.0.0.10
+Add new[13]: Net 255.255.255.255/32 Ifp en1 Ifa 10.0.0.20 [SCOPED]
+Add new[14]: Net 255.255.255.255/32 Ifp fw0 Ifa 192.168.2.30 [SCOPED]
+New Routes ('test18') = <IPv4RouteList[16]> = {
  0. Net 0.0.0.0/0 Gate 192.168.130.1 Ifp en0 Ifa 192.168.130.16
  1. Host 1.1.1.1 Gate 1.1.1.2 Ifp en0 Ifa 192.168.130.16
  2. Host 1.1.1.2 Gate 1.1.1.3 Ifp en0 Ifa 192.168.130.16
@@ -2900,6 +4096,8 @@ New Routes ('test18') = <IPv4RouteList[14]> = {
 11. Host 1.1.1.11 Gate 1.1.1.1 Ifp en0 Ifa 192.168.130.16
 12. Net 192.168.130.0/24 Ifp en0 Ifa 192.168.130.16
 13. Net 192.168.130.1/32 Ifp en0 Ifa 192.168.130.16
+14. Net 224.0.0.0/4 Ifp en0 Ifa 192.168.130.16
+15. Net 255.255.255.255/32 Ifp en0 Ifa 192.168.130.16
 }
 Remove old[0]: Net 0.0.0.0/0 Gate 10.0.0.1 Ifp en0 Ifa 10.0.0.10
 Remove old[1]: Net 0.0.0.0/0 Gate 10.0.0.1 Ifp en1 Ifa 10.0.0.20 [SCOPED]
@@ -2910,24 +4108,32 @@ Remove old[5]: Net 10.0.0.1/32 Ifp en0 Ifa 10.0.0.10
 Remove old[6]: Net 10.0.0.1/32 Ifp en1 Ifa 10.0.0.20 [SCOPED]
 Remove old[7]: Net 192.168.2.0/24 Ifp fw0 Ifa 192.168.2.30
 Remove old[8]: Net 192.168.2.1/32 Ifp fw0 Ifa 192.168.2.30
+Remove old[9]: Net 224.0.0.0/4 Ifp en0 Ifa 10.0.0.10
+Remove old[10]: Net 224.0.0.0/4 Ifp en1 Ifa 10.0.0.20 [SCOPED]
+Remove old[11]: Net 224.0.0.0/4 Ifp fw0 Ifa 192.168.2.30 [SCOPED]
+Remove old[12]: Net 255.255.255.255/32 Ifp en0 Ifa 10.0.0.10
+Remove old[13]: Net 255.255.255.255/32 Ifp en1 Ifa 10.0.0.20 [SCOPED]
+Remove old[14]: Net 255.255.255.255/32 Ifp fw0 Ifa 192.168.2.30 [SCOPED]
 Add new[13]: Net 192.168.130.1/32 Ifp en0 Ifa 192.168.130.16
 Add new[0]: Net 0.0.0.0/0 Gate 192.168.130.1 Ifp en0 Ifa 192.168.130.16
-IPMonitor RouteProcess: routing loop detected, not adding: Host 1.1.1.11 Gate 1.1.1.1 Ifp en0 Ifa 192.168.130.16
-IPMonitor RouteProcess: failed to add: Host 1.1.1.10 Gate 1.1.1.11 Ifp en0 Ifa 192.168.130.16
-IPMonitor RouteProcess: failed to add: Host 1.1.1.9 Gate 1.1.1.10 Ifp en0 Ifa 192.168.130.16
-IPMonitor RouteProcess: failed to add: Host 1.1.1.8 Gate 1.1.1.9 Ifp en0 Ifa 192.168.130.16
-IPMonitor RouteProcess: failed to add: Host 1.1.1.7 Gate 1.1.1.8 Ifp en0 Ifa 192.168.130.16
-IPMonitor RouteProcess: failed to add: Host 1.1.1.6 Gate 1.1.1.7 Ifp en0 Ifa 192.168.130.16
-IPMonitor RouteProcess: failed to add: Host 1.1.1.5 Gate 1.1.1.6 Ifp en0 Ifa 192.168.130.16
-IPMonitor RouteProcess: failed to add: Host 1.1.1.4 Gate 1.1.1.5 Ifp en0 Ifa 192.168.130.16
-IPMonitor RouteProcess: failed to add: Host 1.1.1.3 Gate 1.1.1.4 Ifp en0 Ifa 192.168.130.16
-IPMonitor RouteProcess: failed to add: Host 1.1.1.2 Gate 1.1.1.3 Ifp en0 Ifa 192.168.130.16
-IPMonitor RouteProcess: failed to add: Host 1.1.1.1 Gate 1.1.1.2 Ifp en0 Ifa 192.168.130.16
+routing loop detected, not adding: Host 1.1.1.11 Gate 1.1.1.1 Ifp en0 Ifa 192.168.130.16
+failed to add: Host 1.1.1.10 Gate 1.1.1.11 Ifp en0 Ifa 192.168.130.16
+failed to add: Host 1.1.1.9 Gate 1.1.1.10 Ifp en0 Ifa 192.168.130.16
+failed to add: Host 1.1.1.8 Gate 1.1.1.9 Ifp en0 Ifa 192.168.130.16
+failed to add: Host 1.1.1.7 Gate 1.1.1.8 Ifp en0 Ifa 192.168.130.16
+failed to add: Host 1.1.1.6 Gate 1.1.1.7 Ifp en0 Ifa 192.168.130.16
+failed to add: Host 1.1.1.5 Gate 1.1.1.6 Ifp en0 Ifa 192.168.130.16
+failed to add: Host 1.1.1.4 Gate 1.1.1.5 Ifp en0 Ifa 192.168.130.16
+failed to add: Host 1.1.1.3 Gate 1.1.1.4 Ifp en0 Ifa 192.168.130.16
+failed to add: Host 1.1.1.2 Gate 1.1.1.3 Ifp en0 Ifa 192.168.130.16
+failed to add: Host 1.1.1.1 Gate 1.1.1.2 Ifp en0 Ifa 192.168.130.16
 Add new[12]: Net 192.168.130.0/24 Ifp en0 Ifa 192.168.130.16
+Add new[14]: Net 224.0.0.0/4 Ifp en0 Ifa 192.168.130.16
+Add new[15]: Net 255.255.255.255/32 Ifp en0 Ifa 192.168.130.16
 =================> Apply 'test1', 'test18' End <=================
 
 =================> Apply 'test18', 'test1' Begin <=================
-Old routes ('test18') = <IPv4RouteList[14]> = {
+Old routes ('test18') = <IPv4RouteList[16]> = {
  0. Net 0.0.0.0/0 Gate 192.168.130.1 Ifp en0 Ifa 192.168.130.16
  1. Host 1.1.1.1 Gate 1.1.1.2 Ifp en0 Ifa 192.168.130.16
  2. Host 1.1.1.2 Gate 1.1.1.3 Ifp en0 Ifa 192.168.130.16
@@ -2942,22 +4148,26 @@ Old routes ('test18') = <IPv4RouteList[14]> = {
 11. Host 1.1.1.11 Gate 1.1.1.1 Ifp en0 Ifa 192.168.130.16
 12. Net 192.168.130.0/24 Ifp en0 Ifa 192.168.130.16
 13. Net 192.168.130.1/32 Ifp en0 Ifa 192.168.130.16
+14. Net 224.0.0.0/4 Ifp en0 Ifa 192.168.130.16
+15. Net 255.255.255.255/32 Ifp en0 Ifa 192.168.130.16
 }
 Add new[13]: Net 192.168.130.1/32 Ifp en0 Ifa 192.168.130.16
 Add new[0]: Net 0.0.0.0/0 Gate 192.168.130.1 Ifp en0 Ifa 192.168.130.16
-IPMonitor RouteProcess: routing loop detected, not adding: Host 1.1.1.11 Gate 1.1.1.1 Ifp en0 Ifa 192.168.130.16
-IPMonitor RouteProcess: failed to add: Host 1.1.1.10 Gate 1.1.1.11 Ifp en0 Ifa 192.168.130.16
-IPMonitor RouteProcess: failed to add: Host 1.1.1.9 Gate 1.1.1.10 Ifp en0 Ifa 192.168.130.16
-IPMonitor RouteProcess: failed to add: Host 1.1.1.8 Gate 1.1.1.9 Ifp en0 Ifa 192.168.130.16
-IPMonitor RouteProcess: failed to add: Host 1.1.1.7 Gate 1.1.1.8 Ifp en0 Ifa 192.168.130.16
-IPMonitor RouteProcess: failed to add: Host 1.1.1.6 Gate 1.1.1.7 Ifp en0 Ifa 192.168.130.16
-IPMonitor RouteProcess: failed to add: Host 1.1.1.5 Gate 1.1.1.6 Ifp en0 Ifa 192.168.130.16
-IPMonitor RouteProcess: failed to add: Host 1.1.1.4 Gate 1.1.1.5 Ifp en0 Ifa 192.168.130.16
-IPMonitor RouteProcess: failed to add: Host 1.1.1.3 Gate 1.1.1.4 Ifp en0 Ifa 192.168.130.16
-IPMonitor RouteProcess: failed to add: Host 1.1.1.2 Gate 1.1.1.3 Ifp en0 Ifa 192.168.130.16
-IPMonitor RouteProcess: failed to add: Host 1.1.1.1 Gate 1.1.1.2 Ifp en0 Ifa 192.168.130.16
+routing loop detected, not adding: Host 1.1.1.11 Gate 1.1.1.1 Ifp en0 Ifa 192.168.130.16
+failed to add: Host 1.1.1.10 Gate 1.1.1.11 Ifp en0 Ifa 192.168.130.16
+failed to add: Host 1.1.1.9 Gate 1.1.1.10 Ifp en0 Ifa 192.168.130.16
+failed to add: Host 1.1.1.8 Gate 1.1.1.9 Ifp en0 Ifa 192.168.130.16
+failed to add: Host 1.1.1.7 Gate 1.1.1.8 Ifp en0 Ifa 192.168.130.16
+failed to add: Host 1.1.1.6 Gate 1.1.1.7 Ifp en0 Ifa 192.168.130.16
+failed to add: Host 1.1.1.5 Gate 1.1.1.6 Ifp en0 Ifa 192.168.130.16
+failed to add: Host 1.1.1.4 Gate 1.1.1.5 Ifp en0 Ifa 192.168.130.16
+failed to add: Host 1.1.1.3 Gate 1.1.1.4 Ifp en0 Ifa 192.168.130.16
+failed to add: Host 1.1.1.2 Gate 1.1.1.3 Ifp en0 Ifa 192.168.130.16
+failed to add: Host 1.1.1.1 Gate 1.1.1.2 Ifp en0 Ifa 192.168.130.16
 Add new[12]: Net 192.168.130.0/24 Ifp en0 Ifa 192.168.130.16
-New Routes ('test1') = <IPv4RouteList[9]> = {
+Add new[14]: Net 224.0.0.0/4 Ifp en0 Ifa 192.168.130.16
+Add new[15]: Net 255.255.255.255/32 Ifp en0 Ifa 192.168.130.16
+New Routes ('test1') = <IPv4RouteList[15]> = {
  0. Net 0.0.0.0/0 Gate 10.0.0.1 Ifp en0 Ifa 10.0.0.10
  1. Net 0.0.0.0/0 Gate 10.0.0.1 Ifp en1 Ifa 10.0.0.20 [SCOPED]
  2. Net 0.0.0.0/0 Gate 192.168.2.1 Ifp fw0 Ifa 192.168.2.30 [SCOPED]
@@ -2967,10 +4177,18 @@ New Routes ('test1') = <IPv4RouteList[9]> = {
  6. Net 10.0.0.1/32 Ifp en1 Ifa 10.0.0.20 [SCOPED]
  7. Net 192.168.2.0/24 Ifp fw0 Ifa 192.168.2.30
  8. Net 192.168.2.1/32 Ifp fw0 Ifa 192.168.2.30
+ 9. Net 224.0.0.0/4 Ifp en0 Ifa 10.0.0.10
+10. Net 224.0.0.0/4 Ifp en1 Ifa 10.0.0.20 [SCOPED]
+11. Net 224.0.0.0/4 Ifp fw0 Ifa 192.168.2.30 [SCOPED]
+12. Net 255.255.255.255/32 Ifp en0 Ifa 10.0.0.10
+13. Net 255.255.255.255/32 Ifp en1 Ifa 10.0.0.20 [SCOPED]
+14. Net 255.255.255.255/32 Ifp fw0 Ifa 192.168.2.30 [SCOPED]
 }
 Remove old[0]: Net 0.0.0.0/0 Gate 192.168.130.1 Ifp en0 Ifa 192.168.130.16
 Remove old[12]: Net 192.168.130.0/24 Ifp en0 Ifa 192.168.130.16
 Remove old[13]: Net 192.168.130.1/32 Ifp en0 Ifa 192.168.130.16
+Remove old[14]: Net 224.0.0.0/4 Ifp en0 Ifa 192.168.130.16
+Remove old[15]: Net 255.255.255.255/32 Ifp en0 Ifa 192.168.130.16
 Add new[5]: Net 10.0.0.1/32 Ifp en0 Ifa 10.0.0.10
 Add new[0]: Net 0.0.0.0/0 Gate 10.0.0.1 Ifp en0 Ifa 10.0.0.10
 Add new[6]: Net 10.0.0.1/32 Ifp en1 Ifa 10.0.0.20 [SCOPED]
@@ -2980,10 +4198,16 @@ Add new[2]: Net 0.0.0.0/0 Gate 192.168.2.1 Ifp fw0 Ifa 192.168.2.30 [SCOPED]
 Add new[3]: Net 10.0.0.0/24 Ifp en0 Ifa 10.0.0.10
 Add new[4]: Net 10.0.0.0/24 Ifp en1 Ifa 10.0.0.20 [SCOPED]
 Add new[7]: Net 192.168.2.0/24 Ifp fw0 Ifa 192.168.2.30
+Add new[9]: Net 224.0.0.0/4 Ifp en0 Ifa 10.0.0.10
+Add new[10]: Net 224.0.0.0/4 Ifp en1 Ifa 10.0.0.20 [SCOPED]
+Add new[11]: Net 224.0.0.0/4 Ifp fw0 Ifa 192.168.2.30 [SCOPED]
+Add new[12]: Net 255.255.255.255/32 Ifp en0 Ifa 10.0.0.10
+Add new[13]: Net 255.255.255.255/32 Ifp en1 Ifa 10.0.0.20 [SCOPED]
+Add new[14]: Net 255.255.255.255/32 Ifp fw0 Ifa 192.168.2.30 [SCOPED]
 =================> Apply 'test18', 'test1' End <=================
 
 =================> Apply 'test2', 'test3' Begin <=================
-Old routes ('test2') = <IPv4RouteList[9]> = {
+Old routes ('test2') = <IPv4RouteList[15]> = {
  0. Net 0.0.0.0/0 Gate 10.0.0.1 Ifp en0 Ifa 10.0.0.10
  1. Net 0.0.0.0/0 Gate 10.0.0.1 Ifp en1 Ifa 10.0.0.20 [SCOPED]
  2. Net 0.0.0.0/0 Gate 192.168.2.1 Ifp fw0 Ifa 192.168.2.30 [SCOPED]
@@ -2993,6 +4217,12 @@ Old routes ('test2') = <IPv4RouteList[9]> = {
  6. Net 10.0.0.1/32 Ifp en1 Ifa 10.0.0.20 [SCOPED]
  7. Net 192.168.2.0/24 Ifp fw0 Ifa 192.168.2.30
  8. Net 192.168.2.1/32 Ifp fw0 Ifa 192.168.2.30
+ 9. Net 224.0.0.0/4 Ifp en0 Ifa 10.0.0.10
+10. Net 224.0.0.0/4 Ifp en1 Ifa 10.0.0.20 [SCOPED]
+11. Net 224.0.0.0/4 Ifp fw0 Ifa 192.168.2.30 [SCOPED]
+12. Net 255.255.255.255/32 Ifp en0 Ifa 10.0.0.10
+13. Net 255.255.255.255/32 Ifp en1 Ifa 10.0.0.20 [SCOPED]
+14. Net 255.255.255.255/32 Ifp fw0 Ifa 192.168.2.30 [SCOPED]
 }
 Add new[5]: Net 10.0.0.1/32 Ifp en0 Ifa 10.0.0.10
 Add new[0]: Net 0.0.0.0/0 Gate 10.0.0.1 Ifp en0 Ifa 10.0.0.10
@@ -3003,7 +4233,13 @@ Add new[2]: Net 0.0.0.0/0 Gate 192.168.2.1 Ifp fw0 Ifa 192.168.2.30 [SCOPED]
 Add new[3]: Net 10.0.0.0/24 Ifp en0 Ifa 10.0.0.10
 Add new[4]: Net 10.0.0.0/24 Ifp en1 Ifa 10.0.0.20 [SCOPED]
 Add new[7]: Net 192.168.2.0/24 Ifp fw0 Ifa 192.168.2.30
-New Routes ('test3') = <IPv4RouteList[15]> = {
+Add new[9]: Net 224.0.0.0/4 Ifp en0 Ifa 10.0.0.10
+Add new[10]: Net 224.0.0.0/4 Ifp en1 Ifa 10.0.0.20 [SCOPED]
+Add new[11]: Net 224.0.0.0/4 Ifp fw0 Ifa 192.168.2.30 [SCOPED]
+Add new[12]: Net 255.255.255.255/32 Ifp en0 Ifa 10.0.0.10
+Add new[13]: Net 255.255.255.255/32 Ifp en1 Ifa 10.0.0.20 [SCOPED]
+Add new[14]: Net 255.255.255.255/32 Ifp fw0 Ifa 192.168.2.30 [SCOPED]
+New Routes ('test3') = <IPv4RouteList[21]> = {
  0. Net 0.0.0.0/0 Gate 10.0.0.1 Ifp en0 Ifa 10.0.0.10
  1. Net 0.0.0.0/0 Gate 10.0.0.1 Ifp en1 Ifa 10.0.0.20 [SCOPED]
  2. Net 0.0.0.0/0 Gate 192.168.3.1 Ifp fw0 Ifa 192.168.3.30 [SCOPED]
@@ -3019,8 +4255,16 @@ New Routes ('test3') = <IPv4RouteList[15]> = {
 12. Net 192.168.2.1/32 Ifp en1 Ifa 192.168.2.20 [SCOPED]
 13. Net 192.168.3.0/24 Ifp fw0 Ifa 192.168.3.30
 14. Net 192.168.3.1/32 Ifp fw0 Ifa 192.168.3.30
+15. Net 224.0.0.0/4 Ifp en0 Ifa 10.0.0.10
+16. Net 224.0.0.0/4 Ifp en1 Ifa 10.0.0.20 [SCOPED]
+17. Net 224.0.0.0/4 Ifp fw0 Ifa 192.168.3.30 [SCOPED]
+18. Net 255.255.255.255/32 Ifp en0 Ifa 10.0.0.10
+19. Net 255.255.255.255/32 Ifp en1 Ifa 10.0.0.20 [SCOPED]
+20. Net 255.255.255.255/32 Ifp fw0 Ifa 192.168.3.30 [SCOPED]
 }
 Remove old[2]: Net 0.0.0.0/0 Gate 192.168.2.1 Ifp fw0 Ifa 192.168.2.30 [SCOPED]
+Remove old[11]: Net 224.0.0.0/4 Ifp fw0 Ifa 192.168.2.30 [SCOPED]
+Remove old[14]: Net 255.255.255.255/32 Ifp fw0 Ifa 192.168.2.30 [SCOPED]
 Add new[14]: Net 192.168.3.1/32 Ifp fw0 Ifa 192.168.3.30
 Add new[2]: Net 0.0.0.0/0 Gate 192.168.3.1 Ifp fw0 Ifa 192.168.3.30 [SCOPED]
 Add new[8]: Net 192.168.2.0/24 Ifp en0 Ifa 192.168.2.10 [SCOPED]
@@ -3028,10 +4272,12 @@ Add new[9]: Net 192.168.2.0/24 Ifp en1 Ifa 192.168.2.20 [SCOPED]
 Add new[11]: Net 192.168.2.1/32 Ifp en0 Ifa 192.168.2.10 [SCOPED]
 Add new[12]: Net 192.168.2.1/32 Ifp en1 Ifa 192.168.2.20 [SCOPED]
 Add new[13]: Net 192.168.3.0/24 Ifp fw0 Ifa 192.168.3.30
+Add new[17]: Net 224.0.0.0/4 Ifp fw0 Ifa 192.168.3.30 [SCOPED]
+Add new[20]: Net 255.255.255.255/32 Ifp fw0 Ifa 192.168.3.30 [SCOPED]
 =================> Apply 'test2', 'test3' End <=================
 
 =================> Apply 'test3', 'test2' Begin <=================
-Old routes ('test3') = <IPv4RouteList[15]> = {
+Old routes ('test3') = <IPv4RouteList[21]> = {
  0. Net 0.0.0.0/0 Gate 10.0.0.1 Ifp en0 Ifa 10.0.0.10
  1. Net 0.0.0.0/0 Gate 10.0.0.1 Ifp en1 Ifa 10.0.0.20 [SCOPED]
  2. Net 0.0.0.0/0 Gate 192.168.3.1 Ifp fw0 Ifa 192.168.3.30 [SCOPED]
@@ -3047,6 +4293,12 @@ Old routes ('test3') = <IPv4RouteList[15]> = {
 12. Net 192.168.2.1/32 Ifp en1 Ifa 192.168.2.20 [SCOPED]
 13. Net 192.168.3.0/24 Ifp fw0 Ifa 192.168.3.30
 14. Net 192.168.3.1/32 Ifp fw0 Ifa 192.168.3.30
+15. Net 224.0.0.0/4 Ifp en0 Ifa 10.0.0.10
+16. Net 224.0.0.0/4 Ifp en1 Ifa 10.0.0.20 [SCOPED]
+17. Net 224.0.0.0/4 Ifp fw0 Ifa 192.168.3.30 [SCOPED]
+18. Net 255.255.255.255/32 Ifp en0 Ifa 10.0.0.10
+19. Net 255.255.255.255/32 Ifp en1 Ifa 10.0.0.20 [SCOPED]
+20. Net 255.255.255.255/32 Ifp fw0 Ifa 192.168.3.30 [SCOPED]
 }
 Add new[5]: Net 10.0.0.1/32 Ifp en0 Ifa 10.0.0.10
 Add new[0]: Net 0.0.0.0/0 Gate 10.0.0.1 Ifp en0 Ifa 10.0.0.10
@@ -3063,7 +4315,13 @@ Add new[10]: Net 192.168.2.1/32 Ifp fw0 Ifa 192.168.2.30
 Add new[11]: Net 192.168.2.1/32 Ifp en0 Ifa 192.168.2.10 [SCOPED]
 Add new[12]: Net 192.168.2.1/32 Ifp en1 Ifa 192.168.2.20 [SCOPED]
 Add new[13]: Net 192.168.3.0/24 Ifp fw0 Ifa 192.168.3.30
-New Routes ('test2') = <IPv4RouteList[9]> = {
+Add new[15]: Net 224.0.0.0/4 Ifp en0 Ifa 10.0.0.10
+Add new[16]: Net 224.0.0.0/4 Ifp en1 Ifa 10.0.0.20 [SCOPED]
+Add new[17]: Net 224.0.0.0/4 Ifp fw0 Ifa 192.168.3.30 [SCOPED]
+Add new[18]: Net 255.255.255.255/32 Ifp en0 Ifa 10.0.0.10
+Add new[19]: Net 255.255.255.255/32 Ifp en1 Ifa 10.0.0.20 [SCOPED]
+Add new[20]: Net 255.255.255.255/32 Ifp fw0 Ifa 192.168.3.30 [SCOPED]
+New Routes ('test2') = <IPv4RouteList[15]> = {
  0. Net 0.0.0.0/0 Gate 10.0.0.1 Ifp en0 Ifa 10.0.0.10
  1. Net 0.0.0.0/0 Gate 10.0.0.1 Ifp en1 Ifa 10.0.0.20 [SCOPED]
  2. Net 0.0.0.0/0 Gate 192.168.2.1 Ifp fw0 Ifa 192.168.2.30 [SCOPED]
@@ -3073,6 +4331,12 @@ New Routes ('test2') = <IPv4RouteList[9]> = {
  6. Net 10.0.0.1/32 Ifp en1 Ifa 10.0.0.20 [SCOPED]
  7. Net 192.168.2.0/24 Ifp fw0 Ifa 192.168.2.30
  8. Net 192.168.2.1/32 Ifp fw0 Ifa 192.168.2.30
+ 9. Net 224.0.0.0/4 Ifp en0 Ifa 10.0.0.10
+10. Net 224.0.0.0/4 Ifp en1 Ifa 10.0.0.20 [SCOPED]
+11. Net 224.0.0.0/4 Ifp fw0 Ifa 192.168.2.30 [SCOPED]
+12. Net 255.255.255.255/32 Ifp en0 Ifa 10.0.0.10
+13. Net 255.255.255.255/32 Ifp en1 Ifa 10.0.0.20 [SCOPED]
+14. Net 255.255.255.255/32 Ifp fw0 Ifa 192.168.2.30 [SCOPED]
 }
 Remove old[2]: Net 0.0.0.0/0 Gate 192.168.3.1 Ifp fw0 Ifa 192.168.3.30 [SCOPED]
 Remove old[8]: Net 192.168.2.0/24 Ifp en0 Ifa 192.168.2.10 [SCOPED]
@@ -3081,11 +4345,15 @@ Remove old[11]: Net 192.168.2.1/32 Ifp en0 Ifa 192.168.2.10 [SCOPED]
 Remove old[12]: Net 192.168.2.1/32 Ifp en1 Ifa 192.168.2.20 [SCOPED]
 Remove old[13]: Net 192.168.3.0/24 Ifp fw0 Ifa 192.168.3.30
 Remove old[14]: Net 192.168.3.1/32 Ifp fw0 Ifa 192.168.3.30
+Remove old[17]: Net 224.0.0.0/4 Ifp fw0 Ifa 192.168.3.30 [SCOPED]
+Remove old[20]: Net 255.255.255.255/32 Ifp fw0 Ifa 192.168.3.30 [SCOPED]
 Add new[2]: Net 0.0.0.0/0 Gate 192.168.2.1 Ifp fw0 Ifa 192.168.2.30 [SCOPED]
+Add new[11]: Net 224.0.0.0/4 Ifp fw0 Ifa 192.168.2.30 [SCOPED]
+Add new[14]: Net 255.255.255.255/32 Ifp fw0 Ifa 192.168.2.30 [SCOPED]
 =================> Apply 'test3', 'test2' End <=================
 
 =================> Apply 'test2', 'test4' Begin <=================
-Old routes ('test2') = <IPv4RouteList[9]> = {
+Old routes ('test2') = <IPv4RouteList[15]> = {
  0. Net 0.0.0.0/0 Gate 10.0.0.1 Ifp en0 Ifa 10.0.0.10
  1. Net 0.0.0.0/0 Gate 10.0.0.1 Ifp en1 Ifa 10.0.0.20 [SCOPED]
  2. Net 0.0.0.0/0 Gate 192.168.2.1 Ifp fw0 Ifa 192.168.2.30 [SCOPED]
@@ -3095,6 +4363,12 @@ Old routes ('test2') = <IPv4RouteList[9]> = {
  6. Net 10.0.0.1/32 Ifp en1 Ifa 10.0.0.20 [SCOPED]
  7. Net 192.168.2.0/24 Ifp fw0 Ifa 192.168.2.30
  8. Net 192.168.2.1/32 Ifp fw0 Ifa 192.168.2.30
+ 9. Net 224.0.0.0/4 Ifp en0 Ifa 10.0.0.10
+10. Net 224.0.0.0/4 Ifp en1 Ifa 10.0.0.20 [SCOPED]
+11. Net 224.0.0.0/4 Ifp fw0 Ifa 192.168.2.30 [SCOPED]
+12. Net 255.255.255.255/32 Ifp en0 Ifa 10.0.0.10
+13. Net 255.255.255.255/32 Ifp en1 Ifa 10.0.0.20 [SCOPED]
+14. Net 255.255.255.255/32 Ifp fw0 Ifa 192.168.2.30 [SCOPED]
 }
 Add new[5]: Net 10.0.0.1/32 Ifp en0 Ifa 10.0.0.10
 Add new[0]: Net 0.0.0.0/0 Gate 10.0.0.1 Ifp en0 Ifa 10.0.0.10
@@ -3105,7 +4379,13 @@ Add new[2]: Net 0.0.0.0/0 Gate 192.168.2.1 Ifp fw0 Ifa 192.168.2.30 [SCOPED]
 Add new[3]: Net 10.0.0.0/24 Ifp en0 Ifa 10.0.0.10
 Add new[4]: Net 10.0.0.0/24 Ifp en1 Ifa 10.0.0.20 [SCOPED]
 Add new[7]: Net 192.168.2.0/24 Ifp fw0 Ifa 192.168.2.30
-New Routes ('test4') = <IPv4RouteList[10]> = {
+Add new[9]: Net 224.0.0.0/4 Ifp en0 Ifa 10.0.0.10
+Add new[10]: Net 224.0.0.0/4 Ifp en1 Ifa 10.0.0.20 [SCOPED]
+Add new[11]: Net 224.0.0.0/4 Ifp fw0 Ifa 192.168.2.30 [SCOPED]
+Add new[12]: Net 255.255.255.255/32 Ifp en0 Ifa 10.0.0.10
+Add new[13]: Net 255.255.255.255/32 Ifp en1 Ifa 10.0.0.20 [SCOPED]
+Add new[14]: Net 255.255.255.255/32 Ifp fw0 Ifa 192.168.2.30 [SCOPED]
+New Routes ('test4') = <IPv4RouteList[14]> = {
  0. Net 0.0.0.0/0 Gate 17.202.20.1 Ifp en0 Ifa 17.202.40.191
  1. Net 0.0.0.0/0 Gate 17.202.20.1 Ifp en1 Ifa 17.202.42.24 [SCOPED]
  2. Net 10.0.0.0/24 Ifp en1 Ifa 10.0.0.20
@@ -3116,6 +4396,10 @@ New Routes ('test4') = <IPv4RouteList[10]> = {
  7. Net 17.202.20.1/32 Ifp en1 Ifa 17.202.42.24 [SCOPED]
  8. Net 17.202.40.0/22 Ifp en0 Ifa 17.202.40.191
  9. Net 17.202.40.0/22 Ifp en1 Ifa 17.202.42.24 [SCOPED]
+10. Net 224.0.0.0/4 Ifp en0 Ifa 17.202.40.191
+11. Net 224.0.0.0/4 Ifp en1 Ifa 17.202.42.24 [SCOPED]
+12. Net 255.255.255.255/32 Ifp en0 Ifa 17.202.40.191
+13. Net 255.255.255.255/32 Ifp en1 Ifa 17.202.42.24 [SCOPED]
 }
 Remove old[0]: Net 0.0.0.0/0 Gate 10.0.0.1 Ifp en0 Ifa 10.0.0.10
 Remove old[1]: Net 0.0.0.0/0 Gate 10.0.0.1 Ifp en1 Ifa 10.0.0.20 [SCOPED]
@@ -3126,6 +4410,12 @@ Remove old[5]: Net 10.0.0.1/32 Ifp en0 Ifa 10.0.0.10
 Remove old[6]: Net 10.0.0.1/32 Ifp en1 Ifa 10.0.0.20 [SCOPED]
 Remove old[7]: Net 192.168.2.0/24 Ifp fw0 Ifa 192.168.2.30
 Remove old[8]: Net 192.168.2.1/32 Ifp fw0 Ifa 192.168.2.30
+Remove old[9]: Net 224.0.0.0/4 Ifp en0 Ifa 10.0.0.10
+Remove old[10]: Net 224.0.0.0/4 Ifp en1 Ifa 10.0.0.20 [SCOPED]
+Remove old[11]: Net 224.0.0.0/4 Ifp fw0 Ifa 192.168.2.30 [SCOPED]
+Remove old[12]: Net 255.255.255.255/32 Ifp en0 Ifa 10.0.0.10
+Remove old[13]: Net 255.255.255.255/32 Ifp en1 Ifa 10.0.0.20 [SCOPED]
+Remove old[14]: Net 255.255.255.255/32 Ifp fw0 Ifa 192.168.2.30 [SCOPED]
 Add new[6]: Net 17.202.20.1/32 Ifp en0 Ifa 17.202.40.191
 Add new[0]: Net 0.0.0.0/0 Gate 17.202.20.1 Ifp en0 Ifa 17.202.40.191
 Add new[7]: Net 17.202.20.1/32 Ifp en1 Ifa 17.202.42.24 [SCOPED]
@@ -3136,10 +4426,14 @@ Add new[4]: Net 10.0.0.1/32 Ifp en1 Ifa 10.0.0.20
 Add new[5]: Net 10.0.0.1/32 Ifp en0 Ifa 10.0.0.11 [SCOPED]
 Add new[8]: Net 17.202.40.0/22 Ifp en0 Ifa 17.202.40.191
 Add new[9]: Net 17.202.40.0/22 Ifp en1 Ifa 17.202.42.24 [SCOPED]
+Add new[10]: Net 224.0.0.0/4 Ifp en0 Ifa 17.202.40.191
+Add new[11]: Net 224.0.0.0/4 Ifp en1 Ifa 17.202.42.24 [SCOPED]
+Add new[12]: Net 255.255.255.255/32 Ifp en0 Ifa 17.202.40.191
+Add new[13]: Net 255.255.255.255/32 Ifp en1 Ifa 17.202.42.24 [SCOPED]
 =================> Apply 'test2', 'test4' End <=================
 
 =================> Apply 'test4', 'test2' Begin <=================
-Old routes ('test4') = <IPv4RouteList[10]> = {
+Old routes ('test4') = <IPv4RouteList[14]> = {
  0. Net 0.0.0.0/0 Gate 17.202.20.1 Ifp en0 Ifa 17.202.40.191
  1. Net 0.0.0.0/0 Gate 17.202.20.1 Ifp en1 Ifa 17.202.42.24 [SCOPED]
  2. Net 10.0.0.0/24 Ifp en1 Ifa 10.0.0.20
@@ -3150,6 +4444,10 @@ Old routes ('test4') = <IPv4RouteList[10]> = {
  7. Net 17.202.20.1/32 Ifp en1 Ifa 17.202.42.24 [SCOPED]
  8. Net 17.202.40.0/22 Ifp en0 Ifa 17.202.40.191
  9. Net 17.202.40.0/22 Ifp en1 Ifa 17.202.42.24 [SCOPED]
+10. Net 224.0.0.0/4 Ifp en0 Ifa 17.202.40.191
+11. Net 224.0.0.0/4 Ifp en1 Ifa 17.202.42.24 [SCOPED]
+12. Net 255.255.255.255/32 Ifp en0 Ifa 17.202.40.191
+13. Net 255.255.255.255/32 Ifp en1 Ifa 17.202.42.24 [SCOPED]
 }
 Add new[6]: Net 17.202.20.1/32 Ifp en0 Ifa 17.202.40.191
 Add new[0]: Net 0.0.0.0/0 Gate 17.202.20.1 Ifp en0 Ifa 17.202.40.191
@@ -3161,7 +4459,11 @@ Add new[4]: Net 10.0.0.1/32 Ifp en1 Ifa 10.0.0.20
 Add new[5]: Net 10.0.0.1/32 Ifp en0 Ifa 10.0.0.11 [SCOPED]
 Add new[8]: Net 17.202.40.0/22 Ifp en0 Ifa 17.202.40.191
 Add new[9]: Net 17.202.40.0/22 Ifp en1 Ifa 17.202.42.24 [SCOPED]
-New Routes ('test2') = <IPv4RouteList[9]> = {
+Add new[10]: Net 224.0.0.0/4 Ifp en0 Ifa 17.202.40.191
+Add new[11]: Net 224.0.0.0/4 Ifp en1 Ifa 17.202.42.24 [SCOPED]
+Add new[12]: Net 255.255.255.255/32 Ifp en0 Ifa 17.202.40.191
+Add new[13]: Net 255.255.255.255/32 Ifp en1 Ifa 17.202.42.24 [SCOPED]
+New Routes ('test2') = <IPv4RouteList[15]> = {
  0. Net 0.0.0.0/0 Gate 10.0.0.1 Ifp en0 Ifa 10.0.0.10
  1. Net 0.0.0.0/0 Gate 10.0.0.1 Ifp en1 Ifa 10.0.0.20 [SCOPED]
  2. Net 0.0.0.0/0 Gate 192.168.2.1 Ifp fw0 Ifa 192.168.2.30 [SCOPED]
@@ -3171,6 +4473,12 @@ New Routes ('test2') = <IPv4RouteList[9]> = {
  6. Net 10.0.0.1/32 Ifp en1 Ifa 10.0.0.20 [SCOPED]
  7. Net 192.168.2.0/24 Ifp fw0 Ifa 192.168.2.30
  8. Net 192.168.2.1/32 Ifp fw0 Ifa 192.168.2.30
+ 9. Net 224.0.0.0/4 Ifp en0 Ifa 10.0.0.10
+10. Net 224.0.0.0/4 Ifp en1 Ifa 10.0.0.20 [SCOPED]
+11. Net 224.0.0.0/4 Ifp fw0 Ifa 192.168.2.30 [SCOPED]
+12. Net 255.255.255.255/32 Ifp en0 Ifa 10.0.0.10
+13. Net 255.255.255.255/32 Ifp en1 Ifa 10.0.0.20 [SCOPED]
+14. Net 255.255.255.255/32 Ifp fw0 Ifa 192.168.2.30 [SCOPED]
 }
 Remove old[0]: Net 0.0.0.0/0 Gate 17.202.20.1 Ifp en0 Ifa 17.202.40.191
 Remove old[1]: Net 0.0.0.0/0 Gate 17.202.20.1 Ifp en1 Ifa 17.202.42.24 [SCOPED]
@@ -3182,6 +4490,10 @@ Remove old[6]: Net 17.202.20.1/32 Ifp en0 Ifa 17.202.40.191
 Remove old[7]: Net 17.202.20.1/32 Ifp en1 Ifa 17.202.42.24 [SCOPED]
 Remove old[8]: Net 17.202.40.0/22 Ifp en0 Ifa 17.202.40.191
 Remove old[9]: Net 17.202.40.0/22 Ifp en1 Ifa 17.202.42.24 [SCOPED]
+Remove old[10]: Net 224.0.0.0/4 Ifp en0 Ifa 17.202.40.191
+Remove old[11]: Net 224.0.0.0/4 Ifp en1 Ifa 17.202.42.24 [SCOPED]
+Remove old[12]: Net 255.255.255.255/32 Ifp en0 Ifa 17.202.40.191
+Remove old[13]: Net 255.255.255.255/32 Ifp en1 Ifa 17.202.42.24 [SCOPED]
 Add new[5]: Net 10.0.0.1/32 Ifp en0 Ifa 10.0.0.10
 Add new[0]: Net 0.0.0.0/0 Gate 10.0.0.1 Ifp en0 Ifa 10.0.0.10
 Add new[6]: Net 10.0.0.1/32 Ifp en1 Ifa 10.0.0.20 [SCOPED]
@@ -3191,10 +4503,16 @@ Add new[2]: Net 0.0.0.0/0 Gate 192.168.2.1 Ifp fw0 Ifa 192.168.2.30 [SCOPED]
 Add new[3]: Net 10.0.0.0/24 Ifp en0 Ifa 10.0.0.10
 Add new[4]: Net 10.0.0.0/24 Ifp en1 Ifa 10.0.0.20 [SCOPED]
 Add new[7]: Net 192.168.2.0/24 Ifp fw0 Ifa 192.168.2.30
+Add new[9]: Net 224.0.0.0/4 Ifp en0 Ifa 10.0.0.10
+Add new[10]: Net 224.0.0.0/4 Ifp en1 Ifa 10.0.0.20 [SCOPED]
+Add new[11]: Net 224.0.0.0/4 Ifp fw0 Ifa 192.168.2.30 [SCOPED]
+Add new[12]: Net 255.255.255.255/32 Ifp en0 Ifa 10.0.0.10
+Add new[13]: Net 255.255.255.255/32 Ifp en1 Ifa 10.0.0.20 [SCOPED]
+Add new[14]: Net 255.255.255.255/32 Ifp fw0 Ifa 192.168.2.30 [SCOPED]
 =================> Apply 'test4', 'test2' End <=================
 
 =================> Apply 'test2', 'test5' Begin <=================
-Old routes ('test2') = <IPv4RouteList[9]> = {
+Old routes ('test2') = <IPv4RouteList[15]> = {
  0. Net 0.0.0.0/0 Gate 10.0.0.1 Ifp en0 Ifa 10.0.0.10
  1. Net 0.0.0.0/0 Gate 10.0.0.1 Ifp en1 Ifa 10.0.0.20 [SCOPED]
  2. Net 0.0.0.0/0 Gate 192.168.2.1 Ifp fw0 Ifa 192.168.2.30 [SCOPED]
@@ -3204,6 +4522,12 @@ Old routes ('test2') = <IPv4RouteList[9]> = {
  6. Net 10.0.0.1/32 Ifp en1 Ifa 10.0.0.20 [SCOPED]
  7. Net 192.168.2.0/24 Ifp fw0 Ifa 192.168.2.30
  8. Net 192.168.2.1/32 Ifp fw0 Ifa 192.168.2.30
+ 9. Net 224.0.0.0/4 Ifp en0 Ifa 10.0.0.10
+10. Net 224.0.0.0/4 Ifp en1 Ifa 10.0.0.20 [SCOPED]
+11. Net 224.0.0.0/4 Ifp fw0 Ifa 192.168.2.30 [SCOPED]
+12. Net 255.255.255.255/32 Ifp en0 Ifa 10.0.0.10
+13. Net 255.255.255.255/32 Ifp en1 Ifa 10.0.0.20 [SCOPED]
+14. Net 255.255.255.255/32 Ifp fw0 Ifa 192.168.2.30 [SCOPED]
 }
 Add new[5]: Net 10.0.0.1/32 Ifp en0 Ifa 10.0.0.10
 Add new[0]: Net 0.0.0.0/0 Gate 10.0.0.1 Ifp en0 Ifa 10.0.0.10
@@ -3214,7 +4538,13 @@ Add new[2]: Net 0.0.0.0/0 Gate 192.168.2.1 Ifp fw0 Ifa 192.168.2.30 [SCOPED]
 Add new[3]: Net 10.0.0.0/24 Ifp en0 Ifa 10.0.0.10
 Add new[4]: Net 10.0.0.0/24 Ifp en1 Ifa 10.0.0.20 [SCOPED]
 Add new[7]: Net 192.168.2.0/24 Ifp fw0 Ifa 192.168.2.30
-New Routes ('test5') = <IPv4RouteList[12]> = {
+Add new[9]: Net 224.0.0.0/4 Ifp en0 Ifa 10.0.0.10
+Add new[10]: Net 224.0.0.0/4 Ifp en1 Ifa 10.0.0.20 [SCOPED]
+Add new[11]: Net 224.0.0.0/4 Ifp fw0 Ifa 192.168.2.30 [SCOPED]
+Add new[12]: Net 255.255.255.255/32 Ifp en0 Ifa 10.0.0.10
+Add new[13]: Net 255.255.255.255/32 Ifp en1 Ifa 10.0.0.20 [SCOPED]
+Add new[14]: Net 255.255.255.255/32 Ifp fw0 Ifa 192.168.2.30 [SCOPED]
+New Routes ('test5') = <IPv4RouteList[18]> = {
  0. Net 0.0.0.0/0 Gate 17.219.156.1 Ifp ppp0 Ifa 17.219.156.22
  1. Net 0.0.0.0/0 Gate 17.202.20.1 Ifp en0 Ifa 17.202.40.191 [SCOPED]
  2. Net 0.0.0.0/0 Gate 17.202.20.1 Ifp en1 Ifa 17.202.42.24 [SCOPED]
@@ -3227,6 +4557,12 @@ New Routes ('test5') = <IPv4RouteList[12]> = {
  9. Net 17.202.40.0/22 Ifp en0 Ifa 17.202.40.191
 10. Net 17.202.40.0/22 Ifp en1 Ifa 17.202.42.24 [SCOPED]
 11. Net 17.219.156.1/32 Ifp ppp0 Ifa 17.219.156.22
+12. Net 224.0.0.0/4 Ifp ppp0 Ifa 17.219.156.22
+13. Net 224.0.0.0/4 Ifp en0 Ifa 17.202.40.191 [SCOPED]
+14. Net 224.0.0.0/4 Ifp en1 Ifa 17.202.42.24 [SCOPED]
+15. Net 255.255.255.255/32 Ifp ppp0 Ifa 17.219.156.22
+16. Net 255.255.255.255/32 Ifp en0 Ifa 17.202.40.191 [SCOPED]
+17. Net 255.255.255.255/32 Ifp en1 Ifa 17.202.42.24 [SCOPED]
 }
 Remove old[0]: Net 0.0.0.0/0 Gate 10.0.0.1 Ifp en0 Ifa 10.0.0.10
 Remove old[1]: Net 0.0.0.0/0 Gate 10.0.0.1 Ifp en1 Ifa 10.0.0.20 [SCOPED]
@@ -3237,6 +4573,12 @@ Remove old[5]: Net 10.0.0.1/32 Ifp en0 Ifa 10.0.0.10
 Remove old[6]: Net 10.0.0.1/32 Ifp en1 Ifa 10.0.0.20 [SCOPED]
 Remove old[7]: Net 192.168.2.0/24 Ifp fw0 Ifa 192.168.2.30
 Remove old[8]: Net 192.168.2.1/32 Ifp fw0 Ifa 192.168.2.30
+Remove old[9]: Net 224.0.0.0/4 Ifp en0 Ifa 10.0.0.10
+Remove old[10]: Net 224.0.0.0/4 Ifp en1 Ifa 10.0.0.20 [SCOPED]
+Remove old[11]: Net 224.0.0.0/4 Ifp fw0 Ifa 192.168.2.30 [SCOPED]
+Remove old[12]: Net 255.255.255.255/32 Ifp en0 Ifa 10.0.0.10
+Remove old[13]: Net 255.255.255.255/32 Ifp en1 Ifa 10.0.0.20 [SCOPED]
+Remove old[14]: Net 255.255.255.255/32 Ifp fw0 Ifa 192.168.2.30 [SCOPED]
 Add new[11]: Net 17.219.156.1/32 Ifp ppp0 Ifa 17.219.156.22
 Add new[0]: Net 0.0.0.0/0 Gate 17.219.156.1 Ifp ppp0 Ifa 17.219.156.22
 Add new[7]: Net 17.202.20.1/32 Ifp en0 Ifa 17.202.40.191
@@ -3249,10 +4591,16 @@ Add new[5]: Net 10.0.0.1/32 Ifp en1 Ifa 10.0.0.20
 Add new[6]: Net 10.0.0.1/32 Ifp en0 Ifa 10.0.0.11 [SCOPED]
 Add new[9]: Net 17.202.40.0/22 Ifp en0 Ifa 17.202.40.191
 Add new[10]: Net 17.202.40.0/22 Ifp en1 Ifa 17.202.42.24 [SCOPED]
+Add new[12]: Net 224.0.0.0/4 Ifp ppp0 Ifa 17.219.156.22
+Add new[13]: Net 224.0.0.0/4 Ifp en0 Ifa 17.202.40.191 [SCOPED]
+Add new[14]: Net 224.0.0.0/4 Ifp en1 Ifa 17.202.42.24 [SCOPED]
+Add new[15]: Net 255.255.255.255/32 Ifp ppp0 Ifa 17.219.156.22
+Add new[16]: Net 255.255.255.255/32 Ifp en0 Ifa 17.202.40.191 [SCOPED]
+Add new[17]: Net 255.255.255.255/32 Ifp en1 Ifa 17.202.42.24 [SCOPED]
 =================> Apply 'test2', 'test5' End <=================
 
 =================> Apply 'test5', 'test2' Begin <=================
-Old routes ('test5') = <IPv4RouteList[12]> = {
+Old routes ('test5') = <IPv4RouteList[18]> = {
  0. Net 0.0.0.0/0 Gate 17.219.156.1 Ifp ppp0 Ifa 17.219.156.22
  1. Net 0.0.0.0/0 Gate 17.202.20.1 Ifp en0 Ifa 17.202.40.191 [SCOPED]
  2. Net 0.0.0.0/0 Gate 17.202.20.1 Ifp en1 Ifa 17.202.42.24 [SCOPED]
@@ -3265,6 +4613,12 @@ Old routes ('test5') = <IPv4RouteList[12]> = {
  9. Net 17.202.40.0/22 Ifp en0 Ifa 17.202.40.191
 10. Net 17.202.40.0/22 Ifp en1 Ifa 17.202.42.24 [SCOPED]
 11. Net 17.219.156.1/32 Ifp ppp0 Ifa 17.219.156.22
+12. Net 224.0.0.0/4 Ifp ppp0 Ifa 17.219.156.22
+13. Net 224.0.0.0/4 Ifp en0 Ifa 17.202.40.191 [SCOPED]
+14. Net 224.0.0.0/4 Ifp en1 Ifa 17.202.42.24 [SCOPED]
+15. Net 255.255.255.255/32 Ifp ppp0 Ifa 17.219.156.22
+16. Net 255.255.255.255/32 Ifp en0 Ifa 17.202.40.191 [SCOPED]
+17. Net 255.255.255.255/32 Ifp en1 Ifa 17.202.42.24 [SCOPED]
 }
 Add new[11]: Net 17.219.156.1/32 Ifp ppp0 Ifa 17.219.156.22
 Add new[0]: Net 0.0.0.0/0 Gate 17.219.156.1 Ifp ppp0 Ifa 17.219.156.22
@@ -3278,7 +4632,13 @@ Add new[5]: Net 10.0.0.1/32 Ifp en1 Ifa 10.0.0.20
 Add new[6]: Net 10.0.0.1/32 Ifp en0 Ifa 10.0.0.11 [SCOPED]
 Add new[9]: Net 17.202.40.0/22 Ifp en0 Ifa 17.202.40.191
 Add new[10]: Net 17.202.40.0/22 Ifp en1 Ifa 17.202.42.24 [SCOPED]
-New Routes ('test2') = <IPv4RouteList[9]> = {
+Add new[12]: Net 224.0.0.0/4 Ifp ppp0 Ifa 17.219.156.22
+Add new[13]: Net 224.0.0.0/4 Ifp en0 Ifa 17.202.40.191 [SCOPED]
+Add new[14]: Net 224.0.0.0/4 Ifp en1 Ifa 17.202.42.24 [SCOPED]
+Add new[15]: Net 255.255.255.255/32 Ifp ppp0 Ifa 17.219.156.22
+Add new[16]: Net 255.255.255.255/32 Ifp en0 Ifa 17.202.40.191 [SCOPED]
+Add new[17]: Net 255.255.255.255/32 Ifp en1 Ifa 17.202.42.24 [SCOPED]
+New Routes ('test2') = <IPv4RouteList[15]> = {
  0. Net 0.0.0.0/0 Gate 10.0.0.1 Ifp en0 Ifa 10.0.0.10
  1. Net 0.0.0.0/0 Gate 10.0.0.1 Ifp en1 Ifa 10.0.0.20 [SCOPED]
  2. Net 0.0.0.0/0 Gate 192.168.2.1 Ifp fw0 Ifa 192.168.2.30 [SCOPED]
@@ -3288,6 +4648,12 @@ New Routes ('test2') = <IPv4RouteList[9]> = {
  6. Net 10.0.0.1/32 Ifp en1 Ifa 10.0.0.20 [SCOPED]
  7. Net 192.168.2.0/24 Ifp fw0 Ifa 192.168.2.30
  8. Net 192.168.2.1/32 Ifp fw0 Ifa 192.168.2.30
+ 9. Net 224.0.0.0/4 Ifp en0 Ifa 10.0.0.10
+10. Net 224.0.0.0/4 Ifp en1 Ifa 10.0.0.20 [SCOPED]
+11. Net 224.0.0.0/4 Ifp fw0 Ifa 192.168.2.30 [SCOPED]
+12. Net 255.255.255.255/32 Ifp en0 Ifa 10.0.0.10
+13. Net 255.255.255.255/32 Ifp en1 Ifa 10.0.0.20 [SCOPED]
+14. Net 255.255.255.255/32 Ifp fw0 Ifa 192.168.2.30 [SCOPED]
 }
 Remove old[0]: Net 0.0.0.0/0 Gate 17.219.156.1 Ifp ppp0 Ifa 17.219.156.22
 Remove old[1]: Net 0.0.0.0/0 Gate 17.202.20.1 Ifp en0 Ifa 17.202.40.191 [SCOPED]
@@ -3301,6 +4667,12 @@ Remove old[8]: Net 17.202.20.1/32 Ifp en1 Ifa 17.202.42.24 [SCOPED]
 Remove old[9]: Net 17.202.40.0/22 Ifp en0 Ifa 17.202.40.191
 Remove old[10]: Net 17.202.40.0/22 Ifp en1 Ifa 17.202.42.24 [SCOPED]
 Remove old[11]: Net 17.219.156.1/32 Ifp ppp0 Ifa 17.219.156.22
+Remove old[12]: Net 224.0.0.0/4 Ifp ppp0 Ifa 17.219.156.22
+Remove old[13]: Net 224.0.0.0/4 Ifp en0 Ifa 17.202.40.191 [SCOPED]
+Remove old[14]: Net 224.0.0.0/4 Ifp en1 Ifa 17.202.42.24 [SCOPED]
+Remove old[15]: Net 255.255.255.255/32 Ifp ppp0 Ifa 17.219.156.22
+Remove old[16]: Net 255.255.255.255/32 Ifp en0 Ifa 17.202.40.191 [SCOPED]
+Remove old[17]: Net 255.255.255.255/32 Ifp en1 Ifa 17.202.42.24 [SCOPED]
 Add new[5]: Net 10.0.0.1/32 Ifp en0 Ifa 10.0.0.10
 Add new[0]: Net 0.0.0.0/0 Gate 10.0.0.1 Ifp en0 Ifa 10.0.0.10
 Add new[6]: Net 10.0.0.1/32 Ifp en1 Ifa 10.0.0.20 [SCOPED]
@@ -3310,10 +4682,16 @@ Add new[2]: Net 0.0.0.0/0 Gate 192.168.2.1 Ifp fw0 Ifa 192.168.2.30 [SCOPED]
 Add new[3]: Net 10.0.0.0/24 Ifp en0 Ifa 10.0.0.10
 Add new[4]: Net 10.0.0.0/24 Ifp en1 Ifa 10.0.0.20 [SCOPED]
 Add new[7]: Net 192.168.2.0/24 Ifp fw0 Ifa 192.168.2.30
+Add new[9]: Net 224.0.0.0/4 Ifp en0 Ifa 10.0.0.10
+Add new[10]: Net 224.0.0.0/4 Ifp en1 Ifa 10.0.0.20 [SCOPED]
+Add new[11]: Net 224.0.0.0/4 Ifp fw0 Ifa 192.168.2.30 [SCOPED]
+Add new[12]: Net 255.255.255.255/32 Ifp en0 Ifa 10.0.0.10
+Add new[13]: Net 255.255.255.255/32 Ifp en1 Ifa 10.0.0.20 [SCOPED]
+Add new[14]: Net 255.255.255.255/32 Ifp fw0 Ifa 192.168.2.30 [SCOPED]
 =================> Apply 'test5', 'test2' End <=================
 
 =================> Apply 'test2', 'test6' Begin <=================
-Old routes ('test2') = <IPv4RouteList[9]> = {
+Old routes ('test2') = <IPv4RouteList[15]> = {
  0. Net 0.0.0.0/0 Gate 10.0.0.1 Ifp en0 Ifa 10.0.0.10
  1. Net 0.0.0.0/0 Gate 10.0.0.1 Ifp en1 Ifa 10.0.0.20 [SCOPED]
  2. Net 0.0.0.0/0 Gate 192.168.2.1 Ifp fw0 Ifa 192.168.2.30 [SCOPED]
@@ -3323,6 +4701,12 @@ Old routes ('test2') = <IPv4RouteList[9]> = {
  6. Net 10.0.0.1/32 Ifp en1 Ifa 10.0.0.20 [SCOPED]
  7. Net 192.168.2.0/24 Ifp fw0 Ifa 192.168.2.30
  8. Net 192.168.2.1/32 Ifp fw0 Ifa 192.168.2.30
+ 9. Net 224.0.0.0/4 Ifp en0 Ifa 10.0.0.10
+10. Net 224.0.0.0/4 Ifp en1 Ifa 10.0.0.20 [SCOPED]
+11. Net 224.0.0.0/4 Ifp fw0 Ifa 192.168.2.30 [SCOPED]
+12. Net 255.255.255.255/32 Ifp en0 Ifa 10.0.0.10
+13. Net 255.255.255.255/32 Ifp en1 Ifa 10.0.0.20 [SCOPED]
+14. Net 255.255.255.255/32 Ifp fw0 Ifa 192.168.2.30 [SCOPED]
 }
 Add new[5]: Net 10.0.0.1/32 Ifp en0 Ifa 10.0.0.10
 Add new[0]: Net 0.0.0.0/0 Gate 10.0.0.1 Ifp en0 Ifa 10.0.0.10
@@ -3333,17 +4717,31 @@ Add new[2]: Net 0.0.0.0/0 Gate 192.168.2.1 Ifp fw0 Ifa 192.168.2.30 [SCOPED]
 Add new[3]: Net 10.0.0.0/24 Ifp en0 Ifa 10.0.0.10
 Add new[4]: Net 10.0.0.0/24 Ifp en1 Ifa 10.0.0.20 [SCOPED]
 Add new[7]: Net 192.168.2.0/24 Ifp fw0 Ifa 192.168.2.30
-New Routes ('test6') = <IPv4RouteList[10]> = {
+Add new[9]: Net 224.0.0.0/4 Ifp en0 Ifa 10.0.0.10
+Add new[10]: Net 224.0.0.0/4 Ifp en1 Ifa 10.0.0.20 [SCOPED]
+Add new[11]: Net 224.0.0.0/4 Ifp fw0 Ifa 192.168.2.30 [SCOPED]
+Add new[12]: Net 255.255.255.255/32 Ifp en0 Ifa 10.0.0.10
+Add new[13]: Net 255.255.255.255/32 Ifp en1 Ifa 10.0.0.20 [SCOPED]
+Add new[14]: Net 255.255.255.255/32 Ifp fw0 Ifa 192.168.2.30 [SCOPED]
+New Routes ('test6') = <IPv4RouteList[18]> = {
  0. Net 0.0.0.0/0 Gate 17.255.96.1 Ifp en2 Ifa 17.255.98.164
  1. Net 0.0.0.0/0 Gate 17.202.40.1 Ifp en0 Ifa 17.202.42.113 [SCOPED]
  2. Net 0.0.0.0/0 Gate 17.202.40.1 Ifp en1 Ifa 17.202.42.111 [SCOPED]
- 3. Net 0.0.0.0/0 Ifp fw0 Ifa 169.254.11.33 [SCOPED]
- 4. Net 17.202.40.0/22 Ifp en0 Ifa 17.202.42.113
- 5. Net 17.202.40.0/22 Ifp en1 Ifa 17.202.42.111 [SCOPED]
- 6. Net 17.202.40.1/32 Ifp en0 Ifa 17.202.42.113
- 7. Net 17.202.40.1/32 Ifp en1 Ifa 17.202.42.111 [SCOPED]
- 8. Net 17.255.96.0/20 Ifp en2 Ifa 17.255.98.164
- 9. Net 17.255.96.1/32 Ifp en2 Ifa 17.255.98.164
+ 3. Net 17.202.40.0/22 Ifp en0 Ifa 17.202.42.113
+ 4. Net 17.202.40.0/22 Ifp en1 Ifa 17.202.42.111 [SCOPED]
+ 5. Net 17.202.40.1/32 Ifp en0 Ifa 17.202.42.113
+ 6. Net 17.202.40.1/32 Ifp en1 Ifa 17.202.42.111 [SCOPED]
+ 7. Net 17.255.96.0/20 Ifp en2 Ifa 17.255.98.164
+ 8. Net 17.255.96.1/32 Ifp en2 Ifa 17.255.98.164
+ 9. Net 169.254.0.0/16 Ifp fw0 Ifa 169.254.11.33 [last]
+10. Net 224.0.0.0/4 Ifp en2 Ifa 17.255.98.164
+11. Net 224.0.0.0/4 Ifp en0 Ifa 17.202.42.113 [SCOPED]
+12. Net 224.0.0.0/4 Ifp en1 Ifa 17.202.42.111 [SCOPED]
+13. Net 224.0.0.0/4 Ifp fw0 Ifa 169.254.11.33 [last] [SCOPED]
+14. Net 255.255.255.255/32 Ifp en2 Ifa 17.255.98.164
+15. Net 255.255.255.255/32 Ifp en0 Ifa 17.202.42.113 [SCOPED]
+16. Net 255.255.255.255/32 Ifp en1 Ifa 17.202.42.111 [SCOPED]
+17. Net 255.255.255.255/32 Ifp fw0 Ifa 169.254.11.33 [last] [SCOPED]
 }
 Remove old[0]: Net 0.0.0.0/0 Gate 10.0.0.1 Ifp en0 Ifa 10.0.0.10
 Remove old[1]: Net 0.0.0.0/0 Gate 10.0.0.1 Ifp en1 Ifa 10.0.0.20 [SCOPED]
@@ -3354,42 +4752,72 @@ Remove old[5]: Net 10.0.0.1/32 Ifp en0 Ifa 10.0.0.10
 Remove old[6]: Net 10.0.0.1/32 Ifp en1 Ifa 10.0.0.20 [SCOPED]
 Remove old[7]: Net 192.168.2.0/24 Ifp fw0 Ifa 192.168.2.30
 Remove old[8]: Net 192.168.2.1/32 Ifp fw0 Ifa 192.168.2.30
-Add new[9]: Net 17.255.96.1/32 Ifp en2 Ifa 17.255.98.164
+Remove old[9]: Net 224.0.0.0/4 Ifp en0 Ifa 10.0.0.10
+Remove old[10]: Net 224.0.0.0/4 Ifp en1 Ifa 10.0.0.20 [SCOPED]
+Remove old[11]: Net 224.0.0.0/4 Ifp fw0 Ifa 192.168.2.30 [SCOPED]
+Remove old[12]: Net 255.255.255.255/32 Ifp en0 Ifa 10.0.0.10
+Remove old[13]: Net 255.255.255.255/32 Ifp en1 Ifa 10.0.0.20 [SCOPED]
+Remove old[14]: Net 255.255.255.255/32 Ifp fw0 Ifa 192.168.2.30 [SCOPED]
+Add new[8]: Net 17.255.96.1/32 Ifp en2 Ifa 17.255.98.164
 Add new[0]: Net 0.0.0.0/0 Gate 17.255.96.1 Ifp en2 Ifa 17.255.98.164
-Add new[6]: Net 17.202.40.1/32 Ifp en0 Ifa 17.202.42.113
+Add new[5]: Net 17.202.40.1/32 Ifp en0 Ifa 17.202.42.113
 Add new[1]: Net 0.0.0.0/0 Gate 17.202.40.1 Ifp en0 Ifa 17.202.42.113 [SCOPED]
-Add new[7]: Net 17.202.40.1/32 Ifp en1 Ifa 17.202.42.111 [SCOPED]
+Add new[6]: Net 17.202.40.1/32 Ifp en1 Ifa 17.202.42.111 [SCOPED]
 Add new[2]: Net 0.0.0.0/0 Gate 17.202.40.1 Ifp en1 Ifa 17.202.42.111 [SCOPED]
-Add new[3]: Net 0.0.0.0/0 Ifp fw0 Ifa 169.254.11.33 [SCOPED]
-Add new[4]: Net 17.202.40.0/22 Ifp en0 Ifa 17.202.42.113
-Add new[5]: Net 17.202.40.0/22 Ifp en1 Ifa 17.202.42.111 [SCOPED]
-Add new[8]: Net 17.255.96.0/20 Ifp en2 Ifa 17.255.98.164
+Add new[3]: Net 17.202.40.0/22 Ifp en0 Ifa 17.202.42.113
+Add new[4]: Net 17.202.40.0/22 Ifp en1 Ifa 17.202.42.111 [SCOPED]
+Add new[7]: Net 17.255.96.0/20 Ifp en2 Ifa 17.255.98.164
+Add new[9]: Net 169.254.0.0/16 Ifp fw0 Ifa 169.254.11.33 [last]
+Add new[10]: Net 224.0.0.0/4 Ifp en2 Ifa 17.255.98.164
+Add new[11]: Net 224.0.0.0/4 Ifp en0 Ifa 17.202.42.113 [SCOPED]
+Add new[12]: Net 224.0.0.0/4 Ifp en1 Ifa 17.202.42.111 [SCOPED]
+Add new[13]: Net 224.0.0.0/4 Ifp fw0 Ifa 169.254.11.33 [last] [SCOPED]
+Add new[14]: Net 255.255.255.255/32 Ifp en2 Ifa 17.255.98.164
+Add new[15]: Net 255.255.255.255/32 Ifp en0 Ifa 17.202.42.113 [SCOPED]
+Add new[16]: Net 255.255.255.255/32 Ifp en1 Ifa 17.202.42.111 [SCOPED]
+Add new[17]: Net 255.255.255.255/32 Ifp fw0 Ifa 169.254.11.33 [last] [SCOPED]
 =================> Apply 'test2', 'test6' End <=================
 
 =================> Apply 'test6', 'test2' Begin <=================
-Old routes ('test6') = <IPv4RouteList[10]> = {
+Old routes ('test6') = <IPv4RouteList[18]> = {
  0. Net 0.0.0.0/0 Gate 17.255.96.1 Ifp en2 Ifa 17.255.98.164
  1. Net 0.0.0.0/0 Gate 17.202.40.1 Ifp en0 Ifa 17.202.42.113 [SCOPED]
  2. Net 0.0.0.0/0 Gate 17.202.40.1 Ifp en1 Ifa 17.202.42.111 [SCOPED]
- 3. Net 0.0.0.0/0 Ifp fw0 Ifa 169.254.11.33 [SCOPED]
- 4. Net 17.202.40.0/22 Ifp en0 Ifa 17.202.42.113
- 5. Net 17.202.40.0/22 Ifp en1 Ifa 17.202.42.111 [SCOPED]
- 6. Net 17.202.40.1/32 Ifp en0 Ifa 17.202.42.113
- 7. Net 17.202.40.1/32 Ifp en1 Ifa 17.202.42.111 [SCOPED]
- 8. Net 17.255.96.0/20 Ifp en2 Ifa 17.255.98.164
- 9. Net 17.255.96.1/32 Ifp en2 Ifa 17.255.98.164
-}
-Add new[9]: Net 17.255.96.1/32 Ifp en2 Ifa 17.255.98.164
+ 3. Net 17.202.40.0/22 Ifp en0 Ifa 17.202.42.113
+ 4. Net 17.202.40.0/22 Ifp en1 Ifa 17.202.42.111 [SCOPED]
+ 5. Net 17.202.40.1/32 Ifp en0 Ifa 17.202.42.113
+ 6. Net 17.202.40.1/32 Ifp en1 Ifa 17.202.42.111 [SCOPED]
+ 7. Net 17.255.96.0/20 Ifp en2 Ifa 17.255.98.164
+ 8. Net 17.255.96.1/32 Ifp en2 Ifa 17.255.98.164
+ 9. Net 169.254.0.0/16 Ifp fw0 Ifa 169.254.11.33 [last]
+10. Net 224.0.0.0/4 Ifp en2 Ifa 17.255.98.164
+11. Net 224.0.0.0/4 Ifp en0 Ifa 17.202.42.113 [SCOPED]
+12. Net 224.0.0.0/4 Ifp en1 Ifa 17.202.42.111 [SCOPED]
+13. Net 224.0.0.0/4 Ifp fw0 Ifa 169.254.11.33 [last] [SCOPED]
+14. Net 255.255.255.255/32 Ifp en2 Ifa 17.255.98.164
+15. Net 255.255.255.255/32 Ifp en0 Ifa 17.202.42.113 [SCOPED]
+16. Net 255.255.255.255/32 Ifp en1 Ifa 17.202.42.111 [SCOPED]
+17. Net 255.255.255.255/32 Ifp fw0 Ifa 169.254.11.33 [last] [SCOPED]
+}
+Add new[8]: Net 17.255.96.1/32 Ifp en2 Ifa 17.255.98.164
 Add new[0]: Net 0.0.0.0/0 Gate 17.255.96.1 Ifp en2 Ifa 17.255.98.164
-Add new[6]: Net 17.202.40.1/32 Ifp en0 Ifa 17.202.42.113
+Add new[5]: Net 17.202.40.1/32 Ifp en0 Ifa 17.202.42.113
 Add new[1]: Net 0.0.0.0/0 Gate 17.202.40.1 Ifp en0 Ifa 17.202.42.113 [SCOPED]
-Add new[7]: Net 17.202.40.1/32 Ifp en1 Ifa 17.202.42.111 [SCOPED]
+Add new[6]: Net 17.202.40.1/32 Ifp en1 Ifa 17.202.42.111 [SCOPED]
 Add new[2]: Net 0.0.0.0/0 Gate 17.202.40.1 Ifp en1 Ifa 17.202.42.111 [SCOPED]
-Add new[3]: Net 0.0.0.0/0 Ifp fw0 Ifa 169.254.11.33 [SCOPED]
-Add new[4]: Net 17.202.40.0/22 Ifp en0 Ifa 17.202.42.113
-Add new[5]: Net 17.202.40.0/22 Ifp en1 Ifa 17.202.42.111 [SCOPED]
-Add new[8]: Net 17.255.96.0/20 Ifp en2 Ifa 17.255.98.164
-New Routes ('test2') = <IPv4RouteList[9]> = {
+Add new[3]: Net 17.202.40.0/22 Ifp en0 Ifa 17.202.42.113
+Add new[4]: Net 17.202.40.0/22 Ifp en1 Ifa 17.202.42.111 [SCOPED]
+Add new[7]: Net 17.255.96.0/20 Ifp en2 Ifa 17.255.98.164
+Add new[9]: Net 169.254.0.0/16 Ifp fw0 Ifa 169.254.11.33 [last]
+Add new[10]: Net 224.0.0.0/4 Ifp en2 Ifa 17.255.98.164
+Add new[11]: Net 224.0.0.0/4 Ifp en0 Ifa 17.202.42.113 [SCOPED]
+Add new[12]: Net 224.0.0.0/4 Ifp en1 Ifa 17.202.42.111 [SCOPED]
+Add new[13]: Net 224.0.0.0/4 Ifp fw0 Ifa 169.254.11.33 [last] [SCOPED]
+Add new[14]: Net 255.255.255.255/32 Ifp en2 Ifa 17.255.98.164
+Add new[15]: Net 255.255.255.255/32 Ifp en0 Ifa 17.202.42.113 [SCOPED]
+Add new[16]: Net 255.255.255.255/32 Ifp en1 Ifa 17.202.42.111 [SCOPED]
+Add new[17]: Net 255.255.255.255/32 Ifp fw0 Ifa 169.254.11.33 [last] [SCOPED]
+New Routes ('test2') = <IPv4RouteList[15]> = {
  0. Net 0.0.0.0/0 Gate 10.0.0.1 Ifp en0 Ifa 10.0.0.10
  1. Net 0.0.0.0/0 Gate 10.0.0.1 Ifp en1 Ifa 10.0.0.20 [SCOPED]
  2. Net 0.0.0.0/0 Gate 192.168.2.1 Ifp fw0 Ifa 192.168.2.30 [SCOPED]
@@ -3399,17 +4827,31 @@ New Routes ('test2') = <IPv4RouteList[9]> = {
  6. Net 10.0.0.1/32 Ifp en1 Ifa 10.0.0.20 [SCOPED]
  7. Net 192.168.2.0/24 Ifp fw0 Ifa 192.168.2.30
  8. Net 192.168.2.1/32 Ifp fw0 Ifa 192.168.2.30
+ 9. Net 224.0.0.0/4 Ifp en0 Ifa 10.0.0.10
+10. Net 224.0.0.0/4 Ifp en1 Ifa 10.0.0.20 [SCOPED]
+11. Net 224.0.0.0/4 Ifp fw0 Ifa 192.168.2.30 [SCOPED]
+12. Net 255.255.255.255/32 Ifp en0 Ifa 10.0.0.10
+13. Net 255.255.255.255/32 Ifp en1 Ifa 10.0.0.20 [SCOPED]
+14. Net 255.255.255.255/32 Ifp fw0 Ifa 192.168.2.30 [SCOPED]
 }
 Remove old[0]: Net 0.0.0.0/0 Gate 17.255.96.1 Ifp en2 Ifa 17.255.98.164
 Remove old[1]: Net 0.0.0.0/0 Gate 17.202.40.1 Ifp en0 Ifa 17.202.42.113 [SCOPED]
 Remove old[2]: Net 0.0.0.0/0 Gate 17.202.40.1 Ifp en1 Ifa 17.202.42.111 [SCOPED]
-Remove old[3]: Net 0.0.0.0/0 Ifp fw0 Ifa 169.254.11.33 [SCOPED]
-Remove old[4]: Net 17.202.40.0/22 Ifp en0 Ifa 17.202.42.113
-Remove old[5]: Net 17.202.40.0/22 Ifp en1 Ifa 17.202.42.111 [SCOPED]
-Remove old[6]: Net 17.202.40.1/32 Ifp en0 Ifa 17.202.42.113
-Remove old[7]: Net 17.202.40.1/32 Ifp en1 Ifa 17.202.42.111 [SCOPED]
-Remove old[8]: Net 17.255.96.0/20 Ifp en2 Ifa 17.255.98.164
-Remove old[9]: Net 17.255.96.1/32 Ifp en2 Ifa 17.255.98.164
+Remove old[3]: Net 17.202.40.0/22 Ifp en0 Ifa 17.202.42.113
+Remove old[4]: Net 17.202.40.0/22 Ifp en1 Ifa 17.202.42.111 [SCOPED]
+Remove old[5]: Net 17.202.40.1/32 Ifp en0 Ifa 17.202.42.113
+Remove old[6]: Net 17.202.40.1/32 Ifp en1 Ifa 17.202.42.111 [SCOPED]
+Remove old[7]: Net 17.255.96.0/20 Ifp en2 Ifa 17.255.98.164
+Remove old[8]: Net 17.255.96.1/32 Ifp en2 Ifa 17.255.98.164
+Remove old[9]: Net 169.254.0.0/16 Ifp fw0 Ifa 169.254.11.33 [last]
+Remove old[10]: Net 224.0.0.0/4 Ifp en2 Ifa 17.255.98.164
+Remove old[11]: Net 224.0.0.0/4 Ifp en0 Ifa 17.202.42.113 [SCOPED]
+Remove old[12]: Net 224.0.0.0/4 Ifp en1 Ifa 17.202.42.111 [SCOPED]
+Remove old[13]: Net 224.0.0.0/4 Ifp fw0 Ifa 169.254.11.33 [last] [SCOPED]
+Remove old[14]: Net 255.255.255.255/32 Ifp en2 Ifa 17.255.98.164
+Remove old[15]: Net 255.255.255.255/32 Ifp en0 Ifa 17.202.42.113 [SCOPED]
+Remove old[16]: Net 255.255.255.255/32 Ifp en1 Ifa 17.202.42.111 [SCOPED]
+Remove old[17]: Net 255.255.255.255/32 Ifp fw0 Ifa 169.254.11.33 [last] [SCOPED]
 Add new[5]: Net 10.0.0.1/32 Ifp en0 Ifa 10.0.0.10
 Add new[0]: Net 0.0.0.0/0 Gate 10.0.0.1 Ifp en0 Ifa 10.0.0.10
 Add new[6]: Net 10.0.0.1/32 Ifp en1 Ifa 10.0.0.20 [SCOPED]
@@ -3419,10 +4861,16 @@ Add new[2]: Net 0.0.0.0/0 Gate 192.168.2.1 Ifp fw0 Ifa 192.168.2.30 [SCOPED]
 Add new[3]: Net 10.0.0.0/24 Ifp en0 Ifa 10.0.0.10
 Add new[4]: Net 10.0.0.0/24 Ifp en1 Ifa 10.0.0.20 [SCOPED]
 Add new[7]: Net 192.168.2.0/24 Ifp fw0 Ifa 192.168.2.30
+Add new[9]: Net 224.0.0.0/4 Ifp en0 Ifa 10.0.0.10
+Add new[10]: Net 224.0.0.0/4 Ifp en1 Ifa 10.0.0.20 [SCOPED]
+Add new[11]: Net 224.0.0.0/4 Ifp fw0 Ifa 192.168.2.30 [SCOPED]
+Add new[12]: Net 255.255.255.255/32 Ifp en0 Ifa 10.0.0.10
+Add new[13]: Net 255.255.255.255/32 Ifp en1 Ifa 10.0.0.20 [SCOPED]
+Add new[14]: Net 255.255.255.255/32 Ifp fw0 Ifa 192.168.2.30 [SCOPED]
 =================> Apply 'test6', 'test2' End <=================
 
 =================> Apply 'test2', 'test7' Begin <=================
-Old routes ('test2') = <IPv4RouteList[9]> = {
+Old routes ('test2') = <IPv4RouteList[15]> = {
  0. Net 0.0.0.0/0 Gate 10.0.0.1 Ifp en0 Ifa 10.0.0.10
  1. Net 0.0.0.0/0 Gate 10.0.0.1 Ifp en1 Ifa 10.0.0.20 [SCOPED]
  2. Net 0.0.0.0/0 Gate 192.168.2.1 Ifp fw0 Ifa 192.168.2.30 [SCOPED]
@@ -3432,6 +4880,12 @@ Old routes ('test2') = <IPv4RouteList[9]> = {
  6. Net 10.0.0.1/32 Ifp en1 Ifa 10.0.0.20 [SCOPED]
  7. Net 192.168.2.0/24 Ifp fw0 Ifa 192.168.2.30
  8. Net 192.168.2.1/32 Ifp fw0 Ifa 192.168.2.30
+ 9. Net 224.0.0.0/4 Ifp en0 Ifa 10.0.0.10
+10. Net 224.0.0.0/4 Ifp en1 Ifa 10.0.0.20 [SCOPED]
+11. Net 224.0.0.0/4 Ifp fw0 Ifa 192.168.2.30 [SCOPED]
+12. Net 255.255.255.255/32 Ifp en0 Ifa 10.0.0.10
+13. Net 255.255.255.255/32 Ifp en1 Ifa 10.0.0.20 [SCOPED]
+14. Net 255.255.255.255/32 Ifp fw0 Ifa 192.168.2.30 [SCOPED]
 }
 Add new[5]: Net 10.0.0.1/32 Ifp en0 Ifa 10.0.0.10
 Add new[0]: Net 0.0.0.0/0 Gate 10.0.0.1 Ifp en0 Ifa 10.0.0.10
@@ -3442,17 +4896,31 @@ Add new[2]: Net 0.0.0.0/0 Gate 192.168.2.1 Ifp fw0 Ifa 192.168.2.30 [SCOPED]
 Add new[3]: Net 10.0.0.0/24 Ifp en0 Ifa 10.0.0.10
 Add new[4]: Net 10.0.0.0/24 Ifp en1 Ifa 10.0.0.20 [SCOPED]
 Add new[7]: Net 192.168.2.0/24 Ifp fw0 Ifa 192.168.2.30
-New Routes ('test7') = <IPv4RouteList[10]> = {
+Add new[9]: Net 224.0.0.0/4 Ifp en0 Ifa 10.0.0.10
+Add new[10]: Net 224.0.0.0/4 Ifp en1 Ifa 10.0.0.20 [SCOPED]
+Add new[11]: Net 224.0.0.0/4 Ifp fw0 Ifa 192.168.2.30 [SCOPED]
+Add new[12]: Net 255.255.255.255/32 Ifp en0 Ifa 10.0.0.10
+Add new[13]: Net 255.255.255.255/32 Ifp en1 Ifa 10.0.0.20 [SCOPED]
+Add new[14]: Net 255.255.255.255/32 Ifp fw0 Ifa 192.168.2.30 [SCOPED]
+New Routes ('test7') = <IPv4RouteList[18]> = {
  0. Net 0.0.0.0/0 Gate 17.255.96.1 Ifp en2 Ifa 17.255.98.164
  1. Net 0.0.0.0/0 Gate 17.202.40.1 Ifp en1 Ifa 17.202.42.111 [SCOPED]
  2. Net 0.0.0.0/0 Gate 17.202.40.1 Ifp en0 Ifa 17.202.42.113 [SCOPED]
- 3. Net 0.0.0.0/0 Ifp fw0 Ifa 169.254.11.33 [SCOPED]
- 4. Net 17.202.40.0/22 Ifp en1 Ifa 17.202.42.111
- 5. Net 17.202.40.0/22 Ifp en0 Ifa 17.202.42.113 [SCOPED]
- 6. Net 17.202.40.1/32 Ifp en1 Ifa 17.202.42.111
- 7. Net 17.202.40.1/32 Ifp en0 Ifa 17.202.42.113 [SCOPED]
- 8. Net 17.255.96.0/20 Ifp en2 Ifa 17.255.98.164
- 9. Net 17.255.96.1/32 Ifp en2 Ifa 17.255.98.164
+ 3. Net 17.202.40.0/22 Ifp en1 Ifa 17.202.42.111
+ 4. Net 17.202.40.0/22 Ifp en0 Ifa 17.202.42.113 [SCOPED]
+ 5. Net 17.202.40.1/32 Ifp en1 Ifa 17.202.42.111
+ 6. Net 17.202.40.1/32 Ifp en0 Ifa 17.202.42.113 [SCOPED]
+ 7. Net 17.255.96.0/20 Ifp en2 Ifa 17.255.98.164
+ 8. Net 17.255.96.1/32 Ifp en2 Ifa 17.255.98.164
+ 9. Net 169.254.0.0/16 Ifp fw0 Ifa 169.254.11.33 [last]
+10. Net 224.0.0.0/4 Ifp en2 Ifa 17.255.98.164
+11. Net 224.0.0.0/4 Ifp en1 Ifa 17.202.42.111 [SCOPED]
+12. Net 224.0.0.0/4 Ifp en0 Ifa 17.202.42.113 [SCOPED]
+13. Net 224.0.0.0/4 Ifp fw0 Ifa 169.254.11.33 [last] [SCOPED]
+14. Net 255.255.255.255/32 Ifp en2 Ifa 17.255.98.164
+15. Net 255.255.255.255/32 Ifp en1 Ifa 17.202.42.111 [SCOPED]
+16. Net 255.255.255.255/32 Ifp en0 Ifa 17.202.42.113 [SCOPED]
+17. Net 255.255.255.255/32 Ifp fw0 Ifa 169.254.11.33 [last] [SCOPED]
 }
 Remove old[0]: Net 0.0.0.0/0 Gate 10.0.0.1 Ifp en0 Ifa 10.0.0.10
 Remove old[1]: Net 0.0.0.0/0 Gate 10.0.0.1 Ifp en1 Ifa 10.0.0.20 [SCOPED]
@@ -3463,42 +4931,72 @@ Remove old[5]: Net 10.0.0.1/32 Ifp en0 Ifa 10.0.0.10
 Remove old[6]: Net 10.0.0.1/32 Ifp en1 Ifa 10.0.0.20 [SCOPED]
 Remove old[7]: Net 192.168.2.0/24 Ifp fw0 Ifa 192.168.2.30
 Remove old[8]: Net 192.168.2.1/32 Ifp fw0 Ifa 192.168.2.30
-Add new[9]: Net 17.255.96.1/32 Ifp en2 Ifa 17.255.98.164
+Remove old[9]: Net 224.0.0.0/4 Ifp en0 Ifa 10.0.0.10
+Remove old[10]: Net 224.0.0.0/4 Ifp en1 Ifa 10.0.0.20 [SCOPED]
+Remove old[11]: Net 224.0.0.0/4 Ifp fw0 Ifa 192.168.2.30 [SCOPED]
+Remove old[12]: Net 255.255.255.255/32 Ifp en0 Ifa 10.0.0.10
+Remove old[13]: Net 255.255.255.255/32 Ifp en1 Ifa 10.0.0.20 [SCOPED]
+Remove old[14]: Net 255.255.255.255/32 Ifp fw0 Ifa 192.168.2.30 [SCOPED]
+Add new[8]: Net 17.255.96.1/32 Ifp en2 Ifa 17.255.98.164
 Add new[0]: Net 0.0.0.0/0 Gate 17.255.96.1 Ifp en2 Ifa 17.255.98.164
-Add new[6]: Net 17.202.40.1/32 Ifp en1 Ifa 17.202.42.111
+Add new[5]: Net 17.202.40.1/32 Ifp en1 Ifa 17.202.42.111
 Add new[1]: Net 0.0.0.0/0 Gate 17.202.40.1 Ifp en1 Ifa 17.202.42.111 [SCOPED]
-Add new[7]: Net 17.202.40.1/32 Ifp en0 Ifa 17.202.42.113 [SCOPED]
+Add new[6]: Net 17.202.40.1/32 Ifp en0 Ifa 17.202.42.113 [SCOPED]
 Add new[2]: Net 0.0.0.0/0 Gate 17.202.40.1 Ifp en0 Ifa 17.202.42.113 [SCOPED]
-Add new[3]: Net 0.0.0.0/0 Ifp fw0 Ifa 169.254.11.33 [SCOPED]
-Add new[4]: Net 17.202.40.0/22 Ifp en1 Ifa 17.202.42.111
-Add new[5]: Net 17.202.40.0/22 Ifp en0 Ifa 17.202.42.113 [SCOPED]
-Add new[8]: Net 17.255.96.0/20 Ifp en2 Ifa 17.255.98.164
+Add new[3]: Net 17.202.40.0/22 Ifp en1 Ifa 17.202.42.111
+Add new[4]: Net 17.202.40.0/22 Ifp en0 Ifa 17.202.42.113 [SCOPED]
+Add new[7]: Net 17.255.96.0/20 Ifp en2 Ifa 17.255.98.164
+Add new[9]: Net 169.254.0.0/16 Ifp fw0 Ifa 169.254.11.33 [last]
+Add new[10]: Net 224.0.0.0/4 Ifp en2 Ifa 17.255.98.164
+Add new[11]: Net 224.0.0.0/4 Ifp en1 Ifa 17.202.42.111 [SCOPED]
+Add new[12]: Net 224.0.0.0/4 Ifp en0 Ifa 17.202.42.113 [SCOPED]
+Add new[13]: Net 224.0.0.0/4 Ifp fw0 Ifa 169.254.11.33 [last] [SCOPED]
+Add new[14]: Net 255.255.255.255/32 Ifp en2 Ifa 17.255.98.164
+Add new[15]: Net 255.255.255.255/32 Ifp en1 Ifa 17.202.42.111 [SCOPED]
+Add new[16]: Net 255.255.255.255/32 Ifp en0 Ifa 17.202.42.113 [SCOPED]
+Add new[17]: Net 255.255.255.255/32 Ifp fw0 Ifa 169.254.11.33 [last] [SCOPED]
 =================> Apply 'test2', 'test7' End <=================
 
 =================> Apply 'test7', 'test2' Begin <=================
-Old routes ('test7') = <IPv4RouteList[10]> = {
+Old routes ('test7') = <IPv4RouteList[18]> = {
  0. Net 0.0.0.0/0 Gate 17.255.96.1 Ifp en2 Ifa 17.255.98.164
  1. Net 0.0.0.0/0 Gate 17.202.40.1 Ifp en1 Ifa 17.202.42.111 [SCOPED]
  2. Net 0.0.0.0/0 Gate 17.202.40.1 Ifp en0 Ifa 17.202.42.113 [SCOPED]
- 3. Net 0.0.0.0/0 Ifp fw0 Ifa 169.254.11.33 [SCOPED]
- 4. Net 17.202.40.0/22 Ifp en1 Ifa 17.202.42.111
- 5. Net 17.202.40.0/22 Ifp en0 Ifa 17.202.42.113 [SCOPED]
- 6. Net 17.202.40.1/32 Ifp en1 Ifa 17.202.42.111
- 7. Net 17.202.40.1/32 Ifp en0 Ifa 17.202.42.113 [SCOPED]
- 8. Net 17.255.96.0/20 Ifp en2 Ifa 17.255.98.164
- 9. Net 17.255.96.1/32 Ifp en2 Ifa 17.255.98.164
-}
-Add new[9]: Net 17.255.96.1/32 Ifp en2 Ifa 17.255.98.164
+ 3. Net 17.202.40.0/22 Ifp en1 Ifa 17.202.42.111
+ 4. Net 17.202.40.0/22 Ifp en0 Ifa 17.202.42.113 [SCOPED]
+ 5. Net 17.202.40.1/32 Ifp en1 Ifa 17.202.42.111
+ 6. Net 17.202.40.1/32 Ifp en0 Ifa 17.202.42.113 [SCOPED]
+ 7. Net 17.255.96.0/20 Ifp en2 Ifa 17.255.98.164
+ 8. Net 17.255.96.1/32 Ifp en2 Ifa 17.255.98.164
+ 9. Net 169.254.0.0/16 Ifp fw0 Ifa 169.254.11.33 [last]
+10. Net 224.0.0.0/4 Ifp en2 Ifa 17.255.98.164
+11. Net 224.0.0.0/4 Ifp en1 Ifa 17.202.42.111 [SCOPED]
+12. Net 224.0.0.0/4 Ifp en0 Ifa 17.202.42.113 [SCOPED]
+13. Net 224.0.0.0/4 Ifp fw0 Ifa 169.254.11.33 [last] [SCOPED]
+14. Net 255.255.255.255/32 Ifp en2 Ifa 17.255.98.164
+15. Net 255.255.255.255/32 Ifp en1 Ifa 17.202.42.111 [SCOPED]
+16. Net 255.255.255.255/32 Ifp en0 Ifa 17.202.42.113 [SCOPED]
+17. Net 255.255.255.255/32 Ifp fw0 Ifa 169.254.11.33 [last] [SCOPED]
+}
+Add new[8]: Net 17.255.96.1/32 Ifp en2 Ifa 17.255.98.164
 Add new[0]: Net 0.0.0.0/0 Gate 17.255.96.1 Ifp en2 Ifa 17.255.98.164
-Add new[6]: Net 17.202.40.1/32 Ifp en1 Ifa 17.202.42.111
+Add new[5]: Net 17.202.40.1/32 Ifp en1 Ifa 17.202.42.111
 Add new[1]: Net 0.0.0.0/0 Gate 17.202.40.1 Ifp en1 Ifa 17.202.42.111 [SCOPED]
-Add new[7]: Net 17.202.40.1/32 Ifp en0 Ifa 17.202.42.113 [SCOPED]
+Add new[6]: Net 17.202.40.1/32 Ifp en0 Ifa 17.202.42.113 [SCOPED]
 Add new[2]: Net 0.0.0.0/0 Gate 17.202.40.1 Ifp en0 Ifa 17.202.42.113 [SCOPED]
-Add new[3]: Net 0.0.0.0/0 Ifp fw0 Ifa 169.254.11.33 [SCOPED]
-Add new[4]: Net 17.202.40.0/22 Ifp en1 Ifa 17.202.42.111
-Add new[5]: Net 17.202.40.0/22 Ifp en0 Ifa 17.202.42.113 [SCOPED]
-Add new[8]: Net 17.255.96.0/20 Ifp en2 Ifa 17.255.98.164
-New Routes ('test2') = <IPv4RouteList[9]> = {
+Add new[3]: Net 17.202.40.0/22 Ifp en1 Ifa 17.202.42.111
+Add new[4]: Net 17.202.40.0/22 Ifp en0 Ifa 17.202.42.113 [SCOPED]
+Add new[7]: Net 17.255.96.0/20 Ifp en2 Ifa 17.255.98.164
+Add new[9]: Net 169.254.0.0/16 Ifp fw0 Ifa 169.254.11.33 [last]
+Add new[10]: Net 224.0.0.0/4 Ifp en2 Ifa 17.255.98.164
+Add new[11]: Net 224.0.0.0/4 Ifp en1 Ifa 17.202.42.111 [SCOPED]
+Add new[12]: Net 224.0.0.0/4 Ifp en0 Ifa 17.202.42.113 [SCOPED]
+Add new[13]: Net 224.0.0.0/4 Ifp fw0 Ifa 169.254.11.33 [last] [SCOPED]
+Add new[14]: Net 255.255.255.255/32 Ifp en2 Ifa 17.255.98.164
+Add new[15]: Net 255.255.255.255/32 Ifp en1 Ifa 17.202.42.111 [SCOPED]
+Add new[16]: Net 255.255.255.255/32 Ifp en0 Ifa 17.202.42.113 [SCOPED]
+Add new[17]: Net 255.255.255.255/32 Ifp fw0 Ifa 169.254.11.33 [last] [SCOPED]
+New Routes ('test2') = <IPv4RouteList[15]> = {
  0. Net 0.0.0.0/0 Gate 10.0.0.1 Ifp en0 Ifa 10.0.0.10
  1. Net 0.0.0.0/0 Gate 10.0.0.1 Ifp en1 Ifa 10.0.0.20 [SCOPED]
  2. Net 0.0.0.0/0 Gate 192.168.2.1 Ifp fw0 Ifa 192.168.2.30 [SCOPED]
@@ -3508,17 +5006,31 @@ New Routes ('test2') = <IPv4RouteList[9]> = {
  6. Net 10.0.0.1/32 Ifp en1 Ifa 10.0.0.20 [SCOPED]
  7. Net 192.168.2.0/24 Ifp fw0 Ifa 192.168.2.30
  8. Net 192.168.2.1/32 Ifp fw0 Ifa 192.168.2.30
+ 9. Net 224.0.0.0/4 Ifp en0 Ifa 10.0.0.10
+10. Net 224.0.0.0/4 Ifp en1 Ifa 10.0.0.20 [SCOPED]
+11. Net 224.0.0.0/4 Ifp fw0 Ifa 192.168.2.30 [SCOPED]
+12. Net 255.255.255.255/32 Ifp en0 Ifa 10.0.0.10
+13. Net 255.255.255.255/32 Ifp en1 Ifa 10.0.0.20 [SCOPED]
+14. Net 255.255.255.255/32 Ifp fw0 Ifa 192.168.2.30 [SCOPED]
 }
 Remove old[0]: Net 0.0.0.0/0 Gate 17.255.96.1 Ifp en2 Ifa 17.255.98.164
 Remove old[1]: Net 0.0.0.0/0 Gate 17.202.40.1 Ifp en1 Ifa 17.202.42.111 [SCOPED]
 Remove old[2]: Net 0.0.0.0/0 Gate 17.202.40.1 Ifp en0 Ifa 17.202.42.113 [SCOPED]
-Remove old[3]: Net 0.0.0.0/0 Ifp fw0 Ifa 169.254.11.33 [SCOPED]
-Remove old[4]: Net 17.202.40.0/22 Ifp en1 Ifa 17.202.42.111
-Remove old[5]: Net 17.202.40.0/22 Ifp en0 Ifa 17.202.42.113 [SCOPED]
-Remove old[6]: Net 17.202.40.1/32 Ifp en1 Ifa 17.202.42.111
-Remove old[7]: Net 17.202.40.1/32 Ifp en0 Ifa 17.202.42.113 [SCOPED]
-Remove old[8]: Net 17.255.96.0/20 Ifp en2 Ifa 17.255.98.164
-Remove old[9]: Net 17.255.96.1/32 Ifp en2 Ifa 17.255.98.164
+Remove old[3]: Net 17.202.40.0/22 Ifp en1 Ifa 17.202.42.111
+Remove old[4]: Net 17.202.40.0/22 Ifp en0 Ifa 17.202.42.113 [SCOPED]
+Remove old[5]: Net 17.202.40.1/32 Ifp en1 Ifa 17.202.42.111
+Remove old[6]: Net 17.202.40.1/32 Ifp en0 Ifa 17.202.42.113 [SCOPED]
+Remove old[7]: Net 17.255.96.0/20 Ifp en2 Ifa 17.255.98.164
+Remove old[8]: Net 17.255.96.1/32 Ifp en2 Ifa 17.255.98.164
+Remove old[9]: Net 169.254.0.0/16 Ifp fw0 Ifa 169.254.11.33 [last]
+Remove old[10]: Net 224.0.0.0/4 Ifp en2 Ifa 17.255.98.164
+Remove old[11]: Net 224.0.0.0/4 Ifp en1 Ifa 17.202.42.111 [SCOPED]
+Remove old[12]: Net 224.0.0.0/4 Ifp en0 Ifa 17.202.42.113 [SCOPED]
+Remove old[13]: Net 224.0.0.0/4 Ifp fw0 Ifa 169.254.11.33 [last] [SCOPED]
+Remove old[14]: Net 255.255.255.255/32 Ifp en2 Ifa 17.255.98.164
+Remove old[15]: Net 255.255.255.255/32 Ifp en1 Ifa 17.202.42.111 [SCOPED]
+Remove old[16]: Net 255.255.255.255/32 Ifp en0 Ifa 17.202.42.113 [SCOPED]
+Remove old[17]: Net 255.255.255.255/32 Ifp fw0 Ifa 169.254.11.33 [last] [SCOPED]
 Add new[5]: Net 10.0.0.1/32 Ifp en0 Ifa 10.0.0.10
 Add new[0]: Net 0.0.0.0/0 Gate 10.0.0.1 Ifp en0 Ifa 10.0.0.10
 Add new[6]: Net 10.0.0.1/32 Ifp en1 Ifa 10.0.0.20 [SCOPED]
@@ -3528,10 +5040,16 @@ Add new[2]: Net 0.0.0.0/0 Gate 192.168.2.1 Ifp fw0 Ifa 192.168.2.30 [SCOPED]
 Add new[3]: Net 10.0.0.0/24 Ifp en0 Ifa 10.0.0.10
 Add new[4]: Net 10.0.0.0/24 Ifp en1 Ifa 10.0.0.20 [SCOPED]
 Add new[7]: Net 192.168.2.0/24 Ifp fw0 Ifa 192.168.2.30
+Add new[9]: Net 224.0.0.0/4 Ifp en0 Ifa 10.0.0.10
+Add new[10]: Net 224.0.0.0/4 Ifp en1 Ifa 10.0.0.20 [SCOPED]
+Add new[11]: Net 224.0.0.0/4 Ifp fw0 Ifa 192.168.2.30 [SCOPED]
+Add new[12]: Net 255.255.255.255/32 Ifp en0 Ifa 10.0.0.10
+Add new[13]: Net 255.255.255.255/32 Ifp en1 Ifa 10.0.0.20 [SCOPED]
+Add new[14]: Net 255.255.255.255/32 Ifp fw0 Ifa 192.168.2.30 [SCOPED]
 =================> Apply 'test7', 'test2' End <=================
 
 =================> Apply 'test2', 'test8' Begin <=================
-Old routes ('test2') = <IPv4RouteList[9]> = {
+Old routes ('test2') = <IPv4RouteList[15]> = {
  0. Net 0.0.0.0/0 Gate 10.0.0.1 Ifp en0 Ifa 10.0.0.10
  1. Net 0.0.0.0/0 Gate 10.0.0.1 Ifp en1 Ifa 10.0.0.20 [SCOPED]
  2. Net 0.0.0.0/0 Gate 192.168.2.1 Ifp fw0 Ifa 192.168.2.30 [SCOPED]
@@ -3541,6 +5059,12 @@ Old routes ('test2') = <IPv4RouteList[9]> = {
  6. Net 10.0.0.1/32 Ifp en1 Ifa 10.0.0.20 [SCOPED]
  7. Net 192.168.2.0/24 Ifp fw0 Ifa 192.168.2.30
  8. Net 192.168.2.1/32 Ifp fw0 Ifa 192.168.2.30
+ 9. Net 224.0.0.0/4 Ifp en0 Ifa 10.0.0.10
+10. Net 224.0.0.0/4 Ifp en1 Ifa 10.0.0.20 [SCOPED]
+11. Net 224.0.0.0/4 Ifp fw0 Ifa 192.168.2.30 [SCOPED]
+12. Net 255.255.255.255/32 Ifp en0 Ifa 10.0.0.10
+13. Net 255.255.255.255/32 Ifp en1 Ifa 10.0.0.20 [SCOPED]
+14. Net 255.255.255.255/32 Ifp fw0 Ifa 192.168.2.30 [SCOPED]
 }
 Add new[5]: Net 10.0.0.1/32 Ifp en0 Ifa 10.0.0.10
 Add new[0]: Net 0.0.0.0/0 Gate 10.0.0.1 Ifp en0 Ifa 10.0.0.10
@@ -3551,27 +5075,43 @@ Add new[2]: Net 0.0.0.0/0 Gate 192.168.2.1 Ifp fw0 Ifa 192.168.2.30 [SCOPED]
 Add new[3]: Net 10.0.0.0/24 Ifp en0 Ifa 10.0.0.10
 Add new[4]: Net 10.0.0.0/24 Ifp en1 Ifa 10.0.0.20 [SCOPED]
 Add new[7]: Net 192.168.2.0/24 Ifp fw0 Ifa 192.168.2.30
-New Routes ('test8') = <IPv4RouteList[6]> = {
+Add new[9]: Net 224.0.0.0/4 Ifp en0 Ifa 10.0.0.10
+Add new[10]: Net 224.0.0.0/4 Ifp en1 Ifa 10.0.0.20 [SCOPED]
+Add new[11]: Net 224.0.0.0/4 Ifp fw0 Ifa 192.168.2.30 [SCOPED]
+Add new[12]: Net 255.255.255.255/32 Ifp en0 Ifa 10.0.0.10
+Add new[13]: Net 255.255.255.255/32 Ifp en1 Ifa 10.0.0.20 [SCOPED]
+Add new[14]: Net 255.255.255.255/32 Ifp fw0 Ifa 192.168.2.30 [SCOPED]
+New Routes ('test8') = <IPv4RouteList[10]> = {
  0. Net 0.0.0.0/0 Gate 10.0.0.1 Ifp en0 Ifa 10.0.0.10
  1. Net 0.0.0.0/0 Gate 10.0.0.1 Ifp en1 Ifa 10.0.0.20 [SCOPED]
  2. Net 10.0.0.0/24 Ifp en0 Ifa 10.0.0.10
  3. Net 10.0.0.0/24 Ifp en1 Ifa 10.0.0.20 [SCOPED]
  4. Net 10.0.0.1/32 Ifp en0 Ifa 10.0.0.10
  5. Net 10.0.0.1/32 Ifp en1 Ifa 10.0.0.20 [SCOPED]
+ 6. Net 224.0.0.0/4 Ifp en0 Ifa 10.0.0.10
+ 7. Net 224.0.0.0/4 Ifp en1 Ifa 10.0.0.20 [SCOPED]
+ 8. Net 255.255.255.255/32 Ifp en0 Ifa 10.0.0.10
+ 9. Net 255.255.255.255/32 Ifp en1 Ifa 10.0.0.20 [SCOPED]
 }
 Remove old[2]: Net 0.0.0.0/0 Gate 192.168.2.1 Ifp fw0 Ifa 192.168.2.30 [SCOPED]
 Remove old[7]: Net 192.168.2.0/24 Ifp fw0 Ifa 192.168.2.30
 Remove old[8]: Net 192.168.2.1/32 Ifp fw0 Ifa 192.168.2.30
+Remove old[11]: Net 224.0.0.0/4 Ifp fw0 Ifa 192.168.2.30 [SCOPED]
+Remove old[14]: Net 255.255.255.255/32 Ifp fw0 Ifa 192.168.2.30 [SCOPED]
 =================> Apply 'test2', 'test8' End <=================
 
 =================> Apply 'test8', 'test2' Begin <=================
-Old routes ('test8') = <IPv4RouteList[6]> = {
+Old routes ('test8') = <IPv4RouteList[10]> = {
  0. Net 0.0.0.0/0 Gate 10.0.0.1 Ifp en0 Ifa 10.0.0.10
  1. Net 0.0.0.0/0 Gate 10.0.0.1 Ifp en1 Ifa 10.0.0.20 [SCOPED]
  2. Net 10.0.0.0/24 Ifp en0 Ifa 10.0.0.10
  3. Net 10.0.0.0/24 Ifp en1 Ifa 10.0.0.20 [SCOPED]
  4. Net 10.0.0.1/32 Ifp en0 Ifa 10.0.0.10
  5. Net 10.0.0.1/32 Ifp en1 Ifa 10.0.0.20 [SCOPED]
+ 6. Net 224.0.0.0/4 Ifp en0 Ifa 10.0.0.10
+ 7. Net 224.0.0.0/4 Ifp en1 Ifa 10.0.0.20 [SCOPED]
+ 8. Net 255.255.255.255/32 Ifp en0 Ifa 10.0.0.10
+ 9. Net 255.255.255.255/32 Ifp en1 Ifa 10.0.0.20 [SCOPED]
 }
 Add new[4]: Net 10.0.0.1/32 Ifp en0 Ifa 10.0.0.10
 Add new[0]: Net 0.0.0.0/0 Gate 10.0.0.1 Ifp en0 Ifa 10.0.0.10
@@ -3579,7 +5119,11 @@ Add new[5]: Net 10.0.0.1/32 Ifp en1 Ifa 10.0.0.20 [SCOPED]
 Add new[1]: Net 0.0.0.0/0 Gate 10.0.0.1 Ifp en1 Ifa 10.0.0.20 [SCOPED]
 Add new[2]: Net 10.0.0.0/24 Ifp en0 Ifa 10.0.0.10
 Add new[3]: Net 10.0.0.0/24 Ifp en1 Ifa 10.0.0.20 [SCOPED]
-New Routes ('test2') = <IPv4RouteList[9]> = {
+Add new[6]: Net 224.0.0.0/4 Ifp en0 Ifa 10.0.0.10
+Add new[7]: Net 224.0.0.0/4 Ifp en1 Ifa 10.0.0.20 [SCOPED]
+Add new[8]: Net 255.255.255.255/32 Ifp en0 Ifa 10.0.0.10
+Add new[9]: Net 255.255.255.255/32 Ifp en1 Ifa 10.0.0.20 [SCOPED]
+New Routes ('test2') = <IPv4RouteList[15]> = {
  0. Net 0.0.0.0/0 Gate 10.0.0.1 Ifp en0 Ifa 10.0.0.10
  1. Net 0.0.0.0/0 Gate 10.0.0.1 Ifp en1 Ifa 10.0.0.20 [SCOPED]
  2. Net 0.0.0.0/0 Gate 192.168.2.1 Ifp fw0 Ifa 192.168.2.30 [SCOPED]
@@ -3589,14 +5133,22 @@ New Routes ('test2') = <IPv4RouteList[9]> = {
  6. Net 10.0.0.1/32 Ifp en1 Ifa 10.0.0.20 [SCOPED]
  7. Net 192.168.2.0/24 Ifp fw0 Ifa 192.168.2.30
  8. Net 192.168.2.1/32 Ifp fw0 Ifa 192.168.2.30
+ 9. Net 224.0.0.0/4 Ifp en0 Ifa 10.0.0.10
+10. Net 224.0.0.0/4 Ifp en1 Ifa 10.0.0.20 [SCOPED]
+11. Net 224.0.0.0/4 Ifp fw0 Ifa 192.168.2.30 [SCOPED]
+12. Net 255.255.255.255/32 Ifp en0 Ifa 10.0.0.10
+13. Net 255.255.255.255/32 Ifp en1 Ifa 10.0.0.20 [SCOPED]
+14. Net 255.255.255.255/32 Ifp fw0 Ifa 192.168.2.30 [SCOPED]
 }
 Add new[8]: Net 192.168.2.1/32 Ifp fw0 Ifa 192.168.2.30
 Add new[2]: Net 0.0.0.0/0 Gate 192.168.2.1 Ifp fw0 Ifa 192.168.2.30 [SCOPED]
 Add new[7]: Net 192.168.2.0/24 Ifp fw0 Ifa 192.168.2.30
+Add new[11]: Net 224.0.0.0/4 Ifp fw0 Ifa 192.168.2.30 [SCOPED]
+Add new[14]: Net 255.255.255.255/32 Ifp fw0 Ifa 192.168.2.30 [SCOPED]
 =================> Apply 'test8', 'test2' End <=================
 
 =================> Apply 'test2', 'test9' Begin <=================
-Old routes ('test2') = <IPv4RouteList[9]> = {
+Old routes ('test2') = <IPv4RouteList[15]> = {
  0. Net 0.0.0.0/0 Gate 10.0.0.1 Ifp en0 Ifa 10.0.0.10
  1. Net 0.0.0.0/0 Gate 10.0.0.1 Ifp en1 Ifa 10.0.0.20 [SCOPED]
  2. Net 0.0.0.0/0 Gate 192.168.2.1 Ifp fw0 Ifa 192.168.2.30 [SCOPED]
@@ -3606,6 +5158,12 @@ Old routes ('test2') = <IPv4RouteList[9]> = {
  6. Net 10.0.0.1/32 Ifp en1 Ifa 10.0.0.20 [SCOPED]
  7. Net 192.168.2.0/24 Ifp fw0 Ifa 192.168.2.30
  8. Net 192.168.2.1/32 Ifp fw0 Ifa 192.168.2.30
+ 9. Net 224.0.0.0/4 Ifp en0 Ifa 10.0.0.10
+10. Net 224.0.0.0/4 Ifp en1 Ifa 10.0.0.20 [SCOPED]
+11. Net 224.0.0.0/4 Ifp fw0 Ifa 192.168.2.30 [SCOPED]
+12. Net 255.255.255.255/32 Ifp en0 Ifa 10.0.0.10
+13. Net 255.255.255.255/32 Ifp en1 Ifa 10.0.0.20 [SCOPED]
+14. Net 255.255.255.255/32 Ifp fw0 Ifa 192.168.2.30 [SCOPED]
 }
 Add new[5]: Net 10.0.0.1/32 Ifp en0 Ifa 10.0.0.10
 Add new[0]: Net 0.0.0.0/0 Gate 10.0.0.1 Ifp en0 Ifa 10.0.0.10
@@ -3616,7 +5174,13 @@ Add new[2]: Net 0.0.0.0/0 Gate 192.168.2.1 Ifp fw0 Ifa 192.168.2.30 [SCOPED]
 Add new[3]: Net 10.0.0.0/24 Ifp en0 Ifa 10.0.0.10
 Add new[4]: Net 10.0.0.0/24 Ifp en1 Ifa 10.0.0.20 [SCOPED]
 Add new[7]: Net 192.168.2.0/24 Ifp fw0 Ifa 192.168.2.30
-New Routes ('test9') = <IPv4RouteList[9]> = {
+Add new[9]: Net 224.0.0.0/4 Ifp en0 Ifa 10.0.0.10
+Add new[10]: Net 224.0.0.0/4 Ifp en1 Ifa 10.0.0.20 [SCOPED]
+Add new[11]: Net 224.0.0.0/4 Ifp fw0 Ifa 192.168.2.30 [SCOPED]
+Add new[12]: Net 255.255.255.255/32 Ifp en0 Ifa 10.0.0.10
+Add new[13]: Net 255.255.255.255/32 Ifp en1 Ifa 10.0.0.20 [SCOPED]
+Add new[14]: Net 255.255.255.255/32 Ifp fw0 Ifa 192.168.2.30 [SCOPED]
+New Routes ('test9') = <IPv4RouteList[15]> = {
  0. Net 0.0.0.0/0 Gate 10.0.0.1 Ifp en1 Ifa 10.0.0.20 [first]
  1. Net 0.0.0.0/0 Gate 10.0.0.1 Ifp en0 Ifa 10.0.0.10 [SCOPED]
  2. Net 0.0.0.0/0 Gate 192.168.2.1 Ifp fw0 Ifa 192.168.2.30 [SCOPED]
@@ -3626,6 +5190,12 @@ New Routes ('test9') = <IPv4RouteList[9]> = {
  6. Net 10.0.0.1/32 Ifp en0 Ifa 10.0.0.10 [SCOPED]
  7. Net 192.168.2.0/24 Ifp fw0 Ifa 192.168.2.30
  8. Net 192.168.2.1/32 Ifp fw0 Ifa 192.168.2.30
+ 9. Net 224.0.0.0/4 Ifp en1 Ifa 10.0.0.20 [first]
+10. Net 224.0.0.0/4 Ifp en0 Ifa 10.0.0.10 [SCOPED]
+11. Net 224.0.0.0/4 Ifp fw0 Ifa 192.168.2.30 [SCOPED]
+12. Net 255.255.255.255/32 Ifp en1 Ifa 10.0.0.20 [first]
+13. Net 255.255.255.255/32 Ifp en0 Ifa 10.0.0.10 [SCOPED]
+14. Net 255.255.255.255/32 Ifp fw0 Ifa 192.168.2.30 [SCOPED]
 }
 Remove old[0]: Net 0.0.0.0/0 Gate 10.0.0.1 Ifp en0 Ifa 10.0.0.10
 Remove old[1]: Net 0.0.0.0/0 Gate 10.0.0.1 Ifp en1 Ifa 10.0.0.20 [SCOPED]
@@ -3633,16 +5203,24 @@ Remove old[3]: Net 10.0.0.0/24 Ifp en0 Ifa 10.0.0.10
 Remove old[4]: Net 10.0.0.0/24 Ifp en1 Ifa 10.0.0.20 [SCOPED]
 Remove old[5]: Net 10.0.0.1/32 Ifp en0 Ifa 10.0.0.10
 Remove old[6]: Net 10.0.0.1/32 Ifp en1 Ifa 10.0.0.20 [SCOPED]
+Remove old[9]: Net 224.0.0.0/4 Ifp en0 Ifa 10.0.0.10
+Remove old[10]: Net 224.0.0.0/4 Ifp en1 Ifa 10.0.0.20 [SCOPED]
+Remove old[12]: Net 255.255.255.255/32 Ifp en0 Ifa 10.0.0.10
+Remove old[13]: Net 255.255.255.255/32 Ifp en1 Ifa 10.0.0.20 [SCOPED]
 Add new[5]: Net 10.0.0.1/32 Ifp en1 Ifa 10.0.0.20 [first]
 Add new[0]: Net 0.0.0.0/0 Gate 10.0.0.1 Ifp en1 Ifa 10.0.0.20 [first]
 Add new[6]: Net 10.0.0.1/32 Ifp en0 Ifa 10.0.0.10 [SCOPED]
 Add new[1]: Net 0.0.0.0/0 Gate 10.0.0.1 Ifp en0 Ifa 10.0.0.10 [SCOPED]
 Add new[3]: Net 10.0.0.0/24 Ifp en1 Ifa 10.0.0.20 [first]
 Add new[4]: Net 10.0.0.0/24 Ifp en0 Ifa 10.0.0.10 [SCOPED]
+Add new[9]: Net 224.0.0.0/4 Ifp en1 Ifa 10.0.0.20 [first]
+Add new[10]: Net 224.0.0.0/4 Ifp en0 Ifa 10.0.0.10 [SCOPED]
+Add new[12]: Net 255.255.255.255/32 Ifp en1 Ifa 10.0.0.20 [first]
+Add new[13]: Net 255.255.255.255/32 Ifp en0 Ifa 10.0.0.10 [SCOPED]
 =================> Apply 'test2', 'test9' End <=================
 
 =================> Apply 'test9', 'test2' Begin <=================
-Old routes ('test9') = <IPv4RouteList[9]> = {
+Old routes ('test9') = <IPv4RouteList[15]> = {
  0. Net 0.0.0.0/0 Gate 10.0.0.1 Ifp en1 Ifa 10.0.0.20 [first]
  1. Net 0.0.0.0/0 Gate 10.0.0.1 Ifp en0 Ifa 10.0.0.10 [SCOPED]
  2. Net 0.0.0.0/0 Gate 192.168.2.1 Ifp fw0 Ifa 192.168.2.30 [SCOPED]
@@ -3652,6 +5230,12 @@ Old routes ('test9') = <IPv4RouteList[9]> = {
  6. Net 10.0.0.1/32 Ifp en0 Ifa 10.0.0.10 [SCOPED]
  7. Net 192.168.2.0/24 Ifp fw0 Ifa 192.168.2.30
  8. Net 192.168.2.1/32 Ifp fw0 Ifa 192.168.2.30
+ 9. Net 224.0.0.0/4 Ifp en1 Ifa 10.0.0.20 [first]
+10. Net 224.0.0.0/4 Ifp en0 Ifa 10.0.0.10 [SCOPED]
+11. Net 224.0.0.0/4 Ifp fw0 Ifa 192.168.2.30 [SCOPED]
+12. Net 255.255.255.255/32 Ifp en1 Ifa 10.0.0.20 [first]
+13. Net 255.255.255.255/32 Ifp en0 Ifa 10.0.0.10 [SCOPED]
+14. Net 255.255.255.255/32 Ifp fw0 Ifa 192.168.2.30 [SCOPED]
 }
 Add new[5]: Net 10.0.0.1/32 Ifp en1 Ifa 10.0.0.20 [first]
 Add new[0]: Net 0.0.0.0/0 Gate 10.0.0.1 Ifp en1 Ifa 10.0.0.20 [first]
@@ -3662,7 +5246,13 @@ Add new[2]: Net 0.0.0.0/0 Gate 192.168.2.1 Ifp fw0 Ifa 192.168.2.30 [SCOPED]
 Add new[3]: Net 10.0.0.0/24 Ifp en1 Ifa 10.0.0.20 [first]
 Add new[4]: Net 10.0.0.0/24 Ifp en0 Ifa 10.0.0.10 [SCOPED]
 Add new[7]: Net 192.168.2.0/24 Ifp fw0 Ifa 192.168.2.30
-New Routes ('test2') = <IPv4RouteList[9]> = {
+Add new[9]: Net 224.0.0.0/4 Ifp en1 Ifa 10.0.0.20 [first]
+Add new[10]: Net 224.0.0.0/4 Ifp en0 Ifa 10.0.0.10 [SCOPED]
+Add new[11]: Net 224.0.0.0/4 Ifp fw0 Ifa 192.168.2.30 [SCOPED]
+Add new[12]: Net 255.255.255.255/32 Ifp en1 Ifa 10.0.0.20 [first]
+Add new[13]: Net 255.255.255.255/32 Ifp en0 Ifa 10.0.0.10 [SCOPED]
+Add new[14]: Net 255.255.255.255/32 Ifp fw0 Ifa 192.168.2.30 [SCOPED]
+New Routes ('test2') = <IPv4RouteList[15]> = {
  0. Net 0.0.0.0/0 Gate 10.0.0.1 Ifp en0 Ifa 10.0.0.10
  1. Net 0.0.0.0/0 Gate 10.0.0.1 Ifp en1 Ifa 10.0.0.20 [SCOPED]
  2. Net 0.0.0.0/0 Gate 192.168.2.1 Ifp fw0 Ifa 192.168.2.30 [SCOPED]
@@ -3672,6 +5262,12 @@ New Routes ('test2') = <IPv4RouteList[9]> = {
  6. Net 10.0.0.1/32 Ifp en1 Ifa 10.0.0.20 [SCOPED]
  7. Net 192.168.2.0/24 Ifp fw0 Ifa 192.168.2.30
  8. Net 192.168.2.1/32 Ifp fw0 Ifa 192.168.2.30
+ 9. Net 224.0.0.0/4 Ifp en0 Ifa 10.0.0.10
+10. Net 224.0.0.0/4 Ifp en1 Ifa 10.0.0.20 [SCOPED]
+11. Net 224.0.0.0/4 Ifp fw0 Ifa 192.168.2.30 [SCOPED]
+12. Net 255.255.255.255/32 Ifp en0 Ifa 10.0.0.10
+13. Net 255.255.255.255/32 Ifp en1 Ifa 10.0.0.20 [SCOPED]
+14. Net 255.255.255.255/32 Ifp fw0 Ifa 192.168.2.30 [SCOPED]
 }
 Remove old[0]: Net 0.0.0.0/0 Gate 10.0.0.1 Ifp en1 Ifa 10.0.0.20 [first]
 Remove old[1]: Net 0.0.0.0/0 Gate 10.0.0.1 Ifp en0 Ifa 10.0.0.10 [SCOPED]
@@ -3679,16 +5275,24 @@ Remove old[3]: Net 10.0.0.0/24 Ifp en1 Ifa 10.0.0.20 [first]
 Remove old[4]: Net 10.0.0.0/24 Ifp en0 Ifa 10.0.0.10 [SCOPED]
 Remove old[5]: Net 10.0.0.1/32 Ifp en1 Ifa 10.0.0.20 [first]
 Remove old[6]: Net 10.0.0.1/32 Ifp en0 Ifa 10.0.0.10 [SCOPED]
+Remove old[9]: Net 224.0.0.0/4 Ifp en1 Ifa 10.0.0.20 [first]
+Remove old[10]: Net 224.0.0.0/4 Ifp en0 Ifa 10.0.0.10 [SCOPED]
+Remove old[12]: Net 255.255.255.255/32 Ifp en1 Ifa 10.0.0.20 [first]
+Remove old[13]: Net 255.255.255.255/32 Ifp en0 Ifa 10.0.0.10 [SCOPED]
 Add new[5]: Net 10.0.0.1/32 Ifp en0 Ifa 10.0.0.10
 Add new[0]: Net 0.0.0.0/0 Gate 10.0.0.1 Ifp en0 Ifa 10.0.0.10
 Add new[6]: Net 10.0.0.1/32 Ifp en1 Ifa 10.0.0.20 [SCOPED]
 Add new[1]: Net 0.0.0.0/0 Gate 10.0.0.1 Ifp en1 Ifa 10.0.0.20 [SCOPED]
 Add new[3]: Net 10.0.0.0/24 Ifp en0 Ifa 10.0.0.10
 Add new[4]: Net 10.0.0.0/24 Ifp en1 Ifa 10.0.0.20 [SCOPED]
+Add new[9]: Net 224.0.0.0/4 Ifp en0 Ifa 10.0.0.10
+Add new[10]: Net 224.0.0.0/4 Ifp en1 Ifa 10.0.0.20 [SCOPED]
+Add new[12]: Net 255.255.255.255/32 Ifp en0 Ifa 10.0.0.10
+Add new[13]: Net 255.255.255.255/32 Ifp en1 Ifa 10.0.0.20 [SCOPED]
 =================> Apply 'test9', 'test2' End <=================
 
 =================> Apply 'test2', 'test10' Begin <=================
-Old routes ('test2') = <IPv4RouteList[9]> = {
+Old routes ('test2') = <IPv4RouteList[15]> = {
  0. Net 0.0.0.0/0 Gate 10.0.0.1 Ifp en0 Ifa 10.0.0.10
  1. Net 0.0.0.0/0 Gate 10.0.0.1 Ifp en1 Ifa 10.0.0.20 [SCOPED]
  2. Net 0.0.0.0/0 Gate 192.168.2.1 Ifp fw0 Ifa 192.168.2.30 [SCOPED]
@@ -3698,6 +5302,12 @@ Old routes ('test2') = <IPv4RouteList[9]> = {
  6. Net 10.0.0.1/32 Ifp en1 Ifa 10.0.0.20 [SCOPED]
  7. Net 192.168.2.0/24 Ifp fw0 Ifa 192.168.2.30
  8. Net 192.168.2.1/32 Ifp fw0 Ifa 192.168.2.30
+ 9. Net 224.0.0.0/4 Ifp en0 Ifa 10.0.0.10
+10. Net 224.0.0.0/4 Ifp en1 Ifa 10.0.0.20 [SCOPED]
+11. Net 224.0.0.0/4 Ifp fw0 Ifa 192.168.2.30 [SCOPED]
+12. Net 255.255.255.255/32 Ifp en0 Ifa 10.0.0.10
+13. Net 255.255.255.255/32 Ifp en1 Ifa 10.0.0.20 [SCOPED]
+14. Net 255.255.255.255/32 Ifp fw0 Ifa 192.168.2.30 [SCOPED]
 }
 Add new[5]: Net 10.0.0.1/32 Ifp en0 Ifa 10.0.0.10
 Add new[0]: Net 0.0.0.0/0 Gate 10.0.0.1 Ifp en0 Ifa 10.0.0.10
@@ -3708,7 +5318,13 @@ Add new[2]: Net 0.0.0.0/0 Gate 192.168.2.1 Ifp fw0 Ifa 192.168.2.30 [SCOPED]
 Add new[3]: Net 10.0.0.0/24 Ifp en0 Ifa 10.0.0.10
 Add new[4]: Net 10.0.0.0/24 Ifp en1 Ifa 10.0.0.20 [SCOPED]
 Add new[7]: Net 192.168.2.0/24 Ifp fw0 Ifa 192.168.2.30
-New Routes ('test10') = <IPv4RouteList[9]> = {
+Add new[9]: Net 224.0.0.0/4 Ifp en0 Ifa 10.0.0.10
+Add new[10]: Net 224.0.0.0/4 Ifp en1 Ifa 10.0.0.20 [SCOPED]
+Add new[11]: Net 224.0.0.0/4 Ifp fw0 Ifa 192.168.2.30 [SCOPED]
+Add new[12]: Net 255.255.255.255/32 Ifp en0 Ifa 10.0.0.10
+Add new[13]: Net 255.255.255.255/32 Ifp en1 Ifa 10.0.0.20 [SCOPED]
+Add new[14]: Net 255.255.255.255/32 Ifp fw0 Ifa 192.168.2.30 [SCOPED]
+New Routes ('test10') = <IPv4RouteList[15]> = {
  0. Net 0.0.0.0/0 Gate 10.0.0.1 Ifp en1 Ifa 10.0.0.20
  1. Net 0.0.0.0/0 Gate 192.168.2.1 Ifp fw0 Ifa 192.168.2.30 [SCOPED]
  2. Net 0.0.0.0/0 Gate 10.0.0.1 Ifp en0 Ifa 10.0.0.10 [last] [SCOPED]
@@ -3718,6 +5334,12 @@ New Routes ('test10') = <IPv4RouteList[9]> = {
  6. Net 10.0.0.1/32 Ifp en0 Ifa 10.0.0.10 [last] [SCOPED]
  7. Net 192.168.2.0/24 Ifp fw0 Ifa 192.168.2.30
  8. Net 192.168.2.1/32 Ifp fw0 Ifa 192.168.2.30
+ 9. Net 224.0.0.0/4 Ifp en1 Ifa 10.0.0.20
+10. Net 224.0.0.0/4 Ifp fw0 Ifa 192.168.2.30 [SCOPED]
+11. Net 224.0.0.0/4 Ifp en0 Ifa 10.0.0.10 [last] [SCOPED]
+12. Net 255.255.255.255/32 Ifp en1 Ifa 10.0.0.20
+13. Net 255.255.255.255/32 Ifp fw0 Ifa 192.168.2.30 [SCOPED]
+14. Net 255.255.255.255/32 Ifp en0 Ifa 10.0.0.10 [last] [SCOPED]
 }
 Remove old[0]: Net 0.0.0.0/0 Gate 10.0.0.1 Ifp en0 Ifa 10.0.0.10
 Remove old[1]: Net 0.0.0.0/0 Gate 10.0.0.1 Ifp en1 Ifa 10.0.0.20 [SCOPED]
@@ -3725,16 +5347,24 @@ Remove old[3]: Net 10.0.0.0/24 Ifp en0 Ifa 10.0.0.10
 Remove old[4]: Net 10.0.0.0/24 Ifp en1 Ifa 10.0.0.20 [SCOPED]
 Remove old[5]: Net 10.0.0.1/32 Ifp en0 Ifa 10.0.0.10
 Remove old[6]: Net 10.0.0.1/32 Ifp en1 Ifa 10.0.0.20 [SCOPED]
+Remove old[9]: Net 224.0.0.0/4 Ifp en0 Ifa 10.0.0.10
+Remove old[10]: Net 224.0.0.0/4 Ifp en1 Ifa 10.0.0.20 [SCOPED]
+Remove old[12]: Net 255.255.255.255/32 Ifp en0 Ifa 10.0.0.10
+Remove old[13]: Net 255.255.255.255/32 Ifp en1 Ifa 10.0.0.20 [SCOPED]
 Add new[5]: Net 10.0.0.1/32 Ifp en1 Ifa 10.0.0.20
 Add new[0]: Net 0.0.0.0/0 Gate 10.0.0.1 Ifp en1 Ifa 10.0.0.20
 Add new[6]: Net 10.0.0.1/32 Ifp en0 Ifa 10.0.0.10 [last] [SCOPED]
 Add new[2]: Net 0.0.0.0/0 Gate 10.0.0.1 Ifp en0 Ifa 10.0.0.10 [last] [SCOPED]
 Add new[3]: Net 10.0.0.0/24 Ifp en1 Ifa 10.0.0.20
 Add new[4]: Net 10.0.0.0/24 Ifp en0 Ifa 10.0.0.10 [last] [SCOPED]
+Add new[9]: Net 224.0.0.0/4 Ifp en1 Ifa 10.0.0.20
+Add new[11]: Net 224.0.0.0/4 Ifp en0 Ifa 10.0.0.10 [last] [SCOPED]
+Add new[12]: Net 255.255.255.255/32 Ifp en1 Ifa 10.0.0.20
+Add new[14]: Net 255.255.255.255/32 Ifp en0 Ifa 10.0.0.10 [last] [SCOPED]
 =================> Apply 'test2', 'test10' End <=================
 
 =================> Apply 'test10', 'test2' Begin <=================
-Old routes ('test10') = <IPv4RouteList[9]> = {
+Old routes ('test10') = <IPv4RouteList[15]> = {
  0. Net 0.0.0.0/0 Gate 10.0.0.1 Ifp en1 Ifa 10.0.0.20
  1. Net 0.0.0.0/0 Gate 192.168.2.1 Ifp fw0 Ifa 192.168.2.30 [SCOPED]
  2. Net 0.0.0.0/0 Gate 10.0.0.1 Ifp en0 Ifa 10.0.0.10 [last] [SCOPED]
@@ -3744,6 +5374,12 @@ Old routes ('test10') = <IPv4RouteList[9]> = {
  6. Net 10.0.0.1/32 Ifp en0 Ifa 10.0.0.10 [last] [SCOPED]
  7. Net 192.168.2.0/24 Ifp fw0 Ifa 192.168.2.30
  8. Net 192.168.2.1/32 Ifp fw0 Ifa 192.168.2.30
+ 9. Net 224.0.0.0/4 Ifp en1 Ifa 10.0.0.20
+10. Net 224.0.0.0/4 Ifp fw0 Ifa 192.168.2.30 [SCOPED]
+11. Net 224.0.0.0/4 Ifp en0 Ifa 10.0.0.10 [last] [SCOPED]
+12. Net 255.255.255.255/32 Ifp en1 Ifa 10.0.0.20
+13. Net 255.255.255.255/32 Ifp fw0 Ifa 192.168.2.30 [SCOPED]
+14. Net 255.255.255.255/32 Ifp en0 Ifa 10.0.0.10 [last] [SCOPED]
 }
 Add new[5]: Net 10.0.0.1/32 Ifp en1 Ifa 10.0.0.20
 Add new[0]: Net 0.0.0.0/0 Gate 10.0.0.1 Ifp en1 Ifa 10.0.0.20
@@ -3754,7 +5390,13 @@ Add new[2]: Net 0.0.0.0/0 Gate 10.0.0.1 Ifp en0 Ifa 10.0.0.10 [last] [SCOPED]
 Add new[3]: Net 10.0.0.0/24 Ifp en1 Ifa 10.0.0.20
 Add new[4]: Net 10.0.0.0/24 Ifp en0 Ifa 10.0.0.10 [last] [SCOPED]
 Add new[7]: Net 192.168.2.0/24 Ifp fw0 Ifa 192.168.2.30
-New Routes ('test2') = <IPv4RouteList[9]> = {
+Add new[9]: Net 224.0.0.0/4 Ifp en1 Ifa 10.0.0.20
+Add new[10]: Net 224.0.0.0/4 Ifp fw0 Ifa 192.168.2.30 [SCOPED]
+Add new[11]: Net 224.0.0.0/4 Ifp en0 Ifa 10.0.0.10 [last] [SCOPED]
+Add new[12]: Net 255.255.255.255/32 Ifp en1 Ifa 10.0.0.20
+Add new[13]: Net 255.255.255.255/32 Ifp fw0 Ifa 192.168.2.30 [SCOPED]
+Add new[14]: Net 255.255.255.255/32 Ifp en0 Ifa 10.0.0.10 [last] [SCOPED]
+New Routes ('test2') = <IPv4RouteList[15]> = {
  0. Net 0.0.0.0/0 Gate 10.0.0.1 Ifp en0 Ifa 10.0.0.10
  1. Net 0.0.0.0/0 Gate 10.0.0.1 Ifp en1 Ifa 10.0.0.20 [SCOPED]
  2. Net 0.0.0.0/0 Gate 192.168.2.1 Ifp fw0 Ifa 192.168.2.30 [SCOPED]
@@ -3764,6 +5406,12 @@ New Routes ('test2') = <IPv4RouteList[9]> = {
  6. Net 10.0.0.1/32 Ifp en1 Ifa 10.0.0.20 [SCOPED]
  7. Net 192.168.2.0/24 Ifp fw0 Ifa 192.168.2.30
  8. Net 192.168.2.1/32 Ifp fw0 Ifa 192.168.2.30
+ 9. Net 224.0.0.0/4 Ifp en0 Ifa 10.0.0.10
+10. Net 224.0.0.0/4 Ifp en1 Ifa 10.0.0.20 [SCOPED]
+11. Net 224.0.0.0/4 Ifp fw0 Ifa 192.168.2.30 [SCOPED]
+12. Net 255.255.255.255/32 Ifp en0 Ifa 10.0.0.10
+13. Net 255.255.255.255/32 Ifp en1 Ifa 10.0.0.20 [SCOPED]
+14. Net 255.255.255.255/32 Ifp fw0 Ifa 192.168.2.30 [SCOPED]
 }
 Remove old[0]: Net 0.0.0.0/0 Gate 10.0.0.1 Ifp en1 Ifa 10.0.0.20
 Remove old[2]: Net 0.0.0.0/0 Gate 10.0.0.1 Ifp en0 Ifa 10.0.0.10 [last] [SCOPED]
@@ -3771,16 +5419,24 @@ Remove old[3]: Net 10.0.0.0/24 Ifp en1 Ifa 10.0.0.20
 Remove old[4]: Net 10.0.0.0/24 Ifp en0 Ifa 10.0.0.10 [last] [SCOPED]
 Remove old[5]: Net 10.0.0.1/32 Ifp en1 Ifa 10.0.0.20
 Remove old[6]: Net 10.0.0.1/32 Ifp en0 Ifa 10.0.0.10 [last] [SCOPED]
+Remove old[9]: Net 224.0.0.0/4 Ifp en1 Ifa 10.0.0.20
+Remove old[11]: Net 224.0.0.0/4 Ifp en0 Ifa 10.0.0.10 [last] [SCOPED]
+Remove old[12]: Net 255.255.255.255/32 Ifp en1 Ifa 10.0.0.20
+Remove old[14]: Net 255.255.255.255/32 Ifp en0 Ifa 10.0.0.10 [last] [SCOPED]
 Add new[5]: Net 10.0.0.1/32 Ifp en0 Ifa 10.0.0.10
 Add new[0]: Net 0.0.0.0/0 Gate 10.0.0.1 Ifp en0 Ifa 10.0.0.10
 Add new[6]: Net 10.0.0.1/32 Ifp en1 Ifa 10.0.0.20 [SCOPED]
 Add new[1]: Net 0.0.0.0/0 Gate 10.0.0.1 Ifp en1 Ifa 10.0.0.20 [SCOPED]
 Add new[3]: Net 10.0.0.0/24 Ifp en0 Ifa 10.0.0.10
 Add new[4]: Net 10.0.0.0/24 Ifp en1 Ifa 10.0.0.20 [SCOPED]
+Add new[9]: Net 224.0.0.0/4 Ifp en0 Ifa 10.0.0.10
+Add new[10]: Net 224.0.0.0/4 Ifp en1 Ifa 10.0.0.20 [SCOPED]
+Add new[12]: Net 255.255.255.255/32 Ifp en0 Ifa 10.0.0.10
+Add new[13]: Net 255.255.255.255/32 Ifp en1 Ifa 10.0.0.20 [SCOPED]
 =================> Apply 'test10', 'test2' End <=================
 
 =================> Apply 'test2', 'test11' Begin <=================
-Old routes ('test2') = <IPv4RouteList[9]> = {
+Old routes ('test2') = <IPv4RouteList[15]> = {
  0. Net 0.0.0.0/0 Gate 10.0.0.1 Ifp en0 Ifa 10.0.0.10
  1. Net 0.0.0.0/0 Gate 10.0.0.1 Ifp en1 Ifa 10.0.0.20 [SCOPED]
  2. Net 0.0.0.0/0 Gate 192.168.2.1 Ifp fw0 Ifa 192.168.2.30 [SCOPED]
@@ -3790,6 +5446,12 @@ Old routes ('test2') = <IPv4RouteList[9]> = {
  6. Net 10.0.0.1/32 Ifp en1 Ifa 10.0.0.20 [SCOPED]
  7. Net 192.168.2.0/24 Ifp fw0 Ifa 192.168.2.30
  8. Net 192.168.2.1/32 Ifp fw0 Ifa 192.168.2.30
+ 9. Net 224.0.0.0/4 Ifp en0 Ifa 10.0.0.10
+10. Net 224.0.0.0/4 Ifp en1 Ifa 10.0.0.20 [SCOPED]
+11. Net 224.0.0.0/4 Ifp fw0 Ifa 192.168.2.30 [SCOPED]
+12. Net 255.255.255.255/32 Ifp en0 Ifa 10.0.0.10
+13. Net 255.255.255.255/32 Ifp en1 Ifa 10.0.0.20 [SCOPED]
+14. Net 255.255.255.255/32 Ifp fw0 Ifa 192.168.2.30 [SCOPED]
 }
 Add new[5]: Net 10.0.0.1/32 Ifp en0 Ifa 10.0.0.10
 Add new[0]: Net 0.0.0.0/0 Gate 10.0.0.1 Ifp en0 Ifa 10.0.0.10
@@ -3800,7 +5462,13 @@ Add new[2]: Net 0.0.0.0/0 Gate 192.168.2.1 Ifp fw0 Ifa 192.168.2.30 [SCOPED]
 Add new[3]: Net 10.0.0.0/24 Ifp en0 Ifa 10.0.0.10
 Add new[4]: Net 10.0.0.0/24 Ifp en1 Ifa 10.0.0.20 [SCOPED]
 Add new[7]: Net 192.168.2.0/24 Ifp fw0 Ifa 192.168.2.30
-New Routes ('test11') = <IPv4RouteList[9]> = {
+Add new[9]: Net 224.0.0.0/4 Ifp en0 Ifa 10.0.0.10
+Add new[10]: Net 224.0.0.0/4 Ifp en1 Ifa 10.0.0.20 [SCOPED]
+Add new[11]: Net 224.0.0.0/4 Ifp fw0 Ifa 192.168.2.30 [SCOPED]
+Add new[12]: Net 255.255.255.255/32 Ifp en0 Ifa 10.0.0.10
+Add new[13]: Net 255.255.255.255/32 Ifp en1 Ifa 10.0.0.20 [SCOPED]
+Add new[14]: Net 255.255.255.255/32 Ifp fw0 Ifa 192.168.2.30 [SCOPED]
+New Routes ('test11') = <IPv4RouteList[15]> = {
  0. Net 0.0.0.0/0 Gate 10.0.0.1 Ifp en1 Ifa 10.0.0.20
  1. Net 0.0.0.0/0 Gate 192.168.2.1 Ifp fw0 Ifa 192.168.2.30 [SCOPED]
  2. Net 0.0.0.0/0 Gate 10.0.0.1 Ifp en0 Ifa 10.0.0.10 [never] [SCOPED]
@@ -3810,6 +5478,12 @@ New Routes ('test11') = <IPv4RouteList[9]> = {
  6. Net 10.0.0.1/32 Ifp en0 Ifa 10.0.0.10 [last] [SCOPED]
  7. Net 192.168.2.0/24 Ifp fw0 Ifa 192.168.2.30
  8. Net 192.168.2.1/32 Ifp fw0 Ifa 192.168.2.30
+ 9. Net 224.0.0.0/4 Ifp en1 Ifa 10.0.0.20
+10. Net 224.0.0.0/4 Ifp fw0 Ifa 192.168.2.30 [SCOPED]
+11. Net 224.0.0.0/4 Ifp en0 Ifa 10.0.0.10 [last] [SCOPED]
+12. Net 255.255.255.255/32 Ifp en1 Ifa 10.0.0.20
+13. Net 255.255.255.255/32 Ifp fw0 Ifa 192.168.2.30 [SCOPED]
+14. Net 255.255.255.255/32 Ifp en0 Ifa 10.0.0.10 [last] [SCOPED]
 }
 Remove old[0]: Net 0.0.0.0/0 Gate 10.0.0.1 Ifp en0 Ifa 10.0.0.10
 Remove old[1]: Net 0.0.0.0/0 Gate 10.0.0.1 Ifp en1 Ifa 10.0.0.20 [SCOPED]
@@ -3817,16 +5491,24 @@ Remove old[3]: Net 10.0.0.0/24 Ifp en0 Ifa 10.0.0.10
 Remove old[4]: Net 10.0.0.0/24 Ifp en1 Ifa 10.0.0.20 [SCOPED]
 Remove old[5]: Net 10.0.0.1/32 Ifp en0 Ifa 10.0.0.10
 Remove old[6]: Net 10.0.0.1/32 Ifp en1 Ifa 10.0.0.20 [SCOPED]
+Remove old[9]: Net 224.0.0.0/4 Ifp en0 Ifa 10.0.0.10
+Remove old[10]: Net 224.0.0.0/4 Ifp en1 Ifa 10.0.0.20 [SCOPED]
+Remove old[12]: Net 255.255.255.255/32 Ifp en0 Ifa 10.0.0.10
+Remove old[13]: Net 255.255.255.255/32 Ifp en1 Ifa 10.0.0.20 [SCOPED]
 Add new[5]: Net 10.0.0.1/32 Ifp en1 Ifa 10.0.0.20
 Add new[0]: Net 0.0.0.0/0 Gate 10.0.0.1 Ifp en1 Ifa 10.0.0.20
 Add new[6]: Net 10.0.0.1/32 Ifp en0 Ifa 10.0.0.10 [last] [SCOPED]
 Add new[2]: Net 0.0.0.0/0 Gate 10.0.0.1 Ifp en0 Ifa 10.0.0.10 [never] [SCOPED]
 Add new[3]: Net 10.0.0.0/24 Ifp en1 Ifa 10.0.0.20
 Add new[4]: Net 10.0.0.0/24 Ifp en0 Ifa 10.0.0.10 [last] [SCOPED]
+Add new[9]: Net 224.0.0.0/4 Ifp en1 Ifa 10.0.0.20
+Add new[11]: Net 224.0.0.0/4 Ifp en0 Ifa 10.0.0.10 [last] [SCOPED]
+Add new[12]: Net 255.255.255.255/32 Ifp en1 Ifa 10.0.0.20
+Add new[14]: Net 255.255.255.255/32 Ifp en0 Ifa 10.0.0.10 [last] [SCOPED]
 =================> Apply 'test2', 'test11' End <=================
 
 =================> Apply 'test11', 'test2' Begin <=================
-Old routes ('test11') = <IPv4RouteList[9]> = {
+Old routes ('test11') = <IPv4RouteList[15]> = {
  0. Net 0.0.0.0/0 Gate 10.0.0.1 Ifp en1 Ifa 10.0.0.20
  1. Net 0.0.0.0/0 Gate 192.168.2.1 Ifp fw0 Ifa 192.168.2.30 [SCOPED]
  2. Net 0.0.0.0/0 Gate 10.0.0.1 Ifp en0 Ifa 10.0.0.10 [never] [SCOPED]
@@ -3836,6 +5518,12 @@ Old routes ('test11') = <IPv4RouteList[9]> = {
  6. Net 10.0.0.1/32 Ifp en0 Ifa 10.0.0.10 [last] [SCOPED]
  7. Net 192.168.2.0/24 Ifp fw0 Ifa 192.168.2.30
  8. Net 192.168.2.1/32 Ifp fw0 Ifa 192.168.2.30
+ 9. Net 224.0.0.0/4 Ifp en1 Ifa 10.0.0.20
+10. Net 224.0.0.0/4 Ifp fw0 Ifa 192.168.2.30 [SCOPED]
+11. Net 224.0.0.0/4 Ifp en0 Ifa 10.0.0.10 [last] [SCOPED]
+12. Net 255.255.255.255/32 Ifp en1 Ifa 10.0.0.20
+13. Net 255.255.255.255/32 Ifp fw0 Ifa 192.168.2.30 [SCOPED]
+14. Net 255.255.255.255/32 Ifp en0 Ifa 10.0.0.10 [last] [SCOPED]
 }
 Add new[5]: Net 10.0.0.1/32 Ifp en1 Ifa 10.0.0.20
 Add new[0]: Net 0.0.0.0/0 Gate 10.0.0.1 Ifp en1 Ifa 10.0.0.20
@@ -3846,7 +5534,13 @@ Add new[2]: Net 0.0.0.0/0 Gate 10.0.0.1 Ifp en0 Ifa 10.0.0.10 [never] [SCOPED]
 Add new[3]: Net 10.0.0.0/24 Ifp en1 Ifa 10.0.0.20
 Add new[4]: Net 10.0.0.0/24 Ifp en0 Ifa 10.0.0.10 [last] [SCOPED]
 Add new[7]: Net 192.168.2.0/24 Ifp fw0 Ifa 192.168.2.30
-New Routes ('test2') = <IPv4RouteList[9]> = {
+Add new[9]: Net 224.0.0.0/4 Ifp en1 Ifa 10.0.0.20
+Add new[10]: Net 224.0.0.0/4 Ifp fw0 Ifa 192.168.2.30 [SCOPED]
+Add new[11]: Net 224.0.0.0/4 Ifp en0 Ifa 10.0.0.10 [last] [SCOPED]
+Add new[12]: Net 255.255.255.255/32 Ifp en1 Ifa 10.0.0.20
+Add new[13]: Net 255.255.255.255/32 Ifp fw0 Ifa 192.168.2.30 [SCOPED]
+Add new[14]: Net 255.255.255.255/32 Ifp en0 Ifa 10.0.0.10 [last] [SCOPED]
+New Routes ('test2') = <IPv4RouteList[15]> = {
  0. Net 0.0.0.0/0 Gate 10.0.0.1 Ifp en0 Ifa 10.0.0.10
  1. Net 0.0.0.0/0 Gate 10.0.0.1 Ifp en1 Ifa 10.0.0.20 [SCOPED]
  2. Net 0.0.0.0/0 Gate 192.168.2.1 Ifp fw0 Ifa 192.168.2.30 [SCOPED]
@@ -3856,6 +5550,12 @@ New Routes ('test2') = <IPv4RouteList[9]> = {
  6. Net 10.0.0.1/32 Ifp en1 Ifa 10.0.0.20 [SCOPED]
  7. Net 192.168.2.0/24 Ifp fw0 Ifa 192.168.2.30
  8. Net 192.168.2.1/32 Ifp fw0 Ifa 192.168.2.30
+ 9. Net 224.0.0.0/4 Ifp en0 Ifa 10.0.0.10
+10. Net 224.0.0.0/4 Ifp en1 Ifa 10.0.0.20 [SCOPED]
+11. Net 224.0.0.0/4 Ifp fw0 Ifa 192.168.2.30 [SCOPED]
+12. Net 255.255.255.255/32 Ifp en0 Ifa 10.0.0.10
+13. Net 255.255.255.255/32 Ifp en1 Ifa 10.0.0.20 [SCOPED]
+14. Net 255.255.255.255/32 Ifp fw0 Ifa 192.168.2.30 [SCOPED]
 }
 Remove old[0]: Net 0.0.0.0/0 Gate 10.0.0.1 Ifp en1 Ifa 10.0.0.20
 Remove old[2]: Net 0.0.0.0/0 Gate 10.0.0.1 Ifp en0 Ifa 10.0.0.10 [never] [SCOPED]
@@ -3863,16 +5563,24 @@ Remove old[3]: Net 10.0.0.0/24 Ifp en1 Ifa 10.0.0.20
 Remove old[4]: Net 10.0.0.0/24 Ifp en0 Ifa 10.0.0.10 [last] [SCOPED]
 Remove old[5]: Net 10.0.0.1/32 Ifp en1 Ifa 10.0.0.20
 Remove old[6]: Net 10.0.0.1/32 Ifp en0 Ifa 10.0.0.10 [last] [SCOPED]
+Remove old[9]: Net 224.0.0.0/4 Ifp en1 Ifa 10.0.0.20
+Remove old[11]: Net 224.0.0.0/4 Ifp en0 Ifa 10.0.0.10 [last] [SCOPED]
+Remove old[12]: Net 255.255.255.255/32 Ifp en1 Ifa 10.0.0.20
+Remove old[14]: Net 255.255.255.255/32 Ifp en0 Ifa 10.0.0.10 [last] [SCOPED]
 Add new[5]: Net 10.0.0.1/32 Ifp en0 Ifa 10.0.0.10
 Add new[0]: Net 0.0.0.0/0 Gate 10.0.0.1 Ifp en0 Ifa 10.0.0.10
 Add new[6]: Net 10.0.0.1/32 Ifp en1 Ifa 10.0.0.20 [SCOPED]
 Add new[1]: Net 0.0.0.0/0 Gate 10.0.0.1 Ifp en1 Ifa 10.0.0.20 [SCOPED]
 Add new[3]: Net 10.0.0.0/24 Ifp en0 Ifa 10.0.0.10
 Add new[4]: Net 10.0.0.0/24 Ifp en1 Ifa 10.0.0.20 [SCOPED]
+Add new[9]: Net 224.0.0.0/4 Ifp en0 Ifa 10.0.0.10
+Add new[10]: Net 224.0.0.0/4 Ifp en1 Ifa 10.0.0.20 [SCOPED]
+Add new[12]: Net 255.255.255.255/32 Ifp en0 Ifa 10.0.0.10
+Add new[13]: Net 255.255.255.255/32 Ifp en1 Ifa 10.0.0.20 [SCOPED]
 =================> Apply 'test11', 'test2' End <=================
 
 =================> Apply 'test2', 'test12' Begin <=================
-Old routes ('test2') = <IPv4RouteList[9]> = {
+Old routes ('test2') = <IPv4RouteList[15]> = {
  0. Net 0.0.0.0/0 Gate 10.0.0.1 Ifp en0 Ifa 10.0.0.10
  1. Net 0.0.0.0/0 Gate 10.0.0.1 Ifp en1 Ifa 10.0.0.20 [SCOPED]
  2. Net 0.0.0.0/0 Gate 192.168.2.1 Ifp fw0 Ifa 192.168.2.30 [SCOPED]
@@ -3882,6 +5590,12 @@ Old routes ('test2') = <IPv4RouteList[9]> = {
  6. Net 10.0.0.1/32 Ifp en1 Ifa 10.0.0.20 [SCOPED]
  7. Net 192.168.2.0/24 Ifp fw0 Ifa 192.168.2.30
  8. Net 192.168.2.1/32 Ifp fw0 Ifa 192.168.2.30
+ 9. Net 224.0.0.0/4 Ifp en0 Ifa 10.0.0.10
+10. Net 224.0.0.0/4 Ifp en1 Ifa 10.0.0.20 [SCOPED]
+11. Net 224.0.0.0/4 Ifp fw0 Ifa 192.168.2.30 [SCOPED]
+12. Net 255.255.255.255/32 Ifp en0 Ifa 10.0.0.10
+13. Net 255.255.255.255/32 Ifp en1 Ifa 10.0.0.20 [SCOPED]
+14. Net 255.255.255.255/32 Ifp fw0 Ifa 192.168.2.30 [SCOPED]
 }
 Add new[5]: Net 10.0.0.1/32 Ifp en0 Ifa 10.0.0.10
 Add new[0]: Net 0.0.0.0/0 Gate 10.0.0.1 Ifp en0 Ifa 10.0.0.10
@@ -3892,27 +5606,43 @@ Add new[2]: Net 0.0.0.0/0 Gate 192.168.2.1 Ifp fw0 Ifa 192.168.2.30 [SCOPED]
 Add new[3]: Net 10.0.0.0/24 Ifp en0 Ifa 10.0.0.10
 Add new[4]: Net 10.0.0.0/24 Ifp en1 Ifa 10.0.0.20 [SCOPED]
 Add new[7]: Net 192.168.2.0/24 Ifp fw0 Ifa 192.168.2.30
-New Routes ('test12') = <IPv4RouteList[6]> = {
+Add new[9]: Net 224.0.0.0/4 Ifp en0 Ifa 10.0.0.10
+Add new[10]: Net 224.0.0.0/4 Ifp en1 Ifa 10.0.0.20 [SCOPED]
+Add new[11]: Net 224.0.0.0/4 Ifp fw0 Ifa 192.168.2.30 [SCOPED]
+Add new[12]: Net 255.255.255.255/32 Ifp en0 Ifa 10.0.0.10
+Add new[13]: Net 255.255.255.255/32 Ifp en1 Ifa 10.0.0.20 [SCOPED]
+Add new[14]: Net 255.255.255.255/32 Ifp fw0 Ifa 192.168.2.30 [SCOPED]
+New Routes ('test12') = <IPv4RouteList[10]> = {
  0. Net 0.0.0.0/0 Gate 10.0.0.1 Ifp en0 Ifa 10.0.0.10
  1. Net 0.0.0.0/0 Gate 10.0.0.1 Ifp en1 Ifa 10.0.0.20 [SCOPED]
  2. Net 10.0.0.0/24 Ifp en0 Ifa 10.0.0.10
  3. Net 10.0.0.0/24 Ifp en1 Ifa 10.0.0.20 [SCOPED]
  4. Net 10.0.0.1/32 Ifp en0 Ifa 10.0.0.10
  5. Net 10.0.0.1/32 Ifp en1 Ifa 10.0.0.20 [SCOPED]
+ 6. Net 224.0.0.0/4 Ifp en0 Ifa 10.0.0.10
+ 7. Net 224.0.0.0/4 Ifp en1 Ifa 10.0.0.20 [SCOPED]
+ 8. Net 255.255.255.255/32 Ifp en0 Ifa 10.0.0.10
+ 9. Net 255.255.255.255/32 Ifp en1 Ifa 10.0.0.20 [SCOPED]
 }
 Remove old[2]: Net 0.0.0.0/0 Gate 192.168.2.1 Ifp fw0 Ifa 192.168.2.30 [SCOPED]
 Remove old[7]: Net 192.168.2.0/24 Ifp fw0 Ifa 192.168.2.30
 Remove old[8]: Net 192.168.2.1/32 Ifp fw0 Ifa 192.168.2.30
+Remove old[11]: Net 224.0.0.0/4 Ifp fw0 Ifa 192.168.2.30 [SCOPED]
+Remove old[14]: Net 255.255.255.255/32 Ifp fw0 Ifa 192.168.2.30 [SCOPED]
 =================> Apply 'test2', 'test12' End <=================
 
 =================> Apply 'test12', 'test2' Begin <=================
-Old routes ('test12') = <IPv4RouteList[6]> = {
+Old routes ('test12') = <IPv4RouteList[10]> = {
  0. Net 0.0.0.0/0 Gate 10.0.0.1 Ifp en0 Ifa 10.0.0.10
  1. Net 0.0.0.0/0 Gate 10.0.0.1 Ifp en1 Ifa 10.0.0.20 [SCOPED]
  2. Net 10.0.0.0/24 Ifp en0 Ifa 10.0.0.10
  3. Net 10.0.0.0/24 Ifp en1 Ifa 10.0.0.20 [SCOPED]
  4. Net 10.0.0.1/32 Ifp en0 Ifa 10.0.0.10
  5. Net 10.0.0.1/32 Ifp en1 Ifa 10.0.0.20 [SCOPED]
+ 6. Net 224.0.0.0/4 Ifp en0 Ifa 10.0.0.10
+ 7. Net 224.0.0.0/4 Ifp en1 Ifa 10.0.0.20 [SCOPED]
+ 8. Net 255.255.255.255/32 Ifp en0 Ifa 10.0.0.10
+ 9. Net 255.255.255.255/32 Ifp en1 Ifa 10.0.0.20 [SCOPED]
 }
 Add new[4]: Net 10.0.0.1/32 Ifp en0 Ifa 10.0.0.10
 Add new[0]: Net 0.0.0.0/0 Gate 10.0.0.1 Ifp en0 Ifa 10.0.0.10
@@ -3920,7 +5650,11 @@ Add new[5]: Net 10.0.0.1/32 Ifp en1 Ifa 10.0.0.20 [SCOPED]
 Add new[1]: Net 0.0.0.0/0 Gate 10.0.0.1 Ifp en1 Ifa 10.0.0.20 [SCOPED]
 Add new[2]: Net 10.0.0.0/24 Ifp en0 Ifa 10.0.0.10
 Add new[3]: Net 10.0.0.0/24 Ifp en1 Ifa 10.0.0.20 [SCOPED]
-New Routes ('test2') = <IPv4RouteList[9]> = {
+Add new[6]: Net 224.0.0.0/4 Ifp en0 Ifa 10.0.0.10
+Add new[7]: Net 224.0.0.0/4 Ifp en1 Ifa 10.0.0.20 [SCOPED]
+Add new[8]: Net 255.255.255.255/32 Ifp en0 Ifa 10.0.0.10
+Add new[9]: Net 255.255.255.255/32 Ifp en1 Ifa 10.0.0.20 [SCOPED]
+New Routes ('test2') = <IPv4RouteList[15]> = {
  0. Net 0.0.0.0/0 Gate 10.0.0.1 Ifp en0 Ifa 10.0.0.10
  1. Net 0.0.0.0/0 Gate 10.0.0.1 Ifp en1 Ifa 10.0.0.20 [SCOPED]
  2. Net 0.0.0.0/0 Gate 192.168.2.1 Ifp fw0 Ifa 192.168.2.30 [SCOPED]
@@ -3930,14 +5664,22 @@ New Routes ('test2') = <IPv4RouteList[9]> = {
  6. Net 10.0.0.1/32 Ifp en1 Ifa 10.0.0.20 [SCOPED]
  7. Net 192.168.2.0/24 Ifp fw0 Ifa 192.168.2.30
  8. Net 192.168.2.1/32 Ifp fw0 Ifa 192.168.2.30
+ 9. Net 224.0.0.0/4 Ifp en0 Ifa 10.0.0.10
+10. Net 224.0.0.0/4 Ifp en1 Ifa 10.0.0.20 [SCOPED]
+11. Net 224.0.0.0/4 Ifp fw0 Ifa 192.168.2.30 [SCOPED]
+12. Net 255.255.255.255/32 Ifp en0 Ifa 10.0.0.10
+13. Net 255.255.255.255/32 Ifp en1 Ifa 10.0.0.20 [SCOPED]
+14. Net 255.255.255.255/32 Ifp fw0 Ifa 192.168.2.30 [SCOPED]
 }
 Add new[8]: Net 192.168.2.1/32 Ifp fw0 Ifa 192.168.2.30
 Add new[2]: Net 0.0.0.0/0 Gate 192.168.2.1 Ifp fw0 Ifa 192.168.2.30 [SCOPED]
 Add new[7]: Net 192.168.2.0/24 Ifp fw0 Ifa 192.168.2.30
+Add new[11]: Net 224.0.0.0/4 Ifp fw0 Ifa 192.168.2.30 [SCOPED]
+Add new[14]: Net 255.255.255.255/32 Ifp fw0 Ifa 192.168.2.30 [SCOPED]
 =================> Apply 'test12', 'test2' End <=================
 
 =================> Apply 'test2', 'test13' Begin <=================
-Old routes ('test2') = <IPv4RouteList[9]> = {
+Old routes ('test2') = <IPv4RouteList[15]> = {
  0. Net 0.0.0.0/0 Gate 10.0.0.1 Ifp en0 Ifa 10.0.0.10
  1. Net 0.0.0.0/0 Gate 10.0.0.1 Ifp en1 Ifa 10.0.0.20 [SCOPED]
  2. Net 0.0.0.0/0 Gate 192.168.2.1 Ifp fw0 Ifa 192.168.2.30 [SCOPED]
@@ -3947,6 +5689,12 @@ Old routes ('test2') = <IPv4RouteList[9]> = {
  6. Net 10.0.0.1/32 Ifp en1 Ifa 10.0.0.20 [SCOPED]
  7. Net 192.168.2.0/24 Ifp fw0 Ifa 192.168.2.30
  8. Net 192.168.2.1/32 Ifp fw0 Ifa 192.168.2.30
+ 9. Net 224.0.0.0/4 Ifp en0 Ifa 10.0.0.10
+10. Net 224.0.0.0/4 Ifp en1 Ifa 10.0.0.20 [SCOPED]
+11. Net 224.0.0.0/4 Ifp fw0 Ifa 192.168.2.30 [SCOPED]
+12. Net 255.255.255.255/32 Ifp en0 Ifa 10.0.0.10
+13. Net 255.255.255.255/32 Ifp en1 Ifa 10.0.0.20 [SCOPED]
+14. Net 255.255.255.255/32 Ifp fw0 Ifa 192.168.2.30 [SCOPED]
 }
 Add new[5]: Net 10.0.0.1/32 Ifp en0 Ifa 10.0.0.10
 Add new[0]: Net 0.0.0.0/0 Gate 10.0.0.1 Ifp en0 Ifa 10.0.0.10
@@ -3957,27 +5705,43 @@ Add new[2]: Net 0.0.0.0/0 Gate 192.168.2.1 Ifp fw0 Ifa 192.168.2.30 [SCOPED]
 Add new[3]: Net 10.0.0.0/24 Ifp en0 Ifa 10.0.0.10
 Add new[4]: Net 10.0.0.0/24 Ifp en1 Ifa 10.0.0.20 [SCOPED]
 Add new[7]: Net 192.168.2.0/24 Ifp fw0 Ifa 192.168.2.30
-New Routes ('test13') = <IPv4RouteList[6]> = {
+Add new[9]: Net 224.0.0.0/4 Ifp en0 Ifa 10.0.0.10
+Add new[10]: Net 224.0.0.0/4 Ifp en1 Ifa 10.0.0.20 [SCOPED]
+Add new[11]: Net 224.0.0.0/4 Ifp fw0 Ifa 192.168.2.30 [SCOPED]
+Add new[12]: Net 255.255.255.255/32 Ifp en0 Ifa 10.0.0.10
+Add new[13]: Net 255.255.255.255/32 Ifp en1 Ifa 10.0.0.20 [SCOPED]
+Add new[14]: Net 255.255.255.255/32 Ifp fw0 Ifa 192.168.2.30 [SCOPED]
+New Routes ('test13') = <IPv4RouteList[10]> = {
  0. Net 0.0.0.0/0 Gate 10.0.0.1 Ifp en0 Ifa 10.0.0.10
  1. Net 0.0.0.0/0 Gate 10.0.0.1 Ifp en1 Ifa 10.0.0.20 [never] [SCOPED]
  2. Net 10.0.0.0/24 Ifp en0 Ifa 10.0.0.10
  3. Net 10.0.0.0/24 Ifp en1 Ifa 10.0.0.20 [last] [SCOPED]
  4. Net 10.0.0.1/32 Ifp en0 Ifa 10.0.0.10
  5. Net 10.0.0.1/32 Ifp en1 Ifa 10.0.0.20 [last] [SCOPED]
+ 6. Net 224.0.0.0/4 Ifp en0 Ifa 10.0.0.10
+ 7. Net 224.0.0.0/4 Ifp en1 Ifa 10.0.0.20 [last] [SCOPED]
+ 8. Net 255.255.255.255/32 Ifp en0 Ifa 10.0.0.10
+ 9. Net 255.255.255.255/32 Ifp en1 Ifa 10.0.0.20 [last] [SCOPED]
 }
 Remove old[2]: Net 0.0.0.0/0 Gate 192.168.2.1 Ifp fw0 Ifa 192.168.2.30 [SCOPED]
 Remove old[7]: Net 192.168.2.0/24 Ifp fw0 Ifa 192.168.2.30
 Remove old[8]: Net 192.168.2.1/32 Ifp fw0 Ifa 192.168.2.30
+Remove old[11]: Net 224.0.0.0/4 Ifp fw0 Ifa 192.168.2.30 [SCOPED]
+Remove old[14]: Net 255.255.255.255/32 Ifp fw0 Ifa 192.168.2.30 [SCOPED]
 =================> Apply 'test2', 'test13' End <=================
 
 =================> Apply 'test13', 'test2' Begin <=================
-Old routes ('test13') = <IPv4RouteList[6]> = {
+Old routes ('test13') = <IPv4RouteList[10]> = {
  0. Net 0.0.0.0/0 Gate 10.0.0.1 Ifp en0 Ifa 10.0.0.10
  1. Net 0.0.0.0/0 Gate 10.0.0.1 Ifp en1 Ifa 10.0.0.20 [never] [SCOPED]
  2. Net 10.0.0.0/24 Ifp en0 Ifa 10.0.0.10
  3. Net 10.0.0.0/24 Ifp en1 Ifa 10.0.0.20 [last] [SCOPED]
  4. Net 10.0.0.1/32 Ifp en0 Ifa 10.0.0.10
  5. Net 10.0.0.1/32 Ifp en1 Ifa 10.0.0.20 [last] [SCOPED]
+ 6. Net 224.0.0.0/4 Ifp en0 Ifa 10.0.0.10
+ 7. Net 224.0.0.0/4 Ifp en1 Ifa 10.0.0.20 [last] [SCOPED]
+ 8. Net 255.255.255.255/32 Ifp en0 Ifa 10.0.0.10
+ 9. Net 255.255.255.255/32 Ifp en1 Ifa 10.0.0.20 [last] [SCOPED]
 }
 Add new[4]: Net 10.0.0.1/32 Ifp en0 Ifa 10.0.0.10
 Add new[0]: Net 0.0.0.0/0 Gate 10.0.0.1 Ifp en0 Ifa 10.0.0.10
@@ -3985,7 +5749,11 @@ Add new[5]: Net 10.0.0.1/32 Ifp en1 Ifa 10.0.0.20 [last] [SCOPED]
 Add new[1]: Net 0.0.0.0/0 Gate 10.0.0.1 Ifp en1 Ifa 10.0.0.20 [never] [SCOPED]
 Add new[2]: Net 10.0.0.0/24 Ifp en0 Ifa 10.0.0.10
 Add new[3]: Net 10.0.0.0/24 Ifp en1 Ifa 10.0.0.20 [last] [SCOPED]
-New Routes ('test2') = <IPv4RouteList[9]> = {
+Add new[6]: Net 224.0.0.0/4 Ifp en0 Ifa 10.0.0.10
+Add new[7]: Net 224.0.0.0/4 Ifp en1 Ifa 10.0.0.20 [last] [SCOPED]
+Add new[8]: Net 255.255.255.255/32 Ifp en0 Ifa 10.0.0.10
+Add new[9]: Net 255.255.255.255/32 Ifp en1 Ifa 10.0.0.20 [last] [SCOPED]
+New Routes ('test2') = <IPv4RouteList[15]> = {
  0. Net 0.0.0.0/0 Gate 10.0.0.1 Ifp en0 Ifa 10.0.0.10
  1. Net 0.0.0.0/0 Gate 10.0.0.1 Ifp en1 Ifa 10.0.0.20 [SCOPED]
  2. Net 0.0.0.0/0 Gate 192.168.2.1 Ifp fw0 Ifa 192.168.2.30 [SCOPED]
@@ -3995,14 +5763,22 @@ New Routes ('test2') = <IPv4RouteList[9]> = {
  6. Net 10.0.0.1/32 Ifp en1 Ifa 10.0.0.20 [SCOPED]
  7. Net 192.168.2.0/24 Ifp fw0 Ifa 192.168.2.30
  8. Net 192.168.2.1/32 Ifp fw0 Ifa 192.168.2.30
+ 9. Net 224.0.0.0/4 Ifp en0 Ifa 10.0.0.10
+10. Net 224.0.0.0/4 Ifp en1 Ifa 10.0.0.20 [SCOPED]
+11. Net 224.0.0.0/4 Ifp fw0 Ifa 192.168.2.30 [SCOPED]
+12. Net 255.255.255.255/32 Ifp en0 Ifa 10.0.0.10
+13. Net 255.255.255.255/32 Ifp en1 Ifa 10.0.0.20 [SCOPED]
+14. Net 255.255.255.255/32 Ifp fw0 Ifa 192.168.2.30 [SCOPED]
 }
 Add new[8]: Net 192.168.2.1/32 Ifp fw0 Ifa 192.168.2.30
 Add new[2]: Net 0.0.0.0/0 Gate 192.168.2.1 Ifp fw0 Ifa 192.168.2.30 [SCOPED]
 Add new[7]: Net 192.168.2.0/24 Ifp fw0 Ifa 192.168.2.30
+Add new[11]: Net 224.0.0.0/4 Ifp fw0 Ifa 192.168.2.30 [SCOPED]
+Add new[14]: Net 255.255.255.255/32 Ifp fw0 Ifa 192.168.2.30 [SCOPED]
 =================> Apply 'test13', 'test2' End <=================
 
 =================> Apply 'test2', 'test14' Begin <=================
-Old routes ('test2') = <IPv4RouteList[9]> = {
+Old routes ('test2') = <IPv4RouteList[15]> = {
  0. Net 0.0.0.0/0 Gate 10.0.0.1 Ifp en0 Ifa 10.0.0.10
  1. Net 0.0.0.0/0 Gate 10.0.0.1 Ifp en1 Ifa 10.0.0.20 [SCOPED]
  2. Net 0.0.0.0/0 Gate 192.168.2.1 Ifp fw0 Ifa 192.168.2.30 [SCOPED]
@@ -4012,6 +5788,12 @@ Old routes ('test2') = <IPv4RouteList[9]> = {
  6. Net 10.0.0.1/32 Ifp en1 Ifa 10.0.0.20 [SCOPED]
  7. Net 192.168.2.0/24 Ifp fw0 Ifa 192.168.2.30
  8. Net 192.168.2.1/32 Ifp fw0 Ifa 192.168.2.30
+ 9. Net 224.0.0.0/4 Ifp en0 Ifa 10.0.0.10
+10. Net 224.0.0.0/4 Ifp en1 Ifa 10.0.0.20 [SCOPED]
+11. Net 224.0.0.0/4 Ifp fw0 Ifa 192.168.2.30 [SCOPED]
+12. Net 255.255.255.255/32 Ifp en0 Ifa 10.0.0.10
+13. Net 255.255.255.255/32 Ifp en1 Ifa 10.0.0.20 [SCOPED]
+14. Net 255.255.255.255/32 Ifp fw0 Ifa 192.168.2.30 [SCOPED]
 }
 Add new[5]: Net 10.0.0.1/32 Ifp en0 Ifa 10.0.0.10
 Add new[0]: Net 0.0.0.0/0 Gate 10.0.0.1 Ifp en0 Ifa 10.0.0.10
@@ -4022,10 +5804,18 @@ Add new[2]: Net 0.0.0.0/0 Gate 192.168.2.1 Ifp fw0 Ifa 192.168.2.30 [SCOPED]
 Add new[3]: Net 10.0.0.0/24 Ifp en0 Ifa 10.0.0.10
 Add new[4]: Net 10.0.0.0/24 Ifp en1 Ifa 10.0.0.20 [SCOPED]
 Add new[7]: Net 192.168.2.0/24 Ifp fw0 Ifa 192.168.2.30
-New Routes ('test14') = <IPv4RouteList[3]> = {
+Add new[9]: Net 224.0.0.0/4 Ifp en0 Ifa 10.0.0.10
+Add new[10]: Net 224.0.0.0/4 Ifp en1 Ifa 10.0.0.20 [SCOPED]
+Add new[11]: Net 224.0.0.0/4 Ifp fw0 Ifa 192.168.2.30 [SCOPED]
+Add new[12]: Net 255.255.255.255/32 Ifp en0 Ifa 10.0.0.10
+Add new[13]: Net 255.255.255.255/32 Ifp en1 Ifa 10.0.0.20 [SCOPED]
+Add new[14]: Net 255.255.255.255/32 Ifp fw0 Ifa 192.168.2.30 [SCOPED]
+New Routes ('test14') = <IPv4RouteList[5]> = {
  0. Net 0.0.0.0/0 Gate 10.0.0.1 Ifp en1 Ifa 10.0.0.20 [never] [SCOPED]
  1. Net 10.0.0.0/24 Ifp en1 Ifa 10.0.0.20 [last]
  2. Net 10.0.0.1/32 Ifp en1 Ifa 10.0.0.20 [last]
+ 3. Net 224.0.0.0/4 Ifp en1 Ifa 10.0.0.20 [last]
+ 4. Net 255.255.255.255/32 Ifp en1 Ifa 10.0.0.20 [last]
 }
 Remove old[0]: Net 0.0.0.0/0 Gate 10.0.0.1 Ifp en0 Ifa 10.0.0.10
 Remove old[2]: Net 0.0.0.0/0 Gate 192.168.2.1 Ifp fw0 Ifa 192.168.2.30 [SCOPED]
@@ -4035,20 +5825,32 @@ Remove old[5]: Net 10.0.0.1/32 Ifp en0 Ifa 10.0.0.10
 Remove old[6]: Net 10.0.0.1/32 Ifp en1 Ifa 10.0.0.20 [SCOPED]
 Remove old[7]: Net 192.168.2.0/24 Ifp fw0 Ifa 192.168.2.30
 Remove old[8]: Net 192.168.2.1/32 Ifp fw0 Ifa 192.168.2.30
+Remove old[9]: Net 224.0.0.0/4 Ifp en0 Ifa 10.0.0.10
+Remove old[10]: Net 224.0.0.0/4 Ifp en1 Ifa 10.0.0.20 [SCOPED]
+Remove old[11]: Net 224.0.0.0/4 Ifp fw0 Ifa 192.168.2.30 [SCOPED]
+Remove old[12]: Net 255.255.255.255/32 Ifp en0 Ifa 10.0.0.10
+Remove old[13]: Net 255.255.255.255/32 Ifp en1 Ifa 10.0.0.20 [SCOPED]
+Remove old[14]: Net 255.255.255.255/32 Ifp fw0 Ifa 192.168.2.30 [SCOPED]
 Add new[1]: Net 10.0.0.0/24 Ifp en1 Ifa 10.0.0.20 [last]
 Add new[2]: Net 10.0.0.1/32 Ifp en1 Ifa 10.0.0.20 [last]
+Add new[3]: Net 224.0.0.0/4 Ifp en1 Ifa 10.0.0.20 [last]
+Add new[4]: Net 255.255.255.255/32 Ifp en1 Ifa 10.0.0.20 [last]
 =================> Apply 'test2', 'test14' End <=================
 
 =================> Apply 'test14', 'test2' Begin <=================
-Old routes ('test14') = <IPv4RouteList[3]> = {
+Old routes ('test14') = <IPv4RouteList[5]> = {
  0. Net 0.0.0.0/0 Gate 10.0.0.1 Ifp en1 Ifa 10.0.0.20 [never] [SCOPED]
  1. Net 10.0.0.0/24 Ifp en1 Ifa 10.0.0.20 [last]
  2. Net 10.0.0.1/32 Ifp en1 Ifa 10.0.0.20 [last]
+ 3. Net 224.0.0.0/4 Ifp en1 Ifa 10.0.0.20 [last]
+ 4. Net 255.255.255.255/32 Ifp en1 Ifa 10.0.0.20 [last]
 }
 Add new[2]: Net 10.0.0.1/32 Ifp en1 Ifa 10.0.0.20 [last]
 Add new[0]: Net 0.0.0.0/0 Gate 10.0.0.1 Ifp en1 Ifa 10.0.0.20 [never] [SCOPED]
 Add new[1]: Net 10.0.0.0/24 Ifp en1 Ifa 10.0.0.20 [last]
-New Routes ('test2') = <IPv4RouteList[9]> = {
+Add new[3]: Net 224.0.0.0/4 Ifp en1 Ifa 10.0.0.20 [last]
+Add new[4]: Net 255.255.255.255/32 Ifp en1 Ifa 10.0.0.20 [last]
+New Routes ('test2') = <IPv4RouteList[15]> = {
  0. Net 0.0.0.0/0 Gate 10.0.0.1 Ifp en0 Ifa 10.0.0.10
  1. Net 0.0.0.0/0 Gate 10.0.0.1 Ifp en1 Ifa 10.0.0.20 [SCOPED]
  2. Net 0.0.0.0/0 Gate 192.168.2.1 Ifp fw0 Ifa 192.168.2.30 [SCOPED]
@@ -4058,9 +5860,17 @@ New Routes ('test2') = <IPv4RouteList[9]> = {
  6. Net 10.0.0.1/32 Ifp en1 Ifa 10.0.0.20 [SCOPED]
  7. Net 192.168.2.0/24 Ifp fw0 Ifa 192.168.2.30
  8. Net 192.168.2.1/32 Ifp fw0 Ifa 192.168.2.30
+ 9. Net 224.0.0.0/4 Ifp en0 Ifa 10.0.0.10
+10. Net 224.0.0.0/4 Ifp en1 Ifa 10.0.0.20 [SCOPED]
+11. Net 224.0.0.0/4 Ifp fw0 Ifa 192.168.2.30 [SCOPED]
+12. Net 255.255.255.255/32 Ifp en0 Ifa 10.0.0.10
+13. Net 255.255.255.255/32 Ifp en1 Ifa 10.0.0.20 [SCOPED]
+14. Net 255.255.255.255/32 Ifp fw0 Ifa 192.168.2.30 [SCOPED]
 }
 Remove old[1]: Net 10.0.0.0/24 Ifp en1 Ifa 10.0.0.20 [last]
 Remove old[2]: Net 10.0.0.1/32 Ifp en1 Ifa 10.0.0.20 [last]
+Remove old[3]: Net 224.0.0.0/4 Ifp en1 Ifa 10.0.0.20 [last]
+Remove old[4]: Net 255.255.255.255/32 Ifp en1 Ifa 10.0.0.20 [last]
 Add new[5]: Net 10.0.0.1/32 Ifp en0 Ifa 10.0.0.10
 Add new[0]: Net 0.0.0.0/0 Gate 10.0.0.1 Ifp en0 Ifa 10.0.0.10
 Add new[8]: Net 192.168.2.1/32 Ifp fw0 Ifa 192.168.2.30
@@ -4069,10 +5879,16 @@ Add new[3]: Net 10.0.0.0/24 Ifp en0 Ifa 10.0.0.10
 Add new[4]: Net 10.0.0.0/24 Ifp en1 Ifa 10.0.0.20 [SCOPED]
 Add new[6]: Net 10.0.0.1/32 Ifp en1 Ifa 10.0.0.20 [SCOPED]
 Add new[7]: Net 192.168.2.0/24 Ifp fw0 Ifa 192.168.2.30
+Add new[9]: Net 224.0.0.0/4 Ifp en0 Ifa 10.0.0.10
+Add new[10]: Net 224.0.0.0/4 Ifp en1 Ifa 10.0.0.20 [SCOPED]
+Add new[11]: Net 224.0.0.0/4 Ifp fw0 Ifa 192.168.2.30 [SCOPED]
+Add new[12]: Net 255.255.255.255/32 Ifp en0 Ifa 10.0.0.10
+Add new[13]: Net 255.255.255.255/32 Ifp en1 Ifa 10.0.0.20 [SCOPED]
+Add new[14]: Net 255.255.255.255/32 Ifp fw0 Ifa 192.168.2.30 [SCOPED]
 =================> Apply 'test14', 'test2' End <=================
 
 =================> Apply 'test2', 'test15' Begin <=================
-Old routes ('test2') = <IPv4RouteList[9]> = {
+Old routes ('test2') = <IPv4RouteList[15]> = {
  0. Net 0.0.0.0/0 Gate 10.0.0.1 Ifp en0 Ifa 10.0.0.10
  1. Net 0.0.0.0/0 Gate 10.0.0.1 Ifp en1 Ifa 10.0.0.20 [SCOPED]
  2. Net 0.0.0.0/0 Gate 192.168.2.1 Ifp fw0 Ifa 192.168.2.30 [SCOPED]
@@ -4082,6 +5898,12 @@ Old routes ('test2') = <IPv4RouteList[9]> = {
  6. Net 10.0.0.1/32 Ifp en1 Ifa 10.0.0.20 [SCOPED]
  7. Net 192.168.2.0/24 Ifp fw0 Ifa 192.168.2.30
  8. Net 192.168.2.1/32 Ifp fw0 Ifa 192.168.2.30
+ 9. Net 224.0.0.0/4 Ifp en0 Ifa 10.0.0.10
+10. Net 224.0.0.0/4 Ifp en1 Ifa 10.0.0.20 [SCOPED]
+11. Net 224.0.0.0/4 Ifp fw0 Ifa 192.168.2.30 [SCOPED]
+12. Net 255.255.255.255/32 Ifp en0 Ifa 10.0.0.10
+13. Net 255.255.255.255/32 Ifp en1 Ifa 10.0.0.20 [SCOPED]
+14. Net 255.255.255.255/32 Ifp fw0 Ifa 192.168.2.30 [SCOPED]
 }
 Add new[5]: Net 10.0.0.1/32 Ifp en0 Ifa 10.0.0.10
 Add new[0]: Net 0.0.0.0/0 Gate 10.0.0.1 Ifp en0 Ifa 10.0.0.10
@@ -4092,8 +5914,16 @@ Add new[2]: Net 0.0.0.0/0 Gate 192.168.2.1 Ifp fw0 Ifa 192.168.2.30 [SCOPED]
 Add new[3]: Net 10.0.0.0/24 Ifp en0 Ifa 10.0.0.10
 Add new[4]: Net 10.0.0.0/24 Ifp en1 Ifa 10.0.0.20 [SCOPED]
 Add new[7]: Net 192.168.2.0/24 Ifp fw0 Ifa 192.168.2.30
-New Routes ('test15') = <IPv4RouteList[1]> = {
- 0. Net 0.0.0.0/0 Ifp en0 Ifa 169.254.22.44
+Add new[9]: Net 224.0.0.0/4 Ifp en0 Ifa 10.0.0.10
+Add new[10]: Net 224.0.0.0/4 Ifp en1 Ifa 10.0.0.20 [SCOPED]
+Add new[11]: Net 224.0.0.0/4 Ifp fw0 Ifa 192.168.2.30 [SCOPED]
+Add new[12]: Net 255.255.255.255/32 Ifp en0 Ifa 10.0.0.10
+Add new[13]: Net 255.255.255.255/32 Ifp en1 Ifa 10.0.0.20 [SCOPED]
+Add new[14]: Net 255.255.255.255/32 Ifp fw0 Ifa 192.168.2.30 [SCOPED]
+New Routes ('test15') = <IPv4RouteList[3]> = {
+ 0. Net 169.254.0.0/16 Ifp en0 Ifa 169.254.22.44 [last]
+ 1. Net 224.0.0.0/4 Ifp en0 Ifa 169.254.22.44 [last]
+ 2. Net 255.255.255.255/32 Ifp en0 Ifa 169.254.22.44 [last]
 }
 Remove old[0]: Net 0.0.0.0/0 Gate 10.0.0.1 Ifp en0 Ifa 10.0.0.10
 Remove old[1]: Net 0.0.0.0/0 Gate 10.0.0.1 Ifp en1 Ifa 10.0.0.20 [SCOPED]
@@ -4104,15 +5934,27 @@ Remove old[5]: Net 10.0.0.1/32 Ifp en0 Ifa 10.0.0.10
 Remove old[6]: Net 10.0.0.1/32 Ifp en1 Ifa 10.0.0.20 [SCOPED]
 Remove old[7]: Net 192.168.2.0/24 Ifp fw0 Ifa 192.168.2.30
 Remove old[8]: Net 192.168.2.1/32 Ifp fw0 Ifa 192.168.2.30
-Add new[0]: Net 0.0.0.0/0 Ifp en0 Ifa 169.254.22.44
+Remove old[9]: Net 224.0.0.0/4 Ifp en0 Ifa 10.0.0.10
+Remove old[10]: Net 224.0.0.0/4 Ifp en1 Ifa 10.0.0.20 [SCOPED]
+Remove old[11]: Net 224.0.0.0/4 Ifp fw0 Ifa 192.168.2.30 [SCOPED]
+Remove old[12]: Net 255.255.255.255/32 Ifp en0 Ifa 10.0.0.10
+Remove old[13]: Net 255.255.255.255/32 Ifp en1 Ifa 10.0.0.20 [SCOPED]
+Remove old[14]: Net 255.255.255.255/32 Ifp fw0 Ifa 192.168.2.30 [SCOPED]
+Add new[0]: Net 169.254.0.0/16 Ifp en0 Ifa 169.254.22.44 [last]
+Add new[1]: Net 224.0.0.0/4 Ifp en0 Ifa 169.254.22.44 [last]
+Add new[2]: Net 255.255.255.255/32 Ifp en0 Ifa 169.254.22.44 [last]
 =================> Apply 'test2', 'test15' End <=================
 
 =================> Apply 'test15', 'test2' Begin <=================
-Old routes ('test15') = <IPv4RouteList[1]> = {
- 0. Net 0.0.0.0/0 Ifp en0 Ifa 169.254.22.44
+Old routes ('test15') = <IPv4RouteList[3]> = {
+ 0. Net 169.254.0.0/16 Ifp en0 Ifa 169.254.22.44 [last]
+ 1. Net 224.0.0.0/4 Ifp en0 Ifa 169.254.22.44 [last]
+ 2. Net 255.255.255.255/32 Ifp en0 Ifa 169.254.22.44 [last]
 }
-Add new[0]: Net 0.0.0.0/0 Ifp en0 Ifa 169.254.22.44
-New Routes ('test2') = <IPv4RouteList[9]> = {
+Add new[0]: Net 169.254.0.0/16 Ifp en0 Ifa 169.254.22.44 [last]
+Add new[1]: Net 224.0.0.0/4 Ifp en0 Ifa 169.254.22.44 [last]
+Add new[2]: Net 255.255.255.255/32 Ifp en0 Ifa 169.254.22.44 [last]
+New Routes ('test2') = <IPv4RouteList[15]> = {
  0. Net 0.0.0.0/0 Gate 10.0.0.1 Ifp en0 Ifa 10.0.0.10
  1. Net 0.0.0.0/0 Gate 10.0.0.1 Ifp en1 Ifa 10.0.0.20 [SCOPED]
  2. Net 0.0.0.0/0 Gate 192.168.2.1 Ifp fw0 Ifa 192.168.2.30 [SCOPED]
@@ -4122,8 +5964,16 @@ New Routes ('test2') = <IPv4RouteList[9]> = {
  6. Net 10.0.0.1/32 Ifp en1 Ifa 10.0.0.20 [SCOPED]
  7. Net 192.168.2.0/24 Ifp fw0 Ifa 192.168.2.30
  8. Net 192.168.2.1/32 Ifp fw0 Ifa 192.168.2.30
-}
-Remove old[0]: Net 0.0.0.0/0 Ifp en0 Ifa 169.254.22.44
+ 9. Net 224.0.0.0/4 Ifp en0 Ifa 10.0.0.10
+10. Net 224.0.0.0/4 Ifp en1 Ifa 10.0.0.20 [SCOPED]
+11. Net 224.0.0.0/4 Ifp fw0 Ifa 192.168.2.30 [SCOPED]
+12. Net 255.255.255.255/32 Ifp en0 Ifa 10.0.0.10
+13. Net 255.255.255.255/32 Ifp en1 Ifa 10.0.0.20 [SCOPED]
+14. Net 255.255.255.255/32 Ifp fw0 Ifa 192.168.2.30 [SCOPED]
+}
+Remove old[0]: Net 169.254.0.0/16 Ifp en0 Ifa 169.254.22.44 [last]
+Remove old[1]: Net 224.0.0.0/4 Ifp en0 Ifa 169.254.22.44 [last]
+Remove old[2]: Net 255.255.255.255/32 Ifp en0 Ifa 169.254.22.44 [last]
 Add new[5]: Net 10.0.0.1/32 Ifp en0 Ifa 10.0.0.10
 Add new[0]: Net 0.0.0.0/0 Gate 10.0.0.1 Ifp en0 Ifa 10.0.0.10
 Add new[6]: Net 10.0.0.1/32 Ifp en1 Ifa 10.0.0.20 [SCOPED]
@@ -4133,10 +5983,16 @@ Add new[2]: Net 0.0.0.0/0 Gate 192.168.2.1 Ifp fw0 Ifa 192.168.2.30 [SCOPED]
 Add new[3]: Net 10.0.0.0/24 Ifp en0 Ifa 10.0.0.10
 Add new[4]: Net 10.0.0.0/24 Ifp en1 Ifa 10.0.0.20 [SCOPED]
 Add new[7]: Net 192.168.2.0/24 Ifp fw0 Ifa 192.168.2.30
+Add new[9]: Net 224.0.0.0/4 Ifp en0 Ifa 10.0.0.10
+Add new[10]: Net 224.0.0.0/4 Ifp en1 Ifa 10.0.0.20 [SCOPED]
+Add new[11]: Net 224.0.0.0/4 Ifp fw0 Ifa 192.168.2.30 [SCOPED]
+Add new[12]: Net 255.255.255.255/32 Ifp en0 Ifa 10.0.0.10
+Add new[13]: Net 255.255.255.255/32 Ifp en1 Ifa 10.0.0.20 [SCOPED]
+Add new[14]: Net 255.255.255.255/32 Ifp fw0 Ifa 192.168.2.30 [SCOPED]
 =================> Apply 'test15', 'test2' End <=================
 
 =================> Apply 'test2', 'test16' Begin <=================
-Old routes ('test2') = <IPv4RouteList[9]> = {
+Old routes ('test2') = <IPv4RouteList[15]> = {
  0. Net 0.0.0.0/0 Gate 10.0.0.1 Ifp en0 Ifa 10.0.0.10
  1. Net 0.0.0.0/0 Gate 10.0.0.1 Ifp en1 Ifa 10.0.0.20 [SCOPED]
  2. Net 0.0.0.0/0 Gate 192.168.2.1 Ifp fw0 Ifa 192.168.2.30 [SCOPED]
@@ -4146,6 +6002,12 @@ Old routes ('test2') = <IPv4RouteList[9]> = {
  6. Net 10.0.0.1/32 Ifp en1 Ifa 10.0.0.20 [SCOPED]
  7. Net 192.168.2.0/24 Ifp fw0 Ifa 192.168.2.30
  8. Net 192.168.2.1/32 Ifp fw0 Ifa 192.168.2.30
+ 9. Net 224.0.0.0/4 Ifp en0 Ifa 10.0.0.10
+10. Net 224.0.0.0/4 Ifp en1 Ifa 10.0.0.20 [SCOPED]
+11. Net 224.0.0.0/4 Ifp fw0 Ifa 192.168.2.30 [SCOPED]
+12. Net 255.255.255.255/32 Ifp en0 Ifa 10.0.0.10
+13. Net 255.255.255.255/32 Ifp en1 Ifa 10.0.0.20 [SCOPED]
+14. Net 255.255.255.255/32 Ifp fw0 Ifa 192.168.2.30 [SCOPED]
 }
 Add new[5]: Net 10.0.0.1/32 Ifp en0 Ifa 10.0.0.10
 Add new[0]: Net 0.0.0.0/0 Gate 10.0.0.1 Ifp en0 Ifa 10.0.0.10
@@ -4156,7 +6018,13 @@ Add new[2]: Net 0.0.0.0/0 Gate 192.168.2.1 Ifp fw0 Ifa 192.168.2.30 [SCOPED]
 Add new[3]: Net 10.0.0.0/24 Ifp en0 Ifa 10.0.0.10
 Add new[4]: Net 10.0.0.0/24 Ifp en1 Ifa 10.0.0.20 [SCOPED]
 Add new[7]: Net 192.168.2.0/24 Ifp fw0 Ifa 192.168.2.30
-New Routes ('test16') = <IPv4RouteList[50]> = {
+Add new[9]: Net 224.0.0.0/4 Ifp en0 Ifa 10.0.0.10
+Add new[10]: Net 224.0.0.0/4 Ifp en1 Ifa 10.0.0.20 [SCOPED]
+Add new[11]: Net 224.0.0.0/4 Ifp fw0 Ifa 192.168.2.30 [SCOPED]
+Add new[12]: Net 255.255.255.255/32 Ifp en0 Ifa 10.0.0.10
+Add new[13]: Net 255.255.255.255/32 Ifp en1 Ifa 10.0.0.20 [SCOPED]
+Add new[14]: Net 255.255.255.255/32 Ifp fw0 Ifa 192.168.2.30 [SCOPED]
+New Routes ('test16') = <IPv4RouteList[54]> = {
  0. Net 0.0.0.0/0 Gate 10.0.0.1 Ifp en0 Ifa 10.0.0.10
  1. Net 0.0.0.0/0 Ifp utun0 Ifa 17.153.46.24 [SCOPED]
  2. Net 10.0.0.0/24 Ifp en0 Ifa 10.0.0.10
@@ -4207,6 +6075,10 @@ New Routes ('test16') = <IPv4RouteList[50]> = {
 47. Net 192.35.50.0/24 Gate 17.153.46.24 Ifp utun0 Ifa 17.153.46.24
 48. Net 204.179.20.0/24 Gate 17.153.46.24 Ifp utun0 Ifa 17.153.46.24
 49. Net 206.112.116.0/24 Gate 17.153.46.24 Ifp utun0 Ifa 17.153.46.24
+50. Net 224.0.0.0/4 Ifp en0 Ifa 10.0.0.10
+51. Net 224.0.0.0/4 Ifp utun0 Ifa 17.153.46.24 [SCOPED]
+52. Net 255.255.255.255/32 Ifp en0 Ifa 10.0.0.10
+53. Net 255.255.255.255/32 Ifp utun0 Ifa 17.153.46.24 [SCOPED]
 }
 Remove old[1]: Net 0.0.0.0/0 Gate 10.0.0.1 Ifp en1 Ifa 10.0.0.20 [SCOPED]
 Remove old[2]: Net 0.0.0.0/0 Gate 192.168.2.1 Ifp fw0 Ifa 192.168.2.30 [SCOPED]
@@ -4214,6 +6086,10 @@ Remove old[4]: Net 10.0.0.0/24 Ifp en1 Ifa 10.0.0.20 [SCOPED]
 Remove old[6]: Net 10.0.0.1/32 Ifp en1 Ifa 10.0.0.20 [SCOPED]
 Remove old[7]: Net 192.168.2.0/24 Ifp fw0 Ifa 192.168.2.30
 Remove old[8]: Net 192.168.2.1/32 Ifp fw0 Ifa 192.168.2.30
+Remove old[10]: Net 224.0.0.0/4 Ifp en1 Ifa 10.0.0.20 [SCOPED]
+Remove old[11]: Net 224.0.0.0/4 Ifp fw0 Ifa 192.168.2.30 [SCOPED]
+Remove old[13]: Net 255.255.255.255/32 Ifp en1 Ifa 10.0.0.20 [SCOPED]
+Remove old[14]: Net 255.255.255.255/32 Ifp fw0 Ifa 192.168.2.30 [SCOPED]
 Add new[1]: Net 0.0.0.0/0 Ifp utun0 Ifa 17.153.46.24 [SCOPED]
 Add new[4]: Net 10.1.3.0/24 Gate 17.153.46.24 Ifp utun0 Ifa 17.153.46.24
 Add new[5]: Net 10.1.4.0/24 Gate 17.153.46.24 Ifp utun0 Ifa 17.153.46.24
@@ -4261,10 +6137,12 @@ Add new[46]: Net 172.16.2.0/24 Gate 17.153.46.24 Ifp utun0 Ifa 17.153.46.24
 Add new[47]: Net 192.35.50.0/24 Gate 17.153.46.24 Ifp utun0 Ifa 17.153.46.24
 Add new[48]: Net 204.179.20.0/24 Gate 17.153.46.24 Ifp utun0 Ifa 17.153.46.24
 Add new[49]: Net 206.112.116.0/24 Gate 17.153.46.24 Ifp utun0 Ifa 17.153.46.24
+Add new[51]: Net 224.0.0.0/4 Ifp utun0 Ifa 17.153.46.24 [SCOPED]
+Add new[53]: Net 255.255.255.255/32 Ifp utun0 Ifa 17.153.46.24 [SCOPED]
 =================> Apply 'test2', 'test16' End <=================
 
 =================> Apply 'test16', 'test2' Begin <=================
-Old routes ('test16') = <IPv4RouteList[50]> = {
+Old routes ('test16') = <IPv4RouteList[54]> = {
  0. Net 0.0.0.0/0 Gate 10.0.0.1 Ifp en0 Ifa 10.0.0.10
  1. Net 0.0.0.0/0 Ifp utun0 Ifa 17.153.46.24 [SCOPED]
  2. Net 10.0.0.0/24 Ifp en0 Ifa 10.0.0.10
@@ -4315,6 +6193,10 @@ Old routes ('test16') = <IPv4RouteList[50]> = {
 47. Net 192.35.50.0/24 Gate 17.153.46.24 Ifp utun0 Ifa 17.153.46.24
 48. Net 204.179.20.0/24 Gate 17.153.46.24 Ifp utun0 Ifa 17.153.46.24
 49. Net 206.112.116.0/24 Gate 17.153.46.24 Ifp utun0 Ifa 17.153.46.24
+50. Net 224.0.0.0/4 Ifp en0 Ifa 10.0.0.10
+51. Net 224.0.0.0/4 Ifp utun0 Ifa 17.153.46.24 [SCOPED]
+52. Net 255.255.255.255/32 Ifp en0 Ifa 10.0.0.10
+53. Net 255.255.255.255/32 Ifp utun0 Ifa 17.153.46.24 [SCOPED]
 }
 Add new[3]: Net 10.0.0.1/32 Ifp en0 Ifa 10.0.0.10
 Add new[0]: Net 0.0.0.0/0 Gate 10.0.0.1 Ifp en0 Ifa 10.0.0.10
@@ -4366,7 +6248,11 @@ Add new[46]: Net 172.16.2.0/24 Gate 17.153.46.24 Ifp utun0 Ifa 17.153.46.24
 Add new[47]: Net 192.35.50.0/24 Gate 17.153.46.24 Ifp utun0 Ifa 17.153.46.24
 Add new[48]: Net 204.179.20.0/24 Gate 17.153.46.24 Ifp utun0 Ifa 17.153.46.24
 Add new[49]: Net 206.112.116.0/24 Gate 17.153.46.24 Ifp utun0 Ifa 17.153.46.24
-New Routes ('test2') = <IPv4RouteList[9]> = {
+Add new[50]: Net 224.0.0.0/4 Ifp en0 Ifa 10.0.0.10
+Add new[51]: Net 224.0.0.0/4 Ifp utun0 Ifa 17.153.46.24 [SCOPED]
+Add new[52]: Net 255.255.255.255/32 Ifp en0 Ifa 10.0.0.10
+Add new[53]: Net 255.255.255.255/32 Ifp utun0 Ifa 17.153.46.24 [SCOPED]
+New Routes ('test2') = <IPv4RouteList[15]> = {
  0. Net 0.0.0.0/0 Gate 10.0.0.1 Ifp en0 Ifa 10.0.0.10
  1. Net 0.0.0.0/0 Gate 10.0.0.1 Ifp en1 Ifa 10.0.0.20 [SCOPED]
  2. Net 0.0.0.0/0 Gate 192.168.2.1 Ifp fw0 Ifa 192.168.2.30 [SCOPED]
@@ -4376,6 +6262,12 @@ New Routes ('test2') = <IPv4RouteList[9]> = {
  6. Net 10.0.0.1/32 Ifp en1 Ifa 10.0.0.20 [SCOPED]
  7. Net 192.168.2.0/24 Ifp fw0 Ifa 192.168.2.30
  8. Net 192.168.2.1/32 Ifp fw0 Ifa 192.168.2.30
+ 9. Net 224.0.0.0/4 Ifp en0 Ifa 10.0.0.10
+10. Net 224.0.0.0/4 Ifp en1 Ifa 10.0.0.20 [SCOPED]
+11. Net 224.0.0.0/4 Ifp fw0 Ifa 192.168.2.30 [SCOPED]
+12. Net 255.255.255.255/32 Ifp en0 Ifa 10.0.0.10
+13. Net 255.255.255.255/32 Ifp en1 Ifa 10.0.0.20 [SCOPED]
+14. Net 255.255.255.255/32 Ifp fw0 Ifa 192.168.2.30 [SCOPED]
 }
 Remove old[1]: Net 0.0.0.0/0 Ifp utun0 Ifa 17.153.46.24 [SCOPED]
 Remove old[4]: Net 10.1.3.0/24 Gate 17.153.46.24 Ifp utun0 Ifa 17.153.46.24
@@ -4424,16 +6316,22 @@ Remove old[46]: Net 172.16.2.0/24 Gate 17.153.46.24 Ifp utun0 Ifa 17.153.46.24
 Remove old[47]: Net 192.35.50.0/24 Gate 17.153.46.24 Ifp utun0 Ifa 17.153.46.24
 Remove old[48]: Net 204.179.20.0/24 Gate 17.153.46.24 Ifp utun0 Ifa 17.153.46.24
 Remove old[49]: Net 206.112.116.0/24 Gate 17.153.46.24 Ifp utun0 Ifa 17.153.46.24
+Remove old[51]: Net 224.0.0.0/4 Ifp utun0 Ifa 17.153.46.24 [SCOPED]
+Remove old[53]: Net 255.255.255.255/32 Ifp utun0 Ifa 17.153.46.24 [SCOPED]
 Add new[6]: Net 10.0.0.1/32 Ifp en1 Ifa 10.0.0.20 [SCOPED]
 Add new[1]: Net 0.0.0.0/0 Gate 10.0.0.1 Ifp en1 Ifa 10.0.0.20 [SCOPED]
 Add new[8]: Net 192.168.2.1/32 Ifp fw0 Ifa 192.168.2.30
 Add new[2]: Net 0.0.0.0/0 Gate 192.168.2.1 Ifp fw0 Ifa 192.168.2.30 [SCOPED]
 Add new[4]: Net 10.0.0.0/24 Ifp en1 Ifa 10.0.0.20 [SCOPED]
 Add new[7]: Net 192.168.2.0/24 Ifp fw0 Ifa 192.168.2.30
+Add new[10]: Net 224.0.0.0/4 Ifp en1 Ifa 10.0.0.20 [SCOPED]
+Add new[11]: Net 224.0.0.0/4 Ifp fw0 Ifa 192.168.2.30 [SCOPED]
+Add new[13]: Net 255.255.255.255/32 Ifp en1 Ifa 10.0.0.20 [SCOPED]
+Add new[14]: Net 255.255.255.255/32 Ifp fw0 Ifa 192.168.2.30 [SCOPED]
 =================> Apply 'test16', 'test2' End <=================
 
 =================> Apply 'test2', 'test17' Begin <=================
-Old routes ('test2') = <IPv4RouteList[9]> = {
+Old routes ('test2') = <IPv4RouteList[15]> = {
  0. Net 0.0.0.0/0 Gate 10.0.0.1 Ifp en0 Ifa 10.0.0.10
  1. Net 0.0.0.0/0 Gate 10.0.0.1 Ifp en1 Ifa 10.0.0.20 [SCOPED]
  2. Net 0.0.0.0/0 Gate 192.168.2.1 Ifp fw0 Ifa 192.168.2.30 [SCOPED]
@@ -4443,6 +6341,12 @@ Old routes ('test2') = <IPv4RouteList[9]> = {
  6. Net 10.0.0.1/32 Ifp en1 Ifa 10.0.0.20 [SCOPED]
  7. Net 192.168.2.0/24 Ifp fw0 Ifa 192.168.2.30
  8. Net 192.168.2.1/32 Ifp fw0 Ifa 192.168.2.30
+ 9. Net 224.0.0.0/4 Ifp en0 Ifa 10.0.0.10
+10. Net 224.0.0.0/4 Ifp en1 Ifa 10.0.0.20 [SCOPED]
+11. Net 224.0.0.0/4 Ifp fw0 Ifa 192.168.2.30 [SCOPED]
+12. Net 255.255.255.255/32 Ifp en0 Ifa 10.0.0.10
+13. Net 255.255.255.255/32 Ifp en1 Ifa 10.0.0.20 [SCOPED]
+14. Net 255.255.255.255/32 Ifp fw0 Ifa 192.168.2.30 [SCOPED]
 }
 Add new[5]: Net 10.0.0.1/32 Ifp en0 Ifa 10.0.0.10
 Add new[0]: Net 0.0.0.0/0 Gate 10.0.0.1 Ifp en0 Ifa 10.0.0.10
@@ -4453,13 +6357,23 @@ Add new[2]: Net 0.0.0.0/0 Gate 192.168.2.1 Ifp fw0 Ifa 192.168.2.30 [SCOPED]
 Add new[3]: Net 10.0.0.0/24 Ifp en0 Ifa 10.0.0.10
 Add new[4]: Net 10.0.0.0/24 Ifp en1 Ifa 10.0.0.20 [SCOPED]
 Add new[7]: Net 192.168.2.0/24 Ifp fw0 Ifa 192.168.2.30
-New Routes ('test17') = <IPv4RouteList[6]> = {
+Add new[9]: Net 224.0.0.0/4 Ifp en0 Ifa 10.0.0.10
+Add new[10]: Net 224.0.0.0/4 Ifp en1 Ifa 10.0.0.20 [SCOPED]
+Add new[11]: Net 224.0.0.0/4 Ifp fw0 Ifa 192.168.2.30 [SCOPED]
+Add new[12]: Net 255.255.255.255/32 Ifp en0 Ifa 10.0.0.10
+Add new[13]: Net 255.255.255.255/32 Ifp en1 Ifa 10.0.0.20 [SCOPED]
+Add new[14]: Net 255.255.255.255/32 Ifp fw0 Ifa 192.168.2.30 [SCOPED]
+New Routes ('test17') = <IPv4RouteList[10]> = {
  0. Net 0.0.0.0/0 Gate 10.0.0.1 Ifp en0 Ifa 10.0.0.10
  1. Net 0.0.0.0/0 Gate 192.168.2.1 Ifp en1 Ifa 192.168.2.50 [never] [SCOPED]
  2. Net 10.0.0.0/24 Ifp en0 Ifa 10.0.0.10
  3. Net 10.0.0.1/32 Ifp en0 Ifa 10.0.0.10
  4. Net 192.168.2.0/24 Ifp en1 Ifa 192.168.2.50 [last]
  5. Net 192.168.2.1/32 Ifp en1 Ifa 192.168.2.50 [last]
+ 6. Net 224.0.0.0/4 Ifp en0 Ifa 10.0.0.10
+ 7. Net 224.0.0.0/4 Ifp en1 Ifa 192.168.2.50 [last] [SCOPED]
+ 8. Net 255.255.255.255/32 Ifp en0 Ifa 10.0.0.10
+ 9. Net 255.255.255.255/32 Ifp en1 Ifa 192.168.2.50 [last] [SCOPED]
 }
 Remove old[1]: Net 0.0.0.0/0 Gate 10.0.0.1 Ifp en1 Ifa 10.0.0.20 [SCOPED]
 Remove old[2]: Net 0.0.0.0/0 Gate 192.168.2.1 Ifp fw0 Ifa 192.168.2.30 [SCOPED]
@@ -4467,19 +6381,29 @@ Remove old[4]: Net 10.0.0.0/24 Ifp en1 Ifa 10.0.0.20 [SCOPED]
 Remove old[6]: Net 10.0.0.1/32 Ifp en1 Ifa 10.0.0.20 [SCOPED]
 Remove old[7]: Net 192.168.2.0/24 Ifp fw0 Ifa 192.168.2.30
 Remove old[8]: Net 192.168.2.1/32 Ifp fw0 Ifa 192.168.2.30
+Remove old[10]: Net 224.0.0.0/4 Ifp en1 Ifa 10.0.0.20 [SCOPED]
+Remove old[11]: Net 224.0.0.0/4 Ifp fw0 Ifa 192.168.2.30 [SCOPED]
+Remove old[13]: Net 255.255.255.255/32 Ifp en1 Ifa 10.0.0.20 [SCOPED]
+Remove old[14]: Net 255.255.255.255/32 Ifp fw0 Ifa 192.168.2.30 [SCOPED]
 Add new[5]: Net 192.168.2.1/32 Ifp en1 Ifa 192.168.2.50 [last]
 Add new[1]: Net 0.0.0.0/0 Gate 192.168.2.1 Ifp en1 Ifa 192.168.2.50 [never] [SCOPED]
 Add new[4]: Net 192.168.2.0/24 Ifp en1 Ifa 192.168.2.50 [last]
+Add new[7]: Net 224.0.0.0/4 Ifp en1 Ifa 192.168.2.50 [last] [SCOPED]
+Add new[9]: Net 255.255.255.255/32 Ifp en1 Ifa 192.168.2.50 [last] [SCOPED]
 =================> Apply 'test2', 'test17' End <=================
 
 =================> Apply 'test17', 'test2' Begin <=================
-Old routes ('test17') = <IPv4RouteList[6]> = {
+Old routes ('test17') = <IPv4RouteList[10]> = {
  0. Net 0.0.0.0/0 Gate 10.0.0.1 Ifp en0 Ifa 10.0.0.10
  1. Net 0.0.0.0/0 Gate 192.168.2.1 Ifp en1 Ifa 192.168.2.50 [never] [SCOPED]
  2. Net 10.0.0.0/24 Ifp en0 Ifa 10.0.0.10
  3. Net 10.0.0.1/32 Ifp en0 Ifa 10.0.0.10
  4. Net 192.168.2.0/24 Ifp en1 Ifa 192.168.2.50 [last]
  5. Net 192.168.2.1/32 Ifp en1 Ifa 192.168.2.50 [last]
+ 6. Net 224.0.0.0/4 Ifp en0 Ifa 10.0.0.10
+ 7. Net 224.0.0.0/4 Ifp en1 Ifa 192.168.2.50 [last] [SCOPED]
+ 8. Net 255.255.255.255/32 Ifp en0 Ifa 10.0.0.10
+ 9. Net 255.255.255.255/32 Ifp en1 Ifa 192.168.2.50 [last] [SCOPED]
 }
 Add new[3]: Net 10.0.0.1/32 Ifp en0 Ifa 10.0.0.10
 Add new[0]: Net 0.0.0.0/0 Gate 10.0.0.1 Ifp en0 Ifa 10.0.0.10
@@ -4487,7 +6411,11 @@ Add new[5]: Net 192.168.2.1/32 Ifp en1 Ifa 192.168.2.50 [last]
 Add new[1]: Net 0.0.0.0/0 Gate 192.168.2.1 Ifp en1 Ifa 192.168.2.50 [never] [SCOPED]
 Add new[2]: Net 10.0.0.0/24 Ifp en0 Ifa 10.0.0.10
 Add new[4]: Net 192.168.2.0/24 Ifp en1 Ifa 192.168.2.50 [last]
-New Routes ('test2') = <IPv4RouteList[9]> = {
+Add new[6]: Net 224.0.0.0/4 Ifp en0 Ifa 10.0.0.10
+Add new[7]: Net 224.0.0.0/4 Ifp en1 Ifa 192.168.2.50 [last] [SCOPED]
+Add new[8]: Net 255.255.255.255/32 Ifp en0 Ifa 10.0.0.10
+Add new[9]: Net 255.255.255.255/32 Ifp en1 Ifa 192.168.2.50 [last] [SCOPED]
+New Routes ('test2') = <IPv4RouteList[15]> = {
  0. Net 0.0.0.0/0 Gate 10.0.0.1 Ifp en0 Ifa 10.0.0.10
  1. Net 0.0.0.0/0 Gate 10.0.0.1 Ifp en1 Ifa 10.0.0.20 [SCOPED]
  2. Net 0.0.0.0/0 Gate 192.168.2.1 Ifp fw0 Ifa 192.168.2.30 [SCOPED]
@@ -4497,20 +6425,32 @@ New Routes ('test2') = <IPv4RouteList[9]> = {
  6. Net 10.0.0.1/32 Ifp en1 Ifa 10.0.0.20 [SCOPED]
  7. Net 192.168.2.0/24 Ifp fw0 Ifa 192.168.2.30
  8. Net 192.168.2.1/32 Ifp fw0 Ifa 192.168.2.30
+ 9. Net 224.0.0.0/4 Ifp en0 Ifa 10.0.0.10
+10. Net 224.0.0.0/4 Ifp en1 Ifa 10.0.0.20 [SCOPED]
+11. Net 224.0.0.0/4 Ifp fw0 Ifa 192.168.2.30 [SCOPED]
+12. Net 255.255.255.255/32 Ifp en0 Ifa 10.0.0.10
+13. Net 255.255.255.255/32 Ifp en1 Ifa 10.0.0.20 [SCOPED]
+14. Net 255.255.255.255/32 Ifp fw0 Ifa 192.168.2.30 [SCOPED]
 }
 Remove old[1]: Net 0.0.0.0/0 Gate 192.168.2.1 Ifp en1 Ifa 192.168.2.50 [never] [SCOPED]
 Remove old[4]: Net 192.168.2.0/24 Ifp en1 Ifa 192.168.2.50 [last]
 Remove old[5]: Net 192.168.2.1/32 Ifp en1 Ifa 192.168.2.50 [last]
+Remove old[7]: Net 224.0.0.0/4 Ifp en1 Ifa 192.168.2.50 [last] [SCOPED]
+Remove old[9]: Net 255.255.255.255/32 Ifp en1 Ifa 192.168.2.50 [last] [SCOPED]
 Add new[6]: Net 10.0.0.1/32 Ifp en1 Ifa 10.0.0.20 [SCOPED]
 Add new[1]: Net 0.0.0.0/0 Gate 10.0.0.1 Ifp en1 Ifa 10.0.0.20 [SCOPED]
 Add new[8]: Net 192.168.2.1/32 Ifp fw0 Ifa 192.168.2.30
 Add new[2]: Net 0.0.0.0/0 Gate 192.168.2.1 Ifp fw0 Ifa 192.168.2.30 [SCOPED]
 Add new[4]: Net 10.0.0.0/24 Ifp en1 Ifa 10.0.0.20 [SCOPED]
 Add new[7]: Net 192.168.2.0/24 Ifp fw0 Ifa 192.168.2.30
+Add new[10]: Net 224.0.0.0/4 Ifp en1 Ifa 10.0.0.20 [SCOPED]
+Add new[11]: Net 224.0.0.0/4 Ifp fw0 Ifa 192.168.2.30 [SCOPED]
+Add new[13]: Net 255.255.255.255/32 Ifp en1 Ifa 10.0.0.20 [SCOPED]
+Add new[14]: Net 255.255.255.255/32 Ifp fw0 Ifa 192.168.2.30 [SCOPED]
 =================> Apply 'test17', 'test2' End <=================
 
 =================> Apply 'test2', 'test18' Begin <=================
-Old routes ('test2') = <IPv4RouteList[9]> = {
+Old routes ('test2') = <IPv4RouteList[15]> = {
  0. Net 0.0.0.0/0 Gate 10.0.0.1 Ifp en0 Ifa 10.0.0.10
  1. Net 0.0.0.0/0 Gate 10.0.0.1 Ifp en1 Ifa 10.0.0.20 [SCOPED]
  2. Net 0.0.0.0/0 Gate 192.168.2.1 Ifp fw0 Ifa 192.168.2.30 [SCOPED]
@@ -4520,6 +6460,12 @@ Old routes ('test2') = <IPv4RouteList[9]> = {
  6. Net 10.0.0.1/32 Ifp en1 Ifa 10.0.0.20 [SCOPED]
  7. Net 192.168.2.0/24 Ifp fw0 Ifa 192.168.2.30
  8. Net 192.168.2.1/32 Ifp fw0 Ifa 192.168.2.30
+ 9. Net 224.0.0.0/4 Ifp en0 Ifa 10.0.0.10
+10. Net 224.0.0.0/4 Ifp en1 Ifa 10.0.0.20 [SCOPED]
+11. Net 224.0.0.0/4 Ifp fw0 Ifa 192.168.2.30 [SCOPED]
+12. Net 255.255.255.255/32 Ifp en0 Ifa 10.0.0.10
+13. Net 255.255.255.255/32 Ifp en1 Ifa 10.0.0.20 [SCOPED]
+14. Net 255.255.255.255/32 Ifp fw0 Ifa 192.168.2.30 [SCOPED]
 }
 Add new[5]: Net 10.0.0.1/32 Ifp en0 Ifa 10.0.0.10
 Add new[0]: Net 0.0.0.0/0 Gate 10.0.0.1 Ifp en0 Ifa 10.0.0.10
@@ -4530,7 +6476,13 @@ Add new[2]: Net 0.0.0.0/0 Gate 192.168.2.1 Ifp fw0 Ifa 192.168.2.30 [SCOPED]
 Add new[3]: Net 10.0.0.0/24 Ifp en0 Ifa 10.0.0.10
 Add new[4]: Net 10.0.0.0/24 Ifp en1 Ifa 10.0.0.20 [SCOPED]
 Add new[7]: Net 192.168.2.0/24 Ifp fw0 Ifa 192.168.2.30
-New Routes ('test18') = <IPv4RouteList[14]> = {
+Add new[9]: Net 224.0.0.0/4 Ifp en0 Ifa 10.0.0.10
+Add new[10]: Net 224.0.0.0/4 Ifp en1 Ifa 10.0.0.20 [SCOPED]
+Add new[11]: Net 224.0.0.0/4 Ifp fw0 Ifa 192.168.2.30 [SCOPED]
+Add new[12]: Net 255.255.255.255/32 Ifp en0 Ifa 10.0.0.10
+Add new[13]: Net 255.255.255.255/32 Ifp en1 Ifa 10.0.0.20 [SCOPED]
+Add new[14]: Net 255.255.255.255/32 Ifp fw0 Ifa 192.168.2.30 [SCOPED]
+New Routes ('test18') = <IPv4RouteList[16]> = {
  0. Net 0.0.0.0/0 Gate 192.168.130.1 Ifp en0 Ifa 192.168.130.16
  1. Host 1.1.1.1 Gate 1.1.1.2 Ifp en0 Ifa 192.168.130.16
  2. Host 1.1.1.2 Gate 1.1.1.3 Ifp en0 Ifa 192.168.130.16
@@ -4545,6 +6497,8 @@ New Routes ('test18') = <IPv4RouteList[14]> = {
 11. Host 1.1.1.11 Gate 1.1.1.1 Ifp en0 Ifa 192.168.130.16
 12. Net 192.168.130.0/24 Ifp en0 Ifa 192.168.130.16
 13. Net 192.168.130.1/32 Ifp en0 Ifa 192.168.130.16
+14. Net 224.0.0.0/4 Ifp en0 Ifa 192.168.130.16
+15. Net 255.255.255.255/32 Ifp en0 Ifa 192.168.130.16
 }
 Remove old[0]: Net 0.0.0.0/0 Gate 10.0.0.1 Ifp en0 Ifa 10.0.0.10
 Remove old[1]: Net 0.0.0.0/0 Gate 10.0.0.1 Ifp en1 Ifa 10.0.0.20 [SCOPED]
@@ -4555,24 +6509,32 @@ Remove old[5]: Net 10.0.0.1/32 Ifp en0 Ifa 10.0.0.10
 Remove old[6]: Net 10.0.0.1/32 Ifp en1 Ifa 10.0.0.20 [SCOPED]
 Remove old[7]: Net 192.168.2.0/24 Ifp fw0 Ifa 192.168.2.30
 Remove old[8]: Net 192.168.2.1/32 Ifp fw0 Ifa 192.168.2.30
+Remove old[9]: Net 224.0.0.0/4 Ifp en0 Ifa 10.0.0.10
+Remove old[10]: Net 224.0.0.0/4 Ifp en1 Ifa 10.0.0.20 [SCOPED]
+Remove old[11]: Net 224.0.0.0/4 Ifp fw0 Ifa 192.168.2.30 [SCOPED]
+Remove old[12]: Net 255.255.255.255/32 Ifp en0 Ifa 10.0.0.10
+Remove old[13]: Net 255.255.255.255/32 Ifp en1 Ifa 10.0.0.20 [SCOPED]
+Remove old[14]: Net 255.255.255.255/32 Ifp fw0 Ifa 192.168.2.30 [SCOPED]
 Add new[13]: Net 192.168.130.1/32 Ifp en0 Ifa 192.168.130.16
 Add new[0]: Net 0.0.0.0/0 Gate 192.168.130.1 Ifp en0 Ifa 192.168.130.16
-IPMonitor RouteProcess: routing loop detected, not adding: Host 1.1.1.11 Gate 1.1.1.1 Ifp en0 Ifa 192.168.130.16
-IPMonitor RouteProcess: failed to add: Host 1.1.1.10 Gate 1.1.1.11 Ifp en0 Ifa 192.168.130.16
-IPMonitor RouteProcess: failed to add: Host 1.1.1.9 Gate 1.1.1.10 Ifp en0 Ifa 192.168.130.16
-IPMonitor RouteProcess: failed to add: Host 1.1.1.8 Gate 1.1.1.9 Ifp en0 Ifa 192.168.130.16
-IPMonitor RouteProcess: failed to add: Host 1.1.1.7 Gate 1.1.1.8 Ifp en0 Ifa 192.168.130.16
-IPMonitor RouteProcess: failed to add: Host 1.1.1.6 Gate 1.1.1.7 Ifp en0 Ifa 192.168.130.16
-IPMonitor RouteProcess: failed to add: Host 1.1.1.5 Gate 1.1.1.6 Ifp en0 Ifa 192.168.130.16
-IPMonitor RouteProcess: failed to add: Host 1.1.1.4 Gate 1.1.1.5 Ifp en0 Ifa 192.168.130.16
-IPMonitor RouteProcess: failed to add: Host 1.1.1.3 Gate 1.1.1.4 Ifp en0 Ifa 192.168.130.16
-IPMonitor RouteProcess: failed to add: Host 1.1.1.2 Gate 1.1.1.3 Ifp en0 Ifa 192.168.130.16
-IPMonitor RouteProcess: failed to add: Host 1.1.1.1 Gate 1.1.1.2 Ifp en0 Ifa 192.168.130.16
+routing loop detected, not adding: Host 1.1.1.11 Gate 1.1.1.1 Ifp en0 Ifa 192.168.130.16
+failed to add: Host 1.1.1.10 Gate 1.1.1.11 Ifp en0 Ifa 192.168.130.16
+failed to add: Host 1.1.1.9 Gate 1.1.1.10 Ifp en0 Ifa 192.168.130.16
+failed to add: Host 1.1.1.8 Gate 1.1.1.9 Ifp en0 Ifa 192.168.130.16
+failed to add: Host 1.1.1.7 Gate 1.1.1.8 Ifp en0 Ifa 192.168.130.16
+failed to add: Host 1.1.1.6 Gate 1.1.1.7 Ifp en0 Ifa 192.168.130.16
+failed to add: Host 1.1.1.5 Gate 1.1.1.6 Ifp en0 Ifa 192.168.130.16
+failed to add: Host 1.1.1.4 Gate 1.1.1.5 Ifp en0 Ifa 192.168.130.16
+failed to add: Host 1.1.1.3 Gate 1.1.1.4 Ifp en0 Ifa 192.168.130.16
+failed to add: Host 1.1.1.2 Gate 1.1.1.3 Ifp en0 Ifa 192.168.130.16
+failed to add: Host 1.1.1.1 Gate 1.1.1.2 Ifp en0 Ifa 192.168.130.16
 Add new[12]: Net 192.168.130.0/24 Ifp en0 Ifa 192.168.130.16
+Add new[14]: Net 224.0.0.0/4 Ifp en0 Ifa 192.168.130.16
+Add new[15]: Net 255.255.255.255/32 Ifp en0 Ifa 192.168.130.16
 =================> Apply 'test2', 'test18' End <=================
 
 =================> Apply 'test18', 'test2' Begin <=================
-Old routes ('test18') = <IPv4RouteList[14]> = {
+Old routes ('test18') = <IPv4RouteList[16]> = {
  0. Net 0.0.0.0/0 Gate 192.168.130.1 Ifp en0 Ifa 192.168.130.16
  1. Host 1.1.1.1 Gate 1.1.1.2 Ifp en0 Ifa 192.168.130.16
  2. Host 1.1.1.2 Gate 1.1.1.3 Ifp en0 Ifa 192.168.130.16
@@ -4587,22 +6549,26 @@ Old routes ('test18') = <IPv4RouteList[14]> = {
 11. Host 1.1.1.11 Gate 1.1.1.1 Ifp en0 Ifa 192.168.130.16
 12. Net 192.168.130.0/24 Ifp en0 Ifa 192.168.130.16
 13. Net 192.168.130.1/32 Ifp en0 Ifa 192.168.130.16
+14. Net 224.0.0.0/4 Ifp en0 Ifa 192.168.130.16
+15. Net 255.255.255.255/32 Ifp en0 Ifa 192.168.130.16
 }
 Add new[13]: Net 192.168.130.1/32 Ifp en0 Ifa 192.168.130.16
 Add new[0]: Net 0.0.0.0/0 Gate 192.168.130.1 Ifp en0 Ifa 192.168.130.16
-IPMonitor RouteProcess: routing loop detected, not adding: Host 1.1.1.11 Gate 1.1.1.1 Ifp en0 Ifa 192.168.130.16
-IPMonitor RouteProcess: failed to add: Host 1.1.1.10 Gate 1.1.1.11 Ifp en0 Ifa 192.168.130.16
-IPMonitor RouteProcess: failed to add: Host 1.1.1.9 Gate 1.1.1.10 Ifp en0 Ifa 192.168.130.16
-IPMonitor RouteProcess: failed to add: Host 1.1.1.8 Gate 1.1.1.9 Ifp en0 Ifa 192.168.130.16
-IPMonitor RouteProcess: failed to add: Host 1.1.1.7 Gate 1.1.1.8 Ifp en0 Ifa 192.168.130.16
-IPMonitor RouteProcess: failed to add: Host 1.1.1.6 Gate 1.1.1.7 Ifp en0 Ifa 192.168.130.16
-IPMonitor RouteProcess: failed to add: Host 1.1.1.5 Gate 1.1.1.6 Ifp en0 Ifa 192.168.130.16
-IPMonitor RouteProcess: failed to add: Host 1.1.1.4 Gate 1.1.1.5 Ifp en0 Ifa 192.168.130.16
-IPMonitor RouteProcess: failed to add: Host 1.1.1.3 Gate 1.1.1.4 Ifp en0 Ifa 192.168.130.16
-IPMonitor RouteProcess: failed to add: Host 1.1.1.2 Gate 1.1.1.3 Ifp en0 Ifa 192.168.130.16
-IPMonitor RouteProcess: failed to add: Host 1.1.1.1 Gate 1.1.1.2 Ifp en0 Ifa 192.168.130.16
+routing loop detected, not adding: Host 1.1.1.11 Gate 1.1.1.1 Ifp en0 Ifa 192.168.130.16
+failed to add: Host 1.1.1.10 Gate 1.1.1.11 Ifp en0 Ifa 192.168.130.16
+failed to add: Host 1.1.1.9 Gate 1.1.1.10 Ifp en0 Ifa 192.168.130.16
+failed to add: Host 1.1.1.8 Gate 1.1.1.9 Ifp en0 Ifa 192.168.130.16
+failed to add: Host 1.1.1.7 Gate 1.1.1.8 Ifp en0 Ifa 192.168.130.16
+failed to add: Host 1.1.1.6 Gate 1.1.1.7 Ifp en0 Ifa 192.168.130.16
+failed to add: Host 1.1.1.5 Gate 1.1.1.6 Ifp en0 Ifa 192.168.130.16
+failed to add: Host 1.1.1.4 Gate 1.1.1.5 Ifp en0 Ifa 192.168.130.16
+failed to add: Host 1.1.1.3 Gate 1.1.1.4 Ifp en0 Ifa 192.168.130.16
+failed to add: Host 1.1.1.2 Gate 1.1.1.3 Ifp en0 Ifa 192.168.130.16
+failed to add: Host 1.1.1.1 Gate 1.1.1.2 Ifp en0 Ifa 192.168.130.16
 Add new[12]: Net 192.168.130.0/24 Ifp en0 Ifa 192.168.130.16
-New Routes ('test2') = <IPv4RouteList[9]> = {
+Add new[14]: Net 224.0.0.0/4 Ifp en0 Ifa 192.168.130.16
+Add new[15]: Net 255.255.255.255/32 Ifp en0 Ifa 192.168.130.16
+New Routes ('test2') = <IPv4RouteList[15]> = {
  0. Net 0.0.0.0/0 Gate 10.0.0.1 Ifp en0 Ifa 10.0.0.10
  1. Net 0.0.0.0/0 Gate 10.0.0.1 Ifp en1 Ifa 10.0.0.20 [SCOPED]
  2. Net 0.0.0.0/0 Gate 192.168.2.1 Ifp fw0 Ifa 192.168.2.30 [SCOPED]
@@ -4612,10 +6578,18 @@ New Routes ('test2') = <IPv4RouteList[9]> = {
  6. Net 10.0.0.1/32 Ifp en1 Ifa 10.0.0.20 [SCOPED]
  7. Net 192.168.2.0/24 Ifp fw0 Ifa 192.168.2.30
  8. Net 192.168.2.1/32 Ifp fw0 Ifa 192.168.2.30
+ 9. Net 224.0.0.0/4 Ifp en0 Ifa 10.0.0.10
+10. Net 224.0.0.0/4 Ifp en1 Ifa 10.0.0.20 [SCOPED]
+11. Net 224.0.0.0/4 Ifp fw0 Ifa 192.168.2.30 [SCOPED]
+12. Net 255.255.255.255/32 Ifp en0 Ifa 10.0.0.10
+13. Net 255.255.255.255/32 Ifp en1 Ifa 10.0.0.20 [SCOPED]
+14. Net 255.255.255.255/32 Ifp fw0 Ifa 192.168.2.30 [SCOPED]
 }
 Remove old[0]: Net 0.0.0.0/0 Gate 192.168.130.1 Ifp en0 Ifa 192.168.130.16
 Remove old[12]: Net 192.168.130.0/24 Ifp en0 Ifa 192.168.130.16
 Remove old[13]: Net 192.168.130.1/32 Ifp en0 Ifa 192.168.130.16
+Remove old[14]: Net 224.0.0.0/4 Ifp en0 Ifa 192.168.130.16
+Remove old[15]: Net 255.255.255.255/32 Ifp en0 Ifa 192.168.130.16
 Add new[5]: Net 10.0.0.1/32 Ifp en0 Ifa 10.0.0.10
 Add new[0]: Net 0.0.0.0/0 Gate 10.0.0.1 Ifp en0 Ifa 10.0.0.10
 Add new[6]: Net 10.0.0.1/32 Ifp en1 Ifa 10.0.0.20 [SCOPED]
@@ -4625,10 +6599,16 @@ Add new[2]: Net 0.0.0.0/0 Gate 192.168.2.1 Ifp fw0 Ifa 192.168.2.30 [SCOPED]
 Add new[3]: Net 10.0.0.0/24 Ifp en0 Ifa 10.0.0.10
 Add new[4]: Net 10.0.0.0/24 Ifp en1 Ifa 10.0.0.20 [SCOPED]
 Add new[7]: Net 192.168.2.0/24 Ifp fw0 Ifa 192.168.2.30
+Add new[9]: Net 224.0.0.0/4 Ifp en0 Ifa 10.0.0.10
+Add new[10]: Net 224.0.0.0/4 Ifp en1 Ifa 10.0.0.20 [SCOPED]
+Add new[11]: Net 224.0.0.0/4 Ifp fw0 Ifa 192.168.2.30 [SCOPED]
+Add new[12]: Net 255.255.255.255/32 Ifp en0 Ifa 10.0.0.10
+Add new[13]: Net 255.255.255.255/32 Ifp en1 Ifa 10.0.0.20 [SCOPED]
+Add new[14]: Net 255.255.255.255/32 Ifp fw0 Ifa 192.168.2.30 [SCOPED]
 =================> Apply 'test18', 'test2' End <=================
 
 =================> Apply 'test3', 'test4' Begin <=================
-Old routes ('test3') = <IPv4RouteList[15]> = {
+Old routes ('test3') = <IPv4RouteList[21]> = {
  0. Net 0.0.0.0/0 Gate 10.0.0.1 Ifp en0 Ifa 10.0.0.10
  1. Net 0.0.0.0/0 Gate 10.0.0.1 Ifp en1 Ifa 10.0.0.20 [SCOPED]
  2. Net 0.0.0.0/0 Gate 192.168.3.1 Ifp fw0 Ifa 192.168.3.30 [SCOPED]
@@ -4644,6 +6624,12 @@ Old routes ('test3') = <IPv4RouteList[15]> = {
 12. Net 192.168.2.1/32 Ifp en1 Ifa 192.168.2.20 [SCOPED]
 13. Net 192.168.3.0/24 Ifp fw0 Ifa 192.168.3.30
 14. Net 192.168.3.1/32 Ifp fw0 Ifa 192.168.3.30
+15. Net 224.0.0.0/4 Ifp en0 Ifa 10.0.0.10
+16. Net 224.0.0.0/4 Ifp en1 Ifa 10.0.0.20 [SCOPED]
+17. Net 224.0.0.0/4 Ifp fw0 Ifa 192.168.3.30 [SCOPED]
+18. Net 255.255.255.255/32 Ifp en0 Ifa 10.0.0.10
+19. Net 255.255.255.255/32 Ifp en1 Ifa 10.0.0.20 [SCOPED]
+20. Net 255.255.255.255/32 Ifp fw0 Ifa 192.168.3.30 [SCOPED]
 }
 Add new[5]: Net 10.0.0.1/32 Ifp en0 Ifa 10.0.0.10
 Add new[0]: Net 0.0.0.0/0 Gate 10.0.0.1 Ifp en0 Ifa 10.0.0.10
@@ -4660,7 +6646,13 @@ Add new[10]: Net 192.168.2.1/32 Ifp fw0 Ifa 192.168.2.30
 Add new[11]: Net 192.168.2.1/32 Ifp en0 Ifa 192.168.2.10 [SCOPED]
 Add new[12]: Net 192.168.2.1/32 Ifp en1 Ifa 192.168.2.20 [SCOPED]
 Add new[13]: Net 192.168.3.0/24 Ifp fw0 Ifa 192.168.3.30
-New Routes ('test4') = <IPv4RouteList[10]> = {
+Add new[15]: Net 224.0.0.0/4 Ifp en0 Ifa 10.0.0.10
+Add new[16]: Net 224.0.0.0/4 Ifp en1 Ifa 10.0.0.20 [SCOPED]
+Add new[17]: Net 224.0.0.0/4 Ifp fw0 Ifa 192.168.3.30 [SCOPED]
+Add new[18]: Net 255.255.255.255/32 Ifp en0 Ifa 10.0.0.10
+Add new[19]: Net 255.255.255.255/32 Ifp en1 Ifa 10.0.0.20 [SCOPED]
+Add new[20]: Net 255.255.255.255/32 Ifp fw0 Ifa 192.168.3.30 [SCOPED]
+New Routes ('test4') = <IPv4RouteList[14]> = {
  0. Net 0.0.0.0/0 Gate 17.202.20.1 Ifp en0 Ifa 17.202.40.191
  1. Net 0.0.0.0/0 Gate 17.202.20.1 Ifp en1 Ifa 17.202.42.24 [SCOPED]
  2. Net 10.0.0.0/24 Ifp en1 Ifa 10.0.0.20
@@ -4671,6 +6663,10 @@ New Routes ('test4') = <IPv4RouteList[10]> = {
  7. Net 17.202.20.1/32 Ifp en1 Ifa 17.202.42.24 [SCOPED]
  8. Net 17.202.40.0/22 Ifp en0 Ifa 17.202.40.191
  9. Net 17.202.40.0/22 Ifp en1 Ifa 17.202.42.24 [SCOPED]
+10. Net 224.0.0.0/4 Ifp en0 Ifa 17.202.40.191
+11. Net 224.0.0.0/4 Ifp en1 Ifa 17.202.42.24 [SCOPED]
+12. Net 255.255.255.255/32 Ifp en0 Ifa 17.202.40.191
+13. Net 255.255.255.255/32 Ifp en1 Ifa 17.202.42.24 [SCOPED]
 }
 Remove old[0]: Net 0.0.0.0/0 Gate 10.0.0.1 Ifp en0 Ifa 10.0.0.10
 Remove old[1]: Net 0.0.0.0/0 Gate 10.0.0.1 Ifp en1 Ifa 10.0.0.20 [SCOPED]
@@ -4687,6 +6683,12 @@ Remove old[11]: Net 192.168.2.1/32 Ifp en0 Ifa 192.168.2.10 [SCOPED]
 Remove old[12]: Net 192.168.2.1/32 Ifp en1 Ifa 192.168.2.20 [SCOPED]
 Remove old[13]: Net 192.168.3.0/24 Ifp fw0 Ifa 192.168.3.30
 Remove old[14]: Net 192.168.3.1/32 Ifp fw0 Ifa 192.168.3.30
+Remove old[15]: Net 224.0.0.0/4 Ifp en0 Ifa 10.0.0.10
+Remove old[16]: Net 224.0.0.0/4 Ifp en1 Ifa 10.0.0.20 [SCOPED]
+Remove old[17]: Net 224.0.0.0/4 Ifp fw0 Ifa 192.168.3.30 [SCOPED]
+Remove old[18]: Net 255.255.255.255/32 Ifp en0 Ifa 10.0.0.10
+Remove old[19]: Net 255.255.255.255/32 Ifp en1 Ifa 10.0.0.20 [SCOPED]
+Remove old[20]: Net 255.255.255.255/32 Ifp fw0 Ifa 192.168.3.30 [SCOPED]
 Add new[6]: Net 17.202.20.1/32 Ifp en0 Ifa 17.202.40.191
 Add new[0]: Net 0.0.0.0/0 Gate 17.202.20.1 Ifp en0 Ifa 17.202.40.191
 Add new[7]: Net 17.202.20.1/32 Ifp en1 Ifa 17.202.42.24 [SCOPED]
@@ -4697,10 +6699,14 @@ Add new[4]: Net 10.0.0.1/32 Ifp en1 Ifa 10.0.0.20
 Add new[5]: Net 10.0.0.1/32 Ifp en0 Ifa 10.0.0.11 [SCOPED]
 Add new[8]: Net 17.202.40.0/22 Ifp en0 Ifa 17.202.40.191
 Add new[9]: Net 17.202.40.0/22 Ifp en1 Ifa 17.202.42.24 [SCOPED]
+Add new[10]: Net 224.0.0.0/4 Ifp en0 Ifa 17.202.40.191
+Add new[11]: Net 224.0.0.0/4 Ifp en1 Ifa 17.202.42.24 [SCOPED]
+Add new[12]: Net 255.255.255.255/32 Ifp en0 Ifa 17.202.40.191
+Add new[13]: Net 255.255.255.255/32 Ifp en1 Ifa 17.202.42.24 [SCOPED]
 =================> Apply 'test3', 'test4' End <=================
 
 =================> Apply 'test4', 'test3' Begin <=================
-Old routes ('test4') = <IPv4RouteList[10]> = {
+Old routes ('test4') = <IPv4RouteList[14]> = {
  0. Net 0.0.0.0/0 Gate 17.202.20.1 Ifp en0 Ifa 17.202.40.191
  1. Net 0.0.0.0/0 Gate 17.202.20.1 Ifp en1 Ifa 17.202.42.24 [SCOPED]
  2. Net 10.0.0.0/24 Ifp en1 Ifa 10.0.0.20
@@ -4711,6 +6717,10 @@ Old routes ('test4') = <IPv4RouteList[10]> = {
  7. Net 17.202.20.1/32 Ifp en1 Ifa 17.202.42.24 [SCOPED]
  8. Net 17.202.40.0/22 Ifp en0 Ifa 17.202.40.191
  9. Net 17.202.40.0/22 Ifp en1 Ifa 17.202.42.24 [SCOPED]
+10. Net 224.0.0.0/4 Ifp en0 Ifa 17.202.40.191
+11. Net 224.0.0.0/4 Ifp en1 Ifa 17.202.42.24 [SCOPED]
+12. Net 255.255.255.255/32 Ifp en0 Ifa 17.202.40.191
+13. Net 255.255.255.255/32 Ifp en1 Ifa 17.202.42.24 [SCOPED]
 }
 Add new[6]: Net 17.202.20.1/32 Ifp en0 Ifa 17.202.40.191
 Add new[0]: Net 0.0.0.0/0 Gate 17.202.20.1 Ifp en0 Ifa 17.202.40.191
@@ -4722,7 +6732,11 @@ Add new[4]: Net 10.0.0.1/32 Ifp en1 Ifa 10.0.0.20
 Add new[5]: Net 10.0.0.1/32 Ifp en0 Ifa 10.0.0.11 [SCOPED]
 Add new[8]: Net 17.202.40.0/22 Ifp en0 Ifa 17.202.40.191
 Add new[9]: Net 17.202.40.0/22 Ifp en1 Ifa 17.202.42.24 [SCOPED]
-New Routes ('test3') = <IPv4RouteList[15]> = {
+Add new[10]: Net 224.0.0.0/4 Ifp en0 Ifa 17.202.40.191
+Add new[11]: Net 224.0.0.0/4 Ifp en1 Ifa 17.202.42.24 [SCOPED]
+Add new[12]: Net 255.255.255.255/32 Ifp en0 Ifa 17.202.40.191
+Add new[13]: Net 255.255.255.255/32 Ifp en1 Ifa 17.202.42.24 [SCOPED]
+New Routes ('test3') = <IPv4RouteList[21]> = {
  0. Net 0.0.0.0/0 Gate 10.0.0.1 Ifp en0 Ifa 10.0.0.10
  1. Net 0.0.0.0/0 Gate 10.0.0.1 Ifp en1 Ifa 10.0.0.20 [SCOPED]
  2. Net 0.0.0.0/0 Gate 192.168.3.1 Ifp fw0 Ifa 192.168.3.30 [SCOPED]
@@ -4738,6 +6752,12 @@ New Routes ('test3') = <IPv4RouteList[15]> = {
 12. Net 192.168.2.1/32 Ifp en1 Ifa 192.168.2.20 [SCOPED]
 13. Net 192.168.3.0/24 Ifp fw0 Ifa 192.168.3.30
 14. Net 192.168.3.1/32 Ifp fw0 Ifa 192.168.3.30
+15. Net 224.0.0.0/4 Ifp en0 Ifa 10.0.0.10
+16. Net 224.0.0.0/4 Ifp en1 Ifa 10.0.0.20 [SCOPED]
+17. Net 224.0.0.0/4 Ifp fw0 Ifa 192.168.3.30 [SCOPED]
+18. Net 255.255.255.255/32 Ifp en0 Ifa 10.0.0.10
+19. Net 255.255.255.255/32 Ifp en1 Ifa 10.0.0.20 [SCOPED]
+20. Net 255.255.255.255/32 Ifp fw0 Ifa 192.168.3.30 [SCOPED]
 }
 Remove old[0]: Net 0.0.0.0/0 Gate 17.202.20.1 Ifp en0 Ifa 17.202.40.191
 Remove old[1]: Net 0.0.0.0/0 Gate 17.202.20.1 Ifp en1 Ifa 17.202.42.24 [SCOPED]
@@ -4749,6 +6769,10 @@ Remove old[6]: Net 17.202.20.1/32 Ifp en0 Ifa 17.202.40.191
 Remove old[7]: Net 17.202.20.1/32 Ifp en1 Ifa 17.202.42.24 [SCOPED]
 Remove old[8]: Net 17.202.40.0/22 Ifp en0 Ifa 17.202.40.191
 Remove old[9]: Net 17.202.40.0/22 Ifp en1 Ifa 17.202.42.24 [SCOPED]
+Remove old[10]: Net 224.0.0.0/4 Ifp en0 Ifa 17.202.40.191
+Remove old[11]: Net 224.0.0.0/4 Ifp en1 Ifa 17.202.42.24 [SCOPED]
+Remove old[12]: Net 255.255.255.255/32 Ifp en0 Ifa 17.202.40.191
+Remove old[13]: Net 255.255.255.255/32 Ifp en1 Ifa 17.202.42.24 [SCOPED]
 Add new[5]: Net 10.0.0.1/32 Ifp en0 Ifa 10.0.0.10
 Add new[0]: Net 0.0.0.0/0 Gate 10.0.0.1 Ifp en0 Ifa 10.0.0.10
 Add new[6]: Net 10.0.0.1/32 Ifp en1 Ifa 10.0.0.20 [SCOPED]
@@ -4764,10 +6788,16 @@ Add new[10]: Net 192.168.2.1/32 Ifp fw0 Ifa 192.168.2.30
 Add new[11]: Net 192.168.2.1/32 Ifp en0 Ifa 192.168.2.10 [SCOPED]
 Add new[12]: Net 192.168.2.1/32 Ifp en1 Ifa 192.168.2.20 [SCOPED]
 Add new[13]: Net 192.168.3.0/24 Ifp fw0 Ifa 192.168.3.30
+Add new[15]: Net 224.0.0.0/4 Ifp en0 Ifa 10.0.0.10
+Add new[16]: Net 224.0.0.0/4 Ifp en1 Ifa 10.0.0.20 [SCOPED]
+Add new[17]: Net 224.0.0.0/4 Ifp fw0 Ifa 192.168.3.30 [SCOPED]
+Add new[18]: Net 255.255.255.255/32 Ifp en0 Ifa 10.0.0.10
+Add new[19]: Net 255.255.255.255/32 Ifp en1 Ifa 10.0.0.20 [SCOPED]
+Add new[20]: Net 255.255.255.255/32 Ifp fw0 Ifa 192.168.3.30 [SCOPED]
 =================> Apply 'test4', 'test3' End <=================
 
 =================> Apply 'test3', 'test5' Begin <=================
-Old routes ('test3') = <IPv4RouteList[15]> = {
+Old routes ('test3') = <IPv4RouteList[21]> = {
  0. Net 0.0.0.0/0 Gate 10.0.0.1 Ifp en0 Ifa 10.0.0.10
  1. Net 0.0.0.0/0 Gate 10.0.0.1 Ifp en1 Ifa 10.0.0.20 [SCOPED]
  2. Net 0.0.0.0/0 Gate 192.168.3.1 Ifp fw0 Ifa 192.168.3.30 [SCOPED]
@@ -4783,6 +6813,12 @@ Old routes ('test3') = <IPv4RouteList[15]> = {
 12. Net 192.168.2.1/32 Ifp en1 Ifa 192.168.2.20 [SCOPED]
 13. Net 192.168.3.0/24 Ifp fw0 Ifa 192.168.3.30
 14. Net 192.168.3.1/32 Ifp fw0 Ifa 192.168.3.30
+15. Net 224.0.0.0/4 Ifp en0 Ifa 10.0.0.10
+16. Net 224.0.0.0/4 Ifp en1 Ifa 10.0.0.20 [SCOPED]
+17. Net 224.0.0.0/4 Ifp fw0 Ifa 192.168.3.30 [SCOPED]
+18. Net 255.255.255.255/32 Ifp en0 Ifa 10.0.0.10
+19. Net 255.255.255.255/32 Ifp en1 Ifa 10.0.0.20 [SCOPED]
+20. Net 255.255.255.255/32 Ifp fw0 Ifa 192.168.3.30 [SCOPED]
 }
 Add new[5]: Net 10.0.0.1/32 Ifp en0 Ifa 10.0.0.10
 Add new[0]: Net 0.0.0.0/0 Gate 10.0.0.1 Ifp en0 Ifa 10.0.0.10
@@ -4799,7 +6835,13 @@ Add new[10]: Net 192.168.2.1/32 Ifp fw0 Ifa 192.168.2.30
 Add new[11]: Net 192.168.2.1/32 Ifp en0 Ifa 192.168.2.10 [SCOPED]
 Add new[12]: Net 192.168.2.1/32 Ifp en1 Ifa 192.168.2.20 [SCOPED]
 Add new[13]: Net 192.168.3.0/24 Ifp fw0 Ifa 192.168.3.30
-New Routes ('test5') = <IPv4RouteList[12]> = {
+Add new[15]: Net 224.0.0.0/4 Ifp en0 Ifa 10.0.0.10
+Add new[16]: Net 224.0.0.0/4 Ifp en1 Ifa 10.0.0.20 [SCOPED]
+Add new[17]: Net 224.0.0.0/4 Ifp fw0 Ifa 192.168.3.30 [SCOPED]
+Add new[18]: Net 255.255.255.255/32 Ifp en0 Ifa 10.0.0.10
+Add new[19]: Net 255.255.255.255/32 Ifp en1 Ifa 10.0.0.20 [SCOPED]
+Add new[20]: Net 255.255.255.255/32 Ifp fw0 Ifa 192.168.3.30 [SCOPED]
+New Routes ('test5') = <IPv4RouteList[18]> = {
  0. Net 0.0.0.0/0 Gate 17.219.156.1 Ifp ppp0 Ifa 17.219.156.22
  1. Net 0.0.0.0/0 Gate 17.202.20.1 Ifp en0 Ifa 17.202.40.191 [SCOPED]
  2. Net 0.0.0.0/0 Gate 17.202.20.1 Ifp en1 Ifa 17.202.42.24 [SCOPED]
@@ -4812,6 +6854,12 @@ New Routes ('test5') = <IPv4RouteList[12]> = {
  9. Net 17.202.40.0/22 Ifp en0 Ifa 17.202.40.191
 10. Net 17.202.40.0/22 Ifp en1 Ifa 17.202.42.24 [SCOPED]
 11. Net 17.219.156.1/32 Ifp ppp0 Ifa 17.219.156.22
+12. Net 224.0.0.0/4 Ifp ppp0 Ifa 17.219.156.22
+13. Net 224.0.0.0/4 Ifp en0 Ifa 17.202.40.191 [SCOPED]
+14. Net 224.0.0.0/4 Ifp en1 Ifa 17.202.42.24 [SCOPED]
+15. Net 255.255.255.255/32 Ifp ppp0 Ifa 17.219.156.22
+16. Net 255.255.255.255/32 Ifp en0 Ifa 17.202.40.191 [SCOPED]
+17. Net 255.255.255.255/32 Ifp en1 Ifa 17.202.42.24 [SCOPED]
 }
 Remove old[0]: Net 0.0.0.0/0 Gate 10.0.0.1 Ifp en0 Ifa 10.0.0.10
 Remove old[1]: Net 0.0.0.0/0 Gate 10.0.0.1 Ifp en1 Ifa 10.0.0.20 [SCOPED]
@@ -4828,6 +6876,12 @@ Remove old[11]: Net 192.168.2.1/32 Ifp en0 Ifa 192.168.2.10 [SCOPED]
 Remove old[12]: Net 192.168.2.1/32 Ifp en1 Ifa 192.168.2.20 [SCOPED]
 Remove old[13]: Net 192.168.3.0/24 Ifp fw0 Ifa 192.168.3.30
 Remove old[14]: Net 192.168.3.1/32 Ifp fw0 Ifa 192.168.3.30
+Remove old[15]: Net 224.0.0.0/4 Ifp en0 Ifa 10.0.0.10
+Remove old[16]: Net 224.0.0.0/4 Ifp en1 Ifa 10.0.0.20 [SCOPED]
+Remove old[17]: Net 224.0.0.0/4 Ifp fw0 Ifa 192.168.3.30 [SCOPED]
+Remove old[18]: Net 255.255.255.255/32 Ifp en0 Ifa 10.0.0.10
+Remove old[19]: Net 255.255.255.255/32 Ifp en1 Ifa 10.0.0.20 [SCOPED]
+Remove old[20]: Net 255.255.255.255/32 Ifp fw0 Ifa 192.168.3.30 [SCOPED]
 Add new[11]: Net 17.219.156.1/32 Ifp ppp0 Ifa 17.219.156.22
 Add new[0]: Net 0.0.0.0/0 Gate 17.219.156.1 Ifp ppp0 Ifa 17.219.156.22
 Add new[7]: Net 17.202.20.1/32 Ifp en0 Ifa 17.202.40.191
@@ -4840,10 +6894,16 @@ Add new[5]: Net 10.0.0.1/32 Ifp en1 Ifa 10.0.0.20
 Add new[6]: Net 10.0.0.1/32 Ifp en0 Ifa 10.0.0.11 [SCOPED]
 Add new[9]: Net 17.202.40.0/22 Ifp en0 Ifa 17.202.40.191
 Add new[10]: Net 17.202.40.0/22 Ifp en1 Ifa 17.202.42.24 [SCOPED]
+Add new[12]: Net 224.0.0.0/4 Ifp ppp0 Ifa 17.219.156.22
+Add new[13]: Net 224.0.0.0/4 Ifp en0 Ifa 17.202.40.191 [SCOPED]
+Add new[14]: Net 224.0.0.0/4 Ifp en1 Ifa 17.202.42.24 [SCOPED]
+Add new[15]: Net 255.255.255.255/32 Ifp ppp0 Ifa 17.219.156.22
+Add new[16]: Net 255.255.255.255/32 Ifp en0 Ifa 17.202.40.191 [SCOPED]
+Add new[17]: Net 255.255.255.255/32 Ifp en1 Ifa 17.202.42.24 [SCOPED]
 =================> Apply 'test3', 'test5' End <=================
 
 =================> Apply 'test5', 'test3' Begin <=================
-Old routes ('test5') = <IPv4RouteList[12]> = {
+Old routes ('test5') = <IPv4RouteList[18]> = {
  0. Net 0.0.0.0/0 Gate 17.219.156.1 Ifp ppp0 Ifa 17.219.156.22
  1. Net 0.0.0.0/0 Gate 17.202.20.1 Ifp en0 Ifa 17.202.40.191 [SCOPED]
  2. Net 0.0.0.0/0 Gate 17.202.20.1 Ifp en1 Ifa 17.202.42.24 [SCOPED]
@@ -4856,6 +6916,12 @@ Old routes ('test5') = <IPv4RouteList[12]> = {
  9. Net 17.202.40.0/22 Ifp en0 Ifa 17.202.40.191
 10. Net 17.202.40.0/22 Ifp en1 Ifa 17.202.42.24 [SCOPED]
 11. Net 17.219.156.1/32 Ifp ppp0 Ifa 17.219.156.22
+12. Net 224.0.0.0/4 Ifp ppp0 Ifa 17.219.156.22
+13. Net 224.0.0.0/4 Ifp en0 Ifa 17.202.40.191 [SCOPED]
+14. Net 224.0.0.0/4 Ifp en1 Ifa 17.202.42.24 [SCOPED]
+15. Net 255.255.255.255/32 Ifp ppp0 Ifa 17.219.156.22
+16. Net 255.255.255.255/32 Ifp en0 Ifa 17.202.40.191 [SCOPED]
+17. Net 255.255.255.255/32 Ifp en1 Ifa 17.202.42.24 [SCOPED]
 }
 Add new[11]: Net 17.219.156.1/32 Ifp ppp0 Ifa 17.219.156.22
 Add new[0]: Net 0.0.0.0/0 Gate 17.219.156.1 Ifp ppp0 Ifa 17.219.156.22
@@ -4869,7 +6935,13 @@ Add new[5]: Net 10.0.0.1/32 Ifp en1 Ifa 10.0.0.20
 Add new[6]: Net 10.0.0.1/32 Ifp en0 Ifa 10.0.0.11 [SCOPED]
 Add new[9]: Net 17.202.40.0/22 Ifp en0 Ifa 17.202.40.191
 Add new[10]: Net 17.202.40.0/22 Ifp en1 Ifa 17.202.42.24 [SCOPED]
-New Routes ('test3') = <IPv4RouteList[15]> = {
+Add new[12]: Net 224.0.0.0/4 Ifp ppp0 Ifa 17.219.156.22
+Add new[13]: Net 224.0.0.0/4 Ifp en0 Ifa 17.202.40.191 [SCOPED]
+Add new[14]: Net 224.0.0.0/4 Ifp en1 Ifa 17.202.42.24 [SCOPED]
+Add new[15]: Net 255.255.255.255/32 Ifp ppp0 Ifa 17.219.156.22
+Add new[16]: Net 255.255.255.255/32 Ifp en0 Ifa 17.202.40.191 [SCOPED]
+Add new[17]: Net 255.255.255.255/32 Ifp en1 Ifa 17.202.42.24 [SCOPED]
+New Routes ('test3') = <IPv4RouteList[21]> = {
  0. Net 0.0.0.0/0 Gate 10.0.0.1 Ifp en0 Ifa 10.0.0.10
  1. Net 0.0.0.0/0 Gate 10.0.0.1 Ifp en1 Ifa 10.0.0.20 [SCOPED]
  2. Net 0.0.0.0/0 Gate 192.168.3.1 Ifp fw0 Ifa 192.168.3.30 [SCOPED]
@@ -4885,6 +6957,12 @@ New Routes ('test3') = <IPv4RouteList[15]> = {
 12. Net 192.168.2.1/32 Ifp en1 Ifa 192.168.2.20 [SCOPED]
 13. Net 192.168.3.0/24 Ifp fw0 Ifa 192.168.3.30
 14. Net 192.168.3.1/32 Ifp fw0 Ifa 192.168.3.30
+15. Net 224.0.0.0/4 Ifp en0 Ifa 10.0.0.10
+16. Net 224.0.0.0/4 Ifp en1 Ifa 10.0.0.20 [SCOPED]
+17. Net 224.0.0.0/4 Ifp fw0 Ifa 192.168.3.30 [SCOPED]
+18. Net 255.255.255.255/32 Ifp en0 Ifa 10.0.0.10
+19. Net 255.255.255.255/32 Ifp en1 Ifa 10.0.0.20 [SCOPED]
+20. Net 255.255.255.255/32 Ifp fw0 Ifa 192.168.3.30 [SCOPED]
 }
 Remove old[0]: Net 0.0.0.0/0 Gate 17.219.156.1 Ifp ppp0 Ifa 17.219.156.22
 Remove old[1]: Net 0.0.0.0/0 Gate 17.202.20.1 Ifp en0 Ifa 17.202.40.191 [SCOPED]
@@ -4898,6 +6976,12 @@ Remove old[8]: Net 17.202.20.1/32 Ifp en1 Ifa 17.202.42.24 [SCOPED]
 Remove old[9]: Net 17.202.40.0/22 Ifp en0 Ifa 17.202.40.191
 Remove old[10]: Net 17.202.40.0/22 Ifp en1 Ifa 17.202.42.24 [SCOPED]
 Remove old[11]: Net 17.219.156.1/32 Ifp ppp0 Ifa 17.219.156.22
+Remove old[12]: Net 224.0.0.0/4 Ifp ppp0 Ifa 17.219.156.22
+Remove old[13]: Net 224.0.0.0/4 Ifp en0 Ifa 17.202.40.191 [SCOPED]
+Remove old[14]: Net 224.0.0.0/4 Ifp en1 Ifa 17.202.42.24 [SCOPED]
+Remove old[15]: Net 255.255.255.255/32 Ifp ppp0 Ifa 17.219.156.22
+Remove old[16]: Net 255.255.255.255/32 Ifp en0 Ifa 17.202.40.191 [SCOPED]
+Remove old[17]: Net 255.255.255.255/32 Ifp en1 Ifa 17.202.42.24 [SCOPED]
 Add new[5]: Net 10.0.0.1/32 Ifp en0 Ifa 10.0.0.10
 Add new[0]: Net 0.0.0.0/0 Gate 10.0.0.1 Ifp en0 Ifa 10.0.0.10
 Add new[6]: Net 10.0.0.1/32 Ifp en1 Ifa 10.0.0.20 [SCOPED]
@@ -4913,10 +6997,16 @@ Add new[10]: Net 192.168.2.1/32 Ifp fw0 Ifa 192.168.2.30
 Add new[11]: Net 192.168.2.1/32 Ifp en0 Ifa 192.168.2.10 [SCOPED]
 Add new[12]: Net 192.168.2.1/32 Ifp en1 Ifa 192.168.2.20 [SCOPED]
 Add new[13]: Net 192.168.3.0/24 Ifp fw0 Ifa 192.168.3.30
+Add new[15]: Net 224.0.0.0/4 Ifp en0 Ifa 10.0.0.10
+Add new[16]: Net 224.0.0.0/4 Ifp en1 Ifa 10.0.0.20 [SCOPED]
+Add new[17]: Net 224.0.0.0/4 Ifp fw0 Ifa 192.168.3.30 [SCOPED]
+Add new[18]: Net 255.255.255.255/32 Ifp en0 Ifa 10.0.0.10
+Add new[19]: Net 255.255.255.255/32 Ifp en1 Ifa 10.0.0.20 [SCOPED]
+Add new[20]: Net 255.255.255.255/32 Ifp fw0 Ifa 192.168.3.30 [SCOPED]
 =================> Apply 'test5', 'test3' End <=================
 
 =================> Apply 'test3', 'test6' Begin <=================
-Old routes ('test3') = <IPv4RouteList[15]> = {
+Old routes ('test3') = <IPv4RouteList[21]> = {
  0. Net 0.0.0.0/0 Gate 10.0.0.1 Ifp en0 Ifa 10.0.0.10
  1. Net 0.0.0.0/0 Gate 10.0.0.1 Ifp en1 Ifa 10.0.0.20 [SCOPED]
  2. Net 0.0.0.0/0 Gate 192.168.3.1 Ifp fw0 Ifa 192.168.3.30 [SCOPED]
@@ -4932,6 +7022,12 @@ Old routes ('test3') = <IPv4RouteList[15]> = {
 12. Net 192.168.2.1/32 Ifp en1 Ifa 192.168.2.20 [SCOPED]
 13. Net 192.168.3.0/24 Ifp fw0 Ifa 192.168.3.30
 14. Net 192.168.3.1/32 Ifp fw0 Ifa 192.168.3.30
+15. Net 224.0.0.0/4 Ifp en0 Ifa 10.0.0.10
+16. Net 224.0.0.0/4 Ifp en1 Ifa 10.0.0.20 [SCOPED]
+17. Net 224.0.0.0/4 Ifp fw0 Ifa 192.168.3.30 [SCOPED]
+18. Net 255.255.255.255/32 Ifp en0 Ifa 10.0.0.10
+19. Net 255.255.255.255/32 Ifp en1 Ifa 10.0.0.20 [SCOPED]
+20. Net 255.255.255.255/32 Ifp fw0 Ifa 192.168.3.30 [SCOPED]
 }
 Add new[5]: Net 10.0.0.1/32 Ifp en0 Ifa 10.0.0.10
 Add new[0]: Net 0.0.0.0/0 Gate 10.0.0.1 Ifp en0 Ifa 10.0.0.10
@@ -4948,17 +7044,31 @@ Add new[10]: Net 192.168.2.1/32 Ifp fw0 Ifa 192.168.2.30
 Add new[11]: Net 192.168.2.1/32 Ifp en0 Ifa 192.168.2.10 [SCOPED]
 Add new[12]: Net 192.168.2.1/32 Ifp en1 Ifa 192.168.2.20 [SCOPED]
 Add new[13]: Net 192.168.3.0/24 Ifp fw0 Ifa 192.168.3.30
-New Routes ('test6') = <IPv4RouteList[10]> = {
+Add new[15]: Net 224.0.0.0/4 Ifp en0 Ifa 10.0.0.10
+Add new[16]: Net 224.0.0.0/4 Ifp en1 Ifa 10.0.0.20 [SCOPED]
+Add new[17]: Net 224.0.0.0/4 Ifp fw0 Ifa 192.168.3.30 [SCOPED]
+Add new[18]: Net 255.255.255.255/32 Ifp en0 Ifa 10.0.0.10
+Add new[19]: Net 255.255.255.255/32 Ifp en1 Ifa 10.0.0.20 [SCOPED]
+Add new[20]: Net 255.255.255.255/32 Ifp fw0 Ifa 192.168.3.30 [SCOPED]
+New Routes ('test6') = <IPv4RouteList[18]> = {
  0. Net 0.0.0.0/0 Gate 17.255.96.1 Ifp en2 Ifa 17.255.98.164
  1. Net 0.0.0.0/0 Gate 17.202.40.1 Ifp en0 Ifa 17.202.42.113 [SCOPED]
  2. Net 0.0.0.0/0 Gate 17.202.40.1 Ifp en1 Ifa 17.202.42.111 [SCOPED]
- 3. Net 0.0.0.0/0 Ifp fw0 Ifa 169.254.11.33 [SCOPED]
- 4. Net 17.202.40.0/22 Ifp en0 Ifa 17.202.42.113
- 5. Net 17.202.40.0/22 Ifp en1 Ifa 17.202.42.111 [SCOPED]
- 6. Net 17.202.40.1/32 Ifp en0 Ifa 17.202.42.113
- 7. Net 17.202.40.1/32 Ifp en1 Ifa 17.202.42.111 [SCOPED]
- 8. Net 17.255.96.0/20 Ifp en2 Ifa 17.255.98.164
- 9. Net 17.255.96.1/32 Ifp en2 Ifa 17.255.98.164
+ 3. Net 17.202.40.0/22 Ifp en0 Ifa 17.202.42.113
+ 4. Net 17.202.40.0/22 Ifp en1 Ifa 17.202.42.111 [SCOPED]
+ 5. Net 17.202.40.1/32 Ifp en0 Ifa 17.202.42.113
+ 6. Net 17.202.40.1/32 Ifp en1 Ifa 17.202.42.111 [SCOPED]
+ 7. Net 17.255.96.0/20 Ifp en2 Ifa 17.255.98.164
+ 8. Net 17.255.96.1/32 Ifp en2 Ifa 17.255.98.164
+ 9. Net 169.254.0.0/16 Ifp fw0 Ifa 169.254.11.33 [last]
+10. Net 224.0.0.0/4 Ifp en2 Ifa 17.255.98.164
+11. Net 224.0.0.0/4 Ifp en0 Ifa 17.202.42.113 [SCOPED]
+12. Net 224.0.0.0/4 Ifp en1 Ifa 17.202.42.111 [SCOPED]
+13. Net 224.0.0.0/4 Ifp fw0 Ifa 169.254.11.33 [last] [SCOPED]
+14. Net 255.255.255.255/32 Ifp en2 Ifa 17.255.98.164
+15. Net 255.255.255.255/32 Ifp en0 Ifa 17.202.42.113 [SCOPED]
+16. Net 255.255.255.255/32 Ifp en1 Ifa 17.202.42.111 [SCOPED]
+17. Net 255.255.255.255/32 Ifp fw0 Ifa 169.254.11.33 [last] [SCOPED]
 }
 Remove old[0]: Net 0.0.0.0/0 Gate 10.0.0.1 Ifp en0 Ifa 10.0.0.10
 Remove old[1]: Net 0.0.0.0/0 Gate 10.0.0.1 Ifp en1 Ifa 10.0.0.20 [SCOPED]
@@ -4975,42 +7085,72 @@ Remove old[11]: Net 192.168.2.1/32 Ifp en0 Ifa 192.168.2.10 [SCOPED]
 Remove old[12]: Net 192.168.2.1/32 Ifp en1 Ifa 192.168.2.20 [SCOPED]
 Remove old[13]: Net 192.168.3.0/24 Ifp fw0 Ifa 192.168.3.30
 Remove old[14]: Net 192.168.3.1/32 Ifp fw0 Ifa 192.168.3.30
-Add new[9]: Net 17.255.96.1/32 Ifp en2 Ifa 17.255.98.164
+Remove old[15]: Net 224.0.0.0/4 Ifp en0 Ifa 10.0.0.10
+Remove old[16]: Net 224.0.0.0/4 Ifp en1 Ifa 10.0.0.20 [SCOPED]
+Remove old[17]: Net 224.0.0.0/4 Ifp fw0 Ifa 192.168.3.30 [SCOPED]
+Remove old[18]: Net 255.255.255.255/32 Ifp en0 Ifa 10.0.0.10
+Remove old[19]: Net 255.255.255.255/32 Ifp en1 Ifa 10.0.0.20 [SCOPED]
+Remove old[20]: Net 255.255.255.255/32 Ifp fw0 Ifa 192.168.3.30 [SCOPED]
+Add new[8]: Net 17.255.96.1/32 Ifp en2 Ifa 17.255.98.164
 Add new[0]: Net 0.0.0.0/0 Gate 17.255.96.1 Ifp en2 Ifa 17.255.98.164
-Add new[6]: Net 17.202.40.1/32 Ifp en0 Ifa 17.202.42.113
+Add new[5]: Net 17.202.40.1/32 Ifp en0 Ifa 17.202.42.113
 Add new[1]: Net 0.0.0.0/0 Gate 17.202.40.1 Ifp en0 Ifa 17.202.42.113 [SCOPED]
-Add new[7]: Net 17.202.40.1/32 Ifp en1 Ifa 17.202.42.111 [SCOPED]
+Add new[6]: Net 17.202.40.1/32 Ifp en1 Ifa 17.202.42.111 [SCOPED]
 Add new[2]: Net 0.0.0.0/0 Gate 17.202.40.1 Ifp en1 Ifa 17.202.42.111 [SCOPED]
-Add new[3]: Net 0.0.0.0/0 Ifp fw0 Ifa 169.254.11.33 [SCOPED]
-Add new[4]: Net 17.202.40.0/22 Ifp en0 Ifa 17.202.42.113
-Add new[5]: Net 17.202.40.0/22 Ifp en1 Ifa 17.202.42.111 [SCOPED]
-Add new[8]: Net 17.255.96.0/20 Ifp en2 Ifa 17.255.98.164
+Add new[3]: Net 17.202.40.0/22 Ifp en0 Ifa 17.202.42.113
+Add new[4]: Net 17.202.40.0/22 Ifp en1 Ifa 17.202.42.111 [SCOPED]
+Add new[7]: Net 17.255.96.0/20 Ifp en2 Ifa 17.255.98.164
+Add new[9]: Net 169.254.0.0/16 Ifp fw0 Ifa 169.254.11.33 [last]
+Add new[10]: Net 224.0.0.0/4 Ifp en2 Ifa 17.255.98.164
+Add new[11]: Net 224.0.0.0/4 Ifp en0 Ifa 17.202.42.113 [SCOPED]
+Add new[12]: Net 224.0.0.0/4 Ifp en1 Ifa 17.202.42.111 [SCOPED]
+Add new[13]: Net 224.0.0.0/4 Ifp fw0 Ifa 169.254.11.33 [last] [SCOPED]
+Add new[14]: Net 255.255.255.255/32 Ifp en2 Ifa 17.255.98.164
+Add new[15]: Net 255.255.255.255/32 Ifp en0 Ifa 17.202.42.113 [SCOPED]
+Add new[16]: Net 255.255.255.255/32 Ifp en1 Ifa 17.202.42.111 [SCOPED]
+Add new[17]: Net 255.255.255.255/32 Ifp fw0 Ifa 169.254.11.33 [last] [SCOPED]
 =================> Apply 'test3', 'test6' End <=================
 
 =================> Apply 'test6', 'test3' Begin <=================
-Old routes ('test6') = <IPv4RouteList[10]> = {
+Old routes ('test6') = <IPv4RouteList[18]> = {
  0. Net 0.0.0.0/0 Gate 17.255.96.1 Ifp en2 Ifa 17.255.98.164
  1. Net 0.0.0.0/0 Gate 17.202.40.1 Ifp en0 Ifa 17.202.42.113 [SCOPED]
  2. Net 0.0.0.0/0 Gate 17.202.40.1 Ifp en1 Ifa 17.202.42.111 [SCOPED]
- 3. Net 0.0.0.0/0 Ifp fw0 Ifa 169.254.11.33 [SCOPED]
- 4. Net 17.202.40.0/22 Ifp en0 Ifa 17.202.42.113
- 5. Net 17.202.40.0/22 Ifp en1 Ifa 17.202.42.111 [SCOPED]
- 6. Net 17.202.40.1/32 Ifp en0 Ifa 17.202.42.113
- 7. Net 17.202.40.1/32 Ifp en1 Ifa 17.202.42.111 [SCOPED]
- 8. Net 17.255.96.0/20 Ifp en2 Ifa 17.255.98.164
- 9. Net 17.255.96.1/32 Ifp en2 Ifa 17.255.98.164
-}
-Add new[9]: Net 17.255.96.1/32 Ifp en2 Ifa 17.255.98.164
+ 3. Net 17.202.40.0/22 Ifp en0 Ifa 17.202.42.113
+ 4. Net 17.202.40.0/22 Ifp en1 Ifa 17.202.42.111 [SCOPED]
+ 5. Net 17.202.40.1/32 Ifp en0 Ifa 17.202.42.113
+ 6. Net 17.202.40.1/32 Ifp en1 Ifa 17.202.42.111 [SCOPED]
+ 7. Net 17.255.96.0/20 Ifp en2 Ifa 17.255.98.164
+ 8. Net 17.255.96.1/32 Ifp en2 Ifa 17.255.98.164
+ 9. Net 169.254.0.0/16 Ifp fw0 Ifa 169.254.11.33 [last]
+10. Net 224.0.0.0/4 Ifp en2 Ifa 17.255.98.164
+11. Net 224.0.0.0/4 Ifp en0 Ifa 17.202.42.113 [SCOPED]
+12. Net 224.0.0.0/4 Ifp en1 Ifa 17.202.42.111 [SCOPED]
+13. Net 224.0.0.0/4 Ifp fw0 Ifa 169.254.11.33 [last] [SCOPED]
+14. Net 255.255.255.255/32 Ifp en2 Ifa 17.255.98.164
+15. Net 255.255.255.255/32 Ifp en0 Ifa 17.202.42.113 [SCOPED]
+16. Net 255.255.255.255/32 Ifp en1 Ifa 17.202.42.111 [SCOPED]
+17. Net 255.255.255.255/32 Ifp fw0 Ifa 169.254.11.33 [last] [SCOPED]
+}
+Add new[8]: Net 17.255.96.1/32 Ifp en2 Ifa 17.255.98.164
 Add new[0]: Net 0.0.0.0/0 Gate 17.255.96.1 Ifp en2 Ifa 17.255.98.164
-Add new[6]: Net 17.202.40.1/32 Ifp en0 Ifa 17.202.42.113
+Add new[5]: Net 17.202.40.1/32 Ifp en0 Ifa 17.202.42.113
 Add new[1]: Net 0.0.0.0/0 Gate 17.202.40.1 Ifp en0 Ifa 17.202.42.113 [SCOPED]
-Add new[7]: Net 17.202.40.1/32 Ifp en1 Ifa 17.202.42.111 [SCOPED]
+Add new[6]: Net 17.202.40.1/32 Ifp en1 Ifa 17.202.42.111 [SCOPED]
 Add new[2]: Net 0.0.0.0/0 Gate 17.202.40.1 Ifp en1 Ifa 17.202.42.111 [SCOPED]
-Add new[3]: Net 0.0.0.0/0 Ifp fw0 Ifa 169.254.11.33 [SCOPED]
-Add new[4]: Net 17.202.40.0/22 Ifp en0 Ifa 17.202.42.113
-Add new[5]: Net 17.202.40.0/22 Ifp en1 Ifa 17.202.42.111 [SCOPED]
-Add new[8]: Net 17.255.96.0/20 Ifp en2 Ifa 17.255.98.164
-New Routes ('test3') = <IPv4RouteList[15]> = {
+Add new[3]: Net 17.202.40.0/22 Ifp en0 Ifa 17.202.42.113
+Add new[4]: Net 17.202.40.0/22 Ifp en1 Ifa 17.202.42.111 [SCOPED]
+Add new[7]: Net 17.255.96.0/20 Ifp en2 Ifa 17.255.98.164
+Add new[9]: Net 169.254.0.0/16 Ifp fw0 Ifa 169.254.11.33 [last]
+Add new[10]: Net 224.0.0.0/4 Ifp en2 Ifa 17.255.98.164
+Add new[11]: Net 224.0.0.0/4 Ifp en0 Ifa 17.202.42.113 [SCOPED]
+Add new[12]: Net 224.0.0.0/4 Ifp en1 Ifa 17.202.42.111 [SCOPED]
+Add new[13]: Net 224.0.0.0/4 Ifp fw0 Ifa 169.254.11.33 [last] [SCOPED]
+Add new[14]: Net 255.255.255.255/32 Ifp en2 Ifa 17.255.98.164
+Add new[15]: Net 255.255.255.255/32 Ifp en0 Ifa 17.202.42.113 [SCOPED]
+Add new[16]: Net 255.255.255.255/32 Ifp en1 Ifa 17.202.42.111 [SCOPED]
+Add new[17]: Net 255.255.255.255/32 Ifp fw0 Ifa 169.254.11.33 [last] [SCOPED]
+New Routes ('test3') = <IPv4RouteList[21]> = {
  0. Net 0.0.0.0/0 Gate 10.0.0.1 Ifp en0 Ifa 10.0.0.10
  1. Net 0.0.0.0/0 Gate 10.0.0.1 Ifp en1 Ifa 10.0.0.20 [SCOPED]
  2. Net 0.0.0.0/0 Gate 192.168.3.1 Ifp fw0 Ifa 192.168.3.30 [SCOPED]
@@ -5026,17 +7166,31 @@ New Routes ('test3') = <IPv4RouteList[15]> = {
 12. Net 192.168.2.1/32 Ifp en1 Ifa 192.168.2.20 [SCOPED]
 13. Net 192.168.3.0/24 Ifp fw0 Ifa 192.168.3.30
 14. Net 192.168.3.1/32 Ifp fw0 Ifa 192.168.3.30
+15. Net 224.0.0.0/4 Ifp en0 Ifa 10.0.0.10
+16. Net 224.0.0.0/4 Ifp en1 Ifa 10.0.0.20 [SCOPED]
+17. Net 224.0.0.0/4 Ifp fw0 Ifa 192.168.3.30 [SCOPED]
+18. Net 255.255.255.255/32 Ifp en0 Ifa 10.0.0.10
+19. Net 255.255.255.255/32 Ifp en1 Ifa 10.0.0.20 [SCOPED]
+20. Net 255.255.255.255/32 Ifp fw0 Ifa 192.168.3.30 [SCOPED]
 }
 Remove old[0]: Net 0.0.0.0/0 Gate 17.255.96.1 Ifp en2 Ifa 17.255.98.164
 Remove old[1]: Net 0.0.0.0/0 Gate 17.202.40.1 Ifp en0 Ifa 17.202.42.113 [SCOPED]
 Remove old[2]: Net 0.0.0.0/0 Gate 17.202.40.1 Ifp en1 Ifa 17.202.42.111 [SCOPED]
-Remove old[3]: Net 0.0.0.0/0 Ifp fw0 Ifa 169.254.11.33 [SCOPED]
-Remove old[4]: Net 17.202.40.0/22 Ifp en0 Ifa 17.202.42.113
-Remove old[5]: Net 17.202.40.0/22 Ifp en1 Ifa 17.202.42.111 [SCOPED]
-Remove old[6]: Net 17.202.40.1/32 Ifp en0 Ifa 17.202.42.113
-Remove old[7]: Net 17.202.40.1/32 Ifp en1 Ifa 17.202.42.111 [SCOPED]
-Remove old[8]: Net 17.255.96.0/20 Ifp en2 Ifa 17.255.98.164
-Remove old[9]: Net 17.255.96.1/32 Ifp en2 Ifa 17.255.98.164
+Remove old[3]: Net 17.202.40.0/22 Ifp en0 Ifa 17.202.42.113
+Remove old[4]: Net 17.202.40.0/22 Ifp en1 Ifa 17.202.42.111 [SCOPED]
+Remove old[5]: Net 17.202.40.1/32 Ifp en0 Ifa 17.202.42.113
+Remove old[6]: Net 17.202.40.1/32 Ifp en1 Ifa 17.202.42.111 [SCOPED]
+Remove old[7]: Net 17.255.96.0/20 Ifp en2 Ifa 17.255.98.164
+Remove old[8]: Net 17.255.96.1/32 Ifp en2 Ifa 17.255.98.164
+Remove old[9]: Net 169.254.0.0/16 Ifp fw0 Ifa 169.254.11.33 [last]
+Remove old[10]: Net 224.0.0.0/4 Ifp en2 Ifa 17.255.98.164
+Remove old[11]: Net 224.0.0.0/4 Ifp en0 Ifa 17.202.42.113 [SCOPED]
+Remove old[12]: Net 224.0.0.0/4 Ifp en1 Ifa 17.202.42.111 [SCOPED]
+Remove old[13]: Net 224.0.0.0/4 Ifp fw0 Ifa 169.254.11.33 [last] [SCOPED]
+Remove old[14]: Net 255.255.255.255/32 Ifp en2 Ifa 17.255.98.164
+Remove old[15]: Net 255.255.255.255/32 Ifp en0 Ifa 17.202.42.113 [SCOPED]
+Remove old[16]: Net 255.255.255.255/32 Ifp en1 Ifa 17.202.42.111 [SCOPED]
+Remove old[17]: Net 255.255.255.255/32 Ifp fw0 Ifa 169.254.11.33 [last] [SCOPED]
 Add new[5]: Net 10.0.0.1/32 Ifp en0 Ifa 10.0.0.10
 Add new[0]: Net 0.0.0.0/0 Gate 10.0.0.1 Ifp en0 Ifa 10.0.0.10
 Add new[6]: Net 10.0.0.1/32 Ifp en1 Ifa 10.0.0.20 [SCOPED]
@@ -5052,10 +7206,16 @@ Add new[10]: Net 192.168.2.1/32 Ifp fw0 Ifa 192.168.2.30
 Add new[11]: Net 192.168.2.1/32 Ifp en0 Ifa 192.168.2.10 [SCOPED]
 Add new[12]: Net 192.168.2.1/32 Ifp en1 Ifa 192.168.2.20 [SCOPED]
 Add new[13]: Net 192.168.3.0/24 Ifp fw0 Ifa 192.168.3.30
+Add new[15]: Net 224.0.0.0/4 Ifp en0 Ifa 10.0.0.10
+Add new[16]: Net 224.0.0.0/4 Ifp en1 Ifa 10.0.0.20 [SCOPED]
+Add new[17]: Net 224.0.0.0/4 Ifp fw0 Ifa 192.168.3.30 [SCOPED]
+Add new[18]: Net 255.255.255.255/32 Ifp en0 Ifa 10.0.0.10
+Add new[19]: Net 255.255.255.255/32 Ifp en1 Ifa 10.0.0.20 [SCOPED]
+Add new[20]: Net 255.255.255.255/32 Ifp fw0 Ifa 192.168.3.30 [SCOPED]
 =================> Apply 'test6', 'test3' End <=================
 
 =================> Apply 'test3', 'test7' Begin <=================
-Old routes ('test3') = <IPv4RouteList[15]> = {
+Old routes ('test3') = <IPv4RouteList[21]> = {
  0. Net 0.0.0.0/0 Gate 10.0.0.1 Ifp en0 Ifa 10.0.0.10
  1. Net 0.0.0.0/0 Gate 10.0.0.1 Ifp en1 Ifa 10.0.0.20 [SCOPED]
  2. Net 0.0.0.0/0 Gate 192.168.3.1 Ifp fw0 Ifa 192.168.3.30 [SCOPED]
@@ -5071,6 +7231,12 @@ Old routes ('test3') = <IPv4RouteList[15]> = {
 12. Net 192.168.2.1/32 Ifp en1 Ifa 192.168.2.20 [SCOPED]
 13. Net 192.168.3.0/24 Ifp fw0 Ifa 192.168.3.30
 14. Net 192.168.3.1/32 Ifp fw0 Ifa 192.168.3.30
+15. Net 224.0.0.0/4 Ifp en0 Ifa 10.0.0.10
+16. Net 224.0.0.0/4 Ifp en1 Ifa 10.0.0.20 [SCOPED]
+17. Net 224.0.0.0/4 Ifp fw0 Ifa 192.168.3.30 [SCOPED]
+18. Net 255.255.255.255/32 Ifp en0 Ifa 10.0.0.10
+19. Net 255.255.255.255/32 Ifp en1 Ifa 10.0.0.20 [SCOPED]
+20. Net 255.255.255.255/32 Ifp fw0 Ifa 192.168.3.30 [SCOPED]
 }
 Add new[5]: Net 10.0.0.1/32 Ifp en0 Ifa 10.0.0.10
 Add new[0]: Net 0.0.0.0/0 Gate 10.0.0.1 Ifp en0 Ifa 10.0.0.10
@@ -5087,17 +7253,31 @@ Add new[10]: Net 192.168.2.1/32 Ifp fw0 Ifa 192.168.2.30
 Add new[11]: Net 192.168.2.1/32 Ifp en0 Ifa 192.168.2.10 [SCOPED]
 Add new[12]: Net 192.168.2.1/32 Ifp en1 Ifa 192.168.2.20 [SCOPED]
 Add new[13]: Net 192.168.3.0/24 Ifp fw0 Ifa 192.168.3.30
-New Routes ('test7') = <IPv4RouteList[10]> = {
+Add new[15]: Net 224.0.0.0/4 Ifp en0 Ifa 10.0.0.10
+Add new[16]: Net 224.0.0.0/4 Ifp en1 Ifa 10.0.0.20 [SCOPED]
+Add new[17]: Net 224.0.0.0/4 Ifp fw0 Ifa 192.168.3.30 [SCOPED]
+Add new[18]: Net 255.255.255.255/32 Ifp en0 Ifa 10.0.0.10
+Add new[19]: Net 255.255.255.255/32 Ifp en1 Ifa 10.0.0.20 [SCOPED]
+Add new[20]: Net 255.255.255.255/32 Ifp fw0 Ifa 192.168.3.30 [SCOPED]
+New Routes ('test7') = <IPv4RouteList[18]> = {
  0. Net 0.0.0.0/0 Gate 17.255.96.1 Ifp en2 Ifa 17.255.98.164
  1. Net 0.0.0.0/0 Gate 17.202.40.1 Ifp en1 Ifa 17.202.42.111 [SCOPED]
  2. Net 0.0.0.0/0 Gate 17.202.40.1 Ifp en0 Ifa 17.202.42.113 [SCOPED]
- 3. Net 0.0.0.0/0 Ifp fw0 Ifa 169.254.11.33 [SCOPED]
- 4. Net 17.202.40.0/22 Ifp en1 Ifa 17.202.42.111
- 5. Net 17.202.40.0/22 Ifp en0 Ifa 17.202.42.113 [SCOPED]
- 6. Net 17.202.40.1/32 Ifp en1 Ifa 17.202.42.111
- 7. Net 17.202.40.1/32 Ifp en0 Ifa 17.202.42.113 [SCOPED]
- 8. Net 17.255.96.0/20 Ifp en2 Ifa 17.255.98.164
- 9. Net 17.255.96.1/32 Ifp en2 Ifa 17.255.98.164
+ 3. Net 17.202.40.0/22 Ifp en1 Ifa 17.202.42.111
+ 4. Net 17.202.40.0/22 Ifp en0 Ifa 17.202.42.113 [SCOPED]
+ 5. Net 17.202.40.1/32 Ifp en1 Ifa 17.202.42.111
+ 6. Net 17.202.40.1/32 Ifp en0 Ifa 17.202.42.113 [SCOPED]
+ 7. Net 17.255.96.0/20 Ifp en2 Ifa 17.255.98.164
+ 8. Net 17.255.96.1/32 Ifp en2 Ifa 17.255.98.164
+ 9. Net 169.254.0.0/16 Ifp fw0 Ifa 169.254.11.33 [last]
+10. Net 224.0.0.0/4 Ifp en2 Ifa 17.255.98.164
+11. Net 224.0.0.0/4 Ifp en1 Ifa 17.202.42.111 [SCOPED]
+12. Net 224.0.0.0/4 Ifp en0 Ifa 17.202.42.113 [SCOPED]
+13. Net 224.0.0.0/4 Ifp fw0 Ifa 169.254.11.33 [last] [SCOPED]
+14. Net 255.255.255.255/32 Ifp en2 Ifa 17.255.98.164
+15. Net 255.255.255.255/32 Ifp en1 Ifa 17.202.42.111 [SCOPED]
+16. Net 255.255.255.255/32 Ifp en0 Ifa 17.202.42.113 [SCOPED]
+17. Net 255.255.255.255/32 Ifp fw0 Ifa 169.254.11.33 [last] [SCOPED]
 }
 Remove old[0]: Net 0.0.0.0/0 Gate 10.0.0.1 Ifp en0 Ifa 10.0.0.10
 Remove old[1]: Net 0.0.0.0/0 Gate 10.0.0.1 Ifp en1 Ifa 10.0.0.20 [SCOPED]
@@ -5114,42 +7294,72 @@ Remove old[11]: Net 192.168.2.1/32 Ifp en0 Ifa 192.168.2.10 [SCOPED]
 Remove old[12]: Net 192.168.2.1/32 Ifp en1 Ifa 192.168.2.20 [SCOPED]
 Remove old[13]: Net 192.168.3.0/24 Ifp fw0 Ifa 192.168.3.30
 Remove old[14]: Net 192.168.3.1/32 Ifp fw0 Ifa 192.168.3.30
-Add new[9]: Net 17.255.96.1/32 Ifp en2 Ifa 17.255.98.164
+Remove old[15]: Net 224.0.0.0/4 Ifp en0 Ifa 10.0.0.10
+Remove old[16]: Net 224.0.0.0/4 Ifp en1 Ifa 10.0.0.20 [SCOPED]
+Remove old[17]: Net 224.0.0.0/4 Ifp fw0 Ifa 192.168.3.30 [SCOPED]
+Remove old[18]: Net 255.255.255.255/32 Ifp en0 Ifa 10.0.0.10
+Remove old[19]: Net 255.255.255.255/32 Ifp en1 Ifa 10.0.0.20 [SCOPED]
+Remove old[20]: Net 255.255.255.255/32 Ifp fw0 Ifa 192.168.3.30 [SCOPED]
+Add new[8]: Net 17.255.96.1/32 Ifp en2 Ifa 17.255.98.164
 Add new[0]: Net 0.0.0.0/0 Gate 17.255.96.1 Ifp en2 Ifa 17.255.98.164
-Add new[6]: Net 17.202.40.1/32 Ifp en1 Ifa 17.202.42.111
+Add new[5]: Net 17.202.40.1/32 Ifp en1 Ifa 17.202.42.111
 Add new[1]: Net 0.0.0.0/0 Gate 17.202.40.1 Ifp en1 Ifa 17.202.42.111 [SCOPED]
-Add new[7]: Net 17.202.40.1/32 Ifp en0 Ifa 17.202.42.113 [SCOPED]
+Add new[6]: Net 17.202.40.1/32 Ifp en0 Ifa 17.202.42.113 [SCOPED]
 Add new[2]: Net 0.0.0.0/0 Gate 17.202.40.1 Ifp en0 Ifa 17.202.42.113 [SCOPED]
-Add new[3]: Net 0.0.0.0/0 Ifp fw0 Ifa 169.254.11.33 [SCOPED]
-Add new[4]: Net 17.202.40.0/22 Ifp en1 Ifa 17.202.42.111
-Add new[5]: Net 17.202.40.0/22 Ifp en0 Ifa 17.202.42.113 [SCOPED]
-Add new[8]: Net 17.255.96.0/20 Ifp en2 Ifa 17.255.98.164
+Add new[3]: Net 17.202.40.0/22 Ifp en1 Ifa 17.202.42.111
+Add new[4]: Net 17.202.40.0/22 Ifp en0 Ifa 17.202.42.113 [SCOPED]
+Add new[7]: Net 17.255.96.0/20 Ifp en2 Ifa 17.255.98.164
+Add new[9]: Net 169.254.0.0/16 Ifp fw0 Ifa 169.254.11.33 [last]
+Add new[10]: Net 224.0.0.0/4 Ifp en2 Ifa 17.255.98.164
+Add new[11]: Net 224.0.0.0/4 Ifp en1 Ifa 17.202.42.111 [SCOPED]
+Add new[12]: Net 224.0.0.0/4 Ifp en0 Ifa 17.202.42.113 [SCOPED]
+Add new[13]: Net 224.0.0.0/4 Ifp fw0 Ifa 169.254.11.33 [last] [SCOPED]
+Add new[14]: Net 255.255.255.255/32 Ifp en2 Ifa 17.255.98.164
+Add new[15]: Net 255.255.255.255/32 Ifp en1 Ifa 17.202.42.111 [SCOPED]
+Add new[16]: Net 255.255.255.255/32 Ifp en0 Ifa 17.202.42.113 [SCOPED]
+Add new[17]: Net 255.255.255.255/32 Ifp fw0 Ifa 169.254.11.33 [last] [SCOPED]
 =================> Apply 'test3', 'test7' End <=================
 
 =================> Apply 'test7', 'test3' Begin <=================
-Old routes ('test7') = <IPv4RouteList[10]> = {
+Old routes ('test7') = <IPv4RouteList[18]> = {
  0. Net 0.0.0.0/0 Gate 17.255.96.1 Ifp en2 Ifa 17.255.98.164
  1. Net 0.0.0.0/0 Gate 17.202.40.1 Ifp en1 Ifa 17.202.42.111 [SCOPED]
  2. Net 0.0.0.0/0 Gate 17.202.40.1 Ifp en0 Ifa 17.202.42.113 [SCOPED]
- 3. Net 0.0.0.0/0 Ifp fw0 Ifa 169.254.11.33 [SCOPED]
- 4. Net 17.202.40.0/22 Ifp en1 Ifa 17.202.42.111
- 5. Net 17.202.40.0/22 Ifp en0 Ifa 17.202.42.113 [SCOPED]
- 6. Net 17.202.40.1/32 Ifp en1 Ifa 17.202.42.111
- 7. Net 17.202.40.1/32 Ifp en0 Ifa 17.202.42.113 [SCOPED]
- 8. Net 17.255.96.0/20 Ifp en2 Ifa 17.255.98.164
- 9. Net 17.255.96.1/32 Ifp en2 Ifa 17.255.98.164
-}
-Add new[9]: Net 17.255.96.1/32 Ifp en2 Ifa 17.255.98.164
+ 3. Net 17.202.40.0/22 Ifp en1 Ifa 17.202.42.111
+ 4. Net 17.202.40.0/22 Ifp en0 Ifa 17.202.42.113 [SCOPED]
+ 5. Net 17.202.40.1/32 Ifp en1 Ifa 17.202.42.111
+ 6. Net 17.202.40.1/32 Ifp en0 Ifa 17.202.42.113 [SCOPED]
+ 7. Net 17.255.96.0/20 Ifp en2 Ifa 17.255.98.164
+ 8. Net 17.255.96.1/32 Ifp en2 Ifa 17.255.98.164
+ 9. Net 169.254.0.0/16 Ifp fw0 Ifa 169.254.11.33 [last]
+10. Net 224.0.0.0/4 Ifp en2 Ifa 17.255.98.164
+11. Net 224.0.0.0/4 Ifp en1 Ifa 17.202.42.111 [SCOPED]
+12. Net 224.0.0.0/4 Ifp en0 Ifa 17.202.42.113 [SCOPED]
+13. Net 224.0.0.0/4 Ifp fw0 Ifa 169.254.11.33 [last] [SCOPED]
+14. Net 255.255.255.255/32 Ifp en2 Ifa 17.255.98.164
+15. Net 255.255.255.255/32 Ifp en1 Ifa 17.202.42.111 [SCOPED]
+16. Net 255.255.255.255/32 Ifp en0 Ifa 17.202.42.113 [SCOPED]
+17. Net 255.255.255.255/32 Ifp fw0 Ifa 169.254.11.33 [last] [SCOPED]
+}
+Add new[8]: Net 17.255.96.1/32 Ifp en2 Ifa 17.255.98.164
 Add new[0]: Net 0.0.0.0/0 Gate 17.255.96.1 Ifp en2 Ifa 17.255.98.164
-Add new[6]: Net 17.202.40.1/32 Ifp en1 Ifa 17.202.42.111
+Add new[5]: Net 17.202.40.1/32 Ifp en1 Ifa 17.202.42.111
 Add new[1]: Net 0.0.0.0/0 Gate 17.202.40.1 Ifp en1 Ifa 17.202.42.111 [SCOPED]
-Add new[7]: Net 17.202.40.1/32 Ifp en0 Ifa 17.202.42.113 [SCOPED]
+Add new[6]: Net 17.202.40.1/32 Ifp en0 Ifa 17.202.42.113 [SCOPED]
 Add new[2]: Net 0.0.0.0/0 Gate 17.202.40.1 Ifp en0 Ifa 17.202.42.113 [SCOPED]
-Add new[3]: Net 0.0.0.0/0 Ifp fw0 Ifa 169.254.11.33 [SCOPED]
-Add new[4]: Net 17.202.40.0/22 Ifp en1 Ifa 17.202.42.111
-Add new[5]: Net 17.202.40.0/22 Ifp en0 Ifa 17.202.42.113 [SCOPED]
-Add new[8]: Net 17.255.96.0/20 Ifp en2 Ifa 17.255.98.164
-New Routes ('test3') = <IPv4RouteList[15]> = {
+Add new[3]: Net 17.202.40.0/22 Ifp en1 Ifa 17.202.42.111
+Add new[4]: Net 17.202.40.0/22 Ifp en0 Ifa 17.202.42.113 [SCOPED]
+Add new[7]: Net 17.255.96.0/20 Ifp en2 Ifa 17.255.98.164
+Add new[9]: Net 169.254.0.0/16 Ifp fw0 Ifa 169.254.11.33 [last]
+Add new[10]: Net 224.0.0.0/4 Ifp en2 Ifa 17.255.98.164
+Add new[11]: Net 224.0.0.0/4 Ifp en1 Ifa 17.202.42.111 [SCOPED]
+Add new[12]: Net 224.0.0.0/4 Ifp en0 Ifa 17.202.42.113 [SCOPED]
+Add new[13]: Net 224.0.0.0/4 Ifp fw0 Ifa 169.254.11.33 [last] [SCOPED]
+Add new[14]: Net 255.255.255.255/32 Ifp en2 Ifa 17.255.98.164
+Add new[15]: Net 255.255.255.255/32 Ifp en1 Ifa 17.202.42.111 [SCOPED]
+Add new[16]: Net 255.255.255.255/32 Ifp en0 Ifa 17.202.42.113 [SCOPED]
+Add new[17]: Net 255.255.255.255/32 Ifp fw0 Ifa 169.254.11.33 [last] [SCOPED]
+New Routes ('test3') = <IPv4RouteList[21]> = {
  0. Net 0.0.0.0/0 Gate 10.0.0.1 Ifp en0 Ifa 10.0.0.10
  1. Net 0.0.0.0/0 Gate 10.0.0.1 Ifp en1 Ifa 10.0.0.20 [SCOPED]
  2. Net 0.0.0.0/0 Gate 192.168.3.1 Ifp fw0 Ifa 192.168.3.30 [SCOPED]
@@ -5165,17 +7375,31 @@ New Routes ('test3') = <IPv4RouteList[15]> = {
 12. Net 192.168.2.1/32 Ifp en1 Ifa 192.168.2.20 [SCOPED]
 13. Net 192.168.3.0/24 Ifp fw0 Ifa 192.168.3.30
 14. Net 192.168.3.1/32 Ifp fw0 Ifa 192.168.3.30
+15. Net 224.0.0.0/4 Ifp en0 Ifa 10.0.0.10
+16. Net 224.0.0.0/4 Ifp en1 Ifa 10.0.0.20 [SCOPED]
+17. Net 224.0.0.0/4 Ifp fw0 Ifa 192.168.3.30 [SCOPED]
+18. Net 255.255.255.255/32 Ifp en0 Ifa 10.0.0.10
+19. Net 255.255.255.255/32 Ifp en1 Ifa 10.0.0.20 [SCOPED]
+20. Net 255.255.255.255/32 Ifp fw0 Ifa 192.168.3.30 [SCOPED]
 }
 Remove old[0]: Net 0.0.0.0/0 Gate 17.255.96.1 Ifp en2 Ifa 17.255.98.164
 Remove old[1]: Net 0.0.0.0/0 Gate 17.202.40.1 Ifp en1 Ifa 17.202.42.111 [SCOPED]
 Remove old[2]: Net 0.0.0.0/0 Gate 17.202.40.1 Ifp en0 Ifa 17.202.42.113 [SCOPED]
-Remove old[3]: Net 0.0.0.0/0 Ifp fw0 Ifa 169.254.11.33 [SCOPED]
-Remove old[4]: Net 17.202.40.0/22 Ifp en1 Ifa 17.202.42.111
-Remove old[5]: Net 17.202.40.0/22 Ifp en0 Ifa 17.202.42.113 [SCOPED]
-Remove old[6]: Net 17.202.40.1/32 Ifp en1 Ifa 17.202.42.111
-Remove old[7]: Net 17.202.40.1/32 Ifp en0 Ifa 17.202.42.113 [SCOPED]
-Remove old[8]: Net 17.255.96.0/20 Ifp en2 Ifa 17.255.98.164
-Remove old[9]: Net 17.255.96.1/32 Ifp en2 Ifa 17.255.98.164
+Remove old[3]: Net 17.202.40.0/22 Ifp en1 Ifa 17.202.42.111
+Remove old[4]: Net 17.202.40.0/22 Ifp en0 Ifa 17.202.42.113 [SCOPED]
+Remove old[5]: Net 17.202.40.1/32 Ifp en1 Ifa 17.202.42.111
+Remove old[6]: Net 17.202.40.1/32 Ifp en0 Ifa 17.202.42.113 [SCOPED]
+Remove old[7]: Net 17.255.96.0/20 Ifp en2 Ifa 17.255.98.164
+Remove old[8]: Net 17.255.96.1/32 Ifp en2 Ifa 17.255.98.164
+Remove old[9]: Net 169.254.0.0/16 Ifp fw0 Ifa 169.254.11.33 [last]
+Remove old[10]: Net 224.0.0.0/4 Ifp en2 Ifa 17.255.98.164
+Remove old[11]: Net 224.0.0.0/4 Ifp en1 Ifa 17.202.42.111 [SCOPED]
+Remove old[12]: Net 224.0.0.0/4 Ifp en0 Ifa 17.202.42.113 [SCOPED]
+Remove old[13]: Net 224.0.0.0/4 Ifp fw0 Ifa 169.254.11.33 [last] [SCOPED]
+Remove old[14]: Net 255.255.255.255/32 Ifp en2 Ifa 17.255.98.164
+Remove old[15]: Net 255.255.255.255/32 Ifp en1 Ifa 17.202.42.111 [SCOPED]
+Remove old[16]: Net 255.255.255.255/32 Ifp en0 Ifa 17.202.42.113 [SCOPED]
+Remove old[17]: Net 255.255.255.255/32 Ifp fw0 Ifa 169.254.11.33 [last] [SCOPED]
 Add new[5]: Net 10.0.0.1/32 Ifp en0 Ifa 10.0.0.10
 Add new[0]: Net 0.0.0.0/0 Gate 10.0.0.1 Ifp en0 Ifa 10.0.0.10
 Add new[6]: Net 10.0.0.1/32 Ifp en1 Ifa 10.0.0.20 [SCOPED]
@@ -5191,10 +7415,16 @@ Add new[10]: Net 192.168.2.1/32 Ifp fw0 Ifa 192.168.2.30
 Add new[11]: Net 192.168.2.1/32 Ifp en0 Ifa 192.168.2.10 [SCOPED]
 Add new[12]: Net 192.168.2.1/32 Ifp en1 Ifa 192.168.2.20 [SCOPED]
 Add new[13]: Net 192.168.3.0/24 Ifp fw0 Ifa 192.168.3.30
+Add new[15]: Net 224.0.0.0/4 Ifp en0 Ifa 10.0.0.10
+Add new[16]: Net 224.0.0.0/4 Ifp en1 Ifa 10.0.0.20 [SCOPED]
+Add new[17]: Net 224.0.0.0/4 Ifp fw0 Ifa 192.168.3.30 [SCOPED]
+Add new[18]: Net 255.255.255.255/32 Ifp en0 Ifa 10.0.0.10
+Add new[19]: Net 255.255.255.255/32 Ifp en1 Ifa 10.0.0.20 [SCOPED]
+Add new[20]: Net 255.255.255.255/32 Ifp fw0 Ifa 192.168.3.30 [SCOPED]
 =================> Apply 'test7', 'test3' End <=================
 
 =================> Apply 'test3', 'test8' Begin <=================
-Old routes ('test3') = <IPv4RouteList[15]> = {
+Old routes ('test3') = <IPv4RouteList[21]> = {
  0. Net 0.0.0.0/0 Gate 10.0.0.1 Ifp en0 Ifa 10.0.0.10
  1. Net 0.0.0.0/0 Gate 10.0.0.1 Ifp en1 Ifa 10.0.0.20 [SCOPED]
  2. Net 0.0.0.0/0 Gate 192.168.3.1 Ifp fw0 Ifa 192.168.3.30 [SCOPED]
@@ -5210,6 +7440,12 @@ Old routes ('test3') = <IPv4RouteList[15]> = {
 12. Net 192.168.2.1/32 Ifp en1 Ifa 192.168.2.20 [SCOPED]
 13. Net 192.168.3.0/24 Ifp fw0 Ifa 192.168.3.30
 14. Net 192.168.3.1/32 Ifp fw0 Ifa 192.168.3.30
+15. Net 224.0.0.0/4 Ifp en0 Ifa 10.0.0.10
+16. Net 224.0.0.0/4 Ifp en1 Ifa 10.0.0.20 [SCOPED]
+17. Net 224.0.0.0/4 Ifp fw0 Ifa 192.168.3.30 [SCOPED]
+18. Net 255.255.255.255/32 Ifp en0 Ifa 10.0.0.10
+19. Net 255.255.255.255/32 Ifp en1 Ifa 10.0.0.20 [SCOPED]
+20. Net 255.255.255.255/32 Ifp fw0 Ifa 192.168.3.30 [SCOPED]
 }
 Add new[5]: Net 10.0.0.1/32 Ifp en0 Ifa 10.0.0.10
 Add new[0]: Net 0.0.0.0/0 Gate 10.0.0.1 Ifp en0 Ifa 10.0.0.10
@@ -5226,13 +7462,23 @@ Add new[10]: Net 192.168.2.1/32 Ifp fw0 Ifa 192.168.2.30
 Add new[11]: Net 192.168.2.1/32 Ifp en0 Ifa 192.168.2.10 [SCOPED]
 Add new[12]: Net 192.168.2.1/32 Ifp en1 Ifa 192.168.2.20 [SCOPED]
 Add new[13]: Net 192.168.3.0/24 Ifp fw0 Ifa 192.168.3.30
-New Routes ('test8') = <IPv4RouteList[6]> = {
+Add new[15]: Net 224.0.0.0/4 Ifp en0 Ifa 10.0.0.10
+Add new[16]: Net 224.0.0.0/4 Ifp en1 Ifa 10.0.0.20 [SCOPED]
+Add new[17]: Net 224.0.0.0/4 Ifp fw0 Ifa 192.168.3.30 [SCOPED]
+Add new[18]: Net 255.255.255.255/32 Ifp en0 Ifa 10.0.0.10
+Add new[19]: Net 255.255.255.255/32 Ifp en1 Ifa 10.0.0.20 [SCOPED]
+Add new[20]: Net 255.255.255.255/32 Ifp fw0 Ifa 192.168.3.30 [SCOPED]
+New Routes ('test8') = <IPv4RouteList[10]> = {
  0. Net 0.0.0.0/0 Gate 10.0.0.1 Ifp en0 Ifa 10.0.0.10
  1. Net 0.0.0.0/0 Gate 10.0.0.1 Ifp en1 Ifa 10.0.0.20 [SCOPED]
  2. Net 10.0.0.0/24 Ifp en0 Ifa 10.0.0.10
  3. Net 10.0.0.0/24 Ifp en1 Ifa 10.0.0.20 [SCOPED]
  4. Net 10.0.0.1/32 Ifp en0 Ifa 10.0.0.10
  5. Net 10.0.0.1/32 Ifp en1 Ifa 10.0.0.20 [SCOPED]
+ 6. Net 224.0.0.0/4 Ifp en0 Ifa 10.0.0.10
+ 7. Net 224.0.0.0/4 Ifp en1 Ifa 10.0.0.20 [SCOPED]
+ 8. Net 255.255.255.255/32 Ifp en0 Ifa 10.0.0.10
+ 9. Net 255.255.255.255/32 Ifp en1 Ifa 10.0.0.20 [SCOPED]
 }
 Remove old[2]: Net 0.0.0.0/0 Gate 192.168.3.1 Ifp fw0 Ifa 192.168.3.30 [SCOPED]
 Remove old[7]: Net 192.168.2.0/24 Ifp fw0 Ifa 192.168.2.30
@@ -5243,16 +7489,22 @@ Remove old[11]: Net 192.168.2.1/32 Ifp en0 Ifa 192.168.2.10 [SCOPED]
 Remove old[12]: Net 192.168.2.1/32 Ifp en1 Ifa 192.168.2.20 [SCOPED]
 Remove old[13]: Net 192.168.3.0/24 Ifp fw0 Ifa 192.168.3.30
 Remove old[14]: Net 192.168.3.1/32 Ifp fw0 Ifa 192.168.3.30
+Remove old[17]: Net 224.0.0.0/4 Ifp fw0 Ifa 192.168.3.30 [SCOPED]
+Remove old[20]: Net 255.255.255.255/32 Ifp fw0 Ifa 192.168.3.30 [SCOPED]
 =================> Apply 'test3', 'test8' End <=================
 
 =================> Apply 'test8', 'test3' Begin <=================
-Old routes ('test8') = <IPv4RouteList[6]> = {
+Old routes ('test8') = <IPv4RouteList[10]> = {
  0. Net 0.0.0.0/0 Gate 10.0.0.1 Ifp en0 Ifa 10.0.0.10
  1. Net 0.0.0.0/0 Gate 10.0.0.1 Ifp en1 Ifa 10.0.0.20 [SCOPED]
  2. Net 10.0.0.0/24 Ifp en0 Ifa 10.0.0.10
  3. Net 10.0.0.0/24 Ifp en1 Ifa 10.0.0.20 [SCOPED]
  4. Net 10.0.0.1/32 Ifp en0 Ifa 10.0.0.10
  5. Net 10.0.0.1/32 Ifp en1 Ifa 10.0.0.20 [SCOPED]
+ 6. Net 224.0.0.0/4 Ifp en0 Ifa 10.0.0.10
+ 7. Net 224.0.0.0/4 Ifp en1 Ifa 10.0.0.20 [SCOPED]
+ 8. Net 255.255.255.255/32 Ifp en0 Ifa 10.0.0.10
+ 9. Net 255.255.255.255/32 Ifp en1 Ifa 10.0.0.20 [SCOPED]
 }
 Add new[4]: Net 10.0.0.1/32 Ifp en0 Ifa 10.0.0.10
 Add new[0]: Net 0.0.0.0/0 Gate 10.0.0.1 Ifp en0 Ifa 10.0.0.10
@@ -5260,7 +7512,11 @@ Add new[5]: Net 10.0.0.1/32 Ifp en1 Ifa 10.0.0.20 [SCOPED]
 Add new[1]: Net 0.0.0.0/0 Gate 10.0.0.1 Ifp en1 Ifa 10.0.0.20 [SCOPED]
 Add new[2]: Net 10.0.0.0/24 Ifp en0 Ifa 10.0.0.10
 Add new[3]: Net 10.0.0.0/24 Ifp en1 Ifa 10.0.0.20 [SCOPED]
-New Routes ('test3') = <IPv4RouteList[15]> = {
+Add new[6]: Net 224.0.0.0/4 Ifp en0 Ifa 10.0.0.10
+Add new[7]: Net 224.0.0.0/4 Ifp en1 Ifa 10.0.0.20 [SCOPED]
+Add new[8]: Net 255.255.255.255/32 Ifp en0 Ifa 10.0.0.10
+Add new[9]: Net 255.255.255.255/32 Ifp en1 Ifa 10.0.0.20 [SCOPED]
+New Routes ('test3') = <IPv4RouteList[21]> = {
  0. Net 0.0.0.0/0 Gate 10.0.0.1 Ifp en0 Ifa 10.0.0.10
  1. Net 0.0.0.0/0 Gate 10.0.0.1 Ifp en1 Ifa 10.0.0.20 [SCOPED]
  2. Net 0.0.0.0/0 Gate 192.168.3.1 Ifp fw0 Ifa 192.168.3.30 [SCOPED]
@@ -5276,6 +7532,12 @@ New Routes ('test3') = <IPv4RouteList[15]> = {
 12. Net 192.168.2.1/32 Ifp en1 Ifa 192.168.2.20 [SCOPED]
 13. Net 192.168.3.0/24 Ifp fw0 Ifa 192.168.3.30
 14. Net 192.168.3.1/32 Ifp fw0 Ifa 192.168.3.30
+15. Net 224.0.0.0/4 Ifp en0 Ifa 10.0.0.10
+16. Net 224.0.0.0/4 Ifp en1 Ifa 10.0.0.20 [SCOPED]
+17. Net 224.0.0.0/4 Ifp fw0 Ifa 192.168.3.30 [SCOPED]
+18. Net 255.255.255.255/32 Ifp en0 Ifa 10.0.0.10
+19. Net 255.255.255.255/32 Ifp en1 Ifa 10.0.0.20 [SCOPED]
+20. Net 255.255.255.255/32 Ifp fw0 Ifa 192.168.3.30 [SCOPED]
 }
 Add new[14]: Net 192.168.3.1/32 Ifp fw0 Ifa 192.168.3.30
 Add new[2]: Net 0.0.0.0/0 Gate 192.168.3.1 Ifp fw0 Ifa 192.168.3.30 [SCOPED]
@@ -5286,10 +7548,12 @@ Add new[10]: Net 192.168.2.1/32 Ifp fw0 Ifa 192.168.2.30
 Add new[11]: Net 192.168.2.1/32 Ifp en0 Ifa 192.168.2.10 [SCOPED]
 Add new[12]: Net 192.168.2.1/32 Ifp en1 Ifa 192.168.2.20 [SCOPED]
 Add new[13]: Net 192.168.3.0/24 Ifp fw0 Ifa 192.168.3.30
+Add new[17]: Net 224.0.0.0/4 Ifp fw0 Ifa 192.168.3.30 [SCOPED]
+Add new[20]: Net 255.255.255.255/32 Ifp fw0 Ifa 192.168.3.30 [SCOPED]
 =================> Apply 'test8', 'test3' End <=================
 
 =================> Apply 'test3', 'test9' Begin <=================
-Old routes ('test3') = <IPv4RouteList[15]> = {
+Old routes ('test3') = <IPv4RouteList[21]> = {
  0. Net 0.0.0.0/0 Gate 10.0.0.1 Ifp en0 Ifa 10.0.0.10
  1. Net 0.0.0.0/0 Gate 10.0.0.1 Ifp en1 Ifa 10.0.0.20 [SCOPED]
  2. Net 0.0.0.0/0 Gate 192.168.3.1 Ifp fw0 Ifa 192.168.3.30 [SCOPED]
@@ -5305,6 +7569,12 @@ Old routes ('test3') = <IPv4RouteList[15]> = {
 12. Net 192.168.2.1/32 Ifp en1 Ifa 192.168.2.20 [SCOPED]
 13. Net 192.168.3.0/24 Ifp fw0 Ifa 192.168.3.30
 14. Net 192.168.3.1/32 Ifp fw0 Ifa 192.168.3.30
+15. Net 224.0.0.0/4 Ifp en0 Ifa 10.0.0.10
+16. Net 224.0.0.0/4 Ifp en1 Ifa 10.0.0.20 [SCOPED]
+17. Net 224.0.0.0/4 Ifp fw0 Ifa 192.168.3.30 [SCOPED]
+18. Net 255.255.255.255/32 Ifp en0 Ifa 10.0.0.10
+19. Net 255.255.255.255/32 Ifp en1 Ifa 10.0.0.20 [SCOPED]
+20. Net 255.255.255.255/32 Ifp fw0 Ifa 192.168.3.30 [SCOPED]
 }
 Add new[5]: Net 10.0.0.1/32 Ifp en0 Ifa 10.0.0.10
 Add new[0]: Net 0.0.0.0/0 Gate 10.0.0.1 Ifp en0 Ifa 10.0.0.10
@@ -5321,7 +7591,13 @@ Add new[10]: Net 192.168.2.1/32 Ifp fw0 Ifa 192.168.2.30
 Add new[11]: Net 192.168.2.1/32 Ifp en0 Ifa 192.168.2.10 [SCOPED]
 Add new[12]: Net 192.168.2.1/32 Ifp en1 Ifa 192.168.2.20 [SCOPED]
 Add new[13]: Net 192.168.3.0/24 Ifp fw0 Ifa 192.168.3.30
-New Routes ('test9') = <IPv4RouteList[9]> = {
+Add new[15]: Net 224.0.0.0/4 Ifp en0 Ifa 10.0.0.10
+Add new[16]: Net 224.0.0.0/4 Ifp en1 Ifa 10.0.0.20 [SCOPED]
+Add new[17]: Net 224.0.0.0/4 Ifp fw0 Ifa 192.168.3.30 [SCOPED]
+Add new[18]: Net 255.255.255.255/32 Ifp en0 Ifa 10.0.0.10
+Add new[19]: Net 255.255.255.255/32 Ifp en1 Ifa 10.0.0.20 [SCOPED]
+Add new[20]: Net 255.255.255.255/32 Ifp fw0 Ifa 192.168.3.30 [SCOPED]
+New Routes ('test9') = <IPv4RouteList[15]> = {
  0. Net 0.0.0.0/0 Gate 10.0.0.1 Ifp en1 Ifa 10.0.0.20 [first]
  1. Net 0.0.0.0/0 Gate 10.0.0.1 Ifp en0 Ifa 10.0.0.10 [SCOPED]
  2. Net 0.0.0.0/0 Gate 192.168.2.1 Ifp fw0 Ifa 192.168.2.30 [SCOPED]
@@ -5331,6 +7607,12 @@ New Routes ('test9') = <IPv4RouteList[9]> = {
  6. Net 10.0.0.1/32 Ifp en0 Ifa 10.0.0.10 [SCOPED]
  7. Net 192.168.2.0/24 Ifp fw0 Ifa 192.168.2.30
  8. Net 192.168.2.1/32 Ifp fw0 Ifa 192.168.2.30
+ 9. Net 224.0.0.0/4 Ifp en1 Ifa 10.0.0.20 [first]
+10. Net 224.0.0.0/4 Ifp en0 Ifa 10.0.0.10 [SCOPED]
+11. Net 224.0.0.0/4 Ifp fw0 Ifa 192.168.2.30 [SCOPED]
+12. Net 255.255.255.255/32 Ifp en1 Ifa 10.0.0.20 [first]
+13. Net 255.255.255.255/32 Ifp en0 Ifa 10.0.0.10 [SCOPED]
+14. Net 255.255.255.255/32 Ifp fw0 Ifa 192.168.2.30 [SCOPED]
 }
 Remove old[0]: Net 0.0.0.0/0 Gate 10.0.0.1 Ifp en0 Ifa 10.0.0.10
 Remove old[1]: Net 0.0.0.0/0 Gate 10.0.0.1 Ifp en1 Ifa 10.0.0.20 [SCOPED]
@@ -5345,6 +7627,12 @@ Remove old[11]: Net 192.168.2.1/32 Ifp en0 Ifa 192.168.2.10 [SCOPED]
 Remove old[12]: Net 192.168.2.1/32 Ifp en1 Ifa 192.168.2.20 [SCOPED]
 Remove old[13]: Net 192.168.3.0/24 Ifp fw0 Ifa 192.168.3.30
 Remove old[14]: Net 192.168.3.1/32 Ifp fw0 Ifa 192.168.3.30
+Remove old[15]: Net 224.0.0.0/4 Ifp en0 Ifa 10.0.0.10
+Remove old[16]: Net 224.0.0.0/4 Ifp en1 Ifa 10.0.0.20 [SCOPED]
+Remove old[17]: Net 224.0.0.0/4 Ifp fw0 Ifa 192.168.3.30 [SCOPED]
+Remove old[18]: Net 255.255.255.255/32 Ifp en0 Ifa 10.0.0.10
+Remove old[19]: Net 255.255.255.255/32 Ifp en1 Ifa 10.0.0.20 [SCOPED]
+Remove old[20]: Net 255.255.255.255/32 Ifp fw0 Ifa 192.168.3.30 [SCOPED]
 Add new[5]: Net 10.0.0.1/32 Ifp en1 Ifa 10.0.0.20 [first]
 Add new[0]: Net 0.0.0.0/0 Gate 10.0.0.1 Ifp en1 Ifa 10.0.0.20 [first]
 Add new[6]: Net 10.0.0.1/32 Ifp en0 Ifa 10.0.0.10 [SCOPED]
@@ -5352,10 +7640,16 @@ Add new[1]: Net 0.0.0.0/0 Gate 10.0.0.1 Ifp en0 Ifa 10.0.0.10 [SCOPED]
 Add new[2]: Net 0.0.0.0/0 Gate 192.168.2.1 Ifp fw0 Ifa 192.168.2.30 [SCOPED]
 Add new[3]: Net 10.0.0.0/24 Ifp en1 Ifa 10.0.0.20 [first]
 Add new[4]: Net 10.0.0.0/24 Ifp en0 Ifa 10.0.0.10 [SCOPED]
+Add new[9]: Net 224.0.0.0/4 Ifp en1 Ifa 10.0.0.20 [first]
+Add new[10]: Net 224.0.0.0/4 Ifp en0 Ifa 10.0.0.10 [SCOPED]
+Add new[11]: Net 224.0.0.0/4 Ifp fw0 Ifa 192.168.2.30 [SCOPED]
+Add new[12]: Net 255.255.255.255/32 Ifp en1 Ifa 10.0.0.20 [first]
+Add new[13]: Net 255.255.255.255/32 Ifp en0 Ifa 10.0.0.10 [SCOPED]
+Add new[14]: Net 255.255.255.255/32 Ifp fw0 Ifa 192.168.2.30 [SCOPED]
 =================> Apply 'test3', 'test9' End <=================
 
 =================> Apply 'test9', 'test3' Begin <=================
-Old routes ('test9') = <IPv4RouteList[9]> = {
+Old routes ('test9') = <IPv4RouteList[15]> = {
  0. Net 0.0.0.0/0 Gate 10.0.0.1 Ifp en1 Ifa 10.0.0.20 [first]
  1. Net 0.0.0.0/0 Gate 10.0.0.1 Ifp en0 Ifa 10.0.0.10 [SCOPED]
  2. Net 0.0.0.0/0 Gate 192.168.2.1 Ifp fw0 Ifa 192.168.2.30 [SCOPED]
@@ -5365,6 +7659,12 @@ Old routes ('test9') = <IPv4RouteList[9]> = {
  6. Net 10.0.0.1/32 Ifp en0 Ifa 10.0.0.10 [SCOPED]
  7. Net 192.168.2.0/24 Ifp fw0 Ifa 192.168.2.30
  8. Net 192.168.2.1/32 Ifp fw0 Ifa 192.168.2.30
+ 9. Net 224.0.0.0/4 Ifp en1 Ifa 10.0.0.20 [first]
+10. Net 224.0.0.0/4 Ifp en0 Ifa 10.0.0.10 [SCOPED]
+11. Net 224.0.0.0/4 Ifp fw0 Ifa 192.168.2.30 [SCOPED]
+12. Net 255.255.255.255/32 Ifp en1 Ifa 10.0.0.20 [first]
+13. Net 255.255.255.255/32 Ifp en0 Ifa 10.0.0.10 [SCOPED]
+14. Net 255.255.255.255/32 Ifp fw0 Ifa 192.168.2.30 [SCOPED]
 }
 Add new[5]: Net 10.0.0.1/32 Ifp en1 Ifa 10.0.0.20 [first]
 Add new[0]: Net 0.0.0.0/0 Gate 10.0.0.1 Ifp en1 Ifa 10.0.0.20 [first]
@@ -5375,7 +7675,13 @@ Add new[2]: Net 0.0.0.0/0 Gate 192.168.2.1 Ifp fw0 Ifa 192.168.2.30 [SCOPED]
 Add new[3]: Net 10.0.0.0/24 Ifp en1 Ifa 10.0.0.20 [first]
 Add new[4]: Net 10.0.0.0/24 Ifp en0 Ifa 10.0.0.10 [SCOPED]
 Add new[7]: Net 192.168.2.0/24 Ifp fw0 Ifa 192.168.2.30
-New Routes ('test3') = <IPv4RouteList[15]> = {
+Add new[9]: Net 224.0.0.0/4 Ifp en1 Ifa 10.0.0.20 [first]
+Add new[10]: Net 224.0.0.0/4 Ifp en0 Ifa 10.0.0.10 [SCOPED]
+Add new[11]: Net 224.0.0.0/4 Ifp fw0 Ifa 192.168.2.30 [SCOPED]
+Add new[12]: Net 255.255.255.255/32 Ifp en1 Ifa 10.0.0.20 [first]
+Add new[13]: Net 255.255.255.255/32 Ifp en0 Ifa 10.0.0.10 [SCOPED]
+Add new[14]: Net 255.255.255.255/32 Ifp fw0 Ifa 192.168.2.30 [SCOPED]
+New Routes ('test3') = <IPv4RouteList[21]> = {
  0. Net 0.0.0.0/0 Gate 10.0.0.1 Ifp en0 Ifa 10.0.0.10
  1. Net 0.0.0.0/0 Gate 10.0.0.1 Ifp en1 Ifa 10.0.0.20 [SCOPED]
  2. Net 0.0.0.0/0 Gate 192.168.3.1 Ifp fw0 Ifa 192.168.3.30 [SCOPED]
@@ -5391,6 +7697,12 @@ New Routes ('test3') = <IPv4RouteList[15]> = {
 12. Net 192.168.2.1/32 Ifp en1 Ifa 192.168.2.20 [SCOPED]
 13. Net 192.168.3.0/24 Ifp fw0 Ifa 192.168.3.30
 14. Net 192.168.3.1/32 Ifp fw0 Ifa 192.168.3.30
+15. Net 224.0.0.0/4 Ifp en0 Ifa 10.0.0.10
+16. Net 224.0.0.0/4 Ifp en1 Ifa 10.0.0.20 [SCOPED]
+17. Net 224.0.0.0/4 Ifp fw0 Ifa 192.168.3.30 [SCOPED]
+18. Net 255.255.255.255/32 Ifp en0 Ifa 10.0.0.10
+19. Net 255.255.255.255/32 Ifp en1 Ifa 10.0.0.20 [SCOPED]
+20. Net 255.255.255.255/32 Ifp fw0 Ifa 192.168.3.30 [SCOPED]
 }
 Remove old[0]: Net 0.0.0.0/0 Gate 10.0.0.1 Ifp en1 Ifa 10.0.0.20 [first]
 Remove old[1]: Net 0.0.0.0/0 Gate 10.0.0.1 Ifp en0 Ifa 10.0.0.10 [SCOPED]
@@ -5399,6 +7711,12 @@ Remove old[3]: Net 10.0.0.0/24 Ifp en1 Ifa 10.0.0.20 [first]
 Remove old[4]: Net 10.0.0.0/24 Ifp en0 Ifa 10.0.0.10 [SCOPED]
 Remove old[5]: Net 10.0.0.1/32 Ifp en1 Ifa 10.0.0.20 [first]
 Remove old[6]: Net 10.0.0.1/32 Ifp en0 Ifa 10.0.0.10 [SCOPED]
+Remove old[9]: Net 224.0.0.0/4 Ifp en1 Ifa 10.0.0.20 [first]
+Remove old[10]: Net 224.0.0.0/4 Ifp en0 Ifa 10.0.0.10 [SCOPED]
+Remove old[11]: Net 224.0.0.0/4 Ifp fw0 Ifa 192.168.2.30 [SCOPED]
+Remove old[12]: Net 255.255.255.255/32 Ifp en1 Ifa 10.0.0.20 [first]
+Remove old[13]: Net 255.255.255.255/32 Ifp en0 Ifa 10.0.0.10 [SCOPED]
+Remove old[14]: Net 255.255.255.255/32 Ifp fw0 Ifa 192.168.2.30 [SCOPED]
 Add new[5]: Net 10.0.0.1/32 Ifp en0 Ifa 10.0.0.10
 Add new[0]: Net 0.0.0.0/0 Gate 10.0.0.1 Ifp en0 Ifa 10.0.0.10
 Add new[6]: Net 10.0.0.1/32 Ifp en1 Ifa 10.0.0.20 [SCOPED]
@@ -5412,10 +7730,16 @@ Add new[9]: Net 192.168.2.0/24 Ifp en1 Ifa 192.168.2.20 [SCOPED]
 Add new[11]: Net 192.168.2.1/32 Ifp en0 Ifa 192.168.2.10 [SCOPED]
 Add new[12]: Net 192.168.2.1/32 Ifp en1 Ifa 192.168.2.20 [SCOPED]
 Add new[13]: Net 192.168.3.0/24 Ifp fw0 Ifa 192.168.3.30
+Add new[15]: Net 224.0.0.0/4 Ifp en0 Ifa 10.0.0.10
+Add new[16]: Net 224.0.0.0/4 Ifp en1 Ifa 10.0.0.20 [SCOPED]
+Add new[17]: Net 224.0.0.0/4 Ifp fw0 Ifa 192.168.3.30 [SCOPED]
+Add new[18]: Net 255.255.255.255/32 Ifp en0 Ifa 10.0.0.10
+Add new[19]: Net 255.255.255.255/32 Ifp en1 Ifa 10.0.0.20 [SCOPED]
+Add new[20]: Net 255.255.255.255/32 Ifp fw0 Ifa 192.168.3.30 [SCOPED]
 =================> Apply 'test9', 'test3' End <=================
 
 =================> Apply 'test3', 'test10' Begin <=================
-Old routes ('test3') = <IPv4RouteList[15]> = {
+Old routes ('test3') = <IPv4RouteList[21]> = {
  0. Net 0.0.0.0/0 Gate 10.0.0.1 Ifp en0 Ifa 10.0.0.10
  1. Net 0.0.0.0/0 Gate 10.0.0.1 Ifp en1 Ifa 10.0.0.20 [SCOPED]
  2. Net 0.0.0.0/0 Gate 192.168.3.1 Ifp fw0 Ifa 192.168.3.30 [SCOPED]
@@ -5431,6 +7755,12 @@ Old routes ('test3') = <IPv4RouteList[15]> = {
 12. Net 192.168.2.1/32 Ifp en1 Ifa 192.168.2.20 [SCOPED]
 13. Net 192.168.3.0/24 Ifp fw0 Ifa 192.168.3.30
 14. Net 192.168.3.1/32 Ifp fw0 Ifa 192.168.3.30
+15. Net 224.0.0.0/4 Ifp en0 Ifa 10.0.0.10
+16. Net 224.0.0.0/4 Ifp en1 Ifa 10.0.0.20 [SCOPED]
+17. Net 224.0.0.0/4 Ifp fw0 Ifa 192.168.3.30 [SCOPED]
+18. Net 255.255.255.255/32 Ifp en0 Ifa 10.0.0.10
+19. Net 255.255.255.255/32 Ifp en1 Ifa 10.0.0.20 [SCOPED]
+20. Net 255.255.255.255/32 Ifp fw0 Ifa 192.168.3.30 [SCOPED]
 }
 Add new[5]: Net 10.0.0.1/32 Ifp en0 Ifa 10.0.0.10
 Add new[0]: Net 0.0.0.0/0 Gate 10.0.0.1 Ifp en0 Ifa 10.0.0.10
@@ -5447,7 +7777,13 @@ Add new[10]: Net 192.168.2.1/32 Ifp fw0 Ifa 192.168.2.30
 Add new[11]: Net 192.168.2.1/32 Ifp en0 Ifa 192.168.2.10 [SCOPED]
 Add new[12]: Net 192.168.2.1/32 Ifp en1 Ifa 192.168.2.20 [SCOPED]
 Add new[13]: Net 192.168.3.0/24 Ifp fw0 Ifa 192.168.3.30
-New Routes ('test10') = <IPv4RouteList[9]> = {
+Add new[15]: Net 224.0.0.0/4 Ifp en0 Ifa 10.0.0.10
+Add new[16]: Net 224.0.0.0/4 Ifp en1 Ifa 10.0.0.20 [SCOPED]
+Add new[17]: Net 224.0.0.0/4 Ifp fw0 Ifa 192.168.3.30 [SCOPED]
+Add new[18]: Net 255.255.255.255/32 Ifp en0 Ifa 10.0.0.10
+Add new[19]: Net 255.255.255.255/32 Ifp en1 Ifa 10.0.0.20 [SCOPED]
+Add new[20]: Net 255.255.255.255/32 Ifp fw0 Ifa 192.168.3.30 [SCOPED]
+New Routes ('test10') = <IPv4RouteList[15]> = {
  0. Net 0.0.0.0/0 Gate 10.0.0.1 Ifp en1 Ifa 10.0.0.20
  1. Net 0.0.0.0/0 Gate 192.168.2.1 Ifp fw0 Ifa 192.168.2.30 [SCOPED]
  2. Net 0.0.0.0/0 Gate 10.0.0.1 Ifp en0 Ifa 10.0.0.10 [last] [SCOPED]
@@ -5457,6 +7793,12 @@ New Routes ('test10') = <IPv4RouteList[9]> = {
  6. Net 10.0.0.1/32 Ifp en0 Ifa 10.0.0.10 [last] [SCOPED]
  7. Net 192.168.2.0/24 Ifp fw0 Ifa 192.168.2.30
  8. Net 192.168.2.1/32 Ifp fw0 Ifa 192.168.2.30
+ 9. Net 224.0.0.0/4 Ifp en1 Ifa 10.0.0.20
+10. Net 224.0.0.0/4 Ifp fw0 Ifa 192.168.2.30 [SCOPED]
+11. Net 224.0.0.0/4 Ifp en0 Ifa 10.0.0.10 [last] [SCOPED]
+12. Net 255.255.255.255/32 Ifp en1 Ifa 10.0.0.20
+13. Net 255.255.255.255/32 Ifp fw0 Ifa 192.168.2.30 [SCOPED]
+14. Net 255.255.255.255/32 Ifp en0 Ifa 10.0.0.10 [last] [SCOPED]
 }
 Remove old[0]: Net 0.0.0.0/0 Gate 10.0.0.1 Ifp en0 Ifa 10.0.0.10
 Remove old[1]: Net 0.0.0.0/0 Gate 10.0.0.1 Ifp en1 Ifa 10.0.0.20 [SCOPED]
@@ -5471,6 +7813,12 @@ Remove old[11]: Net 192.168.2.1/32 Ifp en0 Ifa 192.168.2.10 [SCOPED]
 Remove old[12]: Net 192.168.2.1/32 Ifp en1 Ifa 192.168.2.20 [SCOPED]
 Remove old[13]: Net 192.168.3.0/24 Ifp fw0 Ifa 192.168.3.30
 Remove old[14]: Net 192.168.3.1/32 Ifp fw0 Ifa 192.168.3.30
+Remove old[15]: Net 224.0.0.0/4 Ifp en0 Ifa 10.0.0.10
+Remove old[16]: Net 224.0.0.0/4 Ifp en1 Ifa 10.0.0.20 [SCOPED]
+Remove old[17]: Net 224.0.0.0/4 Ifp fw0 Ifa 192.168.3.30 [SCOPED]
+Remove old[18]: Net 255.255.255.255/32 Ifp en0 Ifa 10.0.0.10
+Remove old[19]: Net 255.255.255.255/32 Ifp en1 Ifa 10.0.0.20 [SCOPED]
+Remove old[20]: Net 255.255.255.255/32 Ifp fw0 Ifa 192.168.3.30 [SCOPED]
 Add new[5]: Net 10.0.0.1/32 Ifp en1 Ifa 10.0.0.20
 Add new[0]: Net 0.0.0.0/0 Gate 10.0.0.1 Ifp en1 Ifa 10.0.0.20
 Add new[1]: Net 0.0.0.0/0 Gate 192.168.2.1 Ifp fw0 Ifa 192.168.2.30 [SCOPED]
@@ -5478,10 +7826,16 @@ Add new[6]: Net 10.0.0.1/32 Ifp en0 Ifa 10.0.0.10 [last] [SCOPED]
 Add new[2]: Net 0.0.0.0/0 Gate 10.0.0.1 Ifp en0 Ifa 10.0.0.10 [last] [SCOPED]
 Add new[3]: Net 10.0.0.0/24 Ifp en1 Ifa 10.0.0.20
 Add new[4]: Net 10.0.0.0/24 Ifp en0 Ifa 10.0.0.10 [last] [SCOPED]
+Add new[9]: Net 224.0.0.0/4 Ifp en1 Ifa 10.0.0.20
+Add new[10]: Net 224.0.0.0/4 Ifp fw0 Ifa 192.168.2.30 [SCOPED]
+Add new[11]: Net 224.0.0.0/4 Ifp en0 Ifa 10.0.0.10 [last] [SCOPED]
+Add new[12]: Net 255.255.255.255/32 Ifp en1 Ifa 10.0.0.20
+Add new[13]: Net 255.255.255.255/32 Ifp fw0 Ifa 192.168.2.30 [SCOPED]
+Add new[14]: Net 255.255.255.255/32 Ifp en0 Ifa 10.0.0.10 [last] [SCOPED]
 =================> Apply 'test3', 'test10' End <=================
 
 =================> Apply 'test10', 'test3' Begin <=================
-Old routes ('test10') = <IPv4RouteList[9]> = {
+Old routes ('test10') = <IPv4RouteList[15]> = {
  0. Net 0.0.0.0/0 Gate 10.0.0.1 Ifp en1 Ifa 10.0.0.20
  1. Net 0.0.0.0/0 Gate 192.168.2.1 Ifp fw0 Ifa 192.168.2.30 [SCOPED]
  2. Net 0.0.0.0/0 Gate 10.0.0.1 Ifp en0 Ifa 10.0.0.10 [last] [SCOPED]
@@ -5491,6 +7845,12 @@ Old routes ('test10') = <IPv4RouteList[9]> = {
  6. Net 10.0.0.1/32 Ifp en0 Ifa 10.0.0.10 [last] [SCOPED]
  7. Net 192.168.2.0/24 Ifp fw0 Ifa 192.168.2.30
  8. Net 192.168.2.1/32 Ifp fw0 Ifa 192.168.2.30
+ 9. Net 224.0.0.0/4 Ifp en1 Ifa 10.0.0.20
+10. Net 224.0.0.0/4 Ifp fw0 Ifa 192.168.2.30 [SCOPED]
+11. Net 224.0.0.0/4 Ifp en0 Ifa 10.0.0.10 [last] [SCOPED]
+12. Net 255.255.255.255/32 Ifp en1 Ifa 10.0.0.20
+13. Net 255.255.255.255/32 Ifp fw0 Ifa 192.168.2.30 [SCOPED]
+14. Net 255.255.255.255/32 Ifp en0 Ifa 10.0.0.10 [last] [SCOPED]
 }
 Add new[5]: Net 10.0.0.1/32 Ifp en1 Ifa 10.0.0.20
 Add new[0]: Net 0.0.0.0/0 Gate 10.0.0.1 Ifp en1 Ifa 10.0.0.20
@@ -5501,7 +7861,13 @@ Add new[2]: Net 0.0.0.0/0 Gate 10.0.0.1 Ifp en0 Ifa 10.0.0.10 [last] [SCOPED]
 Add new[3]: Net 10.0.0.0/24 Ifp en1 Ifa 10.0.0.20
 Add new[4]: Net 10.0.0.0/24 Ifp en0 Ifa 10.0.0.10 [last] [SCOPED]
 Add new[7]: Net 192.168.2.0/24 Ifp fw0 Ifa 192.168.2.30
-New Routes ('test3') = <IPv4RouteList[15]> = {
+Add new[9]: Net 224.0.0.0/4 Ifp en1 Ifa 10.0.0.20
+Add new[10]: Net 224.0.0.0/4 Ifp fw0 Ifa 192.168.2.30 [SCOPED]
+Add new[11]: Net 224.0.0.0/4 Ifp en0 Ifa 10.0.0.10 [last] [SCOPED]
+Add new[12]: Net 255.255.255.255/32 Ifp en1 Ifa 10.0.0.20
+Add new[13]: Net 255.255.255.255/32 Ifp fw0 Ifa 192.168.2.30 [SCOPED]
+Add new[14]: Net 255.255.255.255/32 Ifp en0 Ifa 10.0.0.10 [last] [SCOPED]
+New Routes ('test3') = <IPv4RouteList[21]> = {
  0. Net 0.0.0.0/0 Gate 10.0.0.1 Ifp en0 Ifa 10.0.0.10
  1. Net 0.0.0.0/0 Gate 10.0.0.1 Ifp en1 Ifa 10.0.0.20 [SCOPED]
  2. Net 0.0.0.0/0 Gate 192.168.3.1 Ifp fw0 Ifa 192.168.3.30 [SCOPED]
@@ -5517,6 +7883,12 @@ New Routes ('test3') = <IPv4RouteList[15]> = {
 12. Net 192.168.2.1/32 Ifp en1 Ifa 192.168.2.20 [SCOPED]
 13. Net 192.168.3.0/24 Ifp fw0 Ifa 192.168.3.30
 14. Net 192.168.3.1/32 Ifp fw0 Ifa 192.168.3.30
+15. Net 224.0.0.0/4 Ifp en0 Ifa 10.0.0.10
+16. Net 224.0.0.0/4 Ifp en1 Ifa 10.0.0.20 [SCOPED]
+17. Net 224.0.0.0/4 Ifp fw0 Ifa 192.168.3.30 [SCOPED]
+18. Net 255.255.255.255/32 Ifp en0 Ifa 10.0.0.10
+19. Net 255.255.255.255/32 Ifp en1 Ifa 10.0.0.20 [SCOPED]
+20. Net 255.255.255.255/32 Ifp fw0 Ifa 192.168.3.30 [SCOPED]
 }
 Remove old[0]: Net 0.0.0.0/0 Gate 10.0.0.1 Ifp en1 Ifa 10.0.0.20
 Remove old[1]: Net 0.0.0.0/0 Gate 192.168.2.1 Ifp fw0 Ifa 192.168.2.30 [SCOPED]
@@ -5525,6 +7897,12 @@ Remove old[3]: Net 10.0.0.0/24 Ifp en1 Ifa 10.0.0.20
 Remove old[4]: Net 10.0.0.0/24 Ifp en0 Ifa 10.0.0.10 [last] [SCOPED]
 Remove old[5]: Net 10.0.0.1/32 Ifp en1 Ifa 10.0.0.20
 Remove old[6]: Net 10.0.0.1/32 Ifp en0 Ifa 10.0.0.10 [last] [SCOPED]
+Remove old[9]: Net 224.0.0.0/4 Ifp en1 Ifa 10.0.0.20
+Remove old[10]: Net 224.0.0.0/4 Ifp fw0 Ifa 192.168.2.30 [SCOPED]
+Remove old[11]: Net 224.0.0.0/4 Ifp en0 Ifa 10.0.0.10 [last] [SCOPED]
+Remove old[12]: Net 255.255.255.255/32 Ifp en1 Ifa 10.0.0.20
+Remove old[13]: Net 255.255.255.255/32 Ifp fw0 Ifa 192.168.2.30 [SCOPED]
+Remove old[14]: Net 255.255.255.255/32 Ifp en0 Ifa 10.0.0.10 [last] [SCOPED]
 Add new[5]: Net 10.0.0.1/32 Ifp en0 Ifa 10.0.0.10
 Add new[0]: Net 0.0.0.0/0 Gate 10.0.0.1 Ifp en0 Ifa 10.0.0.10
 Add new[6]: Net 10.0.0.1/32 Ifp en1 Ifa 10.0.0.20 [SCOPED]
@@ -5538,10 +7916,16 @@ Add new[9]: Net 192.168.2.0/24 Ifp en1 Ifa 192.168.2.20 [SCOPED]
 Add new[11]: Net 192.168.2.1/32 Ifp en0 Ifa 192.168.2.10 [SCOPED]
 Add new[12]: Net 192.168.2.1/32 Ifp en1 Ifa 192.168.2.20 [SCOPED]
 Add new[13]: Net 192.168.3.0/24 Ifp fw0 Ifa 192.168.3.30
+Add new[15]: Net 224.0.0.0/4 Ifp en0 Ifa 10.0.0.10
+Add new[16]: Net 224.0.0.0/4 Ifp en1 Ifa 10.0.0.20 [SCOPED]
+Add new[17]: Net 224.0.0.0/4 Ifp fw0 Ifa 192.168.3.30 [SCOPED]
+Add new[18]: Net 255.255.255.255/32 Ifp en0 Ifa 10.0.0.10
+Add new[19]: Net 255.255.255.255/32 Ifp en1 Ifa 10.0.0.20 [SCOPED]
+Add new[20]: Net 255.255.255.255/32 Ifp fw0 Ifa 192.168.3.30 [SCOPED]
 =================> Apply 'test10', 'test3' End <=================
 
 =================> Apply 'test3', 'test11' Begin <=================
-Old routes ('test3') = <IPv4RouteList[15]> = {
+Old routes ('test3') = <IPv4RouteList[21]> = {
  0. Net 0.0.0.0/0 Gate 10.0.0.1 Ifp en0 Ifa 10.0.0.10
  1. Net 0.0.0.0/0 Gate 10.0.0.1 Ifp en1 Ifa 10.0.0.20 [SCOPED]
  2. Net 0.0.0.0/0 Gate 192.168.3.1 Ifp fw0 Ifa 192.168.3.30 [SCOPED]
@@ -5557,6 +7941,12 @@ Old routes ('test3') = <IPv4RouteList[15]> = {
 12. Net 192.168.2.1/32 Ifp en1 Ifa 192.168.2.20 [SCOPED]
 13. Net 192.168.3.0/24 Ifp fw0 Ifa 192.168.3.30
 14. Net 192.168.3.1/32 Ifp fw0 Ifa 192.168.3.30
+15. Net 224.0.0.0/4 Ifp en0 Ifa 10.0.0.10
+16. Net 224.0.0.0/4 Ifp en1 Ifa 10.0.0.20 [SCOPED]
+17. Net 224.0.0.0/4 Ifp fw0 Ifa 192.168.3.30 [SCOPED]
+18. Net 255.255.255.255/32 Ifp en0 Ifa 10.0.0.10
+19. Net 255.255.255.255/32 Ifp en1 Ifa 10.0.0.20 [SCOPED]
+20. Net 255.255.255.255/32 Ifp fw0 Ifa 192.168.3.30 [SCOPED]
 }
 Add new[5]: Net 10.0.0.1/32 Ifp en0 Ifa 10.0.0.10
 Add new[0]: Net 0.0.0.0/0 Gate 10.0.0.1 Ifp en0 Ifa 10.0.0.10
@@ -5573,7 +7963,13 @@ Add new[10]: Net 192.168.2.1/32 Ifp fw0 Ifa 192.168.2.30
 Add new[11]: Net 192.168.2.1/32 Ifp en0 Ifa 192.168.2.10 [SCOPED]
 Add new[12]: Net 192.168.2.1/32 Ifp en1 Ifa 192.168.2.20 [SCOPED]
 Add new[13]: Net 192.168.3.0/24 Ifp fw0 Ifa 192.168.3.30
-New Routes ('test11') = <IPv4RouteList[9]> = {
+Add new[15]: Net 224.0.0.0/4 Ifp en0 Ifa 10.0.0.10
+Add new[16]: Net 224.0.0.0/4 Ifp en1 Ifa 10.0.0.20 [SCOPED]
+Add new[17]: Net 224.0.0.0/4 Ifp fw0 Ifa 192.168.3.30 [SCOPED]
+Add new[18]: Net 255.255.255.255/32 Ifp en0 Ifa 10.0.0.10
+Add new[19]: Net 255.255.255.255/32 Ifp en1 Ifa 10.0.0.20 [SCOPED]
+Add new[20]: Net 255.255.255.255/32 Ifp fw0 Ifa 192.168.3.30 [SCOPED]
+New Routes ('test11') = <IPv4RouteList[15]> = {
  0. Net 0.0.0.0/0 Gate 10.0.0.1 Ifp en1 Ifa 10.0.0.20
  1. Net 0.0.0.0/0 Gate 192.168.2.1 Ifp fw0 Ifa 192.168.2.30 [SCOPED]
  2. Net 0.0.0.0/0 Gate 10.0.0.1 Ifp en0 Ifa 10.0.0.10 [never] [SCOPED]
@@ -5583,6 +7979,12 @@ New Routes ('test11') = <IPv4RouteList[9]> = {
  6. Net 10.0.0.1/32 Ifp en0 Ifa 10.0.0.10 [last] [SCOPED]
  7. Net 192.168.2.0/24 Ifp fw0 Ifa 192.168.2.30
  8. Net 192.168.2.1/32 Ifp fw0 Ifa 192.168.2.30
+ 9. Net 224.0.0.0/4 Ifp en1 Ifa 10.0.0.20
+10. Net 224.0.0.0/4 Ifp fw0 Ifa 192.168.2.30 [SCOPED]
+11. Net 224.0.0.0/4 Ifp en0 Ifa 10.0.0.10 [last] [SCOPED]
+12. Net 255.255.255.255/32 Ifp en1 Ifa 10.0.0.20
+13. Net 255.255.255.255/32 Ifp fw0 Ifa 192.168.2.30 [SCOPED]
+14. Net 255.255.255.255/32 Ifp en0 Ifa 10.0.0.10 [last] [SCOPED]
 }
 Remove old[0]: Net 0.0.0.0/0 Gate 10.0.0.1 Ifp en0 Ifa 10.0.0.10
 Remove old[1]: Net 0.0.0.0/0 Gate 10.0.0.1 Ifp en1 Ifa 10.0.0.20 [SCOPED]
@@ -5597,6 +7999,12 @@ Remove old[11]: Net 192.168.2.1/32 Ifp en0 Ifa 192.168.2.10 [SCOPED]
 Remove old[12]: Net 192.168.2.1/32 Ifp en1 Ifa 192.168.2.20 [SCOPED]
 Remove old[13]: Net 192.168.3.0/24 Ifp fw0 Ifa 192.168.3.30
 Remove old[14]: Net 192.168.3.1/32 Ifp fw0 Ifa 192.168.3.30
+Remove old[15]: Net 224.0.0.0/4 Ifp en0 Ifa 10.0.0.10
+Remove old[16]: Net 224.0.0.0/4 Ifp en1 Ifa 10.0.0.20 [SCOPED]
+Remove old[17]: Net 224.0.0.0/4 Ifp fw0 Ifa 192.168.3.30 [SCOPED]
+Remove old[18]: Net 255.255.255.255/32 Ifp en0 Ifa 10.0.0.10
+Remove old[19]: Net 255.255.255.255/32 Ifp en1 Ifa 10.0.0.20 [SCOPED]
+Remove old[20]: Net 255.255.255.255/32 Ifp fw0 Ifa 192.168.3.30 [SCOPED]
 Add new[5]: Net 10.0.0.1/32 Ifp en1 Ifa 10.0.0.20
 Add new[0]: Net 0.0.0.0/0 Gate 10.0.0.1 Ifp en1 Ifa 10.0.0.20
 Add new[1]: Net 0.0.0.0/0 Gate 192.168.2.1 Ifp fw0 Ifa 192.168.2.30 [SCOPED]
@@ -5604,10 +8012,16 @@ Add new[6]: Net 10.0.0.1/32 Ifp en0 Ifa 10.0.0.10 [last] [SCOPED]
 Add new[2]: Net 0.0.0.0/0 Gate 10.0.0.1 Ifp en0 Ifa 10.0.0.10 [never] [SCOPED]
 Add new[3]: Net 10.0.0.0/24 Ifp en1 Ifa 10.0.0.20
 Add new[4]: Net 10.0.0.0/24 Ifp en0 Ifa 10.0.0.10 [last] [SCOPED]
+Add new[9]: Net 224.0.0.0/4 Ifp en1 Ifa 10.0.0.20
+Add new[10]: Net 224.0.0.0/4 Ifp fw0 Ifa 192.168.2.30 [SCOPED]
+Add new[11]: Net 224.0.0.0/4 Ifp en0 Ifa 10.0.0.10 [last] [SCOPED]
+Add new[12]: Net 255.255.255.255/32 Ifp en1 Ifa 10.0.0.20
+Add new[13]: Net 255.255.255.255/32 Ifp fw0 Ifa 192.168.2.30 [SCOPED]
+Add new[14]: Net 255.255.255.255/32 Ifp en0 Ifa 10.0.0.10 [last] [SCOPED]
 =================> Apply 'test3', 'test11' End <=================
 
 =================> Apply 'test11', 'test3' Begin <=================
-Old routes ('test11') = <IPv4RouteList[9]> = {
+Old routes ('test11') = <IPv4RouteList[15]> = {
  0. Net 0.0.0.0/0 Gate 10.0.0.1 Ifp en1 Ifa 10.0.0.20
  1. Net 0.0.0.0/0 Gate 192.168.2.1 Ifp fw0 Ifa 192.168.2.30 [SCOPED]
  2. Net 0.0.0.0/0 Gate 10.0.0.1 Ifp en0 Ifa 10.0.0.10 [never] [SCOPED]
@@ -5617,6 +8031,12 @@ Old routes ('test11') = <IPv4RouteList[9]> = {
  6. Net 10.0.0.1/32 Ifp en0 Ifa 10.0.0.10 [last] [SCOPED]
  7. Net 192.168.2.0/24 Ifp fw0 Ifa 192.168.2.30
  8. Net 192.168.2.1/32 Ifp fw0 Ifa 192.168.2.30
+ 9. Net 224.0.0.0/4 Ifp en1 Ifa 10.0.0.20
+10. Net 224.0.0.0/4 Ifp fw0 Ifa 192.168.2.30 [SCOPED]
+11. Net 224.0.0.0/4 Ifp en0 Ifa 10.0.0.10 [last] [SCOPED]
+12. Net 255.255.255.255/32 Ifp en1 Ifa 10.0.0.20
+13. Net 255.255.255.255/32 Ifp fw0 Ifa 192.168.2.30 [SCOPED]
+14. Net 255.255.255.255/32 Ifp en0 Ifa 10.0.0.10 [last] [SCOPED]
 }
 Add new[5]: Net 10.0.0.1/32 Ifp en1 Ifa 10.0.0.20
 Add new[0]: Net 0.0.0.0/0 Gate 10.0.0.1 Ifp en1 Ifa 10.0.0.20
@@ -5627,7 +8047,13 @@ Add new[2]: Net 0.0.0.0/0 Gate 10.0.0.1 Ifp en0 Ifa 10.0.0.10 [never] [SCOPED]
 Add new[3]: Net 10.0.0.0/24 Ifp en1 Ifa 10.0.0.20
 Add new[4]: Net 10.0.0.0/24 Ifp en0 Ifa 10.0.0.10 [last] [SCOPED]
 Add new[7]: Net 192.168.2.0/24 Ifp fw0 Ifa 192.168.2.30
-New Routes ('test3') = <IPv4RouteList[15]> = {
+Add new[9]: Net 224.0.0.0/4 Ifp en1 Ifa 10.0.0.20
+Add new[10]: Net 224.0.0.0/4 Ifp fw0 Ifa 192.168.2.30 [SCOPED]
+Add new[11]: Net 224.0.0.0/4 Ifp en0 Ifa 10.0.0.10 [last] [SCOPED]
+Add new[12]: Net 255.255.255.255/32 Ifp en1 Ifa 10.0.0.20
+Add new[13]: Net 255.255.255.255/32 Ifp fw0 Ifa 192.168.2.30 [SCOPED]
+Add new[14]: Net 255.255.255.255/32 Ifp en0 Ifa 10.0.0.10 [last] [SCOPED]
+New Routes ('test3') = <IPv4RouteList[21]> = {
  0. Net 0.0.0.0/0 Gate 10.0.0.1 Ifp en0 Ifa 10.0.0.10
  1. Net 0.0.0.0/0 Gate 10.0.0.1 Ifp en1 Ifa 10.0.0.20 [SCOPED]
  2. Net 0.0.0.0/0 Gate 192.168.3.1 Ifp fw0 Ifa 192.168.3.30 [SCOPED]
@@ -5643,6 +8069,12 @@ New Routes ('test3') = <IPv4RouteList[15]> = {
 12. Net 192.168.2.1/32 Ifp en1 Ifa 192.168.2.20 [SCOPED]
 13. Net 192.168.3.0/24 Ifp fw0 Ifa 192.168.3.30
 14. Net 192.168.3.1/32 Ifp fw0 Ifa 192.168.3.30
+15. Net 224.0.0.0/4 Ifp en0 Ifa 10.0.0.10
+16. Net 224.0.0.0/4 Ifp en1 Ifa 10.0.0.20 [SCOPED]
+17. Net 224.0.0.0/4 Ifp fw0 Ifa 192.168.3.30 [SCOPED]
+18. Net 255.255.255.255/32 Ifp en0 Ifa 10.0.0.10
+19. Net 255.255.255.255/32 Ifp en1 Ifa 10.0.0.20 [SCOPED]
+20. Net 255.255.255.255/32 Ifp fw0 Ifa 192.168.3.30 [SCOPED]
 }
 Remove old[0]: Net 0.0.0.0/0 Gate 10.0.0.1 Ifp en1 Ifa 10.0.0.20
 Remove old[1]: Net 0.0.0.0/0 Gate 192.168.2.1 Ifp fw0 Ifa 192.168.2.30 [SCOPED]
@@ -5651,6 +8083,12 @@ Remove old[3]: Net 10.0.0.0/24 Ifp en1 Ifa 10.0.0.20
 Remove old[4]: Net 10.0.0.0/24 Ifp en0 Ifa 10.0.0.10 [last] [SCOPED]
 Remove old[5]: Net 10.0.0.1/32 Ifp en1 Ifa 10.0.0.20
 Remove old[6]: Net 10.0.0.1/32 Ifp en0 Ifa 10.0.0.10 [last] [SCOPED]
+Remove old[9]: Net 224.0.0.0/4 Ifp en1 Ifa 10.0.0.20
+Remove old[10]: Net 224.0.0.0/4 Ifp fw0 Ifa 192.168.2.30 [SCOPED]
+Remove old[11]: Net 224.0.0.0/4 Ifp en0 Ifa 10.0.0.10 [last] [SCOPED]
+Remove old[12]: Net 255.255.255.255/32 Ifp en1 Ifa 10.0.0.20
+Remove old[13]: Net 255.255.255.255/32 Ifp fw0 Ifa 192.168.2.30 [SCOPED]
+Remove old[14]: Net 255.255.255.255/32 Ifp en0 Ifa 10.0.0.10 [last] [SCOPED]
 Add new[5]: Net 10.0.0.1/32 Ifp en0 Ifa 10.0.0.10
 Add new[0]: Net 0.0.0.0/0 Gate 10.0.0.1 Ifp en0 Ifa 10.0.0.10
 Add new[6]: Net 10.0.0.1/32 Ifp en1 Ifa 10.0.0.20 [SCOPED]
@@ -5664,10 +8102,16 @@ Add new[9]: Net 192.168.2.0/24 Ifp en1 Ifa 192.168.2.20 [SCOPED]
 Add new[11]: Net 192.168.2.1/32 Ifp en0 Ifa 192.168.2.10 [SCOPED]
 Add new[12]: Net 192.168.2.1/32 Ifp en1 Ifa 192.168.2.20 [SCOPED]
 Add new[13]: Net 192.168.3.0/24 Ifp fw0 Ifa 192.168.3.30
+Add new[15]: Net 224.0.0.0/4 Ifp en0 Ifa 10.0.0.10
+Add new[16]: Net 224.0.0.0/4 Ifp en1 Ifa 10.0.0.20 [SCOPED]
+Add new[17]: Net 224.0.0.0/4 Ifp fw0 Ifa 192.168.3.30 [SCOPED]
+Add new[18]: Net 255.255.255.255/32 Ifp en0 Ifa 10.0.0.10
+Add new[19]: Net 255.255.255.255/32 Ifp en1 Ifa 10.0.0.20 [SCOPED]
+Add new[20]: Net 255.255.255.255/32 Ifp fw0 Ifa 192.168.3.30 [SCOPED]
 =================> Apply 'test11', 'test3' End <=================
 
 =================> Apply 'test3', 'test12' Begin <=================
-Old routes ('test3') = <IPv4RouteList[15]> = {
+Old routes ('test3') = <IPv4RouteList[21]> = {
  0. Net 0.0.0.0/0 Gate 10.0.0.1 Ifp en0 Ifa 10.0.0.10
  1. Net 0.0.0.0/0 Gate 10.0.0.1 Ifp en1 Ifa 10.0.0.20 [SCOPED]
  2. Net 0.0.0.0/0 Gate 192.168.3.1 Ifp fw0 Ifa 192.168.3.30 [SCOPED]
@@ -5683,6 +8127,12 @@ Old routes ('test3') = <IPv4RouteList[15]> = {
 12. Net 192.168.2.1/32 Ifp en1 Ifa 192.168.2.20 [SCOPED]
 13. Net 192.168.3.0/24 Ifp fw0 Ifa 192.168.3.30
 14. Net 192.168.3.1/32 Ifp fw0 Ifa 192.168.3.30
+15. Net 224.0.0.0/4 Ifp en0 Ifa 10.0.0.10
+16. Net 224.0.0.0/4 Ifp en1 Ifa 10.0.0.20 [SCOPED]
+17. Net 224.0.0.0/4 Ifp fw0 Ifa 192.168.3.30 [SCOPED]
+18. Net 255.255.255.255/32 Ifp en0 Ifa 10.0.0.10
+19. Net 255.255.255.255/32 Ifp en1 Ifa 10.0.0.20 [SCOPED]
+20. Net 255.255.255.255/32 Ifp fw0 Ifa 192.168.3.30 [SCOPED]
 }
 Add new[5]: Net 10.0.0.1/32 Ifp en0 Ifa 10.0.0.10
 Add new[0]: Net 0.0.0.0/0 Gate 10.0.0.1 Ifp en0 Ifa 10.0.0.10
@@ -5699,13 +8149,23 @@ Add new[10]: Net 192.168.2.1/32 Ifp fw0 Ifa 192.168.2.30
 Add new[11]: Net 192.168.2.1/32 Ifp en0 Ifa 192.168.2.10 [SCOPED]
 Add new[12]: Net 192.168.2.1/32 Ifp en1 Ifa 192.168.2.20 [SCOPED]
 Add new[13]: Net 192.168.3.0/24 Ifp fw0 Ifa 192.168.3.30
-New Routes ('test12') = <IPv4RouteList[6]> = {
+Add new[15]: Net 224.0.0.0/4 Ifp en0 Ifa 10.0.0.10
+Add new[16]: Net 224.0.0.0/4 Ifp en1 Ifa 10.0.0.20 [SCOPED]
+Add new[17]: Net 224.0.0.0/4 Ifp fw0 Ifa 192.168.3.30 [SCOPED]
+Add new[18]: Net 255.255.255.255/32 Ifp en0 Ifa 10.0.0.10
+Add new[19]: Net 255.255.255.255/32 Ifp en1 Ifa 10.0.0.20 [SCOPED]
+Add new[20]: Net 255.255.255.255/32 Ifp fw0 Ifa 192.168.3.30 [SCOPED]
+New Routes ('test12') = <IPv4RouteList[10]> = {
  0. Net 0.0.0.0/0 Gate 10.0.0.1 Ifp en0 Ifa 10.0.0.10
  1. Net 0.0.0.0/0 Gate 10.0.0.1 Ifp en1 Ifa 10.0.0.20 [SCOPED]
  2. Net 10.0.0.0/24 Ifp en0 Ifa 10.0.0.10
  3. Net 10.0.0.0/24 Ifp en1 Ifa 10.0.0.20 [SCOPED]
  4. Net 10.0.0.1/32 Ifp en0 Ifa 10.0.0.10
  5. Net 10.0.0.1/32 Ifp en1 Ifa 10.0.0.20 [SCOPED]
+ 6. Net 224.0.0.0/4 Ifp en0 Ifa 10.0.0.10
+ 7. Net 224.0.0.0/4 Ifp en1 Ifa 10.0.0.20 [SCOPED]
+ 8. Net 255.255.255.255/32 Ifp en0 Ifa 10.0.0.10
+ 9. Net 255.255.255.255/32 Ifp en1 Ifa 10.0.0.20 [SCOPED]
 }
 Remove old[2]: Net 0.0.0.0/0 Gate 192.168.3.1 Ifp fw0 Ifa 192.168.3.30 [SCOPED]
 Remove old[7]: Net 192.168.2.0/24 Ifp fw0 Ifa 192.168.2.30
@@ -5716,16 +8176,22 @@ Remove old[11]: Net 192.168.2.1/32 Ifp en0 Ifa 192.168.2.10 [SCOPED]
 Remove old[12]: Net 192.168.2.1/32 Ifp en1 Ifa 192.168.2.20 [SCOPED]
 Remove old[13]: Net 192.168.3.0/24 Ifp fw0 Ifa 192.168.3.30
 Remove old[14]: Net 192.168.3.1/32 Ifp fw0 Ifa 192.168.3.30
+Remove old[17]: Net 224.0.0.0/4 Ifp fw0 Ifa 192.168.3.30 [SCOPED]
+Remove old[20]: Net 255.255.255.255/32 Ifp fw0 Ifa 192.168.3.30 [SCOPED]
 =================> Apply 'test3', 'test12' End <=================
 
 =================> Apply 'test12', 'test3' Begin <=================
-Old routes ('test12') = <IPv4RouteList[6]> = {
+Old routes ('test12') = <IPv4RouteList[10]> = {
  0. Net 0.0.0.0/0 Gate 10.0.0.1 Ifp en0 Ifa 10.0.0.10
  1. Net 0.0.0.0/0 Gate 10.0.0.1 Ifp en1 Ifa 10.0.0.20 [SCOPED]
  2. Net 10.0.0.0/24 Ifp en0 Ifa 10.0.0.10
  3. Net 10.0.0.0/24 Ifp en1 Ifa 10.0.0.20 [SCOPED]
  4. Net 10.0.0.1/32 Ifp en0 Ifa 10.0.0.10
  5. Net 10.0.0.1/32 Ifp en1 Ifa 10.0.0.20 [SCOPED]
+ 6. Net 224.0.0.0/4 Ifp en0 Ifa 10.0.0.10
+ 7. Net 224.0.0.0/4 Ifp en1 Ifa 10.0.0.20 [SCOPED]
+ 8. Net 255.255.255.255/32 Ifp en0 Ifa 10.0.0.10
+ 9. Net 255.255.255.255/32 Ifp en1 Ifa 10.0.0.20 [SCOPED]
 }
 Add new[4]: Net 10.0.0.1/32 Ifp en0 Ifa 10.0.0.10
 Add new[0]: Net 0.0.0.0/0 Gate 10.0.0.1 Ifp en0 Ifa 10.0.0.10
@@ -5733,7 +8199,11 @@ Add new[5]: Net 10.0.0.1/32 Ifp en1 Ifa 10.0.0.20 [SCOPED]
 Add new[1]: Net 0.0.0.0/0 Gate 10.0.0.1 Ifp en1 Ifa 10.0.0.20 [SCOPED]
 Add new[2]: Net 10.0.0.0/24 Ifp en0 Ifa 10.0.0.10
 Add new[3]: Net 10.0.0.0/24 Ifp en1 Ifa 10.0.0.20 [SCOPED]
-New Routes ('test3') = <IPv4RouteList[15]> = {
+Add new[6]: Net 224.0.0.0/4 Ifp en0 Ifa 10.0.0.10
+Add new[7]: Net 224.0.0.0/4 Ifp en1 Ifa 10.0.0.20 [SCOPED]
+Add new[8]: Net 255.255.255.255/32 Ifp en0 Ifa 10.0.0.10
+Add new[9]: Net 255.255.255.255/32 Ifp en1 Ifa 10.0.0.20 [SCOPED]
+New Routes ('test3') = <IPv4RouteList[21]> = {
  0. Net 0.0.0.0/0 Gate 10.0.0.1 Ifp en0 Ifa 10.0.0.10
  1. Net 0.0.0.0/0 Gate 10.0.0.1 Ifp en1 Ifa 10.0.0.20 [SCOPED]
  2. Net 0.0.0.0/0 Gate 192.168.3.1 Ifp fw0 Ifa 192.168.3.30 [SCOPED]
@@ -5749,6 +8219,12 @@ New Routes ('test3') = <IPv4RouteList[15]> = {
 12. Net 192.168.2.1/32 Ifp en1 Ifa 192.168.2.20 [SCOPED]
 13. Net 192.168.3.0/24 Ifp fw0 Ifa 192.168.3.30
 14. Net 192.168.3.1/32 Ifp fw0 Ifa 192.168.3.30
+15. Net 224.0.0.0/4 Ifp en0 Ifa 10.0.0.10
+16. Net 224.0.0.0/4 Ifp en1 Ifa 10.0.0.20 [SCOPED]
+17. Net 224.0.0.0/4 Ifp fw0 Ifa 192.168.3.30 [SCOPED]
+18. Net 255.255.255.255/32 Ifp en0 Ifa 10.0.0.10
+19. Net 255.255.255.255/32 Ifp en1 Ifa 10.0.0.20 [SCOPED]
+20. Net 255.255.255.255/32 Ifp fw0 Ifa 192.168.3.30 [SCOPED]
 }
 Add new[14]: Net 192.168.3.1/32 Ifp fw0 Ifa 192.168.3.30
 Add new[2]: Net 0.0.0.0/0 Gate 192.168.3.1 Ifp fw0 Ifa 192.168.3.30 [SCOPED]
@@ -5759,10 +8235,12 @@ Add new[10]: Net 192.168.2.1/32 Ifp fw0 Ifa 192.168.2.30
 Add new[11]: Net 192.168.2.1/32 Ifp en0 Ifa 192.168.2.10 [SCOPED]
 Add new[12]: Net 192.168.2.1/32 Ifp en1 Ifa 192.168.2.20 [SCOPED]
 Add new[13]: Net 192.168.3.0/24 Ifp fw0 Ifa 192.168.3.30
+Add new[17]: Net 224.0.0.0/4 Ifp fw0 Ifa 192.168.3.30 [SCOPED]
+Add new[20]: Net 255.255.255.255/32 Ifp fw0 Ifa 192.168.3.30 [SCOPED]
 =================> Apply 'test12', 'test3' End <=================
 
 =================> Apply 'test3', 'test13' Begin <=================
-Old routes ('test3') = <IPv4RouteList[15]> = {
+Old routes ('test3') = <IPv4RouteList[21]> = {
  0. Net 0.0.0.0/0 Gate 10.0.0.1 Ifp en0 Ifa 10.0.0.10
  1. Net 0.0.0.0/0 Gate 10.0.0.1 Ifp en1 Ifa 10.0.0.20 [SCOPED]
  2. Net 0.0.0.0/0 Gate 192.168.3.1 Ifp fw0 Ifa 192.168.3.30 [SCOPED]
@@ -5778,6 +8256,12 @@ Old routes ('test3') = <IPv4RouteList[15]> = {
 12. Net 192.168.2.1/32 Ifp en1 Ifa 192.168.2.20 [SCOPED]
 13. Net 192.168.3.0/24 Ifp fw0 Ifa 192.168.3.30
 14. Net 192.168.3.1/32 Ifp fw0 Ifa 192.168.3.30
+15. Net 224.0.0.0/4 Ifp en0 Ifa 10.0.0.10
+16. Net 224.0.0.0/4 Ifp en1 Ifa 10.0.0.20 [SCOPED]
+17. Net 224.0.0.0/4 Ifp fw0 Ifa 192.168.3.30 [SCOPED]
+18. Net 255.255.255.255/32 Ifp en0 Ifa 10.0.0.10
+19. Net 255.255.255.255/32 Ifp en1 Ifa 10.0.0.20 [SCOPED]
+20. Net 255.255.255.255/32 Ifp fw0 Ifa 192.168.3.30 [SCOPED]
 }
 Add new[5]: Net 10.0.0.1/32 Ifp en0 Ifa 10.0.0.10
 Add new[0]: Net 0.0.0.0/0 Gate 10.0.0.1 Ifp en0 Ifa 10.0.0.10
@@ -5794,13 +8278,23 @@ Add new[10]: Net 192.168.2.1/32 Ifp fw0 Ifa 192.168.2.30
 Add new[11]: Net 192.168.2.1/32 Ifp en0 Ifa 192.168.2.10 [SCOPED]
 Add new[12]: Net 192.168.2.1/32 Ifp en1 Ifa 192.168.2.20 [SCOPED]
 Add new[13]: Net 192.168.3.0/24 Ifp fw0 Ifa 192.168.3.30
-New Routes ('test13') = <IPv4RouteList[6]> = {
+Add new[15]: Net 224.0.0.0/4 Ifp en0 Ifa 10.0.0.10
+Add new[16]: Net 224.0.0.0/4 Ifp en1 Ifa 10.0.0.20 [SCOPED]
+Add new[17]: Net 224.0.0.0/4 Ifp fw0 Ifa 192.168.3.30 [SCOPED]
+Add new[18]: Net 255.255.255.255/32 Ifp en0 Ifa 10.0.0.10
+Add new[19]: Net 255.255.255.255/32 Ifp en1 Ifa 10.0.0.20 [SCOPED]
+Add new[20]: Net 255.255.255.255/32 Ifp fw0 Ifa 192.168.3.30 [SCOPED]
+New Routes ('test13') = <IPv4RouteList[10]> = {
  0. Net 0.0.0.0/0 Gate 10.0.0.1 Ifp en0 Ifa 10.0.0.10
  1. Net 0.0.0.0/0 Gate 10.0.0.1 Ifp en1 Ifa 10.0.0.20 [never] [SCOPED]
  2. Net 10.0.0.0/24 Ifp en0 Ifa 10.0.0.10
  3. Net 10.0.0.0/24 Ifp en1 Ifa 10.0.0.20 [last] [SCOPED]
  4. Net 10.0.0.1/32 Ifp en0 Ifa 10.0.0.10
  5. Net 10.0.0.1/32 Ifp en1 Ifa 10.0.0.20 [last] [SCOPED]
+ 6. Net 224.0.0.0/4 Ifp en0 Ifa 10.0.0.10
+ 7. Net 224.0.0.0/4 Ifp en1 Ifa 10.0.0.20 [last] [SCOPED]
+ 8. Net 255.255.255.255/32 Ifp en0 Ifa 10.0.0.10
+ 9. Net 255.255.255.255/32 Ifp en1 Ifa 10.0.0.20 [last] [SCOPED]
 }
 Remove old[2]: Net 0.0.0.0/0 Gate 192.168.3.1 Ifp fw0 Ifa 192.168.3.30 [SCOPED]
 Remove old[7]: Net 192.168.2.0/24 Ifp fw0 Ifa 192.168.2.30
@@ -5811,16 +8305,22 @@ Remove old[11]: Net 192.168.2.1/32 Ifp en0 Ifa 192.168.2.10 [SCOPED]
 Remove old[12]: Net 192.168.2.1/32 Ifp en1 Ifa 192.168.2.20 [SCOPED]
 Remove old[13]: Net 192.168.3.0/24 Ifp fw0 Ifa 192.168.3.30
 Remove old[14]: Net 192.168.3.1/32 Ifp fw0 Ifa 192.168.3.30
+Remove old[17]: Net 224.0.0.0/4 Ifp fw0 Ifa 192.168.3.30 [SCOPED]
+Remove old[20]: Net 255.255.255.255/32 Ifp fw0 Ifa 192.168.3.30 [SCOPED]
 =================> Apply 'test3', 'test13' End <=================
 
 =================> Apply 'test13', 'test3' Begin <=================
-Old routes ('test13') = <IPv4RouteList[6]> = {
+Old routes ('test13') = <IPv4RouteList[10]> = {
  0. Net 0.0.0.0/0 Gate 10.0.0.1 Ifp en0 Ifa 10.0.0.10
  1. Net 0.0.0.0/0 Gate 10.0.0.1 Ifp en1 Ifa 10.0.0.20 [never] [SCOPED]
  2. Net 10.0.0.0/24 Ifp en0 Ifa 10.0.0.10
  3. Net 10.0.0.0/24 Ifp en1 Ifa 10.0.0.20 [last] [SCOPED]
  4. Net 10.0.0.1/32 Ifp en0 Ifa 10.0.0.10
  5. Net 10.0.0.1/32 Ifp en1 Ifa 10.0.0.20 [last] [SCOPED]
+ 6. Net 224.0.0.0/4 Ifp en0 Ifa 10.0.0.10
+ 7. Net 224.0.0.0/4 Ifp en1 Ifa 10.0.0.20 [last] [SCOPED]
+ 8. Net 255.255.255.255/32 Ifp en0 Ifa 10.0.0.10
+ 9. Net 255.255.255.255/32 Ifp en1 Ifa 10.0.0.20 [last] [SCOPED]
 }
 Add new[4]: Net 10.0.0.1/32 Ifp en0 Ifa 10.0.0.10
 Add new[0]: Net 0.0.0.0/0 Gate 10.0.0.1 Ifp en0 Ifa 10.0.0.10
@@ -5828,7 +8328,11 @@ Add new[5]: Net 10.0.0.1/32 Ifp en1 Ifa 10.0.0.20 [last] [SCOPED]
 Add new[1]: Net 0.0.0.0/0 Gate 10.0.0.1 Ifp en1 Ifa 10.0.0.20 [never] [SCOPED]
 Add new[2]: Net 10.0.0.0/24 Ifp en0 Ifa 10.0.0.10
 Add new[3]: Net 10.0.0.0/24 Ifp en1 Ifa 10.0.0.20 [last] [SCOPED]
-New Routes ('test3') = <IPv4RouteList[15]> = {
+Add new[6]: Net 224.0.0.0/4 Ifp en0 Ifa 10.0.0.10
+Add new[7]: Net 224.0.0.0/4 Ifp en1 Ifa 10.0.0.20 [last] [SCOPED]
+Add new[8]: Net 255.255.255.255/32 Ifp en0 Ifa 10.0.0.10
+Add new[9]: Net 255.255.255.255/32 Ifp en1 Ifa 10.0.0.20 [last] [SCOPED]
+New Routes ('test3') = <IPv4RouteList[21]> = {
  0. Net 0.0.0.0/0 Gate 10.0.0.1 Ifp en0 Ifa 10.0.0.10
  1. Net 0.0.0.0/0 Gate 10.0.0.1 Ifp en1 Ifa 10.0.0.20 [SCOPED]
  2. Net 0.0.0.0/0 Gate 192.168.3.1 Ifp fw0 Ifa 192.168.3.30 [SCOPED]
@@ -5844,6 +8348,12 @@ New Routes ('test3') = <IPv4RouteList[15]> = {
 12. Net 192.168.2.1/32 Ifp en1 Ifa 192.168.2.20 [SCOPED]
 13. Net 192.168.3.0/24 Ifp fw0 Ifa 192.168.3.30
 14. Net 192.168.3.1/32 Ifp fw0 Ifa 192.168.3.30
+15. Net 224.0.0.0/4 Ifp en0 Ifa 10.0.0.10
+16. Net 224.0.0.0/4 Ifp en1 Ifa 10.0.0.20 [SCOPED]
+17. Net 224.0.0.0/4 Ifp fw0 Ifa 192.168.3.30 [SCOPED]
+18. Net 255.255.255.255/32 Ifp en0 Ifa 10.0.0.10
+19. Net 255.255.255.255/32 Ifp en1 Ifa 10.0.0.20 [SCOPED]
+20. Net 255.255.255.255/32 Ifp fw0 Ifa 192.168.3.30 [SCOPED]
 }
 Add new[14]: Net 192.168.3.1/32 Ifp fw0 Ifa 192.168.3.30
 Add new[2]: Net 0.0.0.0/0 Gate 192.168.3.1 Ifp fw0 Ifa 192.168.3.30 [SCOPED]
@@ -5854,10 +8364,12 @@ Add new[10]: Net 192.168.2.1/32 Ifp fw0 Ifa 192.168.2.30
 Add new[11]: Net 192.168.2.1/32 Ifp en0 Ifa 192.168.2.10 [SCOPED]
 Add new[12]: Net 192.168.2.1/32 Ifp en1 Ifa 192.168.2.20 [SCOPED]
 Add new[13]: Net 192.168.3.0/24 Ifp fw0 Ifa 192.168.3.30
+Add new[17]: Net 224.0.0.0/4 Ifp fw0 Ifa 192.168.3.30 [SCOPED]
+Add new[20]: Net 255.255.255.255/32 Ifp fw0 Ifa 192.168.3.30 [SCOPED]
 =================> Apply 'test13', 'test3' End <=================
 
 =================> Apply 'test3', 'test14' Begin <=================
-Old routes ('test3') = <IPv4RouteList[15]> = {
+Old routes ('test3') = <IPv4RouteList[21]> = {
  0. Net 0.0.0.0/0 Gate 10.0.0.1 Ifp en0 Ifa 10.0.0.10
  1. Net 0.0.0.0/0 Gate 10.0.0.1 Ifp en1 Ifa 10.0.0.20 [SCOPED]
  2. Net 0.0.0.0/0 Gate 192.168.3.1 Ifp fw0 Ifa 192.168.3.30 [SCOPED]
@@ -5873,6 +8385,12 @@ Old routes ('test3') = <IPv4RouteList[15]> = {
 12. Net 192.168.2.1/32 Ifp en1 Ifa 192.168.2.20 [SCOPED]
 13. Net 192.168.3.0/24 Ifp fw0 Ifa 192.168.3.30
 14. Net 192.168.3.1/32 Ifp fw0 Ifa 192.168.3.30
+15. Net 224.0.0.0/4 Ifp en0 Ifa 10.0.0.10
+16. Net 224.0.0.0/4 Ifp en1 Ifa 10.0.0.20 [SCOPED]
+17. Net 224.0.0.0/4 Ifp fw0 Ifa 192.168.3.30 [SCOPED]
+18. Net 255.255.255.255/32 Ifp en0 Ifa 10.0.0.10
+19. Net 255.255.255.255/32 Ifp en1 Ifa 10.0.0.20 [SCOPED]
+20. Net 255.255.255.255/32 Ifp fw0 Ifa 192.168.3.30 [SCOPED]
 }
 Add new[5]: Net 10.0.0.1/32 Ifp en0 Ifa 10.0.0.10
 Add new[0]: Net 0.0.0.0/0 Gate 10.0.0.1 Ifp en0 Ifa 10.0.0.10
@@ -5889,10 +8407,18 @@ Add new[10]: Net 192.168.2.1/32 Ifp fw0 Ifa 192.168.2.30
 Add new[11]: Net 192.168.2.1/32 Ifp en0 Ifa 192.168.2.10 [SCOPED]
 Add new[12]: Net 192.168.2.1/32 Ifp en1 Ifa 192.168.2.20 [SCOPED]
 Add new[13]: Net 192.168.3.0/24 Ifp fw0 Ifa 192.168.3.30
-New Routes ('test14') = <IPv4RouteList[3]> = {
+Add new[15]: Net 224.0.0.0/4 Ifp en0 Ifa 10.0.0.10
+Add new[16]: Net 224.0.0.0/4 Ifp en1 Ifa 10.0.0.20 [SCOPED]
+Add new[17]: Net 224.0.0.0/4 Ifp fw0 Ifa 192.168.3.30 [SCOPED]
+Add new[18]: Net 255.255.255.255/32 Ifp en0 Ifa 10.0.0.10
+Add new[19]: Net 255.255.255.255/32 Ifp en1 Ifa 10.0.0.20 [SCOPED]
+Add new[20]: Net 255.255.255.255/32 Ifp fw0 Ifa 192.168.3.30 [SCOPED]
+New Routes ('test14') = <IPv4RouteList[5]> = {
  0. Net 0.0.0.0/0 Gate 10.0.0.1 Ifp en1 Ifa 10.0.0.20 [never] [SCOPED]
  1. Net 10.0.0.0/24 Ifp en1 Ifa 10.0.0.20 [last]
  2. Net 10.0.0.1/32 Ifp en1 Ifa 10.0.0.20 [last]
+ 3. Net 224.0.0.0/4 Ifp en1 Ifa 10.0.0.20 [last]
+ 4. Net 255.255.255.255/32 Ifp en1 Ifa 10.0.0.20 [last]
 }
 Remove old[0]: Net 0.0.0.0/0 Gate 10.0.0.1 Ifp en0 Ifa 10.0.0.10
 Remove old[2]: Net 0.0.0.0/0 Gate 192.168.3.1 Ifp fw0 Ifa 192.168.3.30 [SCOPED]
@@ -5908,20 +8434,32 @@ Remove old[11]: Net 192.168.2.1/32 Ifp en0 Ifa 192.168.2.10 [SCOPED]
 Remove old[12]: Net 192.168.2.1/32 Ifp en1 Ifa 192.168.2.20 [SCOPED]
 Remove old[13]: Net 192.168.3.0/24 Ifp fw0 Ifa 192.168.3.30
 Remove old[14]: Net 192.168.3.1/32 Ifp fw0 Ifa 192.168.3.30
+Remove old[15]: Net 224.0.0.0/4 Ifp en0 Ifa 10.0.0.10
+Remove old[16]: Net 224.0.0.0/4 Ifp en1 Ifa 10.0.0.20 [SCOPED]
+Remove old[17]: Net 224.0.0.0/4 Ifp fw0 Ifa 192.168.3.30 [SCOPED]
+Remove old[18]: Net 255.255.255.255/32 Ifp en0 Ifa 10.0.0.10
+Remove old[19]: Net 255.255.255.255/32 Ifp en1 Ifa 10.0.0.20 [SCOPED]
+Remove old[20]: Net 255.255.255.255/32 Ifp fw0 Ifa 192.168.3.30 [SCOPED]
 Add new[1]: Net 10.0.0.0/24 Ifp en1 Ifa 10.0.0.20 [last]
 Add new[2]: Net 10.0.0.1/32 Ifp en1 Ifa 10.0.0.20 [last]
+Add new[3]: Net 224.0.0.0/4 Ifp en1 Ifa 10.0.0.20 [last]
+Add new[4]: Net 255.255.255.255/32 Ifp en1 Ifa 10.0.0.20 [last]
 =================> Apply 'test3', 'test14' End <=================
 
 =================> Apply 'test14', 'test3' Begin <=================
-Old routes ('test14') = <IPv4RouteList[3]> = {
+Old routes ('test14') = <IPv4RouteList[5]> = {
  0. Net 0.0.0.0/0 Gate 10.0.0.1 Ifp en1 Ifa 10.0.0.20 [never] [SCOPED]
  1. Net 10.0.0.0/24 Ifp en1 Ifa 10.0.0.20 [last]
  2. Net 10.0.0.1/32 Ifp en1 Ifa 10.0.0.20 [last]
+ 3. Net 224.0.0.0/4 Ifp en1 Ifa 10.0.0.20 [last]
+ 4. Net 255.255.255.255/32 Ifp en1 Ifa 10.0.0.20 [last]
 }
 Add new[2]: Net 10.0.0.1/32 Ifp en1 Ifa 10.0.0.20 [last]
 Add new[0]: Net 0.0.0.0/0 Gate 10.0.0.1 Ifp en1 Ifa 10.0.0.20 [never] [SCOPED]
 Add new[1]: Net 10.0.0.0/24 Ifp en1 Ifa 10.0.0.20 [last]
-New Routes ('test3') = <IPv4RouteList[15]> = {
+Add new[3]: Net 224.0.0.0/4 Ifp en1 Ifa 10.0.0.20 [last]
+Add new[4]: Net 255.255.255.255/32 Ifp en1 Ifa 10.0.0.20 [last]
+New Routes ('test3') = <IPv4RouteList[21]> = {
  0. Net 0.0.0.0/0 Gate 10.0.0.1 Ifp en0 Ifa 10.0.0.10
  1. Net 0.0.0.0/0 Gate 10.0.0.1 Ifp en1 Ifa 10.0.0.20 [SCOPED]
  2. Net 0.0.0.0/0 Gate 192.168.3.1 Ifp fw0 Ifa 192.168.3.30 [SCOPED]
@@ -5937,9 +8475,17 @@ New Routes ('test3') = <IPv4RouteList[15]> = {
 12. Net 192.168.2.1/32 Ifp en1 Ifa 192.168.2.20 [SCOPED]
 13. Net 192.168.3.0/24 Ifp fw0 Ifa 192.168.3.30
 14. Net 192.168.3.1/32 Ifp fw0 Ifa 192.168.3.30
+15. Net 224.0.0.0/4 Ifp en0 Ifa 10.0.0.10
+16. Net 224.0.0.0/4 Ifp en1 Ifa 10.0.0.20 [SCOPED]
+17. Net 224.0.0.0/4 Ifp fw0 Ifa 192.168.3.30 [SCOPED]
+18. Net 255.255.255.255/32 Ifp en0 Ifa 10.0.0.10
+19. Net 255.255.255.255/32 Ifp en1 Ifa 10.0.0.20 [SCOPED]
+20. Net 255.255.255.255/32 Ifp fw0 Ifa 192.168.3.30 [SCOPED]
 }
 Remove old[1]: Net 10.0.0.0/24 Ifp en1 Ifa 10.0.0.20 [last]
 Remove old[2]: Net 10.0.0.1/32 Ifp en1 Ifa 10.0.0.20 [last]
+Remove old[3]: Net 224.0.0.0/4 Ifp en1 Ifa 10.0.0.20 [last]
+Remove old[4]: Net 255.255.255.255/32 Ifp en1 Ifa 10.0.0.20 [last]
 Add new[5]: Net 10.0.0.1/32 Ifp en0 Ifa 10.0.0.10
 Add new[0]: Net 0.0.0.0/0 Gate 10.0.0.1 Ifp en0 Ifa 10.0.0.10
 Add new[14]: Net 192.168.3.1/32 Ifp fw0 Ifa 192.168.3.30
@@ -5954,10 +8500,16 @@ Add new[10]: Net 192.168.2.1/32 Ifp fw0 Ifa 192.168.2.30
 Add new[11]: Net 192.168.2.1/32 Ifp en0 Ifa 192.168.2.10 [SCOPED]
 Add new[12]: Net 192.168.2.1/32 Ifp en1 Ifa 192.168.2.20 [SCOPED]
 Add new[13]: Net 192.168.3.0/24 Ifp fw0 Ifa 192.168.3.30
+Add new[15]: Net 224.0.0.0/4 Ifp en0 Ifa 10.0.0.10
+Add new[16]: Net 224.0.0.0/4 Ifp en1 Ifa 10.0.0.20 [SCOPED]
+Add new[17]: Net 224.0.0.0/4 Ifp fw0 Ifa 192.168.3.30 [SCOPED]
+Add new[18]: Net 255.255.255.255/32 Ifp en0 Ifa 10.0.0.10
+Add new[19]: Net 255.255.255.255/32 Ifp en1 Ifa 10.0.0.20 [SCOPED]
+Add new[20]: Net 255.255.255.255/32 Ifp fw0 Ifa 192.168.3.30 [SCOPED]
 =================> Apply 'test14', 'test3' End <=================
 
 =================> Apply 'test3', 'test15' Begin <=================
-Old routes ('test3') = <IPv4RouteList[15]> = {
+Old routes ('test3') = <IPv4RouteList[21]> = {
  0. Net 0.0.0.0/0 Gate 10.0.0.1 Ifp en0 Ifa 10.0.0.10
  1. Net 0.0.0.0/0 Gate 10.0.0.1 Ifp en1 Ifa 10.0.0.20 [SCOPED]
  2. Net 0.0.0.0/0 Gate 192.168.3.1 Ifp fw0 Ifa 192.168.3.30 [SCOPED]
@@ -5973,6 +8525,12 @@ Old routes ('test3') = <IPv4RouteList[15]> = {
 12. Net 192.168.2.1/32 Ifp en1 Ifa 192.168.2.20 [SCOPED]
 13. Net 192.168.3.0/24 Ifp fw0 Ifa 192.168.3.30
 14. Net 192.168.3.1/32 Ifp fw0 Ifa 192.168.3.30
+15. Net 224.0.0.0/4 Ifp en0 Ifa 10.0.0.10
+16. Net 224.0.0.0/4 Ifp en1 Ifa 10.0.0.20 [SCOPED]
+17. Net 224.0.0.0/4 Ifp fw0 Ifa 192.168.3.30 [SCOPED]
+18. Net 255.255.255.255/32 Ifp en0 Ifa 10.0.0.10
+19. Net 255.255.255.255/32 Ifp en1 Ifa 10.0.0.20 [SCOPED]
+20. Net 255.255.255.255/32 Ifp fw0 Ifa 192.168.3.30 [SCOPED]
 }
 Add new[5]: Net 10.0.0.1/32 Ifp en0 Ifa 10.0.0.10
 Add new[0]: Net 0.0.0.0/0 Gate 10.0.0.1 Ifp en0 Ifa 10.0.0.10
@@ -5989,8 +8547,16 @@ Add new[10]: Net 192.168.2.1/32 Ifp fw0 Ifa 192.168.2.30
 Add new[11]: Net 192.168.2.1/32 Ifp en0 Ifa 192.168.2.10 [SCOPED]
 Add new[12]: Net 192.168.2.1/32 Ifp en1 Ifa 192.168.2.20 [SCOPED]
 Add new[13]: Net 192.168.3.0/24 Ifp fw0 Ifa 192.168.3.30
-New Routes ('test15') = <IPv4RouteList[1]> = {
- 0. Net 0.0.0.0/0 Ifp en0 Ifa 169.254.22.44
+Add new[15]: Net 224.0.0.0/4 Ifp en0 Ifa 10.0.0.10
+Add new[16]: Net 224.0.0.0/4 Ifp en1 Ifa 10.0.0.20 [SCOPED]
+Add new[17]: Net 224.0.0.0/4 Ifp fw0 Ifa 192.168.3.30 [SCOPED]
+Add new[18]: Net 255.255.255.255/32 Ifp en0 Ifa 10.0.0.10
+Add new[19]: Net 255.255.255.255/32 Ifp en1 Ifa 10.0.0.20 [SCOPED]
+Add new[20]: Net 255.255.255.255/32 Ifp fw0 Ifa 192.168.3.30 [SCOPED]
+New Routes ('test15') = <IPv4RouteList[3]> = {
+ 0. Net 169.254.0.0/16 Ifp en0 Ifa 169.254.22.44 [last]
+ 1. Net 224.0.0.0/4 Ifp en0 Ifa 169.254.22.44 [last]
+ 2. Net 255.255.255.255/32 Ifp en0 Ifa 169.254.22.44 [last]
 }
 Remove old[0]: Net 0.0.0.0/0 Gate 10.0.0.1 Ifp en0 Ifa 10.0.0.10
 Remove old[1]: Net 0.0.0.0/0 Gate 10.0.0.1 Ifp en1 Ifa 10.0.0.20 [SCOPED]
@@ -6007,15 +8573,27 @@ Remove old[11]: Net 192.168.2.1/32 Ifp en0 Ifa 192.168.2.10 [SCOPED]
 Remove old[12]: Net 192.168.2.1/32 Ifp en1 Ifa 192.168.2.20 [SCOPED]
 Remove old[13]: Net 192.168.3.0/24 Ifp fw0 Ifa 192.168.3.30
 Remove old[14]: Net 192.168.3.1/32 Ifp fw0 Ifa 192.168.3.30
-Add new[0]: Net 0.0.0.0/0 Ifp en0 Ifa 169.254.22.44
+Remove old[15]: Net 224.0.0.0/4 Ifp en0 Ifa 10.0.0.10
+Remove old[16]: Net 224.0.0.0/4 Ifp en1 Ifa 10.0.0.20 [SCOPED]
+Remove old[17]: Net 224.0.0.0/4 Ifp fw0 Ifa 192.168.3.30 [SCOPED]
+Remove old[18]: Net 255.255.255.255/32 Ifp en0 Ifa 10.0.0.10
+Remove old[19]: Net 255.255.255.255/32 Ifp en1 Ifa 10.0.0.20 [SCOPED]
+Remove old[20]: Net 255.255.255.255/32 Ifp fw0 Ifa 192.168.3.30 [SCOPED]
+Add new[0]: Net 169.254.0.0/16 Ifp en0 Ifa 169.254.22.44 [last]
+Add new[1]: Net 224.0.0.0/4 Ifp en0 Ifa 169.254.22.44 [last]
+Add new[2]: Net 255.255.255.255/32 Ifp en0 Ifa 169.254.22.44 [last]
 =================> Apply 'test3', 'test15' End <=================
 
 =================> Apply 'test15', 'test3' Begin <=================
-Old routes ('test15') = <IPv4RouteList[1]> = {
- 0. Net 0.0.0.0/0 Ifp en0 Ifa 169.254.22.44
+Old routes ('test15') = <IPv4RouteList[3]> = {
+ 0. Net 169.254.0.0/16 Ifp en0 Ifa 169.254.22.44 [last]
+ 1. Net 224.0.0.0/4 Ifp en0 Ifa 169.254.22.44 [last]
+ 2. Net 255.255.255.255/32 Ifp en0 Ifa 169.254.22.44 [last]
 }
-Add new[0]: Net 0.0.0.0/0 Ifp en0 Ifa 169.254.22.44
-New Routes ('test3') = <IPv4RouteList[15]> = {
+Add new[0]: Net 169.254.0.0/16 Ifp en0 Ifa 169.254.22.44 [last]
+Add new[1]: Net 224.0.0.0/4 Ifp en0 Ifa 169.254.22.44 [last]
+Add new[2]: Net 255.255.255.255/32 Ifp en0 Ifa 169.254.22.44 [last]
+New Routes ('test3') = <IPv4RouteList[21]> = {
  0. Net 0.0.0.0/0 Gate 10.0.0.1 Ifp en0 Ifa 10.0.0.10
  1. Net 0.0.0.0/0 Gate 10.0.0.1 Ifp en1 Ifa 10.0.0.20 [SCOPED]
  2. Net 0.0.0.0/0 Gate 192.168.3.1 Ifp fw0 Ifa 192.168.3.30 [SCOPED]
@@ -6031,8 +8609,16 @@ New Routes ('test3') = <IPv4RouteList[15]> = {
 12. Net 192.168.2.1/32 Ifp en1 Ifa 192.168.2.20 [SCOPED]
 13. Net 192.168.3.0/24 Ifp fw0 Ifa 192.168.3.30
 14. Net 192.168.3.1/32 Ifp fw0 Ifa 192.168.3.30
-}
-Remove old[0]: Net 0.0.0.0/0 Ifp en0 Ifa 169.254.22.44
+15. Net 224.0.0.0/4 Ifp en0 Ifa 10.0.0.10
+16. Net 224.0.0.0/4 Ifp en1 Ifa 10.0.0.20 [SCOPED]
+17. Net 224.0.0.0/4 Ifp fw0 Ifa 192.168.3.30 [SCOPED]
+18. Net 255.255.255.255/32 Ifp en0 Ifa 10.0.0.10
+19. Net 255.255.255.255/32 Ifp en1 Ifa 10.0.0.20 [SCOPED]
+20. Net 255.255.255.255/32 Ifp fw0 Ifa 192.168.3.30 [SCOPED]
+}
+Remove old[0]: Net 169.254.0.0/16 Ifp en0 Ifa 169.254.22.44 [last]
+Remove old[1]: Net 224.0.0.0/4 Ifp en0 Ifa 169.254.22.44 [last]
+Remove old[2]: Net 255.255.255.255/32 Ifp en0 Ifa 169.254.22.44 [last]
 Add new[5]: Net 10.0.0.1/32 Ifp en0 Ifa 10.0.0.10
 Add new[0]: Net 0.0.0.0/0 Gate 10.0.0.1 Ifp en0 Ifa 10.0.0.10
 Add new[6]: Net 10.0.0.1/32 Ifp en1 Ifa 10.0.0.20 [SCOPED]
@@ -6048,10 +8634,16 @@ Add new[10]: Net 192.168.2.1/32 Ifp fw0 Ifa 192.168.2.30
 Add new[11]: Net 192.168.2.1/32 Ifp en0 Ifa 192.168.2.10 [SCOPED]
 Add new[12]: Net 192.168.2.1/32 Ifp en1 Ifa 192.168.2.20 [SCOPED]
 Add new[13]: Net 192.168.3.0/24 Ifp fw0 Ifa 192.168.3.30
+Add new[15]: Net 224.0.0.0/4 Ifp en0 Ifa 10.0.0.10
+Add new[16]: Net 224.0.0.0/4 Ifp en1 Ifa 10.0.0.20 [SCOPED]
+Add new[17]: Net 224.0.0.0/4 Ifp fw0 Ifa 192.168.3.30 [SCOPED]
+Add new[18]: Net 255.255.255.255/32 Ifp en0 Ifa 10.0.0.10
+Add new[19]: Net 255.255.255.255/32 Ifp en1 Ifa 10.0.0.20 [SCOPED]
+Add new[20]: Net 255.255.255.255/32 Ifp fw0 Ifa 192.168.3.30 [SCOPED]
 =================> Apply 'test15', 'test3' End <=================
 
 =================> Apply 'test3', 'test16' Begin <=================
-Old routes ('test3') = <IPv4RouteList[15]> = {
+Old routes ('test3') = <IPv4RouteList[21]> = {
  0. Net 0.0.0.0/0 Gate 10.0.0.1 Ifp en0 Ifa 10.0.0.10
  1. Net 0.0.0.0/0 Gate 10.0.0.1 Ifp en1 Ifa 10.0.0.20 [SCOPED]
  2. Net 0.0.0.0/0 Gate 192.168.3.1 Ifp fw0 Ifa 192.168.3.30 [SCOPED]
@@ -6067,6 +8659,12 @@ Old routes ('test3') = <IPv4RouteList[15]> = {
 12. Net 192.168.2.1/32 Ifp en1 Ifa 192.168.2.20 [SCOPED]
 13. Net 192.168.3.0/24 Ifp fw0 Ifa 192.168.3.30
 14. Net 192.168.3.1/32 Ifp fw0 Ifa 192.168.3.30
+15. Net 224.0.0.0/4 Ifp en0 Ifa 10.0.0.10
+16. Net 224.0.0.0/4 Ifp en1 Ifa 10.0.0.20 [SCOPED]
+17. Net 224.0.0.0/4 Ifp fw0 Ifa 192.168.3.30 [SCOPED]
+18. Net 255.255.255.255/32 Ifp en0 Ifa 10.0.0.10
+19. Net 255.255.255.255/32 Ifp en1 Ifa 10.0.0.20 [SCOPED]
+20. Net 255.255.255.255/32 Ifp fw0 Ifa 192.168.3.30 [SCOPED]
 }
 Add new[5]: Net 10.0.0.1/32 Ifp en0 Ifa 10.0.0.10
 Add new[0]: Net 0.0.0.0/0 Gate 10.0.0.1 Ifp en0 Ifa 10.0.0.10
@@ -6083,7 +8681,13 @@ Add new[10]: Net 192.168.2.1/32 Ifp fw0 Ifa 192.168.2.30
 Add new[11]: Net 192.168.2.1/32 Ifp en0 Ifa 192.168.2.10 [SCOPED]
 Add new[12]: Net 192.168.2.1/32 Ifp en1 Ifa 192.168.2.20 [SCOPED]
 Add new[13]: Net 192.168.3.0/24 Ifp fw0 Ifa 192.168.3.30
-New Routes ('test16') = <IPv4RouteList[50]> = {
+Add new[15]: Net 224.0.0.0/4 Ifp en0 Ifa 10.0.0.10
+Add new[16]: Net 224.0.0.0/4 Ifp en1 Ifa 10.0.0.20 [SCOPED]
+Add new[17]: Net 224.0.0.0/4 Ifp fw0 Ifa 192.168.3.30 [SCOPED]
+Add new[18]: Net 255.255.255.255/32 Ifp en0 Ifa 10.0.0.10
+Add new[19]: Net 255.255.255.255/32 Ifp en1 Ifa 10.0.0.20 [SCOPED]
+Add new[20]: Net 255.255.255.255/32 Ifp fw0 Ifa 192.168.3.30 [SCOPED]
+New Routes ('test16') = <IPv4RouteList[54]> = {
  0. Net 0.0.0.0/0 Gate 10.0.0.1 Ifp en0 Ifa 10.0.0.10
  1. Net 0.0.0.0/0 Ifp utun0 Ifa 17.153.46.24 [SCOPED]
  2. Net 10.0.0.0/24 Ifp en0 Ifa 10.0.0.10
@@ -6134,6 +8738,10 @@ New Routes ('test16') = <IPv4RouteList[50]> = {
 47. Net 192.35.50.0/24 Gate 17.153.46.24 Ifp utun0 Ifa 17.153.46.24
 48. Net 204.179.20.0/24 Gate 17.153.46.24 Ifp utun0 Ifa 17.153.46.24
 49. Net 206.112.116.0/24 Gate 17.153.46.24 Ifp utun0 Ifa 17.153.46.24
+50. Net 224.0.0.0/4 Ifp en0 Ifa 10.0.0.10
+51. Net 224.0.0.0/4 Ifp utun0 Ifa 17.153.46.24 [SCOPED]
+52. Net 255.255.255.255/32 Ifp en0 Ifa 10.0.0.10
+53. Net 255.255.255.255/32 Ifp utun0 Ifa 17.153.46.24 [SCOPED]
 }
 Remove old[1]: Net 0.0.0.0/0 Gate 10.0.0.1 Ifp en1 Ifa 10.0.0.20 [SCOPED]
 Remove old[2]: Net 0.0.0.0/0 Gate 192.168.3.1 Ifp fw0 Ifa 192.168.3.30 [SCOPED]
@@ -6147,6 +8755,10 @@ Remove old[11]: Net 192.168.2.1/32 Ifp en0 Ifa 192.168.2.10 [SCOPED]
 Remove old[12]: Net 192.168.2.1/32 Ifp en1 Ifa 192.168.2.20 [SCOPED]
 Remove old[13]: Net 192.168.3.0/24 Ifp fw0 Ifa 192.168.3.30
 Remove old[14]: Net 192.168.3.1/32 Ifp fw0 Ifa 192.168.3.30
+Remove old[16]: Net 224.0.0.0/4 Ifp en1 Ifa 10.0.0.20 [SCOPED]
+Remove old[17]: Net 224.0.0.0/4 Ifp fw0 Ifa 192.168.3.30 [SCOPED]
+Remove old[19]: Net 255.255.255.255/32 Ifp en1 Ifa 10.0.0.20 [SCOPED]
+Remove old[20]: Net 255.255.255.255/32 Ifp fw0 Ifa 192.168.3.30 [SCOPED]
 Add new[1]: Net 0.0.0.0/0 Ifp utun0 Ifa 17.153.46.24 [SCOPED]
 Add new[4]: Net 10.1.3.0/24 Gate 17.153.46.24 Ifp utun0 Ifa 17.153.46.24
 Add new[5]: Net 10.1.4.0/24 Gate 17.153.46.24 Ifp utun0 Ifa 17.153.46.24
@@ -6194,10 +8806,12 @@ Add new[46]: Net 172.16.2.0/24 Gate 17.153.46.24 Ifp utun0 Ifa 17.153.46.24
 Add new[47]: Net 192.35.50.0/24 Gate 17.153.46.24 Ifp utun0 Ifa 17.153.46.24
 Add new[48]: Net 204.179.20.0/24 Gate 17.153.46.24 Ifp utun0 Ifa 17.153.46.24
 Add new[49]: Net 206.112.116.0/24 Gate 17.153.46.24 Ifp utun0 Ifa 17.153.46.24
+Add new[51]: Net 224.0.0.0/4 Ifp utun0 Ifa 17.153.46.24 [SCOPED]
+Add new[53]: Net 255.255.255.255/32 Ifp utun0 Ifa 17.153.46.24 [SCOPED]
 =================> Apply 'test3', 'test16' End <=================
 
 =================> Apply 'test16', 'test3' Begin <=================
-Old routes ('test16') = <IPv4RouteList[50]> = {
+Old routes ('test16') = <IPv4RouteList[54]> = {
  0. Net 0.0.0.0/0 Gate 10.0.0.1 Ifp en0 Ifa 10.0.0.10
  1. Net 0.0.0.0/0 Ifp utun0 Ifa 17.153.46.24 [SCOPED]
  2. Net 10.0.0.0/24 Ifp en0 Ifa 10.0.0.10
@@ -6248,6 +8862,10 @@ Old routes ('test16') = <IPv4RouteList[50]> = {
 47. Net 192.35.50.0/24 Gate 17.153.46.24 Ifp utun0 Ifa 17.153.46.24
 48. Net 204.179.20.0/24 Gate 17.153.46.24 Ifp utun0 Ifa 17.153.46.24
 49. Net 206.112.116.0/24 Gate 17.153.46.24 Ifp utun0 Ifa 17.153.46.24
+50. Net 224.0.0.0/4 Ifp en0 Ifa 10.0.0.10
+51. Net 224.0.0.0/4 Ifp utun0 Ifa 17.153.46.24 [SCOPED]
+52. Net 255.255.255.255/32 Ifp en0 Ifa 10.0.0.10
+53. Net 255.255.255.255/32 Ifp utun0 Ifa 17.153.46.24 [SCOPED]
 }
 Add new[3]: Net 10.0.0.1/32 Ifp en0 Ifa 10.0.0.10
 Add new[0]: Net 0.0.0.0/0 Gate 10.0.0.1 Ifp en0 Ifa 10.0.0.10
@@ -6299,7 +8917,11 @@ Add new[46]: Net 172.16.2.0/24 Gate 17.153.46.24 Ifp utun0 Ifa 17.153.46.24
 Add new[47]: Net 192.35.50.0/24 Gate 17.153.46.24 Ifp utun0 Ifa 17.153.46.24
 Add new[48]: Net 204.179.20.0/24 Gate 17.153.46.24 Ifp utun0 Ifa 17.153.46.24
 Add new[49]: Net 206.112.116.0/24 Gate 17.153.46.24 Ifp utun0 Ifa 17.153.46.24
-New Routes ('test3') = <IPv4RouteList[15]> = {
+Add new[50]: Net 224.0.0.0/4 Ifp en0 Ifa 10.0.0.10
+Add new[51]: Net 224.0.0.0/4 Ifp utun0 Ifa 17.153.46.24 [SCOPED]
+Add new[52]: Net 255.255.255.255/32 Ifp en0 Ifa 10.0.0.10
+Add new[53]: Net 255.255.255.255/32 Ifp utun0 Ifa 17.153.46.24 [SCOPED]
+New Routes ('test3') = <IPv4RouteList[21]> = {
  0. Net 0.0.0.0/0 Gate 10.0.0.1 Ifp en0 Ifa 10.0.0.10
  1. Net 0.0.0.0/0 Gate 10.0.0.1 Ifp en1 Ifa 10.0.0.20 [SCOPED]
  2. Net 0.0.0.0/0 Gate 192.168.3.1 Ifp fw0 Ifa 192.168.3.30 [SCOPED]
@@ -6315,6 +8937,12 @@ New Routes ('test3') = <IPv4RouteList[15]> = {
 12. Net 192.168.2.1/32 Ifp en1 Ifa 192.168.2.20 [SCOPED]
 13. Net 192.168.3.0/24 Ifp fw0 Ifa 192.168.3.30
 14. Net 192.168.3.1/32 Ifp fw0 Ifa 192.168.3.30
+15. Net 224.0.0.0/4 Ifp en0 Ifa 10.0.0.10
+16. Net 224.0.0.0/4 Ifp en1 Ifa 10.0.0.20 [SCOPED]
+17. Net 224.0.0.0/4 Ifp fw0 Ifa 192.168.3.30 [SCOPED]
+18. Net 255.255.255.255/32 Ifp en0 Ifa 10.0.0.10
+19. Net 255.255.255.255/32 Ifp en1 Ifa 10.0.0.20 [SCOPED]
+20. Net 255.255.255.255/32 Ifp fw0 Ifa 192.168.3.30 [SCOPED]
 }
 Remove old[1]: Net 0.0.0.0/0 Ifp utun0 Ifa 17.153.46.24 [SCOPED]
 Remove old[4]: Net 10.1.3.0/24 Gate 17.153.46.24 Ifp utun0 Ifa 17.153.46.24
@@ -6363,6 +8991,8 @@ Remove old[46]: Net 172.16.2.0/24 Gate 17.153.46.24 Ifp utun0 Ifa 17.153.46.24
 Remove old[47]: Net 192.35.50.0/24 Gate 17.153.46.24 Ifp utun0 Ifa 17.153.46.24
 Remove old[48]: Net 204.179.20.0/24 Gate 17.153.46.24 Ifp utun0 Ifa 17.153.46.24
 Remove old[49]: Net 206.112.116.0/24 Gate 17.153.46.24 Ifp utun0 Ifa 17.153.46.24
+Remove old[51]: Net 224.0.0.0/4 Ifp utun0 Ifa 17.153.46.24 [SCOPED]
+Remove old[53]: Net 255.255.255.255/32 Ifp utun0 Ifa 17.153.46.24 [SCOPED]
 Add new[6]: Net 10.0.0.1/32 Ifp en1 Ifa 10.0.0.20 [SCOPED]
 Add new[1]: Net 0.0.0.0/0 Gate 10.0.0.1 Ifp en1 Ifa 10.0.0.20 [SCOPED]
 Add new[14]: Net 192.168.3.1/32 Ifp fw0 Ifa 192.168.3.30
@@ -6375,10 +9005,14 @@ Add new[10]: Net 192.168.2.1/32 Ifp fw0 Ifa 192.168.2.30
 Add new[11]: Net 192.168.2.1/32 Ifp en0 Ifa 192.168.2.10 [SCOPED]
 Add new[12]: Net 192.168.2.1/32 Ifp en1 Ifa 192.168.2.20 [SCOPED]
 Add new[13]: Net 192.168.3.0/24 Ifp fw0 Ifa 192.168.3.30
+Add new[16]: Net 224.0.0.0/4 Ifp en1 Ifa 10.0.0.20 [SCOPED]
+Add new[17]: Net 224.0.0.0/4 Ifp fw0 Ifa 192.168.3.30 [SCOPED]
+Add new[19]: Net 255.255.255.255/32 Ifp en1 Ifa 10.0.0.20 [SCOPED]
+Add new[20]: Net 255.255.255.255/32 Ifp fw0 Ifa 192.168.3.30 [SCOPED]
 =================> Apply 'test16', 'test3' End <=================
 
 =================> Apply 'test3', 'test17' Begin <=================
-Old routes ('test3') = <IPv4RouteList[15]> = {
+Old routes ('test3') = <IPv4RouteList[21]> = {
  0. Net 0.0.0.0/0 Gate 10.0.0.1 Ifp en0 Ifa 10.0.0.10
  1. Net 0.0.0.0/0 Gate 10.0.0.1 Ifp en1 Ifa 10.0.0.20 [SCOPED]
  2. Net 0.0.0.0/0 Gate 192.168.3.1 Ifp fw0 Ifa 192.168.3.30 [SCOPED]
@@ -6394,6 +9028,12 @@ Old routes ('test3') = <IPv4RouteList[15]> = {
 12. Net 192.168.2.1/32 Ifp en1 Ifa 192.168.2.20 [SCOPED]
 13. Net 192.168.3.0/24 Ifp fw0 Ifa 192.168.3.30
 14. Net 192.168.3.1/32 Ifp fw0 Ifa 192.168.3.30
+15. Net 224.0.0.0/4 Ifp en0 Ifa 10.0.0.10
+16. Net 224.0.0.0/4 Ifp en1 Ifa 10.0.0.20 [SCOPED]
+17. Net 224.0.0.0/4 Ifp fw0 Ifa 192.168.3.30 [SCOPED]
+18. Net 255.255.255.255/32 Ifp en0 Ifa 10.0.0.10
+19. Net 255.255.255.255/32 Ifp en1 Ifa 10.0.0.20 [SCOPED]
+20. Net 255.255.255.255/32 Ifp fw0 Ifa 192.168.3.30 [SCOPED]
 }
 Add new[5]: Net 10.0.0.1/32 Ifp en0 Ifa 10.0.0.10
 Add new[0]: Net 0.0.0.0/0 Gate 10.0.0.1 Ifp en0 Ifa 10.0.0.10
@@ -6410,13 +9050,23 @@ Add new[10]: Net 192.168.2.1/32 Ifp fw0 Ifa 192.168.2.30
 Add new[11]: Net 192.168.2.1/32 Ifp en0 Ifa 192.168.2.10 [SCOPED]
 Add new[12]: Net 192.168.2.1/32 Ifp en1 Ifa 192.168.2.20 [SCOPED]
 Add new[13]: Net 192.168.3.0/24 Ifp fw0 Ifa 192.168.3.30
-New Routes ('test17') = <IPv4RouteList[6]> = {
+Add new[15]: Net 224.0.0.0/4 Ifp en0 Ifa 10.0.0.10
+Add new[16]: Net 224.0.0.0/4 Ifp en1 Ifa 10.0.0.20 [SCOPED]
+Add new[17]: Net 224.0.0.0/4 Ifp fw0 Ifa 192.168.3.30 [SCOPED]
+Add new[18]: Net 255.255.255.255/32 Ifp en0 Ifa 10.0.0.10
+Add new[19]: Net 255.255.255.255/32 Ifp en1 Ifa 10.0.0.20 [SCOPED]
+Add new[20]: Net 255.255.255.255/32 Ifp fw0 Ifa 192.168.3.30 [SCOPED]
+New Routes ('test17') = <IPv4RouteList[10]> = {
  0. Net 0.0.0.0/0 Gate 10.0.0.1 Ifp en0 Ifa 10.0.0.10
  1. Net 0.0.0.0/0 Gate 192.168.2.1 Ifp en1 Ifa 192.168.2.50 [never] [SCOPED]
  2. Net 10.0.0.0/24 Ifp en0 Ifa 10.0.0.10
  3. Net 10.0.0.1/32 Ifp en0 Ifa 10.0.0.10
  4. Net 192.168.2.0/24 Ifp en1 Ifa 192.168.2.50 [last]
  5. Net 192.168.2.1/32 Ifp en1 Ifa 192.168.2.50 [last]
+ 6. Net 224.0.0.0/4 Ifp en0 Ifa 10.0.0.10
+ 7. Net 224.0.0.0/4 Ifp en1 Ifa 192.168.2.50 [last] [SCOPED]
+ 8. Net 255.255.255.255/32 Ifp en0 Ifa 10.0.0.10
+ 9. Net 255.255.255.255/32 Ifp en1 Ifa 192.168.2.50 [last] [SCOPED]
 }
 Remove old[1]: Net 0.0.0.0/0 Gate 10.0.0.1 Ifp en1 Ifa 10.0.0.20 [SCOPED]
 Remove old[2]: Net 0.0.0.0/0 Gate 192.168.3.1 Ifp fw0 Ifa 192.168.3.30 [SCOPED]
@@ -6430,19 +9080,29 @@ Remove old[11]: Net 192.168.2.1/32 Ifp en0 Ifa 192.168.2.10 [SCOPED]
 Remove old[12]: Net 192.168.2.1/32 Ifp en1 Ifa 192.168.2.20 [SCOPED]
 Remove old[13]: Net 192.168.3.0/24 Ifp fw0 Ifa 192.168.3.30
 Remove old[14]: Net 192.168.3.1/32 Ifp fw0 Ifa 192.168.3.30
+Remove old[16]: Net 224.0.0.0/4 Ifp en1 Ifa 10.0.0.20 [SCOPED]
+Remove old[17]: Net 224.0.0.0/4 Ifp fw0 Ifa 192.168.3.30 [SCOPED]
+Remove old[19]: Net 255.255.255.255/32 Ifp en1 Ifa 10.0.0.20 [SCOPED]
+Remove old[20]: Net 255.255.255.255/32 Ifp fw0 Ifa 192.168.3.30 [SCOPED]
 Add new[5]: Net 192.168.2.1/32 Ifp en1 Ifa 192.168.2.50 [last]
 Add new[1]: Net 0.0.0.0/0 Gate 192.168.2.1 Ifp en1 Ifa 192.168.2.50 [never] [SCOPED]
 Add new[4]: Net 192.168.2.0/24 Ifp en1 Ifa 192.168.2.50 [last]
+Add new[7]: Net 224.0.0.0/4 Ifp en1 Ifa 192.168.2.50 [last] [SCOPED]
+Add new[9]: Net 255.255.255.255/32 Ifp en1 Ifa 192.168.2.50 [last] [SCOPED]
 =================> Apply 'test3', 'test17' End <=================
 
 =================> Apply 'test17', 'test3' Begin <=================
-Old routes ('test17') = <IPv4RouteList[6]> = {
+Old routes ('test17') = <IPv4RouteList[10]> = {
  0. Net 0.0.0.0/0 Gate 10.0.0.1 Ifp en0 Ifa 10.0.0.10
  1. Net 0.0.0.0/0 Gate 192.168.2.1 Ifp en1 Ifa 192.168.2.50 [never] [SCOPED]
  2. Net 10.0.0.0/24 Ifp en0 Ifa 10.0.0.10
  3. Net 10.0.0.1/32 Ifp en0 Ifa 10.0.0.10
  4. Net 192.168.2.0/24 Ifp en1 Ifa 192.168.2.50 [last]
  5. Net 192.168.2.1/32 Ifp en1 Ifa 192.168.2.50 [last]
+ 6. Net 224.0.0.0/4 Ifp en0 Ifa 10.0.0.10
+ 7. Net 224.0.0.0/4 Ifp en1 Ifa 192.168.2.50 [last] [SCOPED]
+ 8. Net 255.255.255.255/32 Ifp en0 Ifa 10.0.0.10
+ 9. Net 255.255.255.255/32 Ifp en1 Ifa 192.168.2.50 [last] [SCOPED]
 }
 Add new[3]: Net 10.0.0.1/32 Ifp en0 Ifa 10.0.0.10
 Add new[0]: Net 0.0.0.0/0 Gate 10.0.0.1 Ifp en0 Ifa 10.0.0.10
@@ -6450,7 +9110,11 @@ Add new[5]: Net 192.168.2.1/32 Ifp en1 Ifa 192.168.2.50 [last]
 Add new[1]: Net 0.0.0.0/0 Gate 192.168.2.1 Ifp en1 Ifa 192.168.2.50 [never] [SCOPED]
 Add new[2]: Net 10.0.0.0/24 Ifp en0 Ifa 10.0.0.10
 Add new[4]: Net 192.168.2.0/24 Ifp en1 Ifa 192.168.2.50 [last]
-New Routes ('test3') = <IPv4RouteList[15]> = {
+Add new[6]: Net 224.0.0.0/4 Ifp en0 Ifa 10.0.0.10
+Add new[7]: Net 224.0.0.0/4 Ifp en1 Ifa 192.168.2.50 [last] [SCOPED]
+Add new[8]: Net 255.255.255.255/32 Ifp en0 Ifa 10.0.0.10
+Add new[9]: Net 255.255.255.255/32 Ifp en1 Ifa 192.168.2.50 [last] [SCOPED]
+New Routes ('test3') = <IPv4RouteList[21]> = {
  0. Net 0.0.0.0/0 Gate 10.0.0.1 Ifp en0 Ifa 10.0.0.10
  1. Net 0.0.0.0/0 Gate 10.0.0.1 Ifp en1 Ifa 10.0.0.20 [SCOPED]
  2. Net 0.0.0.0/0 Gate 192.168.3.1 Ifp fw0 Ifa 192.168.3.30 [SCOPED]
@@ -6466,10 +9130,18 @@ New Routes ('test3') = <IPv4RouteList[15]> = {
 12. Net 192.168.2.1/32 Ifp en1 Ifa 192.168.2.20 [SCOPED]
 13. Net 192.168.3.0/24 Ifp fw0 Ifa 192.168.3.30
 14. Net 192.168.3.1/32 Ifp fw0 Ifa 192.168.3.30
+15. Net 224.0.0.0/4 Ifp en0 Ifa 10.0.0.10
+16. Net 224.0.0.0/4 Ifp en1 Ifa 10.0.0.20 [SCOPED]
+17. Net 224.0.0.0/4 Ifp fw0 Ifa 192.168.3.30 [SCOPED]
+18. Net 255.255.255.255/32 Ifp en0 Ifa 10.0.0.10
+19. Net 255.255.255.255/32 Ifp en1 Ifa 10.0.0.20 [SCOPED]
+20. Net 255.255.255.255/32 Ifp fw0 Ifa 192.168.3.30 [SCOPED]
 }
 Remove old[1]: Net 0.0.0.0/0 Gate 192.168.2.1 Ifp en1 Ifa 192.168.2.50 [never] [SCOPED]
 Remove old[4]: Net 192.168.2.0/24 Ifp en1 Ifa 192.168.2.50 [last]
 Remove old[5]: Net 192.168.2.1/32 Ifp en1 Ifa 192.168.2.50 [last]
+Remove old[7]: Net 224.0.0.0/4 Ifp en1 Ifa 192.168.2.50 [last] [SCOPED]
+Remove old[9]: Net 255.255.255.255/32 Ifp en1 Ifa 192.168.2.50 [last] [SCOPED]
 Add new[6]: Net 10.0.0.1/32 Ifp en1 Ifa 10.0.0.20 [SCOPED]
 Add new[1]: Net 0.0.0.0/0 Gate 10.0.0.1 Ifp en1 Ifa 10.0.0.20 [SCOPED]
 Add new[14]: Net 192.168.3.1/32 Ifp fw0 Ifa 192.168.3.30
@@ -6482,10 +9154,14 @@ Add new[10]: Net 192.168.2.1/32 Ifp fw0 Ifa 192.168.2.30
 Add new[11]: Net 192.168.2.1/32 Ifp en0 Ifa 192.168.2.10 [SCOPED]
 Add new[12]: Net 192.168.2.1/32 Ifp en1 Ifa 192.168.2.20 [SCOPED]
 Add new[13]: Net 192.168.3.0/24 Ifp fw0 Ifa 192.168.3.30
+Add new[16]: Net 224.0.0.0/4 Ifp en1 Ifa 10.0.0.20 [SCOPED]
+Add new[17]: Net 224.0.0.0/4 Ifp fw0 Ifa 192.168.3.30 [SCOPED]
+Add new[19]: Net 255.255.255.255/32 Ifp en1 Ifa 10.0.0.20 [SCOPED]
+Add new[20]: Net 255.255.255.255/32 Ifp fw0 Ifa 192.168.3.30 [SCOPED]
 =================> Apply 'test17', 'test3' End <=================
 
 =================> Apply 'test3', 'test18' Begin <=================
-Old routes ('test3') = <IPv4RouteList[15]> = {
+Old routes ('test3') = <IPv4RouteList[21]> = {
  0. Net 0.0.0.0/0 Gate 10.0.0.1 Ifp en0 Ifa 10.0.0.10
  1. Net 0.0.0.0/0 Gate 10.0.0.1 Ifp en1 Ifa 10.0.0.20 [SCOPED]
  2. Net 0.0.0.0/0 Gate 192.168.3.1 Ifp fw0 Ifa 192.168.3.30 [SCOPED]
@@ -6501,6 +9177,12 @@ Old routes ('test3') = <IPv4RouteList[15]> = {
 12. Net 192.168.2.1/32 Ifp en1 Ifa 192.168.2.20 [SCOPED]
 13. Net 192.168.3.0/24 Ifp fw0 Ifa 192.168.3.30
 14. Net 192.168.3.1/32 Ifp fw0 Ifa 192.168.3.30
+15. Net 224.0.0.0/4 Ifp en0 Ifa 10.0.0.10
+16. Net 224.0.0.0/4 Ifp en1 Ifa 10.0.0.20 [SCOPED]
+17. Net 224.0.0.0/4 Ifp fw0 Ifa 192.168.3.30 [SCOPED]
+18. Net 255.255.255.255/32 Ifp en0 Ifa 10.0.0.10
+19. Net 255.255.255.255/32 Ifp en1 Ifa 10.0.0.20 [SCOPED]
+20. Net 255.255.255.255/32 Ifp fw0 Ifa 192.168.3.30 [SCOPED]
 }
 Add new[5]: Net 10.0.0.1/32 Ifp en0 Ifa 10.0.0.10
 Add new[0]: Net 0.0.0.0/0 Gate 10.0.0.1 Ifp en0 Ifa 10.0.0.10
@@ -6517,7 +9199,13 @@ Add new[10]: Net 192.168.2.1/32 Ifp fw0 Ifa 192.168.2.30
 Add new[11]: Net 192.168.2.1/32 Ifp en0 Ifa 192.168.2.10 [SCOPED]
 Add new[12]: Net 192.168.2.1/32 Ifp en1 Ifa 192.168.2.20 [SCOPED]
 Add new[13]: Net 192.168.3.0/24 Ifp fw0 Ifa 192.168.3.30
-New Routes ('test18') = <IPv4RouteList[14]> = {
+Add new[15]: Net 224.0.0.0/4 Ifp en0 Ifa 10.0.0.10
+Add new[16]: Net 224.0.0.0/4 Ifp en1 Ifa 10.0.0.20 [SCOPED]
+Add new[17]: Net 224.0.0.0/4 Ifp fw0 Ifa 192.168.3.30 [SCOPED]
+Add new[18]: Net 255.255.255.255/32 Ifp en0 Ifa 10.0.0.10
+Add new[19]: Net 255.255.255.255/32 Ifp en1 Ifa 10.0.0.20 [SCOPED]
+Add new[20]: Net 255.255.255.255/32 Ifp fw0 Ifa 192.168.3.30 [SCOPED]
+New Routes ('test18') = <IPv4RouteList[16]> = {
  0. Net 0.0.0.0/0 Gate 192.168.130.1 Ifp en0 Ifa 192.168.130.16
  1. Host 1.1.1.1 Gate 1.1.1.2 Ifp en0 Ifa 192.168.130.16
  2. Host 1.1.1.2 Gate 1.1.1.3 Ifp en0 Ifa 192.168.130.16
@@ -6532,6 +9220,8 @@ New Routes ('test18') = <IPv4RouteList[14]> = {
 11. Host 1.1.1.11 Gate 1.1.1.1 Ifp en0 Ifa 192.168.130.16
 12. Net 192.168.130.0/24 Ifp en0 Ifa 192.168.130.16
 13. Net 192.168.130.1/32 Ifp en0 Ifa 192.168.130.16
+14. Net 224.0.0.0/4 Ifp en0 Ifa 192.168.130.16
+15. Net 255.255.255.255/32 Ifp en0 Ifa 192.168.130.16
 }
 Remove old[0]: Net 0.0.0.0/0 Gate 10.0.0.1 Ifp en0 Ifa 10.0.0.10
 Remove old[1]: Net 0.0.0.0/0 Gate 10.0.0.1 Ifp en1 Ifa 10.0.0.20 [SCOPED]
@@ -6548,24 +9238,32 @@ Remove old[11]: Net 192.168.2.1/32 Ifp en0 Ifa 192.168.2.10 [SCOPED]
 Remove old[12]: Net 192.168.2.1/32 Ifp en1 Ifa 192.168.2.20 [SCOPED]
 Remove old[13]: Net 192.168.3.0/24 Ifp fw0 Ifa 192.168.3.30
 Remove old[14]: Net 192.168.3.1/32 Ifp fw0 Ifa 192.168.3.30
+Remove old[15]: Net 224.0.0.0/4 Ifp en0 Ifa 10.0.0.10
+Remove old[16]: Net 224.0.0.0/4 Ifp en1 Ifa 10.0.0.20 [SCOPED]
+Remove old[17]: Net 224.0.0.0/4 Ifp fw0 Ifa 192.168.3.30 [SCOPED]
+Remove old[18]: Net 255.255.255.255/32 Ifp en0 Ifa 10.0.0.10
+Remove old[19]: Net 255.255.255.255/32 Ifp en1 Ifa 10.0.0.20 [SCOPED]
+Remove old[20]: Net 255.255.255.255/32 Ifp fw0 Ifa 192.168.3.30 [SCOPED]
 Add new[13]: Net 192.168.130.1/32 Ifp en0 Ifa 192.168.130.16
 Add new[0]: Net 0.0.0.0/0 Gate 192.168.130.1 Ifp en0 Ifa 192.168.130.16
-IPMonitor RouteProcess: routing loop detected, not adding: Host 1.1.1.11 Gate 1.1.1.1 Ifp en0 Ifa 192.168.130.16
-IPMonitor RouteProcess: failed to add: Host 1.1.1.10 Gate 1.1.1.11 Ifp en0 Ifa 192.168.130.16
-IPMonitor RouteProcess: failed to add: Host 1.1.1.9 Gate 1.1.1.10 Ifp en0 Ifa 192.168.130.16
-IPMonitor RouteProcess: failed to add: Host 1.1.1.8 Gate 1.1.1.9 Ifp en0 Ifa 192.168.130.16
-IPMonitor RouteProcess: failed to add: Host 1.1.1.7 Gate 1.1.1.8 Ifp en0 Ifa 192.168.130.16
-IPMonitor RouteProcess: failed to add: Host 1.1.1.6 Gate 1.1.1.7 Ifp en0 Ifa 192.168.130.16
-IPMonitor RouteProcess: failed to add: Host 1.1.1.5 Gate 1.1.1.6 Ifp en0 Ifa 192.168.130.16
-IPMonitor RouteProcess: failed to add: Host 1.1.1.4 Gate 1.1.1.5 Ifp en0 Ifa 192.168.130.16
-IPMonitor RouteProcess: failed to add: Host 1.1.1.3 Gate 1.1.1.4 Ifp en0 Ifa 192.168.130.16
-IPMonitor RouteProcess: failed to add: Host 1.1.1.2 Gate 1.1.1.3 Ifp en0 Ifa 192.168.130.16
-IPMonitor RouteProcess: failed to add: Host 1.1.1.1 Gate 1.1.1.2 Ifp en0 Ifa 192.168.130.16
+routing loop detected, not adding: Host 1.1.1.11 Gate 1.1.1.1 Ifp en0 Ifa 192.168.130.16
+failed to add: Host 1.1.1.10 Gate 1.1.1.11 Ifp en0 Ifa 192.168.130.16
+failed to add: Host 1.1.1.9 Gate 1.1.1.10 Ifp en0 Ifa 192.168.130.16
+failed to add: Host 1.1.1.8 Gate 1.1.1.9 Ifp en0 Ifa 192.168.130.16
+failed to add: Host 1.1.1.7 Gate 1.1.1.8 Ifp en0 Ifa 192.168.130.16
+failed to add: Host 1.1.1.6 Gate 1.1.1.7 Ifp en0 Ifa 192.168.130.16
+failed to add: Host 1.1.1.5 Gate 1.1.1.6 Ifp en0 Ifa 192.168.130.16
+failed to add: Host 1.1.1.4 Gate 1.1.1.5 Ifp en0 Ifa 192.168.130.16
+failed to add: Host 1.1.1.3 Gate 1.1.1.4 Ifp en0 Ifa 192.168.130.16
+failed to add: Host 1.1.1.2 Gate 1.1.1.3 Ifp en0 Ifa 192.168.130.16
+failed to add: Host 1.1.1.1 Gate 1.1.1.2 Ifp en0 Ifa 192.168.130.16
 Add new[12]: Net 192.168.130.0/24 Ifp en0 Ifa 192.168.130.16
+Add new[14]: Net 224.0.0.0/4 Ifp en0 Ifa 192.168.130.16
+Add new[15]: Net 255.255.255.255/32 Ifp en0 Ifa 192.168.130.16
 =================> Apply 'test3', 'test18' End <=================
 
 =================> Apply 'test18', 'test3' Begin <=================
-Old routes ('test18') = <IPv4RouteList[14]> = {
+Old routes ('test18') = <IPv4RouteList[16]> = {
  0. Net 0.0.0.0/0 Gate 192.168.130.1 Ifp en0 Ifa 192.168.130.16
  1. Host 1.1.1.1 Gate 1.1.1.2 Ifp en0 Ifa 192.168.130.16
  2. Host 1.1.1.2 Gate 1.1.1.3 Ifp en0 Ifa 192.168.130.16
@@ -6580,22 +9278,26 @@ Old routes ('test18') = <IPv4RouteList[14]> = {
 11. Host 1.1.1.11 Gate 1.1.1.1 Ifp en0 Ifa 192.168.130.16
 12. Net 192.168.130.0/24 Ifp en0 Ifa 192.168.130.16
 13. Net 192.168.130.1/32 Ifp en0 Ifa 192.168.130.16
+14. Net 224.0.0.0/4 Ifp en0 Ifa 192.168.130.16
+15. Net 255.255.255.255/32 Ifp en0 Ifa 192.168.130.16
 }
 Add new[13]: Net 192.168.130.1/32 Ifp en0 Ifa 192.168.130.16
 Add new[0]: Net 0.0.0.0/0 Gate 192.168.130.1 Ifp en0 Ifa 192.168.130.16
-IPMonitor RouteProcess: routing loop detected, not adding: Host 1.1.1.11 Gate 1.1.1.1 Ifp en0 Ifa 192.168.130.16
-IPMonitor RouteProcess: failed to add: Host 1.1.1.10 Gate 1.1.1.11 Ifp en0 Ifa 192.168.130.16
-IPMonitor RouteProcess: failed to add: Host 1.1.1.9 Gate 1.1.1.10 Ifp en0 Ifa 192.168.130.16
-IPMonitor RouteProcess: failed to add: Host 1.1.1.8 Gate 1.1.1.9 Ifp en0 Ifa 192.168.130.16
-IPMonitor RouteProcess: failed to add: Host 1.1.1.7 Gate 1.1.1.8 Ifp en0 Ifa 192.168.130.16
-IPMonitor RouteProcess: failed to add: Host 1.1.1.6 Gate 1.1.1.7 Ifp en0 Ifa 192.168.130.16
-IPMonitor RouteProcess: failed to add: Host 1.1.1.5 Gate 1.1.1.6 Ifp en0 Ifa 192.168.130.16
-IPMonitor RouteProcess: failed to add: Host 1.1.1.4 Gate 1.1.1.5 Ifp en0 Ifa 192.168.130.16
-IPMonitor RouteProcess: failed to add: Host 1.1.1.3 Gate 1.1.1.4 Ifp en0 Ifa 192.168.130.16
-IPMonitor RouteProcess: failed to add: Host 1.1.1.2 Gate 1.1.1.3 Ifp en0 Ifa 192.168.130.16
-IPMonitor RouteProcess: failed to add: Host 1.1.1.1 Gate 1.1.1.2 Ifp en0 Ifa 192.168.130.16
+routing loop detected, not adding: Host 1.1.1.11 Gate 1.1.1.1 Ifp en0 Ifa 192.168.130.16
+failed to add: Host 1.1.1.10 Gate 1.1.1.11 Ifp en0 Ifa 192.168.130.16
+failed to add: Host 1.1.1.9 Gate 1.1.1.10 Ifp en0 Ifa 192.168.130.16
+failed to add: Host 1.1.1.8 Gate 1.1.1.9 Ifp en0 Ifa 192.168.130.16
+failed to add: Host 1.1.1.7 Gate 1.1.1.8 Ifp en0 Ifa 192.168.130.16
+failed to add: Host 1.1.1.6 Gate 1.1.1.7 Ifp en0 Ifa 192.168.130.16
+failed to add: Host 1.1.1.5 Gate 1.1.1.6 Ifp en0 Ifa 192.168.130.16
+failed to add: Host 1.1.1.4 Gate 1.1.1.5 Ifp en0 Ifa 192.168.130.16
+failed to add: Host 1.1.1.3 Gate 1.1.1.4 Ifp en0 Ifa 192.168.130.16
+failed to add: Host 1.1.1.2 Gate 1.1.1.3 Ifp en0 Ifa 192.168.130.16
+failed to add: Host 1.1.1.1 Gate 1.1.1.2 Ifp en0 Ifa 192.168.130.16
 Add new[12]: Net 192.168.130.0/24 Ifp en0 Ifa 192.168.130.16
-New Routes ('test3') = <IPv4RouteList[15]> = {
+Add new[14]: Net 224.0.0.0/4 Ifp en0 Ifa 192.168.130.16
+Add new[15]: Net 255.255.255.255/32 Ifp en0 Ifa 192.168.130.16
+New Routes ('test3') = <IPv4RouteList[21]> = {
  0. Net 0.0.0.0/0 Gate 10.0.0.1 Ifp en0 Ifa 10.0.0.10
  1. Net 0.0.0.0/0 Gate 10.0.0.1 Ifp en1 Ifa 10.0.0.20 [SCOPED]
  2. Net 0.0.0.0/0 Gate 192.168.3.1 Ifp fw0 Ifa 192.168.3.30 [SCOPED]
@@ -6611,10 +9313,18 @@ New Routes ('test3') = <IPv4RouteList[15]> = {
 12. Net 192.168.2.1/32 Ifp en1 Ifa 192.168.2.20 [SCOPED]
 13. Net 192.168.3.0/24 Ifp fw0 Ifa 192.168.3.30
 14. Net 192.168.3.1/32 Ifp fw0 Ifa 192.168.3.30
+15. Net 224.0.0.0/4 Ifp en0 Ifa 10.0.0.10
+16. Net 224.0.0.0/4 Ifp en1 Ifa 10.0.0.20 [SCOPED]
+17. Net 224.0.0.0/4 Ifp fw0 Ifa 192.168.3.30 [SCOPED]
+18. Net 255.255.255.255/32 Ifp en0 Ifa 10.0.0.10
+19. Net 255.255.255.255/32 Ifp en1 Ifa 10.0.0.20 [SCOPED]
+20. Net 255.255.255.255/32 Ifp fw0 Ifa 192.168.3.30 [SCOPED]
 }
 Remove old[0]: Net 0.0.0.0/0 Gate 192.168.130.1 Ifp en0 Ifa 192.168.130.16
 Remove old[12]: Net 192.168.130.0/24 Ifp en0 Ifa 192.168.130.16
 Remove old[13]: Net 192.168.130.1/32 Ifp en0 Ifa 192.168.130.16
+Remove old[14]: Net 224.0.0.0/4 Ifp en0 Ifa 192.168.130.16
+Remove old[15]: Net 255.255.255.255/32 Ifp en0 Ifa 192.168.130.16
 Add new[5]: Net 10.0.0.1/32 Ifp en0 Ifa 10.0.0.10
 Add new[0]: Net 0.0.0.0/0 Gate 10.0.0.1 Ifp en0 Ifa 10.0.0.10
 Add new[6]: Net 10.0.0.1/32 Ifp en1 Ifa 10.0.0.20 [SCOPED]
@@ -6630,10 +9340,16 @@ Add new[10]: Net 192.168.2.1/32 Ifp fw0 Ifa 192.168.2.30
 Add new[11]: Net 192.168.2.1/32 Ifp en0 Ifa 192.168.2.10 [SCOPED]
 Add new[12]: Net 192.168.2.1/32 Ifp en1 Ifa 192.168.2.20 [SCOPED]
 Add new[13]: Net 192.168.3.0/24 Ifp fw0 Ifa 192.168.3.30
+Add new[15]: Net 224.0.0.0/4 Ifp en0 Ifa 10.0.0.10
+Add new[16]: Net 224.0.0.0/4 Ifp en1 Ifa 10.0.0.20 [SCOPED]
+Add new[17]: Net 224.0.0.0/4 Ifp fw0 Ifa 192.168.3.30 [SCOPED]
+Add new[18]: Net 255.255.255.255/32 Ifp en0 Ifa 10.0.0.10
+Add new[19]: Net 255.255.255.255/32 Ifp en1 Ifa 10.0.0.20 [SCOPED]
+Add new[20]: Net 255.255.255.255/32 Ifp fw0 Ifa 192.168.3.30 [SCOPED]
 =================> Apply 'test18', 'test3' End <=================
 
 =================> Apply 'test4', 'test5' Begin <=================
-Old routes ('test4') = <IPv4RouteList[10]> = {
+Old routes ('test4') = <IPv4RouteList[14]> = {
  0. Net 0.0.0.0/0 Gate 17.202.20.1 Ifp en0 Ifa 17.202.40.191
  1. Net 0.0.0.0/0 Gate 17.202.20.1 Ifp en1 Ifa 17.202.42.24 [SCOPED]
  2. Net 10.0.0.0/24 Ifp en1 Ifa 10.0.0.20
@@ -6644,6 +9360,10 @@ Old routes ('test4') = <IPv4RouteList[10]> = {
  7. Net 17.202.20.1/32 Ifp en1 Ifa 17.202.42.24 [SCOPED]
  8. Net 17.202.40.0/22 Ifp en0 Ifa 17.202.40.191
  9. Net 17.202.40.0/22 Ifp en1 Ifa 17.202.42.24 [SCOPED]
+10. Net 224.0.0.0/4 Ifp en0 Ifa 17.202.40.191
+11. Net 224.0.0.0/4 Ifp en1 Ifa 17.202.42.24 [SCOPED]
+12. Net 255.255.255.255/32 Ifp en0 Ifa 17.202.40.191
+13. Net 255.255.255.255/32 Ifp en1 Ifa 17.202.42.24 [SCOPED]
 }
 Add new[6]: Net 17.202.20.1/32 Ifp en0 Ifa 17.202.40.191
 Add new[0]: Net 0.0.0.0/0 Gate 17.202.20.1 Ifp en0 Ifa 17.202.40.191
@@ -6655,7 +9375,11 @@ Add new[4]: Net 10.0.0.1/32 Ifp en1 Ifa 10.0.0.20
 Add new[5]: Net 10.0.0.1/32 Ifp en0 Ifa 10.0.0.11 [SCOPED]
 Add new[8]: Net 17.202.40.0/22 Ifp en0 Ifa 17.202.40.191
 Add new[9]: Net 17.202.40.0/22 Ifp en1 Ifa 17.202.42.24 [SCOPED]
-New Routes ('test5') = <IPv4RouteList[12]> = {
+Add new[10]: Net 224.0.0.0/4 Ifp en0 Ifa 17.202.40.191
+Add new[11]: Net 224.0.0.0/4 Ifp en1 Ifa 17.202.42.24 [SCOPED]
+Add new[12]: Net 255.255.255.255/32 Ifp en0 Ifa 17.202.40.191
+Add new[13]: Net 255.255.255.255/32 Ifp en1 Ifa 17.202.42.24 [SCOPED]
+New Routes ('test5') = <IPv4RouteList[18]> = {
  0. Net 0.0.0.0/0 Gate 17.219.156.1 Ifp ppp0 Ifa 17.219.156.22
  1. Net 0.0.0.0/0 Gate 17.202.20.1 Ifp en0 Ifa 17.202.40.191 [SCOPED]
  2. Net 0.0.0.0/0 Gate 17.202.20.1 Ifp en1 Ifa 17.202.42.24 [SCOPED]
@@ -6668,15 +9392,27 @@ New Routes ('test5') = <IPv4RouteList[12]> = {
  9. Net 17.202.40.0/22 Ifp en0 Ifa 17.202.40.191
 10. Net 17.202.40.0/22 Ifp en1 Ifa 17.202.42.24 [SCOPED]
 11. Net 17.219.156.1/32 Ifp ppp0 Ifa 17.219.156.22
+12. Net 224.0.0.0/4 Ifp ppp0 Ifa 17.219.156.22
+13. Net 224.0.0.0/4 Ifp en0 Ifa 17.202.40.191 [SCOPED]
+14. Net 224.0.0.0/4 Ifp en1 Ifa 17.202.42.24 [SCOPED]
+15. Net 255.255.255.255/32 Ifp ppp0 Ifa 17.219.156.22
+16. Net 255.255.255.255/32 Ifp en0 Ifa 17.202.40.191 [SCOPED]
+17. Net 255.255.255.255/32 Ifp en1 Ifa 17.202.42.24 [SCOPED]
 }
 Remove old[0]: Net 0.0.0.0/0 Gate 17.202.20.1 Ifp en0 Ifa 17.202.40.191
+Remove old[10]: Net 224.0.0.0/4 Ifp en0 Ifa 17.202.40.191
+Remove old[12]: Net 255.255.255.255/32 Ifp en0 Ifa 17.202.40.191
 Add new[11]: Net 17.219.156.1/32 Ifp ppp0 Ifa 17.219.156.22
 Add new[0]: Net 0.0.0.0/0 Gate 17.219.156.1 Ifp ppp0 Ifa 17.219.156.22
 Add new[1]: Net 0.0.0.0/0 Gate 17.202.20.1 Ifp en0 Ifa 17.202.40.191 [SCOPED]
+Add new[12]: Net 224.0.0.0/4 Ifp ppp0 Ifa 17.219.156.22
+Add new[13]: Net 224.0.0.0/4 Ifp en0 Ifa 17.202.40.191 [SCOPED]
+Add new[15]: Net 255.255.255.255/32 Ifp ppp0 Ifa 17.219.156.22
+Add new[16]: Net 255.255.255.255/32 Ifp en0 Ifa 17.202.40.191 [SCOPED]
 =================> Apply 'test4', 'test5' End <=================
 
 =================> Apply 'test5', 'test4' Begin <=================
-Old routes ('test5') = <IPv4RouteList[12]> = {
+Old routes ('test5') = <IPv4RouteList[18]> = {
  0. Net 0.0.0.0/0 Gate 17.219.156.1 Ifp ppp0 Ifa 17.219.156.22
  1. Net 0.0.0.0/0 Gate 17.202.20.1 Ifp en0 Ifa 17.202.40.191 [SCOPED]
  2. Net 0.0.0.0/0 Gate 17.202.20.1 Ifp en1 Ifa 17.202.42.24 [SCOPED]
@@ -6689,6 +9425,12 @@ Old routes ('test5') = <IPv4RouteList[12]> = {
  9. Net 17.202.40.0/22 Ifp en0 Ifa 17.202.40.191
 10. Net 17.202.40.0/22 Ifp en1 Ifa 17.202.42.24 [SCOPED]
 11. Net 17.219.156.1/32 Ifp ppp0 Ifa 17.219.156.22
+12. Net 224.0.0.0/4 Ifp ppp0 Ifa 17.219.156.22
+13. Net 224.0.0.0/4 Ifp en0 Ifa 17.202.40.191 [SCOPED]
+14. Net 224.0.0.0/4 Ifp en1 Ifa 17.202.42.24 [SCOPED]
+15. Net 255.255.255.255/32 Ifp ppp0 Ifa 17.219.156.22
+16. Net 255.255.255.255/32 Ifp en0 Ifa 17.202.40.191 [SCOPED]
+17. Net 255.255.255.255/32 Ifp en1 Ifa 17.202.42.24 [SCOPED]
 }
 Add new[11]: Net 17.219.156.1/32 Ifp ppp0 Ifa 17.219.156.22
 Add new[0]: Net 0.0.0.0/0 Gate 17.219.156.1 Ifp ppp0 Ifa 17.219.156.22
@@ -6702,7 +9444,13 @@ Add new[5]: Net 10.0.0.1/32 Ifp en1 Ifa 10.0.0.20
 Add new[6]: Net 10.0.0.1/32 Ifp en0 Ifa 10.0.0.11 [SCOPED]
 Add new[9]: Net 17.202.40.0/22 Ifp en0 Ifa 17.202.40.191
 Add new[10]: Net 17.202.40.0/22 Ifp en1 Ifa 17.202.42.24 [SCOPED]
-New Routes ('test4') = <IPv4RouteList[10]> = {
+Add new[12]: Net 224.0.0.0/4 Ifp ppp0 Ifa 17.219.156.22
+Add new[13]: Net 224.0.0.0/4 Ifp en0 Ifa 17.202.40.191 [SCOPED]
+Add new[14]: Net 224.0.0.0/4 Ifp en1 Ifa 17.202.42.24 [SCOPED]
+Add new[15]: Net 255.255.255.255/32 Ifp ppp0 Ifa 17.219.156.22
+Add new[16]: Net 255.255.255.255/32 Ifp en0 Ifa 17.202.40.191 [SCOPED]
+Add new[17]: Net 255.255.255.255/32 Ifp en1 Ifa 17.202.42.24 [SCOPED]
+New Routes ('test4') = <IPv4RouteList[14]> = {
  0. Net 0.0.0.0/0 Gate 17.202.20.1 Ifp en0 Ifa 17.202.40.191
  1. Net 0.0.0.0/0 Gate 17.202.20.1 Ifp en1 Ifa 17.202.42.24 [SCOPED]
  2. Net 10.0.0.0/24 Ifp en1 Ifa 10.0.0.20
@@ -6713,15 +9461,25 @@ New Routes ('test4') = <IPv4RouteList[10]> = {
  7. Net 17.202.20.1/32 Ifp en1 Ifa 17.202.42.24 [SCOPED]
  8. Net 17.202.40.0/22 Ifp en0 Ifa 17.202.40.191
  9. Net 17.202.40.0/22 Ifp en1 Ifa 17.202.42.24 [SCOPED]
+10. Net 224.0.0.0/4 Ifp en0 Ifa 17.202.40.191
+11. Net 224.0.0.0/4 Ifp en1 Ifa 17.202.42.24 [SCOPED]
+12. Net 255.255.255.255/32 Ifp en0 Ifa 17.202.40.191
+13. Net 255.255.255.255/32 Ifp en1 Ifa 17.202.42.24 [SCOPED]
 }
 Remove old[0]: Net 0.0.0.0/0 Gate 17.219.156.1 Ifp ppp0 Ifa 17.219.156.22
 Remove old[1]: Net 0.0.0.0/0 Gate 17.202.20.1 Ifp en0 Ifa 17.202.40.191 [SCOPED]
 Remove old[11]: Net 17.219.156.1/32 Ifp ppp0 Ifa 17.219.156.22
+Remove old[12]: Net 224.0.0.0/4 Ifp ppp0 Ifa 17.219.156.22
+Remove old[13]: Net 224.0.0.0/4 Ifp en0 Ifa 17.202.40.191 [SCOPED]
+Remove old[15]: Net 255.255.255.255/32 Ifp ppp0 Ifa 17.219.156.22
+Remove old[16]: Net 255.255.255.255/32 Ifp en0 Ifa 17.202.40.191 [SCOPED]
 Add new[0]: Net 0.0.0.0/0 Gate 17.202.20.1 Ifp en0 Ifa 17.202.40.191
+Add new[10]: Net 224.0.0.0/4 Ifp en0 Ifa 17.202.40.191
+Add new[12]: Net 255.255.255.255/32 Ifp en0 Ifa 17.202.40.191
 =================> Apply 'test5', 'test4' End <=================
 
 =================> Apply 'test4', 'test6' Begin <=================
-Old routes ('test4') = <IPv4RouteList[10]> = {
+Old routes ('test4') = <IPv4RouteList[14]> = {
  0. Net 0.0.0.0/0 Gate 17.202.20.1 Ifp en0 Ifa 17.202.40.191
  1. Net 0.0.0.0/0 Gate 17.202.20.1 Ifp en1 Ifa 17.202.42.24 [SCOPED]
  2. Net 10.0.0.0/24 Ifp en1 Ifa 10.0.0.20
@@ -6732,6 +9490,10 @@ Old routes ('test4') = <IPv4RouteList[10]> = {
  7. Net 17.202.20.1/32 Ifp en1 Ifa 17.202.42.24 [SCOPED]
  8. Net 17.202.40.0/22 Ifp en0 Ifa 17.202.40.191
  9. Net 17.202.40.0/22 Ifp en1 Ifa 17.202.42.24 [SCOPED]
+10. Net 224.0.0.0/4 Ifp en0 Ifa 17.202.40.191
+11. Net 224.0.0.0/4 Ifp en1 Ifa 17.202.42.24 [SCOPED]
+12. Net 255.255.255.255/32 Ifp en0 Ifa 17.202.40.191
+13. Net 255.255.255.255/32 Ifp en1 Ifa 17.202.42.24 [SCOPED]
 }
 Add new[6]: Net 17.202.20.1/32 Ifp en0 Ifa 17.202.40.191
 Add new[0]: Net 0.0.0.0/0 Gate 17.202.20.1 Ifp en0 Ifa 17.202.40.191
@@ -6743,17 +9505,29 @@ Add new[4]: Net 10.0.0.1/32 Ifp en1 Ifa 10.0.0.20
 Add new[5]: Net 10.0.0.1/32 Ifp en0 Ifa 10.0.0.11 [SCOPED]
 Add new[8]: Net 17.202.40.0/22 Ifp en0 Ifa 17.202.40.191
 Add new[9]: Net 17.202.40.0/22 Ifp en1 Ifa 17.202.42.24 [SCOPED]
-New Routes ('test6') = <IPv4RouteList[10]> = {
+Add new[10]: Net 224.0.0.0/4 Ifp en0 Ifa 17.202.40.191
+Add new[11]: Net 224.0.0.0/4 Ifp en1 Ifa 17.202.42.24 [SCOPED]
+Add new[12]: Net 255.255.255.255/32 Ifp en0 Ifa 17.202.40.191
+Add new[13]: Net 255.255.255.255/32 Ifp en1 Ifa 17.202.42.24 [SCOPED]
+New Routes ('test6') = <IPv4RouteList[18]> = {
  0. Net 0.0.0.0/0 Gate 17.255.96.1 Ifp en2 Ifa 17.255.98.164
  1. Net 0.0.0.0/0 Gate 17.202.40.1 Ifp en0 Ifa 17.202.42.113 [SCOPED]
  2. Net 0.0.0.0/0 Gate 17.202.40.1 Ifp en1 Ifa 17.202.42.111 [SCOPED]
- 3. Net 0.0.0.0/0 Ifp fw0 Ifa 169.254.11.33 [SCOPED]
- 4. Net 17.202.40.0/22 Ifp en0 Ifa 17.202.42.113
- 5. Net 17.202.40.0/22 Ifp en1 Ifa 17.202.42.111 [SCOPED]
- 6. Net 17.202.40.1/32 Ifp en0 Ifa 17.202.42.113
- 7. Net 17.202.40.1/32 Ifp en1 Ifa 17.202.42.111 [SCOPED]
- 8. Net 17.255.96.0/20 Ifp en2 Ifa 17.255.98.164
- 9. Net 17.255.96.1/32 Ifp en2 Ifa 17.255.98.164
+ 3. Net 17.202.40.0/22 Ifp en0 Ifa 17.202.42.113
+ 4. Net 17.202.40.0/22 Ifp en1 Ifa 17.202.42.111 [SCOPED]
+ 5. Net 17.202.40.1/32 Ifp en0 Ifa 17.202.42.113
+ 6. Net 17.202.40.1/32 Ifp en1 Ifa 17.202.42.111 [SCOPED]
+ 7. Net 17.255.96.0/20 Ifp en2 Ifa 17.255.98.164
+ 8. Net 17.255.96.1/32 Ifp en2 Ifa 17.255.98.164
+ 9. Net 169.254.0.0/16 Ifp fw0 Ifa 169.254.11.33 [last]
+10. Net 224.0.0.0/4 Ifp en2 Ifa 17.255.98.164
+11. Net 224.0.0.0/4 Ifp en0 Ifa 17.202.42.113 [SCOPED]
+12. Net 224.0.0.0/4 Ifp en1 Ifa 17.202.42.111 [SCOPED]
+13. Net 224.0.0.0/4 Ifp fw0 Ifa 169.254.11.33 [last] [SCOPED]
+14. Net 255.255.255.255/32 Ifp en2 Ifa 17.255.98.164
+15. Net 255.255.255.255/32 Ifp en0 Ifa 17.202.42.113 [SCOPED]
+16. Net 255.255.255.255/32 Ifp en1 Ifa 17.202.42.111 [SCOPED]
+17. Net 255.255.255.255/32 Ifp fw0 Ifa 169.254.11.33 [last] [SCOPED]
 }
 Remove old[0]: Net 0.0.0.0/0 Gate 17.202.20.1 Ifp en0 Ifa 17.202.40.191
 Remove old[1]: Net 0.0.0.0/0 Gate 17.202.20.1 Ifp en1 Ifa 17.202.42.24 [SCOPED]
@@ -6765,42 +9539,70 @@ Remove old[6]: Net 17.202.20.1/32 Ifp en0 Ifa 17.202.40.191
 Remove old[7]: Net 17.202.20.1/32 Ifp en1 Ifa 17.202.42.24 [SCOPED]
 Remove old[8]: Net 17.202.40.0/22 Ifp en0 Ifa 17.202.40.191
 Remove old[9]: Net 17.202.40.0/22 Ifp en1 Ifa 17.202.42.24 [SCOPED]
-Add new[9]: Net 17.255.96.1/32 Ifp en2 Ifa 17.255.98.164
+Remove old[10]: Net 224.0.0.0/4 Ifp en0 Ifa 17.202.40.191
+Remove old[11]: Net 224.0.0.0/4 Ifp en1 Ifa 17.202.42.24 [SCOPED]
+Remove old[12]: Net 255.255.255.255/32 Ifp en0 Ifa 17.202.40.191
+Remove old[13]: Net 255.255.255.255/32 Ifp en1 Ifa 17.202.42.24 [SCOPED]
+Add new[8]: Net 17.255.96.1/32 Ifp en2 Ifa 17.255.98.164
 Add new[0]: Net 0.0.0.0/0 Gate 17.255.96.1 Ifp en2 Ifa 17.255.98.164
-Add new[6]: Net 17.202.40.1/32 Ifp en0 Ifa 17.202.42.113
+Add new[5]: Net 17.202.40.1/32 Ifp en0 Ifa 17.202.42.113
 Add new[1]: Net 0.0.0.0/0 Gate 17.202.40.1 Ifp en0 Ifa 17.202.42.113 [SCOPED]
-Add new[7]: Net 17.202.40.1/32 Ifp en1 Ifa 17.202.42.111 [SCOPED]
+Add new[6]: Net 17.202.40.1/32 Ifp en1 Ifa 17.202.42.111 [SCOPED]
 Add new[2]: Net 0.0.0.0/0 Gate 17.202.40.1 Ifp en1 Ifa 17.202.42.111 [SCOPED]
-Add new[3]: Net 0.0.0.0/0 Ifp fw0 Ifa 169.254.11.33 [SCOPED]
-Add new[4]: Net 17.202.40.0/22 Ifp en0 Ifa 17.202.42.113
-Add new[5]: Net 17.202.40.0/22 Ifp en1 Ifa 17.202.42.111 [SCOPED]
-Add new[8]: Net 17.255.96.0/20 Ifp en2 Ifa 17.255.98.164
+Add new[3]: Net 17.202.40.0/22 Ifp en0 Ifa 17.202.42.113
+Add new[4]: Net 17.202.40.0/22 Ifp en1 Ifa 17.202.42.111 [SCOPED]
+Add new[7]: Net 17.255.96.0/20 Ifp en2 Ifa 17.255.98.164
+Add new[9]: Net 169.254.0.0/16 Ifp fw0 Ifa 169.254.11.33 [last]
+Add new[10]: Net 224.0.0.0/4 Ifp en2 Ifa 17.255.98.164
+Add new[11]: Net 224.0.0.0/4 Ifp en0 Ifa 17.202.42.113 [SCOPED]
+Add new[12]: Net 224.0.0.0/4 Ifp en1 Ifa 17.202.42.111 [SCOPED]
+Add new[13]: Net 224.0.0.0/4 Ifp fw0 Ifa 169.254.11.33 [last] [SCOPED]
+Add new[14]: Net 255.255.255.255/32 Ifp en2 Ifa 17.255.98.164
+Add new[15]: Net 255.255.255.255/32 Ifp en0 Ifa 17.202.42.113 [SCOPED]
+Add new[16]: Net 255.255.255.255/32 Ifp en1 Ifa 17.202.42.111 [SCOPED]
+Add new[17]: Net 255.255.255.255/32 Ifp fw0 Ifa 169.254.11.33 [last] [SCOPED]
 =================> Apply 'test4', 'test6' End <=================
 
 =================> Apply 'test6', 'test4' Begin <=================
-Old routes ('test6') = <IPv4RouteList[10]> = {
+Old routes ('test6') = <IPv4RouteList[18]> = {
  0. Net 0.0.0.0/0 Gate 17.255.96.1 Ifp en2 Ifa 17.255.98.164
  1. Net 0.0.0.0/0 Gate 17.202.40.1 Ifp en0 Ifa 17.202.42.113 [SCOPED]
  2. Net 0.0.0.0/0 Gate 17.202.40.1 Ifp en1 Ifa 17.202.42.111 [SCOPED]
- 3. Net 0.0.0.0/0 Ifp fw0 Ifa 169.254.11.33 [SCOPED]
- 4. Net 17.202.40.0/22 Ifp en0 Ifa 17.202.42.113
- 5. Net 17.202.40.0/22 Ifp en1 Ifa 17.202.42.111 [SCOPED]
- 6. Net 17.202.40.1/32 Ifp en0 Ifa 17.202.42.113
- 7. Net 17.202.40.1/32 Ifp en1 Ifa 17.202.42.111 [SCOPED]
- 8. Net 17.255.96.0/20 Ifp en2 Ifa 17.255.98.164
- 9. Net 17.255.96.1/32 Ifp en2 Ifa 17.255.98.164
-}
-Add new[9]: Net 17.255.96.1/32 Ifp en2 Ifa 17.255.98.164
+ 3. Net 17.202.40.0/22 Ifp en0 Ifa 17.202.42.113
+ 4. Net 17.202.40.0/22 Ifp en1 Ifa 17.202.42.111 [SCOPED]
+ 5. Net 17.202.40.1/32 Ifp en0 Ifa 17.202.42.113
+ 6. Net 17.202.40.1/32 Ifp en1 Ifa 17.202.42.111 [SCOPED]
+ 7. Net 17.255.96.0/20 Ifp en2 Ifa 17.255.98.164
+ 8. Net 17.255.96.1/32 Ifp en2 Ifa 17.255.98.164
+ 9. Net 169.254.0.0/16 Ifp fw0 Ifa 169.254.11.33 [last]
+10. Net 224.0.0.0/4 Ifp en2 Ifa 17.255.98.164
+11. Net 224.0.0.0/4 Ifp en0 Ifa 17.202.42.113 [SCOPED]
+12. Net 224.0.0.0/4 Ifp en1 Ifa 17.202.42.111 [SCOPED]
+13. Net 224.0.0.0/4 Ifp fw0 Ifa 169.254.11.33 [last] [SCOPED]
+14. Net 255.255.255.255/32 Ifp en2 Ifa 17.255.98.164
+15. Net 255.255.255.255/32 Ifp en0 Ifa 17.202.42.113 [SCOPED]
+16. Net 255.255.255.255/32 Ifp en1 Ifa 17.202.42.111 [SCOPED]
+17. Net 255.255.255.255/32 Ifp fw0 Ifa 169.254.11.33 [last] [SCOPED]
+}
+Add new[8]: Net 17.255.96.1/32 Ifp en2 Ifa 17.255.98.164
 Add new[0]: Net 0.0.0.0/0 Gate 17.255.96.1 Ifp en2 Ifa 17.255.98.164
-Add new[6]: Net 17.202.40.1/32 Ifp en0 Ifa 17.202.42.113
+Add new[5]: Net 17.202.40.1/32 Ifp en0 Ifa 17.202.42.113
 Add new[1]: Net 0.0.0.0/0 Gate 17.202.40.1 Ifp en0 Ifa 17.202.42.113 [SCOPED]
-Add new[7]: Net 17.202.40.1/32 Ifp en1 Ifa 17.202.42.111 [SCOPED]
+Add new[6]: Net 17.202.40.1/32 Ifp en1 Ifa 17.202.42.111 [SCOPED]
 Add new[2]: Net 0.0.0.0/0 Gate 17.202.40.1 Ifp en1 Ifa 17.202.42.111 [SCOPED]
-Add new[3]: Net 0.0.0.0/0 Ifp fw0 Ifa 169.254.11.33 [SCOPED]
-Add new[4]: Net 17.202.40.0/22 Ifp en0 Ifa 17.202.42.113
-Add new[5]: Net 17.202.40.0/22 Ifp en1 Ifa 17.202.42.111 [SCOPED]
-Add new[8]: Net 17.255.96.0/20 Ifp en2 Ifa 17.255.98.164
-New Routes ('test4') = <IPv4RouteList[10]> = {
+Add new[3]: Net 17.202.40.0/22 Ifp en0 Ifa 17.202.42.113
+Add new[4]: Net 17.202.40.0/22 Ifp en1 Ifa 17.202.42.111 [SCOPED]
+Add new[7]: Net 17.255.96.0/20 Ifp en2 Ifa 17.255.98.164
+Add new[9]: Net 169.254.0.0/16 Ifp fw0 Ifa 169.254.11.33 [last]
+Add new[10]: Net 224.0.0.0/4 Ifp en2 Ifa 17.255.98.164
+Add new[11]: Net 224.0.0.0/4 Ifp en0 Ifa 17.202.42.113 [SCOPED]
+Add new[12]: Net 224.0.0.0/4 Ifp en1 Ifa 17.202.42.111 [SCOPED]
+Add new[13]: Net 224.0.0.0/4 Ifp fw0 Ifa 169.254.11.33 [last] [SCOPED]
+Add new[14]: Net 255.255.255.255/32 Ifp en2 Ifa 17.255.98.164
+Add new[15]: Net 255.255.255.255/32 Ifp en0 Ifa 17.202.42.113 [SCOPED]
+Add new[16]: Net 255.255.255.255/32 Ifp en1 Ifa 17.202.42.111 [SCOPED]
+Add new[17]: Net 255.255.255.255/32 Ifp fw0 Ifa 169.254.11.33 [last] [SCOPED]
+New Routes ('test4') = <IPv4RouteList[14]> = {
  0. Net 0.0.0.0/0 Gate 17.202.20.1 Ifp en0 Ifa 17.202.40.191
  1. Net 0.0.0.0/0 Gate 17.202.20.1 Ifp en1 Ifa 17.202.42.24 [SCOPED]
  2. Net 10.0.0.0/24 Ifp en1 Ifa 10.0.0.20
@@ -6811,17 +9613,29 @@ New Routes ('test4') = <IPv4RouteList[10]> = {
  7. Net 17.202.20.1/32 Ifp en1 Ifa 17.202.42.24 [SCOPED]
  8. Net 17.202.40.0/22 Ifp en0 Ifa 17.202.40.191
  9. Net 17.202.40.0/22 Ifp en1 Ifa 17.202.42.24 [SCOPED]
+10. Net 224.0.0.0/4 Ifp en0 Ifa 17.202.40.191
+11. Net 224.0.0.0/4 Ifp en1 Ifa 17.202.42.24 [SCOPED]
+12. Net 255.255.255.255/32 Ifp en0 Ifa 17.202.40.191
+13. Net 255.255.255.255/32 Ifp en1 Ifa 17.202.42.24 [SCOPED]
 }
 Remove old[0]: Net 0.0.0.0/0 Gate 17.255.96.1 Ifp en2 Ifa 17.255.98.164
 Remove old[1]: Net 0.0.0.0/0 Gate 17.202.40.1 Ifp en0 Ifa 17.202.42.113 [SCOPED]
 Remove old[2]: Net 0.0.0.0/0 Gate 17.202.40.1 Ifp en1 Ifa 17.202.42.111 [SCOPED]
-Remove old[3]: Net 0.0.0.0/0 Ifp fw0 Ifa 169.254.11.33 [SCOPED]
-Remove old[4]: Net 17.202.40.0/22 Ifp en0 Ifa 17.202.42.113
-Remove old[5]: Net 17.202.40.0/22 Ifp en1 Ifa 17.202.42.111 [SCOPED]
-Remove old[6]: Net 17.202.40.1/32 Ifp en0 Ifa 17.202.42.113
-Remove old[7]: Net 17.202.40.1/32 Ifp en1 Ifa 17.202.42.111 [SCOPED]
-Remove old[8]: Net 17.255.96.0/20 Ifp en2 Ifa 17.255.98.164
-Remove old[9]: Net 17.255.96.1/32 Ifp en2 Ifa 17.255.98.164
+Remove old[3]: Net 17.202.40.0/22 Ifp en0 Ifa 17.202.42.113
+Remove old[4]: Net 17.202.40.0/22 Ifp en1 Ifa 17.202.42.111 [SCOPED]
+Remove old[5]: Net 17.202.40.1/32 Ifp en0 Ifa 17.202.42.113
+Remove old[6]: Net 17.202.40.1/32 Ifp en1 Ifa 17.202.42.111 [SCOPED]
+Remove old[7]: Net 17.255.96.0/20 Ifp en2 Ifa 17.255.98.164
+Remove old[8]: Net 17.255.96.1/32 Ifp en2 Ifa 17.255.98.164
+Remove old[9]: Net 169.254.0.0/16 Ifp fw0 Ifa 169.254.11.33 [last]
+Remove old[10]: Net 224.0.0.0/4 Ifp en2 Ifa 17.255.98.164
+Remove old[11]: Net 224.0.0.0/4 Ifp en0 Ifa 17.202.42.113 [SCOPED]
+Remove old[12]: Net 224.0.0.0/4 Ifp en1 Ifa 17.202.42.111 [SCOPED]
+Remove old[13]: Net 224.0.0.0/4 Ifp fw0 Ifa 169.254.11.33 [last] [SCOPED]
+Remove old[14]: Net 255.255.255.255/32 Ifp en2 Ifa 17.255.98.164
+Remove old[15]: Net 255.255.255.255/32 Ifp en0 Ifa 17.202.42.113 [SCOPED]
+Remove old[16]: Net 255.255.255.255/32 Ifp en1 Ifa 17.202.42.111 [SCOPED]
+Remove old[17]: Net 255.255.255.255/32 Ifp fw0 Ifa 169.254.11.33 [last] [SCOPED]
 Add new[6]: Net 17.202.20.1/32 Ifp en0 Ifa 17.202.40.191
 Add new[0]: Net 0.0.0.0/0 Gate 17.202.20.1 Ifp en0 Ifa 17.202.40.191
 Add new[7]: Net 17.202.20.1/32 Ifp en1 Ifa 17.202.42.24 [SCOPED]
@@ -6832,10 +9646,14 @@ Add new[4]: Net 10.0.0.1/32 Ifp en1 Ifa 10.0.0.20
 Add new[5]: Net 10.0.0.1/32 Ifp en0 Ifa 10.0.0.11 [SCOPED]
 Add new[8]: Net 17.202.40.0/22 Ifp en0 Ifa 17.202.40.191
 Add new[9]: Net 17.202.40.0/22 Ifp en1 Ifa 17.202.42.24 [SCOPED]
+Add new[10]: Net 224.0.0.0/4 Ifp en0 Ifa 17.202.40.191
+Add new[11]: Net 224.0.0.0/4 Ifp en1 Ifa 17.202.42.24 [SCOPED]
+Add new[12]: Net 255.255.255.255/32 Ifp en0 Ifa 17.202.40.191
+Add new[13]: Net 255.255.255.255/32 Ifp en1 Ifa 17.202.42.24 [SCOPED]
 =================> Apply 'test6', 'test4' End <=================
 
 =================> Apply 'test4', 'test7' Begin <=================
-Old routes ('test4') = <IPv4RouteList[10]> = {
+Old routes ('test4') = <IPv4RouteList[14]> = {
  0. Net 0.0.0.0/0 Gate 17.202.20.1 Ifp en0 Ifa 17.202.40.191
  1. Net 0.0.0.0/0 Gate 17.202.20.1 Ifp en1 Ifa 17.202.42.24 [SCOPED]
  2. Net 10.0.0.0/24 Ifp en1 Ifa 10.0.0.20
@@ -6846,6 +9664,10 @@ Old routes ('test4') = <IPv4RouteList[10]> = {
  7. Net 17.202.20.1/32 Ifp en1 Ifa 17.202.42.24 [SCOPED]
  8. Net 17.202.40.0/22 Ifp en0 Ifa 17.202.40.191
  9. Net 17.202.40.0/22 Ifp en1 Ifa 17.202.42.24 [SCOPED]
+10. Net 224.0.0.0/4 Ifp en0 Ifa 17.202.40.191
+11. Net 224.0.0.0/4 Ifp en1 Ifa 17.202.42.24 [SCOPED]
+12. Net 255.255.255.255/32 Ifp en0 Ifa 17.202.40.191
+13. Net 255.255.255.255/32 Ifp en1 Ifa 17.202.42.24 [SCOPED]
 }
 Add new[6]: Net 17.202.20.1/32 Ifp en0 Ifa 17.202.40.191
 Add new[0]: Net 0.0.0.0/0 Gate 17.202.20.1 Ifp en0 Ifa 17.202.40.191
@@ -6857,17 +9679,29 @@ Add new[4]: Net 10.0.0.1/32 Ifp en1 Ifa 10.0.0.20
 Add new[5]: Net 10.0.0.1/32 Ifp en0 Ifa 10.0.0.11 [SCOPED]
 Add new[8]: Net 17.202.40.0/22 Ifp en0 Ifa 17.202.40.191
 Add new[9]: Net 17.202.40.0/22 Ifp en1 Ifa 17.202.42.24 [SCOPED]
-New Routes ('test7') = <IPv4RouteList[10]> = {
+Add new[10]: Net 224.0.0.0/4 Ifp en0 Ifa 17.202.40.191
+Add new[11]: Net 224.0.0.0/4 Ifp en1 Ifa 17.202.42.24 [SCOPED]
+Add new[12]: Net 255.255.255.255/32 Ifp en0 Ifa 17.202.40.191
+Add new[13]: Net 255.255.255.255/32 Ifp en1 Ifa 17.202.42.24 [SCOPED]
+New Routes ('test7') = <IPv4RouteList[18]> = {
  0. Net 0.0.0.0/0 Gate 17.255.96.1 Ifp en2 Ifa 17.255.98.164
  1. Net 0.0.0.0/0 Gate 17.202.40.1 Ifp en1 Ifa 17.202.42.111 [SCOPED]
  2. Net 0.0.0.0/0 Gate 17.202.40.1 Ifp en0 Ifa 17.202.42.113 [SCOPED]
- 3. Net 0.0.0.0/0 Ifp fw0 Ifa 169.254.11.33 [SCOPED]
- 4. Net 17.202.40.0/22 Ifp en1 Ifa 17.202.42.111
- 5. Net 17.202.40.0/22 Ifp en0 Ifa 17.202.42.113 [SCOPED]
- 6. Net 17.202.40.1/32 Ifp en1 Ifa 17.202.42.111
- 7. Net 17.202.40.1/32 Ifp en0 Ifa 17.202.42.113 [SCOPED]
- 8. Net 17.255.96.0/20 Ifp en2 Ifa 17.255.98.164
- 9. Net 17.255.96.1/32 Ifp en2 Ifa 17.255.98.164
+ 3. Net 17.202.40.0/22 Ifp en1 Ifa 17.202.42.111
+ 4. Net 17.202.40.0/22 Ifp en0 Ifa 17.202.42.113 [SCOPED]
+ 5. Net 17.202.40.1/32 Ifp en1 Ifa 17.202.42.111
+ 6. Net 17.202.40.1/32 Ifp en0 Ifa 17.202.42.113 [SCOPED]
+ 7. Net 17.255.96.0/20 Ifp en2 Ifa 17.255.98.164
+ 8. Net 17.255.96.1/32 Ifp en2 Ifa 17.255.98.164
+ 9. Net 169.254.0.0/16 Ifp fw0 Ifa 169.254.11.33 [last]
+10. Net 224.0.0.0/4 Ifp en2 Ifa 17.255.98.164
+11. Net 224.0.0.0/4 Ifp en1 Ifa 17.202.42.111 [SCOPED]
+12. Net 224.0.0.0/4 Ifp en0 Ifa 17.202.42.113 [SCOPED]
+13. Net 224.0.0.0/4 Ifp fw0 Ifa 169.254.11.33 [last] [SCOPED]
+14. Net 255.255.255.255/32 Ifp en2 Ifa 17.255.98.164
+15. Net 255.255.255.255/32 Ifp en1 Ifa 17.202.42.111 [SCOPED]
+16. Net 255.255.255.255/32 Ifp en0 Ifa 17.202.42.113 [SCOPED]
+17. Net 255.255.255.255/32 Ifp fw0 Ifa 169.254.11.33 [last] [SCOPED]
 }
 Remove old[0]: Net 0.0.0.0/0 Gate 17.202.20.1 Ifp en0 Ifa 17.202.40.191
 Remove old[1]: Net 0.0.0.0/0 Gate 17.202.20.1 Ifp en1 Ifa 17.202.42.24 [SCOPED]
@@ -6879,42 +9713,70 @@ Remove old[6]: Net 17.202.20.1/32 Ifp en0 Ifa 17.202.40.191
 Remove old[7]: Net 17.202.20.1/32 Ifp en1 Ifa 17.202.42.24 [SCOPED]
 Remove old[8]: Net 17.202.40.0/22 Ifp en0 Ifa 17.202.40.191
 Remove old[9]: Net 17.202.40.0/22 Ifp en1 Ifa 17.202.42.24 [SCOPED]
-Add new[9]: Net 17.255.96.1/32 Ifp en2 Ifa 17.255.98.164
+Remove old[10]: Net 224.0.0.0/4 Ifp en0 Ifa 17.202.40.191
+Remove old[11]: Net 224.0.0.0/4 Ifp en1 Ifa 17.202.42.24 [SCOPED]
+Remove old[12]: Net 255.255.255.255/32 Ifp en0 Ifa 17.202.40.191
+Remove old[13]: Net 255.255.255.255/32 Ifp en1 Ifa 17.202.42.24 [SCOPED]
+Add new[8]: Net 17.255.96.1/32 Ifp en2 Ifa 17.255.98.164
 Add new[0]: Net 0.0.0.0/0 Gate 17.255.96.1 Ifp en2 Ifa 17.255.98.164
-Add new[6]: Net 17.202.40.1/32 Ifp en1 Ifa 17.202.42.111
+Add new[5]: Net 17.202.40.1/32 Ifp en1 Ifa 17.202.42.111
 Add new[1]: Net 0.0.0.0/0 Gate 17.202.40.1 Ifp en1 Ifa 17.202.42.111 [SCOPED]
-Add new[7]: Net 17.202.40.1/32 Ifp en0 Ifa 17.202.42.113 [SCOPED]
+Add new[6]: Net 17.202.40.1/32 Ifp en0 Ifa 17.202.42.113 [SCOPED]
 Add new[2]: Net 0.0.0.0/0 Gate 17.202.40.1 Ifp en0 Ifa 17.202.42.113 [SCOPED]
-Add new[3]: Net 0.0.0.0/0 Ifp fw0 Ifa 169.254.11.33 [SCOPED]
-Add new[4]: Net 17.202.40.0/22 Ifp en1 Ifa 17.202.42.111
-Add new[5]: Net 17.202.40.0/22 Ifp en0 Ifa 17.202.42.113 [SCOPED]
-Add new[8]: Net 17.255.96.0/20 Ifp en2 Ifa 17.255.98.164
+Add new[3]: Net 17.202.40.0/22 Ifp en1 Ifa 17.202.42.111
+Add new[4]: Net 17.202.40.0/22 Ifp en0 Ifa 17.202.42.113 [SCOPED]
+Add new[7]: Net 17.255.96.0/20 Ifp en2 Ifa 17.255.98.164
+Add new[9]: Net 169.254.0.0/16 Ifp fw0 Ifa 169.254.11.33 [last]
+Add new[10]: Net 224.0.0.0/4 Ifp en2 Ifa 17.255.98.164
+Add new[11]: Net 224.0.0.0/4 Ifp en1 Ifa 17.202.42.111 [SCOPED]
+Add new[12]: Net 224.0.0.0/4 Ifp en0 Ifa 17.202.42.113 [SCOPED]
+Add new[13]: Net 224.0.0.0/4 Ifp fw0 Ifa 169.254.11.33 [last] [SCOPED]
+Add new[14]: Net 255.255.255.255/32 Ifp en2 Ifa 17.255.98.164
+Add new[15]: Net 255.255.255.255/32 Ifp en1 Ifa 17.202.42.111 [SCOPED]
+Add new[16]: Net 255.255.255.255/32 Ifp en0 Ifa 17.202.42.113 [SCOPED]
+Add new[17]: Net 255.255.255.255/32 Ifp fw0 Ifa 169.254.11.33 [last] [SCOPED]
 =================> Apply 'test4', 'test7' End <=================
 
 =================> Apply 'test7', 'test4' Begin <=================
-Old routes ('test7') = <IPv4RouteList[10]> = {
+Old routes ('test7') = <IPv4RouteList[18]> = {
  0. Net 0.0.0.0/0 Gate 17.255.96.1 Ifp en2 Ifa 17.255.98.164
  1. Net 0.0.0.0/0 Gate 17.202.40.1 Ifp en1 Ifa 17.202.42.111 [SCOPED]
  2. Net 0.0.0.0/0 Gate 17.202.40.1 Ifp en0 Ifa 17.202.42.113 [SCOPED]
- 3. Net 0.0.0.0/0 Ifp fw0 Ifa 169.254.11.33 [SCOPED]
- 4. Net 17.202.40.0/22 Ifp en1 Ifa 17.202.42.111
- 5. Net 17.202.40.0/22 Ifp en0 Ifa 17.202.42.113 [SCOPED]
- 6. Net 17.202.40.1/32 Ifp en1 Ifa 17.202.42.111
- 7. Net 17.202.40.1/32 Ifp en0 Ifa 17.202.42.113 [SCOPED]
- 8. Net 17.255.96.0/20 Ifp en2 Ifa 17.255.98.164
- 9. Net 17.255.96.1/32 Ifp en2 Ifa 17.255.98.164
-}
-Add new[9]: Net 17.255.96.1/32 Ifp en2 Ifa 17.255.98.164
+ 3. Net 17.202.40.0/22 Ifp en1 Ifa 17.202.42.111
+ 4. Net 17.202.40.0/22 Ifp en0 Ifa 17.202.42.113 [SCOPED]
+ 5. Net 17.202.40.1/32 Ifp en1 Ifa 17.202.42.111
+ 6. Net 17.202.40.1/32 Ifp en0 Ifa 17.202.42.113 [SCOPED]
+ 7. Net 17.255.96.0/20 Ifp en2 Ifa 17.255.98.164
+ 8. Net 17.255.96.1/32 Ifp en2 Ifa 17.255.98.164
+ 9. Net 169.254.0.0/16 Ifp fw0 Ifa 169.254.11.33 [last]
+10. Net 224.0.0.0/4 Ifp en2 Ifa 17.255.98.164
+11. Net 224.0.0.0/4 Ifp en1 Ifa 17.202.42.111 [SCOPED]
+12. Net 224.0.0.0/4 Ifp en0 Ifa 17.202.42.113 [SCOPED]
+13. Net 224.0.0.0/4 Ifp fw0 Ifa 169.254.11.33 [last] [SCOPED]
+14. Net 255.255.255.255/32 Ifp en2 Ifa 17.255.98.164
+15. Net 255.255.255.255/32 Ifp en1 Ifa 17.202.42.111 [SCOPED]
+16. Net 255.255.255.255/32 Ifp en0 Ifa 17.202.42.113 [SCOPED]
+17. Net 255.255.255.255/32 Ifp fw0 Ifa 169.254.11.33 [last] [SCOPED]
+}
+Add new[8]: Net 17.255.96.1/32 Ifp en2 Ifa 17.255.98.164
 Add new[0]: Net 0.0.0.0/0 Gate 17.255.96.1 Ifp en2 Ifa 17.255.98.164
-Add new[6]: Net 17.202.40.1/32 Ifp en1 Ifa 17.202.42.111
+Add new[5]: Net 17.202.40.1/32 Ifp en1 Ifa 17.202.42.111
 Add new[1]: Net 0.0.0.0/0 Gate 17.202.40.1 Ifp en1 Ifa 17.202.42.111 [SCOPED]
-Add new[7]: Net 17.202.40.1/32 Ifp en0 Ifa 17.202.42.113 [SCOPED]
+Add new[6]: Net 17.202.40.1/32 Ifp en0 Ifa 17.202.42.113 [SCOPED]
 Add new[2]: Net 0.0.0.0/0 Gate 17.202.40.1 Ifp en0 Ifa 17.202.42.113 [SCOPED]
-Add new[3]: Net 0.0.0.0/0 Ifp fw0 Ifa 169.254.11.33 [SCOPED]
-Add new[4]: Net 17.202.40.0/22 Ifp en1 Ifa 17.202.42.111
-Add new[5]: Net 17.202.40.0/22 Ifp en0 Ifa 17.202.42.113 [SCOPED]
-Add new[8]: Net 17.255.96.0/20 Ifp en2 Ifa 17.255.98.164
-New Routes ('test4') = <IPv4RouteList[10]> = {
+Add new[3]: Net 17.202.40.0/22 Ifp en1 Ifa 17.202.42.111
+Add new[4]: Net 17.202.40.0/22 Ifp en0 Ifa 17.202.42.113 [SCOPED]
+Add new[7]: Net 17.255.96.0/20 Ifp en2 Ifa 17.255.98.164
+Add new[9]: Net 169.254.0.0/16 Ifp fw0 Ifa 169.254.11.33 [last]
+Add new[10]: Net 224.0.0.0/4 Ifp en2 Ifa 17.255.98.164
+Add new[11]: Net 224.0.0.0/4 Ifp en1 Ifa 17.202.42.111 [SCOPED]
+Add new[12]: Net 224.0.0.0/4 Ifp en0 Ifa 17.202.42.113 [SCOPED]
+Add new[13]: Net 224.0.0.0/4 Ifp fw0 Ifa 169.254.11.33 [last] [SCOPED]
+Add new[14]: Net 255.255.255.255/32 Ifp en2 Ifa 17.255.98.164
+Add new[15]: Net 255.255.255.255/32 Ifp en1 Ifa 17.202.42.111 [SCOPED]
+Add new[16]: Net 255.255.255.255/32 Ifp en0 Ifa 17.202.42.113 [SCOPED]
+Add new[17]: Net 255.255.255.255/32 Ifp fw0 Ifa 169.254.11.33 [last] [SCOPED]
+New Routes ('test4') = <IPv4RouteList[14]> = {
  0. Net 0.0.0.0/0 Gate 17.202.20.1 Ifp en0 Ifa 17.202.40.191
  1. Net 0.0.0.0/0 Gate 17.202.20.1 Ifp en1 Ifa 17.202.42.24 [SCOPED]
  2. Net 10.0.0.0/24 Ifp en1 Ifa 10.0.0.20
@@ -6925,17 +9787,29 @@ New Routes ('test4') = <IPv4RouteList[10]> = {
  7. Net 17.202.20.1/32 Ifp en1 Ifa 17.202.42.24 [SCOPED]
  8. Net 17.202.40.0/22 Ifp en0 Ifa 17.202.40.191
  9. Net 17.202.40.0/22 Ifp en1 Ifa 17.202.42.24 [SCOPED]
+10. Net 224.0.0.0/4 Ifp en0 Ifa 17.202.40.191
+11. Net 224.0.0.0/4 Ifp en1 Ifa 17.202.42.24 [SCOPED]
+12. Net 255.255.255.255/32 Ifp en0 Ifa 17.202.40.191
+13. Net 255.255.255.255/32 Ifp en1 Ifa 17.202.42.24 [SCOPED]
 }
 Remove old[0]: Net 0.0.0.0/0 Gate 17.255.96.1 Ifp en2 Ifa 17.255.98.164
 Remove old[1]: Net 0.0.0.0/0 Gate 17.202.40.1 Ifp en1 Ifa 17.202.42.111 [SCOPED]
 Remove old[2]: Net 0.0.0.0/0 Gate 17.202.40.1 Ifp en0 Ifa 17.202.42.113 [SCOPED]
-Remove old[3]: Net 0.0.0.0/0 Ifp fw0 Ifa 169.254.11.33 [SCOPED]
-Remove old[4]: Net 17.202.40.0/22 Ifp en1 Ifa 17.202.42.111
-Remove old[5]: Net 17.202.40.0/22 Ifp en0 Ifa 17.202.42.113 [SCOPED]
-Remove old[6]: Net 17.202.40.1/32 Ifp en1 Ifa 17.202.42.111
-Remove old[7]: Net 17.202.40.1/32 Ifp en0 Ifa 17.202.42.113 [SCOPED]
-Remove old[8]: Net 17.255.96.0/20 Ifp en2 Ifa 17.255.98.164
-Remove old[9]: Net 17.255.96.1/32 Ifp en2 Ifa 17.255.98.164
+Remove old[3]: Net 17.202.40.0/22 Ifp en1 Ifa 17.202.42.111
+Remove old[4]: Net 17.202.40.0/22 Ifp en0 Ifa 17.202.42.113 [SCOPED]
+Remove old[5]: Net 17.202.40.1/32 Ifp en1 Ifa 17.202.42.111
+Remove old[6]: Net 17.202.40.1/32 Ifp en0 Ifa 17.202.42.113 [SCOPED]
+Remove old[7]: Net 17.255.96.0/20 Ifp en2 Ifa 17.255.98.164
+Remove old[8]: Net 17.255.96.1/32 Ifp en2 Ifa 17.255.98.164
+Remove old[9]: Net 169.254.0.0/16 Ifp fw0 Ifa 169.254.11.33 [last]
+Remove old[10]: Net 224.0.0.0/4 Ifp en2 Ifa 17.255.98.164
+Remove old[11]: Net 224.0.0.0/4 Ifp en1 Ifa 17.202.42.111 [SCOPED]
+Remove old[12]: Net 224.0.0.0/4 Ifp en0 Ifa 17.202.42.113 [SCOPED]
+Remove old[13]: Net 224.0.0.0/4 Ifp fw0 Ifa 169.254.11.33 [last] [SCOPED]
+Remove old[14]: Net 255.255.255.255/32 Ifp en2 Ifa 17.255.98.164
+Remove old[15]: Net 255.255.255.255/32 Ifp en1 Ifa 17.202.42.111 [SCOPED]
+Remove old[16]: Net 255.255.255.255/32 Ifp en0 Ifa 17.202.42.113 [SCOPED]
+Remove old[17]: Net 255.255.255.255/32 Ifp fw0 Ifa 169.254.11.33 [last] [SCOPED]
 Add new[6]: Net 17.202.20.1/32 Ifp en0 Ifa 17.202.40.191
 Add new[0]: Net 0.0.0.0/0 Gate 17.202.20.1 Ifp en0 Ifa 17.202.40.191
 Add new[7]: Net 17.202.20.1/32 Ifp en1 Ifa 17.202.42.24 [SCOPED]
@@ -6946,10 +9820,14 @@ Add new[4]: Net 10.0.0.1/32 Ifp en1 Ifa 10.0.0.20
 Add new[5]: Net 10.0.0.1/32 Ifp en0 Ifa 10.0.0.11 [SCOPED]
 Add new[8]: Net 17.202.40.0/22 Ifp en0 Ifa 17.202.40.191
 Add new[9]: Net 17.202.40.0/22 Ifp en1 Ifa 17.202.42.24 [SCOPED]
+Add new[10]: Net 224.0.0.0/4 Ifp en0 Ifa 17.202.40.191
+Add new[11]: Net 224.0.0.0/4 Ifp en1 Ifa 17.202.42.24 [SCOPED]
+Add new[12]: Net 255.255.255.255/32 Ifp en0 Ifa 17.202.40.191
+Add new[13]: Net 255.255.255.255/32 Ifp en1 Ifa 17.202.42.24 [SCOPED]
 =================> Apply 'test7', 'test4' End <=================
 
 =================> Apply 'test4', 'test8' Begin <=================
-Old routes ('test4') = <IPv4RouteList[10]> = {
+Old routes ('test4') = <IPv4RouteList[14]> = {
  0. Net 0.0.0.0/0 Gate 17.202.20.1 Ifp en0 Ifa 17.202.40.191
  1. Net 0.0.0.0/0 Gate 17.202.20.1 Ifp en1 Ifa 17.202.42.24 [SCOPED]
  2. Net 10.0.0.0/24 Ifp en1 Ifa 10.0.0.20
@@ -6960,6 +9838,10 @@ Old routes ('test4') = <IPv4RouteList[10]> = {
  7. Net 17.202.20.1/32 Ifp en1 Ifa 17.202.42.24 [SCOPED]
  8. Net 17.202.40.0/22 Ifp en0 Ifa 17.202.40.191
  9. Net 17.202.40.0/22 Ifp en1 Ifa 17.202.42.24 [SCOPED]
+10. Net 224.0.0.0/4 Ifp en0 Ifa 17.202.40.191
+11. Net 224.0.0.0/4 Ifp en1 Ifa 17.202.42.24 [SCOPED]
+12. Net 255.255.255.255/32 Ifp en0 Ifa 17.202.40.191
+13. Net 255.255.255.255/32 Ifp en1 Ifa 17.202.42.24 [SCOPED]
 }
 Add new[6]: Net 17.202.20.1/32 Ifp en0 Ifa 17.202.40.191
 Add new[0]: Net 0.0.0.0/0 Gate 17.202.20.1 Ifp en0 Ifa 17.202.40.191
@@ -6971,13 +9853,21 @@ Add new[4]: Net 10.0.0.1/32 Ifp en1 Ifa 10.0.0.20
 Add new[5]: Net 10.0.0.1/32 Ifp en0 Ifa 10.0.0.11 [SCOPED]
 Add new[8]: Net 17.202.40.0/22 Ifp en0 Ifa 17.202.40.191
 Add new[9]: Net 17.202.40.0/22 Ifp en1 Ifa 17.202.42.24 [SCOPED]
-New Routes ('test8') = <IPv4RouteList[6]> = {
+Add new[10]: Net 224.0.0.0/4 Ifp en0 Ifa 17.202.40.191
+Add new[11]: Net 224.0.0.0/4 Ifp en1 Ifa 17.202.42.24 [SCOPED]
+Add new[12]: Net 255.255.255.255/32 Ifp en0 Ifa 17.202.40.191
+Add new[13]: Net 255.255.255.255/32 Ifp en1 Ifa 17.202.42.24 [SCOPED]
+New Routes ('test8') = <IPv4RouteList[10]> = {
  0. Net 0.0.0.0/0 Gate 10.0.0.1 Ifp en0 Ifa 10.0.0.10
  1. Net 0.0.0.0/0 Gate 10.0.0.1 Ifp en1 Ifa 10.0.0.20 [SCOPED]
  2. Net 10.0.0.0/24 Ifp en0 Ifa 10.0.0.10
  3. Net 10.0.0.0/24 Ifp en1 Ifa 10.0.0.20 [SCOPED]
  4. Net 10.0.0.1/32 Ifp en0 Ifa 10.0.0.10
  5. Net 10.0.0.1/32 Ifp en1 Ifa 10.0.0.20 [SCOPED]
+ 6. Net 224.0.0.0/4 Ifp en0 Ifa 10.0.0.10
+ 7. Net 224.0.0.0/4 Ifp en1 Ifa 10.0.0.20 [SCOPED]
+ 8. Net 255.255.255.255/32 Ifp en0 Ifa 10.0.0.10
+ 9. Net 255.255.255.255/32 Ifp en1 Ifa 10.0.0.20 [SCOPED]
 }
 Remove old[0]: Net 0.0.0.0/0 Gate 17.202.20.1 Ifp en0 Ifa 17.202.40.191
 Remove old[1]: Net 0.0.0.0/0 Gate 17.202.20.1 Ifp en1 Ifa 17.202.42.24 [SCOPED]
@@ -6989,22 +9879,34 @@ Remove old[6]: Net 17.202.20.1/32 Ifp en0 Ifa 17.202.40.191
 Remove old[7]: Net 17.202.20.1/32 Ifp en1 Ifa 17.202.42.24 [SCOPED]
 Remove old[8]: Net 17.202.40.0/22 Ifp en0 Ifa 17.202.40.191
 Remove old[9]: Net 17.202.40.0/22 Ifp en1 Ifa 17.202.42.24 [SCOPED]
+Remove old[10]: Net 224.0.0.0/4 Ifp en0 Ifa 17.202.40.191
+Remove old[11]: Net 224.0.0.0/4 Ifp en1 Ifa 17.202.42.24 [SCOPED]
+Remove old[12]: Net 255.255.255.255/32 Ifp en0 Ifa 17.202.40.191
+Remove old[13]: Net 255.255.255.255/32 Ifp en1 Ifa 17.202.42.24 [SCOPED]
 Add new[4]: Net 10.0.0.1/32 Ifp en0 Ifa 10.0.0.10
 Add new[0]: Net 0.0.0.0/0 Gate 10.0.0.1 Ifp en0 Ifa 10.0.0.10
 Add new[5]: Net 10.0.0.1/32 Ifp en1 Ifa 10.0.0.20 [SCOPED]
 Add new[1]: Net 0.0.0.0/0 Gate 10.0.0.1 Ifp en1 Ifa 10.0.0.20 [SCOPED]
 Add new[2]: Net 10.0.0.0/24 Ifp en0 Ifa 10.0.0.10
 Add new[3]: Net 10.0.0.0/24 Ifp en1 Ifa 10.0.0.20 [SCOPED]
+Add new[6]: Net 224.0.0.0/4 Ifp en0 Ifa 10.0.0.10
+Add new[7]: Net 224.0.0.0/4 Ifp en1 Ifa 10.0.0.20 [SCOPED]
+Add new[8]: Net 255.255.255.255/32 Ifp en0 Ifa 10.0.0.10
+Add new[9]: Net 255.255.255.255/32 Ifp en1 Ifa 10.0.0.20 [SCOPED]
 =================> Apply 'test4', 'test8' End <=================
 
 =================> Apply 'test8', 'test4' Begin <=================
-Old routes ('test8') = <IPv4RouteList[6]> = {
+Old routes ('test8') = <IPv4RouteList[10]> = {
  0. Net 0.0.0.0/0 Gate 10.0.0.1 Ifp en0 Ifa 10.0.0.10
  1. Net 0.0.0.0/0 Gate 10.0.0.1 Ifp en1 Ifa 10.0.0.20 [SCOPED]
  2. Net 10.0.0.0/24 Ifp en0 Ifa 10.0.0.10
  3. Net 10.0.0.0/24 Ifp en1 Ifa 10.0.0.20 [SCOPED]
  4. Net 10.0.0.1/32 Ifp en0 Ifa 10.0.0.10
  5. Net 10.0.0.1/32 Ifp en1 Ifa 10.0.0.20 [SCOPED]
+ 6. Net 224.0.0.0/4 Ifp en0 Ifa 10.0.0.10
+ 7. Net 224.0.0.0/4 Ifp en1 Ifa 10.0.0.20 [SCOPED]
+ 8. Net 255.255.255.255/32 Ifp en0 Ifa 10.0.0.10
+ 9. Net 255.255.255.255/32 Ifp en1 Ifa 10.0.0.20 [SCOPED]
 }
 Add new[4]: Net 10.0.0.1/32 Ifp en0 Ifa 10.0.0.10
 Add new[0]: Net 0.0.0.0/0 Gate 10.0.0.1 Ifp en0 Ifa 10.0.0.10
@@ -7012,7 +9914,11 @@ Add new[5]: Net 10.0.0.1/32 Ifp en1 Ifa 10.0.0.20 [SCOPED]
 Add new[1]: Net 0.0.0.0/0 Gate 10.0.0.1 Ifp en1 Ifa 10.0.0.20 [SCOPED]
 Add new[2]: Net 10.0.0.0/24 Ifp en0 Ifa 10.0.0.10
 Add new[3]: Net 10.0.0.0/24 Ifp en1 Ifa 10.0.0.20 [SCOPED]
-New Routes ('test4') = <IPv4RouteList[10]> = {
+Add new[6]: Net 224.0.0.0/4 Ifp en0 Ifa 10.0.0.10
+Add new[7]: Net 224.0.0.0/4 Ifp en1 Ifa 10.0.0.20 [SCOPED]
+Add new[8]: Net 255.255.255.255/32 Ifp en0 Ifa 10.0.0.10
+Add new[9]: Net 255.255.255.255/32 Ifp en1 Ifa 10.0.0.20 [SCOPED]
+New Routes ('test4') = <IPv4RouteList[14]> = {
  0. Net 0.0.0.0/0 Gate 17.202.20.1 Ifp en0 Ifa 17.202.40.191
  1. Net 0.0.0.0/0 Gate 17.202.20.1 Ifp en1 Ifa 17.202.42.24 [SCOPED]
  2. Net 10.0.0.0/24 Ifp en1 Ifa 10.0.0.20
@@ -7023,6 +9929,10 @@ New Routes ('test4') = <IPv4RouteList[10]> = {
  7. Net 17.202.20.1/32 Ifp en1 Ifa 17.202.42.24 [SCOPED]
  8. Net 17.202.40.0/22 Ifp en0 Ifa 17.202.40.191
  9. Net 17.202.40.0/22 Ifp en1 Ifa 17.202.42.24 [SCOPED]
+10. Net 224.0.0.0/4 Ifp en0 Ifa 17.202.40.191
+11. Net 224.0.0.0/4 Ifp en1 Ifa 17.202.42.24 [SCOPED]
+12. Net 255.255.255.255/32 Ifp en0 Ifa 17.202.40.191
+13. Net 255.255.255.255/32 Ifp en1 Ifa 17.202.42.24 [SCOPED]
 }
 Remove old[0]: Net 0.0.0.0/0 Gate 10.0.0.1 Ifp en0 Ifa 10.0.0.10
 Remove old[1]: Net 0.0.0.0/0 Gate 10.0.0.1 Ifp en1 Ifa 10.0.0.20 [SCOPED]
@@ -7030,6 +9940,10 @@ Remove old[2]: Net 10.0.0.0/24 Ifp en0 Ifa 10.0.0.10
 Remove old[3]: Net 10.0.0.0/24 Ifp en1 Ifa 10.0.0.20 [SCOPED]
 Remove old[4]: Net 10.0.0.1/32 Ifp en0 Ifa 10.0.0.10
 Remove old[5]: Net 10.0.0.1/32 Ifp en1 Ifa 10.0.0.20 [SCOPED]
+Remove old[6]: Net 224.0.0.0/4 Ifp en0 Ifa 10.0.0.10
+Remove old[7]: Net 224.0.0.0/4 Ifp en1 Ifa 10.0.0.20 [SCOPED]
+Remove old[8]: Net 255.255.255.255/32 Ifp en0 Ifa 10.0.0.10
+Remove old[9]: Net 255.255.255.255/32 Ifp en1 Ifa 10.0.0.20 [SCOPED]
 Add new[6]: Net 17.202.20.1/32 Ifp en0 Ifa 17.202.40.191
 Add new[0]: Net 0.0.0.0/0 Gate 17.202.20.1 Ifp en0 Ifa 17.202.40.191
 Add new[7]: Net 17.202.20.1/32 Ifp en1 Ifa 17.202.42.24 [SCOPED]
@@ -7040,10 +9954,14 @@ Add new[4]: Net 10.0.0.1/32 Ifp en1 Ifa 10.0.0.20
 Add new[5]: Net 10.0.0.1/32 Ifp en0 Ifa 10.0.0.11 [SCOPED]
 Add new[8]: Net 17.202.40.0/22 Ifp en0 Ifa 17.202.40.191
 Add new[9]: Net 17.202.40.0/22 Ifp en1 Ifa 17.202.42.24 [SCOPED]
+Add new[10]: Net 224.0.0.0/4 Ifp en0 Ifa 17.202.40.191
+Add new[11]: Net 224.0.0.0/4 Ifp en1 Ifa 17.202.42.24 [SCOPED]
+Add new[12]: Net 255.255.255.255/32 Ifp en0 Ifa 17.202.40.191
+Add new[13]: Net 255.255.255.255/32 Ifp en1 Ifa 17.202.42.24 [SCOPED]
 =================> Apply 'test8', 'test4' End <=================
 
 =================> Apply 'test4', 'test9' Begin <=================
-Old routes ('test4') = <IPv4RouteList[10]> = {
+Old routes ('test4') = <IPv4RouteList[14]> = {
  0. Net 0.0.0.0/0 Gate 17.202.20.1 Ifp en0 Ifa 17.202.40.191
  1. Net 0.0.0.0/0 Gate 17.202.20.1 Ifp en1 Ifa 17.202.42.24 [SCOPED]
  2. Net 10.0.0.0/24 Ifp en1 Ifa 10.0.0.20
@@ -7054,6 +9972,10 @@ Old routes ('test4') = <IPv4RouteList[10]> = {
  7. Net 17.202.20.1/32 Ifp en1 Ifa 17.202.42.24 [SCOPED]
  8. Net 17.202.40.0/22 Ifp en0 Ifa 17.202.40.191
  9. Net 17.202.40.0/22 Ifp en1 Ifa 17.202.42.24 [SCOPED]
+10. Net 224.0.0.0/4 Ifp en0 Ifa 17.202.40.191
+11. Net 224.0.0.0/4 Ifp en1 Ifa 17.202.42.24 [SCOPED]
+12. Net 255.255.255.255/32 Ifp en0 Ifa 17.202.40.191
+13. Net 255.255.255.255/32 Ifp en1 Ifa 17.202.42.24 [SCOPED]
 }
 Add new[6]: Net 17.202.20.1/32 Ifp en0 Ifa 17.202.40.191
 Add new[0]: Net 0.0.0.0/0 Gate 17.202.20.1 Ifp en0 Ifa 17.202.40.191
@@ -7065,7 +9987,11 @@ Add new[4]: Net 10.0.0.1/32 Ifp en1 Ifa 10.0.0.20
 Add new[5]: Net 10.0.0.1/32 Ifp en0 Ifa 10.0.0.11 [SCOPED]
 Add new[8]: Net 17.202.40.0/22 Ifp en0 Ifa 17.202.40.191
 Add new[9]: Net 17.202.40.0/22 Ifp en1 Ifa 17.202.42.24 [SCOPED]
-New Routes ('test9') = <IPv4RouteList[9]> = {
+Add new[10]: Net 224.0.0.0/4 Ifp en0 Ifa 17.202.40.191
+Add new[11]: Net 224.0.0.0/4 Ifp en1 Ifa 17.202.42.24 [SCOPED]
+Add new[12]: Net 255.255.255.255/32 Ifp en0 Ifa 17.202.40.191
+Add new[13]: Net 255.255.255.255/32 Ifp en1 Ifa 17.202.42.24 [SCOPED]
+New Routes ('test9') = <IPv4RouteList[15]> = {
  0. Net 0.0.0.0/0 Gate 10.0.0.1 Ifp en1 Ifa 10.0.0.20 [first]
  1. Net 0.0.0.0/0 Gate 10.0.0.1 Ifp en0 Ifa 10.0.0.10 [SCOPED]
  2. Net 0.0.0.0/0 Gate 192.168.2.1 Ifp fw0 Ifa 192.168.2.30 [SCOPED]
@@ -7075,6 +10001,12 @@ New Routes ('test9') = <IPv4RouteList[9]> = {
  6. Net 10.0.0.1/32 Ifp en0 Ifa 10.0.0.10 [SCOPED]
  7. Net 192.168.2.0/24 Ifp fw0 Ifa 192.168.2.30
  8. Net 192.168.2.1/32 Ifp fw0 Ifa 192.168.2.30
+ 9. Net 224.0.0.0/4 Ifp en1 Ifa 10.0.0.20 [first]
+10. Net 224.0.0.0/4 Ifp en0 Ifa 10.0.0.10 [SCOPED]
+11. Net 224.0.0.0/4 Ifp fw0 Ifa 192.168.2.30 [SCOPED]
+12. Net 255.255.255.255/32 Ifp en1 Ifa 10.0.0.20 [first]
+13. Net 255.255.255.255/32 Ifp en0 Ifa 10.0.0.10 [SCOPED]
+14. Net 255.255.255.255/32 Ifp fw0 Ifa 192.168.2.30 [SCOPED]
 }
 Remove old[0]: Net 0.0.0.0/0 Gate 17.202.20.1 Ifp en0 Ifa 17.202.40.191
 Remove old[1]: Net 0.0.0.0/0 Gate 17.202.20.1 Ifp en1 Ifa 17.202.42.24 [SCOPED]
@@ -7084,6 +10016,10 @@ Remove old[6]: Net 17.202.20.1/32 Ifp en0 Ifa 17.202.40.191
 Remove old[7]: Net 17.202.20.1/32 Ifp en1 Ifa 17.202.42.24 [SCOPED]
 Remove old[8]: Net 17.202.40.0/22 Ifp en0 Ifa 17.202.40.191
 Remove old[9]: Net 17.202.40.0/22 Ifp en1 Ifa 17.202.42.24 [SCOPED]
+Remove old[10]: Net 224.0.0.0/4 Ifp en0 Ifa 17.202.40.191
+Remove old[11]: Net 224.0.0.0/4 Ifp en1 Ifa 17.202.42.24 [SCOPED]
+Remove old[12]: Net 255.255.255.255/32 Ifp en0 Ifa 17.202.40.191
+Remove old[13]: Net 255.255.255.255/32 Ifp en1 Ifa 17.202.42.24 [SCOPED]
 Add new[0]: Net 0.0.0.0/0 Gate 10.0.0.1 Ifp en1 Ifa 10.0.0.20 [first]
 Add new[6]: Net 10.0.0.1/32 Ifp en0 Ifa 10.0.0.10 [SCOPED]
 Add new[1]: Net 0.0.0.0/0 Gate 10.0.0.1 Ifp en0 Ifa 10.0.0.10 [SCOPED]
@@ -7091,10 +10027,16 @@ Add new[8]: Net 192.168.2.1/32 Ifp fw0 Ifa 192.168.2.30
 Add new[2]: Net 0.0.0.0/0 Gate 192.168.2.1 Ifp fw0 Ifa 192.168.2.30 [SCOPED]
 Add new[4]: Net 10.0.0.0/24 Ifp en0 Ifa 10.0.0.10 [SCOPED]
 Add new[7]: Net 192.168.2.0/24 Ifp fw0 Ifa 192.168.2.30
+Add new[9]: Net 224.0.0.0/4 Ifp en1 Ifa 10.0.0.20 [first]
+Add new[10]: Net 224.0.0.0/4 Ifp en0 Ifa 10.0.0.10 [SCOPED]
+Add new[11]: Net 224.0.0.0/4 Ifp fw0 Ifa 192.168.2.30 [SCOPED]
+Add new[12]: Net 255.255.255.255/32 Ifp en1 Ifa 10.0.0.20 [first]
+Add new[13]: Net 255.255.255.255/32 Ifp en0 Ifa 10.0.0.10 [SCOPED]
+Add new[14]: Net 255.255.255.255/32 Ifp fw0 Ifa 192.168.2.30 [SCOPED]
 =================> Apply 'test4', 'test9' End <=================
 
 =================> Apply 'test9', 'test4' Begin <=================
-Old routes ('test9') = <IPv4RouteList[9]> = {
+Old routes ('test9') = <IPv4RouteList[15]> = {
  0. Net 0.0.0.0/0 Gate 10.0.0.1 Ifp en1 Ifa 10.0.0.20 [first]
  1. Net 0.0.0.0/0 Gate 10.0.0.1 Ifp en0 Ifa 10.0.0.10 [SCOPED]
  2. Net 0.0.0.0/0 Gate 192.168.2.1 Ifp fw0 Ifa 192.168.2.30 [SCOPED]
@@ -7104,6 +10046,12 @@ Old routes ('test9') = <IPv4RouteList[9]> = {
  6. Net 10.0.0.1/32 Ifp en0 Ifa 10.0.0.10 [SCOPED]
  7. Net 192.168.2.0/24 Ifp fw0 Ifa 192.168.2.30
  8. Net 192.168.2.1/32 Ifp fw0 Ifa 192.168.2.30
+ 9. Net 224.0.0.0/4 Ifp en1 Ifa 10.0.0.20 [first]
+10. Net 224.0.0.0/4 Ifp en0 Ifa 10.0.0.10 [SCOPED]
+11. Net 224.0.0.0/4 Ifp fw0 Ifa 192.168.2.30 [SCOPED]
+12. Net 255.255.255.255/32 Ifp en1 Ifa 10.0.0.20 [first]
+13. Net 255.255.255.255/32 Ifp en0 Ifa 10.0.0.10 [SCOPED]
+14. Net 255.255.255.255/32 Ifp fw0 Ifa 192.168.2.30 [SCOPED]
 }
 Add new[5]: Net 10.0.0.1/32 Ifp en1 Ifa 10.0.0.20 [first]
 Add new[0]: Net 0.0.0.0/0 Gate 10.0.0.1 Ifp en1 Ifa 10.0.0.20 [first]
@@ -7114,7 +10062,13 @@ Add new[2]: Net 0.0.0.0/0 Gate 192.168.2.1 Ifp fw0 Ifa 192.168.2.30 [SCOPED]
 Add new[3]: Net 10.0.0.0/24 Ifp en1 Ifa 10.0.0.20 [first]
 Add new[4]: Net 10.0.0.0/24 Ifp en0 Ifa 10.0.0.10 [SCOPED]
 Add new[7]: Net 192.168.2.0/24 Ifp fw0 Ifa 192.168.2.30
-New Routes ('test4') = <IPv4RouteList[10]> = {
+Add new[9]: Net 224.0.0.0/4 Ifp en1 Ifa 10.0.0.20 [first]
+Add new[10]: Net 224.0.0.0/4 Ifp en0 Ifa 10.0.0.10 [SCOPED]
+Add new[11]: Net 224.0.0.0/4 Ifp fw0 Ifa 192.168.2.30 [SCOPED]
+Add new[12]: Net 255.255.255.255/32 Ifp en1 Ifa 10.0.0.20 [first]
+Add new[13]: Net 255.255.255.255/32 Ifp en0 Ifa 10.0.0.10 [SCOPED]
+Add new[14]: Net 255.255.255.255/32 Ifp fw0 Ifa 192.168.2.30 [SCOPED]
+New Routes ('test4') = <IPv4RouteList[14]> = {
  0. Net 0.0.0.0/0 Gate 17.202.20.1 Ifp en0 Ifa 17.202.40.191
  1. Net 0.0.0.0/0 Gate 17.202.20.1 Ifp en1 Ifa 17.202.42.24 [SCOPED]
  2. Net 10.0.0.0/24 Ifp en1 Ifa 10.0.0.20
@@ -7125,6 +10079,10 @@ New Routes ('test4') = <IPv4RouteList[10]> = {
  7. Net 17.202.20.1/32 Ifp en1 Ifa 17.202.42.24 [SCOPED]
  8. Net 17.202.40.0/22 Ifp en0 Ifa 17.202.40.191
  9. Net 17.202.40.0/22 Ifp en1 Ifa 17.202.42.24 [SCOPED]
+10. Net 224.0.0.0/4 Ifp en0 Ifa 17.202.40.191
+11. Net 224.0.0.0/4 Ifp en1 Ifa 17.202.42.24 [SCOPED]
+12. Net 255.255.255.255/32 Ifp en0 Ifa 17.202.40.191
+13. Net 255.255.255.255/32 Ifp en1 Ifa 17.202.42.24 [SCOPED]
 }
 Remove old[0]: Net 0.0.0.0/0 Gate 10.0.0.1 Ifp en1 Ifa 10.0.0.20 [first]
 Remove old[1]: Net 0.0.0.0/0 Gate 10.0.0.1 Ifp en0 Ifa 10.0.0.10 [SCOPED]
@@ -7133,6 +10091,12 @@ Remove old[4]: Net 10.0.0.0/24 Ifp en0 Ifa 10.0.0.10 [SCOPED]
 Remove old[6]: Net 10.0.0.1/32 Ifp en0 Ifa 10.0.0.10 [SCOPED]
 Remove old[7]: Net 192.168.2.0/24 Ifp fw0 Ifa 192.168.2.30
 Remove old[8]: Net 192.168.2.1/32 Ifp fw0 Ifa 192.168.2.30
+Remove old[9]: Net 224.0.0.0/4 Ifp en1 Ifa 10.0.0.20 [first]
+Remove old[10]: Net 224.0.0.0/4 Ifp en0 Ifa 10.0.0.10 [SCOPED]
+Remove old[11]: Net 224.0.0.0/4 Ifp fw0 Ifa 192.168.2.30 [SCOPED]
+Remove old[12]: Net 255.255.255.255/32 Ifp en1 Ifa 10.0.0.20 [first]
+Remove old[13]: Net 255.255.255.255/32 Ifp en0 Ifa 10.0.0.10 [SCOPED]
+Remove old[14]: Net 255.255.255.255/32 Ifp fw0 Ifa 192.168.2.30 [SCOPED]
 Add new[6]: Net 17.202.20.1/32 Ifp en0 Ifa 17.202.40.191
 Add new[0]: Net 0.0.0.0/0 Gate 17.202.20.1 Ifp en0 Ifa 17.202.40.191
 Add new[7]: Net 17.202.20.1/32 Ifp en1 Ifa 17.202.42.24 [SCOPED]
@@ -7141,10 +10105,14 @@ Add new[3]: Net 10.0.0.0/24 Ifp en0 Ifa 10.0.0.11 [SCOPED]
 Add new[5]: Net 10.0.0.1/32 Ifp en0 Ifa 10.0.0.11 [SCOPED]
 Add new[8]: Net 17.202.40.0/22 Ifp en0 Ifa 17.202.40.191
 Add new[9]: Net 17.202.40.0/22 Ifp en1 Ifa 17.202.42.24 [SCOPED]
+Add new[10]: Net 224.0.0.0/4 Ifp en0 Ifa 17.202.40.191
+Add new[11]: Net 224.0.0.0/4 Ifp en1 Ifa 17.202.42.24 [SCOPED]
+Add new[12]: Net 255.255.255.255/32 Ifp en0 Ifa 17.202.40.191
+Add new[13]: Net 255.255.255.255/32 Ifp en1 Ifa 17.202.42.24 [SCOPED]
 =================> Apply 'test9', 'test4' End <=================
 
 =================> Apply 'test4', 'test10' Begin <=================
-Old routes ('test4') = <IPv4RouteList[10]> = {
+Old routes ('test4') = <IPv4RouteList[14]> = {
  0. Net 0.0.0.0/0 Gate 17.202.20.1 Ifp en0 Ifa 17.202.40.191
  1. Net 0.0.0.0/0 Gate 17.202.20.1 Ifp en1 Ifa 17.202.42.24 [SCOPED]
  2. Net 10.0.0.0/24 Ifp en1 Ifa 10.0.0.20
@@ -7155,6 +10123,10 @@ Old routes ('test4') = <IPv4RouteList[10]> = {
  7. Net 17.202.20.1/32 Ifp en1 Ifa 17.202.42.24 [SCOPED]
  8. Net 17.202.40.0/22 Ifp en0 Ifa 17.202.40.191
  9. Net 17.202.40.0/22 Ifp en1 Ifa 17.202.42.24 [SCOPED]
+10. Net 224.0.0.0/4 Ifp en0 Ifa 17.202.40.191
+11. Net 224.0.0.0/4 Ifp en1 Ifa 17.202.42.24 [SCOPED]
+12. Net 255.255.255.255/32 Ifp en0 Ifa 17.202.40.191
+13. Net 255.255.255.255/32 Ifp en1 Ifa 17.202.42.24 [SCOPED]
 }
 Add new[6]: Net 17.202.20.1/32 Ifp en0 Ifa 17.202.40.191
 Add new[0]: Net 0.0.0.0/0 Gate 17.202.20.1 Ifp en0 Ifa 17.202.40.191
@@ -7166,7 +10138,11 @@ Add new[4]: Net 10.0.0.1/32 Ifp en1 Ifa 10.0.0.20
 Add new[5]: Net 10.0.0.1/32 Ifp en0 Ifa 10.0.0.11 [SCOPED]
 Add new[8]: Net 17.202.40.0/22 Ifp en0 Ifa 17.202.40.191
 Add new[9]: Net 17.202.40.0/22 Ifp en1 Ifa 17.202.42.24 [SCOPED]
-New Routes ('test10') = <IPv4RouteList[9]> = {
+Add new[10]: Net 224.0.0.0/4 Ifp en0 Ifa 17.202.40.191
+Add new[11]: Net 224.0.0.0/4 Ifp en1 Ifa 17.202.42.24 [SCOPED]
+Add new[12]: Net 255.255.255.255/32 Ifp en0 Ifa 17.202.40.191
+Add new[13]: Net 255.255.255.255/32 Ifp en1 Ifa 17.202.42.24 [SCOPED]
+New Routes ('test10') = <IPv4RouteList[15]> = {
  0. Net 0.0.0.0/0 Gate 10.0.0.1 Ifp en1 Ifa 10.0.0.20
  1. Net 0.0.0.0/0 Gate 192.168.2.1 Ifp fw0 Ifa 192.168.2.30 [SCOPED]
  2. Net 0.0.0.0/0 Gate 10.0.0.1 Ifp en0 Ifa 10.0.0.10 [last] [SCOPED]
@@ -7176,6 +10152,12 @@ New Routes ('test10') = <IPv4RouteList[9]> = {
  6. Net 10.0.0.1/32 Ifp en0 Ifa 10.0.0.10 [last] [SCOPED]
  7. Net 192.168.2.0/24 Ifp fw0 Ifa 192.168.2.30
  8. Net 192.168.2.1/32 Ifp fw0 Ifa 192.168.2.30
+ 9. Net 224.0.0.0/4 Ifp en1 Ifa 10.0.0.20
+10. Net 224.0.0.0/4 Ifp fw0 Ifa 192.168.2.30 [SCOPED]
+11. Net 224.0.0.0/4 Ifp en0 Ifa 10.0.0.10 [last] [SCOPED]
+12. Net 255.255.255.255/32 Ifp en1 Ifa 10.0.0.20
+13. Net 255.255.255.255/32 Ifp fw0 Ifa 192.168.2.30 [SCOPED]
+14. Net 255.255.255.255/32 Ifp en0 Ifa 10.0.0.10 [last] [SCOPED]
 }
 Remove old[0]: Net 0.0.0.0/0 Gate 17.202.20.1 Ifp en0 Ifa 17.202.40.191
 Remove old[1]: Net 0.0.0.0/0 Gate 17.202.20.1 Ifp en1 Ifa 17.202.42.24 [SCOPED]
@@ -7185,6 +10167,10 @@ Remove old[6]: Net 17.202.20.1/32 Ifp en0 Ifa 17.202.40.191
 Remove old[7]: Net 17.202.20.1/32 Ifp en1 Ifa 17.202.42.24 [SCOPED]
 Remove old[8]: Net 17.202.40.0/22 Ifp en0 Ifa 17.202.40.191
 Remove old[9]: Net 17.202.40.0/22 Ifp en1 Ifa 17.202.42.24 [SCOPED]
+Remove old[10]: Net 224.0.0.0/4 Ifp en0 Ifa 17.202.40.191
+Remove old[11]: Net 224.0.0.0/4 Ifp en1 Ifa 17.202.42.24 [SCOPED]
+Remove old[12]: Net 255.255.255.255/32 Ifp en0 Ifa 17.202.40.191
+Remove old[13]: Net 255.255.255.255/32 Ifp en1 Ifa 17.202.42.24 [SCOPED]
 Add new[0]: Net 0.0.0.0/0 Gate 10.0.0.1 Ifp en1 Ifa 10.0.0.20
 Add new[8]: Net 192.168.2.1/32 Ifp fw0 Ifa 192.168.2.30
 Add new[1]: Net 0.0.0.0/0 Gate 192.168.2.1 Ifp fw0 Ifa 192.168.2.30 [SCOPED]
@@ -7192,10 +10178,16 @@ Add new[6]: Net 10.0.0.1/32 Ifp en0 Ifa 10.0.0.10 [last] [SCOPED]
 Add new[2]: Net 0.0.0.0/0 Gate 10.0.0.1 Ifp en0 Ifa 10.0.0.10 [last] [SCOPED]
 Add new[4]: Net 10.0.0.0/24 Ifp en0 Ifa 10.0.0.10 [last] [SCOPED]
 Add new[7]: Net 192.168.2.0/24 Ifp fw0 Ifa 192.168.2.30
+Add new[9]: Net 224.0.0.0/4 Ifp en1 Ifa 10.0.0.20
+Add new[10]: Net 224.0.0.0/4 Ifp fw0 Ifa 192.168.2.30 [SCOPED]
+Add new[11]: Net 224.0.0.0/4 Ifp en0 Ifa 10.0.0.10 [last] [SCOPED]
+Add new[12]: Net 255.255.255.255/32 Ifp en1 Ifa 10.0.0.20
+Add new[13]: Net 255.255.255.255/32 Ifp fw0 Ifa 192.168.2.30 [SCOPED]
+Add new[14]: Net 255.255.255.255/32 Ifp en0 Ifa 10.0.0.10 [last] [SCOPED]
 =================> Apply 'test4', 'test10' End <=================
 
 =================> Apply 'test10', 'test4' Begin <=================
-Old routes ('test10') = <IPv4RouteList[9]> = {
+Old routes ('test10') = <IPv4RouteList[15]> = {
  0. Net 0.0.0.0/0 Gate 10.0.0.1 Ifp en1 Ifa 10.0.0.20
  1. Net 0.0.0.0/0 Gate 192.168.2.1 Ifp fw0 Ifa 192.168.2.30 [SCOPED]
  2. Net 0.0.0.0/0 Gate 10.0.0.1 Ifp en0 Ifa 10.0.0.10 [last] [SCOPED]
@@ -7205,6 +10197,12 @@ Old routes ('test10') = <IPv4RouteList[9]> = {
  6. Net 10.0.0.1/32 Ifp en0 Ifa 10.0.0.10 [last] [SCOPED]
  7. Net 192.168.2.0/24 Ifp fw0 Ifa 192.168.2.30
  8. Net 192.168.2.1/32 Ifp fw0 Ifa 192.168.2.30
+ 9. Net 224.0.0.0/4 Ifp en1 Ifa 10.0.0.20
+10. Net 224.0.0.0/4 Ifp fw0 Ifa 192.168.2.30 [SCOPED]
+11. Net 224.0.0.0/4 Ifp en0 Ifa 10.0.0.10 [last] [SCOPED]
+12. Net 255.255.255.255/32 Ifp en1 Ifa 10.0.0.20
+13. Net 255.255.255.255/32 Ifp fw0 Ifa 192.168.2.30 [SCOPED]
+14. Net 255.255.255.255/32 Ifp en0 Ifa 10.0.0.10 [last] [SCOPED]
 }
 Add new[5]: Net 10.0.0.1/32 Ifp en1 Ifa 10.0.0.20
 Add new[0]: Net 0.0.0.0/0 Gate 10.0.0.1 Ifp en1 Ifa 10.0.0.20
@@ -7215,7 +10213,13 @@ Add new[2]: Net 0.0.0.0/0 Gate 10.0.0.1 Ifp en0 Ifa 10.0.0.10 [last] [SCOPED]
 Add new[3]: Net 10.0.0.0/24 Ifp en1 Ifa 10.0.0.20
 Add new[4]: Net 10.0.0.0/24 Ifp en0 Ifa 10.0.0.10 [last] [SCOPED]
 Add new[7]: Net 192.168.2.0/24 Ifp fw0 Ifa 192.168.2.30
-New Routes ('test4') = <IPv4RouteList[10]> = {
+Add new[9]: Net 224.0.0.0/4 Ifp en1 Ifa 10.0.0.20
+Add new[10]: Net 224.0.0.0/4 Ifp fw0 Ifa 192.168.2.30 [SCOPED]
+Add new[11]: Net 224.0.0.0/4 Ifp en0 Ifa 10.0.0.10 [last] [SCOPED]
+Add new[12]: Net 255.255.255.255/32 Ifp en1 Ifa 10.0.0.20
+Add new[13]: Net 255.255.255.255/32 Ifp fw0 Ifa 192.168.2.30 [SCOPED]
+Add new[14]: Net 255.255.255.255/32 Ifp en0 Ifa 10.0.0.10 [last] [SCOPED]
+New Routes ('test4') = <IPv4RouteList[14]> = {
  0. Net 0.0.0.0/0 Gate 17.202.20.1 Ifp en0 Ifa 17.202.40.191
  1. Net 0.0.0.0/0 Gate 17.202.20.1 Ifp en1 Ifa 17.202.42.24 [SCOPED]
  2. Net 10.0.0.0/24 Ifp en1 Ifa 10.0.0.20
@@ -7226,6 +10230,10 @@ New Routes ('test4') = <IPv4RouteList[10]> = {
  7. Net 17.202.20.1/32 Ifp en1 Ifa 17.202.42.24 [SCOPED]
  8. Net 17.202.40.0/22 Ifp en0 Ifa 17.202.40.191
  9. Net 17.202.40.0/22 Ifp en1 Ifa 17.202.42.24 [SCOPED]
+10. Net 224.0.0.0/4 Ifp en0 Ifa 17.202.40.191
+11. Net 224.0.0.0/4 Ifp en1 Ifa 17.202.42.24 [SCOPED]
+12. Net 255.255.255.255/32 Ifp en0 Ifa 17.202.40.191
+13. Net 255.255.255.255/32 Ifp en1 Ifa 17.202.42.24 [SCOPED]
 }
 Remove old[0]: Net 0.0.0.0/0 Gate 10.0.0.1 Ifp en1 Ifa 10.0.0.20
 Remove old[1]: Net 0.0.0.0/0 Gate 192.168.2.1 Ifp fw0 Ifa 192.168.2.30 [SCOPED]
@@ -7234,6 +10242,12 @@ Remove old[4]: Net 10.0.0.0/24 Ifp en0 Ifa 10.0.0.10 [last] [SCOPED]
 Remove old[6]: Net 10.0.0.1/32 Ifp en0 Ifa 10.0.0.10 [last] [SCOPED]
 Remove old[7]: Net 192.168.2.0/24 Ifp fw0 Ifa 192.168.2.30
 Remove old[8]: Net 192.168.2.1/32 Ifp fw0 Ifa 192.168.2.30
+Remove old[9]: Net 224.0.0.0/4 Ifp en1 Ifa 10.0.0.20
+Remove old[10]: Net 224.0.0.0/4 Ifp fw0 Ifa 192.168.2.30 [SCOPED]
+Remove old[11]: Net 224.0.0.0/4 Ifp en0 Ifa 10.0.0.10 [last] [SCOPED]
+Remove old[12]: Net 255.255.255.255/32 Ifp en1 Ifa 10.0.0.20
+Remove old[13]: Net 255.255.255.255/32 Ifp fw0 Ifa 192.168.2.30 [SCOPED]
+Remove old[14]: Net 255.255.255.255/32 Ifp en0 Ifa 10.0.0.10 [last] [SCOPED]
 Add new[6]: Net 17.202.20.1/32 Ifp en0 Ifa 17.202.40.191
 Add new[0]: Net 0.0.0.0/0 Gate 17.202.20.1 Ifp en0 Ifa 17.202.40.191
 Add new[7]: Net 17.202.20.1/32 Ifp en1 Ifa 17.202.42.24 [SCOPED]
@@ -7242,10 +10256,14 @@ Add new[3]: Net 10.0.0.0/24 Ifp en0 Ifa 10.0.0.11 [SCOPED]
 Add new[5]: Net 10.0.0.1/32 Ifp en0 Ifa 10.0.0.11 [SCOPED]
 Add new[8]: Net 17.202.40.0/22 Ifp en0 Ifa 17.202.40.191
 Add new[9]: Net 17.202.40.0/22 Ifp en1 Ifa 17.202.42.24 [SCOPED]
+Add new[10]: Net 224.0.0.0/4 Ifp en0 Ifa 17.202.40.191
+Add new[11]: Net 224.0.0.0/4 Ifp en1 Ifa 17.202.42.24 [SCOPED]
+Add new[12]: Net 255.255.255.255/32 Ifp en0 Ifa 17.202.40.191
+Add new[13]: Net 255.255.255.255/32 Ifp en1 Ifa 17.202.42.24 [SCOPED]
 =================> Apply 'test10', 'test4' End <=================
 
 =================> Apply 'test4', 'test11' Begin <=================
-Old routes ('test4') = <IPv4RouteList[10]> = {
+Old routes ('test4') = <IPv4RouteList[14]> = {
  0. Net 0.0.0.0/0 Gate 17.202.20.1 Ifp en0 Ifa 17.202.40.191
  1. Net 0.0.0.0/0 Gate 17.202.20.1 Ifp en1 Ifa 17.202.42.24 [SCOPED]
  2. Net 10.0.0.0/24 Ifp en1 Ifa 10.0.0.20
@@ -7256,6 +10274,10 @@ Old routes ('test4') = <IPv4RouteList[10]> = {
  7. Net 17.202.20.1/32 Ifp en1 Ifa 17.202.42.24 [SCOPED]
  8. Net 17.202.40.0/22 Ifp en0 Ifa 17.202.40.191
  9. Net 17.202.40.0/22 Ifp en1 Ifa 17.202.42.24 [SCOPED]
+10. Net 224.0.0.0/4 Ifp en0 Ifa 17.202.40.191
+11. Net 224.0.0.0/4 Ifp en1 Ifa 17.202.42.24 [SCOPED]
+12. Net 255.255.255.255/32 Ifp en0 Ifa 17.202.40.191
+13. Net 255.255.255.255/32 Ifp en1 Ifa 17.202.42.24 [SCOPED]
 }
 Add new[6]: Net 17.202.20.1/32 Ifp en0 Ifa 17.202.40.191
 Add new[0]: Net 0.0.0.0/0 Gate 17.202.20.1 Ifp en0 Ifa 17.202.40.191
@@ -7267,7 +10289,11 @@ Add new[4]: Net 10.0.0.1/32 Ifp en1 Ifa 10.0.0.20
 Add new[5]: Net 10.0.0.1/32 Ifp en0 Ifa 10.0.0.11 [SCOPED]
 Add new[8]: Net 17.202.40.0/22 Ifp en0 Ifa 17.202.40.191
 Add new[9]: Net 17.202.40.0/22 Ifp en1 Ifa 17.202.42.24 [SCOPED]
-New Routes ('test11') = <IPv4RouteList[9]> = {
+Add new[10]: Net 224.0.0.0/4 Ifp en0 Ifa 17.202.40.191
+Add new[11]: Net 224.0.0.0/4 Ifp en1 Ifa 17.202.42.24 [SCOPED]
+Add new[12]: Net 255.255.255.255/32 Ifp en0 Ifa 17.202.40.191
+Add new[13]: Net 255.255.255.255/32 Ifp en1 Ifa 17.202.42.24 [SCOPED]
+New Routes ('test11') = <IPv4RouteList[15]> = {
  0. Net 0.0.0.0/0 Gate 10.0.0.1 Ifp en1 Ifa 10.0.0.20
  1. Net 0.0.0.0/0 Gate 192.168.2.1 Ifp fw0 Ifa 192.168.2.30 [SCOPED]
  2. Net 0.0.0.0/0 Gate 10.0.0.1 Ifp en0 Ifa 10.0.0.10 [never] [SCOPED]
@@ -7277,6 +10303,12 @@ New Routes ('test11') = <IPv4RouteList[9]> = {
  6. Net 10.0.0.1/32 Ifp en0 Ifa 10.0.0.10 [last] [SCOPED]
  7. Net 192.168.2.0/24 Ifp fw0 Ifa 192.168.2.30
  8. Net 192.168.2.1/32 Ifp fw0 Ifa 192.168.2.30
+ 9. Net 224.0.0.0/4 Ifp en1 Ifa 10.0.0.20
+10. Net 224.0.0.0/4 Ifp fw0 Ifa 192.168.2.30 [SCOPED]
+11. Net 224.0.0.0/4 Ifp en0 Ifa 10.0.0.10 [last] [SCOPED]
+12. Net 255.255.255.255/32 Ifp en1 Ifa 10.0.0.20
+13. Net 255.255.255.255/32 Ifp fw0 Ifa 192.168.2.30 [SCOPED]
+14. Net 255.255.255.255/32 Ifp en0 Ifa 10.0.0.10 [last] [SCOPED]
 }
 Remove old[0]: Net 0.0.0.0/0 Gate 17.202.20.1 Ifp en0 Ifa 17.202.40.191
 Remove old[1]: Net 0.0.0.0/0 Gate 17.202.20.1 Ifp en1 Ifa 17.202.42.24 [SCOPED]
@@ -7286,6 +10318,10 @@ Remove old[6]: Net 17.202.20.1/32 Ifp en0 Ifa 17.202.40.191
 Remove old[7]: Net 17.202.20.1/32 Ifp en1 Ifa 17.202.42.24 [SCOPED]
 Remove old[8]: Net 17.202.40.0/22 Ifp en0 Ifa 17.202.40.191
 Remove old[9]: Net 17.202.40.0/22 Ifp en1 Ifa 17.202.42.24 [SCOPED]
+Remove old[10]: Net 224.0.0.0/4 Ifp en0 Ifa 17.202.40.191
+Remove old[11]: Net 224.0.0.0/4 Ifp en1 Ifa 17.202.42.24 [SCOPED]
+Remove old[12]: Net 255.255.255.255/32 Ifp en0 Ifa 17.202.40.191
+Remove old[13]: Net 255.255.255.255/32 Ifp en1 Ifa 17.202.42.24 [SCOPED]
 Add new[0]: Net 0.0.0.0/0 Gate 10.0.0.1 Ifp en1 Ifa 10.0.0.20
 Add new[8]: Net 192.168.2.1/32 Ifp fw0 Ifa 192.168.2.30
 Add new[1]: Net 0.0.0.0/0 Gate 192.168.2.1 Ifp fw0 Ifa 192.168.2.30 [SCOPED]
@@ -7293,10 +10329,16 @@ Add new[6]: Net 10.0.0.1/32 Ifp en0 Ifa 10.0.0.10 [last] [SCOPED]
 Add new[2]: Net 0.0.0.0/0 Gate 10.0.0.1 Ifp en0 Ifa 10.0.0.10 [never] [SCOPED]
 Add new[4]: Net 10.0.0.0/24 Ifp en0 Ifa 10.0.0.10 [last] [SCOPED]
 Add new[7]: Net 192.168.2.0/24 Ifp fw0 Ifa 192.168.2.30
+Add new[9]: Net 224.0.0.0/4 Ifp en1 Ifa 10.0.0.20
+Add new[10]: Net 224.0.0.0/4 Ifp fw0 Ifa 192.168.2.30 [SCOPED]
+Add new[11]: Net 224.0.0.0/4 Ifp en0 Ifa 10.0.0.10 [last] [SCOPED]
+Add new[12]: Net 255.255.255.255/32 Ifp en1 Ifa 10.0.0.20
+Add new[13]: Net 255.255.255.255/32 Ifp fw0 Ifa 192.168.2.30 [SCOPED]
+Add new[14]: Net 255.255.255.255/32 Ifp en0 Ifa 10.0.0.10 [last] [SCOPED]
 =================> Apply 'test4', 'test11' End <=================
 
 =================> Apply 'test11', 'test4' Begin <=================
-Old routes ('test11') = <IPv4RouteList[9]> = {
+Old routes ('test11') = <IPv4RouteList[15]> = {
  0. Net 0.0.0.0/0 Gate 10.0.0.1 Ifp en1 Ifa 10.0.0.20
  1. Net 0.0.0.0/0 Gate 192.168.2.1 Ifp fw0 Ifa 192.168.2.30 [SCOPED]
  2. Net 0.0.0.0/0 Gate 10.0.0.1 Ifp en0 Ifa 10.0.0.10 [never] [SCOPED]
@@ -7306,6 +10348,12 @@ Old routes ('test11') = <IPv4RouteList[9]> = {
  6. Net 10.0.0.1/32 Ifp en0 Ifa 10.0.0.10 [last] [SCOPED]
  7. Net 192.168.2.0/24 Ifp fw0 Ifa 192.168.2.30
  8. Net 192.168.2.1/32 Ifp fw0 Ifa 192.168.2.30
+ 9. Net 224.0.0.0/4 Ifp en1 Ifa 10.0.0.20
+10. Net 224.0.0.0/4 Ifp fw0 Ifa 192.168.2.30 [SCOPED]
+11. Net 224.0.0.0/4 Ifp en0 Ifa 10.0.0.10 [last] [SCOPED]
+12. Net 255.255.255.255/32 Ifp en1 Ifa 10.0.0.20
+13. Net 255.255.255.255/32 Ifp fw0 Ifa 192.168.2.30 [SCOPED]
+14. Net 255.255.255.255/32 Ifp en0 Ifa 10.0.0.10 [last] [SCOPED]
 }
 Add new[5]: Net 10.0.0.1/32 Ifp en1 Ifa 10.0.0.20
 Add new[0]: Net 0.0.0.0/0 Gate 10.0.0.1 Ifp en1 Ifa 10.0.0.20
@@ -7316,7 +10364,13 @@ Add new[2]: Net 0.0.0.0/0 Gate 10.0.0.1 Ifp en0 Ifa 10.0.0.10 [never] [SCOPED]
 Add new[3]: Net 10.0.0.0/24 Ifp en1 Ifa 10.0.0.20
 Add new[4]: Net 10.0.0.0/24 Ifp en0 Ifa 10.0.0.10 [last] [SCOPED]
 Add new[7]: Net 192.168.2.0/24 Ifp fw0 Ifa 192.168.2.30
-New Routes ('test4') = <IPv4RouteList[10]> = {
+Add new[9]: Net 224.0.0.0/4 Ifp en1 Ifa 10.0.0.20
+Add new[10]: Net 224.0.0.0/4 Ifp fw0 Ifa 192.168.2.30 [SCOPED]
+Add new[11]: Net 224.0.0.0/4 Ifp en0 Ifa 10.0.0.10 [last] [SCOPED]
+Add new[12]: Net 255.255.255.255/32 Ifp en1 Ifa 10.0.0.20
+Add new[13]: Net 255.255.255.255/32 Ifp fw0 Ifa 192.168.2.30 [SCOPED]
+Add new[14]: Net 255.255.255.255/32 Ifp en0 Ifa 10.0.0.10 [last] [SCOPED]
+New Routes ('test4') = <IPv4RouteList[14]> = {
  0. Net 0.0.0.0/0 Gate 17.202.20.1 Ifp en0 Ifa 17.202.40.191
  1. Net 0.0.0.0/0 Gate 17.202.20.1 Ifp en1 Ifa 17.202.42.24 [SCOPED]
  2. Net 10.0.0.0/24 Ifp en1 Ifa 10.0.0.20
@@ -7327,6 +10381,10 @@ New Routes ('test4') = <IPv4RouteList[10]> = {
  7. Net 17.202.20.1/32 Ifp en1 Ifa 17.202.42.24 [SCOPED]
  8. Net 17.202.40.0/22 Ifp en0 Ifa 17.202.40.191
  9. Net 17.202.40.0/22 Ifp en1 Ifa 17.202.42.24 [SCOPED]
+10. Net 224.0.0.0/4 Ifp en0 Ifa 17.202.40.191
+11. Net 224.0.0.0/4 Ifp en1 Ifa 17.202.42.24 [SCOPED]
+12. Net 255.255.255.255/32 Ifp en0 Ifa 17.202.40.191
+13. Net 255.255.255.255/32 Ifp en1 Ifa 17.202.42.24 [SCOPED]
 }
 Remove old[0]: Net 0.0.0.0/0 Gate 10.0.0.1 Ifp en1 Ifa 10.0.0.20
 Remove old[1]: Net 0.0.0.0/0 Gate 192.168.2.1 Ifp fw0 Ifa 192.168.2.30 [SCOPED]
@@ -7335,6 +10393,12 @@ Remove old[4]: Net 10.0.0.0/24 Ifp en0 Ifa 10.0.0.10 [last] [SCOPED]
 Remove old[6]: Net 10.0.0.1/32 Ifp en0 Ifa 10.0.0.10 [last] [SCOPED]
 Remove old[7]: Net 192.168.2.0/24 Ifp fw0 Ifa 192.168.2.30
 Remove old[8]: Net 192.168.2.1/32 Ifp fw0 Ifa 192.168.2.30
+Remove old[9]: Net 224.0.0.0/4 Ifp en1 Ifa 10.0.0.20
+Remove old[10]: Net 224.0.0.0/4 Ifp fw0 Ifa 192.168.2.30 [SCOPED]
+Remove old[11]: Net 224.0.0.0/4 Ifp en0 Ifa 10.0.0.10 [last] [SCOPED]
+Remove old[12]: Net 255.255.255.255/32 Ifp en1 Ifa 10.0.0.20
+Remove old[13]: Net 255.255.255.255/32 Ifp fw0 Ifa 192.168.2.30 [SCOPED]
+Remove old[14]: Net 255.255.255.255/32 Ifp en0 Ifa 10.0.0.10 [last] [SCOPED]
 Add new[6]: Net 17.202.20.1/32 Ifp en0 Ifa 17.202.40.191
 Add new[0]: Net 0.0.0.0/0 Gate 17.202.20.1 Ifp en0 Ifa 17.202.40.191
 Add new[7]: Net 17.202.20.1/32 Ifp en1 Ifa 17.202.42.24 [SCOPED]
@@ -7343,10 +10407,14 @@ Add new[3]: Net 10.0.0.0/24 Ifp en0 Ifa 10.0.0.11 [SCOPED]
 Add new[5]: Net 10.0.0.1/32 Ifp en0 Ifa 10.0.0.11 [SCOPED]
 Add new[8]: Net 17.202.40.0/22 Ifp en0 Ifa 17.202.40.191
 Add new[9]: Net 17.202.40.0/22 Ifp en1 Ifa 17.202.42.24 [SCOPED]
+Add new[10]: Net 224.0.0.0/4 Ifp en0 Ifa 17.202.40.191
+Add new[11]: Net 224.0.0.0/4 Ifp en1 Ifa 17.202.42.24 [SCOPED]
+Add new[12]: Net 255.255.255.255/32 Ifp en0 Ifa 17.202.40.191
+Add new[13]: Net 255.255.255.255/32 Ifp en1 Ifa 17.202.42.24 [SCOPED]
 =================> Apply 'test11', 'test4' End <=================
 
 =================> Apply 'test4', 'test12' Begin <=================
-Old routes ('test4') = <IPv4RouteList[10]> = {
+Old routes ('test4') = <IPv4RouteList[14]> = {
  0. Net 0.0.0.0/0 Gate 17.202.20.1 Ifp en0 Ifa 17.202.40.191
  1. Net 0.0.0.0/0 Gate 17.202.20.1 Ifp en1 Ifa 17.202.42.24 [SCOPED]
  2. Net 10.0.0.0/24 Ifp en1 Ifa 10.0.0.20
@@ -7357,6 +10425,10 @@ Old routes ('test4') = <IPv4RouteList[10]> = {
  7. Net 17.202.20.1/32 Ifp en1 Ifa 17.202.42.24 [SCOPED]
  8. Net 17.202.40.0/22 Ifp en0 Ifa 17.202.40.191
  9. Net 17.202.40.0/22 Ifp en1 Ifa 17.202.42.24 [SCOPED]
+10. Net 224.0.0.0/4 Ifp en0 Ifa 17.202.40.191
+11. Net 224.0.0.0/4 Ifp en1 Ifa 17.202.42.24 [SCOPED]
+12. Net 255.255.255.255/32 Ifp en0 Ifa 17.202.40.191
+13. Net 255.255.255.255/32 Ifp en1 Ifa 17.202.42.24 [SCOPED]
 }
 Add new[6]: Net 17.202.20.1/32 Ifp en0 Ifa 17.202.40.191
 Add new[0]: Net 0.0.0.0/0 Gate 17.202.20.1 Ifp en0 Ifa 17.202.40.191
@@ -7368,13 +10440,21 @@ Add new[4]: Net 10.0.0.1/32 Ifp en1 Ifa 10.0.0.20
 Add new[5]: Net 10.0.0.1/32 Ifp en0 Ifa 10.0.0.11 [SCOPED]
 Add new[8]: Net 17.202.40.0/22 Ifp en0 Ifa 17.202.40.191
 Add new[9]: Net 17.202.40.0/22 Ifp en1 Ifa 17.202.42.24 [SCOPED]
-New Routes ('test12') = <IPv4RouteList[6]> = {
+Add new[10]: Net 224.0.0.0/4 Ifp en0 Ifa 17.202.40.191
+Add new[11]: Net 224.0.0.0/4 Ifp en1 Ifa 17.202.42.24 [SCOPED]
+Add new[12]: Net 255.255.255.255/32 Ifp en0 Ifa 17.202.40.191
+Add new[13]: Net 255.255.255.255/32 Ifp en1 Ifa 17.202.42.24 [SCOPED]
+New Routes ('test12') = <IPv4RouteList[10]> = {
  0. Net 0.0.0.0/0 Gate 10.0.0.1 Ifp en0 Ifa 10.0.0.10
  1. Net 0.0.0.0/0 Gate 10.0.0.1 Ifp en1 Ifa 10.0.0.20 [SCOPED]
  2. Net 10.0.0.0/24 Ifp en0 Ifa 10.0.0.10
  3. Net 10.0.0.0/24 Ifp en1 Ifa 10.0.0.20 [SCOPED]
  4. Net 10.0.0.1/32 Ifp en0 Ifa 10.0.0.10
  5. Net 10.0.0.1/32 Ifp en1 Ifa 10.0.0.20 [SCOPED]
+ 6. Net 224.0.0.0/4 Ifp en0 Ifa 10.0.0.10
+ 7. Net 224.0.0.0/4 Ifp en1 Ifa 10.0.0.20 [SCOPED]
+ 8. Net 255.255.255.255/32 Ifp en0 Ifa 10.0.0.10
+ 9. Net 255.255.255.255/32 Ifp en1 Ifa 10.0.0.20 [SCOPED]
 }
 Remove old[0]: Net 0.0.0.0/0 Gate 17.202.20.1 Ifp en0 Ifa 17.202.40.191
 Remove old[1]: Net 0.0.0.0/0 Gate 17.202.20.1 Ifp en1 Ifa 17.202.42.24 [SCOPED]
@@ -7386,22 +10466,34 @@ Remove old[6]: Net 17.202.20.1/32 Ifp en0 Ifa 17.202.40.191
 Remove old[7]: Net 17.202.20.1/32 Ifp en1 Ifa 17.202.42.24 [SCOPED]
 Remove old[8]: Net 17.202.40.0/22 Ifp en0 Ifa 17.202.40.191
 Remove old[9]: Net 17.202.40.0/22 Ifp en1 Ifa 17.202.42.24 [SCOPED]
+Remove old[10]: Net 224.0.0.0/4 Ifp en0 Ifa 17.202.40.191
+Remove old[11]: Net 224.0.0.0/4 Ifp en1 Ifa 17.202.42.24 [SCOPED]
+Remove old[12]: Net 255.255.255.255/32 Ifp en0 Ifa 17.202.40.191
+Remove old[13]: Net 255.255.255.255/32 Ifp en1 Ifa 17.202.42.24 [SCOPED]
 Add new[4]: Net 10.0.0.1/32 Ifp en0 Ifa 10.0.0.10
 Add new[0]: Net 0.0.0.0/0 Gate 10.0.0.1 Ifp en0 Ifa 10.0.0.10
 Add new[5]: Net 10.0.0.1/32 Ifp en1 Ifa 10.0.0.20 [SCOPED]
 Add new[1]: Net 0.0.0.0/0 Gate 10.0.0.1 Ifp en1 Ifa 10.0.0.20 [SCOPED]
 Add new[2]: Net 10.0.0.0/24 Ifp en0 Ifa 10.0.0.10
 Add new[3]: Net 10.0.0.0/24 Ifp en1 Ifa 10.0.0.20 [SCOPED]
+Add new[6]: Net 224.0.0.0/4 Ifp en0 Ifa 10.0.0.10
+Add new[7]: Net 224.0.0.0/4 Ifp en1 Ifa 10.0.0.20 [SCOPED]
+Add new[8]: Net 255.255.255.255/32 Ifp en0 Ifa 10.0.0.10
+Add new[9]: Net 255.255.255.255/32 Ifp en1 Ifa 10.0.0.20 [SCOPED]
 =================> Apply 'test4', 'test12' End <=================
 
 =================> Apply 'test12', 'test4' Begin <=================
-Old routes ('test12') = <IPv4RouteList[6]> = {
+Old routes ('test12') = <IPv4RouteList[10]> = {
  0. Net 0.0.0.0/0 Gate 10.0.0.1 Ifp en0 Ifa 10.0.0.10
  1. Net 0.0.0.0/0 Gate 10.0.0.1 Ifp en1 Ifa 10.0.0.20 [SCOPED]
  2. Net 10.0.0.0/24 Ifp en0 Ifa 10.0.0.10
  3. Net 10.0.0.0/24 Ifp en1 Ifa 10.0.0.20 [SCOPED]
  4. Net 10.0.0.1/32 Ifp en0 Ifa 10.0.0.10
  5. Net 10.0.0.1/32 Ifp en1 Ifa 10.0.0.20 [SCOPED]
+ 6. Net 224.0.0.0/4 Ifp en0 Ifa 10.0.0.10
+ 7. Net 224.0.0.0/4 Ifp en1 Ifa 10.0.0.20 [SCOPED]
+ 8. Net 255.255.255.255/32 Ifp en0 Ifa 10.0.0.10
+ 9. Net 255.255.255.255/32 Ifp en1 Ifa 10.0.0.20 [SCOPED]
 }
 Add new[4]: Net 10.0.0.1/32 Ifp en0 Ifa 10.0.0.10
 Add new[0]: Net 0.0.0.0/0 Gate 10.0.0.1 Ifp en0 Ifa 10.0.0.10
@@ -7409,7 +10501,11 @@ Add new[5]: Net 10.0.0.1/32 Ifp en1 Ifa 10.0.0.20 [SCOPED]
 Add new[1]: Net 0.0.0.0/0 Gate 10.0.0.1 Ifp en1 Ifa 10.0.0.20 [SCOPED]
 Add new[2]: Net 10.0.0.0/24 Ifp en0 Ifa 10.0.0.10
 Add new[3]: Net 10.0.0.0/24 Ifp en1 Ifa 10.0.0.20 [SCOPED]
-New Routes ('test4') = <IPv4RouteList[10]> = {
+Add new[6]: Net 224.0.0.0/4 Ifp en0 Ifa 10.0.0.10
+Add new[7]: Net 224.0.0.0/4 Ifp en1 Ifa 10.0.0.20 [SCOPED]
+Add new[8]: Net 255.255.255.255/32 Ifp en0 Ifa 10.0.0.10
+Add new[9]: Net 255.255.255.255/32 Ifp en1 Ifa 10.0.0.20 [SCOPED]
+New Routes ('test4') = <IPv4RouteList[14]> = {
  0. Net 0.0.0.0/0 Gate 17.202.20.1 Ifp en0 Ifa 17.202.40.191
  1. Net 0.0.0.0/0 Gate 17.202.20.1 Ifp en1 Ifa 17.202.42.24 [SCOPED]
  2. Net 10.0.0.0/24 Ifp en1 Ifa 10.0.0.20
@@ -7420,6 +10516,10 @@ New Routes ('test4') = <IPv4RouteList[10]> = {
  7. Net 17.202.20.1/32 Ifp en1 Ifa 17.202.42.24 [SCOPED]
  8. Net 17.202.40.0/22 Ifp en0 Ifa 17.202.40.191
  9. Net 17.202.40.0/22 Ifp en1 Ifa 17.202.42.24 [SCOPED]
+10. Net 224.0.0.0/4 Ifp en0 Ifa 17.202.40.191
+11. Net 224.0.0.0/4 Ifp en1 Ifa 17.202.42.24 [SCOPED]
+12. Net 255.255.255.255/32 Ifp en0 Ifa 17.202.40.191
+13. Net 255.255.255.255/32 Ifp en1 Ifa 17.202.42.24 [SCOPED]
 }
 Remove old[0]: Net 0.0.0.0/0 Gate 10.0.0.1 Ifp en0 Ifa 10.0.0.10
 Remove old[1]: Net 0.0.0.0/0 Gate 10.0.0.1 Ifp en1 Ifa 10.0.0.20 [SCOPED]
@@ -7427,6 +10527,10 @@ Remove old[2]: Net 10.0.0.0/24 Ifp en0 Ifa 10.0.0.10
 Remove old[3]: Net 10.0.0.0/24 Ifp en1 Ifa 10.0.0.20 [SCOPED]
 Remove old[4]: Net 10.0.0.1/32 Ifp en0 Ifa 10.0.0.10
 Remove old[5]: Net 10.0.0.1/32 Ifp en1 Ifa 10.0.0.20 [SCOPED]
+Remove old[6]: Net 224.0.0.0/4 Ifp en0 Ifa 10.0.0.10
+Remove old[7]: Net 224.0.0.0/4 Ifp en1 Ifa 10.0.0.20 [SCOPED]
+Remove old[8]: Net 255.255.255.255/32 Ifp en0 Ifa 10.0.0.10
+Remove old[9]: Net 255.255.255.255/32 Ifp en1 Ifa 10.0.0.20 [SCOPED]
 Add new[6]: Net 17.202.20.1/32 Ifp en0 Ifa 17.202.40.191
 Add new[0]: Net 0.0.0.0/0 Gate 17.202.20.1 Ifp en0 Ifa 17.202.40.191
 Add new[7]: Net 17.202.20.1/32 Ifp en1 Ifa 17.202.42.24 [SCOPED]
@@ -7437,10 +10541,14 @@ Add new[4]: Net 10.0.0.1/32 Ifp en1 Ifa 10.0.0.20
 Add new[5]: Net 10.0.0.1/32 Ifp en0 Ifa 10.0.0.11 [SCOPED]
 Add new[8]: Net 17.202.40.0/22 Ifp en0 Ifa 17.202.40.191
 Add new[9]: Net 17.202.40.0/22 Ifp en1 Ifa 17.202.42.24 [SCOPED]
+Add new[10]: Net 224.0.0.0/4 Ifp en0 Ifa 17.202.40.191
+Add new[11]: Net 224.0.0.0/4 Ifp en1 Ifa 17.202.42.24 [SCOPED]
+Add new[12]: Net 255.255.255.255/32 Ifp en0 Ifa 17.202.40.191
+Add new[13]: Net 255.255.255.255/32 Ifp en1 Ifa 17.202.42.24 [SCOPED]
 =================> Apply 'test12', 'test4' End <=================
 
 =================> Apply 'test4', 'test13' Begin <=================
-Old routes ('test4') = <IPv4RouteList[10]> = {
+Old routes ('test4') = <IPv4RouteList[14]> = {
  0. Net 0.0.0.0/0 Gate 17.202.20.1 Ifp en0 Ifa 17.202.40.191
  1. Net 0.0.0.0/0 Gate 17.202.20.1 Ifp en1 Ifa 17.202.42.24 [SCOPED]
  2. Net 10.0.0.0/24 Ifp en1 Ifa 10.0.0.20
@@ -7451,6 +10559,10 @@ Old routes ('test4') = <IPv4RouteList[10]> = {
  7. Net 17.202.20.1/32 Ifp en1 Ifa 17.202.42.24 [SCOPED]
  8. Net 17.202.40.0/22 Ifp en0 Ifa 17.202.40.191
  9. Net 17.202.40.0/22 Ifp en1 Ifa 17.202.42.24 [SCOPED]
+10. Net 224.0.0.0/4 Ifp en0 Ifa 17.202.40.191
+11. Net 224.0.0.0/4 Ifp en1 Ifa 17.202.42.24 [SCOPED]
+12. Net 255.255.255.255/32 Ifp en0 Ifa 17.202.40.191
+13. Net 255.255.255.255/32 Ifp en1 Ifa 17.202.42.24 [SCOPED]
 }
 Add new[6]: Net 17.202.20.1/32 Ifp en0 Ifa 17.202.40.191
 Add new[0]: Net 0.0.0.0/0 Gate 17.202.20.1 Ifp en0 Ifa 17.202.40.191
@@ -7462,13 +10574,21 @@ Add new[4]: Net 10.0.0.1/32 Ifp en1 Ifa 10.0.0.20
 Add new[5]: Net 10.0.0.1/32 Ifp en0 Ifa 10.0.0.11 [SCOPED]
 Add new[8]: Net 17.202.40.0/22 Ifp en0 Ifa 17.202.40.191
 Add new[9]: Net 17.202.40.0/22 Ifp en1 Ifa 17.202.42.24 [SCOPED]
-New Routes ('test13') = <IPv4RouteList[6]> = {
+Add new[10]: Net 224.0.0.0/4 Ifp en0 Ifa 17.202.40.191
+Add new[11]: Net 224.0.0.0/4 Ifp en1 Ifa 17.202.42.24 [SCOPED]
+Add new[12]: Net 255.255.255.255/32 Ifp en0 Ifa 17.202.40.191
+Add new[13]: Net 255.255.255.255/32 Ifp en1 Ifa 17.202.42.24 [SCOPED]
+New Routes ('test13') = <IPv4RouteList[10]> = {
  0. Net 0.0.0.0/0 Gate 10.0.0.1 Ifp en0 Ifa 10.0.0.10
  1. Net 0.0.0.0/0 Gate 10.0.0.1 Ifp en1 Ifa 10.0.0.20 [never] [SCOPED]
  2. Net 10.0.0.0/24 Ifp en0 Ifa 10.0.0.10
  3. Net 10.0.0.0/24 Ifp en1 Ifa 10.0.0.20 [last] [SCOPED]
  4. Net 10.0.0.1/32 Ifp en0 Ifa 10.0.0.10
  5. Net 10.0.0.1/32 Ifp en1 Ifa 10.0.0.20 [last] [SCOPED]
+ 6. Net 224.0.0.0/4 Ifp en0 Ifa 10.0.0.10
+ 7. Net 224.0.0.0/4 Ifp en1 Ifa 10.0.0.20 [last] [SCOPED]
+ 8. Net 255.255.255.255/32 Ifp en0 Ifa 10.0.0.10
+ 9. Net 255.255.255.255/32 Ifp en1 Ifa 10.0.0.20 [last] [SCOPED]
 }
 Remove old[0]: Net 0.0.0.0/0 Gate 17.202.20.1 Ifp en0 Ifa 17.202.40.191
 Remove old[1]: Net 0.0.0.0/0 Gate 17.202.20.1 Ifp en1 Ifa 17.202.42.24 [SCOPED]
@@ -7480,22 +10600,34 @@ Remove old[6]: Net 17.202.20.1/32 Ifp en0 Ifa 17.202.40.191
 Remove old[7]: Net 17.202.20.1/32 Ifp en1 Ifa 17.202.42.24 [SCOPED]
 Remove old[8]: Net 17.202.40.0/22 Ifp en0 Ifa 17.202.40.191
 Remove old[9]: Net 17.202.40.0/22 Ifp en1 Ifa 17.202.42.24 [SCOPED]
+Remove old[10]: Net 224.0.0.0/4 Ifp en0 Ifa 17.202.40.191
+Remove old[11]: Net 224.0.0.0/4 Ifp en1 Ifa 17.202.42.24 [SCOPED]
+Remove old[12]: Net 255.255.255.255/32 Ifp en0 Ifa 17.202.40.191
+Remove old[13]: Net 255.255.255.255/32 Ifp en1 Ifa 17.202.42.24 [SCOPED]
 Add new[4]: Net 10.0.0.1/32 Ifp en0 Ifa 10.0.0.10
 Add new[0]: Net 0.0.0.0/0 Gate 10.0.0.1 Ifp en0 Ifa 10.0.0.10
 Add new[5]: Net 10.0.0.1/32 Ifp en1 Ifa 10.0.0.20 [last] [SCOPED]
 Add new[1]: Net 0.0.0.0/0 Gate 10.0.0.1 Ifp en1 Ifa 10.0.0.20 [never] [SCOPED]
 Add new[2]: Net 10.0.0.0/24 Ifp en0 Ifa 10.0.0.10
 Add new[3]: Net 10.0.0.0/24 Ifp en1 Ifa 10.0.0.20 [last] [SCOPED]
+Add new[6]: Net 224.0.0.0/4 Ifp en0 Ifa 10.0.0.10
+Add new[7]: Net 224.0.0.0/4 Ifp en1 Ifa 10.0.0.20 [last] [SCOPED]
+Add new[8]: Net 255.255.255.255/32 Ifp en0 Ifa 10.0.0.10
+Add new[9]: Net 255.255.255.255/32 Ifp en1 Ifa 10.0.0.20 [last] [SCOPED]
 =================> Apply 'test4', 'test13' End <=================
 
 =================> Apply 'test13', 'test4' Begin <=================
-Old routes ('test13') = <IPv4RouteList[6]> = {
+Old routes ('test13') = <IPv4RouteList[10]> = {
  0. Net 0.0.0.0/0 Gate 10.0.0.1 Ifp en0 Ifa 10.0.0.10
  1. Net 0.0.0.0/0 Gate 10.0.0.1 Ifp en1 Ifa 10.0.0.20 [never] [SCOPED]
  2. Net 10.0.0.0/24 Ifp en0 Ifa 10.0.0.10
  3. Net 10.0.0.0/24 Ifp en1 Ifa 10.0.0.20 [last] [SCOPED]
  4. Net 10.0.0.1/32 Ifp en0 Ifa 10.0.0.10
  5. Net 10.0.0.1/32 Ifp en1 Ifa 10.0.0.20 [last] [SCOPED]
+ 6. Net 224.0.0.0/4 Ifp en0 Ifa 10.0.0.10
+ 7. Net 224.0.0.0/4 Ifp en1 Ifa 10.0.0.20 [last] [SCOPED]
+ 8. Net 255.255.255.255/32 Ifp en0 Ifa 10.0.0.10
+ 9. Net 255.255.255.255/32 Ifp en1 Ifa 10.0.0.20 [last] [SCOPED]
 }
 Add new[4]: Net 10.0.0.1/32 Ifp en0 Ifa 10.0.0.10
 Add new[0]: Net 0.0.0.0/0 Gate 10.0.0.1 Ifp en0 Ifa 10.0.0.10
@@ -7503,7 +10635,11 @@ Add new[5]: Net 10.0.0.1/32 Ifp en1 Ifa 10.0.0.20 [last] [SCOPED]
 Add new[1]: Net 0.0.0.0/0 Gate 10.0.0.1 Ifp en1 Ifa 10.0.0.20 [never] [SCOPED]
 Add new[2]: Net 10.0.0.0/24 Ifp en0 Ifa 10.0.0.10
 Add new[3]: Net 10.0.0.0/24 Ifp en1 Ifa 10.0.0.20 [last] [SCOPED]
-New Routes ('test4') = <IPv4RouteList[10]> = {
+Add new[6]: Net 224.0.0.0/4 Ifp en0 Ifa 10.0.0.10
+Add new[7]: Net 224.0.0.0/4 Ifp en1 Ifa 10.0.0.20 [last] [SCOPED]
+Add new[8]: Net 255.255.255.255/32 Ifp en0 Ifa 10.0.0.10
+Add new[9]: Net 255.255.255.255/32 Ifp en1 Ifa 10.0.0.20 [last] [SCOPED]
+New Routes ('test4') = <IPv4RouteList[14]> = {
  0. Net 0.0.0.0/0 Gate 17.202.20.1 Ifp en0 Ifa 17.202.40.191
  1. Net 0.0.0.0/0 Gate 17.202.20.1 Ifp en1 Ifa 17.202.42.24 [SCOPED]
  2. Net 10.0.0.0/24 Ifp en1 Ifa 10.0.0.20
@@ -7514,6 +10650,10 @@ New Routes ('test4') = <IPv4RouteList[10]> = {
  7. Net 17.202.20.1/32 Ifp en1 Ifa 17.202.42.24 [SCOPED]
  8. Net 17.202.40.0/22 Ifp en0 Ifa 17.202.40.191
  9. Net 17.202.40.0/22 Ifp en1 Ifa 17.202.42.24 [SCOPED]
+10. Net 224.0.0.0/4 Ifp en0 Ifa 17.202.40.191
+11. Net 224.0.0.0/4 Ifp en1 Ifa 17.202.42.24 [SCOPED]
+12. Net 255.255.255.255/32 Ifp en0 Ifa 17.202.40.191
+13. Net 255.255.255.255/32 Ifp en1 Ifa 17.202.42.24 [SCOPED]
 }
 Remove old[0]: Net 0.0.0.0/0 Gate 10.0.0.1 Ifp en0 Ifa 10.0.0.10
 Remove old[1]: Net 0.0.0.0/0 Gate 10.0.0.1 Ifp en1 Ifa 10.0.0.20 [never] [SCOPED]
@@ -7521,6 +10661,10 @@ Remove old[2]: Net 10.0.0.0/24 Ifp en0 Ifa 10.0.0.10
 Remove old[3]: Net 10.0.0.0/24 Ifp en1 Ifa 10.0.0.20 [last] [SCOPED]
 Remove old[4]: Net 10.0.0.1/32 Ifp en0 Ifa 10.0.0.10
 Remove old[5]: Net 10.0.0.1/32 Ifp en1 Ifa 10.0.0.20 [last] [SCOPED]
+Remove old[6]: Net 224.0.0.0/4 Ifp en0 Ifa 10.0.0.10
+Remove old[7]: Net 224.0.0.0/4 Ifp en1 Ifa 10.0.0.20 [last] [SCOPED]
+Remove old[8]: Net 255.255.255.255/32 Ifp en0 Ifa 10.0.0.10
+Remove old[9]: Net 255.255.255.255/32 Ifp en1 Ifa 10.0.0.20 [last] [SCOPED]
 Add new[6]: Net 17.202.20.1/32 Ifp en0 Ifa 17.202.40.191
 Add new[0]: Net 0.0.0.0/0 Gate 17.202.20.1 Ifp en0 Ifa 17.202.40.191
 Add new[7]: Net 17.202.20.1/32 Ifp en1 Ifa 17.202.42.24 [SCOPED]
@@ -7531,10 +10675,14 @@ Add new[4]: Net 10.0.0.1/32 Ifp en1 Ifa 10.0.0.20
 Add new[5]: Net 10.0.0.1/32 Ifp en0 Ifa 10.0.0.11 [SCOPED]
 Add new[8]: Net 17.202.40.0/22 Ifp en0 Ifa 17.202.40.191
 Add new[9]: Net 17.202.40.0/22 Ifp en1 Ifa 17.202.42.24 [SCOPED]
+Add new[10]: Net 224.0.0.0/4 Ifp en0 Ifa 17.202.40.191
+Add new[11]: Net 224.0.0.0/4 Ifp en1 Ifa 17.202.42.24 [SCOPED]
+Add new[12]: Net 255.255.255.255/32 Ifp en0 Ifa 17.202.40.191
+Add new[13]: Net 255.255.255.255/32 Ifp en1 Ifa 17.202.42.24 [SCOPED]
 =================> Apply 'test13', 'test4' End <=================
 
 =================> Apply 'test4', 'test14' Begin <=================
-Old routes ('test4') = <IPv4RouteList[10]> = {
+Old routes ('test4') = <IPv4RouteList[14]> = {
  0. Net 0.0.0.0/0 Gate 17.202.20.1 Ifp en0 Ifa 17.202.40.191
  1. Net 0.0.0.0/0 Gate 17.202.20.1 Ifp en1 Ifa 17.202.42.24 [SCOPED]
  2. Net 10.0.0.0/24 Ifp en1 Ifa 10.0.0.20
@@ -7545,6 +10693,10 @@ Old routes ('test4') = <IPv4RouteList[10]> = {
  7. Net 17.202.20.1/32 Ifp en1 Ifa 17.202.42.24 [SCOPED]
  8. Net 17.202.40.0/22 Ifp en0 Ifa 17.202.40.191
  9. Net 17.202.40.0/22 Ifp en1 Ifa 17.202.42.24 [SCOPED]
+10. Net 224.0.0.0/4 Ifp en0 Ifa 17.202.40.191
+11. Net 224.0.0.0/4 Ifp en1 Ifa 17.202.42.24 [SCOPED]
+12. Net 255.255.255.255/32 Ifp en0 Ifa 17.202.40.191
+13. Net 255.255.255.255/32 Ifp en1 Ifa 17.202.42.24 [SCOPED]
 }
 Add new[6]: Net 17.202.20.1/32 Ifp en0 Ifa 17.202.40.191
 Add new[0]: Net 0.0.0.0/0 Gate 17.202.20.1 Ifp en0 Ifa 17.202.40.191
@@ -7556,10 +10708,16 @@ Add new[4]: Net 10.0.0.1/32 Ifp en1 Ifa 10.0.0.20
 Add new[5]: Net 10.0.0.1/32 Ifp en0 Ifa 10.0.0.11 [SCOPED]
 Add new[8]: Net 17.202.40.0/22 Ifp en0 Ifa 17.202.40.191
 Add new[9]: Net 17.202.40.0/22 Ifp en1 Ifa 17.202.42.24 [SCOPED]
-New Routes ('test14') = <IPv4RouteList[3]> = {
+Add new[10]: Net 224.0.0.0/4 Ifp en0 Ifa 17.202.40.191
+Add new[11]: Net 224.0.0.0/4 Ifp en1 Ifa 17.202.42.24 [SCOPED]
+Add new[12]: Net 255.255.255.255/32 Ifp en0 Ifa 17.202.40.191
+Add new[13]: Net 255.255.255.255/32 Ifp en1 Ifa 17.202.42.24 [SCOPED]
+New Routes ('test14') = <IPv4RouteList[5]> = {
  0. Net 0.0.0.0/0 Gate 10.0.0.1 Ifp en1 Ifa 10.0.0.20 [never] [SCOPED]
  1. Net 10.0.0.0/24 Ifp en1 Ifa 10.0.0.20 [last]
  2. Net 10.0.0.1/32 Ifp en1 Ifa 10.0.0.20 [last]
+ 3. Net 224.0.0.0/4 Ifp en1 Ifa 10.0.0.20 [last]
+ 4. Net 255.255.255.255/32 Ifp en1 Ifa 10.0.0.20 [last]
 }
 Remove old[0]: Net 0.0.0.0/0 Gate 17.202.20.1 Ifp en0 Ifa 17.202.40.191
 Remove old[1]: Net 0.0.0.0/0 Gate 17.202.20.1 Ifp en1 Ifa 17.202.42.24 [SCOPED]
@@ -7569,19 +10727,29 @@ Remove old[6]: Net 17.202.20.1/32 Ifp en0 Ifa 17.202.40.191
 Remove old[7]: Net 17.202.20.1/32 Ifp en1 Ifa 17.202.42.24 [SCOPED]
 Remove old[8]: Net 17.202.40.0/22 Ifp en0 Ifa 17.202.40.191
 Remove old[9]: Net 17.202.40.0/22 Ifp en1 Ifa 17.202.42.24 [SCOPED]
+Remove old[10]: Net 224.0.0.0/4 Ifp en0 Ifa 17.202.40.191
+Remove old[11]: Net 224.0.0.0/4 Ifp en1 Ifa 17.202.42.24 [SCOPED]
+Remove old[12]: Net 255.255.255.255/32 Ifp en0 Ifa 17.202.40.191
+Remove old[13]: Net 255.255.255.255/32 Ifp en1 Ifa 17.202.42.24 [SCOPED]
 Add new[0]: Net 0.0.0.0/0 Gate 10.0.0.1 Ifp en1 Ifa 10.0.0.20 [never] [SCOPED]
+Add new[3]: Net 224.0.0.0/4 Ifp en1 Ifa 10.0.0.20 [last]
+Add new[4]: Net 255.255.255.255/32 Ifp en1 Ifa 10.0.0.20 [last]
 =================> Apply 'test4', 'test14' End <=================
 
 =================> Apply 'test14', 'test4' Begin <=================
-Old routes ('test14') = <IPv4RouteList[3]> = {
+Old routes ('test14') = <IPv4RouteList[5]> = {
  0. Net 0.0.0.0/0 Gate 10.0.0.1 Ifp en1 Ifa 10.0.0.20 [never] [SCOPED]
  1. Net 10.0.0.0/24 Ifp en1 Ifa 10.0.0.20 [last]
  2. Net 10.0.0.1/32 Ifp en1 Ifa 10.0.0.20 [last]
+ 3. Net 224.0.0.0/4 Ifp en1 Ifa 10.0.0.20 [last]
+ 4. Net 255.255.255.255/32 Ifp en1 Ifa 10.0.0.20 [last]
 }
 Add new[2]: Net 10.0.0.1/32 Ifp en1 Ifa 10.0.0.20 [last]
 Add new[0]: Net 0.0.0.0/0 Gate 10.0.0.1 Ifp en1 Ifa 10.0.0.20 [never] [SCOPED]
 Add new[1]: Net 10.0.0.0/24 Ifp en1 Ifa 10.0.0.20 [last]
-New Routes ('test4') = <IPv4RouteList[10]> = {
+Add new[3]: Net 224.0.0.0/4 Ifp en1 Ifa 10.0.0.20 [last]
+Add new[4]: Net 255.255.255.255/32 Ifp en1 Ifa 10.0.0.20 [last]
+New Routes ('test4') = <IPv4RouteList[14]> = {
  0. Net 0.0.0.0/0 Gate 17.202.20.1 Ifp en0 Ifa 17.202.40.191
  1. Net 0.0.0.0/0 Gate 17.202.20.1 Ifp en1 Ifa 17.202.42.24 [SCOPED]
  2. Net 10.0.0.0/24 Ifp en1 Ifa 10.0.0.20
@@ -7592,8 +10760,14 @@ New Routes ('test4') = <IPv4RouteList[10]> = {
  7. Net 17.202.20.1/32 Ifp en1 Ifa 17.202.42.24 [SCOPED]
  8. Net 17.202.40.0/22 Ifp en0 Ifa 17.202.40.191
  9. Net 17.202.40.0/22 Ifp en1 Ifa 17.202.42.24 [SCOPED]
+10. Net 224.0.0.0/4 Ifp en0 Ifa 17.202.40.191
+11. Net 224.0.0.0/4 Ifp en1 Ifa 17.202.42.24 [SCOPED]
+12. Net 255.255.255.255/32 Ifp en0 Ifa 17.202.40.191
+13. Net 255.255.255.255/32 Ifp en1 Ifa 17.202.42.24 [SCOPED]
 }
 Remove old[0]: Net 0.0.0.0/0 Gate 10.0.0.1 Ifp en1 Ifa 10.0.0.20 [never] [SCOPED]
+Remove old[3]: Net 224.0.0.0/4 Ifp en1 Ifa 10.0.0.20 [last]
+Remove old[4]: Net 255.255.255.255/32 Ifp en1 Ifa 10.0.0.20 [last]
 Add new[6]: Net 17.202.20.1/32 Ifp en0 Ifa 17.202.40.191
 Add new[0]: Net 0.0.0.0/0 Gate 17.202.20.1 Ifp en0 Ifa 17.202.40.191
 Add new[7]: Net 17.202.20.1/32 Ifp en1 Ifa 17.202.42.24 [SCOPED]
@@ -7602,10 +10776,14 @@ Add new[3]: Net 10.0.0.0/24 Ifp en0 Ifa 10.0.0.11 [SCOPED]
 Add new[5]: Net 10.0.0.1/32 Ifp en0 Ifa 10.0.0.11 [SCOPED]
 Add new[8]: Net 17.202.40.0/22 Ifp en0 Ifa 17.202.40.191
 Add new[9]: Net 17.202.40.0/22 Ifp en1 Ifa 17.202.42.24 [SCOPED]
+Add new[10]: Net 224.0.0.0/4 Ifp en0 Ifa 17.202.40.191
+Add new[11]: Net 224.0.0.0/4 Ifp en1 Ifa 17.202.42.24 [SCOPED]
+Add new[12]: Net 255.255.255.255/32 Ifp en0 Ifa 17.202.40.191
+Add new[13]: Net 255.255.255.255/32 Ifp en1 Ifa 17.202.42.24 [SCOPED]
 =================> Apply 'test14', 'test4' End <=================
 
 =================> Apply 'test4', 'test15' Begin <=================
-Old routes ('test4') = <IPv4RouteList[10]> = {
+Old routes ('test4') = <IPv4RouteList[14]> = {
  0. Net 0.0.0.0/0 Gate 17.202.20.1 Ifp en0 Ifa 17.202.40.191
  1. Net 0.0.0.0/0 Gate 17.202.20.1 Ifp en1 Ifa 17.202.42.24 [SCOPED]
  2. Net 10.0.0.0/24 Ifp en1 Ifa 10.0.0.20
@@ -7616,6 +10794,10 @@ Old routes ('test4') = <IPv4RouteList[10]> = {
  7. Net 17.202.20.1/32 Ifp en1 Ifa 17.202.42.24 [SCOPED]
  8. Net 17.202.40.0/22 Ifp en0 Ifa 17.202.40.191
  9. Net 17.202.40.0/22 Ifp en1 Ifa 17.202.42.24 [SCOPED]
+10. Net 224.0.0.0/4 Ifp en0 Ifa 17.202.40.191
+11. Net 224.0.0.0/4 Ifp en1 Ifa 17.202.42.24 [SCOPED]
+12. Net 255.255.255.255/32 Ifp en0 Ifa 17.202.40.191
+13. Net 255.255.255.255/32 Ifp en1 Ifa 17.202.42.24 [SCOPED]
 }
 Add new[6]: Net 17.202.20.1/32 Ifp en0 Ifa 17.202.40.191
 Add new[0]: Net 0.0.0.0/0 Gate 17.202.20.1 Ifp en0 Ifa 17.202.40.191
@@ -7627,8 +10809,14 @@ Add new[4]: Net 10.0.0.1/32 Ifp en1 Ifa 10.0.0.20
 Add new[5]: Net 10.0.0.1/32 Ifp en0 Ifa 10.0.0.11 [SCOPED]
 Add new[8]: Net 17.202.40.0/22 Ifp en0 Ifa 17.202.40.191
 Add new[9]: Net 17.202.40.0/22 Ifp en1 Ifa 17.202.42.24 [SCOPED]
-New Routes ('test15') = <IPv4RouteList[1]> = {
- 0. Net 0.0.0.0/0 Ifp en0 Ifa 169.254.22.44
+Add new[10]: Net 224.0.0.0/4 Ifp en0 Ifa 17.202.40.191
+Add new[11]: Net 224.0.0.0/4 Ifp en1 Ifa 17.202.42.24 [SCOPED]
+Add new[12]: Net 255.255.255.255/32 Ifp en0 Ifa 17.202.40.191
+Add new[13]: Net 255.255.255.255/32 Ifp en1 Ifa 17.202.42.24 [SCOPED]
+New Routes ('test15') = <IPv4RouteList[3]> = {
+ 0. Net 169.254.0.0/16 Ifp en0 Ifa 169.254.22.44 [last]
+ 1. Net 224.0.0.0/4 Ifp en0 Ifa 169.254.22.44 [last]
+ 2. Net 255.255.255.255/32 Ifp en0 Ifa 169.254.22.44 [last]
 }
 Remove old[0]: Net 0.0.0.0/0 Gate 17.202.20.1 Ifp en0 Ifa 17.202.40.191
 Remove old[1]: Net 0.0.0.0/0 Gate 17.202.20.1 Ifp en1 Ifa 17.202.42.24 [SCOPED]
@@ -7640,15 +10828,25 @@ Remove old[6]: Net 17.202.20.1/32 Ifp en0 Ifa 17.202.40.191
 Remove old[7]: Net 17.202.20.1/32 Ifp en1 Ifa 17.202.42.24 [SCOPED]
 Remove old[8]: Net 17.202.40.0/22 Ifp en0 Ifa 17.202.40.191
 Remove old[9]: Net 17.202.40.0/22 Ifp en1 Ifa 17.202.42.24 [SCOPED]
-Add new[0]: Net 0.0.0.0/0 Ifp en0 Ifa 169.254.22.44
+Remove old[10]: Net 224.0.0.0/4 Ifp en0 Ifa 17.202.40.191
+Remove old[11]: Net 224.0.0.0/4 Ifp en1 Ifa 17.202.42.24 [SCOPED]
+Remove old[12]: Net 255.255.255.255/32 Ifp en0 Ifa 17.202.40.191
+Remove old[13]: Net 255.255.255.255/32 Ifp en1 Ifa 17.202.42.24 [SCOPED]
+Add new[0]: Net 169.254.0.0/16 Ifp en0 Ifa 169.254.22.44 [last]
+Add new[1]: Net 224.0.0.0/4 Ifp en0 Ifa 169.254.22.44 [last]
+Add new[2]: Net 255.255.255.255/32 Ifp en0 Ifa 169.254.22.44 [last]
 =================> Apply 'test4', 'test15' End <=================
 
 =================> Apply 'test15', 'test4' Begin <=================
-Old routes ('test15') = <IPv4RouteList[1]> = {
- 0. Net 0.0.0.0/0 Ifp en0 Ifa 169.254.22.44
-}
-Add new[0]: Net 0.0.0.0/0 Ifp en0 Ifa 169.254.22.44
-New Routes ('test4') = <IPv4RouteList[10]> = {
+Old routes ('test15') = <IPv4RouteList[3]> = {
+ 0. Net 169.254.0.0/16 Ifp en0 Ifa 169.254.22.44 [last]
+ 1. Net 224.0.0.0/4 Ifp en0 Ifa 169.254.22.44 [last]
+ 2. Net 255.255.255.255/32 Ifp en0 Ifa 169.254.22.44 [last]
+}
+Add new[0]: Net 169.254.0.0/16 Ifp en0 Ifa 169.254.22.44 [last]
+Add new[1]: Net 224.0.0.0/4 Ifp en0 Ifa 169.254.22.44 [last]
+Add new[2]: Net 255.255.255.255/32 Ifp en0 Ifa 169.254.22.44 [last]
+New Routes ('test4') = <IPv4RouteList[14]> = {
  0. Net 0.0.0.0/0 Gate 17.202.20.1 Ifp en0 Ifa 17.202.40.191
  1. Net 0.0.0.0/0 Gate 17.202.20.1 Ifp en1 Ifa 17.202.42.24 [SCOPED]
  2. Net 10.0.0.0/24 Ifp en1 Ifa 10.0.0.20
@@ -7659,8 +10857,14 @@ New Routes ('test4') = <IPv4RouteList[10]> = {
  7. Net 17.202.20.1/32 Ifp en1 Ifa 17.202.42.24 [SCOPED]
  8. Net 17.202.40.0/22 Ifp en0 Ifa 17.202.40.191
  9. Net 17.202.40.0/22 Ifp en1 Ifa 17.202.42.24 [SCOPED]
-}
-Remove old[0]: Net 0.0.0.0/0 Ifp en0 Ifa 169.254.22.44
+10. Net 224.0.0.0/4 Ifp en0 Ifa 17.202.40.191
+11. Net 224.0.0.0/4 Ifp en1 Ifa 17.202.42.24 [SCOPED]
+12. Net 255.255.255.255/32 Ifp en0 Ifa 17.202.40.191
+13. Net 255.255.255.255/32 Ifp en1 Ifa 17.202.42.24 [SCOPED]
+}
+Remove old[0]: Net 169.254.0.0/16 Ifp en0 Ifa 169.254.22.44 [last]
+Remove old[1]: Net 224.0.0.0/4 Ifp en0 Ifa 169.254.22.44 [last]
+Remove old[2]: Net 255.255.255.255/32 Ifp en0 Ifa 169.254.22.44 [last]
 Add new[6]: Net 17.202.20.1/32 Ifp en0 Ifa 17.202.40.191
 Add new[0]: Net 0.0.0.0/0 Gate 17.202.20.1 Ifp en0 Ifa 17.202.40.191
 Add new[7]: Net 17.202.20.1/32 Ifp en1 Ifa 17.202.42.24 [SCOPED]
@@ -7671,10 +10875,14 @@ Add new[4]: Net 10.0.0.1/32 Ifp en1 Ifa 10.0.0.20
 Add new[5]: Net 10.0.0.1/32 Ifp en0 Ifa 10.0.0.11 [SCOPED]
 Add new[8]: Net 17.202.40.0/22 Ifp en0 Ifa 17.202.40.191
 Add new[9]: Net 17.202.40.0/22 Ifp en1 Ifa 17.202.42.24 [SCOPED]
+Add new[10]: Net 224.0.0.0/4 Ifp en0 Ifa 17.202.40.191
+Add new[11]: Net 224.0.0.0/4 Ifp en1 Ifa 17.202.42.24 [SCOPED]
+Add new[12]: Net 255.255.255.255/32 Ifp en0 Ifa 17.202.40.191
+Add new[13]: Net 255.255.255.255/32 Ifp en1 Ifa 17.202.42.24 [SCOPED]
 =================> Apply 'test15', 'test4' End <=================
 
 =================> Apply 'test4', 'test16' Begin <=================
-Old routes ('test4') = <IPv4RouteList[10]> = {
+Old routes ('test4') = <IPv4RouteList[14]> = {
  0. Net 0.0.0.0/0 Gate 17.202.20.1 Ifp en0 Ifa 17.202.40.191
  1. Net 0.0.0.0/0 Gate 17.202.20.1 Ifp en1 Ifa 17.202.42.24 [SCOPED]
  2. Net 10.0.0.0/24 Ifp en1 Ifa 10.0.0.20
@@ -7685,6 +10893,10 @@ Old routes ('test4') = <IPv4RouteList[10]> = {
  7. Net 17.202.20.1/32 Ifp en1 Ifa 17.202.42.24 [SCOPED]
  8. Net 17.202.40.0/22 Ifp en0 Ifa 17.202.40.191
  9. Net 17.202.40.0/22 Ifp en1 Ifa 17.202.42.24 [SCOPED]
+10. Net 224.0.0.0/4 Ifp en0 Ifa 17.202.40.191
+11. Net 224.0.0.0/4 Ifp en1 Ifa 17.202.42.24 [SCOPED]
+12. Net 255.255.255.255/32 Ifp en0 Ifa 17.202.40.191
+13. Net 255.255.255.255/32 Ifp en1 Ifa 17.202.42.24 [SCOPED]
 }
 Add new[6]: Net 17.202.20.1/32 Ifp en0 Ifa 17.202.40.191
 Add new[0]: Net 0.0.0.0/0 Gate 17.202.20.1 Ifp en0 Ifa 17.202.40.191
@@ -7696,7 +10908,11 @@ Add new[4]: Net 10.0.0.1/32 Ifp en1 Ifa 10.0.0.20
 Add new[5]: Net 10.0.0.1/32 Ifp en0 Ifa 10.0.0.11 [SCOPED]
 Add new[8]: Net 17.202.40.0/22 Ifp en0 Ifa 17.202.40.191
 Add new[9]: Net 17.202.40.0/22 Ifp en1 Ifa 17.202.42.24 [SCOPED]
-New Routes ('test16') = <IPv4RouteList[50]> = {
+Add new[10]: Net 224.0.0.0/4 Ifp en0 Ifa 17.202.40.191
+Add new[11]: Net 224.0.0.0/4 Ifp en1 Ifa 17.202.42.24 [SCOPED]
+Add new[12]: Net 255.255.255.255/32 Ifp en0 Ifa 17.202.40.191
+Add new[13]: Net 255.255.255.255/32 Ifp en1 Ifa 17.202.42.24 [SCOPED]
+New Routes ('test16') = <IPv4RouteList[54]> = {
  0. Net 0.0.0.0/0 Gate 10.0.0.1 Ifp en0 Ifa 10.0.0.10
  1. Net 0.0.0.0/0 Ifp utun0 Ifa 17.153.46.24 [SCOPED]
  2. Net 10.0.0.0/24 Ifp en0 Ifa 10.0.0.10
@@ -7747,6 +10963,10 @@ New Routes ('test16') = <IPv4RouteList[50]> = {
 47. Net 192.35.50.0/24 Gate 17.153.46.24 Ifp utun0 Ifa 17.153.46.24
 48. Net 204.179.20.0/24 Gate 17.153.46.24 Ifp utun0 Ifa 17.153.46.24
 49. Net 206.112.116.0/24 Gate 17.153.46.24 Ifp utun0 Ifa 17.153.46.24
+50. Net 224.0.0.0/4 Ifp en0 Ifa 10.0.0.10
+51. Net 224.0.0.0/4 Ifp utun0 Ifa 17.153.46.24 [SCOPED]
+52. Net 255.255.255.255/32 Ifp en0 Ifa 10.0.0.10
+53. Net 255.255.255.255/32 Ifp utun0 Ifa 17.153.46.24 [SCOPED]
 }
 Remove old[0]: Net 0.0.0.0/0 Gate 17.202.20.1 Ifp en0 Ifa 17.202.40.191
 Remove old[1]: Net 0.0.0.0/0 Gate 17.202.20.1 Ifp en1 Ifa 17.202.42.24 [SCOPED]
@@ -7758,6 +10978,10 @@ Remove old[6]: Net 17.202.20.1/32 Ifp en0 Ifa 17.202.40.191
 Remove old[7]: Net 17.202.20.1/32 Ifp en1 Ifa 17.202.42.24 [SCOPED]
 Remove old[8]: Net 17.202.40.0/22 Ifp en0 Ifa 17.202.40.191
 Remove old[9]: Net 17.202.40.0/22 Ifp en1 Ifa 17.202.42.24 [SCOPED]
+Remove old[10]: Net 224.0.0.0/4 Ifp en0 Ifa 17.202.40.191
+Remove old[11]: Net 224.0.0.0/4 Ifp en1 Ifa 17.202.42.24 [SCOPED]
+Remove old[12]: Net 255.255.255.255/32 Ifp en0 Ifa 17.202.40.191
+Remove old[13]: Net 255.255.255.255/32 Ifp en1 Ifa 17.202.42.24 [SCOPED]
 Add new[3]: Net 10.0.0.1/32 Ifp en0 Ifa 10.0.0.10
 Add new[0]: Net 0.0.0.0/0 Gate 10.0.0.1 Ifp en0 Ifa 10.0.0.10
 Add new[1]: Net 0.0.0.0/0 Ifp utun0 Ifa 17.153.46.24 [SCOPED]
@@ -7808,10 +11032,14 @@ Add new[46]: Net 172.16.2.0/24 Gate 17.153.46.24 Ifp utun0 Ifa 17.153.46.24
 Add new[47]: Net 192.35.50.0/24 Gate 17.153.46.24 Ifp utun0 Ifa 17.153.46.24
 Add new[48]: Net 204.179.20.0/24 Gate 17.153.46.24 Ifp utun0 Ifa 17.153.46.24
 Add new[49]: Net 206.112.116.0/24 Gate 17.153.46.24 Ifp utun0 Ifa 17.153.46.24
+Add new[50]: Net 224.0.0.0/4 Ifp en0 Ifa 10.0.0.10
+Add new[51]: Net 224.0.0.0/4 Ifp utun0 Ifa 17.153.46.24 [SCOPED]
+Add new[52]: Net 255.255.255.255/32 Ifp en0 Ifa 10.0.0.10
+Add new[53]: Net 255.255.255.255/32 Ifp utun0 Ifa 17.153.46.24 [SCOPED]
 =================> Apply 'test4', 'test16' End <=================
 
 =================> Apply 'test16', 'test4' Begin <=================
-Old routes ('test16') = <IPv4RouteList[50]> = {
+Old routes ('test16') = <IPv4RouteList[54]> = {
  0. Net 0.0.0.0/0 Gate 10.0.0.1 Ifp en0 Ifa 10.0.0.10
  1. Net 0.0.0.0/0 Ifp utun0 Ifa 17.153.46.24 [SCOPED]
  2. Net 10.0.0.0/24 Ifp en0 Ifa 10.0.0.10
@@ -7862,6 +11090,10 @@ Old routes ('test16') = <IPv4RouteList[50]> = {
 47. Net 192.35.50.0/24 Gate 17.153.46.24 Ifp utun0 Ifa 17.153.46.24
 48. Net 204.179.20.0/24 Gate 17.153.46.24 Ifp utun0 Ifa 17.153.46.24
 49. Net 206.112.116.0/24 Gate 17.153.46.24 Ifp utun0 Ifa 17.153.46.24
+50. Net 224.0.0.0/4 Ifp en0 Ifa 10.0.0.10
+51. Net 224.0.0.0/4 Ifp utun0 Ifa 17.153.46.24 [SCOPED]
+52. Net 255.255.255.255/32 Ifp en0 Ifa 10.0.0.10
+53. Net 255.255.255.255/32 Ifp utun0 Ifa 17.153.46.24 [SCOPED]
 }
 Add new[3]: Net 10.0.0.1/32 Ifp en0 Ifa 10.0.0.10
 Add new[0]: Net 0.0.0.0/0 Gate 10.0.0.1 Ifp en0 Ifa 10.0.0.10
@@ -7913,7 +11145,11 @@ Add new[46]: Net 172.16.2.0/24 Gate 17.153.46.24 Ifp utun0 Ifa 17.153.46.24
 Add new[47]: Net 192.35.50.0/24 Gate 17.153.46.24 Ifp utun0 Ifa 17.153.46.24
 Add new[48]: Net 204.179.20.0/24 Gate 17.153.46.24 Ifp utun0 Ifa 17.153.46.24
 Add new[49]: Net 206.112.116.0/24 Gate 17.153.46.24 Ifp utun0 Ifa 17.153.46.24
-New Routes ('test4') = <IPv4RouteList[10]> = {
+Add new[50]: Net 224.0.0.0/4 Ifp en0 Ifa 10.0.0.10
+Add new[51]: Net 224.0.0.0/4 Ifp utun0 Ifa 17.153.46.24 [SCOPED]
+Add new[52]: Net 255.255.255.255/32 Ifp en0 Ifa 10.0.0.10
+Add new[53]: Net 255.255.255.255/32 Ifp utun0 Ifa 17.153.46.24 [SCOPED]
+New Routes ('test4') = <IPv4RouteList[14]> = {
  0. Net 0.0.0.0/0 Gate 17.202.20.1 Ifp en0 Ifa 17.202.40.191
  1. Net 0.0.0.0/0 Gate 17.202.20.1 Ifp en1 Ifa 17.202.42.24 [SCOPED]
  2. Net 10.0.0.0/24 Ifp en1 Ifa 10.0.0.20
@@ -7924,6 +11160,10 @@ New Routes ('test4') = <IPv4RouteList[10]> = {
  7. Net 17.202.20.1/32 Ifp en1 Ifa 17.202.42.24 [SCOPED]
  8. Net 17.202.40.0/22 Ifp en0 Ifa 17.202.40.191
  9. Net 17.202.40.0/22 Ifp en1 Ifa 17.202.42.24 [SCOPED]
+10. Net 224.0.0.0/4 Ifp en0 Ifa 17.202.40.191
+11. Net 224.0.0.0/4 Ifp en1 Ifa 17.202.42.24 [SCOPED]
+12. Net 255.255.255.255/32 Ifp en0 Ifa 17.202.40.191
+13. Net 255.255.255.255/32 Ifp en1 Ifa 17.202.42.24 [SCOPED]
 }
 Remove old[0]: Net 0.0.0.0/0 Gate 10.0.0.1 Ifp en0 Ifa 10.0.0.10
 Remove old[1]: Net 0.0.0.0/0 Ifp utun0 Ifa 17.153.46.24 [SCOPED]
@@ -7975,6 +11215,10 @@ Remove old[46]: Net 172.16.2.0/24 Gate 17.153.46.24 Ifp utun0 Ifa 17.153.46.24
 Remove old[47]: Net 192.35.50.0/24 Gate 17.153.46.24 Ifp utun0 Ifa 17.153.46.24
 Remove old[48]: Net 204.179.20.0/24 Gate 17.153.46.24 Ifp utun0 Ifa 17.153.46.24
 Remove old[49]: Net 206.112.116.0/24 Gate 17.153.46.24 Ifp utun0 Ifa 17.153.46.24
+Remove old[50]: Net 224.0.0.0/4 Ifp en0 Ifa 10.0.0.10
+Remove old[51]: Net 224.0.0.0/4 Ifp utun0 Ifa 17.153.46.24 [SCOPED]
+Remove old[52]: Net 255.255.255.255/32 Ifp en0 Ifa 10.0.0.10
+Remove old[53]: Net 255.255.255.255/32 Ifp utun0 Ifa 17.153.46.24 [SCOPED]
 Add new[6]: Net 17.202.20.1/32 Ifp en0 Ifa 17.202.40.191
 Add new[0]: Net 0.0.0.0/0 Gate 17.202.20.1 Ifp en0 Ifa 17.202.40.191
 Add new[7]: Net 17.202.20.1/32 Ifp en1 Ifa 17.202.42.24 [SCOPED]
@@ -7985,10 +11229,14 @@ Add new[4]: Net 10.0.0.1/32 Ifp en1 Ifa 10.0.0.20
 Add new[5]: Net 10.0.0.1/32 Ifp en0 Ifa 10.0.0.11 [SCOPED]
 Add new[8]: Net 17.202.40.0/22 Ifp en0 Ifa 17.202.40.191
 Add new[9]: Net 17.202.40.0/22 Ifp en1 Ifa 17.202.42.24 [SCOPED]
+Add new[10]: Net 224.0.0.0/4 Ifp en0 Ifa 17.202.40.191
+Add new[11]: Net 224.0.0.0/4 Ifp en1 Ifa 17.202.42.24 [SCOPED]
+Add new[12]: Net 255.255.255.255/32 Ifp en0 Ifa 17.202.40.191
+Add new[13]: Net 255.255.255.255/32 Ifp en1 Ifa 17.202.42.24 [SCOPED]
 =================> Apply 'test16', 'test4' End <=================
 
 =================> Apply 'test4', 'test17' Begin <=================
-Old routes ('test4') = <IPv4RouteList[10]> = {
+Old routes ('test4') = <IPv4RouteList[14]> = {
  0. Net 0.0.0.0/0 Gate 17.202.20.1 Ifp en0 Ifa 17.202.40.191
  1. Net 0.0.0.0/0 Gate 17.202.20.1 Ifp en1 Ifa 17.202.42.24 [SCOPED]
  2. Net 10.0.0.0/24 Ifp en1 Ifa 10.0.0.20
@@ -7999,6 +11247,10 @@ Old routes ('test4') = <IPv4RouteList[10]> = {
  7. Net 17.202.20.1/32 Ifp en1 Ifa 17.202.42.24 [SCOPED]
  8. Net 17.202.40.0/22 Ifp en0 Ifa 17.202.40.191
  9. Net 17.202.40.0/22 Ifp en1 Ifa 17.202.42.24 [SCOPED]
+10. Net 224.0.0.0/4 Ifp en0 Ifa 17.202.40.191
+11. Net 224.0.0.0/4 Ifp en1 Ifa 17.202.42.24 [SCOPED]
+12. Net 255.255.255.255/32 Ifp en0 Ifa 17.202.40.191
+13. Net 255.255.255.255/32 Ifp en1 Ifa 17.202.42.24 [SCOPED]
 }
 Add new[6]: Net 17.202.20.1/32 Ifp en0 Ifa 17.202.40.191
 Add new[0]: Net 0.0.0.0/0 Gate 17.202.20.1 Ifp en0 Ifa 17.202.40.191
@@ -8010,13 +11262,21 @@ Add new[4]: Net 10.0.0.1/32 Ifp en1 Ifa 10.0.0.20
 Add new[5]: Net 10.0.0.1/32 Ifp en0 Ifa 10.0.0.11 [SCOPED]
 Add new[8]: Net 17.202.40.0/22 Ifp en0 Ifa 17.202.40.191
 Add new[9]: Net 17.202.40.0/22 Ifp en1 Ifa 17.202.42.24 [SCOPED]
-New Routes ('test17') = <IPv4RouteList[6]> = {
+Add new[10]: Net 224.0.0.0/4 Ifp en0 Ifa 17.202.40.191
+Add new[11]: Net 224.0.0.0/4 Ifp en1 Ifa 17.202.42.24 [SCOPED]
+Add new[12]: Net 255.255.255.255/32 Ifp en0 Ifa 17.202.40.191
+Add new[13]: Net 255.255.255.255/32 Ifp en1 Ifa 17.202.42.24 [SCOPED]
+New Routes ('test17') = <IPv4RouteList[10]> = {
  0. Net 0.0.0.0/0 Gate 10.0.0.1 Ifp en0 Ifa 10.0.0.10
  1. Net 0.0.0.0/0 Gate 192.168.2.1 Ifp en1 Ifa 192.168.2.50 [never] [SCOPED]
  2. Net 10.0.0.0/24 Ifp en0 Ifa 10.0.0.10
  3. Net 10.0.0.1/32 Ifp en0 Ifa 10.0.0.10
  4. Net 192.168.2.0/24 Ifp en1 Ifa 192.168.2.50 [last]
  5. Net 192.168.2.1/32 Ifp en1 Ifa 192.168.2.50 [last]
+ 6. Net 224.0.0.0/4 Ifp en0 Ifa 10.0.0.10
+ 7. Net 224.0.0.0/4 Ifp en1 Ifa 192.168.2.50 [last] [SCOPED]
+ 8. Net 255.255.255.255/32 Ifp en0 Ifa 10.0.0.10
+ 9. Net 255.255.255.255/32 Ifp en1 Ifa 192.168.2.50 [last] [SCOPED]
 }
 Remove old[0]: Net 0.0.0.0/0 Gate 17.202.20.1 Ifp en0 Ifa 17.202.40.191
 Remove old[1]: Net 0.0.0.0/0 Gate 17.202.20.1 Ifp en1 Ifa 17.202.42.24 [SCOPED]
@@ -8028,22 +11288,34 @@ Remove old[6]: Net 17.202.20.1/32 Ifp en0 Ifa 17.202.40.191
 Remove old[7]: Net 17.202.20.1/32 Ifp en1 Ifa 17.202.42.24 [SCOPED]
 Remove old[8]: Net 17.202.40.0/22 Ifp en0 Ifa 17.202.40.191
 Remove old[9]: Net 17.202.40.0/22 Ifp en1 Ifa 17.202.42.24 [SCOPED]
+Remove old[10]: Net 224.0.0.0/4 Ifp en0 Ifa 17.202.40.191
+Remove old[11]: Net 224.0.0.0/4 Ifp en1 Ifa 17.202.42.24 [SCOPED]
+Remove old[12]: Net 255.255.255.255/32 Ifp en0 Ifa 17.202.40.191
+Remove old[13]: Net 255.255.255.255/32 Ifp en1 Ifa 17.202.42.24 [SCOPED]
 Add new[3]: Net 10.0.0.1/32 Ifp en0 Ifa 10.0.0.10
 Add new[0]: Net 0.0.0.0/0 Gate 10.0.0.1 Ifp en0 Ifa 10.0.0.10
 Add new[5]: Net 192.168.2.1/32 Ifp en1 Ifa 192.168.2.50 [last]
 Add new[1]: Net 0.0.0.0/0 Gate 192.168.2.1 Ifp en1 Ifa 192.168.2.50 [never] [SCOPED]
 Add new[2]: Net 10.0.0.0/24 Ifp en0 Ifa 10.0.0.10
 Add new[4]: Net 192.168.2.0/24 Ifp en1 Ifa 192.168.2.50 [last]
+Add new[6]: Net 224.0.0.0/4 Ifp en0 Ifa 10.0.0.10
+Add new[7]: Net 224.0.0.0/4 Ifp en1 Ifa 192.168.2.50 [last] [SCOPED]
+Add new[8]: Net 255.255.255.255/32 Ifp en0 Ifa 10.0.0.10
+Add new[9]: Net 255.255.255.255/32 Ifp en1 Ifa 192.168.2.50 [last] [SCOPED]
 =================> Apply 'test4', 'test17' End <=================
 
 =================> Apply 'test17', 'test4' Begin <=================
-Old routes ('test17') = <IPv4RouteList[6]> = {
+Old routes ('test17') = <IPv4RouteList[10]> = {
  0. Net 0.0.0.0/0 Gate 10.0.0.1 Ifp en0 Ifa 10.0.0.10
  1. Net 0.0.0.0/0 Gate 192.168.2.1 Ifp en1 Ifa 192.168.2.50 [never] [SCOPED]
  2. Net 10.0.0.0/24 Ifp en0 Ifa 10.0.0.10
  3. Net 10.0.0.1/32 Ifp en0 Ifa 10.0.0.10
  4. Net 192.168.2.0/24 Ifp en1 Ifa 192.168.2.50 [last]
  5. Net 192.168.2.1/32 Ifp en1 Ifa 192.168.2.50 [last]
+ 6. Net 224.0.0.0/4 Ifp en0 Ifa 10.0.0.10
+ 7. Net 224.0.0.0/4 Ifp en1 Ifa 192.168.2.50 [last] [SCOPED]
+ 8. Net 255.255.255.255/32 Ifp en0 Ifa 10.0.0.10
+ 9. Net 255.255.255.255/32 Ifp en1 Ifa 192.168.2.50 [last] [SCOPED]
 }
 Add new[3]: Net 10.0.0.1/32 Ifp en0 Ifa 10.0.0.10
 Add new[0]: Net 0.0.0.0/0 Gate 10.0.0.1 Ifp en0 Ifa 10.0.0.10
@@ -8051,7 +11323,11 @@ Add new[5]: Net 192.168.2.1/32 Ifp en1 Ifa 192.168.2.50 [last]
 Add new[1]: Net 0.0.0.0/0 Gate 192.168.2.1 Ifp en1 Ifa 192.168.2.50 [never] [SCOPED]
 Add new[2]: Net 10.0.0.0/24 Ifp en0 Ifa 10.0.0.10
 Add new[4]: Net 192.168.2.0/24 Ifp en1 Ifa 192.168.2.50 [last]
-New Routes ('test4') = <IPv4RouteList[10]> = {
+Add new[6]: Net 224.0.0.0/4 Ifp en0 Ifa 10.0.0.10
+Add new[7]: Net 224.0.0.0/4 Ifp en1 Ifa 192.168.2.50 [last] [SCOPED]
+Add new[8]: Net 255.255.255.255/32 Ifp en0 Ifa 10.0.0.10
+Add new[9]: Net 255.255.255.255/32 Ifp en1 Ifa 192.168.2.50 [last] [SCOPED]
+New Routes ('test4') = <IPv4RouteList[14]> = {
  0. Net 0.0.0.0/0 Gate 17.202.20.1 Ifp en0 Ifa 17.202.40.191
  1. Net 0.0.0.0/0 Gate 17.202.20.1 Ifp en1 Ifa 17.202.42.24 [SCOPED]
  2. Net 10.0.0.0/24 Ifp en1 Ifa 10.0.0.20
@@ -8062,6 +11338,10 @@ New Routes ('test4') = <IPv4RouteList[10]> = {
  7. Net 17.202.20.1/32 Ifp en1 Ifa 17.202.42.24 [SCOPED]
  8. Net 17.202.40.0/22 Ifp en0 Ifa 17.202.40.191
  9. Net 17.202.40.0/22 Ifp en1 Ifa 17.202.42.24 [SCOPED]
+10. Net 224.0.0.0/4 Ifp en0 Ifa 17.202.40.191
+11. Net 224.0.0.0/4 Ifp en1 Ifa 17.202.42.24 [SCOPED]
+12. Net 255.255.255.255/32 Ifp en0 Ifa 17.202.40.191
+13. Net 255.255.255.255/32 Ifp en1 Ifa 17.202.42.24 [SCOPED]
 }
 Remove old[0]: Net 0.0.0.0/0 Gate 10.0.0.1 Ifp en0 Ifa 10.0.0.10
 Remove old[1]: Net 0.0.0.0/0 Gate 192.168.2.1 Ifp en1 Ifa 192.168.2.50 [never] [SCOPED]
@@ -8069,6 +11349,10 @@ Remove old[2]: Net 10.0.0.0/24 Ifp en0 Ifa 10.0.0.10
 Remove old[3]: Net 10.0.0.1/32 Ifp en0 Ifa 10.0.0.10
 Remove old[4]: Net 192.168.2.0/24 Ifp en1 Ifa 192.168.2.50 [last]
 Remove old[5]: Net 192.168.2.1/32 Ifp en1 Ifa 192.168.2.50 [last]
+Remove old[6]: Net 224.0.0.0/4 Ifp en0 Ifa 10.0.0.10
+Remove old[7]: Net 224.0.0.0/4 Ifp en1 Ifa 192.168.2.50 [last] [SCOPED]
+Remove old[8]: Net 255.255.255.255/32 Ifp en0 Ifa 10.0.0.10
+Remove old[9]: Net 255.255.255.255/32 Ifp en1 Ifa 192.168.2.50 [last] [SCOPED]
 Add new[6]: Net 17.202.20.1/32 Ifp en0 Ifa 17.202.40.191
 Add new[0]: Net 0.0.0.0/0 Gate 17.202.20.1 Ifp en0 Ifa 17.202.40.191
 Add new[7]: Net 17.202.20.1/32 Ifp en1 Ifa 17.202.42.24 [SCOPED]
@@ -8079,10 +11363,14 @@ Add new[4]: Net 10.0.0.1/32 Ifp en1 Ifa 10.0.0.20
 Add new[5]: Net 10.0.0.1/32 Ifp en0 Ifa 10.0.0.11 [SCOPED]
 Add new[8]: Net 17.202.40.0/22 Ifp en0 Ifa 17.202.40.191
 Add new[9]: Net 17.202.40.0/22 Ifp en1 Ifa 17.202.42.24 [SCOPED]
+Add new[10]: Net 224.0.0.0/4 Ifp en0 Ifa 17.202.40.191
+Add new[11]: Net 224.0.0.0/4 Ifp en1 Ifa 17.202.42.24 [SCOPED]
+Add new[12]: Net 255.255.255.255/32 Ifp en0 Ifa 17.202.40.191
+Add new[13]: Net 255.255.255.255/32 Ifp en1 Ifa 17.202.42.24 [SCOPED]
 =================> Apply 'test17', 'test4' End <=================
 
 =================> Apply 'test4', 'test18' Begin <=================
-Old routes ('test4') = <IPv4RouteList[10]> = {
+Old routes ('test4') = <IPv4RouteList[14]> = {
  0. Net 0.0.0.0/0 Gate 17.202.20.1 Ifp en0 Ifa 17.202.40.191
  1. Net 0.0.0.0/0 Gate 17.202.20.1 Ifp en1 Ifa 17.202.42.24 [SCOPED]
  2. Net 10.0.0.0/24 Ifp en1 Ifa 10.0.0.20
@@ -8093,6 +11381,10 @@ Old routes ('test4') = <IPv4RouteList[10]> = {
  7. Net 17.202.20.1/32 Ifp en1 Ifa 17.202.42.24 [SCOPED]
  8. Net 17.202.40.0/22 Ifp en0 Ifa 17.202.40.191
  9. Net 17.202.40.0/22 Ifp en1 Ifa 17.202.42.24 [SCOPED]
+10. Net 224.0.0.0/4 Ifp en0 Ifa 17.202.40.191
+11. Net 224.0.0.0/4 Ifp en1 Ifa 17.202.42.24 [SCOPED]
+12. Net 255.255.255.255/32 Ifp en0 Ifa 17.202.40.191
+13. Net 255.255.255.255/32 Ifp en1 Ifa 17.202.42.24 [SCOPED]
 }
 Add new[6]: Net 17.202.20.1/32 Ifp en0 Ifa 17.202.40.191
 Add new[0]: Net 0.0.0.0/0 Gate 17.202.20.1 Ifp en0 Ifa 17.202.40.191
@@ -8104,7 +11396,11 @@ Add new[4]: Net 10.0.0.1/32 Ifp en1 Ifa 10.0.0.20
 Add new[5]: Net 10.0.0.1/32 Ifp en0 Ifa 10.0.0.11 [SCOPED]
 Add new[8]: Net 17.202.40.0/22 Ifp en0 Ifa 17.202.40.191
 Add new[9]: Net 17.202.40.0/22 Ifp en1 Ifa 17.202.42.24 [SCOPED]
-New Routes ('test18') = <IPv4RouteList[14]> = {
+Add new[10]: Net 224.0.0.0/4 Ifp en0 Ifa 17.202.40.191
+Add new[11]: Net 224.0.0.0/4 Ifp en1 Ifa 17.202.42.24 [SCOPED]
+Add new[12]: Net 255.255.255.255/32 Ifp en0 Ifa 17.202.40.191
+Add new[13]: Net 255.255.255.255/32 Ifp en1 Ifa 17.202.42.24 [SCOPED]
+New Routes ('test18') = <IPv4RouteList[16]> = {
  0. Net 0.0.0.0/0 Gate 192.168.130.1 Ifp en0 Ifa 192.168.130.16
  1. Host 1.1.1.1 Gate 1.1.1.2 Ifp en0 Ifa 192.168.130.16
  2. Host 1.1.1.2 Gate 1.1.1.3 Ifp en0 Ifa 192.168.130.16
@@ -8119,6 +11415,8 @@ New Routes ('test18') = <IPv4RouteList[14]> = {
 11. Host 1.1.1.11 Gate 1.1.1.1 Ifp en0 Ifa 192.168.130.16
 12. Net 192.168.130.0/24 Ifp en0 Ifa 192.168.130.16
 13. Net 192.168.130.1/32 Ifp en0 Ifa 192.168.130.16
+14. Net 224.0.0.0/4 Ifp en0 Ifa 192.168.130.16
+15. Net 255.255.255.255/32 Ifp en0 Ifa 192.168.130.16
 }
 Remove old[0]: Net 0.0.0.0/0 Gate 17.202.20.1 Ifp en0 Ifa 17.202.40.191
 Remove old[1]: Net 0.0.0.0/0 Gate 17.202.20.1 Ifp en1 Ifa 17.202.42.24 [SCOPED]
@@ -8130,24 +11428,30 @@ Remove old[6]: Net 17.202.20.1/32 Ifp en0 Ifa 17.202.40.191
 Remove old[7]: Net 17.202.20.1/32 Ifp en1 Ifa 17.202.42.24 [SCOPED]
 Remove old[8]: Net 17.202.40.0/22 Ifp en0 Ifa 17.202.40.191
 Remove old[9]: Net 17.202.40.0/22 Ifp en1 Ifa 17.202.42.24 [SCOPED]
+Remove old[10]: Net 224.0.0.0/4 Ifp en0 Ifa 17.202.40.191
+Remove old[11]: Net 224.0.0.0/4 Ifp en1 Ifa 17.202.42.24 [SCOPED]
+Remove old[12]: Net 255.255.255.255/32 Ifp en0 Ifa 17.202.40.191
+Remove old[13]: Net 255.255.255.255/32 Ifp en1 Ifa 17.202.42.24 [SCOPED]
 Add new[13]: Net 192.168.130.1/32 Ifp en0 Ifa 192.168.130.16
 Add new[0]: Net 0.0.0.0/0 Gate 192.168.130.1 Ifp en0 Ifa 192.168.130.16
-IPMonitor RouteProcess: routing loop detected, not adding: Host 1.1.1.11 Gate 1.1.1.1 Ifp en0 Ifa 192.168.130.16
-IPMonitor RouteProcess: failed to add: Host 1.1.1.10 Gate 1.1.1.11 Ifp en0 Ifa 192.168.130.16
-IPMonitor RouteProcess: failed to add: Host 1.1.1.9 Gate 1.1.1.10 Ifp en0 Ifa 192.168.130.16
-IPMonitor RouteProcess: failed to add: Host 1.1.1.8 Gate 1.1.1.9 Ifp en0 Ifa 192.168.130.16
-IPMonitor RouteProcess: failed to add: Host 1.1.1.7 Gate 1.1.1.8 Ifp en0 Ifa 192.168.130.16
-IPMonitor RouteProcess: failed to add: Host 1.1.1.6 Gate 1.1.1.7 Ifp en0 Ifa 192.168.130.16
-IPMonitor RouteProcess: failed to add: Host 1.1.1.5 Gate 1.1.1.6 Ifp en0 Ifa 192.168.130.16
-IPMonitor RouteProcess: failed to add: Host 1.1.1.4 Gate 1.1.1.5 Ifp en0 Ifa 192.168.130.16
-IPMonitor RouteProcess: failed to add: Host 1.1.1.3 Gate 1.1.1.4 Ifp en0 Ifa 192.168.130.16
-IPMonitor RouteProcess: failed to add: Host 1.1.1.2 Gate 1.1.1.3 Ifp en0 Ifa 192.168.130.16
-IPMonitor RouteProcess: failed to add: Host 1.1.1.1 Gate 1.1.1.2 Ifp en0 Ifa 192.168.130.16
+routing loop detected, not adding: Host 1.1.1.11 Gate 1.1.1.1 Ifp en0 Ifa 192.168.130.16
+failed to add: Host 1.1.1.10 Gate 1.1.1.11 Ifp en0 Ifa 192.168.130.16
+failed to add: Host 1.1.1.9 Gate 1.1.1.10 Ifp en0 Ifa 192.168.130.16
+failed to add: Host 1.1.1.8 Gate 1.1.1.9 Ifp en0 Ifa 192.168.130.16
+failed to add: Host 1.1.1.7 Gate 1.1.1.8 Ifp en0 Ifa 192.168.130.16
+failed to add: Host 1.1.1.6 Gate 1.1.1.7 Ifp en0 Ifa 192.168.130.16
+failed to add: Host 1.1.1.5 Gate 1.1.1.6 Ifp en0 Ifa 192.168.130.16
+failed to add: Host 1.1.1.4 Gate 1.1.1.5 Ifp en0 Ifa 192.168.130.16
+failed to add: Host 1.1.1.3 Gate 1.1.1.4 Ifp en0 Ifa 192.168.130.16
+failed to add: Host 1.1.1.2 Gate 1.1.1.3 Ifp en0 Ifa 192.168.130.16
+failed to add: Host 1.1.1.1 Gate 1.1.1.2 Ifp en0 Ifa 192.168.130.16
 Add new[12]: Net 192.168.130.0/24 Ifp en0 Ifa 192.168.130.16
+Add new[14]: Net 224.0.0.0/4 Ifp en0 Ifa 192.168.130.16
+Add new[15]: Net 255.255.255.255/32 Ifp en0 Ifa 192.168.130.16
 =================> Apply 'test4', 'test18' End <=================
 
 =================> Apply 'test18', 'test4' Begin <=================
-Old routes ('test18') = <IPv4RouteList[14]> = {
+Old routes ('test18') = <IPv4RouteList[16]> = {
  0. Net 0.0.0.0/0 Gate 192.168.130.1 Ifp en0 Ifa 192.168.130.16
  1. Host 1.1.1.1 Gate 1.1.1.2 Ifp en0 Ifa 192.168.130.16
  2. Host 1.1.1.2 Gate 1.1.1.3 Ifp en0 Ifa 192.168.130.16
@@ -8162,22 +11466,26 @@ Old routes ('test18') = <IPv4RouteList[14]> = {
 11. Host 1.1.1.11 Gate 1.1.1.1 Ifp en0 Ifa 192.168.130.16
 12. Net 192.168.130.0/24 Ifp en0 Ifa 192.168.130.16
 13. Net 192.168.130.1/32 Ifp en0 Ifa 192.168.130.16
+14. Net 224.0.0.0/4 Ifp en0 Ifa 192.168.130.16
+15. Net 255.255.255.255/32 Ifp en0 Ifa 192.168.130.16
 }
 Add new[13]: Net 192.168.130.1/32 Ifp en0 Ifa 192.168.130.16
 Add new[0]: Net 0.0.0.0/0 Gate 192.168.130.1 Ifp en0 Ifa 192.168.130.16
-IPMonitor RouteProcess: routing loop detected, not adding: Host 1.1.1.11 Gate 1.1.1.1 Ifp en0 Ifa 192.168.130.16
-IPMonitor RouteProcess: failed to add: Host 1.1.1.10 Gate 1.1.1.11 Ifp en0 Ifa 192.168.130.16
-IPMonitor RouteProcess: failed to add: Host 1.1.1.9 Gate 1.1.1.10 Ifp en0 Ifa 192.168.130.16
-IPMonitor RouteProcess: failed to add: Host 1.1.1.8 Gate 1.1.1.9 Ifp en0 Ifa 192.168.130.16
-IPMonitor RouteProcess: failed to add: Host 1.1.1.7 Gate 1.1.1.8 Ifp en0 Ifa 192.168.130.16
-IPMonitor RouteProcess: failed to add: Host 1.1.1.6 Gate 1.1.1.7 Ifp en0 Ifa 192.168.130.16
-IPMonitor RouteProcess: failed to add: Host 1.1.1.5 Gate 1.1.1.6 Ifp en0 Ifa 192.168.130.16
-IPMonitor RouteProcess: failed to add: Host 1.1.1.4 Gate 1.1.1.5 Ifp en0 Ifa 192.168.130.16
-IPMonitor RouteProcess: failed to add: Host 1.1.1.3 Gate 1.1.1.4 Ifp en0 Ifa 192.168.130.16
-IPMonitor RouteProcess: failed to add: Host 1.1.1.2 Gate 1.1.1.3 Ifp en0 Ifa 192.168.130.16
-IPMonitor RouteProcess: failed to add: Host 1.1.1.1 Gate 1.1.1.2 Ifp en0 Ifa 192.168.130.16
+routing loop detected, not adding: Host 1.1.1.11 Gate 1.1.1.1 Ifp en0 Ifa 192.168.130.16
+failed to add: Host 1.1.1.10 Gate 1.1.1.11 Ifp en0 Ifa 192.168.130.16
+failed to add: Host 1.1.1.9 Gate 1.1.1.10 Ifp en0 Ifa 192.168.130.16
+failed to add: Host 1.1.1.8 Gate 1.1.1.9 Ifp en0 Ifa 192.168.130.16
+failed to add: Host 1.1.1.7 Gate 1.1.1.8 Ifp en0 Ifa 192.168.130.16
+failed to add: Host 1.1.1.6 Gate 1.1.1.7 Ifp en0 Ifa 192.168.130.16
+failed to add: Host 1.1.1.5 Gate 1.1.1.6 Ifp en0 Ifa 192.168.130.16
+failed to add: Host 1.1.1.4 Gate 1.1.1.5 Ifp en0 Ifa 192.168.130.16
+failed to add: Host 1.1.1.3 Gate 1.1.1.4 Ifp en0 Ifa 192.168.130.16
+failed to add: Host 1.1.1.2 Gate 1.1.1.3 Ifp en0 Ifa 192.168.130.16
+failed to add: Host 1.1.1.1 Gate 1.1.1.2 Ifp en0 Ifa 192.168.130.16
 Add new[12]: Net 192.168.130.0/24 Ifp en0 Ifa 192.168.130.16
-New Routes ('test4') = <IPv4RouteList[10]> = {
+Add new[14]: Net 224.0.0.0/4 Ifp en0 Ifa 192.168.130.16
+Add new[15]: Net 255.255.255.255/32 Ifp en0 Ifa 192.168.130.16
+New Routes ('test4') = <IPv4RouteList[14]> = {
  0. Net 0.0.0.0/0 Gate 17.202.20.1 Ifp en0 Ifa 17.202.40.191
  1. Net 0.0.0.0/0 Gate 17.202.20.1 Ifp en1 Ifa 17.202.42.24 [SCOPED]
  2. Net 10.0.0.0/24 Ifp en1 Ifa 10.0.0.20
@@ -8188,10 +11496,16 @@ New Routes ('test4') = <IPv4RouteList[10]> = {
  7. Net 17.202.20.1/32 Ifp en1 Ifa 17.202.42.24 [SCOPED]
  8. Net 17.202.40.0/22 Ifp en0 Ifa 17.202.40.191
  9. Net 17.202.40.0/22 Ifp en1 Ifa 17.202.42.24 [SCOPED]
+10. Net 224.0.0.0/4 Ifp en0 Ifa 17.202.40.191
+11. Net 224.0.0.0/4 Ifp en1 Ifa 17.202.42.24 [SCOPED]
+12. Net 255.255.255.255/32 Ifp en0 Ifa 17.202.40.191
+13. Net 255.255.255.255/32 Ifp en1 Ifa 17.202.42.24 [SCOPED]
 }
 Remove old[0]: Net 0.0.0.0/0 Gate 192.168.130.1 Ifp en0 Ifa 192.168.130.16
 Remove old[12]: Net 192.168.130.0/24 Ifp en0 Ifa 192.168.130.16
 Remove old[13]: Net 192.168.130.1/32 Ifp en0 Ifa 192.168.130.16
+Remove old[14]: Net 224.0.0.0/4 Ifp en0 Ifa 192.168.130.16
+Remove old[15]: Net 255.255.255.255/32 Ifp en0 Ifa 192.168.130.16
 Add new[6]: Net 17.202.20.1/32 Ifp en0 Ifa 17.202.40.191
 Add new[0]: Net 0.0.0.0/0 Gate 17.202.20.1 Ifp en0 Ifa 17.202.40.191
 Add new[7]: Net 17.202.20.1/32 Ifp en1 Ifa 17.202.42.24 [SCOPED]
@@ -8202,10 +11516,14 @@ Add new[4]: Net 10.0.0.1/32 Ifp en1 Ifa 10.0.0.20
 Add new[5]: Net 10.0.0.1/32 Ifp en0 Ifa 10.0.0.11 [SCOPED]
 Add new[8]: Net 17.202.40.0/22 Ifp en0 Ifa 17.202.40.191
 Add new[9]: Net 17.202.40.0/22 Ifp en1 Ifa 17.202.42.24 [SCOPED]
+Add new[10]: Net 224.0.0.0/4 Ifp en0 Ifa 17.202.40.191
+Add new[11]: Net 224.0.0.0/4 Ifp en1 Ifa 17.202.42.24 [SCOPED]
+Add new[12]: Net 255.255.255.255/32 Ifp en0 Ifa 17.202.40.191
+Add new[13]: Net 255.255.255.255/32 Ifp en1 Ifa 17.202.42.24 [SCOPED]
 =================> Apply 'test18', 'test4' End <=================
 
 =================> Apply 'test5', 'test6' Begin <=================
-Old routes ('test5') = <IPv4RouteList[12]> = {
+Old routes ('test5') = <IPv4RouteList[18]> = {
  0. Net 0.0.0.0/0 Gate 17.219.156.1 Ifp ppp0 Ifa 17.219.156.22
  1. Net 0.0.0.0/0 Gate 17.202.20.1 Ifp en0 Ifa 17.202.40.191 [SCOPED]
  2. Net 0.0.0.0/0 Gate 17.202.20.1 Ifp en1 Ifa 17.202.42.24 [SCOPED]
@@ -8218,6 +11536,12 @@ Old routes ('test5') = <IPv4RouteList[12]> = {
  9. Net 17.202.40.0/22 Ifp en0 Ifa 17.202.40.191
 10. Net 17.202.40.0/22 Ifp en1 Ifa 17.202.42.24 [SCOPED]
 11. Net 17.219.156.1/32 Ifp ppp0 Ifa 17.219.156.22
+12. Net 224.0.0.0/4 Ifp ppp0 Ifa 17.219.156.22
+13. Net 224.0.0.0/4 Ifp en0 Ifa 17.202.40.191 [SCOPED]
+14. Net 224.0.0.0/4 Ifp en1 Ifa 17.202.42.24 [SCOPED]
+15. Net 255.255.255.255/32 Ifp ppp0 Ifa 17.219.156.22
+16. Net 255.255.255.255/32 Ifp en0 Ifa 17.202.40.191 [SCOPED]
+17. Net 255.255.255.255/32 Ifp en1 Ifa 17.202.42.24 [SCOPED]
 }
 Add new[11]: Net 17.219.156.1/32 Ifp ppp0 Ifa 17.219.156.22
 Add new[0]: Net 0.0.0.0/0 Gate 17.219.156.1 Ifp ppp0 Ifa 17.219.156.22
@@ -8231,17 +11555,31 @@ Add new[5]: Net 10.0.0.1/32 Ifp en1 Ifa 10.0.0.20
 Add new[6]: Net 10.0.0.1/32 Ifp en0 Ifa 10.0.0.11 [SCOPED]
 Add new[9]: Net 17.202.40.0/22 Ifp en0 Ifa 17.202.40.191
 Add new[10]: Net 17.202.40.0/22 Ifp en1 Ifa 17.202.42.24 [SCOPED]
-New Routes ('test6') = <IPv4RouteList[10]> = {
+Add new[12]: Net 224.0.0.0/4 Ifp ppp0 Ifa 17.219.156.22
+Add new[13]: Net 224.0.0.0/4 Ifp en0 Ifa 17.202.40.191 [SCOPED]
+Add new[14]: Net 224.0.0.0/4 Ifp en1 Ifa 17.202.42.24 [SCOPED]
+Add new[15]: Net 255.255.255.255/32 Ifp ppp0 Ifa 17.219.156.22
+Add new[16]: Net 255.255.255.255/32 Ifp en0 Ifa 17.202.40.191 [SCOPED]
+Add new[17]: Net 255.255.255.255/32 Ifp en1 Ifa 17.202.42.24 [SCOPED]
+New Routes ('test6') = <IPv4RouteList[18]> = {
  0. Net 0.0.0.0/0 Gate 17.255.96.1 Ifp en2 Ifa 17.255.98.164
  1. Net 0.0.0.0/0 Gate 17.202.40.1 Ifp en0 Ifa 17.202.42.113 [SCOPED]
  2. Net 0.0.0.0/0 Gate 17.202.40.1 Ifp en1 Ifa 17.202.42.111 [SCOPED]
- 3. Net 0.0.0.0/0 Ifp fw0 Ifa 169.254.11.33 [SCOPED]
- 4. Net 17.202.40.0/22 Ifp en0 Ifa 17.202.42.113
- 5. Net 17.202.40.0/22 Ifp en1 Ifa 17.202.42.111 [SCOPED]
- 6. Net 17.202.40.1/32 Ifp en0 Ifa 17.202.42.113
- 7. Net 17.202.40.1/32 Ifp en1 Ifa 17.202.42.111 [SCOPED]
- 8. Net 17.255.96.0/20 Ifp en2 Ifa 17.255.98.164
- 9. Net 17.255.96.1/32 Ifp en2 Ifa 17.255.98.164
+ 3. Net 17.202.40.0/22 Ifp en0 Ifa 17.202.42.113
+ 4. Net 17.202.40.0/22 Ifp en1 Ifa 17.202.42.111 [SCOPED]
+ 5. Net 17.202.40.1/32 Ifp en0 Ifa 17.202.42.113
+ 6. Net 17.202.40.1/32 Ifp en1 Ifa 17.202.42.111 [SCOPED]
+ 7. Net 17.255.96.0/20 Ifp en2 Ifa 17.255.98.164
+ 8. Net 17.255.96.1/32 Ifp en2 Ifa 17.255.98.164
+ 9. Net 169.254.0.0/16 Ifp fw0 Ifa 169.254.11.33 [last]
+10. Net 224.0.0.0/4 Ifp en2 Ifa 17.255.98.164
+11. Net 224.0.0.0/4 Ifp en0 Ifa 17.202.42.113 [SCOPED]
+12. Net 224.0.0.0/4 Ifp en1 Ifa 17.202.42.111 [SCOPED]
+13. Net 224.0.0.0/4 Ifp fw0 Ifa 169.254.11.33 [last] [SCOPED]
+14. Net 255.255.255.255/32 Ifp en2 Ifa 17.255.98.164
+15. Net 255.255.255.255/32 Ifp en0 Ifa 17.202.42.113 [SCOPED]
+16. Net 255.255.255.255/32 Ifp en1 Ifa 17.202.42.111 [SCOPED]
+17. Net 255.255.255.255/32 Ifp fw0 Ifa 169.254.11.33 [last] [SCOPED]
 }
 Remove old[0]: Net 0.0.0.0/0 Gate 17.219.156.1 Ifp ppp0 Ifa 17.219.156.22
 Remove old[1]: Net 0.0.0.0/0 Gate 17.202.20.1 Ifp en0 Ifa 17.202.40.191 [SCOPED]
@@ -8255,42 +11593,72 @@ Remove old[8]: Net 17.202.20.1/32 Ifp en1 Ifa 17.202.42.24 [SCOPED]
 Remove old[9]: Net 17.202.40.0/22 Ifp en0 Ifa 17.202.40.191
 Remove old[10]: Net 17.202.40.0/22 Ifp en1 Ifa 17.202.42.24 [SCOPED]
 Remove old[11]: Net 17.219.156.1/32 Ifp ppp0 Ifa 17.219.156.22
-Add new[9]: Net 17.255.96.1/32 Ifp en2 Ifa 17.255.98.164
+Remove old[12]: Net 224.0.0.0/4 Ifp ppp0 Ifa 17.219.156.22
+Remove old[13]: Net 224.0.0.0/4 Ifp en0 Ifa 17.202.40.191 [SCOPED]
+Remove old[14]: Net 224.0.0.0/4 Ifp en1 Ifa 17.202.42.24 [SCOPED]
+Remove old[15]: Net 255.255.255.255/32 Ifp ppp0 Ifa 17.219.156.22
+Remove old[16]: Net 255.255.255.255/32 Ifp en0 Ifa 17.202.40.191 [SCOPED]
+Remove old[17]: Net 255.255.255.255/32 Ifp en1 Ifa 17.202.42.24 [SCOPED]
+Add new[8]: Net 17.255.96.1/32 Ifp en2 Ifa 17.255.98.164
 Add new[0]: Net 0.0.0.0/0 Gate 17.255.96.1 Ifp en2 Ifa 17.255.98.164
-Add new[6]: Net 17.202.40.1/32 Ifp en0 Ifa 17.202.42.113
+Add new[5]: Net 17.202.40.1/32 Ifp en0 Ifa 17.202.42.113
 Add new[1]: Net 0.0.0.0/0 Gate 17.202.40.1 Ifp en0 Ifa 17.202.42.113 [SCOPED]
-Add new[7]: Net 17.202.40.1/32 Ifp en1 Ifa 17.202.42.111 [SCOPED]
+Add new[6]: Net 17.202.40.1/32 Ifp en1 Ifa 17.202.42.111 [SCOPED]
 Add new[2]: Net 0.0.0.0/0 Gate 17.202.40.1 Ifp en1 Ifa 17.202.42.111 [SCOPED]
-Add new[3]: Net 0.0.0.0/0 Ifp fw0 Ifa 169.254.11.33 [SCOPED]
-Add new[4]: Net 17.202.40.0/22 Ifp en0 Ifa 17.202.42.113
-Add new[5]: Net 17.202.40.0/22 Ifp en1 Ifa 17.202.42.111 [SCOPED]
-Add new[8]: Net 17.255.96.0/20 Ifp en2 Ifa 17.255.98.164
+Add new[3]: Net 17.202.40.0/22 Ifp en0 Ifa 17.202.42.113
+Add new[4]: Net 17.202.40.0/22 Ifp en1 Ifa 17.202.42.111 [SCOPED]
+Add new[7]: Net 17.255.96.0/20 Ifp en2 Ifa 17.255.98.164
+Add new[9]: Net 169.254.0.0/16 Ifp fw0 Ifa 169.254.11.33 [last]
+Add new[10]: Net 224.0.0.0/4 Ifp en2 Ifa 17.255.98.164
+Add new[11]: Net 224.0.0.0/4 Ifp en0 Ifa 17.202.42.113 [SCOPED]
+Add new[12]: Net 224.0.0.0/4 Ifp en1 Ifa 17.202.42.111 [SCOPED]
+Add new[13]: Net 224.0.0.0/4 Ifp fw0 Ifa 169.254.11.33 [last] [SCOPED]
+Add new[14]: Net 255.255.255.255/32 Ifp en2 Ifa 17.255.98.164
+Add new[15]: Net 255.255.255.255/32 Ifp en0 Ifa 17.202.42.113 [SCOPED]
+Add new[16]: Net 255.255.255.255/32 Ifp en1 Ifa 17.202.42.111 [SCOPED]
+Add new[17]: Net 255.255.255.255/32 Ifp fw0 Ifa 169.254.11.33 [last] [SCOPED]
 =================> Apply 'test5', 'test6' End <=================
 
 =================> Apply 'test6', 'test5' Begin <=================
-Old routes ('test6') = <IPv4RouteList[10]> = {
+Old routes ('test6') = <IPv4RouteList[18]> = {
  0. Net 0.0.0.0/0 Gate 17.255.96.1 Ifp en2 Ifa 17.255.98.164
  1. Net 0.0.0.0/0 Gate 17.202.40.1 Ifp en0 Ifa 17.202.42.113 [SCOPED]
  2. Net 0.0.0.0/0 Gate 17.202.40.1 Ifp en1 Ifa 17.202.42.111 [SCOPED]
- 3. Net 0.0.0.0/0 Ifp fw0 Ifa 169.254.11.33 [SCOPED]
- 4. Net 17.202.40.0/22 Ifp en0 Ifa 17.202.42.113
- 5. Net 17.202.40.0/22 Ifp en1 Ifa 17.202.42.111 [SCOPED]
- 6. Net 17.202.40.1/32 Ifp en0 Ifa 17.202.42.113
- 7. Net 17.202.40.1/32 Ifp en1 Ifa 17.202.42.111 [SCOPED]
- 8. Net 17.255.96.0/20 Ifp en2 Ifa 17.255.98.164
- 9. Net 17.255.96.1/32 Ifp en2 Ifa 17.255.98.164
-}
-Add new[9]: Net 17.255.96.1/32 Ifp en2 Ifa 17.255.98.164
+ 3. Net 17.202.40.0/22 Ifp en0 Ifa 17.202.42.113
+ 4. Net 17.202.40.0/22 Ifp en1 Ifa 17.202.42.111 [SCOPED]
+ 5. Net 17.202.40.1/32 Ifp en0 Ifa 17.202.42.113
+ 6. Net 17.202.40.1/32 Ifp en1 Ifa 17.202.42.111 [SCOPED]
+ 7. Net 17.255.96.0/20 Ifp en2 Ifa 17.255.98.164
+ 8. Net 17.255.96.1/32 Ifp en2 Ifa 17.255.98.164
+ 9. Net 169.254.0.0/16 Ifp fw0 Ifa 169.254.11.33 [last]
+10. Net 224.0.0.0/4 Ifp en2 Ifa 17.255.98.164
+11. Net 224.0.0.0/4 Ifp en0 Ifa 17.202.42.113 [SCOPED]
+12. Net 224.0.0.0/4 Ifp en1 Ifa 17.202.42.111 [SCOPED]
+13. Net 224.0.0.0/4 Ifp fw0 Ifa 169.254.11.33 [last] [SCOPED]
+14. Net 255.255.255.255/32 Ifp en2 Ifa 17.255.98.164
+15. Net 255.255.255.255/32 Ifp en0 Ifa 17.202.42.113 [SCOPED]
+16. Net 255.255.255.255/32 Ifp en1 Ifa 17.202.42.111 [SCOPED]
+17. Net 255.255.255.255/32 Ifp fw0 Ifa 169.254.11.33 [last] [SCOPED]
+}
+Add new[8]: Net 17.255.96.1/32 Ifp en2 Ifa 17.255.98.164
 Add new[0]: Net 0.0.0.0/0 Gate 17.255.96.1 Ifp en2 Ifa 17.255.98.164
-Add new[6]: Net 17.202.40.1/32 Ifp en0 Ifa 17.202.42.113
+Add new[5]: Net 17.202.40.1/32 Ifp en0 Ifa 17.202.42.113
 Add new[1]: Net 0.0.0.0/0 Gate 17.202.40.1 Ifp en0 Ifa 17.202.42.113 [SCOPED]
-Add new[7]: Net 17.202.40.1/32 Ifp en1 Ifa 17.202.42.111 [SCOPED]
+Add new[6]: Net 17.202.40.1/32 Ifp en1 Ifa 17.202.42.111 [SCOPED]
 Add new[2]: Net 0.0.0.0/0 Gate 17.202.40.1 Ifp en1 Ifa 17.202.42.111 [SCOPED]
-Add new[3]: Net 0.0.0.0/0 Ifp fw0 Ifa 169.254.11.33 [SCOPED]
-Add new[4]: Net 17.202.40.0/22 Ifp en0 Ifa 17.202.42.113
-Add new[5]: Net 17.202.40.0/22 Ifp en1 Ifa 17.202.42.111 [SCOPED]
-Add new[8]: Net 17.255.96.0/20 Ifp en2 Ifa 17.255.98.164
-New Routes ('test5') = <IPv4RouteList[12]> = {
+Add new[3]: Net 17.202.40.0/22 Ifp en0 Ifa 17.202.42.113
+Add new[4]: Net 17.202.40.0/22 Ifp en1 Ifa 17.202.42.111 [SCOPED]
+Add new[7]: Net 17.255.96.0/20 Ifp en2 Ifa 17.255.98.164
+Add new[9]: Net 169.254.0.0/16 Ifp fw0 Ifa 169.254.11.33 [last]
+Add new[10]: Net 224.0.0.0/4 Ifp en2 Ifa 17.255.98.164
+Add new[11]: Net 224.0.0.0/4 Ifp en0 Ifa 17.202.42.113 [SCOPED]
+Add new[12]: Net 224.0.0.0/4 Ifp en1 Ifa 17.202.42.111 [SCOPED]
+Add new[13]: Net 224.0.0.0/4 Ifp fw0 Ifa 169.254.11.33 [last] [SCOPED]
+Add new[14]: Net 255.255.255.255/32 Ifp en2 Ifa 17.255.98.164
+Add new[15]: Net 255.255.255.255/32 Ifp en0 Ifa 17.202.42.113 [SCOPED]
+Add new[16]: Net 255.255.255.255/32 Ifp en1 Ifa 17.202.42.111 [SCOPED]
+Add new[17]: Net 255.255.255.255/32 Ifp fw0 Ifa 169.254.11.33 [last] [SCOPED]
+New Routes ('test5') = <IPv4RouteList[18]> = {
  0. Net 0.0.0.0/0 Gate 17.219.156.1 Ifp ppp0 Ifa 17.219.156.22
  1. Net 0.0.0.0/0 Gate 17.202.20.1 Ifp en0 Ifa 17.202.40.191 [SCOPED]
  2. Net 0.0.0.0/0 Gate 17.202.20.1 Ifp en1 Ifa 17.202.42.24 [SCOPED]
@@ -8303,17 +11671,31 @@ New Routes ('test5') = <IPv4RouteList[12]> = {
  9. Net 17.202.40.0/22 Ifp en0 Ifa 17.202.40.191
 10. Net 17.202.40.0/22 Ifp en1 Ifa 17.202.42.24 [SCOPED]
 11. Net 17.219.156.1/32 Ifp ppp0 Ifa 17.219.156.22
+12. Net 224.0.0.0/4 Ifp ppp0 Ifa 17.219.156.22
+13. Net 224.0.0.0/4 Ifp en0 Ifa 17.202.40.191 [SCOPED]
+14. Net 224.0.0.0/4 Ifp en1 Ifa 17.202.42.24 [SCOPED]
+15. Net 255.255.255.255/32 Ifp ppp0 Ifa 17.219.156.22
+16. Net 255.255.255.255/32 Ifp en0 Ifa 17.202.40.191 [SCOPED]
+17. Net 255.255.255.255/32 Ifp en1 Ifa 17.202.42.24 [SCOPED]
 }
 Remove old[0]: Net 0.0.0.0/0 Gate 17.255.96.1 Ifp en2 Ifa 17.255.98.164
 Remove old[1]: Net 0.0.0.0/0 Gate 17.202.40.1 Ifp en0 Ifa 17.202.42.113 [SCOPED]
 Remove old[2]: Net 0.0.0.0/0 Gate 17.202.40.1 Ifp en1 Ifa 17.202.42.111 [SCOPED]
-Remove old[3]: Net 0.0.0.0/0 Ifp fw0 Ifa 169.254.11.33 [SCOPED]
-Remove old[4]: Net 17.202.40.0/22 Ifp en0 Ifa 17.202.42.113
-Remove old[5]: Net 17.202.40.0/22 Ifp en1 Ifa 17.202.42.111 [SCOPED]
-Remove old[6]: Net 17.202.40.1/32 Ifp en0 Ifa 17.202.42.113
-Remove old[7]: Net 17.202.40.1/32 Ifp en1 Ifa 17.202.42.111 [SCOPED]
-Remove old[8]: Net 17.255.96.0/20 Ifp en2 Ifa 17.255.98.164
-Remove old[9]: Net 17.255.96.1/32 Ifp en2 Ifa 17.255.98.164
+Remove old[3]: Net 17.202.40.0/22 Ifp en0 Ifa 17.202.42.113
+Remove old[4]: Net 17.202.40.0/22 Ifp en1 Ifa 17.202.42.111 [SCOPED]
+Remove old[5]: Net 17.202.40.1/32 Ifp en0 Ifa 17.202.42.113
+Remove old[6]: Net 17.202.40.1/32 Ifp en1 Ifa 17.202.42.111 [SCOPED]
+Remove old[7]: Net 17.255.96.0/20 Ifp en2 Ifa 17.255.98.164
+Remove old[8]: Net 17.255.96.1/32 Ifp en2 Ifa 17.255.98.164
+Remove old[9]: Net 169.254.0.0/16 Ifp fw0 Ifa 169.254.11.33 [last]
+Remove old[10]: Net 224.0.0.0/4 Ifp en2 Ifa 17.255.98.164
+Remove old[11]: Net 224.0.0.0/4 Ifp en0 Ifa 17.202.42.113 [SCOPED]
+Remove old[12]: Net 224.0.0.0/4 Ifp en1 Ifa 17.202.42.111 [SCOPED]
+Remove old[13]: Net 224.0.0.0/4 Ifp fw0 Ifa 169.254.11.33 [last] [SCOPED]
+Remove old[14]: Net 255.255.255.255/32 Ifp en2 Ifa 17.255.98.164
+Remove old[15]: Net 255.255.255.255/32 Ifp en0 Ifa 17.202.42.113 [SCOPED]
+Remove old[16]: Net 255.255.255.255/32 Ifp en1 Ifa 17.202.42.111 [SCOPED]
+Remove old[17]: Net 255.255.255.255/32 Ifp fw0 Ifa 169.254.11.33 [last] [SCOPED]
 Add new[11]: Net 17.219.156.1/32 Ifp ppp0 Ifa 17.219.156.22
 Add new[0]: Net 0.0.0.0/0 Gate 17.219.156.1 Ifp ppp0 Ifa 17.219.156.22
 Add new[7]: Net 17.202.20.1/32 Ifp en0 Ifa 17.202.40.191
@@ -8326,10 +11708,16 @@ Add new[5]: Net 10.0.0.1/32 Ifp en1 Ifa 10.0.0.20
 Add new[6]: Net 10.0.0.1/32 Ifp en0 Ifa 10.0.0.11 [SCOPED]
 Add new[9]: Net 17.202.40.0/22 Ifp en0 Ifa 17.202.40.191
 Add new[10]: Net 17.202.40.0/22 Ifp en1 Ifa 17.202.42.24 [SCOPED]
+Add new[12]: Net 224.0.0.0/4 Ifp ppp0 Ifa 17.219.156.22
+Add new[13]: Net 224.0.0.0/4 Ifp en0 Ifa 17.202.40.191 [SCOPED]
+Add new[14]: Net 224.0.0.0/4 Ifp en1 Ifa 17.202.42.24 [SCOPED]
+Add new[15]: Net 255.255.255.255/32 Ifp ppp0 Ifa 17.219.156.22
+Add new[16]: Net 255.255.255.255/32 Ifp en0 Ifa 17.202.40.191 [SCOPED]
+Add new[17]: Net 255.255.255.255/32 Ifp en1 Ifa 17.202.42.24 [SCOPED]
 =================> Apply 'test6', 'test5' End <=================
 
 =================> Apply 'test5', 'test7' Begin <=================
-Old routes ('test5') = <IPv4RouteList[12]> = {
+Old routes ('test5') = <IPv4RouteList[18]> = {
  0. Net 0.0.0.0/0 Gate 17.219.156.1 Ifp ppp0 Ifa 17.219.156.22
  1. Net 0.0.0.0/0 Gate 17.202.20.1 Ifp en0 Ifa 17.202.40.191 [SCOPED]
  2. Net 0.0.0.0/0 Gate 17.202.20.1 Ifp en1 Ifa 17.202.42.24 [SCOPED]
@@ -8342,6 +11730,12 @@ Old routes ('test5') = <IPv4RouteList[12]> = {
  9. Net 17.202.40.0/22 Ifp en0 Ifa 17.202.40.191
 10. Net 17.202.40.0/22 Ifp en1 Ifa 17.202.42.24 [SCOPED]
 11. Net 17.219.156.1/32 Ifp ppp0 Ifa 17.219.156.22
+12. Net 224.0.0.0/4 Ifp ppp0 Ifa 17.219.156.22
+13. Net 224.0.0.0/4 Ifp en0 Ifa 17.202.40.191 [SCOPED]
+14. Net 224.0.0.0/4 Ifp en1 Ifa 17.202.42.24 [SCOPED]
+15. Net 255.255.255.255/32 Ifp ppp0 Ifa 17.219.156.22
+16. Net 255.255.255.255/32 Ifp en0 Ifa 17.202.40.191 [SCOPED]
+17. Net 255.255.255.255/32 Ifp en1 Ifa 17.202.42.24 [SCOPED]
 }
 Add new[11]: Net 17.219.156.1/32 Ifp ppp0 Ifa 17.219.156.22
 Add new[0]: Net 0.0.0.0/0 Gate 17.219.156.1 Ifp ppp0 Ifa 17.219.156.22
@@ -8355,17 +11749,31 @@ Add new[5]: Net 10.0.0.1/32 Ifp en1 Ifa 10.0.0.20
 Add new[6]: Net 10.0.0.1/32 Ifp en0 Ifa 10.0.0.11 [SCOPED]
 Add new[9]: Net 17.202.40.0/22 Ifp en0 Ifa 17.202.40.191
 Add new[10]: Net 17.202.40.0/22 Ifp en1 Ifa 17.202.42.24 [SCOPED]
-New Routes ('test7') = <IPv4RouteList[10]> = {
+Add new[12]: Net 224.0.0.0/4 Ifp ppp0 Ifa 17.219.156.22
+Add new[13]: Net 224.0.0.0/4 Ifp en0 Ifa 17.202.40.191 [SCOPED]
+Add new[14]: Net 224.0.0.0/4 Ifp en1 Ifa 17.202.42.24 [SCOPED]
+Add new[15]: Net 255.255.255.255/32 Ifp ppp0 Ifa 17.219.156.22
+Add new[16]: Net 255.255.255.255/32 Ifp en0 Ifa 17.202.40.191 [SCOPED]
+Add new[17]: Net 255.255.255.255/32 Ifp en1 Ifa 17.202.42.24 [SCOPED]
+New Routes ('test7') = <IPv4RouteList[18]> = {
  0. Net 0.0.0.0/0 Gate 17.255.96.1 Ifp en2 Ifa 17.255.98.164
  1. Net 0.0.0.0/0 Gate 17.202.40.1 Ifp en1 Ifa 17.202.42.111 [SCOPED]
  2. Net 0.0.0.0/0 Gate 17.202.40.1 Ifp en0 Ifa 17.202.42.113 [SCOPED]
- 3. Net 0.0.0.0/0 Ifp fw0 Ifa 169.254.11.33 [SCOPED]
- 4. Net 17.202.40.0/22 Ifp en1 Ifa 17.202.42.111
- 5. Net 17.202.40.0/22 Ifp en0 Ifa 17.202.42.113 [SCOPED]
- 6. Net 17.202.40.1/32 Ifp en1 Ifa 17.202.42.111
- 7. Net 17.202.40.1/32 Ifp en0 Ifa 17.202.42.113 [SCOPED]
- 8. Net 17.255.96.0/20 Ifp en2 Ifa 17.255.98.164
- 9. Net 17.255.96.1/32 Ifp en2 Ifa 17.255.98.164
+ 3. Net 17.202.40.0/22 Ifp en1 Ifa 17.202.42.111
+ 4. Net 17.202.40.0/22 Ifp en0 Ifa 17.202.42.113 [SCOPED]
+ 5. Net 17.202.40.1/32 Ifp en1 Ifa 17.202.42.111
+ 6. Net 17.202.40.1/32 Ifp en0 Ifa 17.202.42.113 [SCOPED]
+ 7. Net 17.255.96.0/20 Ifp en2 Ifa 17.255.98.164
+ 8. Net 17.255.96.1/32 Ifp en2 Ifa 17.255.98.164
+ 9. Net 169.254.0.0/16 Ifp fw0 Ifa 169.254.11.33 [last]
+10. Net 224.0.0.0/4 Ifp en2 Ifa 17.255.98.164
+11. Net 224.0.0.0/4 Ifp en1 Ifa 17.202.42.111 [SCOPED]
+12. Net 224.0.0.0/4 Ifp en0 Ifa 17.202.42.113 [SCOPED]
+13. Net 224.0.0.0/4 Ifp fw0 Ifa 169.254.11.33 [last] [SCOPED]
+14. Net 255.255.255.255/32 Ifp en2 Ifa 17.255.98.164
+15. Net 255.255.255.255/32 Ifp en1 Ifa 17.202.42.111 [SCOPED]
+16. Net 255.255.255.255/32 Ifp en0 Ifa 17.202.42.113 [SCOPED]
+17. Net 255.255.255.255/32 Ifp fw0 Ifa 169.254.11.33 [last] [SCOPED]
 }
 Remove old[0]: Net 0.0.0.0/0 Gate 17.219.156.1 Ifp ppp0 Ifa 17.219.156.22
 Remove old[1]: Net 0.0.0.0/0 Gate 17.202.20.1 Ifp en0 Ifa 17.202.40.191 [SCOPED]
@@ -8379,42 +11787,72 @@ Remove old[8]: Net 17.202.20.1/32 Ifp en1 Ifa 17.202.42.24 [SCOPED]
 Remove old[9]: Net 17.202.40.0/22 Ifp en0 Ifa 17.202.40.191
 Remove old[10]: Net 17.202.40.0/22 Ifp en1 Ifa 17.202.42.24 [SCOPED]
 Remove old[11]: Net 17.219.156.1/32 Ifp ppp0 Ifa 17.219.156.22
-Add new[9]: Net 17.255.96.1/32 Ifp en2 Ifa 17.255.98.164
+Remove old[12]: Net 224.0.0.0/4 Ifp ppp0 Ifa 17.219.156.22
+Remove old[13]: Net 224.0.0.0/4 Ifp en0 Ifa 17.202.40.191 [SCOPED]
+Remove old[14]: Net 224.0.0.0/4 Ifp en1 Ifa 17.202.42.24 [SCOPED]
+Remove old[15]: Net 255.255.255.255/32 Ifp ppp0 Ifa 17.219.156.22
+Remove old[16]: Net 255.255.255.255/32 Ifp en0 Ifa 17.202.40.191 [SCOPED]
+Remove old[17]: Net 255.255.255.255/32 Ifp en1 Ifa 17.202.42.24 [SCOPED]
+Add new[8]: Net 17.255.96.1/32 Ifp en2 Ifa 17.255.98.164
 Add new[0]: Net 0.0.0.0/0 Gate 17.255.96.1 Ifp en2 Ifa 17.255.98.164
-Add new[6]: Net 17.202.40.1/32 Ifp en1 Ifa 17.202.42.111
+Add new[5]: Net 17.202.40.1/32 Ifp en1 Ifa 17.202.42.111
 Add new[1]: Net 0.0.0.0/0 Gate 17.202.40.1 Ifp en1 Ifa 17.202.42.111 [SCOPED]
-Add new[7]: Net 17.202.40.1/32 Ifp en0 Ifa 17.202.42.113 [SCOPED]
+Add new[6]: Net 17.202.40.1/32 Ifp en0 Ifa 17.202.42.113 [SCOPED]
 Add new[2]: Net 0.0.0.0/0 Gate 17.202.40.1 Ifp en0 Ifa 17.202.42.113 [SCOPED]
-Add new[3]: Net 0.0.0.0/0 Ifp fw0 Ifa 169.254.11.33 [SCOPED]
-Add new[4]: Net 17.202.40.0/22 Ifp en1 Ifa 17.202.42.111
-Add new[5]: Net 17.202.40.0/22 Ifp en0 Ifa 17.202.42.113 [SCOPED]
-Add new[8]: Net 17.255.96.0/20 Ifp en2 Ifa 17.255.98.164
+Add new[3]: Net 17.202.40.0/22 Ifp en1 Ifa 17.202.42.111
+Add new[4]: Net 17.202.40.0/22 Ifp en0 Ifa 17.202.42.113 [SCOPED]
+Add new[7]: Net 17.255.96.0/20 Ifp en2 Ifa 17.255.98.164
+Add new[9]: Net 169.254.0.0/16 Ifp fw0 Ifa 169.254.11.33 [last]
+Add new[10]: Net 224.0.0.0/4 Ifp en2 Ifa 17.255.98.164
+Add new[11]: Net 224.0.0.0/4 Ifp en1 Ifa 17.202.42.111 [SCOPED]
+Add new[12]: Net 224.0.0.0/4 Ifp en0 Ifa 17.202.42.113 [SCOPED]
+Add new[13]: Net 224.0.0.0/4 Ifp fw0 Ifa 169.254.11.33 [last] [SCOPED]
+Add new[14]: Net 255.255.255.255/32 Ifp en2 Ifa 17.255.98.164
+Add new[15]: Net 255.255.255.255/32 Ifp en1 Ifa 17.202.42.111 [SCOPED]
+Add new[16]: Net 255.255.255.255/32 Ifp en0 Ifa 17.202.42.113 [SCOPED]
+Add new[17]: Net 255.255.255.255/32 Ifp fw0 Ifa 169.254.11.33 [last] [SCOPED]
 =================> Apply 'test5', 'test7' End <=================
 
 =================> Apply 'test7', 'test5' Begin <=================
-Old routes ('test7') = <IPv4RouteList[10]> = {
+Old routes ('test7') = <IPv4RouteList[18]> = {
  0. Net 0.0.0.0/0 Gate 17.255.96.1 Ifp en2 Ifa 17.255.98.164
  1. Net 0.0.0.0/0 Gate 17.202.40.1 Ifp en1 Ifa 17.202.42.111 [SCOPED]
  2. Net 0.0.0.0/0 Gate 17.202.40.1 Ifp en0 Ifa 17.202.42.113 [SCOPED]
- 3. Net 0.0.0.0/0 Ifp fw0 Ifa 169.254.11.33 [SCOPED]
- 4. Net 17.202.40.0/22 Ifp en1 Ifa 17.202.42.111
- 5. Net 17.202.40.0/22 Ifp en0 Ifa 17.202.42.113 [SCOPED]
- 6. Net 17.202.40.1/32 Ifp en1 Ifa 17.202.42.111
- 7. Net 17.202.40.1/32 Ifp en0 Ifa 17.202.42.113 [SCOPED]
- 8. Net 17.255.96.0/20 Ifp en2 Ifa 17.255.98.164
- 9. Net 17.255.96.1/32 Ifp en2 Ifa 17.255.98.164
-}
-Add new[9]: Net 17.255.96.1/32 Ifp en2 Ifa 17.255.98.164
+ 3. Net 17.202.40.0/22 Ifp en1 Ifa 17.202.42.111
+ 4. Net 17.202.40.0/22 Ifp en0 Ifa 17.202.42.113 [SCOPED]
+ 5. Net 17.202.40.1/32 Ifp en1 Ifa 17.202.42.111
+ 6. Net 17.202.40.1/32 Ifp en0 Ifa 17.202.42.113 [SCOPED]
+ 7. Net 17.255.96.0/20 Ifp en2 Ifa 17.255.98.164
+ 8. Net 17.255.96.1/32 Ifp en2 Ifa 17.255.98.164
+ 9. Net 169.254.0.0/16 Ifp fw0 Ifa 169.254.11.33 [last]
+10. Net 224.0.0.0/4 Ifp en2 Ifa 17.255.98.164
+11. Net 224.0.0.0/4 Ifp en1 Ifa 17.202.42.111 [SCOPED]
+12. Net 224.0.0.0/4 Ifp en0 Ifa 17.202.42.113 [SCOPED]
+13. Net 224.0.0.0/4 Ifp fw0 Ifa 169.254.11.33 [last] [SCOPED]
+14. Net 255.255.255.255/32 Ifp en2 Ifa 17.255.98.164
+15. Net 255.255.255.255/32 Ifp en1 Ifa 17.202.42.111 [SCOPED]
+16. Net 255.255.255.255/32 Ifp en0 Ifa 17.202.42.113 [SCOPED]
+17. Net 255.255.255.255/32 Ifp fw0 Ifa 169.254.11.33 [last] [SCOPED]
+}
+Add new[8]: Net 17.255.96.1/32 Ifp en2 Ifa 17.255.98.164
 Add new[0]: Net 0.0.0.0/0 Gate 17.255.96.1 Ifp en2 Ifa 17.255.98.164
-Add new[6]: Net 17.202.40.1/32 Ifp en1 Ifa 17.202.42.111
+Add new[5]: Net 17.202.40.1/32 Ifp en1 Ifa 17.202.42.111
 Add new[1]: Net 0.0.0.0/0 Gate 17.202.40.1 Ifp en1 Ifa 17.202.42.111 [SCOPED]
-Add new[7]: Net 17.202.40.1/32 Ifp en0 Ifa 17.202.42.113 [SCOPED]
+Add new[6]: Net 17.202.40.1/32 Ifp en0 Ifa 17.202.42.113 [SCOPED]
 Add new[2]: Net 0.0.0.0/0 Gate 17.202.40.1 Ifp en0 Ifa 17.202.42.113 [SCOPED]
-Add new[3]: Net 0.0.0.0/0 Ifp fw0 Ifa 169.254.11.33 [SCOPED]
-Add new[4]: Net 17.202.40.0/22 Ifp en1 Ifa 17.202.42.111
-Add new[5]: Net 17.202.40.0/22 Ifp en0 Ifa 17.202.42.113 [SCOPED]
-Add new[8]: Net 17.255.96.0/20 Ifp en2 Ifa 17.255.98.164
-New Routes ('test5') = <IPv4RouteList[12]> = {
+Add new[3]: Net 17.202.40.0/22 Ifp en1 Ifa 17.202.42.111
+Add new[4]: Net 17.202.40.0/22 Ifp en0 Ifa 17.202.42.113 [SCOPED]
+Add new[7]: Net 17.255.96.0/20 Ifp en2 Ifa 17.255.98.164
+Add new[9]: Net 169.254.0.0/16 Ifp fw0 Ifa 169.254.11.33 [last]
+Add new[10]: Net 224.0.0.0/4 Ifp en2 Ifa 17.255.98.164
+Add new[11]: Net 224.0.0.0/4 Ifp en1 Ifa 17.202.42.111 [SCOPED]
+Add new[12]: Net 224.0.0.0/4 Ifp en0 Ifa 17.202.42.113 [SCOPED]
+Add new[13]: Net 224.0.0.0/4 Ifp fw0 Ifa 169.254.11.33 [last] [SCOPED]
+Add new[14]: Net 255.255.255.255/32 Ifp en2 Ifa 17.255.98.164
+Add new[15]: Net 255.255.255.255/32 Ifp en1 Ifa 17.202.42.111 [SCOPED]
+Add new[16]: Net 255.255.255.255/32 Ifp en0 Ifa 17.202.42.113 [SCOPED]
+Add new[17]: Net 255.255.255.255/32 Ifp fw0 Ifa 169.254.11.33 [last] [SCOPED]
+New Routes ('test5') = <IPv4RouteList[18]> = {
  0. Net 0.0.0.0/0 Gate 17.219.156.1 Ifp ppp0 Ifa 17.219.156.22
  1. Net 0.0.0.0/0 Gate 17.202.20.1 Ifp en0 Ifa 17.202.40.191 [SCOPED]
  2. Net 0.0.0.0/0 Gate 17.202.20.1 Ifp en1 Ifa 17.202.42.24 [SCOPED]
@@ -8427,17 +11865,31 @@ New Routes ('test5') = <IPv4RouteList[12]> = {
  9. Net 17.202.40.0/22 Ifp en0 Ifa 17.202.40.191
 10. Net 17.202.40.0/22 Ifp en1 Ifa 17.202.42.24 [SCOPED]
 11. Net 17.219.156.1/32 Ifp ppp0 Ifa 17.219.156.22
+12. Net 224.0.0.0/4 Ifp ppp0 Ifa 17.219.156.22
+13. Net 224.0.0.0/4 Ifp en0 Ifa 17.202.40.191 [SCOPED]
+14. Net 224.0.0.0/4 Ifp en1 Ifa 17.202.42.24 [SCOPED]
+15. Net 255.255.255.255/32 Ifp ppp0 Ifa 17.219.156.22
+16. Net 255.255.255.255/32 Ifp en0 Ifa 17.202.40.191 [SCOPED]
+17. Net 255.255.255.255/32 Ifp en1 Ifa 17.202.42.24 [SCOPED]
 }
 Remove old[0]: Net 0.0.0.0/0 Gate 17.255.96.1 Ifp en2 Ifa 17.255.98.164
 Remove old[1]: Net 0.0.0.0/0 Gate 17.202.40.1 Ifp en1 Ifa 17.202.42.111 [SCOPED]
 Remove old[2]: Net 0.0.0.0/0 Gate 17.202.40.1 Ifp en0 Ifa 17.202.42.113 [SCOPED]
-Remove old[3]: Net 0.0.0.0/0 Ifp fw0 Ifa 169.254.11.33 [SCOPED]
-Remove old[4]: Net 17.202.40.0/22 Ifp en1 Ifa 17.202.42.111
-Remove old[5]: Net 17.202.40.0/22 Ifp en0 Ifa 17.202.42.113 [SCOPED]
-Remove old[6]: Net 17.202.40.1/32 Ifp en1 Ifa 17.202.42.111
-Remove old[7]: Net 17.202.40.1/32 Ifp en0 Ifa 17.202.42.113 [SCOPED]
-Remove old[8]: Net 17.255.96.0/20 Ifp en2 Ifa 17.255.98.164
-Remove old[9]: Net 17.255.96.1/32 Ifp en2 Ifa 17.255.98.164
+Remove old[3]: Net 17.202.40.0/22 Ifp en1 Ifa 17.202.42.111
+Remove old[4]: Net 17.202.40.0/22 Ifp en0 Ifa 17.202.42.113 [SCOPED]
+Remove old[5]: Net 17.202.40.1/32 Ifp en1 Ifa 17.202.42.111
+Remove old[6]: Net 17.202.40.1/32 Ifp en0 Ifa 17.202.42.113 [SCOPED]
+Remove old[7]: Net 17.255.96.0/20 Ifp en2 Ifa 17.255.98.164
+Remove old[8]: Net 17.255.96.1/32 Ifp en2 Ifa 17.255.98.164
+Remove old[9]: Net 169.254.0.0/16 Ifp fw0 Ifa 169.254.11.33 [last]
+Remove old[10]: Net 224.0.0.0/4 Ifp en2 Ifa 17.255.98.164
+Remove old[11]: Net 224.0.0.0/4 Ifp en1 Ifa 17.202.42.111 [SCOPED]
+Remove old[12]: Net 224.0.0.0/4 Ifp en0 Ifa 17.202.42.113 [SCOPED]
+Remove old[13]: Net 224.0.0.0/4 Ifp fw0 Ifa 169.254.11.33 [last] [SCOPED]
+Remove old[14]: Net 255.255.255.255/32 Ifp en2 Ifa 17.255.98.164
+Remove old[15]: Net 255.255.255.255/32 Ifp en1 Ifa 17.202.42.111 [SCOPED]
+Remove old[16]: Net 255.255.255.255/32 Ifp en0 Ifa 17.202.42.113 [SCOPED]
+Remove old[17]: Net 255.255.255.255/32 Ifp fw0 Ifa 169.254.11.33 [last] [SCOPED]
 Add new[11]: Net 17.219.156.1/32 Ifp ppp0 Ifa 17.219.156.22
 Add new[0]: Net 0.0.0.0/0 Gate 17.219.156.1 Ifp ppp0 Ifa 17.219.156.22
 Add new[7]: Net 17.202.20.1/32 Ifp en0 Ifa 17.202.40.191
@@ -8450,10 +11902,16 @@ Add new[5]: Net 10.0.0.1/32 Ifp en1 Ifa 10.0.0.20
 Add new[6]: Net 10.0.0.1/32 Ifp en0 Ifa 10.0.0.11 [SCOPED]
 Add new[9]: Net 17.202.40.0/22 Ifp en0 Ifa 17.202.40.191
 Add new[10]: Net 17.202.40.0/22 Ifp en1 Ifa 17.202.42.24 [SCOPED]
+Add new[12]: Net 224.0.0.0/4 Ifp ppp0 Ifa 17.219.156.22
+Add new[13]: Net 224.0.0.0/4 Ifp en0 Ifa 17.202.40.191 [SCOPED]
+Add new[14]: Net 224.0.0.0/4 Ifp en1 Ifa 17.202.42.24 [SCOPED]
+Add new[15]: Net 255.255.255.255/32 Ifp ppp0 Ifa 17.219.156.22
+Add new[16]: Net 255.255.255.255/32 Ifp en0 Ifa 17.202.40.191 [SCOPED]
+Add new[17]: Net 255.255.255.255/32 Ifp en1 Ifa 17.202.42.24 [SCOPED]
 =================> Apply 'test7', 'test5' End <=================
 
 =================> Apply 'test5', 'test8' Begin <=================
-Old routes ('test5') = <IPv4RouteList[12]> = {
+Old routes ('test5') = <IPv4RouteList[18]> = {
  0. Net 0.0.0.0/0 Gate 17.219.156.1 Ifp ppp0 Ifa 17.219.156.22
  1. Net 0.0.0.0/0 Gate 17.202.20.1 Ifp en0 Ifa 17.202.40.191 [SCOPED]
  2. Net 0.0.0.0/0 Gate 17.202.20.1 Ifp en1 Ifa 17.202.42.24 [SCOPED]
@@ -8466,6 +11924,12 @@ Old routes ('test5') = <IPv4RouteList[12]> = {
  9. Net 17.202.40.0/22 Ifp en0 Ifa 17.202.40.191
 10. Net 17.202.40.0/22 Ifp en1 Ifa 17.202.42.24 [SCOPED]
 11. Net 17.219.156.1/32 Ifp ppp0 Ifa 17.219.156.22
+12. Net 224.0.0.0/4 Ifp ppp0 Ifa 17.219.156.22
+13. Net 224.0.0.0/4 Ifp en0 Ifa 17.202.40.191 [SCOPED]
+14. Net 224.0.0.0/4 Ifp en1 Ifa 17.202.42.24 [SCOPED]
+15. Net 255.255.255.255/32 Ifp ppp0 Ifa 17.219.156.22
+16. Net 255.255.255.255/32 Ifp en0 Ifa 17.202.40.191 [SCOPED]
+17. Net 255.255.255.255/32 Ifp en1 Ifa 17.202.42.24 [SCOPED]
 }
 Add new[11]: Net 17.219.156.1/32 Ifp ppp0 Ifa 17.219.156.22
 Add new[0]: Net 0.0.0.0/0 Gate 17.219.156.1 Ifp ppp0 Ifa 17.219.156.22
@@ -8479,13 +11943,23 @@ Add new[5]: Net 10.0.0.1/32 Ifp en1 Ifa 10.0.0.20
 Add new[6]: Net 10.0.0.1/32 Ifp en0 Ifa 10.0.0.11 [SCOPED]
 Add new[9]: Net 17.202.40.0/22 Ifp en0 Ifa 17.202.40.191
 Add new[10]: Net 17.202.40.0/22 Ifp en1 Ifa 17.202.42.24 [SCOPED]
-New Routes ('test8') = <IPv4RouteList[6]> = {
+Add new[12]: Net 224.0.0.0/4 Ifp ppp0 Ifa 17.219.156.22
+Add new[13]: Net 224.0.0.0/4 Ifp en0 Ifa 17.202.40.191 [SCOPED]
+Add new[14]: Net 224.0.0.0/4 Ifp en1 Ifa 17.202.42.24 [SCOPED]
+Add new[15]: Net 255.255.255.255/32 Ifp ppp0 Ifa 17.219.156.22
+Add new[16]: Net 255.255.255.255/32 Ifp en0 Ifa 17.202.40.191 [SCOPED]
+Add new[17]: Net 255.255.255.255/32 Ifp en1 Ifa 17.202.42.24 [SCOPED]
+New Routes ('test8') = <IPv4RouteList[10]> = {
  0. Net 0.0.0.0/0 Gate 10.0.0.1 Ifp en0 Ifa 10.0.0.10
  1. Net 0.0.0.0/0 Gate 10.0.0.1 Ifp en1 Ifa 10.0.0.20 [SCOPED]
  2. Net 10.0.0.0/24 Ifp en0 Ifa 10.0.0.10
  3. Net 10.0.0.0/24 Ifp en1 Ifa 10.0.0.20 [SCOPED]
  4. Net 10.0.0.1/32 Ifp en0 Ifa 10.0.0.10
  5. Net 10.0.0.1/32 Ifp en1 Ifa 10.0.0.20 [SCOPED]
+ 6. Net 224.0.0.0/4 Ifp en0 Ifa 10.0.0.10
+ 7. Net 224.0.0.0/4 Ifp en1 Ifa 10.0.0.20 [SCOPED]
+ 8. Net 255.255.255.255/32 Ifp en0 Ifa 10.0.0.10
+ 9. Net 255.255.255.255/32 Ifp en1 Ifa 10.0.0.20 [SCOPED]
 }
 Remove old[0]: Net 0.0.0.0/0 Gate 17.219.156.1 Ifp ppp0 Ifa 17.219.156.22
 Remove old[1]: Net 0.0.0.0/0 Gate 17.202.20.1 Ifp en0 Ifa 17.202.40.191 [SCOPED]
@@ -8499,22 +11973,36 @@ Remove old[8]: Net 17.202.20.1/32 Ifp en1 Ifa 17.202.42.24 [SCOPED]
 Remove old[9]: Net 17.202.40.0/22 Ifp en0 Ifa 17.202.40.191
 Remove old[10]: Net 17.202.40.0/22 Ifp en1 Ifa 17.202.42.24 [SCOPED]
 Remove old[11]: Net 17.219.156.1/32 Ifp ppp0 Ifa 17.219.156.22
+Remove old[12]: Net 224.0.0.0/4 Ifp ppp0 Ifa 17.219.156.22
+Remove old[13]: Net 224.0.0.0/4 Ifp en0 Ifa 17.202.40.191 [SCOPED]
+Remove old[14]: Net 224.0.0.0/4 Ifp en1 Ifa 17.202.42.24 [SCOPED]
+Remove old[15]: Net 255.255.255.255/32 Ifp ppp0 Ifa 17.219.156.22
+Remove old[16]: Net 255.255.255.255/32 Ifp en0 Ifa 17.202.40.191 [SCOPED]
+Remove old[17]: Net 255.255.255.255/32 Ifp en1 Ifa 17.202.42.24 [SCOPED]
 Add new[4]: Net 10.0.0.1/32 Ifp en0 Ifa 10.0.0.10
 Add new[0]: Net 0.0.0.0/0 Gate 10.0.0.1 Ifp en0 Ifa 10.0.0.10
 Add new[5]: Net 10.0.0.1/32 Ifp en1 Ifa 10.0.0.20 [SCOPED]
 Add new[1]: Net 0.0.0.0/0 Gate 10.0.0.1 Ifp en1 Ifa 10.0.0.20 [SCOPED]
 Add new[2]: Net 10.0.0.0/24 Ifp en0 Ifa 10.0.0.10
 Add new[3]: Net 10.0.0.0/24 Ifp en1 Ifa 10.0.0.20 [SCOPED]
+Add new[6]: Net 224.0.0.0/4 Ifp en0 Ifa 10.0.0.10
+Add new[7]: Net 224.0.0.0/4 Ifp en1 Ifa 10.0.0.20 [SCOPED]
+Add new[8]: Net 255.255.255.255/32 Ifp en0 Ifa 10.0.0.10
+Add new[9]: Net 255.255.255.255/32 Ifp en1 Ifa 10.0.0.20 [SCOPED]
 =================> Apply 'test5', 'test8' End <=================
 
 =================> Apply 'test8', 'test5' Begin <=================
-Old routes ('test8') = <IPv4RouteList[6]> = {
+Old routes ('test8') = <IPv4RouteList[10]> = {
  0. Net 0.0.0.0/0 Gate 10.0.0.1 Ifp en0 Ifa 10.0.0.10
  1. Net 0.0.0.0/0 Gate 10.0.0.1 Ifp en1 Ifa 10.0.0.20 [SCOPED]
  2. Net 10.0.0.0/24 Ifp en0 Ifa 10.0.0.10
  3. Net 10.0.0.0/24 Ifp en1 Ifa 10.0.0.20 [SCOPED]
  4. Net 10.0.0.1/32 Ifp en0 Ifa 10.0.0.10
  5. Net 10.0.0.1/32 Ifp en1 Ifa 10.0.0.20 [SCOPED]
+ 6. Net 224.0.0.0/4 Ifp en0 Ifa 10.0.0.10
+ 7. Net 224.0.0.0/4 Ifp en1 Ifa 10.0.0.20 [SCOPED]
+ 8. Net 255.255.255.255/32 Ifp en0 Ifa 10.0.0.10
+ 9. Net 255.255.255.255/32 Ifp en1 Ifa 10.0.0.20 [SCOPED]
 }
 Add new[4]: Net 10.0.0.1/32 Ifp en0 Ifa 10.0.0.10
 Add new[0]: Net 0.0.0.0/0 Gate 10.0.0.1 Ifp en0 Ifa 10.0.0.10
@@ -8522,7 +12010,11 @@ Add new[5]: Net 10.0.0.1/32 Ifp en1 Ifa 10.0.0.20 [SCOPED]
 Add new[1]: Net 0.0.0.0/0 Gate 10.0.0.1 Ifp en1 Ifa 10.0.0.20 [SCOPED]
 Add new[2]: Net 10.0.0.0/24 Ifp en0 Ifa 10.0.0.10
 Add new[3]: Net 10.0.0.0/24 Ifp en1 Ifa 10.0.0.20 [SCOPED]
-New Routes ('test5') = <IPv4RouteList[12]> = {
+Add new[6]: Net 224.0.0.0/4 Ifp en0 Ifa 10.0.0.10
+Add new[7]: Net 224.0.0.0/4 Ifp en1 Ifa 10.0.0.20 [SCOPED]
+Add new[8]: Net 255.255.255.255/32 Ifp en0 Ifa 10.0.0.10
+Add new[9]: Net 255.255.255.255/32 Ifp en1 Ifa 10.0.0.20 [SCOPED]
+New Routes ('test5') = <IPv4RouteList[18]> = {
  0. Net 0.0.0.0/0 Gate 17.219.156.1 Ifp ppp0 Ifa 17.219.156.22
  1. Net 0.0.0.0/0 Gate 17.202.20.1 Ifp en0 Ifa 17.202.40.191 [SCOPED]
  2. Net 0.0.0.0/0 Gate 17.202.20.1 Ifp en1 Ifa 17.202.42.24 [SCOPED]
@@ -8535,6 +12027,12 @@ New Routes ('test5') = <IPv4RouteList[12]> = {
  9. Net 17.202.40.0/22 Ifp en0 Ifa 17.202.40.191
 10. Net 17.202.40.0/22 Ifp en1 Ifa 17.202.42.24 [SCOPED]
 11. Net 17.219.156.1/32 Ifp ppp0 Ifa 17.219.156.22
+12. Net 224.0.0.0/4 Ifp ppp0 Ifa 17.219.156.22
+13. Net 224.0.0.0/4 Ifp en0 Ifa 17.202.40.191 [SCOPED]
+14. Net 224.0.0.0/4 Ifp en1 Ifa 17.202.42.24 [SCOPED]
+15. Net 255.255.255.255/32 Ifp ppp0 Ifa 17.219.156.22
+16. Net 255.255.255.255/32 Ifp en0 Ifa 17.202.40.191 [SCOPED]
+17. Net 255.255.255.255/32 Ifp en1 Ifa 17.202.42.24 [SCOPED]
 }
 Remove old[0]: Net 0.0.0.0/0 Gate 10.0.0.1 Ifp en0 Ifa 10.0.0.10
 Remove old[1]: Net 0.0.0.0/0 Gate 10.0.0.1 Ifp en1 Ifa 10.0.0.20 [SCOPED]
@@ -8542,6 +12040,10 @@ Remove old[2]: Net 10.0.0.0/24 Ifp en0 Ifa 10.0.0.10
 Remove old[3]: Net 10.0.0.0/24 Ifp en1 Ifa 10.0.0.20 [SCOPED]
 Remove old[4]: Net 10.0.0.1/32 Ifp en0 Ifa 10.0.0.10
 Remove old[5]: Net 10.0.0.1/32 Ifp en1 Ifa 10.0.0.20 [SCOPED]
+Remove old[6]: Net 224.0.0.0/4 Ifp en0 Ifa 10.0.0.10
+Remove old[7]: Net 224.0.0.0/4 Ifp en1 Ifa 10.0.0.20 [SCOPED]
+Remove old[8]: Net 255.255.255.255/32 Ifp en0 Ifa 10.0.0.10
+Remove old[9]: Net 255.255.255.255/32 Ifp en1 Ifa 10.0.0.20 [SCOPED]
 Add new[11]: Net 17.219.156.1/32 Ifp ppp0 Ifa 17.219.156.22
 Add new[0]: Net 0.0.0.0/0 Gate 17.219.156.1 Ifp ppp0 Ifa 17.219.156.22
 Add new[7]: Net 17.202.20.1/32 Ifp en0 Ifa 17.202.40.191
@@ -8554,10 +12056,16 @@ Add new[5]: Net 10.0.0.1/32 Ifp en1 Ifa 10.0.0.20
 Add new[6]: Net 10.0.0.1/32 Ifp en0 Ifa 10.0.0.11 [SCOPED]
 Add new[9]: Net 17.202.40.0/22 Ifp en0 Ifa 17.202.40.191
 Add new[10]: Net 17.202.40.0/22 Ifp en1 Ifa 17.202.42.24 [SCOPED]
+Add new[12]: Net 224.0.0.0/4 Ifp ppp0 Ifa 17.219.156.22
+Add new[13]: Net 224.0.0.0/4 Ifp en0 Ifa 17.202.40.191 [SCOPED]
+Add new[14]: Net 224.0.0.0/4 Ifp en1 Ifa 17.202.42.24 [SCOPED]
+Add new[15]: Net 255.255.255.255/32 Ifp ppp0 Ifa 17.219.156.22
+Add new[16]: Net 255.255.255.255/32 Ifp en0 Ifa 17.202.40.191 [SCOPED]
+Add new[17]: Net 255.255.255.255/32 Ifp en1 Ifa 17.202.42.24 [SCOPED]
 =================> Apply 'test8', 'test5' End <=================
 
 =================> Apply 'test5', 'test9' Begin <=================
-Old routes ('test5') = <IPv4RouteList[12]> = {
+Old routes ('test5') = <IPv4RouteList[18]> = {
  0. Net 0.0.0.0/0 Gate 17.219.156.1 Ifp ppp0 Ifa 17.219.156.22
  1. Net 0.0.0.0/0 Gate 17.202.20.1 Ifp en0 Ifa 17.202.40.191 [SCOPED]
  2. Net 0.0.0.0/0 Gate 17.202.20.1 Ifp en1 Ifa 17.202.42.24 [SCOPED]
@@ -8570,6 +12078,12 @@ Old routes ('test5') = <IPv4RouteList[12]> = {
  9. Net 17.202.40.0/22 Ifp en0 Ifa 17.202.40.191
 10. Net 17.202.40.0/22 Ifp en1 Ifa 17.202.42.24 [SCOPED]
 11. Net 17.219.156.1/32 Ifp ppp0 Ifa 17.219.156.22
+12. Net 224.0.0.0/4 Ifp ppp0 Ifa 17.219.156.22
+13. Net 224.0.0.0/4 Ifp en0 Ifa 17.202.40.191 [SCOPED]
+14. Net 224.0.0.0/4 Ifp en1 Ifa 17.202.42.24 [SCOPED]
+15. Net 255.255.255.255/32 Ifp ppp0 Ifa 17.219.156.22
+16. Net 255.255.255.255/32 Ifp en0 Ifa 17.202.40.191 [SCOPED]
+17. Net 255.255.255.255/32 Ifp en1 Ifa 17.202.42.24 [SCOPED]
 }
 Add new[11]: Net 17.219.156.1/32 Ifp ppp0 Ifa 17.219.156.22
 Add new[0]: Net 0.0.0.0/0 Gate 17.219.156.1 Ifp ppp0 Ifa 17.219.156.22
@@ -8583,7 +12097,13 @@ Add new[5]: Net 10.0.0.1/32 Ifp en1 Ifa 10.0.0.20
 Add new[6]: Net 10.0.0.1/32 Ifp en0 Ifa 10.0.0.11 [SCOPED]
 Add new[9]: Net 17.202.40.0/22 Ifp en0 Ifa 17.202.40.191
 Add new[10]: Net 17.202.40.0/22 Ifp en1 Ifa 17.202.42.24 [SCOPED]
-New Routes ('test9') = <IPv4RouteList[9]> = {
+Add new[12]: Net 224.0.0.0/4 Ifp ppp0 Ifa 17.219.156.22
+Add new[13]: Net 224.0.0.0/4 Ifp en0 Ifa 17.202.40.191 [SCOPED]
+Add new[14]: Net 224.0.0.0/4 Ifp en1 Ifa 17.202.42.24 [SCOPED]
+Add new[15]: Net 255.255.255.255/32 Ifp ppp0 Ifa 17.219.156.22
+Add new[16]: Net 255.255.255.255/32 Ifp en0 Ifa 17.202.40.191 [SCOPED]
+Add new[17]: Net 255.255.255.255/32 Ifp en1 Ifa 17.202.42.24 [SCOPED]
+New Routes ('test9') = <IPv4RouteList[15]> = {
  0. Net 0.0.0.0/0 Gate 10.0.0.1 Ifp en1 Ifa 10.0.0.20 [first]
  1. Net 0.0.0.0/0 Gate 10.0.0.1 Ifp en0 Ifa 10.0.0.10 [SCOPED]
  2. Net 0.0.0.0/0 Gate 192.168.2.1 Ifp fw0 Ifa 192.168.2.30 [SCOPED]
@@ -8593,6 +12113,12 @@ New Routes ('test9') = <IPv4RouteList[9]> = {
  6. Net 10.0.0.1/32 Ifp en0 Ifa 10.0.0.10 [SCOPED]
  7. Net 192.168.2.0/24 Ifp fw0 Ifa 192.168.2.30
  8. Net 192.168.2.1/32 Ifp fw0 Ifa 192.168.2.30
+ 9. Net 224.0.0.0/4 Ifp en1 Ifa 10.0.0.20 [first]
+10. Net 224.0.0.0/4 Ifp en0 Ifa 10.0.0.10 [SCOPED]
+11. Net 224.0.0.0/4 Ifp fw0 Ifa 192.168.2.30 [SCOPED]
+12. Net 255.255.255.255/32 Ifp en1 Ifa 10.0.0.20 [first]
+13. Net 255.255.255.255/32 Ifp en0 Ifa 10.0.0.10 [SCOPED]
+14. Net 255.255.255.255/32 Ifp fw0 Ifa 192.168.2.30 [SCOPED]
 }
 Remove old[0]: Net 0.0.0.0/0 Gate 17.219.156.1 Ifp ppp0 Ifa 17.219.156.22
 Remove old[1]: Net 0.0.0.0/0 Gate 17.202.20.1 Ifp en0 Ifa 17.202.40.191 [SCOPED]
@@ -8604,6 +12130,12 @@ Remove old[8]: Net 17.202.20.1/32 Ifp en1 Ifa 17.202.42.24 [SCOPED]
 Remove old[9]: Net 17.202.40.0/22 Ifp en0 Ifa 17.202.40.191
 Remove old[10]: Net 17.202.40.0/22 Ifp en1 Ifa 17.202.42.24 [SCOPED]
 Remove old[11]: Net 17.219.156.1/32 Ifp ppp0 Ifa 17.219.156.22
+Remove old[12]: Net 224.0.0.0/4 Ifp ppp0 Ifa 17.219.156.22
+Remove old[13]: Net 224.0.0.0/4 Ifp en0 Ifa 17.202.40.191 [SCOPED]
+Remove old[14]: Net 224.0.0.0/4 Ifp en1 Ifa 17.202.42.24 [SCOPED]
+Remove old[15]: Net 255.255.255.255/32 Ifp ppp0 Ifa 17.219.156.22
+Remove old[16]: Net 255.255.255.255/32 Ifp en0 Ifa 17.202.40.191 [SCOPED]
+Remove old[17]: Net 255.255.255.255/32 Ifp en1 Ifa 17.202.42.24 [SCOPED]
 Add new[0]: Net 0.0.0.0/0 Gate 10.0.0.1 Ifp en1 Ifa 10.0.0.20 [first]
 Add new[6]: Net 10.0.0.1/32 Ifp en0 Ifa 10.0.0.10 [SCOPED]
 Add new[1]: Net 0.0.0.0/0 Gate 10.0.0.1 Ifp en0 Ifa 10.0.0.10 [SCOPED]
@@ -8611,10 +12143,16 @@ Add new[8]: Net 192.168.2.1/32 Ifp fw0 Ifa 192.168.2.30
 Add new[2]: Net 0.0.0.0/0 Gate 192.168.2.1 Ifp fw0 Ifa 192.168.2.30 [SCOPED]
 Add new[4]: Net 10.0.0.0/24 Ifp en0 Ifa 10.0.0.10 [SCOPED]
 Add new[7]: Net 192.168.2.0/24 Ifp fw0 Ifa 192.168.2.30
+Add new[9]: Net 224.0.0.0/4 Ifp en1 Ifa 10.0.0.20 [first]
+Add new[10]: Net 224.0.0.0/4 Ifp en0 Ifa 10.0.0.10 [SCOPED]
+Add new[11]: Net 224.0.0.0/4 Ifp fw0 Ifa 192.168.2.30 [SCOPED]
+Add new[12]: Net 255.255.255.255/32 Ifp en1 Ifa 10.0.0.20 [first]
+Add new[13]: Net 255.255.255.255/32 Ifp en0 Ifa 10.0.0.10 [SCOPED]
+Add new[14]: Net 255.255.255.255/32 Ifp fw0 Ifa 192.168.2.30 [SCOPED]
 =================> Apply 'test5', 'test9' End <=================
 
 =================> Apply 'test9', 'test5' Begin <=================
-Old routes ('test9') = <IPv4RouteList[9]> = {
+Old routes ('test9') = <IPv4RouteList[15]> = {
  0. Net 0.0.0.0/0 Gate 10.0.0.1 Ifp en1 Ifa 10.0.0.20 [first]
  1. Net 0.0.0.0/0 Gate 10.0.0.1 Ifp en0 Ifa 10.0.0.10 [SCOPED]
  2. Net 0.0.0.0/0 Gate 192.168.2.1 Ifp fw0 Ifa 192.168.2.30 [SCOPED]
@@ -8624,6 +12162,12 @@ Old routes ('test9') = <IPv4RouteList[9]> = {
  6. Net 10.0.0.1/32 Ifp en0 Ifa 10.0.0.10 [SCOPED]
  7. Net 192.168.2.0/24 Ifp fw0 Ifa 192.168.2.30
  8. Net 192.168.2.1/32 Ifp fw0 Ifa 192.168.2.30
+ 9. Net 224.0.0.0/4 Ifp en1 Ifa 10.0.0.20 [first]
+10. Net 224.0.0.0/4 Ifp en0 Ifa 10.0.0.10 [SCOPED]
+11. Net 224.0.0.0/4 Ifp fw0 Ifa 192.168.2.30 [SCOPED]
+12. Net 255.255.255.255/32 Ifp en1 Ifa 10.0.0.20 [first]
+13. Net 255.255.255.255/32 Ifp en0 Ifa 10.0.0.10 [SCOPED]
+14. Net 255.255.255.255/32 Ifp fw0 Ifa 192.168.2.30 [SCOPED]
 }
 Add new[5]: Net 10.0.0.1/32 Ifp en1 Ifa 10.0.0.20 [first]
 Add new[0]: Net 0.0.0.0/0 Gate 10.0.0.1 Ifp en1 Ifa 10.0.0.20 [first]
@@ -8634,7 +12178,13 @@ Add new[2]: Net 0.0.0.0/0 Gate 192.168.2.1 Ifp fw0 Ifa 192.168.2.30 [SCOPED]
 Add new[3]: Net 10.0.0.0/24 Ifp en1 Ifa 10.0.0.20 [first]
 Add new[4]: Net 10.0.0.0/24 Ifp en0 Ifa 10.0.0.10 [SCOPED]
 Add new[7]: Net 192.168.2.0/24 Ifp fw0 Ifa 192.168.2.30
-New Routes ('test5') = <IPv4RouteList[12]> = {
+Add new[9]: Net 224.0.0.0/4 Ifp en1 Ifa 10.0.0.20 [first]
+Add new[10]: Net 224.0.0.0/4 Ifp en0 Ifa 10.0.0.10 [SCOPED]
+Add new[11]: Net 224.0.0.0/4 Ifp fw0 Ifa 192.168.2.30 [SCOPED]
+Add new[12]: Net 255.255.255.255/32 Ifp en1 Ifa 10.0.0.20 [first]
+Add new[13]: Net 255.255.255.255/32 Ifp en0 Ifa 10.0.0.10 [SCOPED]
+Add new[14]: Net 255.255.255.255/32 Ifp fw0 Ifa 192.168.2.30 [SCOPED]
+New Routes ('test5') = <IPv4RouteList[18]> = {
  0. Net 0.0.0.0/0 Gate 17.219.156.1 Ifp ppp0 Ifa 17.219.156.22
  1. Net 0.0.0.0/0 Gate 17.202.20.1 Ifp en0 Ifa 17.202.40.191 [SCOPED]
  2. Net 0.0.0.0/0 Gate 17.202.20.1 Ifp en1 Ifa 17.202.42.24 [SCOPED]
@@ -8647,6 +12197,12 @@ New Routes ('test5') = <IPv4RouteList[12]> = {
  9. Net 17.202.40.0/22 Ifp en0 Ifa 17.202.40.191
 10. Net 17.202.40.0/22 Ifp en1 Ifa 17.202.42.24 [SCOPED]
 11. Net 17.219.156.1/32 Ifp ppp0 Ifa 17.219.156.22
+12. Net 224.0.0.0/4 Ifp ppp0 Ifa 17.219.156.22
+13. Net 224.0.0.0/4 Ifp en0 Ifa 17.202.40.191 [SCOPED]
+14. Net 224.0.0.0/4 Ifp en1 Ifa 17.202.42.24 [SCOPED]
+15. Net 255.255.255.255/32 Ifp ppp0 Ifa 17.219.156.22
+16. Net 255.255.255.255/32 Ifp en0 Ifa 17.202.40.191 [SCOPED]
+17. Net 255.255.255.255/32 Ifp en1 Ifa 17.202.42.24 [SCOPED]
 }
 Remove old[0]: Net 0.0.0.0/0 Gate 10.0.0.1 Ifp en1 Ifa 10.0.0.20 [first]
 Remove old[1]: Net 0.0.0.0/0 Gate 10.0.0.1 Ifp en0 Ifa 10.0.0.10 [SCOPED]
@@ -8655,6 +12211,12 @@ Remove old[4]: Net 10.0.0.0/24 Ifp en0 Ifa 10.0.0.10 [SCOPED]
 Remove old[6]: Net 10.0.0.1/32 Ifp en0 Ifa 10.0.0.10 [SCOPED]
 Remove old[7]: Net 192.168.2.0/24 Ifp fw0 Ifa 192.168.2.30
 Remove old[8]: Net 192.168.2.1/32 Ifp fw0 Ifa 192.168.2.30
+Remove old[9]: Net 224.0.0.0/4 Ifp en1 Ifa 10.0.0.20 [first]
+Remove old[10]: Net 224.0.0.0/4 Ifp en0 Ifa 10.0.0.10 [SCOPED]
+Remove old[11]: Net 224.0.0.0/4 Ifp fw0 Ifa 192.168.2.30 [SCOPED]
+Remove old[12]: Net 255.255.255.255/32 Ifp en1 Ifa 10.0.0.20 [first]
+Remove old[13]: Net 255.255.255.255/32 Ifp en0 Ifa 10.0.0.10 [SCOPED]
+Remove old[14]: Net 255.255.255.255/32 Ifp fw0 Ifa 192.168.2.30 [SCOPED]
 Add new[11]: Net 17.219.156.1/32 Ifp ppp0 Ifa 17.219.156.22
 Add new[0]: Net 0.0.0.0/0 Gate 17.219.156.1 Ifp ppp0 Ifa 17.219.156.22
 Add new[7]: Net 17.202.20.1/32 Ifp en0 Ifa 17.202.40.191
@@ -8665,10 +12227,16 @@ Add new[4]: Net 10.0.0.0/24 Ifp en0 Ifa 10.0.0.11 [SCOPED]
 Add new[6]: Net 10.0.0.1/32 Ifp en0 Ifa 10.0.0.11 [SCOPED]
 Add new[9]: Net 17.202.40.0/22 Ifp en0 Ifa 17.202.40.191
 Add new[10]: Net 17.202.40.0/22 Ifp en1 Ifa 17.202.42.24 [SCOPED]
+Add new[12]: Net 224.0.0.0/4 Ifp ppp0 Ifa 17.219.156.22
+Add new[13]: Net 224.0.0.0/4 Ifp en0 Ifa 17.202.40.191 [SCOPED]
+Add new[14]: Net 224.0.0.0/4 Ifp en1 Ifa 17.202.42.24 [SCOPED]
+Add new[15]: Net 255.255.255.255/32 Ifp ppp0 Ifa 17.219.156.22
+Add new[16]: Net 255.255.255.255/32 Ifp en0 Ifa 17.202.40.191 [SCOPED]
+Add new[17]: Net 255.255.255.255/32 Ifp en1 Ifa 17.202.42.24 [SCOPED]
 =================> Apply 'test9', 'test5' End <=================
 
 =================> Apply 'test5', 'test10' Begin <=================
-Old routes ('test5') = <IPv4RouteList[12]> = {
+Old routes ('test5') = <IPv4RouteList[18]> = {
  0. Net 0.0.0.0/0 Gate 17.219.156.1 Ifp ppp0 Ifa 17.219.156.22
  1. Net 0.0.0.0/0 Gate 17.202.20.1 Ifp en0 Ifa 17.202.40.191 [SCOPED]
  2. Net 0.0.0.0/0 Gate 17.202.20.1 Ifp en1 Ifa 17.202.42.24 [SCOPED]
@@ -8681,6 +12249,12 @@ Old routes ('test5') = <IPv4RouteList[12]> = {
  9. Net 17.202.40.0/22 Ifp en0 Ifa 17.202.40.191
 10. Net 17.202.40.0/22 Ifp en1 Ifa 17.202.42.24 [SCOPED]
 11. Net 17.219.156.1/32 Ifp ppp0 Ifa 17.219.156.22
+12. Net 224.0.0.0/4 Ifp ppp0 Ifa 17.219.156.22
+13. Net 224.0.0.0/4 Ifp en0 Ifa 17.202.40.191 [SCOPED]
+14. Net 224.0.0.0/4 Ifp en1 Ifa 17.202.42.24 [SCOPED]
+15. Net 255.255.255.255/32 Ifp ppp0 Ifa 17.219.156.22
+16. Net 255.255.255.255/32 Ifp en0 Ifa 17.202.40.191 [SCOPED]
+17. Net 255.255.255.255/32 Ifp en1 Ifa 17.202.42.24 [SCOPED]
 }
 Add new[11]: Net 17.219.156.1/32 Ifp ppp0 Ifa 17.219.156.22
 Add new[0]: Net 0.0.0.0/0 Gate 17.219.156.1 Ifp ppp0 Ifa 17.219.156.22
@@ -8694,7 +12268,13 @@ Add new[5]: Net 10.0.0.1/32 Ifp en1 Ifa 10.0.0.20
 Add new[6]: Net 10.0.0.1/32 Ifp en0 Ifa 10.0.0.11 [SCOPED]
 Add new[9]: Net 17.202.40.0/22 Ifp en0 Ifa 17.202.40.191
 Add new[10]: Net 17.202.40.0/22 Ifp en1 Ifa 17.202.42.24 [SCOPED]
-New Routes ('test10') = <IPv4RouteList[9]> = {
+Add new[12]: Net 224.0.0.0/4 Ifp ppp0 Ifa 17.219.156.22
+Add new[13]: Net 224.0.0.0/4 Ifp en0 Ifa 17.202.40.191 [SCOPED]
+Add new[14]: Net 224.0.0.0/4 Ifp en1 Ifa 17.202.42.24 [SCOPED]
+Add new[15]: Net 255.255.255.255/32 Ifp ppp0 Ifa 17.219.156.22
+Add new[16]: Net 255.255.255.255/32 Ifp en0 Ifa 17.202.40.191 [SCOPED]
+Add new[17]: Net 255.255.255.255/32 Ifp en1 Ifa 17.202.42.24 [SCOPED]
+New Routes ('test10') = <IPv4RouteList[15]> = {
  0. Net 0.0.0.0/0 Gate 10.0.0.1 Ifp en1 Ifa 10.0.0.20
  1. Net 0.0.0.0/0 Gate 192.168.2.1 Ifp fw0 Ifa 192.168.2.30 [SCOPED]
  2. Net 0.0.0.0/0 Gate 10.0.0.1 Ifp en0 Ifa 10.0.0.10 [last] [SCOPED]
@@ -8704,6 +12284,12 @@ New Routes ('test10') = <IPv4RouteList[9]> = {
  6. Net 10.0.0.1/32 Ifp en0 Ifa 10.0.0.10 [last] [SCOPED]
  7. Net 192.168.2.0/24 Ifp fw0 Ifa 192.168.2.30
  8. Net 192.168.2.1/32 Ifp fw0 Ifa 192.168.2.30
+ 9. Net 224.0.0.0/4 Ifp en1 Ifa 10.0.0.20
+10. Net 224.0.0.0/4 Ifp fw0 Ifa 192.168.2.30 [SCOPED]
+11. Net 224.0.0.0/4 Ifp en0 Ifa 10.0.0.10 [last] [SCOPED]
+12. Net 255.255.255.255/32 Ifp en1 Ifa 10.0.0.20
+13. Net 255.255.255.255/32 Ifp fw0 Ifa 192.168.2.30 [SCOPED]
+14. Net 255.255.255.255/32 Ifp en0 Ifa 10.0.0.10 [last] [SCOPED]
 }
 Remove old[0]: Net 0.0.0.0/0 Gate 17.219.156.1 Ifp ppp0 Ifa 17.219.156.22
 Remove old[1]: Net 0.0.0.0/0 Gate 17.202.20.1 Ifp en0 Ifa 17.202.40.191 [SCOPED]
@@ -8715,6 +12301,12 @@ Remove old[8]: Net 17.202.20.1/32 Ifp en1 Ifa 17.202.42.24 [SCOPED]
 Remove old[9]: Net 17.202.40.0/22 Ifp en0 Ifa 17.202.40.191
 Remove old[10]: Net 17.202.40.0/22 Ifp en1 Ifa 17.202.42.24 [SCOPED]
 Remove old[11]: Net 17.219.156.1/32 Ifp ppp0 Ifa 17.219.156.22
+Remove old[12]: Net 224.0.0.0/4 Ifp ppp0 Ifa 17.219.156.22
+Remove old[13]: Net 224.0.0.0/4 Ifp en0 Ifa 17.202.40.191 [SCOPED]
+Remove old[14]: Net 224.0.0.0/4 Ifp en1 Ifa 17.202.42.24 [SCOPED]
+Remove old[15]: Net 255.255.255.255/32 Ifp ppp0 Ifa 17.219.156.22
+Remove old[16]: Net 255.255.255.255/32 Ifp en0 Ifa 17.202.40.191 [SCOPED]
+Remove old[17]: Net 255.255.255.255/32 Ifp en1 Ifa 17.202.42.24 [SCOPED]
 Add new[0]: Net 0.0.0.0/0 Gate 10.0.0.1 Ifp en1 Ifa 10.0.0.20
 Add new[8]: Net 192.168.2.1/32 Ifp fw0 Ifa 192.168.2.30
 Add new[1]: Net 0.0.0.0/0 Gate 192.168.2.1 Ifp fw0 Ifa 192.168.2.30 [SCOPED]
@@ -8722,10 +12314,16 @@ Add new[6]: Net 10.0.0.1/32 Ifp en0 Ifa 10.0.0.10 [last] [SCOPED]
 Add new[2]: Net 0.0.0.0/0 Gate 10.0.0.1 Ifp en0 Ifa 10.0.0.10 [last] [SCOPED]
 Add new[4]: Net 10.0.0.0/24 Ifp en0 Ifa 10.0.0.10 [last] [SCOPED]
 Add new[7]: Net 192.168.2.0/24 Ifp fw0 Ifa 192.168.2.30
+Add new[9]: Net 224.0.0.0/4 Ifp en1 Ifa 10.0.0.20
+Add new[10]: Net 224.0.0.0/4 Ifp fw0 Ifa 192.168.2.30 [SCOPED]
+Add new[11]: Net 224.0.0.0/4 Ifp en0 Ifa 10.0.0.10 [last] [SCOPED]
+Add new[12]: Net 255.255.255.255/32 Ifp en1 Ifa 10.0.0.20
+Add new[13]: Net 255.255.255.255/32 Ifp fw0 Ifa 192.168.2.30 [SCOPED]
+Add new[14]: Net 255.255.255.255/32 Ifp en0 Ifa 10.0.0.10 [last] [SCOPED]
 =================> Apply 'test5', 'test10' End <=================
 
 =================> Apply 'test10', 'test5' Begin <=================
-Old routes ('test10') = <IPv4RouteList[9]> = {
+Old routes ('test10') = <IPv4RouteList[15]> = {
  0. Net 0.0.0.0/0 Gate 10.0.0.1 Ifp en1 Ifa 10.0.0.20
  1. Net 0.0.0.0/0 Gate 192.168.2.1 Ifp fw0 Ifa 192.168.2.30 [SCOPED]
  2. Net 0.0.0.0/0 Gate 10.0.0.1 Ifp en0 Ifa 10.0.0.10 [last] [SCOPED]
@@ -8735,6 +12333,12 @@ Old routes ('test10') = <IPv4RouteList[9]> = {
  6. Net 10.0.0.1/32 Ifp en0 Ifa 10.0.0.10 [last] [SCOPED]
  7. Net 192.168.2.0/24 Ifp fw0 Ifa 192.168.2.30
  8. Net 192.168.2.1/32 Ifp fw0 Ifa 192.168.2.30
+ 9. Net 224.0.0.0/4 Ifp en1 Ifa 10.0.0.20
+10. Net 224.0.0.0/4 Ifp fw0 Ifa 192.168.2.30 [SCOPED]
+11. Net 224.0.0.0/4 Ifp en0 Ifa 10.0.0.10 [last] [SCOPED]
+12. Net 255.255.255.255/32 Ifp en1 Ifa 10.0.0.20
+13. Net 255.255.255.255/32 Ifp fw0 Ifa 192.168.2.30 [SCOPED]
+14. Net 255.255.255.255/32 Ifp en0 Ifa 10.0.0.10 [last] [SCOPED]
 }
 Add new[5]: Net 10.0.0.1/32 Ifp en1 Ifa 10.0.0.20
 Add new[0]: Net 0.0.0.0/0 Gate 10.0.0.1 Ifp en1 Ifa 10.0.0.20
@@ -8745,7 +12349,13 @@ Add new[2]: Net 0.0.0.0/0 Gate 10.0.0.1 Ifp en0 Ifa 10.0.0.10 [last] [SCOPED]
 Add new[3]: Net 10.0.0.0/24 Ifp en1 Ifa 10.0.0.20
 Add new[4]: Net 10.0.0.0/24 Ifp en0 Ifa 10.0.0.10 [last] [SCOPED]
 Add new[7]: Net 192.168.2.0/24 Ifp fw0 Ifa 192.168.2.30
-New Routes ('test5') = <IPv4RouteList[12]> = {
+Add new[9]: Net 224.0.0.0/4 Ifp en1 Ifa 10.0.0.20
+Add new[10]: Net 224.0.0.0/4 Ifp fw0 Ifa 192.168.2.30 [SCOPED]
+Add new[11]: Net 224.0.0.0/4 Ifp en0 Ifa 10.0.0.10 [last] [SCOPED]
+Add new[12]: Net 255.255.255.255/32 Ifp en1 Ifa 10.0.0.20
+Add new[13]: Net 255.255.255.255/32 Ifp fw0 Ifa 192.168.2.30 [SCOPED]
+Add new[14]: Net 255.255.255.255/32 Ifp en0 Ifa 10.0.0.10 [last] [SCOPED]
+New Routes ('test5') = <IPv4RouteList[18]> = {
  0. Net 0.0.0.0/0 Gate 17.219.156.1 Ifp ppp0 Ifa 17.219.156.22
  1. Net 0.0.0.0/0 Gate 17.202.20.1 Ifp en0 Ifa 17.202.40.191 [SCOPED]
  2. Net 0.0.0.0/0 Gate 17.202.20.1 Ifp en1 Ifa 17.202.42.24 [SCOPED]
@@ -8758,6 +12368,12 @@ New Routes ('test5') = <IPv4RouteList[12]> = {
  9. Net 17.202.40.0/22 Ifp en0 Ifa 17.202.40.191
 10. Net 17.202.40.0/22 Ifp en1 Ifa 17.202.42.24 [SCOPED]
 11. Net 17.219.156.1/32 Ifp ppp0 Ifa 17.219.156.22
+12. Net 224.0.0.0/4 Ifp ppp0 Ifa 17.219.156.22
+13. Net 224.0.0.0/4 Ifp en0 Ifa 17.202.40.191 [SCOPED]
+14. Net 224.0.0.0/4 Ifp en1 Ifa 17.202.42.24 [SCOPED]
+15. Net 255.255.255.255/32 Ifp ppp0 Ifa 17.219.156.22
+16. Net 255.255.255.255/32 Ifp en0 Ifa 17.202.40.191 [SCOPED]
+17. Net 255.255.255.255/32 Ifp en1 Ifa 17.202.42.24 [SCOPED]
 }
 Remove old[0]: Net 0.0.0.0/0 Gate 10.0.0.1 Ifp en1 Ifa 10.0.0.20
 Remove old[1]: Net 0.0.0.0/0 Gate 192.168.2.1 Ifp fw0 Ifa 192.168.2.30 [SCOPED]
@@ -8766,6 +12382,12 @@ Remove old[4]: Net 10.0.0.0/24 Ifp en0 Ifa 10.0.0.10 [last] [SCOPED]
 Remove old[6]: Net 10.0.0.1/32 Ifp en0 Ifa 10.0.0.10 [last] [SCOPED]
 Remove old[7]: Net 192.168.2.0/24 Ifp fw0 Ifa 192.168.2.30
 Remove old[8]: Net 192.168.2.1/32 Ifp fw0 Ifa 192.168.2.30
+Remove old[9]: Net 224.0.0.0/4 Ifp en1 Ifa 10.0.0.20
+Remove old[10]: Net 224.0.0.0/4 Ifp fw0 Ifa 192.168.2.30 [SCOPED]
+Remove old[11]: Net 224.0.0.0/4 Ifp en0 Ifa 10.0.0.10 [last] [SCOPED]
+Remove old[12]: Net 255.255.255.255/32 Ifp en1 Ifa 10.0.0.20
+Remove old[13]: Net 255.255.255.255/32 Ifp fw0 Ifa 192.168.2.30 [SCOPED]
+Remove old[14]: Net 255.255.255.255/32 Ifp en0 Ifa 10.0.0.10 [last] [SCOPED]
 Add new[11]: Net 17.219.156.1/32 Ifp ppp0 Ifa 17.219.156.22
 Add new[0]: Net 0.0.0.0/0 Gate 17.219.156.1 Ifp ppp0 Ifa 17.219.156.22
 Add new[7]: Net 17.202.20.1/32 Ifp en0 Ifa 17.202.40.191
@@ -8776,10 +12398,16 @@ Add new[4]: Net 10.0.0.0/24 Ifp en0 Ifa 10.0.0.11 [SCOPED]
 Add new[6]: Net 10.0.0.1/32 Ifp en0 Ifa 10.0.0.11 [SCOPED]
 Add new[9]: Net 17.202.40.0/22 Ifp en0 Ifa 17.202.40.191
 Add new[10]: Net 17.202.40.0/22 Ifp en1 Ifa 17.202.42.24 [SCOPED]
+Add new[12]: Net 224.0.0.0/4 Ifp ppp0 Ifa 17.219.156.22
+Add new[13]: Net 224.0.0.0/4 Ifp en0 Ifa 17.202.40.191 [SCOPED]
+Add new[14]: Net 224.0.0.0/4 Ifp en1 Ifa 17.202.42.24 [SCOPED]
+Add new[15]: Net 255.255.255.255/32 Ifp ppp0 Ifa 17.219.156.22
+Add new[16]: Net 255.255.255.255/32 Ifp en0 Ifa 17.202.40.191 [SCOPED]
+Add new[17]: Net 255.255.255.255/32 Ifp en1 Ifa 17.202.42.24 [SCOPED]
 =================> Apply 'test10', 'test5' End <=================
 
 =================> Apply 'test5', 'test11' Begin <=================
-Old routes ('test5') = <IPv4RouteList[12]> = {
+Old routes ('test5') = <IPv4RouteList[18]> = {
  0. Net 0.0.0.0/0 Gate 17.219.156.1 Ifp ppp0 Ifa 17.219.156.22
  1. Net 0.0.0.0/0 Gate 17.202.20.1 Ifp en0 Ifa 17.202.40.191 [SCOPED]
  2. Net 0.0.0.0/0 Gate 17.202.20.1 Ifp en1 Ifa 17.202.42.24 [SCOPED]
@@ -8792,6 +12420,12 @@ Old routes ('test5') = <IPv4RouteList[12]> = {
  9. Net 17.202.40.0/22 Ifp en0 Ifa 17.202.40.191
 10. Net 17.202.40.0/22 Ifp en1 Ifa 17.202.42.24 [SCOPED]
 11. Net 17.219.156.1/32 Ifp ppp0 Ifa 17.219.156.22
+12. Net 224.0.0.0/4 Ifp ppp0 Ifa 17.219.156.22
+13. Net 224.0.0.0/4 Ifp en0 Ifa 17.202.40.191 [SCOPED]
+14. Net 224.0.0.0/4 Ifp en1 Ifa 17.202.42.24 [SCOPED]
+15. Net 255.255.255.255/32 Ifp ppp0 Ifa 17.219.156.22
+16. Net 255.255.255.255/32 Ifp en0 Ifa 17.202.40.191 [SCOPED]
+17. Net 255.255.255.255/32 Ifp en1 Ifa 17.202.42.24 [SCOPED]
 }
 Add new[11]: Net 17.219.156.1/32 Ifp ppp0 Ifa 17.219.156.22
 Add new[0]: Net 0.0.0.0/0 Gate 17.219.156.1 Ifp ppp0 Ifa 17.219.156.22
@@ -8805,7 +12439,13 @@ Add new[5]: Net 10.0.0.1/32 Ifp en1 Ifa 10.0.0.20
 Add new[6]: Net 10.0.0.1/32 Ifp en0 Ifa 10.0.0.11 [SCOPED]
 Add new[9]: Net 17.202.40.0/22 Ifp en0 Ifa 17.202.40.191
 Add new[10]: Net 17.202.40.0/22 Ifp en1 Ifa 17.202.42.24 [SCOPED]
-New Routes ('test11') = <IPv4RouteList[9]> = {
+Add new[12]: Net 224.0.0.0/4 Ifp ppp0 Ifa 17.219.156.22
+Add new[13]: Net 224.0.0.0/4 Ifp en0 Ifa 17.202.40.191 [SCOPED]
+Add new[14]: Net 224.0.0.0/4 Ifp en1 Ifa 17.202.42.24 [SCOPED]
+Add new[15]: Net 255.255.255.255/32 Ifp ppp0 Ifa 17.219.156.22
+Add new[16]: Net 255.255.255.255/32 Ifp en0 Ifa 17.202.40.191 [SCOPED]
+Add new[17]: Net 255.255.255.255/32 Ifp en1 Ifa 17.202.42.24 [SCOPED]
+New Routes ('test11') = <IPv4RouteList[15]> = {
  0. Net 0.0.0.0/0 Gate 10.0.0.1 Ifp en1 Ifa 10.0.0.20
  1. Net 0.0.0.0/0 Gate 192.168.2.1 Ifp fw0 Ifa 192.168.2.30 [SCOPED]
  2. Net 0.0.0.0/0 Gate 10.0.0.1 Ifp en0 Ifa 10.0.0.10 [never] [SCOPED]
@@ -8815,6 +12455,12 @@ New Routes ('test11') = <IPv4RouteList[9]> = {
  6. Net 10.0.0.1/32 Ifp en0 Ifa 10.0.0.10 [last] [SCOPED]
  7. Net 192.168.2.0/24 Ifp fw0 Ifa 192.168.2.30
  8. Net 192.168.2.1/32 Ifp fw0 Ifa 192.168.2.30
+ 9. Net 224.0.0.0/4 Ifp en1 Ifa 10.0.0.20
+10. Net 224.0.0.0/4 Ifp fw0 Ifa 192.168.2.30 [SCOPED]
+11. Net 224.0.0.0/4 Ifp en0 Ifa 10.0.0.10 [last] [SCOPED]
+12. Net 255.255.255.255/32 Ifp en1 Ifa 10.0.0.20
+13. Net 255.255.255.255/32 Ifp fw0 Ifa 192.168.2.30 [SCOPED]
+14. Net 255.255.255.255/32 Ifp en0 Ifa 10.0.0.10 [last] [SCOPED]
 }
 Remove old[0]: Net 0.0.0.0/0 Gate 17.219.156.1 Ifp ppp0 Ifa 17.219.156.22
 Remove old[1]: Net 0.0.0.0/0 Gate 17.202.20.1 Ifp en0 Ifa 17.202.40.191 [SCOPED]
@@ -8826,6 +12472,12 @@ Remove old[8]: Net 17.202.20.1/32 Ifp en1 Ifa 17.202.42.24 [SCOPED]
 Remove old[9]: Net 17.202.40.0/22 Ifp en0 Ifa 17.202.40.191
 Remove old[10]: Net 17.202.40.0/22 Ifp en1 Ifa 17.202.42.24 [SCOPED]
 Remove old[11]: Net 17.219.156.1/32 Ifp ppp0 Ifa 17.219.156.22
+Remove old[12]: Net 224.0.0.0/4 Ifp ppp0 Ifa 17.219.156.22
+Remove old[13]: Net 224.0.0.0/4 Ifp en0 Ifa 17.202.40.191 [SCOPED]
+Remove old[14]: Net 224.0.0.0/4 Ifp en1 Ifa 17.202.42.24 [SCOPED]
+Remove old[15]: Net 255.255.255.255/32 Ifp ppp0 Ifa 17.219.156.22
+Remove old[16]: Net 255.255.255.255/32 Ifp en0 Ifa 17.202.40.191 [SCOPED]
+Remove old[17]: Net 255.255.255.255/32 Ifp en1 Ifa 17.202.42.24 [SCOPED]
 Add new[0]: Net 0.0.0.0/0 Gate 10.0.0.1 Ifp en1 Ifa 10.0.0.20
 Add new[8]: Net 192.168.2.1/32 Ifp fw0 Ifa 192.168.2.30
 Add new[1]: Net 0.0.0.0/0 Gate 192.168.2.1 Ifp fw0 Ifa 192.168.2.30 [SCOPED]
@@ -8833,10 +12485,16 @@ Add new[6]: Net 10.0.0.1/32 Ifp en0 Ifa 10.0.0.10 [last] [SCOPED]
 Add new[2]: Net 0.0.0.0/0 Gate 10.0.0.1 Ifp en0 Ifa 10.0.0.10 [never] [SCOPED]
 Add new[4]: Net 10.0.0.0/24 Ifp en0 Ifa 10.0.0.10 [last] [SCOPED]
 Add new[7]: Net 192.168.2.0/24 Ifp fw0 Ifa 192.168.2.30
+Add new[9]: Net 224.0.0.0/4 Ifp en1 Ifa 10.0.0.20
+Add new[10]: Net 224.0.0.0/4 Ifp fw0 Ifa 192.168.2.30 [SCOPED]
+Add new[11]: Net 224.0.0.0/4 Ifp en0 Ifa 10.0.0.10 [last] [SCOPED]
+Add new[12]: Net 255.255.255.255/32 Ifp en1 Ifa 10.0.0.20
+Add new[13]: Net 255.255.255.255/32 Ifp fw0 Ifa 192.168.2.30 [SCOPED]
+Add new[14]: Net 255.255.255.255/32 Ifp en0 Ifa 10.0.0.10 [last] [SCOPED]
 =================> Apply 'test5', 'test11' End <=================
 
 =================> Apply 'test11', 'test5' Begin <=================
-Old routes ('test11') = <IPv4RouteList[9]> = {
+Old routes ('test11') = <IPv4RouteList[15]> = {
  0. Net 0.0.0.0/0 Gate 10.0.0.1 Ifp en1 Ifa 10.0.0.20
  1. Net 0.0.0.0/0 Gate 192.168.2.1 Ifp fw0 Ifa 192.168.2.30 [SCOPED]
  2. Net 0.0.0.0/0 Gate 10.0.0.1 Ifp en0 Ifa 10.0.0.10 [never] [SCOPED]
@@ -8846,6 +12504,12 @@ Old routes ('test11') = <IPv4RouteList[9]> = {
  6. Net 10.0.0.1/32 Ifp en0 Ifa 10.0.0.10 [last] [SCOPED]
  7. Net 192.168.2.0/24 Ifp fw0 Ifa 192.168.2.30
  8. Net 192.168.2.1/32 Ifp fw0 Ifa 192.168.2.30
+ 9. Net 224.0.0.0/4 Ifp en1 Ifa 10.0.0.20
+10. Net 224.0.0.0/4 Ifp fw0 Ifa 192.168.2.30 [SCOPED]
+11. Net 224.0.0.0/4 Ifp en0 Ifa 10.0.0.10 [last] [SCOPED]
+12. Net 255.255.255.255/32 Ifp en1 Ifa 10.0.0.20
+13. Net 255.255.255.255/32 Ifp fw0 Ifa 192.168.2.30 [SCOPED]
+14. Net 255.255.255.255/32 Ifp en0 Ifa 10.0.0.10 [last] [SCOPED]
 }
 Add new[5]: Net 10.0.0.1/32 Ifp en1 Ifa 10.0.0.20
 Add new[0]: Net 0.0.0.0/0 Gate 10.0.0.1 Ifp en1 Ifa 10.0.0.20
@@ -8856,7 +12520,13 @@ Add new[2]: Net 0.0.0.0/0 Gate 10.0.0.1 Ifp en0 Ifa 10.0.0.10 [never] [SCOPED]
 Add new[3]: Net 10.0.0.0/24 Ifp en1 Ifa 10.0.0.20
 Add new[4]: Net 10.0.0.0/24 Ifp en0 Ifa 10.0.0.10 [last] [SCOPED]
 Add new[7]: Net 192.168.2.0/24 Ifp fw0 Ifa 192.168.2.30
-New Routes ('test5') = <IPv4RouteList[12]> = {
+Add new[9]: Net 224.0.0.0/4 Ifp en1 Ifa 10.0.0.20
+Add new[10]: Net 224.0.0.0/4 Ifp fw0 Ifa 192.168.2.30 [SCOPED]
+Add new[11]: Net 224.0.0.0/4 Ifp en0 Ifa 10.0.0.10 [last] [SCOPED]
+Add new[12]: Net 255.255.255.255/32 Ifp en1 Ifa 10.0.0.20
+Add new[13]: Net 255.255.255.255/32 Ifp fw0 Ifa 192.168.2.30 [SCOPED]
+Add new[14]: Net 255.255.255.255/32 Ifp en0 Ifa 10.0.0.10 [last] [SCOPED]
+New Routes ('test5') = <IPv4RouteList[18]> = {
  0. Net 0.0.0.0/0 Gate 17.219.156.1 Ifp ppp0 Ifa 17.219.156.22
  1. Net 0.0.0.0/0 Gate 17.202.20.1 Ifp en0 Ifa 17.202.40.191 [SCOPED]
  2. Net 0.0.0.0/0 Gate 17.202.20.1 Ifp en1 Ifa 17.202.42.24 [SCOPED]
@@ -8869,6 +12539,12 @@ New Routes ('test5') = <IPv4RouteList[12]> = {
  9. Net 17.202.40.0/22 Ifp en0 Ifa 17.202.40.191
 10. Net 17.202.40.0/22 Ifp en1 Ifa 17.202.42.24 [SCOPED]
 11. Net 17.219.156.1/32 Ifp ppp0 Ifa 17.219.156.22
+12. Net 224.0.0.0/4 Ifp ppp0 Ifa 17.219.156.22
+13. Net 224.0.0.0/4 Ifp en0 Ifa 17.202.40.191 [SCOPED]
+14. Net 224.0.0.0/4 Ifp en1 Ifa 17.202.42.24 [SCOPED]
+15. Net 255.255.255.255/32 Ifp ppp0 Ifa 17.219.156.22
+16. Net 255.255.255.255/32 Ifp en0 Ifa 17.202.40.191 [SCOPED]
+17. Net 255.255.255.255/32 Ifp en1 Ifa 17.202.42.24 [SCOPED]
 }
 Remove old[0]: Net 0.0.0.0/0 Gate 10.0.0.1 Ifp en1 Ifa 10.0.0.20
 Remove old[1]: Net 0.0.0.0/0 Gate 192.168.2.1 Ifp fw0 Ifa 192.168.2.30 [SCOPED]
@@ -8877,6 +12553,12 @@ Remove old[4]: Net 10.0.0.0/24 Ifp en0 Ifa 10.0.0.10 [last] [SCOPED]
 Remove old[6]: Net 10.0.0.1/32 Ifp en0 Ifa 10.0.0.10 [last] [SCOPED]
 Remove old[7]: Net 192.168.2.0/24 Ifp fw0 Ifa 192.168.2.30
 Remove old[8]: Net 192.168.2.1/32 Ifp fw0 Ifa 192.168.2.30
+Remove old[9]: Net 224.0.0.0/4 Ifp en1 Ifa 10.0.0.20
+Remove old[10]: Net 224.0.0.0/4 Ifp fw0 Ifa 192.168.2.30 [SCOPED]
+Remove old[11]: Net 224.0.0.0/4 Ifp en0 Ifa 10.0.0.10 [last] [SCOPED]
+Remove old[12]: Net 255.255.255.255/32 Ifp en1 Ifa 10.0.0.20
+Remove old[13]: Net 255.255.255.255/32 Ifp fw0 Ifa 192.168.2.30 [SCOPED]
+Remove old[14]: Net 255.255.255.255/32 Ifp en0 Ifa 10.0.0.10 [last] [SCOPED]
 Add new[11]: Net 17.219.156.1/32 Ifp ppp0 Ifa 17.219.156.22
 Add new[0]: Net 0.0.0.0/0 Gate 17.219.156.1 Ifp ppp0 Ifa 17.219.156.22
 Add new[7]: Net 17.202.20.1/32 Ifp en0 Ifa 17.202.40.191
@@ -8887,10 +12569,16 @@ Add new[4]: Net 10.0.0.0/24 Ifp en0 Ifa 10.0.0.11 [SCOPED]
 Add new[6]: Net 10.0.0.1/32 Ifp en0 Ifa 10.0.0.11 [SCOPED]
 Add new[9]: Net 17.202.40.0/22 Ifp en0 Ifa 17.202.40.191
 Add new[10]: Net 17.202.40.0/22 Ifp en1 Ifa 17.202.42.24 [SCOPED]
+Add new[12]: Net 224.0.0.0/4 Ifp ppp0 Ifa 17.219.156.22
+Add new[13]: Net 224.0.0.0/4 Ifp en0 Ifa 17.202.40.191 [SCOPED]
+Add new[14]: Net 224.0.0.0/4 Ifp en1 Ifa 17.202.42.24 [SCOPED]
+Add new[15]: Net 255.255.255.255/32 Ifp ppp0 Ifa 17.219.156.22
+Add new[16]: Net 255.255.255.255/32 Ifp en0 Ifa 17.202.40.191 [SCOPED]
+Add new[17]: Net 255.255.255.255/32 Ifp en1 Ifa 17.202.42.24 [SCOPED]
 =================> Apply 'test11', 'test5' End <=================
 
 =================> Apply 'test5', 'test12' Begin <=================
-Old routes ('test5') = <IPv4RouteList[12]> = {
+Old routes ('test5') = <IPv4RouteList[18]> = {
  0. Net 0.0.0.0/0 Gate 17.219.156.1 Ifp ppp0 Ifa 17.219.156.22
  1. Net 0.0.0.0/0 Gate 17.202.20.1 Ifp en0 Ifa 17.202.40.191 [SCOPED]
  2. Net 0.0.0.0/0 Gate 17.202.20.1 Ifp en1 Ifa 17.202.42.24 [SCOPED]
@@ -8903,6 +12591,12 @@ Old routes ('test5') = <IPv4RouteList[12]> = {
  9. Net 17.202.40.0/22 Ifp en0 Ifa 17.202.40.191
 10. Net 17.202.40.0/22 Ifp en1 Ifa 17.202.42.24 [SCOPED]
 11. Net 17.219.156.1/32 Ifp ppp0 Ifa 17.219.156.22
+12. Net 224.0.0.0/4 Ifp ppp0 Ifa 17.219.156.22
+13. Net 224.0.0.0/4 Ifp en0 Ifa 17.202.40.191 [SCOPED]
+14. Net 224.0.0.0/4 Ifp en1 Ifa 17.202.42.24 [SCOPED]
+15. Net 255.255.255.255/32 Ifp ppp0 Ifa 17.219.156.22
+16. Net 255.255.255.255/32 Ifp en0 Ifa 17.202.40.191 [SCOPED]
+17. Net 255.255.255.255/32 Ifp en1 Ifa 17.202.42.24 [SCOPED]
 }
 Add new[11]: Net 17.219.156.1/32 Ifp ppp0 Ifa 17.219.156.22
 Add new[0]: Net 0.0.0.0/0 Gate 17.219.156.1 Ifp ppp0 Ifa 17.219.156.22
@@ -8916,13 +12610,23 @@ Add new[5]: Net 10.0.0.1/32 Ifp en1 Ifa 10.0.0.20
 Add new[6]: Net 10.0.0.1/32 Ifp en0 Ifa 10.0.0.11 [SCOPED]
 Add new[9]: Net 17.202.40.0/22 Ifp en0 Ifa 17.202.40.191
 Add new[10]: Net 17.202.40.0/22 Ifp en1 Ifa 17.202.42.24 [SCOPED]
-New Routes ('test12') = <IPv4RouteList[6]> = {
+Add new[12]: Net 224.0.0.0/4 Ifp ppp0 Ifa 17.219.156.22
+Add new[13]: Net 224.0.0.0/4 Ifp en0 Ifa 17.202.40.191 [SCOPED]
+Add new[14]: Net 224.0.0.0/4 Ifp en1 Ifa 17.202.42.24 [SCOPED]
+Add new[15]: Net 255.255.255.255/32 Ifp ppp0 Ifa 17.219.156.22
+Add new[16]: Net 255.255.255.255/32 Ifp en0 Ifa 17.202.40.191 [SCOPED]
+Add new[17]: Net 255.255.255.255/32 Ifp en1 Ifa 17.202.42.24 [SCOPED]
+New Routes ('test12') = <IPv4RouteList[10]> = {
  0. Net 0.0.0.0/0 Gate 10.0.0.1 Ifp en0 Ifa 10.0.0.10
  1. Net 0.0.0.0/0 Gate 10.0.0.1 Ifp en1 Ifa 10.0.0.20 [SCOPED]
  2. Net 10.0.0.0/24 Ifp en0 Ifa 10.0.0.10
  3. Net 10.0.0.0/24 Ifp en1 Ifa 10.0.0.20 [SCOPED]
  4. Net 10.0.0.1/32 Ifp en0 Ifa 10.0.0.10
  5. Net 10.0.0.1/32 Ifp en1 Ifa 10.0.0.20 [SCOPED]
+ 6. Net 224.0.0.0/4 Ifp en0 Ifa 10.0.0.10
+ 7. Net 224.0.0.0/4 Ifp en1 Ifa 10.0.0.20 [SCOPED]
+ 8. Net 255.255.255.255/32 Ifp en0 Ifa 10.0.0.10
+ 9. Net 255.255.255.255/32 Ifp en1 Ifa 10.0.0.20 [SCOPED]
 }
 Remove old[0]: Net 0.0.0.0/0 Gate 17.219.156.1 Ifp ppp0 Ifa 17.219.156.22
 Remove old[1]: Net 0.0.0.0/0 Gate 17.202.20.1 Ifp en0 Ifa 17.202.40.191 [SCOPED]
@@ -8936,22 +12640,36 @@ Remove old[8]: Net 17.202.20.1/32 Ifp en1 Ifa 17.202.42.24 [SCOPED]
 Remove old[9]: Net 17.202.40.0/22 Ifp en0 Ifa 17.202.40.191
 Remove old[10]: Net 17.202.40.0/22 Ifp en1 Ifa 17.202.42.24 [SCOPED]
 Remove old[11]: Net 17.219.156.1/32 Ifp ppp0 Ifa 17.219.156.22
+Remove old[12]: Net 224.0.0.0/4 Ifp ppp0 Ifa 17.219.156.22
+Remove old[13]: Net 224.0.0.0/4 Ifp en0 Ifa 17.202.40.191 [SCOPED]
+Remove old[14]: Net 224.0.0.0/4 Ifp en1 Ifa 17.202.42.24 [SCOPED]
+Remove old[15]: Net 255.255.255.255/32 Ifp ppp0 Ifa 17.219.156.22
+Remove old[16]: Net 255.255.255.255/32 Ifp en0 Ifa 17.202.40.191 [SCOPED]
+Remove old[17]: Net 255.255.255.255/32 Ifp en1 Ifa 17.202.42.24 [SCOPED]
 Add new[4]: Net 10.0.0.1/32 Ifp en0 Ifa 10.0.0.10
 Add new[0]: Net 0.0.0.0/0 Gate 10.0.0.1 Ifp en0 Ifa 10.0.0.10
 Add new[5]: Net 10.0.0.1/32 Ifp en1 Ifa 10.0.0.20 [SCOPED]
 Add new[1]: Net 0.0.0.0/0 Gate 10.0.0.1 Ifp en1 Ifa 10.0.0.20 [SCOPED]
 Add new[2]: Net 10.0.0.0/24 Ifp en0 Ifa 10.0.0.10
 Add new[3]: Net 10.0.0.0/24 Ifp en1 Ifa 10.0.0.20 [SCOPED]
+Add new[6]: Net 224.0.0.0/4 Ifp en0 Ifa 10.0.0.10
+Add new[7]: Net 224.0.0.0/4 Ifp en1 Ifa 10.0.0.20 [SCOPED]
+Add new[8]: Net 255.255.255.255/32 Ifp en0 Ifa 10.0.0.10
+Add new[9]: Net 255.255.255.255/32 Ifp en1 Ifa 10.0.0.20 [SCOPED]
 =================> Apply 'test5', 'test12' End <=================
 
 =================> Apply 'test12', 'test5' Begin <=================
-Old routes ('test12') = <IPv4RouteList[6]> = {
+Old routes ('test12') = <IPv4RouteList[10]> = {
  0. Net 0.0.0.0/0 Gate 10.0.0.1 Ifp en0 Ifa 10.0.0.10
  1. Net 0.0.0.0/0 Gate 10.0.0.1 Ifp en1 Ifa 10.0.0.20 [SCOPED]
  2. Net 10.0.0.0/24 Ifp en0 Ifa 10.0.0.10
  3. Net 10.0.0.0/24 Ifp en1 Ifa 10.0.0.20 [SCOPED]
  4. Net 10.0.0.1/32 Ifp en0 Ifa 10.0.0.10
  5. Net 10.0.0.1/32 Ifp en1 Ifa 10.0.0.20 [SCOPED]
+ 6. Net 224.0.0.0/4 Ifp en0 Ifa 10.0.0.10
+ 7. Net 224.0.0.0/4 Ifp en1 Ifa 10.0.0.20 [SCOPED]
+ 8. Net 255.255.255.255/32 Ifp en0 Ifa 10.0.0.10
+ 9. Net 255.255.255.255/32 Ifp en1 Ifa 10.0.0.20 [SCOPED]
 }
 Add new[4]: Net 10.0.0.1/32 Ifp en0 Ifa 10.0.0.10
 Add new[0]: Net 0.0.0.0/0 Gate 10.0.0.1 Ifp en0 Ifa 10.0.0.10
@@ -8959,7 +12677,11 @@ Add new[5]: Net 10.0.0.1/32 Ifp en1 Ifa 10.0.0.20 [SCOPED]
 Add new[1]: Net 0.0.0.0/0 Gate 10.0.0.1 Ifp en1 Ifa 10.0.0.20 [SCOPED]
 Add new[2]: Net 10.0.0.0/24 Ifp en0 Ifa 10.0.0.10
 Add new[3]: Net 10.0.0.0/24 Ifp en1 Ifa 10.0.0.20 [SCOPED]
-New Routes ('test5') = <IPv4RouteList[12]> = {
+Add new[6]: Net 224.0.0.0/4 Ifp en0 Ifa 10.0.0.10
+Add new[7]: Net 224.0.0.0/4 Ifp en1 Ifa 10.0.0.20 [SCOPED]
+Add new[8]: Net 255.255.255.255/32 Ifp en0 Ifa 10.0.0.10
+Add new[9]: Net 255.255.255.255/32 Ifp en1 Ifa 10.0.0.20 [SCOPED]
+New Routes ('test5') = <IPv4RouteList[18]> = {
  0. Net 0.0.0.0/0 Gate 17.219.156.1 Ifp ppp0 Ifa 17.219.156.22
  1. Net 0.0.0.0/0 Gate 17.202.20.1 Ifp en0 Ifa 17.202.40.191 [SCOPED]
  2. Net 0.0.0.0/0 Gate 17.202.20.1 Ifp en1 Ifa 17.202.42.24 [SCOPED]
@@ -8972,6 +12694,12 @@ New Routes ('test5') = <IPv4RouteList[12]> = {
  9. Net 17.202.40.0/22 Ifp en0 Ifa 17.202.40.191
 10. Net 17.202.40.0/22 Ifp en1 Ifa 17.202.42.24 [SCOPED]
 11. Net 17.219.156.1/32 Ifp ppp0 Ifa 17.219.156.22
+12. Net 224.0.0.0/4 Ifp ppp0 Ifa 17.219.156.22
+13. Net 224.0.0.0/4 Ifp en0 Ifa 17.202.40.191 [SCOPED]
+14. Net 224.0.0.0/4 Ifp en1 Ifa 17.202.42.24 [SCOPED]
+15. Net 255.255.255.255/32 Ifp ppp0 Ifa 17.219.156.22
+16. Net 255.255.255.255/32 Ifp en0 Ifa 17.202.40.191 [SCOPED]
+17. Net 255.255.255.255/32 Ifp en1 Ifa 17.202.42.24 [SCOPED]
 }
 Remove old[0]: Net 0.0.0.0/0 Gate 10.0.0.1 Ifp en0 Ifa 10.0.0.10
 Remove old[1]: Net 0.0.0.0/0 Gate 10.0.0.1 Ifp en1 Ifa 10.0.0.20 [SCOPED]
@@ -8979,6 +12707,10 @@ Remove old[2]: Net 10.0.0.0/24 Ifp en0 Ifa 10.0.0.10
 Remove old[3]: Net 10.0.0.0/24 Ifp en1 Ifa 10.0.0.20 [SCOPED]
 Remove old[4]: Net 10.0.0.1/32 Ifp en0 Ifa 10.0.0.10
 Remove old[5]: Net 10.0.0.1/32 Ifp en1 Ifa 10.0.0.20 [SCOPED]
+Remove old[6]: Net 224.0.0.0/4 Ifp en0 Ifa 10.0.0.10
+Remove old[7]: Net 224.0.0.0/4 Ifp en1 Ifa 10.0.0.20 [SCOPED]
+Remove old[8]: Net 255.255.255.255/32 Ifp en0 Ifa 10.0.0.10
+Remove old[9]: Net 255.255.255.255/32 Ifp en1 Ifa 10.0.0.20 [SCOPED]
 Add new[11]: Net 17.219.156.1/32 Ifp ppp0 Ifa 17.219.156.22
 Add new[0]: Net 0.0.0.0/0 Gate 17.219.156.1 Ifp ppp0 Ifa 17.219.156.22
 Add new[7]: Net 17.202.20.1/32 Ifp en0 Ifa 17.202.40.191
@@ -8991,10 +12723,16 @@ Add new[5]: Net 10.0.0.1/32 Ifp en1 Ifa 10.0.0.20
 Add new[6]: Net 10.0.0.1/32 Ifp en0 Ifa 10.0.0.11 [SCOPED]
 Add new[9]: Net 17.202.40.0/22 Ifp en0 Ifa 17.202.40.191
 Add new[10]: Net 17.202.40.0/22 Ifp en1 Ifa 17.202.42.24 [SCOPED]
+Add new[12]: Net 224.0.0.0/4 Ifp ppp0 Ifa 17.219.156.22
+Add new[13]: Net 224.0.0.0/4 Ifp en0 Ifa 17.202.40.191 [SCOPED]
+Add new[14]: Net 224.0.0.0/4 Ifp en1 Ifa 17.202.42.24 [SCOPED]
+Add new[15]: Net 255.255.255.255/32 Ifp ppp0 Ifa 17.219.156.22
+Add new[16]: Net 255.255.255.255/32 Ifp en0 Ifa 17.202.40.191 [SCOPED]
+Add new[17]: Net 255.255.255.255/32 Ifp en1 Ifa 17.202.42.24 [SCOPED]
 =================> Apply 'test12', 'test5' End <=================
 
 =================> Apply 'test5', 'test13' Begin <=================
-Old routes ('test5') = <IPv4RouteList[12]> = {
+Old routes ('test5') = <IPv4RouteList[18]> = {
  0. Net 0.0.0.0/0 Gate 17.219.156.1 Ifp ppp0 Ifa 17.219.156.22
  1. Net 0.0.0.0/0 Gate 17.202.20.1 Ifp en0 Ifa 17.202.40.191 [SCOPED]
  2. Net 0.0.0.0/0 Gate 17.202.20.1 Ifp en1 Ifa 17.202.42.24 [SCOPED]
@@ -9007,6 +12745,12 @@ Old routes ('test5') = <IPv4RouteList[12]> = {
  9. Net 17.202.40.0/22 Ifp en0 Ifa 17.202.40.191
 10. Net 17.202.40.0/22 Ifp en1 Ifa 17.202.42.24 [SCOPED]
 11. Net 17.219.156.1/32 Ifp ppp0 Ifa 17.219.156.22
+12. Net 224.0.0.0/4 Ifp ppp0 Ifa 17.219.156.22
+13. Net 224.0.0.0/4 Ifp en0 Ifa 17.202.40.191 [SCOPED]
+14. Net 224.0.0.0/4 Ifp en1 Ifa 17.202.42.24 [SCOPED]
+15. Net 255.255.255.255/32 Ifp ppp0 Ifa 17.219.156.22
+16. Net 255.255.255.255/32 Ifp en0 Ifa 17.202.40.191 [SCOPED]
+17. Net 255.255.255.255/32 Ifp en1 Ifa 17.202.42.24 [SCOPED]
 }
 Add new[11]: Net 17.219.156.1/32 Ifp ppp0 Ifa 17.219.156.22
 Add new[0]: Net 0.0.0.0/0 Gate 17.219.156.1 Ifp ppp0 Ifa 17.219.156.22
@@ -9020,13 +12764,23 @@ Add new[5]: Net 10.0.0.1/32 Ifp en1 Ifa 10.0.0.20
 Add new[6]: Net 10.0.0.1/32 Ifp en0 Ifa 10.0.0.11 [SCOPED]
 Add new[9]: Net 17.202.40.0/22 Ifp en0 Ifa 17.202.40.191
 Add new[10]: Net 17.202.40.0/22 Ifp en1 Ifa 17.202.42.24 [SCOPED]
-New Routes ('test13') = <IPv4RouteList[6]> = {
+Add new[12]: Net 224.0.0.0/4 Ifp ppp0 Ifa 17.219.156.22
+Add new[13]: Net 224.0.0.0/4 Ifp en0 Ifa 17.202.40.191 [SCOPED]
+Add new[14]: Net 224.0.0.0/4 Ifp en1 Ifa 17.202.42.24 [SCOPED]
+Add new[15]: Net 255.255.255.255/32 Ifp ppp0 Ifa 17.219.156.22
+Add new[16]: Net 255.255.255.255/32 Ifp en0 Ifa 17.202.40.191 [SCOPED]
+Add new[17]: Net 255.255.255.255/32 Ifp en1 Ifa 17.202.42.24 [SCOPED]
+New Routes ('test13') = <IPv4RouteList[10]> = {
  0. Net 0.0.0.0/0 Gate 10.0.0.1 Ifp en0 Ifa 10.0.0.10
  1. Net 0.0.0.0/0 Gate 10.0.0.1 Ifp en1 Ifa 10.0.0.20 [never] [SCOPED]
  2. Net 10.0.0.0/24 Ifp en0 Ifa 10.0.0.10
  3. Net 10.0.0.0/24 Ifp en1 Ifa 10.0.0.20 [last] [SCOPED]
  4. Net 10.0.0.1/32 Ifp en0 Ifa 10.0.0.10
  5. Net 10.0.0.1/32 Ifp en1 Ifa 10.0.0.20 [last] [SCOPED]
+ 6. Net 224.0.0.0/4 Ifp en0 Ifa 10.0.0.10
+ 7. Net 224.0.0.0/4 Ifp en1 Ifa 10.0.0.20 [last] [SCOPED]
+ 8. Net 255.255.255.255/32 Ifp en0 Ifa 10.0.0.10
+ 9. Net 255.255.255.255/32 Ifp en1 Ifa 10.0.0.20 [last] [SCOPED]
 }
 Remove old[0]: Net 0.0.0.0/0 Gate 17.219.156.1 Ifp ppp0 Ifa 17.219.156.22
 Remove old[1]: Net 0.0.0.0/0 Gate 17.202.20.1 Ifp en0 Ifa 17.202.40.191 [SCOPED]
@@ -9040,22 +12794,36 @@ Remove old[8]: Net 17.202.20.1/32 Ifp en1 Ifa 17.202.42.24 [SCOPED]
 Remove old[9]: Net 17.202.40.0/22 Ifp en0 Ifa 17.202.40.191
 Remove old[10]: Net 17.202.40.0/22 Ifp en1 Ifa 17.202.42.24 [SCOPED]
 Remove old[11]: Net 17.219.156.1/32 Ifp ppp0 Ifa 17.219.156.22
+Remove old[12]: Net 224.0.0.0/4 Ifp ppp0 Ifa 17.219.156.22
+Remove old[13]: Net 224.0.0.0/4 Ifp en0 Ifa 17.202.40.191 [SCOPED]
+Remove old[14]: Net 224.0.0.0/4 Ifp en1 Ifa 17.202.42.24 [SCOPED]
+Remove old[15]: Net 255.255.255.255/32 Ifp ppp0 Ifa 17.219.156.22
+Remove old[16]: Net 255.255.255.255/32 Ifp en0 Ifa 17.202.40.191 [SCOPED]
+Remove old[17]: Net 255.255.255.255/32 Ifp en1 Ifa 17.202.42.24 [SCOPED]
 Add new[4]: Net 10.0.0.1/32 Ifp en0 Ifa 10.0.0.10
 Add new[0]: Net 0.0.0.0/0 Gate 10.0.0.1 Ifp en0 Ifa 10.0.0.10
 Add new[5]: Net 10.0.0.1/32 Ifp en1 Ifa 10.0.0.20 [last] [SCOPED]
 Add new[1]: Net 0.0.0.0/0 Gate 10.0.0.1 Ifp en1 Ifa 10.0.0.20 [never] [SCOPED]
 Add new[2]: Net 10.0.0.0/24 Ifp en0 Ifa 10.0.0.10
 Add new[3]: Net 10.0.0.0/24 Ifp en1 Ifa 10.0.0.20 [last] [SCOPED]
+Add new[6]: Net 224.0.0.0/4 Ifp en0 Ifa 10.0.0.10
+Add new[7]: Net 224.0.0.0/4 Ifp en1 Ifa 10.0.0.20 [last] [SCOPED]
+Add new[8]: Net 255.255.255.255/32 Ifp en0 Ifa 10.0.0.10
+Add new[9]: Net 255.255.255.255/32 Ifp en1 Ifa 10.0.0.20 [last] [SCOPED]
 =================> Apply 'test5', 'test13' End <=================
 
 =================> Apply 'test13', 'test5' Begin <=================
-Old routes ('test13') = <IPv4RouteList[6]> = {
+Old routes ('test13') = <IPv4RouteList[10]> = {
  0. Net 0.0.0.0/0 Gate 10.0.0.1 Ifp en0 Ifa 10.0.0.10
  1. Net 0.0.0.0/0 Gate 10.0.0.1 Ifp en1 Ifa 10.0.0.20 [never] [SCOPED]
  2. Net 10.0.0.0/24 Ifp en0 Ifa 10.0.0.10
  3. Net 10.0.0.0/24 Ifp en1 Ifa 10.0.0.20 [last] [SCOPED]
  4. Net 10.0.0.1/32 Ifp en0 Ifa 10.0.0.10
  5. Net 10.0.0.1/32 Ifp en1 Ifa 10.0.0.20 [last] [SCOPED]
+ 6. Net 224.0.0.0/4 Ifp en0 Ifa 10.0.0.10
+ 7. Net 224.0.0.0/4 Ifp en1 Ifa 10.0.0.20 [last] [SCOPED]
+ 8. Net 255.255.255.255/32 Ifp en0 Ifa 10.0.0.10
+ 9. Net 255.255.255.255/32 Ifp en1 Ifa 10.0.0.20 [last] [SCOPED]
 }
 Add new[4]: Net 10.0.0.1/32 Ifp en0 Ifa 10.0.0.10
 Add new[0]: Net 0.0.0.0/0 Gate 10.0.0.1 Ifp en0 Ifa 10.0.0.10
@@ -9063,7 +12831,11 @@ Add new[5]: Net 10.0.0.1/32 Ifp en1 Ifa 10.0.0.20 [last] [SCOPED]
 Add new[1]: Net 0.0.0.0/0 Gate 10.0.0.1 Ifp en1 Ifa 10.0.0.20 [never] [SCOPED]
 Add new[2]: Net 10.0.0.0/24 Ifp en0 Ifa 10.0.0.10
 Add new[3]: Net 10.0.0.0/24 Ifp en1 Ifa 10.0.0.20 [last] [SCOPED]
-New Routes ('test5') = <IPv4RouteList[12]> = {
+Add new[6]: Net 224.0.0.0/4 Ifp en0 Ifa 10.0.0.10
+Add new[7]: Net 224.0.0.0/4 Ifp en1 Ifa 10.0.0.20 [last] [SCOPED]
+Add new[8]: Net 255.255.255.255/32 Ifp en0 Ifa 10.0.0.10
+Add new[9]: Net 255.255.255.255/32 Ifp en1 Ifa 10.0.0.20 [last] [SCOPED]
+New Routes ('test5') = <IPv4RouteList[18]> = {
  0. Net 0.0.0.0/0 Gate 17.219.156.1 Ifp ppp0 Ifa 17.219.156.22
  1. Net 0.0.0.0/0 Gate 17.202.20.1 Ifp en0 Ifa 17.202.40.191 [SCOPED]
  2. Net 0.0.0.0/0 Gate 17.202.20.1 Ifp en1 Ifa 17.202.42.24 [SCOPED]
@@ -9076,6 +12848,12 @@ New Routes ('test5') = <IPv4RouteList[12]> = {
  9. Net 17.202.40.0/22 Ifp en0 Ifa 17.202.40.191
 10. Net 17.202.40.0/22 Ifp en1 Ifa 17.202.42.24 [SCOPED]
 11. Net 17.219.156.1/32 Ifp ppp0 Ifa 17.219.156.22
+12. Net 224.0.0.0/4 Ifp ppp0 Ifa 17.219.156.22
+13. Net 224.0.0.0/4 Ifp en0 Ifa 17.202.40.191 [SCOPED]
+14. Net 224.0.0.0/4 Ifp en1 Ifa 17.202.42.24 [SCOPED]
+15. Net 255.255.255.255/32 Ifp ppp0 Ifa 17.219.156.22
+16. Net 255.255.255.255/32 Ifp en0 Ifa 17.202.40.191 [SCOPED]
+17. Net 255.255.255.255/32 Ifp en1 Ifa 17.202.42.24 [SCOPED]
 }
 Remove old[0]: Net 0.0.0.0/0 Gate 10.0.0.1 Ifp en0 Ifa 10.0.0.10
 Remove old[1]: Net 0.0.0.0/0 Gate 10.0.0.1 Ifp en1 Ifa 10.0.0.20 [never] [SCOPED]
@@ -9083,6 +12861,10 @@ Remove old[2]: Net 10.0.0.0/24 Ifp en0 Ifa 10.0.0.10
 Remove old[3]: Net 10.0.0.0/24 Ifp en1 Ifa 10.0.0.20 [last] [SCOPED]
 Remove old[4]: Net 10.0.0.1/32 Ifp en0 Ifa 10.0.0.10
 Remove old[5]: Net 10.0.0.1/32 Ifp en1 Ifa 10.0.0.20 [last] [SCOPED]
+Remove old[6]: Net 224.0.0.0/4 Ifp en0 Ifa 10.0.0.10
+Remove old[7]: Net 224.0.0.0/4 Ifp en1 Ifa 10.0.0.20 [last] [SCOPED]
+Remove old[8]: Net 255.255.255.255/32 Ifp en0 Ifa 10.0.0.10
+Remove old[9]: Net 255.255.255.255/32 Ifp en1 Ifa 10.0.0.20 [last] [SCOPED]
 Add new[11]: Net 17.219.156.1/32 Ifp ppp0 Ifa 17.219.156.22
 Add new[0]: Net 0.0.0.0/0 Gate 17.219.156.1 Ifp ppp0 Ifa 17.219.156.22
 Add new[7]: Net 17.202.20.1/32 Ifp en0 Ifa 17.202.40.191
@@ -9095,10 +12877,16 @@ Add new[5]: Net 10.0.0.1/32 Ifp en1 Ifa 10.0.0.20
 Add new[6]: Net 10.0.0.1/32 Ifp en0 Ifa 10.0.0.11 [SCOPED]
 Add new[9]: Net 17.202.40.0/22 Ifp en0 Ifa 17.202.40.191
 Add new[10]: Net 17.202.40.0/22 Ifp en1 Ifa 17.202.42.24 [SCOPED]
+Add new[12]: Net 224.0.0.0/4 Ifp ppp0 Ifa 17.219.156.22
+Add new[13]: Net 224.0.0.0/4 Ifp en0 Ifa 17.202.40.191 [SCOPED]
+Add new[14]: Net 224.0.0.0/4 Ifp en1 Ifa 17.202.42.24 [SCOPED]
+Add new[15]: Net 255.255.255.255/32 Ifp ppp0 Ifa 17.219.156.22
+Add new[16]: Net 255.255.255.255/32 Ifp en0 Ifa 17.202.40.191 [SCOPED]
+Add new[17]: Net 255.255.255.255/32 Ifp en1 Ifa 17.202.42.24 [SCOPED]
 =================> Apply 'test13', 'test5' End <=================
 
 =================> Apply 'test5', 'test14' Begin <=================
-Old routes ('test5') = <IPv4RouteList[12]> = {
+Old routes ('test5') = <IPv4RouteList[18]> = {
  0. Net 0.0.0.0/0 Gate 17.219.156.1 Ifp ppp0 Ifa 17.219.156.22
  1. Net 0.0.0.0/0 Gate 17.202.20.1 Ifp en0 Ifa 17.202.40.191 [SCOPED]
  2. Net 0.0.0.0/0 Gate 17.202.20.1 Ifp en1 Ifa 17.202.42.24 [SCOPED]
@@ -9111,6 +12899,12 @@ Old routes ('test5') = <IPv4RouteList[12]> = {
  9. Net 17.202.40.0/22 Ifp en0 Ifa 17.202.40.191
 10. Net 17.202.40.0/22 Ifp en1 Ifa 17.202.42.24 [SCOPED]
 11. Net 17.219.156.1/32 Ifp ppp0 Ifa 17.219.156.22
+12. Net 224.0.0.0/4 Ifp ppp0 Ifa 17.219.156.22
+13. Net 224.0.0.0/4 Ifp en0 Ifa 17.202.40.191 [SCOPED]
+14. Net 224.0.0.0/4 Ifp en1 Ifa 17.202.42.24 [SCOPED]
+15. Net 255.255.255.255/32 Ifp ppp0 Ifa 17.219.156.22
+16. Net 255.255.255.255/32 Ifp en0 Ifa 17.202.40.191 [SCOPED]
+17. Net 255.255.255.255/32 Ifp en1 Ifa 17.202.42.24 [SCOPED]
 }
 Add new[11]: Net 17.219.156.1/32 Ifp ppp0 Ifa 17.219.156.22
 Add new[0]: Net 0.0.0.0/0 Gate 17.219.156.1 Ifp ppp0 Ifa 17.219.156.22
@@ -9124,10 +12918,18 @@ Add new[5]: Net 10.0.0.1/32 Ifp en1 Ifa 10.0.0.20
 Add new[6]: Net 10.0.0.1/32 Ifp en0 Ifa 10.0.0.11 [SCOPED]
 Add new[9]: Net 17.202.40.0/22 Ifp en0 Ifa 17.202.40.191
 Add new[10]: Net 17.202.40.0/22 Ifp en1 Ifa 17.202.42.24 [SCOPED]
-New Routes ('test14') = <IPv4RouteList[3]> = {
+Add new[12]: Net 224.0.0.0/4 Ifp ppp0 Ifa 17.219.156.22
+Add new[13]: Net 224.0.0.0/4 Ifp en0 Ifa 17.202.40.191 [SCOPED]
+Add new[14]: Net 224.0.0.0/4 Ifp en1 Ifa 17.202.42.24 [SCOPED]
+Add new[15]: Net 255.255.255.255/32 Ifp ppp0 Ifa 17.219.156.22
+Add new[16]: Net 255.255.255.255/32 Ifp en0 Ifa 17.202.40.191 [SCOPED]
+Add new[17]: Net 255.255.255.255/32 Ifp en1 Ifa 17.202.42.24 [SCOPED]
+New Routes ('test14') = <IPv4RouteList[5]> = {
  0. Net 0.0.0.0/0 Gate 10.0.0.1 Ifp en1 Ifa 10.0.0.20 [never] [SCOPED]
  1. Net 10.0.0.0/24 Ifp en1 Ifa 10.0.0.20 [last]
  2. Net 10.0.0.1/32 Ifp en1 Ifa 10.0.0.20 [last]
+ 3. Net 224.0.0.0/4 Ifp en1 Ifa 10.0.0.20 [last]
+ 4. Net 255.255.255.255/32 Ifp en1 Ifa 10.0.0.20 [last]
 }
 Remove old[0]: Net 0.0.0.0/0 Gate 17.219.156.1 Ifp ppp0 Ifa 17.219.156.22
 Remove old[1]: Net 0.0.0.0/0 Gate 17.202.20.1 Ifp en0 Ifa 17.202.40.191 [SCOPED]
@@ -9139,19 +12941,31 @@ Remove old[8]: Net 17.202.20.1/32 Ifp en1 Ifa 17.202.42.24 [SCOPED]
 Remove old[9]: Net 17.202.40.0/22 Ifp en0 Ifa 17.202.40.191
 Remove old[10]: Net 17.202.40.0/22 Ifp en1 Ifa 17.202.42.24 [SCOPED]
 Remove old[11]: Net 17.219.156.1/32 Ifp ppp0 Ifa 17.219.156.22
+Remove old[12]: Net 224.0.0.0/4 Ifp ppp0 Ifa 17.219.156.22
+Remove old[13]: Net 224.0.0.0/4 Ifp en0 Ifa 17.202.40.191 [SCOPED]
+Remove old[14]: Net 224.0.0.0/4 Ifp en1 Ifa 17.202.42.24 [SCOPED]
+Remove old[15]: Net 255.255.255.255/32 Ifp ppp0 Ifa 17.219.156.22
+Remove old[16]: Net 255.255.255.255/32 Ifp en0 Ifa 17.202.40.191 [SCOPED]
+Remove old[17]: Net 255.255.255.255/32 Ifp en1 Ifa 17.202.42.24 [SCOPED]
 Add new[0]: Net 0.0.0.0/0 Gate 10.0.0.1 Ifp en1 Ifa 10.0.0.20 [never] [SCOPED]
+Add new[3]: Net 224.0.0.0/4 Ifp en1 Ifa 10.0.0.20 [last]
+Add new[4]: Net 255.255.255.255/32 Ifp en1 Ifa 10.0.0.20 [last]
 =================> Apply 'test5', 'test14' End <=================
 
 =================> Apply 'test14', 'test5' Begin <=================
-Old routes ('test14') = <IPv4RouteList[3]> = {
+Old routes ('test14') = <IPv4RouteList[5]> = {
  0. Net 0.0.0.0/0 Gate 10.0.0.1 Ifp en1 Ifa 10.0.0.20 [never] [SCOPED]
  1. Net 10.0.0.0/24 Ifp en1 Ifa 10.0.0.20 [last]
  2. Net 10.0.0.1/32 Ifp en1 Ifa 10.0.0.20 [last]
+ 3. Net 224.0.0.0/4 Ifp en1 Ifa 10.0.0.20 [last]
+ 4. Net 255.255.255.255/32 Ifp en1 Ifa 10.0.0.20 [last]
 }
 Add new[2]: Net 10.0.0.1/32 Ifp en1 Ifa 10.0.0.20 [last]
 Add new[0]: Net 0.0.0.0/0 Gate 10.0.0.1 Ifp en1 Ifa 10.0.0.20 [never] [SCOPED]
 Add new[1]: Net 10.0.0.0/24 Ifp en1 Ifa 10.0.0.20 [last]
-New Routes ('test5') = <IPv4RouteList[12]> = {
+Add new[3]: Net 224.0.0.0/4 Ifp en1 Ifa 10.0.0.20 [last]
+Add new[4]: Net 255.255.255.255/32 Ifp en1 Ifa 10.0.0.20 [last]
+New Routes ('test5') = <IPv4RouteList[18]> = {
  0. Net 0.0.0.0/0 Gate 17.219.156.1 Ifp ppp0 Ifa 17.219.156.22
  1. Net 0.0.0.0/0 Gate 17.202.20.1 Ifp en0 Ifa 17.202.40.191 [SCOPED]
  2. Net 0.0.0.0/0 Gate 17.202.20.1 Ifp en1 Ifa 17.202.42.24 [SCOPED]
@@ -9164,8 +12978,16 @@ New Routes ('test5') = <IPv4RouteList[12]> = {
  9. Net 17.202.40.0/22 Ifp en0 Ifa 17.202.40.191
 10. Net 17.202.40.0/22 Ifp en1 Ifa 17.202.42.24 [SCOPED]
 11. Net 17.219.156.1/32 Ifp ppp0 Ifa 17.219.156.22
+12. Net 224.0.0.0/4 Ifp ppp0 Ifa 17.219.156.22
+13. Net 224.0.0.0/4 Ifp en0 Ifa 17.202.40.191 [SCOPED]
+14. Net 224.0.0.0/4 Ifp en1 Ifa 17.202.42.24 [SCOPED]
+15. Net 255.255.255.255/32 Ifp ppp0 Ifa 17.219.156.22
+16. Net 255.255.255.255/32 Ifp en0 Ifa 17.202.40.191 [SCOPED]
+17. Net 255.255.255.255/32 Ifp en1 Ifa 17.202.42.24 [SCOPED]
 }
 Remove old[0]: Net 0.0.0.0/0 Gate 10.0.0.1 Ifp en1 Ifa 10.0.0.20 [never] [SCOPED]
+Remove old[3]: Net 224.0.0.0/4 Ifp en1 Ifa 10.0.0.20 [last]
+Remove old[4]: Net 255.255.255.255/32 Ifp en1 Ifa 10.0.0.20 [last]
 Add new[11]: Net 17.219.156.1/32 Ifp ppp0 Ifa 17.219.156.22
 Add new[0]: Net 0.0.0.0/0 Gate 17.219.156.1 Ifp ppp0 Ifa 17.219.156.22
 Add new[7]: Net 17.202.20.1/32 Ifp en0 Ifa 17.202.40.191
@@ -9176,10 +12998,16 @@ Add new[4]: Net 10.0.0.0/24 Ifp en0 Ifa 10.0.0.11 [SCOPED]
 Add new[6]: Net 10.0.0.1/32 Ifp en0 Ifa 10.0.0.11 [SCOPED]
 Add new[9]: Net 17.202.40.0/22 Ifp en0 Ifa 17.202.40.191
 Add new[10]: Net 17.202.40.0/22 Ifp en1 Ifa 17.202.42.24 [SCOPED]
+Add new[12]: Net 224.0.0.0/4 Ifp ppp0 Ifa 17.219.156.22
+Add new[13]: Net 224.0.0.0/4 Ifp en0 Ifa 17.202.40.191 [SCOPED]
+Add new[14]: Net 224.0.0.0/4 Ifp en1 Ifa 17.202.42.24 [SCOPED]
+Add new[15]: Net 255.255.255.255/32 Ifp ppp0 Ifa 17.219.156.22
+Add new[16]: Net 255.255.255.255/32 Ifp en0 Ifa 17.202.40.191 [SCOPED]
+Add new[17]: Net 255.255.255.255/32 Ifp en1 Ifa 17.202.42.24 [SCOPED]
 =================> Apply 'test14', 'test5' End <=================
 
 =================> Apply 'test5', 'test15' Begin <=================
-Old routes ('test5') = <IPv4RouteList[12]> = {
+Old routes ('test5') = <IPv4RouteList[18]> = {
  0. Net 0.0.0.0/0 Gate 17.219.156.1 Ifp ppp0 Ifa 17.219.156.22
  1. Net 0.0.0.0/0 Gate 17.202.20.1 Ifp en0 Ifa 17.202.40.191 [SCOPED]
  2. Net 0.0.0.0/0 Gate 17.202.20.1 Ifp en1 Ifa 17.202.42.24 [SCOPED]
@@ -9192,6 +13020,12 @@ Old routes ('test5') = <IPv4RouteList[12]> = {
  9. Net 17.202.40.0/22 Ifp en0 Ifa 17.202.40.191
 10. Net 17.202.40.0/22 Ifp en1 Ifa 17.202.42.24 [SCOPED]
 11. Net 17.219.156.1/32 Ifp ppp0 Ifa 17.219.156.22
+12. Net 224.0.0.0/4 Ifp ppp0 Ifa 17.219.156.22
+13. Net 224.0.0.0/4 Ifp en0 Ifa 17.202.40.191 [SCOPED]
+14. Net 224.0.0.0/4 Ifp en1 Ifa 17.202.42.24 [SCOPED]
+15. Net 255.255.255.255/32 Ifp ppp0 Ifa 17.219.156.22
+16. Net 255.255.255.255/32 Ifp en0 Ifa 17.202.40.191 [SCOPED]
+17. Net 255.255.255.255/32 Ifp en1 Ifa 17.202.42.24 [SCOPED]
 }
 Add new[11]: Net 17.219.156.1/32 Ifp ppp0 Ifa 17.219.156.22
 Add new[0]: Net 0.0.0.0/0 Gate 17.219.156.1 Ifp ppp0 Ifa 17.219.156.22
@@ -9205,8 +13039,16 @@ Add new[5]: Net 10.0.0.1/32 Ifp en1 Ifa 10.0.0.20
 Add new[6]: Net 10.0.0.1/32 Ifp en0 Ifa 10.0.0.11 [SCOPED]
 Add new[9]: Net 17.202.40.0/22 Ifp en0 Ifa 17.202.40.191
 Add new[10]: Net 17.202.40.0/22 Ifp en1 Ifa 17.202.42.24 [SCOPED]
-New Routes ('test15') = <IPv4RouteList[1]> = {
- 0. Net 0.0.0.0/0 Ifp en0 Ifa 169.254.22.44
+Add new[12]: Net 224.0.0.0/4 Ifp ppp0 Ifa 17.219.156.22
+Add new[13]: Net 224.0.0.0/4 Ifp en0 Ifa 17.202.40.191 [SCOPED]
+Add new[14]: Net 224.0.0.0/4 Ifp en1 Ifa 17.202.42.24 [SCOPED]
+Add new[15]: Net 255.255.255.255/32 Ifp ppp0 Ifa 17.219.156.22
+Add new[16]: Net 255.255.255.255/32 Ifp en0 Ifa 17.202.40.191 [SCOPED]
+Add new[17]: Net 255.255.255.255/32 Ifp en1 Ifa 17.202.42.24 [SCOPED]
+New Routes ('test15') = <IPv4RouteList[3]> = {
+ 0. Net 169.254.0.0/16 Ifp en0 Ifa 169.254.22.44 [last]
+ 1. Net 224.0.0.0/4 Ifp en0 Ifa 169.254.22.44 [last]
+ 2. Net 255.255.255.255/32 Ifp en0 Ifa 169.254.22.44 [last]
 }
 Remove old[0]: Net 0.0.0.0/0 Gate 17.219.156.1 Ifp ppp0 Ifa 17.219.156.22
 Remove old[1]: Net 0.0.0.0/0 Gate 17.202.20.1 Ifp en0 Ifa 17.202.40.191 [SCOPED]
@@ -9220,15 +13062,27 @@ Remove old[8]: Net 17.202.20.1/32 Ifp en1 Ifa 17.202.42.24 [SCOPED]
 Remove old[9]: Net 17.202.40.0/22 Ifp en0 Ifa 17.202.40.191
 Remove old[10]: Net 17.202.40.0/22 Ifp en1 Ifa 17.202.42.24 [SCOPED]
 Remove old[11]: Net 17.219.156.1/32 Ifp ppp0 Ifa 17.219.156.22
-Add new[0]: Net 0.0.0.0/0 Ifp en0 Ifa 169.254.22.44
+Remove old[12]: Net 224.0.0.0/4 Ifp ppp0 Ifa 17.219.156.22
+Remove old[13]: Net 224.0.0.0/4 Ifp en0 Ifa 17.202.40.191 [SCOPED]
+Remove old[14]: Net 224.0.0.0/4 Ifp en1 Ifa 17.202.42.24 [SCOPED]
+Remove old[15]: Net 255.255.255.255/32 Ifp ppp0 Ifa 17.219.156.22
+Remove old[16]: Net 255.255.255.255/32 Ifp en0 Ifa 17.202.40.191 [SCOPED]
+Remove old[17]: Net 255.255.255.255/32 Ifp en1 Ifa 17.202.42.24 [SCOPED]
+Add new[0]: Net 169.254.0.0/16 Ifp en0 Ifa 169.254.22.44 [last]
+Add new[1]: Net 224.0.0.0/4 Ifp en0 Ifa 169.254.22.44 [last]
+Add new[2]: Net 255.255.255.255/32 Ifp en0 Ifa 169.254.22.44 [last]
 =================> Apply 'test5', 'test15' End <=================
 
 =================> Apply 'test15', 'test5' Begin <=================
-Old routes ('test15') = <IPv4RouteList[1]> = {
- 0. Net 0.0.0.0/0 Ifp en0 Ifa 169.254.22.44
-}
-Add new[0]: Net 0.0.0.0/0 Ifp en0 Ifa 169.254.22.44
-New Routes ('test5') = <IPv4RouteList[12]> = {
+Old routes ('test15') = <IPv4RouteList[3]> = {
+ 0. Net 169.254.0.0/16 Ifp en0 Ifa 169.254.22.44 [last]
+ 1. Net 224.0.0.0/4 Ifp en0 Ifa 169.254.22.44 [last]
+ 2. Net 255.255.255.255/32 Ifp en0 Ifa 169.254.22.44 [last]
+}
+Add new[0]: Net 169.254.0.0/16 Ifp en0 Ifa 169.254.22.44 [last]
+Add new[1]: Net 224.0.0.0/4 Ifp en0 Ifa 169.254.22.44 [last]
+Add new[2]: Net 255.255.255.255/32 Ifp en0 Ifa 169.254.22.44 [last]
+New Routes ('test5') = <IPv4RouteList[18]> = {
  0. Net 0.0.0.0/0 Gate 17.219.156.1 Ifp ppp0 Ifa 17.219.156.22
  1. Net 0.0.0.0/0 Gate 17.202.20.1 Ifp en0 Ifa 17.202.40.191 [SCOPED]
  2. Net 0.0.0.0/0 Gate 17.202.20.1 Ifp en1 Ifa 17.202.42.24 [SCOPED]
@@ -9241,8 +13095,16 @@ New Routes ('test5') = <IPv4RouteList[12]> = {
  9. Net 17.202.40.0/22 Ifp en0 Ifa 17.202.40.191
 10. Net 17.202.40.0/22 Ifp en1 Ifa 17.202.42.24 [SCOPED]
 11. Net 17.219.156.1/32 Ifp ppp0 Ifa 17.219.156.22
-}
-Remove old[0]: Net 0.0.0.0/0 Ifp en0 Ifa 169.254.22.44
+12. Net 224.0.0.0/4 Ifp ppp0 Ifa 17.219.156.22
+13. Net 224.0.0.0/4 Ifp en0 Ifa 17.202.40.191 [SCOPED]
+14. Net 224.0.0.0/4 Ifp en1 Ifa 17.202.42.24 [SCOPED]
+15. Net 255.255.255.255/32 Ifp ppp0 Ifa 17.219.156.22
+16. Net 255.255.255.255/32 Ifp en0 Ifa 17.202.40.191 [SCOPED]
+17. Net 255.255.255.255/32 Ifp en1 Ifa 17.202.42.24 [SCOPED]
+}
+Remove old[0]: Net 169.254.0.0/16 Ifp en0 Ifa 169.254.22.44 [last]
+Remove old[1]: Net 224.0.0.0/4 Ifp en0 Ifa 169.254.22.44 [last]
+Remove old[2]: Net 255.255.255.255/32 Ifp en0 Ifa 169.254.22.44 [last]
 Add new[11]: Net 17.219.156.1/32 Ifp ppp0 Ifa 17.219.156.22
 Add new[0]: Net 0.0.0.0/0 Gate 17.219.156.1 Ifp ppp0 Ifa 17.219.156.22
 Add new[7]: Net 17.202.20.1/32 Ifp en0 Ifa 17.202.40.191
@@ -9255,10 +13117,16 @@ Add new[5]: Net 10.0.0.1/32 Ifp en1 Ifa 10.0.0.20
 Add new[6]: Net 10.0.0.1/32 Ifp en0 Ifa 10.0.0.11 [SCOPED]
 Add new[9]: Net 17.202.40.0/22 Ifp en0 Ifa 17.202.40.191
 Add new[10]: Net 17.202.40.0/22 Ifp en1 Ifa 17.202.42.24 [SCOPED]
+Add new[12]: Net 224.0.0.0/4 Ifp ppp0 Ifa 17.219.156.22
+Add new[13]: Net 224.0.0.0/4 Ifp en0 Ifa 17.202.40.191 [SCOPED]
+Add new[14]: Net 224.0.0.0/4 Ifp en1 Ifa 17.202.42.24 [SCOPED]
+Add new[15]: Net 255.255.255.255/32 Ifp ppp0 Ifa 17.219.156.22
+Add new[16]: Net 255.255.255.255/32 Ifp en0 Ifa 17.202.40.191 [SCOPED]
+Add new[17]: Net 255.255.255.255/32 Ifp en1 Ifa 17.202.42.24 [SCOPED]
 =================> Apply 'test15', 'test5' End <=================
 
 =================> Apply 'test5', 'test16' Begin <=================
-Old routes ('test5') = <IPv4RouteList[12]> = {
+Old routes ('test5') = <IPv4RouteList[18]> = {
  0. Net 0.0.0.0/0 Gate 17.219.156.1 Ifp ppp0 Ifa 17.219.156.22
  1. Net 0.0.0.0/0 Gate 17.202.20.1 Ifp en0 Ifa 17.202.40.191 [SCOPED]
  2. Net 0.0.0.0/0 Gate 17.202.20.1 Ifp en1 Ifa 17.202.42.24 [SCOPED]
@@ -9271,6 +13139,12 @@ Old routes ('test5') = <IPv4RouteList[12]> = {
  9. Net 17.202.40.0/22 Ifp en0 Ifa 17.202.40.191
 10. Net 17.202.40.0/22 Ifp en1 Ifa 17.202.42.24 [SCOPED]
 11. Net 17.219.156.1/32 Ifp ppp0 Ifa 17.219.156.22
+12. Net 224.0.0.0/4 Ifp ppp0 Ifa 17.219.156.22
+13. Net 224.0.0.0/4 Ifp en0 Ifa 17.202.40.191 [SCOPED]
+14. Net 224.0.0.0/4 Ifp en1 Ifa 17.202.42.24 [SCOPED]
+15. Net 255.255.255.255/32 Ifp ppp0 Ifa 17.219.156.22
+16. Net 255.255.255.255/32 Ifp en0 Ifa 17.202.40.191 [SCOPED]
+17. Net 255.255.255.255/32 Ifp en1 Ifa 17.202.42.24 [SCOPED]
 }
 Add new[11]: Net 17.219.156.1/32 Ifp ppp0 Ifa 17.219.156.22
 Add new[0]: Net 0.0.0.0/0 Gate 17.219.156.1 Ifp ppp0 Ifa 17.219.156.22
@@ -9284,7 +13158,13 @@ Add new[5]: Net 10.0.0.1/32 Ifp en1 Ifa 10.0.0.20
 Add new[6]: Net 10.0.0.1/32 Ifp en0 Ifa 10.0.0.11 [SCOPED]
 Add new[9]: Net 17.202.40.0/22 Ifp en0 Ifa 17.202.40.191
 Add new[10]: Net 17.202.40.0/22 Ifp en1 Ifa 17.202.42.24 [SCOPED]
-New Routes ('test16') = <IPv4RouteList[50]> = {
+Add new[12]: Net 224.0.0.0/4 Ifp ppp0 Ifa 17.219.156.22
+Add new[13]: Net 224.0.0.0/4 Ifp en0 Ifa 17.202.40.191 [SCOPED]
+Add new[14]: Net 224.0.0.0/4 Ifp en1 Ifa 17.202.42.24 [SCOPED]
+Add new[15]: Net 255.255.255.255/32 Ifp ppp0 Ifa 17.219.156.22
+Add new[16]: Net 255.255.255.255/32 Ifp en0 Ifa 17.202.40.191 [SCOPED]
+Add new[17]: Net 255.255.255.255/32 Ifp en1 Ifa 17.202.42.24 [SCOPED]
+New Routes ('test16') = <IPv4RouteList[54]> = {
  0. Net 0.0.0.0/0 Gate 10.0.0.1 Ifp en0 Ifa 10.0.0.10
  1. Net 0.0.0.0/0 Ifp utun0 Ifa 17.153.46.24 [SCOPED]
  2. Net 10.0.0.0/24 Ifp en0 Ifa 10.0.0.10
@@ -9335,6 +13215,10 @@ New Routes ('test16') = <IPv4RouteList[50]> = {
 47. Net 192.35.50.0/24 Gate 17.153.46.24 Ifp utun0 Ifa 17.153.46.24
 48. Net 204.179.20.0/24 Gate 17.153.46.24 Ifp utun0 Ifa 17.153.46.24
 49. Net 206.112.116.0/24 Gate 17.153.46.24 Ifp utun0 Ifa 17.153.46.24
+50. Net 224.0.0.0/4 Ifp en0 Ifa 10.0.0.10
+51. Net 224.0.0.0/4 Ifp utun0 Ifa 17.153.46.24 [SCOPED]
+52. Net 255.255.255.255/32 Ifp en0 Ifa 10.0.0.10
+53. Net 255.255.255.255/32 Ifp utun0 Ifa 17.153.46.24 [SCOPED]
 }
 Remove old[0]: Net 0.0.0.0/0 Gate 17.219.156.1 Ifp ppp0 Ifa 17.219.156.22
 Remove old[1]: Net 0.0.0.0/0 Gate 17.202.20.1 Ifp en0 Ifa 17.202.40.191 [SCOPED]
@@ -9348,6 +13232,12 @@ Remove old[8]: Net 17.202.20.1/32 Ifp en1 Ifa 17.202.42.24 [SCOPED]
 Remove old[9]: Net 17.202.40.0/22 Ifp en0 Ifa 17.202.40.191
 Remove old[10]: Net 17.202.40.0/22 Ifp en1 Ifa 17.202.42.24 [SCOPED]
 Remove old[11]: Net 17.219.156.1/32 Ifp ppp0 Ifa 17.219.156.22
+Remove old[12]: Net 224.0.0.0/4 Ifp ppp0 Ifa 17.219.156.22
+Remove old[13]: Net 224.0.0.0/4 Ifp en0 Ifa 17.202.40.191 [SCOPED]
+Remove old[14]: Net 224.0.0.0/4 Ifp en1 Ifa 17.202.42.24 [SCOPED]
+Remove old[15]: Net 255.255.255.255/32 Ifp ppp0 Ifa 17.219.156.22
+Remove old[16]: Net 255.255.255.255/32 Ifp en0 Ifa 17.202.40.191 [SCOPED]
+Remove old[17]: Net 255.255.255.255/32 Ifp en1 Ifa 17.202.42.24 [SCOPED]
 Add new[3]: Net 10.0.0.1/32 Ifp en0 Ifa 10.0.0.10
 Add new[0]: Net 0.0.0.0/0 Gate 10.0.0.1 Ifp en0 Ifa 10.0.0.10
 Add new[1]: Net 0.0.0.0/0 Ifp utun0 Ifa 17.153.46.24 [SCOPED]
@@ -9398,10 +13288,14 @@ Add new[46]: Net 172.16.2.0/24 Gate 17.153.46.24 Ifp utun0 Ifa 17.153.46.24
 Add new[47]: Net 192.35.50.0/24 Gate 17.153.46.24 Ifp utun0 Ifa 17.153.46.24
 Add new[48]: Net 204.179.20.0/24 Gate 17.153.46.24 Ifp utun0 Ifa 17.153.46.24
 Add new[49]: Net 206.112.116.0/24 Gate 17.153.46.24 Ifp utun0 Ifa 17.153.46.24
+Add new[50]: Net 224.0.0.0/4 Ifp en0 Ifa 10.0.0.10
+Add new[51]: Net 224.0.0.0/4 Ifp utun0 Ifa 17.153.46.24 [SCOPED]
+Add new[52]: Net 255.255.255.255/32 Ifp en0 Ifa 10.0.0.10
+Add new[53]: Net 255.255.255.255/32 Ifp utun0 Ifa 17.153.46.24 [SCOPED]
 =================> Apply 'test5', 'test16' End <=================
 
 =================> Apply 'test16', 'test5' Begin <=================
-Old routes ('test16') = <IPv4RouteList[50]> = {
+Old routes ('test16') = <IPv4RouteList[54]> = {
  0. Net 0.0.0.0/0 Gate 10.0.0.1 Ifp en0 Ifa 10.0.0.10
  1. Net 0.0.0.0/0 Ifp utun0 Ifa 17.153.46.24 [SCOPED]
  2. Net 10.0.0.0/24 Ifp en0 Ifa 10.0.0.10
@@ -9452,6 +13346,10 @@ Old routes ('test16') = <IPv4RouteList[50]> = {
 47. Net 192.35.50.0/24 Gate 17.153.46.24 Ifp utun0 Ifa 17.153.46.24
 48. Net 204.179.20.0/24 Gate 17.153.46.24 Ifp utun0 Ifa 17.153.46.24
 49. Net 206.112.116.0/24 Gate 17.153.46.24 Ifp utun0 Ifa 17.153.46.24
+50. Net 224.0.0.0/4 Ifp en0 Ifa 10.0.0.10
+51. Net 224.0.0.0/4 Ifp utun0 Ifa 17.153.46.24 [SCOPED]
+52. Net 255.255.255.255/32 Ifp en0 Ifa 10.0.0.10
+53. Net 255.255.255.255/32 Ifp utun0 Ifa 17.153.46.24 [SCOPED]
 }
 Add new[3]: Net 10.0.0.1/32 Ifp en0 Ifa 10.0.0.10
 Add new[0]: Net 0.0.0.0/0 Gate 10.0.0.1 Ifp en0 Ifa 10.0.0.10
@@ -9503,7 +13401,11 @@ Add new[46]: Net 172.16.2.0/24 Gate 17.153.46.24 Ifp utun0 Ifa 17.153.46.24
 Add new[47]: Net 192.35.50.0/24 Gate 17.153.46.24 Ifp utun0 Ifa 17.153.46.24
 Add new[48]: Net 204.179.20.0/24 Gate 17.153.46.24 Ifp utun0 Ifa 17.153.46.24
 Add new[49]: Net 206.112.116.0/24 Gate 17.153.46.24 Ifp utun0 Ifa 17.153.46.24
-New Routes ('test5') = <IPv4RouteList[12]> = {
+Add new[50]: Net 224.0.0.0/4 Ifp en0 Ifa 10.0.0.10
+Add new[51]: Net 224.0.0.0/4 Ifp utun0 Ifa 17.153.46.24 [SCOPED]
+Add new[52]: Net 255.255.255.255/32 Ifp en0 Ifa 10.0.0.10
+Add new[53]: Net 255.255.255.255/32 Ifp utun0 Ifa 17.153.46.24 [SCOPED]
+New Routes ('test5') = <IPv4RouteList[18]> = {
  0. Net 0.0.0.0/0 Gate 17.219.156.1 Ifp ppp0 Ifa 17.219.156.22
  1. Net 0.0.0.0/0 Gate 17.202.20.1 Ifp en0 Ifa 17.202.40.191 [SCOPED]
  2. Net 0.0.0.0/0 Gate 17.202.20.1 Ifp en1 Ifa 17.202.42.24 [SCOPED]
@@ -9516,6 +13418,12 @@ New Routes ('test5') = <IPv4RouteList[12]> = {
  9. Net 17.202.40.0/22 Ifp en0 Ifa 17.202.40.191
 10. Net 17.202.40.0/22 Ifp en1 Ifa 17.202.42.24 [SCOPED]
 11. Net 17.219.156.1/32 Ifp ppp0 Ifa 17.219.156.22
+12. Net 224.0.0.0/4 Ifp ppp0 Ifa 17.219.156.22
+13. Net 224.0.0.0/4 Ifp en0 Ifa 17.202.40.191 [SCOPED]
+14. Net 224.0.0.0/4 Ifp en1 Ifa 17.202.42.24 [SCOPED]
+15. Net 255.255.255.255/32 Ifp ppp0 Ifa 17.219.156.22
+16. Net 255.255.255.255/32 Ifp en0 Ifa 17.202.40.191 [SCOPED]
+17. Net 255.255.255.255/32 Ifp en1 Ifa 17.202.42.24 [SCOPED]
 }
 Remove old[0]: Net 0.0.0.0/0 Gate 10.0.0.1 Ifp en0 Ifa 10.0.0.10
 Remove old[1]: Net 0.0.0.0/0 Ifp utun0 Ifa 17.153.46.24 [SCOPED]
@@ -9567,6 +13475,10 @@ Remove old[46]: Net 172.16.2.0/24 Gate 17.153.46.24 Ifp utun0 Ifa 17.153.46.24
 Remove old[47]: Net 192.35.50.0/24 Gate 17.153.46.24 Ifp utun0 Ifa 17.153.46.24
 Remove old[48]: Net 204.179.20.0/24 Gate 17.153.46.24 Ifp utun0 Ifa 17.153.46.24
 Remove old[49]: Net 206.112.116.0/24 Gate 17.153.46.24 Ifp utun0 Ifa 17.153.46.24
+Remove old[50]: Net 224.0.0.0/4 Ifp en0 Ifa 10.0.0.10
+Remove old[51]: Net 224.0.0.0/4 Ifp utun0 Ifa 17.153.46.24 [SCOPED]
+Remove old[52]: Net 255.255.255.255/32 Ifp en0 Ifa 10.0.0.10
+Remove old[53]: Net 255.255.255.255/32 Ifp utun0 Ifa 17.153.46.24 [SCOPED]
 Add new[11]: Net 17.219.156.1/32 Ifp ppp0 Ifa 17.219.156.22
 Add new[0]: Net 0.0.0.0/0 Gate 17.219.156.1 Ifp ppp0 Ifa 17.219.156.22
 Add new[7]: Net 17.202.20.1/32 Ifp en0 Ifa 17.202.40.191
@@ -9579,10 +13491,16 @@ Add new[5]: Net 10.0.0.1/32 Ifp en1 Ifa 10.0.0.20
 Add new[6]: Net 10.0.0.1/32 Ifp en0 Ifa 10.0.0.11 [SCOPED]
 Add new[9]: Net 17.202.40.0/22 Ifp en0 Ifa 17.202.40.191
 Add new[10]: Net 17.202.40.0/22 Ifp en1 Ifa 17.202.42.24 [SCOPED]
+Add new[12]: Net 224.0.0.0/4 Ifp ppp0 Ifa 17.219.156.22
+Add new[13]: Net 224.0.0.0/4 Ifp en0 Ifa 17.202.40.191 [SCOPED]
+Add new[14]: Net 224.0.0.0/4 Ifp en1 Ifa 17.202.42.24 [SCOPED]
+Add new[15]: Net 255.255.255.255/32 Ifp ppp0 Ifa 17.219.156.22
+Add new[16]: Net 255.255.255.255/32 Ifp en0 Ifa 17.202.40.191 [SCOPED]
+Add new[17]: Net 255.255.255.255/32 Ifp en1 Ifa 17.202.42.24 [SCOPED]
 =================> Apply 'test16', 'test5' End <=================
 
 =================> Apply 'test5', 'test17' Begin <=================
-Old routes ('test5') = <IPv4RouteList[12]> = {
+Old routes ('test5') = <IPv4RouteList[18]> = {
  0. Net 0.0.0.0/0 Gate 17.219.156.1 Ifp ppp0 Ifa 17.219.156.22
  1. Net 0.0.0.0/0 Gate 17.202.20.1 Ifp en0 Ifa 17.202.40.191 [SCOPED]
  2. Net 0.0.0.0/0 Gate 17.202.20.1 Ifp en1 Ifa 17.202.42.24 [SCOPED]
@@ -9595,6 +13513,12 @@ Old routes ('test5') = <IPv4RouteList[12]> = {
  9. Net 17.202.40.0/22 Ifp en0 Ifa 17.202.40.191
 10. Net 17.202.40.0/22 Ifp en1 Ifa 17.202.42.24 [SCOPED]
 11. Net 17.219.156.1/32 Ifp ppp0 Ifa 17.219.156.22
+12. Net 224.0.0.0/4 Ifp ppp0 Ifa 17.219.156.22
+13. Net 224.0.0.0/4 Ifp en0 Ifa 17.202.40.191 [SCOPED]
+14. Net 224.0.0.0/4 Ifp en1 Ifa 17.202.42.24 [SCOPED]
+15. Net 255.255.255.255/32 Ifp ppp0 Ifa 17.219.156.22
+16. Net 255.255.255.255/32 Ifp en0 Ifa 17.202.40.191 [SCOPED]
+17. Net 255.255.255.255/32 Ifp en1 Ifa 17.202.42.24 [SCOPED]
 }
 Add new[11]: Net 17.219.156.1/32 Ifp ppp0 Ifa 17.219.156.22
 Add new[0]: Net 0.0.0.0/0 Gate 17.219.156.1 Ifp ppp0 Ifa 17.219.156.22
@@ -9608,13 +13532,23 @@ Add new[5]: Net 10.0.0.1/32 Ifp en1 Ifa 10.0.0.20
 Add new[6]: Net 10.0.0.1/32 Ifp en0 Ifa 10.0.0.11 [SCOPED]
 Add new[9]: Net 17.202.40.0/22 Ifp en0 Ifa 17.202.40.191
 Add new[10]: Net 17.202.40.0/22 Ifp en1 Ifa 17.202.42.24 [SCOPED]
-New Routes ('test17') = <IPv4RouteList[6]> = {
+Add new[12]: Net 224.0.0.0/4 Ifp ppp0 Ifa 17.219.156.22
+Add new[13]: Net 224.0.0.0/4 Ifp en0 Ifa 17.202.40.191 [SCOPED]
+Add new[14]: Net 224.0.0.0/4 Ifp en1 Ifa 17.202.42.24 [SCOPED]
+Add new[15]: Net 255.255.255.255/32 Ifp ppp0 Ifa 17.219.156.22
+Add new[16]: Net 255.255.255.255/32 Ifp en0 Ifa 17.202.40.191 [SCOPED]
+Add new[17]: Net 255.255.255.255/32 Ifp en1 Ifa 17.202.42.24 [SCOPED]
+New Routes ('test17') = <IPv4RouteList[10]> = {
  0. Net 0.0.0.0/0 Gate 10.0.0.1 Ifp en0 Ifa 10.0.0.10
  1. Net 0.0.0.0/0 Gate 192.168.2.1 Ifp en1 Ifa 192.168.2.50 [never] [SCOPED]
  2. Net 10.0.0.0/24 Ifp en0 Ifa 10.0.0.10
  3. Net 10.0.0.1/32 Ifp en0 Ifa 10.0.0.10
  4. Net 192.168.2.0/24 Ifp en1 Ifa 192.168.2.50 [last]
  5. Net 192.168.2.1/32 Ifp en1 Ifa 192.168.2.50 [last]
+ 6. Net 224.0.0.0/4 Ifp en0 Ifa 10.0.0.10
+ 7. Net 224.0.0.0/4 Ifp en1 Ifa 192.168.2.50 [last] [SCOPED]
+ 8. Net 255.255.255.255/32 Ifp en0 Ifa 10.0.0.10
+ 9. Net 255.255.255.255/32 Ifp en1 Ifa 192.168.2.50 [last] [SCOPED]
 }
 Remove old[0]: Net 0.0.0.0/0 Gate 17.219.156.1 Ifp ppp0 Ifa 17.219.156.22
 Remove old[1]: Net 0.0.0.0/0 Gate 17.202.20.1 Ifp en0 Ifa 17.202.40.191 [SCOPED]
@@ -9628,22 +13562,36 @@ Remove old[8]: Net 17.202.20.1/32 Ifp en1 Ifa 17.202.42.24 [SCOPED]
 Remove old[9]: Net 17.202.40.0/22 Ifp en0 Ifa 17.202.40.191
 Remove old[10]: Net 17.202.40.0/22 Ifp en1 Ifa 17.202.42.24 [SCOPED]
 Remove old[11]: Net 17.219.156.1/32 Ifp ppp0 Ifa 17.219.156.22
+Remove old[12]: Net 224.0.0.0/4 Ifp ppp0 Ifa 17.219.156.22
+Remove old[13]: Net 224.0.0.0/4 Ifp en0 Ifa 17.202.40.191 [SCOPED]
+Remove old[14]: Net 224.0.0.0/4 Ifp en1 Ifa 17.202.42.24 [SCOPED]
+Remove old[15]: Net 255.255.255.255/32 Ifp ppp0 Ifa 17.219.156.22
+Remove old[16]: Net 255.255.255.255/32 Ifp en0 Ifa 17.202.40.191 [SCOPED]
+Remove old[17]: Net 255.255.255.255/32 Ifp en1 Ifa 17.202.42.24 [SCOPED]
 Add new[3]: Net 10.0.0.1/32 Ifp en0 Ifa 10.0.0.10
 Add new[0]: Net 0.0.0.0/0 Gate 10.0.0.1 Ifp en0 Ifa 10.0.0.10
 Add new[5]: Net 192.168.2.1/32 Ifp en1 Ifa 192.168.2.50 [last]
 Add new[1]: Net 0.0.0.0/0 Gate 192.168.2.1 Ifp en1 Ifa 192.168.2.50 [never] [SCOPED]
 Add new[2]: Net 10.0.0.0/24 Ifp en0 Ifa 10.0.0.10
 Add new[4]: Net 192.168.2.0/24 Ifp en1 Ifa 192.168.2.50 [last]
+Add new[6]: Net 224.0.0.0/4 Ifp en0 Ifa 10.0.0.10
+Add new[7]: Net 224.0.0.0/4 Ifp en1 Ifa 192.168.2.50 [last] [SCOPED]
+Add new[8]: Net 255.255.255.255/32 Ifp en0 Ifa 10.0.0.10
+Add new[9]: Net 255.255.255.255/32 Ifp en1 Ifa 192.168.2.50 [last] [SCOPED]
 =================> Apply 'test5', 'test17' End <=================
 
 =================> Apply 'test17', 'test5' Begin <=================
-Old routes ('test17') = <IPv4RouteList[6]> = {
+Old routes ('test17') = <IPv4RouteList[10]> = {
  0. Net 0.0.0.0/0 Gate 10.0.0.1 Ifp en0 Ifa 10.0.0.10
  1. Net 0.0.0.0/0 Gate 192.168.2.1 Ifp en1 Ifa 192.168.2.50 [never] [SCOPED]
  2. Net 10.0.0.0/24 Ifp en0 Ifa 10.0.0.10
  3. Net 10.0.0.1/32 Ifp en0 Ifa 10.0.0.10
  4. Net 192.168.2.0/24 Ifp en1 Ifa 192.168.2.50 [last]
  5. Net 192.168.2.1/32 Ifp en1 Ifa 192.168.2.50 [last]
+ 6. Net 224.0.0.0/4 Ifp en0 Ifa 10.0.0.10
+ 7. Net 224.0.0.0/4 Ifp en1 Ifa 192.168.2.50 [last] [SCOPED]
+ 8. Net 255.255.255.255/32 Ifp en0 Ifa 10.0.0.10
+ 9. Net 255.255.255.255/32 Ifp en1 Ifa 192.168.2.50 [last] [SCOPED]
 }
 Add new[3]: Net 10.0.0.1/32 Ifp en0 Ifa 10.0.0.10
 Add new[0]: Net 0.0.0.0/0 Gate 10.0.0.1 Ifp en0 Ifa 10.0.0.10
@@ -9651,7 +13599,11 @@ Add new[5]: Net 192.168.2.1/32 Ifp en1 Ifa 192.168.2.50 [last]
 Add new[1]: Net 0.0.0.0/0 Gate 192.168.2.1 Ifp en1 Ifa 192.168.2.50 [never] [SCOPED]
 Add new[2]: Net 10.0.0.0/24 Ifp en0 Ifa 10.0.0.10
 Add new[4]: Net 192.168.2.0/24 Ifp en1 Ifa 192.168.2.50 [last]
-New Routes ('test5') = <IPv4RouteList[12]> = {
+Add new[6]: Net 224.0.0.0/4 Ifp en0 Ifa 10.0.0.10
+Add new[7]: Net 224.0.0.0/4 Ifp en1 Ifa 192.168.2.50 [last] [SCOPED]
+Add new[8]: Net 255.255.255.255/32 Ifp en0 Ifa 10.0.0.10
+Add new[9]: Net 255.255.255.255/32 Ifp en1 Ifa 192.168.2.50 [last] [SCOPED]
+New Routes ('test5') = <IPv4RouteList[18]> = {
  0. Net 0.0.0.0/0 Gate 17.219.156.1 Ifp ppp0 Ifa 17.219.156.22
  1. Net 0.0.0.0/0 Gate 17.202.20.1 Ifp en0 Ifa 17.202.40.191 [SCOPED]
  2. Net 0.0.0.0/0 Gate 17.202.20.1 Ifp en1 Ifa 17.202.42.24 [SCOPED]
@@ -9664,6 +13616,12 @@ New Routes ('test5') = <IPv4RouteList[12]> = {
  9. Net 17.202.40.0/22 Ifp en0 Ifa 17.202.40.191
 10. Net 17.202.40.0/22 Ifp en1 Ifa 17.202.42.24 [SCOPED]
 11. Net 17.219.156.1/32 Ifp ppp0 Ifa 17.219.156.22
+12. Net 224.0.0.0/4 Ifp ppp0 Ifa 17.219.156.22
+13. Net 224.0.0.0/4 Ifp en0 Ifa 17.202.40.191 [SCOPED]
+14. Net 224.0.0.0/4 Ifp en1 Ifa 17.202.42.24 [SCOPED]
+15. Net 255.255.255.255/32 Ifp ppp0 Ifa 17.219.156.22
+16. Net 255.255.255.255/32 Ifp en0 Ifa 17.202.40.191 [SCOPED]
+17. Net 255.255.255.255/32 Ifp en1 Ifa 17.202.42.24 [SCOPED]
 }
 Remove old[0]: Net 0.0.0.0/0 Gate 10.0.0.1 Ifp en0 Ifa 10.0.0.10
 Remove old[1]: Net 0.0.0.0/0 Gate 192.168.2.1 Ifp en1 Ifa 192.168.2.50 [never] [SCOPED]
@@ -9671,6 +13629,10 @@ Remove old[2]: Net 10.0.0.0/24 Ifp en0 Ifa 10.0.0.10
 Remove old[3]: Net 10.0.0.1/32 Ifp en0 Ifa 10.0.0.10
 Remove old[4]: Net 192.168.2.0/24 Ifp en1 Ifa 192.168.2.50 [last]
 Remove old[5]: Net 192.168.2.1/32 Ifp en1 Ifa 192.168.2.50 [last]
+Remove old[6]: Net 224.0.0.0/4 Ifp en0 Ifa 10.0.0.10
+Remove old[7]: Net 224.0.0.0/4 Ifp en1 Ifa 192.168.2.50 [last] [SCOPED]
+Remove old[8]: Net 255.255.255.255/32 Ifp en0 Ifa 10.0.0.10
+Remove old[9]: Net 255.255.255.255/32 Ifp en1 Ifa 192.168.2.50 [last] [SCOPED]
 Add new[11]: Net 17.219.156.1/32 Ifp ppp0 Ifa 17.219.156.22
 Add new[0]: Net 0.0.0.0/0 Gate 17.219.156.1 Ifp ppp0 Ifa 17.219.156.22
 Add new[7]: Net 17.202.20.1/32 Ifp en0 Ifa 17.202.40.191
@@ -9683,10 +13645,16 @@ Add new[5]: Net 10.0.0.1/32 Ifp en1 Ifa 10.0.0.20
 Add new[6]: Net 10.0.0.1/32 Ifp en0 Ifa 10.0.0.11 [SCOPED]
 Add new[9]: Net 17.202.40.0/22 Ifp en0 Ifa 17.202.40.191
 Add new[10]: Net 17.202.40.0/22 Ifp en1 Ifa 17.202.42.24 [SCOPED]
+Add new[12]: Net 224.0.0.0/4 Ifp ppp0 Ifa 17.219.156.22
+Add new[13]: Net 224.0.0.0/4 Ifp en0 Ifa 17.202.40.191 [SCOPED]
+Add new[14]: Net 224.0.0.0/4 Ifp en1 Ifa 17.202.42.24 [SCOPED]
+Add new[15]: Net 255.255.255.255/32 Ifp ppp0 Ifa 17.219.156.22
+Add new[16]: Net 255.255.255.255/32 Ifp en0 Ifa 17.202.40.191 [SCOPED]
+Add new[17]: Net 255.255.255.255/32 Ifp en1 Ifa 17.202.42.24 [SCOPED]
 =================> Apply 'test17', 'test5' End <=================
 
 =================> Apply 'test5', 'test18' Begin <=================
-Old routes ('test5') = <IPv4RouteList[12]> = {
+Old routes ('test5') = <IPv4RouteList[18]> = {
  0. Net 0.0.0.0/0 Gate 17.219.156.1 Ifp ppp0 Ifa 17.219.156.22
  1. Net 0.0.0.0/0 Gate 17.202.20.1 Ifp en0 Ifa 17.202.40.191 [SCOPED]
  2. Net 0.0.0.0/0 Gate 17.202.20.1 Ifp en1 Ifa 17.202.42.24 [SCOPED]
@@ -9699,6 +13667,12 @@ Old routes ('test5') = <IPv4RouteList[12]> = {
  9. Net 17.202.40.0/22 Ifp en0 Ifa 17.202.40.191
 10. Net 17.202.40.0/22 Ifp en1 Ifa 17.202.42.24 [SCOPED]
 11. Net 17.219.156.1/32 Ifp ppp0 Ifa 17.219.156.22
+12. Net 224.0.0.0/4 Ifp ppp0 Ifa 17.219.156.22
+13. Net 224.0.0.0/4 Ifp en0 Ifa 17.202.40.191 [SCOPED]
+14. Net 224.0.0.0/4 Ifp en1 Ifa 17.202.42.24 [SCOPED]
+15. Net 255.255.255.255/32 Ifp ppp0 Ifa 17.219.156.22
+16. Net 255.255.255.255/32 Ifp en0 Ifa 17.202.40.191 [SCOPED]
+17. Net 255.255.255.255/32 Ifp en1 Ifa 17.202.42.24 [SCOPED]
 }
 Add new[11]: Net 17.219.156.1/32 Ifp ppp0 Ifa 17.219.156.22
 Add new[0]: Net 0.0.0.0/0 Gate 17.219.156.1 Ifp ppp0 Ifa 17.219.156.22
@@ -9712,7 +13686,13 @@ Add new[5]: Net 10.0.0.1/32 Ifp en1 Ifa 10.0.0.20
 Add new[6]: Net 10.0.0.1/32 Ifp en0 Ifa 10.0.0.11 [SCOPED]
 Add new[9]: Net 17.202.40.0/22 Ifp en0 Ifa 17.202.40.191
 Add new[10]: Net 17.202.40.0/22 Ifp en1 Ifa 17.202.42.24 [SCOPED]
-New Routes ('test18') = <IPv4RouteList[14]> = {
+Add new[12]: Net 224.0.0.0/4 Ifp ppp0 Ifa 17.219.156.22
+Add new[13]: Net 224.0.0.0/4 Ifp en0 Ifa 17.202.40.191 [SCOPED]
+Add new[14]: Net 224.0.0.0/4 Ifp en1 Ifa 17.202.42.24 [SCOPED]
+Add new[15]: Net 255.255.255.255/32 Ifp ppp0 Ifa 17.219.156.22
+Add new[16]: Net 255.255.255.255/32 Ifp en0 Ifa 17.202.40.191 [SCOPED]
+Add new[17]: Net 255.255.255.255/32 Ifp en1 Ifa 17.202.42.24 [SCOPED]
+New Routes ('test18') = <IPv4RouteList[16]> = {
  0. Net 0.0.0.0/0 Gate 192.168.130.1 Ifp en0 Ifa 192.168.130.16
  1. Host 1.1.1.1 Gate 1.1.1.2 Ifp en0 Ifa 192.168.130.16
  2. Host 1.1.1.2 Gate 1.1.1.3 Ifp en0 Ifa 192.168.130.16
@@ -9727,6 +13707,8 @@ New Routes ('test18') = <IPv4RouteList[14]> = {
 11. Host 1.1.1.11 Gate 1.1.1.1 Ifp en0 Ifa 192.168.130.16
 12. Net 192.168.130.0/24 Ifp en0 Ifa 192.168.130.16
 13. Net 192.168.130.1/32 Ifp en0 Ifa 192.168.130.16
+14. Net 224.0.0.0/4 Ifp en0 Ifa 192.168.130.16
+15. Net 255.255.255.255/32 Ifp en0 Ifa 192.168.130.16
 }
 Remove old[0]: Net 0.0.0.0/0 Gate 17.219.156.1 Ifp ppp0 Ifa 17.219.156.22
 Remove old[1]: Net 0.0.0.0/0 Gate 17.202.20.1 Ifp en0 Ifa 17.202.40.191 [SCOPED]
@@ -9740,24 +13722,32 @@ Remove old[8]: Net 17.202.20.1/32 Ifp en1 Ifa 17.202.42.24 [SCOPED]
 Remove old[9]: Net 17.202.40.0/22 Ifp en0 Ifa 17.202.40.191
 Remove old[10]: Net 17.202.40.0/22 Ifp en1 Ifa 17.202.42.24 [SCOPED]
 Remove old[11]: Net 17.219.156.1/32 Ifp ppp0 Ifa 17.219.156.22
+Remove old[12]: Net 224.0.0.0/4 Ifp ppp0 Ifa 17.219.156.22
+Remove old[13]: Net 224.0.0.0/4 Ifp en0 Ifa 17.202.40.191 [SCOPED]
+Remove old[14]: Net 224.0.0.0/4 Ifp en1 Ifa 17.202.42.24 [SCOPED]
+Remove old[15]: Net 255.255.255.255/32 Ifp ppp0 Ifa 17.219.156.22
+Remove old[16]: Net 255.255.255.255/32 Ifp en0 Ifa 17.202.40.191 [SCOPED]
+Remove old[17]: Net 255.255.255.255/32 Ifp en1 Ifa 17.202.42.24 [SCOPED]
 Add new[13]: Net 192.168.130.1/32 Ifp en0 Ifa 192.168.130.16
 Add new[0]: Net 0.0.0.0/0 Gate 192.168.130.1 Ifp en0 Ifa 192.168.130.16
-IPMonitor RouteProcess: routing loop detected, not adding: Host 1.1.1.11 Gate 1.1.1.1 Ifp en0 Ifa 192.168.130.16
-IPMonitor RouteProcess: failed to add: Host 1.1.1.10 Gate 1.1.1.11 Ifp en0 Ifa 192.168.130.16
-IPMonitor RouteProcess: failed to add: Host 1.1.1.9 Gate 1.1.1.10 Ifp en0 Ifa 192.168.130.16
-IPMonitor RouteProcess: failed to add: Host 1.1.1.8 Gate 1.1.1.9 Ifp en0 Ifa 192.168.130.16
-IPMonitor RouteProcess: failed to add: Host 1.1.1.7 Gate 1.1.1.8 Ifp en0 Ifa 192.168.130.16
-IPMonitor RouteProcess: failed to add: Host 1.1.1.6 Gate 1.1.1.7 Ifp en0 Ifa 192.168.130.16
-IPMonitor RouteProcess: failed to add: Host 1.1.1.5 Gate 1.1.1.6 Ifp en0 Ifa 192.168.130.16
-IPMonitor RouteProcess: failed to add: Host 1.1.1.4 Gate 1.1.1.5 Ifp en0 Ifa 192.168.130.16
-IPMonitor RouteProcess: failed to add: Host 1.1.1.3 Gate 1.1.1.4 Ifp en0 Ifa 192.168.130.16
-IPMonitor RouteProcess: failed to add: Host 1.1.1.2 Gate 1.1.1.3 Ifp en0 Ifa 192.168.130.16
-IPMonitor RouteProcess: failed to add: Host 1.1.1.1 Gate 1.1.1.2 Ifp en0 Ifa 192.168.130.16
+routing loop detected, not adding: Host 1.1.1.11 Gate 1.1.1.1 Ifp en0 Ifa 192.168.130.16
+failed to add: Host 1.1.1.10 Gate 1.1.1.11 Ifp en0 Ifa 192.168.130.16
+failed to add: Host 1.1.1.9 Gate 1.1.1.10 Ifp en0 Ifa 192.168.130.16
+failed to add: Host 1.1.1.8 Gate 1.1.1.9 Ifp en0 Ifa 192.168.130.16
+failed to add: Host 1.1.1.7 Gate 1.1.1.8 Ifp en0 Ifa 192.168.130.16
+failed to add: Host 1.1.1.6 Gate 1.1.1.7 Ifp en0 Ifa 192.168.130.16
+failed to add: Host 1.1.1.5 Gate 1.1.1.6 Ifp en0 Ifa 192.168.130.16
+failed to add: Host 1.1.1.4 Gate 1.1.1.5 Ifp en0 Ifa 192.168.130.16
+failed to add: Host 1.1.1.3 Gate 1.1.1.4 Ifp en0 Ifa 192.168.130.16
+failed to add: Host 1.1.1.2 Gate 1.1.1.3 Ifp en0 Ifa 192.168.130.16
+failed to add: Host 1.1.1.1 Gate 1.1.1.2 Ifp en0 Ifa 192.168.130.16
 Add new[12]: Net 192.168.130.0/24 Ifp en0 Ifa 192.168.130.16
+Add new[14]: Net 224.0.0.0/4 Ifp en0 Ifa 192.168.130.16
+Add new[15]: Net 255.255.255.255/32 Ifp en0 Ifa 192.168.130.16
 =================> Apply 'test5', 'test18' End <=================
 
 =================> Apply 'test18', 'test5' Begin <=================
-Old routes ('test18') = <IPv4RouteList[14]> = {
+Old routes ('test18') = <IPv4RouteList[16]> = {
  0. Net 0.0.0.0/0 Gate 192.168.130.1 Ifp en0 Ifa 192.168.130.16
  1. Host 1.1.1.1 Gate 1.1.1.2 Ifp en0 Ifa 192.168.130.16
  2. Host 1.1.1.2 Gate 1.1.1.3 Ifp en0 Ifa 192.168.130.16
@@ -9772,22 +13762,26 @@ Old routes ('test18') = <IPv4RouteList[14]> = {
 11. Host 1.1.1.11 Gate 1.1.1.1 Ifp en0 Ifa 192.168.130.16
 12. Net 192.168.130.0/24 Ifp en0 Ifa 192.168.130.16
 13. Net 192.168.130.1/32 Ifp en0 Ifa 192.168.130.16
+14. Net 224.0.0.0/4 Ifp en0 Ifa 192.168.130.16
+15. Net 255.255.255.255/32 Ifp en0 Ifa 192.168.130.16
 }
 Add new[13]: Net 192.168.130.1/32 Ifp en0 Ifa 192.168.130.16
 Add new[0]: Net 0.0.0.0/0 Gate 192.168.130.1 Ifp en0 Ifa 192.168.130.16
-IPMonitor RouteProcess: routing loop detected, not adding: Host 1.1.1.11 Gate 1.1.1.1 Ifp en0 Ifa 192.168.130.16
-IPMonitor RouteProcess: failed to add: Host 1.1.1.10 Gate 1.1.1.11 Ifp en0 Ifa 192.168.130.16
-IPMonitor RouteProcess: failed to add: Host 1.1.1.9 Gate 1.1.1.10 Ifp en0 Ifa 192.168.130.16
-IPMonitor RouteProcess: failed to add: Host 1.1.1.8 Gate 1.1.1.9 Ifp en0 Ifa 192.168.130.16
-IPMonitor RouteProcess: failed to add: Host 1.1.1.7 Gate 1.1.1.8 Ifp en0 Ifa 192.168.130.16
-IPMonitor RouteProcess: failed to add: Host 1.1.1.6 Gate 1.1.1.7 Ifp en0 Ifa 192.168.130.16
-IPMonitor RouteProcess: failed to add: Host 1.1.1.5 Gate 1.1.1.6 Ifp en0 Ifa 192.168.130.16
-IPMonitor RouteProcess: failed to add: Host 1.1.1.4 Gate 1.1.1.5 Ifp en0 Ifa 192.168.130.16
-IPMonitor RouteProcess: failed to add: Host 1.1.1.3 Gate 1.1.1.4 Ifp en0 Ifa 192.168.130.16
-IPMonitor RouteProcess: failed to add: Host 1.1.1.2 Gate 1.1.1.3 Ifp en0 Ifa 192.168.130.16
-IPMonitor RouteProcess: failed to add: Host 1.1.1.1 Gate 1.1.1.2 Ifp en0 Ifa 192.168.130.16
+routing loop detected, not adding: Host 1.1.1.11 Gate 1.1.1.1 Ifp en0 Ifa 192.168.130.16
+failed to add: Host 1.1.1.10 Gate 1.1.1.11 Ifp en0 Ifa 192.168.130.16
+failed to add: Host 1.1.1.9 Gate 1.1.1.10 Ifp en0 Ifa 192.168.130.16
+failed to add: Host 1.1.1.8 Gate 1.1.1.9 Ifp en0 Ifa 192.168.130.16
+failed to add: Host 1.1.1.7 Gate 1.1.1.8 Ifp en0 Ifa 192.168.130.16
+failed to add: Host 1.1.1.6 Gate 1.1.1.7 Ifp en0 Ifa 192.168.130.16
+failed to add: Host 1.1.1.5 Gate 1.1.1.6 Ifp en0 Ifa 192.168.130.16
+failed to add: Host 1.1.1.4 Gate 1.1.1.5 Ifp en0 Ifa 192.168.130.16
+failed to add: Host 1.1.1.3 Gate 1.1.1.4 Ifp en0 Ifa 192.168.130.16
+failed to add: Host 1.1.1.2 Gate 1.1.1.3 Ifp en0 Ifa 192.168.130.16
+failed to add: Host 1.1.1.1 Gate 1.1.1.2 Ifp en0 Ifa 192.168.130.16
 Add new[12]: Net 192.168.130.0/24 Ifp en0 Ifa 192.168.130.16
-New Routes ('test5') = <IPv4RouteList[12]> = {
+Add new[14]: Net 224.0.0.0/4 Ifp en0 Ifa 192.168.130.16
+Add new[15]: Net 255.255.255.255/32 Ifp en0 Ifa 192.168.130.16
+New Routes ('test5') = <IPv4RouteList[18]> = {
  0. Net 0.0.0.0/0 Gate 17.219.156.1 Ifp ppp0 Ifa 17.219.156.22
  1. Net 0.0.0.0/0 Gate 17.202.20.1 Ifp en0 Ifa 17.202.40.191 [SCOPED]
  2. Net 0.0.0.0/0 Gate 17.202.20.1 Ifp en1 Ifa 17.202.42.24 [SCOPED]
@@ -9800,10 +13794,18 @@ New Routes ('test5') = <IPv4RouteList[12]> = {
  9. Net 17.202.40.0/22 Ifp en0 Ifa 17.202.40.191
 10. Net 17.202.40.0/22 Ifp en1 Ifa 17.202.42.24 [SCOPED]
 11. Net 17.219.156.1/32 Ifp ppp0 Ifa 17.219.156.22
+12. Net 224.0.0.0/4 Ifp ppp0 Ifa 17.219.156.22
+13. Net 224.0.0.0/4 Ifp en0 Ifa 17.202.40.191 [SCOPED]
+14. Net 224.0.0.0/4 Ifp en1 Ifa 17.202.42.24 [SCOPED]
+15. Net 255.255.255.255/32 Ifp ppp0 Ifa 17.219.156.22
+16. Net 255.255.255.255/32 Ifp en0 Ifa 17.202.40.191 [SCOPED]
+17. Net 255.255.255.255/32 Ifp en1 Ifa 17.202.42.24 [SCOPED]
 }
 Remove old[0]: Net 0.0.0.0/0 Gate 192.168.130.1 Ifp en0 Ifa 192.168.130.16
 Remove old[12]: Net 192.168.130.0/24 Ifp en0 Ifa 192.168.130.16
 Remove old[13]: Net 192.168.130.1/32 Ifp en0 Ifa 192.168.130.16
+Remove old[14]: Net 224.0.0.0/4 Ifp en0 Ifa 192.168.130.16
+Remove old[15]: Net 255.255.255.255/32 Ifp en0 Ifa 192.168.130.16
 Add new[11]: Net 17.219.156.1/32 Ifp ppp0 Ifa 17.219.156.22
 Add new[0]: Net 0.0.0.0/0 Gate 17.219.156.1 Ifp ppp0 Ifa 17.219.156.22
 Add new[7]: Net 17.202.20.1/32 Ifp en0 Ifa 17.202.40.191
@@ -9816,155 +13818,245 @@ Add new[5]: Net 10.0.0.1/32 Ifp en1 Ifa 10.0.0.20
 Add new[6]: Net 10.0.0.1/32 Ifp en0 Ifa 10.0.0.11 [SCOPED]
 Add new[9]: Net 17.202.40.0/22 Ifp en0 Ifa 17.202.40.191
 Add new[10]: Net 17.202.40.0/22 Ifp en1 Ifa 17.202.42.24 [SCOPED]
+Add new[12]: Net 224.0.0.0/4 Ifp ppp0 Ifa 17.219.156.22
+Add new[13]: Net 224.0.0.0/4 Ifp en0 Ifa 17.202.40.191 [SCOPED]
+Add new[14]: Net 224.0.0.0/4 Ifp en1 Ifa 17.202.42.24 [SCOPED]
+Add new[15]: Net 255.255.255.255/32 Ifp ppp0 Ifa 17.219.156.22
+Add new[16]: Net 255.255.255.255/32 Ifp en0 Ifa 17.202.40.191 [SCOPED]
+Add new[17]: Net 255.255.255.255/32 Ifp en1 Ifa 17.202.42.24 [SCOPED]
 =================> Apply 'test18', 'test5' End <=================
 
 =================> Apply 'test6', 'test7' Begin <=================
-Old routes ('test6') = <IPv4RouteList[10]> = {
+Old routes ('test6') = <IPv4RouteList[18]> = {
  0. Net 0.0.0.0/0 Gate 17.255.96.1 Ifp en2 Ifa 17.255.98.164
  1. Net 0.0.0.0/0 Gate 17.202.40.1 Ifp en0 Ifa 17.202.42.113 [SCOPED]
  2. Net 0.0.0.0/0 Gate 17.202.40.1 Ifp en1 Ifa 17.202.42.111 [SCOPED]
- 3. Net 0.0.0.0/0 Ifp fw0 Ifa 169.254.11.33 [SCOPED]
- 4. Net 17.202.40.0/22 Ifp en0 Ifa 17.202.42.113
- 5. Net 17.202.40.0/22 Ifp en1 Ifa 17.202.42.111 [SCOPED]
- 6. Net 17.202.40.1/32 Ifp en0 Ifa 17.202.42.113
- 7. Net 17.202.40.1/32 Ifp en1 Ifa 17.202.42.111 [SCOPED]
- 8. Net 17.255.96.0/20 Ifp en2 Ifa 17.255.98.164
- 9. Net 17.255.96.1/32 Ifp en2 Ifa 17.255.98.164
-}
-Add new[9]: Net 17.255.96.1/32 Ifp en2 Ifa 17.255.98.164
+ 3. Net 17.202.40.0/22 Ifp en0 Ifa 17.202.42.113
+ 4. Net 17.202.40.0/22 Ifp en1 Ifa 17.202.42.111 [SCOPED]
+ 5. Net 17.202.40.1/32 Ifp en0 Ifa 17.202.42.113
+ 6. Net 17.202.40.1/32 Ifp en1 Ifa 17.202.42.111 [SCOPED]
+ 7. Net 17.255.96.0/20 Ifp en2 Ifa 17.255.98.164
+ 8. Net 17.255.96.1/32 Ifp en2 Ifa 17.255.98.164
+ 9. Net 169.254.0.0/16 Ifp fw0 Ifa 169.254.11.33 [last]
+10. Net 224.0.0.0/4 Ifp en2 Ifa 17.255.98.164
+11. Net 224.0.0.0/4 Ifp en0 Ifa 17.202.42.113 [SCOPED]
+12. Net 224.0.0.0/4 Ifp en1 Ifa 17.202.42.111 [SCOPED]
+13. Net 224.0.0.0/4 Ifp fw0 Ifa 169.254.11.33 [last] [SCOPED]
+14. Net 255.255.255.255/32 Ifp en2 Ifa 17.255.98.164
+15. Net 255.255.255.255/32 Ifp en0 Ifa 17.202.42.113 [SCOPED]
+16. Net 255.255.255.255/32 Ifp en1 Ifa 17.202.42.111 [SCOPED]
+17. Net 255.255.255.255/32 Ifp fw0 Ifa 169.254.11.33 [last] [SCOPED]
+}
+Add new[8]: Net 17.255.96.1/32 Ifp en2 Ifa 17.255.98.164
 Add new[0]: Net 0.0.0.0/0 Gate 17.255.96.1 Ifp en2 Ifa 17.255.98.164
-Add new[6]: Net 17.202.40.1/32 Ifp en0 Ifa 17.202.42.113
+Add new[5]: Net 17.202.40.1/32 Ifp en0 Ifa 17.202.42.113
 Add new[1]: Net 0.0.0.0/0 Gate 17.202.40.1 Ifp en0 Ifa 17.202.42.113 [SCOPED]
-Add new[7]: Net 17.202.40.1/32 Ifp en1 Ifa 17.202.42.111 [SCOPED]
+Add new[6]: Net 17.202.40.1/32 Ifp en1 Ifa 17.202.42.111 [SCOPED]
 Add new[2]: Net 0.0.0.0/0 Gate 17.202.40.1 Ifp en1 Ifa 17.202.42.111 [SCOPED]
-Add new[3]: Net 0.0.0.0/0 Ifp fw0 Ifa 169.254.11.33 [SCOPED]
-Add new[4]: Net 17.202.40.0/22 Ifp en0 Ifa 17.202.42.113
-Add new[5]: Net 17.202.40.0/22 Ifp en1 Ifa 17.202.42.111 [SCOPED]
-Add new[8]: Net 17.255.96.0/20 Ifp en2 Ifa 17.255.98.164
-New Routes ('test7') = <IPv4RouteList[10]> = {
+Add new[3]: Net 17.202.40.0/22 Ifp en0 Ifa 17.202.42.113
+Add new[4]: Net 17.202.40.0/22 Ifp en1 Ifa 17.202.42.111 [SCOPED]
+Add new[7]: Net 17.255.96.0/20 Ifp en2 Ifa 17.255.98.164
+Add new[9]: Net 169.254.0.0/16 Ifp fw0 Ifa 169.254.11.33 [last]
+Add new[10]: Net 224.0.0.0/4 Ifp en2 Ifa 17.255.98.164
+Add new[11]: Net 224.0.0.0/4 Ifp en0 Ifa 17.202.42.113 [SCOPED]
+Add new[12]: Net 224.0.0.0/4 Ifp en1 Ifa 17.202.42.111 [SCOPED]
+Add new[13]: Net 224.0.0.0/4 Ifp fw0 Ifa 169.254.11.33 [last] [SCOPED]
+Add new[14]: Net 255.255.255.255/32 Ifp en2 Ifa 17.255.98.164
+Add new[15]: Net 255.255.255.255/32 Ifp en0 Ifa 17.202.42.113 [SCOPED]
+Add new[16]: Net 255.255.255.255/32 Ifp en1 Ifa 17.202.42.111 [SCOPED]
+Add new[17]: Net 255.255.255.255/32 Ifp fw0 Ifa 169.254.11.33 [last] [SCOPED]
+New Routes ('test7') = <IPv4RouteList[18]> = {
  0. Net 0.0.0.0/0 Gate 17.255.96.1 Ifp en2 Ifa 17.255.98.164
  1. Net 0.0.0.0/0 Gate 17.202.40.1 Ifp en1 Ifa 17.202.42.111 [SCOPED]
  2. Net 0.0.0.0/0 Gate 17.202.40.1 Ifp en0 Ifa 17.202.42.113 [SCOPED]
- 3. Net 0.0.0.0/0 Ifp fw0 Ifa 169.254.11.33 [SCOPED]
- 4. Net 17.202.40.0/22 Ifp en1 Ifa 17.202.42.111
- 5. Net 17.202.40.0/22 Ifp en0 Ifa 17.202.42.113 [SCOPED]
- 6. Net 17.202.40.1/32 Ifp en1 Ifa 17.202.42.111
- 7. Net 17.202.40.1/32 Ifp en0 Ifa 17.202.42.113 [SCOPED]
- 8. Net 17.255.96.0/20 Ifp en2 Ifa 17.255.98.164
- 9. Net 17.255.96.1/32 Ifp en2 Ifa 17.255.98.164
-}
-Remove old[4]: Net 17.202.40.0/22 Ifp en0 Ifa 17.202.42.113
-Remove old[5]: Net 17.202.40.0/22 Ifp en1 Ifa 17.202.42.111 [SCOPED]
-Remove old[6]: Net 17.202.40.1/32 Ifp en0 Ifa 17.202.42.113
-Remove old[7]: Net 17.202.40.1/32 Ifp en1 Ifa 17.202.42.111 [SCOPED]
-Add new[4]: Net 17.202.40.0/22 Ifp en1 Ifa 17.202.42.111
-Add new[5]: Net 17.202.40.0/22 Ifp en0 Ifa 17.202.42.113 [SCOPED]
-Add new[6]: Net 17.202.40.1/32 Ifp en1 Ifa 17.202.42.111
-Add new[7]: Net 17.202.40.1/32 Ifp en0 Ifa 17.202.42.113 [SCOPED]
+ 3. Net 17.202.40.0/22 Ifp en1 Ifa 17.202.42.111
+ 4. Net 17.202.40.0/22 Ifp en0 Ifa 17.202.42.113 [SCOPED]
+ 5. Net 17.202.40.1/32 Ifp en1 Ifa 17.202.42.111
+ 6. Net 17.202.40.1/32 Ifp en0 Ifa 17.202.42.113 [SCOPED]
+ 7. Net 17.255.96.0/20 Ifp en2 Ifa 17.255.98.164
+ 8. Net 17.255.96.1/32 Ifp en2 Ifa 17.255.98.164
+ 9. Net 169.254.0.0/16 Ifp fw0 Ifa 169.254.11.33 [last]
+10. Net 224.0.0.0/4 Ifp en2 Ifa 17.255.98.164
+11. Net 224.0.0.0/4 Ifp en1 Ifa 17.202.42.111 [SCOPED]
+12. Net 224.0.0.0/4 Ifp en0 Ifa 17.202.42.113 [SCOPED]
+13. Net 224.0.0.0/4 Ifp fw0 Ifa 169.254.11.33 [last] [SCOPED]
+14. Net 255.255.255.255/32 Ifp en2 Ifa 17.255.98.164
+15. Net 255.255.255.255/32 Ifp en1 Ifa 17.202.42.111 [SCOPED]
+16. Net 255.255.255.255/32 Ifp en0 Ifa 17.202.42.113 [SCOPED]
+17. Net 255.255.255.255/32 Ifp fw0 Ifa 169.254.11.33 [last] [SCOPED]
+}
+Remove old[3]: Net 17.202.40.0/22 Ifp en0 Ifa 17.202.42.113
+Remove old[4]: Net 17.202.40.0/22 Ifp en1 Ifa 17.202.42.111 [SCOPED]
+Remove old[5]: Net 17.202.40.1/32 Ifp en0 Ifa 17.202.42.113
+Remove old[6]: Net 17.202.40.1/32 Ifp en1 Ifa 17.202.42.111 [SCOPED]
+Add new[3]: Net 17.202.40.0/22 Ifp en1 Ifa 17.202.42.111
+Add new[4]: Net 17.202.40.0/22 Ifp en0 Ifa 17.202.42.113 [SCOPED]
+Add new[5]: Net 17.202.40.1/32 Ifp en1 Ifa 17.202.42.111
+Add new[6]: Net 17.202.40.1/32 Ifp en0 Ifa 17.202.42.113 [SCOPED]
 =================> Apply 'test6', 'test7' End <=================
 
 =================> Apply 'test7', 'test6' Begin <=================
-Old routes ('test7') = <IPv4RouteList[10]> = {
+Old routes ('test7') = <IPv4RouteList[18]> = {
  0. Net 0.0.0.0/0 Gate 17.255.96.1 Ifp en2 Ifa 17.255.98.164
  1. Net 0.0.0.0/0 Gate 17.202.40.1 Ifp en1 Ifa 17.202.42.111 [SCOPED]
  2. Net 0.0.0.0/0 Gate 17.202.40.1 Ifp en0 Ifa 17.202.42.113 [SCOPED]
- 3. Net 0.0.0.0/0 Ifp fw0 Ifa 169.254.11.33 [SCOPED]
- 4. Net 17.202.40.0/22 Ifp en1 Ifa 17.202.42.111
- 5. Net 17.202.40.0/22 Ifp en0 Ifa 17.202.42.113 [SCOPED]
- 6. Net 17.202.40.1/32 Ifp en1 Ifa 17.202.42.111
- 7. Net 17.202.40.1/32 Ifp en0 Ifa 17.202.42.113 [SCOPED]
- 8. Net 17.255.96.0/20 Ifp en2 Ifa 17.255.98.164
- 9. Net 17.255.96.1/32 Ifp en2 Ifa 17.255.98.164
-}
-Add new[9]: Net 17.255.96.1/32 Ifp en2 Ifa 17.255.98.164
+ 3. Net 17.202.40.0/22 Ifp en1 Ifa 17.202.42.111
+ 4. Net 17.202.40.0/22 Ifp en0 Ifa 17.202.42.113 [SCOPED]
+ 5. Net 17.202.40.1/32 Ifp en1 Ifa 17.202.42.111
+ 6. Net 17.202.40.1/32 Ifp en0 Ifa 17.202.42.113 [SCOPED]
+ 7. Net 17.255.96.0/20 Ifp en2 Ifa 17.255.98.164
+ 8. Net 17.255.96.1/32 Ifp en2 Ifa 17.255.98.164
+ 9. Net 169.254.0.0/16 Ifp fw0 Ifa 169.254.11.33 [last]
+10. Net 224.0.0.0/4 Ifp en2 Ifa 17.255.98.164
+11. Net 224.0.0.0/4 Ifp en1 Ifa 17.202.42.111 [SCOPED]
+12. Net 224.0.0.0/4 Ifp en0 Ifa 17.202.42.113 [SCOPED]
+13. Net 224.0.0.0/4 Ifp fw0 Ifa 169.254.11.33 [last] [SCOPED]
+14. Net 255.255.255.255/32 Ifp en2 Ifa 17.255.98.164
+15. Net 255.255.255.255/32 Ifp en1 Ifa 17.202.42.111 [SCOPED]
+16. Net 255.255.255.255/32 Ifp en0 Ifa 17.202.42.113 [SCOPED]
+17. Net 255.255.255.255/32 Ifp fw0 Ifa 169.254.11.33 [last] [SCOPED]
+}
+Add new[8]: Net 17.255.96.1/32 Ifp en2 Ifa 17.255.98.164
 Add new[0]: Net 0.0.0.0/0 Gate 17.255.96.1 Ifp en2 Ifa 17.255.98.164
-Add new[6]: Net 17.202.40.1/32 Ifp en1 Ifa 17.202.42.111
+Add new[5]: Net 17.202.40.1/32 Ifp en1 Ifa 17.202.42.111
 Add new[1]: Net 0.0.0.0/0 Gate 17.202.40.1 Ifp en1 Ifa 17.202.42.111 [SCOPED]
-Add new[7]: Net 17.202.40.1/32 Ifp en0 Ifa 17.202.42.113 [SCOPED]
+Add new[6]: Net 17.202.40.1/32 Ifp en0 Ifa 17.202.42.113 [SCOPED]
 Add new[2]: Net 0.0.0.0/0 Gate 17.202.40.1 Ifp en0 Ifa 17.202.42.113 [SCOPED]
-Add new[3]: Net 0.0.0.0/0 Ifp fw0 Ifa 169.254.11.33 [SCOPED]
-Add new[4]: Net 17.202.40.0/22 Ifp en1 Ifa 17.202.42.111
-Add new[5]: Net 17.202.40.0/22 Ifp en0 Ifa 17.202.42.113 [SCOPED]
-Add new[8]: Net 17.255.96.0/20 Ifp en2 Ifa 17.255.98.164
-New Routes ('test6') = <IPv4RouteList[10]> = {
+Add new[3]: Net 17.202.40.0/22 Ifp en1 Ifa 17.202.42.111
+Add new[4]: Net 17.202.40.0/22 Ifp en0 Ifa 17.202.42.113 [SCOPED]
+Add new[7]: Net 17.255.96.0/20 Ifp en2 Ifa 17.255.98.164
+Add new[9]: Net 169.254.0.0/16 Ifp fw0 Ifa 169.254.11.33 [last]
+Add new[10]: Net 224.0.0.0/4 Ifp en2 Ifa 17.255.98.164
+Add new[11]: Net 224.0.0.0/4 Ifp en1 Ifa 17.202.42.111 [SCOPED]
+Add new[12]: Net 224.0.0.0/4 Ifp en0 Ifa 17.202.42.113 [SCOPED]
+Add new[13]: Net 224.0.0.0/4 Ifp fw0 Ifa 169.254.11.33 [last] [SCOPED]
+Add new[14]: Net 255.255.255.255/32 Ifp en2 Ifa 17.255.98.164
+Add new[15]: Net 255.255.255.255/32 Ifp en1 Ifa 17.202.42.111 [SCOPED]
+Add new[16]: Net 255.255.255.255/32 Ifp en0 Ifa 17.202.42.113 [SCOPED]
+Add new[17]: Net 255.255.255.255/32 Ifp fw0 Ifa 169.254.11.33 [last] [SCOPED]
+New Routes ('test6') = <IPv4RouteList[18]> = {
  0. Net 0.0.0.0/0 Gate 17.255.96.1 Ifp en2 Ifa 17.255.98.164
  1. Net 0.0.0.0/0 Gate 17.202.40.1 Ifp en0 Ifa 17.202.42.113 [SCOPED]
  2. Net 0.0.0.0/0 Gate 17.202.40.1 Ifp en1 Ifa 17.202.42.111 [SCOPED]
- 3. Net 0.0.0.0/0 Ifp fw0 Ifa 169.254.11.33 [SCOPED]
- 4. Net 17.202.40.0/22 Ifp en0 Ifa 17.202.42.113
- 5. Net 17.202.40.0/22 Ifp en1 Ifa 17.202.42.111 [SCOPED]
- 6. Net 17.202.40.1/32 Ifp en0 Ifa 17.202.42.113
- 7. Net 17.202.40.1/32 Ifp en1 Ifa 17.202.42.111 [SCOPED]
- 8. Net 17.255.96.0/20 Ifp en2 Ifa 17.255.98.164
- 9. Net 17.255.96.1/32 Ifp en2 Ifa 17.255.98.164
-}
-Remove old[4]: Net 17.202.40.0/22 Ifp en1 Ifa 17.202.42.111
-Remove old[5]: Net 17.202.40.0/22 Ifp en0 Ifa 17.202.42.113 [SCOPED]
-Remove old[6]: Net 17.202.40.1/32 Ifp en1 Ifa 17.202.42.111
-Remove old[7]: Net 17.202.40.1/32 Ifp en0 Ifa 17.202.42.113 [SCOPED]
-Add new[4]: Net 17.202.40.0/22 Ifp en0 Ifa 17.202.42.113
-Add new[5]: Net 17.202.40.0/22 Ifp en1 Ifa 17.202.42.111 [SCOPED]
-Add new[6]: Net 17.202.40.1/32 Ifp en0 Ifa 17.202.42.113
-Add new[7]: Net 17.202.40.1/32 Ifp en1 Ifa 17.202.42.111 [SCOPED]
+ 3. Net 17.202.40.0/22 Ifp en0 Ifa 17.202.42.113
+ 4. Net 17.202.40.0/22 Ifp en1 Ifa 17.202.42.111 [SCOPED]
+ 5. Net 17.202.40.1/32 Ifp en0 Ifa 17.202.42.113
+ 6. Net 17.202.40.1/32 Ifp en1 Ifa 17.202.42.111 [SCOPED]
+ 7. Net 17.255.96.0/20 Ifp en2 Ifa 17.255.98.164
+ 8. Net 17.255.96.1/32 Ifp en2 Ifa 17.255.98.164
+ 9. Net 169.254.0.0/16 Ifp fw0 Ifa 169.254.11.33 [last]
+10. Net 224.0.0.0/4 Ifp en2 Ifa 17.255.98.164
+11. Net 224.0.0.0/4 Ifp en0 Ifa 17.202.42.113 [SCOPED]
+12. Net 224.0.0.0/4 Ifp en1 Ifa 17.202.42.111 [SCOPED]
+13. Net 224.0.0.0/4 Ifp fw0 Ifa 169.254.11.33 [last] [SCOPED]
+14. Net 255.255.255.255/32 Ifp en2 Ifa 17.255.98.164
+15. Net 255.255.255.255/32 Ifp en0 Ifa 17.202.42.113 [SCOPED]
+16. Net 255.255.255.255/32 Ifp en1 Ifa 17.202.42.111 [SCOPED]
+17. Net 255.255.255.255/32 Ifp fw0 Ifa 169.254.11.33 [last] [SCOPED]
+}
+Remove old[3]: Net 17.202.40.0/22 Ifp en1 Ifa 17.202.42.111
+Remove old[4]: Net 17.202.40.0/22 Ifp en0 Ifa 17.202.42.113 [SCOPED]
+Remove old[5]: Net 17.202.40.1/32 Ifp en1 Ifa 17.202.42.111
+Remove old[6]: Net 17.202.40.1/32 Ifp en0 Ifa 17.202.42.113 [SCOPED]
+Add new[3]: Net 17.202.40.0/22 Ifp en0 Ifa 17.202.42.113
+Add new[4]: Net 17.202.40.0/22 Ifp en1 Ifa 17.202.42.111 [SCOPED]
+Add new[5]: Net 17.202.40.1/32 Ifp en0 Ifa 17.202.42.113
+Add new[6]: Net 17.202.40.1/32 Ifp en1 Ifa 17.202.42.111 [SCOPED]
 =================> Apply 'test7', 'test6' End <=================
 
 =================> Apply 'test6', 'test8' Begin <=================
-Old routes ('test6') = <IPv4RouteList[10]> = {
+Old routes ('test6') = <IPv4RouteList[18]> = {
  0. Net 0.0.0.0/0 Gate 17.255.96.1 Ifp en2 Ifa 17.255.98.164
  1. Net 0.0.0.0/0 Gate 17.202.40.1 Ifp en0 Ifa 17.202.42.113 [SCOPED]
  2. Net 0.0.0.0/0 Gate 17.202.40.1 Ifp en1 Ifa 17.202.42.111 [SCOPED]
- 3. Net 0.0.0.0/0 Ifp fw0 Ifa 169.254.11.33 [SCOPED]
- 4. Net 17.202.40.0/22 Ifp en0 Ifa 17.202.42.113
- 5. Net 17.202.40.0/22 Ifp en1 Ifa 17.202.42.111 [SCOPED]
- 6. Net 17.202.40.1/32 Ifp en0 Ifa 17.202.42.113
- 7. Net 17.202.40.1/32 Ifp en1 Ifa 17.202.42.111 [SCOPED]
- 8. Net 17.255.96.0/20 Ifp en2 Ifa 17.255.98.164
- 9. Net 17.255.96.1/32 Ifp en2 Ifa 17.255.98.164
-}
-Add new[9]: Net 17.255.96.1/32 Ifp en2 Ifa 17.255.98.164
+ 3. Net 17.202.40.0/22 Ifp en0 Ifa 17.202.42.113
+ 4. Net 17.202.40.0/22 Ifp en1 Ifa 17.202.42.111 [SCOPED]
+ 5. Net 17.202.40.1/32 Ifp en0 Ifa 17.202.42.113
+ 6. Net 17.202.40.1/32 Ifp en1 Ifa 17.202.42.111 [SCOPED]
+ 7. Net 17.255.96.0/20 Ifp en2 Ifa 17.255.98.164
+ 8. Net 17.255.96.1/32 Ifp en2 Ifa 17.255.98.164
+ 9. Net 169.254.0.0/16 Ifp fw0 Ifa 169.254.11.33 [last]
+10. Net 224.0.0.0/4 Ifp en2 Ifa 17.255.98.164
+11. Net 224.0.0.0/4 Ifp en0 Ifa 17.202.42.113 [SCOPED]
+12. Net 224.0.0.0/4 Ifp en1 Ifa 17.202.42.111 [SCOPED]
+13. Net 224.0.0.0/4 Ifp fw0 Ifa 169.254.11.33 [last] [SCOPED]
+14. Net 255.255.255.255/32 Ifp en2 Ifa 17.255.98.164
+15. Net 255.255.255.255/32 Ifp en0 Ifa 17.202.42.113 [SCOPED]
+16. Net 255.255.255.255/32 Ifp en1 Ifa 17.202.42.111 [SCOPED]
+17. Net 255.255.255.255/32 Ifp fw0 Ifa 169.254.11.33 [last] [SCOPED]
+}
+Add new[8]: Net 17.255.96.1/32 Ifp en2 Ifa 17.255.98.164
 Add new[0]: Net 0.0.0.0/0 Gate 17.255.96.1 Ifp en2 Ifa 17.255.98.164
-Add new[6]: Net 17.202.40.1/32 Ifp en0 Ifa 17.202.42.113
+Add new[5]: Net 17.202.40.1/32 Ifp en0 Ifa 17.202.42.113
 Add new[1]: Net 0.0.0.0/0 Gate 17.202.40.1 Ifp en0 Ifa 17.202.42.113 [SCOPED]
-Add new[7]: Net 17.202.40.1/32 Ifp en1 Ifa 17.202.42.111 [SCOPED]
+Add new[6]: Net 17.202.40.1/32 Ifp en1 Ifa 17.202.42.111 [SCOPED]
 Add new[2]: Net 0.0.0.0/0 Gate 17.202.40.1 Ifp en1 Ifa 17.202.42.111 [SCOPED]
-Add new[3]: Net 0.0.0.0/0 Ifp fw0 Ifa 169.254.11.33 [SCOPED]
-Add new[4]: Net 17.202.40.0/22 Ifp en0 Ifa 17.202.42.113
-Add new[5]: Net 17.202.40.0/22 Ifp en1 Ifa 17.202.42.111 [SCOPED]
-Add new[8]: Net 17.255.96.0/20 Ifp en2 Ifa 17.255.98.164
-New Routes ('test8') = <IPv4RouteList[6]> = {
+Add new[3]: Net 17.202.40.0/22 Ifp en0 Ifa 17.202.42.113
+Add new[4]: Net 17.202.40.0/22 Ifp en1 Ifa 17.202.42.111 [SCOPED]
+Add new[7]: Net 17.255.96.0/20 Ifp en2 Ifa 17.255.98.164
+Add new[9]: Net 169.254.0.0/16 Ifp fw0 Ifa 169.254.11.33 [last]
+Add new[10]: Net 224.0.0.0/4 Ifp en2 Ifa 17.255.98.164
+Add new[11]: Net 224.0.0.0/4 Ifp en0 Ifa 17.202.42.113 [SCOPED]
+Add new[12]: Net 224.0.0.0/4 Ifp en1 Ifa 17.202.42.111 [SCOPED]
+Add new[13]: Net 224.0.0.0/4 Ifp fw0 Ifa 169.254.11.33 [last] [SCOPED]
+Add new[14]: Net 255.255.255.255/32 Ifp en2 Ifa 17.255.98.164
+Add new[15]: Net 255.255.255.255/32 Ifp en0 Ifa 17.202.42.113 [SCOPED]
+Add new[16]: Net 255.255.255.255/32 Ifp en1 Ifa 17.202.42.111 [SCOPED]
+Add new[17]: Net 255.255.255.255/32 Ifp fw0 Ifa 169.254.11.33 [last] [SCOPED]
+New Routes ('test8') = <IPv4RouteList[10]> = {
  0. Net 0.0.0.0/0 Gate 10.0.0.1 Ifp en0 Ifa 10.0.0.10
  1. Net 0.0.0.0/0 Gate 10.0.0.1 Ifp en1 Ifa 10.0.0.20 [SCOPED]
  2. Net 10.0.0.0/24 Ifp en0 Ifa 10.0.0.10
  3. Net 10.0.0.0/24 Ifp en1 Ifa 10.0.0.20 [SCOPED]
  4. Net 10.0.0.1/32 Ifp en0 Ifa 10.0.0.10
  5. Net 10.0.0.1/32 Ifp en1 Ifa 10.0.0.20 [SCOPED]
+ 6. Net 224.0.0.0/4 Ifp en0 Ifa 10.0.0.10
+ 7. Net 224.0.0.0/4 Ifp en1 Ifa 10.0.0.20 [SCOPED]
+ 8. Net 255.255.255.255/32 Ifp en0 Ifa 10.0.0.10
+ 9. Net 255.255.255.255/32 Ifp en1 Ifa 10.0.0.20 [SCOPED]
 }
 Remove old[0]: Net 0.0.0.0/0 Gate 17.255.96.1 Ifp en2 Ifa 17.255.98.164
 Remove old[1]: Net 0.0.0.0/0 Gate 17.202.40.1 Ifp en0 Ifa 17.202.42.113 [SCOPED]
 Remove old[2]: Net 0.0.0.0/0 Gate 17.202.40.1 Ifp en1 Ifa 17.202.42.111 [SCOPED]
-Remove old[3]: Net 0.0.0.0/0 Ifp fw0 Ifa 169.254.11.33 [SCOPED]
-Remove old[4]: Net 17.202.40.0/22 Ifp en0 Ifa 17.202.42.113
-Remove old[5]: Net 17.202.40.0/22 Ifp en1 Ifa 17.202.42.111 [SCOPED]
-Remove old[6]: Net 17.202.40.1/32 Ifp en0 Ifa 17.202.42.113
-Remove old[7]: Net 17.202.40.1/32 Ifp en1 Ifa 17.202.42.111 [SCOPED]
-Remove old[8]: Net 17.255.96.0/20 Ifp en2 Ifa 17.255.98.164
-Remove old[9]: Net 17.255.96.1/32 Ifp en2 Ifa 17.255.98.164
+Remove old[3]: Net 17.202.40.0/22 Ifp en0 Ifa 17.202.42.113
+Remove old[4]: Net 17.202.40.0/22 Ifp en1 Ifa 17.202.42.111 [SCOPED]
+Remove old[5]: Net 17.202.40.1/32 Ifp en0 Ifa 17.202.42.113
+Remove old[6]: Net 17.202.40.1/32 Ifp en1 Ifa 17.202.42.111 [SCOPED]
+Remove old[7]: Net 17.255.96.0/20 Ifp en2 Ifa 17.255.98.164
+Remove old[8]: Net 17.255.96.1/32 Ifp en2 Ifa 17.255.98.164
+Remove old[9]: Net 169.254.0.0/16 Ifp fw0 Ifa 169.254.11.33 [last]
+Remove old[10]: Net 224.0.0.0/4 Ifp en2 Ifa 17.255.98.164
+Remove old[11]: Net 224.0.0.0/4 Ifp en0 Ifa 17.202.42.113 [SCOPED]
+Remove old[12]: Net 224.0.0.0/4 Ifp en1 Ifa 17.202.42.111 [SCOPED]
+Remove old[13]: Net 224.0.0.0/4 Ifp fw0 Ifa 169.254.11.33 [last] [SCOPED]
+Remove old[14]: Net 255.255.255.255/32 Ifp en2 Ifa 17.255.98.164
+Remove old[15]: Net 255.255.255.255/32 Ifp en0 Ifa 17.202.42.113 [SCOPED]
+Remove old[16]: Net 255.255.255.255/32 Ifp en1 Ifa 17.202.42.111 [SCOPED]
+Remove old[17]: Net 255.255.255.255/32 Ifp fw0 Ifa 169.254.11.33 [last] [SCOPED]
 Add new[4]: Net 10.0.0.1/32 Ifp en0 Ifa 10.0.0.10
 Add new[0]: Net 0.0.0.0/0 Gate 10.0.0.1 Ifp en0 Ifa 10.0.0.10
 Add new[5]: Net 10.0.0.1/32 Ifp en1 Ifa 10.0.0.20 [SCOPED]
 Add new[1]: Net 0.0.0.0/0 Gate 10.0.0.1 Ifp en1 Ifa 10.0.0.20 [SCOPED]
 Add new[2]: Net 10.0.0.0/24 Ifp en0 Ifa 10.0.0.10
 Add new[3]: Net 10.0.0.0/24 Ifp en1 Ifa 10.0.0.20 [SCOPED]
+Add new[6]: Net 224.0.0.0/4 Ifp en0 Ifa 10.0.0.10
+Add new[7]: Net 224.0.0.0/4 Ifp en1 Ifa 10.0.0.20 [SCOPED]
+Add new[8]: Net 255.255.255.255/32 Ifp en0 Ifa 10.0.0.10
+Add new[9]: Net 255.255.255.255/32 Ifp en1 Ifa 10.0.0.20 [SCOPED]
 =================> Apply 'test6', 'test8' End <=================
 
 =================> Apply 'test8', 'test6' Begin <=================
-Old routes ('test8') = <IPv4RouteList[6]> = {
+Old routes ('test8') = <IPv4RouteList[10]> = {
  0. Net 0.0.0.0/0 Gate 10.0.0.1 Ifp en0 Ifa 10.0.0.10
  1. Net 0.0.0.0/0 Gate 10.0.0.1 Ifp en1 Ifa 10.0.0.20 [SCOPED]
  2. Net 10.0.0.0/24 Ifp en0 Ifa 10.0.0.10
  3. Net 10.0.0.0/24 Ifp en1 Ifa 10.0.0.20 [SCOPED]
  4. Net 10.0.0.1/32 Ifp en0 Ifa 10.0.0.10
  5. Net 10.0.0.1/32 Ifp en1 Ifa 10.0.0.20 [SCOPED]
+ 6. Net 224.0.0.0/4 Ifp en0 Ifa 10.0.0.10
+ 7. Net 224.0.0.0/4 Ifp en1 Ifa 10.0.0.20 [SCOPED]
+ 8. Net 255.255.255.255/32 Ifp en0 Ifa 10.0.0.10
+ 9. Net 255.255.255.255/32 Ifp en1 Ifa 10.0.0.20 [SCOPED]
 }
 Add new[4]: Net 10.0.0.1/32 Ifp en0 Ifa 10.0.0.10
 Add new[0]: Net 0.0.0.0/0 Gate 10.0.0.1 Ifp en0 Ifa 10.0.0.10
@@ -9972,17 +14064,29 @@ Add new[5]: Net 10.0.0.1/32 Ifp en1 Ifa 10.0.0.20 [SCOPED]
 Add new[1]: Net 0.0.0.0/0 Gate 10.0.0.1 Ifp en1 Ifa 10.0.0.20 [SCOPED]
 Add new[2]: Net 10.0.0.0/24 Ifp en0 Ifa 10.0.0.10
 Add new[3]: Net 10.0.0.0/24 Ifp en1 Ifa 10.0.0.20 [SCOPED]
-New Routes ('test6') = <IPv4RouteList[10]> = {
+Add new[6]: Net 224.0.0.0/4 Ifp en0 Ifa 10.0.0.10
+Add new[7]: Net 224.0.0.0/4 Ifp en1 Ifa 10.0.0.20 [SCOPED]
+Add new[8]: Net 255.255.255.255/32 Ifp en0 Ifa 10.0.0.10
+Add new[9]: Net 255.255.255.255/32 Ifp en1 Ifa 10.0.0.20 [SCOPED]
+New Routes ('test6') = <IPv4RouteList[18]> = {
  0. Net 0.0.0.0/0 Gate 17.255.96.1 Ifp en2 Ifa 17.255.98.164
  1. Net 0.0.0.0/0 Gate 17.202.40.1 Ifp en0 Ifa 17.202.42.113 [SCOPED]
  2. Net 0.0.0.0/0 Gate 17.202.40.1 Ifp en1 Ifa 17.202.42.111 [SCOPED]
- 3. Net 0.0.0.0/0 Ifp fw0 Ifa 169.254.11.33 [SCOPED]
- 4. Net 17.202.40.0/22 Ifp en0 Ifa 17.202.42.113
- 5. Net 17.202.40.0/22 Ifp en1 Ifa 17.202.42.111 [SCOPED]
- 6. Net 17.202.40.1/32 Ifp en0 Ifa 17.202.42.113
- 7. Net 17.202.40.1/32 Ifp en1 Ifa 17.202.42.111 [SCOPED]
- 8. Net 17.255.96.0/20 Ifp en2 Ifa 17.255.98.164
- 9. Net 17.255.96.1/32 Ifp en2 Ifa 17.255.98.164
+ 3. Net 17.202.40.0/22 Ifp en0 Ifa 17.202.42.113
+ 4. Net 17.202.40.0/22 Ifp en1 Ifa 17.202.42.111 [SCOPED]
+ 5. Net 17.202.40.1/32 Ifp en0 Ifa 17.202.42.113
+ 6. Net 17.202.40.1/32 Ifp en1 Ifa 17.202.42.111 [SCOPED]
+ 7. Net 17.255.96.0/20 Ifp en2 Ifa 17.255.98.164
+ 8. Net 17.255.96.1/32 Ifp en2 Ifa 17.255.98.164
+ 9. Net 169.254.0.0/16 Ifp fw0 Ifa 169.254.11.33 [last]
+10. Net 224.0.0.0/4 Ifp en2 Ifa 17.255.98.164
+11. Net 224.0.0.0/4 Ifp en0 Ifa 17.202.42.113 [SCOPED]
+12. Net 224.0.0.0/4 Ifp en1 Ifa 17.202.42.111 [SCOPED]
+13. Net 224.0.0.0/4 Ifp fw0 Ifa 169.254.11.33 [last] [SCOPED]
+14. Net 255.255.255.255/32 Ifp en2 Ifa 17.255.98.164
+15. Net 255.255.255.255/32 Ifp en0 Ifa 17.202.42.113 [SCOPED]
+16. Net 255.255.255.255/32 Ifp en1 Ifa 17.202.42.111 [SCOPED]
+17. Net 255.255.255.255/32 Ifp fw0 Ifa 169.254.11.33 [last] [SCOPED]
 }
 Remove old[0]: Net 0.0.0.0/0 Gate 10.0.0.1 Ifp en0 Ifa 10.0.0.10
 Remove old[1]: Net 0.0.0.0/0 Gate 10.0.0.1 Ifp en1 Ifa 10.0.0.20 [SCOPED]
@@ -9990,42 +14094,70 @@ Remove old[2]: Net 10.0.0.0/24 Ifp en0 Ifa 10.0.0.10
 Remove old[3]: Net 10.0.0.0/24 Ifp en1 Ifa 10.0.0.20 [SCOPED]
 Remove old[4]: Net 10.0.0.1/32 Ifp en0 Ifa 10.0.0.10
 Remove old[5]: Net 10.0.0.1/32 Ifp en1 Ifa 10.0.0.20 [SCOPED]
-Add new[9]: Net 17.255.96.1/32 Ifp en2 Ifa 17.255.98.164
+Remove old[6]: Net 224.0.0.0/4 Ifp en0 Ifa 10.0.0.10
+Remove old[7]: Net 224.0.0.0/4 Ifp en1 Ifa 10.0.0.20 [SCOPED]
+Remove old[8]: Net 255.255.255.255/32 Ifp en0 Ifa 10.0.0.10
+Remove old[9]: Net 255.255.255.255/32 Ifp en1 Ifa 10.0.0.20 [SCOPED]
+Add new[8]: Net 17.255.96.1/32 Ifp en2 Ifa 17.255.98.164
 Add new[0]: Net 0.0.0.0/0 Gate 17.255.96.1 Ifp en2 Ifa 17.255.98.164
-Add new[6]: Net 17.202.40.1/32 Ifp en0 Ifa 17.202.42.113
+Add new[5]: Net 17.202.40.1/32 Ifp en0 Ifa 17.202.42.113
 Add new[1]: Net 0.0.0.0/0 Gate 17.202.40.1 Ifp en0 Ifa 17.202.42.113 [SCOPED]
-Add new[7]: Net 17.202.40.1/32 Ifp en1 Ifa 17.202.42.111 [SCOPED]
+Add new[6]: Net 17.202.40.1/32 Ifp en1 Ifa 17.202.42.111 [SCOPED]
 Add new[2]: Net 0.0.0.0/0 Gate 17.202.40.1 Ifp en1 Ifa 17.202.42.111 [SCOPED]
-Add new[3]: Net 0.0.0.0/0 Ifp fw0 Ifa 169.254.11.33 [SCOPED]
-Add new[4]: Net 17.202.40.0/22 Ifp en0 Ifa 17.202.42.113
-Add new[5]: Net 17.202.40.0/22 Ifp en1 Ifa 17.202.42.111 [SCOPED]
-Add new[8]: Net 17.255.96.0/20 Ifp en2 Ifa 17.255.98.164
+Add new[3]: Net 17.202.40.0/22 Ifp en0 Ifa 17.202.42.113
+Add new[4]: Net 17.202.40.0/22 Ifp en1 Ifa 17.202.42.111 [SCOPED]
+Add new[7]: Net 17.255.96.0/20 Ifp en2 Ifa 17.255.98.164
+Add new[9]: Net 169.254.0.0/16 Ifp fw0 Ifa 169.254.11.33 [last]
+Add new[10]: Net 224.0.0.0/4 Ifp en2 Ifa 17.255.98.164
+Add new[11]: Net 224.0.0.0/4 Ifp en0 Ifa 17.202.42.113 [SCOPED]
+Add new[12]: Net 224.0.0.0/4 Ifp en1 Ifa 17.202.42.111 [SCOPED]
+Add new[13]: Net 224.0.0.0/4 Ifp fw0 Ifa 169.254.11.33 [last] [SCOPED]
+Add new[14]: Net 255.255.255.255/32 Ifp en2 Ifa 17.255.98.164
+Add new[15]: Net 255.255.255.255/32 Ifp en0 Ifa 17.202.42.113 [SCOPED]
+Add new[16]: Net 255.255.255.255/32 Ifp en1 Ifa 17.202.42.111 [SCOPED]
+Add new[17]: Net 255.255.255.255/32 Ifp fw0 Ifa 169.254.11.33 [last] [SCOPED]
 =================> Apply 'test8', 'test6' End <=================
 
 =================> Apply 'test6', 'test9' Begin <=================
-Old routes ('test6') = <IPv4RouteList[10]> = {
+Old routes ('test6') = <IPv4RouteList[18]> = {
  0. Net 0.0.0.0/0 Gate 17.255.96.1 Ifp en2 Ifa 17.255.98.164
  1. Net 0.0.0.0/0 Gate 17.202.40.1 Ifp en0 Ifa 17.202.42.113 [SCOPED]
  2. Net 0.0.0.0/0 Gate 17.202.40.1 Ifp en1 Ifa 17.202.42.111 [SCOPED]
- 3. Net 0.0.0.0/0 Ifp fw0 Ifa 169.254.11.33 [SCOPED]
- 4. Net 17.202.40.0/22 Ifp en0 Ifa 17.202.42.113
- 5. Net 17.202.40.0/22 Ifp en1 Ifa 17.202.42.111 [SCOPED]
- 6. Net 17.202.40.1/32 Ifp en0 Ifa 17.202.42.113
- 7. Net 17.202.40.1/32 Ifp en1 Ifa 17.202.42.111 [SCOPED]
- 8. Net 17.255.96.0/20 Ifp en2 Ifa 17.255.98.164
- 9. Net 17.255.96.1/32 Ifp en2 Ifa 17.255.98.164
-}
-Add new[9]: Net 17.255.96.1/32 Ifp en2 Ifa 17.255.98.164
+ 3. Net 17.202.40.0/22 Ifp en0 Ifa 17.202.42.113
+ 4. Net 17.202.40.0/22 Ifp en1 Ifa 17.202.42.111 [SCOPED]
+ 5. Net 17.202.40.1/32 Ifp en0 Ifa 17.202.42.113
+ 6. Net 17.202.40.1/32 Ifp en1 Ifa 17.202.42.111 [SCOPED]
+ 7. Net 17.255.96.0/20 Ifp en2 Ifa 17.255.98.164
+ 8. Net 17.255.96.1/32 Ifp en2 Ifa 17.255.98.164
+ 9. Net 169.254.0.0/16 Ifp fw0 Ifa 169.254.11.33 [last]
+10. Net 224.0.0.0/4 Ifp en2 Ifa 17.255.98.164
+11. Net 224.0.0.0/4 Ifp en0 Ifa 17.202.42.113 [SCOPED]
+12. Net 224.0.0.0/4 Ifp en1 Ifa 17.202.42.111 [SCOPED]
+13. Net 224.0.0.0/4 Ifp fw0 Ifa 169.254.11.33 [last] [SCOPED]
+14. Net 255.255.255.255/32 Ifp en2 Ifa 17.255.98.164
+15. Net 255.255.255.255/32 Ifp en0 Ifa 17.202.42.113 [SCOPED]
+16. Net 255.255.255.255/32 Ifp en1 Ifa 17.202.42.111 [SCOPED]
+17. Net 255.255.255.255/32 Ifp fw0 Ifa 169.254.11.33 [last] [SCOPED]
+}
+Add new[8]: Net 17.255.96.1/32 Ifp en2 Ifa 17.255.98.164
 Add new[0]: Net 0.0.0.0/0 Gate 17.255.96.1 Ifp en2 Ifa 17.255.98.164
-Add new[6]: Net 17.202.40.1/32 Ifp en0 Ifa 17.202.42.113
+Add new[5]: Net 17.202.40.1/32 Ifp en0 Ifa 17.202.42.113
 Add new[1]: Net 0.0.0.0/0 Gate 17.202.40.1 Ifp en0 Ifa 17.202.42.113 [SCOPED]
-Add new[7]: Net 17.202.40.1/32 Ifp en1 Ifa 17.202.42.111 [SCOPED]
+Add new[6]: Net 17.202.40.1/32 Ifp en1 Ifa 17.202.42.111 [SCOPED]
 Add new[2]: Net 0.0.0.0/0 Gate 17.202.40.1 Ifp en1 Ifa 17.202.42.111 [SCOPED]
-Add new[3]: Net 0.0.0.0/0 Ifp fw0 Ifa 169.254.11.33 [SCOPED]
-Add new[4]: Net 17.202.40.0/22 Ifp en0 Ifa 17.202.42.113
-Add new[5]: Net 17.202.40.0/22 Ifp en1 Ifa 17.202.42.111 [SCOPED]
-Add new[8]: Net 17.255.96.0/20 Ifp en2 Ifa 17.255.98.164
-New Routes ('test9') = <IPv4RouteList[9]> = {
+Add new[3]: Net 17.202.40.0/22 Ifp en0 Ifa 17.202.42.113
+Add new[4]: Net 17.202.40.0/22 Ifp en1 Ifa 17.202.42.111 [SCOPED]
+Add new[7]: Net 17.255.96.0/20 Ifp en2 Ifa 17.255.98.164
+Add new[9]: Net 169.254.0.0/16 Ifp fw0 Ifa 169.254.11.33 [last]
+Add new[10]: Net 224.0.0.0/4 Ifp en2 Ifa 17.255.98.164
+Add new[11]: Net 224.0.0.0/4 Ifp en0 Ifa 17.202.42.113 [SCOPED]
+Add new[12]: Net 224.0.0.0/4 Ifp en1 Ifa 17.202.42.111 [SCOPED]
+Add new[13]: Net 224.0.0.0/4 Ifp fw0 Ifa 169.254.11.33 [last] [SCOPED]
+Add new[14]: Net 255.255.255.255/32 Ifp en2 Ifa 17.255.98.164
+Add new[15]: Net 255.255.255.255/32 Ifp en0 Ifa 17.202.42.113 [SCOPED]
+Add new[16]: Net 255.255.255.255/32 Ifp en1 Ifa 17.202.42.111 [SCOPED]
+Add new[17]: Net 255.255.255.255/32 Ifp fw0 Ifa 169.254.11.33 [last] [SCOPED]
+New Routes ('test9') = <IPv4RouteList[15]> = {
  0. Net 0.0.0.0/0 Gate 10.0.0.1 Ifp en1 Ifa 10.0.0.20 [first]
  1. Net 0.0.0.0/0 Gate 10.0.0.1 Ifp en0 Ifa 10.0.0.10 [SCOPED]
  2. Net 0.0.0.0/0 Gate 192.168.2.1 Ifp fw0 Ifa 192.168.2.30 [SCOPED]
@@ -10035,17 +14167,31 @@ New Routes ('test9') = <IPv4RouteList[9]> = {
  6. Net 10.0.0.1/32 Ifp en0 Ifa 10.0.0.10 [SCOPED]
  7. Net 192.168.2.0/24 Ifp fw0 Ifa 192.168.2.30
  8. Net 192.168.2.1/32 Ifp fw0 Ifa 192.168.2.30
+ 9. Net 224.0.0.0/4 Ifp en1 Ifa 10.0.0.20 [first]
+10. Net 224.0.0.0/4 Ifp en0 Ifa 10.0.0.10 [SCOPED]
+11. Net 224.0.0.0/4 Ifp fw0 Ifa 192.168.2.30 [SCOPED]
+12. Net 255.255.255.255/32 Ifp en1 Ifa 10.0.0.20 [first]
+13. Net 255.255.255.255/32 Ifp en0 Ifa 10.0.0.10 [SCOPED]
+14. Net 255.255.255.255/32 Ifp fw0 Ifa 192.168.2.30 [SCOPED]
 }
 Remove old[0]: Net 0.0.0.0/0 Gate 17.255.96.1 Ifp en2 Ifa 17.255.98.164
 Remove old[1]: Net 0.0.0.0/0 Gate 17.202.40.1 Ifp en0 Ifa 17.202.42.113 [SCOPED]
 Remove old[2]: Net 0.0.0.0/0 Gate 17.202.40.1 Ifp en1 Ifa 17.202.42.111 [SCOPED]
-Remove old[3]: Net 0.0.0.0/0 Ifp fw0 Ifa 169.254.11.33 [SCOPED]
-Remove old[4]: Net 17.202.40.0/22 Ifp en0 Ifa 17.202.42.113
-Remove old[5]: Net 17.202.40.0/22 Ifp en1 Ifa 17.202.42.111 [SCOPED]
-Remove old[6]: Net 17.202.40.1/32 Ifp en0 Ifa 17.202.42.113
-Remove old[7]: Net 17.202.40.1/32 Ifp en1 Ifa 17.202.42.111 [SCOPED]
-Remove old[8]: Net 17.255.96.0/20 Ifp en2 Ifa 17.255.98.164
-Remove old[9]: Net 17.255.96.1/32 Ifp en2 Ifa 17.255.98.164
+Remove old[3]: Net 17.202.40.0/22 Ifp en0 Ifa 17.202.42.113
+Remove old[4]: Net 17.202.40.0/22 Ifp en1 Ifa 17.202.42.111 [SCOPED]
+Remove old[5]: Net 17.202.40.1/32 Ifp en0 Ifa 17.202.42.113
+Remove old[6]: Net 17.202.40.1/32 Ifp en1 Ifa 17.202.42.111 [SCOPED]
+Remove old[7]: Net 17.255.96.0/20 Ifp en2 Ifa 17.255.98.164
+Remove old[8]: Net 17.255.96.1/32 Ifp en2 Ifa 17.255.98.164
+Remove old[9]: Net 169.254.0.0/16 Ifp fw0 Ifa 169.254.11.33 [last]
+Remove old[10]: Net 224.0.0.0/4 Ifp en2 Ifa 17.255.98.164
+Remove old[11]: Net 224.0.0.0/4 Ifp en0 Ifa 17.202.42.113 [SCOPED]
+Remove old[12]: Net 224.0.0.0/4 Ifp en1 Ifa 17.202.42.111 [SCOPED]
+Remove old[13]: Net 224.0.0.0/4 Ifp fw0 Ifa 169.254.11.33 [last] [SCOPED]
+Remove old[14]: Net 255.255.255.255/32 Ifp en2 Ifa 17.255.98.164
+Remove old[15]: Net 255.255.255.255/32 Ifp en0 Ifa 17.202.42.113 [SCOPED]
+Remove old[16]: Net 255.255.255.255/32 Ifp en1 Ifa 17.202.42.111 [SCOPED]
+Remove old[17]: Net 255.255.255.255/32 Ifp fw0 Ifa 169.254.11.33 [last] [SCOPED]
 Add new[5]: Net 10.0.0.1/32 Ifp en1 Ifa 10.0.0.20 [first]
 Add new[0]: Net 0.0.0.0/0 Gate 10.0.0.1 Ifp en1 Ifa 10.0.0.20 [first]
 Add new[6]: Net 10.0.0.1/32 Ifp en0 Ifa 10.0.0.10 [SCOPED]
@@ -10055,10 +14201,16 @@ Add new[2]: Net 0.0.0.0/0 Gate 192.168.2.1 Ifp fw0 Ifa 192.168.2.30 [SCOPED]
 Add new[3]: Net 10.0.0.0/24 Ifp en1 Ifa 10.0.0.20 [first]
 Add new[4]: Net 10.0.0.0/24 Ifp en0 Ifa 10.0.0.10 [SCOPED]
 Add new[7]: Net 192.168.2.0/24 Ifp fw0 Ifa 192.168.2.30
+Add new[9]: Net 224.0.0.0/4 Ifp en1 Ifa 10.0.0.20 [first]
+Add new[10]: Net 224.0.0.0/4 Ifp en0 Ifa 10.0.0.10 [SCOPED]
+Add new[11]: Net 224.0.0.0/4 Ifp fw0 Ifa 192.168.2.30 [SCOPED]
+Add new[12]: Net 255.255.255.255/32 Ifp en1 Ifa 10.0.0.20 [first]
+Add new[13]: Net 255.255.255.255/32 Ifp en0 Ifa 10.0.0.10 [SCOPED]
+Add new[14]: Net 255.255.255.255/32 Ifp fw0 Ifa 192.168.2.30 [SCOPED]
 =================> Apply 'test6', 'test9' End <=================
 
 =================> Apply 'test9', 'test6' Begin <=================
-Old routes ('test9') = <IPv4RouteList[9]> = {
+Old routes ('test9') = <IPv4RouteList[15]> = {
  0. Net 0.0.0.0/0 Gate 10.0.0.1 Ifp en1 Ifa 10.0.0.20 [first]
  1. Net 0.0.0.0/0 Gate 10.0.0.1 Ifp en0 Ifa 10.0.0.10 [SCOPED]
  2. Net 0.0.0.0/0 Gate 192.168.2.1 Ifp fw0 Ifa 192.168.2.30 [SCOPED]
@@ -10068,6 +14220,12 @@ Old routes ('test9') = <IPv4RouteList[9]> = {
  6. Net 10.0.0.1/32 Ifp en0 Ifa 10.0.0.10 [SCOPED]
  7. Net 192.168.2.0/24 Ifp fw0 Ifa 192.168.2.30
  8. Net 192.168.2.1/32 Ifp fw0 Ifa 192.168.2.30
+ 9. Net 224.0.0.0/4 Ifp en1 Ifa 10.0.0.20 [first]
+10. Net 224.0.0.0/4 Ifp en0 Ifa 10.0.0.10 [SCOPED]
+11. Net 224.0.0.0/4 Ifp fw0 Ifa 192.168.2.30 [SCOPED]
+12. Net 255.255.255.255/32 Ifp en1 Ifa 10.0.0.20 [first]
+13. Net 255.255.255.255/32 Ifp en0 Ifa 10.0.0.10 [SCOPED]
+14. Net 255.255.255.255/32 Ifp fw0 Ifa 192.168.2.30 [SCOPED]
 }
 Add new[5]: Net 10.0.0.1/32 Ifp en1 Ifa 10.0.0.20 [first]
 Add new[0]: Net 0.0.0.0/0 Gate 10.0.0.1 Ifp en1 Ifa 10.0.0.20 [first]
@@ -10078,17 +14236,31 @@ Add new[2]: Net 0.0.0.0/0 Gate 192.168.2.1 Ifp fw0 Ifa 192.168.2.30 [SCOPED]
 Add new[3]: Net 10.0.0.0/24 Ifp en1 Ifa 10.0.0.20 [first]
 Add new[4]: Net 10.0.0.0/24 Ifp en0 Ifa 10.0.0.10 [SCOPED]
 Add new[7]: Net 192.168.2.0/24 Ifp fw0 Ifa 192.168.2.30
-New Routes ('test6') = <IPv4RouteList[10]> = {
+Add new[9]: Net 224.0.0.0/4 Ifp en1 Ifa 10.0.0.20 [first]
+Add new[10]: Net 224.0.0.0/4 Ifp en0 Ifa 10.0.0.10 [SCOPED]
+Add new[11]: Net 224.0.0.0/4 Ifp fw0 Ifa 192.168.2.30 [SCOPED]
+Add new[12]: Net 255.255.255.255/32 Ifp en1 Ifa 10.0.0.20 [first]
+Add new[13]: Net 255.255.255.255/32 Ifp en0 Ifa 10.0.0.10 [SCOPED]
+Add new[14]: Net 255.255.255.255/32 Ifp fw0 Ifa 192.168.2.30 [SCOPED]
+New Routes ('test6') = <IPv4RouteList[18]> = {
  0. Net 0.0.0.0/0 Gate 17.255.96.1 Ifp en2 Ifa 17.255.98.164
  1. Net 0.0.0.0/0 Gate 17.202.40.1 Ifp en0 Ifa 17.202.42.113 [SCOPED]
  2. Net 0.0.0.0/0 Gate 17.202.40.1 Ifp en1 Ifa 17.202.42.111 [SCOPED]
- 3. Net 0.0.0.0/0 Ifp fw0 Ifa 169.254.11.33 [SCOPED]
- 4. Net 17.202.40.0/22 Ifp en0 Ifa 17.202.42.113
- 5. Net 17.202.40.0/22 Ifp en1 Ifa 17.202.42.111 [SCOPED]
- 6. Net 17.202.40.1/32 Ifp en0 Ifa 17.202.42.113
- 7. Net 17.202.40.1/32 Ifp en1 Ifa 17.202.42.111 [SCOPED]
- 8. Net 17.255.96.0/20 Ifp en2 Ifa 17.255.98.164
- 9. Net 17.255.96.1/32 Ifp en2 Ifa 17.255.98.164
+ 3. Net 17.202.40.0/22 Ifp en0 Ifa 17.202.42.113
+ 4. Net 17.202.40.0/22 Ifp en1 Ifa 17.202.42.111 [SCOPED]
+ 5. Net 17.202.40.1/32 Ifp en0 Ifa 17.202.42.113
+ 6. Net 17.202.40.1/32 Ifp en1 Ifa 17.202.42.111 [SCOPED]
+ 7. Net 17.255.96.0/20 Ifp en2 Ifa 17.255.98.164
+ 8. Net 17.255.96.1/32 Ifp en2 Ifa 17.255.98.164
+ 9. Net 169.254.0.0/16 Ifp fw0 Ifa 169.254.11.33 [last]
+10. Net 224.0.0.0/4 Ifp en2 Ifa 17.255.98.164
+11. Net 224.0.0.0/4 Ifp en0 Ifa 17.202.42.113 [SCOPED]
+12. Net 224.0.0.0/4 Ifp en1 Ifa 17.202.42.111 [SCOPED]
+13. Net 224.0.0.0/4 Ifp fw0 Ifa 169.254.11.33 [last] [SCOPED]
+14. Net 255.255.255.255/32 Ifp en2 Ifa 17.255.98.164
+15. Net 255.255.255.255/32 Ifp en0 Ifa 17.202.42.113 [SCOPED]
+16. Net 255.255.255.255/32 Ifp en1 Ifa 17.202.42.111 [SCOPED]
+17. Net 255.255.255.255/32 Ifp fw0 Ifa 169.254.11.33 [last] [SCOPED]
 }
 Remove old[0]: Net 0.0.0.0/0 Gate 10.0.0.1 Ifp en1 Ifa 10.0.0.20 [first]
 Remove old[1]: Net 0.0.0.0/0 Gate 10.0.0.1 Ifp en0 Ifa 10.0.0.10 [SCOPED]
@@ -10099,42 +14271,72 @@ Remove old[5]: Net 10.0.0.1/32 Ifp en1 Ifa 10.0.0.20 [first]
 Remove old[6]: Net 10.0.0.1/32 Ifp en0 Ifa 10.0.0.10 [SCOPED]
 Remove old[7]: Net 192.168.2.0/24 Ifp fw0 Ifa 192.168.2.30
 Remove old[8]: Net 192.168.2.1/32 Ifp fw0 Ifa 192.168.2.30
-Add new[9]: Net 17.255.96.1/32 Ifp en2 Ifa 17.255.98.164
+Remove old[9]: Net 224.0.0.0/4 Ifp en1 Ifa 10.0.0.20 [first]
+Remove old[10]: Net 224.0.0.0/4 Ifp en0 Ifa 10.0.0.10 [SCOPED]
+Remove old[11]: Net 224.0.0.0/4 Ifp fw0 Ifa 192.168.2.30 [SCOPED]
+Remove old[12]: Net 255.255.255.255/32 Ifp en1 Ifa 10.0.0.20 [first]
+Remove old[13]: Net 255.255.255.255/32 Ifp en0 Ifa 10.0.0.10 [SCOPED]
+Remove old[14]: Net 255.255.255.255/32 Ifp fw0 Ifa 192.168.2.30 [SCOPED]
+Add new[8]: Net 17.255.96.1/32 Ifp en2 Ifa 17.255.98.164
 Add new[0]: Net 0.0.0.0/0 Gate 17.255.96.1 Ifp en2 Ifa 17.255.98.164
-Add new[6]: Net 17.202.40.1/32 Ifp en0 Ifa 17.202.42.113
+Add new[5]: Net 17.202.40.1/32 Ifp en0 Ifa 17.202.42.113
 Add new[1]: Net 0.0.0.0/0 Gate 17.202.40.1 Ifp en0 Ifa 17.202.42.113 [SCOPED]
-Add new[7]: Net 17.202.40.1/32 Ifp en1 Ifa 17.202.42.111 [SCOPED]
+Add new[6]: Net 17.202.40.1/32 Ifp en1 Ifa 17.202.42.111 [SCOPED]
 Add new[2]: Net 0.0.0.0/0 Gate 17.202.40.1 Ifp en1 Ifa 17.202.42.111 [SCOPED]
-Add new[3]: Net 0.0.0.0/0 Ifp fw0 Ifa 169.254.11.33 [SCOPED]
-Add new[4]: Net 17.202.40.0/22 Ifp en0 Ifa 17.202.42.113
-Add new[5]: Net 17.202.40.0/22 Ifp en1 Ifa 17.202.42.111 [SCOPED]
-Add new[8]: Net 17.255.96.0/20 Ifp en2 Ifa 17.255.98.164
+Add new[3]: Net 17.202.40.0/22 Ifp en0 Ifa 17.202.42.113
+Add new[4]: Net 17.202.40.0/22 Ifp en1 Ifa 17.202.42.111 [SCOPED]
+Add new[7]: Net 17.255.96.0/20 Ifp en2 Ifa 17.255.98.164
+Add new[9]: Net 169.254.0.0/16 Ifp fw0 Ifa 169.254.11.33 [last]
+Add new[10]: Net 224.0.0.0/4 Ifp en2 Ifa 17.255.98.164
+Add new[11]: Net 224.0.0.0/4 Ifp en0 Ifa 17.202.42.113 [SCOPED]
+Add new[12]: Net 224.0.0.0/4 Ifp en1 Ifa 17.202.42.111 [SCOPED]
+Add new[13]: Net 224.0.0.0/4 Ifp fw0 Ifa 169.254.11.33 [last] [SCOPED]
+Add new[14]: Net 255.255.255.255/32 Ifp en2 Ifa 17.255.98.164
+Add new[15]: Net 255.255.255.255/32 Ifp en0 Ifa 17.202.42.113 [SCOPED]
+Add new[16]: Net 255.255.255.255/32 Ifp en1 Ifa 17.202.42.111 [SCOPED]
+Add new[17]: Net 255.255.255.255/32 Ifp fw0 Ifa 169.254.11.33 [last] [SCOPED]
 =================> Apply 'test9', 'test6' End <=================
 
 =================> Apply 'test6', 'test10' Begin <=================
-Old routes ('test6') = <IPv4RouteList[10]> = {
+Old routes ('test6') = <IPv4RouteList[18]> = {
  0. Net 0.0.0.0/0 Gate 17.255.96.1 Ifp en2 Ifa 17.255.98.164
  1. Net 0.0.0.0/0 Gate 17.202.40.1 Ifp en0 Ifa 17.202.42.113 [SCOPED]
  2. Net 0.0.0.0/0 Gate 17.202.40.1 Ifp en1 Ifa 17.202.42.111 [SCOPED]
- 3. Net 0.0.0.0/0 Ifp fw0 Ifa 169.254.11.33 [SCOPED]
- 4. Net 17.202.40.0/22 Ifp en0 Ifa 17.202.42.113
- 5. Net 17.202.40.0/22 Ifp en1 Ifa 17.202.42.111 [SCOPED]
- 6. Net 17.202.40.1/32 Ifp en0 Ifa 17.202.42.113
- 7. Net 17.202.40.1/32 Ifp en1 Ifa 17.202.42.111 [SCOPED]
- 8. Net 17.255.96.0/20 Ifp en2 Ifa 17.255.98.164
- 9. Net 17.255.96.1/32 Ifp en2 Ifa 17.255.98.164
-}
-Add new[9]: Net 17.255.96.1/32 Ifp en2 Ifa 17.255.98.164
+ 3. Net 17.202.40.0/22 Ifp en0 Ifa 17.202.42.113
+ 4. Net 17.202.40.0/22 Ifp en1 Ifa 17.202.42.111 [SCOPED]
+ 5. Net 17.202.40.1/32 Ifp en0 Ifa 17.202.42.113
+ 6. Net 17.202.40.1/32 Ifp en1 Ifa 17.202.42.111 [SCOPED]
+ 7. Net 17.255.96.0/20 Ifp en2 Ifa 17.255.98.164
+ 8. Net 17.255.96.1/32 Ifp en2 Ifa 17.255.98.164
+ 9. Net 169.254.0.0/16 Ifp fw0 Ifa 169.254.11.33 [last]
+10. Net 224.0.0.0/4 Ifp en2 Ifa 17.255.98.164
+11. Net 224.0.0.0/4 Ifp en0 Ifa 17.202.42.113 [SCOPED]
+12. Net 224.0.0.0/4 Ifp en1 Ifa 17.202.42.111 [SCOPED]
+13. Net 224.0.0.0/4 Ifp fw0 Ifa 169.254.11.33 [last] [SCOPED]
+14. Net 255.255.255.255/32 Ifp en2 Ifa 17.255.98.164
+15. Net 255.255.255.255/32 Ifp en0 Ifa 17.202.42.113 [SCOPED]
+16. Net 255.255.255.255/32 Ifp en1 Ifa 17.202.42.111 [SCOPED]
+17. Net 255.255.255.255/32 Ifp fw0 Ifa 169.254.11.33 [last] [SCOPED]
+}
+Add new[8]: Net 17.255.96.1/32 Ifp en2 Ifa 17.255.98.164
 Add new[0]: Net 0.0.0.0/0 Gate 17.255.96.1 Ifp en2 Ifa 17.255.98.164
-Add new[6]: Net 17.202.40.1/32 Ifp en0 Ifa 17.202.42.113
+Add new[5]: Net 17.202.40.1/32 Ifp en0 Ifa 17.202.42.113
 Add new[1]: Net 0.0.0.0/0 Gate 17.202.40.1 Ifp en0 Ifa 17.202.42.113 [SCOPED]
-Add new[7]: Net 17.202.40.1/32 Ifp en1 Ifa 17.202.42.111 [SCOPED]
+Add new[6]: Net 17.202.40.1/32 Ifp en1 Ifa 17.202.42.111 [SCOPED]
 Add new[2]: Net 0.0.0.0/0 Gate 17.202.40.1 Ifp en1 Ifa 17.202.42.111 [SCOPED]
-Add new[3]: Net 0.0.0.0/0 Ifp fw0 Ifa 169.254.11.33 [SCOPED]
-Add new[4]: Net 17.202.40.0/22 Ifp en0 Ifa 17.202.42.113
-Add new[5]: Net 17.202.40.0/22 Ifp en1 Ifa 17.202.42.111 [SCOPED]
-Add new[8]: Net 17.255.96.0/20 Ifp en2 Ifa 17.255.98.164
-New Routes ('test10') = <IPv4RouteList[9]> = {
+Add new[3]: Net 17.202.40.0/22 Ifp en0 Ifa 17.202.42.113
+Add new[4]: Net 17.202.40.0/22 Ifp en1 Ifa 17.202.42.111 [SCOPED]
+Add new[7]: Net 17.255.96.0/20 Ifp en2 Ifa 17.255.98.164
+Add new[9]: Net 169.254.0.0/16 Ifp fw0 Ifa 169.254.11.33 [last]
+Add new[10]: Net 224.0.0.0/4 Ifp en2 Ifa 17.255.98.164
+Add new[11]: Net 224.0.0.0/4 Ifp en0 Ifa 17.202.42.113 [SCOPED]
+Add new[12]: Net 224.0.0.0/4 Ifp en1 Ifa 17.202.42.111 [SCOPED]
+Add new[13]: Net 224.0.0.0/4 Ifp fw0 Ifa 169.254.11.33 [last] [SCOPED]
+Add new[14]: Net 255.255.255.255/32 Ifp en2 Ifa 17.255.98.164
+Add new[15]: Net 255.255.255.255/32 Ifp en0 Ifa 17.202.42.113 [SCOPED]
+Add new[16]: Net 255.255.255.255/32 Ifp en1 Ifa 17.202.42.111 [SCOPED]
+Add new[17]: Net 255.255.255.255/32 Ifp fw0 Ifa 169.254.11.33 [last] [SCOPED]
+New Routes ('test10') = <IPv4RouteList[15]> = {
  0. Net 0.0.0.0/0 Gate 10.0.0.1 Ifp en1 Ifa 10.0.0.20
  1. Net 0.0.0.0/0 Gate 192.168.2.1 Ifp fw0 Ifa 192.168.2.30 [SCOPED]
  2. Net 0.0.0.0/0 Gate 10.0.0.1 Ifp en0 Ifa 10.0.0.10 [last] [SCOPED]
@@ -10144,17 +14346,31 @@ New Routes ('test10') = <IPv4RouteList[9]> = {
  6. Net 10.0.0.1/32 Ifp en0 Ifa 10.0.0.10 [last] [SCOPED]
  7. Net 192.168.2.0/24 Ifp fw0 Ifa 192.168.2.30
  8. Net 192.168.2.1/32 Ifp fw0 Ifa 192.168.2.30
+ 9. Net 224.0.0.0/4 Ifp en1 Ifa 10.0.0.20
+10. Net 224.0.0.0/4 Ifp fw0 Ifa 192.168.2.30 [SCOPED]
+11. Net 224.0.0.0/4 Ifp en0 Ifa 10.0.0.10 [last] [SCOPED]
+12. Net 255.255.255.255/32 Ifp en1 Ifa 10.0.0.20
+13. Net 255.255.255.255/32 Ifp fw0 Ifa 192.168.2.30 [SCOPED]
+14. Net 255.255.255.255/32 Ifp en0 Ifa 10.0.0.10 [last] [SCOPED]
 }
 Remove old[0]: Net 0.0.0.0/0 Gate 17.255.96.1 Ifp en2 Ifa 17.255.98.164
 Remove old[1]: Net 0.0.0.0/0 Gate 17.202.40.1 Ifp en0 Ifa 17.202.42.113 [SCOPED]
 Remove old[2]: Net 0.0.0.0/0 Gate 17.202.40.1 Ifp en1 Ifa 17.202.42.111 [SCOPED]
-Remove old[3]: Net 0.0.0.0/0 Ifp fw0 Ifa 169.254.11.33 [SCOPED]
-Remove old[4]: Net 17.202.40.0/22 Ifp en0 Ifa 17.202.42.113
-Remove old[5]: Net 17.202.40.0/22 Ifp en1 Ifa 17.202.42.111 [SCOPED]
-Remove old[6]: Net 17.202.40.1/32 Ifp en0 Ifa 17.202.42.113
-Remove old[7]: Net 17.202.40.1/32 Ifp en1 Ifa 17.202.42.111 [SCOPED]
-Remove old[8]: Net 17.255.96.0/20 Ifp en2 Ifa 17.255.98.164
-Remove old[9]: Net 17.255.96.1/32 Ifp en2 Ifa 17.255.98.164
+Remove old[3]: Net 17.202.40.0/22 Ifp en0 Ifa 17.202.42.113
+Remove old[4]: Net 17.202.40.0/22 Ifp en1 Ifa 17.202.42.111 [SCOPED]
+Remove old[5]: Net 17.202.40.1/32 Ifp en0 Ifa 17.202.42.113
+Remove old[6]: Net 17.202.40.1/32 Ifp en1 Ifa 17.202.42.111 [SCOPED]
+Remove old[7]: Net 17.255.96.0/20 Ifp en2 Ifa 17.255.98.164
+Remove old[8]: Net 17.255.96.1/32 Ifp en2 Ifa 17.255.98.164
+Remove old[9]: Net 169.254.0.0/16 Ifp fw0 Ifa 169.254.11.33 [last]
+Remove old[10]: Net 224.0.0.0/4 Ifp en2 Ifa 17.255.98.164
+Remove old[11]: Net 224.0.0.0/4 Ifp en0 Ifa 17.202.42.113 [SCOPED]
+Remove old[12]: Net 224.0.0.0/4 Ifp en1 Ifa 17.202.42.111 [SCOPED]
+Remove old[13]: Net 224.0.0.0/4 Ifp fw0 Ifa 169.254.11.33 [last] [SCOPED]
+Remove old[14]: Net 255.255.255.255/32 Ifp en2 Ifa 17.255.98.164
+Remove old[15]: Net 255.255.255.255/32 Ifp en0 Ifa 17.202.42.113 [SCOPED]
+Remove old[16]: Net 255.255.255.255/32 Ifp en1 Ifa 17.202.42.111 [SCOPED]
+Remove old[17]: Net 255.255.255.255/32 Ifp fw0 Ifa 169.254.11.33 [last] [SCOPED]
 Add new[5]: Net 10.0.0.1/32 Ifp en1 Ifa 10.0.0.20
 Add new[0]: Net 0.0.0.0/0 Gate 10.0.0.1 Ifp en1 Ifa 10.0.0.20
 Add new[8]: Net 192.168.2.1/32 Ifp fw0 Ifa 192.168.2.30
@@ -10164,10 +14380,16 @@ Add new[2]: Net 0.0.0.0/0 Gate 10.0.0.1 Ifp en0 Ifa 10.0.0.10 [last] [SCOPED]
 Add new[3]: Net 10.0.0.0/24 Ifp en1 Ifa 10.0.0.20
 Add new[4]: Net 10.0.0.0/24 Ifp en0 Ifa 10.0.0.10 [last] [SCOPED]
 Add new[7]: Net 192.168.2.0/24 Ifp fw0 Ifa 192.168.2.30
+Add new[9]: Net 224.0.0.0/4 Ifp en1 Ifa 10.0.0.20
+Add new[10]: Net 224.0.0.0/4 Ifp fw0 Ifa 192.168.2.30 [SCOPED]
+Add new[11]: Net 224.0.0.0/4 Ifp en0 Ifa 10.0.0.10 [last] [SCOPED]
+Add new[12]: Net 255.255.255.255/32 Ifp en1 Ifa 10.0.0.20
+Add new[13]: Net 255.255.255.255/32 Ifp fw0 Ifa 192.168.2.30 [SCOPED]
+Add new[14]: Net 255.255.255.255/32 Ifp en0 Ifa 10.0.0.10 [last] [SCOPED]
 =================> Apply 'test6', 'test10' End <=================
 
 =================> Apply 'test10', 'test6' Begin <=================
-Old routes ('test10') = <IPv4RouteList[9]> = {
+Old routes ('test10') = <IPv4RouteList[15]> = {
  0. Net 0.0.0.0/0 Gate 10.0.0.1 Ifp en1 Ifa 10.0.0.20
  1. Net 0.0.0.0/0 Gate 192.168.2.1 Ifp fw0 Ifa 192.168.2.30 [SCOPED]
  2. Net 0.0.0.0/0 Gate 10.0.0.1 Ifp en0 Ifa 10.0.0.10 [last] [SCOPED]
@@ -10177,6 +14399,12 @@ Old routes ('test10') = <IPv4RouteList[9]> = {
  6. Net 10.0.0.1/32 Ifp en0 Ifa 10.0.0.10 [last] [SCOPED]
  7. Net 192.168.2.0/24 Ifp fw0 Ifa 192.168.2.30
  8. Net 192.168.2.1/32 Ifp fw0 Ifa 192.168.2.30
+ 9. Net 224.0.0.0/4 Ifp en1 Ifa 10.0.0.20
+10. Net 224.0.0.0/4 Ifp fw0 Ifa 192.168.2.30 [SCOPED]
+11. Net 224.0.0.0/4 Ifp en0 Ifa 10.0.0.10 [last] [SCOPED]
+12. Net 255.255.255.255/32 Ifp en1 Ifa 10.0.0.20
+13. Net 255.255.255.255/32 Ifp fw0 Ifa 192.168.2.30 [SCOPED]
+14. Net 255.255.255.255/32 Ifp en0 Ifa 10.0.0.10 [last] [SCOPED]
 }
 Add new[5]: Net 10.0.0.1/32 Ifp en1 Ifa 10.0.0.20
 Add new[0]: Net 0.0.0.0/0 Gate 10.0.0.1 Ifp en1 Ifa 10.0.0.20
@@ -10187,17 +14415,31 @@ Add new[2]: Net 0.0.0.0/0 Gate 10.0.0.1 Ifp en0 Ifa 10.0.0.10 [last] [SCOPED]
 Add new[3]: Net 10.0.0.0/24 Ifp en1 Ifa 10.0.0.20
 Add new[4]: Net 10.0.0.0/24 Ifp en0 Ifa 10.0.0.10 [last] [SCOPED]
 Add new[7]: Net 192.168.2.0/24 Ifp fw0 Ifa 192.168.2.30
-New Routes ('test6') = <IPv4RouteList[10]> = {
+Add new[9]: Net 224.0.0.0/4 Ifp en1 Ifa 10.0.0.20
+Add new[10]: Net 224.0.0.0/4 Ifp fw0 Ifa 192.168.2.30 [SCOPED]
+Add new[11]: Net 224.0.0.0/4 Ifp en0 Ifa 10.0.0.10 [last] [SCOPED]
+Add new[12]: Net 255.255.255.255/32 Ifp en1 Ifa 10.0.0.20
+Add new[13]: Net 255.255.255.255/32 Ifp fw0 Ifa 192.168.2.30 [SCOPED]
+Add new[14]: Net 255.255.255.255/32 Ifp en0 Ifa 10.0.0.10 [last] [SCOPED]
+New Routes ('test6') = <IPv4RouteList[18]> = {
  0. Net 0.0.0.0/0 Gate 17.255.96.1 Ifp en2 Ifa 17.255.98.164
  1. Net 0.0.0.0/0 Gate 17.202.40.1 Ifp en0 Ifa 17.202.42.113 [SCOPED]
  2. Net 0.0.0.0/0 Gate 17.202.40.1 Ifp en1 Ifa 17.202.42.111 [SCOPED]
- 3. Net 0.0.0.0/0 Ifp fw0 Ifa 169.254.11.33 [SCOPED]
- 4. Net 17.202.40.0/22 Ifp en0 Ifa 17.202.42.113
- 5. Net 17.202.40.0/22 Ifp en1 Ifa 17.202.42.111 [SCOPED]
- 6. Net 17.202.40.1/32 Ifp en0 Ifa 17.202.42.113
- 7. Net 17.202.40.1/32 Ifp en1 Ifa 17.202.42.111 [SCOPED]
- 8. Net 17.255.96.0/20 Ifp en2 Ifa 17.255.98.164
- 9. Net 17.255.96.1/32 Ifp en2 Ifa 17.255.98.164
+ 3. Net 17.202.40.0/22 Ifp en0 Ifa 17.202.42.113
+ 4. Net 17.202.40.0/22 Ifp en1 Ifa 17.202.42.111 [SCOPED]
+ 5. Net 17.202.40.1/32 Ifp en0 Ifa 17.202.42.113
+ 6. Net 17.202.40.1/32 Ifp en1 Ifa 17.202.42.111 [SCOPED]
+ 7. Net 17.255.96.0/20 Ifp en2 Ifa 17.255.98.164
+ 8. Net 17.255.96.1/32 Ifp en2 Ifa 17.255.98.164
+ 9. Net 169.254.0.0/16 Ifp fw0 Ifa 169.254.11.33 [last]
+10. Net 224.0.0.0/4 Ifp en2 Ifa 17.255.98.164
+11. Net 224.0.0.0/4 Ifp en0 Ifa 17.202.42.113 [SCOPED]
+12. Net 224.0.0.0/4 Ifp en1 Ifa 17.202.42.111 [SCOPED]
+13. Net 224.0.0.0/4 Ifp fw0 Ifa 169.254.11.33 [last] [SCOPED]
+14. Net 255.255.255.255/32 Ifp en2 Ifa 17.255.98.164
+15. Net 255.255.255.255/32 Ifp en0 Ifa 17.202.42.113 [SCOPED]
+16. Net 255.255.255.255/32 Ifp en1 Ifa 17.202.42.111 [SCOPED]
+17. Net 255.255.255.255/32 Ifp fw0 Ifa 169.254.11.33 [last] [SCOPED]
 }
 Remove old[0]: Net 0.0.0.0/0 Gate 10.0.0.1 Ifp en1 Ifa 10.0.0.20
 Remove old[1]: Net 0.0.0.0/0 Gate 192.168.2.1 Ifp fw0 Ifa 192.168.2.30 [SCOPED]
@@ -10208,42 +14450,72 @@ Remove old[5]: Net 10.0.0.1/32 Ifp en1 Ifa 10.0.0.20
 Remove old[6]: Net 10.0.0.1/32 Ifp en0 Ifa 10.0.0.10 [last] [SCOPED]
 Remove old[7]: Net 192.168.2.0/24 Ifp fw0 Ifa 192.168.2.30
 Remove old[8]: Net 192.168.2.1/32 Ifp fw0 Ifa 192.168.2.30
-Add new[9]: Net 17.255.96.1/32 Ifp en2 Ifa 17.255.98.164
+Remove old[9]: Net 224.0.0.0/4 Ifp en1 Ifa 10.0.0.20
+Remove old[10]: Net 224.0.0.0/4 Ifp fw0 Ifa 192.168.2.30 [SCOPED]
+Remove old[11]: Net 224.0.0.0/4 Ifp en0 Ifa 10.0.0.10 [last] [SCOPED]
+Remove old[12]: Net 255.255.255.255/32 Ifp en1 Ifa 10.0.0.20
+Remove old[13]: Net 255.255.255.255/32 Ifp fw0 Ifa 192.168.2.30 [SCOPED]
+Remove old[14]: Net 255.255.255.255/32 Ifp en0 Ifa 10.0.0.10 [last] [SCOPED]
+Add new[8]: Net 17.255.96.1/32 Ifp en2 Ifa 17.255.98.164
 Add new[0]: Net 0.0.0.0/0 Gate 17.255.96.1 Ifp en2 Ifa 17.255.98.164
-Add new[6]: Net 17.202.40.1/32 Ifp en0 Ifa 17.202.42.113
+Add new[5]: Net 17.202.40.1/32 Ifp en0 Ifa 17.202.42.113
 Add new[1]: Net 0.0.0.0/0 Gate 17.202.40.1 Ifp en0 Ifa 17.202.42.113 [SCOPED]
-Add new[7]: Net 17.202.40.1/32 Ifp en1 Ifa 17.202.42.111 [SCOPED]
+Add new[6]: Net 17.202.40.1/32 Ifp en1 Ifa 17.202.42.111 [SCOPED]
 Add new[2]: Net 0.0.0.0/0 Gate 17.202.40.1 Ifp en1 Ifa 17.202.42.111 [SCOPED]
-Add new[3]: Net 0.0.0.0/0 Ifp fw0 Ifa 169.254.11.33 [SCOPED]
-Add new[4]: Net 17.202.40.0/22 Ifp en0 Ifa 17.202.42.113
-Add new[5]: Net 17.202.40.0/22 Ifp en1 Ifa 17.202.42.111 [SCOPED]
-Add new[8]: Net 17.255.96.0/20 Ifp en2 Ifa 17.255.98.164
+Add new[3]: Net 17.202.40.0/22 Ifp en0 Ifa 17.202.42.113
+Add new[4]: Net 17.202.40.0/22 Ifp en1 Ifa 17.202.42.111 [SCOPED]
+Add new[7]: Net 17.255.96.0/20 Ifp en2 Ifa 17.255.98.164
+Add new[9]: Net 169.254.0.0/16 Ifp fw0 Ifa 169.254.11.33 [last]
+Add new[10]: Net 224.0.0.0/4 Ifp en2 Ifa 17.255.98.164
+Add new[11]: Net 224.0.0.0/4 Ifp en0 Ifa 17.202.42.113 [SCOPED]
+Add new[12]: Net 224.0.0.0/4 Ifp en1 Ifa 17.202.42.111 [SCOPED]
+Add new[13]: Net 224.0.0.0/4 Ifp fw0 Ifa 169.254.11.33 [last] [SCOPED]
+Add new[14]: Net 255.255.255.255/32 Ifp en2 Ifa 17.255.98.164
+Add new[15]: Net 255.255.255.255/32 Ifp en0 Ifa 17.202.42.113 [SCOPED]
+Add new[16]: Net 255.255.255.255/32 Ifp en1 Ifa 17.202.42.111 [SCOPED]
+Add new[17]: Net 255.255.255.255/32 Ifp fw0 Ifa 169.254.11.33 [last] [SCOPED]
 =================> Apply 'test10', 'test6' End <=================
 
 =================> Apply 'test6', 'test11' Begin <=================
-Old routes ('test6') = <IPv4RouteList[10]> = {
+Old routes ('test6') = <IPv4RouteList[18]> = {
  0. Net 0.0.0.0/0 Gate 17.255.96.1 Ifp en2 Ifa 17.255.98.164
  1. Net 0.0.0.0/0 Gate 17.202.40.1 Ifp en0 Ifa 17.202.42.113 [SCOPED]
  2. Net 0.0.0.0/0 Gate 17.202.40.1 Ifp en1 Ifa 17.202.42.111 [SCOPED]
- 3. Net 0.0.0.0/0 Ifp fw0 Ifa 169.254.11.33 [SCOPED]
- 4. Net 17.202.40.0/22 Ifp en0 Ifa 17.202.42.113
- 5. Net 17.202.40.0/22 Ifp en1 Ifa 17.202.42.111 [SCOPED]
- 6. Net 17.202.40.1/32 Ifp en0 Ifa 17.202.42.113
- 7. Net 17.202.40.1/32 Ifp en1 Ifa 17.202.42.111 [SCOPED]
- 8. Net 17.255.96.0/20 Ifp en2 Ifa 17.255.98.164
- 9. Net 17.255.96.1/32 Ifp en2 Ifa 17.255.98.164
-}
-Add new[9]: Net 17.255.96.1/32 Ifp en2 Ifa 17.255.98.164
+ 3. Net 17.202.40.0/22 Ifp en0 Ifa 17.202.42.113
+ 4. Net 17.202.40.0/22 Ifp en1 Ifa 17.202.42.111 [SCOPED]
+ 5. Net 17.202.40.1/32 Ifp en0 Ifa 17.202.42.113
+ 6. Net 17.202.40.1/32 Ifp en1 Ifa 17.202.42.111 [SCOPED]
+ 7. Net 17.255.96.0/20 Ifp en2 Ifa 17.255.98.164
+ 8. Net 17.255.96.1/32 Ifp en2 Ifa 17.255.98.164
+ 9. Net 169.254.0.0/16 Ifp fw0 Ifa 169.254.11.33 [last]
+10. Net 224.0.0.0/4 Ifp en2 Ifa 17.255.98.164
+11. Net 224.0.0.0/4 Ifp en0 Ifa 17.202.42.113 [SCOPED]
+12. Net 224.0.0.0/4 Ifp en1 Ifa 17.202.42.111 [SCOPED]
+13. Net 224.0.0.0/4 Ifp fw0 Ifa 169.254.11.33 [last] [SCOPED]
+14. Net 255.255.255.255/32 Ifp en2 Ifa 17.255.98.164
+15. Net 255.255.255.255/32 Ifp en0 Ifa 17.202.42.113 [SCOPED]
+16. Net 255.255.255.255/32 Ifp en1 Ifa 17.202.42.111 [SCOPED]
+17. Net 255.255.255.255/32 Ifp fw0 Ifa 169.254.11.33 [last] [SCOPED]
+}
+Add new[8]: Net 17.255.96.1/32 Ifp en2 Ifa 17.255.98.164
 Add new[0]: Net 0.0.0.0/0 Gate 17.255.96.1 Ifp en2 Ifa 17.255.98.164
-Add new[6]: Net 17.202.40.1/32 Ifp en0 Ifa 17.202.42.113
+Add new[5]: Net 17.202.40.1/32 Ifp en0 Ifa 17.202.42.113
 Add new[1]: Net 0.0.0.0/0 Gate 17.202.40.1 Ifp en0 Ifa 17.202.42.113 [SCOPED]
-Add new[7]: Net 17.202.40.1/32 Ifp en1 Ifa 17.202.42.111 [SCOPED]
+Add new[6]: Net 17.202.40.1/32 Ifp en1 Ifa 17.202.42.111 [SCOPED]
 Add new[2]: Net 0.0.0.0/0 Gate 17.202.40.1 Ifp en1 Ifa 17.202.42.111 [SCOPED]
-Add new[3]: Net 0.0.0.0/0 Ifp fw0 Ifa 169.254.11.33 [SCOPED]
-Add new[4]: Net 17.202.40.0/22 Ifp en0 Ifa 17.202.42.113
-Add new[5]: Net 17.202.40.0/22 Ifp en1 Ifa 17.202.42.111 [SCOPED]
-Add new[8]: Net 17.255.96.0/20 Ifp en2 Ifa 17.255.98.164
-New Routes ('test11') = <IPv4RouteList[9]> = {
+Add new[3]: Net 17.202.40.0/22 Ifp en0 Ifa 17.202.42.113
+Add new[4]: Net 17.202.40.0/22 Ifp en1 Ifa 17.202.42.111 [SCOPED]
+Add new[7]: Net 17.255.96.0/20 Ifp en2 Ifa 17.255.98.164
+Add new[9]: Net 169.254.0.0/16 Ifp fw0 Ifa 169.254.11.33 [last]
+Add new[10]: Net 224.0.0.0/4 Ifp en2 Ifa 17.255.98.164
+Add new[11]: Net 224.0.0.0/4 Ifp en0 Ifa 17.202.42.113 [SCOPED]
+Add new[12]: Net 224.0.0.0/4 Ifp en1 Ifa 17.202.42.111 [SCOPED]
+Add new[13]: Net 224.0.0.0/4 Ifp fw0 Ifa 169.254.11.33 [last] [SCOPED]
+Add new[14]: Net 255.255.255.255/32 Ifp en2 Ifa 17.255.98.164
+Add new[15]: Net 255.255.255.255/32 Ifp en0 Ifa 17.202.42.113 [SCOPED]
+Add new[16]: Net 255.255.255.255/32 Ifp en1 Ifa 17.202.42.111 [SCOPED]
+Add new[17]: Net 255.255.255.255/32 Ifp fw0 Ifa 169.254.11.33 [last] [SCOPED]
+New Routes ('test11') = <IPv4RouteList[15]> = {
  0. Net 0.0.0.0/0 Gate 10.0.0.1 Ifp en1 Ifa 10.0.0.20
  1. Net 0.0.0.0/0 Gate 192.168.2.1 Ifp fw0 Ifa 192.168.2.30 [SCOPED]
  2. Net 0.0.0.0/0 Gate 10.0.0.1 Ifp en0 Ifa 10.0.0.10 [never] [SCOPED]
@@ -10253,17 +14525,31 @@ New Routes ('test11') = <IPv4RouteList[9]> = {
  6. Net 10.0.0.1/32 Ifp en0 Ifa 10.0.0.10 [last] [SCOPED]
  7. Net 192.168.2.0/24 Ifp fw0 Ifa 192.168.2.30
  8. Net 192.168.2.1/32 Ifp fw0 Ifa 192.168.2.30
+ 9. Net 224.0.0.0/4 Ifp en1 Ifa 10.0.0.20
+10. Net 224.0.0.0/4 Ifp fw0 Ifa 192.168.2.30 [SCOPED]
+11. Net 224.0.0.0/4 Ifp en0 Ifa 10.0.0.10 [last] [SCOPED]
+12. Net 255.255.255.255/32 Ifp en1 Ifa 10.0.0.20
+13. Net 255.255.255.255/32 Ifp fw0 Ifa 192.168.2.30 [SCOPED]
+14. Net 255.255.255.255/32 Ifp en0 Ifa 10.0.0.10 [last] [SCOPED]
 }
 Remove old[0]: Net 0.0.0.0/0 Gate 17.255.96.1 Ifp en2 Ifa 17.255.98.164
 Remove old[1]: Net 0.0.0.0/0 Gate 17.202.40.1 Ifp en0 Ifa 17.202.42.113 [SCOPED]
 Remove old[2]: Net 0.0.0.0/0 Gate 17.202.40.1 Ifp en1 Ifa 17.202.42.111 [SCOPED]
-Remove old[3]: Net 0.0.0.0/0 Ifp fw0 Ifa 169.254.11.33 [SCOPED]
-Remove old[4]: Net 17.202.40.0/22 Ifp en0 Ifa 17.202.42.113
-Remove old[5]: Net 17.202.40.0/22 Ifp en1 Ifa 17.202.42.111 [SCOPED]
-Remove old[6]: Net 17.202.40.1/32 Ifp en0 Ifa 17.202.42.113
-Remove old[7]: Net 17.202.40.1/32 Ifp en1 Ifa 17.202.42.111 [SCOPED]
-Remove old[8]: Net 17.255.96.0/20 Ifp en2 Ifa 17.255.98.164
-Remove old[9]: Net 17.255.96.1/32 Ifp en2 Ifa 17.255.98.164
+Remove old[3]: Net 17.202.40.0/22 Ifp en0 Ifa 17.202.42.113
+Remove old[4]: Net 17.202.40.0/22 Ifp en1 Ifa 17.202.42.111 [SCOPED]
+Remove old[5]: Net 17.202.40.1/32 Ifp en0 Ifa 17.202.42.113
+Remove old[6]: Net 17.202.40.1/32 Ifp en1 Ifa 17.202.42.111 [SCOPED]
+Remove old[7]: Net 17.255.96.0/20 Ifp en2 Ifa 17.255.98.164
+Remove old[8]: Net 17.255.96.1/32 Ifp en2 Ifa 17.255.98.164
+Remove old[9]: Net 169.254.0.0/16 Ifp fw0 Ifa 169.254.11.33 [last]
+Remove old[10]: Net 224.0.0.0/4 Ifp en2 Ifa 17.255.98.164
+Remove old[11]: Net 224.0.0.0/4 Ifp en0 Ifa 17.202.42.113 [SCOPED]
+Remove old[12]: Net 224.0.0.0/4 Ifp en1 Ifa 17.202.42.111 [SCOPED]
+Remove old[13]: Net 224.0.0.0/4 Ifp fw0 Ifa 169.254.11.33 [last] [SCOPED]
+Remove old[14]: Net 255.255.255.255/32 Ifp en2 Ifa 17.255.98.164
+Remove old[15]: Net 255.255.255.255/32 Ifp en0 Ifa 17.202.42.113 [SCOPED]
+Remove old[16]: Net 255.255.255.255/32 Ifp en1 Ifa 17.202.42.111 [SCOPED]
+Remove old[17]: Net 255.255.255.255/32 Ifp fw0 Ifa 169.254.11.33 [last] [SCOPED]
 Add new[5]: Net 10.0.0.1/32 Ifp en1 Ifa 10.0.0.20
 Add new[0]: Net 0.0.0.0/0 Gate 10.0.0.1 Ifp en1 Ifa 10.0.0.20
 Add new[8]: Net 192.168.2.1/32 Ifp fw0 Ifa 192.168.2.30
@@ -10273,10 +14559,16 @@ Add new[2]: Net 0.0.0.0/0 Gate 10.0.0.1 Ifp en0 Ifa 10.0.0.10 [never] [SCOPED]
 Add new[3]: Net 10.0.0.0/24 Ifp en1 Ifa 10.0.0.20
 Add new[4]: Net 10.0.0.0/24 Ifp en0 Ifa 10.0.0.10 [last] [SCOPED]
 Add new[7]: Net 192.168.2.0/24 Ifp fw0 Ifa 192.168.2.30
+Add new[9]: Net 224.0.0.0/4 Ifp en1 Ifa 10.0.0.20
+Add new[10]: Net 224.0.0.0/4 Ifp fw0 Ifa 192.168.2.30 [SCOPED]
+Add new[11]: Net 224.0.0.0/4 Ifp en0 Ifa 10.0.0.10 [last] [SCOPED]
+Add new[12]: Net 255.255.255.255/32 Ifp en1 Ifa 10.0.0.20
+Add new[13]: Net 255.255.255.255/32 Ifp fw0 Ifa 192.168.2.30 [SCOPED]
+Add new[14]: Net 255.255.255.255/32 Ifp en0 Ifa 10.0.0.10 [last] [SCOPED]
 =================> Apply 'test6', 'test11' End <=================
 
 =================> Apply 'test11', 'test6' Begin <=================
-Old routes ('test11') = <IPv4RouteList[9]> = {
+Old routes ('test11') = <IPv4RouteList[15]> = {
  0. Net 0.0.0.0/0 Gate 10.0.0.1 Ifp en1 Ifa 10.0.0.20
  1. Net 0.0.0.0/0 Gate 192.168.2.1 Ifp fw0 Ifa 192.168.2.30 [SCOPED]
  2. Net 0.0.0.0/0 Gate 10.0.0.1 Ifp en0 Ifa 10.0.0.10 [never] [SCOPED]
@@ -10286,6 +14578,12 @@ Old routes ('test11') = <IPv4RouteList[9]> = {
  6. Net 10.0.0.1/32 Ifp en0 Ifa 10.0.0.10 [last] [SCOPED]
  7. Net 192.168.2.0/24 Ifp fw0 Ifa 192.168.2.30
  8. Net 192.168.2.1/32 Ifp fw0 Ifa 192.168.2.30
+ 9. Net 224.0.0.0/4 Ifp en1 Ifa 10.0.0.20
+10. Net 224.0.0.0/4 Ifp fw0 Ifa 192.168.2.30 [SCOPED]
+11. Net 224.0.0.0/4 Ifp en0 Ifa 10.0.0.10 [last] [SCOPED]
+12. Net 255.255.255.255/32 Ifp en1 Ifa 10.0.0.20
+13. Net 255.255.255.255/32 Ifp fw0 Ifa 192.168.2.30 [SCOPED]
+14. Net 255.255.255.255/32 Ifp en0 Ifa 10.0.0.10 [last] [SCOPED]
 }
 Add new[5]: Net 10.0.0.1/32 Ifp en1 Ifa 10.0.0.20
 Add new[0]: Net 0.0.0.0/0 Gate 10.0.0.1 Ifp en1 Ifa 10.0.0.20
@@ -10296,17 +14594,31 @@ Add new[2]: Net 0.0.0.0/0 Gate 10.0.0.1 Ifp en0 Ifa 10.0.0.10 [never] [SCOPED]
 Add new[3]: Net 10.0.0.0/24 Ifp en1 Ifa 10.0.0.20
 Add new[4]: Net 10.0.0.0/24 Ifp en0 Ifa 10.0.0.10 [last] [SCOPED]
 Add new[7]: Net 192.168.2.0/24 Ifp fw0 Ifa 192.168.2.30
-New Routes ('test6') = <IPv4RouteList[10]> = {
+Add new[9]: Net 224.0.0.0/4 Ifp en1 Ifa 10.0.0.20
+Add new[10]: Net 224.0.0.0/4 Ifp fw0 Ifa 192.168.2.30 [SCOPED]
+Add new[11]: Net 224.0.0.0/4 Ifp en0 Ifa 10.0.0.10 [last] [SCOPED]
+Add new[12]: Net 255.255.255.255/32 Ifp en1 Ifa 10.0.0.20
+Add new[13]: Net 255.255.255.255/32 Ifp fw0 Ifa 192.168.2.30 [SCOPED]
+Add new[14]: Net 255.255.255.255/32 Ifp en0 Ifa 10.0.0.10 [last] [SCOPED]
+New Routes ('test6') = <IPv4RouteList[18]> = {
  0. Net 0.0.0.0/0 Gate 17.255.96.1 Ifp en2 Ifa 17.255.98.164
  1. Net 0.0.0.0/0 Gate 17.202.40.1 Ifp en0 Ifa 17.202.42.113 [SCOPED]
  2. Net 0.0.0.0/0 Gate 17.202.40.1 Ifp en1 Ifa 17.202.42.111 [SCOPED]
- 3. Net 0.0.0.0/0 Ifp fw0 Ifa 169.254.11.33 [SCOPED]
- 4. Net 17.202.40.0/22 Ifp en0 Ifa 17.202.42.113
- 5. Net 17.202.40.0/22 Ifp en1 Ifa 17.202.42.111 [SCOPED]
- 6. Net 17.202.40.1/32 Ifp en0 Ifa 17.202.42.113
- 7. Net 17.202.40.1/32 Ifp en1 Ifa 17.202.42.111 [SCOPED]
- 8. Net 17.255.96.0/20 Ifp en2 Ifa 17.255.98.164
- 9. Net 17.255.96.1/32 Ifp en2 Ifa 17.255.98.164
+ 3. Net 17.202.40.0/22 Ifp en0 Ifa 17.202.42.113
+ 4. Net 17.202.40.0/22 Ifp en1 Ifa 17.202.42.111 [SCOPED]
+ 5. Net 17.202.40.1/32 Ifp en0 Ifa 17.202.42.113
+ 6. Net 17.202.40.1/32 Ifp en1 Ifa 17.202.42.111 [SCOPED]
+ 7. Net 17.255.96.0/20 Ifp en2 Ifa 17.255.98.164
+ 8. Net 17.255.96.1/32 Ifp en2 Ifa 17.255.98.164
+ 9. Net 169.254.0.0/16 Ifp fw0 Ifa 169.254.11.33 [last]
+10. Net 224.0.0.0/4 Ifp en2 Ifa 17.255.98.164
+11. Net 224.0.0.0/4 Ifp en0 Ifa 17.202.42.113 [SCOPED]
+12. Net 224.0.0.0/4 Ifp en1 Ifa 17.202.42.111 [SCOPED]
+13. Net 224.0.0.0/4 Ifp fw0 Ifa 169.254.11.33 [last] [SCOPED]
+14. Net 255.255.255.255/32 Ifp en2 Ifa 17.255.98.164
+15. Net 255.255.255.255/32 Ifp en0 Ifa 17.202.42.113 [SCOPED]
+16. Net 255.255.255.255/32 Ifp en1 Ifa 17.202.42.111 [SCOPED]
+17. Net 255.255.255.255/32 Ifp fw0 Ifa 169.254.11.33 [last] [SCOPED]
 }
 Remove old[0]: Net 0.0.0.0/0 Gate 10.0.0.1 Ifp en1 Ifa 10.0.0.20
 Remove old[1]: Net 0.0.0.0/0 Gate 192.168.2.1 Ifp fw0 Ifa 192.168.2.30 [SCOPED]
@@ -10317,75 +14629,125 @@ Remove old[5]: Net 10.0.0.1/32 Ifp en1 Ifa 10.0.0.20
 Remove old[6]: Net 10.0.0.1/32 Ifp en0 Ifa 10.0.0.10 [last] [SCOPED]
 Remove old[7]: Net 192.168.2.0/24 Ifp fw0 Ifa 192.168.2.30
 Remove old[8]: Net 192.168.2.1/32 Ifp fw0 Ifa 192.168.2.30
-Add new[9]: Net 17.255.96.1/32 Ifp en2 Ifa 17.255.98.164
+Remove old[9]: Net 224.0.0.0/4 Ifp en1 Ifa 10.0.0.20
+Remove old[10]: Net 224.0.0.0/4 Ifp fw0 Ifa 192.168.2.30 [SCOPED]
+Remove old[11]: Net 224.0.0.0/4 Ifp en0 Ifa 10.0.0.10 [last] [SCOPED]
+Remove old[12]: Net 255.255.255.255/32 Ifp en1 Ifa 10.0.0.20
+Remove old[13]: Net 255.255.255.255/32 Ifp fw0 Ifa 192.168.2.30 [SCOPED]
+Remove old[14]: Net 255.255.255.255/32 Ifp en0 Ifa 10.0.0.10 [last] [SCOPED]
+Add new[8]: Net 17.255.96.1/32 Ifp en2 Ifa 17.255.98.164
 Add new[0]: Net 0.0.0.0/0 Gate 17.255.96.1 Ifp en2 Ifa 17.255.98.164
-Add new[6]: Net 17.202.40.1/32 Ifp en0 Ifa 17.202.42.113
+Add new[5]: Net 17.202.40.1/32 Ifp en0 Ifa 17.202.42.113
 Add new[1]: Net 0.0.0.0/0 Gate 17.202.40.1 Ifp en0 Ifa 17.202.42.113 [SCOPED]
-Add new[7]: Net 17.202.40.1/32 Ifp en1 Ifa 17.202.42.111 [SCOPED]
+Add new[6]: Net 17.202.40.1/32 Ifp en1 Ifa 17.202.42.111 [SCOPED]
 Add new[2]: Net 0.0.0.0/0 Gate 17.202.40.1 Ifp en1 Ifa 17.202.42.111 [SCOPED]
-Add new[3]: Net 0.0.0.0/0 Ifp fw0 Ifa 169.254.11.33 [SCOPED]
-Add new[4]: Net 17.202.40.0/22 Ifp en0 Ifa 17.202.42.113
-Add new[5]: Net 17.202.40.0/22 Ifp en1 Ifa 17.202.42.111 [SCOPED]
-Add new[8]: Net 17.255.96.0/20 Ifp en2 Ifa 17.255.98.164
+Add new[3]: Net 17.202.40.0/22 Ifp en0 Ifa 17.202.42.113
+Add new[4]: Net 17.202.40.0/22 Ifp en1 Ifa 17.202.42.111 [SCOPED]
+Add new[7]: Net 17.255.96.0/20 Ifp en2 Ifa 17.255.98.164
+Add new[9]: Net 169.254.0.0/16 Ifp fw0 Ifa 169.254.11.33 [last]
+Add new[10]: Net 224.0.0.0/4 Ifp en2 Ifa 17.255.98.164
+Add new[11]: Net 224.0.0.0/4 Ifp en0 Ifa 17.202.42.113 [SCOPED]
+Add new[12]: Net 224.0.0.0/4 Ifp en1 Ifa 17.202.42.111 [SCOPED]
+Add new[13]: Net 224.0.0.0/4 Ifp fw0 Ifa 169.254.11.33 [last] [SCOPED]
+Add new[14]: Net 255.255.255.255/32 Ifp en2 Ifa 17.255.98.164
+Add new[15]: Net 255.255.255.255/32 Ifp en0 Ifa 17.202.42.113 [SCOPED]
+Add new[16]: Net 255.255.255.255/32 Ifp en1 Ifa 17.202.42.111 [SCOPED]
+Add new[17]: Net 255.255.255.255/32 Ifp fw0 Ifa 169.254.11.33 [last] [SCOPED]
 =================> Apply 'test11', 'test6' End <=================
 
 =================> Apply 'test6', 'test12' Begin <=================
-Old routes ('test6') = <IPv4RouteList[10]> = {
+Old routes ('test6') = <IPv4RouteList[18]> = {
  0. Net 0.0.0.0/0 Gate 17.255.96.1 Ifp en2 Ifa 17.255.98.164
  1. Net 0.0.0.0/0 Gate 17.202.40.1 Ifp en0 Ifa 17.202.42.113 [SCOPED]
  2. Net 0.0.0.0/0 Gate 17.202.40.1 Ifp en1 Ifa 17.202.42.111 [SCOPED]
- 3. Net 0.0.0.0/0 Ifp fw0 Ifa 169.254.11.33 [SCOPED]
- 4. Net 17.202.40.0/22 Ifp en0 Ifa 17.202.42.113
- 5. Net 17.202.40.0/22 Ifp en1 Ifa 17.202.42.111 [SCOPED]
- 6. Net 17.202.40.1/32 Ifp en0 Ifa 17.202.42.113
- 7. Net 17.202.40.1/32 Ifp en1 Ifa 17.202.42.111 [SCOPED]
- 8. Net 17.255.96.0/20 Ifp en2 Ifa 17.255.98.164
- 9. Net 17.255.96.1/32 Ifp en2 Ifa 17.255.98.164
-}
-Add new[9]: Net 17.255.96.1/32 Ifp en2 Ifa 17.255.98.164
+ 3. Net 17.202.40.0/22 Ifp en0 Ifa 17.202.42.113
+ 4. Net 17.202.40.0/22 Ifp en1 Ifa 17.202.42.111 [SCOPED]
+ 5. Net 17.202.40.1/32 Ifp en0 Ifa 17.202.42.113
+ 6. Net 17.202.40.1/32 Ifp en1 Ifa 17.202.42.111 [SCOPED]
+ 7. Net 17.255.96.0/20 Ifp en2 Ifa 17.255.98.164
+ 8. Net 17.255.96.1/32 Ifp en2 Ifa 17.255.98.164
+ 9. Net 169.254.0.0/16 Ifp fw0 Ifa 169.254.11.33 [last]
+10. Net 224.0.0.0/4 Ifp en2 Ifa 17.255.98.164
+11. Net 224.0.0.0/4 Ifp en0 Ifa 17.202.42.113 [SCOPED]
+12. Net 224.0.0.0/4 Ifp en1 Ifa 17.202.42.111 [SCOPED]
+13. Net 224.0.0.0/4 Ifp fw0 Ifa 169.254.11.33 [last] [SCOPED]
+14. Net 255.255.255.255/32 Ifp en2 Ifa 17.255.98.164
+15. Net 255.255.255.255/32 Ifp en0 Ifa 17.202.42.113 [SCOPED]
+16. Net 255.255.255.255/32 Ifp en1 Ifa 17.202.42.111 [SCOPED]
+17. Net 255.255.255.255/32 Ifp fw0 Ifa 169.254.11.33 [last] [SCOPED]
+}
+Add new[8]: Net 17.255.96.1/32 Ifp en2 Ifa 17.255.98.164
 Add new[0]: Net 0.0.0.0/0 Gate 17.255.96.1 Ifp en2 Ifa 17.255.98.164
-Add new[6]: Net 17.202.40.1/32 Ifp en0 Ifa 17.202.42.113
+Add new[5]: Net 17.202.40.1/32 Ifp en0 Ifa 17.202.42.113
 Add new[1]: Net 0.0.0.0/0 Gate 17.202.40.1 Ifp en0 Ifa 17.202.42.113 [SCOPED]
-Add new[7]: Net 17.202.40.1/32 Ifp en1 Ifa 17.202.42.111 [SCOPED]
+Add new[6]: Net 17.202.40.1/32 Ifp en1 Ifa 17.202.42.111 [SCOPED]
 Add new[2]: Net 0.0.0.0/0 Gate 17.202.40.1 Ifp en1 Ifa 17.202.42.111 [SCOPED]
-Add new[3]: Net 0.0.0.0/0 Ifp fw0 Ifa 169.254.11.33 [SCOPED]
-Add new[4]: Net 17.202.40.0/22 Ifp en0 Ifa 17.202.42.113
-Add new[5]: Net 17.202.40.0/22 Ifp en1 Ifa 17.202.42.111 [SCOPED]
-Add new[8]: Net 17.255.96.0/20 Ifp en2 Ifa 17.255.98.164
-New Routes ('test12') = <IPv4RouteList[6]> = {
+Add new[3]: Net 17.202.40.0/22 Ifp en0 Ifa 17.202.42.113
+Add new[4]: Net 17.202.40.0/22 Ifp en1 Ifa 17.202.42.111 [SCOPED]
+Add new[7]: Net 17.255.96.0/20 Ifp en2 Ifa 17.255.98.164
+Add new[9]: Net 169.254.0.0/16 Ifp fw0 Ifa 169.254.11.33 [last]
+Add new[10]: Net 224.0.0.0/4 Ifp en2 Ifa 17.255.98.164
+Add new[11]: Net 224.0.0.0/4 Ifp en0 Ifa 17.202.42.113 [SCOPED]
+Add new[12]: Net 224.0.0.0/4 Ifp en1 Ifa 17.202.42.111 [SCOPED]
+Add new[13]: Net 224.0.0.0/4 Ifp fw0 Ifa 169.254.11.33 [last] [SCOPED]
+Add new[14]: Net 255.255.255.255/32 Ifp en2 Ifa 17.255.98.164
+Add new[15]: Net 255.255.255.255/32 Ifp en0 Ifa 17.202.42.113 [SCOPED]
+Add new[16]: Net 255.255.255.255/32 Ifp en1 Ifa 17.202.42.111 [SCOPED]
+Add new[17]: Net 255.255.255.255/32 Ifp fw0 Ifa 169.254.11.33 [last] [SCOPED]
+New Routes ('test12') = <IPv4RouteList[10]> = {
  0. Net 0.0.0.0/0 Gate 10.0.0.1 Ifp en0 Ifa 10.0.0.10
  1. Net 0.0.0.0/0 Gate 10.0.0.1 Ifp en1 Ifa 10.0.0.20 [SCOPED]
  2. Net 10.0.0.0/24 Ifp en0 Ifa 10.0.0.10
  3. Net 10.0.0.0/24 Ifp en1 Ifa 10.0.0.20 [SCOPED]
  4. Net 10.0.0.1/32 Ifp en0 Ifa 10.0.0.10
  5. Net 10.0.0.1/32 Ifp en1 Ifa 10.0.0.20 [SCOPED]
+ 6. Net 224.0.0.0/4 Ifp en0 Ifa 10.0.0.10
+ 7. Net 224.0.0.0/4 Ifp en1 Ifa 10.0.0.20 [SCOPED]
+ 8. Net 255.255.255.255/32 Ifp en0 Ifa 10.0.0.10
+ 9. Net 255.255.255.255/32 Ifp en1 Ifa 10.0.0.20 [SCOPED]
 }
 Remove old[0]: Net 0.0.0.0/0 Gate 17.255.96.1 Ifp en2 Ifa 17.255.98.164
 Remove old[1]: Net 0.0.0.0/0 Gate 17.202.40.1 Ifp en0 Ifa 17.202.42.113 [SCOPED]
 Remove old[2]: Net 0.0.0.0/0 Gate 17.202.40.1 Ifp en1 Ifa 17.202.42.111 [SCOPED]
-Remove old[3]: Net 0.0.0.0/0 Ifp fw0 Ifa 169.254.11.33 [SCOPED]
-Remove old[4]: Net 17.202.40.0/22 Ifp en0 Ifa 17.202.42.113
-Remove old[5]: Net 17.202.40.0/22 Ifp en1 Ifa 17.202.42.111 [SCOPED]
-Remove old[6]: Net 17.202.40.1/32 Ifp en0 Ifa 17.202.42.113
-Remove old[7]: Net 17.202.40.1/32 Ifp en1 Ifa 17.202.42.111 [SCOPED]
-Remove old[8]: Net 17.255.96.0/20 Ifp en2 Ifa 17.255.98.164
-Remove old[9]: Net 17.255.96.1/32 Ifp en2 Ifa 17.255.98.164
+Remove old[3]: Net 17.202.40.0/22 Ifp en0 Ifa 17.202.42.113
+Remove old[4]: Net 17.202.40.0/22 Ifp en1 Ifa 17.202.42.111 [SCOPED]
+Remove old[5]: Net 17.202.40.1/32 Ifp en0 Ifa 17.202.42.113
+Remove old[6]: Net 17.202.40.1/32 Ifp en1 Ifa 17.202.42.111 [SCOPED]
+Remove old[7]: Net 17.255.96.0/20 Ifp en2 Ifa 17.255.98.164
+Remove old[8]: Net 17.255.96.1/32 Ifp en2 Ifa 17.255.98.164
+Remove old[9]: Net 169.254.0.0/16 Ifp fw0 Ifa 169.254.11.33 [last]
+Remove old[10]: Net 224.0.0.0/4 Ifp en2 Ifa 17.255.98.164
+Remove old[11]: Net 224.0.0.0/4 Ifp en0 Ifa 17.202.42.113 [SCOPED]
+Remove old[12]: Net 224.0.0.0/4 Ifp en1 Ifa 17.202.42.111 [SCOPED]
+Remove old[13]: Net 224.0.0.0/4 Ifp fw0 Ifa 169.254.11.33 [last] [SCOPED]
+Remove old[14]: Net 255.255.255.255/32 Ifp en2 Ifa 17.255.98.164
+Remove old[15]: Net 255.255.255.255/32 Ifp en0 Ifa 17.202.42.113 [SCOPED]
+Remove old[16]: Net 255.255.255.255/32 Ifp en1 Ifa 17.202.42.111 [SCOPED]
+Remove old[17]: Net 255.255.255.255/32 Ifp fw0 Ifa 169.254.11.33 [last] [SCOPED]
 Add new[4]: Net 10.0.0.1/32 Ifp en0 Ifa 10.0.0.10
 Add new[0]: Net 0.0.0.0/0 Gate 10.0.0.1 Ifp en0 Ifa 10.0.0.10
 Add new[5]: Net 10.0.0.1/32 Ifp en1 Ifa 10.0.0.20 [SCOPED]
 Add new[1]: Net 0.0.0.0/0 Gate 10.0.0.1 Ifp en1 Ifa 10.0.0.20 [SCOPED]
 Add new[2]: Net 10.0.0.0/24 Ifp en0 Ifa 10.0.0.10
 Add new[3]: Net 10.0.0.0/24 Ifp en1 Ifa 10.0.0.20 [SCOPED]
+Add new[6]: Net 224.0.0.0/4 Ifp en0 Ifa 10.0.0.10
+Add new[7]: Net 224.0.0.0/4 Ifp en1 Ifa 10.0.0.20 [SCOPED]
+Add new[8]: Net 255.255.255.255/32 Ifp en0 Ifa 10.0.0.10
+Add new[9]: Net 255.255.255.255/32 Ifp en1 Ifa 10.0.0.20 [SCOPED]
 =================> Apply 'test6', 'test12' End <=================
 
 =================> Apply 'test12', 'test6' Begin <=================
-Old routes ('test12') = <IPv4RouteList[6]> = {
+Old routes ('test12') = <IPv4RouteList[10]> = {
  0. Net 0.0.0.0/0 Gate 10.0.0.1 Ifp en0 Ifa 10.0.0.10
  1. Net 0.0.0.0/0 Gate 10.0.0.1 Ifp en1 Ifa 10.0.0.20 [SCOPED]
  2. Net 10.0.0.0/24 Ifp en0 Ifa 10.0.0.10
  3. Net 10.0.0.0/24 Ifp en1 Ifa 10.0.0.20 [SCOPED]
  4. Net 10.0.0.1/32 Ifp en0 Ifa 10.0.0.10
  5. Net 10.0.0.1/32 Ifp en1 Ifa 10.0.0.20 [SCOPED]
+ 6. Net 224.0.0.0/4 Ifp en0 Ifa 10.0.0.10
+ 7. Net 224.0.0.0/4 Ifp en1 Ifa 10.0.0.20 [SCOPED]
+ 8. Net 255.255.255.255/32 Ifp en0 Ifa 10.0.0.10
+ 9. Net 255.255.255.255/32 Ifp en1 Ifa 10.0.0.20 [SCOPED]
 }
 Add new[4]: Net 10.0.0.1/32 Ifp en0 Ifa 10.0.0.10
 Add new[0]: Net 0.0.0.0/0 Gate 10.0.0.1 Ifp en0 Ifa 10.0.0.10
@@ -10393,17 +14755,29 @@ Add new[5]: Net 10.0.0.1/32 Ifp en1 Ifa 10.0.0.20 [SCOPED]
 Add new[1]: Net 0.0.0.0/0 Gate 10.0.0.1 Ifp en1 Ifa 10.0.0.20 [SCOPED]
 Add new[2]: Net 10.0.0.0/24 Ifp en0 Ifa 10.0.0.10
 Add new[3]: Net 10.0.0.0/24 Ifp en1 Ifa 10.0.0.20 [SCOPED]
-New Routes ('test6') = <IPv4RouteList[10]> = {
+Add new[6]: Net 224.0.0.0/4 Ifp en0 Ifa 10.0.0.10
+Add new[7]: Net 224.0.0.0/4 Ifp en1 Ifa 10.0.0.20 [SCOPED]
+Add new[8]: Net 255.255.255.255/32 Ifp en0 Ifa 10.0.0.10
+Add new[9]: Net 255.255.255.255/32 Ifp en1 Ifa 10.0.0.20 [SCOPED]
+New Routes ('test6') = <IPv4RouteList[18]> = {
  0. Net 0.0.0.0/0 Gate 17.255.96.1 Ifp en2 Ifa 17.255.98.164
  1. Net 0.0.0.0/0 Gate 17.202.40.1 Ifp en0 Ifa 17.202.42.113 [SCOPED]
  2. Net 0.0.0.0/0 Gate 17.202.40.1 Ifp en1 Ifa 17.202.42.111 [SCOPED]
- 3. Net 0.0.0.0/0 Ifp fw0 Ifa 169.254.11.33 [SCOPED]
- 4. Net 17.202.40.0/22 Ifp en0 Ifa 17.202.42.113
- 5. Net 17.202.40.0/22 Ifp en1 Ifa 17.202.42.111 [SCOPED]
- 6. Net 17.202.40.1/32 Ifp en0 Ifa 17.202.42.113
- 7. Net 17.202.40.1/32 Ifp en1 Ifa 17.202.42.111 [SCOPED]
- 8. Net 17.255.96.0/20 Ifp en2 Ifa 17.255.98.164
- 9. Net 17.255.96.1/32 Ifp en2 Ifa 17.255.98.164
+ 3. Net 17.202.40.0/22 Ifp en0 Ifa 17.202.42.113
+ 4. Net 17.202.40.0/22 Ifp en1 Ifa 17.202.42.111 [SCOPED]
+ 5. Net 17.202.40.1/32 Ifp en0 Ifa 17.202.42.113
+ 6. Net 17.202.40.1/32 Ifp en1 Ifa 17.202.42.111 [SCOPED]
+ 7. Net 17.255.96.0/20 Ifp en2 Ifa 17.255.98.164
+ 8. Net 17.255.96.1/32 Ifp en2 Ifa 17.255.98.164
+ 9. Net 169.254.0.0/16 Ifp fw0 Ifa 169.254.11.33 [last]
+10. Net 224.0.0.0/4 Ifp en2 Ifa 17.255.98.164
+11. Net 224.0.0.0/4 Ifp en0 Ifa 17.202.42.113 [SCOPED]
+12. Net 224.0.0.0/4 Ifp en1 Ifa 17.202.42.111 [SCOPED]
+13. Net 224.0.0.0/4 Ifp fw0 Ifa 169.254.11.33 [last] [SCOPED]
+14. Net 255.255.255.255/32 Ifp en2 Ifa 17.255.98.164
+15. Net 255.255.255.255/32 Ifp en0 Ifa 17.202.42.113 [SCOPED]
+16. Net 255.255.255.255/32 Ifp en1 Ifa 17.202.42.111 [SCOPED]
+17. Net 255.255.255.255/32 Ifp fw0 Ifa 169.254.11.33 [last] [SCOPED]
 }
 Remove old[0]: Net 0.0.0.0/0 Gate 10.0.0.1 Ifp en0 Ifa 10.0.0.10
 Remove old[1]: Net 0.0.0.0/0 Gate 10.0.0.1 Ifp en1 Ifa 10.0.0.20 [SCOPED]
@@ -10411,75 +14785,123 @@ Remove old[2]: Net 10.0.0.0/24 Ifp en0 Ifa 10.0.0.10
 Remove old[3]: Net 10.0.0.0/24 Ifp en1 Ifa 10.0.0.20 [SCOPED]
 Remove old[4]: Net 10.0.0.1/32 Ifp en0 Ifa 10.0.0.10
 Remove old[5]: Net 10.0.0.1/32 Ifp en1 Ifa 10.0.0.20 [SCOPED]
-Add new[9]: Net 17.255.96.1/32 Ifp en2 Ifa 17.255.98.164
+Remove old[6]: Net 224.0.0.0/4 Ifp en0 Ifa 10.0.0.10
+Remove old[7]: Net 224.0.0.0/4 Ifp en1 Ifa 10.0.0.20 [SCOPED]
+Remove old[8]: Net 255.255.255.255/32 Ifp en0 Ifa 10.0.0.10
+Remove old[9]: Net 255.255.255.255/32 Ifp en1 Ifa 10.0.0.20 [SCOPED]
+Add new[8]: Net 17.255.96.1/32 Ifp en2 Ifa 17.255.98.164
 Add new[0]: Net 0.0.0.0/0 Gate 17.255.96.1 Ifp en2 Ifa 17.255.98.164
-Add new[6]: Net 17.202.40.1/32 Ifp en0 Ifa 17.202.42.113
+Add new[5]: Net 17.202.40.1/32 Ifp en0 Ifa 17.202.42.113
 Add new[1]: Net 0.0.0.0/0 Gate 17.202.40.1 Ifp en0 Ifa 17.202.42.113 [SCOPED]
-Add new[7]: Net 17.202.40.1/32 Ifp en1 Ifa 17.202.42.111 [SCOPED]
+Add new[6]: Net 17.202.40.1/32 Ifp en1 Ifa 17.202.42.111 [SCOPED]
 Add new[2]: Net 0.0.0.0/0 Gate 17.202.40.1 Ifp en1 Ifa 17.202.42.111 [SCOPED]
-Add new[3]: Net 0.0.0.0/0 Ifp fw0 Ifa 169.254.11.33 [SCOPED]
-Add new[4]: Net 17.202.40.0/22 Ifp en0 Ifa 17.202.42.113
-Add new[5]: Net 17.202.40.0/22 Ifp en1 Ifa 17.202.42.111 [SCOPED]
-Add new[8]: Net 17.255.96.0/20 Ifp en2 Ifa 17.255.98.164
+Add new[3]: Net 17.202.40.0/22 Ifp en0 Ifa 17.202.42.113
+Add new[4]: Net 17.202.40.0/22 Ifp en1 Ifa 17.202.42.111 [SCOPED]
+Add new[7]: Net 17.255.96.0/20 Ifp en2 Ifa 17.255.98.164
+Add new[9]: Net 169.254.0.0/16 Ifp fw0 Ifa 169.254.11.33 [last]
+Add new[10]: Net 224.0.0.0/4 Ifp en2 Ifa 17.255.98.164
+Add new[11]: Net 224.0.0.0/4 Ifp en0 Ifa 17.202.42.113 [SCOPED]
+Add new[12]: Net 224.0.0.0/4 Ifp en1 Ifa 17.202.42.111 [SCOPED]
+Add new[13]: Net 224.0.0.0/4 Ifp fw0 Ifa 169.254.11.33 [last] [SCOPED]
+Add new[14]: Net 255.255.255.255/32 Ifp en2 Ifa 17.255.98.164
+Add new[15]: Net 255.255.255.255/32 Ifp en0 Ifa 17.202.42.113 [SCOPED]
+Add new[16]: Net 255.255.255.255/32 Ifp en1 Ifa 17.202.42.111 [SCOPED]
+Add new[17]: Net 255.255.255.255/32 Ifp fw0 Ifa 169.254.11.33 [last] [SCOPED]
 =================> Apply 'test12', 'test6' End <=================
 
 =================> Apply 'test6', 'test13' Begin <=================
-Old routes ('test6') = <IPv4RouteList[10]> = {
+Old routes ('test6') = <IPv4RouteList[18]> = {
  0. Net 0.0.0.0/0 Gate 17.255.96.1 Ifp en2 Ifa 17.255.98.164
  1. Net 0.0.0.0/0 Gate 17.202.40.1 Ifp en0 Ifa 17.202.42.113 [SCOPED]
  2. Net 0.0.0.0/0 Gate 17.202.40.1 Ifp en1 Ifa 17.202.42.111 [SCOPED]
- 3. Net 0.0.0.0/0 Ifp fw0 Ifa 169.254.11.33 [SCOPED]
- 4. Net 17.202.40.0/22 Ifp en0 Ifa 17.202.42.113
- 5. Net 17.202.40.0/22 Ifp en1 Ifa 17.202.42.111 [SCOPED]
- 6. Net 17.202.40.1/32 Ifp en0 Ifa 17.202.42.113
- 7. Net 17.202.40.1/32 Ifp en1 Ifa 17.202.42.111 [SCOPED]
- 8. Net 17.255.96.0/20 Ifp en2 Ifa 17.255.98.164
- 9. Net 17.255.96.1/32 Ifp en2 Ifa 17.255.98.164
-}
-Add new[9]: Net 17.255.96.1/32 Ifp en2 Ifa 17.255.98.164
+ 3. Net 17.202.40.0/22 Ifp en0 Ifa 17.202.42.113
+ 4. Net 17.202.40.0/22 Ifp en1 Ifa 17.202.42.111 [SCOPED]
+ 5. Net 17.202.40.1/32 Ifp en0 Ifa 17.202.42.113
+ 6. Net 17.202.40.1/32 Ifp en1 Ifa 17.202.42.111 [SCOPED]
+ 7. Net 17.255.96.0/20 Ifp en2 Ifa 17.255.98.164
+ 8. Net 17.255.96.1/32 Ifp en2 Ifa 17.255.98.164
+ 9. Net 169.254.0.0/16 Ifp fw0 Ifa 169.254.11.33 [last]
+10. Net 224.0.0.0/4 Ifp en2 Ifa 17.255.98.164
+11. Net 224.0.0.0/4 Ifp en0 Ifa 17.202.42.113 [SCOPED]
+12. Net 224.0.0.0/4 Ifp en1 Ifa 17.202.42.111 [SCOPED]
+13. Net 224.0.0.0/4 Ifp fw0 Ifa 169.254.11.33 [last] [SCOPED]
+14. Net 255.255.255.255/32 Ifp en2 Ifa 17.255.98.164
+15. Net 255.255.255.255/32 Ifp en0 Ifa 17.202.42.113 [SCOPED]
+16. Net 255.255.255.255/32 Ifp en1 Ifa 17.202.42.111 [SCOPED]
+17. Net 255.255.255.255/32 Ifp fw0 Ifa 169.254.11.33 [last] [SCOPED]
+}
+Add new[8]: Net 17.255.96.1/32 Ifp en2 Ifa 17.255.98.164
 Add new[0]: Net 0.0.0.0/0 Gate 17.255.96.1 Ifp en2 Ifa 17.255.98.164
-Add new[6]: Net 17.202.40.1/32 Ifp en0 Ifa 17.202.42.113
+Add new[5]: Net 17.202.40.1/32 Ifp en0 Ifa 17.202.42.113
 Add new[1]: Net 0.0.0.0/0 Gate 17.202.40.1 Ifp en0 Ifa 17.202.42.113 [SCOPED]
-Add new[7]: Net 17.202.40.1/32 Ifp en1 Ifa 17.202.42.111 [SCOPED]
+Add new[6]: Net 17.202.40.1/32 Ifp en1 Ifa 17.202.42.111 [SCOPED]
 Add new[2]: Net 0.0.0.0/0 Gate 17.202.40.1 Ifp en1 Ifa 17.202.42.111 [SCOPED]
-Add new[3]: Net 0.0.0.0/0 Ifp fw0 Ifa 169.254.11.33 [SCOPED]
-Add new[4]: Net 17.202.40.0/22 Ifp en0 Ifa 17.202.42.113
-Add new[5]: Net 17.202.40.0/22 Ifp en1 Ifa 17.202.42.111 [SCOPED]
-Add new[8]: Net 17.255.96.0/20 Ifp en2 Ifa 17.255.98.164
-New Routes ('test13') = <IPv4RouteList[6]> = {
+Add new[3]: Net 17.202.40.0/22 Ifp en0 Ifa 17.202.42.113
+Add new[4]: Net 17.202.40.0/22 Ifp en1 Ifa 17.202.42.111 [SCOPED]
+Add new[7]: Net 17.255.96.0/20 Ifp en2 Ifa 17.255.98.164
+Add new[9]: Net 169.254.0.0/16 Ifp fw0 Ifa 169.254.11.33 [last]
+Add new[10]: Net 224.0.0.0/4 Ifp en2 Ifa 17.255.98.164
+Add new[11]: Net 224.0.0.0/4 Ifp en0 Ifa 17.202.42.113 [SCOPED]
+Add new[12]: Net 224.0.0.0/4 Ifp en1 Ifa 17.202.42.111 [SCOPED]
+Add new[13]: Net 224.0.0.0/4 Ifp fw0 Ifa 169.254.11.33 [last] [SCOPED]
+Add new[14]: Net 255.255.255.255/32 Ifp en2 Ifa 17.255.98.164
+Add new[15]: Net 255.255.255.255/32 Ifp en0 Ifa 17.202.42.113 [SCOPED]
+Add new[16]: Net 255.255.255.255/32 Ifp en1 Ifa 17.202.42.111 [SCOPED]
+Add new[17]: Net 255.255.255.255/32 Ifp fw0 Ifa 169.254.11.33 [last] [SCOPED]
+New Routes ('test13') = <IPv4RouteList[10]> = {
  0. Net 0.0.0.0/0 Gate 10.0.0.1 Ifp en0 Ifa 10.0.0.10
  1. Net 0.0.0.0/0 Gate 10.0.0.1 Ifp en1 Ifa 10.0.0.20 [never] [SCOPED]
  2. Net 10.0.0.0/24 Ifp en0 Ifa 10.0.0.10
  3. Net 10.0.0.0/24 Ifp en1 Ifa 10.0.0.20 [last] [SCOPED]
  4. Net 10.0.0.1/32 Ifp en0 Ifa 10.0.0.10
  5. Net 10.0.0.1/32 Ifp en1 Ifa 10.0.0.20 [last] [SCOPED]
+ 6. Net 224.0.0.0/4 Ifp en0 Ifa 10.0.0.10
+ 7. Net 224.0.0.0/4 Ifp en1 Ifa 10.0.0.20 [last] [SCOPED]
+ 8. Net 255.255.255.255/32 Ifp en0 Ifa 10.0.0.10
+ 9. Net 255.255.255.255/32 Ifp en1 Ifa 10.0.0.20 [last] [SCOPED]
 }
 Remove old[0]: Net 0.0.0.0/0 Gate 17.255.96.1 Ifp en2 Ifa 17.255.98.164
 Remove old[1]: Net 0.0.0.0/0 Gate 17.202.40.1 Ifp en0 Ifa 17.202.42.113 [SCOPED]
 Remove old[2]: Net 0.0.0.0/0 Gate 17.202.40.1 Ifp en1 Ifa 17.202.42.111 [SCOPED]
-Remove old[3]: Net 0.0.0.0/0 Ifp fw0 Ifa 169.254.11.33 [SCOPED]
-Remove old[4]: Net 17.202.40.0/22 Ifp en0 Ifa 17.202.42.113
-Remove old[5]: Net 17.202.40.0/22 Ifp en1 Ifa 17.202.42.111 [SCOPED]
-Remove old[6]: Net 17.202.40.1/32 Ifp en0 Ifa 17.202.42.113
-Remove old[7]: Net 17.202.40.1/32 Ifp en1 Ifa 17.202.42.111 [SCOPED]
-Remove old[8]: Net 17.255.96.0/20 Ifp en2 Ifa 17.255.98.164
-Remove old[9]: Net 17.255.96.1/32 Ifp en2 Ifa 17.255.98.164
+Remove old[3]: Net 17.202.40.0/22 Ifp en0 Ifa 17.202.42.113
+Remove old[4]: Net 17.202.40.0/22 Ifp en1 Ifa 17.202.42.111 [SCOPED]
+Remove old[5]: Net 17.202.40.1/32 Ifp en0 Ifa 17.202.42.113
+Remove old[6]: Net 17.202.40.1/32 Ifp en1 Ifa 17.202.42.111 [SCOPED]
+Remove old[7]: Net 17.255.96.0/20 Ifp en2 Ifa 17.255.98.164
+Remove old[8]: Net 17.255.96.1/32 Ifp en2 Ifa 17.255.98.164
+Remove old[9]: Net 169.254.0.0/16 Ifp fw0 Ifa 169.254.11.33 [last]
+Remove old[10]: Net 224.0.0.0/4 Ifp en2 Ifa 17.255.98.164
+Remove old[11]: Net 224.0.0.0/4 Ifp en0 Ifa 17.202.42.113 [SCOPED]
+Remove old[12]: Net 224.0.0.0/4 Ifp en1 Ifa 17.202.42.111 [SCOPED]
+Remove old[13]: Net 224.0.0.0/4 Ifp fw0 Ifa 169.254.11.33 [last] [SCOPED]
+Remove old[14]: Net 255.255.255.255/32 Ifp en2 Ifa 17.255.98.164
+Remove old[15]: Net 255.255.255.255/32 Ifp en0 Ifa 17.202.42.113 [SCOPED]
+Remove old[16]: Net 255.255.255.255/32 Ifp en1 Ifa 17.202.42.111 [SCOPED]
+Remove old[17]: Net 255.255.255.255/32 Ifp fw0 Ifa 169.254.11.33 [last] [SCOPED]
 Add new[4]: Net 10.0.0.1/32 Ifp en0 Ifa 10.0.0.10
 Add new[0]: Net 0.0.0.0/0 Gate 10.0.0.1 Ifp en0 Ifa 10.0.0.10
 Add new[5]: Net 10.0.0.1/32 Ifp en1 Ifa 10.0.0.20 [last] [SCOPED]
 Add new[1]: Net 0.0.0.0/0 Gate 10.0.0.1 Ifp en1 Ifa 10.0.0.20 [never] [SCOPED]
 Add new[2]: Net 10.0.0.0/24 Ifp en0 Ifa 10.0.0.10
 Add new[3]: Net 10.0.0.0/24 Ifp en1 Ifa 10.0.0.20 [last] [SCOPED]
+Add new[6]: Net 224.0.0.0/4 Ifp en0 Ifa 10.0.0.10
+Add new[7]: Net 224.0.0.0/4 Ifp en1 Ifa 10.0.0.20 [last] [SCOPED]
+Add new[8]: Net 255.255.255.255/32 Ifp en0 Ifa 10.0.0.10
+Add new[9]: Net 255.255.255.255/32 Ifp en1 Ifa 10.0.0.20 [last] [SCOPED]
 =================> Apply 'test6', 'test13' End <=================
 
 =================> Apply 'test13', 'test6' Begin <=================
-Old routes ('test13') = <IPv4RouteList[6]> = {
+Old routes ('test13') = <IPv4RouteList[10]> = {
  0. Net 0.0.0.0/0 Gate 10.0.0.1 Ifp en0 Ifa 10.0.0.10
  1. Net 0.0.0.0/0 Gate 10.0.0.1 Ifp en1 Ifa 10.0.0.20 [never] [SCOPED]
  2. Net 10.0.0.0/24 Ifp en0 Ifa 10.0.0.10
  3. Net 10.0.0.0/24 Ifp en1 Ifa 10.0.0.20 [last] [SCOPED]
  4. Net 10.0.0.1/32 Ifp en0 Ifa 10.0.0.10
  5. Net 10.0.0.1/32 Ifp en1 Ifa 10.0.0.20 [last] [SCOPED]
+ 6. Net 224.0.0.0/4 Ifp en0 Ifa 10.0.0.10
+ 7. Net 224.0.0.0/4 Ifp en1 Ifa 10.0.0.20 [last] [SCOPED]
+ 8. Net 255.255.255.255/32 Ifp en0 Ifa 10.0.0.10
+ 9. Net 255.255.255.255/32 Ifp en1 Ifa 10.0.0.20 [last] [SCOPED]
 }
 Add new[4]: Net 10.0.0.1/32 Ifp en0 Ifa 10.0.0.10
 Add new[0]: Net 0.0.0.0/0 Gate 10.0.0.1 Ifp en0 Ifa 10.0.0.10
@@ -10487,17 +14909,29 @@ Add new[5]: Net 10.0.0.1/32 Ifp en1 Ifa 10.0.0.20 [last] [SCOPED]
 Add new[1]: Net 0.0.0.0/0 Gate 10.0.0.1 Ifp en1 Ifa 10.0.0.20 [never] [SCOPED]
 Add new[2]: Net 10.0.0.0/24 Ifp en0 Ifa 10.0.0.10
 Add new[3]: Net 10.0.0.0/24 Ifp en1 Ifa 10.0.0.20 [last] [SCOPED]
-New Routes ('test6') = <IPv4RouteList[10]> = {
+Add new[6]: Net 224.0.0.0/4 Ifp en0 Ifa 10.0.0.10
+Add new[7]: Net 224.0.0.0/4 Ifp en1 Ifa 10.0.0.20 [last] [SCOPED]
+Add new[8]: Net 255.255.255.255/32 Ifp en0 Ifa 10.0.0.10
+Add new[9]: Net 255.255.255.255/32 Ifp en1 Ifa 10.0.0.20 [last] [SCOPED]
+New Routes ('test6') = <IPv4RouteList[18]> = {
  0. Net 0.0.0.0/0 Gate 17.255.96.1 Ifp en2 Ifa 17.255.98.164
  1. Net 0.0.0.0/0 Gate 17.202.40.1 Ifp en0 Ifa 17.202.42.113 [SCOPED]
  2. Net 0.0.0.0/0 Gate 17.202.40.1 Ifp en1 Ifa 17.202.42.111 [SCOPED]
- 3. Net 0.0.0.0/0 Ifp fw0 Ifa 169.254.11.33 [SCOPED]
- 4. Net 17.202.40.0/22 Ifp en0 Ifa 17.202.42.113
- 5. Net 17.202.40.0/22 Ifp en1 Ifa 17.202.42.111 [SCOPED]
- 6. Net 17.202.40.1/32 Ifp en0 Ifa 17.202.42.113
- 7. Net 17.202.40.1/32 Ifp en1 Ifa 17.202.42.111 [SCOPED]
- 8. Net 17.255.96.0/20 Ifp en2 Ifa 17.255.98.164
- 9. Net 17.255.96.1/32 Ifp en2 Ifa 17.255.98.164
+ 3. Net 17.202.40.0/22 Ifp en0 Ifa 17.202.42.113
+ 4. Net 17.202.40.0/22 Ifp en1 Ifa 17.202.42.111 [SCOPED]
+ 5. Net 17.202.40.1/32 Ifp en0 Ifa 17.202.42.113
+ 6. Net 17.202.40.1/32 Ifp en1 Ifa 17.202.42.111 [SCOPED]
+ 7. Net 17.255.96.0/20 Ifp en2 Ifa 17.255.98.164
+ 8. Net 17.255.96.1/32 Ifp en2 Ifa 17.255.98.164
+ 9. Net 169.254.0.0/16 Ifp fw0 Ifa 169.254.11.33 [last]
+10. Net 224.0.0.0/4 Ifp en2 Ifa 17.255.98.164
+11. Net 224.0.0.0/4 Ifp en0 Ifa 17.202.42.113 [SCOPED]
+12. Net 224.0.0.0/4 Ifp en1 Ifa 17.202.42.111 [SCOPED]
+13. Net 224.0.0.0/4 Ifp fw0 Ifa 169.254.11.33 [last] [SCOPED]
+14. Net 255.255.255.255/32 Ifp en2 Ifa 17.255.98.164
+15. Net 255.255.255.255/32 Ifp en0 Ifa 17.202.42.113 [SCOPED]
+16. Net 255.255.255.255/32 Ifp en1 Ifa 17.202.42.111 [SCOPED]
+17. Net 255.255.255.255/32 Ifp fw0 Ifa 169.254.11.33 [last] [SCOPED]
 }
 Remove old[0]: Net 0.0.0.0/0 Gate 10.0.0.1 Ifp en0 Ifa 10.0.0.10
 Remove old[1]: Net 0.0.0.0/0 Gate 10.0.0.1 Ifp en1 Ifa 10.0.0.20 [never] [SCOPED]
@@ -10505,190 +14939,318 @@ Remove old[2]: Net 10.0.0.0/24 Ifp en0 Ifa 10.0.0.10
 Remove old[3]: Net 10.0.0.0/24 Ifp en1 Ifa 10.0.0.20 [last] [SCOPED]
 Remove old[4]: Net 10.0.0.1/32 Ifp en0 Ifa 10.0.0.10
 Remove old[5]: Net 10.0.0.1/32 Ifp en1 Ifa 10.0.0.20 [last] [SCOPED]
-Add new[9]: Net 17.255.96.1/32 Ifp en2 Ifa 17.255.98.164
+Remove old[6]: Net 224.0.0.0/4 Ifp en0 Ifa 10.0.0.10
+Remove old[7]: Net 224.0.0.0/4 Ifp en1 Ifa 10.0.0.20 [last] [SCOPED]
+Remove old[8]: Net 255.255.255.255/32 Ifp en0 Ifa 10.0.0.10
+Remove old[9]: Net 255.255.255.255/32 Ifp en1 Ifa 10.0.0.20 [last] [SCOPED]
+Add new[8]: Net 17.255.96.1/32 Ifp en2 Ifa 17.255.98.164
 Add new[0]: Net 0.0.0.0/0 Gate 17.255.96.1 Ifp en2 Ifa 17.255.98.164
-Add new[6]: Net 17.202.40.1/32 Ifp en0 Ifa 17.202.42.113
+Add new[5]: Net 17.202.40.1/32 Ifp en0 Ifa 17.202.42.113
 Add new[1]: Net 0.0.0.0/0 Gate 17.202.40.1 Ifp en0 Ifa 17.202.42.113 [SCOPED]
-Add new[7]: Net 17.202.40.1/32 Ifp en1 Ifa 17.202.42.111 [SCOPED]
+Add new[6]: Net 17.202.40.1/32 Ifp en1 Ifa 17.202.42.111 [SCOPED]
 Add new[2]: Net 0.0.0.0/0 Gate 17.202.40.1 Ifp en1 Ifa 17.202.42.111 [SCOPED]
-Add new[3]: Net 0.0.0.0/0 Ifp fw0 Ifa 169.254.11.33 [SCOPED]
-Add new[4]: Net 17.202.40.0/22 Ifp en0 Ifa 17.202.42.113
-Add new[5]: Net 17.202.40.0/22 Ifp en1 Ifa 17.202.42.111 [SCOPED]
-Add new[8]: Net 17.255.96.0/20 Ifp en2 Ifa 17.255.98.164
+Add new[3]: Net 17.202.40.0/22 Ifp en0 Ifa 17.202.42.113
+Add new[4]: Net 17.202.40.0/22 Ifp en1 Ifa 17.202.42.111 [SCOPED]
+Add new[7]: Net 17.255.96.0/20 Ifp en2 Ifa 17.255.98.164
+Add new[9]: Net 169.254.0.0/16 Ifp fw0 Ifa 169.254.11.33 [last]
+Add new[10]: Net 224.0.0.0/4 Ifp en2 Ifa 17.255.98.164
+Add new[11]: Net 224.0.0.0/4 Ifp en0 Ifa 17.202.42.113 [SCOPED]
+Add new[12]: Net 224.0.0.0/4 Ifp en1 Ifa 17.202.42.111 [SCOPED]
+Add new[13]: Net 224.0.0.0/4 Ifp fw0 Ifa 169.254.11.33 [last] [SCOPED]
+Add new[14]: Net 255.255.255.255/32 Ifp en2 Ifa 17.255.98.164
+Add new[15]: Net 255.255.255.255/32 Ifp en0 Ifa 17.202.42.113 [SCOPED]
+Add new[16]: Net 255.255.255.255/32 Ifp en1 Ifa 17.202.42.111 [SCOPED]
+Add new[17]: Net 255.255.255.255/32 Ifp fw0 Ifa 169.254.11.33 [last] [SCOPED]
 =================> Apply 'test13', 'test6' End <=================
 
 =================> Apply 'test6', 'test14' Begin <=================
-Old routes ('test6') = <IPv4RouteList[10]> = {
+Old routes ('test6') = <IPv4RouteList[18]> = {
  0. Net 0.0.0.0/0 Gate 17.255.96.1 Ifp en2 Ifa 17.255.98.164
  1. Net 0.0.0.0/0 Gate 17.202.40.1 Ifp en0 Ifa 17.202.42.113 [SCOPED]
  2. Net 0.0.0.0/0 Gate 17.202.40.1 Ifp en1 Ifa 17.202.42.111 [SCOPED]
- 3. Net 0.0.0.0/0 Ifp fw0 Ifa 169.254.11.33 [SCOPED]
- 4. Net 17.202.40.0/22 Ifp en0 Ifa 17.202.42.113
- 5. Net 17.202.40.0/22 Ifp en1 Ifa 17.202.42.111 [SCOPED]
- 6. Net 17.202.40.1/32 Ifp en0 Ifa 17.202.42.113
- 7. Net 17.202.40.1/32 Ifp en1 Ifa 17.202.42.111 [SCOPED]
- 8. Net 17.255.96.0/20 Ifp en2 Ifa 17.255.98.164
- 9. Net 17.255.96.1/32 Ifp en2 Ifa 17.255.98.164
-}
-Add new[9]: Net 17.255.96.1/32 Ifp en2 Ifa 17.255.98.164
+ 3. Net 17.202.40.0/22 Ifp en0 Ifa 17.202.42.113
+ 4. Net 17.202.40.0/22 Ifp en1 Ifa 17.202.42.111 [SCOPED]
+ 5. Net 17.202.40.1/32 Ifp en0 Ifa 17.202.42.113
+ 6. Net 17.202.40.1/32 Ifp en1 Ifa 17.202.42.111 [SCOPED]
+ 7. Net 17.255.96.0/20 Ifp en2 Ifa 17.255.98.164
+ 8. Net 17.255.96.1/32 Ifp en2 Ifa 17.255.98.164
+ 9. Net 169.254.0.0/16 Ifp fw0 Ifa 169.254.11.33 [last]
+10. Net 224.0.0.0/4 Ifp en2 Ifa 17.255.98.164
+11. Net 224.0.0.0/4 Ifp en0 Ifa 17.202.42.113 [SCOPED]
+12. Net 224.0.0.0/4 Ifp en1 Ifa 17.202.42.111 [SCOPED]
+13. Net 224.0.0.0/4 Ifp fw0 Ifa 169.254.11.33 [last] [SCOPED]
+14. Net 255.255.255.255/32 Ifp en2 Ifa 17.255.98.164
+15. Net 255.255.255.255/32 Ifp en0 Ifa 17.202.42.113 [SCOPED]
+16. Net 255.255.255.255/32 Ifp en1 Ifa 17.202.42.111 [SCOPED]
+17. Net 255.255.255.255/32 Ifp fw0 Ifa 169.254.11.33 [last] [SCOPED]
+}
+Add new[8]: Net 17.255.96.1/32 Ifp en2 Ifa 17.255.98.164
 Add new[0]: Net 0.0.0.0/0 Gate 17.255.96.1 Ifp en2 Ifa 17.255.98.164
-Add new[6]: Net 17.202.40.1/32 Ifp en0 Ifa 17.202.42.113
+Add new[5]: Net 17.202.40.1/32 Ifp en0 Ifa 17.202.42.113
 Add new[1]: Net 0.0.0.0/0 Gate 17.202.40.1 Ifp en0 Ifa 17.202.42.113 [SCOPED]
-Add new[7]: Net 17.202.40.1/32 Ifp en1 Ifa 17.202.42.111 [SCOPED]
+Add new[6]: Net 17.202.40.1/32 Ifp en1 Ifa 17.202.42.111 [SCOPED]
 Add new[2]: Net 0.0.0.0/0 Gate 17.202.40.1 Ifp en1 Ifa 17.202.42.111 [SCOPED]
-Add new[3]: Net 0.0.0.0/0 Ifp fw0 Ifa 169.254.11.33 [SCOPED]
-Add new[4]: Net 17.202.40.0/22 Ifp en0 Ifa 17.202.42.113
-Add new[5]: Net 17.202.40.0/22 Ifp en1 Ifa 17.202.42.111 [SCOPED]
-Add new[8]: Net 17.255.96.0/20 Ifp en2 Ifa 17.255.98.164
-New Routes ('test14') = <IPv4RouteList[3]> = {
+Add new[3]: Net 17.202.40.0/22 Ifp en0 Ifa 17.202.42.113
+Add new[4]: Net 17.202.40.0/22 Ifp en1 Ifa 17.202.42.111 [SCOPED]
+Add new[7]: Net 17.255.96.0/20 Ifp en2 Ifa 17.255.98.164
+Add new[9]: Net 169.254.0.0/16 Ifp fw0 Ifa 169.254.11.33 [last]
+Add new[10]: Net 224.0.0.0/4 Ifp en2 Ifa 17.255.98.164
+Add new[11]: Net 224.0.0.0/4 Ifp en0 Ifa 17.202.42.113 [SCOPED]
+Add new[12]: Net 224.0.0.0/4 Ifp en1 Ifa 17.202.42.111 [SCOPED]
+Add new[13]: Net 224.0.0.0/4 Ifp fw0 Ifa 169.254.11.33 [last] [SCOPED]
+Add new[14]: Net 255.255.255.255/32 Ifp en2 Ifa 17.255.98.164
+Add new[15]: Net 255.255.255.255/32 Ifp en0 Ifa 17.202.42.113 [SCOPED]
+Add new[16]: Net 255.255.255.255/32 Ifp en1 Ifa 17.202.42.111 [SCOPED]
+Add new[17]: Net 255.255.255.255/32 Ifp fw0 Ifa 169.254.11.33 [last] [SCOPED]
+New Routes ('test14') = <IPv4RouteList[5]> = {
  0. Net 0.0.0.0/0 Gate 10.0.0.1 Ifp en1 Ifa 10.0.0.20 [never] [SCOPED]
  1. Net 10.0.0.0/24 Ifp en1 Ifa 10.0.0.20 [last]
  2. Net 10.0.0.1/32 Ifp en1 Ifa 10.0.0.20 [last]
+ 3. Net 224.0.0.0/4 Ifp en1 Ifa 10.0.0.20 [last]
+ 4. Net 255.255.255.255/32 Ifp en1 Ifa 10.0.0.20 [last]
 }
 Remove old[0]: Net 0.0.0.0/0 Gate 17.255.96.1 Ifp en2 Ifa 17.255.98.164
 Remove old[1]: Net 0.0.0.0/0 Gate 17.202.40.1 Ifp en0 Ifa 17.202.42.113 [SCOPED]
 Remove old[2]: Net 0.0.0.0/0 Gate 17.202.40.1 Ifp en1 Ifa 17.202.42.111 [SCOPED]
-Remove old[3]: Net 0.0.0.0/0 Ifp fw0 Ifa 169.254.11.33 [SCOPED]
-Remove old[4]: Net 17.202.40.0/22 Ifp en0 Ifa 17.202.42.113
-Remove old[5]: Net 17.202.40.0/22 Ifp en1 Ifa 17.202.42.111 [SCOPED]
-Remove old[6]: Net 17.202.40.1/32 Ifp en0 Ifa 17.202.42.113
-Remove old[7]: Net 17.202.40.1/32 Ifp en1 Ifa 17.202.42.111 [SCOPED]
-Remove old[8]: Net 17.255.96.0/20 Ifp en2 Ifa 17.255.98.164
-Remove old[9]: Net 17.255.96.1/32 Ifp en2 Ifa 17.255.98.164
+Remove old[3]: Net 17.202.40.0/22 Ifp en0 Ifa 17.202.42.113
+Remove old[4]: Net 17.202.40.0/22 Ifp en1 Ifa 17.202.42.111 [SCOPED]
+Remove old[5]: Net 17.202.40.1/32 Ifp en0 Ifa 17.202.42.113
+Remove old[6]: Net 17.202.40.1/32 Ifp en1 Ifa 17.202.42.111 [SCOPED]
+Remove old[7]: Net 17.255.96.0/20 Ifp en2 Ifa 17.255.98.164
+Remove old[8]: Net 17.255.96.1/32 Ifp en2 Ifa 17.255.98.164
+Remove old[9]: Net 169.254.0.0/16 Ifp fw0 Ifa 169.254.11.33 [last]
+Remove old[10]: Net 224.0.0.0/4 Ifp en2 Ifa 17.255.98.164
+Remove old[11]: Net 224.0.0.0/4 Ifp en0 Ifa 17.202.42.113 [SCOPED]
+Remove old[12]: Net 224.0.0.0/4 Ifp en1 Ifa 17.202.42.111 [SCOPED]
+Remove old[13]: Net 224.0.0.0/4 Ifp fw0 Ifa 169.254.11.33 [last] [SCOPED]
+Remove old[14]: Net 255.255.255.255/32 Ifp en2 Ifa 17.255.98.164
+Remove old[15]: Net 255.255.255.255/32 Ifp en0 Ifa 17.202.42.113 [SCOPED]
+Remove old[16]: Net 255.255.255.255/32 Ifp en1 Ifa 17.202.42.111 [SCOPED]
+Remove old[17]: Net 255.255.255.255/32 Ifp fw0 Ifa 169.254.11.33 [last] [SCOPED]
 Add new[2]: Net 10.0.0.1/32 Ifp en1 Ifa 10.0.0.20 [last]
 Add new[0]: Net 0.0.0.0/0 Gate 10.0.0.1 Ifp en1 Ifa 10.0.0.20 [never] [SCOPED]
 Add new[1]: Net 10.0.0.0/24 Ifp en1 Ifa 10.0.0.20 [last]
+Add new[3]: Net 224.0.0.0/4 Ifp en1 Ifa 10.0.0.20 [last]
+Add new[4]: Net 255.255.255.255/32 Ifp en1 Ifa 10.0.0.20 [last]
 =================> Apply 'test6', 'test14' End <=================
 
 =================> Apply 'test14', 'test6' Begin <=================
-Old routes ('test14') = <IPv4RouteList[3]> = {
+Old routes ('test14') = <IPv4RouteList[5]> = {
  0. Net 0.0.0.0/0 Gate 10.0.0.1 Ifp en1 Ifa 10.0.0.20 [never] [SCOPED]
  1. Net 10.0.0.0/24 Ifp en1 Ifa 10.0.0.20 [last]
  2. Net 10.0.0.1/32 Ifp en1 Ifa 10.0.0.20 [last]
+ 3. Net 224.0.0.0/4 Ifp en1 Ifa 10.0.0.20 [last]
+ 4. Net 255.255.255.255/32 Ifp en1 Ifa 10.0.0.20 [last]
 }
 Add new[2]: Net 10.0.0.1/32 Ifp en1 Ifa 10.0.0.20 [last]
 Add new[0]: Net 0.0.0.0/0 Gate 10.0.0.1 Ifp en1 Ifa 10.0.0.20 [never] [SCOPED]
 Add new[1]: Net 10.0.0.0/24 Ifp en1 Ifa 10.0.0.20 [last]
-New Routes ('test6') = <IPv4RouteList[10]> = {
+Add new[3]: Net 224.0.0.0/4 Ifp en1 Ifa 10.0.0.20 [last]
+Add new[4]: Net 255.255.255.255/32 Ifp en1 Ifa 10.0.0.20 [last]
+New Routes ('test6') = <IPv4RouteList[18]> = {
  0. Net 0.0.0.0/0 Gate 17.255.96.1 Ifp en2 Ifa 17.255.98.164
  1. Net 0.0.0.0/0 Gate 17.202.40.1 Ifp en0 Ifa 17.202.42.113 [SCOPED]
  2. Net 0.0.0.0/0 Gate 17.202.40.1 Ifp en1 Ifa 17.202.42.111 [SCOPED]
- 3. Net 0.0.0.0/0 Ifp fw0 Ifa 169.254.11.33 [SCOPED]
- 4. Net 17.202.40.0/22 Ifp en0 Ifa 17.202.42.113
- 5. Net 17.202.40.0/22 Ifp en1 Ifa 17.202.42.111 [SCOPED]
- 6. Net 17.202.40.1/32 Ifp en0 Ifa 17.202.42.113
- 7. Net 17.202.40.1/32 Ifp en1 Ifa 17.202.42.111 [SCOPED]
- 8. Net 17.255.96.0/20 Ifp en2 Ifa 17.255.98.164
- 9. Net 17.255.96.1/32 Ifp en2 Ifa 17.255.98.164
+ 3. Net 17.202.40.0/22 Ifp en0 Ifa 17.202.42.113
+ 4. Net 17.202.40.0/22 Ifp en1 Ifa 17.202.42.111 [SCOPED]
+ 5. Net 17.202.40.1/32 Ifp en0 Ifa 17.202.42.113
+ 6. Net 17.202.40.1/32 Ifp en1 Ifa 17.202.42.111 [SCOPED]
+ 7. Net 17.255.96.0/20 Ifp en2 Ifa 17.255.98.164
+ 8. Net 17.255.96.1/32 Ifp en2 Ifa 17.255.98.164
+ 9. Net 169.254.0.0/16 Ifp fw0 Ifa 169.254.11.33 [last]
+10. Net 224.0.0.0/4 Ifp en2 Ifa 17.255.98.164
+11. Net 224.0.0.0/4 Ifp en0 Ifa 17.202.42.113 [SCOPED]
+12. Net 224.0.0.0/4 Ifp en1 Ifa 17.202.42.111 [SCOPED]
+13. Net 224.0.0.0/4 Ifp fw0 Ifa 169.254.11.33 [last] [SCOPED]
+14. Net 255.255.255.255/32 Ifp en2 Ifa 17.255.98.164
+15. Net 255.255.255.255/32 Ifp en0 Ifa 17.202.42.113 [SCOPED]
+16. Net 255.255.255.255/32 Ifp en1 Ifa 17.202.42.111 [SCOPED]
+17. Net 255.255.255.255/32 Ifp fw0 Ifa 169.254.11.33 [last] [SCOPED]
 }
 Remove old[0]: Net 0.0.0.0/0 Gate 10.0.0.1 Ifp en1 Ifa 10.0.0.20 [never] [SCOPED]
 Remove old[1]: Net 10.0.0.0/24 Ifp en1 Ifa 10.0.0.20 [last]
 Remove old[2]: Net 10.0.0.1/32 Ifp en1 Ifa 10.0.0.20 [last]
-Add new[9]: Net 17.255.96.1/32 Ifp en2 Ifa 17.255.98.164
+Remove old[3]: Net 224.0.0.0/4 Ifp en1 Ifa 10.0.0.20 [last]
+Remove old[4]: Net 255.255.255.255/32 Ifp en1 Ifa 10.0.0.20 [last]
+Add new[8]: Net 17.255.96.1/32 Ifp en2 Ifa 17.255.98.164
 Add new[0]: Net 0.0.0.0/0 Gate 17.255.96.1 Ifp en2 Ifa 17.255.98.164
-Add new[6]: Net 17.202.40.1/32 Ifp en0 Ifa 17.202.42.113
+Add new[5]: Net 17.202.40.1/32 Ifp en0 Ifa 17.202.42.113
 Add new[1]: Net 0.0.0.0/0 Gate 17.202.40.1 Ifp en0 Ifa 17.202.42.113 [SCOPED]
-Add new[7]: Net 17.202.40.1/32 Ifp en1 Ifa 17.202.42.111 [SCOPED]
+Add new[6]: Net 17.202.40.1/32 Ifp en1 Ifa 17.202.42.111 [SCOPED]
 Add new[2]: Net 0.0.0.0/0 Gate 17.202.40.1 Ifp en1 Ifa 17.202.42.111 [SCOPED]
-Add new[3]: Net 0.0.0.0/0 Ifp fw0 Ifa 169.254.11.33 [SCOPED]
-Add new[4]: Net 17.202.40.0/22 Ifp en0 Ifa 17.202.42.113
-Add new[5]: Net 17.202.40.0/22 Ifp en1 Ifa 17.202.42.111 [SCOPED]
-Add new[8]: Net 17.255.96.0/20 Ifp en2 Ifa 17.255.98.164
+Add new[3]: Net 17.202.40.0/22 Ifp en0 Ifa 17.202.42.113
+Add new[4]: Net 17.202.40.0/22 Ifp en1 Ifa 17.202.42.111 [SCOPED]
+Add new[7]: Net 17.255.96.0/20 Ifp en2 Ifa 17.255.98.164
+Add new[9]: Net 169.254.0.0/16 Ifp fw0 Ifa 169.254.11.33 [last]
+Add new[10]: Net 224.0.0.0/4 Ifp en2 Ifa 17.255.98.164
+Add new[11]: Net 224.0.0.0/4 Ifp en0 Ifa 17.202.42.113 [SCOPED]
+Add new[12]: Net 224.0.0.0/4 Ifp en1 Ifa 17.202.42.111 [SCOPED]
+Add new[13]: Net 224.0.0.0/4 Ifp fw0 Ifa 169.254.11.33 [last] [SCOPED]
+Add new[14]: Net 255.255.255.255/32 Ifp en2 Ifa 17.255.98.164
+Add new[15]: Net 255.255.255.255/32 Ifp en0 Ifa 17.202.42.113 [SCOPED]
+Add new[16]: Net 255.255.255.255/32 Ifp en1 Ifa 17.202.42.111 [SCOPED]
+Add new[17]: Net 255.255.255.255/32 Ifp fw0 Ifa 169.254.11.33 [last] [SCOPED]
 =================> Apply 'test14', 'test6' End <=================
 
 =================> Apply 'test6', 'test15' Begin <=================
-Old routes ('test6') = <IPv4RouteList[10]> = {
+Old routes ('test6') = <IPv4RouteList[18]> = {
  0. Net 0.0.0.0/0 Gate 17.255.96.1 Ifp en2 Ifa 17.255.98.164
  1. Net 0.0.0.0/0 Gate 17.202.40.1 Ifp en0 Ifa 17.202.42.113 [SCOPED]
  2. Net 0.0.0.0/0 Gate 17.202.40.1 Ifp en1 Ifa 17.202.42.111 [SCOPED]
- 3. Net 0.0.0.0/0 Ifp fw0 Ifa 169.254.11.33 [SCOPED]
- 4. Net 17.202.40.0/22 Ifp en0 Ifa 17.202.42.113
- 5. Net 17.202.40.0/22 Ifp en1 Ifa 17.202.42.111 [SCOPED]
- 6. Net 17.202.40.1/32 Ifp en0 Ifa 17.202.42.113
- 7. Net 17.202.40.1/32 Ifp en1 Ifa 17.202.42.111 [SCOPED]
- 8. Net 17.255.96.0/20 Ifp en2 Ifa 17.255.98.164
- 9. Net 17.255.96.1/32 Ifp en2 Ifa 17.255.98.164
-}
-Add new[9]: Net 17.255.96.1/32 Ifp en2 Ifa 17.255.98.164
+ 3. Net 17.202.40.0/22 Ifp en0 Ifa 17.202.42.113
+ 4. Net 17.202.40.0/22 Ifp en1 Ifa 17.202.42.111 [SCOPED]
+ 5. Net 17.202.40.1/32 Ifp en0 Ifa 17.202.42.113
+ 6. Net 17.202.40.1/32 Ifp en1 Ifa 17.202.42.111 [SCOPED]
+ 7. Net 17.255.96.0/20 Ifp en2 Ifa 17.255.98.164
+ 8. Net 17.255.96.1/32 Ifp en2 Ifa 17.255.98.164
+ 9. Net 169.254.0.0/16 Ifp fw0 Ifa 169.254.11.33 [last]
+10. Net 224.0.0.0/4 Ifp en2 Ifa 17.255.98.164
+11. Net 224.0.0.0/4 Ifp en0 Ifa 17.202.42.113 [SCOPED]
+12. Net 224.0.0.0/4 Ifp en1 Ifa 17.202.42.111 [SCOPED]
+13. Net 224.0.0.0/4 Ifp fw0 Ifa 169.254.11.33 [last] [SCOPED]
+14. Net 255.255.255.255/32 Ifp en2 Ifa 17.255.98.164
+15. Net 255.255.255.255/32 Ifp en0 Ifa 17.202.42.113 [SCOPED]
+16. Net 255.255.255.255/32 Ifp en1 Ifa 17.202.42.111 [SCOPED]
+17. Net 255.255.255.255/32 Ifp fw0 Ifa 169.254.11.33 [last] [SCOPED]
+}
+Add new[8]: Net 17.255.96.1/32 Ifp en2 Ifa 17.255.98.164
 Add new[0]: Net 0.0.0.0/0 Gate 17.255.96.1 Ifp en2 Ifa 17.255.98.164
-Add new[6]: Net 17.202.40.1/32 Ifp en0 Ifa 17.202.42.113
+Add new[5]: Net 17.202.40.1/32 Ifp en0 Ifa 17.202.42.113
 Add new[1]: Net 0.0.0.0/0 Gate 17.202.40.1 Ifp en0 Ifa 17.202.42.113 [SCOPED]
-Add new[7]: Net 17.202.40.1/32 Ifp en1 Ifa 17.202.42.111 [SCOPED]
+Add new[6]: Net 17.202.40.1/32 Ifp en1 Ifa 17.202.42.111 [SCOPED]
 Add new[2]: Net 0.0.0.0/0 Gate 17.202.40.1 Ifp en1 Ifa 17.202.42.111 [SCOPED]
-Add new[3]: Net 0.0.0.0/0 Ifp fw0 Ifa 169.254.11.33 [SCOPED]
-Add new[4]: Net 17.202.40.0/22 Ifp en0 Ifa 17.202.42.113
-Add new[5]: Net 17.202.40.0/22 Ifp en1 Ifa 17.202.42.111 [SCOPED]
-Add new[8]: Net 17.255.96.0/20 Ifp en2 Ifa 17.255.98.164
-New Routes ('test15') = <IPv4RouteList[1]> = {
- 0. Net 0.0.0.0/0 Ifp en0 Ifa 169.254.22.44
+Add new[3]: Net 17.202.40.0/22 Ifp en0 Ifa 17.202.42.113
+Add new[4]: Net 17.202.40.0/22 Ifp en1 Ifa 17.202.42.111 [SCOPED]
+Add new[7]: Net 17.255.96.0/20 Ifp en2 Ifa 17.255.98.164
+Add new[9]: Net 169.254.0.0/16 Ifp fw0 Ifa 169.254.11.33 [last]
+Add new[10]: Net 224.0.0.0/4 Ifp en2 Ifa 17.255.98.164
+Add new[11]: Net 224.0.0.0/4 Ifp en0 Ifa 17.202.42.113 [SCOPED]
+Add new[12]: Net 224.0.0.0/4 Ifp en1 Ifa 17.202.42.111 [SCOPED]
+Add new[13]: Net 224.0.0.0/4 Ifp fw0 Ifa 169.254.11.33 [last] [SCOPED]
+Add new[14]: Net 255.255.255.255/32 Ifp en2 Ifa 17.255.98.164
+Add new[15]: Net 255.255.255.255/32 Ifp en0 Ifa 17.202.42.113 [SCOPED]
+Add new[16]: Net 255.255.255.255/32 Ifp en1 Ifa 17.202.42.111 [SCOPED]
+Add new[17]: Net 255.255.255.255/32 Ifp fw0 Ifa 169.254.11.33 [last] [SCOPED]
+New Routes ('test15') = <IPv4RouteList[3]> = {
+ 0. Net 169.254.0.0/16 Ifp en0 Ifa 169.254.22.44 [last]
+ 1. Net 224.0.0.0/4 Ifp en0 Ifa 169.254.22.44 [last]
+ 2. Net 255.255.255.255/32 Ifp en0 Ifa 169.254.22.44 [last]
 }
 Remove old[0]: Net 0.0.0.0/0 Gate 17.255.96.1 Ifp en2 Ifa 17.255.98.164
 Remove old[1]: Net 0.0.0.0/0 Gate 17.202.40.1 Ifp en0 Ifa 17.202.42.113 [SCOPED]
 Remove old[2]: Net 0.0.0.0/0 Gate 17.202.40.1 Ifp en1 Ifa 17.202.42.111 [SCOPED]
-Remove old[3]: Net 0.0.0.0/0 Ifp fw0 Ifa 169.254.11.33 [SCOPED]
-Remove old[4]: Net 17.202.40.0/22 Ifp en0 Ifa 17.202.42.113
-Remove old[5]: Net 17.202.40.0/22 Ifp en1 Ifa 17.202.42.111 [SCOPED]
-Remove old[6]: Net 17.202.40.1/32 Ifp en0 Ifa 17.202.42.113
-Remove old[7]: Net 17.202.40.1/32 Ifp en1 Ifa 17.202.42.111 [SCOPED]
-Remove old[8]: Net 17.255.96.0/20 Ifp en2 Ifa 17.255.98.164
-Remove old[9]: Net 17.255.96.1/32 Ifp en2 Ifa 17.255.98.164
-Add new[0]: Net 0.0.0.0/0 Ifp en0 Ifa 169.254.22.44
+Remove old[3]: Net 17.202.40.0/22 Ifp en0 Ifa 17.202.42.113
+Remove old[4]: Net 17.202.40.0/22 Ifp en1 Ifa 17.202.42.111 [SCOPED]
+Remove old[5]: Net 17.202.40.1/32 Ifp en0 Ifa 17.202.42.113
+Remove old[6]: Net 17.202.40.1/32 Ifp en1 Ifa 17.202.42.111 [SCOPED]
+Remove old[7]: Net 17.255.96.0/20 Ifp en2 Ifa 17.255.98.164
+Remove old[8]: Net 17.255.96.1/32 Ifp en2 Ifa 17.255.98.164
+Remove old[9]: Net 169.254.0.0/16 Ifp fw0 Ifa 169.254.11.33 [last]
+Remove old[10]: Net 224.0.0.0/4 Ifp en2 Ifa 17.255.98.164
+Remove old[11]: Net 224.0.0.0/4 Ifp en0 Ifa 17.202.42.113 [SCOPED]
+Remove old[12]: Net 224.0.0.0/4 Ifp en1 Ifa 17.202.42.111 [SCOPED]
+Remove old[13]: Net 224.0.0.0/4 Ifp fw0 Ifa 169.254.11.33 [last] [SCOPED]
+Remove old[14]: Net 255.255.255.255/32 Ifp en2 Ifa 17.255.98.164
+Remove old[15]: Net 255.255.255.255/32 Ifp en0 Ifa 17.202.42.113 [SCOPED]
+Remove old[16]: Net 255.255.255.255/32 Ifp en1 Ifa 17.202.42.111 [SCOPED]
+Remove old[17]: Net 255.255.255.255/32 Ifp fw0 Ifa 169.254.11.33 [last] [SCOPED]
+Add new[0]: Net 169.254.0.0/16 Ifp en0 Ifa 169.254.22.44 [last]
+Add new[1]: Net 224.0.0.0/4 Ifp en0 Ifa 169.254.22.44 [last]
+Add new[2]: Net 255.255.255.255/32 Ifp en0 Ifa 169.254.22.44 [last]
 =================> Apply 'test6', 'test15' End <=================
 
 =================> Apply 'test15', 'test6' Begin <=================
-Old routes ('test15') = <IPv4RouteList[1]> = {
- 0. Net 0.0.0.0/0 Ifp en0 Ifa 169.254.22.44
-}
-Add new[0]: Net 0.0.0.0/0 Ifp en0 Ifa 169.254.22.44
-New Routes ('test6') = <IPv4RouteList[10]> = {
+Old routes ('test15') = <IPv4RouteList[3]> = {
+ 0. Net 169.254.0.0/16 Ifp en0 Ifa 169.254.22.44 [last]
+ 1. Net 224.0.0.0/4 Ifp en0 Ifa 169.254.22.44 [last]
+ 2. Net 255.255.255.255/32 Ifp en0 Ifa 169.254.22.44 [last]
+}
+Add new[0]: Net 169.254.0.0/16 Ifp en0 Ifa 169.254.22.44 [last]
+Add new[1]: Net 224.0.0.0/4 Ifp en0 Ifa 169.254.22.44 [last]
+Add new[2]: Net 255.255.255.255/32 Ifp en0 Ifa 169.254.22.44 [last]
+New Routes ('test6') = <IPv4RouteList[18]> = {
  0. Net 0.0.0.0/0 Gate 17.255.96.1 Ifp en2 Ifa 17.255.98.164
  1. Net 0.0.0.0/0 Gate 17.202.40.1 Ifp en0 Ifa 17.202.42.113 [SCOPED]
  2. Net 0.0.0.0/0 Gate 17.202.40.1 Ifp en1 Ifa 17.202.42.111 [SCOPED]
- 3. Net 0.0.0.0/0 Ifp fw0 Ifa 169.254.11.33 [SCOPED]
- 4. Net 17.202.40.0/22 Ifp en0 Ifa 17.202.42.113
- 5. Net 17.202.40.0/22 Ifp en1 Ifa 17.202.42.111 [SCOPED]
- 6. Net 17.202.40.1/32 Ifp en0 Ifa 17.202.42.113
- 7. Net 17.202.40.1/32 Ifp en1 Ifa 17.202.42.111 [SCOPED]
- 8. Net 17.255.96.0/20 Ifp en2 Ifa 17.255.98.164
- 9. Net 17.255.96.1/32 Ifp en2 Ifa 17.255.98.164
-}
-Remove old[0]: Net 0.0.0.0/0 Ifp en0 Ifa 169.254.22.44
-Add new[9]: Net 17.255.96.1/32 Ifp en2 Ifa 17.255.98.164
+ 3. Net 17.202.40.0/22 Ifp en0 Ifa 17.202.42.113
+ 4. Net 17.202.40.0/22 Ifp en1 Ifa 17.202.42.111 [SCOPED]
+ 5. Net 17.202.40.1/32 Ifp en0 Ifa 17.202.42.113
+ 6. Net 17.202.40.1/32 Ifp en1 Ifa 17.202.42.111 [SCOPED]
+ 7. Net 17.255.96.0/20 Ifp en2 Ifa 17.255.98.164
+ 8. Net 17.255.96.1/32 Ifp en2 Ifa 17.255.98.164
+ 9. Net 169.254.0.0/16 Ifp fw0 Ifa 169.254.11.33 [last]
+10. Net 224.0.0.0/4 Ifp en2 Ifa 17.255.98.164
+11. Net 224.0.0.0/4 Ifp en0 Ifa 17.202.42.113 [SCOPED]
+12. Net 224.0.0.0/4 Ifp en1 Ifa 17.202.42.111 [SCOPED]
+13. Net 224.0.0.0/4 Ifp fw0 Ifa 169.254.11.33 [last] [SCOPED]
+14. Net 255.255.255.255/32 Ifp en2 Ifa 17.255.98.164
+15. Net 255.255.255.255/32 Ifp en0 Ifa 17.202.42.113 [SCOPED]
+16. Net 255.255.255.255/32 Ifp en1 Ifa 17.202.42.111 [SCOPED]
+17. Net 255.255.255.255/32 Ifp fw0 Ifa 169.254.11.33 [last] [SCOPED]
+}
+Remove old[0]: Net 169.254.0.0/16 Ifp en0 Ifa 169.254.22.44 [last]
+Remove old[1]: Net 224.0.0.0/4 Ifp en0 Ifa 169.254.22.44 [last]
+Remove old[2]: Net 255.255.255.255/32 Ifp en0 Ifa 169.254.22.44 [last]
+Add new[8]: Net 17.255.96.1/32 Ifp en2 Ifa 17.255.98.164
 Add new[0]: Net 0.0.0.0/0 Gate 17.255.96.1 Ifp en2 Ifa 17.255.98.164
-Add new[6]: Net 17.202.40.1/32 Ifp en0 Ifa 17.202.42.113
+Add new[5]: Net 17.202.40.1/32 Ifp en0 Ifa 17.202.42.113
 Add new[1]: Net 0.0.0.0/0 Gate 17.202.40.1 Ifp en0 Ifa 17.202.42.113 [SCOPED]
-Add new[7]: Net 17.202.40.1/32 Ifp en1 Ifa 17.202.42.111 [SCOPED]
+Add new[6]: Net 17.202.40.1/32 Ifp en1 Ifa 17.202.42.111 [SCOPED]
 Add new[2]: Net 0.0.0.0/0 Gate 17.202.40.1 Ifp en1 Ifa 17.202.42.111 [SCOPED]
-Add new[3]: Net 0.0.0.0/0 Ifp fw0 Ifa 169.254.11.33 [SCOPED]
-Add new[4]: Net 17.202.40.0/22 Ifp en0 Ifa 17.202.42.113
-Add new[5]: Net 17.202.40.0/22 Ifp en1 Ifa 17.202.42.111 [SCOPED]
-Add new[8]: Net 17.255.96.0/20 Ifp en2 Ifa 17.255.98.164
+Add new[3]: Net 17.202.40.0/22 Ifp en0 Ifa 17.202.42.113
+Add new[4]: Net 17.202.40.0/22 Ifp en1 Ifa 17.202.42.111 [SCOPED]
+Add new[7]: Net 17.255.96.0/20 Ifp en2 Ifa 17.255.98.164
+Add new[9]: Net 169.254.0.0/16 Ifp fw0 Ifa 169.254.11.33 [last]
+Add new[10]: Net 224.0.0.0/4 Ifp en2 Ifa 17.255.98.164
+Add new[11]: Net 224.0.0.0/4 Ifp en0 Ifa 17.202.42.113 [SCOPED]
+Add new[12]: Net 224.0.0.0/4 Ifp en1 Ifa 17.202.42.111 [SCOPED]
+Add new[13]: Net 224.0.0.0/4 Ifp fw0 Ifa 169.254.11.33 [last] [SCOPED]
+Add new[14]: Net 255.255.255.255/32 Ifp en2 Ifa 17.255.98.164
+Add new[15]: Net 255.255.255.255/32 Ifp en0 Ifa 17.202.42.113 [SCOPED]
+Add new[16]: Net 255.255.255.255/32 Ifp en1 Ifa 17.202.42.111 [SCOPED]
+Add new[17]: Net 255.255.255.255/32 Ifp fw0 Ifa 169.254.11.33 [last] [SCOPED]
 =================> Apply 'test15', 'test6' End <=================
 
 =================> Apply 'test6', 'test16' Begin <=================
-Old routes ('test6') = <IPv4RouteList[10]> = {
+Old routes ('test6') = <IPv4RouteList[18]> = {
  0. Net 0.0.0.0/0 Gate 17.255.96.1 Ifp en2 Ifa 17.255.98.164
  1. Net 0.0.0.0/0 Gate 17.202.40.1 Ifp en0 Ifa 17.202.42.113 [SCOPED]
  2. Net 0.0.0.0/0 Gate 17.202.40.1 Ifp en1 Ifa 17.202.42.111 [SCOPED]
- 3. Net 0.0.0.0/0 Ifp fw0 Ifa 169.254.11.33 [SCOPED]
- 4. Net 17.202.40.0/22 Ifp en0 Ifa 17.202.42.113
- 5. Net 17.202.40.0/22 Ifp en1 Ifa 17.202.42.111 [SCOPED]
- 6. Net 17.202.40.1/32 Ifp en0 Ifa 17.202.42.113
- 7. Net 17.202.40.1/32 Ifp en1 Ifa 17.202.42.111 [SCOPED]
- 8. Net 17.255.96.0/20 Ifp en2 Ifa 17.255.98.164
- 9. Net 17.255.96.1/32 Ifp en2 Ifa 17.255.98.164
-}
-Add new[9]: Net 17.255.96.1/32 Ifp en2 Ifa 17.255.98.164
+ 3. Net 17.202.40.0/22 Ifp en0 Ifa 17.202.42.113
+ 4. Net 17.202.40.0/22 Ifp en1 Ifa 17.202.42.111 [SCOPED]
+ 5. Net 17.202.40.1/32 Ifp en0 Ifa 17.202.42.113
+ 6. Net 17.202.40.1/32 Ifp en1 Ifa 17.202.42.111 [SCOPED]
+ 7. Net 17.255.96.0/20 Ifp en2 Ifa 17.255.98.164
+ 8. Net 17.255.96.1/32 Ifp en2 Ifa 17.255.98.164
+ 9. Net 169.254.0.0/16 Ifp fw0 Ifa 169.254.11.33 [last]
+10. Net 224.0.0.0/4 Ifp en2 Ifa 17.255.98.164
+11. Net 224.0.0.0/4 Ifp en0 Ifa 17.202.42.113 [SCOPED]
+12. Net 224.0.0.0/4 Ifp en1 Ifa 17.202.42.111 [SCOPED]
+13. Net 224.0.0.0/4 Ifp fw0 Ifa 169.254.11.33 [last] [SCOPED]
+14. Net 255.255.255.255/32 Ifp en2 Ifa 17.255.98.164
+15. Net 255.255.255.255/32 Ifp en0 Ifa 17.202.42.113 [SCOPED]
+16. Net 255.255.255.255/32 Ifp en1 Ifa 17.202.42.111 [SCOPED]
+17. Net 255.255.255.255/32 Ifp fw0 Ifa 169.254.11.33 [last] [SCOPED]
+}
+Add new[8]: Net 17.255.96.1/32 Ifp en2 Ifa 17.255.98.164
 Add new[0]: Net 0.0.0.0/0 Gate 17.255.96.1 Ifp en2 Ifa 17.255.98.164
-Add new[6]: Net 17.202.40.1/32 Ifp en0 Ifa 17.202.42.113
+Add new[5]: Net 17.202.40.1/32 Ifp en0 Ifa 17.202.42.113
 Add new[1]: Net 0.0.0.0/0 Gate 17.202.40.1 Ifp en0 Ifa 17.202.42.113 [SCOPED]
-Add new[7]: Net 17.202.40.1/32 Ifp en1 Ifa 17.202.42.111 [SCOPED]
+Add new[6]: Net 17.202.40.1/32 Ifp en1 Ifa 17.202.42.111 [SCOPED]
 Add new[2]: Net 0.0.0.0/0 Gate 17.202.40.1 Ifp en1 Ifa 17.202.42.111 [SCOPED]
-Add new[3]: Net 0.0.0.0/0 Ifp fw0 Ifa 169.254.11.33 [SCOPED]
-Add new[4]: Net 17.202.40.0/22 Ifp en0 Ifa 17.202.42.113
-Add new[5]: Net 17.202.40.0/22 Ifp en1 Ifa 17.202.42.111 [SCOPED]
-Add new[8]: Net 17.255.96.0/20 Ifp en2 Ifa 17.255.98.164
-New Routes ('test16') = <IPv4RouteList[50]> = {
+Add new[3]: Net 17.202.40.0/22 Ifp en0 Ifa 17.202.42.113
+Add new[4]: Net 17.202.40.0/22 Ifp en1 Ifa 17.202.42.111 [SCOPED]
+Add new[7]: Net 17.255.96.0/20 Ifp en2 Ifa 17.255.98.164
+Add new[9]: Net 169.254.0.0/16 Ifp fw0 Ifa 169.254.11.33 [last]
+Add new[10]: Net 224.0.0.0/4 Ifp en2 Ifa 17.255.98.164
+Add new[11]: Net 224.0.0.0/4 Ifp en0 Ifa 17.202.42.113 [SCOPED]
+Add new[12]: Net 224.0.0.0/4 Ifp en1 Ifa 17.202.42.111 [SCOPED]
+Add new[13]: Net 224.0.0.0/4 Ifp fw0 Ifa 169.254.11.33 [last] [SCOPED]
+Add new[14]: Net 255.255.255.255/32 Ifp en2 Ifa 17.255.98.164
+Add new[15]: Net 255.255.255.255/32 Ifp en0 Ifa 17.202.42.113 [SCOPED]
+Add new[16]: Net 255.255.255.255/32 Ifp en1 Ifa 17.202.42.111 [SCOPED]
+Add new[17]: Net 255.255.255.255/32 Ifp fw0 Ifa 169.254.11.33 [last] [SCOPED]
+New Routes ('test16') = <IPv4RouteList[54]> = {
  0. Net 0.0.0.0/0 Gate 10.0.0.1 Ifp en0 Ifa 10.0.0.10
  1. Net 0.0.0.0/0 Ifp utun0 Ifa 17.153.46.24 [SCOPED]
  2. Net 10.0.0.0/24 Ifp en0 Ifa 10.0.0.10
@@ -10739,17 +15301,29 @@ New Routes ('test16') = <IPv4RouteList[50]> = {
 47. Net 192.35.50.0/24 Gate 17.153.46.24 Ifp utun0 Ifa 17.153.46.24
 48. Net 204.179.20.0/24 Gate 17.153.46.24 Ifp utun0 Ifa 17.153.46.24
 49. Net 206.112.116.0/24 Gate 17.153.46.24 Ifp utun0 Ifa 17.153.46.24
+50. Net 224.0.0.0/4 Ifp en0 Ifa 10.0.0.10
+51. Net 224.0.0.0/4 Ifp utun0 Ifa 17.153.46.24 [SCOPED]
+52. Net 255.255.255.255/32 Ifp en0 Ifa 10.0.0.10
+53. Net 255.255.255.255/32 Ifp utun0 Ifa 17.153.46.24 [SCOPED]
 }
 Remove old[0]: Net 0.0.0.0/0 Gate 17.255.96.1 Ifp en2 Ifa 17.255.98.164
 Remove old[1]: Net 0.0.0.0/0 Gate 17.202.40.1 Ifp en0 Ifa 17.202.42.113 [SCOPED]
 Remove old[2]: Net 0.0.0.0/0 Gate 17.202.40.1 Ifp en1 Ifa 17.202.42.111 [SCOPED]
-Remove old[3]: Net 0.0.0.0/0 Ifp fw0 Ifa 169.254.11.33 [SCOPED]
-Remove old[4]: Net 17.202.40.0/22 Ifp en0 Ifa 17.202.42.113
-Remove old[5]: Net 17.202.40.0/22 Ifp en1 Ifa 17.202.42.111 [SCOPED]
-Remove old[6]: Net 17.202.40.1/32 Ifp en0 Ifa 17.202.42.113
-Remove old[7]: Net 17.202.40.1/32 Ifp en1 Ifa 17.202.42.111 [SCOPED]
-Remove old[8]: Net 17.255.96.0/20 Ifp en2 Ifa 17.255.98.164
-Remove old[9]: Net 17.255.96.1/32 Ifp en2 Ifa 17.255.98.164
+Remove old[3]: Net 17.202.40.0/22 Ifp en0 Ifa 17.202.42.113
+Remove old[4]: Net 17.202.40.0/22 Ifp en1 Ifa 17.202.42.111 [SCOPED]
+Remove old[5]: Net 17.202.40.1/32 Ifp en0 Ifa 17.202.42.113
+Remove old[6]: Net 17.202.40.1/32 Ifp en1 Ifa 17.202.42.111 [SCOPED]
+Remove old[7]: Net 17.255.96.0/20 Ifp en2 Ifa 17.255.98.164
+Remove old[8]: Net 17.255.96.1/32 Ifp en2 Ifa 17.255.98.164
+Remove old[9]: Net 169.254.0.0/16 Ifp fw0 Ifa 169.254.11.33 [last]
+Remove old[10]: Net 224.0.0.0/4 Ifp en2 Ifa 17.255.98.164
+Remove old[11]: Net 224.0.0.0/4 Ifp en0 Ifa 17.202.42.113 [SCOPED]
+Remove old[12]: Net 224.0.0.0/4 Ifp en1 Ifa 17.202.42.111 [SCOPED]
+Remove old[13]: Net 224.0.0.0/4 Ifp fw0 Ifa 169.254.11.33 [last] [SCOPED]
+Remove old[14]: Net 255.255.255.255/32 Ifp en2 Ifa 17.255.98.164
+Remove old[15]: Net 255.255.255.255/32 Ifp en0 Ifa 17.202.42.113 [SCOPED]
+Remove old[16]: Net 255.255.255.255/32 Ifp en1 Ifa 17.202.42.111 [SCOPED]
+Remove old[17]: Net 255.255.255.255/32 Ifp fw0 Ifa 169.254.11.33 [last] [SCOPED]
 Add new[3]: Net 10.0.0.1/32 Ifp en0 Ifa 10.0.0.10
 Add new[0]: Net 0.0.0.0/0 Gate 10.0.0.1 Ifp en0 Ifa 10.0.0.10
 Add new[1]: Net 0.0.0.0/0 Ifp utun0 Ifa 17.153.46.24 [SCOPED]
@@ -10800,10 +15374,14 @@ Add new[46]: Net 172.16.2.0/24 Gate 17.153.46.24 Ifp utun0 Ifa 17.153.46.24
 Add new[47]: Net 192.35.50.0/24 Gate 17.153.46.24 Ifp utun0 Ifa 17.153.46.24
 Add new[48]: Net 204.179.20.0/24 Gate 17.153.46.24 Ifp utun0 Ifa 17.153.46.24
 Add new[49]: Net 206.112.116.0/24 Gate 17.153.46.24 Ifp utun0 Ifa 17.153.46.24
+Add new[50]: Net 224.0.0.0/4 Ifp en0 Ifa 10.0.0.10
+Add new[51]: Net 224.0.0.0/4 Ifp utun0 Ifa 17.153.46.24 [SCOPED]
+Add new[52]: Net 255.255.255.255/32 Ifp en0 Ifa 10.0.0.10
+Add new[53]: Net 255.255.255.255/32 Ifp utun0 Ifa 17.153.46.24 [SCOPED]
 =================> Apply 'test6', 'test16' End <=================
 
 =================> Apply 'test16', 'test6' Begin <=================
-Old routes ('test16') = <IPv4RouteList[50]> = {
+Old routes ('test16') = <IPv4RouteList[54]> = {
  0. Net 0.0.0.0/0 Gate 10.0.0.1 Ifp en0 Ifa 10.0.0.10
  1. Net 0.0.0.0/0 Ifp utun0 Ifa 17.153.46.24 [SCOPED]
  2. Net 10.0.0.0/24 Ifp en0 Ifa 10.0.0.10
@@ -10854,6 +15432,10 @@ Old routes ('test16') = <IPv4RouteList[50]> = {
 47. Net 192.35.50.0/24 Gate 17.153.46.24 Ifp utun0 Ifa 17.153.46.24
 48. Net 204.179.20.0/24 Gate 17.153.46.24 Ifp utun0 Ifa 17.153.46.24
 49. Net 206.112.116.0/24 Gate 17.153.46.24 Ifp utun0 Ifa 17.153.46.24
+50. Net 224.0.0.0/4 Ifp en0 Ifa 10.0.0.10
+51. Net 224.0.0.0/4 Ifp utun0 Ifa 17.153.46.24 [SCOPED]
+52. Net 255.255.255.255/32 Ifp en0 Ifa 10.0.0.10
+53. Net 255.255.255.255/32 Ifp utun0 Ifa 17.153.46.24 [SCOPED]
 }
 Add new[3]: Net 10.0.0.1/32 Ifp en0 Ifa 10.0.0.10
 Add new[0]: Net 0.0.0.0/0 Gate 10.0.0.1 Ifp en0 Ifa 10.0.0.10
@@ -10905,17 +15487,29 @@ Add new[46]: Net 172.16.2.0/24 Gate 17.153.46.24 Ifp utun0 Ifa 17.153.46.24
 Add new[47]: Net 192.35.50.0/24 Gate 17.153.46.24 Ifp utun0 Ifa 17.153.46.24
 Add new[48]: Net 204.179.20.0/24 Gate 17.153.46.24 Ifp utun0 Ifa 17.153.46.24
 Add new[49]: Net 206.112.116.0/24 Gate 17.153.46.24 Ifp utun0 Ifa 17.153.46.24
-New Routes ('test6') = <IPv4RouteList[10]> = {
+Add new[50]: Net 224.0.0.0/4 Ifp en0 Ifa 10.0.0.10
+Add new[51]: Net 224.0.0.0/4 Ifp utun0 Ifa 17.153.46.24 [SCOPED]
+Add new[52]: Net 255.255.255.255/32 Ifp en0 Ifa 10.0.0.10
+Add new[53]: Net 255.255.255.255/32 Ifp utun0 Ifa 17.153.46.24 [SCOPED]
+New Routes ('test6') = <IPv4RouteList[18]> = {
  0. Net 0.0.0.0/0 Gate 17.255.96.1 Ifp en2 Ifa 17.255.98.164
  1. Net 0.0.0.0/0 Gate 17.202.40.1 Ifp en0 Ifa 17.202.42.113 [SCOPED]
  2. Net 0.0.0.0/0 Gate 17.202.40.1 Ifp en1 Ifa 17.202.42.111 [SCOPED]
- 3. Net 0.0.0.0/0 Ifp fw0 Ifa 169.254.11.33 [SCOPED]
- 4. Net 17.202.40.0/22 Ifp en0 Ifa 17.202.42.113
- 5. Net 17.202.40.0/22 Ifp en1 Ifa 17.202.42.111 [SCOPED]
- 6. Net 17.202.40.1/32 Ifp en0 Ifa 17.202.42.113
- 7. Net 17.202.40.1/32 Ifp en1 Ifa 17.202.42.111 [SCOPED]
- 8. Net 17.255.96.0/20 Ifp en2 Ifa 17.255.98.164
- 9. Net 17.255.96.1/32 Ifp en2 Ifa 17.255.98.164
+ 3. Net 17.202.40.0/22 Ifp en0 Ifa 17.202.42.113
+ 4. Net 17.202.40.0/22 Ifp en1 Ifa 17.202.42.111 [SCOPED]
+ 5. Net 17.202.40.1/32 Ifp en0 Ifa 17.202.42.113
+ 6. Net 17.202.40.1/32 Ifp en1 Ifa 17.202.42.111 [SCOPED]
+ 7. Net 17.255.96.0/20 Ifp en2 Ifa 17.255.98.164
+ 8. Net 17.255.96.1/32 Ifp en2 Ifa 17.255.98.164
+ 9. Net 169.254.0.0/16 Ifp fw0 Ifa 169.254.11.33 [last]
+10. Net 224.0.0.0/4 Ifp en2 Ifa 17.255.98.164
+11. Net 224.0.0.0/4 Ifp en0 Ifa 17.202.42.113 [SCOPED]
+12. Net 224.0.0.0/4 Ifp en1 Ifa 17.202.42.111 [SCOPED]
+13. Net 224.0.0.0/4 Ifp fw0 Ifa 169.254.11.33 [last] [SCOPED]
+14. Net 255.255.255.255/32 Ifp en2 Ifa 17.255.98.164
+15. Net 255.255.255.255/32 Ifp en0 Ifa 17.202.42.113 [SCOPED]
+16. Net 255.255.255.255/32 Ifp en1 Ifa 17.202.42.111 [SCOPED]
+17. Net 255.255.255.255/32 Ifp fw0 Ifa 169.254.11.33 [last] [SCOPED]
 }
 Remove old[0]: Net 0.0.0.0/0 Gate 10.0.0.1 Ifp en0 Ifa 10.0.0.10
 Remove old[1]: Net 0.0.0.0/0 Ifp utun0 Ifa 17.153.46.24 [SCOPED]
@@ -10967,75 +15561,123 @@ Remove old[46]: Net 172.16.2.0/24 Gate 17.153.46.24 Ifp utun0 Ifa 17.153.46.24
 Remove old[47]: Net 192.35.50.0/24 Gate 17.153.46.24 Ifp utun0 Ifa 17.153.46.24
 Remove old[48]: Net 204.179.20.0/24 Gate 17.153.46.24 Ifp utun0 Ifa 17.153.46.24
 Remove old[49]: Net 206.112.116.0/24 Gate 17.153.46.24 Ifp utun0 Ifa 17.153.46.24
-Add new[9]: Net 17.255.96.1/32 Ifp en2 Ifa 17.255.98.164
+Remove old[50]: Net 224.0.0.0/4 Ifp en0 Ifa 10.0.0.10
+Remove old[51]: Net 224.0.0.0/4 Ifp utun0 Ifa 17.153.46.24 [SCOPED]
+Remove old[52]: Net 255.255.255.255/32 Ifp en0 Ifa 10.0.0.10
+Remove old[53]: Net 255.255.255.255/32 Ifp utun0 Ifa 17.153.46.24 [SCOPED]
+Add new[8]: Net 17.255.96.1/32 Ifp en2 Ifa 17.255.98.164
 Add new[0]: Net 0.0.0.0/0 Gate 17.255.96.1 Ifp en2 Ifa 17.255.98.164
-Add new[6]: Net 17.202.40.1/32 Ifp en0 Ifa 17.202.42.113
+Add new[5]: Net 17.202.40.1/32 Ifp en0 Ifa 17.202.42.113
 Add new[1]: Net 0.0.0.0/0 Gate 17.202.40.1 Ifp en0 Ifa 17.202.42.113 [SCOPED]
-Add new[7]: Net 17.202.40.1/32 Ifp en1 Ifa 17.202.42.111 [SCOPED]
+Add new[6]: Net 17.202.40.1/32 Ifp en1 Ifa 17.202.42.111 [SCOPED]
 Add new[2]: Net 0.0.0.0/0 Gate 17.202.40.1 Ifp en1 Ifa 17.202.42.111 [SCOPED]
-Add new[3]: Net 0.0.0.0/0 Ifp fw0 Ifa 169.254.11.33 [SCOPED]
-Add new[4]: Net 17.202.40.0/22 Ifp en0 Ifa 17.202.42.113
-Add new[5]: Net 17.202.40.0/22 Ifp en1 Ifa 17.202.42.111 [SCOPED]
-Add new[8]: Net 17.255.96.0/20 Ifp en2 Ifa 17.255.98.164
+Add new[3]: Net 17.202.40.0/22 Ifp en0 Ifa 17.202.42.113
+Add new[4]: Net 17.202.40.0/22 Ifp en1 Ifa 17.202.42.111 [SCOPED]
+Add new[7]: Net 17.255.96.0/20 Ifp en2 Ifa 17.255.98.164
+Add new[9]: Net 169.254.0.0/16 Ifp fw0 Ifa 169.254.11.33 [last]
+Add new[10]: Net 224.0.0.0/4 Ifp en2 Ifa 17.255.98.164
+Add new[11]: Net 224.0.0.0/4 Ifp en0 Ifa 17.202.42.113 [SCOPED]
+Add new[12]: Net 224.0.0.0/4 Ifp en1 Ifa 17.202.42.111 [SCOPED]
+Add new[13]: Net 224.0.0.0/4 Ifp fw0 Ifa 169.254.11.33 [last] [SCOPED]
+Add new[14]: Net 255.255.255.255/32 Ifp en2 Ifa 17.255.98.164
+Add new[15]: Net 255.255.255.255/32 Ifp en0 Ifa 17.202.42.113 [SCOPED]
+Add new[16]: Net 255.255.255.255/32 Ifp en1 Ifa 17.202.42.111 [SCOPED]
+Add new[17]: Net 255.255.255.255/32 Ifp fw0 Ifa 169.254.11.33 [last] [SCOPED]
 =================> Apply 'test16', 'test6' End <=================
 
 =================> Apply 'test6', 'test17' Begin <=================
-Old routes ('test6') = <IPv4RouteList[10]> = {
+Old routes ('test6') = <IPv4RouteList[18]> = {
  0. Net 0.0.0.0/0 Gate 17.255.96.1 Ifp en2 Ifa 17.255.98.164
  1. Net 0.0.0.0/0 Gate 17.202.40.1 Ifp en0 Ifa 17.202.42.113 [SCOPED]
  2. Net 0.0.0.0/0 Gate 17.202.40.1 Ifp en1 Ifa 17.202.42.111 [SCOPED]
- 3. Net 0.0.0.0/0 Ifp fw0 Ifa 169.254.11.33 [SCOPED]
- 4. Net 17.202.40.0/22 Ifp en0 Ifa 17.202.42.113
- 5. Net 17.202.40.0/22 Ifp en1 Ifa 17.202.42.111 [SCOPED]
- 6. Net 17.202.40.1/32 Ifp en0 Ifa 17.202.42.113
- 7. Net 17.202.40.1/32 Ifp en1 Ifa 17.202.42.111 [SCOPED]
- 8. Net 17.255.96.0/20 Ifp en2 Ifa 17.255.98.164
- 9. Net 17.255.96.1/32 Ifp en2 Ifa 17.255.98.164
-}
-Add new[9]: Net 17.255.96.1/32 Ifp en2 Ifa 17.255.98.164
+ 3. Net 17.202.40.0/22 Ifp en0 Ifa 17.202.42.113
+ 4. Net 17.202.40.0/22 Ifp en1 Ifa 17.202.42.111 [SCOPED]
+ 5. Net 17.202.40.1/32 Ifp en0 Ifa 17.202.42.113
+ 6. Net 17.202.40.1/32 Ifp en1 Ifa 17.202.42.111 [SCOPED]
+ 7. Net 17.255.96.0/20 Ifp en2 Ifa 17.255.98.164
+ 8. Net 17.255.96.1/32 Ifp en2 Ifa 17.255.98.164
+ 9. Net 169.254.0.0/16 Ifp fw0 Ifa 169.254.11.33 [last]
+10. Net 224.0.0.0/4 Ifp en2 Ifa 17.255.98.164
+11. Net 224.0.0.0/4 Ifp en0 Ifa 17.202.42.113 [SCOPED]
+12. Net 224.0.0.0/4 Ifp en1 Ifa 17.202.42.111 [SCOPED]
+13. Net 224.0.0.0/4 Ifp fw0 Ifa 169.254.11.33 [last] [SCOPED]
+14. Net 255.255.255.255/32 Ifp en2 Ifa 17.255.98.164
+15. Net 255.255.255.255/32 Ifp en0 Ifa 17.202.42.113 [SCOPED]
+16. Net 255.255.255.255/32 Ifp en1 Ifa 17.202.42.111 [SCOPED]
+17. Net 255.255.255.255/32 Ifp fw0 Ifa 169.254.11.33 [last] [SCOPED]
+}
+Add new[8]: Net 17.255.96.1/32 Ifp en2 Ifa 17.255.98.164
 Add new[0]: Net 0.0.0.0/0 Gate 17.255.96.1 Ifp en2 Ifa 17.255.98.164
-Add new[6]: Net 17.202.40.1/32 Ifp en0 Ifa 17.202.42.113
+Add new[5]: Net 17.202.40.1/32 Ifp en0 Ifa 17.202.42.113
 Add new[1]: Net 0.0.0.0/0 Gate 17.202.40.1 Ifp en0 Ifa 17.202.42.113 [SCOPED]
-Add new[7]: Net 17.202.40.1/32 Ifp en1 Ifa 17.202.42.111 [SCOPED]
+Add new[6]: Net 17.202.40.1/32 Ifp en1 Ifa 17.202.42.111 [SCOPED]
 Add new[2]: Net 0.0.0.0/0 Gate 17.202.40.1 Ifp en1 Ifa 17.202.42.111 [SCOPED]
-Add new[3]: Net 0.0.0.0/0 Ifp fw0 Ifa 169.254.11.33 [SCOPED]
-Add new[4]: Net 17.202.40.0/22 Ifp en0 Ifa 17.202.42.113
-Add new[5]: Net 17.202.40.0/22 Ifp en1 Ifa 17.202.42.111 [SCOPED]
-Add new[8]: Net 17.255.96.0/20 Ifp en2 Ifa 17.255.98.164
-New Routes ('test17') = <IPv4RouteList[6]> = {
+Add new[3]: Net 17.202.40.0/22 Ifp en0 Ifa 17.202.42.113
+Add new[4]: Net 17.202.40.0/22 Ifp en1 Ifa 17.202.42.111 [SCOPED]
+Add new[7]: Net 17.255.96.0/20 Ifp en2 Ifa 17.255.98.164
+Add new[9]: Net 169.254.0.0/16 Ifp fw0 Ifa 169.254.11.33 [last]
+Add new[10]: Net 224.0.0.0/4 Ifp en2 Ifa 17.255.98.164
+Add new[11]: Net 224.0.0.0/4 Ifp en0 Ifa 17.202.42.113 [SCOPED]
+Add new[12]: Net 224.0.0.0/4 Ifp en1 Ifa 17.202.42.111 [SCOPED]
+Add new[13]: Net 224.0.0.0/4 Ifp fw0 Ifa 169.254.11.33 [last] [SCOPED]
+Add new[14]: Net 255.255.255.255/32 Ifp en2 Ifa 17.255.98.164
+Add new[15]: Net 255.255.255.255/32 Ifp en0 Ifa 17.202.42.113 [SCOPED]
+Add new[16]: Net 255.255.255.255/32 Ifp en1 Ifa 17.202.42.111 [SCOPED]
+Add new[17]: Net 255.255.255.255/32 Ifp fw0 Ifa 169.254.11.33 [last] [SCOPED]
+New Routes ('test17') = <IPv4RouteList[10]> = {
  0. Net 0.0.0.0/0 Gate 10.0.0.1 Ifp en0 Ifa 10.0.0.10
  1. Net 0.0.0.0/0 Gate 192.168.2.1 Ifp en1 Ifa 192.168.2.50 [never] [SCOPED]
  2. Net 10.0.0.0/24 Ifp en0 Ifa 10.0.0.10
  3. Net 10.0.0.1/32 Ifp en0 Ifa 10.0.0.10
  4. Net 192.168.2.0/24 Ifp en1 Ifa 192.168.2.50 [last]
  5. Net 192.168.2.1/32 Ifp en1 Ifa 192.168.2.50 [last]
+ 6. Net 224.0.0.0/4 Ifp en0 Ifa 10.0.0.10
+ 7. Net 224.0.0.0/4 Ifp en1 Ifa 192.168.2.50 [last] [SCOPED]
+ 8. Net 255.255.255.255/32 Ifp en0 Ifa 10.0.0.10
+ 9. Net 255.255.255.255/32 Ifp en1 Ifa 192.168.2.50 [last] [SCOPED]
 }
 Remove old[0]: Net 0.0.0.0/0 Gate 17.255.96.1 Ifp en2 Ifa 17.255.98.164
 Remove old[1]: Net 0.0.0.0/0 Gate 17.202.40.1 Ifp en0 Ifa 17.202.42.113 [SCOPED]
 Remove old[2]: Net 0.0.0.0/0 Gate 17.202.40.1 Ifp en1 Ifa 17.202.42.111 [SCOPED]
-Remove old[3]: Net 0.0.0.0/0 Ifp fw0 Ifa 169.254.11.33 [SCOPED]
-Remove old[4]: Net 17.202.40.0/22 Ifp en0 Ifa 17.202.42.113
-Remove old[5]: Net 17.202.40.0/22 Ifp en1 Ifa 17.202.42.111 [SCOPED]
-Remove old[6]: Net 17.202.40.1/32 Ifp en0 Ifa 17.202.42.113
-Remove old[7]: Net 17.202.40.1/32 Ifp en1 Ifa 17.202.42.111 [SCOPED]
-Remove old[8]: Net 17.255.96.0/20 Ifp en2 Ifa 17.255.98.164
-Remove old[9]: Net 17.255.96.1/32 Ifp en2 Ifa 17.255.98.164
+Remove old[3]: Net 17.202.40.0/22 Ifp en0 Ifa 17.202.42.113
+Remove old[4]: Net 17.202.40.0/22 Ifp en1 Ifa 17.202.42.111 [SCOPED]
+Remove old[5]: Net 17.202.40.1/32 Ifp en0 Ifa 17.202.42.113
+Remove old[6]: Net 17.202.40.1/32 Ifp en1 Ifa 17.202.42.111 [SCOPED]
+Remove old[7]: Net 17.255.96.0/20 Ifp en2 Ifa 17.255.98.164
+Remove old[8]: Net 17.255.96.1/32 Ifp en2 Ifa 17.255.98.164
+Remove old[9]: Net 169.254.0.0/16 Ifp fw0 Ifa 169.254.11.33 [last]
+Remove old[10]: Net 224.0.0.0/4 Ifp en2 Ifa 17.255.98.164
+Remove old[11]: Net 224.0.0.0/4 Ifp en0 Ifa 17.202.42.113 [SCOPED]
+Remove old[12]: Net 224.0.0.0/4 Ifp en1 Ifa 17.202.42.111 [SCOPED]
+Remove old[13]: Net 224.0.0.0/4 Ifp fw0 Ifa 169.254.11.33 [last] [SCOPED]
+Remove old[14]: Net 255.255.255.255/32 Ifp en2 Ifa 17.255.98.164
+Remove old[15]: Net 255.255.255.255/32 Ifp en0 Ifa 17.202.42.113 [SCOPED]
+Remove old[16]: Net 255.255.255.255/32 Ifp en1 Ifa 17.202.42.111 [SCOPED]
+Remove old[17]: Net 255.255.255.255/32 Ifp fw0 Ifa 169.254.11.33 [last] [SCOPED]
 Add new[3]: Net 10.0.0.1/32 Ifp en0 Ifa 10.0.0.10
 Add new[0]: Net 0.0.0.0/0 Gate 10.0.0.1 Ifp en0 Ifa 10.0.0.10
 Add new[5]: Net 192.168.2.1/32 Ifp en1 Ifa 192.168.2.50 [last]
 Add new[1]: Net 0.0.0.0/0 Gate 192.168.2.1 Ifp en1 Ifa 192.168.2.50 [never] [SCOPED]
 Add new[2]: Net 10.0.0.0/24 Ifp en0 Ifa 10.0.0.10
 Add new[4]: Net 192.168.2.0/24 Ifp en1 Ifa 192.168.2.50 [last]
+Add new[6]: Net 224.0.0.0/4 Ifp en0 Ifa 10.0.0.10
+Add new[7]: Net 224.0.0.0/4 Ifp en1 Ifa 192.168.2.50 [last] [SCOPED]
+Add new[8]: Net 255.255.255.255/32 Ifp en0 Ifa 10.0.0.10
+Add new[9]: Net 255.255.255.255/32 Ifp en1 Ifa 192.168.2.50 [last] [SCOPED]
 =================> Apply 'test6', 'test17' End <=================
 
 =================> Apply 'test17', 'test6' Begin <=================
-Old routes ('test17') = <IPv4RouteList[6]> = {
+Old routes ('test17') = <IPv4RouteList[10]> = {
  0. Net 0.0.0.0/0 Gate 10.0.0.1 Ifp en0 Ifa 10.0.0.10
  1. Net 0.0.0.0/0 Gate 192.168.2.1 Ifp en1 Ifa 192.168.2.50 [never] [SCOPED]
  2. Net 10.0.0.0/24 Ifp en0 Ifa 10.0.0.10
  3. Net 10.0.0.1/32 Ifp en0 Ifa 10.0.0.10
  4. Net 192.168.2.0/24 Ifp en1 Ifa 192.168.2.50 [last]
  5. Net 192.168.2.1/32 Ifp en1 Ifa 192.168.2.50 [last]
+ 6. Net 224.0.0.0/4 Ifp en0 Ifa 10.0.0.10
+ 7. Net 224.0.0.0/4 Ifp en1 Ifa 192.168.2.50 [last] [SCOPED]
+ 8. Net 255.255.255.255/32 Ifp en0 Ifa 10.0.0.10
+ 9. Net 255.255.255.255/32 Ifp en1 Ifa 192.168.2.50 [last] [SCOPED]
 }
 Add new[3]: Net 10.0.0.1/32 Ifp en0 Ifa 10.0.0.10
 Add new[0]: Net 0.0.0.0/0 Gate 10.0.0.1 Ifp en0 Ifa 10.0.0.10
@@ -11043,17 +15685,29 @@ Add new[5]: Net 192.168.2.1/32 Ifp en1 Ifa 192.168.2.50 [last]
 Add new[1]: Net 0.0.0.0/0 Gate 192.168.2.1 Ifp en1 Ifa 192.168.2.50 [never] [SCOPED]
 Add new[2]: Net 10.0.0.0/24 Ifp en0 Ifa 10.0.0.10
 Add new[4]: Net 192.168.2.0/24 Ifp en1 Ifa 192.168.2.50 [last]
-New Routes ('test6') = <IPv4RouteList[10]> = {
+Add new[6]: Net 224.0.0.0/4 Ifp en0 Ifa 10.0.0.10
+Add new[7]: Net 224.0.0.0/4 Ifp en1 Ifa 192.168.2.50 [last] [SCOPED]
+Add new[8]: Net 255.255.255.255/32 Ifp en0 Ifa 10.0.0.10
+Add new[9]: Net 255.255.255.255/32 Ifp en1 Ifa 192.168.2.50 [last] [SCOPED]
+New Routes ('test6') = <IPv4RouteList[18]> = {
  0. Net 0.0.0.0/0 Gate 17.255.96.1 Ifp en2 Ifa 17.255.98.164
  1. Net 0.0.0.0/0 Gate 17.202.40.1 Ifp en0 Ifa 17.202.42.113 [SCOPED]
  2. Net 0.0.0.0/0 Gate 17.202.40.1 Ifp en1 Ifa 17.202.42.111 [SCOPED]
- 3. Net 0.0.0.0/0 Ifp fw0 Ifa 169.254.11.33 [SCOPED]
- 4. Net 17.202.40.0/22 Ifp en0 Ifa 17.202.42.113
- 5. Net 17.202.40.0/22 Ifp en1 Ifa 17.202.42.111 [SCOPED]
- 6. Net 17.202.40.1/32 Ifp en0 Ifa 17.202.42.113
- 7. Net 17.202.40.1/32 Ifp en1 Ifa 17.202.42.111 [SCOPED]
- 8. Net 17.255.96.0/20 Ifp en2 Ifa 17.255.98.164
- 9. Net 17.255.96.1/32 Ifp en2 Ifa 17.255.98.164
+ 3. Net 17.202.40.0/22 Ifp en0 Ifa 17.202.42.113
+ 4. Net 17.202.40.0/22 Ifp en1 Ifa 17.202.42.111 [SCOPED]
+ 5. Net 17.202.40.1/32 Ifp en0 Ifa 17.202.42.113
+ 6. Net 17.202.40.1/32 Ifp en1 Ifa 17.202.42.111 [SCOPED]
+ 7. Net 17.255.96.0/20 Ifp en2 Ifa 17.255.98.164
+ 8. Net 17.255.96.1/32 Ifp en2 Ifa 17.255.98.164
+ 9. Net 169.254.0.0/16 Ifp fw0 Ifa 169.254.11.33 [last]
+10. Net 224.0.0.0/4 Ifp en2 Ifa 17.255.98.164
+11. Net 224.0.0.0/4 Ifp en0 Ifa 17.202.42.113 [SCOPED]
+12. Net 224.0.0.0/4 Ifp en1 Ifa 17.202.42.111 [SCOPED]
+13. Net 224.0.0.0/4 Ifp fw0 Ifa 169.254.11.33 [last] [SCOPED]
+14. Net 255.255.255.255/32 Ifp en2 Ifa 17.255.98.164
+15. Net 255.255.255.255/32 Ifp en0 Ifa 17.202.42.113 [SCOPED]
+16. Net 255.255.255.255/32 Ifp en1 Ifa 17.202.42.111 [SCOPED]
+17. Net 255.255.255.255/32 Ifp fw0 Ifa 169.254.11.33 [last] [SCOPED]
 }
 Remove old[0]: Net 0.0.0.0/0 Gate 10.0.0.1 Ifp en0 Ifa 10.0.0.10
 Remove old[1]: Net 0.0.0.0/0 Gate 192.168.2.1 Ifp en1 Ifa 192.168.2.50 [never] [SCOPED]
@@ -11061,42 +15715,70 @@ Remove old[2]: Net 10.0.0.0/24 Ifp en0 Ifa 10.0.0.10
 Remove old[3]: Net 10.0.0.1/32 Ifp en0 Ifa 10.0.0.10
 Remove old[4]: Net 192.168.2.0/24 Ifp en1 Ifa 192.168.2.50 [last]
 Remove old[5]: Net 192.168.2.1/32 Ifp en1 Ifa 192.168.2.50 [last]
-Add new[9]: Net 17.255.96.1/32 Ifp en2 Ifa 17.255.98.164
+Remove old[6]: Net 224.0.0.0/4 Ifp en0 Ifa 10.0.0.10
+Remove old[7]: Net 224.0.0.0/4 Ifp en1 Ifa 192.168.2.50 [last] [SCOPED]
+Remove old[8]: Net 255.255.255.255/32 Ifp en0 Ifa 10.0.0.10
+Remove old[9]: Net 255.255.255.255/32 Ifp en1 Ifa 192.168.2.50 [last] [SCOPED]
+Add new[8]: Net 17.255.96.1/32 Ifp en2 Ifa 17.255.98.164
 Add new[0]: Net 0.0.0.0/0 Gate 17.255.96.1 Ifp en2 Ifa 17.255.98.164
-Add new[6]: Net 17.202.40.1/32 Ifp en0 Ifa 17.202.42.113
+Add new[5]: Net 17.202.40.1/32 Ifp en0 Ifa 17.202.42.113
 Add new[1]: Net 0.0.0.0/0 Gate 17.202.40.1 Ifp en0 Ifa 17.202.42.113 [SCOPED]
-Add new[7]: Net 17.202.40.1/32 Ifp en1 Ifa 17.202.42.111 [SCOPED]
+Add new[6]: Net 17.202.40.1/32 Ifp en1 Ifa 17.202.42.111 [SCOPED]
 Add new[2]: Net 0.0.0.0/0 Gate 17.202.40.1 Ifp en1 Ifa 17.202.42.111 [SCOPED]
-Add new[3]: Net 0.0.0.0/0 Ifp fw0 Ifa 169.254.11.33 [SCOPED]
-Add new[4]: Net 17.202.40.0/22 Ifp en0 Ifa 17.202.42.113
-Add new[5]: Net 17.202.40.0/22 Ifp en1 Ifa 17.202.42.111 [SCOPED]
-Add new[8]: Net 17.255.96.0/20 Ifp en2 Ifa 17.255.98.164
+Add new[3]: Net 17.202.40.0/22 Ifp en0 Ifa 17.202.42.113
+Add new[4]: Net 17.202.40.0/22 Ifp en1 Ifa 17.202.42.111 [SCOPED]
+Add new[7]: Net 17.255.96.0/20 Ifp en2 Ifa 17.255.98.164
+Add new[9]: Net 169.254.0.0/16 Ifp fw0 Ifa 169.254.11.33 [last]
+Add new[10]: Net 224.0.0.0/4 Ifp en2 Ifa 17.255.98.164
+Add new[11]: Net 224.0.0.0/4 Ifp en0 Ifa 17.202.42.113 [SCOPED]
+Add new[12]: Net 224.0.0.0/4 Ifp en1 Ifa 17.202.42.111 [SCOPED]
+Add new[13]: Net 224.0.0.0/4 Ifp fw0 Ifa 169.254.11.33 [last] [SCOPED]
+Add new[14]: Net 255.255.255.255/32 Ifp en2 Ifa 17.255.98.164
+Add new[15]: Net 255.255.255.255/32 Ifp en0 Ifa 17.202.42.113 [SCOPED]
+Add new[16]: Net 255.255.255.255/32 Ifp en1 Ifa 17.202.42.111 [SCOPED]
+Add new[17]: Net 255.255.255.255/32 Ifp fw0 Ifa 169.254.11.33 [last] [SCOPED]
 =================> Apply 'test17', 'test6' End <=================
 
 =================> Apply 'test6', 'test18' Begin <=================
-Old routes ('test6') = <IPv4RouteList[10]> = {
+Old routes ('test6') = <IPv4RouteList[18]> = {
  0. Net 0.0.0.0/0 Gate 17.255.96.1 Ifp en2 Ifa 17.255.98.164
  1. Net 0.0.0.0/0 Gate 17.202.40.1 Ifp en0 Ifa 17.202.42.113 [SCOPED]
  2. Net 0.0.0.0/0 Gate 17.202.40.1 Ifp en1 Ifa 17.202.42.111 [SCOPED]
- 3. Net 0.0.0.0/0 Ifp fw0 Ifa 169.254.11.33 [SCOPED]
- 4. Net 17.202.40.0/22 Ifp en0 Ifa 17.202.42.113
- 5. Net 17.202.40.0/22 Ifp en1 Ifa 17.202.42.111 [SCOPED]
- 6. Net 17.202.40.1/32 Ifp en0 Ifa 17.202.42.113
- 7. Net 17.202.40.1/32 Ifp en1 Ifa 17.202.42.111 [SCOPED]
- 8. Net 17.255.96.0/20 Ifp en2 Ifa 17.255.98.164
- 9. Net 17.255.96.1/32 Ifp en2 Ifa 17.255.98.164
-}
-Add new[9]: Net 17.255.96.1/32 Ifp en2 Ifa 17.255.98.164
+ 3. Net 17.202.40.0/22 Ifp en0 Ifa 17.202.42.113
+ 4. Net 17.202.40.0/22 Ifp en1 Ifa 17.202.42.111 [SCOPED]
+ 5. Net 17.202.40.1/32 Ifp en0 Ifa 17.202.42.113
+ 6. Net 17.202.40.1/32 Ifp en1 Ifa 17.202.42.111 [SCOPED]
+ 7. Net 17.255.96.0/20 Ifp en2 Ifa 17.255.98.164
+ 8. Net 17.255.96.1/32 Ifp en2 Ifa 17.255.98.164
+ 9. Net 169.254.0.0/16 Ifp fw0 Ifa 169.254.11.33 [last]
+10. Net 224.0.0.0/4 Ifp en2 Ifa 17.255.98.164
+11. Net 224.0.0.0/4 Ifp en0 Ifa 17.202.42.113 [SCOPED]
+12. Net 224.0.0.0/4 Ifp en1 Ifa 17.202.42.111 [SCOPED]
+13. Net 224.0.0.0/4 Ifp fw0 Ifa 169.254.11.33 [last] [SCOPED]
+14. Net 255.255.255.255/32 Ifp en2 Ifa 17.255.98.164
+15. Net 255.255.255.255/32 Ifp en0 Ifa 17.202.42.113 [SCOPED]
+16. Net 255.255.255.255/32 Ifp en1 Ifa 17.202.42.111 [SCOPED]
+17. Net 255.255.255.255/32 Ifp fw0 Ifa 169.254.11.33 [last] [SCOPED]
+}
+Add new[8]: Net 17.255.96.1/32 Ifp en2 Ifa 17.255.98.164
 Add new[0]: Net 0.0.0.0/0 Gate 17.255.96.1 Ifp en2 Ifa 17.255.98.164
-Add new[6]: Net 17.202.40.1/32 Ifp en0 Ifa 17.202.42.113
+Add new[5]: Net 17.202.40.1/32 Ifp en0 Ifa 17.202.42.113
 Add new[1]: Net 0.0.0.0/0 Gate 17.202.40.1 Ifp en0 Ifa 17.202.42.113 [SCOPED]
-Add new[7]: Net 17.202.40.1/32 Ifp en1 Ifa 17.202.42.111 [SCOPED]
+Add new[6]: Net 17.202.40.1/32 Ifp en1 Ifa 17.202.42.111 [SCOPED]
 Add new[2]: Net 0.0.0.0/0 Gate 17.202.40.1 Ifp en1 Ifa 17.202.42.111 [SCOPED]
-Add new[3]: Net 0.0.0.0/0 Ifp fw0 Ifa 169.254.11.33 [SCOPED]
-Add new[4]: Net 17.202.40.0/22 Ifp en0 Ifa 17.202.42.113
-Add new[5]: Net 17.202.40.0/22 Ifp en1 Ifa 17.202.42.111 [SCOPED]
-Add new[8]: Net 17.255.96.0/20 Ifp en2 Ifa 17.255.98.164
-New Routes ('test18') = <IPv4RouteList[14]> = {
+Add new[3]: Net 17.202.40.0/22 Ifp en0 Ifa 17.202.42.113
+Add new[4]: Net 17.202.40.0/22 Ifp en1 Ifa 17.202.42.111 [SCOPED]
+Add new[7]: Net 17.255.96.0/20 Ifp en2 Ifa 17.255.98.164
+Add new[9]: Net 169.254.0.0/16 Ifp fw0 Ifa 169.254.11.33 [last]
+Add new[10]: Net 224.0.0.0/4 Ifp en2 Ifa 17.255.98.164
+Add new[11]: Net 224.0.0.0/4 Ifp en0 Ifa 17.202.42.113 [SCOPED]
+Add new[12]: Net 224.0.0.0/4 Ifp en1 Ifa 17.202.42.111 [SCOPED]
+Add new[13]: Net 224.0.0.0/4 Ifp fw0 Ifa 169.254.11.33 [last] [SCOPED]
+Add new[14]: Net 255.255.255.255/32 Ifp en2 Ifa 17.255.98.164
+Add new[15]: Net 255.255.255.255/32 Ifp en0 Ifa 17.202.42.113 [SCOPED]
+Add new[16]: Net 255.255.255.255/32 Ifp en1 Ifa 17.202.42.111 [SCOPED]
+Add new[17]: Net 255.255.255.255/32 Ifp fw0 Ifa 169.254.11.33 [last] [SCOPED]
+New Routes ('test18') = <IPv4RouteList[16]> = {
  0. Net 0.0.0.0/0 Gate 192.168.130.1 Ifp en0 Ifa 192.168.130.16
  1. Host 1.1.1.1 Gate 1.1.1.2 Ifp en0 Ifa 192.168.130.16
  2. Host 1.1.1.2 Gate 1.1.1.3 Ifp en0 Ifa 192.168.130.16
@@ -11111,35 +15793,47 @@ New Routes ('test18') = <IPv4RouteList[14]> = {
 11. Host 1.1.1.11 Gate 1.1.1.1 Ifp en0 Ifa 192.168.130.16
 12. Net 192.168.130.0/24 Ifp en0 Ifa 192.168.130.16
 13. Net 192.168.130.1/32 Ifp en0 Ifa 192.168.130.16
+14. Net 224.0.0.0/4 Ifp en0 Ifa 192.168.130.16
+15. Net 255.255.255.255/32 Ifp en0 Ifa 192.168.130.16
 }
 Remove old[0]: Net 0.0.0.0/0 Gate 17.255.96.1 Ifp en2 Ifa 17.255.98.164
 Remove old[1]: Net 0.0.0.0/0 Gate 17.202.40.1 Ifp en0 Ifa 17.202.42.113 [SCOPED]
 Remove old[2]: Net 0.0.0.0/0 Gate 17.202.40.1 Ifp en1 Ifa 17.202.42.111 [SCOPED]
-Remove old[3]: Net 0.0.0.0/0 Ifp fw0 Ifa 169.254.11.33 [SCOPED]
-Remove old[4]: Net 17.202.40.0/22 Ifp en0 Ifa 17.202.42.113
-Remove old[5]: Net 17.202.40.0/22 Ifp en1 Ifa 17.202.42.111 [SCOPED]
-Remove old[6]: Net 17.202.40.1/32 Ifp en0 Ifa 17.202.42.113
-Remove old[7]: Net 17.202.40.1/32 Ifp en1 Ifa 17.202.42.111 [SCOPED]
-Remove old[8]: Net 17.255.96.0/20 Ifp en2 Ifa 17.255.98.164
-Remove old[9]: Net 17.255.96.1/32 Ifp en2 Ifa 17.255.98.164
+Remove old[3]: Net 17.202.40.0/22 Ifp en0 Ifa 17.202.42.113
+Remove old[4]: Net 17.202.40.0/22 Ifp en1 Ifa 17.202.42.111 [SCOPED]
+Remove old[5]: Net 17.202.40.1/32 Ifp en0 Ifa 17.202.42.113
+Remove old[6]: Net 17.202.40.1/32 Ifp en1 Ifa 17.202.42.111 [SCOPED]
+Remove old[7]: Net 17.255.96.0/20 Ifp en2 Ifa 17.255.98.164
+Remove old[8]: Net 17.255.96.1/32 Ifp en2 Ifa 17.255.98.164
+Remove old[9]: Net 169.254.0.0/16 Ifp fw0 Ifa 169.254.11.33 [last]
+Remove old[10]: Net 224.0.0.0/4 Ifp en2 Ifa 17.255.98.164
+Remove old[11]: Net 224.0.0.0/4 Ifp en0 Ifa 17.202.42.113 [SCOPED]
+Remove old[12]: Net 224.0.0.0/4 Ifp en1 Ifa 17.202.42.111 [SCOPED]
+Remove old[13]: Net 224.0.0.0/4 Ifp fw0 Ifa 169.254.11.33 [last] [SCOPED]
+Remove old[14]: Net 255.255.255.255/32 Ifp en2 Ifa 17.255.98.164
+Remove old[15]: Net 255.255.255.255/32 Ifp en0 Ifa 17.202.42.113 [SCOPED]
+Remove old[16]: Net 255.255.255.255/32 Ifp en1 Ifa 17.202.42.111 [SCOPED]
+Remove old[17]: Net 255.255.255.255/32 Ifp fw0 Ifa 169.254.11.33 [last] [SCOPED]
 Add new[13]: Net 192.168.130.1/32 Ifp en0 Ifa 192.168.130.16
 Add new[0]: Net 0.0.0.0/0 Gate 192.168.130.1 Ifp en0 Ifa 192.168.130.16
-IPMonitor RouteProcess: routing loop detected, not adding: Host 1.1.1.11 Gate 1.1.1.1 Ifp en0 Ifa 192.168.130.16
-IPMonitor RouteProcess: failed to add: Host 1.1.1.10 Gate 1.1.1.11 Ifp en0 Ifa 192.168.130.16
-IPMonitor RouteProcess: failed to add: Host 1.1.1.9 Gate 1.1.1.10 Ifp en0 Ifa 192.168.130.16
-IPMonitor RouteProcess: failed to add: Host 1.1.1.8 Gate 1.1.1.9 Ifp en0 Ifa 192.168.130.16
-IPMonitor RouteProcess: failed to add: Host 1.1.1.7 Gate 1.1.1.8 Ifp en0 Ifa 192.168.130.16
-IPMonitor RouteProcess: failed to add: Host 1.1.1.6 Gate 1.1.1.7 Ifp en0 Ifa 192.168.130.16
-IPMonitor RouteProcess: failed to add: Host 1.1.1.5 Gate 1.1.1.6 Ifp en0 Ifa 192.168.130.16
-IPMonitor RouteProcess: failed to add: Host 1.1.1.4 Gate 1.1.1.5 Ifp en0 Ifa 192.168.130.16
-IPMonitor RouteProcess: failed to add: Host 1.1.1.3 Gate 1.1.1.4 Ifp en0 Ifa 192.168.130.16
-IPMonitor RouteProcess: failed to add: Host 1.1.1.2 Gate 1.1.1.3 Ifp en0 Ifa 192.168.130.16
-IPMonitor RouteProcess: failed to add: Host 1.1.1.1 Gate 1.1.1.2 Ifp en0 Ifa 192.168.130.16
+routing loop detected, not adding: Host 1.1.1.11 Gate 1.1.1.1 Ifp en0 Ifa 192.168.130.16
+failed to add: Host 1.1.1.10 Gate 1.1.1.11 Ifp en0 Ifa 192.168.130.16
+failed to add: Host 1.1.1.9 Gate 1.1.1.10 Ifp en0 Ifa 192.168.130.16
+failed to add: Host 1.1.1.8 Gate 1.1.1.9 Ifp en0 Ifa 192.168.130.16
+failed to add: Host 1.1.1.7 Gate 1.1.1.8 Ifp en0 Ifa 192.168.130.16
+failed to add: Host 1.1.1.6 Gate 1.1.1.7 Ifp en0 Ifa 192.168.130.16
+failed to add: Host 1.1.1.5 Gate 1.1.1.6 Ifp en0 Ifa 192.168.130.16
+failed to add: Host 1.1.1.4 Gate 1.1.1.5 Ifp en0 Ifa 192.168.130.16
+failed to add: Host 1.1.1.3 Gate 1.1.1.4 Ifp en0 Ifa 192.168.130.16
+failed to add: Host 1.1.1.2 Gate 1.1.1.3 Ifp en0 Ifa 192.168.130.16
+failed to add: Host 1.1.1.1 Gate 1.1.1.2 Ifp en0 Ifa 192.168.130.16
 Add new[12]: Net 192.168.130.0/24 Ifp en0 Ifa 192.168.130.16
+Add new[14]: Net 224.0.0.0/4 Ifp en0 Ifa 192.168.130.16
+Add new[15]: Net 255.255.255.255/32 Ifp en0 Ifa 192.168.130.16
 =================> Apply 'test6', 'test18' End <=================
 
 =================> Apply 'test18', 'test6' Begin <=================
-Old routes ('test18') = <IPv4RouteList[14]> = {
+Old routes ('test18') = <IPv4RouteList[16]> = {
  0. Net 0.0.0.0/0 Gate 192.168.130.1 Ifp en0 Ifa 192.168.130.16
  1. Host 1.1.1.1 Gate 1.1.1.2 Ifp en0 Ifa 192.168.130.16
  2. Host 1.1.1.2 Gate 1.1.1.3 Ifp en0 Ifa 192.168.130.16
@@ -11154,105 +15848,163 @@ Old routes ('test18') = <IPv4RouteList[14]> = {
 11. Host 1.1.1.11 Gate 1.1.1.1 Ifp en0 Ifa 192.168.130.16
 12. Net 192.168.130.0/24 Ifp en0 Ifa 192.168.130.16
 13. Net 192.168.130.1/32 Ifp en0 Ifa 192.168.130.16
+14. Net 224.0.0.0/4 Ifp en0 Ifa 192.168.130.16
+15. Net 255.255.255.255/32 Ifp en0 Ifa 192.168.130.16
 }
 Add new[13]: Net 192.168.130.1/32 Ifp en0 Ifa 192.168.130.16
 Add new[0]: Net 0.0.0.0/0 Gate 192.168.130.1 Ifp en0 Ifa 192.168.130.16
-IPMonitor RouteProcess: routing loop detected, not adding: Host 1.1.1.11 Gate 1.1.1.1 Ifp en0 Ifa 192.168.130.16
-IPMonitor RouteProcess: failed to add: Host 1.1.1.10 Gate 1.1.1.11 Ifp en0 Ifa 192.168.130.16
-IPMonitor RouteProcess: failed to add: Host 1.1.1.9 Gate 1.1.1.10 Ifp en0 Ifa 192.168.130.16
-IPMonitor RouteProcess: failed to add: Host 1.1.1.8 Gate 1.1.1.9 Ifp en0 Ifa 192.168.130.16
-IPMonitor RouteProcess: failed to add: Host 1.1.1.7 Gate 1.1.1.8 Ifp en0 Ifa 192.168.130.16
-IPMonitor RouteProcess: failed to add: Host 1.1.1.6 Gate 1.1.1.7 Ifp en0 Ifa 192.168.130.16
-IPMonitor RouteProcess: failed to add: Host 1.1.1.5 Gate 1.1.1.6 Ifp en0 Ifa 192.168.130.16
-IPMonitor RouteProcess: failed to add: Host 1.1.1.4 Gate 1.1.1.5 Ifp en0 Ifa 192.168.130.16
-IPMonitor RouteProcess: failed to add: Host 1.1.1.3 Gate 1.1.1.4 Ifp en0 Ifa 192.168.130.16
-IPMonitor RouteProcess: failed to add: Host 1.1.1.2 Gate 1.1.1.3 Ifp en0 Ifa 192.168.130.16
-IPMonitor RouteProcess: failed to add: Host 1.1.1.1 Gate 1.1.1.2 Ifp en0 Ifa 192.168.130.16
+routing loop detected, not adding: Host 1.1.1.11 Gate 1.1.1.1 Ifp en0 Ifa 192.168.130.16
+failed to add: Host 1.1.1.10 Gate 1.1.1.11 Ifp en0 Ifa 192.168.130.16
+failed to add: Host 1.1.1.9 Gate 1.1.1.10 Ifp en0 Ifa 192.168.130.16
+failed to add: Host 1.1.1.8 Gate 1.1.1.9 Ifp en0 Ifa 192.168.130.16
+failed to add: Host 1.1.1.7 Gate 1.1.1.8 Ifp en0 Ifa 192.168.130.16
+failed to add: Host 1.1.1.6 Gate 1.1.1.7 Ifp en0 Ifa 192.168.130.16
+failed to add: Host 1.1.1.5 Gate 1.1.1.6 Ifp en0 Ifa 192.168.130.16
+failed to add: Host 1.1.1.4 Gate 1.1.1.5 Ifp en0 Ifa 192.168.130.16
+failed to add: Host 1.1.1.3 Gate 1.1.1.4 Ifp en0 Ifa 192.168.130.16
+failed to add: Host 1.1.1.2 Gate 1.1.1.3 Ifp en0 Ifa 192.168.130.16
+failed to add: Host 1.1.1.1 Gate 1.1.1.2 Ifp en0 Ifa 192.168.130.16
 Add new[12]: Net 192.168.130.0/24 Ifp en0 Ifa 192.168.130.16
-New Routes ('test6') = <IPv4RouteList[10]> = {
+Add new[14]: Net 224.0.0.0/4 Ifp en0 Ifa 192.168.130.16
+Add new[15]: Net 255.255.255.255/32 Ifp en0 Ifa 192.168.130.16
+New Routes ('test6') = <IPv4RouteList[18]> = {
  0. Net 0.0.0.0/0 Gate 17.255.96.1 Ifp en2 Ifa 17.255.98.164
  1. Net 0.0.0.0/0 Gate 17.202.40.1 Ifp en0 Ifa 17.202.42.113 [SCOPED]
  2. Net 0.0.0.0/0 Gate 17.202.40.1 Ifp en1 Ifa 17.202.42.111 [SCOPED]
- 3. Net 0.0.0.0/0 Ifp fw0 Ifa 169.254.11.33 [SCOPED]
- 4. Net 17.202.40.0/22 Ifp en0 Ifa 17.202.42.113
- 5. Net 17.202.40.0/22 Ifp en1 Ifa 17.202.42.111 [SCOPED]
- 6. Net 17.202.40.1/32 Ifp en0 Ifa 17.202.42.113
- 7. Net 17.202.40.1/32 Ifp en1 Ifa 17.202.42.111 [SCOPED]
- 8. Net 17.255.96.0/20 Ifp en2 Ifa 17.255.98.164
- 9. Net 17.255.96.1/32 Ifp en2 Ifa 17.255.98.164
+ 3. Net 17.202.40.0/22 Ifp en0 Ifa 17.202.42.113
+ 4. Net 17.202.40.0/22 Ifp en1 Ifa 17.202.42.111 [SCOPED]
+ 5. Net 17.202.40.1/32 Ifp en0 Ifa 17.202.42.113
+ 6. Net 17.202.40.1/32 Ifp en1 Ifa 17.202.42.111 [SCOPED]
+ 7. Net 17.255.96.0/20 Ifp en2 Ifa 17.255.98.164
+ 8. Net 17.255.96.1/32 Ifp en2 Ifa 17.255.98.164
+ 9. Net 169.254.0.0/16 Ifp fw0 Ifa 169.254.11.33 [last]
+10. Net 224.0.0.0/4 Ifp en2 Ifa 17.255.98.164
+11. Net 224.0.0.0/4 Ifp en0 Ifa 17.202.42.113 [SCOPED]
+12. Net 224.0.0.0/4 Ifp en1 Ifa 17.202.42.111 [SCOPED]
+13. Net 224.0.0.0/4 Ifp fw0 Ifa 169.254.11.33 [last] [SCOPED]
+14. Net 255.255.255.255/32 Ifp en2 Ifa 17.255.98.164
+15. Net 255.255.255.255/32 Ifp en0 Ifa 17.202.42.113 [SCOPED]
+16. Net 255.255.255.255/32 Ifp en1 Ifa 17.202.42.111 [SCOPED]
+17. Net 255.255.255.255/32 Ifp fw0 Ifa 169.254.11.33 [last] [SCOPED]
 }
 Remove old[0]: Net 0.0.0.0/0 Gate 192.168.130.1 Ifp en0 Ifa 192.168.130.16
 Remove old[12]: Net 192.168.130.0/24 Ifp en0 Ifa 192.168.130.16
 Remove old[13]: Net 192.168.130.1/32 Ifp en0 Ifa 192.168.130.16
-Add new[9]: Net 17.255.96.1/32 Ifp en2 Ifa 17.255.98.164
+Remove old[14]: Net 224.0.0.0/4 Ifp en0 Ifa 192.168.130.16
+Remove old[15]: Net 255.255.255.255/32 Ifp en0 Ifa 192.168.130.16
+Add new[8]: Net 17.255.96.1/32 Ifp en2 Ifa 17.255.98.164
 Add new[0]: Net 0.0.0.0/0 Gate 17.255.96.1 Ifp en2 Ifa 17.255.98.164
-Add new[6]: Net 17.202.40.1/32 Ifp en0 Ifa 17.202.42.113
+Add new[5]: Net 17.202.40.1/32 Ifp en0 Ifa 17.202.42.113
 Add new[1]: Net 0.0.0.0/0 Gate 17.202.40.1 Ifp en0 Ifa 17.202.42.113 [SCOPED]
-Add new[7]: Net 17.202.40.1/32 Ifp en1 Ifa 17.202.42.111 [SCOPED]
+Add new[6]: Net 17.202.40.1/32 Ifp en1 Ifa 17.202.42.111 [SCOPED]
 Add new[2]: Net 0.0.0.0/0 Gate 17.202.40.1 Ifp en1 Ifa 17.202.42.111 [SCOPED]
-Add new[3]: Net 0.0.0.0/0 Ifp fw0 Ifa 169.254.11.33 [SCOPED]
-Add new[4]: Net 17.202.40.0/22 Ifp en0 Ifa 17.202.42.113
-Add new[5]: Net 17.202.40.0/22 Ifp en1 Ifa 17.202.42.111 [SCOPED]
-Add new[8]: Net 17.255.96.0/20 Ifp en2 Ifa 17.255.98.164
+Add new[3]: Net 17.202.40.0/22 Ifp en0 Ifa 17.202.42.113
+Add new[4]: Net 17.202.40.0/22 Ifp en1 Ifa 17.202.42.111 [SCOPED]
+Add new[7]: Net 17.255.96.0/20 Ifp en2 Ifa 17.255.98.164
+Add new[9]: Net 169.254.0.0/16 Ifp fw0 Ifa 169.254.11.33 [last]
+Add new[10]: Net 224.0.0.0/4 Ifp en2 Ifa 17.255.98.164
+Add new[11]: Net 224.0.0.0/4 Ifp en0 Ifa 17.202.42.113 [SCOPED]
+Add new[12]: Net 224.0.0.0/4 Ifp en1 Ifa 17.202.42.111 [SCOPED]
+Add new[13]: Net 224.0.0.0/4 Ifp fw0 Ifa 169.254.11.33 [last] [SCOPED]
+Add new[14]: Net 255.255.255.255/32 Ifp en2 Ifa 17.255.98.164
+Add new[15]: Net 255.255.255.255/32 Ifp en0 Ifa 17.202.42.113 [SCOPED]
+Add new[16]: Net 255.255.255.255/32 Ifp en1 Ifa 17.202.42.111 [SCOPED]
+Add new[17]: Net 255.255.255.255/32 Ifp fw0 Ifa 169.254.11.33 [last] [SCOPED]
 =================> Apply 'test18', 'test6' End <=================
 
 =================> Apply 'test7', 'test8' Begin <=================
-Old routes ('test7') = <IPv4RouteList[10]> = {
+Old routes ('test7') = <IPv4RouteList[18]> = {
  0. Net 0.0.0.0/0 Gate 17.255.96.1 Ifp en2 Ifa 17.255.98.164
  1. Net 0.0.0.0/0 Gate 17.202.40.1 Ifp en1 Ifa 17.202.42.111 [SCOPED]
  2. Net 0.0.0.0/0 Gate 17.202.40.1 Ifp en0 Ifa 17.202.42.113 [SCOPED]
- 3. Net 0.0.0.0/0 Ifp fw0 Ifa 169.254.11.33 [SCOPED]
- 4. Net 17.202.40.0/22 Ifp en1 Ifa 17.202.42.111
- 5. Net 17.202.40.0/22 Ifp en0 Ifa 17.202.42.113 [SCOPED]
- 6. Net 17.202.40.1/32 Ifp en1 Ifa 17.202.42.111
- 7. Net 17.202.40.1/32 Ifp en0 Ifa 17.202.42.113 [SCOPED]
- 8. Net 17.255.96.0/20 Ifp en2 Ifa 17.255.98.164
- 9. Net 17.255.96.1/32 Ifp en2 Ifa 17.255.98.164
-}
-Add new[9]: Net 17.255.96.1/32 Ifp en2 Ifa 17.255.98.164
+ 3. Net 17.202.40.0/22 Ifp en1 Ifa 17.202.42.111
+ 4. Net 17.202.40.0/22 Ifp en0 Ifa 17.202.42.113 [SCOPED]
+ 5. Net 17.202.40.1/32 Ifp en1 Ifa 17.202.42.111
+ 6. Net 17.202.40.1/32 Ifp en0 Ifa 17.202.42.113 [SCOPED]
+ 7. Net 17.255.96.0/20 Ifp en2 Ifa 17.255.98.164
+ 8. Net 17.255.96.1/32 Ifp en2 Ifa 17.255.98.164
+ 9. Net 169.254.0.0/16 Ifp fw0 Ifa 169.254.11.33 [last]
+10. Net 224.0.0.0/4 Ifp en2 Ifa 17.255.98.164
+11. Net 224.0.0.0/4 Ifp en1 Ifa 17.202.42.111 [SCOPED]
+12. Net 224.0.0.0/4 Ifp en0 Ifa 17.202.42.113 [SCOPED]
+13. Net 224.0.0.0/4 Ifp fw0 Ifa 169.254.11.33 [last] [SCOPED]
+14. Net 255.255.255.255/32 Ifp en2 Ifa 17.255.98.164
+15. Net 255.255.255.255/32 Ifp en1 Ifa 17.202.42.111 [SCOPED]
+16. Net 255.255.255.255/32 Ifp en0 Ifa 17.202.42.113 [SCOPED]
+17. Net 255.255.255.255/32 Ifp fw0 Ifa 169.254.11.33 [last] [SCOPED]
+}
+Add new[8]: Net 17.255.96.1/32 Ifp en2 Ifa 17.255.98.164
 Add new[0]: Net 0.0.0.0/0 Gate 17.255.96.1 Ifp en2 Ifa 17.255.98.164
-Add new[6]: Net 17.202.40.1/32 Ifp en1 Ifa 17.202.42.111
+Add new[5]: Net 17.202.40.1/32 Ifp en1 Ifa 17.202.42.111
 Add new[1]: Net 0.0.0.0/0 Gate 17.202.40.1 Ifp en1 Ifa 17.202.42.111 [SCOPED]
-Add new[7]: Net 17.202.40.1/32 Ifp en0 Ifa 17.202.42.113 [SCOPED]
+Add new[6]: Net 17.202.40.1/32 Ifp en0 Ifa 17.202.42.113 [SCOPED]
 Add new[2]: Net 0.0.0.0/0 Gate 17.202.40.1 Ifp en0 Ifa 17.202.42.113 [SCOPED]
-Add new[3]: Net 0.0.0.0/0 Ifp fw0 Ifa 169.254.11.33 [SCOPED]
-Add new[4]: Net 17.202.40.0/22 Ifp en1 Ifa 17.202.42.111
-Add new[5]: Net 17.202.40.0/22 Ifp en0 Ifa 17.202.42.113 [SCOPED]
-Add new[8]: Net 17.255.96.0/20 Ifp en2 Ifa 17.255.98.164
-New Routes ('test8') = <IPv4RouteList[6]> = {
+Add new[3]: Net 17.202.40.0/22 Ifp en1 Ifa 17.202.42.111
+Add new[4]: Net 17.202.40.0/22 Ifp en0 Ifa 17.202.42.113 [SCOPED]
+Add new[7]: Net 17.255.96.0/20 Ifp en2 Ifa 17.255.98.164
+Add new[9]: Net 169.254.0.0/16 Ifp fw0 Ifa 169.254.11.33 [last]
+Add new[10]: Net 224.0.0.0/4 Ifp en2 Ifa 17.255.98.164
+Add new[11]: Net 224.0.0.0/4 Ifp en1 Ifa 17.202.42.111 [SCOPED]
+Add new[12]: Net 224.0.0.0/4 Ifp en0 Ifa 17.202.42.113 [SCOPED]
+Add new[13]: Net 224.0.0.0/4 Ifp fw0 Ifa 169.254.11.33 [last] [SCOPED]
+Add new[14]: Net 255.255.255.255/32 Ifp en2 Ifa 17.255.98.164
+Add new[15]: Net 255.255.255.255/32 Ifp en1 Ifa 17.202.42.111 [SCOPED]
+Add new[16]: Net 255.255.255.255/32 Ifp en0 Ifa 17.202.42.113 [SCOPED]
+Add new[17]: Net 255.255.255.255/32 Ifp fw0 Ifa 169.254.11.33 [last] [SCOPED]
+New Routes ('test8') = <IPv4RouteList[10]> = {
  0. Net 0.0.0.0/0 Gate 10.0.0.1 Ifp en0 Ifa 10.0.0.10
  1. Net 0.0.0.0/0 Gate 10.0.0.1 Ifp en1 Ifa 10.0.0.20 [SCOPED]
  2. Net 10.0.0.0/24 Ifp en0 Ifa 10.0.0.10
  3. Net 10.0.0.0/24 Ifp en1 Ifa 10.0.0.20 [SCOPED]
  4. Net 10.0.0.1/32 Ifp en0 Ifa 10.0.0.10
  5. Net 10.0.0.1/32 Ifp en1 Ifa 10.0.0.20 [SCOPED]
+ 6. Net 224.0.0.0/4 Ifp en0 Ifa 10.0.0.10
+ 7. Net 224.0.0.0/4 Ifp en1 Ifa 10.0.0.20 [SCOPED]
+ 8. Net 255.255.255.255/32 Ifp en0 Ifa 10.0.0.10
+ 9. Net 255.255.255.255/32 Ifp en1 Ifa 10.0.0.20 [SCOPED]
 }
 Remove old[0]: Net 0.0.0.0/0 Gate 17.255.96.1 Ifp en2 Ifa 17.255.98.164
 Remove old[1]: Net 0.0.0.0/0 Gate 17.202.40.1 Ifp en1 Ifa 17.202.42.111 [SCOPED]
 Remove old[2]: Net 0.0.0.0/0 Gate 17.202.40.1 Ifp en0 Ifa 17.202.42.113 [SCOPED]
-Remove old[3]: Net 0.0.0.0/0 Ifp fw0 Ifa 169.254.11.33 [SCOPED]
-Remove old[4]: Net 17.202.40.0/22 Ifp en1 Ifa 17.202.42.111
-Remove old[5]: Net 17.202.40.0/22 Ifp en0 Ifa 17.202.42.113 [SCOPED]
-Remove old[6]: Net 17.202.40.1/32 Ifp en1 Ifa 17.202.42.111
-Remove old[7]: Net 17.202.40.1/32 Ifp en0 Ifa 17.202.42.113 [SCOPED]
-Remove old[8]: Net 17.255.96.0/20 Ifp en2 Ifa 17.255.98.164
-Remove old[9]: Net 17.255.96.1/32 Ifp en2 Ifa 17.255.98.164
+Remove old[3]: Net 17.202.40.0/22 Ifp en1 Ifa 17.202.42.111
+Remove old[4]: Net 17.202.40.0/22 Ifp en0 Ifa 17.202.42.113 [SCOPED]
+Remove old[5]: Net 17.202.40.1/32 Ifp en1 Ifa 17.202.42.111
+Remove old[6]: Net 17.202.40.1/32 Ifp en0 Ifa 17.202.42.113 [SCOPED]
+Remove old[7]: Net 17.255.96.0/20 Ifp en2 Ifa 17.255.98.164
+Remove old[8]: Net 17.255.96.1/32 Ifp en2 Ifa 17.255.98.164
+Remove old[9]: Net 169.254.0.0/16 Ifp fw0 Ifa 169.254.11.33 [last]
+Remove old[10]: Net 224.0.0.0/4 Ifp en2 Ifa 17.255.98.164
+Remove old[11]: Net 224.0.0.0/4 Ifp en1 Ifa 17.202.42.111 [SCOPED]
+Remove old[12]: Net 224.0.0.0/4 Ifp en0 Ifa 17.202.42.113 [SCOPED]
+Remove old[13]: Net 224.0.0.0/4 Ifp fw0 Ifa 169.254.11.33 [last] [SCOPED]
+Remove old[14]: Net 255.255.255.255/32 Ifp en2 Ifa 17.255.98.164
+Remove old[15]: Net 255.255.255.255/32 Ifp en1 Ifa 17.202.42.111 [SCOPED]
+Remove old[16]: Net 255.255.255.255/32 Ifp en0 Ifa 17.202.42.113 [SCOPED]
+Remove old[17]: Net 255.255.255.255/32 Ifp fw0 Ifa 169.254.11.33 [last] [SCOPED]
 Add new[4]: Net 10.0.0.1/32 Ifp en0 Ifa 10.0.0.10
 Add new[0]: Net 0.0.0.0/0 Gate 10.0.0.1 Ifp en0 Ifa 10.0.0.10
 Add new[5]: Net 10.0.0.1/32 Ifp en1 Ifa 10.0.0.20 [SCOPED]
 Add new[1]: Net 0.0.0.0/0 Gate 10.0.0.1 Ifp en1 Ifa 10.0.0.20 [SCOPED]
 Add new[2]: Net 10.0.0.0/24 Ifp en0 Ifa 10.0.0.10
 Add new[3]: Net 10.0.0.0/24 Ifp en1 Ifa 10.0.0.20 [SCOPED]
+Add new[6]: Net 224.0.0.0/4 Ifp en0 Ifa 10.0.0.10
+Add new[7]: Net 224.0.0.0/4 Ifp en1 Ifa 10.0.0.20 [SCOPED]
+Add new[8]: Net 255.255.255.255/32 Ifp en0 Ifa 10.0.0.10
+Add new[9]: Net 255.255.255.255/32 Ifp en1 Ifa 10.0.0.20 [SCOPED]
 =================> Apply 'test7', 'test8' End <=================
 
 =================> Apply 'test8', 'test7' Begin <=================
-Old routes ('test8') = <IPv4RouteList[6]> = {
+Old routes ('test8') = <IPv4RouteList[10]> = {
  0. Net 0.0.0.0/0 Gate 10.0.0.1 Ifp en0 Ifa 10.0.0.10
  1. Net 0.0.0.0/0 Gate 10.0.0.1 Ifp en1 Ifa 10.0.0.20 [SCOPED]
  2. Net 10.0.0.0/24 Ifp en0 Ifa 10.0.0.10
  3. Net 10.0.0.0/24 Ifp en1 Ifa 10.0.0.20 [SCOPED]
  4. Net 10.0.0.1/32 Ifp en0 Ifa 10.0.0.10
  5. Net 10.0.0.1/32 Ifp en1 Ifa 10.0.0.20 [SCOPED]
+ 6. Net 224.0.0.0/4 Ifp en0 Ifa 10.0.0.10
+ 7. Net 224.0.0.0/4 Ifp en1 Ifa 10.0.0.20 [SCOPED]
+ 8. Net 255.255.255.255/32 Ifp en0 Ifa 10.0.0.10
+ 9. Net 255.255.255.255/32 Ifp en1 Ifa 10.0.0.20 [SCOPED]
 }
 Add new[4]: Net 10.0.0.1/32 Ifp en0 Ifa 10.0.0.10
 Add new[0]: Net 0.0.0.0/0 Gate 10.0.0.1 Ifp en0 Ifa 10.0.0.10
@@ -11260,17 +16012,29 @@ Add new[5]: Net 10.0.0.1/32 Ifp en1 Ifa 10.0.0.20 [SCOPED]
 Add new[1]: Net 0.0.0.0/0 Gate 10.0.0.1 Ifp en1 Ifa 10.0.0.20 [SCOPED]
 Add new[2]: Net 10.0.0.0/24 Ifp en0 Ifa 10.0.0.10
 Add new[3]: Net 10.0.0.0/24 Ifp en1 Ifa 10.0.0.20 [SCOPED]
-New Routes ('test7') = <IPv4RouteList[10]> = {
+Add new[6]: Net 224.0.0.0/4 Ifp en0 Ifa 10.0.0.10
+Add new[7]: Net 224.0.0.0/4 Ifp en1 Ifa 10.0.0.20 [SCOPED]
+Add new[8]: Net 255.255.255.255/32 Ifp en0 Ifa 10.0.0.10
+Add new[9]: Net 255.255.255.255/32 Ifp en1 Ifa 10.0.0.20 [SCOPED]
+New Routes ('test7') = <IPv4RouteList[18]> = {
  0. Net 0.0.0.0/0 Gate 17.255.96.1 Ifp en2 Ifa 17.255.98.164
  1. Net 0.0.0.0/0 Gate 17.202.40.1 Ifp en1 Ifa 17.202.42.111 [SCOPED]
  2. Net 0.0.0.0/0 Gate 17.202.40.1 Ifp en0 Ifa 17.202.42.113 [SCOPED]
- 3. Net 0.0.0.0/0 Ifp fw0 Ifa 169.254.11.33 [SCOPED]
- 4. Net 17.202.40.0/22 Ifp en1 Ifa 17.202.42.111
- 5. Net 17.202.40.0/22 Ifp en0 Ifa 17.202.42.113 [SCOPED]
- 6. Net 17.202.40.1/32 Ifp en1 Ifa 17.202.42.111
- 7. Net 17.202.40.1/32 Ifp en0 Ifa 17.202.42.113 [SCOPED]
- 8. Net 17.255.96.0/20 Ifp en2 Ifa 17.255.98.164
- 9. Net 17.255.96.1/32 Ifp en2 Ifa 17.255.98.164
+ 3. Net 17.202.40.0/22 Ifp en1 Ifa 17.202.42.111
+ 4. Net 17.202.40.0/22 Ifp en0 Ifa 17.202.42.113 [SCOPED]
+ 5. Net 17.202.40.1/32 Ifp en1 Ifa 17.202.42.111
+ 6. Net 17.202.40.1/32 Ifp en0 Ifa 17.202.42.113 [SCOPED]
+ 7. Net 17.255.96.0/20 Ifp en2 Ifa 17.255.98.164
+ 8. Net 17.255.96.1/32 Ifp en2 Ifa 17.255.98.164
+ 9. Net 169.254.0.0/16 Ifp fw0 Ifa 169.254.11.33 [last]
+10. Net 224.0.0.0/4 Ifp en2 Ifa 17.255.98.164
+11. Net 224.0.0.0/4 Ifp en1 Ifa 17.202.42.111 [SCOPED]
+12. Net 224.0.0.0/4 Ifp en0 Ifa 17.202.42.113 [SCOPED]
+13. Net 224.0.0.0/4 Ifp fw0 Ifa 169.254.11.33 [last] [SCOPED]
+14. Net 255.255.255.255/32 Ifp en2 Ifa 17.255.98.164
+15. Net 255.255.255.255/32 Ifp en1 Ifa 17.202.42.111 [SCOPED]
+16. Net 255.255.255.255/32 Ifp en0 Ifa 17.202.42.113 [SCOPED]
+17. Net 255.255.255.255/32 Ifp fw0 Ifa 169.254.11.33 [last] [SCOPED]
 }
 Remove old[0]: Net 0.0.0.0/0 Gate 10.0.0.1 Ifp en0 Ifa 10.0.0.10
 Remove old[1]: Net 0.0.0.0/0 Gate 10.0.0.1 Ifp en1 Ifa 10.0.0.20 [SCOPED]
@@ -11278,42 +16042,70 @@ Remove old[2]: Net 10.0.0.0/24 Ifp en0 Ifa 10.0.0.10
 Remove old[3]: Net 10.0.0.0/24 Ifp en1 Ifa 10.0.0.20 [SCOPED]
 Remove old[4]: Net 10.0.0.1/32 Ifp en0 Ifa 10.0.0.10
 Remove old[5]: Net 10.0.0.1/32 Ifp en1 Ifa 10.0.0.20 [SCOPED]
-Add new[9]: Net 17.255.96.1/32 Ifp en2 Ifa 17.255.98.164
+Remove old[6]: Net 224.0.0.0/4 Ifp en0 Ifa 10.0.0.10
+Remove old[7]: Net 224.0.0.0/4 Ifp en1 Ifa 10.0.0.20 [SCOPED]
+Remove old[8]: Net 255.255.255.255/32 Ifp en0 Ifa 10.0.0.10
+Remove old[9]: Net 255.255.255.255/32 Ifp en1 Ifa 10.0.0.20 [SCOPED]
+Add new[8]: Net 17.255.96.1/32 Ifp en2 Ifa 17.255.98.164
 Add new[0]: Net 0.0.0.0/0 Gate 17.255.96.1 Ifp en2 Ifa 17.255.98.164
-Add new[6]: Net 17.202.40.1/32 Ifp en1 Ifa 17.202.42.111
+Add new[5]: Net 17.202.40.1/32 Ifp en1 Ifa 17.202.42.111
 Add new[1]: Net 0.0.0.0/0 Gate 17.202.40.1 Ifp en1 Ifa 17.202.42.111 [SCOPED]
-Add new[7]: Net 17.202.40.1/32 Ifp en0 Ifa 17.202.42.113 [SCOPED]
+Add new[6]: Net 17.202.40.1/32 Ifp en0 Ifa 17.202.42.113 [SCOPED]
 Add new[2]: Net 0.0.0.0/0 Gate 17.202.40.1 Ifp en0 Ifa 17.202.42.113 [SCOPED]
-Add new[3]: Net 0.0.0.0/0 Ifp fw0 Ifa 169.254.11.33 [SCOPED]
-Add new[4]: Net 17.202.40.0/22 Ifp en1 Ifa 17.202.42.111
-Add new[5]: Net 17.202.40.0/22 Ifp en0 Ifa 17.202.42.113 [SCOPED]
-Add new[8]: Net 17.255.96.0/20 Ifp en2 Ifa 17.255.98.164
+Add new[3]: Net 17.202.40.0/22 Ifp en1 Ifa 17.202.42.111
+Add new[4]: Net 17.202.40.0/22 Ifp en0 Ifa 17.202.42.113 [SCOPED]
+Add new[7]: Net 17.255.96.0/20 Ifp en2 Ifa 17.255.98.164
+Add new[9]: Net 169.254.0.0/16 Ifp fw0 Ifa 169.254.11.33 [last]
+Add new[10]: Net 224.0.0.0/4 Ifp en2 Ifa 17.255.98.164
+Add new[11]: Net 224.0.0.0/4 Ifp en1 Ifa 17.202.42.111 [SCOPED]
+Add new[12]: Net 224.0.0.0/4 Ifp en0 Ifa 17.202.42.113 [SCOPED]
+Add new[13]: Net 224.0.0.0/4 Ifp fw0 Ifa 169.254.11.33 [last] [SCOPED]
+Add new[14]: Net 255.255.255.255/32 Ifp en2 Ifa 17.255.98.164
+Add new[15]: Net 255.255.255.255/32 Ifp en1 Ifa 17.202.42.111 [SCOPED]
+Add new[16]: Net 255.255.255.255/32 Ifp en0 Ifa 17.202.42.113 [SCOPED]
+Add new[17]: Net 255.255.255.255/32 Ifp fw0 Ifa 169.254.11.33 [last] [SCOPED]
 =================> Apply 'test8', 'test7' End <=================
 
 =================> Apply 'test7', 'test9' Begin <=================
-Old routes ('test7') = <IPv4RouteList[10]> = {
+Old routes ('test7') = <IPv4RouteList[18]> = {
  0. Net 0.0.0.0/0 Gate 17.255.96.1 Ifp en2 Ifa 17.255.98.164
  1. Net 0.0.0.0/0 Gate 17.202.40.1 Ifp en1 Ifa 17.202.42.111 [SCOPED]
  2. Net 0.0.0.0/0 Gate 17.202.40.1 Ifp en0 Ifa 17.202.42.113 [SCOPED]
- 3. Net 0.0.0.0/0 Ifp fw0 Ifa 169.254.11.33 [SCOPED]
- 4. Net 17.202.40.0/22 Ifp en1 Ifa 17.202.42.111
- 5. Net 17.202.40.0/22 Ifp en0 Ifa 17.202.42.113 [SCOPED]
- 6. Net 17.202.40.1/32 Ifp en1 Ifa 17.202.42.111
- 7. Net 17.202.40.1/32 Ifp en0 Ifa 17.202.42.113 [SCOPED]
- 8. Net 17.255.96.0/20 Ifp en2 Ifa 17.255.98.164
- 9. Net 17.255.96.1/32 Ifp en2 Ifa 17.255.98.164
-}
-Add new[9]: Net 17.255.96.1/32 Ifp en2 Ifa 17.255.98.164
+ 3. Net 17.202.40.0/22 Ifp en1 Ifa 17.202.42.111
+ 4. Net 17.202.40.0/22 Ifp en0 Ifa 17.202.42.113 [SCOPED]
+ 5. Net 17.202.40.1/32 Ifp en1 Ifa 17.202.42.111
+ 6. Net 17.202.40.1/32 Ifp en0 Ifa 17.202.42.113 [SCOPED]
+ 7. Net 17.255.96.0/20 Ifp en2 Ifa 17.255.98.164
+ 8. Net 17.255.96.1/32 Ifp en2 Ifa 17.255.98.164
+ 9. Net 169.254.0.0/16 Ifp fw0 Ifa 169.254.11.33 [last]
+10. Net 224.0.0.0/4 Ifp en2 Ifa 17.255.98.164
+11. Net 224.0.0.0/4 Ifp en1 Ifa 17.202.42.111 [SCOPED]
+12. Net 224.0.0.0/4 Ifp en0 Ifa 17.202.42.113 [SCOPED]
+13. Net 224.0.0.0/4 Ifp fw0 Ifa 169.254.11.33 [last] [SCOPED]
+14. Net 255.255.255.255/32 Ifp en2 Ifa 17.255.98.164
+15. Net 255.255.255.255/32 Ifp en1 Ifa 17.202.42.111 [SCOPED]
+16. Net 255.255.255.255/32 Ifp en0 Ifa 17.202.42.113 [SCOPED]
+17. Net 255.255.255.255/32 Ifp fw0 Ifa 169.254.11.33 [last] [SCOPED]
+}
+Add new[8]: Net 17.255.96.1/32 Ifp en2 Ifa 17.255.98.164
 Add new[0]: Net 0.0.0.0/0 Gate 17.255.96.1 Ifp en2 Ifa 17.255.98.164
-Add new[6]: Net 17.202.40.1/32 Ifp en1 Ifa 17.202.42.111
+Add new[5]: Net 17.202.40.1/32 Ifp en1 Ifa 17.202.42.111
 Add new[1]: Net 0.0.0.0/0 Gate 17.202.40.1 Ifp en1 Ifa 17.202.42.111 [SCOPED]
-Add new[7]: Net 17.202.40.1/32 Ifp en0 Ifa 17.202.42.113 [SCOPED]
+Add new[6]: Net 17.202.40.1/32 Ifp en0 Ifa 17.202.42.113 [SCOPED]
 Add new[2]: Net 0.0.0.0/0 Gate 17.202.40.1 Ifp en0 Ifa 17.202.42.113 [SCOPED]
-Add new[3]: Net 0.0.0.0/0 Ifp fw0 Ifa 169.254.11.33 [SCOPED]
-Add new[4]: Net 17.202.40.0/22 Ifp en1 Ifa 17.202.42.111
-Add new[5]: Net 17.202.40.0/22 Ifp en0 Ifa 17.202.42.113 [SCOPED]
-Add new[8]: Net 17.255.96.0/20 Ifp en2 Ifa 17.255.98.164
-New Routes ('test9') = <IPv4RouteList[9]> = {
+Add new[3]: Net 17.202.40.0/22 Ifp en1 Ifa 17.202.42.111
+Add new[4]: Net 17.202.40.0/22 Ifp en0 Ifa 17.202.42.113 [SCOPED]
+Add new[7]: Net 17.255.96.0/20 Ifp en2 Ifa 17.255.98.164
+Add new[9]: Net 169.254.0.0/16 Ifp fw0 Ifa 169.254.11.33 [last]
+Add new[10]: Net 224.0.0.0/4 Ifp en2 Ifa 17.255.98.164
+Add new[11]: Net 224.0.0.0/4 Ifp en1 Ifa 17.202.42.111 [SCOPED]
+Add new[12]: Net 224.0.0.0/4 Ifp en0 Ifa 17.202.42.113 [SCOPED]
+Add new[13]: Net 224.0.0.0/4 Ifp fw0 Ifa 169.254.11.33 [last] [SCOPED]
+Add new[14]: Net 255.255.255.255/32 Ifp en2 Ifa 17.255.98.164
+Add new[15]: Net 255.255.255.255/32 Ifp en1 Ifa 17.202.42.111 [SCOPED]
+Add new[16]: Net 255.255.255.255/32 Ifp en0 Ifa 17.202.42.113 [SCOPED]
+Add new[17]: Net 255.255.255.255/32 Ifp fw0 Ifa 169.254.11.33 [last] [SCOPED]
+New Routes ('test9') = <IPv4RouteList[15]> = {
  0. Net 0.0.0.0/0 Gate 10.0.0.1 Ifp en1 Ifa 10.0.0.20 [first]
  1. Net 0.0.0.0/0 Gate 10.0.0.1 Ifp en0 Ifa 10.0.0.10 [SCOPED]
  2. Net 0.0.0.0/0 Gate 192.168.2.1 Ifp fw0 Ifa 192.168.2.30 [SCOPED]
@@ -11323,17 +16115,31 @@ New Routes ('test9') = <IPv4RouteList[9]> = {
  6. Net 10.0.0.1/32 Ifp en0 Ifa 10.0.0.10 [SCOPED]
  7. Net 192.168.2.0/24 Ifp fw0 Ifa 192.168.2.30
  8. Net 192.168.2.1/32 Ifp fw0 Ifa 192.168.2.30
+ 9. Net 224.0.0.0/4 Ifp en1 Ifa 10.0.0.20 [first]
+10. Net 224.0.0.0/4 Ifp en0 Ifa 10.0.0.10 [SCOPED]
+11. Net 224.0.0.0/4 Ifp fw0 Ifa 192.168.2.30 [SCOPED]
+12. Net 255.255.255.255/32 Ifp en1 Ifa 10.0.0.20 [first]
+13. Net 255.255.255.255/32 Ifp en0 Ifa 10.0.0.10 [SCOPED]
+14. Net 255.255.255.255/32 Ifp fw0 Ifa 192.168.2.30 [SCOPED]
 }
 Remove old[0]: Net 0.0.0.0/0 Gate 17.255.96.1 Ifp en2 Ifa 17.255.98.164
 Remove old[1]: Net 0.0.0.0/0 Gate 17.202.40.1 Ifp en1 Ifa 17.202.42.111 [SCOPED]
 Remove old[2]: Net 0.0.0.0/0 Gate 17.202.40.1 Ifp en0 Ifa 17.202.42.113 [SCOPED]
-Remove old[3]: Net 0.0.0.0/0 Ifp fw0 Ifa 169.254.11.33 [SCOPED]
-Remove old[4]: Net 17.202.40.0/22 Ifp en1 Ifa 17.202.42.111
-Remove old[5]: Net 17.202.40.0/22 Ifp en0 Ifa 17.202.42.113 [SCOPED]
-Remove old[6]: Net 17.202.40.1/32 Ifp en1 Ifa 17.202.42.111
-Remove old[7]: Net 17.202.40.1/32 Ifp en0 Ifa 17.202.42.113 [SCOPED]
-Remove old[8]: Net 17.255.96.0/20 Ifp en2 Ifa 17.255.98.164
-Remove old[9]: Net 17.255.96.1/32 Ifp en2 Ifa 17.255.98.164
+Remove old[3]: Net 17.202.40.0/22 Ifp en1 Ifa 17.202.42.111
+Remove old[4]: Net 17.202.40.0/22 Ifp en0 Ifa 17.202.42.113 [SCOPED]
+Remove old[5]: Net 17.202.40.1/32 Ifp en1 Ifa 17.202.42.111
+Remove old[6]: Net 17.202.40.1/32 Ifp en0 Ifa 17.202.42.113 [SCOPED]
+Remove old[7]: Net 17.255.96.0/20 Ifp en2 Ifa 17.255.98.164
+Remove old[8]: Net 17.255.96.1/32 Ifp en2 Ifa 17.255.98.164
+Remove old[9]: Net 169.254.0.0/16 Ifp fw0 Ifa 169.254.11.33 [last]
+Remove old[10]: Net 224.0.0.0/4 Ifp en2 Ifa 17.255.98.164
+Remove old[11]: Net 224.0.0.0/4 Ifp en1 Ifa 17.202.42.111 [SCOPED]
+Remove old[12]: Net 224.0.0.0/4 Ifp en0 Ifa 17.202.42.113 [SCOPED]
+Remove old[13]: Net 224.0.0.0/4 Ifp fw0 Ifa 169.254.11.33 [last] [SCOPED]
+Remove old[14]: Net 255.255.255.255/32 Ifp en2 Ifa 17.255.98.164
+Remove old[15]: Net 255.255.255.255/32 Ifp en1 Ifa 17.202.42.111 [SCOPED]
+Remove old[16]: Net 255.255.255.255/32 Ifp en0 Ifa 17.202.42.113 [SCOPED]
+Remove old[17]: Net 255.255.255.255/32 Ifp fw0 Ifa 169.254.11.33 [last] [SCOPED]
 Add new[5]: Net 10.0.0.1/32 Ifp en1 Ifa 10.0.0.20 [first]
 Add new[0]: Net 0.0.0.0/0 Gate 10.0.0.1 Ifp en1 Ifa 10.0.0.20 [first]
 Add new[6]: Net 10.0.0.1/32 Ifp en0 Ifa 10.0.0.10 [SCOPED]
@@ -11343,10 +16149,16 @@ Add new[2]: Net 0.0.0.0/0 Gate 192.168.2.1 Ifp fw0 Ifa 192.168.2.30 [SCOPED]
 Add new[3]: Net 10.0.0.0/24 Ifp en1 Ifa 10.0.0.20 [first]
 Add new[4]: Net 10.0.0.0/24 Ifp en0 Ifa 10.0.0.10 [SCOPED]
 Add new[7]: Net 192.168.2.0/24 Ifp fw0 Ifa 192.168.2.30
+Add new[9]: Net 224.0.0.0/4 Ifp en1 Ifa 10.0.0.20 [first]
+Add new[10]: Net 224.0.0.0/4 Ifp en0 Ifa 10.0.0.10 [SCOPED]
+Add new[11]: Net 224.0.0.0/4 Ifp fw0 Ifa 192.168.2.30 [SCOPED]
+Add new[12]: Net 255.255.255.255/32 Ifp en1 Ifa 10.0.0.20 [first]
+Add new[13]: Net 255.255.255.255/32 Ifp en0 Ifa 10.0.0.10 [SCOPED]
+Add new[14]: Net 255.255.255.255/32 Ifp fw0 Ifa 192.168.2.30 [SCOPED]
 =================> Apply 'test7', 'test9' End <=================
 
 =================> Apply 'test9', 'test7' Begin <=================
-Old routes ('test9') = <IPv4RouteList[9]> = {
+Old routes ('test9') = <IPv4RouteList[15]> = {
  0. Net 0.0.0.0/0 Gate 10.0.0.1 Ifp en1 Ifa 10.0.0.20 [first]
  1. Net 0.0.0.0/0 Gate 10.0.0.1 Ifp en0 Ifa 10.0.0.10 [SCOPED]
  2. Net 0.0.0.0/0 Gate 192.168.2.1 Ifp fw0 Ifa 192.168.2.30 [SCOPED]
@@ -11356,6 +16168,12 @@ Old routes ('test9') = <IPv4RouteList[9]> = {
  6. Net 10.0.0.1/32 Ifp en0 Ifa 10.0.0.10 [SCOPED]
  7. Net 192.168.2.0/24 Ifp fw0 Ifa 192.168.2.30
  8. Net 192.168.2.1/32 Ifp fw0 Ifa 192.168.2.30
+ 9. Net 224.0.0.0/4 Ifp en1 Ifa 10.0.0.20 [first]
+10. Net 224.0.0.0/4 Ifp en0 Ifa 10.0.0.10 [SCOPED]
+11. Net 224.0.0.0/4 Ifp fw0 Ifa 192.168.2.30 [SCOPED]
+12. Net 255.255.255.255/32 Ifp en1 Ifa 10.0.0.20 [first]
+13. Net 255.255.255.255/32 Ifp en0 Ifa 10.0.0.10 [SCOPED]
+14. Net 255.255.255.255/32 Ifp fw0 Ifa 192.168.2.30 [SCOPED]
 }
 Add new[5]: Net 10.0.0.1/32 Ifp en1 Ifa 10.0.0.20 [first]
 Add new[0]: Net 0.0.0.0/0 Gate 10.0.0.1 Ifp en1 Ifa 10.0.0.20 [first]
@@ -11366,17 +16184,31 @@ Add new[2]: Net 0.0.0.0/0 Gate 192.168.2.1 Ifp fw0 Ifa 192.168.2.30 [SCOPED]
 Add new[3]: Net 10.0.0.0/24 Ifp en1 Ifa 10.0.0.20 [first]
 Add new[4]: Net 10.0.0.0/24 Ifp en0 Ifa 10.0.0.10 [SCOPED]
 Add new[7]: Net 192.168.2.0/24 Ifp fw0 Ifa 192.168.2.30
-New Routes ('test7') = <IPv4RouteList[10]> = {
+Add new[9]: Net 224.0.0.0/4 Ifp en1 Ifa 10.0.0.20 [first]
+Add new[10]: Net 224.0.0.0/4 Ifp en0 Ifa 10.0.0.10 [SCOPED]
+Add new[11]: Net 224.0.0.0/4 Ifp fw0 Ifa 192.168.2.30 [SCOPED]
+Add new[12]: Net 255.255.255.255/32 Ifp en1 Ifa 10.0.0.20 [first]
+Add new[13]: Net 255.255.255.255/32 Ifp en0 Ifa 10.0.0.10 [SCOPED]
+Add new[14]: Net 255.255.255.255/32 Ifp fw0 Ifa 192.168.2.30 [SCOPED]
+New Routes ('test7') = <IPv4RouteList[18]> = {
  0. Net 0.0.0.0/0 Gate 17.255.96.1 Ifp en2 Ifa 17.255.98.164
  1. Net 0.0.0.0/0 Gate 17.202.40.1 Ifp en1 Ifa 17.202.42.111 [SCOPED]
  2. Net 0.0.0.0/0 Gate 17.202.40.1 Ifp en0 Ifa 17.202.42.113 [SCOPED]
- 3. Net 0.0.0.0/0 Ifp fw0 Ifa 169.254.11.33 [SCOPED]
- 4. Net 17.202.40.0/22 Ifp en1 Ifa 17.202.42.111
- 5. Net 17.202.40.0/22 Ifp en0 Ifa 17.202.42.113 [SCOPED]
- 6. Net 17.202.40.1/32 Ifp en1 Ifa 17.202.42.111
- 7. Net 17.202.40.1/32 Ifp en0 Ifa 17.202.42.113 [SCOPED]
- 8. Net 17.255.96.0/20 Ifp en2 Ifa 17.255.98.164
- 9. Net 17.255.96.1/32 Ifp en2 Ifa 17.255.98.164
+ 3. Net 17.202.40.0/22 Ifp en1 Ifa 17.202.42.111
+ 4. Net 17.202.40.0/22 Ifp en0 Ifa 17.202.42.113 [SCOPED]
+ 5. Net 17.202.40.1/32 Ifp en1 Ifa 17.202.42.111
+ 6. Net 17.202.40.1/32 Ifp en0 Ifa 17.202.42.113 [SCOPED]
+ 7. Net 17.255.96.0/20 Ifp en2 Ifa 17.255.98.164
+ 8. Net 17.255.96.1/32 Ifp en2 Ifa 17.255.98.164
+ 9. Net 169.254.0.0/16 Ifp fw0 Ifa 169.254.11.33 [last]
+10. Net 224.0.0.0/4 Ifp en2 Ifa 17.255.98.164
+11. Net 224.0.0.0/4 Ifp en1 Ifa 17.202.42.111 [SCOPED]
+12. Net 224.0.0.0/4 Ifp en0 Ifa 17.202.42.113 [SCOPED]
+13. Net 224.0.0.0/4 Ifp fw0 Ifa 169.254.11.33 [last] [SCOPED]
+14. Net 255.255.255.255/32 Ifp en2 Ifa 17.255.98.164
+15. Net 255.255.255.255/32 Ifp en1 Ifa 17.202.42.111 [SCOPED]
+16. Net 255.255.255.255/32 Ifp en0 Ifa 17.202.42.113 [SCOPED]
+17. Net 255.255.255.255/32 Ifp fw0 Ifa 169.254.11.33 [last] [SCOPED]
 }
 Remove old[0]: Net 0.0.0.0/0 Gate 10.0.0.1 Ifp en1 Ifa 10.0.0.20 [first]
 Remove old[1]: Net 0.0.0.0/0 Gate 10.0.0.1 Ifp en0 Ifa 10.0.0.10 [SCOPED]
@@ -11387,42 +16219,72 @@ Remove old[5]: Net 10.0.0.1/32 Ifp en1 Ifa 10.0.0.20 [first]
 Remove old[6]: Net 10.0.0.1/32 Ifp en0 Ifa 10.0.0.10 [SCOPED]
 Remove old[7]: Net 192.168.2.0/24 Ifp fw0 Ifa 192.168.2.30
 Remove old[8]: Net 192.168.2.1/32 Ifp fw0 Ifa 192.168.2.30
-Add new[9]: Net 17.255.96.1/32 Ifp en2 Ifa 17.255.98.164
+Remove old[9]: Net 224.0.0.0/4 Ifp en1 Ifa 10.0.0.20 [first]
+Remove old[10]: Net 224.0.0.0/4 Ifp en0 Ifa 10.0.0.10 [SCOPED]
+Remove old[11]: Net 224.0.0.0/4 Ifp fw0 Ifa 192.168.2.30 [SCOPED]
+Remove old[12]: Net 255.255.255.255/32 Ifp en1 Ifa 10.0.0.20 [first]
+Remove old[13]: Net 255.255.255.255/32 Ifp en0 Ifa 10.0.0.10 [SCOPED]
+Remove old[14]: Net 255.255.255.255/32 Ifp fw0 Ifa 192.168.2.30 [SCOPED]
+Add new[8]: Net 17.255.96.1/32 Ifp en2 Ifa 17.255.98.164
 Add new[0]: Net 0.0.0.0/0 Gate 17.255.96.1 Ifp en2 Ifa 17.255.98.164
-Add new[6]: Net 17.202.40.1/32 Ifp en1 Ifa 17.202.42.111
+Add new[5]: Net 17.202.40.1/32 Ifp en1 Ifa 17.202.42.111
 Add new[1]: Net 0.0.0.0/0 Gate 17.202.40.1 Ifp en1 Ifa 17.202.42.111 [SCOPED]
-Add new[7]: Net 17.202.40.1/32 Ifp en0 Ifa 17.202.42.113 [SCOPED]
+Add new[6]: Net 17.202.40.1/32 Ifp en0 Ifa 17.202.42.113 [SCOPED]
 Add new[2]: Net 0.0.0.0/0 Gate 17.202.40.1 Ifp en0 Ifa 17.202.42.113 [SCOPED]
-Add new[3]: Net 0.0.0.0/0 Ifp fw0 Ifa 169.254.11.33 [SCOPED]
-Add new[4]: Net 17.202.40.0/22 Ifp en1 Ifa 17.202.42.111
-Add new[5]: Net 17.202.40.0/22 Ifp en0 Ifa 17.202.42.113 [SCOPED]
-Add new[8]: Net 17.255.96.0/20 Ifp en2 Ifa 17.255.98.164
+Add new[3]: Net 17.202.40.0/22 Ifp en1 Ifa 17.202.42.111
+Add new[4]: Net 17.202.40.0/22 Ifp en0 Ifa 17.202.42.113 [SCOPED]
+Add new[7]: Net 17.255.96.0/20 Ifp en2 Ifa 17.255.98.164
+Add new[9]: Net 169.254.0.0/16 Ifp fw0 Ifa 169.254.11.33 [last]
+Add new[10]: Net 224.0.0.0/4 Ifp en2 Ifa 17.255.98.164
+Add new[11]: Net 224.0.0.0/4 Ifp en1 Ifa 17.202.42.111 [SCOPED]
+Add new[12]: Net 224.0.0.0/4 Ifp en0 Ifa 17.202.42.113 [SCOPED]
+Add new[13]: Net 224.0.0.0/4 Ifp fw0 Ifa 169.254.11.33 [last] [SCOPED]
+Add new[14]: Net 255.255.255.255/32 Ifp en2 Ifa 17.255.98.164
+Add new[15]: Net 255.255.255.255/32 Ifp en1 Ifa 17.202.42.111 [SCOPED]
+Add new[16]: Net 255.255.255.255/32 Ifp en0 Ifa 17.202.42.113 [SCOPED]
+Add new[17]: Net 255.255.255.255/32 Ifp fw0 Ifa 169.254.11.33 [last] [SCOPED]
 =================> Apply 'test9', 'test7' End <=================
 
 =================> Apply 'test7', 'test10' Begin <=================
-Old routes ('test7') = <IPv4RouteList[10]> = {
+Old routes ('test7') = <IPv4RouteList[18]> = {
  0. Net 0.0.0.0/0 Gate 17.255.96.1 Ifp en2 Ifa 17.255.98.164
  1. Net 0.0.0.0/0 Gate 17.202.40.1 Ifp en1 Ifa 17.202.42.111 [SCOPED]
  2. Net 0.0.0.0/0 Gate 17.202.40.1 Ifp en0 Ifa 17.202.42.113 [SCOPED]
- 3. Net 0.0.0.0/0 Ifp fw0 Ifa 169.254.11.33 [SCOPED]
- 4. Net 17.202.40.0/22 Ifp en1 Ifa 17.202.42.111
- 5. Net 17.202.40.0/22 Ifp en0 Ifa 17.202.42.113 [SCOPED]
- 6. Net 17.202.40.1/32 Ifp en1 Ifa 17.202.42.111
- 7. Net 17.202.40.1/32 Ifp en0 Ifa 17.202.42.113 [SCOPED]
- 8. Net 17.255.96.0/20 Ifp en2 Ifa 17.255.98.164
- 9. Net 17.255.96.1/32 Ifp en2 Ifa 17.255.98.164
-}
-Add new[9]: Net 17.255.96.1/32 Ifp en2 Ifa 17.255.98.164
+ 3. Net 17.202.40.0/22 Ifp en1 Ifa 17.202.42.111
+ 4. Net 17.202.40.0/22 Ifp en0 Ifa 17.202.42.113 [SCOPED]
+ 5. Net 17.202.40.1/32 Ifp en1 Ifa 17.202.42.111
+ 6. Net 17.202.40.1/32 Ifp en0 Ifa 17.202.42.113 [SCOPED]
+ 7. Net 17.255.96.0/20 Ifp en2 Ifa 17.255.98.164
+ 8. Net 17.255.96.1/32 Ifp en2 Ifa 17.255.98.164
+ 9. Net 169.254.0.0/16 Ifp fw0 Ifa 169.254.11.33 [last]
+10. Net 224.0.0.0/4 Ifp en2 Ifa 17.255.98.164
+11. Net 224.0.0.0/4 Ifp en1 Ifa 17.202.42.111 [SCOPED]
+12. Net 224.0.0.0/4 Ifp en0 Ifa 17.202.42.113 [SCOPED]
+13. Net 224.0.0.0/4 Ifp fw0 Ifa 169.254.11.33 [last] [SCOPED]
+14. Net 255.255.255.255/32 Ifp en2 Ifa 17.255.98.164
+15. Net 255.255.255.255/32 Ifp en1 Ifa 17.202.42.111 [SCOPED]
+16. Net 255.255.255.255/32 Ifp en0 Ifa 17.202.42.113 [SCOPED]
+17. Net 255.255.255.255/32 Ifp fw0 Ifa 169.254.11.33 [last] [SCOPED]
+}
+Add new[8]: Net 17.255.96.1/32 Ifp en2 Ifa 17.255.98.164
 Add new[0]: Net 0.0.0.0/0 Gate 17.255.96.1 Ifp en2 Ifa 17.255.98.164
-Add new[6]: Net 17.202.40.1/32 Ifp en1 Ifa 17.202.42.111
+Add new[5]: Net 17.202.40.1/32 Ifp en1 Ifa 17.202.42.111
 Add new[1]: Net 0.0.0.0/0 Gate 17.202.40.1 Ifp en1 Ifa 17.202.42.111 [SCOPED]
-Add new[7]: Net 17.202.40.1/32 Ifp en0 Ifa 17.202.42.113 [SCOPED]
+Add new[6]: Net 17.202.40.1/32 Ifp en0 Ifa 17.202.42.113 [SCOPED]
 Add new[2]: Net 0.0.0.0/0 Gate 17.202.40.1 Ifp en0 Ifa 17.202.42.113 [SCOPED]
-Add new[3]: Net 0.0.0.0/0 Ifp fw0 Ifa 169.254.11.33 [SCOPED]
-Add new[4]: Net 17.202.40.0/22 Ifp en1 Ifa 17.202.42.111
-Add new[5]: Net 17.202.40.0/22 Ifp en0 Ifa 17.202.42.113 [SCOPED]
-Add new[8]: Net 17.255.96.0/20 Ifp en2 Ifa 17.255.98.164
-New Routes ('test10') = <IPv4RouteList[9]> = {
+Add new[3]: Net 17.202.40.0/22 Ifp en1 Ifa 17.202.42.111
+Add new[4]: Net 17.202.40.0/22 Ifp en0 Ifa 17.202.42.113 [SCOPED]
+Add new[7]: Net 17.255.96.0/20 Ifp en2 Ifa 17.255.98.164
+Add new[9]: Net 169.254.0.0/16 Ifp fw0 Ifa 169.254.11.33 [last]
+Add new[10]: Net 224.0.0.0/4 Ifp en2 Ifa 17.255.98.164
+Add new[11]: Net 224.0.0.0/4 Ifp en1 Ifa 17.202.42.111 [SCOPED]
+Add new[12]: Net 224.0.0.0/4 Ifp en0 Ifa 17.202.42.113 [SCOPED]
+Add new[13]: Net 224.0.0.0/4 Ifp fw0 Ifa 169.254.11.33 [last] [SCOPED]
+Add new[14]: Net 255.255.255.255/32 Ifp en2 Ifa 17.255.98.164
+Add new[15]: Net 255.255.255.255/32 Ifp en1 Ifa 17.202.42.111 [SCOPED]
+Add new[16]: Net 255.255.255.255/32 Ifp en0 Ifa 17.202.42.113 [SCOPED]
+Add new[17]: Net 255.255.255.255/32 Ifp fw0 Ifa 169.254.11.33 [last] [SCOPED]
+New Routes ('test10') = <IPv4RouteList[15]> = {
  0. Net 0.0.0.0/0 Gate 10.0.0.1 Ifp en1 Ifa 10.0.0.20
  1. Net 0.0.0.0/0 Gate 192.168.2.1 Ifp fw0 Ifa 192.168.2.30 [SCOPED]
  2. Net 0.0.0.0/0 Gate 10.0.0.1 Ifp en0 Ifa 10.0.0.10 [last] [SCOPED]
@@ -11432,17 +16294,31 @@ New Routes ('test10') = <IPv4RouteList[9]> = {
  6. Net 10.0.0.1/32 Ifp en0 Ifa 10.0.0.10 [last] [SCOPED]
  7. Net 192.168.2.0/24 Ifp fw0 Ifa 192.168.2.30
  8. Net 192.168.2.1/32 Ifp fw0 Ifa 192.168.2.30
+ 9. Net 224.0.0.0/4 Ifp en1 Ifa 10.0.0.20
+10. Net 224.0.0.0/4 Ifp fw0 Ifa 192.168.2.30 [SCOPED]
+11. Net 224.0.0.0/4 Ifp en0 Ifa 10.0.0.10 [last] [SCOPED]
+12. Net 255.255.255.255/32 Ifp en1 Ifa 10.0.0.20
+13. Net 255.255.255.255/32 Ifp fw0 Ifa 192.168.2.30 [SCOPED]
+14. Net 255.255.255.255/32 Ifp en0 Ifa 10.0.0.10 [last] [SCOPED]
 }
 Remove old[0]: Net 0.0.0.0/0 Gate 17.255.96.1 Ifp en2 Ifa 17.255.98.164
 Remove old[1]: Net 0.0.0.0/0 Gate 17.202.40.1 Ifp en1 Ifa 17.202.42.111 [SCOPED]
 Remove old[2]: Net 0.0.0.0/0 Gate 17.202.40.1 Ifp en0 Ifa 17.202.42.113 [SCOPED]
-Remove old[3]: Net 0.0.0.0/0 Ifp fw0 Ifa 169.254.11.33 [SCOPED]
-Remove old[4]: Net 17.202.40.0/22 Ifp en1 Ifa 17.202.42.111
-Remove old[5]: Net 17.202.40.0/22 Ifp en0 Ifa 17.202.42.113 [SCOPED]
-Remove old[6]: Net 17.202.40.1/32 Ifp en1 Ifa 17.202.42.111
-Remove old[7]: Net 17.202.40.1/32 Ifp en0 Ifa 17.202.42.113 [SCOPED]
-Remove old[8]: Net 17.255.96.0/20 Ifp en2 Ifa 17.255.98.164
-Remove old[9]: Net 17.255.96.1/32 Ifp en2 Ifa 17.255.98.164
+Remove old[3]: Net 17.202.40.0/22 Ifp en1 Ifa 17.202.42.111
+Remove old[4]: Net 17.202.40.0/22 Ifp en0 Ifa 17.202.42.113 [SCOPED]
+Remove old[5]: Net 17.202.40.1/32 Ifp en1 Ifa 17.202.42.111
+Remove old[6]: Net 17.202.40.1/32 Ifp en0 Ifa 17.202.42.113 [SCOPED]
+Remove old[7]: Net 17.255.96.0/20 Ifp en2 Ifa 17.255.98.164
+Remove old[8]: Net 17.255.96.1/32 Ifp en2 Ifa 17.255.98.164
+Remove old[9]: Net 169.254.0.0/16 Ifp fw0 Ifa 169.254.11.33 [last]
+Remove old[10]: Net 224.0.0.0/4 Ifp en2 Ifa 17.255.98.164
+Remove old[11]: Net 224.0.0.0/4 Ifp en1 Ifa 17.202.42.111 [SCOPED]
+Remove old[12]: Net 224.0.0.0/4 Ifp en0 Ifa 17.202.42.113 [SCOPED]
+Remove old[13]: Net 224.0.0.0/4 Ifp fw0 Ifa 169.254.11.33 [last] [SCOPED]
+Remove old[14]: Net 255.255.255.255/32 Ifp en2 Ifa 17.255.98.164
+Remove old[15]: Net 255.255.255.255/32 Ifp en1 Ifa 17.202.42.111 [SCOPED]
+Remove old[16]: Net 255.255.255.255/32 Ifp en0 Ifa 17.202.42.113 [SCOPED]
+Remove old[17]: Net 255.255.255.255/32 Ifp fw0 Ifa 169.254.11.33 [last] [SCOPED]
 Add new[5]: Net 10.0.0.1/32 Ifp en1 Ifa 10.0.0.20
 Add new[0]: Net 0.0.0.0/0 Gate 10.0.0.1 Ifp en1 Ifa 10.0.0.20
 Add new[8]: Net 192.168.2.1/32 Ifp fw0 Ifa 192.168.2.30
@@ -11452,10 +16328,16 @@ Add new[2]: Net 0.0.0.0/0 Gate 10.0.0.1 Ifp en0 Ifa 10.0.0.10 [last] [SCOPED]
 Add new[3]: Net 10.0.0.0/24 Ifp en1 Ifa 10.0.0.20
 Add new[4]: Net 10.0.0.0/24 Ifp en0 Ifa 10.0.0.10 [last] [SCOPED]
 Add new[7]: Net 192.168.2.0/24 Ifp fw0 Ifa 192.168.2.30
+Add new[9]: Net 224.0.0.0/4 Ifp en1 Ifa 10.0.0.20
+Add new[10]: Net 224.0.0.0/4 Ifp fw0 Ifa 192.168.2.30 [SCOPED]
+Add new[11]: Net 224.0.0.0/4 Ifp en0 Ifa 10.0.0.10 [last] [SCOPED]
+Add new[12]: Net 255.255.255.255/32 Ifp en1 Ifa 10.0.0.20
+Add new[13]: Net 255.255.255.255/32 Ifp fw0 Ifa 192.168.2.30 [SCOPED]
+Add new[14]: Net 255.255.255.255/32 Ifp en0 Ifa 10.0.0.10 [last] [SCOPED]
 =================> Apply 'test7', 'test10' End <=================
 
 =================> Apply 'test10', 'test7' Begin <=================
-Old routes ('test10') = <IPv4RouteList[9]> = {
+Old routes ('test10') = <IPv4RouteList[15]> = {
  0. Net 0.0.0.0/0 Gate 10.0.0.1 Ifp en1 Ifa 10.0.0.20
  1. Net 0.0.0.0/0 Gate 192.168.2.1 Ifp fw0 Ifa 192.168.2.30 [SCOPED]
  2. Net 0.0.0.0/0 Gate 10.0.0.1 Ifp en0 Ifa 10.0.0.10 [last] [SCOPED]
@@ -11465,6 +16347,12 @@ Old routes ('test10') = <IPv4RouteList[9]> = {
  6. Net 10.0.0.1/32 Ifp en0 Ifa 10.0.0.10 [last] [SCOPED]
  7. Net 192.168.2.0/24 Ifp fw0 Ifa 192.168.2.30
  8. Net 192.168.2.1/32 Ifp fw0 Ifa 192.168.2.30
+ 9. Net 224.0.0.0/4 Ifp en1 Ifa 10.0.0.20
+10. Net 224.0.0.0/4 Ifp fw0 Ifa 192.168.2.30 [SCOPED]
+11. Net 224.0.0.0/4 Ifp en0 Ifa 10.0.0.10 [last] [SCOPED]
+12. Net 255.255.255.255/32 Ifp en1 Ifa 10.0.0.20
+13. Net 255.255.255.255/32 Ifp fw0 Ifa 192.168.2.30 [SCOPED]
+14. Net 255.255.255.255/32 Ifp en0 Ifa 10.0.0.10 [last] [SCOPED]
 }
 Add new[5]: Net 10.0.0.1/32 Ifp en1 Ifa 10.0.0.20
 Add new[0]: Net 0.0.0.0/0 Gate 10.0.0.1 Ifp en1 Ifa 10.0.0.20
@@ -11475,17 +16363,31 @@ Add new[2]: Net 0.0.0.0/0 Gate 10.0.0.1 Ifp en0 Ifa 10.0.0.10 [last] [SCOPED]
 Add new[3]: Net 10.0.0.0/24 Ifp en1 Ifa 10.0.0.20
 Add new[4]: Net 10.0.0.0/24 Ifp en0 Ifa 10.0.0.10 [last] [SCOPED]
 Add new[7]: Net 192.168.2.0/24 Ifp fw0 Ifa 192.168.2.30
-New Routes ('test7') = <IPv4RouteList[10]> = {
+Add new[9]: Net 224.0.0.0/4 Ifp en1 Ifa 10.0.0.20
+Add new[10]: Net 224.0.0.0/4 Ifp fw0 Ifa 192.168.2.30 [SCOPED]
+Add new[11]: Net 224.0.0.0/4 Ifp en0 Ifa 10.0.0.10 [last] [SCOPED]
+Add new[12]: Net 255.255.255.255/32 Ifp en1 Ifa 10.0.0.20
+Add new[13]: Net 255.255.255.255/32 Ifp fw0 Ifa 192.168.2.30 [SCOPED]
+Add new[14]: Net 255.255.255.255/32 Ifp en0 Ifa 10.0.0.10 [last] [SCOPED]
+New Routes ('test7') = <IPv4RouteList[18]> = {
  0. Net 0.0.0.0/0 Gate 17.255.96.1 Ifp en2 Ifa 17.255.98.164
  1. Net 0.0.0.0/0 Gate 17.202.40.1 Ifp en1 Ifa 17.202.42.111 [SCOPED]
  2. Net 0.0.0.0/0 Gate 17.202.40.1 Ifp en0 Ifa 17.202.42.113 [SCOPED]
- 3. Net 0.0.0.0/0 Ifp fw0 Ifa 169.254.11.33 [SCOPED]
- 4. Net 17.202.40.0/22 Ifp en1 Ifa 17.202.42.111
- 5. Net 17.202.40.0/22 Ifp en0 Ifa 17.202.42.113 [SCOPED]
- 6. Net 17.202.40.1/32 Ifp en1 Ifa 17.202.42.111
- 7. Net 17.202.40.1/32 Ifp en0 Ifa 17.202.42.113 [SCOPED]
- 8. Net 17.255.96.0/20 Ifp en2 Ifa 17.255.98.164
- 9. Net 17.255.96.1/32 Ifp en2 Ifa 17.255.98.164
+ 3. Net 17.202.40.0/22 Ifp en1 Ifa 17.202.42.111
+ 4. Net 17.202.40.0/22 Ifp en0 Ifa 17.202.42.113 [SCOPED]
+ 5. Net 17.202.40.1/32 Ifp en1 Ifa 17.202.42.111
+ 6. Net 17.202.40.1/32 Ifp en0 Ifa 17.202.42.113 [SCOPED]
+ 7. Net 17.255.96.0/20 Ifp en2 Ifa 17.255.98.164
+ 8. Net 17.255.96.1/32 Ifp en2 Ifa 17.255.98.164
+ 9. Net 169.254.0.0/16 Ifp fw0 Ifa 169.254.11.33 [last]
+10. Net 224.0.0.0/4 Ifp en2 Ifa 17.255.98.164
+11. Net 224.0.0.0/4 Ifp en1 Ifa 17.202.42.111 [SCOPED]
+12. Net 224.0.0.0/4 Ifp en0 Ifa 17.202.42.113 [SCOPED]
+13. Net 224.0.0.0/4 Ifp fw0 Ifa 169.254.11.33 [last] [SCOPED]
+14. Net 255.255.255.255/32 Ifp en2 Ifa 17.255.98.164
+15. Net 255.255.255.255/32 Ifp en1 Ifa 17.202.42.111 [SCOPED]
+16. Net 255.255.255.255/32 Ifp en0 Ifa 17.202.42.113 [SCOPED]
+17. Net 255.255.255.255/32 Ifp fw0 Ifa 169.254.11.33 [last] [SCOPED]
 }
 Remove old[0]: Net 0.0.0.0/0 Gate 10.0.0.1 Ifp en1 Ifa 10.0.0.20
 Remove old[1]: Net 0.0.0.0/0 Gate 192.168.2.1 Ifp fw0 Ifa 192.168.2.30 [SCOPED]
@@ -11496,42 +16398,72 @@ Remove old[5]: Net 10.0.0.1/32 Ifp en1 Ifa 10.0.0.20
 Remove old[6]: Net 10.0.0.1/32 Ifp en0 Ifa 10.0.0.10 [last] [SCOPED]
 Remove old[7]: Net 192.168.2.0/24 Ifp fw0 Ifa 192.168.2.30
 Remove old[8]: Net 192.168.2.1/32 Ifp fw0 Ifa 192.168.2.30
-Add new[9]: Net 17.255.96.1/32 Ifp en2 Ifa 17.255.98.164
+Remove old[9]: Net 224.0.0.0/4 Ifp en1 Ifa 10.0.0.20
+Remove old[10]: Net 224.0.0.0/4 Ifp fw0 Ifa 192.168.2.30 [SCOPED]
+Remove old[11]: Net 224.0.0.0/4 Ifp en0 Ifa 10.0.0.10 [last] [SCOPED]
+Remove old[12]: Net 255.255.255.255/32 Ifp en1 Ifa 10.0.0.20
+Remove old[13]: Net 255.255.255.255/32 Ifp fw0 Ifa 192.168.2.30 [SCOPED]
+Remove old[14]: Net 255.255.255.255/32 Ifp en0 Ifa 10.0.0.10 [last] [SCOPED]
+Add new[8]: Net 17.255.96.1/32 Ifp en2 Ifa 17.255.98.164
 Add new[0]: Net 0.0.0.0/0 Gate 17.255.96.1 Ifp en2 Ifa 17.255.98.164
-Add new[6]: Net 17.202.40.1/32 Ifp en1 Ifa 17.202.42.111
+Add new[5]: Net 17.202.40.1/32 Ifp en1 Ifa 17.202.42.111
 Add new[1]: Net 0.0.0.0/0 Gate 17.202.40.1 Ifp en1 Ifa 17.202.42.111 [SCOPED]
-Add new[7]: Net 17.202.40.1/32 Ifp en0 Ifa 17.202.42.113 [SCOPED]
+Add new[6]: Net 17.202.40.1/32 Ifp en0 Ifa 17.202.42.113 [SCOPED]
 Add new[2]: Net 0.0.0.0/0 Gate 17.202.40.1 Ifp en0 Ifa 17.202.42.113 [SCOPED]
-Add new[3]: Net 0.0.0.0/0 Ifp fw0 Ifa 169.254.11.33 [SCOPED]
-Add new[4]: Net 17.202.40.0/22 Ifp en1 Ifa 17.202.42.111
-Add new[5]: Net 17.202.40.0/22 Ifp en0 Ifa 17.202.42.113 [SCOPED]
-Add new[8]: Net 17.255.96.0/20 Ifp en2 Ifa 17.255.98.164
+Add new[3]: Net 17.202.40.0/22 Ifp en1 Ifa 17.202.42.111
+Add new[4]: Net 17.202.40.0/22 Ifp en0 Ifa 17.202.42.113 [SCOPED]
+Add new[7]: Net 17.255.96.0/20 Ifp en2 Ifa 17.255.98.164
+Add new[9]: Net 169.254.0.0/16 Ifp fw0 Ifa 169.254.11.33 [last]
+Add new[10]: Net 224.0.0.0/4 Ifp en2 Ifa 17.255.98.164
+Add new[11]: Net 224.0.0.0/4 Ifp en1 Ifa 17.202.42.111 [SCOPED]
+Add new[12]: Net 224.0.0.0/4 Ifp en0 Ifa 17.202.42.113 [SCOPED]
+Add new[13]: Net 224.0.0.0/4 Ifp fw0 Ifa 169.254.11.33 [last] [SCOPED]
+Add new[14]: Net 255.255.255.255/32 Ifp en2 Ifa 17.255.98.164
+Add new[15]: Net 255.255.255.255/32 Ifp en1 Ifa 17.202.42.111 [SCOPED]
+Add new[16]: Net 255.255.255.255/32 Ifp en0 Ifa 17.202.42.113 [SCOPED]
+Add new[17]: Net 255.255.255.255/32 Ifp fw0 Ifa 169.254.11.33 [last] [SCOPED]
 =================> Apply 'test10', 'test7' End <=================
 
 =================> Apply 'test7', 'test11' Begin <=================
-Old routes ('test7') = <IPv4RouteList[10]> = {
+Old routes ('test7') = <IPv4RouteList[18]> = {
  0. Net 0.0.0.0/0 Gate 17.255.96.1 Ifp en2 Ifa 17.255.98.164
  1. Net 0.0.0.0/0 Gate 17.202.40.1 Ifp en1 Ifa 17.202.42.111 [SCOPED]
  2. Net 0.0.0.0/0 Gate 17.202.40.1 Ifp en0 Ifa 17.202.42.113 [SCOPED]
- 3. Net 0.0.0.0/0 Ifp fw0 Ifa 169.254.11.33 [SCOPED]
- 4. Net 17.202.40.0/22 Ifp en1 Ifa 17.202.42.111
- 5. Net 17.202.40.0/22 Ifp en0 Ifa 17.202.42.113 [SCOPED]
- 6. Net 17.202.40.1/32 Ifp en1 Ifa 17.202.42.111
- 7. Net 17.202.40.1/32 Ifp en0 Ifa 17.202.42.113 [SCOPED]
- 8. Net 17.255.96.0/20 Ifp en2 Ifa 17.255.98.164
- 9. Net 17.255.96.1/32 Ifp en2 Ifa 17.255.98.164
-}
-Add new[9]: Net 17.255.96.1/32 Ifp en2 Ifa 17.255.98.164
+ 3. Net 17.202.40.0/22 Ifp en1 Ifa 17.202.42.111
+ 4. Net 17.202.40.0/22 Ifp en0 Ifa 17.202.42.113 [SCOPED]
+ 5. Net 17.202.40.1/32 Ifp en1 Ifa 17.202.42.111
+ 6. Net 17.202.40.1/32 Ifp en0 Ifa 17.202.42.113 [SCOPED]
+ 7. Net 17.255.96.0/20 Ifp en2 Ifa 17.255.98.164
+ 8. Net 17.255.96.1/32 Ifp en2 Ifa 17.255.98.164
+ 9. Net 169.254.0.0/16 Ifp fw0 Ifa 169.254.11.33 [last]
+10. Net 224.0.0.0/4 Ifp en2 Ifa 17.255.98.164
+11. Net 224.0.0.0/4 Ifp en1 Ifa 17.202.42.111 [SCOPED]
+12. Net 224.0.0.0/4 Ifp en0 Ifa 17.202.42.113 [SCOPED]
+13. Net 224.0.0.0/4 Ifp fw0 Ifa 169.254.11.33 [last] [SCOPED]
+14. Net 255.255.255.255/32 Ifp en2 Ifa 17.255.98.164
+15. Net 255.255.255.255/32 Ifp en1 Ifa 17.202.42.111 [SCOPED]
+16. Net 255.255.255.255/32 Ifp en0 Ifa 17.202.42.113 [SCOPED]
+17. Net 255.255.255.255/32 Ifp fw0 Ifa 169.254.11.33 [last] [SCOPED]
+}
+Add new[8]: Net 17.255.96.1/32 Ifp en2 Ifa 17.255.98.164
 Add new[0]: Net 0.0.0.0/0 Gate 17.255.96.1 Ifp en2 Ifa 17.255.98.164
-Add new[6]: Net 17.202.40.1/32 Ifp en1 Ifa 17.202.42.111
+Add new[5]: Net 17.202.40.1/32 Ifp en1 Ifa 17.202.42.111
 Add new[1]: Net 0.0.0.0/0 Gate 17.202.40.1 Ifp en1 Ifa 17.202.42.111 [SCOPED]
-Add new[7]: Net 17.202.40.1/32 Ifp en0 Ifa 17.202.42.113 [SCOPED]
+Add new[6]: Net 17.202.40.1/32 Ifp en0 Ifa 17.202.42.113 [SCOPED]
 Add new[2]: Net 0.0.0.0/0 Gate 17.202.40.1 Ifp en0 Ifa 17.202.42.113 [SCOPED]
-Add new[3]: Net 0.0.0.0/0 Ifp fw0 Ifa 169.254.11.33 [SCOPED]
-Add new[4]: Net 17.202.40.0/22 Ifp en1 Ifa 17.202.42.111
-Add new[5]: Net 17.202.40.0/22 Ifp en0 Ifa 17.202.42.113 [SCOPED]
-Add new[8]: Net 17.255.96.0/20 Ifp en2 Ifa 17.255.98.164
-New Routes ('test11') = <IPv4RouteList[9]> = {
+Add new[3]: Net 17.202.40.0/22 Ifp en1 Ifa 17.202.42.111
+Add new[4]: Net 17.202.40.0/22 Ifp en0 Ifa 17.202.42.113 [SCOPED]
+Add new[7]: Net 17.255.96.0/20 Ifp en2 Ifa 17.255.98.164
+Add new[9]: Net 169.254.0.0/16 Ifp fw0 Ifa 169.254.11.33 [last]
+Add new[10]: Net 224.0.0.0/4 Ifp en2 Ifa 17.255.98.164
+Add new[11]: Net 224.0.0.0/4 Ifp en1 Ifa 17.202.42.111 [SCOPED]
+Add new[12]: Net 224.0.0.0/4 Ifp en0 Ifa 17.202.42.113 [SCOPED]
+Add new[13]: Net 224.0.0.0/4 Ifp fw0 Ifa 169.254.11.33 [last] [SCOPED]
+Add new[14]: Net 255.255.255.255/32 Ifp en2 Ifa 17.255.98.164
+Add new[15]: Net 255.255.255.255/32 Ifp en1 Ifa 17.202.42.111 [SCOPED]
+Add new[16]: Net 255.255.255.255/32 Ifp en0 Ifa 17.202.42.113 [SCOPED]
+Add new[17]: Net 255.255.255.255/32 Ifp fw0 Ifa 169.254.11.33 [last] [SCOPED]
+New Routes ('test11') = <IPv4RouteList[15]> = {
  0. Net 0.0.0.0/0 Gate 10.0.0.1 Ifp en1 Ifa 10.0.0.20
  1. Net 0.0.0.0/0 Gate 192.168.2.1 Ifp fw0 Ifa 192.168.2.30 [SCOPED]
  2. Net 0.0.0.0/0 Gate 10.0.0.1 Ifp en0 Ifa 10.0.0.10 [never] [SCOPED]
@@ -11541,17 +16473,31 @@ New Routes ('test11') = <IPv4RouteList[9]> = {
  6. Net 10.0.0.1/32 Ifp en0 Ifa 10.0.0.10 [last] [SCOPED]
  7. Net 192.168.2.0/24 Ifp fw0 Ifa 192.168.2.30
  8. Net 192.168.2.1/32 Ifp fw0 Ifa 192.168.2.30
+ 9. Net 224.0.0.0/4 Ifp en1 Ifa 10.0.0.20
+10. Net 224.0.0.0/4 Ifp fw0 Ifa 192.168.2.30 [SCOPED]
+11. Net 224.0.0.0/4 Ifp en0 Ifa 10.0.0.10 [last] [SCOPED]
+12. Net 255.255.255.255/32 Ifp en1 Ifa 10.0.0.20
+13. Net 255.255.255.255/32 Ifp fw0 Ifa 192.168.2.30 [SCOPED]
+14. Net 255.255.255.255/32 Ifp en0 Ifa 10.0.0.10 [last] [SCOPED]
 }
 Remove old[0]: Net 0.0.0.0/0 Gate 17.255.96.1 Ifp en2 Ifa 17.255.98.164
 Remove old[1]: Net 0.0.0.0/0 Gate 17.202.40.1 Ifp en1 Ifa 17.202.42.111 [SCOPED]
 Remove old[2]: Net 0.0.0.0/0 Gate 17.202.40.1 Ifp en0 Ifa 17.202.42.113 [SCOPED]
-Remove old[3]: Net 0.0.0.0/0 Ifp fw0 Ifa 169.254.11.33 [SCOPED]
-Remove old[4]: Net 17.202.40.0/22 Ifp en1 Ifa 17.202.42.111
-Remove old[5]: Net 17.202.40.0/22 Ifp en0 Ifa 17.202.42.113 [SCOPED]
-Remove old[6]: Net 17.202.40.1/32 Ifp en1 Ifa 17.202.42.111
-Remove old[7]: Net 17.202.40.1/32 Ifp en0 Ifa 17.202.42.113 [SCOPED]
-Remove old[8]: Net 17.255.96.0/20 Ifp en2 Ifa 17.255.98.164
-Remove old[9]: Net 17.255.96.1/32 Ifp en2 Ifa 17.255.98.164
+Remove old[3]: Net 17.202.40.0/22 Ifp en1 Ifa 17.202.42.111
+Remove old[4]: Net 17.202.40.0/22 Ifp en0 Ifa 17.202.42.113 [SCOPED]
+Remove old[5]: Net 17.202.40.1/32 Ifp en1 Ifa 17.202.42.111
+Remove old[6]: Net 17.202.40.1/32 Ifp en0 Ifa 17.202.42.113 [SCOPED]
+Remove old[7]: Net 17.255.96.0/20 Ifp en2 Ifa 17.255.98.164
+Remove old[8]: Net 17.255.96.1/32 Ifp en2 Ifa 17.255.98.164
+Remove old[9]: Net 169.254.0.0/16 Ifp fw0 Ifa 169.254.11.33 [last]
+Remove old[10]: Net 224.0.0.0/4 Ifp en2 Ifa 17.255.98.164
+Remove old[11]: Net 224.0.0.0/4 Ifp en1 Ifa 17.202.42.111 [SCOPED]
+Remove old[12]: Net 224.0.0.0/4 Ifp en0 Ifa 17.202.42.113 [SCOPED]
+Remove old[13]: Net 224.0.0.0/4 Ifp fw0 Ifa 169.254.11.33 [last] [SCOPED]
+Remove old[14]: Net 255.255.255.255/32 Ifp en2 Ifa 17.255.98.164
+Remove old[15]: Net 255.255.255.255/32 Ifp en1 Ifa 17.202.42.111 [SCOPED]
+Remove old[16]: Net 255.255.255.255/32 Ifp en0 Ifa 17.202.42.113 [SCOPED]
+Remove old[17]: Net 255.255.255.255/32 Ifp fw0 Ifa 169.254.11.33 [last] [SCOPED]
 Add new[5]: Net 10.0.0.1/32 Ifp en1 Ifa 10.0.0.20
 Add new[0]: Net 0.0.0.0/0 Gate 10.0.0.1 Ifp en1 Ifa 10.0.0.20
 Add new[8]: Net 192.168.2.1/32 Ifp fw0 Ifa 192.168.2.30
@@ -11561,10 +16507,16 @@ Add new[2]: Net 0.0.0.0/0 Gate 10.0.0.1 Ifp en0 Ifa 10.0.0.10 [never] [SCOPED]
 Add new[3]: Net 10.0.0.0/24 Ifp en1 Ifa 10.0.0.20
 Add new[4]: Net 10.0.0.0/24 Ifp en0 Ifa 10.0.0.10 [last] [SCOPED]
 Add new[7]: Net 192.168.2.0/24 Ifp fw0 Ifa 192.168.2.30
+Add new[9]: Net 224.0.0.0/4 Ifp en1 Ifa 10.0.0.20
+Add new[10]: Net 224.0.0.0/4 Ifp fw0 Ifa 192.168.2.30 [SCOPED]
+Add new[11]: Net 224.0.0.0/4 Ifp en0 Ifa 10.0.0.10 [last] [SCOPED]
+Add new[12]: Net 255.255.255.255/32 Ifp en1 Ifa 10.0.0.20
+Add new[13]: Net 255.255.255.255/32 Ifp fw0 Ifa 192.168.2.30 [SCOPED]
+Add new[14]: Net 255.255.255.255/32 Ifp en0 Ifa 10.0.0.10 [last] [SCOPED]
 =================> Apply 'test7', 'test11' End <=================
 
 =================> Apply 'test11', 'test7' Begin <=================
-Old routes ('test11') = <IPv4RouteList[9]> = {
+Old routes ('test11') = <IPv4RouteList[15]> = {
  0. Net 0.0.0.0/0 Gate 10.0.0.1 Ifp en1 Ifa 10.0.0.20
  1. Net 0.0.0.0/0 Gate 192.168.2.1 Ifp fw0 Ifa 192.168.2.30 [SCOPED]
  2. Net 0.0.0.0/0 Gate 10.0.0.1 Ifp en0 Ifa 10.0.0.10 [never] [SCOPED]
@@ -11574,6 +16526,12 @@ Old routes ('test11') = <IPv4RouteList[9]> = {
  6. Net 10.0.0.1/32 Ifp en0 Ifa 10.0.0.10 [last] [SCOPED]
  7. Net 192.168.2.0/24 Ifp fw0 Ifa 192.168.2.30
  8. Net 192.168.2.1/32 Ifp fw0 Ifa 192.168.2.30
+ 9. Net 224.0.0.0/4 Ifp en1 Ifa 10.0.0.20
+10. Net 224.0.0.0/4 Ifp fw0 Ifa 192.168.2.30 [SCOPED]
+11. Net 224.0.0.0/4 Ifp en0 Ifa 10.0.0.10 [last] [SCOPED]
+12. Net 255.255.255.255/32 Ifp en1 Ifa 10.0.0.20
+13. Net 255.255.255.255/32 Ifp fw0 Ifa 192.168.2.30 [SCOPED]
+14. Net 255.255.255.255/32 Ifp en0 Ifa 10.0.0.10 [last] [SCOPED]
 }
 Add new[5]: Net 10.0.0.1/32 Ifp en1 Ifa 10.0.0.20
 Add new[0]: Net 0.0.0.0/0 Gate 10.0.0.1 Ifp en1 Ifa 10.0.0.20
@@ -11584,17 +16542,31 @@ Add new[2]: Net 0.0.0.0/0 Gate 10.0.0.1 Ifp en0 Ifa 10.0.0.10 [never] [SCOPED]
 Add new[3]: Net 10.0.0.0/24 Ifp en1 Ifa 10.0.0.20
 Add new[4]: Net 10.0.0.0/24 Ifp en0 Ifa 10.0.0.10 [last] [SCOPED]
 Add new[7]: Net 192.168.2.0/24 Ifp fw0 Ifa 192.168.2.30
-New Routes ('test7') = <IPv4RouteList[10]> = {
+Add new[9]: Net 224.0.0.0/4 Ifp en1 Ifa 10.0.0.20
+Add new[10]: Net 224.0.0.0/4 Ifp fw0 Ifa 192.168.2.30 [SCOPED]
+Add new[11]: Net 224.0.0.0/4 Ifp en0 Ifa 10.0.0.10 [last] [SCOPED]
+Add new[12]: Net 255.255.255.255/32 Ifp en1 Ifa 10.0.0.20
+Add new[13]: Net 255.255.255.255/32 Ifp fw0 Ifa 192.168.2.30 [SCOPED]
+Add new[14]: Net 255.255.255.255/32 Ifp en0 Ifa 10.0.0.10 [last] [SCOPED]
+New Routes ('test7') = <IPv4RouteList[18]> = {
  0. Net 0.0.0.0/0 Gate 17.255.96.1 Ifp en2 Ifa 17.255.98.164
  1. Net 0.0.0.0/0 Gate 17.202.40.1 Ifp en1 Ifa 17.202.42.111 [SCOPED]
  2. Net 0.0.0.0/0 Gate 17.202.40.1 Ifp en0 Ifa 17.202.42.113 [SCOPED]
- 3. Net 0.0.0.0/0 Ifp fw0 Ifa 169.254.11.33 [SCOPED]
- 4. Net 17.202.40.0/22 Ifp en1 Ifa 17.202.42.111
- 5. Net 17.202.40.0/22 Ifp en0 Ifa 17.202.42.113 [SCOPED]
- 6. Net 17.202.40.1/32 Ifp en1 Ifa 17.202.42.111
- 7. Net 17.202.40.1/32 Ifp en0 Ifa 17.202.42.113 [SCOPED]
- 8. Net 17.255.96.0/20 Ifp en2 Ifa 17.255.98.164
- 9. Net 17.255.96.1/32 Ifp en2 Ifa 17.255.98.164
+ 3. Net 17.202.40.0/22 Ifp en1 Ifa 17.202.42.111
+ 4. Net 17.202.40.0/22 Ifp en0 Ifa 17.202.42.113 [SCOPED]
+ 5. Net 17.202.40.1/32 Ifp en1 Ifa 17.202.42.111
+ 6. Net 17.202.40.1/32 Ifp en0 Ifa 17.202.42.113 [SCOPED]
+ 7. Net 17.255.96.0/20 Ifp en2 Ifa 17.255.98.164
+ 8. Net 17.255.96.1/32 Ifp en2 Ifa 17.255.98.164
+ 9. Net 169.254.0.0/16 Ifp fw0 Ifa 169.254.11.33 [last]
+10. Net 224.0.0.0/4 Ifp en2 Ifa 17.255.98.164
+11. Net 224.0.0.0/4 Ifp en1 Ifa 17.202.42.111 [SCOPED]
+12. Net 224.0.0.0/4 Ifp en0 Ifa 17.202.42.113 [SCOPED]
+13. Net 224.0.0.0/4 Ifp fw0 Ifa 169.254.11.33 [last] [SCOPED]
+14. Net 255.255.255.255/32 Ifp en2 Ifa 17.255.98.164
+15. Net 255.255.255.255/32 Ifp en1 Ifa 17.202.42.111 [SCOPED]
+16. Net 255.255.255.255/32 Ifp en0 Ifa 17.202.42.113 [SCOPED]
+17. Net 255.255.255.255/32 Ifp fw0 Ifa 169.254.11.33 [last] [SCOPED]
 }
 Remove old[0]: Net 0.0.0.0/0 Gate 10.0.0.1 Ifp en1 Ifa 10.0.0.20
 Remove old[1]: Net 0.0.0.0/0 Gate 192.168.2.1 Ifp fw0 Ifa 192.168.2.30 [SCOPED]
@@ -11605,75 +16577,125 @@ Remove old[5]: Net 10.0.0.1/32 Ifp en1 Ifa 10.0.0.20
 Remove old[6]: Net 10.0.0.1/32 Ifp en0 Ifa 10.0.0.10 [last] [SCOPED]
 Remove old[7]: Net 192.168.2.0/24 Ifp fw0 Ifa 192.168.2.30
 Remove old[8]: Net 192.168.2.1/32 Ifp fw0 Ifa 192.168.2.30
-Add new[9]: Net 17.255.96.1/32 Ifp en2 Ifa 17.255.98.164
+Remove old[9]: Net 224.0.0.0/4 Ifp en1 Ifa 10.0.0.20
+Remove old[10]: Net 224.0.0.0/4 Ifp fw0 Ifa 192.168.2.30 [SCOPED]
+Remove old[11]: Net 224.0.0.0/4 Ifp en0 Ifa 10.0.0.10 [last] [SCOPED]
+Remove old[12]: Net 255.255.255.255/32 Ifp en1 Ifa 10.0.0.20
+Remove old[13]: Net 255.255.255.255/32 Ifp fw0 Ifa 192.168.2.30 [SCOPED]
+Remove old[14]: Net 255.255.255.255/32 Ifp en0 Ifa 10.0.0.10 [last] [SCOPED]
+Add new[8]: Net 17.255.96.1/32 Ifp en2 Ifa 17.255.98.164
 Add new[0]: Net 0.0.0.0/0 Gate 17.255.96.1 Ifp en2 Ifa 17.255.98.164
-Add new[6]: Net 17.202.40.1/32 Ifp en1 Ifa 17.202.42.111
+Add new[5]: Net 17.202.40.1/32 Ifp en1 Ifa 17.202.42.111
 Add new[1]: Net 0.0.0.0/0 Gate 17.202.40.1 Ifp en1 Ifa 17.202.42.111 [SCOPED]
-Add new[7]: Net 17.202.40.1/32 Ifp en0 Ifa 17.202.42.113 [SCOPED]
+Add new[6]: Net 17.202.40.1/32 Ifp en0 Ifa 17.202.42.113 [SCOPED]
 Add new[2]: Net 0.0.0.0/0 Gate 17.202.40.1 Ifp en0 Ifa 17.202.42.113 [SCOPED]
-Add new[3]: Net 0.0.0.0/0 Ifp fw0 Ifa 169.254.11.33 [SCOPED]
-Add new[4]: Net 17.202.40.0/22 Ifp en1 Ifa 17.202.42.111
-Add new[5]: Net 17.202.40.0/22 Ifp en0 Ifa 17.202.42.113 [SCOPED]
-Add new[8]: Net 17.255.96.0/20 Ifp en2 Ifa 17.255.98.164
+Add new[3]: Net 17.202.40.0/22 Ifp en1 Ifa 17.202.42.111
+Add new[4]: Net 17.202.40.0/22 Ifp en0 Ifa 17.202.42.113 [SCOPED]
+Add new[7]: Net 17.255.96.0/20 Ifp en2 Ifa 17.255.98.164
+Add new[9]: Net 169.254.0.0/16 Ifp fw0 Ifa 169.254.11.33 [last]
+Add new[10]: Net 224.0.0.0/4 Ifp en2 Ifa 17.255.98.164
+Add new[11]: Net 224.0.0.0/4 Ifp en1 Ifa 17.202.42.111 [SCOPED]
+Add new[12]: Net 224.0.0.0/4 Ifp en0 Ifa 17.202.42.113 [SCOPED]
+Add new[13]: Net 224.0.0.0/4 Ifp fw0 Ifa 169.254.11.33 [last] [SCOPED]
+Add new[14]: Net 255.255.255.255/32 Ifp en2 Ifa 17.255.98.164
+Add new[15]: Net 255.255.255.255/32 Ifp en1 Ifa 17.202.42.111 [SCOPED]
+Add new[16]: Net 255.255.255.255/32 Ifp en0 Ifa 17.202.42.113 [SCOPED]
+Add new[17]: Net 255.255.255.255/32 Ifp fw0 Ifa 169.254.11.33 [last] [SCOPED]
 =================> Apply 'test11', 'test7' End <=================
 
 =================> Apply 'test7', 'test12' Begin <=================
-Old routes ('test7') = <IPv4RouteList[10]> = {
+Old routes ('test7') = <IPv4RouteList[18]> = {
  0. Net 0.0.0.0/0 Gate 17.255.96.1 Ifp en2 Ifa 17.255.98.164
  1. Net 0.0.0.0/0 Gate 17.202.40.1 Ifp en1 Ifa 17.202.42.111 [SCOPED]
  2. Net 0.0.0.0/0 Gate 17.202.40.1 Ifp en0 Ifa 17.202.42.113 [SCOPED]
- 3. Net 0.0.0.0/0 Ifp fw0 Ifa 169.254.11.33 [SCOPED]
- 4. Net 17.202.40.0/22 Ifp en1 Ifa 17.202.42.111
- 5. Net 17.202.40.0/22 Ifp en0 Ifa 17.202.42.113 [SCOPED]
- 6. Net 17.202.40.1/32 Ifp en1 Ifa 17.202.42.111
- 7. Net 17.202.40.1/32 Ifp en0 Ifa 17.202.42.113 [SCOPED]
- 8. Net 17.255.96.0/20 Ifp en2 Ifa 17.255.98.164
- 9. Net 17.255.96.1/32 Ifp en2 Ifa 17.255.98.164
-}
-Add new[9]: Net 17.255.96.1/32 Ifp en2 Ifa 17.255.98.164
+ 3. Net 17.202.40.0/22 Ifp en1 Ifa 17.202.42.111
+ 4. Net 17.202.40.0/22 Ifp en0 Ifa 17.202.42.113 [SCOPED]
+ 5. Net 17.202.40.1/32 Ifp en1 Ifa 17.202.42.111
+ 6. Net 17.202.40.1/32 Ifp en0 Ifa 17.202.42.113 [SCOPED]
+ 7. Net 17.255.96.0/20 Ifp en2 Ifa 17.255.98.164
+ 8. Net 17.255.96.1/32 Ifp en2 Ifa 17.255.98.164
+ 9. Net 169.254.0.0/16 Ifp fw0 Ifa 169.254.11.33 [last]
+10. Net 224.0.0.0/4 Ifp en2 Ifa 17.255.98.164
+11. Net 224.0.0.0/4 Ifp en1 Ifa 17.202.42.111 [SCOPED]
+12. Net 224.0.0.0/4 Ifp en0 Ifa 17.202.42.113 [SCOPED]
+13. Net 224.0.0.0/4 Ifp fw0 Ifa 169.254.11.33 [last] [SCOPED]
+14. Net 255.255.255.255/32 Ifp en2 Ifa 17.255.98.164
+15. Net 255.255.255.255/32 Ifp en1 Ifa 17.202.42.111 [SCOPED]
+16. Net 255.255.255.255/32 Ifp en0 Ifa 17.202.42.113 [SCOPED]
+17. Net 255.255.255.255/32 Ifp fw0 Ifa 169.254.11.33 [last] [SCOPED]
+}
+Add new[8]: Net 17.255.96.1/32 Ifp en2 Ifa 17.255.98.164
 Add new[0]: Net 0.0.0.0/0 Gate 17.255.96.1 Ifp en2 Ifa 17.255.98.164
-Add new[6]: Net 17.202.40.1/32 Ifp en1 Ifa 17.202.42.111
+Add new[5]: Net 17.202.40.1/32 Ifp en1 Ifa 17.202.42.111
 Add new[1]: Net 0.0.0.0/0 Gate 17.202.40.1 Ifp en1 Ifa 17.202.42.111 [SCOPED]
-Add new[7]: Net 17.202.40.1/32 Ifp en0 Ifa 17.202.42.113 [SCOPED]
+Add new[6]: Net 17.202.40.1/32 Ifp en0 Ifa 17.202.42.113 [SCOPED]
 Add new[2]: Net 0.0.0.0/0 Gate 17.202.40.1 Ifp en0 Ifa 17.202.42.113 [SCOPED]
-Add new[3]: Net 0.0.0.0/0 Ifp fw0 Ifa 169.254.11.33 [SCOPED]
-Add new[4]: Net 17.202.40.0/22 Ifp en1 Ifa 17.202.42.111
-Add new[5]: Net 17.202.40.0/22 Ifp en0 Ifa 17.202.42.113 [SCOPED]
-Add new[8]: Net 17.255.96.0/20 Ifp en2 Ifa 17.255.98.164
-New Routes ('test12') = <IPv4RouteList[6]> = {
+Add new[3]: Net 17.202.40.0/22 Ifp en1 Ifa 17.202.42.111
+Add new[4]: Net 17.202.40.0/22 Ifp en0 Ifa 17.202.42.113 [SCOPED]
+Add new[7]: Net 17.255.96.0/20 Ifp en2 Ifa 17.255.98.164
+Add new[9]: Net 169.254.0.0/16 Ifp fw0 Ifa 169.254.11.33 [last]
+Add new[10]: Net 224.0.0.0/4 Ifp en2 Ifa 17.255.98.164
+Add new[11]: Net 224.0.0.0/4 Ifp en1 Ifa 17.202.42.111 [SCOPED]
+Add new[12]: Net 224.0.0.0/4 Ifp en0 Ifa 17.202.42.113 [SCOPED]
+Add new[13]: Net 224.0.0.0/4 Ifp fw0 Ifa 169.254.11.33 [last] [SCOPED]
+Add new[14]: Net 255.255.255.255/32 Ifp en2 Ifa 17.255.98.164
+Add new[15]: Net 255.255.255.255/32 Ifp en1 Ifa 17.202.42.111 [SCOPED]
+Add new[16]: Net 255.255.255.255/32 Ifp en0 Ifa 17.202.42.113 [SCOPED]
+Add new[17]: Net 255.255.255.255/32 Ifp fw0 Ifa 169.254.11.33 [last] [SCOPED]
+New Routes ('test12') = <IPv4RouteList[10]> = {
  0. Net 0.0.0.0/0 Gate 10.0.0.1 Ifp en0 Ifa 10.0.0.10
  1. Net 0.0.0.0/0 Gate 10.0.0.1 Ifp en1 Ifa 10.0.0.20 [SCOPED]
  2. Net 10.0.0.0/24 Ifp en0 Ifa 10.0.0.10
  3. Net 10.0.0.0/24 Ifp en1 Ifa 10.0.0.20 [SCOPED]
  4. Net 10.0.0.1/32 Ifp en0 Ifa 10.0.0.10
  5. Net 10.0.0.1/32 Ifp en1 Ifa 10.0.0.20 [SCOPED]
+ 6. Net 224.0.0.0/4 Ifp en0 Ifa 10.0.0.10
+ 7. Net 224.0.0.0/4 Ifp en1 Ifa 10.0.0.20 [SCOPED]
+ 8. Net 255.255.255.255/32 Ifp en0 Ifa 10.0.0.10
+ 9. Net 255.255.255.255/32 Ifp en1 Ifa 10.0.0.20 [SCOPED]
 }
 Remove old[0]: Net 0.0.0.0/0 Gate 17.255.96.1 Ifp en2 Ifa 17.255.98.164
 Remove old[1]: Net 0.0.0.0/0 Gate 17.202.40.1 Ifp en1 Ifa 17.202.42.111 [SCOPED]
 Remove old[2]: Net 0.0.0.0/0 Gate 17.202.40.1 Ifp en0 Ifa 17.202.42.113 [SCOPED]
-Remove old[3]: Net 0.0.0.0/0 Ifp fw0 Ifa 169.254.11.33 [SCOPED]
-Remove old[4]: Net 17.202.40.0/22 Ifp en1 Ifa 17.202.42.111
-Remove old[5]: Net 17.202.40.0/22 Ifp en0 Ifa 17.202.42.113 [SCOPED]
-Remove old[6]: Net 17.202.40.1/32 Ifp en1 Ifa 17.202.42.111
-Remove old[7]: Net 17.202.40.1/32 Ifp en0 Ifa 17.202.42.113 [SCOPED]
-Remove old[8]: Net 17.255.96.0/20 Ifp en2 Ifa 17.255.98.164
-Remove old[9]: Net 17.255.96.1/32 Ifp en2 Ifa 17.255.98.164
+Remove old[3]: Net 17.202.40.0/22 Ifp en1 Ifa 17.202.42.111
+Remove old[4]: Net 17.202.40.0/22 Ifp en0 Ifa 17.202.42.113 [SCOPED]
+Remove old[5]: Net 17.202.40.1/32 Ifp en1 Ifa 17.202.42.111
+Remove old[6]: Net 17.202.40.1/32 Ifp en0 Ifa 17.202.42.113 [SCOPED]
+Remove old[7]: Net 17.255.96.0/20 Ifp en2 Ifa 17.255.98.164
+Remove old[8]: Net 17.255.96.1/32 Ifp en2 Ifa 17.255.98.164
+Remove old[9]: Net 169.254.0.0/16 Ifp fw0 Ifa 169.254.11.33 [last]
+Remove old[10]: Net 224.0.0.0/4 Ifp en2 Ifa 17.255.98.164
+Remove old[11]: Net 224.0.0.0/4 Ifp en1 Ifa 17.202.42.111 [SCOPED]
+Remove old[12]: Net 224.0.0.0/4 Ifp en0 Ifa 17.202.42.113 [SCOPED]
+Remove old[13]: Net 224.0.0.0/4 Ifp fw0 Ifa 169.254.11.33 [last] [SCOPED]
+Remove old[14]: Net 255.255.255.255/32 Ifp en2 Ifa 17.255.98.164
+Remove old[15]: Net 255.255.255.255/32 Ifp en1 Ifa 17.202.42.111 [SCOPED]
+Remove old[16]: Net 255.255.255.255/32 Ifp en0 Ifa 17.202.42.113 [SCOPED]
+Remove old[17]: Net 255.255.255.255/32 Ifp fw0 Ifa 169.254.11.33 [last] [SCOPED]
 Add new[4]: Net 10.0.0.1/32 Ifp en0 Ifa 10.0.0.10
 Add new[0]: Net 0.0.0.0/0 Gate 10.0.0.1 Ifp en0 Ifa 10.0.0.10
 Add new[5]: Net 10.0.0.1/32 Ifp en1 Ifa 10.0.0.20 [SCOPED]
 Add new[1]: Net 0.0.0.0/0 Gate 10.0.0.1 Ifp en1 Ifa 10.0.0.20 [SCOPED]
 Add new[2]: Net 10.0.0.0/24 Ifp en0 Ifa 10.0.0.10
 Add new[3]: Net 10.0.0.0/24 Ifp en1 Ifa 10.0.0.20 [SCOPED]
+Add new[6]: Net 224.0.0.0/4 Ifp en0 Ifa 10.0.0.10
+Add new[7]: Net 224.0.0.0/4 Ifp en1 Ifa 10.0.0.20 [SCOPED]
+Add new[8]: Net 255.255.255.255/32 Ifp en0 Ifa 10.0.0.10
+Add new[9]: Net 255.255.255.255/32 Ifp en1 Ifa 10.0.0.20 [SCOPED]
 =================> Apply 'test7', 'test12' End <=================
 
 =================> Apply 'test12', 'test7' Begin <=================
-Old routes ('test12') = <IPv4RouteList[6]> = {
+Old routes ('test12') = <IPv4RouteList[10]> = {
  0. Net 0.0.0.0/0 Gate 10.0.0.1 Ifp en0 Ifa 10.0.0.10
  1. Net 0.0.0.0/0 Gate 10.0.0.1 Ifp en1 Ifa 10.0.0.20 [SCOPED]
  2. Net 10.0.0.0/24 Ifp en0 Ifa 10.0.0.10
  3. Net 10.0.0.0/24 Ifp en1 Ifa 10.0.0.20 [SCOPED]
  4. Net 10.0.0.1/32 Ifp en0 Ifa 10.0.0.10
  5. Net 10.0.0.1/32 Ifp en1 Ifa 10.0.0.20 [SCOPED]
+ 6. Net 224.0.0.0/4 Ifp en0 Ifa 10.0.0.10
+ 7. Net 224.0.0.0/4 Ifp en1 Ifa 10.0.0.20 [SCOPED]
+ 8. Net 255.255.255.255/32 Ifp en0 Ifa 10.0.0.10
+ 9. Net 255.255.255.255/32 Ifp en1 Ifa 10.0.0.20 [SCOPED]
 }
 Add new[4]: Net 10.0.0.1/32 Ifp en0 Ifa 10.0.0.10
 Add new[0]: Net 0.0.0.0/0 Gate 10.0.0.1 Ifp en0 Ifa 10.0.0.10
@@ -11681,17 +16703,29 @@ Add new[5]: Net 10.0.0.1/32 Ifp en1 Ifa 10.0.0.20 [SCOPED]
 Add new[1]: Net 0.0.0.0/0 Gate 10.0.0.1 Ifp en1 Ifa 10.0.0.20 [SCOPED]
 Add new[2]: Net 10.0.0.0/24 Ifp en0 Ifa 10.0.0.10
 Add new[3]: Net 10.0.0.0/24 Ifp en1 Ifa 10.0.0.20 [SCOPED]
-New Routes ('test7') = <IPv4RouteList[10]> = {
+Add new[6]: Net 224.0.0.0/4 Ifp en0 Ifa 10.0.0.10
+Add new[7]: Net 224.0.0.0/4 Ifp en1 Ifa 10.0.0.20 [SCOPED]
+Add new[8]: Net 255.255.255.255/32 Ifp en0 Ifa 10.0.0.10
+Add new[9]: Net 255.255.255.255/32 Ifp en1 Ifa 10.0.0.20 [SCOPED]
+New Routes ('test7') = <IPv4RouteList[18]> = {
  0. Net 0.0.0.0/0 Gate 17.255.96.1 Ifp en2 Ifa 17.255.98.164
  1. Net 0.0.0.0/0 Gate 17.202.40.1 Ifp en1 Ifa 17.202.42.111 [SCOPED]
  2. Net 0.0.0.0/0 Gate 17.202.40.1 Ifp en0 Ifa 17.202.42.113 [SCOPED]
- 3. Net 0.0.0.0/0 Ifp fw0 Ifa 169.254.11.33 [SCOPED]
- 4. Net 17.202.40.0/22 Ifp en1 Ifa 17.202.42.111
- 5. Net 17.202.40.0/22 Ifp en0 Ifa 17.202.42.113 [SCOPED]
- 6. Net 17.202.40.1/32 Ifp en1 Ifa 17.202.42.111
- 7. Net 17.202.40.1/32 Ifp en0 Ifa 17.202.42.113 [SCOPED]
- 8. Net 17.255.96.0/20 Ifp en2 Ifa 17.255.98.164
- 9. Net 17.255.96.1/32 Ifp en2 Ifa 17.255.98.164
+ 3. Net 17.202.40.0/22 Ifp en1 Ifa 17.202.42.111
+ 4. Net 17.202.40.0/22 Ifp en0 Ifa 17.202.42.113 [SCOPED]
+ 5. Net 17.202.40.1/32 Ifp en1 Ifa 17.202.42.111
+ 6. Net 17.202.40.1/32 Ifp en0 Ifa 17.202.42.113 [SCOPED]
+ 7. Net 17.255.96.0/20 Ifp en2 Ifa 17.255.98.164
+ 8. Net 17.255.96.1/32 Ifp en2 Ifa 17.255.98.164
+ 9. Net 169.254.0.0/16 Ifp fw0 Ifa 169.254.11.33 [last]
+10. Net 224.0.0.0/4 Ifp en2 Ifa 17.255.98.164
+11. Net 224.0.0.0/4 Ifp en1 Ifa 17.202.42.111 [SCOPED]
+12. Net 224.0.0.0/4 Ifp en0 Ifa 17.202.42.113 [SCOPED]
+13. Net 224.0.0.0/4 Ifp fw0 Ifa 169.254.11.33 [last] [SCOPED]
+14. Net 255.255.255.255/32 Ifp en2 Ifa 17.255.98.164
+15. Net 255.255.255.255/32 Ifp en1 Ifa 17.202.42.111 [SCOPED]
+16. Net 255.255.255.255/32 Ifp en0 Ifa 17.202.42.113 [SCOPED]
+17. Net 255.255.255.255/32 Ifp fw0 Ifa 169.254.11.33 [last] [SCOPED]
 }
 Remove old[0]: Net 0.0.0.0/0 Gate 10.0.0.1 Ifp en0 Ifa 10.0.0.10
 Remove old[1]: Net 0.0.0.0/0 Gate 10.0.0.1 Ifp en1 Ifa 10.0.0.20 [SCOPED]
@@ -11699,75 +16733,123 @@ Remove old[2]: Net 10.0.0.0/24 Ifp en0 Ifa 10.0.0.10
 Remove old[3]: Net 10.0.0.0/24 Ifp en1 Ifa 10.0.0.20 [SCOPED]
 Remove old[4]: Net 10.0.0.1/32 Ifp en0 Ifa 10.0.0.10
 Remove old[5]: Net 10.0.0.1/32 Ifp en1 Ifa 10.0.0.20 [SCOPED]
-Add new[9]: Net 17.255.96.1/32 Ifp en2 Ifa 17.255.98.164
+Remove old[6]: Net 224.0.0.0/4 Ifp en0 Ifa 10.0.0.10
+Remove old[7]: Net 224.0.0.0/4 Ifp en1 Ifa 10.0.0.20 [SCOPED]
+Remove old[8]: Net 255.255.255.255/32 Ifp en0 Ifa 10.0.0.10
+Remove old[9]: Net 255.255.255.255/32 Ifp en1 Ifa 10.0.0.20 [SCOPED]
+Add new[8]: Net 17.255.96.1/32 Ifp en2 Ifa 17.255.98.164
 Add new[0]: Net 0.0.0.0/0 Gate 17.255.96.1 Ifp en2 Ifa 17.255.98.164
-Add new[6]: Net 17.202.40.1/32 Ifp en1 Ifa 17.202.42.111
+Add new[5]: Net 17.202.40.1/32 Ifp en1 Ifa 17.202.42.111
 Add new[1]: Net 0.0.0.0/0 Gate 17.202.40.1 Ifp en1 Ifa 17.202.42.111 [SCOPED]
-Add new[7]: Net 17.202.40.1/32 Ifp en0 Ifa 17.202.42.113 [SCOPED]
+Add new[6]: Net 17.202.40.1/32 Ifp en0 Ifa 17.202.42.113 [SCOPED]
 Add new[2]: Net 0.0.0.0/0 Gate 17.202.40.1 Ifp en0 Ifa 17.202.42.113 [SCOPED]
-Add new[3]: Net 0.0.0.0/0 Ifp fw0 Ifa 169.254.11.33 [SCOPED]
-Add new[4]: Net 17.202.40.0/22 Ifp en1 Ifa 17.202.42.111
-Add new[5]: Net 17.202.40.0/22 Ifp en0 Ifa 17.202.42.113 [SCOPED]
-Add new[8]: Net 17.255.96.0/20 Ifp en2 Ifa 17.255.98.164
+Add new[3]: Net 17.202.40.0/22 Ifp en1 Ifa 17.202.42.111
+Add new[4]: Net 17.202.40.0/22 Ifp en0 Ifa 17.202.42.113 [SCOPED]
+Add new[7]: Net 17.255.96.0/20 Ifp en2 Ifa 17.255.98.164
+Add new[9]: Net 169.254.0.0/16 Ifp fw0 Ifa 169.254.11.33 [last]
+Add new[10]: Net 224.0.0.0/4 Ifp en2 Ifa 17.255.98.164
+Add new[11]: Net 224.0.0.0/4 Ifp en1 Ifa 17.202.42.111 [SCOPED]
+Add new[12]: Net 224.0.0.0/4 Ifp en0 Ifa 17.202.42.113 [SCOPED]
+Add new[13]: Net 224.0.0.0/4 Ifp fw0 Ifa 169.254.11.33 [last] [SCOPED]
+Add new[14]: Net 255.255.255.255/32 Ifp en2 Ifa 17.255.98.164
+Add new[15]: Net 255.255.255.255/32 Ifp en1 Ifa 17.202.42.111 [SCOPED]
+Add new[16]: Net 255.255.255.255/32 Ifp en0 Ifa 17.202.42.113 [SCOPED]
+Add new[17]: Net 255.255.255.255/32 Ifp fw0 Ifa 169.254.11.33 [last] [SCOPED]
 =================> Apply 'test12', 'test7' End <=================
 
 =================> Apply 'test7', 'test13' Begin <=================
-Old routes ('test7') = <IPv4RouteList[10]> = {
+Old routes ('test7') = <IPv4RouteList[18]> = {
  0. Net 0.0.0.0/0 Gate 17.255.96.1 Ifp en2 Ifa 17.255.98.164
  1. Net 0.0.0.0/0 Gate 17.202.40.1 Ifp en1 Ifa 17.202.42.111 [SCOPED]
  2. Net 0.0.0.0/0 Gate 17.202.40.1 Ifp en0 Ifa 17.202.42.113 [SCOPED]
- 3. Net 0.0.0.0/0 Ifp fw0 Ifa 169.254.11.33 [SCOPED]
- 4. Net 17.202.40.0/22 Ifp en1 Ifa 17.202.42.111
- 5. Net 17.202.40.0/22 Ifp en0 Ifa 17.202.42.113 [SCOPED]
- 6. Net 17.202.40.1/32 Ifp en1 Ifa 17.202.42.111
- 7. Net 17.202.40.1/32 Ifp en0 Ifa 17.202.42.113 [SCOPED]
- 8. Net 17.255.96.0/20 Ifp en2 Ifa 17.255.98.164
- 9. Net 17.255.96.1/32 Ifp en2 Ifa 17.255.98.164
-}
-Add new[9]: Net 17.255.96.1/32 Ifp en2 Ifa 17.255.98.164
+ 3. Net 17.202.40.0/22 Ifp en1 Ifa 17.202.42.111
+ 4. Net 17.202.40.0/22 Ifp en0 Ifa 17.202.42.113 [SCOPED]
+ 5. Net 17.202.40.1/32 Ifp en1 Ifa 17.202.42.111
+ 6. Net 17.202.40.1/32 Ifp en0 Ifa 17.202.42.113 [SCOPED]
+ 7. Net 17.255.96.0/20 Ifp en2 Ifa 17.255.98.164
+ 8. Net 17.255.96.1/32 Ifp en2 Ifa 17.255.98.164
+ 9. Net 169.254.0.0/16 Ifp fw0 Ifa 169.254.11.33 [last]
+10. Net 224.0.0.0/4 Ifp en2 Ifa 17.255.98.164
+11. Net 224.0.0.0/4 Ifp en1 Ifa 17.202.42.111 [SCOPED]
+12. Net 224.0.0.0/4 Ifp en0 Ifa 17.202.42.113 [SCOPED]
+13. Net 224.0.0.0/4 Ifp fw0 Ifa 169.254.11.33 [last] [SCOPED]
+14. Net 255.255.255.255/32 Ifp en2 Ifa 17.255.98.164
+15. Net 255.255.255.255/32 Ifp en1 Ifa 17.202.42.111 [SCOPED]
+16. Net 255.255.255.255/32 Ifp en0 Ifa 17.202.42.113 [SCOPED]
+17. Net 255.255.255.255/32 Ifp fw0 Ifa 169.254.11.33 [last] [SCOPED]
+}
+Add new[8]: Net 17.255.96.1/32 Ifp en2 Ifa 17.255.98.164
 Add new[0]: Net 0.0.0.0/0 Gate 17.255.96.1 Ifp en2 Ifa 17.255.98.164
-Add new[6]: Net 17.202.40.1/32 Ifp en1 Ifa 17.202.42.111
+Add new[5]: Net 17.202.40.1/32 Ifp en1 Ifa 17.202.42.111
 Add new[1]: Net 0.0.0.0/0 Gate 17.202.40.1 Ifp en1 Ifa 17.202.42.111 [SCOPED]
-Add new[7]: Net 17.202.40.1/32 Ifp en0 Ifa 17.202.42.113 [SCOPED]
+Add new[6]: Net 17.202.40.1/32 Ifp en0 Ifa 17.202.42.113 [SCOPED]
 Add new[2]: Net 0.0.0.0/0 Gate 17.202.40.1 Ifp en0 Ifa 17.202.42.113 [SCOPED]
-Add new[3]: Net 0.0.0.0/0 Ifp fw0 Ifa 169.254.11.33 [SCOPED]
-Add new[4]: Net 17.202.40.0/22 Ifp en1 Ifa 17.202.42.111
-Add new[5]: Net 17.202.40.0/22 Ifp en0 Ifa 17.202.42.113 [SCOPED]
-Add new[8]: Net 17.255.96.0/20 Ifp en2 Ifa 17.255.98.164
-New Routes ('test13') = <IPv4RouteList[6]> = {
+Add new[3]: Net 17.202.40.0/22 Ifp en1 Ifa 17.202.42.111
+Add new[4]: Net 17.202.40.0/22 Ifp en0 Ifa 17.202.42.113 [SCOPED]
+Add new[7]: Net 17.255.96.0/20 Ifp en2 Ifa 17.255.98.164
+Add new[9]: Net 169.254.0.0/16 Ifp fw0 Ifa 169.254.11.33 [last]
+Add new[10]: Net 224.0.0.0/4 Ifp en2 Ifa 17.255.98.164
+Add new[11]: Net 224.0.0.0/4 Ifp en1 Ifa 17.202.42.111 [SCOPED]
+Add new[12]: Net 224.0.0.0/4 Ifp en0 Ifa 17.202.42.113 [SCOPED]
+Add new[13]: Net 224.0.0.0/4 Ifp fw0 Ifa 169.254.11.33 [last] [SCOPED]
+Add new[14]: Net 255.255.255.255/32 Ifp en2 Ifa 17.255.98.164
+Add new[15]: Net 255.255.255.255/32 Ifp en1 Ifa 17.202.42.111 [SCOPED]
+Add new[16]: Net 255.255.255.255/32 Ifp en0 Ifa 17.202.42.113 [SCOPED]
+Add new[17]: Net 255.255.255.255/32 Ifp fw0 Ifa 169.254.11.33 [last] [SCOPED]
+New Routes ('test13') = <IPv4RouteList[10]> = {
  0. Net 0.0.0.0/0 Gate 10.0.0.1 Ifp en0 Ifa 10.0.0.10
  1. Net 0.0.0.0/0 Gate 10.0.0.1 Ifp en1 Ifa 10.0.0.20 [never] [SCOPED]
  2. Net 10.0.0.0/24 Ifp en0 Ifa 10.0.0.10
  3. Net 10.0.0.0/24 Ifp en1 Ifa 10.0.0.20 [last] [SCOPED]
  4. Net 10.0.0.1/32 Ifp en0 Ifa 10.0.0.10
  5. Net 10.0.0.1/32 Ifp en1 Ifa 10.0.0.20 [last] [SCOPED]
+ 6. Net 224.0.0.0/4 Ifp en0 Ifa 10.0.0.10
+ 7. Net 224.0.0.0/4 Ifp en1 Ifa 10.0.0.20 [last] [SCOPED]
+ 8. Net 255.255.255.255/32 Ifp en0 Ifa 10.0.0.10
+ 9. Net 255.255.255.255/32 Ifp en1 Ifa 10.0.0.20 [last] [SCOPED]
 }
 Remove old[0]: Net 0.0.0.0/0 Gate 17.255.96.1 Ifp en2 Ifa 17.255.98.164
 Remove old[1]: Net 0.0.0.0/0 Gate 17.202.40.1 Ifp en1 Ifa 17.202.42.111 [SCOPED]
 Remove old[2]: Net 0.0.0.0/0 Gate 17.202.40.1 Ifp en0 Ifa 17.202.42.113 [SCOPED]
-Remove old[3]: Net 0.0.0.0/0 Ifp fw0 Ifa 169.254.11.33 [SCOPED]
-Remove old[4]: Net 17.202.40.0/22 Ifp en1 Ifa 17.202.42.111
-Remove old[5]: Net 17.202.40.0/22 Ifp en0 Ifa 17.202.42.113 [SCOPED]
-Remove old[6]: Net 17.202.40.1/32 Ifp en1 Ifa 17.202.42.111
-Remove old[7]: Net 17.202.40.1/32 Ifp en0 Ifa 17.202.42.113 [SCOPED]
-Remove old[8]: Net 17.255.96.0/20 Ifp en2 Ifa 17.255.98.164
-Remove old[9]: Net 17.255.96.1/32 Ifp en2 Ifa 17.255.98.164
+Remove old[3]: Net 17.202.40.0/22 Ifp en1 Ifa 17.202.42.111
+Remove old[4]: Net 17.202.40.0/22 Ifp en0 Ifa 17.202.42.113 [SCOPED]
+Remove old[5]: Net 17.202.40.1/32 Ifp en1 Ifa 17.202.42.111
+Remove old[6]: Net 17.202.40.1/32 Ifp en0 Ifa 17.202.42.113 [SCOPED]
+Remove old[7]: Net 17.255.96.0/20 Ifp en2 Ifa 17.255.98.164
+Remove old[8]: Net 17.255.96.1/32 Ifp en2 Ifa 17.255.98.164
+Remove old[9]: Net 169.254.0.0/16 Ifp fw0 Ifa 169.254.11.33 [last]
+Remove old[10]: Net 224.0.0.0/4 Ifp en2 Ifa 17.255.98.164
+Remove old[11]: Net 224.0.0.0/4 Ifp en1 Ifa 17.202.42.111 [SCOPED]
+Remove old[12]: Net 224.0.0.0/4 Ifp en0 Ifa 17.202.42.113 [SCOPED]
+Remove old[13]: Net 224.0.0.0/4 Ifp fw0 Ifa 169.254.11.33 [last] [SCOPED]
+Remove old[14]: Net 255.255.255.255/32 Ifp en2 Ifa 17.255.98.164
+Remove old[15]: Net 255.255.255.255/32 Ifp en1 Ifa 17.202.42.111 [SCOPED]
+Remove old[16]: Net 255.255.255.255/32 Ifp en0 Ifa 17.202.42.113 [SCOPED]
+Remove old[17]: Net 255.255.255.255/32 Ifp fw0 Ifa 169.254.11.33 [last] [SCOPED]
 Add new[4]: Net 10.0.0.1/32 Ifp en0 Ifa 10.0.0.10
 Add new[0]: Net 0.0.0.0/0 Gate 10.0.0.1 Ifp en0 Ifa 10.0.0.10
 Add new[5]: Net 10.0.0.1/32 Ifp en1 Ifa 10.0.0.20 [last] [SCOPED]
 Add new[1]: Net 0.0.0.0/0 Gate 10.0.0.1 Ifp en1 Ifa 10.0.0.20 [never] [SCOPED]
 Add new[2]: Net 10.0.0.0/24 Ifp en0 Ifa 10.0.0.10
 Add new[3]: Net 10.0.0.0/24 Ifp en1 Ifa 10.0.0.20 [last] [SCOPED]
+Add new[6]: Net 224.0.0.0/4 Ifp en0 Ifa 10.0.0.10
+Add new[7]: Net 224.0.0.0/4 Ifp en1 Ifa 10.0.0.20 [last] [SCOPED]
+Add new[8]: Net 255.255.255.255/32 Ifp en0 Ifa 10.0.0.10
+Add new[9]: Net 255.255.255.255/32 Ifp en1 Ifa 10.0.0.20 [last] [SCOPED]
 =================> Apply 'test7', 'test13' End <=================
 
 =================> Apply 'test13', 'test7' Begin <=================
-Old routes ('test13') = <IPv4RouteList[6]> = {
+Old routes ('test13') = <IPv4RouteList[10]> = {
  0. Net 0.0.0.0/0 Gate 10.0.0.1 Ifp en0 Ifa 10.0.0.10
  1. Net 0.0.0.0/0 Gate 10.0.0.1 Ifp en1 Ifa 10.0.0.20 [never] [SCOPED]
  2. Net 10.0.0.0/24 Ifp en0 Ifa 10.0.0.10
  3. Net 10.0.0.0/24 Ifp en1 Ifa 10.0.0.20 [last] [SCOPED]
  4. Net 10.0.0.1/32 Ifp en0 Ifa 10.0.0.10
  5. Net 10.0.0.1/32 Ifp en1 Ifa 10.0.0.20 [last] [SCOPED]
+ 6. Net 224.0.0.0/4 Ifp en0 Ifa 10.0.0.10
+ 7. Net 224.0.0.0/4 Ifp en1 Ifa 10.0.0.20 [last] [SCOPED]
+ 8. Net 255.255.255.255/32 Ifp en0 Ifa 10.0.0.10
+ 9. Net 255.255.255.255/32 Ifp en1 Ifa 10.0.0.20 [last] [SCOPED]
 }
 Add new[4]: Net 10.0.0.1/32 Ifp en0 Ifa 10.0.0.10
 Add new[0]: Net 0.0.0.0/0 Gate 10.0.0.1 Ifp en0 Ifa 10.0.0.10
@@ -11775,17 +16857,29 @@ Add new[5]: Net 10.0.0.1/32 Ifp en1 Ifa 10.0.0.20 [last] [SCOPED]
 Add new[1]: Net 0.0.0.0/0 Gate 10.0.0.1 Ifp en1 Ifa 10.0.0.20 [never] [SCOPED]
 Add new[2]: Net 10.0.0.0/24 Ifp en0 Ifa 10.0.0.10
 Add new[3]: Net 10.0.0.0/24 Ifp en1 Ifa 10.0.0.20 [last] [SCOPED]
-New Routes ('test7') = <IPv4RouteList[10]> = {
+Add new[6]: Net 224.0.0.0/4 Ifp en0 Ifa 10.0.0.10
+Add new[7]: Net 224.0.0.0/4 Ifp en1 Ifa 10.0.0.20 [last] [SCOPED]
+Add new[8]: Net 255.255.255.255/32 Ifp en0 Ifa 10.0.0.10
+Add new[9]: Net 255.255.255.255/32 Ifp en1 Ifa 10.0.0.20 [last] [SCOPED]
+New Routes ('test7') = <IPv4RouteList[18]> = {
  0. Net 0.0.0.0/0 Gate 17.255.96.1 Ifp en2 Ifa 17.255.98.164
  1. Net 0.0.0.0/0 Gate 17.202.40.1 Ifp en1 Ifa 17.202.42.111 [SCOPED]
  2. Net 0.0.0.0/0 Gate 17.202.40.1 Ifp en0 Ifa 17.202.42.113 [SCOPED]
- 3. Net 0.0.0.0/0 Ifp fw0 Ifa 169.254.11.33 [SCOPED]
- 4. Net 17.202.40.0/22 Ifp en1 Ifa 17.202.42.111
- 5. Net 17.202.40.0/22 Ifp en0 Ifa 17.202.42.113 [SCOPED]
- 6. Net 17.202.40.1/32 Ifp en1 Ifa 17.202.42.111
- 7. Net 17.202.40.1/32 Ifp en0 Ifa 17.202.42.113 [SCOPED]
- 8. Net 17.255.96.0/20 Ifp en2 Ifa 17.255.98.164
- 9. Net 17.255.96.1/32 Ifp en2 Ifa 17.255.98.164
+ 3. Net 17.202.40.0/22 Ifp en1 Ifa 17.202.42.111
+ 4. Net 17.202.40.0/22 Ifp en0 Ifa 17.202.42.113 [SCOPED]
+ 5. Net 17.202.40.1/32 Ifp en1 Ifa 17.202.42.111
+ 6. Net 17.202.40.1/32 Ifp en0 Ifa 17.202.42.113 [SCOPED]
+ 7. Net 17.255.96.0/20 Ifp en2 Ifa 17.255.98.164
+ 8. Net 17.255.96.1/32 Ifp en2 Ifa 17.255.98.164
+ 9. Net 169.254.0.0/16 Ifp fw0 Ifa 169.254.11.33 [last]
+10. Net 224.0.0.0/4 Ifp en2 Ifa 17.255.98.164
+11. Net 224.0.0.0/4 Ifp en1 Ifa 17.202.42.111 [SCOPED]
+12. Net 224.0.0.0/4 Ifp en0 Ifa 17.202.42.113 [SCOPED]
+13. Net 224.0.0.0/4 Ifp fw0 Ifa 169.254.11.33 [last] [SCOPED]
+14. Net 255.255.255.255/32 Ifp en2 Ifa 17.255.98.164
+15. Net 255.255.255.255/32 Ifp en1 Ifa 17.202.42.111 [SCOPED]
+16. Net 255.255.255.255/32 Ifp en0 Ifa 17.202.42.113 [SCOPED]
+17. Net 255.255.255.255/32 Ifp fw0 Ifa 169.254.11.33 [last] [SCOPED]
 }
 Remove old[0]: Net 0.0.0.0/0 Gate 10.0.0.1 Ifp en0 Ifa 10.0.0.10
 Remove old[1]: Net 0.0.0.0/0 Gate 10.0.0.1 Ifp en1 Ifa 10.0.0.20 [never] [SCOPED]
@@ -11793,190 +16887,318 @@ Remove old[2]: Net 10.0.0.0/24 Ifp en0 Ifa 10.0.0.10
 Remove old[3]: Net 10.0.0.0/24 Ifp en1 Ifa 10.0.0.20 [last] [SCOPED]
 Remove old[4]: Net 10.0.0.1/32 Ifp en0 Ifa 10.0.0.10
 Remove old[5]: Net 10.0.0.1/32 Ifp en1 Ifa 10.0.0.20 [last] [SCOPED]
-Add new[9]: Net 17.255.96.1/32 Ifp en2 Ifa 17.255.98.164
+Remove old[6]: Net 224.0.0.0/4 Ifp en0 Ifa 10.0.0.10
+Remove old[7]: Net 224.0.0.0/4 Ifp en1 Ifa 10.0.0.20 [last] [SCOPED]
+Remove old[8]: Net 255.255.255.255/32 Ifp en0 Ifa 10.0.0.10
+Remove old[9]: Net 255.255.255.255/32 Ifp en1 Ifa 10.0.0.20 [last] [SCOPED]
+Add new[8]: Net 17.255.96.1/32 Ifp en2 Ifa 17.255.98.164
 Add new[0]: Net 0.0.0.0/0 Gate 17.255.96.1 Ifp en2 Ifa 17.255.98.164
-Add new[6]: Net 17.202.40.1/32 Ifp en1 Ifa 17.202.42.111
+Add new[5]: Net 17.202.40.1/32 Ifp en1 Ifa 17.202.42.111
 Add new[1]: Net 0.0.0.0/0 Gate 17.202.40.1 Ifp en1 Ifa 17.202.42.111 [SCOPED]
-Add new[7]: Net 17.202.40.1/32 Ifp en0 Ifa 17.202.42.113 [SCOPED]
+Add new[6]: Net 17.202.40.1/32 Ifp en0 Ifa 17.202.42.113 [SCOPED]
 Add new[2]: Net 0.0.0.0/0 Gate 17.202.40.1 Ifp en0 Ifa 17.202.42.113 [SCOPED]
-Add new[3]: Net 0.0.0.0/0 Ifp fw0 Ifa 169.254.11.33 [SCOPED]
-Add new[4]: Net 17.202.40.0/22 Ifp en1 Ifa 17.202.42.111
-Add new[5]: Net 17.202.40.0/22 Ifp en0 Ifa 17.202.42.113 [SCOPED]
-Add new[8]: Net 17.255.96.0/20 Ifp en2 Ifa 17.255.98.164
+Add new[3]: Net 17.202.40.0/22 Ifp en1 Ifa 17.202.42.111
+Add new[4]: Net 17.202.40.0/22 Ifp en0 Ifa 17.202.42.113 [SCOPED]
+Add new[7]: Net 17.255.96.0/20 Ifp en2 Ifa 17.255.98.164
+Add new[9]: Net 169.254.0.0/16 Ifp fw0 Ifa 169.254.11.33 [last]
+Add new[10]: Net 224.0.0.0/4 Ifp en2 Ifa 17.255.98.164
+Add new[11]: Net 224.0.0.0/4 Ifp en1 Ifa 17.202.42.111 [SCOPED]
+Add new[12]: Net 224.0.0.0/4 Ifp en0 Ifa 17.202.42.113 [SCOPED]
+Add new[13]: Net 224.0.0.0/4 Ifp fw0 Ifa 169.254.11.33 [last] [SCOPED]
+Add new[14]: Net 255.255.255.255/32 Ifp en2 Ifa 17.255.98.164
+Add new[15]: Net 255.255.255.255/32 Ifp en1 Ifa 17.202.42.111 [SCOPED]
+Add new[16]: Net 255.255.255.255/32 Ifp en0 Ifa 17.202.42.113 [SCOPED]
+Add new[17]: Net 255.255.255.255/32 Ifp fw0 Ifa 169.254.11.33 [last] [SCOPED]
 =================> Apply 'test13', 'test7' End <=================
 
 =================> Apply 'test7', 'test14' Begin <=================
-Old routes ('test7') = <IPv4RouteList[10]> = {
+Old routes ('test7') = <IPv4RouteList[18]> = {
  0. Net 0.0.0.0/0 Gate 17.255.96.1 Ifp en2 Ifa 17.255.98.164
  1. Net 0.0.0.0/0 Gate 17.202.40.1 Ifp en1 Ifa 17.202.42.111 [SCOPED]
  2. Net 0.0.0.0/0 Gate 17.202.40.1 Ifp en0 Ifa 17.202.42.113 [SCOPED]
- 3. Net 0.0.0.0/0 Ifp fw0 Ifa 169.254.11.33 [SCOPED]
- 4. Net 17.202.40.0/22 Ifp en1 Ifa 17.202.42.111
- 5. Net 17.202.40.0/22 Ifp en0 Ifa 17.202.42.113 [SCOPED]
- 6. Net 17.202.40.1/32 Ifp en1 Ifa 17.202.42.111
- 7. Net 17.202.40.1/32 Ifp en0 Ifa 17.202.42.113 [SCOPED]
- 8. Net 17.255.96.0/20 Ifp en2 Ifa 17.255.98.164
- 9. Net 17.255.96.1/32 Ifp en2 Ifa 17.255.98.164
-}
-Add new[9]: Net 17.255.96.1/32 Ifp en2 Ifa 17.255.98.164
+ 3. Net 17.202.40.0/22 Ifp en1 Ifa 17.202.42.111
+ 4. Net 17.202.40.0/22 Ifp en0 Ifa 17.202.42.113 [SCOPED]
+ 5. Net 17.202.40.1/32 Ifp en1 Ifa 17.202.42.111
+ 6. Net 17.202.40.1/32 Ifp en0 Ifa 17.202.42.113 [SCOPED]
+ 7. Net 17.255.96.0/20 Ifp en2 Ifa 17.255.98.164
+ 8. Net 17.255.96.1/32 Ifp en2 Ifa 17.255.98.164
+ 9. Net 169.254.0.0/16 Ifp fw0 Ifa 169.254.11.33 [last]
+10. Net 224.0.0.0/4 Ifp en2 Ifa 17.255.98.164
+11. Net 224.0.0.0/4 Ifp en1 Ifa 17.202.42.111 [SCOPED]
+12. Net 224.0.0.0/4 Ifp en0 Ifa 17.202.42.113 [SCOPED]
+13. Net 224.0.0.0/4 Ifp fw0 Ifa 169.254.11.33 [last] [SCOPED]
+14. Net 255.255.255.255/32 Ifp en2 Ifa 17.255.98.164
+15. Net 255.255.255.255/32 Ifp en1 Ifa 17.202.42.111 [SCOPED]
+16. Net 255.255.255.255/32 Ifp en0 Ifa 17.202.42.113 [SCOPED]
+17. Net 255.255.255.255/32 Ifp fw0 Ifa 169.254.11.33 [last] [SCOPED]
+}
+Add new[8]: Net 17.255.96.1/32 Ifp en2 Ifa 17.255.98.164
 Add new[0]: Net 0.0.0.0/0 Gate 17.255.96.1 Ifp en2 Ifa 17.255.98.164
-Add new[6]: Net 17.202.40.1/32 Ifp en1 Ifa 17.202.42.111
+Add new[5]: Net 17.202.40.1/32 Ifp en1 Ifa 17.202.42.111
 Add new[1]: Net 0.0.0.0/0 Gate 17.202.40.1 Ifp en1 Ifa 17.202.42.111 [SCOPED]
-Add new[7]: Net 17.202.40.1/32 Ifp en0 Ifa 17.202.42.113 [SCOPED]
+Add new[6]: Net 17.202.40.1/32 Ifp en0 Ifa 17.202.42.113 [SCOPED]
 Add new[2]: Net 0.0.0.0/0 Gate 17.202.40.1 Ifp en0 Ifa 17.202.42.113 [SCOPED]
-Add new[3]: Net 0.0.0.0/0 Ifp fw0 Ifa 169.254.11.33 [SCOPED]
-Add new[4]: Net 17.202.40.0/22 Ifp en1 Ifa 17.202.42.111
-Add new[5]: Net 17.202.40.0/22 Ifp en0 Ifa 17.202.42.113 [SCOPED]
-Add new[8]: Net 17.255.96.0/20 Ifp en2 Ifa 17.255.98.164
-New Routes ('test14') = <IPv4RouteList[3]> = {
+Add new[3]: Net 17.202.40.0/22 Ifp en1 Ifa 17.202.42.111
+Add new[4]: Net 17.202.40.0/22 Ifp en0 Ifa 17.202.42.113 [SCOPED]
+Add new[7]: Net 17.255.96.0/20 Ifp en2 Ifa 17.255.98.164
+Add new[9]: Net 169.254.0.0/16 Ifp fw0 Ifa 169.254.11.33 [last]
+Add new[10]: Net 224.0.0.0/4 Ifp en2 Ifa 17.255.98.164
+Add new[11]: Net 224.0.0.0/4 Ifp en1 Ifa 17.202.42.111 [SCOPED]
+Add new[12]: Net 224.0.0.0/4 Ifp en0 Ifa 17.202.42.113 [SCOPED]
+Add new[13]: Net 224.0.0.0/4 Ifp fw0 Ifa 169.254.11.33 [last] [SCOPED]
+Add new[14]: Net 255.255.255.255/32 Ifp en2 Ifa 17.255.98.164
+Add new[15]: Net 255.255.255.255/32 Ifp en1 Ifa 17.202.42.111 [SCOPED]
+Add new[16]: Net 255.255.255.255/32 Ifp en0 Ifa 17.202.42.113 [SCOPED]
+Add new[17]: Net 255.255.255.255/32 Ifp fw0 Ifa 169.254.11.33 [last] [SCOPED]
+New Routes ('test14') = <IPv4RouteList[5]> = {
  0. Net 0.0.0.0/0 Gate 10.0.0.1 Ifp en1 Ifa 10.0.0.20 [never] [SCOPED]
  1. Net 10.0.0.0/24 Ifp en1 Ifa 10.0.0.20 [last]
  2. Net 10.0.0.1/32 Ifp en1 Ifa 10.0.0.20 [last]
+ 3. Net 224.0.0.0/4 Ifp en1 Ifa 10.0.0.20 [last]
+ 4. Net 255.255.255.255/32 Ifp en1 Ifa 10.0.0.20 [last]
 }
 Remove old[0]: Net 0.0.0.0/0 Gate 17.255.96.1 Ifp en2 Ifa 17.255.98.164
 Remove old[1]: Net 0.0.0.0/0 Gate 17.202.40.1 Ifp en1 Ifa 17.202.42.111 [SCOPED]
 Remove old[2]: Net 0.0.0.0/0 Gate 17.202.40.1 Ifp en0 Ifa 17.202.42.113 [SCOPED]
-Remove old[3]: Net 0.0.0.0/0 Ifp fw0 Ifa 169.254.11.33 [SCOPED]
-Remove old[4]: Net 17.202.40.0/22 Ifp en1 Ifa 17.202.42.111
-Remove old[5]: Net 17.202.40.0/22 Ifp en0 Ifa 17.202.42.113 [SCOPED]
-Remove old[6]: Net 17.202.40.1/32 Ifp en1 Ifa 17.202.42.111
-Remove old[7]: Net 17.202.40.1/32 Ifp en0 Ifa 17.202.42.113 [SCOPED]
-Remove old[8]: Net 17.255.96.0/20 Ifp en2 Ifa 17.255.98.164
-Remove old[9]: Net 17.255.96.1/32 Ifp en2 Ifa 17.255.98.164
+Remove old[3]: Net 17.202.40.0/22 Ifp en1 Ifa 17.202.42.111
+Remove old[4]: Net 17.202.40.0/22 Ifp en0 Ifa 17.202.42.113 [SCOPED]
+Remove old[5]: Net 17.202.40.1/32 Ifp en1 Ifa 17.202.42.111
+Remove old[6]: Net 17.202.40.1/32 Ifp en0 Ifa 17.202.42.113 [SCOPED]
+Remove old[7]: Net 17.255.96.0/20 Ifp en2 Ifa 17.255.98.164
+Remove old[8]: Net 17.255.96.1/32 Ifp en2 Ifa 17.255.98.164
+Remove old[9]: Net 169.254.0.0/16 Ifp fw0 Ifa 169.254.11.33 [last]
+Remove old[10]: Net 224.0.0.0/4 Ifp en2 Ifa 17.255.98.164
+Remove old[11]: Net 224.0.0.0/4 Ifp en1 Ifa 17.202.42.111 [SCOPED]
+Remove old[12]: Net 224.0.0.0/4 Ifp en0 Ifa 17.202.42.113 [SCOPED]
+Remove old[13]: Net 224.0.0.0/4 Ifp fw0 Ifa 169.254.11.33 [last] [SCOPED]
+Remove old[14]: Net 255.255.255.255/32 Ifp en2 Ifa 17.255.98.164
+Remove old[15]: Net 255.255.255.255/32 Ifp en1 Ifa 17.202.42.111 [SCOPED]
+Remove old[16]: Net 255.255.255.255/32 Ifp en0 Ifa 17.202.42.113 [SCOPED]
+Remove old[17]: Net 255.255.255.255/32 Ifp fw0 Ifa 169.254.11.33 [last] [SCOPED]
 Add new[2]: Net 10.0.0.1/32 Ifp en1 Ifa 10.0.0.20 [last]
 Add new[0]: Net 0.0.0.0/0 Gate 10.0.0.1 Ifp en1 Ifa 10.0.0.20 [never] [SCOPED]
 Add new[1]: Net 10.0.0.0/24 Ifp en1 Ifa 10.0.0.20 [last]
+Add new[3]: Net 224.0.0.0/4 Ifp en1 Ifa 10.0.0.20 [last]
+Add new[4]: Net 255.255.255.255/32 Ifp en1 Ifa 10.0.0.20 [last]
 =================> Apply 'test7', 'test14' End <=================
 
 =================> Apply 'test14', 'test7' Begin <=================
-Old routes ('test14') = <IPv4RouteList[3]> = {
+Old routes ('test14') = <IPv4RouteList[5]> = {
  0. Net 0.0.0.0/0 Gate 10.0.0.1 Ifp en1 Ifa 10.0.0.20 [never] [SCOPED]
  1. Net 10.0.0.0/24 Ifp en1 Ifa 10.0.0.20 [last]
  2. Net 10.0.0.1/32 Ifp en1 Ifa 10.0.0.20 [last]
+ 3. Net 224.0.0.0/4 Ifp en1 Ifa 10.0.0.20 [last]
+ 4. Net 255.255.255.255/32 Ifp en1 Ifa 10.0.0.20 [last]
 }
 Add new[2]: Net 10.0.0.1/32 Ifp en1 Ifa 10.0.0.20 [last]
 Add new[0]: Net 0.0.0.0/0 Gate 10.0.0.1 Ifp en1 Ifa 10.0.0.20 [never] [SCOPED]
 Add new[1]: Net 10.0.0.0/24 Ifp en1 Ifa 10.0.0.20 [last]
-New Routes ('test7') = <IPv4RouteList[10]> = {
+Add new[3]: Net 224.0.0.0/4 Ifp en1 Ifa 10.0.0.20 [last]
+Add new[4]: Net 255.255.255.255/32 Ifp en1 Ifa 10.0.0.20 [last]
+New Routes ('test7') = <IPv4RouteList[18]> = {
  0. Net 0.0.0.0/0 Gate 17.255.96.1 Ifp en2 Ifa 17.255.98.164
  1. Net 0.0.0.0/0 Gate 17.202.40.1 Ifp en1 Ifa 17.202.42.111 [SCOPED]
  2. Net 0.0.0.0/0 Gate 17.202.40.1 Ifp en0 Ifa 17.202.42.113 [SCOPED]
- 3. Net 0.0.0.0/0 Ifp fw0 Ifa 169.254.11.33 [SCOPED]
- 4. Net 17.202.40.0/22 Ifp en1 Ifa 17.202.42.111
- 5. Net 17.202.40.0/22 Ifp en0 Ifa 17.202.42.113 [SCOPED]
- 6. Net 17.202.40.1/32 Ifp en1 Ifa 17.202.42.111
- 7. Net 17.202.40.1/32 Ifp en0 Ifa 17.202.42.113 [SCOPED]
- 8. Net 17.255.96.0/20 Ifp en2 Ifa 17.255.98.164
- 9. Net 17.255.96.1/32 Ifp en2 Ifa 17.255.98.164
+ 3. Net 17.202.40.0/22 Ifp en1 Ifa 17.202.42.111
+ 4. Net 17.202.40.0/22 Ifp en0 Ifa 17.202.42.113 [SCOPED]
+ 5. Net 17.202.40.1/32 Ifp en1 Ifa 17.202.42.111
+ 6. Net 17.202.40.1/32 Ifp en0 Ifa 17.202.42.113 [SCOPED]
+ 7. Net 17.255.96.0/20 Ifp en2 Ifa 17.255.98.164
+ 8. Net 17.255.96.1/32 Ifp en2 Ifa 17.255.98.164
+ 9. Net 169.254.0.0/16 Ifp fw0 Ifa 169.254.11.33 [last]
+10. Net 224.0.0.0/4 Ifp en2 Ifa 17.255.98.164
+11. Net 224.0.0.0/4 Ifp en1 Ifa 17.202.42.111 [SCOPED]
+12. Net 224.0.0.0/4 Ifp en0 Ifa 17.202.42.113 [SCOPED]
+13. Net 224.0.0.0/4 Ifp fw0 Ifa 169.254.11.33 [last] [SCOPED]
+14. Net 255.255.255.255/32 Ifp en2 Ifa 17.255.98.164
+15. Net 255.255.255.255/32 Ifp en1 Ifa 17.202.42.111 [SCOPED]
+16. Net 255.255.255.255/32 Ifp en0 Ifa 17.202.42.113 [SCOPED]
+17. Net 255.255.255.255/32 Ifp fw0 Ifa 169.254.11.33 [last] [SCOPED]
 }
 Remove old[0]: Net 0.0.0.0/0 Gate 10.0.0.1 Ifp en1 Ifa 10.0.0.20 [never] [SCOPED]
 Remove old[1]: Net 10.0.0.0/24 Ifp en1 Ifa 10.0.0.20 [last]
 Remove old[2]: Net 10.0.0.1/32 Ifp en1 Ifa 10.0.0.20 [last]
-Add new[9]: Net 17.255.96.1/32 Ifp en2 Ifa 17.255.98.164
+Remove old[3]: Net 224.0.0.0/4 Ifp en1 Ifa 10.0.0.20 [last]
+Remove old[4]: Net 255.255.255.255/32 Ifp en1 Ifa 10.0.0.20 [last]
+Add new[8]: Net 17.255.96.1/32 Ifp en2 Ifa 17.255.98.164
 Add new[0]: Net 0.0.0.0/0 Gate 17.255.96.1 Ifp en2 Ifa 17.255.98.164
-Add new[6]: Net 17.202.40.1/32 Ifp en1 Ifa 17.202.42.111
+Add new[5]: Net 17.202.40.1/32 Ifp en1 Ifa 17.202.42.111
 Add new[1]: Net 0.0.0.0/0 Gate 17.202.40.1 Ifp en1 Ifa 17.202.42.111 [SCOPED]
-Add new[7]: Net 17.202.40.1/32 Ifp en0 Ifa 17.202.42.113 [SCOPED]
+Add new[6]: Net 17.202.40.1/32 Ifp en0 Ifa 17.202.42.113 [SCOPED]
 Add new[2]: Net 0.0.0.0/0 Gate 17.202.40.1 Ifp en0 Ifa 17.202.42.113 [SCOPED]
-Add new[3]: Net 0.0.0.0/0 Ifp fw0 Ifa 169.254.11.33 [SCOPED]
-Add new[4]: Net 17.202.40.0/22 Ifp en1 Ifa 17.202.42.111
-Add new[5]: Net 17.202.40.0/22 Ifp en0 Ifa 17.202.42.113 [SCOPED]
-Add new[8]: Net 17.255.96.0/20 Ifp en2 Ifa 17.255.98.164
+Add new[3]: Net 17.202.40.0/22 Ifp en1 Ifa 17.202.42.111
+Add new[4]: Net 17.202.40.0/22 Ifp en0 Ifa 17.202.42.113 [SCOPED]
+Add new[7]: Net 17.255.96.0/20 Ifp en2 Ifa 17.255.98.164
+Add new[9]: Net 169.254.0.0/16 Ifp fw0 Ifa 169.254.11.33 [last]
+Add new[10]: Net 224.0.0.0/4 Ifp en2 Ifa 17.255.98.164
+Add new[11]: Net 224.0.0.0/4 Ifp en1 Ifa 17.202.42.111 [SCOPED]
+Add new[12]: Net 224.0.0.0/4 Ifp en0 Ifa 17.202.42.113 [SCOPED]
+Add new[13]: Net 224.0.0.0/4 Ifp fw0 Ifa 169.254.11.33 [last] [SCOPED]
+Add new[14]: Net 255.255.255.255/32 Ifp en2 Ifa 17.255.98.164
+Add new[15]: Net 255.255.255.255/32 Ifp en1 Ifa 17.202.42.111 [SCOPED]
+Add new[16]: Net 255.255.255.255/32 Ifp en0 Ifa 17.202.42.113 [SCOPED]
+Add new[17]: Net 255.255.255.255/32 Ifp fw0 Ifa 169.254.11.33 [last] [SCOPED]
 =================> Apply 'test14', 'test7' End <=================
 
 =================> Apply 'test7', 'test15' Begin <=================
-Old routes ('test7') = <IPv4RouteList[10]> = {
+Old routes ('test7') = <IPv4RouteList[18]> = {
  0. Net 0.0.0.0/0 Gate 17.255.96.1 Ifp en2 Ifa 17.255.98.164
  1. Net 0.0.0.0/0 Gate 17.202.40.1 Ifp en1 Ifa 17.202.42.111 [SCOPED]
  2. Net 0.0.0.0/0 Gate 17.202.40.1 Ifp en0 Ifa 17.202.42.113 [SCOPED]
- 3. Net 0.0.0.0/0 Ifp fw0 Ifa 169.254.11.33 [SCOPED]
- 4. Net 17.202.40.0/22 Ifp en1 Ifa 17.202.42.111
- 5. Net 17.202.40.0/22 Ifp en0 Ifa 17.202.42.113 [SCOPED]
- 6. Net 17.202.40.1/32 Ifp en1 Ifa 17.202.42.111
- 7. Net 17.202.40.1/32 Ifp en0 Ifa 17.202.42.113 [SCOPED]
- 8. Net 17.255.96.0/20 Ifp en2 Ifa 17.255.98.164
- 9. Net 17.255.96.1/32 Ifp en2 Ifa 17.255.98.164
-}
-Add new[9]: Net 17.255.96.1/32 Ifp en2 Ifa 17.255.98.164
+ 3. Net 17.202.40.0/22 Ifp en1 Ifa 17.202.42.111
+ 4. Net 17.202.40.0/22 Ifp en0 Ifa 17.202.42.113 [SCOPED]
+ 5. Net 17.202.40.1/32 Ifp en1 Ifa 17.202.42.111
+ 6. Net 17.202.40.1/32 Ifp en0 Ifa 17.202.42.113 [SCOPED]
+ 7. Net 17.255.96.0/20 Ifp en2 Ifa 17.255.98.164
+ 8. Net 17.255.96.1/32 Ifp en2 Ifa 17.255.98.164
+ 9. Net 169.254.0.0/16 Ifp fw0 Ifa 169.254.11.33 [last]
+10. Net 224.0.0.0/4 Ifp en2 Ifa 17.255.98.164
+11. Net 224.0.0.0/4 Ifp en1 Ifa 17.202.42.111 [SCOPED]
+12. Net 224.0.0.0/4 Ifp en0 Ifa 17.202.42.113 [SCOPED]
+13. Net 224.0.0.0/4 Ifp fw0 Ifa 169.254.11.33 [last] [SCOPED]
+14. Net 255.255.255.255/32 Ifp en2 Ifa 17.255.98.164
+15. Net 255.255.255.255/32 Ifp en1 Ifa 17.202.42.111 [SCOPED]
+16. Net 255.255.255.255/32 Ifp en0 Ifa 17.202.42.113 [SCOPED]
+17. Net 255.255.255.255/32 Ifp fw0 Ifa 169.254.11.33 [last] [SCOPED]
+}
+Add new[8]: Net 17.255.96.1/32 Ifp en2 Ifa 17.255.98.164
 Add new[0]: Net 0.0.0.0/0 Gate 17.255.96.1 Ifp en2 Ifa 17.255.98.164
-Add new[6]: Net 17.202.40.1/32 Ifp en1 Ifa 17.202.42.111
+Add new[5]: Net 17.202.40.1/32 Ifp en1 Ifa 17.202.42.111
 Add new[1]: Net 0.0.0.0/0 Gate 17.202.40.1 Ifp en1 Ifa 17.202.42.111 [SCOPED]
-Add new[7]: Net 17.202.40.1/32 Ifp en0 Ifa 17.202.42.113 [SCOPED]
+Add new[6]: Net 17.202.40.1/32 Ifp en0 Ifa 17.202.42.113 [SCOPED]
 Add new[2]: Net 0.0.0.0/0 Gate 17.202.40.1 Ifp en0 Ifa 17.202.42.113 [SCOPED]
-Add new[3]: Net 0.0.0.0/0 Ifp fw0 Ifa 169.254.11.33 [SCOPED]
-Add new[4]: Net 17.202.40.0/22 Ifp en1 Ifa 17.202.42.111
-Add new[5]: Net 17.202.40.0/22 Ifp en0 Ifa 17.202.42.113 [SCOPED]
-Add new[8]: Net 17.255.96.0/20 Ifp en2 Ifa 17.255.98.164
-New Routes ('test15') = <IPv4RouteList[1]> = {
- 0. Net 0.0.0.0/0 Ifp en0 Ifa 169.254.22.44
+Add new[3]: Net 17.202.40.0/22 Ifp en1 Ifa 17.202.42.111
+Add new[4]: Net 17.202.40.0/22 Ifp en0 Ifa 17.202.42.113 [SCOPED]
+Add new[7]: Net 17.255.96.0/20 Ifp en2 Ifa 17.255.98.164
+Add new[9]: Net 169.254.0.0/16 Ifp fw0 Ifa 169.254.11.33 [last]
+Add new[10]: Net 224.0.0.0/4 Ifp en2 Ifa 17.255.98.164
+Add new[11]: Net 224.0.0.0/4 Ifp en1 Ifa 17.202.42.111 [SCOPED]
+Add new[12]: Net 224.0.0.0/4 Ifp en0 Ifa 17.202.42.113 [SCOPED]
+Add new[13]: Net 224.0.0.0/4 Ifp fw0 Ifa 169.254.11.33 [last] [SCOPED]
+Add new[14]: Net 255.255.255.255/32 Ifp en2 Ifa 17.255.98.164
+Add new[15]: Net 255.255.255.255/32 Ifp en1 Ifa 17.202.42.111 [SCOPED]
+Add new[16]: Net 255.255.255.255/32 Ifp en0 Ifa 17.202.42.113 [SCOPED]
+Add new[17]: Net 255.255.255.255/32 Ifp fw0 Ifa 169.254.11.33 [last] [SCOPED]
+New Routes ('test15') = <IPv4RouteList[3]> = {
+ 0. Net 169.254.0.0/16 Ifp en0 Ifa 169.254.22.44 [last]
+ 1. Net 224.0.0.0/4 Ifp en0 Ifa 169.254.22.44 [last]
+ 2. Net 255.255.255.255/32 Ifp en0 Ifa 169.254.22.44 [last]
 }
 Remove old[0]: Net 0.0.0.0/0 Gate 17.255.96.1 Ifp en2 Ifa 17.255.98.164
 Remove old[1]: Net 0.0.0.0/0 Gate 17.202.40.1 Ifp en1 Ifa 17.202.42.111 [SCOPED]
 Remove old[2]: Net 0.0.0.0/0 Gate 17.202.40.1 Ifp en0 Ifa 17.202.42.113 [SCOPED]
-Remove old[3]: Net 0.0.0.0/0 Ifp fw0 Ifa 169.254.11.33 [SCOPED]
-Remove old[4]: Net 17.202.40.0/22 Ifp en1 Ifa 17.202.42.111
-Remove old[5]: Net 17.202.40.0/22 Ifp en0 Ifa 17.202.42.113 [SCOPED]
-Remove old[6]: Net 17.202.40.1/32 Ifp en1 Ifa 17.202.42.111
-Remove old[7]: Net 17.202.40.1/32 Ifp en0 Ifa 17.202.42.113 [SCOPED]
-Remove old[8]: Net 17.255.96.0/20 Ifp en2 Ifa 17.255.98.164
-Remove old[9]: Net 17.255.96.1/32 Ifp en2 Ifa 17.255.98.164
-Add new[0]: Net 0.0.0.0/0 Ifp en0 Ifa 169.254.22.44
+Remove old[3]: Net 17.202.40.0/22 Ifp en1 Ifa 17.202.42.111
+Remove old[4]: Net 17.202.40.0/22 Ifp en0 Ifa 17.202.42.113 [SCOPED]
+Remove old[5]: Net 17.202.40.1/32 Ifp en1 Ifa 17.202.42.111
+Remove old[6]: Net 17.202.40.1/32 Ifp en0 Ifa 17.202.42.113 [SCOPED]
+Remove old[7]: Net 17.255.96.0/20 Ifp en2 Ifa 17.255.98.164
+Remove old[8]: Net 17.255.96.1/32 Ifp en2 Ifa 17.255.98.164
+Remove old[9]: Net 169.254.0.0/16 Ifp fw0 Ifa 169.254.11.33 [last]
+Remove old[10]: Net 224.0.0.0/4 Ifp en2 Ifa 17.255.98.164
+Remove old[11]: Net 224.0.0.0/4 Ifp en1 Ifa 17.202.42.111 [SCOPED]
+Remove old[12]: Net 224.0.0.0/4 Ifp en0 Ifa 17.202.42.113 [SCOPED]
+Remove old[13]: Net 224.0.0.0/4 Ifp fw0 Ifa 169.254.11.33 [last] [SCOPED]
+Remove old[14]: Net 255.255.255.255/32 Ifp en2 Ifa 17.255.98.164
+Remove old[15]: Net 255.255.255.255/32 Ifp en1 Ifa 17.202.42.111 [SCOPED]
+Remove old[16]: Net 255.255.255.255/32 Ifp en0 Ifa 17.202.42.113 [SCOPED]
+Remove old[17]: Net 255.255.255.255/32 Ifp fw0 Ifa 169.254.11.33 [last] [SCOPED]
+Add new[0]: Net 169.254.0.0/16 Ifp en0 Ifa 169.254.22.44 [last]
+Add new[1]: Net 224.0.0.0/4 Ifp en0 Ifa 169.254.22.44 [last]
+Add new[2]: Net 255.255.255.255/32 Ifp en0 Ifa 169.254.22.44 [last]
 =================> Apply 'test7', 'test15' End <=================
 
 =================> Apply 'test15', 'test7' Begin <=================
-Old routes ('test15') = <IPv4RouteList[1]> = {
- 0. Net 0.0.0.0/0 Ifp en0 Ifa 169.254.22.44
-}
-Add new[0]: Net 0.0.0.0/0 Ifp en0 Ifa 169.254.22.44
-New Routes ('test7') = <IPv4RouteList[10]> = {
+Old routes ('test15') = <IPv4RouteList[3]> = {
+ 0. Net 169.254.0.0/16 Ifp en0 Ifa 169.254.22.44 [last]
+ 1. Net 224.0.0.0/4 Ifp en0 Ifa 169.254.22.44 [last]
+ 2. Net 255.255.255.255/32 Ifp en0 Ifa 169.254.22.44 [last]
+}
+Add new[0]: Net 169.254.0.0/16 Ifp en0 Ifa 169.254.22.44 [last]
+Add new[1]: Net 224.0.0.0/4 Ifp en0 Ifa 169.254.22.44 [last]
+Add new[2]: Net 255.255.255.255/32 Ifp en0 Ifa 169.254.22.44 [last]
+New Routes ('test7') = <IPv4RouteList[18]> = {
  0. Net 0.0.0.0/0 Gate 17.255.96.1 Ifp en2 Ifa 17.255.98.164
  1. Net 0.0.0.0/0 Gate 17.202.40.1 Ifp en1 Ifa 17.202.42.111 [SCOPED]
  2. Net 0.0.0.0/0 Gate 17.202.40.1 Ifp en0 Ifa 17.202.42.113 [SCOPED]
- 3. Net 0.0.0.0/0 Ifp fw0 Ifa 169.254.11.33 [SCOPED]
- 4. Net 17.202.40.0/22 Ifp en1 Ifa 17.202.42.111
- 5. Net 17.202.40.0/22 Ifp en0 Ifa 17.202.42.113 [SCOPED]
- 6. Net 17.202.40.1/32 Ifp en1 Ifa 17.202.42.111
- 7. Net 17.202.40.1/32 Ifp en0 Ifa 17.202.42.113 [SCOPED]
- 8. Net 17.255.96.0/20 Ifp en2 Ifa 17.255.98.164
- 9. Net 17.255.96.1/32 Ifp en2 Ifa 17.255.98.164
-}
-Remove old[0]: Net 0.0.0.0/0 Ifp en0 Ifa 169.254.22.44
-Add new[9]: Net 17.255.96.1/32 Ifp en2 Ifa 17.255.98.164
+ 3. Net 17.202.40.0/22 Ifp en1 Ifa 17.202.42.111
+ 4. Net 17.202.40.0/22 Ifp en0 Ifa 17.202.42.113 [SCOPED]
+ 5. Net 17.202.40.1/32 Ifp en1 Ifa 17.202.42.111
+ 6. Net 17.202.40.1/32 Ifp en0 Ifa 17.202.42.113 [SCOPED]
+ 7. Net 17.255.96.0/20 Ifp en2 Ifa 17.255.98.164
+ 8. Net 17.255.96.1/32 Ifp en2 Ifa 17.255.98.164
+ 9. Net 169.254.0.0/16 Ifp fw0 Ifa 169.254.11.33 [last]
+10. Net 224.0.0.0/4 Ifp en2 Ifa 17.255.98.164
+11. Net 224.0.0.0/4 Ifp en1 Ifa 17.202.42.111 [SCOPED]
+12. Net 224.0.0.0/4 Ifp en0 Ifa 17.202.42.113 [SCOPED]
+13. Net 224.0.0.0/4 Ifp fw0 Ifa 169.254.11.33 [last] [SCOPED]
+14. Net 255.255.255.255/32 Ifp en2 Ifa 17.255.98.164
+15. Net 255.255.255.255/32 Ifp en1 Ifa 17.202.42.111 [SCOPED]
+16. Net 255.255.255.255/32 Ifp en0 Ifa 17.202.42.113 [SCOPED]
+17. Net 255.255.255.255/32 Ifp fw0 Ifa 169.254.11.33 [last] [SCOPED]
+}
+Remove old[0]: Net 169.254.0.0/16 Ifp en0 Ifa 169.254.22.44 [last]
+Remove old[1]: Net 224.0.0.0/4 Ifp en0 Ifa 169.254.22.44 [last]
+Remove old[2]: Net 255.255.255.255/32 Ifp en0 Ifa 169.254.22.44 [last]
+Add new[8]: Net 17.255.96.1/32 Ifp en2 Ifa 17.255.98.164
 Add new[0]: Net 0.0.0.0/0 Gate 17.255.96.1 Ifp en2 Ifa 17.255.98.164
-Add new[6]: Net 17.202.40.1/32 Ifp en1 Ifa 17.202.42.111
+Add new[5]: Net 17.202.40.1/32 Ifp en1 Ifa 17.202.42.111
 Add new[1]: Net 0.0.0.0/0 Gate 17.202.40.1 Ifp en1 Ifa 17.202.42.111 [SCOPED]
-Add new[7]: Net 17.202.40.1/32 Ifp en0 Ifa 17.202.42.113 [SCOPED]
+Add new[6]: Net 17.202.40.1/32 Ifp en0 Ifa 17.202.42.113 [SCOPED]
 Add new[2]: Net 0.0.0.0/0 Gate 17.202.40.1 Ifp en0 Ifa 17.202.42.113 [SCOPED]
-Add new[3]: Net 0.0.0.0/0 Ifp fw0 Ifa 169.254.11.33 [SCOPED]
-Add new[4]: Net 17.202.40.0/22 Ifp en1 Ifa 17.202.42.111
-Add new[5]: Net 17.202.40.0/22 Ifp en0 Ifa 17.202.42.113 [SCOPED]
-Add new[8]: Net 17.255.96.0/20 Ifp en2 Ifa 17.255.98.164
+Add new[3]: Net 17.202.40.0/22 Ifp en1 Ifa 17.202.42.111
+Add new[4]: Net 17.202.40.0/22 Ifp en0 Ifa 17.202.42.113 [SCOPED]
+Add new[7]: Net 17.255.96.0/20 Ifp en2 Ifa 17.255.98.164
+Add new[9]: Net 169.254.0.0/16 Ifp fw0 Ifa 169.254.11.33 [last]
+Add new[10]: Net 224.0.0.0/4 Ifp en2 Ifa 17.255.98.164
+Add new[11]: Net 224.0.0.0/4 Ifp en1 Ifa 17.202.42.111 [SCOPED]
+Add new[12]: Net 224.0.0.0/4 Ifp en0 Ifa 17.202.42.113 [SCOPED]
+Add new[13]: Net 224.0.0.0/4 Ifp fw0 Ifa 169.254.11.33 [last] [SCOPED]
+Add new[14]: Net 255.255.255.255/32 Ifp en2 Ifa 17.255.98.164
+Add new[15]: Net 255.255.255.255/32 Ifp en1 Ifa 17.202.42.111 [SCOPED]
+Add new[16]: Net 255.255.255.255/32 Ifp en0 Ifa 17.202.42.113 [SCOPED]
+Add new[17]: Net 255.255.255.255/32 Ifp fw0 Ifa 169.254.11.33 [last] [SCOPED]
 =================> Apply 'test15', 'test7' End <=================
 
 =================> Apply 'test7', 'test16' Begin <=================
-Old routes ('test7') = <IPv4RouteList[10]> = {
+Old routes ('test7') = <IPv4RouteList[18]> = {
  0. Net 0.0.0.0/0 Gate 17.255.96.1 Ifp en2 Ifa 17.255.98.164
  1. Net 0.0.0.0/0 Gate 17.202.40.1 Ifp en1 Ifa 17.202.42.111 [SCOPED]
  2. Net 0.0.0.0/0 Gate 17.202.40.1 Ifp en0 Ifa 17.202.42.113 [SCOPED]
- 3. Net 0.0.0.0/0 Ifp fw0 Ifa 169.254.11.33 [SCOPED]
- 4. Net 17.202.40.0/22 Ifp en1 Ifa 17.202.42.111
- 5. Net 17.202.40.0/22 Ifp en0 Ifa 17.202.42.113 [SCOPED]
- 6. Net 17.202.40.1/32 Ifp en1 Ifa 17.202.42.111
- 7. Net 17.202.40.1/32 Ifp en0 Ifa 17.202.42.113 [SCOPED]
- 8. Net 17.255.96.0/20 Ifp en2 Ifa 17.255.98.164
- 9. Net 17.255.96.1/32 Ifp en2 Ifa 17.255.98.164
-}
-Add new[9]: Net 17.255.96.1/32 Ifp en2 Ifa 17.255.98.164
+ 3. Net 17.202.40.0/22 Ifp en1 Ifa 17.202.42.111
+ 4. Net 17.202.40.0/22 Ifp en0 Ifa 17.202.42.113 [SCOPED]
+ 5. Net 17.202.40.1/32 Ifp en1 Ifa 17.202.42.111
+ 6. Net 17.202.40.1/32 Ifp en0 Ifa 17.202.42.113 [SCOPED]
+ 7. Net 17.255.96.0/20 Ifp en2 Ifa 17.255.98.164
+ 8. Net 17.255.96.1/32 Ifp en2 Ifa 17.255.98.164
+ 9. Net 169.254.0.0/16 Ifp fw0 Ifa 169.254.11.33 [last]
+10. Net 224.0.0.0/4 Ifp en2 Ifa 17.255.98.164
+11. Net 224.0.0.0/4 Ifp en1 Ifa 17.202.42.111 [SCOPED]
+12. Net 224.0.0.0/4 Ifp en0 Ifa 17.202.42.113 [SCOPED]
+13. Net 224.0.0.0/4 Ifp fw0 Ifa 169.254.11.33 [last] [SCOPED]
+14. Net 255.255.255.255/32 Ifp en2 Ifa 17.255.98.164
+15. Net 255.255.255.255/32 Ifp en1 Ifa 17.202.42.111 [SCOPED]
+16. Net 255.255.255.255/32 Ifp en0 Ifa 17.202.42.113 [SCOPED]
+17. Net 255.255.255.255/32 Ifp fw0 Ifa 169.254.11.33 [last] [SCOPED]
+}
+Add new[8]: Net 17.255.96.1/32 Ifp en2 Ifa 17.255.98.164
 Add new[0]: Net 0.0.0.0/0 Gate 17.255.96.1 Ifp en2 Ifa 17.255.98.164
-Add new[6]: Net 17.202.40.1/32 Ifp en1 Ifa 17.202.42.111
+Add new[5]: Net 17.202.40.1/32 Ifp en1 Ifa 17.202.42.111
 Add new[1]: Net 0.0.0.0/0 Gate 17.202.40.1 Ifp en1 Ifa 17.202.42.111 [SCOPED]
-Add new[7]: Net 17.202.40.1/32 Ifp en0 Ifa 17.202.42.113 [SCOPED]
+Add new[6]: Net 17.202.40.1/32 Ifp en0 Ifa 17.202.42.113 [SCOPED]
 Add new[2]: Net 0.0.0.0/0 Gate 17.202.40.1 Ifp en0 Ifa 17.202.42.113 [SCOPED]
-Add new[3]: Net 0.0.0.0/0 Ifp fw0 Ifa 169.254.11.33 [SCOPED]
-Add new[4]: Net 17.202.40.0/22 Ifp en1 Ifa 17.202.42.111
-Add new[5]: Net 17.202.40.0/22 Ifp en0 Ifa 17.202.42.113 [SCOPED]
-Add new[8]: Net 17.255.96.0/20 Ifp en2 Ifa 17.255.98.164
-New Routes ('test16') = <IPv4RouteList[50]> = {
+Add new[3]: Net 17.202.40.0/22 Ifp en1 Ifa 17.202.42.111
+Add new[4]: Net 17.202.40.0/22 Ifp en0 Ifa 17.202.42.113 [SCOPED]
+Add new[7]: Net 17.255.96.0/20 Ifp en2 Ifa 17.255.98.164
+Add new[9]: Net 169.254.0.0/16 Ifp fw0 Ifa 169.254.11.33 [last]
+Add new[10]: Net 224.0.0.0/4 Ifp en2 Ifa 17.255.98.164
+Add new[11]: Net 224.0.0.0/4 Ifp en1 Ifa 17.202.42.111 [SCOPED]
+Add new[12]: Net 224.0.0.0/4 Ifp en0 Ifa 17.202.42.113 [SCOPED]
+Add new[13]: Net 224.0.0.0/4 Ifp fw0 Ifa 169.254.11.33 [last] [SCOPED]
+Add new[14]: Net 255.255.255.255/32 Ifp en2 Ifa 17.255.98.164
+Add new[15]: Net 255.255.255.255/32 Ifp en1 Ifa 17.202.42.111 [SCOPED]
+Add new[16]: Net 255.255.255.255/32 Ifp en0 Ifa 17.202.42.113 [SCOPED]
+Add new[17]: Net 255.255.255.255/32 Ifp fw0 Ifa 169.254.11.33 [last] [SCOPED]
+New Routes ('test16') = <IPv4RouteList[54]> = {
  0. Net 0.0.0.0/0 Gate 10.0.0.1 Ifp en0 Ifa 10.0.0.10
  1. Net 0.0.0.0/0 Ifp utun0 Ifa 17.153.46.24 [SCOPED]
  2. Net 10.0.0.0/24 Ifp en0 Ifa 10.0.0.10
@@ -12027,17 +17249,29 @@ New Routes ('test16') = <IPv4RouteList[50]> = {
 47. Net 192.35.50.0/24 Gate 17.153.46.24 Ifp utun0 Ifa 17.153.46.24
 48. Net 204.179.20.0/24 Gate 17.153.46.24 Ifp utun0 Ifa 17.153.46.24
 49. Net 206.112.116.0/24 Gate 17.153.46.24 Ifp utun0 Ifa 17.153.46.24
+50. Net 224.0.0.0/4 Ifp en0 Ifa 10.0.0.10
+51. Net 224.0.0.0/4 Ifp utun0 Ifa 17.153.46.24 [SCOPED]
+52. Net 255.255.255.255/32 Ifp en0 Ifa 10.0.0.10
+53. Net 255.255.255.255/32 Ifp utun0 Ifa 17.153.46.24 [SCOPED]
 }
 Remove old[0]: Net 0.0.0.0/0 Gate 17.255.96.1 Ifp en2 Ifa 17.255.98.164
 Remove old[1]: Net 0.0.0.0/0 Gate 17.202.40.1 Ifp en1 Ifa 17.202.42.111 [SCOPED]
 Remove old[2]: Net 0.0.0.0/0 Gate 17.202.40.1 Ifp en0 Ifa 17.202.42.113 [SCOPED]
-Remove old[3]: Net 0.0.0.0/0 Ifp fw0 Ifa 169.254.11.33 [SCOPED]
-Remove old[4]: Net 17.202.40.0/22 Ifp en1 Ifa 17.202.42.111
-Remove old[5]: Net 17.202.40.0/22 Ifp en0 Ifa 17.202.42.113 [SCOPED]
-Remove old[6]: Net 17.202.40.1/32 Ifp en1 Ifa 17.202.42.111
-Remove old[7]: Net 17.202.40.1/32 Ifp en0 Ifa 17.202.42.113 [SCOPED]
-Remove old[8]: Net 17.255.96.0/20 Ifp en2 Ifa 17.255.98.164
-Remove old[9]: Net 17.255.96.1/32 Ifp en2 Ifa 17.255.98.164
+Remove old[3]: Net 17.202.40.0/22 Ifp en1 Ifa 17.202.42.111
+Remove old[4]: Net 17.202.40.0/22 Ifp en0 Ifa 17.202.42.113 [SCOPED]
+Remove old[5]: Net 17.202.40.1/32 Ifp en1 Ifa 17.202.42.111
+Remove old[6]: Net 17.202.40.1/32 Ifp en0 Ifa 17.202.42.113 [SCOPED]
+Remove old[7]: Net 17.255.96.0/20 Ifp en2 Ifa 17.255.98.164
+Remove old[8]: Net 17.255.96.1/32 Ifp en2 Ifa 17.255.98.164
+Remove old[9]: Net 169.254.0.0/16 Ifp fw0 Ifa 169.254.11.33 [last]
+Remove old[10]: Net 224.0.0.0/4 Ifp en2 Ifa 17.255.98.164
+Remove old[11]: Net 224.0.0.0/4 Ifp en1 Ifa 17.202.42.111 [SCOPED]
+Remove old[12]: Net 224.0.0.0/4 Ifp en0 Ifa 17.202.42.113 [SCOPED]
+Remove old[13]: Net 224.0.0.0/4 Ifp fw0 Ifa 169.254.11.33 [last] [SCOPED]
+Remove old[14]: Net 255.255.255.255/32 Ifp en2 Ifa 17.255.98.164
+Remove old[15]: Net 255.255.255.255/32 Ifp en1 Ifa 17.202.42.111 [SCOPED]
+Remove old[16]: Net 255.255.255.255/32 Ifp en0 Ifa 17.202.42.113 [SCOPED]
+Remove old[17]: Net 255.255.255.255/32 Ifp fw0 Ifa 169.254.11.33 [last] [SCOPED]
 Add new[3]: Net 10.0.0.1/32 Ifp en0 Ifa 10.0.0.10
 Add new[0]: Net 0.0.0.0/0 Gate 10.0.0.1 Ifp en0 Ifa 10.0.0.10
 Add new[1]: Net 0.0.0.0/0 Ifp utun0 Ifa 17.153.46.24 [SCOPED]
@@ -12088,10 +17322,14 @@ Add new[46]: Net 172.16.2.0/24 Gate 17.153.46.24 Ifp utun0 Ifa 17.153.46.24
 Add new[47]: Net 192.35.50.0/24 Gate 17.153.46.24 Ifp utun0 Ifa 17.153.46.24
 Add new[48]: Net 204.179.20.0/24 Gate 17.153.46.24 Ifp utun0 Ifa 17.153.46.24
 Add new[49]: Net 206.112.116.0/24 Gate 17.153.46.24 Ifp utun0 Ifa 17.153.46.24
+Add new[50]: Net 224.0.0.0/4 Ifp en0 Ifa 10.0.0.10
+Add new[51]: Net 224.0.0.0/4 Ifp utun0 Ifa 17.153.46.24 [SCOPED]
+Add new[52]: Net 255.255.255.255/32 Ifp en0 Ifa 10.0.0.10
+Add new[53]: Net 255.255.255.255/32 Ifp utun0 Ifa 17.153.46.24 [SCOPED]
 =================> Apply 'test7', 'test16' End <=================
 
 =================> Apply 'test16', 'test7' Begin <=================
-Old routes ('test16') = <IPv4RouteList[50]> = {
+Old routes ('test16') = <IPv4RouteList[54]> = {
  0. Net 0.0.0.0/0 Gate 10.0.0.1 Ifp en0 Ifa 10.0.0.10
  1. Net 0.0.0.0/0 Ifp utun0 Ifa 17.153.46.24 [SCOPED]
  2. Net 10.0.0.0/24 Ifp en0 Ifa 10.0.0.10
@@ -12142,6 +17380,10 @@ Old routes ('test16') = <IPv4RouteList[50]> = {
 47. Net 192.35.50.0/24 Gate 17.153.46.24 Ifp utun0 Ifa 17.153.46.24
 48. Net 204.179.20.0/24 Gate 17.153.46.24 Ifp utun0 Ifa 17.153.46.24
 49. Net 206.112.116.0/24 Gate 17.153.46.24 Ifp utun0 Ifa 17.153.46.24
+50. Net 224.0.0.0/4 Ifp en0 Ifa 10.0.0.10
+51. Net 224.0.0.0/4 Ifp utun0 Ifa 17.153.46.24 [SCOPED]
+52. Net 255.255.255.255/32 Ifp en0 Ifa 10.0.0.10
+53. Net 255.255.255.255/32 Ifp utun0 Ifa 17.153.46.24 [SCOPED]
 }
 Add new[3]: Net 10.0.0.1/32 Ifp en0 Ifa 10.0.0.10
 Add new[0]: Net 0.0.0.0/0 Gate 10.0.0.1 Ifp en0 Ifa 10.0.0.10
@@ -12193,17 +17435,29 @@ Add new[46]: Net 172.16.2.0/24 Gate 17.153.46.24 Ifp utun0 Ifa 17.153.46.24
 Add new[47]: Net 192.35.50.0/24 Gate 17.153.46.24 Ifp utun0 Ifa 17.153.46.24
 Add new[48]: Net 204.179.20.0/24 Gate 17.153.46.24 Ifp utun0 Ifa 17.153.46.24
 Add new[49]: Net 206.112.116.0/24 Gate 17.153.46.24 Ifp utun0 Ifa 17.153.46.24
-New Routes ('test7') = <IPv4RouteList[10]> = {
+Add new[50]: Net 224.0.0.0/4 Ifp en0 Ifa 10.0.0.10
+Add new[51]: Net 224.0.0.0/4 Ifp utun0 Ifa 17.153.46.24 [SCOPED]
+Add new[52]: Net 255.255.255.255/32 Ifp en0 Ifa 10.0.0.10
+Add new[53]: Net 255.255.255.255/32 Ifp utun0 Ifa 17.153.46.24 [SCOPED]
+New Routes ('test7') = <IPv4RouteList[18]> = {
  0. Net 0.0.0.0/0 Gate 17.255.96.1 Ifp en2 Ifa 17.255.98.164
  1. Net 0.0.0.0/0 Gate 17.202.40.1 Ifp en1 Ifa 17.202.42.111 [SCOPED]
  2. Net 0.0.0.0/0 Gate 17.202.40.1 Ifp en0 Ifa 17.202.42.113 [SCOPED]
- 3. Net 0.0.0.0/0 Ifp fw0 Ifa 169.254.11.33 [SCOPED]
- 4. Net 17.202.40.0/22 Ifp en1 Ifa 17.202.42.111
- 5. Net 17.202.40.0/22 Ifp en0 Ifa 17.202.42.113 [SCOPED]
- 6. Net 17.202.40.1/32 Ifp en1 Ifa 17.202.42.111
- 7. Net 17.202.40.1/32 Ifp en0 Ifa 17.202.42.113 [SCOPED]
- 8. Net 17.255.96.0/20 Ifp en2 Ifa 17.255.98.164
- 9. Net 17.255.96.1/32 Ifp en2 Ifa 17.255.98.164
+ 3. Net 17.202.40.0/22 Ifp en1 Ifa 17.202.42.111
+ 4. Net 17.202.40.0/22 Ifp en0 Ifa 17.202.42.113 [SCOPED]
+ 5. Net 17.202.40.1/32 Ifp en1 Ifa 17.202.42.111
+ 6. Net 17.202.40.1/32 Ifp en0 Ifa 17.202.42.113 [SCOPED]
+ 7. Net 17.255.96.0/20 Ifp en2 Ifa 17.255.98.164
+ 8. Net 17.255.96.1/32 Ifp en2 Ifa 17.255.98.164
+ 9. Net 169.254.0.0/16 Ifp fw0 Ifa 169.254.11.33 [last]
+10. Net 224.0.0.0/4 Ifp en2 Ifa 17.255.98.164
+11. Net 224.0.0.0/4 Ifp en1 Ifa 17.202.42.111 [SCOPED]
+12. Net 224.0.0.0/4 Ifp en0 Ifa 17.202.42.113 [SCOPED]
+13. Net 224.0.0.0/4 Ifp fw0 Ifa 169.254.11.33 [last] [SCOPED]
+14. Net 255.255.255.255/32 Ifp en2 Ifa 17.255.98.164
+15. Net 255.255.255.255/32 Ifp en1 Ifa 17.202.42.111 [SCOPED]
+16. Net 255.255.255.255/32 Ifp en0 Ifa 17.202.42.113 [SCOPED]
+17. Net 255.255.255.255/32 Ifp fw0 Ifa 169.254.11.33 [last] [SCOPED]
 }
 Remove old[0]: Net 0.0.0.0/0 Gate 10.0.0.1 Ifp en0 Ifa 10.0.0.10
 Remove old[1]: Net 0.0.0.0/0 Ifp utun0 Ifa 17.153.46.24 [SCOPED]
@@ -12255,75 +17509,123 @@ Remove old[46]: Net 172.16.2.0/24 Gate 17.153.46.24 Ifp utun0 Ifa 17.153.46.24
 Remove old[47]: Net 192.35.50.0/24 Gate 17.153.46.24 Ifp utun0 Ifa 17.153.46.24
 Remove old[48]: Net 204.179.20.0/24 Gate 17.153.46.24 Ifp utun0 Ifa 17.153.46.24
 Remove old[49]: Net 206.112.116.0/24 Gate 17.153.46.24 Ifp utun0 Ifa 17.153.46.24
-Add new[9]: Net 17.255.96.1/32 Ifp en2 Ifa 17.255.98.164
+Remove old[50]: Net 224.0.0.0/4 Ifp en0 Ifa 10.0.0.10
+Remove old[51]: Net 224.0.0.0/4 Ifp utun0 Ifa 17.153.46.24 [SCOPED]
+Remove old[52]: Net 255.255.255.255/32 Ifp en0 Ifa 10.0.0.10
+Remove old[53]: Net 255.255.255.255/32 Ifp utun0 Ifa 17.153.46.24 [SCOPED]
+Add new[8]: Net 17.255.96.1/32 Ifp en2 Ifa 17.255.98.164
 Add new[0]: Net 0.0.0.0/0 Gate 17.255.96.1 Ifp en2 Ifa 17.255.98.164
-Add new[6]: Net 17.202.40.1/32 Ifp en1 Ifa 17.202.42.111
+Add new[5]: Net 17.202.40.1/32 Ifp en1 Ifa 17.202.42.111
 Add new[1]: Net 0.0.0.0/0 Gate 17.202.40.1 Ifp en1 Ifa 17.202.42.111 [SCOPED]
-Add new[7]: Net 17.202.40.1/32 Ifp en0 Ifa 17.202.42.113 [SCOPED]
+Add new[6]: Net 17.202.40.1/32 Ifp en0 Ifa 17.202.42.113 [SCOPED]
 Add new[2]: Net 0.0.0.0/0 Gate 17.202.40.1 Ifp en0 Ifa 17.202.42.113 [SCOPED]
-Add new[3]: Net 0.0.0.0/0 Ifp fw0 Ifa 169.254.11.33 [SCOPED]
-Add new[4]: Net 17.202.40.0/22 Ifp en1 Ifa 17.202.42.111
-Add new[5]: Net 17.202.40.0/22 Ifp en0 Ifa 17.202.42.113 [SCOPED]
-Add new[8]: Net 17.255.96.0/20 Ifp en2 Ifa 17.255.98.164
+Add new[3]: Net 17.202.40.0/22 Ifp en1 Ifa 17.202.42.111
+Add new[4]: Net 17.202.40.0/22 Ifp en0 Ifa 17.202.42.113 [SCOPED]
+Add new[7]: Net 17.255.96.0/20 Ifp en2 Ifa 17.255.98.164
+Add new[9]: Net 169.254.0.0/16 Ifp fw0 Ifa 169.254.11.33 [last]
+Add new[10]: Net 224.0.0.0/4 Ifp en2 Ifa 17.255.98.164
+Add new[11]: Net 224.0.0.0/4 Ifp en1 Ifa 17.202.42.111 [SCOPED]
+Add new[12]: Net 224.0.0.0/4 Ifp en0 Ifa 17.202.42.113 [SCOPED]
+Add new[13]: Net 224.0.0.0/4 Ifp fw0 Ifa 169.254.11.33 [last] [SCOPED]
+Add new[14]: Net 255.255.255.255/32 Ifp en2 Ifa 17.255.98.164
+Add new[15]: Net 255.255.255.255/32 Ifp en1 Ifa 17.202.42.111 [SCOPED]
+Add new[16]: Net 255.255.255.255/32 Ifp en0 Ifa 17.202.42.113 [SCOPED]
+Add new[17]: Net 255.255.255.255/32 Ifp fw0 Ifa 169.254.11.33 [last] [SCOPED]
 =================> Apply 'test16', 'test7' End <=================
 
 =================> Apply 'test7', 'test17' Begin <=================
-Old routes ('test7') = <IPv4RouteList[10]> = {
+Old routes ('test7') = <IPv4RouteList[18]> = {
  0. Net 0.0.0.0/0 Gate 17.255.96.1 Ifp en2 Ifa 17.255.98.164
  1. Net 0.0.0.0/0 Gate 17.202.40.1 Ifp en1 Ifa 17.202.42.111 [SCOPED]
  2. Net 0.0.0.0/0 Gate 17.202.40.1 Ifp en0 Ifa 17.202.42.113 [SCOPED]
- 3. Net 0.0.0.0/0 Ifp fw0 Ifa 169.254.11.33 [SCOPED]
- 4. Net 17.202.40.0/22 Ifp en1 Ifa 17.202.42.111
- 5. Net 17.202.40.0/22 Ifp en0 Ifa 17.202.42.113 [SCOPED]
- 6. Net 17.202.40.1/32 Ifp en1 Ifa 17.202.42.111
- 7. Net 17.202.40.1/32 Ifp en0 Ifa 17.202.42.113 [SCOPED]
- 8. Net 17.255.96.0/20 Ifp en2 Ifa 17.255.98.164
- 9. Net 17.255.96.1/32 Ifp en2 Ifa 17.255.98.164
-}
-Add new[9]: Net 17.255.96.1/32 Ifp en2 Ifa 17.255.98.164
+ 3. Net 17.202.40.0/22 Ifp en1 Ifa 17.202.42.111
+ 4. Net 17.202.40.0/22 Ifp en0 Ifa 17.202.42.113 [SCOPED]
+ 5. Net 17.202.40.1/32 Ifp en1 Ifa 17.202.42.111
+ 6. Net 17.202.40.1/32 Ifp en0 Ifa 17.202.42.113 [SCOPED]
+ 7. Net 17.255.96.0/20 Ifp en2 Ifa 17.255.98.164
+ 8. Net 17.255.96.1/32 Ifp en2 Ifa 17.255.98.164
+ 9. Net 169.254.0.0/16 Ifp fw0 Ifa 169.254.11.33 [last]
+10. Net 224.0.0.0/4 Ifp en2 Ifa 17.255.98.164
+11. Net 224.0.0.0/4 Ifp en1 Ifa 17.202.42.111 [SCOPED]
+12. Net 224.0.0.0/4 Ifp en0 Ifa 17.202.42.113 [SCOPED]
+13. Net 224.0.0.0/4 Ifp fw0 Ifa 169.254.11.33 [last] [SCOPED]
+14. Net 255.255.255.255/32 Ifp en2 Ifa 17.255.98.164
+15. Net 255.255.255.255/32 Ifp en1 Ifa 17.202.42.111 [SCOPED]
+16. Net 255.255.255.255/32 Ifp en0 Ifa 17.202.42.113 [SCOPED]
+17. Net 255.255.255.255/32 Ifp fw0 Ifa 169.254.11.33 [last] [SCOPED]
+}
+Add new[8]: Net 17.255.96.1/32 Ifp en2 Ifa 17.255.98.164
 Add new[0]: Net 0.0.0.0/0 Gate 17.255.96.1 Ifp en2 Ifa 17.255.98.164
-Add new[6]: Net 17.202.40.1/32 Ifp en1 Ifa 17.202.42.111
+Add new[5]: Net 17.202.40.1/32 Ifp en1 Ifa 17.202.42.111
 Add new[1]: Net 0.0.0.0/0 Gate 17.202.40.1 Ifp en1 Ifa 17.202.42.111 [SCOPED]
-Add new[7]: Net 17.202.40.1/32 Ifp en0 Ifa 17.202.42.113 [SCOPED]
+Add new[6]: Net 17.202.40.1/32 Ifp en0 Ifa 17.202.42.113 [SCOPED]
 Add new[2]: Net 0.0.0.0/0 Gate 17.202.40.1 Ifp en0 Ifa 17.202.42.113 [SCOPED]
-Add new[3]: Net 0.0.0.0/0 Ifp fw0 Ifa 169.254.11.33 [SCOPED]
-Add new[4]: Net 17.202.40.0/22 Ifp en1 Ifa 17.202.42.111
-Add new[5]: Net 17.202.40.0/22 Ifp en0 Ifa 17.202.42.113 [SCOPED]
-Add new[8]: Net 17.255.96.0/20 Ifp en2 Ifa 17.255.98.164
-New Routes ('test17') = <IPv4RouteList[6]> = {
+Add new[3]: Net 17.202.40.0/22 Ifp en1 Ifa 17.202.42.111
+Add new[4]: Net 17.202.40.0/22 Ifp en0 Ifa 17.202.42.113 [SCOPED]
+Add new[7]: Net 17.255.96.0/20 Ifp en2 Ifa 17.255.98.164
+Add new[9]: Net 169.254.0.0/16 Ifp fw0 Ifa 169.254.11.33 [last]
+Add new[10]: Net 224.0.0.0/4 Ifp en2 Ifa 17.255.98.164
+Add new[11]: Net 224.0.0.0/4 Ifp en1 Ifa 17.202.42.111 [SCOPED]
+Add new[12]: Net 224.0.0.0/4 Ifp en0 Ifa 17.202.42.113 [SCOPED]
+Add new[13]: Net 224.0.0.0/4 Ifp fw0 Ifa 169.254.11.33 [last] [SCOPED]
+Add new[14]: Net 255.255.255.255/32 Ifp en2 Ifa 17.255.98.164
+Add new[15]: Net 255.255.255.255/32 Ifp en1 Ifa 17.202.42.111 [SCOPED]
+Add new[16]: Net 255.255.255.255/32 Ifp en0 Ifa 17.202.42.113 [SCOPED]
+Add new[17]: Net 255.255.255.255/32 Ifp fw0 Ifa 169.254.11.33 [last] [SCOPED]
+New Routes ('test17') = <IPv4RouteList[10]> = {
  0. Net 0.0.0.0/0 Gate 10.0.0.1 Ifp en0 Ifa 10.0.0.10
  1. Net 0.0.0.0/0 Gate 192.168.2.1 Ifp en1 Ifa 192.168.2.50 [never] [SCOPED]
  2. Net 10.0.0.0/24 Ifp en0 Ifa 10.0.0.10
  3. Net 10.0.0.1/32 Ifp en0 Ifa 10.0.0.10
  4. Net 192.168.2.0/24 Ifp en1 Ifa 192.168.2.50 [last]
  5. Net 192.168.2.1/32 Ifp en1 Ifa 192.168.2.50 [last]
+ 6. Net 224.0.0.0/4 Ifp en0 Ifa 10.0.0.10
+ 7. Net 224.0.0.0/4 Ifp en1 Ifa 192.168.2.50 [last] [SCOPED]
+ 8. Net 255.255.255.255/32 Ifp en0 Ifa 10.0.0.10
+ 9. Net 255.255.255.255/32 Ifp en1 Ifa 192.168.2.50 [last] [SCOPED]
 }
 Remove old[0]: Net 0.0.0.0/0 Gate 17.255.96.1 Ifp en2 Ifa 17.255.98.164
 Remove old[1]: Net 0.0.0.0/0 Gate 17.202.40.1 Ifp en1 Ifa 17.202.42.111 [SCOPED]
 Remove old[2]: Net 0.0.0.0/0 Gate 17.202.40.1 Ifp en0 Ifa 17.202.42.113 [SCOPED]
-Remove old[3]: Net 0.0.0.0/0 Ifp fw0 Ifa 169.254.11.33 [SCOPED]
-Remove old[4]: Net 17.202.40.0/22 Ifp en1 Ifa 17.202.42.111
-Remove old[5]: Net 17.202.40.0/22 Ifp en0 Ifa 17.202.42.113 [SCOPED]
-Remove old[6]: Net 17.202.40.1/32 Ifp en1 Ifa 17.202.42.111
-Remove old[7]: Net 17.202.40.1/32 Ifp en0 Ifa 17.202.42.113 [SCOPED]
-Remove old[8]: Net 17.255.96.0/20 Ifp en2 Ifa 17.255.98.164
-Remove old[9]: Net 17.255.96.1/32 Ifp en2 Ifa 17.255.98.164
+Remove old[3]: Net 17.202.40.0/22 Ifp en1 Ifa 17.202.42.111
+Remove old[4]: Net 17.202.40.0/22 Ifp en0 Ifa 17.202.42.113 [SCOPED]
+Remove old[5]: Net 17.202.40.1/32 Ifp en1 Ifa 17.202.42.111
+Remove old[6]: Net 17.202.40.1/32 Ifp en0 Ifa 17.202.42.113 [SCOPED]
+Remove old[7]: Net 17.255.96.0/20 Ifp en2 Ifa 17.255.98.164
+Remove old[8]: Net 17.255.96.1/32 Ifp en2 Ifa 17.255.98.164
+Remove old[9]: Net 169.254.0.0/16 Ifp fw0 Ifa 169.254.11.33 [last]
+Remove old[10]: Net 224.0.0.0/4 Ifp en2 Ifa 17.255.98.164
+Remove old[11]: Net 224.0.0.0/4 Ifp en1 Ifa 17.202.42.111 [SCOPED]
+Remove old[12]: Net 224.0.0.0/4 Ifp en0 Ifa 17.202.42.113 [SCOPED]
+Remove old[13]: Net 224.0.0.0/4 Ifp fw0 Ifa 169.254.11.33 [last] [SCOPED]
+Remove old[14]: Net 255.255.255.255/32 Ifp en2 Ifa 17.255.98.164
+Remove old[15]: Net 255.255.255.255/32 Ifp en1 Ifa 17.202.42.111 [SCOPED]
+Remove old[16]: Net 255.255.255.255/32 Ifp en0 Ifa 17.202.42.113 [SCOPED]
+Remove old[17]: Net 255.255.255.255/32 Ifp fw0 Ifa 169.254.11.33 [last] [SCOPED]
 Add new[3]: Net 10.0.0.1/32 Ifp en0 Ifa 10.0.0.10
 Add new[0]: Net 0.0.0.0/0 Gate 10.0.0.1 Ifp en0 Ifa 10.0.0.10
 Add new[5]: Net 192.168.2.1/32 Ifp en1 Ifa 192.168.2.50 [last]
 Add new[1]: Net 0.0.0.0/0 Gate 192.168.2.1 Ifp en1 Ifa 192.168.2.50 [never] [SCOPED]
 Add new[2]: Net 10.0.0.0/24 Ifp en0 Ifa 10.0.0.10
 Add new[4]: Net 192.168.2.0/24 Ifp en1 Ifa 192.168.2.50 [last]
+Add new[6]: Net 224.0.0.0/4 Ifp en0 Ifa 10.0.0.10
+Add new[7]: Net 224.0.0.0/4 Ifp en1 Ifa 192.168.2.50 [last] [SCOPED]
+Add new[8]: Net 255.255.255.255/32 Ifp en0 Ifa 10.0.0.10
+Add new[9]: Net 255.255.255.255/32 Ifp en1 Ifa 192.168.2.50 [last] [SCOPED]
 =================> Apply 'test7', 'test17' End <=================
 
 =================> Apply 'test17', 'test7' Begin <=================
-Old routes ('test17') = <IPv4RouteList[6]> = {
+Old routes ('test17') = <IPv4RouteList[10]> = {
  0. Net 0.0.0.0/0 Gate 10.0.0.1 Ifp en0 Ifa 10.0.0.10
  1. Net 0.0.0.0/0 Gate 192.168.2.1 Ifp en1 Ifa 192.168.2.50 [never] [SCOPED]
  2. Net 10.0.0.0/24 Ifp en0 Ifa 10.0.0.10
  3. Net 10.0.0.1/32 Ifp en0 Ifa 10.0.0.10
  4. Net 192.168.2.0/24 Ifp en1 Ifa 192.168.2.50 [last]
  5. Net 192.168.2.1/32 Ifp en1 Ifa 192.168.2.50 [last]
+ 6. Net 224.0.0.0/4 Ifp en0 Ifa 10.0.0.10
+ 7. Net 224.0.0.0/4 Ifp en1 Ifa 192.168.2.50 [last] [SCOPED]
+ 8. Net 255.255.255.255/32 Ifp en0 Ifa 10.0.0.10
+ 9. Net 255.255.255.255/32 Ifp en1 Ifa 192.168.2.50 [last] [SCOPED]
 }
 Add new[3]: Net 10.0.0.1/32 Ifp en0 Ifa 10.0.0.10
 Add new[0]: Net 0.0.0.0/0 Gate 10.0.0.1 Ifp en0 Ifa 10.0.0.10
@@ -12331,17 +17633,29 @@ Add new[5]: Net 192.168.2.1/32 Ifp en1 Ifa 192.168.2.50 [last]
 Add new[1]: Net 0.0.0.0/0 Gate 192.168.2.1 Ifp en1 Ifa 192.168.2.50 [never] [SCOPED]
 Add new[2]: Net 10.0.0.0/24 Ifp en0 Ifa 10.0.0.10
 Add new[4]: Net 192.168.2.0/24 Ifp en1 Ifa 192.168.2.50 [last]
-New Routes ('test7') = <IPv4RouteList[10]> = {
+Add new[6]: Net 224.0.0.0/4 Ifp en0 Ifa 10.0.0.10
+Add new[7]: Net 224.0.0.0/4 Ifp en1 Ifa 192.168.2.50 [last] [SCOPED]
+Add new[8]: Net 255.255.255.255/32 Ifp en0 Ifa 10.0.0.10
+Add new[9]: Net 255.255.255.255/32 Ifp en1 Ifa 192.168.2.50 [last] [SCOPED]
+New Routes ('test7') = <IPv4RouteList[18]> = {
  0. Net 0.0.0.0/0 Gate 17.255.96.1 Ifp en2 Ifa 17.255.98.164
  1. Net 0.0.0.0/0 Gate 17.202.40.1 Ifp en1 Ifa 17.202.42.111 [SCOPED]
  2. Net 0.0.0.0/0 Gate 17.202.40.1 Ifp en0 Ifa 17.202.42.113 [SCOPED]
- 3. Net 0.0.0.0/0 Ifp fw0 Ifa 169.254.11.33 [SCOPED]
- 4. Net 17.202.40.0/22 Ifp en1 Ifa 17.202.42.111
- 5. Net 17.202.40.0/22 Ifp en0 Ifa 17.202.42.113 [SCOPED]
- 6. Net 17.202.40.1/32 Ifp en1 Ifa 17.202.42.111
- 7. Net 17.202.40.1/32 Ifp en0 Ifa 17.202.42.113 [SCOPED]
- 8. Net 17.255.96.0/20 Ifp en2 Ifa 17.255.98.164
- 9. Net 17.255.96.1/32 Ifp en2 Ifa 17.255.98.164
+ 3. Net 17.202.40.0/22 Ifp en1 Ifa 17.202.42.111
+ 4. Net 17.202.40.0/22 Ifp en0 Ifa 17.202.42.113 [SCOPED]
+ 5. Net 17.202.40.1/32 Ifp en1 Ifa 17.202.42.111
+ 6. Net 17.202.40.1/32 Ifp en0 Ifa 17.202.42.113 [SCOPED]
+ 7. Net 17.255.96.0/20 Ifp en2 Ifa 17.255.98.164
+ 8. Net 17.255.96.1/32 Ifp en2 Ifa 17.255.98.164
+ 9. Net 169.254.0.0/16 Ifp fw0 Ifa 169.254.11.33 [last]
+10. Net 224.0.0.0/4 Ifp en2 Ifa 17.255.98.164
+11. Net 224.0.0.0/4 Ifp en1 Ifa 17.202.42.111 [SCOPED]
+12. Net 224.0.0.0/4 Ifp en0 Ifa 17.202.42.113 [SCOPED]
+13. Net 224.0.0.0/4 Ifp fw0 Ifa 169.254.11.33 [last] [SCOPED]
+14. Net 255.255.255.255/32 Ifp en2 Ifa 17.255.98.164
+15. Net 255.255.255.255/32 Ifp en1 Ifa 17.202.42.111 [SCOPED]
+16. Net 255.255.255.255/32 Ifp en0 Ifa 17.202.42.113 [SCOPED]
+17. Net 255.255.255.255/32 Ifp fw0 Ifa 169.254.11.33 [last] [SCOPED]
 }
 Remove old[0]: Net 0.0.0.0/0 Gate 10.0.0.1 Ifp en0 Ifa 10.0.0.10
 Remove old[1]: Net 0.0.0.0/0 Gate 192.168.2.1 Ifp en1 Ifa 192.168.2.50 [never] [SCOPED]
@@ -12349,42 +17663,70 @@ Remove old[2]: Net 10.0.0.0/24 Ifp en0 Ifa 10.0.0.10
 Remove old[3]: Net 10.0.0.1/32 Ifp en0 Ifa 10.0.0.10
 Remove old[4]: Net 192.168.2.0/24 Ifp en1 Ifa 192.168.2.50 [last]
 Remove old[5]: Net 192.168.2.1/32 Ifp en1 Ifa 192.168.2.50 [last]
-Add new[9]: Net 17.255.96.1/32 Ifp en2 Ifa 17.255.98.164
+Remove old[6]: Net 224.0.0.0/4 Ifp en0 Ifa 10.0.0.10
+Remove old[7]: Net 224.0.0.0/4 Ifp en1 Ifa 192.168.2.50 [last] [SCOPED]
+Remove old[8]: Net 255.255.255.255/32 Ifp en0 Ifa 10.0.0.10
+Remove old[9]: Net 255.255.255.255/32 Ifp en1 Ifa 192.168.2.50 [last] [SCOPED]
+Add new[8]: Net 17.255.96.1/32 Ifp en2 Ifa 17.255.98.164
 Add new[0]: Net 0.0.0.0/0 Gate 17.255.96.1 Ifp en2 Ifa 17.255.98.164
-Add new[6]: Net 17.202.40.1/32 Ifp en1 Ifa 17.202.42.111
+Add new[5]: Net 17.202.40.1/32 Ifp en1 Ifa 17.202.42.111
 Add new[1]: Net 0.0.0.0/0 Gate 17.202.40.1 Ifp en1 Ifa 17.202.42.111 [SCOPED]
-Add new[7]: Net 17.202.40.1/32 Ifp en0 Ifa 17.202.42.113 [SCOPED]
+Add new[6]: Net 17.202.40.1/32 Ifp en0 Ifa 17.202.42.113 [SCOPED]
 Add new[2]: Net 0.0.0.0/0 Gate 17.202.40.1 Ifp en0 Ifa 17.202.42.113 [SCOPED]
-Add new[3]: Net 0.0.0.0/0 Ifp fw0 Ifa 169.254.11.33 [SCOPED]
-Add new[4]: Net 17.202.40.0/22 Ifp en1 Ifa 17.202.42.111
-Add new[5]: Net 17.202.40.0/22 Ifp en0 Ifa 17.202.42.113 [SCOPED]
-Add new[8]: Net 17.255.96.0/20 Ifp en2 Ifa 17.255.98.164
+Add new[3]: Net 17.202.40.0/22 Ifp en1 Ifa 17.202.42.111
+Add new[4]: Net 17.202.40.0/22 Ifp en0 Ifa 17.202.42.113 [SCOPED]
+Add new[7]: Net 17.255.96.0/20 Ifp en2 Ifa 17.255.98.164
+Add new[9]: Net 169.254.0.0/16 Ifp fw0 Ifa 169.254.11.33 [last]
+Add new[10]: Net 224.0.0.0/4 Ifp en2 Ifa 17.255.98.164
+Add new[11]: Net 224.0.0.0/4 Ifp en1 Ifa 17.202.42.111 [SCOPED]
+Add new[12]: Net 224.0.0.0/4 Ifp en0 Ifa 17.202.42.113 [SCOPED]
+Add new[13]: Net 224.0.0.0/4 Ifp fw0 Ifa 169.254.11.33 [last] [SCOPED]
+Add new[14]: Net 255.255.255.255/32 Ifp en2 Ifa 17.255.98.164
+Add new[15]: Net 255.255.255.255/32 Ifp en1 Ifa 17.202.42.111 [SCOPED]
+Add new[16]: Net 255.255.255.255/32 Ifp en0 Ifa 17.202.42.113 [SCOPED]
+Add new[17]: Net 255.255.255.255/32 Ifp fw0 Ifa 169.254.11.33 [last] [SCOPED]
 =================> Apply 'test17', 'test7' End <=================
 
 =================> Apply 'test7', 'test18' Begin <=================
-Old routes ('test7') = <IPv4RouteList[10]> = {
+Old routes ('test7') = <IPv4RouteList[18]> = {
  0. Net 0.0.0.0/0 Gate 17.255.96.1 Ifp en2 Ifa 17.255.98.164
  1. Net 0.0.0.0/0 Gate 17.202.40.1 Ifp en1 Ifa 17.202.42.111 [SCOPED]
  2. Net 0.0.0.0/0 Gate 17.202.40.1 Ifp en0 Ifa 17.202.42.113 [SCOPED]
- 3. Net 0.0.0.0/0 Ifp fw0 Ifa 169.254.11.33 [SCOPED]
- 4. Net 17.202.40.0/22 Ifp en1 Ifa 17.202.42.111
- 5. Net 17.202.40.0/22 Ifp en0 Ifa 17.202.42.113 [SCOPED]
- 6. Net 17.202.40.1/32 Ifp en1 Ifa 17.202.42.111
- 7. Net 17.202.40.1/32 Ifp en0 Ifa 17.202.42.113 [SCOPED]
- 8. Net 17.255.96.0/20 Ifp en2 Ifa 17.255.98.164
- 9. Net 17.255.96.1/32 Ifp en2 Ifa 17.255.98.164
-}
-Add new[9]: Net 17.255.96.1/32 Ifp en2 Ifa 17.255.98.164
+ 3. Net 17.202.40.0/22 Ifp en1 Ifa 17.202.42.111
+ 4. Net 17.202.40.0/22 Ifp en0 Ifa 17.202.42.113 [SCOPED]
+ 5. Net 17.202.40.1/32 Ifp en1 Ifa 17.202.42.111
+ 6. Net 17.202.40.1/32 Ifp en0 Ifa 17.202.42.113 [SCOPED]
+ 7. Net 17.255.96.0/20 Ifp en2 Ifa 17.255.98.164
+ 8. Net 17.255.96.1/32 Ifp en2 Ifa 17.255.98.164
+ 9. Net 169.254.0.0/16 Ifp fw0 Ifa 169.254.11.33 [last]
+10. Net 224.0.0.0/4 Ifp en2 Ifa 17.255.98.164
+11. Net 224.0.0.0/4 Ifp en1 Ifa 17.202.42.111 [SCOPED]
+12. Net 224.0.0.0/4 Ifp en0 Ifa 17.202.42.113 [SCOPED]
+13. Net 224.0.0.0/4 Ifp fw0 Ifa 169.254.11.33 [last] [SCOPED]
+14. Net 255.255.255.255/32 Ifp en2 Ifa 17.255.98.164
+15. Net 255.255.255.255/32 Ifp en1 Ifa 17.202.42.111 [SCOPED]
+16. Net 255.255.255.255/32 Ifp en0 Ifa 17.202.42.113 [SCOPED]
+17. Net 255.255.255.255/32 Ifp fw0 Ifa 169.254.11.33 [last] [SCOPED]
+}
+Add new[8]: Net 17.255.96.1/32 Ifp en2 Ifa 17.255.98.164
 Add new[0]: Net 0.0.0.0/0 Gate 17.255.96.1 Ifp en2 Ifa 17.255.98.164
-Add new[6]: Net 17.202.40.1/32 Ifp en1 Ifa 17.202.42.111
+Add new[5]: Net 17.202.40.1/32 Ifp en1 Ifa 17.202.42.111
 Add new[1]: Net 0.0.0.0/0 Gate 17.202.40.1 Ifp en1 Ifa 17.202.42.111 [SCOPED]
-Add new[7]: Net 17.202.40.1/32 Ifp en0 Ifa 17.202.42.113 [SCOPED]
+Add new[6]: Net 17.202.40.1/32 Ifp en0 Ifa 17.202.42.113 [SCOPED]
 Add new[2]: Net 0.0.0.0/0 Gate 17.202.40.1 Ifp en0 Ifa 17.202.42.113 [SCOPED]
-Add new[3]: Net 0.0.0.0/0 Ifp fw0 Ifa 169.254.11.33 [SCOPED]
-Add new[4]: Net 17.202.40.0/22 Ifp en1 Ifa 17.202.42.111
-Add new[5]: Net 17.202.40.0/22 Ifp en0 Ifa 17.202.42.113 [SCOPED]
-Add new[8]: Net 17.255.96.0/20 Ifp en2 Ifa 17.255.98.164
-New Routes ('test18') = <IPv4RouteList[14]> = {
+Add new[3]: Net 17.202.40.0/22 Ifp en1 Ifa 17.202.42.111
+Add new[4]: Net 17.202.40.0/22 Ifp en0 Ifa 17.202.42.113 [SCOPED]
+Add new[7]: Net 17.255.96.0/20 Ifp en2 Ifa 17.255.98.164
+Add new[9]: Net 169.254.0.0/16 Ifp fw0 Ifa 169.254.11.33 [last]
+Add new[10]: Net 224.0.0.0/4 Ifp en2 Ifa 17.255.98.164
+Add new[11]: Net 224.0.0.0/4 Ifp en1 Ifa 17.202.42.111 [SCOPED]
+Add new[12]: Net 224.0.0.0/4 Ifp en0 Ifa 17.202.42.113 [SCOPED]
+Add new[13]: Net 224.0.0.0/4 Ifp fw0 Ifa 169.254.11.33 [last] [SCOPED]
+Add new[14]: Net 255.255.255.255/32 Ifp en2 Ifa 17.255.98.164
+Add new[15]: Net 255.255.255.255/32 Ifp en1 Ifa 17.202.42.111 [SCOPED]
+Add new[16]: Net 255.255.255.255/32 Ifp en0 Ifa 17.202.42.113 [SCOPED]
+Add new[17]: Net 255.255.255.255/32 Ifp fw0 Ifa 169.254.11.33 [last] [SCOPED]
+New Routes ('test18') = <IPv4RouteList[16]> = {
  0. Net 0.0.0.0/0 Gate 192.168.130.1 Ifp en0 Ifa 192.168.130.16
  1. Host 1.1.1.1 Gate 1.1.1.2 Ifp en0 Ifa 192.168.130.16
  2. Host 1.1.1.2 Gate 1.1.1.3 Ifp en0 Ifa 192.168.130.16
@@ -12399,35 +17741,47 @@ New Routes ('test18') = <IPv4RouteList[14]> = {
 11. Host 1.1.1.11 Gate 1.1.1.1 Ifp en0 Ifa 192.168.130.16
 12. Net 192.168.130.0/24 Ifp en0 Ifa 192.168.130.16
 13. Net 192.168.130.1/32 Ifp en0 Ifa 192.168.130.16
+14. Net 224.0.0.0/4 Ifp en0 Ifa 192.168.130.16
+15. Net 255.255.255.255/32 Ifp en0 Ifa 192.168.130.16
 }
 Remove old[0]: Net 0.0.0.0/0 Gate 17.255.96.1 Ifp en2 Ifa 17.255.98.164
 Remove old[1]: Net 0.0.0.0/0 Gate 17.202.40.1 Ifp en1 Ifa 17.202.42.111 [SCOPED]
 Remove old[2]: Net 0.0.0.0/0 Gate 17.202.40.1 Ifp en0 Ifa 17.202.42.113 [SCOPED]
-Remove old[3]: Net 0.0.0.0/0 Ifp fw0 Ifa 169.254.11.33 [SCOPED]
-Remove old[4]: Net 17.202.40.0/22 Ifp en1 Ifa 17.202.42.111
-Remove old[5]: Net 17.202.40.0/22 Ifp en0 Ifa 17.202.42.113 [SCOPED]
-Remove old[6]: Net 17.202.40.1/32 Ifp en1 Ifa 17.202.42.111
-Remove old[7]: Net 17.202.40.1/32 Ifp en0 Ifa 17.202.42.113 [SCOPED]
-Remove old[8]: Net 17.255.96.0/20 Ifp en2 Ifa 17.255.98.164
-Remove old[9]: Net 17.255.96.1/32 Ifp en2 Ifa 17.255.98.164
+Remove old[3]: Net 17.202.40.0/22 Ifp en1 Ifa 17.202.42.111
+Remove old[4]: Net 17.202.40.0/22 Ifp en0 Ifa 17.202.42.113 [SCOPED]
+Remove old[5]: Net 17.202.40.1/32 Ifp en1 Ifa 17.202.42.111
+Remove old[6]: Net 17.202.40.1/32 Ifp en0 Ifa 17.202.42.113 [SCOPED]
+Remove old[7]: Net 17.255.96.0/20 Ifp en2 Ifa 17.255.98.164
+Remove old[8]: Net 17.255.96.1/32 Ifp en2 Ifa 17.255.98.164
+Remove old[9]: Net 169.254.0.0/16 Ifp fw0 Ifa 169.254.11.33 [last]
+Remove old[10]: Net 224.0.0.0/4 Ifp en2 Ifa 17.255.98.164
+Remove old[11]: Net 224.0.0.0/4 Ifp en1 Ifa 17.202.42.111 [SCOPED]
+Remove old[12]: Net 224.0.0.0/4 Ifp en0 Ifa 17.202.42.113 [SCOPED]
+Remove old[13]: Net 224.0.0.0/4 Ifp fw0 Ifa 169.254.11.33 [last] [SCOPED]
+Remove old[14]: Net 255.255.255.255/32 Ifp en2 Ifa 17.255.98.164
+Remove old[15]: Net 255.255.255.255/32 Ifp en1 Ifa 17.202.42.111 [SCOPED]
+Remove old[16]: Net 255.255.255.255/32 Ifp en0 Ifa 17.202.42.113 [SCOPED]
+Remove old[17]: Net 255.255.255.255/32 Ifp fw0 Ifa 169.254.11.33 [last] [SCOPED]
 Add new[13]: Net 192.168.130.1/32 Ifp en0 Ifa 192.168.130.16
 Add new[0]: Net 0.0.0.0/0 Gate 192.168.130.1 Ifp en0 Ifa 192.168.130.16
-IPMonitor RouteProcess: routing loop detected, not adding: Host 1.1.1.11 Gate 1.1.1.1 Ifp en0 Ifa 192.168.130.16
-IPMonitor RouteProcess: failed to add: Host 1.1.1.10 Gate 1.1.1.11 Ifp en0 Ifa 192.168.130.16
-IPMonitor RouteProcess: failed to add: Host 1.1.1.9 Gate 1.1.1.10 Ifp en0 Ifa 192.168.130.16
-IPMonitor RouteProcess: failed to add: Host 1.1.1.8 Gate 1.1.1.9 Ifp en0 Ifa 192.168.130.16
-IPMonitor RouteProcess: failed to add: Host 1.1.1.7 Gate 1.1.1.8 Ifp en0 Ifa 192.168.130.16
-IPMonitor RouteProcess: failed to add: Host 1.1.1.6 Gate 1.1.1.7 Ifp en0 Ifa 192.168.130.16
-IPMonitor RouteProcess: failed to add: Host 1.1.1.5 Gate 1.1.1.6 Ifp en0 Ifa 192.168.130.16
-IPMonitor RouteProcess: failed to add: Host 1.1.1.4 Gate 1.1.1.5 Ifp en0 Ifa 192.168.130.16
-IPMonitor RouteProcess: failed to add: Host 1.1.1.3 Gate 1.1.1.4 Ifp en0 Ifa 192.168.130.16
-IPMonitor RouteProcess: failed to add: Host 1.1.1.2 Gate 1.1.1.3 Ifp en0 Ifa 192.168.130.16
-IPMonitor RouteProcess: failed to add: Host 1.1.1.1 Gate 1.1.1.2 Ifp en0 Ifa 192.168.130.16
+routing loop detected, not adding: Host 1.1.1.11 Gate 1.1.1.1 Ifp en0 Ifa 192.168.130.16
+failed to add: Host 1.1.1.10 Gate 1.1.1.11 Ifp en0 Ifa 192.168.130.16
+failed to add: Host 1.1.1.9 Gate 1.1.1.10 Ifp en0 Ifa 192.168.130.16
+failed to add: Host 1.1.1.8 Gate 1.1.1.9 Ifp en0 Ifa 192.168.130.16
+failed to add: Host 1.1.1.7 Gate 1.1.1.8 Ifp en0 Ifa 192.168.130.16
+failed to add: Host 1.1.1.6 Gate 1.1.1.7 Ifp en0 Ifa 192.168.130.16
+failed to add: Host 1.1.1.5 Gate 1.1.1.6 Ifp en0 Ifa 192.168.130.16
+failed to add: Host 1.1.1.4 Gate 1.1.1.5 Ifp en0 Ifa 192.168.130.16
+failed to add: Host 1.1.1.3 Gate 1.1.1.4 Ifp en0 Ifa 192.168.130.16
+failed to add: Host 1.1.1.2 Gate 1.1.1.3 Ifp en0 Ifa 192.168.130.16
+failed to add: Host 1.1.1.1 Gate 1.1.1.2 Ifp en0 Ifa 192.168.130.16
 Add new[12]: Net 192.168.130.0/24 Ifp en0 Ifa 192.168.130.16
+Add new[14]: Net 224.0.0.0/4 Ifp en0 Ifa 192.168.130.16
+Add new[15]: Net 255.255.255.255/32 Ifp en0 Ifa 192.168.130.16
 =================> Apply 'test7', 'test18' End <=================
 
 =================> Apply 'test18', 'test7' Begin <=================
-Old routes ('test18') = <IPv4RouteList[14]> = {
+Old routes ('test18') = <IPv4RouteList[16]> = {
  0. Net 0.0.0.0/0 Gate 192.168.130.1 Ifp en0 Ifa 192.168.130.16
  1. Host 1.1.1.1 Gate 1.1.1.2 Ifp en0 Ifa 192.168.130.16
  2. Host 1.1.1.2 Gate 1.1.1.3 Ifp en0 Ifa 192.168.130.16
@@ -12442,56 +17796,82 @@ Old routes ('test18') = <IPv4RouteList[14]> = {
 11. Host 1.1.1.11 Gate 1.1.1.1 Ifp en0 Ifa 192.168.130.16
 12. Net 192.168.130.0/24 Ifp en0 Ifa 192.168.130.16
 13. Net 192.168.130.1/32 Ifp en0 Ifa 192.168.130.16
+14. Net 224.0.0.0/4 Ifp en0 Ifa 192.168.130.16
+15. Net 255.255.255.255/32 Ifp en0 Ifa 192.168.130.16
 }
 Add new[13]: Net 192.168.130.1/32 Ifp en0 Ifa 192.168.130.16
 Add new[0]: Net 0.0.0.0/0 Gate 192.168.130.1 Ifp en0 Ifa 192.168.130.16
-IPMonitor RouteProcess: routing loop detected, not adding: Host 1.1.1.11 Gate 1.1.1.1 Ifp en0 Ifa 192.168.130.16
-IPMonitor RouteProcess: failed to add: Host 1.1.1.10 Gate 1.1.1.11 Ifp en0 Ifa 192.168.130.16
-IPMonitor RouteProcess: failed to add: Host 1.1.1.9 Gate 1.1.1.10 Ifp en0 Ifa 192.168.130.16
-IPMonitor RouteProcess: failed to add: Host 1.1.1.8 Gate 1.1.1.9 Ifp en0 Ifa 192.168.130.16
-IPMonitor RouteProcess: failed to add: Host 1.1.1.7 Gate 1.1.1.8 Ifp en0 Ifa 192.168.130.16
-IPMonitor RouteProcess: failed to add: Host 1.1.1.6 Gate 1.1.1.7 Ifp en0 Ifa 192.168.130.16
-IPMonitor RouteProcess: failed to add: Host 1.1.1.5 Gate 1.1.1.6 Ifp en0 Ifa 192.168.130.16
-IPMonitor RouteProcess: failed to add: Host 1.1.1.4 Gate 1.1.1.5 Ifp en0 Ifa 192.168.130.16
-IPMonitor RouteProcess: failed to add: Host 1.1.1.3 Gate 1.1.1.4 Ifp en0 Ifa 192.168.130.16
-IPMonitor RouteProcess: failed to add: Host 1.1.1.2 Gate 1.1.1.3 Ifp en0 Ifa 192.168.130.16
-IPMonitor RouteProcess: failed to add: Host 1.1.1.1 Gate 1.1.1.2 Ifp en0 Ifa 192.168.130.16
+routing loop detected, not adding: Host 1.1.1.11 Gate 1.1.1.1 Ifp en0 Ifa 192.168.130.16
+failed to add: Host 1.1.1.10 Gate 1.1.1.11 Ifp en0 Ifa 192.168.130.16
+failed to add: Host 1.1.1.9 Gate 1.1.1.10 Ifp en0 Ifa 192.168.130.16
+failed to add: Host 1.1.1.8 Gate 1.1.1.9 Ifp en0 Ifa 192.168.130.16
+failed to add: Host 1.1.1.7 Gate 1.1.1.8 Ifp en0 Ifa 192.168.130.16
+failed to add: Host 1.1.1.6 Gate 1.1.1.7 Ifp en0 Ifa 192.168.130.16
+failed to add: Host 1.1.1.5 Gate 1.1.1.6 Ifp en0 Ifa 192.168.130.16
+failed to add: Host 1.1.1.4 Gate 1.1.1.5 Ifp en0 Ifa 192.168.130.16
+failed to add: Host 1.1.1.3 Gate 1.1.1.4 Ifp en0 Ifa 192.168.130.16
+failed to add: Host 1.1.1.2 Gate 1.1.1.3 Ifp en0 Ifa 192.168.130.16
+failed to add: Host 1.1.1.1 Gate 1.1.1.2 Ifp en0 Ifa 192.168.130.16
 Add new[12]: Net 192.168.130.0/24 Ifp en0 Ifa 192.168.130.16
-New Routes ('test7') = <IPv4RouteList[10]> = {
+Add new[14]: Net 224.0.0.0/4 Ifp en0 Ifa 192.168.130.16
+Add new[15]: Net 255.255.255.255/32 Ifp en0 Ifa 192.168.130.16
+New Routes ('test7') = <IPv4RouteList[18]> = {
  0. Net 0.0.0.0/0 Gate 17.255.96.1 Ifp en2 Ifa 17.255.98.164
  1. Net 0.0.0.0/0 Gate 17.202.40.1 Ifp en1 Ifa 17.202.42.111 [SCOPED]
  2. Net 0.0.0.0/0 Gate 17.202.40.1 Ifp en0 Ifa 17.202.42.113 [SCOPED]
- 3. Net 0.0.0.0/0 Ifp fw0 Ifa 169.254.11.33 [SCOPED]
- 4. Net 17.202.40.0/22 Ifp en1 Ifa 17.202.42.111
- 5. Net 17.202.40.0/22 Ifp en0 Ifa 17.202.42.113 [SCOPED]
- 6. Net 17.202.40.1/32 Ifp en1 Ifa 17.202.42.111
- 7. Net 17.202.40.1/32 Ifp en0 Ifa 17.202.42.113 [SCOPED]
- 8. Net 17.255.96.0/20 Ifp en2 Ifa 17.255.98.164
- 9. Net 17.255.96.1/32 Ifp en2 Ifa 17.255.98.164
+ 3. Net 17.202.40.0/22 Ifp en1 Ifa 17.202.42.111
+ 4. Net 17.202.40.0/22 Ifp en0 Ifa 17.202.42.113 [SCOPED]
+ 5. Net 17.202.40.1/32 Ifp en1 Ifa 17.202.42.111
+ 6. Net 17.202.40.1/32 Ifp en0 Ifa 17.202.42.113 [SCOPED]
+ 7. Net 17.255.96.0/20 Ifp en2 Ifa 17.255.98.164
+ 8. Net 17.255.96.1/32 Ifp en2 Ifa 17.255.98.164
+ 9. Net 169.254.0.0/16 Ifp fw0 Ifa 169.254.11.33 [last]
+10. Net 224.0.0.0/4 Ifp en2 Ifa 17.255.98.164
+11. Net 224.0.0.0/4 Ifp en1 Ifa 17.202.42.111 [SCOPED]
+12. Net 224.0.0.0/4 Ifp en0 Ifa 17.202.42.113 [SCOPED]
+13. Net 224.0.0.0/4 Ifp fw0 Ifa 169.254.11.33 [last] [SCOPED]
+14. Net 255.255.255.255/32 Ifp en2 Ifa 17.255.98.164
+15. Net 255.255.255.255/32 Ifp en1 Ifa 17.202.42.111 [SCOPED]
+16. Net 255.255.255.255/32 Ifp en0 Ifa 17.202.42.113 [SCOPED]
+17. Net 255.255.255.255/32 Ifp fw0 Ifa 169.254.11.33 [last] [SCOPED]
 }
 Remove old[0]: Net 0.0.0.0/0 Gate 192.168.130.1 Ifp en0 Ifa 192.168.130.16
 Remove old[12]: Net 192.168.130.0/24 Ifp en0 Ifa 192.168.130.16
 Remove old[13]: Net 192.168.130.1/32 Ifp en0 Ifa 192.168.130.16
-Add new[9]: Net 17.255.96.1/32 Ifp en2 Ifa 17.255.98.164
+Remove old[14]: Net 224.0.0.0/4 Ifp en0 Ifa 192.168.130.16
+Remove old[15]: Net 255.255.255.255/32 Ifp en0 Ifa 192.168.130.16
+Add new[8]: Net 17.255.96.1/32 Ifp en2 Ifa 17.255.98.164
 Add new[0]: Net 0.0.0.0/0 Gate 17.255.96.1 Ifp en2 Ifa 17.255.98.164
-Add new[6]: Net 17.202.40.1/32 Ifp en1 Ifa 17.202.42.111
+Add new[5]: Net 17.202.40.1/32 Ifp en1 Ifa 17.202.42.111
 Add new[1]: Net 0.0.0.0/0 Gate 17.202.40.1 Ifp en1 Ifa 17.202.42.111 [SCOPED]
-Add new[7]: Net 17.202.40.1/32 Ifp en0 Ifa 17.202.42.113 [SCOPED]
+Add new[6]: Net 17.202.40.1/32 Ifp en0 Ifa 17.202.42.113 [SCOPED]
 Add new[2]: Net 0.0.0.0/0 Gate 17.202.40.1 Ifp en0 Ifa 17.202.42.113 [SCOPED]
-Add new[3]: Net 0.0.0.0/0 Ifp fw0 Ifa 169.254.11.33 [SCOPED]
-Add new[4]: Net 17.202.40.0/22 Ifp en1 Ifa 17.202.42.111
-Add new[5]: Net 17.202.40.0/22 Ifp en0 Ifa 17.202.42.113 [SCOPED]
-Add new[8]: Net 17.255.96.0/20 Ifp en2 Ifa 17.255.98.164
+Add new[3]: Net 17.202.40.0/22 Ifp en1 Ifa 17.202.42.111
+Add new[4]: Net 17.202.40.0/22 Ifp en0 Ifa 17.202.42.113 [SCOPED]
+Add new[7]: Net 17.255.96.0/20 Ifp en2 Ifa 17.255.98.164
+Add new[9]: Net 169.254.0.0/16 Ifp fw0 Ifa 169.254.11.33 [last]
+Add new[10]: Net 224.0.0.0/4 Ifp en2 Ifa 17.255.98.164
+Add new[11]: Net 224.0.0.0/4 Ifp en1 Ifa 17.202.42.111 [SCOPED]
+Add new[12]: Net 224.0.0.0/4 Ifp en0 Ifa 17.202.42.113 [SCOPED]
+Add new[13]: Net 224.0.0.0/4 Ifp fw0 Ifa 169.254.11.33 [last] [SCOPED]
+Add new[14]: Net 255.255.255.255/32 Ifp en2 Ifa 17.255.98.164
+Add new[15]: Net 255.255.255.255/32 Ifp en1 Ifa 17.202.42.111 [SCOPED]
+Add new[16]: Net 255.255.255.255/32 Ifp en0 Ifa 17.202.42.113 [SCOPED]
+Add new[17]: Net 255.255.255.255/32 Ifp fw0 Ifa 169.254.11.33 [last] [SCOPED]
 =================> Apply 'test18', 'test7' End <=================
 
 =================> Apply 'test8', 'test9' Begin <=================
-Old routes ('test8') = <IPv4RouteList[6]> = {
+Old routes ('test8') = <IPv4RouteList[10]> = {
  0. Net 0.0.0.0/0 Gate 10.0.0.1 Ifp en0 Ifa 10.0.0.10
  1. Net 0.0.0.0/0 Gate 10.0.0.1 Ifp en1 Ifa 10.0.0.20 [SCOPED]
  2. Net 10.0.0.0/24 Ifp en0 Ifa 10.0.0.10
  3. Net 10.0.0.0/24 Ifp en1 Ifa 10.0.0.20 [SCOPED]
  4. Net 10.0.0.1/32 Ifp en0 Ifa 10.0.0.10
  5. Net 10.0.0.1/32 Ifp en1 Ifa 10.0.0.20 [SCOPED]
+ 6. Net 224.0.0.0/4 Ifp en0 Ifa 10.0.0.10
+ 7. Net 224.0.0.0/4 Ifp en1 Ifa 10.0.0.20 [SCOPED]
+ 8. Net 255.255.255.255/32 Ifp en0 Ifa 10.0.0.10
+ 9. Net 255.255.255.255/32 Ifp en1 Ifa 10.0.0.20 [SCOPED]
 }
 Add new[4]: Net 10.0.0.1/32 Ifp en0 Ifa 10.0.0.10
 Add new[0]: Net 0.0.0.0/0 Gate 10.0.0.1 Ifp en0 Ifa 10.0.0.10
@@ -12499,7 +17879,11 @@ Add new[5]: Net 10.0.0.1/32 Ifp en1 Ifa 10.0.0.20 [SCOPED]
 Add new[1]: Net 0.0.0.0/0 Gate 10.0.0.1 Ifp en1 Ifa 10.0.0.20 [SCOPED]
 Add new[2]: Net 10.0.0.0/24 Ifp en0 Ifa 10.0.0.10
 Add new[3]: Net 10.0.0.0/24 Ifp en1 Ifa 10.0.0.20 [SCOPED]
-New Routes ('test9') = <IPv4RouteList[9]> = {
+Add new[6]: Net 224.0.0.0/4 Ifp en0 Ifa 10.0.0.10
+Add new[7]: Net 224.0.0.0/4 Ifp en1 Ifa 10.0.0.20 [SCOPED]
+Add new[8]: Net 255.255.255.255/32 Ifp en0 Ifa 10.0.0.10
+Add new[9]: Net 255.255.255.255/32 Ifp en1 Ifa 10.0.0.20 [SCOPED]
+New Routes ('test9') = <IPv4RouteList[15]> = {
  0. Net 0.0.0.0/0 Gate 10.0.0.1 Ifp en1 Ifa 10.0.0.20 [first]
  1. Net 0.0.0.0/0 Gate 10.0.0.1 Ifp en0 Ifa 10.0.0.10 [SCOPED]
  2. Net 0.0.0.0/0 Gate 192.168.2.1 Ifp fw0 Ifa 192.168.2.30 [SCOPED]
@@ -12509,6 +17893,12 @@ New Routes ('test9') = <IPv4RouteList[9]> = {
  6. Net 10.0.0.1/32 Ifp en0 Ifa 10.0.0.10 [SCOPED]
  7. Net 192.168.2.0/24 Ifp fw0 Ifa 192.168.2.30
  8. Net 192.168.2.1/32 Ifp fw0 Ifa 192.168.2.30
+ 9. Net 224.0.0.0/4 Ifp en1 Ifa 10.0.0.20 [first]
+10. Net 224.0.0.0/4 Ifp en0 Ifa 10.0.0.10 [SCOPED]
+11. Net 224.0.0.0/4 Ifp fw0 Ifa 192.168.2.30 [SCOPED]
+12. Net 255.255.255.255/32 Ifp en1 Ifa 10.0.0.20 [first]
+13. Net 255.255.255.255/32 Ifp en0 Ifa 10.0.0.10 [SCOPED]
+14. Net 255.255.255.255/32 Ifp fw0 Ifa 192.168.2.30 [SCOPED]
 }
 Remove old[0]: Net 0.0.0.0/0 Gate 10.0.0.1 Ifp en0 Ifa 10.0.0.10
 Remove old[1]: Net 0.0.0.0/0 Gate 10.0.0.1 Ifp en1 Ifa 10.0.0.20 [SCOPED]
@@ -12516,6 +17906,10 @@ Remove old[2]: Net 10.0.0.0/24 Ifp en0 Ifa 10.0.0.10
 Remove old[3]: Net 10.0.0.0/24 Ifp en1 Ifa 10.0.0.20 [SCOPED]
 Remove old[4]: Net 10.0.0.1/32 Ifp en0 Ifa 10.0.0.10
 Remove old[5]: Net 10.0.0.1/32 Ifp en1 Ifa 10.0.0.20 [SCOPED]
+Remove old[6]: Net 224.0.0.0/4 Ifp en0 Ifa 10.0.0.10
+Remove old[7]: Net 224.0.0.0/4 Ifp en1 Ifa 10.0.0.20 [SCOPED]
+Remove old[8]: Net 255.255.255.255/32 Ifp en0 Ifa 10.0.0.10
+Remove old[9]: Net 255.255.255.255/32 Ifp en1 Ifa 10.0.0.20 [SCOPED]
 Add new[5]: Net 10.0.0.1/32 Ifp en1 Ifa 10.0.0.20 [first]
 Add new[0]: Net 0.0.0.0/0 Gate 10.0.0.1 Ifp en1 Ifa 10.0.0.20 [first]
 Add new[6]: Net 10.0.0.1/32 Ifp en0 Ifa 10.0.0.10 [SCOPED]
@@ -12525,10 +17919,16 @@ Add new[2]: Net 0.0.0.0/0 Gate 192.168.2.1 Ifp fw0 Ifa 192.168.2.30 [SCOPED]
 Add new[3]: Net 10.0.0.0/24 Ifp en1 Ifa 10.0.0.20 [first]
 Add new[4]: Net 10.0.0.0/24 Ifp en0 Ifa 10.0.0.10 [SCOPED]
 Add new[7]: Net 192.168.2.0/24 Ifp fw0 Ifa 192.168.2.30
+Add new[9]: Net 224.0.0.0/4 Ifp en1 Ifa 10.0.0.20 [first]
+Add new[10]: Net 224.0.0.0/4 Ifp en0 Ifa 10.0.0.10 [SCOPED]
+Add new[11]: Net 224.0.0.0/4 Ifp fw0 Ifa 192.168.2.30 [SCOPED]
+Add new[12]: Net 255.255.255.255/32 Ifp en1 Ifa 10.0.0.20 [first]
+Add new[13]: Net 255.255.255.255/32 Ifp en0 Ifa 10.0.0.10 [SCOPED]
+Add new[14]: Net 255.255.255.255/32 Ifp fw0 Ifa 192.168.2.30 [SCOPED]
 =================> Apply 'test8', 'test9' End <=================
 
 =================> Apply 'test9', 'test8' Begin <=================
-Old routes ('test9') = <IPv4RouteList[9]> = {
+Old routes ('test9') = <IPv4RouteList[15]> = {
  0. Net 0.0.0.0/0 Gate 10.0.0.1 Ifp en1 Ifa 10.0.0.20 [first]
  1. Net 0.0.0.0/0 Gate 10.0.0.1 Ifp en0 Ifa 10.0.0.10 [SCOPED]
  2. Net 0.0.0.0/0 Gate 192.168.2.1 Ifp fw0 Ifa 192.168.2.30 [SCOPED]
@@ -12538,6 +17938,12 @@ Old routes ('test9') = <IPv4RouteList[9]> = {
  6. Net 10.0.0.1/32 Ifp en0 Ifa 10.0.0.10 [SCOPED]
  7. Net 192.168.2.0/24 Ifp fw0 Ifa 192.168.2.30
  8. Net 192.168.2.1/32 Ifp fw0 Ifa 192.168.2.30
+ 9. Net 224.0.0.0/4 Ifp en1 Ifa 10.0.0.20 [first]
+10. Net 224.0.0.0/4 Ifp en0 Ifa 10.0.0.10 [SCOPED]
+11. Net 224.0.0.0/4 Ifp fw0 Ifa 192.168.2.30 [SCOPED]
+12. Net 255.255.255.255/32 Ifp en1 Ifa 10.0.0.20 [first]
+13. Net 255.255.255.255/32 Ifp en0 Ifa 10.0.0.10 [SCOPED]
+14. Net 255.255.255.255/32 Ifp fw0 Ifa 192.168.2.30 [SCOPED]
 }
 Add new[5]: Net 10.0.0.1/32 Ifp en1 Ifa 10.0.0.20 [first]
 Add new[0]: Net 0.0.0.0/0 Gate 10.0.0.1 Ifp en1 Ifa 10.0.0.20 [first]
@@ -12548,13 +17954,23 @@ Add new[2]: Net 0.0.0.0/0 Gate 192.168.2.1 Ifp fw0 Ifa 192.168.2.30 [SCOPED]
 Add new[3]: Net 10.0.0.0/24 Ifp en1 Ifa 10.0.0.20 [first]
 Add new[4]: Net 10.0.0.0/24 Ifp en0 Ifa 10.0.0.10 [SCOPED]
 Add new[7]: Net 192.168.2.0/24 Ifp fw0 Ifa 192.168.2.30
-New Routes ('test8') = <IPv4RouteList[6]> = {
+Add new[9]: Net 224.0.0.0/4 Ifp en1 Ifa 10.0.0.20 [first]
+Add new[10]: Net 224.0.0.0/4 Ifp en0 Ifa 10.0.0.10 [SCOPED]
+Add new[11]: Net 224.0.0.0/4 Ifp fw0 Ifa 192.168.2.30 [SCOPED]
+Add new[12]: Net 255.255.255.255/32 Ifp en1 Ifa 10.0.0.20 [first]
+Add new[13]: Net 255.255.255.255/32 Ifp en0 Ifa 10.0.0.10 [SCOPED]
+Add new[14]: Net 255.255.255.255/32 Ifp fw0 Ifa 192.168.2.30 [SCOPED]
+New Routes ('test8') = <IPv4RouteList[10]> = {
  0. Net 0.0.0.0/0 Gate 10.0.0.1 Ifp en0 Ifa 10.0.0.10
  1. Net 0.0.0.0/0 Gate 10.0.0.1 Ifp en1 Ifa 10.0.0.20 [SCOPED]
  2. Net 10.0.0.0/24 Ifp en0 Ifa 10.0.0.10
  3. Net 10.0.0.0/24 Ifp en1 Ifa 10.0.0.20 [SCOPED]
  4. Net 10.0.0.1/32 Ifp en0 Ifa 10.0.0.10
  5. Net 10.0.0.1/32 Ifp en1 Ifa 10.0.0.20 [SCOPED]
+ 6. Net 224.0.0.0/4 Ifp en0 Ifa 10.0.0.10
+ 7. Net 224.0.0.0/4 Ifp en1 Ifa 10.0.0.20 [SCOPED]
+ 8. Net 255.255.255.255/32 Ifp en0 Ifa 10.0.0.10
+ 9. Net 255.255.255.255/32 Ifp en1 Ifa 10.0.0.20 [SCOPED]
 }
 Remove old[0]: Net 0.0.0.0/0 Gate 10.0.0.1 Ifp en1 Ifa 10.0.0.20 [first]
 Remove old[1]: Net 0.0.0.0/0 Gate 10.0.0.1 Ifp en0 Ifa 10.0.0.10 [SCOPED]
@@ -12565,22 +17981,36 @@ Remove old[5]: Net 10.0.0.1/32 Ifp en1 Ifa 10.0.0.20 [first]
 Remove old[6]: Net 10.0.0.1/32 Ifp en0 Ifa 10.0.0.10 [SCOPED]
 Remove old[7]: Net 192.168.2.0/24 Ifp fw0 Ifa 192.168.2.30
 Remove old[8]: Net 192.168.2.1/32 Ifp fw0 Ifa 192.168.2.30
+Remove old[9]: Net 224.0.0.0/4 Ifp en1 Ifa 10.0.0.20 [first]
+Remove old[10]: Net 224.0.0.0/4 Ifp en0 Ifa 10.0.0.10 [SCOPED]
+Remove old[11]: Net 224.0.0.0/4 Ifp fw0 Ifa 192.168.2.30 [SCOPED]
+Remove old[12]: Net 255.255.255.255/32 Ifp en1 Ifa 10.0.0.20 [first]
+Remove old[13]: Net 255.255.255.255/32 Ifp en0 Ifa 10.0.0.10 [SCOPED]
+Remove old[14]: Net 255.255.255.255/32 Ifp fw0 Ifa 192.168.2.30 [SCOPED]
 Add new[4]: Net 10.0.0.1/32 Ifp en0 Ifa 10.0.0.10
 Add new[0]: Net 0.0.0.0/0 Gate 10.0.0.1 Ifp en0 Ifa 10.0.0.10
 Add new[5]: Net 10.0.0.1/32 Ifp en1 Ifa 10.0.0.20 [SCOPED]
 Add new[1]: Net 0.0.0.0/0 Gate 10.0.0.1 Ifp en1 Ifa 10.0.0.20 [SCOPED]
 Add new[2]: Net 10.0.0.0/24 Ifp en0 Ifa 10.0.0.10
 Add new[3]: Net 10.0.0.0/24 Ifp en1 Ifa 10.0.0.20 [SCOPED]
+Add new[6]: Net 224.0.0.0/4 Ifp en0 Ifa 10.0.0.10
+Add new[7]: Net 224.0.0.0/4 Ifp en1 Ifa 10.0.0.20 [SCOPED]
+Add new[8]: Net 255.255.255.255/32 Ifp en0 Ifa 10.0.0.10
+Add new[9]: Net 255.255.255.255/32 Ifp en1 Ifa 10.0.0.20 [SCOPED]
 =================> Apply 'test9', 'test8' End <=================
 
 =================> Apply 'test8', 'test10' Begin <=================
-Old routes ('test8') = <IPv4RouteList[6]> = {
+Old routes ('test8') = <IPv4RouteList[10]> = {
  0. Net 0.0.0.0/0 Gate 10.0.0.1 Ifp en0 Ifa 10.0.0.10
  1. Net 0.0.0.0/0 Gate 10.0.0.1 Ifp en1 Ifa 10.0.0.20 [SCOPED]
  2. Net 10.0.0.0/24 Ifp en0 Ifa 10.0.0.10
  3. Net 10.0.0.0/24 Ifp en1 Ifa 10.0.0.20 [SCOPED]
  4. Net 10.0.0.1/32 Ifp en0 Ifa 10.0.0.10
  5. Net 10.0.0.1/32 Ifp en1 Ifa 10.0.0.20 [SCOPED]
+ 6. Net 224.0.0.0/4 Ifp en0 Ifa 10.0.0.10
+ 7. Net 224.0.0.0/4 Ifp en1 Ifa 10.0.0.20 [SCOPED]
+ 8. Net 255.255.255.255/32 Ifp en0 Ifa 10.0.0.10
+ 9. Net 255.255.255.255/32 Ifp en1 Ifa 10.0.0.20 [SCOPED]
 }
 Add new[4]: Net 10.0.0.1/32 Ifp en0 Ifa 10.0.0.10
 Add new[0]: Net 0.0.0.0/0 Gate 10.0.0.1 Ifp en0 Ifa 10.0.0.10
@@ -12588,7 +18018,11 @@ Add new[5]: Net 10.0.0.1/32 Ifp en1 Ifa 10.0.0.20 [SCOPED]
 Add new[1]: Net 0.0.0.0/0 Gate 10.0.0.1 Ifp en1 Ifa 10.0.0.20 [SCOPED]
 Add new[2]: Net 10.0.0.0/24 Ifp en0 Ifa 10.0.0.10
 Add new[3]: Net 10.0.0.0/24 Ifp en1 Ifa 10.0.0.20 [SCOPED]
-New Routes ('test10') = <IPv4RouteList[9]> = {
+Add new[6]: Net 224.0.0.0/4 Ifp en0 Ifa 10.0.0.10
+Add new[7]: Net 224.0.0.0/4 Ifp en1 Ifa 10.0.0.20 [SCOPED]
+Add new[8]: Net 255.255.255.255/32 Ifp en0 Ifa 10.0.0.10
+Add new[9]: Net 255.255.255.255/32 Ifp en1 Ifa 10.0.0.20 [SCOPED]
+New Routes ('test10') = <IPv4RouteList[15]> = {
  0. Net 0.0.0.0/0 Gate 10.0.0.1 Ifp en1 Ifa 10.0.0.20
  1. Net 0.0.0.0/0 Gate 192.168.2.1 Ifp fw0 Ifa 192.168.2.30 [SCOPED]
  2. Net 0.0.0.0/0 Gate 10.0.0.1 Ifp en0 Ifa 10.0.0.10 [last] [SCOPED]
@@ -12598,6 +18032,12 @@ New Routes ('test10') = <IPv4RouteList[9]> = {
  6. Net 10.0.0.1/32 Ifp en0 Ifa 10.0.0.10 [last] [SCOPED]
  7. Net 192.168.2.0/24 Ifp fw0 Ifa 192.168.2.30
  8. Net 192.168.2.1/32 Ifp fw0 Ifa 192.168.2.30
+ 9. Net 224.0.0.0/4 Ifp en1 Ifa 10.0.0.20
+10. Net 224.0.0.0/4 Ifp fw0 Ifa 192.168.2.30 [SCOPED]
+11. Net 224.0.0.0/4 Ifp en0 Ifa 10.0.0.10 [last] [SCOPED]
+12. Net 255.255.255.255/32 Ifp en1 Ifa 10.0.0.20
+13. Net 255.255.255.255/32 Ifp fw0 Ifa 192.168.2.30 [SCOPED]
+14. Net 255.255.255.255/32 Ifp en0 Ifa 10.0.0.10 [last] [SCOPED]
 }
 Remove old[0]: Net 0.0.0.0/0 Gate 10.0.0.1 Ifp en0 Ifa 10.0.0.10
 Remove old[1]: Net 0.0.0.0/0 Gate 10.0.0.1 Ifp en1 Ifa 10.0.0.20 [SCOPED]
@@ -12605,6 +18045,10 @@ Remove old[2]: Net 10.0.0.0/24 Ifp en0 Ifa 10.0.0.10
 Remove old[3]: Net 10.0.0.0/24 Ifp en1 Ifa 10.0.0.20 [SCOPED]
 Remove old[4]: Net 10.0.0.1/32 Ifp en0 Ifa 10.0.0.10
 Remove old[5]: Net 10.0.0.1/32 Ifp en1 Ifa 10.0.0.20 [SCOPED]
+Remove old[6]: Net 224.0.0.0/4 Ifp en0 Ifa 10.0.0.10
+Remove old[7]: Net 224.0.0.0/4 Ifp en1 Ifa 10.0.0.20 [SCOPED]
+Remove old[8]: Net 255.255.255.255/32 Ifp en0 Ifa 10.0.0.10
+Remove old[9]: Net 255.255.255.255/32 Ifp en1 Ifa 10.0.0.20 [SCOPED]
 Add new[5]: Net 10.0.0.1/32 Ifp en1 Ifa 10.0.0.20
 Add new[0]: Net 0.0.0.0/0 Gate 10.0.0.1 Ifp en1 Ifa 10.0.0.20
 Add new[8]: Net 192.168.2.1/32 Ifp fw0 Ifa 192.168.2.30
@@ -12614,10 +18058,16 @@ Add new[2]: Net 0.0.0.0/0 Gate 10.0.0.1 Ifp en0 Ifa 10.0.0.10 [last] [SCOPED]
 Add new[3]: Net 10.0.0.0/24 Ifp en1 Ifa 10.0.0.20
 Add new[4]: Net 10.0.0.0/24 Ifp en0 Ifa 10.0.0.10 [last] [SCOPED]
 Add new[7]: Net 192.168.2.0/24 Ifp fw0 Ifa 192.168.2.30
+Add new[9]: Net 224.0.0.0/4 Ifp en1 Ifa 10.0.0.20
+Add new[10]: Net 224.0.0.0/4 Ifp fw0 Ifa 192.168.2.30 [SCOPED]
+Add new[11]: Net 224.0.0.0/4 Ifp en0 Ifa 10.0.0.10 [last] [SCOPED]
+Add new[12]: Net 255.255.255.255/32 Ifp en1 Ifa 10.0.0.20
+Add new[13]: Net 255.255.255.255/32 Ifp fw0 Ifa 192.168.2.30 [SCOPED]
+Add new[14]: Net 255.255.255.255/32 Ifp en0 Ifa 10.0.0.10 [last] [SCOPED]
 =================> Apply 'test8', 'test10' End <=================
 
 =================> Apply 'test10', 'test8' Begin <=================
-Old routes ('test10') = <IPv4RouteList[9]> = {
+Old routes ('test10') = <IPv4RouteList[15]> = {
  0. Net 0.0.0.0/0 Gate 10.0.0.1 Ifp en1 Ifa 10.0.0.20
  1. Net 0.0.0.0/0 Gate 192.168.2.1 Ifp fw0 Ifa 192.168.2.30 [SCOPED]
  2. Net 0.0.0.0/0 Gate 10.0.0.1 Ifp en0 Ifa 10.0.0.10 [last] [SCOPED]
@@ -12627,6 +18077,12 @@ Old routes ('test10') = <IPv4RouteList[9]> = {
  6. Net 10.0.0.1/32 Ifp en0 Ifa 10.0.0.10 [last] [SCOPED]
  7. Net 192.168.2.0/24 Ifp fw0 Ifa 192.168.2.30
  8. Net 192.168.2.1/32 Ifp fw0 Ifa 192.168.2.30
+ 9. Net 224.0.0.0/4 Ifp en1 Ifa 10.0.0.20
+10. Net 224.0.0.0/4 Ifp fw0 Ifa 192.168.2.30 [SCOPED]
+11. Net 224.0.0.0/4 Ifp en0 Ifa 10.0.0.10 [last] [SCOPED]
+12. Net 255.255.255.255/32 Ifp en1 Ifa 10.0.0.20
+13. Net 255.255.255.255/32 Ifp fw0 Ifa 192.168.2.30 [SCOPED]
+14. Net 255.255.255.255/32 Ifp en0 Ifa 10.0.0.10 [last] [SCOPED]
 }
 Add new[5]: Net 10.0.0.1/32 Ifp en1 Ifa 10.0.0.20
 Add new[0]: Net 0.0.0.0/0 Gate 10.0.0.1 Ifp en1 Ifa 10.0.0.20
@@ -12637,13 +18093,23 @@ Add new[2]: Net 0.0.0.0/0 Gate 10.0.0.1 Ifp en0 Ifa 10.0.0.10 [last] [SCOPED]
 Add new[3]: Net 10.0.0.0/24 Ifp en1 Ifa 10.0.0.20
 Add new[4]: Net 10.0.0.0/24 Ifp en0 Ifa 10.0.0.10 [last] [SCOPED]
 Add new[7]: Net 192.168.2.0/24 Ifp fw0 Ifa 192.168.2.30
-New Routes ('test8') = <IPv4RouteList[6]> = {
+Add new[9]: Net 224.0.0.0/4 Ifp en1 Ifa 10.0.0.20
+Add new[10]: Net 224.0.0.0/4 Ifp fw0 Ifa 192.168.2.30 [SCOPED]
+Add new[11]: Net 224.0.0.0/4 Ifp en0 Ifa 10.0.0.10 [last] [SCOPED]
+Add new[12]: Net 255.255.255.255/32 Ifp en1 Ifa 10.0.0.20
+Add new[13]: Net 255.255.255.255/32 Ifp fw0 Ifa 192.168.2.30 [SCOPED]
+Add new[14]: Net 255.255.255.255/32 Ifp en0 Ifa 10.0.0.10 [last] [SCOPED]
+New Routes ('test8') = <IPv4RouteList[10]> = {
  0. Net 0.0.0.0/0 Gate 10.0.0.1 Ifp en0 Ifa 10.0.0.10
  1. Net 0.0.0.0/0 Gate 10.0.0.1 Ifp en1 Ifa 10.0.0.20 [SCOPED]
  2. Net 10.0.0.0/24 Ifp en0 Ifa 10.0.0.10
  3. Net 10.0.0.0/24 Ifp en1 Ifa 10.0.0.20 [SCOPED]
  4. Net 10.0.0.1/32 Ifp en0 Ifa 10.0.0.10
  5. Net 10.0.0.1/32 Ifp en1 Ifa 10.0.0.20 [SCOPED]
+ 6. Net 224.0.0.0/4 Ifp en0 Ifa 10.0.0.10
+ 7. Net 224.0.0.0/4 Ifp en1 Ifa 10.0.0.20 [SCOPED]
+ 8. Net 255.255.255.255/32 Ifp en0 Ifa 10.0.0.10
+ 9. Net 255.255.255.255/32 Ifp en1 Ifa 10.0.0.20 [SCOPED]
 }
 Remove old[0]: Net 0.0.0.0/0 Gate 10.0.0.1 Ifp en1 Ifa 10.0.0.20
 Remove old[1]: Net 0.0.0.0/0 Gate 192.168.2.1 Ifp fw0 Ifa 192.168.2.30 [SCOPED]
@@ -12654,22 +18120,36 @@ Remove old[5]: Net 10.0.0.1/32 Ifp en1 Ifa 10.0.0.20
 Remove old[6]: Net 10.0.0.1/32 Ifp en0 Ifa 10.0.0.10 [last] [SCOPED]
 Remove old[7]: Net 192.168.2.0/24 Ifp fw0 Ifa 192.168.2.30
 Remove old[8]: Net 192.168.2.1/32 Ifp fw0 Ifa 192.168.2.30
+Remove old[9]: Net 224.0.0.0/4 Ifp en1 Ifa 10.0.0.20
+Remove old[10]: Net 224.0.0.0/4 Ifp fw0 Ifa 192.168.2.30 [SCOPED]
+Remove old[11]: Net 224.0.0.0/4 Ifp en0 Ifa 10.0.0.10 [last] [SCOPED]
+Remove old[12]: Net 255.255.255.255/32 Ifp en1 Ifa 10.0.0.20
+Remove old[13]: Net 255.255.255.255/32 Ifp fw0 Ifa 192.168.2.30 [SCOPED]
+Remove old[14]: Net 255.255.255.255/32 Ifp en0 Ifa 10.0.0.10 [last] [SCOPED]
 Add new[4]: Net 10.0.0.1/32 Ifp en0 Ifa 10.0.0.10
 Add new[0]: Net 0.0.0.0/0 Gate 10.0.0.1 Ifp en0 Ifa 10.0.0.10
 Add new[5]: Net 10.0.0.1/32 Ifp en1 Ifa 10.0.0.20 [SCOPED]
 Add new[1]: Net 0.0.0.0/0 Gate 10.0.0.1 Ifp en1 Ifa 10.0.0.20 [SCOPED]
 Add new[2]: Net 10.0.0.0/24 Ifp en0 Ifa 10.0.0.10
 Add new[3]: Net 10.0.0.0/24 Ifp en1 Ifa 10.0.0.20 [SCOPED]
+Add new[6]: Net 224.0.0.0/4 Ifp en0 Ifa 10.0.0.10
+Add new[7]: Net 224.0.0.0/4 Ifp en1 Ifa 10.0.0.20 [SCOPED]
+Add new[8]: Net 255.255.255.255/32 Ifp en0 Ifa 10.0.0.10
+Add new[9]: Net 255.255.255.255/32 Ifp en1 Ifa 10.0.0.20 [SCOPED]
 =================> Apply 'test10', 'test8' End <=================
 
 =================> Apply 'test8', 'test11' Begin <=================
-Old routes ('test8') = <IPv4RouteList[6]> = {
+Old routes ('test8') = <IPv4RouteList[10]> = {
  0. Net 0.0.0.0/0 Gate 10.0.0.1 Ifp en0 Ifa 10.0.0.10
  1. Net 0.0.0.0/0 Gate 10.0.0.1 Ifp en1 Ifa 10.0.0.20 [SCOPED]
  2. Net 10.0.0.0/24 Ifp en0 Ifa 10.0.0.10
  3. Net 10.0.0.0/24 Ifp en1 Ifa 10.0.0.20 [SCOPED]
  4. Net 10.0.0.1/32 Ifp en0 Ifa 10.0.0.10
  5. Net 10.0.0.1/32 Ifp en1 Ifa 10.0.0.20 [SCOPED]
+ 6. Net 224.0.0.0/4 Ifp en0 Ifa 10.0.0.10
+ 7. Net 224.0.0.0/4 Ifp en1 Ifa 10.0.0.20 [SCOPED]
+ 8. Net 255.255.255.255/32 Ifp en0 Ifa 10.0.0.10
+ 9. Net 255.255.255.255/32 Ifp en1 Ifa 10.0.0.20 [SCOPED]
 }
 Add new[4]: Net 10.0.0.1/32 Ifp en0 Ifa 10.0.0.10
 Add new[0]: Net 0.0.0.0/0 Gate 10.0.0.1 Ifp en0 Ifa 10.0.0.10
@@ -12677,7 +18157,11 @@ Add new[5]: Net 10.0.0.1/32 Ifp en1 Ifa 10.0.0.20 [SCOPED]
 Add new[1]: Net 0.0.0.0/0 Gate 10.0.0.1 Ifp en1 Ifa 10.0.0.20 [SCOPED]
 Add new[2]: Net 10.0.0.0/24 Ifp en0 Ifa 10.0.0.10
 Add new[3]: Net 10.0.0.0/24 Ifp en1 Ifa 10.0.0.20 [SCOPED]
-New Routes ('test11') = <IPv4RouteList[9]> = {
+Add new[6]: Net 224.0.0.0/4 Ifp en0 Ifa 10.0.0.10
+Add new[7]: Net 224.0.0.0/4 Ifp en1 Ifa 10.0.0.20 [SCOPED]
+Add new[8]: Net 255.255.255.255/32 Ifp en0 Ifa 10.0.0.10
+Add new[9]: Net 255.255.255.255/32 Ifp en1 Ifa 10.0.0.20 [SCOPED]
+New Routes ('test11') = <IPv4RouteList[15]> = {
  0. Net 0.0.0.0/0 Gate 10.0.0.1 Ifp en1 Ifa 10.0.0.20
  1. Net 0.0.0.0/0 Gate 192.168.2.1 Ifp fw0 Ifa 192.168.2.30 [SCOPED]
  2. Net 0.0.0.0/0 Gate 10.0.0.1 Ifp en0 Ifa 10.0.0.10 [never] [SCOPED]
@@ -12687,6 +18171,12 @@ New Routes ('test11') = <IPv4RouteList[9]> = {
  6. Net 10.0.0.1/32 Ifp en0 Ifa 10.0.0.10 [last] [SCOPED]
  7. Net 192.168.2.0/24 Ifp fw0 Ifa 192.168.2.30
  8. Net 192.168.2.1/32 Ifp fw0 Ifa 192.168.2.30
+ 9. Net 224.0.0.0/4 Ifp en1 Ifa 10.0.0.20
+10. Net 224.0.0.0/4 Ifp fw0 Ifa 192.168.2.30 [SCOPED]
+11. Net 224.0.0.0/4 Ifp en0 Ifa 10.0.0.10 [last] [SCOPED]
+12. Net 255.255.255.255/32 Ifp en1 Ifa 10.0.0.20
+13. Net 255.255.255.255/32 Ifp fw0 Ifa 192.168.2.30 [SCOPED]
+14. Net 255.255.255.255/32 Ifp en0 Ifa 10.0.0.10 [last] [SCOPED]
 }
 Remove old[0]: Net 0.0.0.0/0 Gate 10.0.0.1 Ifp en0 Ifa 10.0.0.10
 Remove old[1]: Net 0.0.0.0/0 Gate 10.0.0.1 Ifp en1 Ifa 10.0.0.20 [SCOPED]
@@ -12694,6 +18184,10 @@ Remove old[2]: Net 10.0.0.0/24 Ifp en0 Ifa 10.0.0.10
 Remove old[3]: Net 10.0.0.0/24 Ifp en1 Ifa 10.0.0.20 [SCOPED]
 Remove old[4]: Net 10.0.0.1/32 Ifp en0 Ifa 10.0.0.10
 Remove old[5]: Net 10.0.0.1/32 Ifp en1 Ifa 10.0.0.20 [SCOPED]
+Remove old[6]: Net 224.0.0.0/4 Ifp en0 Ifa 10.0.0.10
+Remove old[7]: Net 224.0.0.0/4 Ifp en1 Ifa 10.0.0.20 [SCOPED]
+Remove old[8]: Net 255.255.255.255/32 Ifp en0 Ifa 10.0.0.10
+Remove old[9]: Net 255.255.255.255/32 Ifp en1 Ifa 10.0.0.20 [SCOPED]
 Add new[5]: Net 10.0.0.1/32 Ifp en1 Ifa 10.0.0.20
 Add new[0]: Net 0.0.0.0/0 Gate 10.0.0.1 Ifp en1 Ifa 10.0.0.20
 Add new[8]: Net 192.168.2.1/32 Ifp fw0 Ifa 192.168.2.30
@@ -12703,10 +18197,16 @@ Add new[2]: Net 0.0.0.0/0 Gate 10.0.0.1 Ifp en0 Ifa 10.0.0.10 [never] [SCOPED]
 Add new[3]: Net 10.0.0.0/24 Ifp en1 Ifa 10.0.0.20
 Add new[4]: Net 10.0.0.0/24 Ifp en0 Ifa 10.0.0.10 [last] [SCOPED]
 Add new[7]: Net 192.168.2.0/24 Ifp fw0 Ifa 192.168.2.30
+Add new[9]: Net 224.0.0.0/4 Ifp en1 Ifa 10.0.0.20
+Add new[10]: Net 224.0.0.0/4 Ifp fw0 Ifa 192.168.2.30 [SCOPED]
+Add new[11]: Net 224.0.0.0/4 Ifp en0 Ifa 10.0.0.10 [last] [SCOPED]
+Add new[12]: Net 255.255.255.255/32 Ifp en1 Ifa 10.0.0.20
+Add new[13]: Net 255.255.255.255/32 Ifp fw0 Ifa 192.168.2.30 [SCOPED]
+Add new[14]: Net 255.255.255.255/32 Ifp en0 Ifa 10.0.0.10 [last] [SCOPED]
 =================> Apply 'test8', 'test11' End <=================
 
 =================> Apply 'test11', 'test8' Begin <=================
-Old routes ('test11') = <IPv4RouteList[9]> = {
+Old routes ('test11') = <IPv4RouteList[15]> = {
  0. Net 0.0.0.0/0 Gate 10.0.0.1 Ifp en1 Ifa 10.0.0.20
  1. Net 0.0.0.0/0 Gate 192.168.2.1 Ifp fw0 Ifa 192.168.2.30 [SCOPED]
  2. Net 0.0.0.0/0 Gate 10.0.0.1 Ifp en0 Ifa 10.0.0.10 [never] [SCOPED]
@@ -12716,6 +18216,12 @@ Old routes ('test11') = <IPv4RouteList[9]> = {
  6. Net 10.0.0.1/32 Ifp en0 Ifa 10.0.0.10 [last] [SCOPED]
  7. Net 192.168.2.0/24 Ifp fw0 Ifa 192.168.2.30
  8. Net 192.168.2.1/32 Ifp fw0 Ifa 192.168.2.30
+ 9. Net 224.0.0.0/4 Ifp en1 Ifa 10.0.0.20
+10. Net 224.0.0.0/4 Ifp fw0 Ifa 192.168.2.30 [SCOPED]
+11. Net 224.0.0.0/4 Ifp en0 Ifa 10.0.0.10 [last] [SCOPED]
+12. Net 255.255.255.255/32 Ifp en1 Ifa 10.0.0.20
+13. Net 255.255.255.255/32 Ifp fw0 Ifa 192.168.2.30 [SCOPED]
+14. Net 255.255.255.255/32 Ifp en0 Ifa 10.0.0.10 [last] [SCOPED]
 }
 Add new[5]: Net 10.0.0.1/32 Ifp en1 Ifa 10.0.0.20
 Add new[0]: Net 0.0.0.0/0 Gate 10.0.0.1 Ifp en1 Ifa 10.0.0.20
@@ -12726,13 +18232,23 @@ Add new[2]: Net 0.0.0.0/0 Gate 10.0.0.1 Ifp en0 Ifa 10.0.0.10 [never] [SCOPED]
 Add new[3]: Net 10.0.0.0/24 Ifp en1 Ifa 10.0.0.20
 Add new[4]: Net 10.0.0.0/24 Ifp en0 Ifa 10.0.0.10 [last] [SCOPED]
 Add new[7]: Net 192.168.2.0/24 Ifp fw0 Ifa 192.168.2.30
-New Routes ('test8') = <IPv4RouteList[6]> = {
+Add new[9]: Net 224.0.0.0/4 Ifp en1 Ifa 10.0.0.20
+Add new[10]: Net 224.0.0.0/4 Ifp fw0 Ifa 192.168.2.30 [SCOPED]
+Add new[11]: Net 224.0.0.0/4 Ifp en0 Ifa 10.0.0.10 [last] [SCOPED]
+Add new[12]: Net 255.255.255.255/32 Ifp en1 Ifa 10.0.0.20
+Add new[13]: Net 255.255.255.255/32 Ifp fw0 Ifa 192.168.2.30 [SCOPED]
+Add new[14]: Net 255.255.255.255/32 Ifp en0 Ifa 10.0.0.10 [last] [SCOPED]
+New Routes ('test8') = <IPv4RouteList[10]> = {
  0. Net 0.0.0.0/0 Gate 10.0.0.1 Ifp en0 Ifa 10.0.0.10
  1. Net 0.0.0.0/0 Gate 10.0.0.1 Ifp en1 Ifa 10.0.0.20 [SCOPED]
  2. Net 10.0.0.0/24 Ifp en0 Ifa 10.0.0.10
  3. Net 10.0.0.0/24 Ifp en1 Ifa 10.0.0.20 [SCOPED]
  4. Net 10.0.0.1/32 Ifp en0 Ifa 10.0.0.10
  5. Net 10.0.0.1/32 Ifp en1 Ifa 10.0.0.20 [SCOPED]
+ 6. Net 224.0.0.0/4 Ifp en0 Ifa 10.0.0.10
+ 7. Net 224.0.0.0/4 Ifp en1 Ifa 10.0.0.20 [SCOPED]
+ 8. Net 255.255.255.255/32 Ifp en0 Ifa 10.0.0.10
+ 9. Net 255.255.255.255/32 Ifp en1 Ifa 10.0.0.20 [SCOPED]
 }
 Remove old[0]: Net 0.0.0.0/0 Gate 10.0.0.1 Ifp en1 Ifa 10.0.0.20
 Remove old[1]: Net 0.0.0.0/0 Gate 192.168.2.1 Ifp fw0 Ifa 192.168.2.30 [SCOPED]
@@ -12743,22 +18259,36 @@ Remove old[5]: Net 10.0.0.1/32 Ifp en1 Ifa 10.0.0.20
 Remove old[6]: Net 10.0.0.1/32 Ifp en0 Ifa 10.0.0.10 [last] [SCOPED]
 Remove old[7]: Net 192.168.2.0/24 Ifp fw0 Ifa 192.168.2.30
 Remove old[8]: Net 192.168.2.1/32 Ifp fw0 Ifa 192.168.2.30
+Remove old[9]: Net 224.0.0.0/4 Ifp en1 Ifa 10.0.0.20
+Remove old[10]: Net 224.0.0.0/4 Ifp fw0 Ifa 192.168.2.30 [SCOPED]
+Remove old[11]: Net 224.0.0.0/4 Ifp en0 Ifa 10.0.0.10 [last] [SCOPED]
+Remove old[12]: Net 255.255.255.255/32 Ifp en1 Ifa 10.0.0.20
+Remove old[13]: Net 255.255.255.255/32 Ifp fw0 Ifa 192.168.2.30 [SCOPED]
+Remove old[14]: Net 255.255.255.255/32 Ifp en0 Ifa 10.0.0.10 [last] [SCOPED]
 Add new[4]: Net 10.0.0.1/32 Ifp en0 Ifa 10.0.0.10
 Add new[0]: Net 0.0.0.0/0 Gate 10.0.0.1 Ifp en0 Ifa 10.0.0.10
 Add new[5]: Net 10.0.0.1/32 Ifp en1 Ifa 10.0.0.20 [SCOPED]
 Add new[1]: Net 0.0.0.0/0 Gate 10.0.0.1 Ifp en1 Ifa 10.0.0.20 [SCOPED]
 Add new[2]: Net 10.0.0.0/24 Ifp en0 Ifa 10.0.0.10
 Add new[3]: Net 10.0.0.0/24 Ifp en1 Ifa 10.0.0.20 [SCOPED]
+Add new[6]: Net 224.0.0.0/4 Ifp en0 Ifa 10.0.0.10
+Add new[7]: Net 224.0.0.0/4 Ifp en1 Ifa 10.0.0.20 [SCOPED]
+Add new[8]: Net 255.255.255.255/32 Ifp en0 Ifa 10.0.0.10
+Add new[9]: Net 255.255.255.255/32 Ifp en1 Ifa 10.0.0.20 [SCOPED]
 =================> Apply 'test11', 'test8' End <=================
 
 =================> Apply 'test8', 'test12' Begin <=================
-Old routes ('test8') = <IPv4RouteList[6]> = {
+Old routes ('test8') = <IPv4RouteList[10]> = {
  0. Net 0.0.0.0/0 Gate 10.0.0.1 Ifp en0 Ifa 10.0.0.10
  1. Net 0.0.0.0/0 Gate 10.0.0.1 Ifp en1 Ifa 10.0.0.20 [SCOPED]
  2. Net 10.0.0.0/24 Ifp en0 Ifa 10.0.0.10
  3. Net 10.0.0.0/24 Ifp en1 Ifa 10.0.0.20 [SCOPED]
  4. Net 10.0.0.1/32 Ifp en0 Ifa 10.0.0.10
  5. Net 10.0.0.1/32 Ifp en1 Ifa 10.0.0.20 [SCOPED]
+ 6. Net 224.0.0.0/4 Ifp en0 Ifa 10.0.0.10
+ 7. Net 224.0.0.0/4 Ifp en1 Ifa 10.0.0.20 [SCOPED]
+ 8. Net 255.255.255.255/32 Ifp en0 Ifa 10.0.0.10
+ 9. Net 255.255.255.255/32 Ifp en1 Ifa 10.0.0.20 [SCOPED]
 }
 Add new[4]: Net 10.0.0.1/32 Ifp en0 Ifa 10.0.0.10
 Add new[0]: Net 0.0.0.0/0 Gate 10.0.0.1 Ifp en0 Ifa 10.0.0.10
@@ -12766,24 +18296,36 @@ Add new[5]: Net 10.0.0.1/32 Ifp en1 Ifa 10.0.0.20 [SCOPED]
 Add new[1]: Net 0.0.0.0/0 Gate 10.0.0.1 Ifp en1 Ifa 10.0.0.20 [SCOPED]
 Add new[2]: Net 10.0.0.0/24 Ifp en0 Ifa 10.0.0.10
 Add new[3]: Net 10.0.0.0/24 Ifp en1 Ifa 10.0.0.20 [SCOPED]
-New Routes ('test12') = <IPv4RouteList[6]> = {
+Add new[6]: Net 224.0.0.0/4 Ifp en0 Ifa 10.0.0.10
+Add new[7]: Net 224.0.0.0/4 Ifp en1 Ifa 10.0.0.20 [SCOPED]
+Add new[8]: Net 255.255.255.255/32 Ifp en0 Ifa 10.0.0.10
+Add new[9]: Net 255.255.255.255/32 Ifp en1 Ifa 10.0.0.20 [SCOPED]
+New Routes ('test12') = <IPv4RouteList[10]> = {
  0. Net 0.0.0.0/0 Gate 10.0.0.1 Ifp en0 Ifa 10.0.0.10
  1. Net 0.0.0.0/0 Gate 10.0.0.1 Ifp en1 Ifa 10.0.0.20 [SCOPED]
  2. Net 10.0.0.0/24 Ifp en0 Ifa 10.0.0.10
  3. Net 10.0.0.0/24 Ifp en1 Ifa 10.0.0.20 [SCOPED]
  4. Net 10.0.0.1/32 Ifp en0 Ifa 10.0.0.10
  5. Net 10.0.0.1/32 Ifp en1 Ifa 10.0.0.20 [SCOPED]
+ 6. Net 224.0.0.0/4 Ifp en0 Ifa 10.0.0.10
+ 7. Net 224.0.0.0/4 Ifp en1 Ifa 10.0.0.20 [SCOPED]
+ 8. Net 255.255.255.255/32 Ifp en0 Ifa 10.0.0.10
+ 9. Net 255.255.255.255/32 Ifp en1 Ifa 10.0.0.20 [SCOPED]
 }
 =================> Apply 'test8', 'test12' End <=================
 
 =================> Apply 'test12', 'test8' Begin <=================
-Old routes ('test12') = <IPv4RouteList[6]> = {
+Old routes ('test12') = <IPv4RouteList[10]> = {
  0. Net 0.0.0.0/0 Gate 10.0.0.1 Ifp en0 Ifa 10.0.0.10
  1. Net 0.0.0.0/0 Gate 10.0.0.1 Ifp en1 Ifa 10.0.0.20 [SCOPED]
  2. Net 10.0.0.0/24 Ifp en0 Ifa 10.0.0.10
  3. Net 10.0.0.0/24 Ifp en1 Ifa 10.0.0.20 [SCOPED]
  4. Net 10.0.0.1/32 Ifp en0 Ifa 10.0.0.10
  5. Net 10.0.0.1/32 Ifp en1 Ifa 10.0.0.20 [SCOPED]
+ 6. Net 224.0.0.0/4 Ifp en0 Ifa 10.0.0.10
+ 7. Net 224.0.0.0/4 Ifp en1 Ifa 10.0.0.20 [SCOPED]
+ 8. Net 255.255.255.255/32 Ifp en0 Ifa 10.0.0.10
+ 9. Net 255.255.255.255/32 Ifp en1 Ifa 10.0.0.20 [SCOPED]
 }
 Add new[4]: Net 10.0.0.1/32 Ifp en0 Ifa 10.0.0.10
 Add new[0]: Net 0.0.0.0/0 Gate 10.0.0.1 Ifp en0 Ifa 10.0.0.10
@@ -12791,24 +18333,36 @@ Add new[5]: Net 10.0.0.1/32 Ifp en1 Ifa 10.0.0.20 [SCOPED]
 Add new[1]: Net 0.0.0.0/0 Gate 10.0.0.1 Ifp en1 Ifa 10.0.0.20 [SCOPED]
 Add new[2]: Net 10.0.0.0/24 Ifp en0 Ifa 10.0.0.10
 Add new[3]: Net 10.0.0.0/24 Ifp en1 Ifa 10.0.0.20 [SCOPED]
-New Routes ('test8') = <IPv4RouteList[6]> = {
+Add new[6]: Net 224.0.0.0/4 Ifp en0 Ifa 10.0.0.10
+Add new[7]: Net 224.0.0.0/4 Ifp en1 Ifa 10.0.0.20 [SCOPED]
+Add new[8]: Net 255.255.255.255/32 Ifp en0 Ifa 10.0.0.10
+Add new[9]: Net 255.255.255.255/32 Ifp en1 Ifa 10.0.0.20 [SCOPED]
+New Routes ('test8') = <IPv4RouteList[10]> = {
  0. Net 0.0.0.0/0 Gate 10.0.0.1 Ifp en0 Ifa 10.0.0.10
  1. Net 0.0.0.0/0 Gate 10.0.0.1 Ifp en1 Ifa 10.0.0.20 [SCOPED]
  2. Net 10.0.0.0/24 Ifp en0 Ifa 10.0.0.10
  3. Net 10.0.0.0/24 Ifp en1 Ifa 10.0.0.20 [SCOPED]
  4. Net 10.0.0.1/32 Ifp en0 Ifa 10.0.0.10
  5. Net 10.0.0.1/32 Ifp en1 Ifa 10.0.0.20 [SCOPED]
+ 6. Net 224.0.0.0/4 Ifp en0 Ifa 10.0.0.10
+ 7. Net 224.0.0.0/4 Ifp en1 Ifa 10.0.0.20 [SCOPED]
+ 8. Net 255.255.255.255/32 Ifp en0 Ifa 10.0.0.10
+ 9. Net 255.255.255.255/32 Ifp en1 Ifa 10.0.0.20 [SCOPED]
 }
 =================> Apply 'test12', 'test8' End <=================
 
 =================> Apply 'test8', 'test13' Begin <=================
-Old routes ('test8') = <IPv4RouteList[6]> = {
+Old routes ('test8') = <IPv4RouteList[10]> = {
  0. Net 0.0.0.0/0 Gate 10.0.0.1 Ifp en0 Ifa 10.0.0.10
  1. Net 0.0.0.0/0 Gate 10.0.0.1 Ifp en1 Ifa 10.0.0.20 [SCOPED]
  2. Net 10.0.0.0/24 Ifp en0 Ifa 10.0.0.10
  3. Net 10.0.0.0/24 Ifp en1 Ifa 10.0.0.20 [SCOPED]
  4. Net 10.0.0.1/32 Ifp en0 Ifa 10.0.0.10
  5. Net 10.0.0.1/32 Ifp en1 Ifa 10.0.0.20 [SCOPED]
+ 6. Net 224.0.0.0/4 Ifp en0 Ifa 10.0.0.10
+ 7. Net 224.0.0.0/4 Ifp en1 Ifa 10.0.0.20 [SCOPED]
+ 8. Net 255.255.255.255/32 Ifp en0 Ifa 10.0.0.10
+ 9. Net 255.255.255.255/32 Ifp en1 Ifa 10.0.0.20 [SCOPED]
 }
 Add new[4]: Net 10.0.0.1/32 Ifp en0 Ifa 10.0.0.10
 Add new[0]: Net 0.0.0.0/0 Gate 10.0.0.1 Ifp en0 Ifa 10.0.0.10
@@ -12816,24 +18370,36 @@ Add new[5]: Net 10.0.0.1/32 Ifp en1 Ifa 10.0.0.20 [SCOPED]
 Add new[1]: Net 0.0.0.0/0 Gate 10.0.0.1 Ifp en1 Ifa 10.0.0.20 [SCOPED]
 Add new[2]: Net 10.0.0.0/24 Ifp en0 Ifa 10.0.0.10
 Add new[3]: Net 10.0.0.0/24 Ifp en1 Ifa 10.0.0.20 [SCOPED]
-New Routes ('test13') = <IPv4RouteList[6]> = {
+Add new[6]: Net 224.0.0.0/4 Ifp en0 Ifa 10.0.0.10
+Add new[7]: Net 224.0.0.0/4 Ifp en1 Ifa 10.0.0.20 [SCOPED]
+Add new[8]: Net 255.255.255.255/32 Ifp en0 Ifa 10.0.0.10
+Add new[9]: Net 255.255.255.255/32 Ifp en1 Ifa 10.0.0.20 [SCOPED]
+New Routes ('test13') = <IPv4RouteList[10]> = {
  0. Net 0.0.0.0/0 Gate 10.0.0.1 Ifp en0 Ifa 10.0.0.10
  1. Net 0.0.0.0/0 Gate 10.0.0.1 Ifp en1 Ifa 10.0.0.20 [never] [SCOPED]
  2. Net 10.0.0.0/24 Ifp en0 Ifa 10.0.0.10
  3. Net 10.0.0.0/24 Ifp en1 Ifa 10.0.0.20 [last] [SCOPED]
  4. Net 10.0.0.1/32 Ifp en0 Ifa 10.0.0.10
  5. Net 10.0.0.1/32 Ifp en1 Ifa 10.0.0.20 [last] [SCOPED]
+ 6. Net 224.0.0.0/4 Ifp en0 Ifa 10.0.0.10
+ 7. Net 224.0.0.0/4 Ifp en1 Ifa 10.0.0.20 [last] [SCOPED]
+ 8. Net 255.255.255.255/32 Ifp en0 Ifa 10.0.0.10
+ 9. Net 255.255.255.255/32 Ifp en1 Ifa 10.0.0.20 [last] [SCOPED]
 }
 =================> Apply 'test8', 'test13' End <=================
 
 =================> Apply 'test13', 'test8' Begin <=================
-Old routes ('test13') = <IPv4RouteList[6]> = {
+Old routes ('test13') = <IPv4RouteList[10]> = {
  0. Net 0.0.0.0/0 Gate 10.0.0.1 Ifp en0 Ifa 10.0.0.10
  1. Net 0.0.0.0/0 Gate 10.0.0.1 Ifp en1 Ifa 10.0.0.20 [never] [SCOPED]
  2. Net 10.0.0.0/24 Ifp en0 Ifa 10.0.0.10
  3. Net 10.0.0.0/24 Ifp en1 Ifa 10.0.0.20 [last] [SCOPED]
  4. Net 10.0.0.1/32 Ifp en0 Ifa 10.0.0.10
  5. Net 10.0.0.1/32 Ifp en1 Ifa 10.0.0.20 [last] [SCOPED]
+ 6. Net 224.0.0.0/4 Ifp en0 Ifa 10.0.0.10
+ 7. Net 224.0.0.0/4 Ifp en1 Ifa 10.0.0.20 [last] [SCOPED]
+ 8. Net 255.255.255.255/32 Ifp en0 Ifa 10.0.0.10
+ 9. Net 255.255.255.255/32 Ifp en1 Ifa 10.0.0.20 [last] [SCOPED]
 }
 Add new[4]: Net 10.0.0.1/32 Ifp en0 Ifa 10.0.0.10
 Add new[0]: Net 0.0.0.0/0 Gate 10.0.0.1 Ifp en0 Ifa 10.0.0.10
@@ -12841,24 +18407,36 @@ Add new[5]: Net 10.0.0.1/32 Ifp en1 Ifa 10.0.0.20 [last] [SCOPED]
 Add new[1]: Net 0.0.0.0/0 Gate 10.0.0.1 Ifp en1 Ifa 10.0.0.20 [never] [SCOPED]
 Add new[2]: Net 10.0.0.0/24 Ifp en0 Ifa 10.0.0.10
 Add new[3]: Net 10.0.0.0/24 Ifp en1 Ifa 10.0.0.20 [last] [SCOPED]
-New Routes ('test8') = <IPv4RouteList[6]> = {
+Add new[6]: Net 224.0.0.0/4 Ifp en0 Ifa 10.0.0.10
+Add new[7]: Net 224.0.0.0/4 Ifp en1 Ifa 10.0.0.20 [last] [SCOPED]
+Add new[8]: Net 255.255.255.255/32 Ifp en0 Ifa 10.0.0.10
+Add new[9]: Net 255.255.255.255/32 Ifp en1 Ifa 10.0.0.20 [last] [SCOPED]
+New Routes ('test8') = <IPv4RouteList[10]> = {
  0. Net 0.0.0.0/0 Gate 10.0.0.1 Ifp en0 Ifa 10.0.0.10
  1. Net 0.0.0.0/0 Gate 10.0.0.1 Ifp en1 Ifa 10.0.0.20 [SCOPED]
  2. Net 10.0.0.0/24 Ifp en0 Ifa 10.0.0.10
  3. Net 10.0.0.0/24 Ifp en1 Ifa 10.0.0.20 [SCOPED]
  4. Net 10.0.0.1/32 Ifp en0 Ifa 10.0.0.10
  5. Net 10.0.0.1/32 Ifp en1 Ifa 10.0.0.20 [SCOPED]
+ 6. Net 224.0.0.0/4 Ifp en0 Ifa 10.0.0.10
+ 7. Net 224.0.0.0/4 Ifp en1 Ifa 10.0.0.20 [SCOPED]
+ 8. Net 255.255.255.255/32 Ifp en0 Ifa 10.0.0.10
+ 9. Net 255.255.255.255/32 Ifp en1 Ifa 10.0.0.20 [SCOPED]
 }
 =================> Apply 'test13', 'test8' End <=================
 
 =================> Apply 'test8', 'test14' Begin <=================
-Old routes ('test8') = <IPv4RouteList[6]> = {
+Old routes ('test8') = <IPv4RouteList[10]> = {
  0. Net 0.0.0.0/0 Gate 10.0.0.1 Ifp en0 Ifa 10.0.0.10
  1. Net 0.0.0.0/0 Gate 10.0.0.1 Ifp en1 Ifa 10.0.0.20 [SCOPED]
  2. Net 10.0.0.0/24 Ifp en0 Ifa 10.0.0.10
  3. Net 10.0.0.0/24 Ifp en1 Ifa 10.0.0.20 [SCOPED]
  4. Net 10.0.0.1/32 Ifp en0 Ifa 10.0.0.10
  5. Net 10.0.0.1/32 Ifp en1 Ifa 10.0.0.20 [SCOPED]
+ 6. Net 224.0.0.0/4 Ifp en0 Ifa 10.0.0.10
+ 7. Net 224.0.0.0/4 Ifp en1 Ifa 10.0.0.20 [SCOPED]
+ 8. Net 255.255.255.255/32 Ifp en0 Ifa 10.0.0.10
+ 9. Net 255.255.255.255/32 Ifp en1 Ifa 10.0.0.20 [SCOPED]
 }
 Add new[4]: Net 10.0.0.1/32 Ifp en0 Ifa 10.0.0.10
 Add new[0]: Net 0.0.0.0/0 Gate 10.0.0.1 Ifp en0 Ifa 10.0.0.10
@@ -12866,54 +18444,84 @@ Add new[5]: Net 10.0.0.1/32 Ifp en1 Ifa 10.0.0.20 [SCOPED]
 Add new[1]: Net 0.0.0.0/0 Gate 10.0.0.1 Ifp en1 Ifa 10.0.0.20 [SCOPED]
 Add new[2]: Net 10.0.0.0/24 Ifp en0 Ifa 10.0.0.10
 Add new[3]: Net 10.0.0.0/24 Ifp en1 Ifa 10.0.0.20 [SCOPED]
-New Routes ('test14') = <IPv4RouteList[3]> = {
+Add new[6]: Net 224.0.0.0/4 Ifp en0 Ifa 10.0.0.10
+Add new[7]: Net 224.0.0.0/4 Ifp en1 Ifa 10.0.0.20 [SCOPED]
+Add new[8]: Net 255.255.255.255/32 Ifp en0 Ifa 10.0.0.10
+Add new[9]: Net 255.255.255.255/32 Ifp en1 Ifa 10.0.0.20 [SCOPED]
+New Routes ('test14') = <IPv4RouteList[5]> = {
  0. Net 0.0.0.0/0 Gate 10.0.0.1 Ifp en1 Ifa 10.0.0.20 [never] [SCOPED]
  1. Net 10.0.0.0/24 Ifp en1 Ifa 10.0.0.20 [last]
  2. Net 10.0.0.1/32 Ifp en1 Ifa 10.0.0.20 [last]
+ 3. Net 224.0.0.0/4 Ifp en1 Ifa 10.0.0.20 [last]
+ 4. Net 255.255.255.255/32 Ifp en1 Ifa 10.0.0.20 [last]
 }
 Remove old[0]: Net 0.0.0.0/0 Gate 10.0.0.1 Ifp en0 Ifa 10.0.0.10
 Remove old[2]: Net 10.0.0.0/24 Ifp en0 Ifa 10.0.0.10
 Remove old[3]: Net 10.0.0.0/24 Ifp en1 Ifa 10.0.0.20 [SCOPED]
 Remove old[4]: Net 10.0.0.1/32 Ifp en0 Ifa 10.0.0.10
 Remove old[5]: Net 10.0.0.1/32 Ifp en1 Ifa 10.0.0.20 [SCOPED]
+Remove old[6]: Net 224.0.0.0/4 Ifp en0 Ifa 10.0.0.10
+Remove old[7]: Net 224.0.0.0/4 Ifp en1 Ifa 10.0.0.20 [SCOPED]
+Remove old[8]: Net 255.255.255.255/32 Ifp en0 Ifa 10.0.0.10
+Remove old[9]: Net 255.255.255.255/32 Ifp en1 Ifa 10.0.0.20 [SCOPED]
 Add new[1]: Net 10.0.0.0/24 Ifp en1 Ifa 10.0.0.20 [last]
 Add new[2]: Net 10.0.0.1/32 Ifp en1 Ifa 10.0.0.20 [last]
+Add new[3]: Net 224.0.0.0/4 Ifp en1 Ifa 10.0.0.20 [last]
+Add new[4]: Net 255.255.255.255/32 Ifp en1 Ifa 10.0.0.20 [last]
 =================> Apply 'test8', 'test14' End <=================
 
 =================> Apply 'test14', 'test8' Begin <=================
-Old routes ('test14') = <IPv4RouteList[3]> = {
+Old routes ('test14') = <IPv4RouteList[5]> = {
  0. Net 0.0.0.0/0 Gate 10.0.0.1 Ifp en1 Ifa 10.0.0.20 [never] [SCOPED]
  1. Net 10.0.0.0/24 Ifp en1 Ifa 10.0.0.20 [last]
  2. Net 10.0.0.1/32 Ifp en1 Ifa 10.0.0.20 [last]
+ 3. Net 224.0.0.0/4 Ifp en1 Ifa 10.0.0.20 [last]
+ 4. Net 255.255.255.255/32 Ifp en1 Ifa 10.0.0.20 [last]
 }
 Add new[2]: Net 10.0.0.1/32 Ifp en1 Ifa 10.0.0.20 [last]
 Add new[0]: Net 0.0.0.0/0 Gate 10.0.0.1 Ifp en1 Ifa 10.0.0.20 [never] [SCOPED]
 Add new[1]: Net 10.0.0.0/24 Ifp en1 Ifa 10.0.0.20 [last]
-New Routes ('test8') = <IPv4RouteList[6]> = {
+Add new[3]: Net 224.0.0.0/4 Ifp en1 Ifa 10.0.0.20 [last]
+Add new[4]: Net 255.255.255.255/32 Ifp en1 Ifa 10.0.0.20 [last]
+New Routes ('test8') = <IPv4RouteList[10]> = {
  0. Net 0.0.0.0/0 Gate 10.0.0.1 Ifp en0 Ifa 10.0.0.10
  1. Net 0.0.0.0/0 Gate 10.0.0.1 Ifp en1 Ifa 10.0.0.20 [SCOPED]
  2. Net 10.0.0.0/24 Ifp en0 Ifa 10.0.0.10
  3. Net 10.0.0.0/24 Ifp en1 Ifa 10.0.0.20 [SCOPED]
  4. Net 10.0.0.1/32 Ifp en0 Ifa 10.0.0.10
  5. Net 10.0.0.1/32 Ifp en1 Ifa 10.0.0.20 [SCOPED]
+ 6. Net 224.0.0.0/4 Ifp en0 Ifa 10.0.0.10
+ 7. Net 224.0.0.0/4 Ifp en1 Ifa 10.0.0.20 [SCOPED]
+ 8. Net 255.255.255.255/32 Ifp en0 Ifa 10.0.0.10
+ 9. Net 255.255.255.255/32 Ifp en1 Ifa 10.0.0.20 [SCOPED]
 }
 Remove old[1]: Net 10.0.0.0/24 Ifp en1 Ifa 10.0.0.20 [last]
 Remove old[2]: Net 10.0.0.1/32 Ifp en1 Ifa 10.0.0.20 [last]
+Remove old[3]: Net 224.0.0.0/4 Ifp en1 Ifa 10.0.0.20 [last]
+Remove old[4]: Net 255.255.255.255/32 Ifp en1 Ifa 10.0.0.20 [last]
 Add new[4]: Net 10.0.0.1/32 Ifp en0 Ifa 10.0.0.10
 Add new[0]: Net 0.0.0.0/0 Gate 10.0.0.1 Ifp en0 Ifa 10.0.0.10
 Add new[2]: Net 10.0.0.0/24 Ifp en0 Ifa 10.0.0.10
 Add new[3]: Net 10.0.0.0/24 Ifp en1 Ifa 10.0.0.20 [SCOPED]
 Add new[5]: Net 10.0.0.1/32 Ifp en1 Ifa 10.0.0.20 [SCOPED]
+Add new[6]: Net 224.0.0.0/4 Ifp en0 Ifa 10.0.0.10
+Add new[7]: Net 224.0.0.0/4 Ifp en1 Ifa 10.0.0.20 [SCOPED]
+Add new[8]: Net 255.255.255.255/32 Ifp en0 Ifa 10.0.0.10
+Add new[9]: Net 255.255.255.255/32 Ifp en1 Ifa 10.0.0.20 [SCOPED]
 =================> Apply 'test14', 'test8' End <=================
 
 =================> Apply 'test8', 'test15' Begin <=================
-Old routes ('test8') = <IPv4RouteList[6]> = {
+Old routes ('test8') = <IPv4RouteList[10]> = {
  0. Net 0.0.0.0/0 Gate 10.0.0.1 Ifp en0 Ifa 10.0.0.10
  1. Net 0.0.0.0/0 Gate 10.0.0.1 Ifp en1 Ifa 10.0.0.20 [SCOPED]
  2. Net 10.0.0.0/24 Ifp en0 Ifa 10.0.0.10
  3. Net 10.0.0.0/24 Ifp en1 Ifa 10.0.0.20 [SCOPED]
  4. Net 10.0.0.1/32 Ifp en0 Ifa 10.0.0.10
  5. Net 10.0.0.1/32 Ifp en1 Ifa 10.0.0.20 [SCOPED]
+ 6. Net 224.0.0.0/4 Ifp en0 Ifa 10.0.0.10
+ 7. Net 224.0.0.0/4 Ifp en1 Ifa 10.0.0.20 [SCOPED]
+ 8. Net 255.255.255.255/32 Ifp en0 Ifa 10.0.0.10
+ 9. Net 255.255.255.255/32 Ifp en1 Ifa 10.0.0.20 [SCOPED]
 }
 Add new[4]: Net 10.0.0.1/32 Ifp en0 Ifa 10.0.0.10
 Add new[0]: Net 0.0.0.0/0 Gate 10.0.0.1 Ifp en0 Ifa 10.0.0.10
@@ -12921,8 +18529,14 @@ Add new[5]: Net 10.0.0.1/32 Ifp en1 Ifa 10.0.0.20 [SCOPED]
 Add new[1]: Net 0.0.0.0/0 Gate 10.0.0.1 Ifp en1 Ifa 10.0.0.20 [SCOPED]
 Add new[2]: Net 10.0.0.0/24 Ifp en0 Ifa 10.0.0.10
 Add new[3]: Net 10.0.0.0/24 Ifp en1 Ifa 10.0.0.20 [SCOPED]
-New Routes ('test15') = <IPv4RouteList[1]> = {
- 0. Net 0.0.0.0/0 Ifp en0 Ifa 169.254.22.44
+Add new[6]: Net 224.0.0.0/4 Ifp en0 Ifa 10.0.0.10
+Add new[7]: Net 224.0.0.0/4 Ifp en1 Ifa 10.0.0.20 [SCOPED]
+Add new[8]: Net 255.255.255.255/32 Ifp en0 Ifa 10.0.0.10
+Add new[9]: Net 255.255.255.255/32 Ifp en1 Ifa 10.0.0.20 [SCOPED]
+New Routes ('test15') = <IPv4RouteList[3]> = {
+ 0. Net 169.254.0.0/16 Ifp en0 Ifa 169.254.22.44 [last]
+ 1. Net 224.0.0.0/4 Ifp en0 Ifa 169.254.22.44 [last]
+ 2. Net 255.255.255.255/32 Ifp en0 Ifa 169.254.22.44 [last]
 }
 Remove old[0]: Net 0.0.0.0/0 Gate 10.0.0.1 Ifp en0 Ifa 10.0.0.10
 Remove old[1]: Net 0.0.0.0/0 Gate 10.0.0.1 Ifp en1 Ifa 10.0.0.20 [SCOPED]
@@ -12930,39 +18544,63 @@ Remove old[2]: Net 10.0.0.0/24 Ifp en0 Ifa 10.0.0.10
 Remove old[3]: Net 10.0.0.0/24 Ifp en1 Ifa 10.0.0.20 [SCOPED]
 Remove old[4]: Net 10.0.0.1/32 Ifp en0 Ifa 10.0.0.10
 Remove old[5]: Net 10.0.0.1/32 Ifp en1 Ifa 10.0.0.20 [SCOPED]
-Add new[0]: Net 0.0.0.0/0 Ifp en0 Ifa 169.254.22.44
+Remove old[6]: Net 224.0.0.0/4 Ifp en0 Ifa 10.0.0.10
+Remove old[7]: Net 224.0.0.0/4 Ifp en1 Ifa 10.0.0.20 [SCOPED]
+Remove old[8]: Net 255.255.255.255/32 Ifp en0 Ifa 10.0.0.10
+Remove old[9]: Net 255.255.255.255/32 Ifp en1 Ifa 10.0.0.20 [SCOPED]
+Add new[0]: Net 169.254.0.0/16 Ifp en0 Ifa 169.254.22.44 [last]
+Add new[1]: Net 224.0.0.0/4 Ifp en0 Ifa 169.254.22.44 [last]
+Add new[2]: Net 255.255.255.255/32 Ifp en0 Ifa 169.254.22.44 [last]
 =================> Apply 'test8', 'test15' End <=================
 
 =================> Apply 'test15', 'test8' Begin <=================
-Old routes ('test15') = <IPv4RouteList[1]> = {
- 0. Net 0.0.0.0/0 Ifp en0 Ifa 169.254.22.44
+Old routes ('test15') = <IPv4RouteList[3]> = {
+ 0. Net 169.254.0.0/16 Ifp en0 Ifa 169.254.22.44 [last]
+ 1. Net 224.0.0.0/4 Ifp en0 Ifa 169.254.22.44 [last]
+ 2. Net 255.255.255.255/32 Ifp en0 Ifa 169.254.22.44 [last]
 }
-Add new[0]: Net 0.0.0.0/0 Ifp en0 Ifa 169.254.22.44
-New Routes ('test8') = <IPv4RouteList[6]> = {
+Add new[0]: Net 169.254.0.0/16 Ifp en0 Ifa 169.254.22.44 [last]
+Add new[1]: Net 224.0.0.0/4 Ifp en0 Ifa 169.254.22.44 [last]
+Add new[2]: Net 255.255.255.255/32 Ifp en0 Ifa 169.254.22.44 [last]
+New Routes ('test8') = <IPv4RouteList[10]> = {
  0. Net 0.0.0.0/0 Gate 10.0.0.1 Ifp en0 Ifa 10.0.0.10
  1. Net 0.0.0.0/0 Gate 10.0.0.1 Ifp en1 Ifa 10.0.0.20 [SCOPED]
  2. Net 10.0.0.0/24 Ifp en0 Ifa 10.0.0.10
  3. Net 10.0.0.0/24 Ifp en1 Ifa 10.0.0.20 [SCOPED]
  4. Net 10.0.0.1/32 Ifp en0 Ifa 10.0.0.10
  5. Net 10.0.0.1/32 Ifp en1 Ifa 10.0.0.20 [SCOPED]
-}
-Remove old[0]: Net 0.0.0.0/0 Ifp en0 Ifa 169.254.22.44
+ 6. Net 224.0.0.0/4 Ifp en0 Ifa 10.0.0.10
+ 7. Net 224.0.0.0/4 Ifp en1 Ifa 10.0.0.20 [SCOPED]
+ 8. Net 255.255.255.255/32 Ifp en0 Ifa 10.0.0.10
+ 9. Net 255.255.255.255/32 Ifp en1 Ifa 10.0.0.20 [SCOPED]
+}
+Remove old[0]: Net 169.254.0.0/16 Ifp en0 Ifa 169.254.22.44 [last]
+Remove old[1]: Net 224.0.0.0/4 Ifp en0 Ifa 169.254.22.44 [last]
+Remove old[2]: Net 255.255.255.255/32 Ifp en0 Ifa 169.254.22.44 [last]
 Add new[4]: Net 10.0.0.1/32 Ifp en0 Ifa 10.0.0.10
 Add new[0]: Net 0.0.0.0/0 Gate 10.0.0.1 Ifp en0 Ifa 10.0.0.10
 Add new[5]: Net 10.0.0.1/32 Ifp en1 Ifa 10.0.0.20 [SCOPED]
 Add new[1]: Net 0.0.0.0/0 Gate 10.0.0.1 Ifp en1 Ifa 10.0.0.20 [SCOPED]
 Add new[2]: Net 10.0.0.0/24 Ifp en0 Ifa 10.0.0.10
 Add new[3]: Net 10.0.0.0/24 Ifp en1 Ifa 10.0.0.20 [SCOPED]
+Add new[6]: Net 224.0.0.0/4 Ifp en0 Ifa 10.0.0.10
+Add new[7]: Net 224.0.0.0/4 Ifp en1 Ifa 10.0.0.20 [SCOPED]
+Add new[8]: Net 255.255.255.255/32 Ifp en0 Ifa 10.0.0.10
+Add new[9]: Net 255.255.255.255/32 Ifp en1 Ifa 10.0.0.20 [SCOPED]
 =================> Apply 'test15', 'test8' End <=================
 
 =================> Apply 'test8', 'test16' Begin <=================
-Old routes ('test8') = <IPv4RouteList[6]> = {
+Old routes ('test8') = <IPv4RouteList[10]> = {
  0. Net 0.0.0.0/0 Gate 10.0.0.1 Ifp en0 Ifa 10.0.0.10
  1. Net 0.0.0.0/0 Gate 10.0.0.1 Ifp en1 Ifa 10.0.0.20 [SCOPED]
  2. Net 10.0.0.0/24 Ifp en0 Ifa 10.0.0.10
  3. Net 10.0.0.0/24 Ifp en1 Ifa 10.0.0.20 [SCOPED]
  4. Net 10.0.0.1/32 Ifp en0 Ifa 10.0.0.10
  5. Net 10.0.0.1/32 Ifp en1 Ifa 10.0.0.20 [SCOPED]
+ 6. Net 224.0.0.0/4 Ifp en0 Ifa 10.0.0.10
+ 7. Net 224.0.0.0/4 Ifp en1 Ifa 10.0.0.20 [SCOPED]
+ 8. Net 255.255.255.255/32 Ifp en0 Ifa 10.0.0.10
+ 9. Net 255.255.255.255/32 Ifp en1 Ifa 10.0.0.20 [SCOPED]
 }
 Add new[4]: Net 10.0.0.1/32 Ifp en0 Ifa 10.0.0.10
 Add new[0]: Net 0.0.0.0/0 Gate 10.0.0.1 Ifp en0 Ifa 10.0.0.10
@@ -12970,7 +18608,11 @@ Add new[5]: Net 10.0.0.1/32 Ifp en1 Ifa 10.0.0.20 [SCOPED]
 Add new[1]: Net 0.0.0.0/0 Gate 10.0.0.1 Ifp en1 Ifa 10.0.0.20 [SCOPED]
 Add new[2]: Net 10.0.0.0/24 Ifp en0 Ifa 10.0.0.10
 Add new[3]: Net 10.0.0.0/24 Ifp en1 Ifa 10.0.0.20 [SCOPED]
-New Routes ('test16') = <IPv4RouteList[50]> = {
+Add new[6]: Net 224.0.0.0/4 Ifp en0 Ifa 10.0.0.10
+Add new[7]: Net 224.0.0.0/4 Ifp en1 Ifa 10.0.0.20 [SCOPED]
+Add new[8]: Net 255.255.255.255/32 Ifp en0 Ifa 10.0.0.10
+Add new[9]: Net 255.255.255.255/32 Ifp en1 Ifa 10.0.0.20 [SCOPED]
+New Routes ('test16') = <IPv4RouteList[54]> = {
  0. Net 0.0.0.0/0 Gate 10.0.0.1 Ifp en0 Ifa 10.0.0.10
  1. Net 0.0.0.0/0 Ifp utun0 Ifa 17.153.46.24 [SCOPED]
  2. Net 10.0.0.0/24 Ifp en0 Ifa 10.0.0.10
@@ -13021,10 +18663,16 @@ New Routes ('test16') = <IPv4RouteList[50]> = {
 47. Net 192.35.50.0/24 Gate 17.153.46.24 Ifp utun0 Ifa 17.153.46.24
 48. Net 204.179.20.0/24 Gate 17.153.46.24 Ifp utun0 Ifa 17.153.46.24
 49. Net 206.112.116.0/24 Gate 17.153.46.24 Ifp utun0 Ifa 17.153.46.24
+50. Net 224.0.0.0/4 Ifp en0 Ifa 10.0.0.10
+51. Net 224.0.0.0/4 Ifp utun0 Ifa 17.153.46.24 [SCOPED]
+52. Net 255.255.255.255/32 Ifp en0 Ifa 10.0.0.10
+53. Net 255.255.255.255/32 Ifp utun0 Ifa 17.153.46.24 [SCOPED]
 }
 Remove old[1]: Net 0.0.0.0/0 Gate 10.0.0.1 Ifp en1 Ifa 10.0.0.20 [SCOPED]
 Remove old[3]: Net 10.0.0.0/24 Ifp en1 Ifa 10.0.0.20 [SCOPED]
 Remove old[5]: Net 10.0.0.1/32 Ifp en1 Ifa 10.0.0.20 [SCOPED]
+Remove old[7]: Net 224.0.0.0/4 Ifp en1 Ifa 10.0.0.20 [SCOPED]
+Remove old[9]: Net 255.255.255.255/32 Ifp en1 Ifa 10.0.0.20 [SCOPED]
 Add new[1]: Net 0.0.0.0/0 Ifp utun0 Ifa 17.153.46.24 [SCOPED]
 Add new[4]: Net 10.1.3.0/24 Gate 17.153.46.24 Ifp utun0 Ifa 17.153.46.24
 Add new[5]: Net 10.1.4.0/24 Gate 17.153.46.24 Ifp utun0 Ifa 17.153.46.24
@@ -13072,10 +18720,12 @@ Add new[46]: Net 172.16.2.0/24 Gate 17.153.46.24 Ifp utun0 Ifa 17.153.46.24
 Add new[47]: Net 192.35.50.0/24 Gate 17.153.46.24 Ifp utun0 Ifa 17.153.46.24
 Add new[48]: Net 204.179.20.0/24 Gate 17.153.46.24 Ifp utun0 Ifa 17.153.46.24
 Add new[49]: Net 206.112.116.0/24 Gate 17.153.46.24 Ifp utun0 Ifa 17.153.46.24
+Add new[51]: Net 224.0.0.0/4 Ifp utun0 Ifa 17.153.46.24 [SCOPED]
+Add new[53]: Net 255.255.255.255/32 Ifp utun0 Ifa 17.153.46.24 [SCOPED]
 =================> Apply 'test8', 'test16' End <=================
 
 =================> Apply 'test16', 'test8' Begin <=================
-Old routes ('test16') = <IPv4RouteList[50]> = {
+Old routes ('test16') = <IPv4RouteList[54]> = {
  0. Net 0.0.0.0/0 Gate 10.0.0.1 Ifp en0 Ifa 10.0.0.10
  1. Net 0.0.0.0/0 Ifp utun0 Ifa 17.153.46.24 [SCOPED]
  2. Net 10.0.0.0/24 Ifp en0 Ifa 10.0.0.10
@@ -13126,6 +18776,10 @@ Old routes ('test16') = <IPv4RouteList[50]> = {
 47. Net 192.35.50.0/24 Gate 17.153.46.24 Ifp utun0 Ifa 17.153.46.24
 48. Net 204.179.20.0/24 Gate 17.153.46.24 Ifp utun0 Ifa 17.153.46.24
 49. Net 206.112.116.0/24 Gate 17.153.46.24 Ifp utun0 Ifa 17.153.46.24
+50. Net 224.0.0.0/4 Ifp en0 Ifa 10.0.0.10
+51. Net 224.0.0.0/4 Ifp utun0 Ifa 17.153.46.24 [SCOPED]
+52. Net 255.255.255.255/32 Ifp en0 Ifa 10.0.0.10
+53. Net 255.255.255.255/32 Ifp utun0 Ifa 17.153.46.24 [SCOPED]
 }
 Add new[3]: Net 10.0.0.1/32 Ifp en0 Ifa 10.0.0.10
 Add new[0]: Net 0.0.0.0/0 Gate 10.0.0.1 Ifp en0 Ifa 10.0.0.10
@@ -13177,13 +18831,21 @@ Add new[46]: Net 172.16.2.0/24 Gate 17.153.46.24 Ifp utun0 Ifa 17.153.46.24
 Add new[47]: Net 192.35.50.0/24 Gate 17.153.46.24 Ifp utun0 Ifa 17.153.46.24
 Add new[48]: Net 204.179.20.0/24 Gate 17.153.46.24 Ifp utun0 Ifa 17.153.46.24
 Add new[49]: Net 206.112.116.0/24 Gate 17.153.46.24 Ifp utun0 Ifa 17.153.46.24
-New Routes ('test8') = <IPv4RouteList[6]> = {
+Add new[50]: Net 224.0.0.0/4 Ifp en0 Ifa 10.0.0.10
+Add new[51]: Net 224.0.0.0/4 Ifp utun0 Ifa 17.153.46.24 [SCOPED]
+Add new[52]: Net 255.255.255.255/32 Ifp en0 Ifa 10.0.0.10
+Add new[53]: Net 255.255.255.255/32 Ifp utun0 Ifa 17.153.46.24 [SCOPED]
+New Routes ('test8') = <IPv4RouteList[10]> = {
  0. Net 0.0.0.0/0 Gate 10.0.0.1 Ifp en0 Ifa 10.0.0.10
  1. Net 0.0.0.0/0 Gate 10.0.0.1 Ifp en1 Ifa 10.0.0.20 [SCOPED]
  2. Net 10.0.0.0/24 Ifp en0 Ifa 10.0.0.10
  3. Net 10.0.0.0/24 Ifp en1 Ifa 10.0.0.20 [SCOPED]
  4. Net 10.0.0.1/32 Ifp en0 Ifa 10.0.0.10
  5. Net 10.0.0.1/32 Ifp en1 Ifa 10.0.0.20 [SCOPED]
+ 6. Net 224.0.0.0/4 Ifp en0 Ifa 10.0.0.10
+ 7. Net 224.0.0.0/4 Ifp en1 Ifa 10.0.0.20 [SCOPED]
+ 8. Net 255.255.255.255/32 Ifp en0 Ifa 10.0.0.10
+ 9. Net 255.255.255.255/32 Ifp en1 Ifa 10.0.0.20 [SCOPED]
 }
 Remove old[1]: Net 0.0.0.0/0 Ifp utun0 Ifa 17.153.46.24 [SCOPED]
 Remove old[4]: Net 10.1.3.0/24 Gate 17.153.46.24 Ifp utun0 Ifa 17.153.46.24
@@ -13232,19 +18894,27 @@ Remove old[46]: Net 172.16.2.0/24 Gate 17.153.46.24 Ifp utun0 Ifa 17.153.46.24
 Remove old[47]: Net 192.35.50.0/24 Gate 17.153.46.24 Ifp utun0 Ifa 17.153.46.24
 Remove old[48]: Net 204.179.20.0/24 Gate 17.153.46.24 Ifp utun0 Ifa 17.153.46.24
 Remove old[49]: Net 206.112.116.0/24 Gate 17.153.46.24 Ifp utun0 Ifa 17.153.46.24
+Remove old[51]: Net 224.0.0.0/4 Ifp utun0 Ifa 17.153.46.24 [SCOPED]
+Remove old[53]: Net 255.255.255.255/32 Ifp utun0 Ifa 17.153.46.24 [SCOPED]
 Add new[5]: Net 10.0.0.1/32 Ifp en1 Ifa 10.0.0.20 [SCOPED]
 Add new[1]: Net 0.0.0.0/0 Gate 10.0.0.1 Ifp en1 Ifa 10.0.0.20 [SCOPED]
 Add new[3]: Net 10.0.0.0/24 Ifp en1 Ifa 10.0.0.20 [SCOPED]
+Add new[7]: Net 224.0.0.0/4 Ifp en1 Ifa 10.0.0.20 [SCOPED]
+Add new[9]: Net 255.255.255.255/32 Ifp en1 Ifa 10.0.0.20 [SCOPED]
 =================> Apply 'test16', 'test8' End <=================
 
 =================> Apply 'test8', 'test17' Begin <=================
-Old routes ('test8') = <IPv4RouteList[6]> = {
+Old routes ('test8') = <IPv4RouteList[10]> = {
  0. Net 0.0.0.0/0 Gate 10.0.0.1 Ifp en0 Ifa 10.0.0.10
  1. Net 0.0.0.0/0 Gate 10.0.0.1 Ifp en1 Ifa 10.0.0.20 [SCOPED]
  2. Net 10.0.0.0/24 Ifp en0 Ifa 10.0.0.10
  3. Net 10.0.0.0/24 Ifp en1 Ifa 10.0.0.20 [SCOPED]
  4. Net 10.0.0.1/32 Ifp en0 Ifa 10.0.0.10
  5. Net 10.0.0.1/32 Ifp en1 Ifa 10.0.0.20 [SCOPED]
+ 6. Net 224.0.0.0/4 Ifp en0 Ifa 10.0.0.10
+ 7. Net 224.0.0.0/4 Ifp en1 Ifa 10.0.0.20 [SCOPED]
+ 8. Net 255.255.255.255/32 Ifp en0 Ifa 10.0.0.10
+ 9. Net 255.255.255.255/32 Ifp en1 Ifa 10.0.0.20 [SCOPED]
 }
 Add new[4]: Net 10.0.0.1/32 Ifp en0 Ifa 10.0.0.10
 Add new[0]: Net 0.0.0.0/0 Gate 10.0.0.1 Ifp en0 Ifa 10.0.0.10
@@ -13252,30 +18922,46 @@ Add new[5]: Net 10.0.0.1/32 Ifp en1 Ifa 10.0.0.20 [SCOPED]
 Add new[1]: Net 0.0.0.0/0 Gate 10.0.0.1 Ifp en1 Ifa 10.0.0.20 [SCOPED]
 Add new[2]: Net 10.0.0.0/24 Ifp en0 Ifa 10.0.0.10
 Add new[3]: Net 10.0.0.0/24 Ifp en1 Ifa 10.0.0.20 [SCOPED]
-New Routes ('test17') = <IPv4RouteList[6]> = {
+Add new[6]: Net 224.0.0.0/4 Ifp en0 Ifa 10.0.0.10
+Add new[7]: Net 224.0.0.0/4 Ifp en1 Ifa 10.0.0.20 [SCOPED]
+Add new[8]: Net 255.255.255.255/32 Ifp en0 Ifa 10.0.0.10
+Add new[9]: Net 255.255.255.255/32 Ifp en1 Ifa 10.0.0.20 [SCOPED]
+New Routes ('test17') = <IPv4RouteList[10]> = {
  0. Net 0.0.0.0/0 Gate 10.0.0.1 Ifp en0 Ifa 10.0.0.10
  1. Net 0.0.0.0/0 Gate 192.168.2.1 Ifp en1 Ifa 192.168.2.50 [never] [SCOPED]
  2. Net 10.0.0.0/24 Ifp en0 Ifa 10.0.0.10
  3. Net 10.0.0.1/32 Ifp en0 Ifa 10.0.0.10
  4. Net 192.168.2.0/24 Ifp en1 Ifa 192.168.2.50 [last]
  5. Net 192.168.2.1/32 Ifp en1 Ifa 192.168.2.50 [last]
+ 6. Net 224.0.0.0/4 Ifp en0 Ifa 10.0.0.10
+ 7. Net 224.0.0.0/4 Ifp en1 Ifa 192.168.2.50 [last] [SCOPED]
+ 8. Net 255.255.255.255/32 Ifp en0 Ifa 10.0.0.10
+ 9. Net 255.255.255.255/32 Ifp en1 Ifa 192.168.2.50 [last] [SCOPED]
 }
 Remove old[1]: Net 0.0.0.0/0 Gate 10.0.0.1 Ifp en1 Ifa 10.0.0.20 [SCOPED]
 Remove old[3]: Net 10.0.0.0/24 Ifp en1 Ifa 10.0.0.20 [SCOPED]
 Remove old[5]: Net 10.0.0.1/32 Ifp en1 Ifa 10.0.0.20 [SCOPED]
+Remove old[7]: Net 224.0.0.0/4 Ifp en1 Ifa 10.0.0.20 [SCOPED]
+Remove old[9]: Net 255.255.255.255/32 Ifp en1 Ifa 10.0.0.20 [SCOPED]
 Add new[5]: Net 192.168.2.1/32 Ifp en1 Ifa 192.168.2.50 [last]
 Add new[1]: Net 0.0.0.0/0 Gate 192.168.2.1 Ifp en1 Ifa 192.168.2.50 [never] [SCOPED]
 Add new[4]: Net 192.168.2.0/24 Ifp en1 Ifa 192.168.2.50 [last]
+Add new[7]: Net 224.0.0.0/4 Ifp en1 Ifa 192.168.2.50 [last] [SCOPED]
+Add new[9]: Net 255.255.255.255/32 Ifp en1 Ifa 192.168.2.50 [last] [SCOPED]
 =================> Apply 'test8', 'test17' End <=================
 
 =================> Apply 'test17', 'test8' Begin <=================
-Old routes ('test17') = <IPv4RouteList[6]> = {
+Old routes ('test17') = <IPv4RouteList[10]> = {
  0. Net 0.0.0.0/0 Gate 10.0.0.1 Ifp en0 Ifa 10.0.0.10
  1. Net 0.0.0.0/0 Gate 192.168.2.1 Ifp en1 Ifa 192.168.2.50 [never] [SCOPED]
  2. Net 10.0.0.0/24 Ifp en0 Ifa 10.0.0.10
  3. Net 10.0.0.1/32 Ifp en0 Ifa 10.0.0.10
  4. Net 192.168.2.0/24 Ifp en1 Ifa 192.168.2.50 [last]
  5. Net 192.168.2.1/32 Ifp en1 Ifa 192.168.2.50 [last]
+ 6. Net 224.0.0.0/4 Ifp en0 Ifa 10.0.0.10
+ 7. Net 224.0.0.0/4 Ifp en1 Ifa 192.168.2.50 [last] [SCOPED]
+ 8. Net 255.255.255.255/32 Ifp en0 Ifa 10.0.0.10
+ 9. Net 255.255.255.255/32 Ifp en1 Ifa 192.168.2.50 [last] [SCOPED]
 }
 Add new[3]: Net 10.0.0.1/32 Ifp en0 Ifa 10.0.0.10
 Add new[0]: Net 0.0.0.0/0 Gate 10.0.0.1 Ifp en0 Ifa 10.0.0.10
@@ -13283,30 +18969,46 @@ Add new[5]: Net 192.168.2.1/32 Ifp en1 Ifa 192.168.2.50 [last]
 Add new[1]: Net 0.0.0.0/0 Gate 192.168.2.1 Ifp en1 Ifa 192.168.2.50 [never] [SCOPED]
 Add new[2]: Net 10.0.0.0/24 Ifp en0 Ifa 10.0.0.10
 Add new[4]: Net 192.168.2.0/24 Ifp en1 Ifa 192.168.2.50 [last]
-New Routes ('test8') = <IPv4RouteList[6]> = {
+Add new[6]: Net 224.0.0.0/4 Ifp en0 Ifa 10.0.0.10
+Add new[7]: Net 224.0.0.0/4 Ifp en1 Ifa 192.168.2.50 [last] [SCOPED]
+Add new[8]: Net 255.255.255.255/32 Ifp en0 Ifa 10.0.0.10
+Add new[9]: Net 255.255.255.255/32 Ifp en1 Ifa 192.168.2.50 [last] [SCOPED]
+New Routes ('test8') = <IPv4RouteList[10]> = {
  0. Net 0.0.0.0/0 Gate 10.0.0.1 Ifp en0 Ifa 10.0.0.10
  1. Net 0.0.0.0/0 Gate 10.0.0.1 Ifp en1 Ifa 10.0.0.20 [SCOPED]
  2. Net 10.0.0.0/24 Ifp en0 Ifa 10.0.0.10
  3. Net 10.0.0.0/24 Ifp en1 Ifa 10.0.0.20 [SCOPED]
  4. Net 10.0.0.1/32 Ifp en0 Ifa 10.0.0.10
  5. Net 10.0.0.1/32 Ifp en1 Ifa 10.0.0.20 [SCOPED]
+ 6. Net 224.0.0.0/4 Ifp en0 Ifa 10.0.0.10
+ 7. Net 224.0.0.0/4 Ifp en1 Ifa 10.0.0.20 [SCOPED]
+ 8. Net 255.255.255.255/32 Ifp en0 Ifa 10.0.0.10
+ 9. Net 255.255.255.255/32 Ifp en1 Ifa 10.0.0.20 [SCOPED]
 }
 Remove old[1]: Net 0.0.0.0/0 Gate 192.168.2.1 Ifp en1 Ifa 192.168.2.50 [never] [SCOPED]
 Remove old[4]: Net 192.168.2.0/24 Ifp en1 Ifa 192.168.2.50 [last]
 Remove old[5]: Net 192.168.2.1/32 Ifp en1 Ifa 192.168.2.50 [last]
+Remove old[7]: Net 224.0.0.0/4 Ifp en1 Ifa 192.168.2.50 [last] [SCOPED]
+Remove old[9]: Net 255.255.255.255/32 Ifp en1 Ifa 192.168.2.50 [last] [SCOPED]
 Add new[5]: Net 10.0.0.1/32 Ifp en1 Ifa 10.0.0.20 [SCOPED]
 Add new[1]: Net 0.0.0.0/0 Gate 10.0.0.1 Ifp en1 Ifa 10.0.0.20 [SCOPED]
 Add new[3]: Net 10.0.0.0/24 Ifp en1 Ifa 10.0.0.20 [SCOPED]
+Add new[7]: Net 224.0.0.0/4 Ifp en1 Ifa 10.0.0.20 [SCOPED]
+Add new[9]: Net 255.255.255.255/32 Ifp en1 Ifa 10.0.0.20 [SCOPED]
 =================> Apply 'test17', 'test8' End <=================
 
 =================> Apply 'test8', 'test18' Begin <=================
-Old routes ('test8') = <IPv4RouteList[6]> = {
+Old routes ('test8') = <IPv4RouteList[10]> = {
  0. Net 0.0.0.0/0 Gate 10.0.0.1 Ifp en0 Ifa 10.0.0.10
  1. Net 0.0.0.0/0 Gate 10.0.0.1 Ifp en1 Ifa 10.0.0.20 [SCOPED]
  2. Net 10.0.0.0/24 Ifp en0 Ifa 10.0.0.10
  3. Net 10.0.0.0/24 Ifp en1 Ifa 10.0.0.20 [SCOPED]
  4. Net 10.0.0.1/32 Ifp en0 Ifa 10.0.0.10
  5. Net 10.0.0.1/32 Ifp en1 Ifa 10.0.0.20 [SCOPED]
+ 6. Net 224.0.0.0/4 Ifp en0 Ifa 10.0.0.10
+ 7. Net 224.0.0.0/4 Ifp en1 Ifa 10.0.0.20 [SCOPED]
+ 8. Net 255.255.255.255/32 Ifp en0 Ifa 10.0.0.10
+ 9. Net 255.255.255.255/32 Ifp en1 Ifa 10.0.0.20 [SCOPED]
 }
 Add new[4]: Net 10.0.0.1/32 Ifp en0 Ifa 10.0.0.10
 Add new[0]: Net 0.0.0.0/0 Gate 10.0.0.1 Ifp en0 Ifa 10.0.0.10
@@ -13314,7 +19016,11 @@ Add new[5]: Net 10.0.0.1/32 Ifp en1 Ifa 10.0.0.20 [SCOPED]
 Add new[1]: Net 0.0.0.0/0 Gate 10.0.0.1 Ifp en1 Ifa 10.0.0.20 [SCOPED]
 Add new[2]: Net 10.0.0.0/24 Ifp en0 Ifa 10.0.0.10
 Add new[3]: Net 10.0.0.0/24 Ifp en1 Ifa 10.0.0.20 [SCOPED]
-New Routes ('test18') = <IPv4RouteList[14]> = {
+Add new[6]: Net 224.0.0.0/4 Ifp en0 Ifa 10.0.0.10
+Add new[7]: Net 224.0.0.0/4 Ifp en1 Ifa 10.0.0.20 [SCOPED]
+Add new[8]: Net 255.255.255.255/32 Ifp en0 Ifa 10.0.0.10
+Add new[9]: Net 255.255.255.255/32 Ifp en1 Ifa 10.0.0.20 [SCOPED]
+New Routes ('test18') = <IPv4RouteList[16]> = {
  0. Net 0.0.0.0/0 Gate 192.168.130.1 Ifp en0 Ifa 192.168.130.16
  1. Host 1.1.1.1 Gate 1.1.1.2 Ifp en0 Ifa 192.168.130.16
  2. Host 1.1.1.2 Gate 1.1.1.3 Ifp en0 Ifa 192.168.130.16
@@ -13329,6 +19035,8 @@ New Routes ('test18') = <IPv4RouteList[14]> = {
 11. Host 1.1.1.11 Gate 1.1.1.1 Ifp en0 Ifa 192.168.130.16
 12. Net 192.168.130.0/24 Ifp en0 Ifa 192.168.130.16
 13. Net 192.168.130.1/32 Ifp en0 Ifa 192.168.130.16
+14. Net 224.0.0.0/4 Ifp en0 Ifa 192.168.130.16
+15. Net 255.255.255.255/32 Ifp en0 Ifa 192.168.130.16
 }
 Remove old[0]: Net 0.0.0.0/0 Gate 10.0.0.1 Ifp en0 Ifa 10.0.0.10
 Remove old[1]: Net 0.0.0.0/0 Gate 10.0.0.1 Ifp en1 Ifa 10.0.0.20 [SCOPED]
@@ -13336,24 +19044,30 @@ Remove old[2]: Net 10.0.0.0/24 Ifp en0 Ifa 10.0.0.10
 Remove old[3]: Net 10.0.0.0/24 Ifp en1 Ifa 10.0.0.20 [SCOPED]
 Remove old[4]: Net 10.0.0.1/32 Ifp en0 Ifa 10.0.0.10
 Remove old[5]: Net 10.0.0.1/32 Ifp en1 Ifa 10.0.0.20 [SCOPED]
+Remove old[6]: Net 224.0.0.0/4 Ifp en0 Ifa 10.0.0.10
+Remove old[7]: Net 224.0.0.0/4 Ifp en1 Ifa 10.0.0.20 [SCOPED]
+Remove old[8]: Net 255.255.255.255/32 Ifp en0 Ifa 10.0.0.10
+Remove old[9]: Net 255.255.255.255/32 Ifp en1 Ifa 10.0.0.20 [SCOPED]
 Add new[13]: Net 192.168.130.1/32 Ifp en0 Ifa 192.168.130.16
 Add new[0]: Net 0.0.0.0/0 Gate 192.168.130.1 Ifp en0 Ifa 192.168.130.16
-IPMonitor RouteProcess: routing loop detected, not adding: Host 1.1.1.11 Gate 1.1.1.1 Ifp en0 Ifa 192.168.130.16
-IPMonitor RouteProcess: failed to add: Host 1.1.1.10 Gate 1.1.1.11 Ifp en0 Ifa 192.168.130.16
-IPMonitor RouteProcess: failed to add: Host 1.1.1.9 Gate 1.1.1.10 Ifp en0 Ifa 192.168.130.16
-IPMonitor RouteProcess: failed to add: Host 1.1.1.8 Gate 1.1.1.9 Ifp en0 Ifa 192.168.130.16
-IPMonitor RouteProcess: failed to add: Host 1.1.1.7 Gate 1.1.1.8 Ifp en0 Ifa 192.168.130.16
-IPMonitor RouteProcess: failed to add: Host 1.1.1.6 Gate 1.1.1.7 Ifp en0 Ifa 192.168.130.16
-IPMonitor RouteProcess: failed to add: Host 1.1.1.5 Gate 1.1.1.6 Ifp en0 Ifa 192.168.130.16
-IPMonitor RouteProcess: failed to add: Host 1.1.1.4 Gate 1.1.1.5 Ifp en0 Ifa 192.168.130.16
-IPMonitor RouteProcess: failed to add: Host 1.1.1.3 Gate 1.1.1.4 Ifp en0 Ifa 192.168.130.16
-IPMonitor RouteProcess: failed to add: Host 1.1.1.2 Gate 1.1.1.3 Ifp en0 Ifa 192.168.130.16
-IPMonitor RouteProcess: failed to add: Host 1.1.1.1 Gate 1.1.1.2 Ifp en0 Ifa 192.168.130.16
+routing loop detected, not adding: Host 1.1.1.11 Gate 1.1.1.1 Ifp en0 Ifa 192.168.130.16
+failed to add: Host 1.1.1.10 Gate 1.1.1.11 Ifp en0 Ifa 192.168.130.16
+failed to add: Host 1.1.1.9 Gate 1.1.1.10 Ifp en0 Ifa 192.168.130.16
+failed to add: Host 1.1.1.8 Gate 1.1.1.9 Ifp en0 Ifa 192.168.130.16
+failed to add: Host 1.1.1.7 Gate 1.1.1.8 Ifp en0 Ifa 192.168.130.16
+failed to add: Host 1.1.1.6 Gate 1.1.1.7 Ifp en0 Ifa 192.168.130.16
+failed to add: Host 1.1.1.5 Gate 1.1.1.6 Ifp en0 Ifa 192.168.130.16
+failed to add: Host 1.1.1.4 Gate 1.1.1.5 Ifp en0 Ifa 192.168.130.16
+failed to add: Host 1.1.1.3 Gate 1.1.1.4 Ifp en0 Ifa 192.168.130.16
+failed to add: Host 1.1.1.2 Gate 1.1.1.3 Ifp en0 Ifa 192.168.130.16
+failed to add: Host 1.1.1.1 Gate 1.1.1.2 Ifp en0 Ifa 192.168.130.16
 Add new[12]: Net 192.168.130.0/24 Ifp en0 Ifa 192.168.130.16
+Add new[14]: Net 224.0.0.0/4 Ifp en0 Ifa 192.168.130.16
+Add new[15]: Net 255.255.255.255/32 Ifp en0 Ifa 192.168.130.16
 =================> Apply 'test8', 'test18' End <=================
 
 =================> Apply 'test18', 'test8' Begin <=================
-Old routes ('test18') = <IPv4RouteList[14]> = {
+Old routes ('test18') = <IPv4RouteList[16]> = {
  0. Net 0.0.0.0/0 Gate 192.168.130.1 Ifp en0 Ifa 192.168.130.16
  1. Host 1.1.1.1 Gate 1.1.1.2 Ifp en0 Ifa 192.168.130.16
  2. Host 1.1.1.2 Gate 1.1.1.3 Ifp en0 Ifa 192.168.130.16
@@ -13368,42 +19082,56 @@ Old routes ('test18') = <IPv4RouteList[14]> = {
 11. Host 1.1.1.11 Gate 1.1.1.1 Ifp en0 Ifa 192.168.130.16
 12. Net 192.168.130.0/24 Ifp en0 Ifa 192.168.130.16
 13. Net 192.168.130.1/32 Ifp en0 Ifa 192.168.130.16
+14. Net 224.0.0.0/4 Ifp en0 Ifa 192.168.130.16
+15. Net 255.255.255.255/32 Ifp en0 Ifa 192.168.130.16
 }
 Add new[13]: Net 192.168.130.1/32 Ifp en0 Ifa 192.168.130.16
 Add new[0]: Net 0.0.0.0/0 Gate 192.168.130.1 Ifp en0 Ifa 192.168.130.16
-IPMonitor RouteProcess: routing loop detected, not adding: Host 1.1.1.11 Gate 1.1.1.1 Ifp en0 Ifa 192.168.130.16
-IPMonitor RouteProcess: failed to add: Host 1.1.1.10 Gate 1.1.1.11 Ifp en0 Ifa 192.168.130.16
-IPMonitor RouteProcess: failed to add: Host 1.1.1.9 Gate 1.1.1.10 Ifp en0 Ifa 192.168.130.16
-IPMonitor RouteProcess: failed to add: Host 1.1.1.8 Gate 1.1.1.9 Ifp en0 Ifa 192.168.130.16
-IPMonitor RouteProcess: failed to add: Host 1.1.1.7 Gate 1.1.1.8 Ifp en0 Ifa 192.168.130.16
-IPMonitor RouteProcess: failed to add: Host 1.1.1.6 Gate 1.1.1.7 Ifp en0 Ifa 192.168.130.16
-IPMonitor RouteProcess: failed to add: Host 1.1.1.5 Gate 1.1.1.6 Ifp en0 Ifa 192.168.130.16
-IPMonitor RouteProcess: failed to add: Host 1.1.1.4 Gate 1.1.1.5 Ifp en0 Ifa 192.168.130.16
-IPMonitor RouteProcess: failed to add: Host 1.1.1.3 Gate 1.1.1.4 Ifp en0 Ifa 192.168.130.16
-IPMonitor RouteProcess: failed to add: Host 1.1.1.2 Gate 1.1.1.3 Ifp en0 Ifa 192.168.130.16
-IPMonitor RouteProcess: failed to add: Host 1.1.1.1 Gate 1.1.1.2 Ifp en0 Ifa 192.168.130.16
+routing loop detected, not adding: Host 1.1.1.11 Gate 1.1.1.1 Ifp en0 Ifa 192.168.130.16
+failed to add: Host 1.1.1.10 Gate 1.1.1.11 Ifp en0 Ifa 192.168.130.16
+failed to add: Host 1.1.1.9 Gate 1.1.1.10 Ifp en0 Ifa 192.168.130.16
+failed to add: Host 1.1.1.8 Gate 1.1.1.9 Ifp en0 Ifa 192.168.130.16
+failed to add: Host 1.1.1.7 Gate 1.1.1.8 Ifp en0 Ifa 192.168.130.16
+failed to add: Host 1.1.1.6 Gate 1.1.1.7 Ifp en0 Ifa 192.168.130.16
+failed to add: Host 1.1.1.5 Gate 1.1.1.6 Ifp en0 Ifa 192.168.130.16
+failed to add: Host 1.1.1.4 Gate 1.1.1.5 Ifp en0 Ifa 192.168.130.16
+failed to add: Host 1.1.1.3 Gate 1.1.1.4 Ifp en0 Ifa 192.168.130.16
+failed to add: Host 1.1.1.2 Gate 1.1.1.3 Ifp en0 Ifa 192.168.130.16
+failed to add: Host 1.1.1.1 Gate 1.1.1.2 Ifp en0 Ifa 192.168.130.16
 Add new[12]: Net 192.168.130.0/24 Ifp en0 Ifa 192.168.130.16
-New Routes ('test8') = <IPv4RouteList[6]> = {
+Add new[14]: Net 224.0.0.0/4 Ifp en0 Ifa 192.168.130.16
+Add new[15]: Net 255.255.255.255/32 Ifp en0 Ifa 192.168.130.16
+New Routes ('test8') = <IPv4RouteList[10]> = {
  0. Net 0.0.0.0/0 Gate 10.0.0.1 Ifp en0 Ifa 10.0.0.10
  1. Net 0.0.0.0/0 Gate 10.0.0.1 Ifp en1 Ifa 10.0.0.20 [SCOPED]
  2. Net 10.0.0.0/24 Ifp en0 Ifa 10.0.0.10
  3. Net 10.0.0.0/24 Ifp en1 Ifa 10.0.0.20 [SCOPED]
  4. Net 10.0.0.1/32 Ifp en0 Ifa 10.0.0.10
  5. Net 10.0.0.1/32 Ifp en1 Ifa 10.0.0.20 [SCOPED]
+ 6. Net 224.0.0.0/4 Ifp en0 Ifa 10.0.0.10
+ 7. Net 224.0.0.0/4 Ifp en1 Ifa 10.0.0.20 [SCOPED]
+ 8. Net 255.255.255.255/32 Ifp en0 Ifa 10.0.0.10
+ 9. Net 255.255.255.255/32 Ifp en1 Ifa 10.0.0.20 [SCOPED]
 }
 Remove old[0]: Net 0.0.0.0/0 Gate 192.168.130.1 Ifp en0 Ifa 192.168.130.16
 Remove old[12]: Net 192.168.130.0/24 Ifp en0 Ifa 192.168.130.16
 Remove old[13]: Net 192.168.130.1/32 Ifp en0 Ifa 192.168.130.16
+Remove old[14]: Net 224.0.0.0/4 Ifp en0 Ifa 192.168.130.16
+Remove old[15]: Net 255.255.255.255/32 Ifp en0 Ifa 192.168.130.16
 Add new[4]: Net 10.0.0.1/32 Ifp en0 Ifa 10.0.0.10
 Add new[0]: Net 0.0.0.0/0 Gate 10.0.0.1 Ifp en0 Ifa 10.0.0.10
 Add new[5]: Net 10.0.0.1/32 Ifp en1 Ifa 10.0.0.20 [SCOPED]
 Add new[1]: Net 0.0.0.0/0 Gate 10.0.0.1 Ifp en1 Ifa 10.0.0.20 [SCOPED]
 Add new[2]: Net 10.0.0.0/24 Ifp en0 Ifa 10.0.0.10
 Add new[3]: Net 10.0.0.0/24 Ifp en1 Ifa 10.0.0.20 [SCOPED]
+Add new[6]: Net 224.0.0.0/4 Ifp en0 Ifa 10.0.0.10
+Add new[7]: Net 224.0.0.0/4 Ifp en1 Ifa 10.0.0.20 [SCOPED]
+Add new[8]: Net 255.255.255.255/32 Ifp en0 Ifa 10.0.0.10
+Add new[9]: Net 255.255.255.255/32 Ifp en1 Ifa 10.0.0.20 [SCOPED]
 =================> Apply 'test18', 'test8' End <=================
 
 =================> Apply 'test9', 'test10' Begin <=================
-Old routes ('test9') = <IPv4RouteList[9]> = {
+Old routes ('test9') = <IPv4RouteList[15]> = {
  0. Net 0.0.0.0/0 Gate 10.0.0.1 Ifp en1 Ifa 10.0.0.20 [first]
  1. Net 0.0.0.0/0 Gate 10.0.0.1 Ifp en0 Ifa 10.0.0.10 [SCOPED]
  2. Net 0.0.0.0/0 Gate 192.168.2.1 Ifp fw0 Ifa 192.168.2.30 [SCOPED]
@@ -13413,6 +19141,12 @@ Old routes ('test9') = <IPv4RouteList[9]> = {
  6. Net 10.0.0.1/32 Ifp en0 Ifa 10.0.0.10 [SCOPED]
  7. Net 192.168.2.0/24 Ifp fw0 Ifa 192.168.2.30
  8. Net 192.168.2.1/32 Ifp fw0 Ifa 192.168.2.30
+ 9. Net 224.0.0.0/4 Ifp en1 Ifa 10.0.0.20 [first]
+10. Net 224.0.0.0/4 Ifp en0 Ifa 10.0.0.10 [SCOPED]
+11. Net 224.0.0.0/4 Ifp fw0 Ifa 192.168.2.30 [SCOPED]
+12. Net 255.255.255.255/32 Ifp en1 Ifa 10.0.0.20 [first]
+13. Net 255.255.255.255/32 Ifp en0 Ifa 10.0.0.10 [SCOPED]
+14. Net 255.255.255.255/32 Ifp fw0 Ifa 192.168.2.30 [SCOPED]
 }
 Add new[5]: Net 10.0.0.1/32 Ifp en1 Ifa 10.0.0.20 [first]
 Add new[0]: Net 0.0.0.0/0 Gate 10.0.0.1 Ifp en1 Ifa 10.0.0.20 [first]
@@ -13423,7 +19157,13 @@ Add new[2]: Net 0.0.0.0/0 Gate 192.168.2.1 Ifp fw0 Ifa 192.168.2.30 [SCOPED]
 Add new[3]: Net 10.0.0.0/24 Ifp en1 Ifa 10.0.0.20 [first]
 Add new[4]: Net 10.0.0.0/24 Ifp en0 Ifa 10.0.0.10 [SCOPED]
 Add new[7]: Net 192.168.2.0/24 Ifp fw0 Ifa 192.168.2.30
-New Routes ('test10') = <IPv4RouteList[9]> = {
+Add new[9]: Net 224.0.0.0/4 Ifp en1 Ifa 10.0.0.20 [first]
+Add new[10]: Net 224.0.0.0/4 Ifp en0 Ifa 10.0.0.10 [SCOPED]
+Add new[11]: Net 224.0.0.0/4 Ifp fw0 Ifa 192.168.2.30 [SCOPED]
+Add new[12]: Net 255.255.255.255/32 Ifp en1 Ifa 10.0.0.20 [first]
+Add new[13]: Net 255.255.255.255/32 Ifp en0 Ifa 10.0.0.10 [SCOPED]
+Add new[14]: Net 255.255.255.255/32 Ifp fw0 Ifa 192.168.2.30 [SCOPED]
+New Routes ('test10') = <IPv4RouteList[15]> = {
  0. Net 0.0.0.0/0 Gate 10.0.0.1 Ifp en1 Ifa 10.0.0.20
  1. Net 0.0.0.0/0 Gate 192.168.2.1 Ifp fw0 Ifa 192.168.2.30 [SCOPED]
  2. Net 0.0.0.0/0 Gate 10.0.0.1 Ifp en0 Ifa 10.0.0.10 [last] [SCOPED]
@@ -13433,11 +19173,17 @@ New Routes ('test10') = <IPv4RouteList[9]> = {
  6. Net 10.0.0.1/32 Ifp en0 Ifa 10.0.0.10 [last] [SCOPED]
  7. Net 192.168.2.0/24 Ifp fw0 Ifa 192.168.2.30
  8. Net 192.168.2.1/32 Ifp fw0 Ifa 192.168.2.30
+ 9. Net 224.0.0.0/4 Ifp en1 Ifa 10.0.0.20
+10. Net 224.0.0.0/4 Ifp fw0 Ifa 192.168.2.30 [SCOPED]
+11. Net 224.0.0.0/4 Ifp en0 Ifa 10.0.0.10 [last] [SCOPED]
+12. Net 255.255.255.255/32 Ifp en1 Ifa 10.0.0.20
+13. Net 255.255.255.255/32 Ifp fw0 Ifa 192.168.2.30 [SCOPED]
+14. Net 255.255.255.255/32 Ifp en0 Ifa 10.0.0.10 [last] [SCOPED]
 }
 =================> Apply 'test9', 'test10' End <=================
 
 =================> Apply 'test10', 'test9' Begin <=================
-Old routes ('test10') = <IPv4RouteList[9]> = {
+Old routes ('test10') = <IPv4RouteList[15]> = {
  0. Net 0.0.0.0/0 Gate 10.0.0.1 Ifp en1 Ifa 10.0.0.20
  1. Net 0.0.0.0/0 Gate 192.168.2.1 Ifp fw0 Ifa 192.168.2.30 [SCOPED]
  2. Net 0.0.0.0/0 Gate 10.0.0.1 Ifp en0 Ifa 10.0.0.10 [last] [SCOPED]
@@ -13447,6 +19193,12 @@ Old routes ('test10') = <IPv4RouteList[9]> = {
  6. Net 10.0.0.1/32 Ifp en0 Ifa 10.0.0.10 [last] [SCOPED]
  7. Net 192.168.2.0/24 Ifp fw0 Ifa 192.168.2.30
  8. Net 192.168.2.1/32 Ifp fw0 Ifa 192.168.2.30
+ 9. Net 224.0.0.0/4 Ifp en1 Ifa 10.0.0.20
+10. Net 224.0.0.0/4 Ifp fw0 Ifa 192.168.2.30 [SCOPED]
+11. Net 224.0.0.0/4 Ifp en0 Ifa 10.0.0.10 [last] [SCOPED]
+12. Net 255.255.255.255/32 Ifp en1 Ifa 10.0.0.20
+13. Net 255.255.255.255/32 Ifp fw0 Ifa 192.168.2.30 [SCOPED]
+14. Net 255.255.255.255/32 Ifp en0 Ifa 10.0.0.10 [last] [SCOPED]
 }
 Add new[5]: Net 10.0.0.1/32 Ifp en1 Ifa 10.0.0.20
 Add new[0]: Net 0.0.0.0/0 Gate 10.0.0.1 Ifp en1 Ifa 10.0.0.20
@@ -13457,7 +19209,13 @@ Add new[2]: Net 0.0.0.0/0 Gate 10.0.0.1 Ifp en0 Ifa 10.0.0.10 [last] [SCOPED]
 Add new[3]: Net 10.0.0.0/24 Ifp en1 Ifa 10.0.0.20
 Add new[4]: Net 10.0.0.0/24 Ifp en0 Ifa 10.0.0.10 [last] [SCOPED]
 Add new[7]: Net 192.168.2.0/24 Ifp fw0 Ifa 192.168.2.30
-New Routes ('test9') = <IPv4RouteList[9]> = {
+Add new[9]: Net 224.0.0.0/4 Ifp en1 Ifa 10.0.0.20
+Add new[10]: Net 224.0.0.0/4 Ifp fw0 Ifa 192.168.2.30 [SCOPED]
+Add new[11]: Net 224.0.0.0/4 Ifp en0 Ifa 10.0.0.10 [last] [SCOPED]
+Add new[12]: Net 255.255.255.255/32 Ifp en1 Ifa 10.0.0.20
+Add new[13]: Net 255.255.255.255/32 Ifp fw0 Ifa 192.168.2.30 [SCOPED]
+Add new[14]: Net 255.255.255.255/32 Ifp en0 Ifa 10.0.0.10 [last] [SCOPED]
+New Routes ('test9') = <IPv4RouteList[15]> = {
  0. Net 0.0.0.0/0 Gate 10.0.0.1 Ifp en1 Ifa 10.0.0.20 [first]
  1. Net 0.0.0.0/0 Gate 10.0.0.1 Ifp en0 Ifa 10.0.0.10 [SCOPED]
  2. Net 0.0.0.0/0 Gate 192.168.2.1 Ifp fw0 Ifa 192.168.2.30 [SCOPED]
@@ -13467,11 +19225,17 @@ New Routes ('test9') = <IPv4RouteList[9]> = {
  6. Net 10.0.0.1/32 Ifp en0 Ifa 10.0.0.10 [SCOPED]
  7. Net 192.168.2.0/24 Ifp fw0 Ifa 192.168.2.30
  8. Net 192.168.2.1/32 Ifp fw0 Ifa 192.168.2.30
+ 9. Net 224.0.0.0/4 Ifp en1 Ifa 10.0.0.20 [first]
+10. Net 224.0.0.0/4 Ifp en0 Ifa 10.0.0.10 [SCOPED]
+11. Net 224.0.0.0/4 Ifp fw0 Ifa 192.168.2.30 [SCOPED]
+12. Net 255.255.255.255/32 Ifp en1 Ifa 10.0.0.20 [first]
+13. Net 255.255.255.255/32 Ifp en0 Ifa 10.0.0.10 [SCOPED]
+14. Net 255.255.255.255/32 Ifp fw0 Ifa 192.168.2.30 [SCOPED]
 }
 =================> Apply 'test10', 'test9' End <=================
 
 =================> Apply 'test9', 'test11' Begin <=================
-Old routes ('test9') = <IPv4RouteList[9]> = {
+Old routes ('test9') = <IPv4RouteList[15]> = {
  0. Net 0.0.0.0/0 Gate 10.0.0.1 Ifp en1 Ifa 10.0.0.20 [first]
  1. Net 0.0.0.0/0 Gate 10.0.0.1 Ifp en0 Ifa 10.0.0.10 [SCOPED]
  2. Net 0.0.0.0/0 Gate 192.168.2.1 Ifp fw0 Ifa 192.168.2.30 [SCOPED]
@@ -13481,6 +19245,12 @@ Old routes ('test9') = <IPv4RouteList[9]> = {
  6. Net 10.0.0.1/32 Ifp en0 Ifa 10.0.0.10 [SCOPED]
  7. Net 192.168.2.0/24 Ifp fw0 Ifa 192.168.2.30
  8. Net 192.168.2.1/32 Ifp fw0 Ifa 192.168.2.30
+ 9. Net 224.0.0.0/4 Ifp en1 Ifa 10.0.0.20 [first]
+10. Net 224.0.0.0/4 Ifp en0 Ifa 10.0.0.10 [SCOPED]
+11. Net 224.0.0.0/4 Ifp fw0 Ifa 192.168.2.30 [SCOPED]
+12. Net 255.255.255.255/32 Ifp en1 Ifa 10.0.0.20 [first]
+13. Net 255.255.255.255/32 Ifp en0 Ifa 10.0.0.10 [SCOPED]
+14. Net 255.255.255.255/32 Ifp fw0 Ifa 192.168.2.30 [SCOPED]
 }
 Add new[5]: Net 10.0.0.1/32 Ifp en1 Ifa 10.0.0.20 [first]
 Add new[0]: Net 0.0.0.0/0 Gate 10.0.0.1 Ifp en1 Ifa 10.0.0.20 [first]
@@ -13491,7 +19261,13 @@ Add new[2]: Net 0.0.0.0/0 Gate 192.168.2.1 Ifp fw0 Ifa 192.168.2.30 [SCOPED]
 Add new[3]: Net 10.0.0.0/24 Ifp en1 Ifa 10.0.0.20 [first]
 Add new[4]: Net 10.0.0.0/24 Ifp en0 Ifa 10.0.0.10 [SCOPED]
 Add new[7]: Net 192.168.2.0/24 Ifp fw0 Ifa 192.168.2.30
-New Routes ('test11') = <IPv4RouteList[9]> = {
+Add new[9]: Net 224.0.0.0/4 Ifp en1 Ifa 10.0.0.20 [first]
+Add new[10]: Net 224.0.0.0/4 Ifp en0 Ifa 10.0.0.10 [SCOPED]
+Add new[11]: Net 224.0.0.0/4 Ifp fw0 Ifa 192.168.2.30 [SCOPED]
+Add new[12]: Net 255.255.255.255/32 Ifp en1 Ifa 10.0.0.20 [first]
+Add new[13]: Net 255.255.255.255/32 Ifp en0 Ifa 10.0.0.10 [SCOPED]
+Add new[14]: Net 255.255.255.255/32 Ifp fw0 Ifa 192.168.2.30 [SCOPED]
+New Routes ('test11') = <IPv4RouteList[15]> = {
  0. Net 0.0.0.0/0 Gate 10.0.0.1 Ifp en1 Ifa 10.0.0.20
  1. Net 0.0.0.0/0 Gate 192.168.2.1 Ifp fw0 Ifa 192.168.2.30 [SCOPED]
  2. Net 0.0.0.0/0 Gate 10.0.0.1 Ifp en0 Ifa 10.0.0.10 [never] [SCOPED]
@@ -13501,11 +19277,17 @@ New Routes ('test11') = <IPv4RouteList[9]> = {
  6. Net 10.0.0.1/32 Ifp en0 Ifa 10.0.0.10 [last] [SCOPED]
  7. Net 192.168.2.0/24 Ifp fw0 Ifa 192.168.2.30
  8. Net 192.168.2.1/32 Ifp fw0 Ifa 192.168.2.30
+ 9. Net 224.0.0.0/4 Ifp en1 Ifa 10.0.0.20
+10. Net 224.0.0.0/4 Ifp fw0 Ifa 192.168.2.30 [SCOPED]
+11. Net 224.0.0.0/4 Ifp en0 Ifa 10.0.0.10 [last] [SCOPED]
+12. Net 255.255.255.255/32 Ifp en1 Ifa 10.0.0.20
+13. Net 255.255.255.255/32 Ifp fw0 Ifa 192.168.2.30 [SCOPED]
+14. Net 255.255.255.255/32 Ifp en0 Ifa 10.0.0.10 [last] [SCOPED]
 }
 =================> Apply 'test9', 'test11' End <=================
 
 =================> Apply 'test11', 'test9' Begin <=================
-Old routes ('test11') = <IPv4RouteList[9]> = {
+Old routes ('test11') = <IPv4RouteList[15]> = {
  0. Net 0.0.0.0/0 Gate 10.0.0.1 Ifp en1 Ifa 10.0.0.20
  1. Net 0.0.0.0/0 Gate 192.168.2.1 Ifp fw0 Ifa 192.168.2.30 [SCOPED]
  2. Net 0.0.0.0/0 Gate 10.0.0.1 Ifp en0 Ifa 10.0.0.10 [never] [SCOPED]
@@ -13515,6 +19297,12 @@ Old routes ('test11') = <IPv4RouteList[9]> = {
  6. Net 10.0.0.1/32 Ifp en0 Ifa 10.0.0.10 [last] [SCOPED]
  7. Net 192.168.2.0/24 Ifp fw0 Ifa 192.168.2.30
  8. Net 192.168.2.1/32 Ifp fw0 Ifa 192.168.2.30
+ 9. Net 224.0.0.0/4 Ifp en1 Ifa 10.0.0.20
+10. Net 224.0.0.0/4 Ifp fw0 Ifa 192.168.2.30 [SCOPED]
+11. Net 224.0.0.0/4 Ifp en0 Ifa 10.0.0.10 [last] [SCOPED]
+12. Net 255.255.255.255/32 Ifp en1 Ifa 10.0.0.20
+13. Net 255.255.255.255/32 Ifp fw0 Ifa 192.168.2.30 [SCOPED]
+14. Net 255.255.255.255/32 Ifp en0 Ifa 10.0.0.10 [last] [SCOPED]
 }
 Add new[5]: Net 10.0.0.1/32 Ifp en1 Ifa 10.0.0.20
 Add new[0]: Net 0.0.0.0/0 Gate 10.0.0.1 Ifp en1 Ifa 10.0.0.20
@@ -13525,7 +19313,13 @@ Add new[2]: Net 0.0.0.0/0 Gate 10.0.0.1 Ifp en0 Ifa 10.0.0.10 [never] [SCOPED]
 Add new[3]: Net 10.0.0.0/24 Ifp en1 Ifa 10.0.0.20
 Add new[4]: Net 10.0.0.0/24 Ifp en0 Ifa 10.0.0.10 [last] [SCOPED]
 Add new[7]: Net 192.168.2.0/24 Ifp fw0 Ifa 192.168.2.30
-New Routes ('test9') = <IPv4RouteList[9]> = {
+Add new[9]: Net 224.0.0.0/4 Ifp en1 Ifa 10.0.0.20
+Add new[10]: Net 224.0.0.0/4 Ifp fw0 Ifa 192.168.2.30 [SCOPED]
+Add new[11]: Net 224.0.0.0/4 Ifp en0 Ifa 10.0.0.10 [last] [SCOPED]
+Add new[12]: Net 255.255.255.255/32 Ifp en1 Ifa 10.0.0.20
+Add new[13]: Net 255.255.255.255/32 Ifp fw0 Ifa 192.168.2.30 [SCOPED]
+Add new[14]: Net 255.255.255.255/32 Ifp en0 Ifa 10.0.0.10 [last] [SCOPED]
+New Routes ('test9') = <IPv4RouteList[15]> = {
  0. Net 0.0.0.0/0 Gate 10.0.0.1 Ifp en1 Ifa 10.0.0.20 [first]
  1. Net 0.0.0.0/0 Gate 10.0.0.1 Ifp en0 Ifa 10.0.0.10 [SCOPED]
  2. Net 0.0.0.0/0 Gate 192.168.2.1 Ifp fw0 Ifa 192.168.2.30 [SCOPED]
@@ -13535,11 +19329,17 @@ New Routes ('test9') = <IPv4RouteList[9]> = {
  6. Net 10.0.0.1/32 Ifp en0 Ifa 10.0.0.10 [SCOPED]
  7. Net 192.168.2.0/24 Ifp fw0 Ifa 192.168.2.30
  8. Net 192.168.2.1/32 Ifp fw0 Ifa 192.168.2.30
+ 9. Net 224.0.0.0/4 Ifp en1 Ifa 10.0.0.20 [first]
+10. Net 224.0.0.0/4 Ifp en0 Ifa 10.0.0.10 [SCOPED]
+11. Net 224.0.0.0/4 Ifp fw0 Ifa 192.168.2.30 [SCOPED]
+12. Net 255.255.255.255/32 Ifp en1 Ifa 10.0.0.20 [first]
+13. Net 255.255.255.255/32 Ifp en0 Ifa 10.0.0.10 [SCOPED]
+14. Net 255.255.255.255/32 Ifp fw0 Ifa 192.168.2.30 [SCOPED]
 }
 =================> Apply 'test11', 'test9' End <=================
 
 =================> Apply 'test9', 'test12' Begin <=================
-Old routes ('test9') = <IPv4RouteList[9]> = {
+Old routes ('test9') = <IPv4RouteList[15]> = {
  0. Net 0.0.0.0/0 Gate 10.0.0.1 Ifp en1 Ifa 10.0.0.20 [first]
  1. Net 0.0.0.0/0 Gate 10.0.0.1 Ifp en0 Ifa 10.0.0.10 [SCOPED]
  2. Net 0.0.0.0/0 Gate 192.168.2.1 Ifp fw0 Ifa 192.168.2.30 [SCOPED]
@@ -13549,6 +19349,12 @@ Old routes ('test9') = <IPv4RouteList[9]> = {
  6. Net 10.0.0.1/32 Ifp en0 Ifa 10.0.0.10 [SCOPED]
  7. Net 192.168.2.0/24 Ifp fw0 Ifa 192.168.2.30
  8. Net 192.168.2.1/32 Ifp fw0 Ifa 192.168.2.30
+ 9. Net 224.0.0.0/4 Ifp en1 Ifa 10.0.0.20 [first]
+10. Net 224.0.0.0/4 Ifp en0 Ifa 10.0.0.10 [SCOPED]
+11. Net 224.0.0.0/4 Ifp fw0 Ifa 192.168.2.30 [SCOPED]
+12. Net 255.255.255.255/32 Ifp en1 Ifa 10.0.0.20 [first]
+13. Net 255.255.255.255/32 Ifp en0 Ifa 10.0.0.10 [SCOPED]
+14. Net 255.255.255.255/32 Ifp fw0 Ifa 192.168.2.30 [SCOPED]
 }
 Add new[5]: Net 10.0.0.1/32 Ifp en1 Ifa 10.0.0.20 [first]
 Add new[0]: Net 0.0.0.0/0 Gate 10.0.0.1 Ifp en1 Ifa 10.0.0.20 [first]
@@ -13559,13 +19365,23 @@ Add new[2]: Net 0.0.0.0/0 Gate 192.168.2.1 Ifp fw0 Ifa 192.168.2.30 [SCOPED]
 Add new[3]: Net 10.0.0.0/24 Ifp en1 Ifa 10.0.0.20 [first]
 Add new[4]: Net 10.0.0.0/24 Ifp en0 Ifa 10.0.0.10 [SCOPED]
 Add new[7]: Net 192.168.2.0/24 Ifp fw0 Ifa 192.168.2.30
-New Routes ('test12') = <IPv4RouteList[6]> = {
+Add new[9]: Net 224.0.0.0/4 Ifp en1 Ifa 10.0.0.20 [first]
+Add new[10]: Net 224.0.0.0/4 Ifp en0 Ifa 10.0.0.10 [SCOPED]
+Add new[11]: Net 224.0.0.0/4 Ifp fw0 Ifa 192.168.2.30 [SCOPED]
+Add new[12]: Net 255.255.255.255/32 Ifp en1 Ifa 10.0.0.20 [first]
+Add new[13]: Net 255.255.255.255/32 Ifp en0 Ifa 10.0.0.10 [SCOPED]
+Add new[14]: Net 255.255.255.255/32 Ifp fw0 Ifa 192.168.2.30 [SCOPED]
+New Routes ('test12') = <IPv4RouteList[10]> = {
  0. Net 0.0.0.0/0 Gate 10.0.0.1 Ifp en0 Ifa 10.0.0.10
  1. Net 0.0.0.0/0 Gate 10.0.0.1 Ifp en1 Ifa 10.0.0.20 [SCOPED]
  2. Net 10.0.0.0/24 Ifp en0 Ifa 10.0.0.10
  3. Net 10.0.0.0/24 Ifp en1 Ifa 10.0.0.20 [SCOPED]
  4. Net 10.0.0.1/32 Ifp en0 Ifa 10.0.0.10
  5. Net 10.0.0.1/32 Ifp en1 Ifa 10.0.0.20 [SCOPED]
+ 6. Net 224.0.0.0/4 Ifp en0 Ifa 10.0.0.10
+ 7. Net 224.0.0.0/4 Ifp en1 Ifa 10.0.0.20 [SCOPED]
+ 8. Net 255.255.255.255/32 Ifp en0 Ifa 10.0.0.10
+ 9. Net 255.255.255.255/32 Ifp en1 Ifa 10.0.0.20 [SCOPED]
 }
 Remove old[0]: Net 0.0.0.0/0 Gate 10.0.0.1 Ifp en1 Ifa 10.0.0.20 [first]
 Remove old[1]: Net 0.0.0.0/0 Gate 10.0.0.1 Ifp en0 Ifa 10.0.0.10 [SCOPED]
@@ -13576,22 +19392,36 @@ Remove old[5]: Net 10.0.0.1/32 Ifp en1 Ifa 10.0.0.20 [first]
 Remove old[6]: Net 10.0.0.1/32 Ifp en0 Ifa 10.0.0.10 [SCOPED]
 Remove old[7]: Net 192.168.2.0/24 Ifp fw0 Ifa 192.168.2.30
 Remove old[8]: Net 192.168.2.1/32 Ifp fw0 Ifa 192.168.2.30
+Remove old[9]: Net 224.0.0.0/4 Ifp en1 Ifa 10.0.0.20 [first]
+Remove old[10]: Net 224.0.0.0/4 Ifp en0 Ifa 10.0.0.10 [SCOPED]
+Remove old[11]: Net 224.0.0.0/4 Ifp fw0 Ifa 192.168.2.30 [SCOPED]
+Remove old[12]: Net 255.255.255.255/32 Ifp en1 Ifa 10.0.0.20 [first]
+Remove old[13]: Net 255.255.255.255/32 Ifp en0 Ifa 10.0.0.10 [SCOPED]
+Remove old[14]: Net 255.255.255.255/32 Ifp fw0 Ifa 192.168.2.30 [SCOPED]
 Add new[4]: Net 10.0.0.1/32 Ifp en0 Ifa 10.0.0.10
 Add new[0]: Net 0.0.0.0/0 Gate 10.0.0.1 Ifp en0 Ifa 10.0.0.10
 Add new[5]: Net 10.0.0.1/32 Ifp en1 Ifa 10.0.0.20 [SCOPED]
 Add new[1]: Net 0.0.0.0/0 Gate 10.0.0.1 Ifp en1 Ifa 10.0.0.20 [SCOPED]
 Add new[2]: Net 10.0.0.0/24 Ifp en0 Ifa 10.0.0.10
 Add new[3]: Net 10.0.0.0/24 Ifp en1 Ifa 10.0.0.20 [SCOPED]
+Add new[6]: Net 224.0.0.0/4 Ifp en0 Ifa 10.0.0.10
+Add new[7]: Net 224.0.0.0/4 Ifp en1 Ifa 10.0.0.20 [SCOPED]
+Add new[8]: Net 255.255.255.255/32 Ifp en0 Ifa 10.0.0.10
+Add new[9]: Net 255.255.255.255/32 Ifp en1 Ifa 10.0.0.20 [SCOPED]
 =================> Apply 'test9', 'test12' End <=================
 
 =================> Apply 'test12', 'test9' Begin <=================
-Old routes ('test12') = <IPv4RouteList[6]> = {
+Old routes ('test12') = <IPv4RouteList[10]> = {
  0. Net 0.0.0.0/0 Gate 10.0.0.1 Ifp en0 Ifa 10.0.0.10
  1. Net 0.0.0.0/0 Gate 10.0.0.1 Ifp en1 Ifa 10.0.0.20 [SCOPED]
  2. Net 10.0.0.0/24 Ifp en0 Ifa 10.0.0.10
  3. Net 10.0.0.0/24 Ifp en1 Ifa 10.0.0.20 [SCOPED]
  4. Net 10.0.0.1/32 Ifp en0 Ifa 10.0.0.10
  5. Net 10.0.0.1/32 Ifp en1 Ifa 10.0.0.20 [SCOPED]
+ 6. Net 224.0.0.0/4 Ifp en0 Ifa 10.0.0.10
+ 7. Net 224.0.0.0/4 Ifp en1 Ifa 10.0.0.20 [SCOPED]
+ 8. Net 255.255.255.255/32 Ifp en0 Ifa 10.0.0.10
+ 9. Net 255.255.255.255/32 Ifp en1 Ifa 10.0.0.20 [SCOPED]
 }
 Add new[4]: Net 10.0.0.1/32 Ifp en0 Ifa 10.0.0.10
 Add new[0]: Net 0.0.0.0/0 Gate 10.0.0.1 Ifp en0 Ifa 10.0.0.10
@@ -13599,7 +19429,11 @@ Add new[5]: Net 10.0.0.1/32 Ifp en1 Ifa 10.0.0.20 [SCOPED]
 Add new[1]: Net 0.0.0.0/0 Gate 10.0.0.1 Ifp en1 Ifa 10.0.0.20 [SCOPED]
 Add new[2]: Net 10.0.0.0/24 Ifp en0 Ifa 10.0.0.10
 Add new[3]: Net 10.0.0.0/24 Ifp en1 Ifa 10.0.0.20 [SCOPED]
-New Routes ('test9') = <IPv4RouteList[9]> = {
+Add new[6]: Net 224.0.0.0/4 Ifp en0 Ifa 10.0.0.10
+Add new[7]: Net 224.0.0.0/4 Ifp en1 Ifa 10.0.0.20 [SCOPED]
+Add new[8]: Net 255.255.255.255/32 Ifp en0 Ifa 10.0.0.10
+Add new[9]: Net 255.255.255.255/32 Ifp en1 Ifa 10.0.0.20 [SCOPED]
+New Routes ('test9') = <IPv4RouteList[15]> = {
  0. Net 0.0.0.0/0 Gate 10.0.0.1 Ifp en1 Ifa 10.0.0.20 [first]
  1. Net 0.0.0.0/0 Gate 10.0.0.1 Ifp en0 Ifa 10.0.0.10 [SCOPED]
  2. Net 0.0.0.0/0 Gate 192.168.2.1 Ifp fw0 Ifa 192.168.2.30 [SCOPED]
@@ -13609,6 +19443,12 @@ New Routes ('test9') = <IPv4RouteList[9]> = {
  6. Net 10.0.0.1/32 Ifp en0 Ifa 10.0.0.10 [SCOPED]
  7. Net 192.168.2.0/24 Ifp fw0 Ifa 192.168.2.30
  8. Net 192.168.2.1/32 Ifp fw0 Ifa 192.168.2.30
+ 9. Net 224.0.0.0/4 Ifp en1 Ifa 10.0.0.20 [first]
+10. Net 224.0.0.0/4 Ifp en0 Ifa 10.0.0.10 [SCOPED]
+11. Net 224.0.0.0/4 Ifp fw0 Ifa 192.168.2.30 [SCOPED]
+12. Net 255.255.255.255/32 Ifp en1 Ifa 10.0.0.20 [first]
+13. Net 255.255.255.255/32 Ifp en0 Ifa 10.0.0.10 [SCOPED]
+14. Net 255.255.255.255/32 Ifp fw0 Ifa 192.168.2.30 [SCOPED]
 }
 Remove old[0]: Net 0.0.0.0/0 Gate 10.0.0.1 Ifp en0 Ifa 10.0.0.10
 Remove old[1]: Net 0.0.0.0/0 Gate 10.0.0.1 Ifp en1 Ifa 10.0.0.20 [SCOPED]
@@ -13616,6 +19456,10 @@ Remove old[2]: Net 10.0.0.0/24 Ifp en0 Ifa 10.0.0.10
 Remove old[3]: Net 10.0.0.0/24 Ifp en1 Ifa 10.0.0.20 [SCOPED]
 Remove old[4]: Net 10.0.0.1/32 Ifp en0 Ifa 10.0.0.10
 Remove old[5]: Net 10.0.0.1/32 Ifp en1 Ifa 10.0.0.20 [SCOPED]
+Remove old[6]: Net 224.0.0.0/4 Ifp en0 Ifa 10.0.0.10
+Remove old[7]: Net 224.0.0.0/4 Ifp en1 Ifa 10.0.0.20 [SCOPED]
+Remove old[8]: Net 255.255.255.255/32 Ifp en0 Ifa 10.0.0.10
+Remove old[9]: Net 255.255.255.255/32 Ifp en1 Ifa 10.0.0.20 [SCOPED]
 Add new[5]: Net 10.0.0.1/32 Ifp en1 Ifa 10.0.0.20 [first]
 Add new[0]: Net 0.0.0.0/0 Gate 10.0.0.1 Ifp en1 Ifa 10.0.0.20 [first]
 Add new[6]: Net 10.0.0.1/32 Ifp en0 Ifa 10.0.0.10 [SCOPED]
@@ -13625,10 +19469,16 @@ Add new[2]: Net 0.0.0.0/0 Gate 192.168.2.1 Ifp fw0 Ifa 192.168.2.30 [SCOPED]
 Add new[3]: Net 10.0.0.0/24 Ifp en1 Ifa 10.0.0.20 [first]
 Add new[4]: Net 10.0.0.0/24 Ifp en0 Ifa 10.0.0.10 [SCOPED]
 Add new[7]: Net 192.168.2.0/24 Ifp fw0 Ifa 192.168.2.30
+Add new[9]: Net 224.0.0.0/4 Ifp en1 Ifa 10.0.0.20 [first]
+Add new[10]: Net 224.0.0.0/4 Ifp en0 Ifa 10.0.0.10 [SCOPED]
+Add new[11]: Net 224.0.0.0/4 Ifp fw0 Ifa 192.168.2.30 [SCOPED]
+Add new[12]: Net 255.255.255.255/32 Ifp en1 Ifa 10.0.0.20 [first]
+Add new[13]: Net 255.255.255.255/32 Ifp en0 Ifa 10.0.0.10 [SCOPED]
+Add new[14]: Net 255.255.255.255/32 Ifp fw0 Ifa 192.168.2.30 [SCOPED]
 =================> Apply 'test12', 'test9' End <=================
 
 =================> Apply 'test9', 'test13' Begin <=================
-Old routes ('test9') = <IPv4RouteList[9]> = {
+Old routes ('test9') = <IPv4RouteList[15]> = {
  0. Net 0.0.0.0/0 Gate 10.0.0.1 Ifp en1 Ifa 10.0.0.20 [first]
  1. Net 0.0.0.0/0 Gate 10.0.0.1 Ifp en0 Ifa 10.0.0.10 [SCOPED]
  2. Net 0.0.0.0/0 Gate 192.168.2.1 Ifp fw0 Ifa 192.168.2.30 [SCOPED]
@@ -13638,6 +19488,12 @@ Old routes ('test9') = <IPv4RouteList[9]> = {
  6. Net 10.0.0.1/32 Ifp en0 Ifa 10.0.0.10 [SCOPED]
  7. Net 192.168.2.0/24 Ifp fw0 Ifa 192.168.2.30
  8. Net 192.168.2.1/32 Ifp fw0 Ifa 192.168.2.30
+ 9. Net 224.0.0.0/4 Ifp en1 Ifa 10.0.0.20 [first]
+10. Net 224.0.0.0/4 Ifp en0 Ifa 10.0.0.10 [SCOPED]
+11. Net 224.0.0.0/4 Ifp fw0 Ifa 192.168.2.30 [SCOPED]
+12. Net 255.255.255.255/32 Ifp en1 Ifa 10.0.0.20 [first]
+13. Net 255.255.255.255/32 Ifp en0 Ifa 10.0.0.10 [SCOPED]
+14. Net 255.255.255.255/32 Ifp fw0 Ifa 192.168.2.30 [SCOPED]
 }
 Add new[5]: Net 10.0.0.1/32 Ifp en1 Ifa 10.0.0.20 [first]
 Add new[0]: Net 0.0.0.0/0 Gate 10.0.0.1 Ifp en1 Ifa 10.0.0.20 [first]
@@ -13648,13 +19504,23 @@ Add new[2]: Net 0.0.0.0/0 Gate 192.168.2.1 Ifp fw0 Ifa 192.168.2.30 [SCOPED]
 Add new[3]: Net 10.0.0.0/24 Ifp en1 Ifa 10.0.0.20 [first]
 Add new[4]: Net 10.0.0.0/24 Ifp en0 Ifa 10.0.0.10 [SCOPED]
 Add new[7]: Net 192.168.2.0/24 Ifp fw0 Ifa 192.168.2.30
-New Routes ('test13') = <IPv4RouteList[6]> = {
+Add new[9]: Net 224.0.0.0/4 Ifp en1 Ifa 10.0.0.20 [first]
+Add new[10]: Net 224.0.0.0/4 Ifp en0 Ifa 10.0.0.10 [SCOPED]
+Add new[11]: Net 224.0.0.0/4 Ifp fw0 Ifa 192.168.2.30 [SCOPED]
+Add new[12]: Net 255.255.255.255/32 Ifp en1 Ifa 10.0.0.20 [first]
+Add new[13]: Net 255.255.255.255/32 Ifp en0 Ifa 10.0.0.10 [SCOPED]
+Add new[14]: Net 255.255.255.255/32 Ifp fw0 Ifa 192.168.2.30 [SCOPED]
+New Routes ('test13') = <IPv4RouteList[10]> = {
  0. Net 0.0.0.0/0 Gate 10.0.0.1 Ifp en0 Ifa 10.0.0.10
  1. Net 0.0.0.0/0 Gate 10.0.0.1 Ifp en1 Ifa 10.0.0.20 [never] [SCOPED]
  2. Net 10.0.0.0/24 Ifp en0 Ifa 10.0.0.10
  3. Net 10.0.0.0/24 Ifp en1 Ifa 10.0.0.20 [last] [SCOPED]
  4. Net 10.0.0.1/32 Ifp en0 Ifa 10.0.0.10
  5. Net 10.0.0.1/32 Ifp en1 Ifa 10.0.0.20 [last] [SCOPED]
+ 6. Net 224.0.0.0/4 Ifp en0 Ifa 10.0.0.10
+ 7. Net 224.0.0.0/4 Ifp en1 Ifa 10.0.0.20 [last] [SCOPED]
+ 8. Net 255.255.255.255/32 Ifp en0 Ifa 10.0.0.10
+ 9. Net 255.255.255.255/32 Ifp en1 Ifa 10.0.0.20 [last] [SCOPED]
 }
 Remove old[0]: Net 0.0.0.0/0 Gate 10.0.0.1 Ifp en1 Ifa 10.0.0.20 [first]
 Remove old[1]: Net 0.0.0.0/0 Gate 10.0.0.1 Ifp en0 Ifa 10.0.0.10 [SCOPED]
@@ -13665,22 +19531,36 @@ Remove old[5]: Net 10.0.0.1/32 Ifp en1 Ifa 10.0.0.20 [first]
 Remove old[6]: Net 10.0.0.1/32 Ifp en0 Ifa 10.0.0.10 [SCOPED]
 Remove old[7]: Net 192.168.2.0/24 Ifp fw0 Ifa 192.168.2.30
 Remove old[8]: Net 192.168.2.1/32 Ifp fw0 Ifa 192.168.2.30
+Remove old[9]: Net 224.0.0.0/4 Ifp en1 Ifa 10.0.0.20 [first]
+Remove old[10]: Net 224.0.0.0/4 Ifp en0 Ifa 10.0.0.10 [SCOPED]
+Remove old[11]: Net 224.0.0.0/4 Ifp fw0 Ifa 192.168.2.30 [SCOPED]
+Remove old[12]: Net 255.255.255.255/32 Ifp en1 Ifa 10.0.0.20 [first]
+Remove old[13]: Net 255.255.255.255/32 Ifp en0 Ifa 10.0.0.10 [SCOPED]
+Remove old[14]: Net 255.255.255.255/32 Ifp fw0 Ifa 192.168.2.30 [SCOPED]
 Add new[4]: Net 10.0.0.1/32 Ifp en0 Ifa 10.0.0.10
 Add new[0]: Net 0.0.0.0/0 Gate 10.0.0.1 Ifp en0 Ifa 10.0.0.10
 Add new[5]: Net 10.0.0.1/32 Ifp en1 Ifa 10.0.0.20 [last] [SCOPED]
 Add new[1]: Net 0.0.0.0/0 Gate 10.0.0.1 Ifp en1 Ifa 10.0.0.20 [never] [SCOPED]
 Add new[2]: Net 10.0.0.0/24 Ifp en0 Ifa 10.0.0.10
 Add new[3]: Net 10.0.0.0/24 Ifp en1 Ifa 10.0.0.20 [last] [SCOPED]
+Add new[6]: Net 224.0.0.0/4 Ifp en0 Ifa 10.0.0.10
+Add new[7]: Net 224.0.0.0/4 Ifp en1 Ifa 10.0.0.20 [last] [SCOPED]
+Add new[8]: Net 255.255.255.255/32 Ifp en0 Ifa 10.0.0.10
+Add new[9]: Net 255.255.255.255/32 Ifp en1 Ifa 10.0.0.20 [last] [SCOPED]
 =================> Apply 'test9', 'test13' End <=================
 
 =================> Apply 'test13', 'test9' Begin <=================
-Old routes ('test13') = <IPv4RouteList[6]> = {
+Old routes ('test13') = <IPv4RouteList[10]> = {
  0. Net 0.0.0.0/0 Gate 10.0.0.1 Ifp en0 Ifa 10.0.0.10
  1. Net 0.0.0.0/0 Gate 10.0.0.1 Ifp en1 Ifa 10.0.0.20 [never] [SCOPED]
  2. Net 10.0.0.0/24 Ifp en0 Ifa 10.0.0.10
  3. Net 10.0.0.0/24 Ifp en1 Ifa 10.0.0.20 [last] [SCOPED]
  4. Net 10.0.0.1/32 Ifp en0 Ifa 10.0.0.10
  5. Net 10.0.0.1/32 Ifp en1 Ifa 10.0.0.20 [last] [SCOPED]
+ 6. Net 224.0.0.0/4 Ifp en0 Ifa 10.0.0.10
+ 7. Net 224.0.0.0/4 Ifp en1 Ifa 10.0.0.20 [last] [SCOPED]
+ 8. Net 255.255.255.255/32 Ifp en0 Ifa 10.0.0.10
+ 9. Net 255.255.255.255/32 Ifp en1 Ifa 10.0.0.20 [last] [SCOPED]
 }
 Add new[4]: Net 10.0.0.1/32 Ifp en0 Ifa 10.0.0.10
 Add new[0]: Net 0.0.0.0/0 Gate 10.0.0.1 Ifp en0 Ifa 10.0.0.10
@@ -13688,7 +19568,11 @@ Add new[5]: Net 10.0.0.1/32 Ifp en1 Ifa 10.0.0.20 [last] [SCOPED]
 Add new[1]: Net 0.0.0.0/0 Gate 10.0.0.1 Ifp en1 Ifa 10.0.0.20 [never] [SCOPED]
 Add new[2]: Net 10.0.0.0/24 Ifp en0 Ifa 10.0.0.10
 Add new[3]: Net 10.0.0.0/24 Ifp en1 Ifa 10.0.0.20 [last] [SCOPED]
-New Routes ('test9') = <IPv4RouteList[9]> = {
+Add new[6]: Net 224.0.0.0/4 Ifp en0 Ifa 10.0.0.10
+Add new[7]: Net 224.0.0.0/4 Ifp en1 Ifa 10.0.0.20 [last] [SCOPED]
+Add new[8]: Net 255.255.255.255/32 Ifp en0 Ifa 10.0.0.10
+Add new[9]: Net 255.255.255.255/32 Ifp en1 Ifa 10.0.0.20 [last] [SCOPED]
+New Routes ('test9') = <IPv4RouteList[15]> = {
  0. Net 0.0.0.0/0 Gate 10.0.0.1 Ifp en1 Ifa 10.0.0.20 [first]
  1. Net 0.0.0.0/0 Gate 10.0.0.1 Ifp en0 Ifa 10.0.0.10 [SCOPED]
  2. Net 0.0.0.0/0 Gate 192.168.2.1 Ifp fw0 Ifa 192.168.2.30 [SCOPED]
@@ -13698,6 +19582,12 @@ New Routes ('test9') = <IPv4RouteList[9]> = {
  6. Net 10.0.0.1/32 Ifp en0 Ifa 10.0.0.10 [SCOPED]
  7. Net 192.168.2.0/24 Ifp fw0 Ifa 192.168.2.30
  8. Net 192.168.2.1/32 Ifp fw0 Ifa 192.168.2.30
+ 9. Net 224.0.0.0/4 Ifp en1 Ifa 10.0.0.20 [first]
+10. Net 224.0.0.0/4 Ifp en0 Ifa 10.0.0.10 [SCOPED]
+11. Net 224.0.0.0/4 Ifp fw0 Ifa 192.168.2.30 [SCOPED]
+12. Net 255.255.255.255/32 Ifp en1 Ifa 10.0.0.20 [first]
+13. Net 255.255.255.255/32 Ifp en0 Ifa 10.0.0.10 [SCOPED]
+14. Net 255.255.255.255/32 Ifp fw0 Ifa 192.168.2.30 [SCOPED]
 }
 Remove old[0]: Net 0.0.0.0/0 Gate 10.0.0.1 Ifp en0 Ifa 10.0.0.10
 Remove old[1]: Net 0.0.0.0/0 Gate 10.0.0.1 Ifp en1 Ifa 10.0.0.20 [never] [SCOPED]
@@ -13705,6 +19595,10 @@ Remove old[2]: Net 10.0.0.0/24 Ifp en0 Ifa 10.0.0.10
 Remove old[3]: Net 10.0.0.0/24 Ifp en1 Ifa 10.0.0.20 [last] [SCOPED]
 Remove old[4]: Net 10.0.0.1/32 Ifp en0 Ifa 10.0.0.10
 Remove old[5]: Net 10.0.0.1/32 Ifp en1 Ifa 10.0.0.20 [last] [SCOPED]
+Remove old[6]: Net 224.0.0.0/4 Ifp en0 Ifa 10.0.0.10
+Remove old[7]: Net 224.0.0.0/4 Ifp en1 Ifa 10.0.0.20 [last] [SCOPED]
+Remove old[8]: Net 255.255.255.255/32 Ifp en0 Ifa 10.0.0.10
+Remove old[9]: Net 255.255.255.255/32 Ifp en1 Ifa 10.0.0.20 [last] [SCOPED]
 Add new[5]: Net 10.0.0.1/32 Ifp en1 Ifa 10.0.0.20 [first]
 Add new[0]: Net 0.0.0.0/0 Gate 10.0.0.1 Ifp en1 Ifa 10.0.0.20 [first]
 Add new[6]: Net 10.0.0.1/32 Ifp en0 Ifa 10.0.0.10 [SCOPED]
@@ -13714,10 +19608,16 @@ Add new[2]: Net 0.0.0.0/0 Gate 192.168.2.1 Ifp fw0 Ifa 192.168.2.30 [SCOPED]
 Add new[3]: Net 10.0.0.0/24 Ifp en1 Ifa 10.0.0.20 [first]
 Add new[4]: Net 10.0.0.0/24 Ifp en0 Ifa 10.0.0.10 [SCOPED]
 Add new[7]: Net 192.168.2.0/24 Ifp fw0 Ifa 192.168.2.30
+Add new[9]: Net 224.0.0.0/4 Ifp en1 Ifa 10.0.0.20 [first]
+Add new[10]: Net 224.0.0.0/4 Ifp en0 Ifa 10.0.0.10 [SCOPED]
+Add new[11]: Net 224.0.0.0/4 Ifp fw0 Ifa 192.168.2.30 [SCOPED]
+Add new[12]: Net 255.255.255.255/32 Ifp en1 Ifa 10.0.0.20 [first]
+Add new[13]: Net 255.255.255.255/32 Ifp en0 Ifa 10.0.0.10 [SCOPED]
+Add new[14]: Net 255.255.255.255/32 Ifp fw0 Ifa 192.168.2.30 [SCOPED]
 =================> Apply 'test13', 'test9' End <=================
 
 =================> Apply 'test9', 'test14' Begin <=================
-Old routes ('test9') = <IPv4RouteList[9]> = {
+Old routes ('test9') = <IPv4RouteList[15]> = {
  0. Net 0.0.0.0/0 Gate 10.0.0.1 Ifp en1 Ifa 10.0.0.20 [first]
  1. Net 0.0.0.0/0 Gate 10.0.0.1 Ifp en0 Ifa 10.0.0.10 [SCOPED]
  2. Net 0.0.0.0/0 Gate 192.168.2.1 Ifp fw0 Ifa 192.168.2.30 [SCOPED]
@@ -13727,6 +19627,12 @@ Old routes ('test9') = <IPv4RouteList[9]> = {
  6. Net 10.0.0.1/32 Ifp en0 Ifa 10.0.0.10 [SCOPED]
  7. Net 192.168.2.0/24 Ifp fw0 Ifa 192.168.2.30
  8. Net 192.168.2.1/32 Ifp fw0 Ifa 192.168.2.30
+ 9. Net 224.0.0.0/4 Ifp en1 Ifa 10.0.0.20 [first]
+10. Net 224.0.0.0/4 Ifp en0 Ifa 10.0.0.10 [SCOPED]
+11. Net 224.0.0.0/4 Ifp fw0 Ifa 192.168.2.30 [SCOPED]
+12. Net 255.255.255.255/32 Ifp en1 Ifa 10.0.0.20 [first]
+13. Net 255.255.255.255/32 Ifp en0 Ifa 10.0.0.10 [SCOPED]
+14. Net 255.255.255.255/32 Ifp fw0 Ifa 192.168.2.30 [SCOPED]
 }
 Add new[5]: Net 10.0.0.1/32 Ifp en1 Ifa 10.0.0.20 [first]
 Add new[0]: Net 0.0.0.0/0 Gate 10.0.0.1 Ifp en1 Ifa 10.0.0.20 [first]
@@ -13737,10 +19643,18 @@ Add new[2]: Net 0.0.0.0/0 Gate 192.168.2.1 Ifp fw0 Ifa 192.168.2.30 [SCOPED]
 Add new[3]: Net 10.0.0.0/24 Ifp en1 Ifa 10.0.0.20 [first]
 Add new[4]: Net 10.0.0.0/24 Ifp en0 Ifa 10.0.0.10 [SCOPED]
 Add new[7]: Net 192.168.2.0/24 Ifp fw0 Ifa 192.168.2.30
-New Routes ('test14') = <IPv4RouteList[3]> = {
+Add new[9]: Net 224.0.0.0/4 Ifp en1 Ifa 10.0.0.20 [first]
+Add new[10]: Net 224.0.0.0/4 Ifp en0 Ifa 10.0.0.10 [SCOPED]
+Add new[11]: Net 224.0.0.0/4 Ifp fw0 Ifa 192.168.2.30 [SCOPED]
+Add new[12]: Net 255.255.255.255/32 Ifp en1 Ifa 10.0.0.20 [first]
+Add new[13]: Net 255.255.255.255/32 Ifp en0 Ifa 10.0.0.10 [SCOPED]
+Add new[14]: Net 255.255.255.255/32 Ifp fw0 Ifa 192.168.2.30 [SCOPED]
+New Routes ('test14') = <IPv4RouteList[5]> = {
  0. Net 0.0.0.0/0 Gate 10.0.0.1 Ifp en1 Ifa 10.0.0.20 [never] [SCOPED]
  1. Net 10.0.0.0/24 Ifp en1 Ifa 10.0.0.20 [last]
  2. Net 10.0.0.1/32 Ifp en1 Ifa 10.0.0.20 [last]
+ 3. Net 224.0.0.0/4 Ifp en1 Ifa 10.0.0.20 [last]
+ 4. Net 255.255.255.255/32 Ifp en1 Ifa 10.0.0.20 [last]
 }
 Remove old[0]: Net 0.0.0.0/0 Gate 10.0.0.1 Ifp en1 Ifa 10.0.0.20 [first]
 Remove old[1]: Net 0.0.0.0/0 Gate 10.0.0.1 Ifp en0 Ifa 10.0.0.10 [SCOPED]
@@ -13749,19 +19663,27 @@ Remove old[4]: Net 10.0.0.0/24 Ifp en0 Ifa 10.0.0.10 [SCOPED]
 Remove old[6]: Net 10.0.0.1/32 Ifp en0 Ifa 10.0.0.10 [SCOPED]
 Remove old[7]: Net 192.168.2.0/24 Ifp fw0 Ifa 192.168.2.30
 Remove old[8]: Net 192.168.2.1/32 Ifp fw0 Ifa 192.168.2.30
+Remove old[10]: Net 224.0.0.0/4 Ifp en0 Ifa 10.0.0.10 [SCOPED]
+Remove old[11]: Net 224.0.0.0/4 Ifp fw0 Ifa 192.168.2.30 [SCOPED]
+Remove old[13]: Net 255.255.255.255/32 Ifp en0 Ifa 10.0.0.10 [SCOPED]
+Remove old[14]: Net 255.255.255.255/32 Ifp fw0 Ifa 192.168.2.30 [SCOPED]
 Add new[0]: Net 0.0.0.0/0 Gate 10.0.0.1 Ifp en1 Ifa 10.0.0.20 [never] [SCOPED]
 =================> Apply 'test9', 'test14' End <=================
 
 =================> Apply 'test14', 'test9' Begin <=================
-Old routes ('test14') = <IPv4RouteList[3]> = {
+Old routes ('test14') = <IPv4RouteList[5]> = {
  0. Net 0.0.0.0/0 Gate 10.0.0.1 Ifp en1 Ifa 10.0.0.20 [never] [SCOPED]
  1. Net 10.0.0.0/24 Ifp en1 Ifa 10.0.0.20 [last]
  2. Net 10.0.0.1/32 Ifp en1 Ifa 10.0.0.20 [last]
+ 3. Net 224.0.0.0/4 Ifp en1 Ifa 10.0.0.20 [last]
+ 4. Net 255.255.255.255/32 Ifp en1 Ifa 10.0.0.20 [last]
 }
 Add new[2]: Net 10.0.0.1/32 Ifp en1 Ifa 10.0.0.20 [last]
 Add new[0]: Net 0.0.0.0/0 Gate 10.0.0.1 Ifp en1 Ifa 10.0.0.20 [never] [SCOPED]
 Add new[1]: Net 10.0.0.0/24 Ifp en1 Ifa 10.0.0.20 [last]
-New Routes ('test9') = <IPv4RouteList[9]> = {
+Add new[3]: Net 224.0.0.0/4 Ifp en1 Ifa 10.0.0.20 [last]
+Add new[4]: Net 255.255.255.255/32 Ifp en1 Ifa 10.0.0.20 [last]
+New Routes ('test9') = <IPv4RouteList[15]> = {
  0. Net 0.0.0.0/0 Gate 10.0.0.1 Ifp en1 Ifa 10.0.0.20 [first]
  1. Net 0.0.0.0/0 Gate 10.0.0.1 Ifp en0 Ifa 10.0.0.10 [SCOPED]
  2. Net 0.0.0.0/0 Gate 192.168.2.1 Ifp fw0 Ifa 192.168.2.30 [SCOPED]
@@ -13771,6 +19693,12 @@ New Routes ('test9') = <IPv4RouteList[9]> = {
  6. Net 10.0.0.1/32 Ifp en0 Ifa 10.0.0.10 [SCOPED]
  7. Net 192.168.2.0/24 Ifp fw0 Ifa 192.168.2.30
  8. Net 192.168.2.1/32 Ifp fw0 Ifa 192.168.2.30
+ 9. Net 224.0.0.0/4 Ifp en1 Ifa 10.0.0.20 [first]
+10. Net 224.0.0.0/4 Ifp en0 Ifa 10.0.0.10 [SCOPED]
+11. Net 224.0.0.0/4 Ifp fw0 Ifa 192.168.2.30 [SCOPED]
+12. Net 255.255.255.255/32 Ifp en1 Ifa 10.0.0.20 [first]
+13. Net 255.255.255.255/32 Ifp en0 Ifa 10.0.0.10 [SCOPED]
+14. Net 255.255.255.255/32 Ifp fw0 Ifa 192.168.2.30 [SCOPED]
 }
 Remove old[0]: Net 0.0.0.0/0 Gate 10.0.0.1 Ifp en1 Ifa 10.0.0.20 [never] [SCOPED]
 Add new[0]: Net 0.0.0.0/0 Gate 10.0.0.1 Ifp en1 Ifa 10.0.0.20 [first]
@@ -13780,10 +19708,14 @@ Add new[8]: Net 192.168.2.1/32 Ifp fw0 Ifa 192.168.2.30
 Add new[2]: Net 0.0.0.0/0 Gate 192.168.2.1 Ifp fw0 Ifa 192.168.2.30 [SCOPED]
 Add new[4]: Net 10.0.0.0/24 Ifp en0 Ifa 10.0.0.10 [SCOPED]
 Add new[7]: Net 192.168.2.0/24 Ifp fw0 Ifa 192.168.2.30
+Add new[10]: Net 224.0.0.0/4 Ifp en0 Ifa 10.0.0.10 [SCOPED]
+Add new[11]: Net 224.0.0.0/4 Ifp fw0 Ifa 192.168.2.30 [SCOPED]
+Add new[13]: Net 255.255.255.255/32 Ifp en0 Ifa 10.0.0.10 [SCOPED]
+Add new[14]: Net 255.255.255.255/32 Ifp fw0 Ifa 192.168.2.30 [SCOPED]
 =================> Apply 'test14', 'test9' End <=================
 
 =================> Apply 'test9', 'test15' Begin <=================
-Old routes ('test9') = <IPv4RouteList[9]> = {
+Old routes ('test9') = <IPv4RouteList[15]> = {
  0. Net 0.0.0.0/0 Gate 10.0.0.1 Ifp en1 Ifa 10.0.0.20 [first]
  1. Net 0.0.0.0/0 Gate 10.0.0.1 Ifp en0 Ifa 10.0.0.10 [SCOPED]
  2. Net 0.0.0.0/0 Gate 192.168.2.1 Ifp fw0 Ifa 192.168.2.30 [SCOPED]
@@ -13793,6 +19725,12 @@ Old routes ('test9') = <IPv4RouteList[9]> = {
  6. Net 10.0.0.1/32 Ifp en0 Ifa 10.0.0.10 [SCOPED]
  7. Net 192.168.2.0/24 Ifp fw0 Ifa 192.168.2.30
  8. Net 192.168.2.1/32 Ifp fw0 Ifa 192.168.2.30
+ 9. Net 224.0.0.0/4 Ifp en1 Ifa 10.0.0.20 [first]
+10. Net 224.0.0.0/4 Ifp en0 Ifa 10.0.0.10 [SCOPED]
+11. Net 224.0.0.0/4 Ifp fw0 Ifa 192.168.2.30 [SCOPED]
+12. Net 255.255.255.255/32 Ifp en1 Ifa 10.0.0.20 [first]
+13. Net 255.255.255.255/32 Ifp en0 Ifa 10.0.0.10 [SCOPED]
+14. Net 255.255.255.255/32 Ifp fw0 Ifa 192.168.2.30 [SCOPED]
 }
 Add new[5]: Net 10.0.0.1/32 Ifp en1 Ifa 10.0.0.20 [first]
 Add new[0]: Net 0.0.0.0/0 Gate 10.0.0.1 Ifp en1 Ifa 10.0.0.20 [first]
@@ -13803,8 +19741,16 @@ Add new[2]: Net 0.0.0.0/0 Gate 192.168.2.1 Ifp fw0 Ifa 192.168.2.30 [SCOPED]
 Add new[3]: Net 10.0.0.0/24 Ifp en1 Ifa 10.0.0.20 [first]
 Add new[4]: Net 10.0.0.0/24 Ifp en0 Ifa 10.0.0.10 [SCOPED]
 Add new[7]: Net 192.168.2.0/24 Ifp fw0 Ifa 192.168.2.30
-New Routes ('test15') = <IPv4RouteList[1]> = {
- 0. Net 0.0.0.0/0 Ifp en0 Ifa 169.254.22.44
+Add new[9]: Net 224.0.0.0/4 Ifp en1 Ifa 10.0.0.20 [first]
+Add new[10]: Net 224.0.0.0/4 Ifp en0 Ifa 10.0.0.10 [SCOPED]
+Add new[11]: Net 224.0.0.0/4 Ifp fw0 Ifa 192.168.2.30 [SCOPED]
+Add new[12]: Net 255.255.255.255/32 Ifp en1 Ifa 10.0.0.20 [first]
+Add new[13]: Net 255.255.255.255/32 Ifp en0 Ifa 10.0.0.10 [SCOPED]
+Add new[14]: Net 255.255.255.255/32 Ifp fw0 Ifa 192.168.2.30 [SCOPED]
+New Routes ('test15') = <IPv4RouteList[3]> = {
+ 0. Net 169.254.0.0/16 Ifp en0 Ifa 169.254.22.44 [last]
+ 1. Net 224.0.0.0/4 Ifp en0 Ifa 169.254.22.44 [last]
+ 2. Net 255.255.255.255/32 Ifp en0 Ifa 169.254.22.44 [last]
 }
 Remove old[0]: Net 0.0.0.0/0 Gate 10.0.0.1 Ifp en1 Ifa 10.0.0.20 [first]
 Remove old[1]: Net 0.0.0.0/0 Gate 10.0.0.1 Ifp en0 Ifa 10.0.0.10 [SCOPED]
@@ -13815,15 +19761,27 @@ Remove old[5]: Net 10.0.0.1/32 Ifp en1 Ifa 10.0.0.20 [first]
 Remove old[6]: Net 10.0.0.1/32 Ifp en0 Ifa 10.0.0.10 [SCOPED]
 Remove old[7]: Net 192.168.2.0/24 Ifp fw0 Ifa 192.168.2.30
 Remove old[8]: Net 192.168.2.1/32 Ifp fw0 Ifa 192.168.2.30
-Add new[0]: Net 0.0.0.0/0 Ifp en0 Ifa 169.254.22.44
+Remove old[9]: Net 224.0.0.0/4 Ifp en1 Ifa 10.0.0.20 [first]
+Remove old[10]: Net 224.0.0.0/4 Ifp en0 Ifa 10.0.0.10 [SCOPED]
+Remove old[11]: Net 224.0.0.0/4 Ifp fw0 Ifa 192.168.2.30 [SCOPED]
+Remove old[12]: Net 255.255.255.255/32 Ifp en1 Ifa 10.0.0.20 [first]
+Remove old[13]: Net 255.255.255.255/32 Ifp en0 Ifa 10.0.0.10 [SCOPED]
+Remove old[14]: Net 255.255.255.255/32 Ifp fw0 Ifa 192.168.2.30 [SCOPED]
+Add new[0]: Net 169.254.0.0/16 Ifp en0 Ifa 169.254.22.44 [last]
+Add new[1]: Net 224.0.0.0/4 Ifp en0 Ifa 169.254.22.44 [last]
+Add new[2]: Net 255.255.255.255/32 Ifp en0 Ifa 169.254.22.44 [last]
 =================> Apply 'test9', 'test15' End <=================
 
 =================> Apply 'test15', 'test9' Begin <=================
-Old routes ('test15') = <IPv4RouteList[1]> = {
- 0. Net 0.0.0.0/0 Ifp en0 Ifa 169.254.22.44
-}
-Add new[0]: Net 0.0.0.0/0 Ifp en0 Ifa 169.254.22.44
-New Routes ('test9') = <IPv4RouteList[9]> = {
+Old routes ('test15') = <IPv4RouteList[3]> = {
+ 0. Net 169.254.0.0/16 Ifp en0 Ifa 169.254.22.44 [last]
+ 1. Net 224.0.0.0/4 Ifp en0 Ifa 169.254.22.44 [last]
+ 2. Net 255.255.255.255/32 Ifp en0 Ifa 169.254.22.44 [last]
+}
+Add new[0]: Net 169.254.0.0/16 Ifp en0 Ifa 169.254.22.44 [last]
+Add new[1]: Net 224.0.0.0/4 Ifp en0 Ifa 169.254.22.44 [last]
+Add new[2]: Net 255.255.255.255/32 Ifp en0 Ifa 169.254.22.44 [last]
+New Routes ('test9') = <IPv4RouteList[15]> = {
  0. Net 0.0.0.0/0 Gate 10.0.0.1 Ifp en1 Ifa 10.0.0.20 [first]
  1. Net 0.0.0.0/0 Gate 10.0.0.1 Ifp en0 Ifa 10.0.0.10 [SCOPED]
  2. Net 0.0.0.0/0 Gate 192.168.2.1 Ifp fw0 Ifa 192.168.2.30 [SCOPED]
@@ -13833,8 +19791,16 @@ New Routes ('test9') = <IPv4RouteList[9]> = {
  6. Net 10.0.0.1/32 Ifp en0 Ifa 10.0.0.10 [SCOPED]
  7. Net 192.168.2.0/24 Ifp fw0 Ifa 192.168.2.30
  8. Net 192.168.2.1/32 Ifp fw0 Ifa 192.168.2.30
-}
-Remove old[0]: Net 0.0.0.0/0 Ifp en0 Ifa 169.254.22.44
+ 9. Net 224.0.0.0/4 Ifp en1 Ifa 10.0.0.20 [first]
+10. Net 224.0.0.0/4 Ifp en0 Ifa 10.0.0.10 [SCOPED]
+11. Net 224.0.0.0/4 Ifp fw0 Ifa 192.168.2.30 [SCOPED]
+12. Net 255.255.255.255/32 Ifp en1 Ifa 10.0.0.20 [first]
+13. Net 255.255.255.255/32 Ifp en0 Ifa 10.0.0.10 [SCOPED]
+14. Net 255.255.255.255/32 Ifp fw0 Ifa 192.168.2.30 [SCOPED]
+}
+Remove old[0]: Net 169.254.0.0/16 Ifp en0 Ifa 169.254.22.44 [last]
+Remove old[1]: Net 224.0.0.0/4 Ifp en0 Ifa 169.254.22.44 [last]
+Remove old[2]: Net 255.255.255.255/32 Ifp en0 Ifa 169.254.22.44 [last]
 Add new[5]: Net 10.0.0.1/32 Ifp en1 Ifa 10.0.0.20 [first]
 Add new[0]: Net 0.0.0.0/0 Gate 10.0.0.1 Ifp en1 Ifa 10.0.0.20 [first]
 Add new[6]: Net 10.0.0.1/32 Ifp en0 Ifa 10.0.0.10 [SCOPED]
@@ -13844,10 +19810,16 @@ Add new[2]: Net 0.0.0.0/0 Gate 192.168.2.1 Ifp fw0 Ifa 192.168.2.30 [SCOPED]
 Add new[3]: Net 10.0.0.0/24 Ifp en1 Ifa 10.0.0.20 [first]
 Add new[4]: Net 10.0.0.0/24 Ifp en0 Ifa 10.0.0.10 [SCOPED]
 Add new[7]: Net 192.168.2.0/24 Ifp fw0 Ifa 192.168.2.30
+Add new[9]: Net 224.0.0.0/4 Ifp en1 Ifa 10.0.0.20 [first]
+Add new[10]: Net 224.0.0.0/4 Ifp en0 Ifa 10.0.0.10 [SCOPED]
+Add new[11]: Net 224.0.0.0/4 Ifp fw0 Ifa 192.168.2.30 [SCOPED]
+Add new[12]: Net 255.255.255.255/32 Ifp en1 Ifa 10.0.0.20 [first]
+Add new[13]: Net 255.255.255.255/32 Ifp en0 Ifa 10.0.0.10 [SCOPED]
+Add new[14]: Net 255.255.255.255/32 Ifp fw0 Ifa 192.168.2.30 [SCOPED]
 =================> Apply 'test15', 'test9' End <=================
 
 =================> Apply 'test9', 'test16' Begin <=================
-Old routes ('test9') = <IPv4RouteList[9]> = {
+Old routes ('test9') = <IPv4RouteList[15]> = {
  0. Net 0.0.0.0/0 Gate 10.0.0.1 Ifp en1 Ifa 10.0.0.20 [first]
  1. Net 0.0.0.0/0 Gate 10.0.0.1 Ifp en0 Ifa 10.0.0.10 [SCOPED]
  2. Net 0.0.0.0/0 Gate 192.168.2.1 Ifp fw0 Ifa 192.168.2.30 [SCOPED]
@@ -13857,6 +19829,12 @@ Old routes ('test9') = <IPv4RouteList[9]> = {
  6. Net 10.0.0.1/32 Ifp en0 Ifa 10.0.0.10 [SCOPED]
  7. Net 192.168.2.0/24 Ifp fw0 Ifa 192.168.2.30
  8. Net 192.168.2.1/32 Ifp fw0 Ifa 192.168.2.30
+ 9. Net 224.0.0.0/4 Ifp en1 Ifa 10.0.0.20 [first]
+10. Net 224.0.0.0/4 Ifp en0 Ifa 10.0.0.10 [SCOPED]
+11. Net 224.0.0.0/4 Ifp fw0 Ifa 192.168.2.30 [SCOPED]
+12. Net 255.255.255.255/32 Ifp en1 Ifa 10.0.0.20 [first]
+13. Net 255.255.255.255/32 Ifp en0 Ifa 10.0.0.10 [SCOPED]
+14. Net 255.255.255.255/32 Ifp fw0 Ifa 192.168.2.30 [SCOPED]
 }
 Add new[5]: Net 10.0.0.1/32 Ifp en1 Ifa 10.0.0.20 [first]
 Add new[0]: Net 0.0.0.0/0 Gate 10.0.0.1 Ifp en1 Ifa 10.0.0.20 [first]
@@ -13867,7 +19845,13 @@ Add new[2]: Net 0.0.0.0/0 Gate 192.168.2.1 Ifp fw0 Ifa 192.168.2.30 [SCOPED]
 Add new[3]: Net 10.0.0.0/24 Ifp en1 Ifa 10.0.0.20 [first]
 Add new[4]: Net 10.0.0.0/24 Ifp en0 Ifa 10.0.0.10 [SCOPED]
 Add new[7]: Net 192.168.2.0/24 Ifp fw0 Ifa 192.168.2.30
-New Routes ('test16') = <IPv4RouteList[50]> = {
+Add new[9]: Net 224.0.0.0/4 Ifp en1 Ifa 10.0.0.20 [first]
+Add new[10]: Net 224.0.0.0/4 Ifp en0 Ifa 10.0.0.10 [SCOPED]
+Add new[11]: Net 224.0.0.0/4 Ifp fw0 Ifa 192.168.2.30 [SCOPED]
+Add new[12]: Net 255.255.255.255/32 Ifp en1 Ifa 10.0.0.20 [first]
+Add new[13]: Net 255.255.255.255/32 Ifp en0 Ifa 10.0.0.10 [SCOPED]
+Add new[14]: Net 255.255.255.255/32 Ifp fw0 Ifa 192.168.2.30 [SCOPED]
+New Routes ('test16') = <IPv4RouteList[54]> = {
  0. Net 0.0.0.0/0 Gate 10.0.0.1 Ifp en0 Ifa 10.0.0.10
  1. Net 0.0.0.0/0 Ifp utun0 Ifa 17.153.46.24 [SCOPED]
  2. Net 10.0.0.0/24 Ifp en0 Ifa 10.0.0.10
@@ -13918,6 +19902,10 @@ New Routes ('test16') = <IPv4RouteList[50]> = {
 47. Net 192.35.50.0/24 Gate 17.153.46.24 Ifp utun0 Ifa 17.153.46.24
 48. Net 204.179.20.0/24 Gate 17.153.46.24 Ifp utun0 Ifa 17.153.46.24
 49. Net 206.112.116.0/24 Gate 17.153.46.24 Ifp utun0 Ifa 17.153.46.24
+50. Net 224.0.0.0/4 Ifp en0 Ifa 10.0.0.10
+51. Net 224.0.0.0/4 Ifp utun0 Ifa 17.153.46.24 [SCOPED]
+52. Net 255.255.255.255/32 Ifp en0 Ifa 10.0.0.10
+53. Net 255.255.255.255/32 Ifp utun0 Ifa 17.153.46.24 [SCOPED]
 }
 Remove old[0]: Net 0.0.0.0/0 Gate 10.0.0.1 Ifp en1 Ifa 10.0.0.20 [first]
 Remove old[1]: Net 0.0.0.0/0 Gate 10.0.0.1 Ifp en0 Ifa 10.0.0.10 [SCOPED]
@@ -13928,6 +19916,12 @@ Remove old[5]: Net 10.0.0.1/32 Ifp en1 Ifa 10.0.0.20 [first]
 Remove old[6]: Net 10.0.0.1/32 Ifp en0 Ifa 10.0.0.10 [SCOPED]
 Remove old[7]: Net 192.168.2.0/24 Ifp fw0 Ifa 192.168.2.30
 Remove old[8]: Net 192.168.2.1/32 Ifp fw0 Ifa 192.168.2.30
+Remove old[9]: Net 224.0.0.0/4 Ifp en1 Ifa 10.0.0.20 [first]
+Remove old[10]: Net 224.0.0.0/4 Ifp en0 Ifa 10.0.0.10 [SCOPED]
+Remove old[11]: Net 224.0.0.0/4 Ifp fw0 Ifa 192.168.2.30 [SCOPED]
+Remove old[12]: Net 255.255.255.255/32 Ifp en1 Ifa 10.0.0.20 [first]
+Remove old[13]: Net 255.255.255.255/32 Ifp en0 Ifa 10.0.0.10 [SCOPED]
+Remove old[14]: Net 255.255.255.255/32 Ifp fw0 Ifa 192.168.2.30 [SCOPED]
 Add new[3]: Net 10.0.0.1/32 Ifp en0 Ifa 10.0.0.10
 Add new[0]: Net 0.0.0.0/0 Gate 10.0.0.1 Ifp en0 Ifa 10.0.0.10
 Add new[1]: Net 0.0.0.0/0 Ifp utun0 Ifa 17.153.46.24 [SCOPED]
@@ -13978,10 +19972,14 @@ Add new[46]: Net 172.16.2.0/24 Gate 17.153.46.24 Ifp utun0 Ifa 17.153.46.24
 Add new[47]: Net 192.35.50.0/24 Gate 17.153.46.24 Ifp utun0 Ifa 17.153.46.24
 Add new[48]: Net 204.179.20.0/24 Gate 17.153.46.24 Ifp utun0 Ifa 17.153.46.24
 Add new[49]: Net 206.112.116.0/24 Gate 17.153.46.24 Ifp utun0 Ifa 17.153.46.24
+Add new[50]: Net 224.0.0.0/4 Ifp en0 Ifa 10.0.0.10
+Add new[51]: Net 224.0.0.0/4 Ifp utun0 Ifa 17.153.46.24 [SCOPED]
+Add new[52]: Net 255.255.255.255/32 Ifp en0 Ifa 10.0.0.10
+Add new[53]: Net 255.255.255.255/32 Ifp utun0 Ifa 17.153.46.24 [SCOPED]
 =================> Apply 'test9', 'test16' End <=================
 
 =================> Apply 'test16', 'test9' Begin <=================
-Old routes ('test16') = <IPv4RouteList[50]> = {
+Old routes ('test16') = <IPv4RouteList[54]> = {
  0. Net 0.0.0.0/0 Gate 10.0.0.1 Ifp en0 Ifa 10.0.0.10
  1. Net 0.0.0.0/0 Ifp utun0 Ifa 17.153.46.24 [SCOPED]
  2. Net 10.0.0.0/24 Ifp en0 Ifa 10.0.0.10
@@ -14032,6 +20030,10 @@ Old routes ('test16') = <IPv4RouteList[50]> = {
 47. Net 192.35.50.0/24 Gate 17.153.46.24 Ifp utun0 Ifa 17.153.46.24
 48. Net 204.179.20.0/24 Gate 17.153.46.24 Ifp utun0 Ifa 17.153.46.24
 49. Net 206.112.116.0/24 Gate 17.153.46.24 Ifp utun0 Ifa 17.153.46.24
+50. Net 224.0.0.0/4 Ifp en0 Ifa 10.0.0.10
+51. Net 224.0.0.0/4 Ifp utun0 Ifa 17.153.46.24 [SCOPED]
+52. Net 255.255.255.255/32 Ifp en0 Ifa 10.0.0.10
+53. Net 255.255.255.255/32 Ifp utun0 Ifa 17.153.46.24 [SCOPED]
 }
 Add new[3]: Net 10.0.0.1/32 Ifp en0 Ifa 10.0.0.10
 Add new[0]: Net 0.0.0.0/0 Gate 10.0.0.1 Ifp en0 Ifa 10.0.0.10
@@ -14083,7 +20085,11 @@ Add new[46]: Net 172.16.2.0/24 Gate 17.153.46.24 Ifp utun0 Ifa 17.153.46.24
 Add new[47]: Net 192.35.50.0/24 Gate 17.153.46.24 Ifp utun0 Ifa 17.153.46.24
 Add new[48]: Net 204.179.20.0/24 Gate 17.153.46.24 Ifp utun0 Ifa 17.153.46.24
 Add new[49]: Net 206.112.116.0/24 Gate 17.153.46.24 Ifp utun0 Ifa 17.153.46.24
-New Routes ('test9') = <IPv4RouteList[9]> = {
+Add new[50]: Net 224.0.0.0/4 Ifp en0 Ifa 10.0.0.10
+Add new[51]: Net 224.0.0.0/4 Ifp utun0 Ifa 17.153.46.24 [SCOPED]
+Add new[52]: Net 255.255.255.255/32 Ifp en0 Ifa 10.0.0.10
+Add new[53]: Net 255.255.255.255/32 Ifp utun0 Ifa 17.153.46.24 [SCOPED]
+New Routes ('test9') = <IPv4RouteList[15]> = {
  0. Net 0.0.0.0/0 Gate 10.0.0.1 Ifp en1 Ifa 10.0.0.20 [first]
  1. Net 0.0.0.0/0 Gate 10.0.0.1 Ifp en0 Ifa 10.0.0.10 [SCOPED]
  2. Net 0.0.0.0/0 Gate 192.168.2.1 Ifp fw0 Ifa 192.168.2.30 [SCOPED]
@@ -14093,6 +20099,12 @@ New Routes ('test9') = <IPv4RouteList[9]> = {
  6. Net 10.0.0.1/32 Ifp en0 Ifa 10.0.0.10 [SCOPED]
  7. Net 192.168.2.0/24 Ifp fw0 Ifa 192.168.2.30
  8. Net 192.168.2.1/32 Ifp fw0 Ifa 192.168.2.30
+ 9. Net 224.0.0.0/4 Ifp en1 Ifa 10.0.0.20 [first]
+10. Net 224.0.0.0/4 Ifp en0 Ifa 10.0.0.10 [SCOPED]
+11. Net 224.0.0.0/4 Ifp fw0 Ifa 192.168.2.30 [SCOPED]
+12. Net 255.255.255.255/32 Ifp en1 Ifa 10.0.0.20 [first]
+13. Net 255.255.255.255/32 Ifp en0 Ifa 10.0.0.10 [SCOPED]
+14. Net 255.255.255.255/32 Ifp fw0 Ifa 192.168.2.30 [SCOPED]
 }
 Remove old[0]: Net 0.0.0.0/0 Gate 10.0.0.1 Ifp en0 Ifa 10.0.0.10
 Remove old[1]: Net 0.0.0.0/0 Ifp utun0 Ifa 17.153.46.24 [SCOPED]
@@ -14144,6 +20156,10 @@ Remove old[46]: Net 172.16.2.0/24 Gate 17.153.46.24 Ifp utun0 Ifa 17.153.46.24
 Remove old[47]: Net 192.35.50.0/24 Gate 17.153.46.24 Ifp utun0 Ifa 17.153.46.24
 Remove old[48]: Net 204.179.20.0/24 Gate 17.153.46.24 Ifp utun0 Ifa 17.153.46.24
 Remove old[49]: Net 206.112.116.0/24 Gate 17.153.46.24 Ifp utun0 Ifa 17.153.46.24
+Remove old[50]: Net 224.0.0.0/4 Ifp en0 Ifa 10.0.0.10
+Remove old[51]: Net 224.0.0.0/4 Ifp utun0 Ifa 17.153.46.24 [SCOPED]
+Remove old[52]: Net 255.255.255.255/32 Ifp en0 Ifa 10.0.0.10
+Remove old[53]: Net 255.255.255.255/32 Ifp utun0 Ifa 17.153.46.24 [SCOPED]
 Add new[5]: Net 10.0.0.1/32 Ifp en1 Ifa 10.0.0.20 [first]
 Add new[0]: Net 0.0.0.0/0 Gate 10.0.0.1 Ifp en1 Ifa 10.0.0.20 [first]
 Add new[6]: Net 10.0.0.1/32 Ifp en0 Ifa 10.0.0.10 [SCOPED]
@@ -14153,10 +20169,16 @@ Add new[2]: Net 0.0.0.0/0 Gate 192.168.2.1 Ifp fw0 Ifa 192.168.2.30 [SCOPED]
 Add new[3]: Net 10.0.0.0/24 Ifp en1 Ifa 10.0.0.20 [first]
 Add new[4]: Net 10.0.0.0/24 Ifp en0 Ifa 10.0.0.10 [SCOPED]
 Add new[7]: Net 192.168.2.0/24 Ifp fw0 Ifa 192.168.2.30
+Add new[9]: Net 224.0.0.0/4 Ifp en1 Ifa 10.0.0.20 [first]
+Add new[10]: Net 224.0.0.0/4 Ifp en0 Ifa 10.0.0.10 [SCOPED]
+Add new[11]: Net 224.0.0.0/4 Ifp fw0 Ifa 192.168.2.30 [SCOPED]
+Add new[12]: Net 255.255.255.255/32 Ifp en1 Ifa 10.0.0.20 [first]
+Add new[13]: Net 255.255.255.255/32 Ifp en0 Ifa 10.0.0.10 [SCOPED]
+Add new[14]: Net 255.255.255.255/32 Ifp fw0 Ifa 192.168.2.30 [SCOPED]
 =================> Apply 'test16', 'test9' End <=================
 
 =================> Apply 'test9', 'test17' Begin <=================
-Old routes ('test9') = <IPv4RouteList[9]> = {
+Old routes ('test9') = <IPv4RouteList[15]> = {
  0. Net 0.0.0.0/0 Gate 10.0.0.1 Ifp en1 Ifa 10.0.0.20 [first]
  1. Net 0.0.0.0/0 Gate 10.0.0.1 Ifp en0 Ifa 10.0.0.10 [SCOPED]
  2. Net 0.0.0.0/0 Gate 192.168.2.1 Ifp fw0 Ifa 192.168.2.30 [SCOPED]
@@ -14166,6 +20188,12 @@ Old routes ('test9') = <IPv4RouteList[9]> = {
  6. Net 10.0.0.1/32 Ifp en0 Ifa 10.0.0.10 [SCOPED]
  7. Net 192.168.2.0/24 Ifp fw0 Ifa 192.168.2.30
  8. Net 192.168.2.1/32 Ifp fw0 Ifa 192.168.2.30
+ 9. Net 224.0.0.0/4 Ifp en1 Ifa 10.0.0.20 [first]
+10. Net 224.0.0.0/4 Ifp en0 Ifa 10.0.0.10 [SCOPED]
+11. Net 224.0.0.0/4 Ifp fw0 Ifa 192.168.2.30 [SCOPED]
+12. Net 255.255.255.255/32 Ifp en1 Ifa 10.0.0.20 [first]
+13. Net 255.255.255.255/32 Ifp en0 Ifa 10.0.0.10 [SCOPED]
+14. Net 255.255.255.255/32 Ifp fw0 Ifa 192.168.2.30 [SCOPED]
 }
 Add new[5]: Net 10.0.0.1/32 Ifp en1 Ifa 10.0.0.20 [first]
 Add new[0]: Net 0.0.0.0/0 Gate 10.0.0.1 Ifp en1 Ifa 10.0.0.20 [first]
@@ -14176,13 +20204,23 @@ Add new[2]: Net 0.0.0.0/0 Gate 192.168.2.1 Ifp fw0 Ifa 192.168.2.30 [SCOPED]
 Add new[3]: Net 10.0.0.0/24 Ifp en1 Ifa 10.0.0.20 [first]
 Add new[4]: Net 10.0.0.0/24 Ifp en0 Ifa 10.0.0.10 [SCOPED]
 Add new[7]: Net 192.168.2.0/24 Ifp fw0 Ifa 192.168.2.30
-New Routes ('test17') = <IPv4RouteList[6]> = {
+Add new[9]: Net 224.0.0.0/4 Ifp en1 Ifa 10.0.0.20 [first]
+Add new[10]: Net 224.0.0.0/4 Ifp en0 Ifa 10.0.0.10 [SCOPED]
+Add new[11]: Net 224.0.0.0/4 Ifp fw0 Ifa 192.168.2.30 [SCOPED]
+Add new[12]: Net 255.255.255.255/32 Ifp en1 Ifa 10.0.0.20 [first]
+Add new[13]: Net 255.255.255.255/32 Ifp en0 Ifa 10.0.0.10 [SCOPED]
+Add new[14]: Net 255.255.255.255/32 Ifp fw0 Ifa 192.168.2.30 [SCOPED]
+New Routes ('test17') = <IPv4RouteList[10]> = {
  0. Net 0.0.0.0/0 Gate 10.0.0.1 Ifp en0 Ifa 10.0.0.10
  1. Net 0.0.0.0/0 Gate 192.168.2.1 Ifp en1 Ifa 192.168.2.50 [never] [SCOPED]
  2. Net 10.0.0.0/24 Ifp en0 Ifa 10.0.0.10
  3. Net 10.0.0.1/32 Ifp en0 Ifa 10.0.0.10
  4. Net 192.168.2.0/24 Ifp en1 Ifa 192.168.2.50 [last]
  5. Net 192.168.2.1/32 Ifp en1 Ifa 192.168.2.50 [last]
+ 6. Net 224.0.0.0/4 Ifp en0 Ifa 10.0.0.10
+ 7. Net 224.0.0.0/4 Ifp en1 Ifa 192.168.2.50 [last] [SCOPED]
+ 8. Net 255.255.255.255/32 Ifp en0 Ifa 10.0.0.10
+ 9. Net 255.255.255.255/32 Ifp en1 Ifa 192.168.2.50 [last] [SCOPED]
 }
 Remove old[0]: Net 0.0.0.0/0 Gate 10.0.0.1 Ifp en1 Ifa 10.0.0.20 [first]
 Remove old[1]: Net 0.0.0.0/0 Gate 10.0.0.1 Ifp en0 Ifa 10.0.0.10 [SCOPED]
@@ -14193,22 +20231,36 @@ Remove old[5]: Net 10.0.0.1/32 Ifp en1 Ifa 10.0.0.20 [first]
 Remove old[6]: Net 10.0.0.1/32 Ifp en0 Ifa 10.0.0.10 [SCOPED]
 Remove old[7]: Net 192.168.2.0/24 Ifp fw0 Ifa 192.168.2.30
 Remove old[8]: Net 192.168.2.1/32 Ifp fw0 Ifa 192.168.2.30
+Remove old[9]: Net 224.0.0.0/4 Ifp en1 Ifa 10.0.0.20 [first]
+Remove old[10]: Net 224.0.0.0/4 Ifp en0 Ifa 10.0.0.10 [SCOPED]
+Remove old[11]: Net 224.0.0.0/4 Ifp fw0 Ifa 192.168.2.30 [SCOPED]
+Remove old[12]: Net 255.255.255.255/32 Ifp en1 Ifa 10.0.0.20 [first]
+Remove old[13]: Net 255.255.255.255/32 Ifp en0 Ifa 10.0.0.10 [SCOPED]
+Remove old[14]: Net 255.255.255.255/32 Ifp fw0 Ifa 192.168.2.30 [SCOPED]
 Add new[3]: Net 10.0.0.1/32 Ifp en0 Ifa 10.0.0.10
 Add new[0]: Net 0.0.0.0/0 Gate 10.0.0.1 Ifp en0 Ifa 10.0.0.10
 Add new[5]: Net 192.168.2.1/32 Ifp en1 Ifa 192.168.2.50 [last]
 Add new[1]: Net 0.0.0.0/0 Gate 192.168.2.1 Ifp en1 Ifa 192.168.2.50 [never] [SCOPED]
 Add new[2]: Net 10.0.0.0/24 Ifp en0 Ifa 10.0.0.10
 Add new[4]: Net 192.168.2.0/24 Ifp en1 Ifa 192.168.2.50 [last]
+Add new[6]: Net 224.0.0.0/4 Ifp en0 Ifa 10.0.0.10
+Add new[7]: Net 224.0.0.0/4 Ifp en1 Ifa 192.168.2.50 [last] [SCOPED]
+Add new[8]: Net 255.255.255.255/32 Ifp en0 Ifa 10.0.0.10
+Add new[9]: Net 255.255.255.255/32 Ifp en1 Ifa 192.168.2.50 [last] [SCOPED]
 =================> Apply 'test9', 'test17' End <=================
 
 =================> Apply 'test17', 'test9' Begin <=================
-Old routes ('test17') = <IPv4RouteList[6]> = {
+Old routes ('test17') = <IPv4RouteList[10]> = {
  0. Net 0.0.0.0/0 Gate 10.0.0.1 Ifp en0 Ifa 10.0.0.10
  1. Net 0.0.0.0/0 Gate 192.168.2.1 Ifp en1 Ifa 192.168.2.50 [never] [SCOPED]
  2. Net 10.0.0.0/24 Ifp en0 Ifa 10.0.0.10
  3. Net 10.0.0.1/32 Ifp en0 Ifa 10.0.0.10
  4. Net 192.168.2.0/24 Ifp en1 Ifa 192.168.2.50 [last]
  5. Net 192.168.2.1/32 Ifp en1 Ifa 192.168.2.50 [last]
+ 6. Net 224.0.0.0/4 Ifp en0 Ifa 10.0.0.10
+ 7. Net 224.0.0.0/4 Ifp en1 Ifa 192.168.2.50 [last] [SCOPED]
+ 8. Net 255.255.255.255/32 Ifp en0 Ifa 10.0.0.10
+ 9. Net 255.255.255.255/32 Ifp en1 Ifa 192.168.2.50 [last] [SCOPED]
 }
 Add new[3]: Net 10.0.0.1/32 Ifp en0 Ifa 10.0.0.10
 Add new[0]: Net 0.0.0.0/0 Gate 10.0.0.1 Ifp en0 Ifa 10.0.0.10
@@ -14216,7 +20268,11 @@ Add new[5]: Net 192.168.2.1/32 Ifp en1 Ifa 192.168.2.50 [last]
 Add new[1]: Net 0.0.0.0/0 Gate 192.168.2.1 Ifp en1 Ifa 192.168.2.50 [never] [SCOPED]
 Add new[2]: Net 10.0.0.0/24 Ifp en0 Ifa 10.0.0.10
 Add new[4]: Net 192.168.2.0/24 Ifp en1 Ifa 192.168.2.50 [last]
-New Routes ('test9') = <IPv4RouteList[9]> = {
+Add new[6]: Net 224.0.0.0/4 Ifp en0 Ifa 10.0.0.10
+Add new[7]: Net 224.0.0.0/4 Ifp en1 Ifa 192.168.2.50 [last] [SCOPED]
+Add new[8]: Net 255.255.255.255/32 Ifp en0 Ifa 10.0.0.10
+Add new[9]: Net 255.255.255.255/32 Ifp en1 Ifa 192.168.2.50 [last] [SCOPED]
+New Routes ('test9') = <IPv4RouteList[15]> = {
  0. Net 0.0.0.0/0 Gate 10.0.0.1 Ifp en1 Ifa 10.0.0.20 [first]
  1. Net 0.0.0.0/0 Gate 10.0.0.1 Ifp en0 Ifa 10.0.0.10 [SCOPED]
  2. Net 0.0.0.0/0 Gate 192.168.2.1 Ifp fw0 Ifa 192.168.2.30 [SCOPED]
@@ -14226,6 +20282,12 @@ New Routes ('test9') = <IPv4RouteList[9]> = {
  6. Net 10.0.0.1/32 Ifp en0 Ifa 10.0.0.10 [SCOPED]
  7. Net 192.168.2.0/24 Ifp fw0 Ifa 192.168.2.30
  8. Net 192.168.2.1/32 Ifp fw0 Ifa 192.168.2.30
+ 9. Net 224.0.0.0/4 Ifp en1 Ifa 10.0.0.20 [first]
+10. Net 224.0.0.0/4 Ifp en0 Ifa 10.0.0.10 [SCOPED]
+11. Net 224.0.0.0/4 Ifp fw0 Ifa 192.168.2.30 [SCOPED]
+12. Net 255.255.255.255/32 Ifp en1 Ifa 10.0.0.20 [first]
+13. Net 255.255.255.255/32 Ifp en0 Ifa 10.0.0.10 [SCOPED]
+14. Net 255.255.255.255/32 Ifp fw0 Ifa 192.168.2.30 [SCOPED]
 }
 Remove old[0]: Net 0.0.0.0/0 Gate 10.0.0.1 Ifp en0 Ifa 10.0.0.10
 Remove old[1]: Net 0.0.0.0/0 Gate 192.168.2.1 Ifp en1 Ifa 192.168.2.50 [never] [SCOPED]
@@ -14233,6 +20295,10 @@ Remove old[2]: Net 10.0.0.0/24 Ifp en0 Ifa 10.0.0.10
 Remove old[3]: Net 10.0.0.1/32 Ifp en0 Ifa 10.0.0.10
 Remove old[4]: Net 192.168.2.0/24 Ifp en1 Ifa 192.168.2.50 [last]
 Remove old[5]: Net 192.168.2.1/32 Ifp en1 Ifa 192.168.2.50 [last]
+Remove old[6]: Net 224.0.0.0/4 Ifp en0 Ifa 10.0.0.10
+Remove old[7]: Net 224.0.0.0/4 Ifp en1 Ifa 192.168.2.50 [last] [SCOPED]
+Remove old[8]: Net 255.255.255.255/32 Ifp en0 Ifa 10.0.0.10
+Remove old[9]: Net 255.255.255.255/32 Ifp en1 Ifa 192.168.2.50 [last] [SCOPED]
 Add new[5]: Net 10.0.0.1/32 Ifp en1 Ifa 10.0.0.20 [first]
 Add new[0]: Net 0.0.0.0/0 Gate 10.0.0.1 Ifp en1 Ifa 10.0.0.20 [first]
 Add new[6]: Net 10.0.0.1/32 Ifp en0 Ifa 10.0.0.10 [SCOPED]
@@ -14242,10 +20308,16 @@ Add new[2]: Net 0.0.0.0/0 Gate 192.168.2.1 Ifp fw0 Ifa 192.168.2.30 [SCOPED]
 Add new[3]: Net 10.0.0.0/24 Ifp en1 Ifa 10.0.0.20 [first]
 Add new[4]: Net 10.0.0.0/24 Ifp en0 Ifa 10.0.0.10 [SCOPED]
 Add new[7]: Net 192.168.2.0/24 Ifp fw0 Ifa 192.168.2.30
+Add new[9]: Net 224.0.0.0/4 Ifp en1 Ifa 10.0.0.20 [first]
+Add new[10]: Net 224.0.0.0/4 Ifp en0 Ifa 10.0.0.10 [SCOPED]
+Add new[11]: Net 224.0.0.0/4 Ifp fw0 Ifa 192.168.2.30 [SCOPED]
+Add new[12]: Net 255.255.255.255/32 Ifp en1 Ifa 10.0.0.20 [first]
+Add new[13]: Net 255.255.255.255/32 Ifp en0 Ifa 10.0.0.10 [SCOPED]
+Add new[14]: Net 255.255.255.255/32 Ifp fw0 Ifa 192.168.2.30 [SCOPED]
 =================> Apply 'test17', 'test9' End <=================
 
 =================> Apply 'test9', 'test18' Begin <=================
-Old routes ('test9') = <IPv4RouteList[9]> = {
+Old routes ('test9') = <IPv4RouteList[15]> = {
  0. Net 0.0.0.0/0 Gate 10.0.0.1 Ifp en1 Ifa 10.0.0.20 [first]
  1. Net 0.0.0.0/0 Gate 10.0.0.1 Ifp en0 Ifa 10.0.0.10 [SCOPED]
  2. Net 0.0.0.0/0 Gate 192.168.2.1 Ifp fw0 Ifa 192.168.2.30 [SCOPED]
@@ -14255,6 +20327,12 @@ Old routes ('test9') = <IPv4RouteList[9]> = {
  6. Net 10.0.0.1/32 Ifp en0 Ifa 10.0.0.10 [SCOPED]
  7. Net 192.168.2.0/24 Ifp fw0 Ifa 192.168.2.30
  8. Net 192.168.2.1/32 Ifp fw0 Ifa 192.168.2.30
+ 9. Net 224.0.0.0/4 Ifp en1 Ifa 10.0.0.20 [first]
+10. Net 224.0.0.0/4 Ifp en0 Ifa 10.0.0.10 [SCOPED]
+11. Net 224.0.0.0/4 Ifp fw0 Ifa 192.168.2.30 [SCOPED]
+12. Net 255.255.255.255/32 Ifp en1 Ifa 10.0.0.20 [first]
+13. Net 255.255.255.255/32 Ifp en0 Ifa 10.0.0.10 [SCOPED]
+14. Net 255.255.255.255/32 Ifp fw0 Ifa 192.168.2.30 [SCOPED]
 }
 Add new[5]: Net 10.0.0.1/32 Ifp en1 Ifa 10.0.0.20 [first]
 Add new[0]: Net 0.0.0.0/0 Gate 10.0.0.1 Ifp en1 Ifa 10.0.0.20 [first]
@@ -14265,7 +20343,13 @@ Add new[2]: Net 0.0.0.0/0 Gate 192.168.2.1 Ifp fw0 Ifa 192.168.2.30 [SCOPED]
 Add new[3]: Net 10.0.0.0/24 Ifp en1 Ifa 10.0.0.20 [first]
 Add new[4]: Net 10.0.0.0/24 Ifp en0 Ifa 10.0.0.10 [SCOPED]
 Add new[7]: Net 192.168.2.0/24 Ifp fw0 Ifa 192.168.2.30
-New Routes ('test18') = <IPv4RouteList[14]> = {
+Add new[9]: Net 224.0.0.0/4 Ifp en1 Ifa 10.0.0.20 [first]
+Add new[10]: Net 224.0.0.0/4 Ifp en0 Ifa 10.0.0.10 [SCOPED]
+Add new[11]: Net 224.0.0.0/4 Ifp fw0 Ifa 192.168.2.30 [SCOPED]
+Add new[12]: Net 255.255.255.255/32 Ifp en1 Ifa 10.0.0.20 [first]
+Add new[13]: Net 255.255.255.255/32 Ifp en0 Ifa 10.0.0.10 [SCOPED]
+Add new[14]: Net 255.255.255.255/32 Ifp fw0 Ifa 192.168.2.30 [SCOPED]
+New Routes ('test18') = <IPv4RouteList[16]> = {
  0. Net 0.0.0.0/0 Gate 192.168.130.1 Ifp en0 Ifa 192.168.130.16
  1. Host 1.1.1.1 Gate 1.1.1.2 Ifp en0 Ifa 192.168.130.16
  2. Host 1.1.1.2 Gate 1.1.1.3 Ifp en0 Ifa 192.168.130.16
@@ -14280,6 +20364,8 @@ New Routes ('test18') = <IPv4RouteList[14]> = {
 11. Host 1.1.1.11 Gate 1.1.1.1 Ifp en0 Ifa 192.168.130.16
 12. Net 192.168.130.0/24 Ifp en0 Ifa 192.168.130.16
 13. Net 192.168.130.1/32 Ifp en0 Ifa 192.168.130.16
+14. Net 224.0.0.0/4 Ifp en0 Ifa 192.168.130.16
+15. Net 255.255.255.255/32 Ifp en0 Ifa 192.168.130.16
 }
 Remove old[0]: Net 0.0.0.0/0 Gate 10.0.0.1 Ifp en1 Ifa 10.0.0.20 [first]
 Remove old[1]: Net 0.0.0.0/0 Gate 10.0.0.1 Ifp en0 Ifa 10.0.0.10 [SCOPED]
@@ -14290,24 +20376,32 @@ Remove old[5]: Net 10.0.0.1/32 Ifp en1 Ifa 10.0.0.20 [first]
 Remove old[6]: Net 10.0.0.1/32 Ifp en0 Ifa 10.0.0.10 [SCOPED]
 Remove old[7]: Net 192.168.2.0/24 Ifp fw0 Ifa 192.168.2.30
 Remove old[8]: Net 192.168.2.1/32 Ifp fw0 Ifa 192.168.2.30
+Remove old[9]: Net 224.0.0.0/4 Ifp en1 Ifa 10.0.0.20 [first]
+Remove old[10]: Net 224.0.0.0/4 Ifp en0 Ifa 10.0.0.10 [SCOPED]
+Remove old[11]: Net 224.0.0.0/4 Ifp fw0 Ifa 192.168.2.30 [SCOPED]
+Remove old[12]: Net 255.255.255.255/32 Ifp en1 Ifa 10.0.0.20 [first]
+Remove old[13]: Net 255.255.255.255/32 Ifp en0 Ifa 10.0.0.10 [SCOPED]
+Remove old[14]: Net 255.255.255.255/32 Ifp fw0 Ifa 192.168.2.30 [SCOPED]
 Add new[13]: Net 192.168.130.1/32 Ifp en0 Ifa 192.168.130.16
 Add new[0]: Net 0.0.0.0/0 Gate 192.168.130.1 Ifp en0 Ifa 192.168.130.16
-IPMonitor RouteProcess: routing loop detected, not adding: Host 1.1.1.11 Gate 1.1.1.1 Ifp en0 Ifa 192.168.130.16
-IPMonitor RouteProcess: failed to add: Host 1.1.1.10 Gate 1.1.1.11 Ifp en0 Ifa 192.168.130.16
-IPMonitor RouteProcess: failed to add: Host 1.1.1.9 Gate 1.1.1.10 Ifp en0 Ifa 192.168.130.16
-IPMonitor RouteProcess: failed to add: Host 1.1.1.8 Gate 1.1.1.9 Ifp en0 Ifa 192.168.130.16
-IPMonitor RouteProcess: failed to add: Host 1.1.1.7 Gate 1.1.1.8 Ifp en0 Ifa 192.168.130.16
-IPMonitor RouteProcess: failed to add: Host 1.1.1.6 Gate 1.1.1.7 Ifp en0 Ifa 192.168.130.16
-IPMonitor RouteProcess: failed to add: Host 1.1.1.5 Gate 1.1.1.6 Ifp en0 Ifa 192.168.130.16
-IPMonitor RouteProcess: failed to add: Host 1.1.1.4 Gate 1.1.1.5 Ifp en0 Ifa 192.168.130.16
-IPMonitor RouteProcess: failed to add: Host 1.1.1.3 Gate 1.1.1.4 Ifp en0 Ifa 192.168.130.16
-IPMonitor RouteProcess: failed to add: Host 1.1.1.2 Gate 1.1.1.3 Ifp en0 Ifa 192.168.130.16
-IPMonitor RouteProcess: failed to add: Host 1.1.1.1 Gate 1.1.1.2 Ifp en0 Ifa 192.168.130.16
+routing loop detected, not adding: Host 1.1.1.11 Gate 1.1.1.1 Ifp en0 Ifa 192.168.130.16
+failed to add: Host 1.1.1.10 Gate 1.1.1.11 Ifp en0 Ifa 192.168.130.16
+failed to add: Host 1.1.1.9 Gate 1.1.1.10 Ifp en0 Ifa 192.168.130.16
+failed to add: Host 1.1.1.8 Gate 1.1.1.9 Ifp en0 Ifa 192.168.130.16
+failed to add: Host 1.1.1.7 Gate 1.1.1.8 Ifp en0 Ifa 192.168.130.16
+failed to add: Host 1.1.1.6 Gate 1.1.1.7 Ifp en0 Ifa 192.168.130.16
+failed to add: Host 1.1.1.5 Gate 1.1.1.6 Ifp en0 Ifa 192.168.130.16
+failed to add: Host 1.1.1.4 Gate 1.1.1.5 Ifp en0 Ifa 192.168.130.16
+failed to add: Host 1.1.1.3 Gate 1.1.1.4 Ifp en0 Ifa 192.168.130.16
+failed to add: Host 1.1.1.2 Gate 1.1.1.3 Ifp en0 Ifa 192.168.130.16
+failed to add: Host 1.1.1.1 Gate 1.1.1.2 Ifp en0 Ifa 192.168.130.16
 Add new[12]: Net 192.168.130.0/24 Ifp en0 Ifa 192.168.130.16
+Add new[14]: Net 224.0.0.0/4 Ifp en0 Ifa 192.168.130.16
+Add new[15]: Net 255.255.255.255/32 Ifp en0 Ifa 192.168.130.16
 =================> Apply 'test9', 'test18' End <=================
 
 =================> Apply 'test18', 'test9' Begin <=================
-Old routes ('test18') = <IPv4RouteList[14]> = {
+Old routes ('test18') = <IPv4RouteList[16]> = {
  0. Net 0.0.0.0/0 Gate 192.168.130.1 Ifp en0 Ifa 192.168.130.16
  1. Host 1.1.1.1 Gate 1.1.1.2 Ifp en0 Ifa 192.168.130.16
  2. Host 1.1.1.2 Gate 1.1.1.3 Ifp en0 Ifa 192.168.130.16
@@ -14322,22 +20416,26 @@ Old routes ('test18') = <IPv4RouteList[14]> = {
 11. Host 1.1.1.11 Gate 1.1.1.1 Ifp en0 Ifa 192.168.130.16
 12. Net 192.168.130.0/24 Ifp en0 Ifa 192.168.130.16
 13. Net 192.168.130.1/32 Ifp en0 Ifa 192.168.130.16
+14. Net 224.0.0.0/4 Ifp en0 Ifa 192.168.130.16
+15. Net 255.255.255.255/32 Ifp en0 Ifa 192.168.130.16
 }
 Add new[13]: Net 192.168.130.1/32 Ifp en0 Ifa 192.168.130.16
 Add new[0]: Net 0.0.0.0/0 Gate 192.168.130.1 Ifp en0 Ifa 192.168.130.16
-IPMonitor RouteProcess: routing loop detected, not adding: Host 1.1.1.11 Gate 1.1.1.1 Ifp en0 Ifa 192.168.130.16
-IPMonitor RouteProcess: failed to add: Host 1.1.1.10 Gate 1.1.1.11 Ifp en0 Ifa 192.168.130.16
-IPMonitor RouteProcess: failed to add: Host 1.1.1.9 Gate 1.1.1.10 Ifp en0 Ifa 192.168.130.16
-IPMonitor RouteProcess: failed to add: Host 1.1.1.8 Gate 1.1.1.9 Ifp en0 Ifa 192.168.130.16
-IPMonitor RouteProcess: failed to add: Host 1.1.1.7 Gate 1.1.1.8 Ifp en0 Ifa 192.168.130.16
-IPMonitor RouteProcess: failed to add: Host 1.1.1.6 Gate 1.1.1.7 Ifp en0 Ifa 192.168.130.16
-IPMonitor RouteProcess: failed to add: Host 1.1.1.5 Gate 1.1.1.6 Ifp en0 Ifa 192.168.130.16
-IPMonitor RouteProcess: failed to add: Host 1.1.1.4 Gate 1.1.1.5 Ifp en0 Ifa 192.168.130.16
-IPMonitor RouteProcess: failed to add: Host 1.1.1.3 Gate 1.1.1.4 Ifp en0 Ifa 192.168.130.16
-IPMonitor RouteProcess: failed to add: Host 1.1.1.2 Gate 1.1.1.3 Ifp en0 Ifa 192.168.130.16
-IPMonitor RouteProcess: failed to add: Host 1.1.1.1 Gate 1.1.1.2 Ifp en0 Ifa 192.168.130.16
+routing loop detected, not adding: Host 1.1.1.11 Gate 1.1.1.1 Ifp en0 Ifa 192.168.130.16
+failed to add: Host 1.1.1.10 Gate 1.1.1.11 Ifp en0 Ifa 192.168.130.16
+failed to add: Host 1.1.1.9 Gate 1.1.1.10 Ifp en0 Ifa 192.168.130.16
+failed to add: Host 1.1.1.8 Gate 1.1.1.9 Ifp en0 Ifa 192.168.130.16
+failed to add: Host 1.1.1.7 Gate 1.1.1.8 Ifp en0 Ifa 192.168.130.16
+failed to add: Host 1.1.1.6 Gate 1.1.1.7 Ifp en0 Ifa 192.168.130.16
+failed to add: Host 1.1.1.5 Gate 1.1.1.6 Ifp en0 Ifa 192.168.130.16
+failed to add: Host 1.1.1.4 Gate 1.1.1.5 Ifp en0 Ifa 192.168.130.16
+failed to add: Host 1.1.1.3 Gate 1.1.1.4 Ifp en0 Ifa 192.168.130.16
+failed to add: Host 1.1.1.2 Gate 1.1.1.3 Ifp en0 Ifa 192.168.130.16
+failed to add: Host 1.1.1.1 Gate 1.1.1.2 Ifp en0 Ifa 192.168.130.16
 Add new[12]: Net 192.168.130.0/24 Ifp en0 Ifa 192.168.130.16
-New Routes ('test9') = <IPv4RouteList[9]> = {
+Add new[14]: Net 224.0.0.0/4 Ifp en0 Ifa 192.168.130.16
+Add new[15]: Net 255.255.255.255/32 Ifp en0 Ifa 192.168.130.16
+New Routes ('test9') = <IPv4RouteList[15]> = {
  0. Net 0.0.0.0/0 Gate 10.0.0.1 Ifp en1 Ifa 10.0.0.20 [first]
  1. Net 0.0.0.0/0 Gate 10.0.0.1 Ifp en0 Ifa 10.0.0.10 [SCOPED]
  2. Net 0.0.0.0/0 Gate 192.168.2.1 Ifp fw0 Ifa 192.168.2.30 [SCOPED]
@@ -14347,10 +20445,18 @@ New Routes ('test9') = <IPv4RouteList[9]> = {
  6. Net 10.0.0.1/32 Ifp en0 Ifa 10.0.0.10 [SCOPED]
  7. Net 192.168.2.0/24 Ifp fw0 Ifa 192.168.2.30
  8. Net 192.168.2.1/32 Ifp fw0 Ifa 192.168.2.30
+ 9. Net 224.0.0.0/4 Ifp en1 Ifa 10.0.0.20 [first]
+10. Net 224.0.0.0/4 Ifp en0 Ifa 10.0.0.10 [SCOPED]
+11. Net 224.0.0.0/4 Ifp fw0 Ifa 192.168.2.30 [SCOPED]
+12. Net 255.255.255.255/32 Ifp en1 Ifa 10.0.0.20 [first]
+13. Net 255.255.255.255/32 Ifp en0 Ifa 10.0.0.10 [SCOPED]
+14. Net 255.255.255.255/32 Ifp fw0 Ifa 192.168.2.30 [SCOPED]
 }
 Remove old[0]: Net 0.0.0.0/0 Gate 192.168.130.1 Ifp en0 Ifa 192.168.130.16
 Remove old[12]: Net 192.168.130.0/24 Ifp en0 Ifa 192.168.130.16
 Remove old[13]: Net 192.168.130.1/32 Ifp en0 Ifa 192.168.130.16
+Remove old[14]: Net 224.0.0.0/4 Ifp en0 Ifa 192.168.130.16
+Remove old[15]: Net 255.255.255.255/32 Ifp en0 Ifa 192.168.130.16
 Add new[5]: Net 10.0.0.1/32 Ifp en1 Ifa 10.0.0.20 [first]
 Add new[0]: Net 0.0.0.0/0 Gate 10.0.0.1 Ifp en1 Ifa 10.0.0.20 [first]
 Add new[6]: Net 10.0.0.1/32 Ifp en0 Ifa 10.0.0.10 [SCOPED]
@@ -14360,10 +20466,16 @@ Add new[2]: Net 0.0.0.0/0 Gate 192.168.2.1 Ifp fw0 Ifa 192.168.2.30 [SCOPED]
 Add new[3]: Net 10.0.0.0/24 Ifp en1 Ifa 10.0.0.20 [first]
 Add new[4]: Net 10.0.0.0/24 Ifp en0 Ifa 10.0.0.10 [SCOPED]
 Add new[7]: Net 192.168.2.0/24 Ifp fw0 Ifa 192.168.2.30
+Add new[9]: Net 224.0.0.0/4 Ifp en1 Ifa 10.0.0.20 [first]
+Add new[10]: Net 224.0.0.0/4 Ifp en0 Ifa 10.0.0.10 [SCOPED]
+Add new[11]: Net 224.0.0.0/4 Ifp fw0 Ifa 192.168.2.30 [SCOPED]
+Add new[12]: Net 255.255.255.255/32 Ifp en1 Ifa 10.0.0.20 [first]
+Add new[13]: Net 255.255.255.255/32 Ifp en0 Ifa 10.0.0.10 [SCOPED]
+Add new[14]: Net 255.255.255.255/32 Ifp fw0 Ifa 192.168.2.30 [SCOPED]
 =================> Apply 'test18', 'test9' End <=================
 
 =================> Apply 'test10', 'test11' Begin <=================
-Old routes ('test10') = <IPv4RouteList[9]> = {
+Old routes ('test10') = <IPv4RouteList[15]> = {
  0. Net 0.0.0.0/0 Gate 10.0.0.1 Ifp en1 Ifa 10.0.0.20
  1. Net 0.0.0.0/0 Gate 192.168.2.1 Ifp fw0 Ifa 192.168.2.30 [SCOPED]
  2. Net 0.0.0.0/0 Gate 10.0.0.1 Ifp en0 Ifa 10.0.0.10 [last] [SCOPED]
@@ -14373,6 +20485,12 @@ Old routes ('test10') = <IPv4RouteList[9]> = {
  6. Net 10.0.0.1/32 Ifp en0 Ifa 10.0.0.10 [last] [SCOPED]
  7. Net 192.168.2.0/24 Ifp fw0 Ifa 192.168.2.30
  8. Net 192.168.2.1/32 Ifp fw0 Ifa 192.168.2.30
+ 9. Net 224.0.0.0/4 Ifp en1 Ifa 10.0.0.20
+10. Net 224.0.0.0/4 Ifp fw0 Ifa 192.168.2.30 [SCOPED]
+11. Net 224.0.0.0/4 Ifp en0 Ifa 10.0.0.10 [last] [SCOPED]
+12. Net 255.255.255.255/32 Ifp en1 Ifa 10.0.0.20
+13. Net 255.255.255.255/32 Ifp fw0 Ifa 192.168.2.30 [SCOPED]
+14. Net 255.255.255.255/32 Ifp en0 Ifa 10.0.0.10 [last] [SCOPED]
 }
 Add new[5]: Net 10.0.0.1/32 Ifp en1 Ifa 10.0.0.20
 Add new[0]: Net 0.0.0.0/0 Gate 10.0.0.1 Ifp en1 Ifa 10.0.0.20
@@ -14383,7 +20501,13 @@ Add new[2]: Net 0.0.0.0/0 Gate 10.0.0.1 Ifp en0 Ifa 10.0.0.10 [last] [SCOPED]
 Add new[3]: Net 10.0.0.0/24 Ifp en1 Ifa 10.0.0.20
 Add new[4]: Net 10.0.0.0/24 Ifp en0 Ifa 10.0.0.10 [last] [SCOPED]
 Add new[7]: Net 192.168.2.0/24 Ifp fw0 Ifa 192.168.2.30
-New Routes ('test11') = <IPv4RouteList[9]> = {
+Add new[9]: Net 224.0.0.0/4 Ifp en1 Ifa 10.0.0.20
+Add new[10]: Net 224.0.0.0/4 Ifp fw0 Ifa 192.168.2.30 [SCOPED]
+Add new[11]: Net 224.0.0.0/4 Ifp en0 Ifa 10.0.0.10 [last] [SCOPED]
+Add new[12]: Net 255.255.255.255/32 Ifp en1 Ifa 10.0.0.20
+Add new[13]: Net 255.255.255.255/32 Ifp fw0 Ifa 192.168.2.30 [SCOPED]
+Add new[14]: Net 255.255.255.255/32 Ifp en0 Ifa 10.0.0.10 [last] [SCOPED]
+New Routes ('test11') = <IPv4RouteList[15]> = {
  0. Net 0.0.0.0/0 Gate 10.0.0.1 Ifp en1 Ifa 10.0.0.20
  1. Net 0.0.0.0/0 Gate 192.168.2.1 Ifp fw0 Ifa 192.168.2.30 [SCOPED]
  2. Net 0.0.0.0/0 Gate 10.0.0.1 Ifp en0 Ifa 10.0.0.10 [never] [SCOPED]
@@ -14393,11 +20517,17 @@ New Routes ('test11') = <IPv4RouteList[9]> = {
  6. Net 10.0.0.1/32 Ifp en0 Ifa 10.0.0.10 [last] [SCOPED]
  7. Net 192.168.2.0/24 Ifp fw0 Ifa 192.168.2.30
  8. Net 192.168.2.1/32 Ifp fw0 Ifa 192.168.2.30
+ 9. Net 224.0.0.0/4 Ifp en1 Ifa 10.0.0.20
+10. Net 224.0.0.0/4 Ifp fw0 Ifa 192.168.2.30 [SCOPED]
+11. Net 224.0.0.0/4 Ifp en0 Ifa 10.0.0.10 [last] [SCOPED]
+12. Net 255.255.255.255/32 Ifp en1 Ifa 10.0.0.20
+13. Net 255.255.255.255/32 Ifp fw0 Ifa 192.168.2.30 [SCOPED]
+14. Net 255.255.255.255/32 Ifp en0 Ifa 10.0.0.10 [last] [SCOPED]
 }
 =================> Apply 'test10', 'test11' End <=================
 
 =================> Apply 'test11', 'test10' Begin <=================
-Old routes ('test11') = <IPv4RouteList[9]> = {
+Old routes ('test11') = <IPv4RouteList[15]> = {
  0. Net 0.0.0.0/0 Gate 10.0.0.1 Ifp en1 Ifa 10.0.0.20
  1. Net 0.0.0.0/0 Gate 192.168.2.1 Ifp fw0 Ifa 192.168.2.30 [SCOPED]
  2. Net 0.0.0.0/0 Gate 10.0.0.1 Ifp en0 Ifa 10.0.0.10 [never] [SCOPED]
@@ -14407,6 +20537,12 @@ Old routes ('test11') = <IPv4RouteList[9]> = {
  6. Net 10.0.0.1/32 Ifp en0 Ifa 10.0.0.10 [last] [SCOPED]
  7. Net 192.168.2.0/24 Ifp fw0 Ifa 192.168.2.30
  8. Net 192.168.2.1/32 Ifp fw0 Ifa 192.168.2.30
+ 9. Net 224.0.0.0/4 Ifp en1 Ifa 10.0.0.20
+10. Net 224.0.0.0/4 Ifp fw0 Ifa 192.168.2.30 [SCOPED]
+11. Net 224.0.0.0/4 Ifp en0 Ifa 10.0.0.10 [last] [SCOPED]
+12. Net 255.255.255.255/32 Ifp en1 Ifa 10.0.0.20
+13. Net 255.255.255.255/32 Ifp fw0 Ifa 192.168.2.30 [SCOPED]
+14. Net 255.255.255.255/32 Ifp en0 Ifa 10.0.0.10 [last] [SCOPED]
 }
 Add new[5]: Net 10.0.0.1/32 Ifp en1 Ifa 10.0.0.20
 Add new[0]: Net 0.0.0.0/0 Gate 10.0.0.1 Ifp en1 Ifa 10.0.0.20
@@ -14417,7 +20553,13 @@ Add new[2]: Net 0.0.0.0/0 Gate 10.0.0.1 Ifp en0 Ifa 10.0.0.10 [never] [SCOPED]
 Add new[3]: Net 10.0.0.0/24 Ifp en1 Ifa 10.0.0.20
 Add new[4]: Net 10.0.0.0/24 Ifp en0 Ifa 10.0.0.10 [last] [SCOPED]
 Add new[7]: Net 192.168.2.0/24 Ifp fw0 Ifa 192.168.2.30
-New Routes ('test10') = <IPv4RouteList[9]> = {
+Add new[9]: Net 224.0.0.0/4 Ifp en1 Ifa 10.0.0.20
+Add new[10]: Net 224.0.0.0/4 Ifp fw0 Ifa 192.168.2.30 [SCOPED]
+Add new[11]: Net 224.0.0.0/4 Ifp en0 Ifa 10.0.0.10 [last] [SCOPED]
+Add new[12]: Net 255.255.255.255/32 Ifp en1 Ifa 10.0.0.20
+Add new[13]: Net 255.255.255.255/32 Ifp fw0 Ifa 192.168.2.30 [SCOPED]
+Add new[14]: Net 255.255.255.255/32 Ifp en0 Ifa 10.0.0.10 [last] [SCOPED]
+New Routes ('test10') = <IPv4RouteList[15]> = {
  0. Net 0.0.0.0/0 Gate 10.0.0.1 Ifp en1 Ifa 10.0.0.20
  1. Net 0.0.0.0/0 Gate 192.168.2.1 Ifp fw0 Ifa 192.168.2.30 [SCOPED]
  2. Net 0.0.0.0/0 Gate 10.0.0.1 Ifp en0 Ifa 10.0.0.10 [last] [SCOPED]
@@ -14427,11 +20569,17 @@ New Routes ('test10') = <IPv4RouteList[9]> = {
  6. Net 10.0.0.1/32 Ifp en0 Ifa 10.0.0.10 [last] [SCOPED]
  7. Net 192.168.2.0/24 Ifp fw0 Ifa 192.168.2.30
  8. Net 192.168.2.1/32 Ifp fw0 Ifa 192.168.2.30
+ 9. Net 224.0.0.0/4 Ifp en1 Ifa 10.0.0.20
+10. Net 224.0.0.0/4 Ifp fw0 Ifa 192.168.2.30 [SCOPED]
+11. Net 224.0.0.0/4 Ifp en0 Ifa 10.0.0.10 [last] [SCOPED]
+12. Net 255.255.255.255/32 Ifp en1 Ifa 10.0.0.20
+13. Net 255.255.255.255/32 Ifp fw0 Ifa 192.168.2.30 [SCOPED]
+14. Net 255.255.255.255/32 Ifp en0 Ifa 10.0.0.10 [last] [SCOPED]
 }
 =================> Apply 'test11', 'test10' End <=================
 
 =================> Apply 'test10', 'test12' Begin <=================
-Old routes ('test10') = <IPv4RouteList[9]> = {
+Old routes ('test10') = <IPv4RouteList[15]> = {
  0. Net 0.0.0.0/0 Gate 10.0.0.1 Ifp en1 Ifa 10.0.0.20
  1. Net 0.0.0.0/0 Gate 192.168.2.1 Ifp fw0 Ifa 192.168.2.30 [SCOPED]
  2. Net 0.0.0.0/0 Gate 10.0.0.1 Ifp en0 Ifa 10.0.0.10 [last] [SCOPED]
@@ -14441,6 +20589,12 @@ Old routes ('test10') = <IPv4RouteList[9]> = {
  6. Net 10.0.0.1/32 Ifp en0 Ifa 10.0.0.10 [last] [SCOPED]
  7. Net 192.168.2.0/24 Ifp fw0 Ifa 192.168.2.30
  8. Net 192.168.2.1/32 Ifp fw0 Ifa 192.168.2.30
+ 9. Net 224.0.0.0/4 Ifp en1 Ifa 10.0.0.20
+10. Net 224.0.0.0/4 Ifp fw0 Ifa 192.168.2.30 [SCOPED]
+11. Net 224.0.0.0/4 Ifp en0 Ifa 10.0.0.10 [last] [SCOPED]
+12. Net 255.255.255.255/32 Ifp en1 Ifa 10.0.0.20
+13. Net 255.255.255.255/32 Ifp fw0 Ifa 192.168.2.30 [SCOPED]
+14. Net 255.255.255.255/32 Ifp en0 Ifa 10.0.0.10 [last] [SCOPED]
 }
 Add new[5]: Net 10.0.0.1/32 Ifp en1 Ifa 10.0.0.20
 Add new[0]: Net 0.0.0.0/0 Gate 10.0.0.1 Ifp en1 Ifa 10.0.0.20
@@ -14451,13 +20605,23 @@ Add new[2]: Net 0.0.0.0/0 Gate 10.0.0.1 Ifp en0 Ifa 10.0.0.10 [last] [SCOPED]
 Add new[3]: Net 10.0.0.0/24 Ifp en1 Ifa 10.0.0.20
 Add new[4]: Net 10.0.0.0/24 Ifp en0 Ifa 10.0.0.10 [last] [SCOPED]
 Add new[7]: Net 192.168.2.0/24 Ifp fw0 Ifa 192.168.2.30
-New Routes ('test12') = <IPv4RouteList[6]> = {
+Add new[9]: Net 224.0.0.0/4 Ifp en1 Ifa 10.0.0.20
+Add new[10]: Net 224.0.0.0/4 Ifp fw0 Ifa 192.168.2.30 [SCOPED]
+Add new[11]: Net 224.0.0.0/4 Ifp en0 Ifa 10.0.0.10 [last] [SCOPED]
+Add new[12]: Net 255.255.255.255/32 Ifp en1 Ifa 10.0.0.20
+Add new[13]: Net 255.255.255.255/32 Ifp fw0 Ifa 192.168.2.30 [SCOPED]
+Add new[14]: Net 255.255.255.255/32 Ifp en0 Ifa 10.0.0.10 [last] [SCOPED]
+New Routes ('test12') = <IPv4RouteList[10]> = {
  0. Net 0.0.0.0/0 Gate 10.0.0.1 Ifp en0 Ifa 10.0.0.10
  1. Net 0.0.0.0/0 Gate 10.0.0.1 Ifp en1 Ifa 10.0.0.20 [SCOPED]
  2. Net 10.0.0.0/24 Ifp en0 Ifa 10.0.0.10
  3. Net 10.0.0.0/24 Ifp en1 Ifa 10.0.0.20 [SCOPED]
  4. Net 10.0.0.1/32 Ifp en0 Ifa 10.0.0.10
  5. Net 10.0.0.1/32 Ifp en1 Ifa 10.0.0.20 [SCOPED]
+ 6. Net 224.0.0.0/4 Ifp en0 Ifa 10.0.0.10
+ 7. Net 224.0.0.0/4 Ifp en1 Ifa 10.0.0.20 [SCOPED]
+ 8. Net 255.255.255.255/32 Ifp en0 Ifa 10.0.0.10
+ 9. Net 255.255.255.255/32 Ifp en1 Ifa 10.0.0.20 [SCOPED]
 }
 Remove old[0]: Net 0.0.0.0/0 Gate 10.0.0.1 Ifp en1 Ifa 10.0.0.20
 Remove old[1]: Net 0.0.0.0/0 Gate 192.168.2.1 Ifp fw0 Ifa 192.168.2.30 [SCOPED]
@@ -14468,22 +20632,36 @@ Remove old[5]: Net 10.0.0.1/32 Ifp en1 Ifa 10.0.0.20
 Remove old[6]: Net 10.0.0.1/32 Ifp en0 Ifa 10.0.0.10 [last] [SCOPED]
 Remove old[7]: Net 192.168.2.0/24 Ifp fw0 Ifa 192.168.2.30
 Remove old[8]: Net 192.168.2.1/32 Ifp fw0 Ifa 192.168.2.30
+Remove old[9]: Net 224.0.0.0/4 Ifp en1 Ifa 10.0.0.20
+Remove old[10]: Net 224.0.0.0/4 Ifp fw0 Ifa 192.168.2.30 [SCOPED]
+Remove old[11]: Net 224.0.0.0/4 Ifp en0 Ifa 10.0.0.10 [last] [SCOPED]
+Remove old[12]: Net 255.255.255.255/32 Ifp en1 Ifa 10.0.0.20
+Remove old[13]: Net 255.255.255.255/32 Ifp fw0 Ifa 192.168.2.30 [SCOPED]
+Remove old[14]: Net 255.255.255.255/32 Ifp en0 Ifa 10.0.0.10 [last] [SCOPED]
 Add new[4]: Net 10.0.0.1/32 Ifp en0 Ifa 10.0.0.10
 Add new[0]: Net 0.0.0.0/0 Gate 10.0.0.1 Ifp en0 Ifa 10.0.0.10
 Add new[5]: Net 10.0.0.1/32 Ifp en1 Ifa 10.0.0.20 [SCOPED]
 Add new[1]: Net 0.0.0.0/0 Gate 10.0.0.1 Ifp en1 Ifa 10.0.0.20 [SCOPED]
 Add new[2]: Net 10.0.0.0/24 Ifp en0 Ifa 10.0.0.10
 Add new[3]: Net 10.0.0.0/24 Ifp en1 Ifa 10.0.0.20 [SCOPED]
+Add new[6]: Net 224.0.0.0/4 Ifp en0 Ifa 10.0.0.10
+Add new[7]: Net 224.0.0.0/4 Ifp en1 Ifa 10.0.0.20 [SCOPED]
+Add new[8]: Net 255.255.255.255/32 Ifp en0 Ifa 10.0.0.10
+Add new[9]: Net 255.255.255.255/32 Ifp en1 Ifa 10.0.0.20 [SCOPED]
 =================> Apply 'test10', 'test12' End <=================
 
 =================> Apply 'test12', 'test10' Begin <=================
-Old routes ('test12') = <IPv4RouteList[6]> = {
+Old routes ('test12') = <IPv4RouteList[10]> = {
  0. Net 0.0.0.0/0 Gate 10.0.0.1 Ifp en0 Ifa 10.0.0.10
  1. Net 0.0.0.0/0 Gate 10.0.0.1 Ifp en1 Ifa 10.0.0.20 [SCOPED]
  2. Net 10.0.0.0/24 Ifp en0 Ifa 10.0.0.10
  3. Net 10.0.0.0/24 Ifp en1 Ifa 10.0.0.20 [SCOPED]
  4. Net 10.0.0.1/32 Ifp en0 Ifa 10.0.0.10
  5. Net 10.0.0.1/32 Ifp en1 Ifa 10.0.0.20 [SCOPED]
+ 6. Net 224.0.0.0/4 Ifp en0 Ifa 10.0.0.10
+ 7. Net 224.0.0.0/4 Ifp en1 Ifa 10.0.0.20 [SCOPED]
+ 8. Net 255.255.255.255/32 Ifp en0 Ifa 10.0.0.10
+ 9. Net 255.255.255.255/32 Ifp en1 Ifa 10.0.0.20 [SCOPED]
 }
 Add new[4]: Net 10.0.0.1/32 Ifp en0 Ifa 10.0.0.10
 Add new[0]: Net 0.0.0.0/0 Gate 10.0.0.1 Ifp en0 Ifa 10.0.0.10
@@ -14491,7 +20669,11 @@ Add new[5]: Net 10.0.0.1/32 Ifp en1 Ifa 10.0.0.20 [SCOPED]
 Add new[1]: Net 0.0.0.0/0 Gate 10.0.0.1 Ifp en1 Ifa 10.0.0.20 [SCOPED]
 Add new[2]: Net 10.0.0.0/24 Ifp en0 Ifa 10.0.0.10
 Add new[3]: Net 10.0.0.0/24 Ifp en1 Ifa 10.0.0.20 [SCOPED]
-New Routes ('test10') = <IPv4RouteList[9]> = {
+Add new[6]: Net 224.0.0.0/4 Ifp en0 Ifa 10.0.0.10
+Add new[7]: Net 224.0.0.0/4 Ifp en1 Ifa 10.0.0.20 [SCOPED]
+Add new[8]: Net 255.255.255.255/32 Ifp en0 Ifa 10.0.0.10
+Add new[9]: Net 255.255.255.255/32 Ifp en1 Ifa 10.0.0.20 [SCOPED]
+New Routes ('test10') = <IPv4RouteList[15]> = {
  0. Net 0.0.0.0/0 Gate 10.0.0.1 Ifp en1 Ifa 10.0.0.20
  1. Net 0.0.0.0/0 Gate 192.168.2.1 Ifp fw0 Ifa 192.168.2.30 [SCOPED]
  2. Net 0.0.0.0/0 Gate 10.0.0.1 Ifp en0 Ifa 10.0.0.10 [last] [SCOPED]
@@ -14501,6 +20683,12 @@ New Routes ('test10') = <IPv4RouteList[9]> = {
  6. Net 10.0.0.1/32 Ifp en0 Ifa 10.0.0.10 [last] [SCOPED]
  7. Net 192.168.2.0/24 Ifp fw0 Ifa 192.168.2.30
  8. Net 192.168.2.1/32 Ifp fw0 Ifa 192.168.2.30
+ 9. Net 224.0.0.0/4 Ifp en1 Ifa 10.0.0.20
+10. Net 224.0.0.0/4 Ifp fw0 Ifa 192.168.2.30 [SCOPED]
+11. Net 224.0.0.0/4 Ifp en0 Ifa 10.0.0.10 [last] [SCOPED]
+12. Net 255.255.255.255/32 Ifp en1 Ifa 10.0.0.20
+13. Net 255.255.255.255/32 Ifp fw0 Ifa 192.168.2.30 [SCOPED]
+14. Net 255.255.255.255/32 Ifp en0 Ifa 10.0.0.10 [last] [SCOPED]
 }
 Remove old[0]: Net 0.0.0.0/0 Gate 10.0.0.1 Ifp en0 Ifa 10.0.0.10
 Remove old[1]: Net 0.0.0.0/0 Gate 10.0.0.1 Ifp en1 Ifa 10.0.0.20 [SCOPED]
@@ -14508,6 +20696,10 @@ Remove old[2]: Net 10.0.0.0/24 Ifp en0 Ifa 10.0.0.10
 Remove old[3]: Net 10.0.0.0/24 Ifp en1 Ifa 10.0.0.20 [SCOPED]
 Remove old[4]: Net 10.0.0.1/32 Ifp en0 Ifa 10.0.0.10
 Remove old[5]: Net 10.0.0.1/32 Ifp en1 Ifa 10.0.0.20 [SCOPED]
+Remove old[6]: Net 224.0.0.0/4 Ifp en0 Ifa 10.0.0.10
+Remove old[7]: Net 224.0.0.0/4 Ifp en1 Ifa 10.0.0.20 [SCOPED]
+Remove old[8]: Net 255.255.255.255/32 Ifp en0 Ifa 10.0.0.10
+Remove old[9]: Net 255.255.255.255/32 Ifp en1 Ifa 10.0.0.20 [SCOPED]
 Add new[5]: Net 10.0.0.1/32 Ifp en1 Ifa 10.0.0.20
 Add new[0]: Net 0.0.0.0/0 Gate 10.0.0.1 Ifp en1 Ifa 10.0.0.20
 Add new[8]: Net 192.168.2.1/32 Ifp fw0 Ifa 192.168.2.30
@@ -14517,10 +20709,16 @@ Add new[2]: Net 0.0.0.0/0 Gate 10.0.0.1 Ifp en0 Ifa 10.0.0.10 [last] [SCOPED]
 Add new[3]: Net 10.0.0.0/24 Ifp en1 Ifa 10.0.0.20
 Add new[4]: Net 10.0.0.0/24 Ifp en0 Ifa 10.0.0.10 [last] [SCOPED]
 Add new[7]: Net 192.168.2.0/24 Ifp fw0 Ifa 192.168.2.30
+Add new[9]: Net 224.0.0.0/4 Ifp en1 Ifa 10.0.0.20
+Add new[10]: Net 224.0.0.0/4 Ifp fw0 Ifa 192.168.2.30 [SCOPED]
+Add new[11]: Net 224.0.0.0/4 Ifp en0 Ifa 10.0.0.10 [last] [SCOPED]
+Add new[12]: Net 255.255.255.255/32 Ifp en1 Ifa 10.0.0.20
+Add new[13]: Net 255.255.255.255/32 Ifp fw0 Ifa 192.168.2.30 [SCOPED]
+Add new[14]: Net 255.255.255.255/32 Ifp en0 Ifa 10.0.0.10 [last] [SCOPED]
 =================> Apply 'test12', 'test10' End <=================
 
 =================> Apply 'test10', 'test13' Begin <=================
-Old routes ('test10') = <IPv4RouteList[9]> = {
+Old routes ('test10') = <IPv4RouteList[15]> = {
  0. Net 0.0.0.0/0 Gate 10.0.0.1 Ifp en1 Ifa 10.0.0.20
  1. Net 0.0.0.0/0 Gate 192.168.2.1 Ifp fw0 Ifa 192.168.2.30 [SCOPED]
  2. Net 0.0.0.0/0 Gate 10.0.0.1 Ifp en0 Ifa 10.0.0.10 [last] [SCOPED]
@@ -14530,6 +20728,12 @@ Old routes ('test10') = <IPv4RouteList[9]> = {
  6. Net 10.0.0.1/32 Ifp en0 Ifa 10.0.0.10 [last] [SCOPED]
  7. Net 192.168.2.0/24 Ifp fw0 Ifa 192.168.2.30
  8. Net 192.168.2.1/32 Ifp fw0 Ifa 192.168.2.30
+ 9. Net 224.0.0.0/4 Ifp en1 Ifa 10.0.0.20
+10. Net 224.0.0.0/4 Ifp fw0 Ifa 192.168.2.30 [SCOPED]
+11. Net 224.0.0.0/4 Ifp en0 Ifa 10.0.0.10 [last] [SCOPED]
+12. Net 255.255.255.255/32 Ifp en1 Ifa 10.0.0.20
+13. Net 255.255.255.255/32 Ifp fw0 Ifa 192.168.2.30 [SCOPED]
+14. Net 255.255.255.255/32 Ifp en0 Ifa 10.0.0.10 [last] [SCOPED]
 }
 Add new[5]: Net 10.0.0.1/32 Ifp en1 Ifa 10.0.0.20
 Add new[0]: Net 0.0.0.0/0 Gate 10.0.0.1 Ifp en1 Ifa 10.0.0.20
@@ -14540,13 +20744,23 @@ Add new[2]: Net 0.0.0.0/0 Gate 10.0.0.1 Ifp en0 Ifa 10.0.0.10 [last] [SCOPED]
 Add new[3]: Net 10.0.0.0/24 Ifp en1 Ifa 10.0.0.20
 Add new[4]: Net 10.0.0.0/24 Ifp en0 Ifa 10.0.0.10 [last] [SCOPED]
 Add new[7]: Net 192.168.2.0/24 Ifp fw0 Ifa 192.168.2.30
-New Routes ('test13') = <IPv4RouteList[6]> = {
+Add new[9]: Net 224.0.0.0/4 Ifp en1 Ifa 10.0.0.20
+Add new[10]: Net 224.0.0.0/4 Ifp fw0 Ifa 192.168.2.30 [SCOPED]
+Add new[11]: Net 224.0.0.0/4 Ifp en0 Ifa 10.0.0.10 [last] [SCOPED]
+Add new[12]: Net 255.255.255.255/32 Ifp en1 Ifa 10.0.0.20
+Add new[13]: Net 255.255.255.255/32 Ifp fw0 Ifa 192.168.2.30 [SCOPED]
+Add new[14]: Net 255.255.255.255/32 Ifp en0 Ifa 10.0.0.10 [last] [SCOPED]
+New Routes ('test13') = <IPv4RouteList[10]> = {
  0. Net 0.0.0.0/0 Gate 10.0.0.1 Ifp en0 Ifa 10.0.0.10
  1. Net 0.0.0.0/0 Gate 10.0.0.1 Ifp en1 Ifa 10.0.0.20 [never] [SCOPED]
  2. Net 10.0.0.0/24 Ifp en0 Ifa 10.0.0.10
  3. Net 10.0.0.0/24 Ifp en1 Ifa 10.0.0.20 [last] [SCOPED]
  4. Net 10.0.0.1/32 Ifp en0 Ifa 10.0.0.10
  5. Net 10.0.0.1/32 Ifp en1 Ifa 10.0.0.20 [last] [SCOPED]
+ 6. Net 224.0.0.0/4 Ifp en0 Ifa 10.0.0.10
+ 7. Net 224.0.0.0/4 Ifp en1 Ifa 10.0.0.20 [last] [SCOPED]
+ 8. Net 255.255.255.255/32 Ifp en0 Ifa 10.0.0.10
+ 9. Net 255.255.255.255/32 Ifp en1 Ifa 10.0.0.20 [last] [SCOPED]
 }
 Remove old[0]: Net 0.0.0.0/0 Gate 10.0.0.1 Ifp en1 Ifa 10.0.0.20
 Remove old[1]: Net 0.0.0.0/0 Gate 192.168.2.1 Ifp fw0 Ifa 192.168.2.30 [SCOPED]
@@ -14557,22 +20771,36 @@ Remove old[5]: Net 10.0.0.1/32 Ifp en1 Ifa 10.0.0.20
 Remove old[6]: Net 10.0.0.1/32 Ifp en0 Ifa 10.0.0.10 [last] [SCOPED]
 Remove old[7]: Net 192.168.2.0/24 Ifp fw0 Ifa 192.168.2.30
 Remove old[8]: Net 192.168.2.1/32 Ifp fw0 Ifa 192.168.2.30
+Remove old[9]: Net 224.0.0.0/4 Ifp en1 Ifa 10.0.0.20
+Remove old[10]: Net 224.0.0.0/4 Ifp fw0 Ifa 192.168.2.30 [SCOPED]
+Remove old[11]: Net 224.0.0.0/4 Ifp en0 Ifa 10.0.0.10 [last] [SCOPED]
+Remove old[12]: Net 255.255.255.255/32 Ifp en1 Ifa 10.0.0.20
+Remove old[13]: Net 255.255.255.255/32 Ifp fw0 Ifa 192.168.2.30 [SCOPED]
+Remove old[14]: Net 255.255.255.255/32 Ifp en0 Ifa 10.0.0.10 [last] [SCOPED]
 Add new[4]: Net 10.0.0.1/32 Ifp en0 Ifa 10.0.0.10
 Add new[0]: Net 0.0.0.0/0 Gate 10.0.0.1 Ifp en0 Ifa 10.0.0.10
 Add new[5]: Net 10.0.0.1/32 Ifp en1 Ifa 10.0.0.20 [last] [SCOPED]
 Add new[1]: Net 0.0.0.0/0 Gate 10.0.0.1 Ifp en1 Ifa 10.0.0.20 [never] [SCOPED]
 Add new[2]: Net 10.0.0.0/24 Ifp en0 Ifa 10.0.0.10
 Add new[3]: Net 10.0.0.0/24 Ifp en1 Ifa 10.0.0.20 [last] [SCOPED]
+Add new[6]: Net 224.0.0.0/4 Ifp en0 Ifa 10.0.0.10
+Add new[7]: Net 224.0.0.0/4 Ifp en1 Ifa 10.0.0.20 [last] [SCOPED]
+Add new[8]: Net 255.255.255.255/32 Ifp en0 Ifa 10.0.0.10
+Add new[9]: Net 255.255.255.255/32 Ifp en1 Ifa 10.0.0.20 [last] [SCOPED]
 =================> Apply 'test10', 'test13' End <=================
 
 =================> Apply 'test13', 'test10' Begin <=================
-Old routes ('test13') = <IPv4RouteList[6]> = {
+Old routes ('test13') = <IPv4RouteList[10]> = {
  0. Net 0.0.0.0/0 Gate 10.0.0.1 Ifp en0 Ifa 10.0.0.10
  1. Net 0.0.0.0/0 Gate 10.0.0.1 Ifp en1 Ifa 10.0.0.20 [never] [SCOPED]
  2. Net 10.0.0.0/24 Ifp en0 Ifa 10.0.0.10
  3. Net 10.0.0.0/24 Ifp en1 Ifa 10.0.0.20 [last] [SCOPED]
  4. Net 10.0.0.1/32 Ifp en0 Ifa 10.0.0.10
  5. Net 10.0.0.1/32 Ifp en1 Ifa 10.0.0.20 [last] [SCOPED]
+ 6. Net 224.0.0.0/4 Ifp en0 Ifa 10.0.0.10
+ 7. Net 224.0.0.0/4 Ifp en1 Ifa 10.0.0.20 [last] [SCOPED]
+ 8. Net 255.255.255.255/32 Ifp en0 Ifa 10.0.0.10
+ 9. Net 255.255.255.255/32 Ifp en1 Ifa 10.0.0.20 [last] [SCOPED]
 }
 Add new[4]: Net 10.0.0.1/32 Ifp en0 Ifa 10.0.0.10
 Add new[0]: Net 0.0.0.0/0 Gate 10.0.0.1 Ifp en0 Ifa 10.0.0.10
@@ -14580,7 +20808,11 @@ Add new[5]: Net 10.0.0.1/32 Ifp en1 Ifa 10.0.0.20 [last] [SCOPED]
 Add new[1]: Net 0.0.0.0/0 Gate 10.0.0.1 Ifp en1 Ifa 10.0.0.20 [never] [SCOPED]
 Add new[2]: Net 10.0.0.0/24 Ifp en0 Ifa 10.0.0.10
 Add new[3]: Net 10.0.0.0/24 Ifp en1 Ifa 10.0.0.20 [last] [SCOPED]
-New Routes ('test10') = <IPv4RouteList[9]> = {
+Add new[6]: Net 224.0.0.0/4 Ifp en0 Ifa 10.0.0.10
+Add new[7]: Net 224.0.0.0/4 Ifp en1 Ifa 10.0.0.20 [last] [SCOPED]
+Add new[8]: Net 255.255.255.255/32 Ifp en0 Ifa 10.0.0.10
+Add new[9]: Net 255.255.255.255/32 Ifp en1 Ifa 10.0.0.20 [last] [SCOPED]
+New Routes ('test10') = <IPv4RouteList[15]> = {
  0. Net 0.0.0.0/0 Gate 10.0.0.1 Ifp en1 Ifa 10.0.0.20
  1. Net 0.0.0.0/0 Gate 192.168.2.1 Ifp fw0 Ifa 192.168.2.30 [SCOPED]
  2. Net 0.0.0.0/0 Gate 10.0.0.1 Ifp en0 Ifa 10.0.0.10 [last] [SCOPED]
@@ -14590,6 +20822,12 @@ New Routes ('test10') = <IPv4RouteList[9]> = {
  6. Net 10.0.0.1/32 Ifp en0 Ifa 10.0.0.10 [last] [SCOPED]
  7. Net 192.168.2.0/24 Ifp fw0 Ifa 192.168.2.30
  8. Net 192.168.2.1/32 Ifp fw0 Ifa 192.168.2.30
+ 9. Net 224.0.0.0/4 Ifp en1 Ifa 10.0.0.20
+10. Net 224.0.0.0/4 Ifp fw0 Ifa 192.168.2.30 [SCOPED]
+11. Net 224.0.0.0/4 Ifp en0 Ifa 10.0.0.10 [last] [SCOPED]
+12. Net 255.255.255.255/32 Ifp en1 Ifa 10.0.0.20
+13. Net 255.255.255.255/32 Ifp fw0 Ifa 192.168.2.30 [SCOPED]
+14. Net 255.255.255.255/32 Ifp en0 Ifa 10.0.0.10 [last] [SCOPED]
 }
 Remove old[0]: Net 0.0.0.0/0 Gate 10.0.0.1 Ifp en0 Ifa 10.0.0.10
 Remove old[1]: Net 0.0.0.0/0 Gate 10.0.0.1 Ifp en1 Ifa 10.0.0.20 [never] [SCOPED]
@@ -14597,6 +20835,10 @@ Remove old[2]: Net 10.0.0.0/24 Ifp en0 Ifa 10.0.0.10
 Remove old[3]: Net 10.0.0.0/24 Ifp en1 Ifa 10.0.0.20 [last] [SCOPED]
 Remove old[4]: Net 10.0.0.1/32 Ifp en0 Ifa 10.0.0.10
 Remove old[5]: Net 10.0.0.1/32 Ifp en1 Ifa 10.0.0.20 [last] [SCOPED]
+Remove old[6]: Net 224.0.0.0/4 Ifp en0 Ifa 10.0.0.10
+Remove old[7]: Net 224.0.0.0/4 Ifp en1 Ifa 10.0.0.20 [last] [SCOPED]
+Remove old[8]: Net 255.255.255.255/32 Ifp en0 Ifa 10.0.0.10
+Remove old[9]: Net 255.255.255.255/32 Ifp en1 Ifa 10.0.0.20 [last] [SCOPED]
 Add new[5]: Net 10.0.0.1/32 Ifp en1 Ifa 10.0.0.20
 Add new[0]: Net 0.0.0.0/0 Gate 10.0.0.1 Ifp en1 Ifa 10.0.0.20
 Add new[8]: Net 192.168.2.1/32 Ifp fw0 Ifa 192.168.2.30
@@ -14606,10 +20848,16 @@ Add new[2]: Net 0.0.0.0/0 Gate 10.0.0.1 Ifp en0 Ifa 10.0.0.10 [last] [SCOPED]
 Add new[3]: Net 10.0.0.0/24 Ifp en1 Ifa 10.0.0.20
 Add new[4]: Net 10.0.0.0/24 Ifp en0 Ifa 10.0.0.10 [last] [SCOPED]
 Add new[7]: Net 192.168.2.0/24 Ifp fw0 Ifa 192.168.2.30
+Add new[9]: Net 224.0.0.0/4 Ifp en1 Ifa 10.0.0.20
+Add new[10]: Net 224.0.0.0/4 Ifp fw0 Ifa 192.168.2.30 [SCOPED]
+Add new[11]: Net 224.0.0.0/4 Ifp en0 Ifa 10.0.0.10 [last] [SCOPED]
+Add new[12]: Net 255.255.255.255/32 Ifp en1 Ifa 10.0.0.20
+Add new[13]: Net 255.255.255.255/32 Ifp fw0 Ifa 192.168.2.30 [SCOPED]
+Add new[14]: Net 255.255.255.255/32 Ifp en0 Ifa 10.0.0.10 [last] [SCOPED]
 =================> Apply 'test13', 'test10' End <=================
 
 =================> Apply 'test10', 'test14' Begin <=================
-Old routes ('test10') = <IPv4RouteList[9]> = {
+Old routes ('test10') = <IPv4RouteList[15]> = {
  0. Net 0.0.0.0/0 Gate 10.0.0.1 Ifp en1 Ifa 10.0.0.20
  1. Net 0.0.0.0/0 Gate 192.168.2.1 Ifp fw0 Ifa 192.168.2.30 [SCOPED]
  2. Net 0.0.0.0/0 Gate 10.0.0.1 Ifp en0 Ifa 10.0.0.10 [last] [SCOPED]
@@ -14619,6 +20867,12 @@ Old routes ('test10') = <IPv4RouteList[9]> = {
  6. Net 10.0.0.1/32 Ifp en0 Ifa 10.0.0.10 [last] [SCOPED]
  7. Net 192.168.2.0/24 Ifp fw0 Ifa 192.168.2.30
  8. Net 192.168.2.1/32 Ifp fw0 Ifa 192.168.2.30
+ 9. Net 224.0.0.0/4 Ifp en1 Ifa 10.0.0.20
+10. Net 224.0.0.0/4 Ifp fw0 Ifa 192.168.2.30 [SCOPED]
+11. Net 224.0.0.0/4 Ifp en0 Ifa 10.0.0.10 [last] [SCOPED]
+12. Net 255.255.255.255/32 Ifp en1 Ifa 10.0.0.20
+13. Net 255.255.255.255/32 Ifp fw0 Ifa 192.168.2.30 [SCOPED]
+14. Net 255.255.255.255/32 Ifp en0 Ifa 10.0.0.10 [last] [SCOPED]
 }
 Add new[5]: Net 10.0.0.1/32 Ifp en1 Ifa 10.0.0.20
 Add new[0]: Net 0.0.0.0/0 Gate 10.0.0.1 Ifp en1 Ifa 10.0.0.20
@@ -14629,10 +20883,18 @@ Add new[2]: Net 0.0.0.0/0 Gate 10.0.0.1 Ifp en0 Ifa 10.0.0.10 [last] [SCOPED]
 Add new[3]: Net 10.0.0.0/24 Ifp en1 Ifa 10.0.0.20
 Add new[4]: Net 10.0.0.0/24 Ifp en0 Ifa 10.0.0.10 [last] [SCOPED]
 Add new[7]: Net 192.168.2.0/24 Ifp fw0 Ifa 192.168.2.30
-New Routes ('test14') = <IPv4RouteList[3]> = {
+Add new[9]: Net 224.0.0.0/4 Ifp en1 Ifa 10.0.0.20
+Add new[10]: Net 224.0.0.0/4 Ifp fw0 Ifa 192.168.2.30 [SCOPED]
+Add new[11]: Net 224.0.0.0/4 Ifp en0 Ifa 10.0.0.10 [last] [SCOPED]
+Add new[12]: Net 255.255.255.255/32 Ifp en1 Ifa 10.0.0.20
+Add new[13]: Net 255.255.255.255/32 Ifp fw0 Ifa 192.168.2.30 [SCOPED]
+Add new[14]: Net 255.255.255.255/32 Ifp en0 Ifa 10.0.0.10 [last] [SCOPED]
+New Routes ('test14') = <IPv4RouteList[5]> = {
  0. Net 0.0.0.0/0 Gate 10.0.0.1 Ifp en1 Ifa 10.0.0.20 [never] [SCOPED]
  1. Net 10.0.0.0/24 Ifp en1 Ifa 10.0.0.20 [last]
  2. Net 10.0.0.1/32 Ifp en1 Ifa 10.0.0.20 [last]
+ 3. Net 224.0.0.0/4 Ifp en1 Ifa 10.0.0.20 [last]
+ 4. Net 255.255.255.255/32 Ifp en1 Ifa 10.0.0.20 [last]
 }
 Remove old[0]: Net 0.0.0.0/0 Gate 10.0.0.1 Ifp en1 Ifa 10.0.0.20
 Remove old[1]: Net 0.0.0.0/0 Gate 192.168.2.1 Ifp fw0 Ifa 192.168.2.30 [SCOPED]
@@ -14641,19 +20903,27 @@ Remove old[4]: Net 10.0.0.0/24 Ifp en0 Ifa 10.0.0.10 [last] [SCOPED]
 Remove old[6]: Net 10.0.0.1/32 Ifp en0 Ifa 10.0.0.10 [last] [SCOPED]
 Remove old[7]: Net 192.168.2.0/24 Ifp fw0 Ifa 192.168.2.30
 Remove old[8]: Net 192.168.2.1/32 Ifp fw0 Ifa 192.168.2.30
+Remove old[10]: Net 224.0.0.0/4 Ifp fw0 Ifa 192.168.2.30 [SCOPED]
+Remove old[11]: Net 224.0.0.0/4 Ifp en0 Ifa 10.0.0.10 [last] [SCOPED]
+Remove old[13]: Net 255.255.255.255/32 Ifp fw0 Ifa 192.168.2.30 [SCOPED]
+Remove old[14]: Net 255.255.255.255/32 Ifp en0 Ifa 10.0.0.10 [last] [SCOPED]
 Add new[0]: Net 0.0.0.0/0 Gate 10.0.0.1 Ifp en1 Ifa 10.0.0.20 [never] [SCOPED]
 =================> Apply 'test10', 'test14' End <=================
 
 =================> Apply 'test14', 'test10' Begin <=================
-Old routes ('test14') = <IPv4RouteList[3]> = {
+Old routes ('test14') = <IPv4RouteList[5]> = {
  0. Net 0.0.0.0/0 Gate 10.0.0.1 Ifp en1 Ifa 10.0.0.20 [never] [SCOPED]
  1. Net 10.0.0.0/24 Ifp en1 Ifa 10.0.0.20 [last]
  2. Net 10.0.0.1/32 Ifp en1 Ifa 10.0.0.20 [last]
+ 3. Net 224.0.0.0/4 Ifp en1 Ifa 10.0.0.20 [last]
+ 4. Net 255.255.255.255/32 Ifp en1 Ifa 10.0.0.20 [last]
 }
 Add new[2]: Net 10.0.0.1/32 Ifp en1 Ifa 10.0.0.20 [last]
 Add new[0]: Net 0.0.0.0/0 Gate 10.0.0.1 Ifp en1 Ifa 10.0.0.20 [never] [SCOPED]
 Add new[1]: Net 10.0.0.0/24 Ifp en1 Ifa 10.0.0.20 [last]
-New Routes ('test10') = <IPv4RouteList[9]> = {
+Add new[3]: Net 224.0.0.0/4 Ifp en1 Ifa 10.0.0.20 [last]
+Add new[4]: Net 255.255.255.255/32 Ifp en1 Ifa 10.0.0.20 [last]
+New Routes ('test10') = <IPv4RouteList[15]> = {
  0. Net 0.0.0.0/0 Gate 10.0.0.1 Ifp en1 Ifa 10.0.0.20
  1. Net 0.0.0.0/0 Gate 192.168.2.1 Ifp fw0 Ifa 192.168.2.30 [SCOPED]
  2. Net 0.0.0.0/0 Gate 10.0.0.1 Ifp en0 Ifa 10.0.0.10 [last] [SCOPED]
@@ -14663,6 +20933,12 @@ New Routes ('test10') = <IPv4RouteList[9]> = {
  6. Net 10.0.0.1/32 Ifp en0 Ifa 10.0.0.10 [last] [SCOPED]
  7. Net 192.168.2.0/24 Ifp fw0 Ifa 192.168.2.30
  8. Net 192.168.2.1/32 Ifp fw0 Ifa 192.168.2.30
+ 9. Net 224.0.0.0/4 Ifp en1 Ifa 10.0.0.20
+10. Net 224.0.0.0/4 Ifp fw0 Ifa 192.168.2.30 [SCOPED]
+11. Net 224.0.0.0/4 Ifp en0 Ifa 10.0.0.10 [last] [SCOPED]
+12. Net 255.255.255.255/32 Ifp en1 Ifa 10.0.0.20
+13. Net 255.255.255.255/32 Ifp fw0 Ifa 192.168.2.30 [SCOPED]
+14. Net 255.255.255.255/32 Ifp en0 Ifa 10.0.0.10 [last] [SCOPED]
 }
 Remove old[0]: Net 0.0.0.0/0 Gate 10.0.0.1 Ifp en1 Ifa 10.0.0.20 [never] [SCOPED]
 Add new[0]: Net 0.0.0.0/0 Gate 10.0.0.1 Ifp en1 Ifa 10.0.0.20
@@ -14672,10 +20948,14 @@ Add new[6]: Net 10.0.0.1/32 Ifp en0 Ifa 10.0.0.10 [last] [SCOPED]
 Add new[2]: Net 0.0.0.0/0 Gate 10.0.0.1 Ifp en0 Ifa 10.0.0.10 [last] [SCOPED]
 Add new[4]: Net 10.0.0.0/24 Ifp en0 Ifa 10.0.0.10 [last] [SCOPED]
 Add new[7]: Net 192.168.2.0/24 Ifp fw0 Ifa 192.168.2.30
+Add new[10]: Net 224.0.0.0/4 Ifp fw0 Ifa 192.168.2.30 [SCOPED]
+Add new[11]: Net 224.0.0.0/4 Ifp en0 Ifa 10.0.0.10 [last] [SCOPED]
+Add new[13]: Net 255.255.255.255/32 Ifp fw0 Ifa 192.168.2.30 [SCOPED]
+Add new[14]: Net 255.255.255.255/32 Ifp en0 Ifa 10.0.0.10 [last] [SCOPED]
 =================> Apply 'test14', 'test10' End <=================
 
 =================> Apply 'test10', 'test15' Begin <=================
-Old routes ('test10') = <IPv4RouteList[9]> = {
+Old routes ('test10') = <IPv4RouteList[15]> = {
  0. Net 0.0.0.0/0 Gate 10.0.0.1 Ifp en1 Ifa 10.0.0.20
  1. Net 0.0.0.0/0 Gate 192.168.2.1 Ifp fw0 Ifa 192.168.2.30 [SCOPED]
  2. Net 0.0.0.0/0 Gate 10.0.0.1 Ifp en0 Ifa 10.0.0.10 [last] [SCOPED]
@@ -14685,6 +20965,12 @@ Old routes ('test10') = <IPv4RouteList[9]> = {
  6. Net 10.0.0.1/32 Ifp en0 Ifa 10.0.0.10 [last] [SCOPED]
  7. Net 192.168.2.0/24 Ifp fw0 Ifa 192.168.2.30
  8. Net 192.168.2.1/32 Ifp fw0 Ifa 192.168.2.30
+ 9. Net 224.0.0.0/4 Ifp en1 Ifa 10.0.0.20
+10. Net 224.0.0.0/4 Ifp fw0 Ifa 192.168.2.30 [SCOPED]
+11. Net 224.0.0.0/4 Ifp en0 Ifa 10.0.0.10 [last] [SCOPED]
+12. Net 255.255.255.255/32 Ifp en1 Ifa 10.0.0.20
+13. Net 255.255.255.255/32 Ifp fw0 Ifa 192.168.2.30 [SCOPED]
+14. Net 255.255.255.255/32 Ifp en0 Ifa 10.0.0.10 [last] [SCOPED]
 }
 Add new[5]: Net 10.0.0.1/32 Ifp en1 Ifa 10.0.0.20
 Add new[0]: Net 0.0.0.0/0 Gate 10.0.0.1 Ifp en1 Ifa 10.0.0.20
@@ -14695,8 +20981,16 @@ Add new[2]: Net 0.0.0.0/0 Gate 10.0.0.1 Ifp en0 Ifa 10.0.0.10 [last] [SCOPED]
 Add new[3]: Net 10.0.0.0/24 Ifp en1 Ifa 10.0.0.20
 Add new[4]: Net 10.0.0.0/24 Ifp en0 Ifa 10.0.0.10 [last] [SCOPED]
 Add new[7]: Net 192.168.2.0/24 Ifp fw0 Ifa 192.168.2.30
-New Routes ('test15') = <IPv4RouteList[1]> = {
- 0. Net 0.0.0.0/0 Ifp en0 Ifa 169.254.22.44
+Add new[9]: Net 224.0.0.0/4 Ifp en1 Ifa 10.0.0.20
+Add new[10]: Net 224.0.0.0/4 Ifp fw0 Ifa 192.168.2.30 [SCOPED]
+Add new[11]: Net 224.0.0.0/4 Ifp en0 Ifa 10.0.0.10 [last] [SCOPED]
+Add new[12]: Net 255.255.255.255/32 Ifp en1 Ifa 10.0.0.20
+Add new[13]: Net 255.255.255.255/32 Ifp fw0 Ifa 192.168.2.30 [SCOPED]
+Add new[14]: Net 255.255.255.255/32 Ifp en0 Ifa 10.0.0.10 [last] [SCOPED]
+New Routes ('test15') = <IPv4RouteList[3]> = {
+ 0. Net 169.254.0.0/16 Ifp en0 Ifa 169.254.22.44 [last]
+ 1. Net 224.0.0.0/4 Ifp en0 Ifa 169.254.22.44 [last]
+ 2. Net 255.255.255.255/32 Ifp en0 Ifa 169.254.22.44 [last]
 }
 Remove old[0]: Net 0.0.0.0/0 Gate 10.0.0.1 Ifp en1 Ifa 10.0.0.20
 Remove old[1]: Net 0.0.0.0/0 Gate 192.168.2.1 Ifp fw0 Ifa 192.168.2.30 [SCOPED]
@@ -14707,15 +21001,27 @@ Remove old[5]: Net 10.0.0.1/32 Ifp en1 Ifa 10.0.0.20
 Remove old[6]: Net 10.0.0.1/32 Ifp en0 Ifa 10.0.0.10 [last] [SCOPED]
 Remove old[7]: Net 192.168.2.0/24 Ifp fw0 Ifa 192.168.2.30
 Remove old[8]: Net 192.168.2.1/32 Ifp fw0 Ifa 192.168.2.30
-Add new[0]: Net 0.0.0.0/0 Ifp en0 Ifa 169.254.22.44
+Remove old[9]: Net 224.0.0.0/4 Ifp en1 Ifa 10.0.0.20
+Remove old[10]: Net 224.0.0.0/4 Ifp fw0 Ifa 192.168.2.30 [SCOPED]
+Remove old[11]: Net 224.0.0.0/4 Ifp en0 Ifa 10.0.0.10 [last] [SCOPED]
+Remove old[12]: Net 255.255.255.255/32 Ifp en1 Ifa 10.0.0.20
+Remove old[13]: Net 255.255.255.255/32 Ifp fw0 Ifa 192.168.2.30 [SCOPED]
+Remove old[14]: Net 255.255.255.255/32 Ifp en0 Ifa 10.0.0.10 [last] [SCOPED]
+Add new[0]: Net 169.254.0.0/16 Ifp en0 Ifa 169.254.22.44 [last]
+Add new[1]: Net 224.0.0.0/4 Ifp en0 Ifa 169.254.22.44 [last]
+Add new[2]: Net 255.255.255.255/32 Ifp en0 Ifa 169.254.22.44 [last]
 =================> Apply 'test10', 'test15' End <=================
 
 =================> Apply 'test15', 'test10' Begin <=================
-Old routes ('test15') = <IPv4RouteList[1]> = {
- 0. Net 0.0.0.0/0 Ifp en0 Ifa 169.254.22.44
-}
-Add new[0]: Net 0.0.0.0/0 Ifp en0 Ifa 169.254.22.44
-New Routes ('test10') = <IPv4RouteList[9]> = {
+Old routes ('test15') = <IPv4RouteList[3]> = {
+ 0. Net 169.254.0.0/16 Ifp en0 Ifa 169.254.22.44 [last]
+ 1. Net 224.0.0.0/4 Ifp en0 Ifa 169.254.22.44 [last]
+ 2. Net 255.255.255.255/32 Ifp en0 Ifa 169.254.22.44 [last]
+}
+Add new[0]: Net 169.254.0.0/16 Ifp en0 Ifa 169.254.22.44 [last]
+Add new[1]: Net 224.0.0.0/4 Ifp en0 Ifa 169.254.22.44 [last]
+Add new[2]: Net 255.255.255.255/32 Ifp en0 Ifa 169.254.22.44 [last]
+New Routes ('test10') = <IPv4RouteList[15]> = {
  0. Net 0.0.0.0/0 Gate 10.0.0.1 Ifp en1 Ifa 10.0.0.20
  1. Net 0.0.0.0/0 Gate 192.168.2.1 Ifp fw0 Ifa 192.168.2.30 [SCOPED]
  2. Net 0.0.0.0/0 Gate 10.0.0.1 Ifp en0 Ifa 10.0.0.10 [last] [SCOPED]
@@ -14725,8 +21031,16 @@ New Routes ('test10') = <IPv4RouteList[9]> = {
  6. Net 10.0.0.1/32 Ifp en0 Ifa 10.0.0.10 [last] [SCOPED]
  7. Net 192.168.2.0/24 Ifp fw0 Ifa 192.168.2.30
  8. Net 192.168.2.1/32 Ifp fw0 Ifa 192.168.2.30
-}
-Remove old[0]: Net 0.0.0.0/0 Ifp en0 Ifa 169.254.22.44
+ 9. Net 224.0.0.0/4 Ifp en1 Ifa 10.0.0.20
+10. Net 224.0.0.0/4 Ifp fw0 Ifa 192.168.2.30 [SCOPED]
+11. Net 224.0.0.0/4 Ifp en0 Ifa 10.0.0.10 [last] [SCOPED]
+12. Net 255.255.255.255/32 Ifp en1 Ifa 10.0.0.20
+13. Net 255.255.255.255/32 Ifp fw0 Ifa 192.168.2.30 [SCOPED]
+14. Net 255.255.255.255/32 Ifp en0 Ifa 10.0.0.10 [last] [SCOPED]
+}
+Remove old[0]: Net 169.254.0.0/16 Ifp en0 Ifa 169.254.22.44 [last]
+Remove old[1]: Net 224.0.0.0/4 Ifp en0 Ifa 169.254.22.44 [last]
+Remove old[2]: Net 255.255.255.255/32 Ifp en0 Ifa 169.254.22.44 [last]
 Add new[5]: Net 10.0.0.1/32 Ifp en1 Ifa 10.0.0.20
 Add new[0]: Net 0.0.0.0/0 Gate 10.0.0.1 Ifp en1 Ifa 10.0.0.20
 Add new[8]: Net 192.168.2.1/32 Ifp fw0 Ifa 192.168.2.30
@@ -14736,10 +21050,16 @@ Add new[2]: Net 0.0.0.0/0 Gate 10.0.0.1 Ifp en0 Ifa 10.0.0.10 [last] [SCOPED]
 Add new[3]: Net 10.0.0.0/24 Ifp en1 Ifa 10.0.0.20
 Add new[4]: Net 10.0.0.0/24 Ifp en0 Ifa 10.0.0.10 [last] [SCOPED]
 Add new[7]: Net 192.168.2.0/24 Ifp fw0 Ifa 192.168.2.30
+Add new[9]: Net 224.0.0.0/4 Ifp en1 Ifa 10.0.0.20
+Add new[10]: Net 224.0.0.0/4 Ifp fw0 Ifa 192.168.2.30 [SCOPED]
+Add new[11]: Net 224.0.0.0/4 Ifp en0 Ifa 10.0.0.10 [last] [SCOPED]
+Add new[12]: Net 255.255.255.255/32 Ifp en1 Ifa 10.0.0.20
+Add new[13]: Net 255.255.255.255/32 Ifp fw0 Ifa 192.168.2.30 [SCOPED]
+Add new[14]: Net 255.255.255.255/32 Ifp en0 Ifa 10.0.0.10 [last] [SCOPED]
 =================> Apply 'test15', 'test10' End <=================
 
 =================> Apply 'test10', 'test16' Begin <=================
-Old routes ('test10') = <IPv4RouteList[9]> = {
+Old routes ('test10') = <IPv4RouteList[15]> = {
  0. Net 0.0.0.0/0 Gate 10.0.0.1 Ifp en1 Ifa 10.0.0.20
  1. Net 0.0.0.0/0 Gate 192.168.2.1 Ifp fw0 Ifa 192.168.2.30 [SCOPED]
  2. Net 0.0.0.0/0 Gate 10.0.0.1 Ifp en0 Ifa 10.0.0.10 [last] [SCOPED]
@@ -14749,6 +21069,12 @@ Old routes ('test10') = <IPv4RouteList[9]> = {
  6. Net 10.0.0.1/32 Ifp en0 Ifa 10.0.0.10 [last] [SCOPED]
  7. Net 192.168.2.0/24 Ifp fw0 Ifa 192.168.2.30
  8. Net 192.168.2.1/32 Ifp fw0 Ifa 192.168.2.30
+ 9. Net 224.0.0.0/4 Ifp en1 Ifa 10.0.0.20
+10. Net 224.0.0.0/4 Ifp fw0 Ifa 192.168.2.30 [SCOPED]
+11. Net 224.0.0.0/4 Ifp en0 Ifa 10.0.0.10 [last] [SCOPED]
+12. Net 255.255.255.255/32 Ifp en1 Ifa 10.0.0.20
+13. Net 255.255.255.255/32 Ifp fw0 Ifa 192.168.2.30 [SCOPED]
+14. Net 255.255.255.255/32 Ifp en0 Ifa 10.0.0.10 [last] [SCOPED]
 }
 Add new[5]: Net 10.0.0.1/32 Ifp en1 Ifa 10.0.0.20
 Add new[0]: Net 0.0.0.0/0 Gate 10.0.0.1 Ifp en1 Ifa 10.0.0.20
@@ -14759,7 +21085,13 @@ Add new[2]: Net 0.0.0.0/0 Gate 10.0.0.1 Ifp en0 Ifa 10.0.0.10 [last] [SCOPED]
 Add new[3]: Net 10.0.0.0/24 Ifp en1 Ifa 10.0.0.20
 Add new[4]: Net 10.0.0.0/24 Ifp en0 Ifa 10.0.0.10 [last] [SCOPED]
 Add new[7]: Net 192.168.2.0/24 Ifp fw0 Ifa 192.168.2.30
-New Routes ('test16') = <IPv4RouteList[50]> = {
+Add new[9]: Net 224.0.0.0/4 Ifp en1 Ifa 10.0.0.20
+Add new[10]: Net 224.0.0.0/4 Ifp fw0 Ifa 192.168.2.30 [SCOPED]
+Add new[11]: Net 224.0.0.0/4 Ifp en0 Ifa 10.0.0.10 [last] [SCOPED]
+Add new[12]: Net 255.255.255.255/32 Ifp en1 Ifa 10.0.0.20
+Add new[13]: Net 255.255.255.255/32 Ifp fw0 Ifa 192.168.2.30 [SCOPED]
+Add new[14]: Net 255.255.255.255/32 Ifp en0 Ifa 10.0.0.10 [last] [SCOPED]
+New Routes ('test16') = <IPv4RouteList[54]> = {
  0. Net 0.0.0.0/0 Gate 10.0.0.1 Ifp en0 Ifa 10.0.0.10
  1. Net 0.0.0.0/0 Ifp utun0 Ifa 17.153.46.24 [SCOPED]
  2. Net 10.0.0.0/24 Ifp en0 Ifa 10.0.0.10
@@ -14810,6 +21142,10 @@ New Routes ('test16') = <IPv4RouteList[50]> = {
 47. Net 192.35.50.0/24 Gate 17.153.46.24 Ifp utun0 Ifa 17.153.46.24
 48. Net 204.179.20.0/24 Gate 17.153.46.24 Ifp utun0 Ifa 17.153.46.24
 49. Net 206.112.116.0/24 Gate 17.153.46.24 Ifp utun0 Ifa 17.153.46.24
+50. Net 224.0.0.0/4 Ifp en0 Ifa 10.0.0.10
+51. Net 224.0.0.0/4 Ifp utun0 Ifa 17.153.46.24 [SCOPED]
+52. Net 255.255.255.255/32 Ifp en0 Ifa 10.0.0.10
+53. Net 255.255.255.255/32 Ifp utun0 Ifa 17.153.46.24 [SCOPED]
 }
 Remove old[0]: Net 0.0.0.0/0 Gate 10.0.0.1 Ifp en1 Ifa 10.0.0.20
 Remove old[1]: Net 0.0.0.0/0 Gate 192.168.2.1 Ifp fw0 Ifa 192.168.2.30 [SCOPED]
@@ -14820,6 +21156,12 @@ Remove old[5]: Net 10.0.0.1/32 Ifp en1 Ifa 10.0.0.20
 Remove old[6]: Net 10.0.0.1/32 Ifp en0 Ifa 10.0.0.10 [last] [SCOPED]
 Remove old[7]: Net 192.168.2.0/24 Ifp fw0 Ifa 192.168.2.30
 Remove old[8]: Net 192.168.2.1/32 Ifp fw0 Ifa 192.168.2.30
+Remove old[9]: Net 224.0.0.0/4 Ifp en1 Ifa 10.0.0.20
+Remove old[10]: Net 224.0.0.0/4 Ifp fw0 Ifa 192.168.2.30 [SCOPED]
+Remove old[11]: Net 224.0.0.0/4 Ifp en0 Ifa 10.0.0.10 [last] [SCOPED]
+Remove old[12]: Net 255.255.255.255/32 Ifp en1 Ifa 10.0.0.20
+Remove old[13]: Net 255.255.255.255/32 Ifp fw0 Ifa 192.168.2.30 [SCOPED]
+Remove old[14]: Net 255.255.255.255/32 Ifp en0 Ifa 10.0.0.10 [last] [SCOPED]
 Add new[3]: Net 10.0.0.1/32 Ifp en0 Ifa 10.0.0.10
 Add new[0]: Net 0.0.0.0/0 Gate 10.0.0.1 Ifp en0 Ifa 10.0.0.10
 Add new[1]: Net 0.0.0.0/0 Ifp utun0 Ifa 17.153.46.24 [SCOPED]
@@ -14870,10 +21212,14 @@ Add new[46]: Net 172.16.2.0/24 Gate 17.153.46.24 Ifp utun0 Ifa 17.153.46.24
 Add new[47]: Net 192.35.50.0/24 Gate 17.153.46.24 Ifp utun0 Ifa 17.153.46.24
 Add new[48]: Net 204.179.20.0/24 Gate 17.153.46.24 Ifp utun0 Ifa 17.153.46.24
 Add new[49]: Net 206.112.116.0/24 Gate 17.153.46.24 Ifp utun0 Ifa 17.153.46.24
+Add new[50]: Net 224.0.0.0/4 Ifp en0 Ifa 10.0.0.10
+Add new[51]: Net 224.0.0.0/4 Ifp utun0 Ifa 17.153.46.24 [SCOPED]
+Add new[52]: Net 255.255.255.255/32 Ifp en0 Ifa 10.0.0.10
+Add new[53]: Net 255.255.255.255/32 Ifp utun0 Ifa 17.153.46.24 [SCOPED]
 =================> Apply 'test10', 'test16' End <=================
 
 =================> Apply 'test16', 'test10' Begin <=================
-Old routes ('test16') = <IPv4RouteList[50]> = {
+Old routes ('test16') = <IPv4RouteList[54]> = {
  0. Net 0.0.0.0/0 Gate 10.0.0.1 Ifp en0 Ifa 10.0.0.10
  1. Net 0.0.0.0/0 Ifp utun0 Ifa 17.153.46.24 [SCOPED]
  2. Net 10.0.0.0/24 Ifp en0 Ifa 10.0.0.10
@@ -14924,6 +21270,10 @@ Old routes ('test16') = <IPv4RouteList[50]> = {
 47. Net 192.35.50.0/24 Gate 17.153.46.24 Ifp utun0 Ifa 17.153.46.24
 48. Net 204.179.20.0/24 Gate 17.153.46.24 Ifp utun0 Ifa 17.153.46.24
 49. Net 206.112.116.0/24 Gate 17.153.46.24 Ifp utun0 Ifa 17.153.46.24
+50. Net 224.0.0.0/4 Ifp en0 Ifa 10.0.0.10
+51. Net 224.0.0.0/4 Ifp utun0 Ifa 17.153.46.24 [SCOPED]
+52. Net 255.255.255.255/32 Ifp en0 Ifa 10.0.0.10
+53. Net 255.255.255.255/32 Ifp utun0 Ifa 17.153.46.24 [SCOPED]
 }
 Add new[3]: Net 10.0.0.1/32 Ifp en0 Ifa 10.0.0.10
 Add new[0]: Net 0.0.0.0/0 Gate 10.0.0.1 Ifp en0 Ifa 10.0.0.10
@@ -14975,7 +21325,11 @@ Add new[46]: Net 172.16.2.0/24 Gate 17.153.46.24 Ifp utun0 Ifa 17.153.46.24
 Add new[47]: Net 192.35.50.0/24 Gate 17.153.46.24 Ifp utun0 Ifa 17.153.46.24
 Add new[48]: Net 204.179.20.0/24 Gate 17.153.46.24 Ifp utun0 Ifa 17.153.46.24
 Add new[49]: Net 206.112.116.0/24 Gate 17.153.46.24 Ifp utun0 Ifa 17.153.46.24
-New Routes ('test10') = <IPv4RouteList[9]> = {
+Add new[50]: Net 224.0.0.0/4 Ifp en0 Ifa 10.0.0.10
+Add new[51]: Net 224.0.0.0/4 Ifp utun0 Ifa 17.153.46.24 [SCOPED]
+Add new[52]: Net 255.255.255.255/32 Ifp en0 Ifa 10.0.0.10
+Add new[53]: Net 255.255.255.255/32 Ifp utun0 Ifa 17.153.46.24 [SCOPED]
+New Routes ('test10') = <IPv4RouteList[15]> = {
  0. Net 0.0.0.0/0 Gate 10.0.0.1 Ifp en1 Ifa 10.0.0.20
  1. Net 0.0.0.0/0 Gate 192.168.2.1 Ifp fw0 Ifa 192.168.2.30 [SCOPED]
  2. Net 0.0.0.0/0 Gate 10.0.0.1 Ifp en0 Ifa 10.0.0.10 [last] [SCOPED]
@@ -14985,6 +21339,12 @@ New Routes ('test10') = <IPv4RouteList[9]> = {
  6. Net 10.0.0.1/32 Ifp en0 Ifa 10.0.0.10 [last] [SCOPED]
  7. Net 192.168.2.0/24 Ifp fw0 Ifa 192.168.2.30
  8. Net 192.168.2.1/32 Ifp fw0 Ifa 192.168.2.30
+ 9. Net 224.0.0.0/4 Ifp en1 Ifa 10.0.0.20
+10. Net 224.0.0.0/4 Ifp fw0 Ifa 192.168.2.30 [SCOPED]
+11. Net 224.0.0.0/4 Ifp en0 Ifa 10.0.0.10 [last] [SCOPED]
+12. Net 255.255.255.255/32 Ifp en1 Ifa 10.0.0.20
+13. Net 255.255.255.255/32 Ifp fw0 Ifa 192.168.2.30 [SCOPED]
+14. Net 255.255.255.255/32 Ifp en0 Ifa 10.0.0.10 [last] [SCOPED]
 }
 Remove old[0]: Net 0.0.0.0/0 Gate 10.0.0.1 Ifp en0 Ifa 10.0.0.10
 Remove old[1]: Net 0.0.0.0/0 Ifp utun0 Ifa 17.153.46.24 [SCOPED]
@@ -15036,6 +21396,10 @@ Remove old[46]: Net 172.16.2.0/24 Gate 17.153.46.24 Ifp utun0 Ifa 17.153.46.24
 Remove old[47]: Net 192.35.50.0/24 Gate 17.153.46.24 Ifp utun0 Ifa 17.153.46.24
 Remove old[48]: Net 204.179.20.0/24 Gate 17.153.46.24 Ifp utun0 Ifa 17.153.46.24
 Remove old[49]: Net 206.112.116.0/24 Gate 17.153.46.24 Ifp utun0 Ifa 17.153.46.24
+Remove old[50]: Net 224.0.0.0/4 Ifp en0 Ifa 10.0.0.10
+Remove old[51]: Net 224.0.0.0/4 Ifp utun0 Ifa 17.153.46.24 [SCOPED]
+Remove old[52]: Net 255.255.255.255/32 Ifp en0 Ifa 10.0.0.10
+Remove old[53]: Net 255.255.255.255/32 Ifp utun0 Ifa 17.153.46.24 [SCOPED]
 Add new[5]: Net 10.0.0.1/32 Ifp en1 Ifa 10.0.0.20
 Add new[0]: Net 0.0.0.0/0 Gate 10.0.0.1 Ifp en1 Ifa 10.0.0.20
 Add new[8]: Net 192.168.2.1/32 Ifp fw0 Ifa 192.168.2.30
@@ -15045,10 +21409,16 @@ Add new[2]: Net 0.0.0.0/0 Gate 10.0.0.1 Ifp en0 Ifa 10.0.0.10 [last] [SCOPED]
 Add new[3]: Net 10.0.0.0/24 Ifp en1 Ifa 10.0.0.20
 Add new[4]: Net 10.0.0.0/24 Ifp en0 Ifa 10.0.0.10 [last] [SCOPED]
 Add new[7]: Net 192.168.2.0/24 Ifp fw0 Ifa 192.168.2.30
+Add new[9]: Net 224.0.0.0/4 Ifp en1 Ifa 10.0.0.20
+Add new[10]: Net 224.0.0.0/4 Ifp fw0 Ifa 192.168.2.30 [SCOPED]
+Add new[11]: Net 224.0.0.0/4 Ifp en0 Ifa 10.0.0.10 [last] [SCOPED]
+Add new[12]: Net 255.255.255.255/32 Ifp en1 Ifa 10.0.0.20
+Add new[13]: Net 255.255.255.255/32 Ifp fw0 Ifa 192.168.2.30 [SCOPED]
+Add new[14]: Net 255.255.255.255/32 Ifp en0 Ifa 10.0.0.10 [last] [SCOPED]
 =================> Apply 'test16', 'test10' End <=================
 
 =================> Apply 'test10', 'test17' Begin <=================
-Old routes ('test10') = <IPv4RouteList[9]> = {
+Old routes ('test10') = <IPv4RouteList[15]> = {
  0. Net 0.0.0.0/0 Gate 10.0.0.1 Ifp en1 Ifa 10.0.0.20
  1. Net 0.0.0.0/0 Gate 192.168.2.1 Ifp fw0 Ifa 192.168.2.30 [SCOPED]
  2. Net 0.0.0.0/0 Gate 10.0.0.1 Ifp en0 Ifa 10.0.0.10 [last] [SCOPED]
@@ -15058,6 +21428,12 @@ Old routes ('test10') = <IPv4RouteList[9]> = {
  6. Net 10.0.0.1/32 Ifp en0 Ifa 10.0.0.10 [last] [SCOPED]
  7. Net 192.168.2.0/24 Ifp fw0 Ifa 192.168.2.30
  8. Net 192.168.2.1/32 Ifp fw0 Ifa 192.168.2.30
+ 9. Net 224.0.0.0/4 Ifp en1 Ifa 10.0.0.20
+10. Net 224.0.0.0/4 Ifp fw0 Ifa 192.168.2.30 [SCOPED]
+11. Net 224.0.0.0/4 Ifp en0 Ifa 10.0.0.10 [last] [SCOPED]
+12. Net 255.255.255.255/32 Ifp en1 Ifa 10.0.0.20
+13. Net 255.255.255.255/32 Ifp fw0 Ifa 192.168.2.30 [SCOPED]
+14. Net 255.255.255.255/32 Ifp en0 Ifa 10.0.0.10 [last] [SCOPED]
 }
 Add new[5]: Net 10.0.0.1/32 Ifp en1 Ifa 10.0.0.20
 Add new[0]: Net 0.0.0.0/0 Gate 10.0.0.1 Ifp en1 Ifa 10.0.0.20
@@ -15068,13 +21444,23 @@ Add new[2]: Net 0.0.0.0/0 Gate 10.0.0.1 Ifp en0 Ifa 10.0.0.10 [last] [SCOPED]
 Add new[3]: Net 10.0.0.0/24 Ifp en1 Ifa 10.0.0.20
 Add new[4]: Net 10.0.0.0/24 Ifp en0 Ifa 10.0.0.10 [last] [SCOPED]
 Add new[7]: Net 192.168.2.0/24 Ifp fw0 Ifa 192.168.2.30
-New Routes ('test17') = <IPv4RouteList[6]> = {
+Add new[9]: Net 224.0.0.0/4 Ifp en1 Ifa 10.0.0.20
+Add new[10]: Net 224.0.0.0/4 Ifp fw0 Ifa 192.168.2.30 [SCOPED]
+Add new[11]: Net 224.0.0.0/4 Ifp en0 Ifa 10.0.0.10 [last] [SCOPED]
+Add new[12]: Net 255.255.255.255/32 Ifp en1 Ifa 10.0.0.20
+Add new[13]: Net 255.255.255.255/32 Ifp fw0 Ifa 192.168.2.30 [SCOPED]
+Add new[14]: Net 255.255.255.255/32 Ifp en0 Ifa 10.0.0.10 [last] [SCOPED]
+New Routes ('test17') = <IPv4RouteList[10]> = {
  0. Net 0.0.0.0/0 Gate 10.0.0.1 Ifp en0 Ifa 10.0.0.10
  1. Net 0.0.0.0/0 Gate 192.168.2.1 Ifp en1 Ifa 192.168.2.50 [never] [SCOPED]
  2. Net 10.0.0.0/24 Ifp en0 Ifa 10.0.0.10
  3. Net 10.0.0.1/32 Ifp en0 Ifa 10.0.0.10
  4. Net 192.168.2.0/24 Ifp en1 Ifa 192.168.2.50 [last]
  5. Net 192.168.2.1/32 Ifp en1 Ifa 192.168.2.50 [last]
+ 6. Net 224.0.0.0/4 Ifp en0 Ifa 10.0.0.10
+ 7. Net 224.0.0.0/4 Ifp en1 Ifa 192.168.2.50 [last] [SCOPED]
+ 8. Net 255.255.255.255/32 Ifp en0 Ifa 10.0.0.10
+ 9. Net 255.255.255.255/32 Ifp en1 Ifa 192.168.2.50 [last] [SCOPED]
 }
 Remove old[0]: Net 0.0.0.0/0 Gate 10.0.0.1 Ifp en1 Ifa 10.0.0.20
 Remove old[1]: Net 0.0.0.0/0 Gate 192.168.2.1 Ifp fw0 Ifa 192.168.2.30 [SCOPED]
@@ -15085,22 +21471,36 @@ Remove old[5]: Net 10.0.0.1/32 Ifp en1 Ifa 10.0.0.20
 Remove old[6]: Net 10.0.0.1/32 Ifp en0 Ifa 10.0.0.10 [last] [SCOPED]
 Remove old[7]: Net 192.168.2.0/24 Ifp fw0 Ifa 192.168.2.30
 Remove old[8]: Net 192.168.2.1/32 Ifp fw0 Ifa 192.168.2.30
+Remove old[9]: Net 224.0.0.0/4 Ifp en1 Ifa 10.0.0.20
+Remove old[10]: Net 224.0.0.0/4 Ifp fw0 Ifa 192.168.2.30 [SCOPED]
+Remove old[11]: Net 224.0.0.0/4 Ifp en0 Ifa 10.0.0.10 [last] [SCOPED]
+Remove old[12]: Net 255.255.255.255/32 Ifp en1 Ifa 10.0.0.20
+Remove old[13]: Net 255.255.255.255/32 Ifp fw0 Ifa 192.168.2.30 [SCOPED]
+Remove old[14]: Net 255.255.255.255/32 Ifp en0 Ifa 10.0.0.10 [last] [SCOPED]
 Add new[3]: Net 10.0.0.1/32 Ifp en0 Ifa 10.0.0.10
 Add new[0]: Net 0.0.0.0/0 Gate 10.0.0.1 Ifp en0 Ifa 10.0.0.10
 Add new[5]: Net 192.168.2.1/32 Ifp en1 Ifa 192.168.2.50 [last]
 Add new[1]: Net 0.0.0.0/0 Gate 192.168.2.1 Ifp en1 Ifa 192.168.2.50 [never] [SCOPED]
 Add new[2]: Net 10.0.0.0/24 Ifp en0 Ifa 10.0.0.10
 Add new[4]: Net 192.168.2.0/24 Ifp en1 Ifa 192.168.2.50 [last]
+Add new[6]: Net 224.0.0.0/4 Ifp en0 Ifa 10.0.0.10
+Add new[7]: Net 224.0.0.0/4 Ifp en1 Ifa 192.168.2.50 [last] [SCOPED]
+Add new[8]: Net 255.255.255.255/32 Ifp en0 Ifa 10.0.0.10
+Add new[9]: Net 255.255.255.255/32 Ifp en1 Ifa 192.168.2.50 [last] [SCOPED]
 =================> Apply 'test10', 'test17' End <=================
 
 =================> Apply 'test17', 'test10' Begin <=================
-Old routes ('test17') = <IPv4RouteList[6]> = {
+Old routes ('test17') = <IPv4RouteList[10]> = {
  0. Net 0.0.0.0/0 Gate 10.0.0.1 Ifp en0 Ifa 10.0.0.10
  1. Net 0.0.0.0/0 Gate 192.168.2.1 Ifp en1 Ifa 192.168.2.50 [never] [SCOPED]
  2. Net 10.0.0.0/24 Ifp en0 Ifa 10.0.0.10
  3. Net 10.0.0.1/32 Ifp en0 Ifa 10.0.0.10
  4. Net 192.168.2.0/24 Ifp en1 Ifa 192.168.2.50 [last]
  5. Net 192.168.2.1/32 Ifp en1 Ifa 192.168.2.50 [last]
+ 6. Net 224.0.0.0/4 Ifp en0 Ifa 10.0.0.10
+ 7. Net 224.0.0.0/4 Ifp en1 Ifa 192.168.2.50 [last] [SCOPED]
+ 8. Net 255.255.255.255/32 Ifp en0 Ifa 10.0.0.10
+ 9. Net 255.255.255.255/32 Ifp en1 Ifa 192.168.2.50 [last] [SCOPED]
 }
 Add new[3]: Net 10.0.0.1/32 Ifp en0 Ifa 10.0.0.10
 Add new[0]: Net 0.0.0.0/0 Gate 10.0.0.1 Ifp en0 Ifa 10.0.0.10
@@ -15108,7 +21508,11 @@ Add new[5]: Net 192.168.2.1/32 Ifp en1 Ifa 192.168.2.50 [last]
 Add new[1]: Net 0.0.0.0/0 Gate 192.168.2.1 Ifp en1 Ifa 192.168.2.50 [never] [SCOPED]
 Add new[2]: Net 10.0.0.0/24 Ifp en0 Ifa 10.0.0.10
 Add new[4]: Net 192.168.2.0/24 Ifp en1 Ifa 192.168.2.50 [last]
-New Routes ('test10') = <IPv4RouteList[9]> = {
+Add new[6]: Net 224.0.0.0/4 Ifp en0 Ifa 10.0.0.10
+Add new[7]: Net 224.0.0.0/4 Ifp en1 Ifa 192.168.2.50 [last] [SCOPED]
+Add new[8]: Net 255.255.255.255/32 Ifp en0 Ifa 10.0.0.10
+Add new[9]: Net 255.255.255.255/32 Ifp en1 Ifa 192.168.2.50 [last] [SCOPED]
+New Routes ('test10') = <IPv4RouteList[15]> = {
  0. Net 0.0.0.0/0 Gate 10.0.0.1 Ifp en1 Ifa 10.0.0.20
  1. Net 0.0.0.0/0 Gate 192.168.2.1 Ifp fw0 Ifa 192.168.2.30 [SCOPED]
  2. Net 0.0.0.0/0 Gate 10.0.0.1 Ifp en0 Ifa 10.0.0.10 [last] [SCOPED]
@@ -15118,6 +21522,12 @@ New Routes ('test10') = <IPv4RouteList[9]> = {
  6. Net 10.0.0.1/32 Ifp en0 Ifa 10.0.0.10 [last] [SCOPED]
  7. Net 192.168.2.0/24 Ifp fw0 Ifa 192.168.2.30
  8. Net 192.168.2.1/32 Ifp fw0 Ifa 192.168.2.30
+ 9. Net 224.0.0.0/4 Ifp en1 Ifa 10.0.0.20
+10. Net 224.0.0.0/4 Ifp fw0 Ifa 192.168.2.30 [SCOPED]
+11. Net 224.0.0.0/4 Ifp en0 Ifa 10.0.0.10 [last] [SCOPED]
+12. Net 255.255.255.255/32 Ifp en1 Ifa 10.0.0.20
+13. Net 255.255.255.255/32 Ifp fw0 Ifa 192.168.2.30 [SCOPED]
+14. Net 255.255.255.255/32 Ifp en0 Ifa 10.0.0.10 [last] [SCOPED]
 }
 Remove old[0]: Net 0.0.0.0/0 Gate 10.0.0.1 Ifp en0 Ifa 10.0.0.10
 Remove old[1]: Net 0.0.0.0/0 Gate 192.168.2.1 Ifp en1 Ifa 192.168.2.50 [never] [SCOPED]
@@ -15125,6 +21535,10 @@ Remove old[2]: Net 10.0.0.0/24 Ifp en0 Ifa 10.0.0.10
 Remove old[3]: Net 10.0.0.1/32 Ifp en0 Ifa 10.0.0.10
 Remove old[4]: Net 192.168.2.0/24 Ifp en1 Ifa 192.168.2.50 [last]
 Remove old[5]: Net 192.168.2.1/32 Ifp en1 Ifa 192.168.2.50 [last]
+Remove old[6]: Net 224.0.0.0/4 Ifp en0 Ifa 10.0.0.10
+Remove old[7]: Net 224.0.0.0/4 Ifp en1 Ifa 192.168.2.50 [last] [SCOPED]
+Remove old[8]: Net 255.255.255.255/32 Ifp en0 Ifa 10.0.0.10
+Remove old[9]: Net 255.255.255.255/32 Ifp en1 Ifa 192.168.2.50 [last] [SCOPED]
 Add new[5]: Net 10.0.0.1/32 Ifp en1 Ifa 10.0.0.20
 Add new[0]: Net 0.0.0.0/0 Gate 10.0.0.1 Ifp en1 Ifa 10.0.0.20
 Add new[8]: Net 192.168.2.1/32 Ifp fw0 Ifa 192.168.2.30
@@ -15134,10 +21548,16 @@ Add new[2]: Net 0.0.0.0/0 Gate 10.0.0.1 Ifp en0 Ifa 10.0.0.10 [last] [SCOPED]
 Add new[3]: Net 10.0.0.0/24 Ifp en1 Ifa 10.0.0.20
 Add new[4]: Net 10.0.0.0/24 Ifp en0 Ifa 10.0.0.10 [last] [SCOPED]
 Add new[7]: Net 192.168.2.0/24 Ifp fw0 Ifa 192.168.2.30
+Add new[9]: Net 224.0.0.0/4 Ifp en1 Ifa 10.0.0.20
+Add new[10]: Net 224.0.0.0/4 Ifp fw0 Ifa 192.168.2.30 [SCOPED]
+Add new[11]: Net 224.0.0.0/4 Ifp en0 Ifa 10.0.0.10 [last] [SCOPED]
+Add new[12]: Net 255.255.255.255/32 Ifp en1 Ifa 10.0.0.20
+Add new[13]: Net 255.255.255.255/32 Ifp fw0 Ifa 192.168.2.30 [SCOPED]
+Add new[14]: Net 255.255.255.255/32 Ifp en0 Ifa 10.0.0.10 [last] [SCOPED]
 =================> Apply 'test17', 'test10' End <=================
 
 =================> Apply 'test10', 'test18' Begin <=================
-Old routes ('test10') = <IPv4RouteList[9]> = {
+Old routes ('test10') = <IPv4RouteList[15]> = {
  0. Net 0.0.0.0/0 Gate 10.0.0.1 Ifp en1 Ifa 10.0.0.20
  1. Net 0.0.0.0/0 Gate 192.168.2.1 Ifp fw0 Ifa 192.168.2.30 [SCOPED]
  2. Net 0.0.0.0/0 Gate 10.0.0.1 Ifp en0 Ifa 10.0.0.10 [last] [SCOPED]
@@ -15147,6 +21567,12 @@ Old routes ('test10') = <IPv4RouteList[9]> = {
  6. Net 10.0.0.1/32 Ifp en0 Ifa 10.0.0.10 [last] [SCOPED]
  7. Net 192.168.2.0/24 Ifp fw0 Ifa 192.168.2.30
  8. Net 192.168.2.1/32 Ifp fw0 Ifa 192.168.2.30
+ 9. Net 224.0.0.0/4 Ifp en1 Ifa 10.0.0.20
+10. Net 224.0.0.0/4 Ifp fw0 Ifa 192.168.2.30 [SCOPED]
+11. Net 224.0.0.0/4 Ifp en0 Ifa 10.0.0.10 [last] [SCOPED]
+12. Net 255.255.255.255/32 Ifp en1 Ifa 10.0.0.20
+13. Net 255.255.255.255/32 Ifp fw0 Ifa 192.168.2.30 [SCOPED]
+14. Net 255.255.255.255/32 Ifp en0 Ifa 10.0.0.10 [last] [SCOPED]
 }
 Add new[5]: Net 10.0.0.1/32 Ifp en1 Ifa 10.0.0.20
 Add new[0]: Net 0.0.0.0/0 Gate 10.0.0.1 Ifp en1 Ifa 10.0.0.20
@@ -15157,7 +21583,13 @@ Add new[2]: Net 0.0.0.0/0 Gate 10.0.0.1 Ifp en0 Ifa 10.0.0.10 [last] [SCOPED]
 Add new[3]: Net 10.0.0.0/24 Ifp en1 Ifa 10.0.0.20
 Add new[4]: Net 10.0.0.0/24 Ifp en0 Ifa 10.0.0.10 [last] [SCOPED]
 Add new[7]: Net 192.168.2.0/24 Ifp fw0 Ifa 192.168.2.30
-New Routes ('test18') = <IPv4RouteList[14]> = {
+Add new[9]: Net 224.0.0.0/4 Ifp en1 Ifa 10.0.0.20
+Add new[10]: Net 224.0.0.0/4 Ifp fw0 Ifa 192.168.2.30 [SCOPED]
+Add new[11]: Net 224.0.0.0/4 Ifp en0 Ifa 10.0.0.10 [last] [SCOPED]
+Add new[12]: Net 255.255.255.255/32 Ifp en1 Ifa 10.0.0.20
+Add new[13]: Net 255.255.255.255/32 Ifp fw0 Ifa 192.168.2.30 [SCOPED]
+Add new[14]: Net 255.255.255.255/32 Ifp en0 Ifa 10.0.0.10 [last] [SCOPED]
+New Routes ('test18') = <IPv4RouteList[16]> = {
  0. Net 0.0.0.0/0 Gate 192.168.130.1 Ifp en0 Ifa 192.168.130.16
  1. Host 1.1.1.1 Gate 1.1.1.2 Ifp en0 Ifa 192.168.130.16
  2. Host 1.1.1.2 Gate 1.1.1.3 Ifp en0 Ifa 192.168.130.16
@@ -15172,6 +21604,8 @@ New Routes ('test18') = <IPv4RouteList[14]> = {
 11. Host 1.1.1.11 Gate 1.1.1.1 Ifp en0 Ifa 192.168.130.16
 12. Net 192.168.130.0/24 Ifp en0 Ifa 192.168.130.16
 13. Net 192.168.130.1/32 Ifp en0 Ifa 192.168.130.16
+14. Net 224.0.0.0/4 Ifp en0 Ifa 192.168.130.16
+15. Net 255.255.255.255/32 Ifp en0 Ifa 192.168.130.16
 }
 Remove old[0]: Net 0.0.0.0/0 Gate 10.0.0.1 Ifp en1 Ifa 10.0.0.20
 Remove old[1]: Net 0.0.0.0/0 Gate 192.168.2.1 Ifp fw0 Ifa 192.168.2.30 [SCOPED]
@@ -15182,24 +21616,32 @@ Remove old[5]: Net 10.0.0.1/32 Ifp en1 Ifa 10.0.0.20
 Remove old[6]: Net 10.0.0.1/32 Ifp en0 Ifa 10.0.0.10 [last] [SCOPED]
 Remove old[7]: Net 192.168.2.0/24 Ifp fw0 Ifa 192.168.2.30
 Remove old[8]: Net 192.168.2.1/32 Ifp fw0 Ifa 192.168.2.30
+Remove old[9]: Net 224.0.0.0/4 Ifp en1 Ifa 10.0.0.20
+Remove old[10]: Net 224.0.0.0/4 Ifp fw0 Ifa 192.168.2.30 [SCOPED]
+Remove old[11]: Net 224.0.0.0/4 Ifp en0 Ifa 10.0.0.10 [last] [SCOPED]
+Remove old[12]: Net 255.255.255.255/32 Ifp en1 Ifa 10.0.0.20
+Remove old[13]: Net 255.255.255.255/32 Ifp fw0 Ifa 192.168.2.30 [SCOPED]
+Remove old[14]: Net 255.255.255.255/32 Ifp en0 Ifa 10.0.0.10 [last] [SCOPED]
 Add new[13]: Net 192.168.130.1/32 Ifp en0 Ifa 192.168.130.16
 Add new[0]: Net 0.0.0.0/0 Gate 192.168.130.1 Ifp en0 Ifa 192.168.130.16
-IPMonitor RouteProcess: routing loop detected, not adding: Host 1.1.1.11 Gate 1.1.1.1 Ifp en0 Ifa 192.168.130.16
-IPMonitor RouteProcess: failed to add: Host 1.1.1.10 Gate 1.1.1.11 Ifp en0 Ifa 192.168.130.16
-IPMonitor RouteProcess: failed to add: Host 1.1.1.9 Gate 1.1.1.10 Ifp en0 Ifa 192.168.130.16
-IPMonitor RouteProcess: failed to add: Host 1.1.1.8 Gate 1.1.1.9 Ifp en0 Ifa 192.168.130.16
-IPMonitor RouteProcess: failed to add: Host 1.1.1.7 Gate 1.1.1.8 Ifp en0 Ifa 192.168.130.16
-IPMonitor RouteProcess: failed to add: Host 1.1.1.6 Gate 1.1.1.7 Ifp en0 Ifa 192.168.130.16
-IPMonitor RouteProcess: failed to add: Host 1.1.1.5 Gate 1.1.1.6 Ifp en0 Ifa 192.168.130.16
-IPMonitor RouteProcess: failed to add: Host 1.1.1.4 Gate 1.1.1.5 Ifp en0 Ifa 192.168.130.16
-IPMonitor RouteProcess: failed to add: Host 1.1.1.3 Gate 1.1.1.4 Ifp en0 Ifa 192.168.130.16
-IPMonitor RouteProcess: failed to add: Host 1.1.1.2 Gate 1.1.1.3 Ifp en0 Ifa 192.168.130.16
-IPMonitor RouteProcess: failed to add: Host 1.1.1.1 Gate 1.1.1.2 Ifp en0 Ifa 192.168.130.16
+routing loop detected, not adding: Host 1.1.1.11 Gate 1.1.1.1 Ifp en0 Ifa 192.168.130.16
+failed to add: Host 1.1.1.10 Gate 1.1.1.11 Ifp en0 Ifa 192.168.130.16
+failed to add: Host 1.1.1.9 Gate 1.1.1.10 Ifp en0 Ifa 192.168.130.16
+failed to add: Host 1.1.1.8 Gate 1.1.1.9 Ifp en0 Ifa 192.168.130.16
+failed to add: Host 1.1.1.7 Gate 1.1.1.8 Ifp en0 Ifa 192.168.130.16
+failed to add: Host 1.1.1.6 Gate 1.1.1.7 Ifp en0 Ifa 192.168.130.16
+failed to add: Host 1.1.1.5 Gate 1.1.1.6 Ifp en0 Ifa 192.168.130.16
+failed to add: Host 1.1.1.4 Gate 1.1.1.5 Ifp en0 Ifa 192.168.130.16
+failed to add: Host 1.1.1.3 Gate 1.1.1.4 Ifp en0 Ifa 192.168.130.16
+failed to add: Host 1.1.1.2 Gate 1.1.1.3 Ifp en0 Ifa 192.168.130.16
+failed to add: Host 1.1.1.1 Gate 1.1.1.2 Ifp en0 Ifa 192.168.130.16
 Add new[12]: Net 192.168.130.0/24 Ifp en0 Ifa 192.168.130.16
+Add new[14]: Net 224.0.0.0/4 Ifp en0 Ifa 192.168.130.16
+Add new[15]: Net 255.255.255.255/32 Ifp en0 Ifa 192.168.130.16
 =================> Apply 'test10', 'test18' End <=================
 
 =================> Apply 'test18', 'test10' Begin <=================
-Old routes ('test18') = <IPv4RouteList[14]> = {
+Old routes ('test18') = <IPv4RouteList[16]> = {
  0. Net 0.0.0.0/0 Gate 192.168.130.1 Ifp en0 Ifa 192.168.130.16
  1. Host 1.1.1.1 Gate 1.1.1.2 Ifp en0 Ifa 192.168.130.16
  2. Host 1.1.1.2 Gate 1.1.1.3 Ifp en0 Ifa 192.168.130.16
@@ -15214,22 +21656,26 @@ Old routes ('test18') = <IPv4RouteList[14]> = {
 11. Host 1.1.1.11 Gate 1.1.1.1 Ifp en0 Ifa 192.168.130.16
 12. Net 192.168.130.0/24 Ifp en0 Ifa 192.168.130.16
 13. Net 192.168.130.1/32 Ifp en0 Ifa 192.168.130.16
+14. Net 224.0.0.0/4 Ifp en0 Ifa 192.168.130.16
+15. Net 255.255.255.255/32 Ifp en0 Ifa 192.168.130.16
 }
 Add new[13]: Net 192.168.130.1/32 Ifp en0 Ifa 192.168.130.16
 Add new[0]: Net 0.0.0.0/0 Gate 192.168.130.1 Ifp en0 Ifa 192.168.130.16
-IPMonitor RouteProcess: routing loop detected, not adding: Host 1.1.1.11 Gate 1.1.1.1 Ifp en0 Ifa 192.168.130.16
-IPMonitor RouteProcess: failed to add: Host 1.1.1.10 Gate 1.1.1.11 Ifp en0 Ifa 192.168.130.16
-IPMonitor RouteProcess: failed to add: Host 1.1.1.9 Gate 1.1.1.10 Ifp en0 Ifa 192.168.130.16
-IPMonitor RouteProcess: failed to add: Host 1.1.1.8 Gate 1.1.1.9 Ifp en0 Ifa 192.168.130.16
-IPMonitor RouteProcess: failed to add: Host 1.1.1.7 Gate 1.1.1.8 Ifp en0 Ifa 192.168.130.16
-IPMonitor RouteProcess: failed to add: Host 1.1.1.6 Gate 1.1.1.7 Ifp en0 Ifa 192.168.130.16
-IPMonitor RouteProcess: failed to add: Host 1.1.1.5 Gate 1.1.1.6 Ifp en0 Ifa 192.168.130.16
-IPMonitor RouteProcess: failed to add: Host 1.1.1.4 Gate 1.1.1.5 Ifp en0 Ifa 192.168.130.16
-IPMonitor RouteProcess: failed to add: Host 1.1.1.3 Gate 1.1.1.4 Ifp en0 Ifa 192.168.130.16
-IPMonitor RouteProcess: failed to add: Host 1.1.1.2 Gate 1.1.1.3 Ifp en0 Ifa 192.168.130.16
-IPMonitor RouteProcess: failed to add: Host 1.1.1.1 Gate 1.1.1.2 Ifp en0 Ifa 192.168.130.16
+routing loop detected, not adding: Host 1.1.1.11 Gate 1.1.1.1 Ifp en0 Ifa 192.168.130.16
+failed to add: Host 1.1.1.10 Gate 1.1.1.11 Ifp en0 Ifa 192.168.130.16
+failed to add: Host 1.1.1.9 Gate 1.1.1.10 Ifp en0 Ifa 192.168.130.16
+failed to add: Host 1.1.1.8 Gate 1.1.1.9 Ifp en0 Ifa 192.168.130.16
+failed to add: Host 1.1.1.7 Gate 1.1.1.8 Ifp en0 Ifa 192.168.130.16
+failed to add: Host 1.1.1.6 Gate 1.1.1.7 Ifp en0 Ifa 192.168.130.16
+failed to add: Host 1.1.1.5 Gate 1.1.1.6 Ifp en0 Ifa 192.168.130.16
+failed to add: Host 1.1.1.4 Gate 1.1.1.5 Ifp en0 Ifa 192.168.130.16
+failed to add: Host 1.1.1.3 Gate 1.1.1.4 Ifp en0 Ifa 192.168.130.16
+failed to add: Host 1.1.1.2 Gate 1.1.1.3 Ifp en0 Ifa 192.168.130.16
+failed to add: Host 1.1.1.1 Gate 1.1.1.2 Ifp en0 Ifa 192.168.130.16
 Add new[12]: Net 192.168.130.0/24 Ifp en0 Ifa 192.168.130.16
-New Routes ('test10') = <IPv4RouteList[9]> = {
+Add new[14]: Net 224.0.0.0/4 Ifp en0 Ifa 192.168.130.16
+Add new[15]: Net 255.255.255.255/32 Ifp en0 Ifa 192.168.130.16
+New Routes ('test10') = <IPv4RouteList[15]> = {
  0. Net 0.0.0.0/0 Gate 10.0.0.1 Ifp en1 Ifa 10.0.0.20
  1. Net 0.0.0.0/0 Gate 192.168.2.1 Ifp fw0 Ifa 192.168.2.30 [SCOPED]
  2. Net 0.0.0.0/0 Gate 10.0.0.1 Ifp en0 Ifa 10.0.0.10 [last] [SCOPED]
@@ -15239,10 +21685,18 @@ New Routes ('test10') = <IPv4RouteList[9]> = {
  6. Net 10.0.0.1/32 Ifp en0 Ifa 10.0.0.10 [last] [SCOPED]
  7. Net 192.168.2.0/24 Ifp fw0 Ifa 192.168.2.30
  8. Net 192.168.2.1/32 Ifp fw0 Ifa 192.168.2.30
+ 9. Net 224.0.0.0/4 Ifp en1 Ifa 10.0.0.20
+10. Net 224.0.0.0/4 Ifp fw0 Ifa 192.168.2.30 [SCOPED]
+11. Net 224.0.0.0/4 Ifp en0 Ifa 10.0.0.10 [last] [SCOPED]
+12. Net 255.255.255.255/32 Ifp en1 Ifa 10.0.0.20
+13. Net 255.255.255.255/32 Ifp fw0 Ifa 192.168.2.30 [SCOPED]
+14. Net 255.255.255.255/32 Ifp en0 Ifa 10.0.0.10 [last] [SCOPED]
 }
 Remove old[0]: Net 0.0.0.0/0 Gate 192.168.130.1 Ifp en0 Ifa 192.168.130.16
 Remove old[12]: Net 192.168.130.0/24 Ifp en0 Ifa 192.168.130.16
 Remove old[13]: Net 192.168.130.1/32 Ifp en0 Ifa 192.168.130.16
+Remove old[14]: Net 224.0.0.0/4 Ifp en0 Ifa 192.168.130.16
+Remove old[15]: Net 255.255.255.255/32 Ifp en0 Ifa 192.168.130.16
 Add new[5]: Net 10.0.0.1/32 Ifp en1 Ifa 10.0.0.20
 Add new[0]: Net 0.0.0.0/0 Gate 10.0.0.1 Ifp en1 Ifa 10.0.0.20
 Add new[8]: Net 192.168.2.1/32 Ifp fw0 Ifa 192.168.2.30
@@ -15252,10 +21706,16 @@ Add new[2]: Net 0.0.0.0/0 Gate 10.0.0.1 Ifp en0 Ifa 10.0.0.10 [last] [SCOPED]
 Add new[3]: Net 10.0.0.0/24 Ifp en1 Ifa 10.0.0.20
 Add new[4]: Net 10.0.0.0/24 Ifp en0 Ifa 10.0.0.10 [last] [SCOPED]
 Add new[7]: Net 192.168.2.0/24 Ifp fw0 Ifa 192.168.2.30
+Add new[9]: Net 224.0.0.0/4 Ifp en1 Ifa 10.0.0.20
+Add new[10]: Net 224.0.0.0/4 Ifp fw0 Ifa 192.168.2.30 [SCOPED]
+Add new[11]: Net 224.0.0.0/4 Ifp en0 Ifa 10.0.0.10 [last] [SCOPED]
+Add new[12]: Net 255.255.255.255/32 Ifp en1 Ifa 10.0.0.20
+Add new[13]: Net 255.255.255.255/32 Ifp fw0 Ifa 192.168.2.30 [SCOPED]
+Add new[14]: Net 255.255.255.255/32 Ifp en0 Ifa 10.0.0.10 [last] [SCOPED]
 =================> Apply 'test18', 'test10' End <=================
 
 =================> Apply 'test11', 'test12' Begin <=================
-Old routes ('test11') = <IPv4RouteList[9]> = {
+Old routes ('test11') = <IPv4RouteList[15]> = {
  0. Net 0.0.0.0/0 Gate 10.0.0.1 Ifp en1 Ifa 10.0.0.20
  1. Net 0.0.0.0/0 Gate 192.168.2.1 Ifp fw0 Ifa 192.168.2.30 [SCOPED]
  2. Net 0.0.0.0/0 Gate 10.0.0.1 Ifp en0 Ifa 10.0.0.10 [never] [SCOPED]
@@ -15265,6 +21725,12 @@ Old routes ('test11') = <IPv4RouteList[9]> = {
  6. Net 10.0.0.1/32 Ifp en0 Ifa 10.0.0.10 [last] [SCOPED]
  7. Net 192.168.2.0/24 Ifp fw0 Ifa 192.168.2.30
  8. Net 192.168.2.1/32 Ifp fw0 Ifa 192.168.2.30
+ 9. Net 224.0.0.0/4 Ifp en1 Ifa 10.0.0.20
+10. Net 224.0.0.0/4 Ifp fw0 Ifa 192.168.2.30 [SCOPED]
+11. Net 224.0.0.0/4 Ifp en0 Ifa 10.0.0.10 [last] [SCOPED]
+12. Net 255.255.255.255/32 Ifp en1 Ifa 10.0.0.20
+13. Net 255.255.255.255/32 Ifp fw0 Ifa 192.168.2.30 [SCOPED]
+14. Net 255.255.255.255/32 Ifp en0 Ifa 10.0.0.10 [last] [SCOPED]
 }
 Add new[5]: Net 10.0.0.1/32 Ifp en1 Ifa 10.0.0.20
 Add new[0]: Net 0.0.0.0/0 Gate 10.0.0.1 Ifp en1 Ifa 10.0.0.20
@@ -15275,13 +21741,23 @@ Add new[2]: Net 0.0.0.0/0 Gate 10.0.0.1 Ifp en0 Ifa 10.0.0.10 [never] [SCOPED]
 Add new[3]: Net 10.0.0.0/24 Ifp en1 Ifa 10.0.0.20
 Add new[4]: Net 10.0.0.0/24 Ifp en0 Ifa 10.0.0.10 [last] [SCOPED]
 Add new[7]: Net 192.168.2.0/24 Ifp fw0 Ifa 192.168.2.30
-New Routes ('test12') = <IPv4RouteList[6]> = {
+Add new[9]: Net 224.0.0.0/4 Ifp en1 Ifa 10.0.0.20
+Add new[10]: Net 224.0.0.0/4 Ifp fw0 Ifa 192.168.2.30 [SCOPED]
+Add new[11]: Net 224.0.0.0/4 Ifp en0 Ifa 10.0.0.10 [last] [SCOPED]
+Add new[12]: Net 255.255.255.255/32 Ifp en1 Ifa 10.0.0.20
+Add new[13]: Net 255.255.255.255/32 Ifp fw0 Ifa 192.168.2.30 [SCOPED]
+Add new[14]: Net 255.255.255.255/32 Ifp en0 Ifa 10.0.0.10 [last] [SCOPED]
+New Routes ('test12') = <IPv4RouteList[10]> = {
  0. Net 0.0.0.0/0 Gate 10.0.0.1 Ifp en0 Ifa 10.0.0.10
  1. Net 0.0.0.0/0 Gate 10.0.0.1 Ifp en1 Ifa 10.0.0.20 [SCOPED]
  2. Net 10.0.0.0/24 Ifp en0 Ifa 10.0.0.10
  3. Net 10.0.0.0/24 Ifp en1 Ifa 10.0.0.20 [SCOPED]
  4. Net 10.0.0.1/32 Ifp en0 Ifa 10.0.0.10
  5. Net 10.0.0.1/32 Ifp en1 Ifa 10.0.0.20 [SCOPED]
+ 6. Net 224.0.0.0/4 Ifp en0 Ifa 10.0.0.10
+ 7. Net 224.0.0.0/4 Ifp en1 Ifa 10.0.0.20 [SCOPED]
+ 8. Net 255.255.255.255/32 Ifp en0 Ifa 10.0.0.10
+ 9. Net 255.255.255.255/32 Ifp en1 Ifa 10.0.0.20 [SCOPED]
 }
 Remove old[0]: Net 0.0.0.0/0 Gate 10.0.0.1 Ifp en1 Ifa 10.0.0.20
 Remove old[1]: Net 0.0.0.0/0 Gate 192.168.2.1 Ifp fw0 Ifa 192.168.2.30 [SCOPED]
@@ -15292,22 +21768,36 @@ Remove old[5]: Net 10.0.0.1/32 Ifp en1 Ifa 10.0.0.20
 Remove old[6]: Net 10.0.0.1/32 Ifp en0 Ifa 10.0.0.10 [last] [SCOPED]
 Remove old[7]: Net 192.168.2.0/24 Ifp fw0 Ifa 192.168.2.30
 Remove old[8]: Net 192.168.2.1/32 Ifp fw0 Ifa 192.168.2.30
+Remove old[9]: Net 224.0.0.0/4 Ifp en1 Ifa 10.0.0.20
+Remove old[10]: Net 224.0.0.0/4 Ifp fw0 Ifa 192.168.2.30 [SCOPED]
+Remove old[11]: Net 224.0.0.0/4 Ifp en0 Ifa 10.0.0.10 [last] [SCOPED]
+Remove old[12]: Net 255.255.255.255/32 Ifp en1 Ifa 10.0.0.20
+Remove old[13]: Net 255.255.255.255/32 Ifp fw0 Ifa 192.168.2.30 [SCOPED]
+Remove old[14]: Net 255.255.255.255/32 Ifp en0 Ifa 10.0.0.10 [last] [SCOPED]
 Add new[4]: Net 10.0.0.1/32 Ifp en0 Ifa 10.0.0.10
 Add new[0]: Net 0.0.0.0/0 Gate 10.0.0.1 Ifp en0 Ifa 10.0.0.10
 Add new[5]: Net 10.0.0.1/32 Ifp en1 Ifa 10.0.0.20 [SCOPED]
 Add new[1]: Net 0.0.0.0/0 Gate 10.0.0.1 Ifp en1 Ifa 10.0.0.20 [SCOPED]
 Add new[2]: Net 10.0.0.0/24 Ifp en0 Ifa 10.0.0.10
 Add new[3]: Net 10.0.0.0/24 Ifp en1 Ifa 10.0.0.20 [SCOPED]
+Add new[6]: Net 224.0.0.0/4 Ifp en0 Ifa 10.0.0.10
+Add new[7]: Net 224.0.0.0/4 Ifp en1 Ifa 10.0.0.20 [SCOPED]
+Add new[8]: Net 255.255.255.255/32 Ifp en0 Ifa 10.0.0.10
+Add new[9]: Net 255.255.255.255/32 Ifp en1 Ifa 10.0.0.20 [SCOPED]
 =================> Apply 'test11', 'test12' End <=================
 
 =================> Apply 'test12', 'test11' Begin <=================
-Old routes ('test12') = <IPv4RouteList[6]> = {
+Old routes ('test12') = <IPv4RouteList[10]> = {
  0. Net 0.0.0.0/0 Gate 10.0.0.1 Ifp en0 Ifa 10.0.0.10
  1. Net 0.0.0.0/0 Gate 10.0.0.1 Ifp en1 Ifa 10.0.0.20 [SCOPED]
  2. Net 10.0.0.0/24 Ifp en0 Ifa 10.0.0.10
  3. Net 10.0.0.0/24 Ifp en1 Ifa 10.0.0.20 [SCOPED]
  4. Net 10.0.0.1/32 Ifp en0 Ifa 10.0.0.10
  5. Net 10.0.0.1/32 Ifp en1 Ifa 10.0.0.20 [SCOPED]
+ 6. Net 224.0.0.0/4 Ifp en0 Ifa 10.0.0.10
+ 7. Net 224.0.0.0/4 Ifp en1 Ifa 10.0.0.20 [SCOPED]
+ 8. Net 255.255.255.255/32 Ifp en0 Ifa 10.0.0.10
+ 9. Net 255.255.255.255/32 Ifp en1 Ifa 10.0.0.20 [SCOPED]
 }
 Add new[4]: Net 10.0.0.1/32 Ifp en0 Ifa 10.0.0.10
 Add new[0]: Net 0.0.0.0/0 Gate 10.0.0.1 Ifp en0 Ifa 10.0.0.10
@@ -15315,7 +21805,11 @@ Add new[5]: Net 10.0.0.1/32 Ifp en1 Ifa 10.0.0.20 [SCOPED]
 Add new[1]: Net 0.0.0.0/0 Gate 10.0.0.1 Ifp en1 Ifa 10.0.0.20 [SCOPED]
 Add new[2]: Net 10.0.0.0/24 Ifp en0 Ifa 10.0.0.10
 Add new[3]: Net 10.0.0.0/24 Ifp en1 Ifa 10.0.0.20 [SCOPED]
-New Routes ('test11') = <IPv4RouteList[9]> = {
+Add new[6]: Net 224.0.0.0/4 Ifp en0 Ifa 10.0.0.10
+Add new[7]: Net 224.0.0.0/4 Ifp en1 Ifa 10.0.0.20 [SCOPED]
+Add new[8]: Net 255.255.255.255/32 Ifp en0 Ifa 10.0.0.10
+Add new[9]: Net 255.255.255.255/32 Ifp en1 Ifa 10.0.0.20 [SCOPED]
+New Routes ('test11') = <IPv4RouteList[15]> = {
  0. Net 0.0.0.0/0 Gate 10.0.0.1 Ifp en1 Ifa 10.0.0.20
  1. Net 0.0.0.0/0 Gate 192.168.2.1 Ifp fw0 Ifa 192.168.2.30 [SCOPED]
  2. Net 0.0.0.0/0 Gate 10.0.0.1 Ifp en0 Ifa 10.0.0.10 [never] [SCOPED]
@@ -15325,6 +21819,12 @@ New Routes ('test11') = <IPv4RouteList[9]> = {
  6. Net 10.0.0.1/32 Ifp en0 Ifa 10.0.0.10 [last] [SCOPED]
  7. Net 192.168.2.0/24 Ifp fw0 Ifa 192.168.2.30
  8. Net 192.168.2.1/32 Ifp fw0 Ifa 192.168.2.30
+ 9. Net 224.0.0.0/4 Ifp en1 Ifa 10.0.0.20
+10. Net 224.0.0.0/4 Ifp fw0 Ifa 192.168.2.30 [SCOPED]
+11. Net 224.0.0.0/4 Ifp en0 Ifa 10.0.0.10 [last] [SCOPED]
+12. Net 255.255.255.255/32 Ifp en1 Ifa 10.0.0.20
+13. Net 255.255.255.255/32 Ifp fw0 Ifa 192.168.2.30 [SCOPED]
+14. Net 255.255.255.255/32 Ifp en0 Ifa 10.0.0.10 [last] [SCOPED]
 }
 Remove old[0]: Net 0.0.0.0/0 Gate 10.0.0.1 Ifp en0 Ifa 10.0.0.10
 Remove old[1]: Net 0.0.0.0/0 Gate 10.0.0.1 Ifp en1 Ifa 10.0.0.20 [SCOPED]
@@ -15332,6 +21832,10 @@ Remove old[2]: Net 10.0.0.0/24 Ifp en0 Ifa 10.0.0.10
 Remove old[3]: Net 10.0.0.0/24 Ifp en1 Ifa 10.0.0.20 [SCOPED]
 Remove old[4]: Net 10.0.0.1/32 Ifp en0 Ifa 10.0.0.10
 Remove old[5]: Net 10.0.0.1/32 Ifp en1 Ifa 10.0.0.20 [SCOPED]
+Remove old[6]: Net 224.0.0.0/4 Ifp en0 Ifa 10.0.0.10
+Remove old[7]: Net 224.0.0.0/4 Ifp en1 Ifa 10.0.0.20 [SCOPED]
+Remove old[8]: Net 255.255.255.255/32 Ifp en0 Ifa 10.0.0.10
+Remove old[9]: Net 255.255.255.255/32 Ifp en1 Ifa 10.0.0.20 [SCOPED]
 Add new[5]: Net 10.0.0.1/32 Ifp en1 Ifa 10.0.0.20
 Add new[0]: Net 0.0.0.0/0 Gate 10.0.0.1 Ifp en1 Ifa 10.0.0.20
 Add new[8]: Net 192.168.2.1/32 Ifp fw0 Ifa 192.168.2.30
@@ -15341,10 +21845,16 @@ Add new[2]: Net 0.0.0.0/0 Gate 10.0.0.1 Ifp en0 Ifa 10.0.0.10 [never] [SCOPED]
 Add new[3]: Net 10.0.0.0/24 Ifp en1 Ifa 10.0.0.20
 Add new[4]: Net 10.0.0.0/24 Ifp en0 Ifa 10.0.0.10 [last] [SCOPED]
 Add new[7]: Net 192.168.2.0/24 Ifp fw0 Ifa 192.168.2.30
+Add new[9]: Net 224.0.0.0/4 Ifp en1 Ifa 10.0.0.20
+Add new[10]: Net 224.0.0.0/4 Ifp fw0 Ifa 192.168.2.30 [SCOPED]
+Add new[11]: Net 224.0.0.0/4 Ifp en0 Ifa 10.0.0.10 [last] [SCOPED]
+Add new[12]: Net 255.255.255.255/32 Ifp en1 Ifa 10.0.0.20
+Add new[13]: Net 255.255.255.255/32 Ifp fw0 Ifa 192.168.2.30 [SCOPED]
+Add new[14]: Net 255.255.255.255/32 Ifp en0 Ifa 10.0.0.10 [last] [SCOPED]
 =================> Apply 'test12', 'test11' End <=================
 
 =================> Apply 'test11', 'test13' Begin <=================
-Old routes ('test11') = <IPv4RouteList[9]> = {
+Old routes ('test11') = <IPv4RouteList[15]> = {
  0. Net 0.0.0.0/0 Gate 10.0.0.1 Ifp en1 Ifa 10.0.0.20
  1. Net 0.0.0.0/0 Gate 192.168.2.1 Ifp fw0 Ifa 192.168.2.30 [SCOPED]
  2. Net 0.0.0.0/0 Gate 10.0.0.1 Ifp en0 Ifa 10.0.0.10 [never] [SCOPED]
@@ -15354,6 +21864,12 @@ Old routes ('test11') = <IPv4RouteList[9]> = {
  6. Net 10.0.0.1/32 Ifp en0 Ifa 10.0.0.10 [last] [SCOPED]
  7. Net 192.168.2.0/24 Ifp fw0 Ifa 192.168.2.30
  8. Net 192.168.2.1/32 Ifp fw0 Ifa 192.168.2.30
+ 9. Net 224.0.0.0/4 Ifp en1 Ifa 10.0.0.20
+10. Net 224.0.0.0/4 Ifp fw0 Ifa 192.168.2.30 [SCOPED]
+11. Net 224.0.0.0/4 Ifp en0 Ifa 10.0.0.10 [last] [SCOPED]
+12. Net 255.255.255.255/32 Ifp en1 Ifa 10.0.0.20
+13. Net 255.255.255.255/32 Ifp fw0 Ifa 192.168.2.30 [SCOPED]
+14. Net 255.255.255.255/32 Ifp en0 Ifa 10.0.0.10 [last] [SCOPED]
 }
 Add new[5]: Net 10.0.0.1/32 Ifp en1 Ifa 10.0.0.20
 Add new[0]: Net 0.0.0.0/0 Gate 10.0.0.1 Ifp en1 Ifa 10.0.0.20
@@ -15364,13 +21880,23 @@ Add new[2]: Net 0.0.0.0/0 Gate 10.0.0.1 Ifp en0 Ifa 10.0.0.10 [never] [SCOPED]
 Add new[3]: Net 10.0.0.0/24 Ifp en1 Ifa 10.0.0.20
 Add new[4]: Net 10.0.0.0/24 Ifp en0 Ifa 10.0.0.10 [last] [SCOPED]
 Add new[7]: Net 192.168.2.0/24 Ifp fw0 Ifa 192.168.2.30
-New Routes ('test13') = <IPv4RouteList[6]> = {
+Add new[9]: Net 224.0.0.0/4 Ifp en1 Ifa 10.0.0.20
+Add new[10]: Net 224.0.0.0/4 Ifp fw0 Ifa 192.168.2.30 [SCOPED]
+Add new[11]: Net 224.0.0.0/4 Ifp en0 Ifa 10.0.0.10 [last] [SCOPED]
+Add new[12]: Net 255.255.255.255/32 Ifp en1 Ifa 10.0.0.20
+Add new[13]: Net 255.255.255.255/32 Ifp fw0 Ifa 192.168.2.30 [SCOPED]
+Add new[14]: Net 255.255.255.255/32 Ifp en0 Ifa 10.0.0.10 [last] [SCOPED]
+New Routes ('test13') = <IPv4RouteList[10]> = {
  0. Net 0.0.0.0/0 Gate 10.0.0.1 Ifp en0 Ifa 10.0.0.10
  1. Net 0.0.0.0/0 Gate 10.0.0.1 Ifp en1 Ifa 10.0.0.20 [never] [SCOPED]
  2. Net 10.0.0.0/24 Ifp en0 Ifa 10.0.0.10
  3. Net 10.0.0.0/24 Ifp en1 Ifa 10.0.0.20 [last] [SCOPED]
  4. Net 10.0.0.1/32 Ifp en0 Ifa 10.0.0.10
  5. Net 10.0.0.1/32 Ifp en1 Ifa 10.0.0.20 [last] [SCOPED]
+ 6. Net 224.0.0.0/4 Ifp en0 Ifa 10.0.0.10
+ 7. Net 224.0.0.0/4 Ifp en1 Ifa 10.0.0.20 [last] [SCOPED]
+ 8. Net 255.255.255.255/32 Ifp en0 Ifa 10.0.0.10
+ 9. Net 255.255.255.255/32 Ifp en1 Ifa 10.0.0.20 [last] [SCOPED]
 }
 Remove old[0]: Net 0.0.0.0/0 Gate 10.0.0.1 Ifp en1 Ifa 10.0.0.20
 Remove old[1]: Net 0.0.0.0/0 Gate 192.168.2.1 Ifp fw0 Ifa 192.168.2.30 [SCOPED]
@@ -15381,22 +21907,36 @@ Remove old[5]: Net 10.0.0.1/32 Ifp en1 Ifa 10.0.0.20
 Remove old[6]: Net 10.0.0.1/32 Ifp en0 Ifa 10.0.0.10 [last] [SCOPED]
 Remove old[7]: Net 192.168.2.0/24 Ifp fw0 Ifa 192.168.2.30
 Remove old[8]: Net 192.168.2.1/32 Ifp fw0 Ifa 192.168.2.30
+Remove old[9]: Net 224.0.0.0/4 Ifp en1 Ifa 10.0.0.20
+Remove old[10]: Net 224.0.0.0/4 Ifp fw0 Ifa 192.168.2.30 [SCOPED]
+Remove old[11]: Net 224.0.0.0/4 Ifp en0 Ifa 10.0.0.10 [last] [SCOPED]
+Remove old[12]: Net 255.255.255.255/32 Ifp en1 Ifa 10.0.0.20
+Remove old[13]: Net 255.255.255.255/32 Ifp fw0 Ifa 192.168.2.30 [SCOPED]
+Remove old[14]: Net 255.255.255.255/32 Ifp en0 Ifa 10.0.0.10 [last] [SCOPED]
 Add new[4]: Net 10.0.0.1/32 Ifp en0 Ifa 10.0.0.10
 Add new[0]: Net 0.0.0.0/0 Gate 10.0.0.1 Ifp en0 Ifa 10.0.0.10
 Add new[5]: Net 10.0.0.1/32 Ifp en1 Ifa 10.0.0.20 [last] [SCOPED]
 Add new[1]: Net 0.0.0.0/0 Gate 10.0.0.1 Ifp en1 Ifa 10.0.0.20 [never] [SCOPED]
 Add new[2]: Net 10.0.0.0/24 Ifp en0 Ifa 10.0.0.10
 Add new[3]: Net 10.0.0.0/24 Ifp en1 Ifa 10.0.0.20 [last] [SCOPED]
+Add new[6]: Net 224.0.0.0/4 Ifp en0 Ifa 10.0.0.10
+Add new[7]: Net 224.0.0.0/4 Ifp en1 Ifa 10.0.0.20 [last] [SCOPED]
+Add new[8]: Net 255.255.255.255/32 Ifp en0 Ifa 10.0.0.10
+Add new[9]: Net 255.255.255.255/32 Ifp en1 Ifa 10.0.0.20 [last] [SCOPED]
 =================> Apply 'test11', 'test13' End <=================
 
 =================> Apply 'test13', 'test11' Begin <=================
-Old routes ('test13') = <IPv4RouteList[6]> = {
+Old routes ('test13') = <IPv4RouteList[10]> = {
  0. Net 0.0.0.0/0 Gate 10.0.0.1 Ifp en0 Ifa 10.0.0.10
  1. Net 0.0.0.0/0 Gate 10.0.0.1 Ifp en1 Ifa 10.0.0.20 [never] [SCOPED]
  2. Net 10.0.0.0/24 Ifp en0 Ifa 10.0.0.10
  3. Net 10.0.0.0/24 Ifp en1 Ifa 10.0.0.20 [last] [SCOPED]
  4. Net 10.0.0.1/32 Ifp en0 Ifa 10.0.0.10
  5. Net 10.0.0.1/32 Ifp en1 Ifa 10.0.0.20 [last] [SCOPED]
+ 6. Net 224.0.0.0/4 Ifp en0 Ifa 10.0.0.10
+ 7. Net 224.0.0.0/4 Ifp en1 Ifa 10.0.0.20 [last] [SCOPED]
+ 8. Net 255.255.255.255/32 Ifp en0 Ifa 10.0.0.10
+ 9. Net 255.255.255.255/32 Ifp en1 Ifa 10.0.0.20 [last] [SCOPED]
 }
 Add new[4]: Net 10.0.0.1/32 Ifp en0 Ifa 10.0.0.10
 Add new[0]: Net 0.0.0.0/0 Gate 10.0.0.1 Ifp en0 Ifa 10.0.0.10
@@ -15404,7 +21944,11 @@ Add new[5]: Net 10.0.0.1/32 Ifp en1 Ifa 10.0.0.20 [last] [SCOPED]
 Add new[1]: Net 0.0.0.0/0 Gate 10.0.0.1 Ifp en1 Ifa 10.0.0.20 [never] [SCOPED]
 Add new[2]: Net 10.0.0.0/24 Ifp en0 Ifa 10.0.0.10
 Add new[3]: Net 10.0.0.0/24 Ifp en1 Ifa 10.0.0.20 [last] [SCOPED]
-New Routes ('test11') = <IPv4RouteList[9]> = {
+Add new[6]: Net 224.0.0.0/4 Ifp en0 Ifa 10.0.0.10
+Add new[7]: Net 224.0.0.0/4 Ifp en1 Ifa 10.0.0.20 [last] [SCOPED]
+Add new[8]: Net 255.255.255.255/32 Ifp en0 Ifa 10.0.0.10
+Add new[9]: Net 255.255.255.255/32 Ifp en1 Ifa 10.0.0.20 [last] [SCOPED]
+New Routes ('test11') = <IPv4RouteList[15]> = {
  0. Net 0.0.0.0/0 Gate 10.0.0.1 Ifp en1 Ifa 10.0.0.20
  1. Net 0.0.0.0/0 Gate 192.168.2.1 Ifp fw0 Ifa 192.168.2.30 [SCOPED]
  2. Net 0.0.0.0/0 Gate 10.0.0.1 Ifp en0 Ifa 10.0.0.10 [never] [SCOPED]
@@ -15414,6 +21958,12 @@ New Routes ('test11') = <IPv4RouteList[9]> = {
  6. Net 10.0.0.1/32 Ifp en0 Ifa 10.0.0.10 [last] [SCOPED]
  7. Net 192.168.2.0/24 Ifp fw0 Ifa 192.168.2.30
  8. Net 192.168.2.1/32 Ifp fw0 Ifa 192.168.2.30
+ 9. Net 224.0.0.0/4 Ifp en1 Ifa 10.0.0.20
+10. Net 224.0.0.0/4 Ifp fw0 Ifa 192.168.2.30 [SCOPED]
+11. Net 224.0.0.0/4 Ifp en0 Ifa 10.0.0.10 [last] [SCOPED]
+12. Net 255.255.255.255/32 Ifp en1 Ifa 10.0.0.20
+13. Net 255.255.255.255/32 Ifp fw0 Ifa 192.168.2.30 [SCOPED]
+14. Net 255.255.255.255/32 Ifp en0 Ifa 10.0.0.10 [last] [SCOPED]
 }
 Remove old[0]: Net 0.0.0.0/0 Gate 10.0.0.1 Ifp en0 Ifa 10.0.0.10
 Remove old[1]: Net 0.0.0.0/0 Gate 10.0.0.1 Ifp en1 Ifa 10.0.0.20 [never] [SCOPED]
@@ -15421,6 +21971,10 @@ Remove old[2]: Net 10.0.0.0/24 Ifp en0 Ifa 10.0.0.10
 Remove old[3]: Net 10.0.0.0/24 Ifp en1 Ifa 10.0.0.20 [last] [SCOPED]
 Remove old[4]: Net 10.0.0.1/32 Ifp en0 Ifa 10.0.0.10
 Remove old[5]: Net 10.0.0.1/32 Ifp en1 Ifa 10.0.0.20 [last] [SCOPED]
+Remove old[6]: Net 224.0.0.0/4 Ifp en0 Ifa 10.0.0.10
+Remove old[7]: Net 224.0.0.0/4 Ifp en1 Ifa 10.0.0.20 [last] [SCOPED]
+Remove old[8]: Net 255.255.255.255/32 Ifp en0 Ifa 10.0.0.10
+Remove old[9]: Net 255.255.255.255/32 Ifp en1 Ifa 10.0.0.20 [last] [SCOPED]
 Add new[5]: Net 10.0.0.1/32 Ifp en1 Ifa 10.0.0.20
 Add new[0]: Net 0.0.0.0/0 Gate 10.0.0.1 Ifp en1 Ifa 10.0.0.20
 Add new[8]: Net 192.168.2.1/32 Ifp fw0 Ifa 192.168.2.30
@@ -15430,10 +21984,16 @@ Add new[2]: Net 0.0.0.0/0 Gate 10.0.0.1 Ifp en0 Ifa 10.0.0.10 [never] [SCOPED]
 Add new[3]: Net 10.0.0.0/24 Ifp en1 Ifa 10.0.0.20
 Add new[4]: Net 10.0.0.0/24 Ifp en0 Ifa 10.0.0.10 [last] [SCOPED]
 Add new[7]: Net 192.168.2.0/24 Ifp fw0 Ifa 192.168.2.30
+Add new[9]: Net 224.0.0.0/4 Ifp en1 Ifa 10.0.0.20
+Add new[10]: Net 224.0.0.0/4 Ifp fw0 Ifa 192.168.2.30 [SCOPED]
+Add new[11]: Net 224.0.0.0/4 Ifp en0 Ifa 10.0.0.10 [last] [SCOPED]
+Add new[12]: Net 255.255.255.255/32 Ifp en1 Ifa 10.0.0.20
+Add new[13]: Net 255.255.255.255/32 Ifp fw0 Ifa 192.168.2.30 [SCOPED]
+Add new[14]: Net 255.255.255.255/32 Ifp en0 Ifa 10.0.0.10 [last] [SCOPED]
 =================> Apply 'test13', 'test11' End <=================
 
 =================> Apply 'test11', 'test14' Begin <=================
-Old routes ('test11') = <IPv4RouteList[9]> = {
+Old routes ('test11') = <IPv4RouteList[15]> = {
  0. Net 0.0.0.0/0 Gate 10.0.0.1 Ifp en1 Ifa 10.0.0.20
  1. Net 0.0.0.0/0 Gate 192.168.2.1 Ifp fw0 Ifa 192.168.2.30 [SCOPED]
  2. Net 0.0.0.0/0 Gate 10.0.0.1 Ifp en0 Ifa 10.0.0.10 [never] [SCOPED]
@@ -15443,6 +22003,12 @@ Old routes ('test11') = <IPv4RouteList[9]> = {
  6. Net 10.0.0.1/32 Ifp en0 Ifa 10.0.0.10 [last] [SCOPED]
  7. Net 192.168.2.0/24 Ifp fw0 Ifa 192.168.2.30
  8. Net 192.168.2.1/32 Ifp fw0 Ifa 192.168.2.30
+ 9. Net 224.0.0.0/4 Ifp en1 Ifa 10.0.0.20
+10. Net 224.0.0.0/4 Ifp fw0 Ifa 192.168.2.30 [SCOPED]
+11. Net 224.0.0.0/4 Ifp en0 Ifa 10.0.0.10 [last] [SCOPED]
+12. Net 255.255.255.255/32 Ifp en1 Ifa 10.0.0.20
+13. Net 255.255.255.255/32 Ifp fw0 Ifa 192.168.2.30 [SCOPED]
+14. Net 255.255.255.255/32 Ifp en0 Ifa 10.0.0.10 [last] [SCOPED]
 }
 Add new[5]: Net 10.0.0.1/32 Ifp en1 Ifa 10.0.0.20
 Add new[0]: Net 0.0.0.0/0 Gate 10.0.0.1 Ifp en1 Ifa 10.0.0.20
@@ -15453,10 +22019,18 @@ Add new[2]: Net 0.0.0.0/0 Gate 10.0.0.1 Ifp en0 Ifa 10.0.0.10 [never] [SCOPED]
 Add new[3]: Net 10.0.0.0/24 Ifp en1 Ifa 10.0.0.20
 Add new[4]: Net 10.0.0.0/24 Ifp en0 Ifa 10.0.0.10 [last] [SCOPED]
 Add new[7]: Net 192.168.2.0/24 Ifp fw0 Ifa 192.168.2.30
-New Routes ('test14') = <IPv4RouteList[3]> = {
+Add new[9]: Net 224.0.0.0/4 Ifp en1 Ifa 10.0.0.20
+Add new[10]: Net 224.0.0.0/4 Ifp fw0 Ifa 192.168.2.30 [SCOPED]
+Add new[11]: Net 224.0.0.0/4 Ifp en0 Ifa 10.0.0.10 [last] [SCOPED]
+Add new[12]: Net 255.255.255.255/32 Ifp en1 Ifa 10.0.0.20
+Add new[13]: Net 255.255.255.255/32 Ifp fw0 Ifa 192.168.2.30 [SCOPED]
+Add new[14]: Net 255.255.255.255/32 Ifp en0 Ifa 10.0.0.10 [last] [SCOPED]
+New Routes ('test14') = <IPv4RouteList[5]> = {
  0. Net 0.0.0.0/0 Gate 10.0.0.1 Ifp en1 Ifa 10.0.0.20 [never] [SCOPED]
  1. Net 10.0.0.0/24 Ifp en1 Ifa 10.0.0.20 [last]
  2. Net 10.0.0.1/32 Ifp en1 Ifa 10.0.0.20 [last]
+ 3. Net 224.0.0.0/4 Ifp en1 Ifa 10.0.0.20 [last]
+ 4. Net 255.255.255.255/32 Ifp en1 Ifa 10.0.0.20 [last]
 }
 Remove old[0]: Net 0.0.0.0/0 Gate 10.0.0.1 Ifp en1 Ifa 10.0.0.20
 Remove old[1]: Net 0.0.0.0/0 Gate 192.168.2.1 Ifp fw0 Ifa 192.168.2.30 [SCOPED]
@@ -15465,19 +22039,27 @@ Remove old[4]: Net 10.0.0.0/24 Ifp en0 Ifa 10.0.0.10 [last] [SCOPED]
 Remove old[6]: Net 10.0.0.1/32 Ifp en0 Ifa 10.0.0.10 [last] [SCOPED]
 Remove old[7]: Net 192.168.2.0/24 Ifp fw0 Ifa 192.168.2.30
 Remove old[8]: Net 192.168.2.1/32 Ifp fw0 Ifa 192.168.2.30
+Remove old[10]: Net 224.0.0.0/4 Ifp fw0 Ifa 192.168.2.30 [SCOPED]
+Remove old[11]: Net 224.0.0.0/4 Ifp en0 Ifa 10.0.0.10 [last] [SCOPED]
+Remove old[13]: Net 255.255.255.255/32 Ifp fw0 Ifa 192.168.2.30 [SCOPED]
+Remove old[14]: Net 255.255.255.255/32 Ifp en0 Ifa 10.0.0.10 [last] [SCOPED]
 Add new[0]: Net 0.0.0.0/0 Gate 10.0.0.1 Ifp en1 Ifa 10.0.0.20 [never] [SCOPED]
 =================> Apply 'test11', 'test14' End <=================
 
 =================> Apply 'test14', 'test11' Begin <=================
-Old routes ('test14') = <IPv4RouteList[3]> = {
+Old routes ('test14') = <IPv4RouteList[5]> = {
  0. Net 0.0.0.0/0 Gate 10.0.0.1 Ifp en1 Ifa 10.0.0.20 [never] [SCOPED]
  1. Net 10.0.0.0/24 Ifp en1 Ifa 10.0.0.20 [last]
  2. Net 10.0.0.1/32 Ifp en1 Ifa 10.0.0.20 [last]
+ 3. Net 224.0.0.0/4 Ifp en1 Ifa 10.0.0.20 [last]
+ 4. Net 255.255.255.255/32 Ifp en1 Ifa 10.0.0.20 [last]
 }
 Add new[2]: Net 10.0.0.1/32 Ifp en1 Ifa 10.0.0.20 [last]
 Add new[0]: Net 0.0.0.0/0 Gate 10.0.0.1 Ifp en1 Ifa 10.0.0.20 [never] [SCOPED]
 Add new[1]: Net 10.0.0.0/24 Ifp en1 Ifa 10.0.0.20 [last]
-New Routes ('test11') = <IPv4RouteList[9]> = {
+Add new[3]: Net 224.0.0.0/4 Ifp en1 Ifa 10.0.0.20 [last]
+Add new[4]: Net 255.255.255.255/32 Ifp en1 Ifa 10.0.0.20 [last]
+New Routes ('test11') = <IPv4RouteList[15]> = {
  0. Net 0.0.0.0/0 Gate 10.0.0.1 Ifp en1 Ifa 10.0.0.20
  1. Net 0.0.0.0/0 Gate 192.168.2.1 Ifp fw0 Ifa 192.168.2.30 [SCOPED]
  2. Net 0.0.0.0/0 Gate 10.0.0.1 Ifp en0 Ifa 10.0.0.10 [never] [SCOPED]
@@ -15487,6 +22069,12 @@ New Routes ('test11') = <IPv4RouteList[9]> = {
  6. Net 10.0.0.1/32 Ifp en0 Ifa 10.0.0.10 [last] [SCOPED]
  7. Net 192.168.2.0/24 Ifp fw0 Ifa 192.168.2.30
  8. Net 192.168.2.1/32 Ifp fw0 Ifa 192.168.2.30
+ 9. Net 224.0.0.0/4 Ifp en1 Ifa 10.0.0.20
+10. Net 224.0.0.0/4 Ifp fw0 Ifa 192.168.2.30 [SCOPED]
+11. Net 224.0.0.0/4 Ifp en0 Ifa 10.0.0.10 [last] [SCOPED]
+12. Net 255.255.255.255/32 Ifp en1 Ifa 10.0.0.20
+13. Net 255.255.255.255/32 Ifp fw0 Ifa 192.168.2.30 [SCOPED]
+14. Net 255.255.255.255/32 Ifp en0 Ifa 10.0.0.10 [last] [SCOPED]
 }
 Remove old[0]: Net 0.0.0.0/0 Gate 10.0.0.1 Ifp en1 Ifa 10.0.0.20 [never] [SCOPED]
 Add new[0]: Net 0.0.0.0/0 Gate 10.0.0.1 Ifp en1 Ifa 10.0.0.20
@@ -15496,10 +22084,14 @@ Add new[6]: Net 10.0.0.1/32 Ifp en0 Ifa 10.0.0.10 [last] [SCOPED]
 Add new[2]: Net 0.0.0.0/0 Gate 10.0.0.1 Ifp en0 Ifa 10.0.0.10 [never] [SCOPED]
 Add new[4]: Net 10.0.0.0/24 Ifp en0 Ifa 10.0.0.10 [last] [SCOPED]
 Add new[7]: Net 192.168.2.0/24 Ifp fw0 Ifa 192.168.2.30
+Add new[10]: Net 224.0.0.0/4 Ifp fw0 Ifa 192.168.2.30 [SCOPED]
+Add new[11]: Net 224.0.0.0/4 Ifp en0 Ifa 10.0.0.10 [last] [SCOPED]
+Add new[13]: Net 255.255.255.255/32 Ifp fw0 Ifa 192.168.2.30 [SCOPED]
+Add new[14]: Net 255.255.255.255/32 Ifp en0 Ifa 10.0.0.10 [last] [SCOPED]
 =================> Apply 'test14', 'test11' End <=================
 
 =================> Apply 'test11', 'test15' Begin <=================
-Old routes ('test11') = <IPv4RouteList[9]> = {
+Old routes ('test11') = <IPv4RouteList[15]> = {
  0. Net 0.0.0.0/0 Gate 10.0.0.1 Ifp en1 Ifa 10.0.0.20
  1. Net 0.0.0.0/0 Gate 192.168.2.1 Ifp fw0 Ifa 192.168.2.30 [SCOPED]
  2. Net 0.0.0.0/0 Gate 10.0.0.1 Ifp en0 Ifa 10.0.0.10 [never] [SCOPED]
@@ -15509,6 +22101,12 @@ Old routes ('test11') = <IPv4RouteList[9]> = {
  6. Net 10.0.0.1/32 Ifp en0 Ifa 10.0.0.10 [last] [SCOPED]
  7. Net 192.168.2.0/24 Ifp fw0 Ifa 192.168.2.30
  8. Net 192.168.2.1/32 Ifp fw0 Ifa 192.168.2.30
+ 9. Net 224.0.0.0/4 Ifp en1 Ifa 10.0.0.20
+10. Net 224.0.0.0/4 Ifp fw0 Ifa 192.168.2.30 [SCOPED]
+11. Net 224.0.0.0/4 Ifp en0 Ifa 10.0.0.10 [last] [SCOPED]
+12. Net 255.255.255.255/32 Ifp en1 Ifa 10.0.0.20
+13. Net 255.255.255.255/32 Ifp fw0 Ifa 192.168.2.30 [SCOPED]
+14. Net 255.255.255.255/32 Ifp en0 Ifa 10.0.0.10 [last] [SCOPED]
 }
 Add new[5]: Net 10.0.0.1/32 Ifp en1 Ifa 10.0.0.20
 Add new[0]: Net 0.0.0.0/0 Gate 10.0.0.1 Ifp en1 Ifa 10.0.0.20
@@ -15519,8 +22117,16 @@ Add new[2]: Net 0.0.0.0/0 Gate 10.0.0.1 Ifp en0 Ifa 10.0.0.10 [never] [SCOPED]
 Add new[3]: Net 10.0.0.0/24 Ifp en1 Ifa 10.0.0.20
 Add new[4]: Net 10.0.0.0/24 Ifp en0 Ifa 10.0.0.10 [last] [SCOPED]
 Add new[7]: Net 192.168.2.0/24 Ifp fw0 Ifa 192.168.2.30
-New Routes ('test15') = <IPv4RouteList[1]> = {
- 0. Net 0.0.0.0/0 Ifp en0 Ifa 169.254.22.44
+Add new[9]: Net 224.0.0.0/4 Ifp en1 Ifa 10.0.0.20
+Add new[10]: Net 224.0.0.0/4 Ifp fw0 Ifa 192.168.2.30 [SCOPED]
+Add new[11]: Net 224.0.0.0/4 Ifp en0 Ifa 10.0.0.10 [last] [SCOPED]
+Add new[12]: Net 255.255.255.255/32 Ifp en1 Ifa 10.0.0.20
+Add new[13]: Net 255.255.255.255/32 Ifp fw0 Ifa 192.168.2.30 [SCOPED]
+Add new[14]: Net 255.255.255.255/32 Ifp en0 Ifa 10.0.0.10 [last] [SCOPED]
+New Routes ('test15') = <IPv4RouteList[3]> = {
+ 0. Net 169.254.0.0/16 Ifp en0 Ifa 169.254.22.44 [last]
+ 1. Net 224.0.0.0/4 Ifp en0 Ifa 169.254.22.44 [last]
+ 2. Net 255.255.255.255/32 Ifp en0 Ifa 169.254.22.44 [last]
 }
 Remove old[0]: Net 0.0.0.0/0 Gate 10.0.0.1 Ifp en1 Ifa 10.0.0.20
 Remove old[1]: Net 0.0.0.0/0 Gate 192.168.2.1 Ifp fw0 Ifa 192.168.2.30 [SCOPED]
@@ -15531,15 +22137,27 @@ Remove old[5]: Net 10.0.0.1/32 Ifp en1 Ifa 10.0.0.20
 Remove old[6]: Net 10.0.0.1/32 Ifp en0 Ifa 10.0.0.10 [last] [SCOPED]
 Remove old[7]: Net 192.168.2.0/24 Ifp fw0 Ifa 192.168.2.30
 Remove old[8]: Net 192.168.2.1/32 Ifp fw0 Ifa 192.168.2.30
-Add new[0]: Net 0.0.0.0/0 Ifp en0 Ifa 169.254.22.44
+Remove old[9]: Net 224.0.0.0/4 Ifp en1 Ifa 10.0.0.20
+Remove old[10]: Net 224.0.0.0/4 Ifp fw0 Ifa 192.168.2.30 [SCOPED]
+Remove old[11]: Net 224.0.0.0/4 Ifp en0 Ifa 10.0.0.10 [last] [SCOPED]
+Remove old[12]: Net 255.255.255.255/32 Ifp en1 Ifa 10.0.0.20
+Remove old[13]: Net 255.255.255.255/32 Ifp fw0 Ifa 192.168.2.30 [SCOPED]
+Remove old[14]: Net 255.255.255.255/32 Ifp en0 Ifa 10.0.0.10 [last] [SCOPED]
+Add new[0]: Net 169.254.0.0/16 Ifp en0 Ifa 169.254.22.44 [last]
+Add new[1]: Net 224.0.0.0/4 Ifp en0 Ifa 169.254.22.44 [last]
+Add new[2]: Net 255.255.255.255/32 Ifp en0 Ifa 169.254.22.44 [last]
 =================> Apply 'test11', 'test15' End <=================
 
 =================> Apply 'test15', 'test11' Begin <=================
-Old routes ('test15') = <IPv4RouteList[1]> = {
- 0. Net 0.0.0.0/0 Ifp en0 Ifa 169.254.22.44
-}
-Add new[0]: Net 0.0.0.0/0 Ifp en0 Ifa 169.254.22.44
-New Routes ('test11') = <IPv4RouteList[9]> = {
+Old routes ('test15') = <IPv4RouteList[3]> = {
+ 0. Net 169.254.0.0/16 Ifp en0 Ifa 169.254.22.44 [last]
+ 1. Net 224.0.0.0/4 Ifp en0 Ifa 169.254.22.44 [last]
+ 2. Net 255.255.255.255/32 Ifp en0 Ifa 169.254.22.44 [last]
+}
+Add new[0]: Net 169.254.0.0/16 Ifp en0 Ifa 169.254.22.44 [last]
+Add new[1]: Net 224.0.0.0/4 Ifp en0 Ifa 169.254.22.44 [last]
+Add new[2]: Net 255.255.255.255/32 Ifp en0 Ifa 169.254.22.44 [last]
+New Routes ('test11') = <IPv4RouteList[15]> = {
  0. Net 0.0.0.0/0 Gate 10.0.0.1 Ifp en1 Ifa 10.0.0.20
  1. Net 0.0.0.0/0 Gate 192.168.2.1 Ifp fw0 Ifa 192.168.2.30 [SCOPED]
  2. Net 0.0.0.0/0 Gate 10.0.0.1 Ifp en0 Ifa 10.0.0.10 [never] [SCOPED]
@@ -15549,8 +22167,16 @@ New Routes ('test11') = <IPv4RouteList[9]> = {
  6. Net 10.0.0.1/32 Ifp en0 Ifa 10.0.0.10 [last] [SCOPED]
  7. Net 192.168.2.0/24 Ifp fw0 Ifa 192.168.2.30
  8. Net 192.168.2.1/32 Ifp fw0 Ifa 192.168.2.30
-}
-Remove old[0]: Net 0.0.0.0/0 Ifp en0 Ifa 169.254.22.44
+ 9. Net 224.0.0.0/4 Ifp en1 Ifa 10.0.0.20
+10. Net 224.0.0.0/4 Ifp fw0 Ifa 192.168.2.30 [SCOPED]
+11. Net 224.0.0.0/4 Ifp en0 Ifa 10.0.0.10 [last] [SCOPED]
+12. Net 255.255.255.255/32 Ifp en1 Ifa 10.0.0.20
+13. Net 255.255.255.255/32 Ifp fw0 Ifa 192.168.2.30 [SCOPED]
+14. Net 255.255.255.255/32 Ifp en0 Ifa 10.0.0.10 [last] [SCOPED]
+}
+Remove old[0]: Net 169.254.0.0/16 Ifp en0 Ifa 169.254.22.44 [last]
+Remove old[1]: Net 224.0.0.0/4 Ifp en0 Ifa 169.254.22.44 [last]
+Remove old[2]: Net 255.255.255.255/32 Ifp en0 Ifa 169.254.22.44 [last]
 Add new[5]: Net 10.0.0.1/32 Ifp en1 Ifa 10.0.0.20
 Add new[0]: Net 0.0.0.0/0 Gate 10.0.0.1 Ifp en1 Ifa 10.0.0.20
 Add new[8]: Net 192.168.2.1/32 Ifp fw0 Ifa 192.168.2.30
@@ -15560,10 +22186,16 @@ Add new[2]: Net 0.0.0.0/0 Gate 10.0.0.1 Ifp en0 Ifa 10.0.0.10 [never] [SCOPED]
 Add new[3]: Net 10.0.0.0/24 Ifp en1 Ifa 10.0.0.20
 Add new[4]: Net 10.0.0.0/24 Ifp en0 Ifa 10.0.0.10 [last] [SCOPED]
 Add new[7]: Net 192.168.2.0/24 Ifp fw0 Ifa 192.168.2.30
+Add new[9]: Net 224.0.0.0/4 Ifp en1 Ifa 10.0.0.20
+Add new[10]: Net 224.0.0.0/4 Ifp fw0 Ifa 192.168.2.30 [SCOPED]
+Add new[11]: Net 224.0.0.0/4 Ifp en0 Ifa 10.0.0.10 [last] [SCOPED]
+Add new[12]: Net 255.255.255.255/32 Ifp en1 Ifa 10.0.0.20
+Add new[13]: Net 255.255.255.255/32 Ifp fw0 Ifa 192.168.2.30 [SCOPED]
+Add new[14]: Net 255.255.255.255/32 Ifp en0 Ifa 10.0.0.10 [last] [SCOPED]
 =================> Apply 'test15', 'test11' End <=================
 
 =================> Apply 'test11', 'test16' Begin <=================
-Old routes ('test11') = <IPv4RouteList[9]> = {
+Old routes ('test11') = <IPv4RouteList[15]> = {
  0. Net 0.0.0.0/0 Gate 10.0.0.1 Ifp en1 Ifa 10.0.0.20
  1. Net 0.0.0.0/0 Gate 192.168.2.1 Ifp fw0 Ifa 192.168.2.30 [SCOPED]
  2. Net 0.0.0.0/0 Gate 10.0.0.1 Ifp en0 Ifa 10.0.0.10 [never] [SCOPED]
@@ -15573,6 +22205,12 @@ Old routes ('test11') = <IPv4RouteList[9]> = {
  6. Net 10.0.0.1/32 Ifp en0 Ifa 10.0.0.10 [last] [SCOPED]
  7. Net 192.168.2.0/24 Ifp fw0 Ifa 192.168.2.30
  8. Net 192.168.2.1/32 Ifp fw0 Ifa 192.168.2.30
+ 9. Net 224.0.0.0/4 Ifp en1 Ifa 10.0.0.20
+10. Net 224.0.0.0/4 Ifp fw0 Ifa 192.168.2.30 [SCOPED]
+11. Net 224.0.0.0/4 Ifp en0 Ifa 10.0.0.10 [last] [SCOPED]
+12. Net 255.255.255.255/32 Ifp en1 Ifa 10.0.0.20
+13. Net 255.255.255.255/32 Ifp fw0 Ifa 192.168.2.30 [SCOPED]
+14. Net 255.255.255.255/32 Ifp en0 Ifa 10.0.0.10 [last] [SCOPED]
 }
 Add new[5]: Net 10.0.0.1/32 Ifp en1 Ifa 10.0.0.20
 Add new[0]: Net 0.0.0.0/0 Gate 10.0.0.1 Ifp en1 Ifa 10.0.0.20
@@ -15583,7 +22221,13 @@ Add new[2]: Net 0.0.0.0/0 Gate 10.0.0.1 Ifp en0 Ifa 10.0.0.10 [never] [SCOPED]
 Add new[3]: Net 10.0.0.0/24 Ifp en1 Ifa 10.0.0.20
 Add new[4]: Net 10.0.0.0/24 Ifp en0 Ifa 10.0.0.10 [last] [SCOPED]
 Add new[7]: Net 192.168.2.0/24 Ifp fw0 Ifa 192.168.2.30
-New Routes ('test16') = <IPv4RouteList[50]> = {
+Add new[9]: Net 224.0.0.0/4 Ifp en1 Ifa 10.0.0.20
+Add new[10]: Net 224.0.0.0/4 Ifp fw0 Ifa 192.168.2.30 [SCOPED]
+Add new[11]: Net 224.0.0.0/4 Ifp en0 Ifa 10.0.0.10 [last] [SCOPED]
+Add new[12]: Net 255.255.255.255/32 Ifp en1 Ifa 10.0.0.20
+Add new[13]: Net 255.255.255.255/32 Ifp fw0 Ifa 192.168.2.30 [SCOPED]
+Add new[14]: Net 255.255.255.255/32 Ifp en0 Ifa 10.0.0.10 [last] [SCOPED]
+New Routes ('test16') = <IPv4RouteList[54]> = {
  0. Net 0.0.0.0/0 Gate 10.0.0.1 Ifp en0 Ifa 10.0.0.10
  1. Net 0.0.0.0/0 Ifp utun0 Ifa 17.153.46.24 [SCOPED]
  2. Net 10.0.0.0/24 Ifp en0 Ifa 10.0.0.10
@@ -15634,6 +22278,10 @@ New Routes ('test16') = <IPv4RouteList[50]> = {
 47. Net 192.35.50.0/24 Gate 17.153.46.24 Ifp utun0 Ifa 17.153.46.24
 48. Net 204.179.20.0/24 Gate 17.153.46.24 Ifp utun0 Ifa 17.153.46.24
 49. Net 206.112.116.0/24 Gate 17.153.46.24 Ifp utun0 Ifa 17.153.46.24
+50. Net 224.0.0.0/4 Ifp en0 Ifa 10.0.0.10
+51. Net 224.0.0.0/4 Ifp utun0 Ifa 17.153.46.24 [SCOPED]
+52. Net 255.255.255.255/32 Ifp en0 Ifa 10.0.0.10
+53. Net 255.255.255.255/32 Ifp utun0 Ifa 17.153.46.24 [SCOPED]
 }
 Remove old[0]: Net 0.0.0.0/0 Gate 10.0.0.1 Ifp en1 Ifa 10.0.0.20
 Remove old[1]: Net 0.0.0.0/0 Gate 192.168.2.1 Ifp fw0 Ifa 192.168.2.30 [SCOPED]
@@ -15644,6 +22292,12 @@ Remove old[5]: Net 10.0.0.1/32 Ifp en1 Ifa 10.0.0.20
 Remove old[6]: Net 10.0.0.1/32 Ifp en0 Ifa 10.0.0.10 [last] [SCOPED]
 Remove old[7]: Net 192.168.2.0/24 Ifp fw0 Ifa 192.168.2.30
 Remove old[8]: Net 192.168.2.1/32 Ifp fw0 Ifa 192.168.2.30
+Remove old[9]: Net 224.0.0.0/4 Ifp en1 Ifa 10.0.0.20
+Remove old[10]: Net 224.0.0.0/4 Ifp fw0 Ifa 192.168.2.30 [SCOPED]
+Remove old[11]: Net 224.0.0.0/4 Ifp en0 Ifa 10.0.0.10 [last] [SCOPED]
+Remove old[12]: Net 255.255.255.255/32 Ifp en1 Ifa 10.0.0.20
+Remove old[13]: Net 255.255.255.255/32 Ifp fw0 Ifa 192.168.2.30 [SCOPED]
+Remove old[14]: Net 255.255.255.255/32 Ifp en0 Ifa 10.0.0.10 [last] [SCOPED]
 Add new[3]: Net 10.0.0.1/32 Ifp en0 Ifa 10.0.0.10
 Add new[0]: Net 0.0.0.0/0 Gate 10.0.0.1 Ifp en0 Ifa 10.0.0.10
 Add new[1]: Net 0.0.0.0/0 Ifp utun0 Ifa 17.153.46.24 [SCOPED]
@@ -15694,10 +22348,14 @@ Add new[46]: Net 172.16.2.0/24 Gate 17.153.46.24 Ifp utun0 Ifa 17.153.46.24
 Add new[47]: Net 192.35.50.0/24 Gate 17.153.46.24 Ifp utun0 Ifa 17.153.46.24
 Add new[48]: Net 204.179.20.0/24 Gate 17.153.46.24 Ifp utun0 Ifa 17.153.46.24
 Add new[49]: Net 206.112.116.0/24 Gate 17.153.46.24 Ifp utun0 Ifa 17.153.46.24
+Add new[50]: Net 224.0.0.0/4 Ifp en0 Ifa 10.0.0.10
+Add new[51]: Net 224.0.0.0/4 Ifp utun0 Ifa 17.153.46.24 [SCOPED]
+Add new[52]: Net 255.255.255.255/32 Ifp en0 Ifa 10.0.0.10
+Add new[53]: Net 255.255.255.255/32 Ifp utun0 Ifa 17.153.46.24 [SCOPED]
 =================> Apply 'test11', 'test16' End <=================
 
 =================> Apply 'test16', 'test11' Begin <=================
-Old routes ('test16') = <IPv4RouteList[50]> = {
+Old routes ('test16') = <IPv4RouteList[54]> = {
  0. Net 0.0.0.0/0 Gate 10.0.0.1 Ifp en0 Ifa 10.0.0.10
  1. Net 0.0.0.0/0 Ifp utun0 Ifa 17.153.46.24 [SCOPED]
  2. Net 10.0.0.0/24 Ifp en0 Ifa 10.0.0.10
@@ -15748,6 +22406,10 @@ Old routes ('test16') = <IPv4RouteList[50]> = {
 47. Net 192.35.50.0/24 Gate 17.153.46.24 Ifp utun0 Ifa 17.153.46.24
 48. Net 204.179.20.0/24 Gate 17.153.46.24 Ifp utun0 Ifa 17.153.46.24
 49. Net 206.112.116.0/24 Gate 17.153.46.24 Ifp utun0 Ifa 17.153.46.24
+50. Net 224.0.0.0/4 Ifp en0 Ifa 10.0.0.10
+51. Net 224.0.0.0/4 Ifp utun0 Ifa 17.153.46.24 [SCOPED]
+52. Net 255.255.255.255/32 Ifp en0 Ifa 10.0.0.10
+53. Net 255.255.255.255/32 Ifp utun0 Ifa 17.153.46.24 [SCOPED]
 }
 Add new[3]: Net 10.0.0.1/32 Ifp en0 Ifa 10.0.0.10
 Add new[0]: Net 0.0.0.0/0 Gate 10.0.0.1 Ifp en0 Ifa 10.0.0.10
@@ -15799,7 +22461,11 @@ Add new[46]: Net 172.16.2.0/24 Gate 17.153.46.24 Ifp utun0 Ifa 17.153.46.24
 Add new[47]: Net 192.35.50.0/24 Gate 17.153.46.24 Ifp utun0 Ifa 17.153.46.24
 Add new[48]: Net 204.179.20.0/24 Gate 17.153.46.24 Ifp utun0 Ifa 17.153.46.24
 Add new[49]: Net 206.112.116.0/24 Gate 17.153.46.24 Ifp utun0 Ifa 17.153.46.24
-New Routes ('test11') = <IPv4RouteList[9]> = {
+Add new[50]: Net 224.0.0.0/4 Ifp en0 Ifa 10.0.0.10
+Add new[51]: Net 224.0.0.0/4 Ifp utun0 Ifa 17.153.46.24 [SCOPED]
+Add new[52]: Net 255.255.255.255/32 Ifp en0 Ifa 10.0.0.10
+Add new[53]: Net 255.255.255.255/32 Ifp utun0 Ifa 17.153.46.24 [SCOPED]
+New Routes ('test11') = <IPv4RouteList[15]> = {
  0. Net 0.0.0.0/0 Gate 10.0.0.1 Ifp en1 Ifa 10.0.0.20
  1. Net 0.0.0.0/0 Gate 192.168.2.1 Ifp fw0 Ifa 192.168.2.30 [SCOPED]
  2. Net 0.0.0.0/0 Gate 10.0.0.1 Ifp en0 Ifa 10.0.0.10 [never] [SCOPED]
@@ -15809,6 +22475,12 @@ New Routes ('test11') = <IPv4RouteList[9]> = {
  6. Net 10.0.0.1/32 Ifp en0 Ifa 10.0.0.10 [last] [SCOPED]
  7. Net 192.168.2.0/24 Ifp fw0 Ifa 192.168.2.30
  8. Net 192.168.2.1/32 Ifp fw0 Ifa 192.168.2.30
+ 9. Net 224.0.0.0/4 Ifp en1 Ifa 10.0.0.20
+10. Net 224.0.0.0/4 Ifp fw0 Ifa 192.168.2.30 [SCOPED]
+11. Net 224.0.0.0/4 Ifp en0 Ifa 10.0.0.10 [last] [SCOPED]
+12. Net 255.255.255.255/32 Ifp en1 Ifa 10.0.0.20
+13. Net 255.255.255.255/32 Ifp fw0 Ifa 192.168.2.30 [SCOPED]
+14. Net 255.255.255.255/32 Ifp en0 Ifa 10.0.0.10 [last] [SCOPED]
 }
 Remove old[0]: Net 0.0.0.0/0 Gate 10.0.0.1 Ifp en0 Ifa 10.0.0.10
 Remove old[1]: Net 0.0.0.0/0 Ifp utun0 Ifa 17.153.46.24 [SCOPED]
@@ -15860,6 +22532,10 @@ Remove old[46]: Net 172.16.2.0/24 Gate 17.153.46.24 Ifp utun0 Ifa 17.153.46.24
 Remove old[47]: Net 192.35.50.0/24 Gate 17.153.46.24 Ifp utun0 Ifa 17.153.46.24
 Remove old[48]: Net 204.179.20.0/24 Gate 17.153.46.24 Ifp utun0 Ifa 17.153.46.24
 Remove old[49]: Net 206.112.116.0/24 Gate 17.153.46.24 Ifp utun0 Ifa 17.153.46.24
+Remove old[50]: Net 224.0.0.0/4 Ifp en0 Ifa 10.0.0.10
+Remove old[51]: Net 224.0.0.0/4 Ifp utun0 Ifa 17.153.46.24 [SCOPED]
+Remove old[52]: Net 255.255.255.255/32 Ifp en0 Ifa 10.0.0.10
+Remove old[53]: Net 255.255.255.255/32 Ifp utun0 Ifa 17.153.46.24 [SCOPED]
 Add new[5]: Net 10.0.0.1/32 Ifp en1 Ifa 10.0.0.20
 Add new[0]: Net 0.0.0.0/0 Gate 10.0.0.1 Ifp en1 Ifa 10.0.0.20
 Add new[8]: Net 192.168.2.1/32 Ifp fw0 Ifa 192.168.2.30
@@ -15869,10 +22545,16 @@ Add new[2]: Net 0.0.0.0/0 Gate 10.0.0.1 Ifp en0 Ifa 10.0.0.10 [never] [SCOPED]
 Add new[3]: Net 10.0.0.0/24 Ifp en1 Ifa 10.0.0.20
 Add new[4]: Net 10.0.0.0/24 Ifp en0 Ifa 10.0.0.10 [last] [SCOPED]
 Add new[7]: Net 192.168.2.0/24 Ifp fw0 Ifa 192.168.2.30
+Add new[9]: Net 224.0.0.0/4 Ifp en1 Ifa 10.0.0.20
+Add new[10]: Net 224.0.0.0/4 Ifp fw0 Ifa 192.168.2.30 [SCOPED]
+Add new[11]: Net 224.0.0.0/4 Ifp en0 Ifa 10.0.0.10 [last] [SCOPED]
+Add new[12]: Net 255.255.255.255/32 Ifp en1 Ifa 10.0.0.20
+Add new[13]: Net 255.255.255.255/32 Ifp fw0 Ifa 192.168.2.30 [SCOPED]
+Add new[14]: Net 255.255.255.255/32 Ifp en0 Ifa 10.0.0.10 [last] [SCOPED]
 =================> Apply 'test16', 'test11' End <=================
 
 =================> Apply 'test11', 'test17' Begin <=================
-Old routes ('test11') = <IPv4RouteList[9]> = {
+Old routes ('test11') = <IPv4RouteList[15]> = {
  0. Net 0.0.0.0/0 Gate 10.0.0.1 Ifp en1 Ifa 10.0.0.20
  1. Net 0.0.0.0/0 Gate 192.168.2.1 Ifp fw0 Ifa 192.168.2.30 [SCOPED]
  2. Net 0.0.0.0/0 Gate 10.0.0.1 Ifp en0 Ifa 10.0.0.10 [never] [SCOPED]
@@ -15882,6 +22564,12 @@ Old routes ('test11') = <IPv4RouteList[9]> = {
  6. Net 10.0.0.1/32 Ifp en0 Ifa 10.0.0.10 [last] [SCOPED]
  7. Net 192.168.2.0/24 Ifp fw0 Ifa 192.168.2.30
  8. Net 192.168.2.1/32 Ifp fw0 Ifa 192.168.2.30
+ 9. Net 224.0.0.0/4 Ifp en1 Ifa 10.0.0.20
+10. Net 224.0.0.0/4 Ifp fw0 Ifa 192.168.2.30 [SCOPED]
+11. Net 224.0.0.0/4 Ifp en0 Ifa 10.0.0.10 [last] [SCOPED]
+12. Net 255.255.255.255/32 Ifp en1 Ifa 10.0.0.20
+13. Net 255.255.255.255/32 Ifp fw0 Ifa 192.168.2.30 [SCOPED]
+14. Net 255.255.255.255/32 Ifp en0 Ifa 10.0.0.10 [last] [SCOPED]
 }
 Add new[5]: Net 10.0.0.1/32 Ifp en1 Ifa 10.0.0.20
 Add new[0]: Net 0.0.0.0/0 Gate 10.0.0.1 Ifp en1 Ifa 10.0.0.20
@@ -15892,13 +22580,23 @@ Add new[2]: Net 0.0.0.0/0 Gate 10.0.0.1 Ifp en0 Ifa 10.0.0.10 [never] [SCOPED]
 Add new[3]: Net 10.0.0.0/24 Ifp en1 Ifa 10.0.0.20
 Add new[4]: Net 10.0.0.0/24 Ifp en0 Ifa 10.0.0.10 [last] [SCOPED]
 Add new[7]: Net 192.168.2.0/24 Ifp fw0 Ifa 192.168.2.30
-New Routes ('test17') = <IPv4RouteList[6]> = {
+Add new[9]: Net 224.0.0.0/4 Ifp en1 Ifa 10.0.0.20
+Add new[10]: Net 224.0.0.0/4 Ifp fw0 Ifa 192.168.2.30 [SCOPED]
+Add new[11]: Net 224.0.0.0/4 Ifp en0 Ifa 10.0.0.10 [last] [SCOPED]
+Add new[12]: Net 255.255.255.255/32 Ifp en1 Ifa 10.0.0.20
+Add new[13]: Net 255.255.255.255/32 Ifp fw0 Ifa 192.168.2.30 [SCOPED]
+Add new[14]: Net 255.255.255.255/32 Ifp en0 Ifa 10.0.0.10 [last] [SCOPED]
+New Routes ('test17') = <IPv4RouteList[10]> = {
  0. Net 0.0.0.0/0 Gate 10.0.0.1 Ifp en0 Ifa 10.0.0.10
  1. Net 0.0.0.0/0 Gate 192.168.2.1 Ifp en1 Ifa 192.168.2.50 [never] [SCOPED]
  2. Net 10.0.0.0/24 Ifp en0 Ifa 10.0.0.10
  3. Net 10.0.0.1/32 Ifp en0 Ifa 10.0.0.10
  4. Net 192.168.2.0/24 Ifp en1 Ifa 192.168.2.50 [last]
  5. Net 192.168.2.1/32 Ifp en1 Ifa 192.168.2.50 [last]
+ 6. Net 224.0.0.0/4 Ifp en0 Ifa 10.0.0.10
+ 7. Net 224.0.0.0/4 Ifp en1 Ifa 192.168.2.50 [last] [SCOPED]
+ 8. Net 255.255.255.255/32 Ifp en0 Ifa 10.0.0.10
+ 9. Net 255.255.255.255/32 Ifp en1 Ifa 192.168.2.50 [last] [SCOPED]
 }
 Remove old[0]: Net 0.0.0.0/0 Gate 10.0.0.1 Ifp en1 Ifa 10.0.0.20
 Remove old[1]: Net 0.0.0.0/0 Gate 192.168.2.1 Ifp fw0 Ifa 192.168.2.30 [SCOPED]
@@ -15909,22 +22607,36 @@ Remove old[5]: Net 10.0.0.1/32 Ifp en1 Ifa 10.0.0.20
 Remove old[6]: Net 10.0.0.1/32 Ifp en0 Ifa 10.0.0.10 [last] [SCOPED]
 Remove old[7]: Net 192.168.2.0/24 Ifp fw0 Ifa 192.168.2.30
 Remove old[8]: Net 192.168.2.1/32 Ifp fw0 Ifa 192.168.2.30
+Remove old[9]: Net 224.0.0.0/4 Ifp en1 Ifa 10.0.0.20
+Remove old[10]: Net 224.0.0.0/4 Ifp fw0 Ifa 192.168.2.30 [SCOPED]
+Remove old[11]: Net 224.0.0.0/4 Ifp en0 Ifa 10.0.0.10 [last] [SCOPED]
+Remove old[12]: Net 255.255.255.255/32 Ifp en1 Ifa 10.0.0.20
+Remove old[13]: Net 255.255.255.255/32 Ifp fw0 Ifa 192.168.2.30 [SCOPED]
+Remove old[14]: Net 255.255.255.255/32 Ifp en0 Ifa 10.0.0.10 [last] [SCOPED]
 Add new[3]: Net 10.0.0.1/32 Ifp en0 Ifa 10.0.0.10
 Add new[0]: Net 0.0.0.0/0 Gate 10.0.0.1 Ifp en0 Ifa 10.0.0.10
 Add new[5]: Net 192.168.2.1/32 Ifp en1 Ifa 192.168.2.50 [last]
 Add new[1]: Net 0.0.0.0/0 Gate 192.168.2.1 Ifp en1 Ifa 192.168.2.50 [never] [SCOPED]
 Add new[2]: Net 10.0.0.0/24 Ifp en0 Ifa 10.0.0.10
 Add new[4]: Net 192.168.2.0/24 Ifp en1 Ifa 192.168.2.50 [last]
+Add new[6]: Net 224.0.0.0/4 Ifp en0 Ifa 10.0.0.10
+Add new[7]: Net 224.0.0.0/4 Ifp en1 Ifa 192.168.2.50 [last] [SCOPED]
+Add new[8]: Net 255.255.255.255/32 Ifp en0 Ifa 10.0.0.10
+Add new[9]: Net 255.255.255.255/32 Ifp en1 Ifa 192.168.2.50 [last] [SCOPED]
 =================> Apply 'test11', 'test17' End <=================
 
 =================> Apply 'test17', 'test11' Begin <=================
-Old routes ('test17') = <IPv4RouteList[6]> = {
+Old routes ('test17') = <IPv4RouteList[10]> = {
  0. Net 0.0.0.0/0 Gate 10.0.0.1 Ifp en0 Ifa 10.0.0.10
  1. Net 0.0.0.0/0 Gate 192.168.2.1 Ifp en1 Ifa 192.168.2.50 [never] [SCOPED]
  2. Net 10.0.0.0/24 Ifp en0 Ifa 10.0.0.10
  3. Net 10.0.0.1/32 Ifp en0 Ifa 10.0.0.10
  4. Net 192.168.2.0/24 Ifp en1 Ifa 192.168.2.50 [last]
  5. Net 192.168.2.1/32 Ifp en1 Ifa 192.168.2.50 [last]
+ 6. Net 224.0.0.0/4 Ifp en0 Ifa 10.0.0.10
+ 7. Net 224.0.0.0/4 Ifp en1 Ifa 192.168.2.50 [last] [SCOPED]
+ 8. Net 255.255.255.255/32 Ifp en0 Ifa 10.0.0.10
+ 9. Net 255.255.255.255/32 Ifp en1 Ifa 192.168.2.50 [last] [SCOPED]
 }
 Add new[3]: Net 10.0.0.1/32 Ifp en0 Ifa 10.0.0.10
 Add new[0]: Net 0.0.0.0/0 Gate 10.0.0.1 Ifp en0 Ifa 10.0.0.10
@@ -15932,7 +22644,11 @@ Add new[5]: Net 192.168.2.1/32 Ifp en1 Ifa 192.168.2.50 [last]
 Add new[1]: Net 0.0.0.0/0 Gate 192.168.2.1 Ifp en1 Ifa 192.168.2.50 [never] [SCOPED]
 Add new[2]: Net 10.0.0.0/24 Ifp en0 Ifa 10.0.0.10
 Add new[4]: Net 192.168.2.0/24 Ifp en1 Ifa 192.168.2.50 [last]
-New Routes ('test11') = <IPv4RouteList[9]> = {
+Add new[6]: Net 224.0.0.0/4 Ifp en0 Ifa 10.0.0.10
+Add new[7]: Net 224.0.0.0/4 Ifp en1 Ifa 192.168.2.50 [last] [SCOPED]
+Add new[8]: Net 255.255.255.255/32 Ifp en0 Ifa 10.0.0.10
+Add new[9]: Net 255.255.255.255/32 Ifp en1 Ifa 192.168.2.50 [last] [SCOPED]
+New Routes ('test11') = <IPv4RouteList[15]> = {
  0. Net 0.0.0.0/0 Gate 10.0.0.1 Ifp en1 Ifa 10.0.0.20
  1. Net 0.0.0.0/0 Gate 192.168.2.1 Ifp fw0 Ifa 192.168.2.30 [SCOPED]
  2. Net 0.0.0.0/0 Gate 10.0.0.1 Ifp en0 Ifa 10.0.0.10 [never] [SCOPED]
@@ -15942,6 +22658,12 @@ New Routes ('test11') = <IPv4RouteList[9]> = {
  6. Net 10.0.0.1/32 Ifp en0 Ifa 10.0.0.10 [last] [SCOPED]
  7. Net 192.168.2.0/24 Ifp fw0 Ifa 192.168.2.30
  8. Net 192.168.2.1/32 Ifp fw0 Ifa 192.168.2.30
+ 9. Net 224.0.0.0/4 Ifp en1 Ifa 10.0.0.20
+10. Net 224.0.0.0/4 Ifp fw0 Ifa 192.168.2.30 [SCOPED]
+11. Net 224.0.0.0/4 Ifp en0 Ifa 10.0.0.10 [last] [SCOPED]
+12. Net 255.255.255.255/32 Ifp en1 Ifa 10.0.0.20
+13. Net 255.255.255.255/32 Ifp fw0 Ifa 192.168.2.30 [SCOPED]
+14. Net 255.255.255.255/32 Ifp en0 Ifa 10.0.0.10 [last] [SCOPED]
 }
 Remove old[0]: Net 0.0.0.0/0 Gate 10.0.0.1 Ifp en0 Ifa 10.0.0.10
 Remove old[1]: Net 0.0.0.0/0 Gate 192.168.2.1 Ifp en1 Ifa 192.168.2.50 [never] [SCOPED]
@@ -15949,6 +22671,10 @@ Remove old[2]: Net 10.0.0.0/24 Ifp en0 Ifa 10.0.0.10
 Remove old[3]: Net 10.0.0.1/32 Ifp en0 Ifa 10.0.0.10
 Remove old[4]: Net 192.168.2.0/24 Ifp en1 Ifa 192.168.2.50 [last]
 Remove old[5]: Net 192.168.2.1/32 Ifp en1 Ifa 192.168.2.50 [last]
+Remove old[6]: Net 224.0.0.0/4 Ifp en0 Ifa 10.0.0.10
+Remove old[7]: Net 224.0.0.0/4 Ifp en1 Ifa 192.168.2.50 [last] [SCOPED]
+Remove old[8]: Net 255.255.255.255/32 Ifp en0 Ifa 10.0.0.10
+Remove old[9]: Net 255.255.255.255/32 Ifp en1 Ifa 192.168.2.50 [last] [SCOPED]
 Add new[5]: Net 10.0.0.1/32 Ifp en1 Ifa 10.0.0.20
 Add new[0]: Net 0.0.0.0/0 Gate 10.0.0.1 Ifp en1 Ifa 10.0.0.20
 Add new[8]: Net 192.168.2.1/32 Ifp fw0 Ifa 192.168.2.30
@@ -15958,10 +22684,16 @@ Add new[2]: Net 0.0.0.0/0 Gate 10.0.0.1 Ifp en0 Ifa 10.0.0.10 [never] [SCOPED]
 Add new[3]: Net 10.0.0.0/24 Ifp en1 Ifa 10.0.0.20
 Add new[4]: Net 10.0.0.0/24 Ifp en0 Ifa 10.0.0.10 [last] [SCOPED]
 Add new[7]: Net 192.168.2.0/24 Ifp fw0 Ifa 192.168.2.30
+Add new[9]: Net 224.0.0.0/4 Ifp en1 Ifa 10.0.0.20
+Add new[10]: Net 224.0.0.0/4 Ifp fw0 Ifa 192.168.2.30 [SCOPED]
+Add new[11]: Net 224.0.0.0/4 Ifp en0 Ifa 10.0.0.10 [last] [SCOPED]
+Add new[12]: Net 255.255.255.255/32 Ifp en1 Ifa 10.0.0.20
+Add new[13]: Net 255.255.255.255/32 Ifp fw0 Ifa 192.168.2.30 [SCOPED]
+Add new[14]: Net 255.255.255.255/32 Ifp en0 Ifa 10.0.0.10 [last] [SCOPED]
 =================> Apply 'test17', 'test11' End <=================
 
 =================> Apply 'test11', 'test18' Begin <=================
-Old routes ('test11') = <IPv4RouteList[9]> = {
+Old routes ('test11') = <IPv4RouteList[15]> = {
  0. Net 0.0.0.0/0 Gate 10.0.0.1 Ifp en1 Ifa 10.0.0.20
  1. Net 0.0.0.0/0 Gate 192.168.2.1 Ifp fw0 Ifa 192.168.2.30 [SCOPED]
  2. Net 0.0.0.0/0 Gate 10.0.0.1 Ifp en0 Ifa 10.0.0.10 [never] [SCOPED]
@@ -15971,6 +22703,12 @@ Old routes ('test11') = <IPv4RouteList[9]> = {
  6. Net 10.0.0.1/32 Ifp en0 Ifa 10.0.0.10 [last] [SCOPED]
  7. Net 192.168.2.0/24 Ifp fw0 Ifa 192.168.2.30
  8. Net 192.168.2.1/32 Ifp fw0 Ifa 192.168.2.30
+ 9. Net 224.0.0.0/4 Ifp en1 Ifa 10.0.0.20
+10. Net 224.0.0.0/4 Ifp fw0 Ifa 192.168.2.30 [SCOPED]
+11. Net 224.0.0.0/4 Ifp en0 Ifa 10.0.0.10 [last] [SCOPED]
+12. Net 255.255.255.255/32 Ifp en1 Ifa 10.0.0.20
+13. Net 255.255.255.255/32 Ifp fw0 Ifa 192.168.2.30 [SCOPED]
+14. Net 255.255.255.255/32 Ifp en0 Ifa 10.0.0.10 [last] [SCOPED]
 }
 Add new[5]: Net 10.0.0.1/32 Ifp en1 Ifa 10.0.0.20
 Add new[0]: Net 0.0.0.0/0 Gate 10.0.0.1 Ifp en1 Ifa 10.0.0.20
@@ -15981,7 +22719,13 @@ Add new[2]: Net 0.0.0.0/0 Gate 10.0.0.1 Ifp en0 Ifa 10.0.0.10 [never] [SCOPED]
 Add new[3]: Net 10.0.0.0/24 Ifp en1 Ifa 10.0.0.20
 Add new[4]: Net 10.0.0.0/24 Ifp en0 Ifa 10.0.0.10 [last] [SCOPED]
 Add new[7]: Net 192.168.2.0/24 Ifp fw0 Ifa 192.168.2.30
-New Routes ('test18') = <IPv4RouteList[14]> = {
+Add new[9]: Net 224.0.0.0/4 Ifp en1 Ifa 10.0.0.20
+Add new[10]: Net 224.0.0.0/4 Ifp fw0 Ifa 192.168.2.30 [SCOPED]
+Add new[11]: Net 224.0.0.0/4 Ifp en0 Ifa 10.0.0.10 [last] [SCOPED]
+Add new[12]: Net 255.255.255.255/32 Ifp en1 Ifa 10.0.0.20
+Add new[13]: Net 255.255.255.255/32 Ifp fw0 Ifa 192.168.2.30 [SCOPED]
+Add new[14]: Net 255.255.255.255/32 Ifp en0 Ifa 10.0.0.10 [last] [SCOPED]
+New Routes ('test18') = <IPv4RouteList[16]> = {
  0. Net 0.0.0.0/0 Gate 192.168.130.1 Ifp en0 Ifa 192.168.130.16
  1. Host 1.1.1.1 Gate 1.1.1.2 Ifp en0 Ifa 192.168.130.16
  2. Host 1.1.1.2 Gate 1.1.1.3 Ifp en0 Ifa 192.168.130.16
@@ -15996,6 +22740,8 @@ New Routes ('test18') = <IPv4RouteList[14]> = {
 11. Host 1.1.1.11 Gate 1.1.1.1 Ifp en0 Ifa 192.168.130.16
 12. Net 192.168.130.0/24 Ifp en0 Ifa 192.168.130.16
 13. Net 192.168.130.1/32 Ifp en0 Ifa 192.168.130.16
+14. Net 224.0.0.0/4 Ifp en0 Ifa 192.168.130.16
+15. Net 255.255.255.255/32 Ifp en0 Ifa 192.168.130.16
 }
 Remove old[0]: Net 0.0.0.0/0 Gate 10.0.0.1 Ifp en1 Ifa 10.0.0.20
 Remove old[1]: Net 0.0.0.0/0 Gate 192.168.2.1 Ifp fw0 Ifa 192.168.2.30 [SCOPED]
@@ -16006,24 +22752,32 @@ Remove old[5]: Net 10.0.0.1/32 Ifp en1 Ifa 10.0.0.20
 Remove old[6]: Net 10.0.0.1/32 Ifp en0 Ifa 10.0.0.10 [last] [SCOPED]
 Remove old[7]: Net 192.168.2.0/24 Ifp fw0 Ifa 192.168.2.30
 Remove old[8]: Net 192.168.2.1/32 Ifp fw0 Ifa 192.168.2.30
+Remove old[9]: Net 224.0.0.0/4 Ifp en1 Ifa 10.0.0.20
+Remove old[10]: Net 224.0.0.0/4 Ifp fw0 Ifa 192.168.2.30 [SCOPED]
+Remove old[11]: Net 224.0.0.0/4 Ifp en0 Ifa 10.0.0.10 [last] [SCOPED]
+Remove old[12]: Net 255.255.255.255/32 Ifp en1 Ifa 10.0.0.20
+Remove old[13]: Net 255.255.255.255/32 Ifp fw0 Ifa 192.168.2.30 [SCOPED]
+Remove old[14]: Net 255.255.255.255/32 Ifp en0 Ifa 10.0.0.10 [last] [SCOPED]
 Add new[13]: Net 192.168.130.1/32 Ifp en0 Ifa 192.168.130.16
 Add new[0]: Net 0.0.0.0/0 Gate 192.168.130.1 Ifp en0 Ifa 192.168.130.16
-IPMonitor RouteProcess: routing loop detected, not adding: Host 1.1.1.11 Gate 1.1.1.1 Ifp en0 Ifa 192.168.130.16
-IPMonitor RouteProcess: failed to add: Host 1.1.1.10 Gate 1.1.1.11 Ifp en0 Ifa 192.168.130.16
-IPMonitor RouteProcess: failed to add: Host 1.1.1.9 Gate 1.1.1.10 Ifp en0 Ifa 192.168.130.16
-IPMonitor RouteProcess: failed to add: Host 1.1.1.8 Gate 1.1.1.9 Ifp en0 Ifa 192.168.130.16
-IPMonitor RouteProcess: failed to add: Host 1.1.1.7 Gate 1.1.1.8 Ifp en0 Ifa 192.168.130.16
-IPMonitor RouteProcess: failed to add: Host 1.1.1.6 Gate 1.1.1.7 Ifp en0 Ifa 192.168.130.16
-IPMonitor RouteProcess: failed to add: Host 1.1.1.5 Gate 1.1.1.6 Ifp en0 Ifa 192.168.130.16
-IPMonitor RouteProcess: failed to add: Host 1.1.1.4 Gate 1.1.1.5 Ifp en0 Ifa 192.168.130.16
-IPMonitor RouteProcess: failed to add: Host 1.1.1.3 Gate 1.1.1.4 Ifp en0 Ifa 192.168.130.16
-IPMonitor RouteProcess: failed to add: Host 1.1.1.2 Gate 1.1.1.3 Ifp en0 Ifa 192.168.130.16
-IPMonitor RouteProcess: failed to add: Host 1.1.1.1 Gate 1.1.1.2 Ifp en0 Ifa 192.168.130.16
+routing loop detected, not adding: Host 1.1.1.11 Gate 1.1.1.1 Ifp en0 Ifa 192.168.130.16
+failed to add: Host 1.1.1.10 Gate 1.1.1.11 Ifp en0 Ifa 192.168.130.16
+failed to add: Host 1.1.1.9 Gate 1.1.1.10 Ifp en0 Ifa 192.168.130.16
+failed to add: Host 1.1.1.8 Gate 1.1.1.9 Ifp en0 Ifa 192.168.130.16
+failed to add: Host 1.1.1.7 Gate 1.1.1.8 Ifp en0 Ifa 192.168.130.16
+failed to add: Host 1.1.1.6 Gate 1.1.1.7 Ifp en0 Ifa 192.168.130.16
+failed to add: Host 1.1.1.5 Gate 1.1.1.6 Ifp en0 Ifa 192.168.130.16
+failed to add: Host 1.1.1.4 Gate 1.1.1.5 Ifp en0 Ifa 192.168.130.16
+failed to add: Host 1.1.1.3 Gate 1.1.1.4 Ifp en0 Ifa 192.168.130.16
+failed to add: Host 1.1.1.2 Gate 1.1.1.3 Ifp en0 Ifa 192.168.130.16
+failed to add: Host 1.1.1.1 Gate 1.1.1.2 Ifp en0 Ifa 192.168.130.16
 Add new[12]: Net 192.168.130.0/24 Ifp en0 Ifa 192.168.130.16
+Add new[14]: Net 224.0.0.0/4 Ifp en0 Ifa 192.168.130.16
+Add new[15]: Net 255.255.255.255/32 Ifp en0 Ifa 192.168.130.16
 =================> Apply 'test11', 'test18' End <=================
 
 =================> Apply 'test18', 'test11' Begin <=================
-Old routes ('test18') = <IPv4RouteList[14]> = {
+Old routes ('test18') = <IPv4RouteList[16]> = {
  0. Net 0.0.0.0/0 Gate 192.168.130.1 Ifp en0 Ifa 192.168.130.16
  1. Host 1.1.1.1 Gate 1.1.1.2 Ifp en0 Ifa 192.168.130.16
  2. Host 1.1.1.2 Gate 1.1.1.3 Ifp en0 Ifa 192.168.130.16
@@ -16038,22 +22792,26 @@ Old routes ('test18') = <IPv4RouteList[14]> = {
 11. Host 1.1.1.11 Gate 1.1.1.1 Ifp en0 Ifa 192.168.130.16
 12. Net 192.168.130.0/24 Ifp en0 Ifa 192.168.130.16
 13. Net 192.168.130.1/32 Ifp en0 Ifa 192.168.130.16
+14. Net 224.0.0.0/4 Ifp en0 Ifa 192.168.130.16
+15. Net 255.255.255.255/32 Ifp en0 Ifa 192.168.130.16
 }
 Add new[13]: Net 192.168.130.1/32 Ifp en0 Ifa 192.168.130.16
 Add new[0]: Net 0.0.0.0/0 Gate 192.168.130.1 Ifp en0 Ifa 192.168.130.16
-IPMonitor RouteProcess: routing loop detected, not adding: Host 1.1.1.11 Gate 1.1.1.1 Ifp en0 Ifa 192.168.130.16
-IPMonitor RouteProcess: failed to add: Host 1.1.1.10 Gate 1.1.1.11 Ifp en0 Ifa 192.168.130.16
-IPMonitor RouteProcess: failed to add: Host 1.1.1.9 Gate 1.1.1.10 Ifp en0 Ifa 192.168.130.16
-IPMonitor RouteProcess: failed to add: Host 1.1.1.8 Gate 1.1.1.9 Ifp en0 Ifa 192.168.130.16
-IPMonitor RouteProcess: failed to add: Host 1.1.1.7 Gate 1.1.1.8 Ifp en0 Ifa 192.168.130.16
-IPMonitor RouteProcess: failed to add: Host 1.1.1.6 Gate 1.1.1.7 Ifp en0 Ifa 192.168.130.16
-IPMonitor RouteProcess: failed to add: Host 1.1.1.5 Gate 1.1.1.6 Ifp en0 Ifa 192.168.130.16
-IPMonitor RouteProcess: failed to add: Host 1.1.1.4 Gate 1.1.1.5 Ifp en0 Ifa 192.168.130.16
-IPMonitor RouteProcess: failed to add: Host 1.1.1.3 Gate 1.1.1.4 Ifp en0 Ifa 192.168.130.16
-IPMonitor RouteProcess: failed to add: Host 1.1.1.2 Gate 1.1.1.3 Ifp en0 Ifa 192.168.130.16
-IPMonitor RouteProcess: failed to add: Host 1.1.1.1 Gate 1.1.1.2 Ifp en0 Ifa 192.168.130.16
+routing loop detected, not adding: Host 1.1.1.11 Gate 1.1.1.1 Ifp en0 Ifa 192.168.130.16
+failed to add: Host 1.1.1.10 Gate 1.1.1.11 Ifp en0 Ifa 192.168.130.16
+failed to add: Host 1.1.1.9 Gate 1.1.1.10 Ifp en0 Ifa 192.168.130.16
+failed to add: Host 1.1.1.8 Gate 1.1.1.9 Ifp en0 Ifa 192.168.130.16
+failed to add: Host 1.1.1.7 Gate 1.1.1.8 Ifp en0 Ifa 192.168.130.16
+failed to add: Host 1.1.1.6 Gate 1.1.1.7 Ifp en0 Ifa 192.168.130.16
+failed to add: Host 1.1.1.5 Gate 1.1.1.6 Ifp en0 Ifa 192.168.130.16
+failed to add: Host 1.1.1.4 Gate 1.1.1.5 Ifp en0 Ifa 192.168.130.16
+failed to add: Host 1.1.1.3 Gate 1.1.1.4 Ifp en0 Ifa 192.168.130.16
+failed to add: Host 1.1.1.2 Gate 1.1.1.3 Ifp en0 Ifa 192.168.130.16
+failed to add: Host 1.1.1.1 Gate 1.1.1.2 Ifp en0 Ifa 192.168.130.16
 Add new[12]: Net 192.168.130.0/24 Ifp en0 Ifa 192.168.130.16
-New Routes ('test11') = <IPv4RouteList[9]> = {
+Add new[14]: Net 224.0.0.0/4 Ifp en0 Ifa 192.168.130.16
+Add new[15]: Net 255.255.255.255/32 Ifp en0 Ifa 192.168.130.16
+New Routes ('test11') = <IPv4RouteList[15]> = {
  0. Net 0.0.0.0/0 Gate 10.0.0.1 Ifp en1 Ifa 10.0.0.20
  1. Net 0.0.0.0/0 Gate 192.168.2.1 Ifp fw0 Ifa 192.168.2.30 [SCOPED]
  2. Net 0.0.0.0/0 Gate 10.0.0.1 Ifp en0 Ifa 10.0.0.10 [never] [SCOPED]
@@ -16063,10 +22821,18 @@ New Routes ('test11') = <IPv4RouteList[9]> = {
  6. Net 10.0.0.1/32 Ifp en0 Ifa 10.0.0.10 [last] [SCOPED]
  7. Net 192.168.2.0/24 Ifp fw0 Ifa 192.168.2.30
  8. Net 192.168.2.1/32 Ifp fw0 Ifa 192.168.2.30
+ 9. Net 224.0.0.0/4 Ifp en1 Ifa 10.0.0.20
+10. Net 224.0.0.0/4 Ifp fw0 Ifa 192.168.2.30 [SCOPED]
+11. Net 224.0.0.0/4 Ifp en0 Ifa 10.0.0.10 [last] [SCOPED]
+12. Net 255.255.255.255/32 Ifp en1 Ifa 10.0.0.20
+13. Net 255.255.255.255/32 Ifp fw0 Ifa 192.168.2.30 [SCOPED]
+14. Net 255.255.255.255/32 Ifp en0 Ifa 10.0.0.10 [last] [SCOPED]
 }
 Remove old[0]: Net 0.0.0.0/0 Gate 192.168.130.1 Ifp en0 Ifa 192.168.130.16
 Remove old[12]: Net 192.168.130.0/24 Ifp en0 Ifa 192.168.130.16
 Remove old[13]: Net 192.168.130.1/32 Ifp en0 Ifa 192.168.130.16
+Remove old[14]: Net 224.0.0.0/4 Ifp en0 Ifa 192.168.130.16
+Remove old[15]: Net 255.255.255.255/32 Ifp en0 Ifa 192.168.130.16
 Add new[5]: Net 10.0.0.1/32 Ifp en1 Ifa 10.0.0.20
 Add new[0]: Net 0.0.0.0/0 Gate 10.0.0.1 Ifp en1 Ifa 10.0.0.20
 Add new[8]: Net 192.168.2.1/32 Ifp fw0 Ifa 192.168.2.30
@@ -16076,16 +22842,26 @@ Add new[2]: Net 0.0.0.0/0 Gate 10.0.0.1 Ifp en0 Ifa 10.0.0.10 [never] [SCOPED]
 Add new[3]: Net 10.0.0.0/24 Ifp en1 Ifa 10.0.0.20
 Add new[4]: Net 10.0.0.0/24 Ifp en0 Ifa 10.0.0.10 [last] [SCOPED]
 Add new[7]: Net 192.168.2.0/24 Ifp fw0 Ifa 192.168.2.30
+Add new[9]: Net 224.0.0.0/4 Ifp en1 Ifa 10.0.0.20
+Add new[10]: Net 224.0.0.0/4 Ifp fw0 Ifa 192.168.2.30 [SCOPED]
+Add new[11]: Net 224.0.0.0/4 Ifp en0 Ifa 10.0.0.10 [last] [SCOPED]
+Add new[12]: Net 255.255.255.255/32 Ifp en1 Ifa 10.0.0.20
+Add new[13]: Net 255.255.255.255/32 Ifp fw0 Ifa 192.168.2.30 [SCOPED]
+Add new[14]: Net 255.255.255.255/32 Ifp en0 Ifa 10.0.0.10 [last] [SCOPED]
 =================> Apply 'test18', 'test11' End <=================
 
 =================> Apply 'test12', 'test13' Begin <=================
-Old routes ('test12') = <IPv4RouteList[6]> = {
+Old routes ('test12') = <IPv4RouteList[10]> = {
  0. Net 0.0.0.0/0 Gate 10.0.0.1 Ifp en0 Ifa 10.0.0.10
  1. Net 0.0.0.0/0 Gate 10.0.0.1 Ifp en1 Ifa 10.0.0.20 [SCOPED]
  2. Net 10.0.0.0/24 Ifp en0 Ifa 10.0.0.10
  3. Net 10.0.0.0/24 Ifp en1 Ifa 10.0.0.20 [SCOPED]
  4. Net 10.0.0.1/32 Ifp en0 Ifa 10.0.0.10
  5. Net 10.0.0.1/32 Ifp en1 Ifa 10.0.0.20 [SCOPED]
+ 6. Net 224.0.0.0/4 Ifp en0 Ifa 10.0.0.10
+ 7. Net 224.0.0.0/4 Ifp en1 Ifa 10.0.0.20 [SCOPED]
+ 8. Net 255.255.255.255/32 Ifp en0 Ifa 10.0.0.10
+ 9. Net 255.255.255.255/32 Ifp en1 Ifa 10.0.0.20 [SCOPED]
 }
 Add new[4]: Net 10.0.0.1/32 Ifp en0 Ifa 10.0.0.10
 Add new[0]: Net 0.0.0.0/0 Gate 10.0.0.1 Ifp en0 Ifa 10.0.0.10
@@ -16093,24 +22869,36 @@ Add new[5]: Net 10.0.0.1/32 Ifp en1 Ifa 10.0.0.20 [SCOPED]
 Add new[1]: Net 0.0.0.0/0 Gate 10.0.0.1 Ifp en1 Ifa 10.0.0.20 [SCOPED]
 Add new[2]: Net 10.0.0.0/24 Ifp en0 Ifa 10.0.0.10
 Add new[3]: Net 10.0.0.0/24 Ifp en1 Ifa 10.0.0.20 [SCOPED]
-New Routes ('test13') = <IPv4RouteList[6]> = {
+Add new[6]: Net 224.0.0.0/4 Ifp en0 Ifa 10.0.0.10
+Add new[7]: Net 224.0.0.0/4 Ifp en1 Ifa 10.0.0.20 [SCOPED]
+Add new[8]: Net 255.255.255.255/32 Ifp en0 Ifa 10.0.0.10
+Add new[9]: Net 255.255.255.255/32 Ifp en1 Ifa 10.0.0.20 [SCOPED]
+New Routes ('test13') = <IPv4RouteList[10]> = {
  0. Net 0.0.0.0/0 Gate 10.0.0.1 Ifp en0 Ifa 10.0.0.10
  1. Net 0.0.0.0/0 Gate 10.0.0.1 Ifp en1 Ifa 10.0.0.20 [never] [SCOPED]
  2. Net 10.0.0.0/24 Ifp en0 Ifa 10.0.0.10
  3. Net 10.0.0.0/24 Ifp en1 Ifa 10.0.0.20 [last] [SCOPED]
  4. Net 10.0.0.1/32 Ifp en0 Ifa 10.0.0.10
  5. Net 10.0.0.1/32 Ifp en1 Ifa 10.0.0.20 [last] [SCOPED]
+ 6. Net 224.0.0.0/4 Ifp en0 Ifa 10.0.0.10
+ 7. Net 224.0.0.0/4 Ifp en1 Ifa 10.0.0.20 [last] [SCOPED]
+ 8. Net 255.255.255.255/32 Ifp en0 Ifa 10.0.0.10
+ 9. Net 255.255.255.255/32 Ifp en1 Ifa 10.0.0.20 [last] [SCOPED]
 }
 =================> Apply 'test12', 'test13' End <=================
 
 =================> Apply 'test13', 'test12' Begin <=================
-Old routes ('test13') = <IPv4RouteList[6]> = {
+Old routes ('test13') = <IPv4RouteList[10]> = {
  0. Net 0.0.0.0/0 Gate 10.0.0.1 Ifp en0 Ifa 10.0.0.10
  1. Net 0.0.0.0/0 Gate 10.0.0.1 Ifp en1 Ifa 10.0.0.20 [never] [SCOPED]
  2. Net 10.0.0.0/24 Ifp en0 Ifa 10.0.0.10
  3. Net 10.0.0.0/24 Ifp en1 Ifa 10.0.0.20 [last] [SCOPED]
  4. Net 10.0.0.1/32 Ifp en0 Ifa 10.0.0.10
  5. Net 10.0.0.1/32 Ifp en1 Ifa 10.0.0.20 [last] [SCOPED]
+ 6. Net 224.0.0.0/4 Ifp en0 Ifa 10.0.0.10
+ 7. Net 224.0.0.0/4 Ifp en1 Ifa 10.0.0.20 [last] [SCOPED]
+ 8. Net 255.255.255.255/32 Ifp en0 Ifa 10.0.0.10
+ 9. Net 255.255.255.255/32 Ifp en1 Ifa 10.0.0.20 [last] [SCOPED]
 }
 Add new[4]: Net 10.0.0.1/32 Ifp en0 Ifa 10.0.0.10
 Add new[0]: Net 0.0.0.0/0 Gate 10.0.0.1 Ifp en0 Ifa 10.0.0.10
@@ -16118,24 +22906,36 @@ Add new[5]: Net 10.0.0.1/32 Ifp en1 Ifa 10.0.0.20 [last] [SCOPED]
 Add new[1]: Net 0.0.0.0/0 Gate 10.0.0.1 Ifp en1 Ifa 10.0.0.20 [never] [SCOPED]
 Add new[2]: Net 10.0.0.0/24 Ifp en0 Ifa 10.0.0.10
 Add new[3]: Net 10.0.0.0/24 Ifp en1 Ifa 10.0.0.20 [last] [SCOPED]
-New Routes ('test12') = <IPv4RouteList[6]> = {
+Add new[6]: Net 224.0.0.0/4 Ifp en0 Ifa 10.0.0.10
+Add new[7]: Net 224.0.0.0/4 Ifp en1 Ifa 10.0.0.20 [last] [SCOPED]
+Add new[8]: Net 255.255.255.255/32 Ifp en0 Ifa 10.0.0.10
+Add new[9]: Net 255.255.255.255/32 Ifp en1 Ifa 10.0.0.20 [last] [SCOPED]
+New Routes ('test12') = <IPv4RouteList[10]> = {
  0. Net 0.0.0.0/0 Gate 10.0.0.1 Ifp en0 Ifa 10.0.0.10
  1. Net 0.0.0.0/0 Gate 10.0.0.1 Ifp en1 Ifa 10.0.0.20 [SCOPED]
  2. Net 10.0.0.0/24 Ifp en0 Ifa 10.0.0.10
  3. Net 10.0.0.0/24 Ifp en1 Ifa 10.0.0.20 [SCOPED]
  4. Net 10.0.0.1/32 Ifp en0 Ifa 10.0.0.10
  5. Net 10.0.0.1/32 Ifp en1 Ifa 10.0.0.20 [SCOPED]
+ 6. Net 224.0.0.0/4 Ifp en0 Ifa 10.0.0.10
+ 7. Net 224.0.0.0/4 Ifp en1 Ifa 10.0.0.20 [SCOPED]
+ 8. Net 255.255.255.255/32 Ifp en0 Ifa 10.0.0.10
+ 9. Net 255.255.255.255/32 Ifp en1 Ifa 10.0.0.20 [SCOPED]
 }
 =================> Apply 'test13', 'test12' End <=================
 
 =================> Apply 'test12', 'test14' Begin <=================
-Old routes ('test12') = <IPv4RouteList[6]> = {
+Old routes ('test12') = <IPv4RouteList[10]> = {
  0. Net 0.0.0.0/0 Gate 10.0.0.1 Ifp en0 Ifa 10.0.0.10
  1. Net 0.0.0.0/0 Gate 10.0.0.1 Ifp en1 Ifa 10.0.0.20 [SCOPED]
  2. Net 10.0.0.0/24 Ifp en0 Ifa 10.0.0.10
  3. Net 10.0.0.0/24 Ifp en1 Ifa 10.0.0.20 [SCOPED]
  4. Net 10.0.0.1/32 Ifp en0 Ifa 10.0.0.10
  5. Net 10.0.0.1/32 Ifp en1 Ifa 10.0.0.20 [SCOPED]
+ 6. Net 224.0.0.0/4 Ifp en0 Ifa 10.0.0.10
+ 7. Net 224.0.0.0/4 Ifp en1 Ifa 10.0.0.20 [SCOPED]
+ 8. Net 255.255.255.255/32 Ifp en0 Ifa 10.0.0.10
+ 9. Net 255.255.255.255/32 Ifp en1 Ifa 10.0.0.20 [SCOPED]
 }
 Add new[4]: Net 10.0.0.1/32 Ifp en0 Ifa 10.0.0.10
 Add new[0]: Net 0.0.0.0/0 Gate 10.0.0.1 Ifp en0 Ifa 10.0.0.10
@@ -16143,54 +22943,84 @@ Add new[5]: Net 10.0.0.1/32 Ifp en1 Ifa 10.0.0.20 [SCOPED]
 Add new[1]: Net 0.0.0.0/0 Gate 10.0.0.1 Ifp en1 Ifa 10.0.0.20 [SCOPED]
 Add new[2]: Net 10.0.0.0/24 Ifp en0 Ifa 10.0.0.10
 Add new[3]: Net 10.0.0.0/24 Ifp en1 Ifa 10.0.0.20 [SCOPED]
-New Routes ('test14') = <IPv4RouteList[3]> = {
+Add new[6]: Net 224.0.0.0/4 Ifp en0 Ifa 10.0.0.10
+Add new[7]: Net 224.0.0.0/4 Ifp en1 Ifa 10.0.0.20 [SCOPED]
+Add new[8]: Net 255.255.255.255/32 Ifp en0 Ifa 10.0.0.10
+Add new[9]: Net 255.255.255.255/32 Ifp en1 Ifa 10.0.0.20 [SCOPED]
+New Routes ('test14') = <IPv4RouteList[5]> = {
  0. Net 0.0.0.0/0 Gate 10.0.0.1 Ifp en1 Ifa 10.0.0.20 [never] [SCOPED]
  1. Net 10.0.0.0/24 Ifp en1 Ifa 10.0.0.20 [last]
  2. Net 10.0.0.1/32 Ifp en1 Ifa 10.0.0.20 [last]
+ 3. Net 224.0.0.0/4 Ifp en1 Ifa 10.0.0.20 [last]
+ 4. Net 255.255.255.255/32 Ifp en1 Ifa 10.0.0.20 [last]
 }
 Remove old[0]: Net 0.0.0.0/0 Gate 10.0.0.1 Ifp en0 Ifa 10.0.0.10
 Remove old[2]: Net 10.0.0.0/24 Ifp en0 Ifa 10.0.0.10
 Remove old[3]: Net 10.0.0.0/24 Ifp en1 Ifa 10.0.0.20 [SCOPED]
 Remove old[4]: Net 10.0.0.1/32 Ifp en0 Ifa 10.0.0.10
 Remove old[5]: Net 10.0.0.1/32 Ifp en1 Ifa 10.0.0.20 [SCOPED]
+Remove old[6]: Net 224.0.0.0/4 Ifp en0 Ifa 10.0.0.10
+Remove old[7]: Net 224.0.0.0/4 Ifp en1 Ifa 10.0.0.20 [SCOPED]
+Remove old[8]: Net 255.255.255.255/32 Ifp en0 Ifa 10.0.0.10
+Remove old[9]: Net 255.255.255.255/32 Ifp en1 Ifa 10.0.0.20 [SCOPED]
 Add new[1]: Net 10.0.0.0/24 Ifp en1 Ifa 10.0.0.20 [last]
 Add new[2]: Net 10.0.0.1/32 Ifp en1 Ifa 10.0.0.20 [last]
+Add new[3]: Net 224.0.0.0/4 Ifp en1 Ifa 10.0.0.20 [last]
+Add new[4]: Net 255.255.255.255/32 Ifp en1 Ifa 10.0.0.20 [last]
 =================> Apply 'test12', 'test14' End <=================
 
 =================> Apply 'test14', 'test12' Begin <=================
-Old routes ('test14') = <IPv4RouteList[3]> = {
+Old routes ('test14') = <IPv4RouteList[5]> = {
  0. Net 0.0.0.0/0 Gate 10.0.0.1 Ifp en1 Ifa 10.0.0.20 [never] [SCOPED]
  1. Net 10.0.0.0/24 Ifp en1 Ifa 10.0.0.20 [last]
  2. Net 10.0.0.1/32 Ifp en1 Ifa 10.0.0.20 [last]
+ 3. Net 224.0.0.0/4 Ifp en1 Ifa 10.0.0.20 [last]
+ 4. Net 255.255.255.255/32 Ifp en1 Ifa 10.0.0.20 [last]
 }
 Add new[2]: Net 10.0.0.1/32 Ifp en1 Ifa 10.0.0.20 [last]
 Add new[0]: Net 0.0.0.0/0 Gate 10.0.0.1 Ifp en1 Ifa 10.0.0.20 [never] [SCOPED]
 Add new[1]: Net 10.0.0.0/24 Ifp en1 Ifa 10.0.0.20 [last]
-New Routes ('test12') = <IPv4RouteList[6]> = {
+Add new[3]: Net 224.0.0.0/4 Ifp en1 Ifa 10.0.0.20 [last]
+Add new[4]: Net 255.255.255.255/32 Ifp en1 Ifa 10.0.0.20 [last]
+New Routes ('test12') = <IPv4RouteList[10]> = {
  0. Net 0.0.0.0/0 Gate 10.0.0.1 Ifp en0 Ifa 10.0.0.10
  1. Net 0.0.0.0/0 Gate 10.0.0.1 Ifp en1 Ifa 10.0.0.20 [SCOPED]
  2. Net 10.0.0.0/24 Ifp en0 Ifa 10.0.0.10
  3. Net 10.0.0.0/24 Ifp en1 Ifa 10.0.0.20 [SCOPED]
  4. Net 10.0.0.1/32 Ifp en0 Ifa 10.0.0.10
  5. Net 10.0.0.1/32 Ifp en1 Ifa 10.0.0.20 [SCOPED]
+ 6. Net 224.0.0.0/4 Ifp en0 Ifa 10.0.0.10
+ 7. Net 224.0.0.0/4 Ifp en1 Ifa 10.0.0.20 [SCOPED]
+ 8. Net 255.255.255.255/32 Ifp en0 Ifa 10.0.0.10
+ 9. Net 255.255.255.255/32 Ifp en1 Ifa 10.0.0.20 [SCOPED]
 }
 Remove old[1]: Net 10.0.0.0/24 Ifp en1 Ifa 10.0.0.20 [last]
 Remove old[2]: Net 10.0.0.1/32 Ifp en1 Ifa 10.0.0.20 [last]
+Remove old[3]: Net 224.0.0.0/4 Ifp en1 Ifa 10.0.0.20 [last]
+Remove old[4]: Net 255.255.255.255/32 Ifp en1 Ifa 10.0.0.20 [last]
 Add new[4]: Net 10.0.0.1/32 Ifp en0 Ifa 10.0.0.10
 Add new[0]: Net 0.0.0.0/0 Gate 10.0.0.1 Ifp en0 Ifa 10.0.0.10
 Add new[2]: Net 10.0.0.0/24 Ifp en0 Ifa 10.0.0.10
 Add new[3]: Net 10.0.0.0/24 Ifp en1 Ifa 10.0.0.20 [SCOPED]
 Add new[5]: Net 10.0.0.1/32 Ifp en1 Ifa 10.0.0.20 [SCOPED]
+Add new[6]: Net 224.0.0.0/4 Ifp en0 Ifa 10.0.0.10
+Add new[7]: Net 224.0.0.0/4 Ifp en1 Ifa 10.0.0.20 [SCOPED]
+Add new[8]: Net 255.255.255.255/32 Ifp en0 Ifa 10.0.0.10
+Add new[9]: Net 255.255.255.255/32 Ifp en1 Ifa 10.0.0.20 [SCOPED]
 =================> Apply 'test14', 'test12' End <=================
 
 =================> Apply 'test12', 'test15' Begin <=================
-Old routes ('test12') = <IPv4RouteList[6]> = {
+Old routes ('test12') = <IPv4RouteList[10]> = {
  0. Net 0.0.0.0/0 Gate 10.0.0.1 Ifp en0 Ifa 10.0.0.10
  1. Net 0.0.0.0/0 Gate 10.0.0.1 Ifp en1 Ifa 10.0.0.20 [SCOPED]
  2. Net 10.0.0.0/24 Ifp en0 Ifa 10.0.0.10
  3. Net 10.0.0.0/24 Ifp en1 Ifa 10.0.0.20 [SCOPED]
  4. Net 10.0.0.1/32 Ifp en0 Ifa 10.0.0.10
  5. Net 10.0.0.1/32 Ifp en1 Ifa 10.0.0.20 [SCOPED]
+ 6. Net 224.0.0.0/4 Ifp en0 Ifa 10.0.0.10
+ 7. Net 224.0.0.0/4 Ifp en1 Ifa 10.0.0.20 [SCOPED]
+ 8. Net 255.255.255.255/32 Ifp en0 Ifa 10.0.0.10
+ 9. Net 255.255.255.255/32 Ifp en1 Ifa 10.0.0.20 [SCOPED]
 }
 Add new[4]: Net 10.0.0.1/32 Ifp en0 Ifa 10.0.0.10
 Add new[0]: Net 0.0.0.0/0 Gate 10.0.0.1 Ifp en0 Ifa 10.0.0.10
@@ -16198,8 +23028,14 @@ Add new[5]: Net 10.0.0.1/32 Ifp en1 Ifa 10.0.0.20 [SCOPED]
 Add new[1]: Net 0.0.0.0/0 Gate 10.0.0.1 Ifp en1 Ifa 10.0.0.20 [SCOPED]
 Add new[2]: Net 10.0.0.0/24 Ifp en0 Ifa 10.0.0.10
 Add new[3]: Net 10.0.0.0/24 Ifp en1 Ifa 10.0.0.20 [SCOPED]
-New Routes ('test15') = <IPv4RouteList[1]> = {
- 0. Net 0.0.0.0/0 Ifp en0 Ifa 169.254.22.44
+Add new[6]: Net 224.0.0.0/4 Ifp en0 Ifa 10.0.0.10
+Add new[7]: Net 224.0.0.0/4 Ifp en1 Ifa 10.0.0.20 [SCOPED]
+Add new[8]: Net 255.255.255.255/32 Ifp en0 Ifa 10.0.0.10
+Add new[9]: Net 255.255.255.255/32 Ifp en1 Ifa 10.0.0.20 [SCOPED]
+New Routes ('test15') = <IPv4RouteList[3]> = {
+ 0. Net 169.254.0.0/16 Ifp en0 Ifa 169.254.22.44 [last]
+ 1. Net 224.0.0.0/4 Ifp en0 Ifa 169.254.22.44 [last]
+ 2. Net 255.255.255.255/32 Ifp en0 Ifa 169.254.22.44 [last]
 }
 Remove old[0]: Net 0.0.0.0/0 Gate 10.0.0.1 Ifp en0 Ifa 10.0.0.10
 Remove old[1]: Net 0.0.0.0/0 Gate 10.0.0.1 Ifp en1 Ifa 10.0.0.20 [SCOPED]
@@ -16207,39 +23043,63 @@ Remove old[2]: Net 10.0.0.0/24 Ifp en0 Ifa 10.0.0.10
 Remove old[3]: Net 10.0.0.0/24 Ifp en1 Ifa 10.0.0.20 [SCOPED]
 Remove old[4]: Net 10.0.0.1/32 Ifp en0 Ifa 10.0.0.10
 Remove old[5]: Net 10.0.0.1/32 Ifp en1 Ifa 10.0.0.20 [SCOPED]
-Add new[0]: Net 0.0.0.0/0 Ifp en0 Ifa 169.254.22.44
+Remove old[6]: Net 224.0.0.0/4 Ifp en0 Ifa 10.0.0.10
+Remove old[7]: Net 224.0.0.0/4 Ifp en1 Ifa 10.0.0.20 [SCOPED]
+Remove old[8]: Net 255.255.255.255/32 Ifp en0 Ifa 10.0.0.10
+Remove old[9]: Net 255.255.255.255/32 Ifp en1 Ifa 10.0.0.20 [SCOPED]
+Add new[0]: Net 169.254.0.0/16 Ifp en0 Ifa 169.254.22.44 [last]
+Add new[1]: Net 224.0.0.0/4 Ifp en0 Ifa 169.254.22.44 [last]
+Add new[2]: Net 255.255.255.255/32 Ifp en0 Ifa 169.254.22.44 [last]
 =================> Apply 'test12', 'test15' End <=================
 
 =================> Apply 'test15', 'test12' Begin <=================
-Old routes ('test15') = <IPv4RouteList[1]> = {
- 0. Net 0.0.0.0/0 Ifp en0 Ifa 169.254.22.44
+Old routes ('test15') = <IPv4RouteList[3]> = {
+ 0. Net 169.254.0.0/16 Ifp en0 Ifa 169.254.22.44 [last]
+ 1. Net 224.0.0.0/4 Ifp en0 Ifa 169.254.22.44 [last]
+ 2. Net 255.255.255.255/32 Ifp en0 Ifa 169.254.22.44 [last]
 }
-Add new[0]: Net 0.0.0.0/0 Ifp en0 Ifa 169.254.22.44
-New Routes ('test12') = <IPv4RouteList[6]> = {
+Add new[0]: Net 169.254.0.0/16 Ifp en0 Ifa 169.254.22.44 [last]
+Add new[1]: Net 224.0.0.0/4 Ifp en0 Ifa 169.254.22.44 [last]
+Add new[2]: Net 255.255.255.255/32 Ifp en0 Ifa 169.254.22.44 [last]
+New Routes ('test12') = <IPv4RouteList[10]> = {
  0. Net 0.0.0.0/0 Gate 10.0.0.1 Ifp en0 Ifa 10.0.0.10
  1. Net 0.0.0.0/0 Gate 10.0.0.1 Ifp en1 Ifa 10.0.0.20 [SCOPED]
  2. Net 10.0.0.0/24 Ifp en0 Ifa 10.0.0.10
  3. Net 10.0.0.0/24 Ifp en1 Ifa 10.0.0.20 [SCOPED]
  4. Net 10.0.0.1/32 Ifp en0 Ifa 10.0.0.10
  5. Net 10.0.0.1/32 Ifp en1 Ifa 10.0.0.20 [SCOPED]
-}
-Remove old[0]: Net 0.0.0.0/0 Ifp en0 Ifa 169.254.22.44
+ 6. Net 224.0.0.0/4 Ifp en0 Ifa 10.0.0.10
+ 7. Net 224.0.0.0/4 Ifp en1 Ifa 10.0.0.20 [SCOPED]
+ 8. Net 255.255.255.255/32 Ifp en0 Ifa 10.0.0.10
+ 9. Net 255.255.255.255/32 Ifp en1 Ifa 10.0.0.20 [SCOPED]
+}
+Remove old[0]: Net 169.254.0.0/16 Ifp en0 Ifa 169.254.22.44 [last]
+Remove old[1]: Net 224.0.0.0/4 Ifp en0 Ifa 169.254.22.44 [last]
+Remove old[2]: Net 255.255.255.255/32 Ifp en0 Ifa 169.254.22.44 [last]
 Add new[4]: Net 10.0.0.1/32 Ifp en0 Ifa 10.0.0.10
 Add new[0]: Net 0.0.0.0/0 Gate 10.0.0.1 Ifp en0 Ifa 10.0.0.10
 Add new[5]: Net 10.0.0.1/32 Ifp en1 Ifa 10.0.0.20 [SCOPED]
 Add new[1]: Net 0.0.0.0/0 Gate 10.0.0.1 Ifp en1 Ifa 10.0.0.20 [SCOPED]
 Add new[2]: Net 10.0.0.0/24 Ifp en0 Ifa 10.0.0.10
 Add new[3]: Net 10.0.0.0/24 Ifp en1 Ifa 10.0.0.20 [SCOPED]
+Add new[6]: Net 224.0.0.0/4 Ifp en0 Ifa 10.0.0.10
+Add new[7]: Net 224.0.0.0/4 Ifp en1 Ifa 10.0.0.20 [SCOPED]
+Add new[8]: Net 255.255.255.255/32 Ifp en0 Ifa 10.0.0.10
+Add new[9]: Net 255.255.255.255/32 Ifp en1 Ifa 10.0.0.20 [SCOPED]
 =================> Apply 'test15', 'test12' End <=================
 
 =================> Apply 'test12', 'test16' Begin <=================
-Old routes ('test12') = <IPv4RouteList[6]> = {
+Old routes ('test12') = <IPv4RouteList[10]> = {
  0. Net 0.0.0.0/0 Gate 10.0.0.1 Ifp en0 Ifa 10.0.0.10
  1. Net 0.0.0.0/0 Gate 10.0.0.1 Ifp en1 Ifa 10.0.0.20 [SCOPED]
  2. Net 10.0.0.0/24 Ifp en0 Ifa 10.0.0.10
  3. Net 10.0.0.0/24 Ifp en1 Ifa 10.0.0.20 [SCOPED]
  4. Net 10.0.0.1/32 Ifp en0 Ifa 10.0.0.10
  5. Net 10.0.0.1/32 Ifp en1 Ifa 10.0.0.20 [SCOPED]
+ 6. Net 224.0.0.0/4 Ifp en0 Ifa 10.0.0.10
+ 7. Net 224.0.0.0/4 Ifp en1 Ifa 10.0.0.20 [SCOPED]
+ 8. Net 255.255.255.255/32 Ifp en0 Ifa 10.0.0.10
+ 9. Net 255.255.255.255/32 Ifp en1 Ifa 10.0.0.20 [SCOPED]
 }
 Add new[4]: Net 10.0.0.1/32 Ifp en0 Ifa 10.0.0.10
 Add new[0]: Net 0.0.0.0/0 Gate 10.0.0.1 Ifp en0 Ifa 10.0.0.10
@@ -16247,7 +23107,11 @@ Add new[5]: Net 10.0.0.1/32 Ifp en1 Ifa 10.0.0.20 [SCOPED]
 Add new[1]: Net 0.0.0.0/0 Gate 10.0.0.1 Ifp en1 Ifa 10.0.0.20 [SCOPED]
 Add new[2]: Net 10.0.0.0/24 Ifp en0 Ifa 10.0.0.10
 Add new[3]: Net 10.0.0.0/24 Ifp en1 Ifa 10.0.0.20 [SCOPED]
-New Routes ('test16') = <IPv4RouteList[50]> = {
+Add new[6]: Net 224.0.0.0/4 Ifp en0 Ifa 10.0.0.10
+Add new[7]: Net 224.0.0.0/4 Ifp en1 Ifa 10.0.0.20 [SCOPED]
+Add new[8]: Net 255.255.255.255/32 Ifp en0 Ifa 10.0.0.10
+Add new[9]: Net 255.255.255.255/32 Ifp en1 Ifa 10.0.0.20 [SCOPED]
+New Routes ('test16') = <IPv4RouteList[54]> = {
  0. Net 0.0.0.0/0 Gate 10.0.0.1 Ifp en0 Ifa 10.0.0.10
  1. Net 0.0.0.0/0 Ifp utun0 Ifa 17.153.46.24 [SCOPED]
  2. Net 10.0.0.0/24 Ifp en0 Ifa 10.0.0.10
@@ -16298,10 +23162,16 @@ New Routes ('test16') = <IPv4RouteList[50]> = {
 47. Net 192.35.50.0/24 Gate 17.153.46.24 Ifp utun0 Ifa 17.153.46.24
 48. Net 204.179.20.0/24 Gate 17.153.46.24 Ifp utun0 Ifa 17.153.46.24
 49. Net 206.112.116.0/24 Gate 17.153.46.24 Ifp utun0 Ifa 17.153.46.24
+50. Net 224.0.0.0/4 Ifp en0 Ifa 10.0.0.10
+51. Net 224.0.0.0/4 Ifp utun0 Ifa 17.153.46.24 [SCOPED]
+52. Net 255.255.255.255/32 Ifp en0 Ifa 10.0.0.10
+53. Net 255.255.255.255/32 Ifp utun0 Ifa 17.153.46.24 [SCOPED]
 }
 Remove old[1]: Net 0.0.0.0/0 Gate 10.0.0.1 Ifp en1 Ifa 10.0.0.20 [SCOPED]
 Remove old[3]: Net 10.0.0.0/24 Ifp en1 Ifa 10.0.0.20 [SCOPED]
 Remove old[5]: Net 10.0.0.1/32 Ifp en1 Ifa 10.0.0.20 [SCOPED]
+Remove old[7]: Net 224.0.0.0/4 Ifp en1 Ifa 10.0.0.20 [SCOPED]
+Remove old[9]: Net 255.255.255.255/32 Ifp en1 Ifa 10.0.0.20 [SCOPED]
 Add new[1]: Net 0.0.0.0/0 Ifp utun0 Ifa 17.153.46.24 [SCOPED]
 Add new[4]: Net 10.1.3.0/24 Gate 17.153.46.24 Ifp utun0 Ifa 17.153.46.24
 Add new[5]: Net 10.1.4.0/24 Gate 17.153.46.24 Ifp utun0 Ifa 17.153.46.24
@@ -16349,10 +23219,12 @@ Add new[46]: Net 172.16.2.0/24 Gate 17.153.46.24 Ifp utun0 Ifa 17.153.46.24
 Add new[47]: Net 192.35.50.0/24 Gate 17.153.46.24 Ifp utun0 Ifa 17.153.46.24
 Add new[48]: Net 204.179.20.0/24 Gate 17.153.46.24 Ifp utun0 Ifa 17.153.46.24
 Add new[49]: Net 206.112.116.0/24 Gate 17.153.46.24 Ifp utun0 Ifa 17.153.46.24
+Add new[51]: Net 224.0.0.0/4 Ifp utun0 Ifa 17.153.46.24 [SCOPED]
+Add new[53]: Net 255.255.255.255/32 Ifp utun0 Ifa 17.153.46.24 [SCOPED]
 =================> Apply 'test12', 'test16' End <=================
 
 =================> Apply 'test16', 'test12' Begin <=================
-Old routes ('test16') = <IPv4RouteList[50]> = {
+Old routes ('test16') = <IPv4RouteList[54]> = {
  0. Net 0.0.0.0/0 Gate 10.0.0.1 Ifp en0 Ifa 10.0.0.10
  1. Net 0.0.0.0/0 Ifp utun0 Ifa 17.153.46.24 [SCOPED]
  2. Net 10.0.0.0/24 Ifp en0 Ifa 10.0.0.10
@@ -16403,6 +23275,10 @@ Old routes ('test16') = <IPv4RouteList[50]> = {
 47. Net 192.35.50.0/24 Gate 17.153.46.24 Ifp utun0 Ifa 17.153.46.24
 48. Net 204.179.20.0/24 Gate 17.153.46.24 Ifp utun0 Ifa 17.153.46.24
 49. Net 206.112.116.0/24 Gate 17.153.46.24 Ifp utun0 Ifa 17.153.46.24
+50. Net 224.0.0.0/4 Ifp en0 Ifa 10.0.0.10
+51. Net 224.0.0.0/4 Ifp utun0 Ifa 17.153.46.24 [SCOPED]
+52. Net 255.255.255.255/32 Ifp en0 Ifa 10.0.0.10
+53. Net 255.255.255.255/32 Ifp utun0 Ifa 17.153.46.24 [SCOPED]
 }
 Add new[3]: Net 10.0.0.1/32 Ifp en0 Ifa 10.0.0.10
 Add new[0]: Net 0.0.0.0/0 Gate 10.0.0.1 Ifp en0 Ifa 10.0.0.10
@@ -16454,13 +23330,21 @@ Add new[46]: Net 172.16.2.0/24 Gate 17.153.46.24 Ifp utun0 Ifa 17.153.46.24
 Add new[47]: Net 192.35.50.0/24 Gate 17.153.46.24 Ifp utun0 Ifa 17.153.46.24
 Add new[48]: Net 204.179.20.0/24 Gate 17.153.46.24 Ifp utun0 Ifa 17.153.46.24
 Add new[49]: Net 206.112.116.0/24 Gate 17.153.46.24 Ifp utun0 Ifa 17.153.46.24
-New Routes ('test12') = <IPv4RouteList[6]> = {
+Add new[50]: Net 224.0.0.0/4 Ifp en0 Ifa 10.0.0.10
+Add new[51]: Net 224.0.0.0/4 Ifp utun0 Ifa 17.153.46.24 [SCOPED]
+Add new[52]: Net 255.255.255.255/32 Ifp en0 Ifa 10.0.0.10
+Add new[53]: Net 255.255.255.255/32 Ifp utun0 Ifa 17.153.46.24 [SCOPED]
+New Routes ('test12') = <IPv4RouteList[10]> = {
  0. Net 0.0.0.0/0 Gate 10.0.0.1 Ifp en0 Ifa 10.0.0.10
  1. Net 0.0.0.0/0 Gate 10.0.0.1 Ifp en1 Ifa 10.0.0.20 [SCOPED]
  2. Net 10.0.0.0/24 Ifp en0 Ifa 10.0.0.10
  3. Net 10.0.0.0/24 Ifp en1 Ifa 10.0.0.20 [SCOPED]
  4. Net 10.0.0.1/32 Ifp en0 Ifa 10.0.0.10
  5. Net 10.0.0.1/32 Ifp en1 Ifa 10.0.0.20 [SCOPED]
+ 6. Net 224.0.0.0/4 Ifp en0 Ifa 10.0.0.10
+ 7. Net 224.0.0.0/4 Ifp en1 Ifa 10.0.0.20 [SCOPED]
+ 8. Net 255.255.255.255/32 Ifp en0 Ifa 10.0.0.10
+ 9. Net 255.255.255.255/32 Ifp en1 Ifa 10.0.0.20 [SCOPED]
 }
 Remove old[1]: Net 0.0.0.0/0 Ifp utun0 Ifa 17.153.46.24 [SCOPED]
 Remove old[4]: Net 10.1.3.0/24 Gate 17.153.46.24 Ifp utun0 Ifa 17.153.46.24
@@ -16509,19 +23393,27 @@ Remove old[46]: Net 172.16.2.0/24 Gate 17.153.46.24 Ifp utun0 Ifa 17.153.46.24
 Remove old[47]: Net 192.35.50.0/24 Gate 17.153.46.24 Ifp utun0 Ifa 17.153.46.24
 Remove old[48]: Net 204.179.20.0/24 Gate 17.153.46.24 Ifp utun0 Ifa 17.153.46.24
 Remove old[49]: Net 206.112.116.0/24 Gate 17.153.46.24 Ifp utun0 Ifa 17.153.46.24
+Remove old[51]: Net 224.0.0.0/4 Ifp utun0 Ifa 17.153.46.24 [SCOPED]
+Remove old[53]: Net 255.255.255.255/32 Ifp utun0 Ifa 17.153.46.24 [SCOPED]
 Add new[5]: Net 10.0.0.1/32 Ifp en1 Ifa 10.0.0.20 [SCOPED]
 Add new[1]: Net 0.0.0.0/0 Gate 10.0.0.1 Ifp en1 Ifa 10.0.0.20 [SCOPED]
 Add new[3]: Net 10.0.0.0/24 Ifp en1 Ifa 10.0.0.20 [SCOPED]
+Add new[7]: Net 224.0.0.0/4 Ifp en1 Ifa 10.0.0.20 [SCOPED]
+Add new[9]: Net 255.255.255.255/32 Ifp en1 Ifa 10.0.0.20 [SCOPED]
 =================> Apply 'test16', 'test12' End <=================
 
 =================> Apply 'test12', 'test17' Begin <=================
-Old routes ('test12') = <IPv4RouteList[6]> = {
+Old routes ('test12') = <IPv4RouteList[10]> = {
  0. Net 0.0.0.0/0 Gate 10.0.0.1 Ifp en0 Ifa 10.0.0.10
  1. Net 0.0.0.0/0 Gate 10.0.0.1 Ifp en1 Ifa 10.0.0.20 [SCOPED]
  2. Net 10.0.0.0/24 Ifp en0 Ifa 10.0.0.10
  3. Net 10.0.0.0/24 Ifp en1 Ifa 10.0.0.20 [SCOPED]
  4. Net 10.0.0.1/32 Ifp en0 Ifa 10.0.0.10
  5. Net 10.0.0.1/32 Ifp en1 Ifa 10.0.0.20 [SCOPED]
+ 6. Net 224.0.0.0/4 Ifp en0 Ifa 10.0.0.10
+ 7. Net 224.0.0.0/4 Ifp en1 Ifa 10.0.0.20 [SCOPED]
+ 8. Net 255.255.255.255/32 Ifp en0 Ifa 10.0.0.10
+ 9. Net 255.255.255.255/32 Ifp en1 Ifa 10.0.0.20 [SCOPED]
 }
 Add new[4]: Net 10.0.0.1/32 Ifp en0 Ifa 10.0.0.10
 Add new[0]: Net 0.0.0.0/0 Gate 10.0.0.1 Ifp en0 Ifa 10.0.0.10
@@ -16529,30 +23421,46 @@ Add new[5]: Net 10.0.0.1/32 Ifp en1 Ifa 10.0.0.20 [SCOPED]
 Add new[1]: Net 0.0.0.0/0 Gate 10.0.0.1 Ifp en1 Ifa 10.0.0.20 [SCOPED]
 Add new[2]: Net 10.0.0.0/24 Ifp en0 Ifa 10.0.0.10
 Add new[3]: Net 10.0.0.0/24 Ifp en1 Ifa 10.0.0.20 [SCOPED]
-New Routes ('test17') = <IPv4RouteList[6]> = {
+Add new[6]: Net 224.0.0.0/4 Ifp en0 Ifa 10.0.0.10
+Add new[7]: Net 224.0.0.0/4 Ifp en1 Ifa 10.0.0.20 [SCOPED]
+Add new[8]: Net 255.255.255.255/32 Ifp en0 Ifa 10.0.0.10
+Add new[9]: Net 255.255.255.255/32 Ifp en1 Ifa 10.0.0.20 [SCOPED]
+New Routes ('test17') = <IPv4RouteList[10]> = {
  0. Net 0.0.0.0/0 Gate 10.0.0.1 Ifp en0 Ifa 10.0.0.10
  1. Net 0.0.0.0/0 Gate 192.168.2.1 Ifp en1 Ifa 192.168.2.50 [never] [SCOPED]
  2. Net 10.0.0.0/24 Ifp en0 Ifa 10.0.0.10
  3. Net 10.0.0.1/32 Ifp en0 Ifa 10.0.0.10
  4. Net 192.168.2.0/24 Ifp en1 Ifa 192.168.2.50 [last]
  5. Net 192.168.2.1/32 Ifp en1 Ifa 192.168.2.50 [last]
+ 6. Net 224.0.0.0/4 Ifp en0 Ifa 10.0.0.10
+ 7. Net 224.0.0.0/4 Ifp en1 Ifa 192.168.2.50 [last] [SCOPED]
+ 8. Net 255.255.255.255/32 Ifp en0 Ifa 10.0.0.10
+ 9. Net 255.255.255.255/32 Ifp en1 Ifa 192.168.2.50 [last] [SCOPED]
 }
 Remove old[1]: Net 0.0.0.0/0 Gate 10.0.0.1 Ifp en1 Ifa 10.0.0.20 [SCOPED]
 Remove old[3]: Net 10.0.0.0/24 Ifp en1 Ifa 10.0.0.20 [SCOPED]
 Remove old[5]: Net 10.0.0.1/32 Ifp en1 Ifa 10.0.0.20 [SCOPED]
+Remove old[7]: Net 224.0.0.0/4 Ifp en1 Ifa 10.0.0.20 [SCOPED]
+Remove old[9]: Net 255.255.255.255/32 Ifp en1 Ifa 10.0.0.20 [SCOPED]
 Add new[5]: Net 192.168.2.1/32 Ifp en1 Ifa 192.168.2.50 [last]
 Add new[1]: Net 0.0.0.0/0 Gate 192.168.2.1 Ifp en1 Ifa 192.168.2.50 [never] [SCOPED]
 Add new[4]: Net 192.168.2.0/24 Ifp en1 Ifa 192.168.2.50 [last]
+Add new[7]: Net 224.0.0.0/4 Ifp en1 Ifa 192.168.2.50 [last] [SCOPED]
+Add new[9]: Net 255.255.255.255/32 Ifp en1 Ifa 192.168.2.50 [last] [SCOPED]
 =================> Apply 'test12', 'test17' End <=================
 
 =================> Apply 'test17', 'test12' Begin <=================
-Old routes ('test17') = <IPv4RouteList[6]> = {
+Old routes ('test17') = <IPv4RouteList[10]> = {
  0. Net 0.0.0.0/0 Gate 10.0.0.1 Ifp en0 Ifa 10.0.0.10
  1. Net 0.0.0.0/0 Gate 192.168.2.1 Ifp en1 Ifa 192.168.2.50 [never] [SCOPED]
  2. Net 10.0.0.0/24 Ifp en0 Ifa 10.0.0.10
  3. Net 10.0.0.1/32 Ifp en0 Ifa 10.0.0.10
  4. Net 192.168.2.0/24 Ifp en1 Ifa 192.168.2.50 [last]
  5. Net 192.168.2.1/32 Ifp en1 Ifa 192.168.2.50 [last]
+ 6. Net 224.0.0.0/4 Ifp en0 Ifa 10.0.0.10
+ 7. Net 224.0.0.0/4 Ifp en1 Ifa 192.168.2.50 [last] [SCOPED]
+ 8. Net 255.255.255.255/32 Ifp en0 Ifa 10.0.0.10
+ 9. Net 255.255.255.255/32 Ifp en1 Ifa 192.168.2.50 [last] [SCOPED]
 }
 Add new[3]: Net 10.0.0.1/32 Ifp en0 Ifa 10.0.0.10
 Add new[0]: Net 0.0.0.0/0 Gate 10.0.0.1 Ifp en0 Ifa 10.0.0.10
@@ -16560,30 +23468,46 @@ Add new[5]: Net 192.168.2.1/32 Ifp en1 Ifa 192.168.2.50 [last]
 Add new[1]: Net 0.0.0.0/0 Gate 192.168.2.1 Ifp en1 Ifa 192.168.2.50 [never] [SCOPED]
 Add new[2]: Net 10.0.0.0/24 Ifp en0 Ifa 10.0.0.10
 Add new[4]: Net 192.168.2.0/24 Ifp en1 Ifa 192.168.2.50 [last]
-New Routes ('test12') = <IPv4RouteList[6]> = {
+Add new[6]: Net 224.0.0.0/4 Ifp en0 Ifa 10.0.0.10
+Add new[7]: Net 224.0.0.0/4 Ifp en1 Ifa 192.168.2.50 [last] [SCOPED]
+Add new[8]: Net 255.255.255.255/32 Ifp en0 Ifa 10.0.0.10
+Add new[9]: Net 255.255.255.255/32 Ifp en1 Ifa 192.168.2.50 [last] [SCOPED]
+New Routes ('test12') = <IPv4RouteList[10]> = {
  0. Net 0.0.0.0/0 Gate 10.0.0.1 Ifp en0 Ifa 10.0.0.10
  1. Net 0.0.0.0/0 Gate 10.0.0.1 Ifp en1 Ifa 10.0.0.20 [SCOPED]
  2. Net 10.0.0.0/24 Ifp en0 Ifa 10.0.0.10
  3. Net 10.0.0.0/24 Ifp en1 Ifa 10.0.0.20 [SCOPED]
  4. Net 10.0.0.1/32 Ifp en0 Ifa 10.0.0.10
  5. Net 10.0.0.1/32 Ifp en1 Ifa 10.0.0.20 [SCOPED]
+ 6. Net 224.0.0.0/4 Ifp en0 Ifa 10.0.0.10
+ 7. Net 224.0.0.0/4 Ifp en1 Ifa 10.0.0.20 [SCOPED]
+ 8. Net 255.255.255.255/32 Ifp en0 Ifa 10.0.0.10
+ 9. Net 255.255.255.255/32 Ifp en1 Ifa 10.0.0.20 [SCOPED]
 }
 Remove old[1]: Net 0.0.0.0/0 Gate 192.168.2.1 Ifp en1 Ifa 192.168.2.50 [never] [SCOPED]
 Remove old[4]: Net 192.168.2.0/24 Ifp en1 Ifa 192.168.2.50 [last]
 Remove old[5]: Net 192.168.2.1/32 Ifp en1 Ifa 192.168.2.50 [last]
+Remove old[7]: Net 224.0.0.0/4 Ifp en1 Ifa 192.168.2.50 [last] [SCOPED]
+Remove old[9]: Net 255.255.255.255/32 Ifp en1 Ifa 192.168.2.50 [last] [SCOPED]
 Add new[5]: Net 10.0.0.1/32 Ifp en1 Ifa 10.0.0.20 [SCOPED]
 Add new[1]: Net 0.0.0.0/0 Gate 10.0.0.1 Ifp en1 Ifa 10.0.0.20 [SCOPED]
 Add new[3]: Net 10.0.0.0/24 Ifp en1 Ifa 10.0.0.20 [SCOPED]
+Add new[7]: Net 224.0.0.0/4 Ifp en1 Ifa 10.0.0.20 [SCOPED]
+Add new[9]: Net 255.255.255.255/32 Ifp en1 Ifa 10.0.0.20 [SCOPED]
 =================> Apply 'test17', 'test12' End <=================
 
 =================> Apply 'test12', 'test18' Begin <=================
-Old routes ('test12') = <IPv4RouteList[6]> = {
+Old routes ('test12') = <IPv4RouteList[10]> = {
  0. Net 0.0.0.0/0 Gate 10.0.0.1 Ifp en0 Ifa 10.0.0.10
  1. Net 0.0.0.0/0 Gate 10.0.0.1 Ifp en1 Ifa 10.0.0.20 [SCOPED]
  2. Net 10.0.0.0/24 Ifp en0 Ifa 10.0.0.10
  3. Net 10.0.0.0/24 Ifp en1 Ifa 10.0.0.20 [SCOPED]
  4. Net 10.0.0.1/32 Ifp en0 Ifa 10.0.0.10
  5. Net 10.0.0.1/32 Ifp en1 Ifa 10.0.0.20 [SCOPED]
+ 6. Net 224.0.0.0/4 Ifp en0 Ifa 10.0.0.10
+ 7. Net 224.0.0.0/4 Ifp en1 Ifa 10.0.0.20 [SCOPED]
+ 8. Net 255.255.255.255/32 Ifp en0 Ifa 10.0.0.10
+ 9. Net 255.255.255.255/32 Ifp en1 Ifa 10.0.0.20 [SCOPED]
 }
 Add new[4]: Net 10.0.0.1/32 Ifp en0 Ifa 10.0.0.10
 Add new[0]: Net 0.0.0.0/0 Gate 10.0.0.1 Ifp en0 Ifa 10.0.0.10
@@ -16591,7 +23515,11 @@ Add new[5]: Net 10.0.0.1/32 Ifp en1 Ifa 10.0.0.20 [SCOPED]
 Add new[1]: Net 0.0.0.0/0 Gate 10.0.0.1 Ifp en1 Ifa 10.0.0.20 [SCOPED]
 Add new[2]: Net 10.0.0.0/24 Ifp en0 Ifa 10.0.0.10
 Add new[3]: Net 10.0.0.0/24 Ifp en1 Ifa 10.0.0.20 [SCOPED]
-New Routes ('test18') = <IPv4RouteList[14]> = {
+Add new[6]: Net 224.0.0.0/4 Ifp en0 Ifa 10.0.0.10
+Add new[7]: Net 224.0.0.0/4 Ifp en1 Ifa 10.0.0.20 [SCOPED]
+Add new[8]: Net 255.255.255.255/32 Ifp en0 Ifa 10.0.0.10
+Add new[9]: Net 255.255.255.255/32 Ifp en1 Ifa 10.0.0.20 [SCOPED]
+New Routes ('test18') = <IPv4RouteList[16]> = {
  0. Net 0.0.0.0/0 Gate 192.168.130.1 Ifp en0 Ifa 192.168.130.16
  1. Host 1.1.1.1 Gate 1.1.1.2 Ifp en0 Ifa 192.168.130.16
  2. Host 1.1.1.2 Gate 1.1.1.3 Ifp en0 Ifa 192.168.130.16
@@ -16606,6 +23534,8 @@ New Routes ('test18') = <IPv4RouteList[14]> = {
 11. Host 1.1.1.11 Gate 1.1.1.1 Ifp en0 Ifa 192.168.130.16
 12. Net 192.168.130.0/24 Ifp en0 Ifa 192.168.130.16
 13. Net 192.168.130.1/32 Ifp en0 Ifa 192.168.130.16
+14. Net 224.0.0.0/4 Ifp en0 Ifa 192.168.130.16
+15. Net 255.255.255.255/32 Ifp en0 Ifa 192.168.130.16
 }
 Remove old[0]: Net 0.0.0.0/0 Gate 10.0.0.1 Ifp en0 Ifa 10.0.0.10
 Remove old[1]: Net 0.0.0.0/0 Gate 10.0.0.1 Ifp en1 Ifa 10.0.0.20 [SCOPED]
@@ -16613,24 +23543,30 @@ Remove old[2]: Net 10.0.0.0/24 Ifp en0 Ifa 10.0.0.10
 Remove old[3]: Net 10.0.0.0/24 Ifp en1 Ifa 10.0.0.20 [SCOPED]
 Remove old[4]: Net 10.0.0.1/32 Ifp en0 Ifa 10.0.0.10
 Remove old[5]: Net 10.0.0.1/32 Ifp en1 Ifa 10.0.0.20 [SCOPED]
+Remove old[6]: Net 224.0.0.0/4 Ifp en0 Ifa 10.0.0.10
+Remove old[7]: Net 224.0.0.0/4 Ifp en1 Ifa 10.0.0.20 [SCOPED]
+Remove old[8]: Net 255.255.255.255/32 Ifp en0 Ifa 10.0.0.10
+Remove old[9]: Net 255.255.255.255/32 Ifp en1 Ifa 10.0.0.20 [SCOPED]
 Add new[13]: Net 192.168.130.1/32 Ifp en0 Ifa 192.168.130.16
 Add new[0]: Net 0.0.0.0/0 Gate 192.168.130.1 Ifp en0 Ifa 192.168.130.16
-IPMonitor RouteProcess: routing loop detected, not adding: Host 1.1.1.11 Gate 1.1.1.1 Ifp en0 Ifa 192.168.130.16
-IPMonitor RouteProcess: failed to add: Host 1.1.1.10 Gate 1.1.1.11 Ifp en0 Ifa 192.168.130.16
-IPMonitor RouteProcess: failed to add: Host 1.1.1.9 Gate 1.1.1.10 Ifp en0 Ifa 192.168.130.16
-IPMonitor RouteProcess: failed to add: Host 1.1.1.8 Gate 1.1.1.9 Ifp en0 Ifa 192.168.130.16
-IPMonitor RouteProcess: failed to add: Host 1.1.1.7 Gate 1.1.1.8 Ifp en0 Ifa 192.168.130.16
-IPMonitor RouteProcess: failed to add: Host 1.1.1.6 Gate 1.1.1.7 Ifp en0 Ifa 192.168.130.16
-IPMonitor RouteProcess: failed to add: Host 1.1.1.5 Gate 1.1.1.6 Ifp en0 Ifa 192.168.130.16
-IPMonitor RouteProcess: failed to add: Host 1.1.1.4 Gate 1.1.1.5 Ifp en0 Ifa 192.168.130.16
-IPMonitor RouteProcess: failed to add: Host 1.1.1.3 Gate 1.1.1.4 Ifp en0 Ifa 192.168.130.16
-IPMonitor RouteProcess: failed to add: Host 1.1.1.2 Gate 1.1.1.3 Ifp en0 Ifa 192.168.130.16
-IPMonitor RouteProcess: failed to add: Host 1.1.1.1 Gate 1.1.1.2 Ifp en0 Ifa 192.168.130.16
+routing loop detected, not adding: Host 1.1.1.11 Gate 1.1.1.1 Ifp en0 Ifa 192.168.130.16
+failed to add: Host 1.1.1.10 Gate 1.1.1.11 Ifp en0 Ifa 192.168.130.16
+failed to add: Host 1.1.1.9 Gate 1.1.1.10 Ifp en0 Ifa 192.168.130.16
+failed to add: Host 1.1.1.8 Gate 1.1.1.9 Ifp en0 Ifa 192.168.130.16
+failed to add: Host 1.1.1.7 Gate 1.1.1.8 Ifp en0 Ifa 192.168.130.16
+failed to add: Host 1.1.1.6 Gate 1.1.1.7 Ifp en0 Ifa 192.168.130.16
+failed to add: Host 1.1.1.5 Gate 1.1.1.6 Ifp en0 Ifa 192.168.130.16
+failed to add: Host 1.1.1.4 Gate 1.1.1.5 Ifp en0 Ifa 192.168.130.16
+failed to add: Host 1.1.1.3 Gate 1.1.1.4 Ifp en0 Ifa 192.168.130.16
+failed to add: Host 1.1.1.2 Gate 1.1.1.3 Ifp en0 Ifa 192.168.130.16
+failed to add: Host 1.1.1.1 Gate 1.1.1.2 Ifp en0 Ifa 192.168.130.16
 Add new[12]: Net 192.168.130.0/24 Ifp en0 Ifa 192.168.130.16
+Add new[14]: Net 224.0.0.0/4 Ifp en0 Ifa 192.168.130.16
+Add new[15]: Net 255.255.255.255/32 Ifp en0 Ifa 192.168.130.16
 =================> Apply 'test12', 'test18' End <=================
 
 =================> Apply 'test18', 'test12' Begin <=================
-Old routes ('test18') = <IPv4RouteList[14]> = {
+Old routes ('test18') = <IPv4RouteList[16]> = {
  0. Net 0.0.0.0/0 Gate 192.168.130.1 Ifp en0 Ifa 192.168.130.16
  1. Host 1.1.1.1 Gate 1.1.1.2 Ifp en0 Ifa 192.168.130.16
  2. Host 1.1.1.2 Gate 1.1.1.3 Ifp en0 Ifa 192.168.130.16
@@ -16645,48 +23581,66 @@ Old routes ('test18') = <IPv4RouteList[14]> = {
 11. Host 1.1.1.11 Gate 1.1.1.1 Ifp en0 Ifa 192.168.130.16
 12. Net 192.168.130.0/24 Ifp en0 Ifa 192.168.130.16
 13. Net 192.168.130.1/32 Ifp en0 Ifa 192.168.130.16
+14. Net 224.0.0.0/4 Ifp en0 Ifa 192.168.130.16
+15. Net 255.255.255.255/32 Ifp en0 Ifa 192.168.130.16
 }
 Add new[13]: Net 192.168.130.1/32 Ifp en0 Ifa 192.168.130.16
 Add new[0]: Net 0.0.0.0/0 Gate 192.168.130.1 Ifp en0 Ifa 192.168.130.16
-IPMonitor RouteProcess: routing loop detected, not adding: Host 1.1.1.11 Gate 1.1.1.1 Ifp en0 Ifa 192.168.130.16
-IPMonitor RouteProcess: failed to add: Host 1.1.1.10 Gate 1.1.1.11 Ifp en0 Ifa 192.168.130.16
-IPMonitor RouteProcess: failed to add: Host 1.1.1.9 Gate 1.1.1.10 Ifp en0 Ifa 192.168.130.16
-IPMonitor RouteProcess: failed to add: Host 1.1.1.8 Gate 1.1.1.9 Ifp en0 Ifa 192.168.130.16
-IPMonitor RouteProcess: failed to add: Host 1.1.1.7 Gate 1.1.1.8 Ifp en0 Ifa 192.168.130.16
-IPMonitor RouteProcess: failed to add: Host 1.1.1.6 Gate 1.1.1.7 Ifp en0 Ifa 192.168.130.16
-IPMonitor RouteProcess: failed to add: Host 1.1.1.5 Gate 1.1.1.6 Ifp en0 Ifa 192.168.130.16
-IPMonitor RouteProcess: failed to add: Host 1.1.1.4 Gate 1.1.1.5 Ifp en0 Ifa 192.168.130.16
-IPMonitor RouteProcess: failed to add: Host 1.1.1.3 Gate 1.1.1.4 Ifp en0 Ifa 192.168.130.16
-IPMonitor RouteProcess: failed to add: Host 1.1.1.2 Gate 1.1.1.3 Ifp en0 Ifa 192.168.130.16
-IPMonitor RouteProcess: failed to add: Host 1.1.1.1 Gate 1.1.1.2 Ifp en0 Ifa 192.168.130.16
+routing loop detected, not adding: Host 1.1.1.11 Gate 1.1.1.1 Ifp en0 Ifa 192.168.130.16
+failed to add: Host 1.1.1.10 Gate 1.1.1.11 Ifp en0 Ifa 192.168.130.16
+failed to add: Host 1.1.1.9 Gate 1.1.1.10 Ifp en0 Ifa 192.168.130.16
+failed to add: Host 1.1.1.8 Gate 1.1.1.9 Ifp en0 Ifa 192.168.130.16
+failed to add: Host 1.1.1.7 Gate 1.1.1.8 Ifp en0 Ifa 192.168.130.16
+failed to add: Host 1.1.1.6 Gate 1.1.1.7 Ifp en0 Ifa 192.168.130.16
+failed to add: Host 1.1.1.5 Gate 1.1.1.6 Ifp en0 Ifa 192.168.130.16
+failed to add: Host 1.1.1.4 Gate 1.1.1.5 Ifp en0 Ifa 192.168.130.16
+failed to add: Host 1.1.1.3 Gate 1.1.1.4 Ifp en0 Ifa 192.168.130.16
+failed to add: Host 1.1.1.2 Gate 1.1.1.3 Ifp en0 Ifa 192.168.130.16
+failed to add: Host 1.1.1.1 Gate 1.1.1.2 Ifp en0 Ifa 192.168.130.16
 Add new[12]: Net 192.168.130.0/24 Ifp en0 Ifa 192.168.130.16
-New Routes ('test12') = <IPv4RouteList[6]> = {
+Add new[14]: Net 224.0.0.0/4 Ifp en0 Ifa 192.168.130.16
+Add new[15]: Net 255.255.255.255/32 Ifp en0 Ifa 192.168.130.16
+New Routes ('test12') = <IPv4RouteList[10]> = {
  0. Net 0.0.0.0/0 Gate 10.0.0.1 Ifp en0 Ifa 10.0.0.10
  1. Net 0.0.0.0/0 Gate 10.0.0.1 Ifp en1 Ifa 10.0.0.20 [SCOPED]
  2. Net 10.0.0.0/24 Ifp en0 Ifa 10.0.0.10
  3. Net 10.0.0.0/24 Ifp en1 Ifa 10.0.0.20 [SCOPED]
  4. Net 10.0.0.1/32 Ifp en0 Ifa 10.0.0.10
  5. Net 10.0.0.1/32 Ifp en1 Ifa 10.0.0.20 [SCOPED]
+ 6. Net 224.0.0.0/4 Ifp en0 Ifa 10.0.0.10
+ 7. Net 224.0.0.0/4 Ifp en1 Ifa 10.0.0.20 [SCOPED]
+ 8. Net 255.255.255.255/32 Ifp en0 Ifa 10.0.0.10
+ 9. Net 255.255.255.255/32 Ifp en1 Ifa 10.0.0.20 [SCOPED]
 }
 Remove old[0]: Net 0.0.0.0/0 Gate 192.168.130.1 Ifp en0 Ifa 192.168.130.16
 Remove old[12]: Net 192.168.130.0/24 Ifp en0 Ifa 192.168.130.16
 Remove old[13]: Net 192.168.130.1/32 Ifp en0 Ifa 192.168.130.16
+Remove old[14]: Net 224.0.0.0/4 Ifp en0 Ifa 192.168.130.16
+Remove old[15]: Net 255.255.255.255/32 Ifp en0 Ifa 192.168.130.16
 Add new[4]: Net 10.0.0.1/32 Ifp en0 Ifa 10.0.0.10
 Add new[0]: Net 0.0.0.0/0 Gate 10.0.0.1 Ifp en0 Ifa 10.0.0.10
 Add new[5]: Net 10.0.0.1/32 Ifp en1 Ifa 10.0.0.20 [SCOPED]
 Add new[1]: Net 0.0.0.0/0 Gate 10.0.0.1 Ifp en1 Ifa 10.0.0.20 [SCOPED]
 Add new[2]: Net 10.0.0.0/24 Ifp en0 Ifa 10.0.0.10
 Add new[3]: Net 10.0.0.0/24 Ifp en1 Ifa 10.0.0.20 [SCOPED]
+Add new[6]: Net 224.0.0.0/4 Ifp en0 Ifa 10.0.0.10
+Add new[7]: Net 224.0.0.0/4 Ifp en1 Ifa 10.0.0.20 [SCOPED]
+Add new[8]: Net 255.255.255.255/32 Ifp en0 Ifa 10.0.0.10
+Add new[9]: Net 255.255.255.255/32 Ifp en1 Ifa 10.0.0.20 [SCOPED]
 =================> Apply 'test18', 'test12' End <=================
 
 =================> Apply 'test13', 'test14' Begin <=================
-Old routes ('test13') = <IPv4RouteList[6]> = {
+Old routes ('test13') = <IPv4RouteList[10]> = {
  0. Net 0.0.0.0/0 Gate 10.0.0.1 Ifp en0 Ifa 10.0.0.10
  1. Net 0.0.0.0/0 Gate 10.0.0.1 Ifp en1 Ifa 10.0.0.20 [never] [SCOPED]
  2. Net 10.0.0.0/24 Ifp en0 Ifa 10.0.0.10
  3. Net 10.0.0.0/24 Ifp en1 Ifa 10.0.0.20 [last] [SCOPED]
  4. Net 10.0.0.1/32 Ifp en0 Ifa 10.0.0.10
  5. Net 10.0.0.1/32 Ifp en1 Ifa 10.0.0.20 [last] [SCOPED]
+ 6. Net 224.0.0.0/4 Ifp en0 Ifa 10.0.0.10
+ 7. Net 224.0.0.0/4 Ifp en1 Ifa 10.0.0.20 [last] [SCOPED]
+ 8. Net 255.255.255.255/32 Ifp en0 Ifa 10.0.0.10
+ 9. Net 255.255.255.255/32 Ifp en1 Ifa 10.0.0.20 [last] [SCOPED]
 }
 Add new[4]: Net 10.0.0.1/32 Ifp en0 Ifa 10.0.0.10
 Add new[0]: Net 0.0.0.0/0 Gate 10.0.0.1 Ifp en0 Ifa 10.0.0.10
@@ -16694,54 +23648,84 @@ Add new[5]: Net 10.0.0.1/32 Ifp en1 Ifa 10.0.0.20 [last] [SCOPED]
 Add new[1]: Net 0.0.0.0/0 Gate 10.0.0.1 Ifp en1 Ifa 10.0.0.20 [never] [SCOPED]
 Add new[2]: Net 10.0.0.0/24 Ifp en0 Ifa 10.0.0.10
 Add new[3]: Net 10.0.0.0/24 Ifp en1 Ifa 10.0.0.20 [last] [SCOPED]
-New Routes ('test14') = <IPv4RouteList[3]> = {
+Add new[6]: Net 224.0.0.0/4 Ifp en0 Ifa 10.0.0.10
+Add new[7]: Net 224.0.0.0/4 Ifp en1 Ifa 10.0.0.20 [last] [SCOPED]
+Add new[8]: Net 255.255.255.255/32 Ifp en0 Ifa 10.0.0.10
+Add new[9]: Net 255.255.255.255/32 Ifp en1 Ifa 10.0.0.20 [last] [SCOPED]
+New Routes ('test14') = <IPv4RouteList[5]> = {
  0. Net 0.0.0.0/0 Gate 10.0.0.1 Ifp en1 Ifa 10.0.0.20 [never] [SCOPED]
  1. Net 10.0.0.0/24 Ifp en1 Ifa 10.0.0.20 [last]
  2. Net 10.0.0.1/32 Ifp en1 Ifa 10.0.0.20 [last]
+ 3. Net 224.0.0.0/4 Ifp en1 Ifa 10.0.0.20 [last]
+ 4. Net 255.255.255.255/32 Ifp en1 Ifa 10.0.0.20 [last]
 }
 Remove old[0]: Net 0.0.0.0/0 Gate 10.0.0.1 Ifp en0 Ifa 10.0.0.10
 Remove old[2]: Net 10.0.0.0/24 Ifp en0 Ifa 10.0.0.10
 Remove old[3]: Net 10.0.0.0/24 Ifp en1 Ifa 10.0.0.20 [last] [SCOPED]
 Remove old[4]: Net 10.0.0.1/32 Ifp en0 Ifa 10.0.0.10
 Remove old[5]: Net 10.0.0.1/32 Ifp en1 Ifa 10.0.0.20 [last] [SCOPED]
+Remove old[6]: Net 224.0.0.0/4 Ifp en0 Ifa 10.0.0.10
+Remove old[7]: Net 224.0.0.0/4 Ifp en1 Ifa 10.0.0.20 [last] [SCOPED]
+Remove old[8]: Net 255.255.255.255/32 Ifp en0 Ifa 10.0.0.10
+Remove old[9]: Net 255.255.255.255/32 Ifp en1 Ifa 10.0.0.20 [last] [SCOPED]
 Add new[1]: Net 10.0.0.0/24 Ifp en1 Ifa 10.0.0.20 [last]
 Add new[2]: Net 10.0.0.1/32 Ifp en1 Ifa 10.0.0.20 [last]
+Add new[3]: Net 224.0.0.0/4 Ifp en1 Ifa 10.0.0.20 [last]
+Add new[4]: Net 255.255.255.255/32 Ifp en1 Ifa 10.0.0.20 [last]
 =================> Apply 'test13', 'test14' End <=================
 
 =================> Apply 'test14', 'test13' Begin <=================
-Old routes ('test14') = <IPv4RouteList[3]> = {
+Old routes ('test14') = <IPv4RouteList[5]> = {
  0. Net 0.0.0.0/0 Gate 10.0.0.1 Ifp en1 Ifa 10.0.0.20 [never] [SCOPED]
  1. Net 10.0.0.0/24 Ifp en1 Ifa 10.0.0.20 [last]
  2. Net 10.0.0.1/32 Ifp en1 Ifa 10.0.0.20 [last]
+ 3. Net 224.0.0.0/4 Ifp en1 Ifa 10.0.0.20 [last]
+ 4. Net 255.255.255.255/32 Ifp en1 Ifa 10.0.0.20 [last]
 }
 Add new[2]: Net 10.0.0.1/32 Ifp en1 Ifa 10.0.0.20 [last]
 Add new[0]: Net 0.0.0.0/0 Gate 10.0.0.1 Ifp en1 Ifa 10.0.0.20 [never] [SCOPED]
 Add new[1]: Net 10.0.0.0/24 Ifp en1 Ifa 10.0.0.20 [last]
-New Routes ('test13') = <IPv4RouteList[6]> = {
+Add new[3]: Net 224.0.0.0/4 Ifp en1 Ifa 10.0.0.20 [last]
+Add new[4]: Net 255.255.255.255/32 Ifp en1 Ifa 10.0.0.20 [last]
+New Routes ('test13') = <IPv4RouteList[10]> = {
  0. Net 0.0.0.0/0 Gate 10.0.0.1 Ifp en0 Ifa 10.0.0.10
  1. Net 0.0.0.0/0 Gate 10.0.0.1 Ifp en1 Ifa 10.0.0.20 [never] [SCOPED]
  2. Net 10.0.0.0/24 Ifp en0 Ifa 10.0.0.10
  3. Net 10.0.0.0/24 Ifp en1 Ifa 10.0.0.20 [last] [SCOPED]
  4. Net 10.0.0.1/32 Ifp en0 Ifa 10.0.0.10
  5. Net 10.0.0.1/32 Ifp en1 Ifa 10.0.0.20 [last] [SCOPED]
+ 6. Net 224.0.0.0/4 Ifp en0 Ifa 10.0.0.10
+ 7. Net 224.0.0.0/4 Ifp en1 Ifa 10.0.0.20 [last] [SCOPED]
+ 8. Net 255.255.255.255/32 Ifp en0 Ifa 10.0.0.10
+ 9. Net 255.255.255.255/32 Ifp en1 Ifa 10.0.0.20 [last] [SCOPED]
 }
 Remove old[1]: Net 10.0.0.0/24 Ifp en1 Ifa 10.0.0.20 [last]
 Remove old[2]: Net 10.0.0.1/32 Ifp en1 Ifa 10.0.0.20 [last]
+Remove old[3]: Net 224.0.0.0/4 Ifp en1 Ifa 10.0.0.20 [last]
+Remove old[4]: Net 255.255.255.255/32 Ifp en1 Ifa 10.0.0.20 [last]
 Add new[4]: Net 10.0.0.1/32 Ifp en0 Ifa 10.0.0.10
 Add new[0]: Net 0.0.0.0/0 Gate 10.0.0.1 Ifp en0 Ifa 10.0.0.10
 Add new[2]: Net 10.0.0.0/24 Ifp en0 Ifa 10.0.0.10
 Add new[3]: Net 10.0.0.0/24 Ifp en1 Ifa 10.0.0.20 [last] [SCOPED]
 Add new[5]: Net 10.0.0.1/32 Ifp en1 Ifa 10.0.0.20 [last] [SCOPED]
+Add new[6]: Net 224.0.0.0/4 Ifp en0 Ifa 10.0.0.10
+Add new[7]: Net 224.0.0.0/4 Ifp en1 Ifa 10.0.0.20 [last] [SCOPED]
+Add new[8]: Net 255.255.255.255/32 Ifp en0 Ifa 10.0.0.10
+Add new[9]: Net 255.255.255.255/32 Ifp en1 Ifa 10.0.0.20 [last] [SCOPED]
 =================> Apply 'test14', 'test13' End <=================
 
 =================> Apply 'test13', 'test15' Begin <=================
-Old routes ('test13') = <IPv4RouteList[6]> = {
+Old routes ('test13') = <IPv4RouteList[10]> = {
  0. Net 0.0.0.0/0 Gate 10.0.0.1 Ifp en0 Ifa 10.0.0.10
  1. Net 0.0.0.0/0 Gate 10.0.0.1 Ifp en1 Ifa 10.0.0.20 [never] [SCOPED]
  2. Net 10.0.0.0/24 Ifp en0 Ifa 10.0.0.10
  3. Net 10.0.0.0/24 Ifp en1 Ifa 10.0.0.20 [last] [SCOPED]
  4. Net 10.0.0.1/32 Ifp en0 Ifa 10.0.0.10
  5. Net 10.0.0.1/32 Ifp en1 Ifa 10.0.0.20 [last] [SCOPED]
+ 6. Net 224.0.0.0/4 Ifp en0 Ifa 10.0.0.10
+ 7. Net 224.0.0.0/4 Ifp en1 Ifa 10.0.0.20 [last] [SCOPED]
+ 8. Net 255.255.255.255/32 Ifp en0 Ifa 10.0.0.10
+ 9. Net 255.255.255.255/32 Ifp en1 Ifa 10.0.0.20 [last] [SCOPED]
 }
 Add new[4]: Net 10.0.0.1/32 Ifp en0 Ifa 10.0.0.10
 Add new[0]: Net 0.0.0.0/0 Gate 10.0.0.1 Ifp en0 Ifa 10.0.0.10
@@ -16749,8 +23733,14 @@ Add new[5]: Net 10.0.0.1/32 Ifp en1 Ifa 10.0.0.20 [last] [SCOPED]
 Add new[1]: Net 0.0.0.0/0 Gate 10.0.0.1 Ifp en1 Ifa 10.0.0.20 [never] [SCOPED]
 Add new[2]: Net 10.0.0.0/24 Ifp en0 Ifa 10.0.0.10
 Add new[3]: Net 10.0.0.0/24 Ifp en1 Ifa 10.0.0.20 [last] [SCOPED]
-New Routes ('test15') = <IPv4RouteList[1]> = {
- 0. Net 0.0.0.0/0 Ifp en0 Ifa 169.254.22.44
+Add new[6]: Net 224.0.0.0/4 Ifp en0 Ifa 10.0.0.10
+Add new[7]: Net 224.0.0.0/4 Ifp en1 Ifa 10.0.0.20 [last] [SCOPED]
+Add new[8]: Net 255.255.255.255/32 Ifp en0 Ifa 10.0.0.10
+Add new[9]: Net 255.255.255.255/32 Ifp en1 Ifa 10.0.0.20 [last] [SCOPED]
+New Routes ('test15') = <IPv4RouteList[3]> = {
+ 0. Net 169.254.0.0/16 Ifp en0 Ifa 169.254.22.44 [last]
+ 1. Net 224.0.0.0/4 Ifp en0 Ifa 169.254.22.44 [last]
+ 2. Net 255.255.255.255/32 Ifp en0 Ifa 169.254.22.44 [last]
 }
 Remove old[0]: Net 0.0.0.0/0 Gate 10.0.0.1 Ifp en0 Ifa 10.0.0.10
 Remove old[1]: Net 0.0.0.0/0 Gate 10.0.0.1 Ifp en1 Ifa 10.0.0.20 [never] [SCOPED]
@@ -16758,39 +23748,63 @@ Remove old[2]: Net 10.0.0.0/24 Ifp en0 Ifa 10.0.0.10
 Remove old[3]: Net 10.0.0.0/24 Ifp en1 Ifa 10.0.0.20 [last] [SCOPED]
 Remove old[4]: Net 10.0.0.1/32 Ifp en0 Ifa 10.0.0.10
 Remove old[5]: Net 10.0.0.1/32 Ifp en1 Ifa 10.0.0.20 [last] [SCOPED]
-Add new[0]: Net 0.0.0.0/0 Ifp en0 Ifa 169.254.22.44
+Remove old[6]: Net 224.0.0.0/4 Ifp en0 Ifa 10.0.0.10
+Remove old[7]: Net 224.0.0.0/4 Ifp en1 Ifa 10.0.0.20 [last] [SCOPED]
+Remove old[8]: Net 255.255.255.255/32 Ifp en0 Ifa 10.0.0.10
+Remove old[9]: Net 255.255.255.255/32 Ifp en1 Ifa 10.0.0.20 [last] [SCOPED]
+Add new[0]: Net 169.254.0.0/16 Ifp en0 Ifa 169.254.22.44 [last]
+Add new[1]: Net 224.0.0.0/4 Ifp en0 Ifa 169.254.22.44 [last]
+Add new[2]: Net 255.255.255.255/32 Ifp en0 Ifa 169.254.22.44 [last]
 =================> Apply 'test13', 'test15' End <=================
 
 =================> Apply 'test15', 'test13' Begin <=================
-Old routes ('test15') = <IPv4RouteList[1]> = {
- 0. Net 0.0.0.0/0 Ifp en0 Ifa 169.254.22.44
+Old routes ('test15') = <IPv4RouteList[3]> = {
+ 0. Net 169.254.0.0/16 Ifp en0 Ifa 169.254.22.44 [last]
+ 1. Net 224.0.0.0/4 Ifp en0 Ifa 169.254.22.44 [last]
+ 2. Net 255.255.255.255/32 Ifp en0 Ifa 169.254.22.44 [last]
 }
-Add new[0]: Net 0.0.0.0/0 Ifp en0 Ifa 169.254.22.44
-New Routes ('test13') = <IPv4RouteList[6]> = {
+Add new[0]: Net 169.254.0.0/16 Ifp en0 Ifa 169.254.22.44 [last]
+Add new[1]: Net 224.0.0.0/4 Ifp en0 Ifa 169.254.22.44 [last]
+Add new[2]: Net 255.255.255.255/32 Ifp en0 Ifa 169.254.22.44 [last]
+New Routes ('test13') = <IPv4RouteList[10]> = {
  0. Net 0.0.0.0/0 Gate 10.0.0.1 Ifp en0 Ifa 10.0.0.10
  1. Net 0.0.0.0/0 Gate 10.0.0.1 Ifp en1 Ifa 10.0.0.20 [never] [SCOPED]
  2. Net 10.0.0.0/24 Ifp en0 Ifa 10.0.0.10
  3. Net 10.0.0.0/24 Ifp en1 Ifa 10.0.0.20 [last] [SCOPED]
  4. Net 10.0.0.1/32 Ifp en0 Ifa 10.0.0.10
  5. Net 10.0.0.1/32 Ifp en1 Ifa 10.0.0.20 [last] [SCOPED]
-}
-Remove old[0]: Net 0.0.0.0/0 Ifp en0 Ifa 169.254.22.44
+ 6. Net 224.0.0.0/4 Ifp en0 Ifa 10.0.0.10
+ 7. Net 224.0.0.0/4 Ifp en1 Ifa 10.0.0.20 [last] [SCOPED]
+ 8. Net 255.255.255.255/32 Ifp en0 Ifa 10.0.0.10
+ 9. Net 255.255.255.255/32 Ifp en1 Ifa 10.0.0.20 [last] [SCOPED]
+}
+Remove old[0]: Net 169.254.0.0/16 Ifp en0 Ifa 169.254.22.44 [last]
+Remove old[1]: Net 224.0.0.0/4 Ifp en0 Ifa 169.254.22.44 [last]
+Remove old[2]: Net 255.255.255.255/32 Ifp en0 Ifa 169.254.22.44 [last]
 Add new[4]: Net 10.0.0.1/32 Ifp en0 Ifa 10.0.0.10
 Add new[0]: Net 0.0.0.0/0 Gate 10.0.0.1 Ifp en0 Ifa 10.0.0.10
 Add new[5]: Net 10.0.0.1/32 Ifp en1 Ifa 10.0.0.20 [last] [SCOPED]
 Add new[1]: Net 0.0.0.0/0 Gate 10.0.0.1 Ifp en1 Ifa 10.0.0.20 [never] [SCOPED]
 Add new[2]: Net 10.0.0.0/24 Ifp en0 Ifa 10.0.0.10
 Add new[3]: Net 10.0.0.0/24 Ifp en1 Ifa 10.0.0.20 [last] [SCOPED]
+Add new[6]: Net 224.0.0.0/4 Ifp en0 Ifa 10.0.0.10
+Add new[7]: Net 224.0.0.0/4 Ifp en1 Ifa 10.0.0.20 [last] [SCOPED]
+Add new[8]: Net 255.255.255.255/32 Ifp en0 Ifa 10.0.0.10
+Add new[9]: Net 255.255.255.255/32 Ifp en1 Ifa 10.0.0.20 [last] [SCOPED]
 =================> Apply 'test15', 'test13' End <=================
 
 =================> Apply 'test13', 'test16' Begin <=================
-Old routes ('test13') = <IPv4RouteList[6]> = {
+Old routes ('test13') = <IPv4RouteList[10]> = {
  0. Net 0.0.0.0/0 Gate 10.0.0.1 Ifp en0 Ifa 10.0.0.10
  1. Net 0.0.0.0/0 Gate 10.0.0.1 Ifp en1 Ifa 10.0.0.20 [never] [SCOPED]
  2. Net 10.0.0.0/24 Ifp en0 Ifa 10.0.0.10
  3. Net 10.0.0.0/24 Ifp en1 Ifa 10.0.0.20 [last] [SCOPED]
  4. Net 10.0.0.1/32 Ifp en0 Ifa 10.0.0.10
  5. Net 10.0.0.1/32 Ifp en1 Ifa 10.0.0.20 [last] [SCOPED]
+ 6. Net 224.0.0.0/4 Ifp en0 Ifa 10.0.0.10
+ 7. Net 224.0.0.0/4 Ifp en1 Ifa 10.0.0.20 [last] [SCOPED]
+ 8. Net 255.255.255.255/32 Ifp en0 Ifa 10.0.0.10
+ 9. Net 255.255.255.255/32 Ifp en1 Ifa 10.0.0.20 [last] [SCOPED]
 }
 Add new[4]: Net 10.0.0.1/32 Ifp en0 Ifa 10.0.0.10
 Add new[0]: Net 0.0.0.0/0 Gate 10.0.0.1 Ifp en0 Ifa 10.0.0.10
@@ -16798,7 +23812,11 @@ Add new[5]: Net 10.0.0.1/32 Ifp en1 Ifa 10.0.0.20 [last] [SCOPED]
 Add new[1]: Net 0.0.0.0/0 Gate 10.0.0.1 Ifp en1 Ifa 10.0.0.20 [never] [SCOPED]
 Add new[2]: Net 10.0.0.0/24 Ifp en0 Ifa 10.0.0.10
 Add new[3]: Net 10.0.0.0/24 Ifp en1 Ifa 10.0.0.20 [last] [SCOPED]
-New Routes ('test16') = <IPv4RouteList[50]> = {
+Add new[6]: Net 224.0.0.0/4 Ifp en0 Ifa 10.0.0.10
+Add new[7]: Net 224.0.0.0/4 Ifp en1 Ifa 10.0.0.20 [last] [SCOPED]
+Add new[8]: Net 255.255.255.255/32 Ifp en0 Ifa 10.0.0.10
+Add new[9]: Net 255.255.255.255/32 Ifp en1 Ifa 10.0.0.20 [last] [SCOPED]
+New Routes ('test16') = <IPv4RouteList[54]> = {
  0. Net 0.0.0.0/0 Gate 10.0.0.1 Ifp en0 Ifa 10.0.0.10
  1. Net 0.0.0.0/0 Ifp utun0 Ifa 17.153.46.24 [SCOPED]
  2. Net 10.0.0.0/24 Ifp en0 Ifa 10.0.0.10
@@ -16849,10 +23867,16 @@ New Routes ('test16') = <IPv4RouteList[50]> = {
 47. Net 192.35.50.0/24 Gate 17.153.46.24 Ifp utun0 Ifa 17.153.46.24
 48. Net 204.179.20.0/24 Gate 17.153.46.24 Ifp utun0 Ifa 17.153.46.24
 49. Net 206.112.116.0/24 Gate 17.153.46.24 Ifp utun0 Ifa 17.153.46.24
+50. Net 224.0.0.0/4 Ifp en0 Ifa 10.0.0.10
+51. Net 224.0.0.0/4 Ifp utun0 Ifa 17.153.46.24 [SCOPED]
+52. Net 255.255.255.255/32 Ifp en0 Ifa 10.0.0.10
+53. Net 255.255.255.255/32 Ifp utun0 Ifa 17.153.46.24 [SCOPED]
 }
 Remove old[1]: Net 0.0.0.0/0 Gate 10.0.0.1 Ifp en1 Ifa 10.0.0.20 [never] [SCOPED]
 Remove old[3]: Net 10.0.0.0/24 Ifp en1 Ifa 10.0.0.20 [last] [SCOPED]
 Remove old[5]: Net 10.0.0.1/32 Ifp en1 Ifa 10.0.0.20 [last] [SCOPED]
+Remove old[7]: Net 224.0.0.0/4 Ifp en1 Ifa 10.0.0.20 [last] [SCOPED]
+Remove old[9]: Net 255.255.255.255/32 Ifp en1 Ifa 10.0.0.20 [last] [SCOPED]
 Add new[1]: Net 0.0.0.0/0 Ifp utun0 Ifa 17.153.46.24 [SCOPED]
 Add new[4]: Net 10.1.3.0/24 Gate 17.153.46.24 Ifp utun0 Ifa 17.153.46.24
 Add new[5]: Net 10.1.4.0/24 Gate 17.153.46.24 Ifp utun0 Ifa 17.153.46.24
@@ -16900,10 +23924,12 @@ Add new[46]: Net 172.16.2.0/24 Gate 17.153.46.24 Ifp utun0 Ifa 17.153.46.24
 Add new[47]: Net 192.35.50.0/24 Gate 17.153.46.24 Ifp utun0 Ifa 17.153.46.24
 Add new[48]: Net 204.179.20.0/24 Gate 17.153.46.24 Ifp utun0 Ifa 17.153.46.24
 Add new[49]: Net 206.112.116.0/24 Gate 17.153.46.24 Ifp utun0 Ifa 17.153.46.24
+Add new[51]: Net 224.0.0.0/4 Ifp utun0 Ifa 17.153.46.24 [SCOPED]
+Add new[53]: Net 255.255.255.255/32 Ifp utun0 Ifa 17.153.46.24 [SCOPED]
 =================> Apply 'test13', 'test16' End <=================
 
 =================> Apply 'test16', 'test13' Begin <=================
-Old routes ('test16') = <IPv4RouteList[50]> = {
+Old routes ('test16') = <IPv4RouteList[54]> = {
  0. Net 0.0.0.0/0 Gate 10.0.0.1 Ifp en0 Ifa 10.0.0.10
  1. Net 0.0.0.0/0 Ifp utun0 Ifa 17.153.46.24 [SCOPED]
  2. Net 10.0.0.0/24 Ifp en0 Ifa 10.0.0.10
@@ -16954,6 +23980,10 @@ Old routes ('test16') = <IPv4RouteList[50]> = {
 47. Net 192.35.50.0/24 Gate 17.153.46.24 Ifp utun0 Ifa 17.153.46.24
 48. Net 204.179.20.0/24 Gate 17.153.46.24 Ifp utun0 Ifa 17.153.46.24
 49. Net 206.112.116.0/24 Gate 17.153.46.24 Ifp utun0 Ifa 17.153.46.24
+50. Net 224.0.0.0/4 Ifp en0 Ifa 10.0.0.10
+51. Net 224.0.0.0/4 Ifp utun0 Ifa 17.153.46.24 [SCOPED]
+52. Net 255.255.255.255/32 Ifp en0 Ifa 10.0.0.10
+53. Net 255.255.255.255/32 Ifp utun0 Ifa 17.153.46.24 [SCOPED]
 }
 Add new[3]: Net 10.0.0.1/32 Ifp en0 Ifa 10.0.0.10
 Add new[0]: Net 0.0.0.0/0 Gate 10.0.0.1 Ifp en0 Ifa 10.0.0.10
@@ -17005,13 +24035,21 @@ Add new[46]: Net 172.16.2.0/24 Gate 17.153.46.24 Ifp utun0 Ifa 17.153.46.24
 Add new[47]: Net 192.35.50.0/24 Gate 17.153.46.24 Ifp utun0 Ifa 17.153.46.24
 Add new[48]: Net 204.179.20.0/24 Gate 17.153.46.24 Ifp utun0 Ifa 17.153.46.24
 Add new[49]: Net 206.112.116.0/24 Gate 17.153.46.24 Ifp utun0 Ifa 17.153.46.24
-New Routes ('test13') = <IPv4RouteList[6]> = {
+Add new[50]: Net 224.0.0.0/4 Ifp en0 Ifa 10.0.0.10
+Add new[51]: Net 224.0.0.0/4 Ifp utun0 Ifa 17.153.46.24 [SCOPED]
+Add new[52]: Net 255.255.255.255/32 Ifp en0 Ifa 10.0.0.10
+Add new[53]: Net 255.255.255.255/32 Ifp utun0 Ifa 17.153.46.24 [SCOPED]
+New Routes ('test13') = <IPv4RouteList[10]> = {
  0. Net 0.0.0.0/0 Gate 10.0.0.1 Ifp en0 Ifa 10.0.0.10
  1. Net 0.0.0.0/0 Gate 10.0.0.1 Ifp en1 Ifa 10.0.0.20 [never] [SCOPED]
  2. Net 10.0.0.0/24 Ifp en0 Ifa 10.0.0.10
  3. Net 10.0.0.0/24 Ifp en1 Ifa 10.0.0.20 [last] [SCOPED]
  4. Net 10.0.0.1/32 Ifp en0 Ifa 10.0.0.10
  5. Net 10.0.0.1/32 Ifp en1 Ifa 10.0.0.20 [last] [SCOPED]
+ 6. Net 224.0.0.0/4 Ifp en0 Ifa 10.0.0.10
+ 7. Net 224.0.0.0/4 Ifp en1 Ifa 10.0.0.20 [last] [SCOPED]
+ 8. Net 255.255.255.255/32 Ifp en0 Ifa 10.0.0.10
+ 9. Net 255.255.255.255/32 Ifp en1 Ifa 10.0.0.20 [last] [SCOPED]
 }
 Remove old[1]: Net 0.0.0.0/0 Ifp utun0 Ifa 17.153.46.24 [SCOPED]
 Remove old[4]: Net 10.1.3.0/24 Gate 17.153.46.24 Ifp utun0 Ifa 17.153.46.24
@@ -17060,19 +24098,27 @@ Remove old[46]: Net 172.16.2.0/24 Gate 17.153.46.24 Ifp utun0 Ifa 17.153.46.24
 Remove old[47]: Net 192.35.50.0/24 Gate 17.153.46.24 Ifp utun0 Ifa 17.153.46.24
 Remove old[48]: Net 204.179.20.0/24 Gate 17.153.46.24 Ifp utun0 Ifa 17.153.46.24
 Remove old[49]: Net 206.112.116.0/24 Gate 17.153.46.24 Ifp utun0 Ifa 17.153.46.24
+Remove old[51]: Net 224.0.0.0/4 Ifp utun0 Ifa 17.153.46.24 [SCOPED]
+Remove old[53]: Net 255.255.255.255/32 Ifp utun0 Ifa 17.153.46.24 [SCOPED]
 Add new[5]: Net 10.0.0.1/32 Ifp en1 Ifa 10.0.0.20 [last] [SCOPED]
 Add new[1]: Net 0.0.0.0/0 Gate 10.0.0.1 Ifp en1 Ifa 10.0.0.20 [never] [SCOPED]
 Add new[3]: Net 10.0.0.0/24 Ifp en1 Ifa 10.0.0.20 [last] [SCOPED]
+Add new[7]: Net 224.0.0.0/4 Ifp en1 Ifa 10.0.0.20 [last] [SCOPED]
+Add new[9]: Net 255.255.255.255/32 Ifp en1 Ifa 10.0.0.20 [last] [SCOPED]
 =================> Apply 'test16', 'test13' End <=================
 
 =================> Apply 'test13', 'test17' Begin <=================
-Old routes ('test13') = <IPv4RouteList[6]> = {
+Old routes ('test13') = <IPv4RouteList[10]> = {
  0. Net 0.0.0.0/0 Gate 10.0.0.1 Ifp en0 Ifa 10.0.0.10
  1. Net 0.0.0.0/0 Gate 10.0.0.1 Ifp en1 Ifa 10.0.0.20 [never] [SCOPED]
  2. Net 10.0.0.0/24 Ifp en0 Ifa 10.0.0.10
  3. Net 10.0.0.0/24 Ifp en1 Ifa 10.0.0.20 [last] [SCOPED]
  4. Net 10.0.0.1/32 Ifp en0 Ifa 10.0.0.10
  5. Net 10.0.0.1/32 Ifp en1 Ifa 10.0.0.20 [last] [SCOPED]
+ 6. Net 224.0.0.0/4 Ifp en0 Ifa 10.0.0.10
+ 7. Net 224.0.0.0/4 Ifp en1 Ifa 10.0.0.20 [last] [SCOPED]
+ 8. Net 255.255.255.255/32 Ifp en0 Ifa 10.0.0.10
+ 9. Net 255.255.255.255/32 Ifp en1 Ifa 10.0.0.20 [last] [SCOPED]
 }
 Add new[4]: Net 10.0.0.1/32 Ifp en0 Ifa 10.0.0.10
 Add new[0]: Net 0.0.0.0/0 Gate 10.0.0.1 Ifp en0 Ifa 10.0.0.10
@@ -17080,30 +24126,46 @@ Add new[5]: Net 10.0.0.1/32 Ifp en1 Ifa 10.0.0.20 [last] [SCOPED]
 Add new[1]: Net 0.0.0.0/0 Gate 10.0.0.1 Ifp en1 Ifa 10.0.0.20 [never] [SCOPED]
 Add new[2]: Net 10.0.0.0/24 Ifp en0 Ifa 10.0.0.10
 Add new[3]: Net 10.0.0.0/24 Ifp en1 Ifa 10.0.0.20 [last] [SCOPED]
-New Routes ('test17') = <IPv4RouteList[6]> = {
+Add new[6]: Net 224.0.0.0/4 Ifp en0 Ifa 10.0.0.10
+Add new[7]: Net 224.0.0.0/4 Ifp en1 Ifa 10.0.0.20 [last] [SCOPED]
+Add new[8]: Net 255.255.255.255/32 Ifp en0 Ifa 10.0.0.10
+Add new[9]: Net 255.255.255.255/32 Ifp en1 Ifa 10.0.0.20 [last] [SCOPED]
+New Routes ('test17') = <IPv4RouteList[10]> = {
  0. Net 0.0.0.0/0 Gate 10.0.0.1 Ifp en0 Ifa 10.0.0.10
  1. Net 0.0.0.0/0 Gate 192.168.2.1 Ifp en1 Ifa 192.168.2.50 [never] [SCOPED]
  2. Net 10.0.0.0/24 Ifp en0 Ifa 10.0.0.10
  3. Net 10.0.0.1/32 Ifp en0 Ifa 10.0.0.10
  4. Net 192.168.2.0/24 Ifp en1 Ifa 192.168.2.50 [last]
  5. Net 192.168.2.1/32 Ifp en1 Ifa 192.168.2.50 [last]
+ 6. Net 224.0.0.0/4 Ifp en0 Ifa 10.0.0.10
+ 7. Net 224.0.0.0/4 Ifp en1 Ifa 192.168.2.50 [last] [SCOPED]
+ 8. Net 255.255.255.255/32 Ifp en0 Ifa 10.0.0.10
+ 9. Net 255.255.255.255/32 Ifp en1 Ifa 192.168.2.50 [last] [SCOPED]
 }
 Remove old[1]: Net 0.0.0.0/0 Gate 10.0.0.1 Ifp en1 Ifa 10.0.0.20 [never] [SCOPED]
 Remove old[3]: Net 10.0.0.0/24 Ifp en1 Ifa 10.0.0.20 [last] [SCOPED]
 Remove old[5]: Net 10.0.0.1/32 Ifp en1 Ifa 10.0.0.20 [last] [SCOPED]
+Remove old[7]: Net 224.0.0.0/4 Ifp en1 Ifa 10.0.0.20 [last] [SCOPED]
+Remove old[9]: Net 255.255.255.255/32 Ifp en1 Ifa 10.0.0.20 [last] [SCOPED]
 Add new[5]: Net 192.168.2.1/32 Ifp en1 Ifa 192.168.2.50 [last]
 Add new[1]: Net 0.0.0.0/0 Gate 192.168.2.1 Ifp en1 Ifa 192.168.2.50 [never] [SCOPED]
 Add new[4]: Net 192.168.2.0/24 Ifp en1 Ifa 192.168.2.50 [last]
+Add new[7]: Net 224.0.0.0/4 Ifp en1 Ifa 192.168.2.50 [last] [SCOPED]
+Add new[9]: Net 255.255.255.255/32 Ifp en1 Ifa 192.168.2.50 [last] [SCOPED]
 =================> Apply 'test13', 'test17' End <=================
 
 =================> Apply 'test17', 'test13' Begin <=================
-Old routes ('test17') = <IPv4RouteList[6]> = {
+Old routes ('test17') = <IPv4RouteList[10]> = {
  0. Net 0.0.0.0/0 Gate 10.0.0.1 Ifp en0 Ifa 10.0.0.10
  1. Net 0.0.0.0/0 Gate 192.168.2.1 Ifp en1 Ifa 192.168.2.50 [never] [SCOPED]
  2. Net 10.0.0.0/24 Ifp en0 Ifa 10.0.0.10
  3. Net 10.0.0.1/32 Ifp en0 Ifa 10.0.0.10
  4. Net 192.168.2.0/24 Ifp en1 Ifa 192.168.2.50 [last]
  5. Net 192.168.2.1/32 Ifp en1 Ifa 192.168.2.50 [last]
+ 6. Net 224.0.0.0/4 Ifp en0 Ifa 10.0.0.10
+ 7. Net 224.0.0.0/4 Ifp en1 Ifa 192.168.2.50 [last] [SCOPED]
+ 8. Net 255.255.255.255/32 Ifp en0 Ifa 10.0.0.10
+ 9. Net 255.255.255.255/32 Ifp en1 Ifa 192.168.2.50 [last] [SCOPED]
 }
 Add new[3]: Net 10.0.0.1/32 Ifp en0 Ifa 10.0.0.10
 Add new[0]: Net 0.0.0.0/0 Gate 10.0.0.1 Ifp en0 Ifa 10.0.0.10
@@ -17111,30 +24173,46 @@ Add new[5]: Net 192.168.2.1/32 Ifp en1 Ifa 192.168.2.50 [last]
 Add new[1]: Net 0.0.0.0/0 Gate 192.168.2.1 Ifp en1 Ifa 192.168.2.50 [never] [SCOPED]
 Add new[2]: Net 10.0.0.0/24 Ifp en0 Ifa 10.0.0.10
 Add new[4]: Net 192.168.2.0/24 Ifp en1 Ifa 192.168.2.50 [last]
-New Routes ('test13') = <IPv4RouteList[6]> = {
+Add new[6]: Net 224.0.0.0/4 Ifp en0 Ifa 10.0.0.10
+Add new[7]: Net 224.0.0.0/4 Ifp en1 Ifa 192.168.2.50 [last] [SCOPED]
+Add new[8]: Net 255.255.255.255/32 Ifp en0 Ifa 10.0.0.10
+Add new[9]: Net 255.255.255.255/32 Ifp en1 Ifa 192.168.2.50 [last] [SCOPED]
+New Routes ('test13') = <IPv4RouteList[10]> = {
  0. Net 0.0.0.0/0 Gate 10.0.0.1 Ifp en0 Ifa 10.0.0.10
  1. Net 0.0.0.0/0 Gate 10.0.0.1 Ifp en1 Ifa 10.0.0.20 [never] [SCOPED]
  2. Net 10.0.0.0/24 Ifp en0 Ifa 10.0.0.10
  3. Net 10.0.0.0/24 Ifp en1 Ifa 10.0.0.20 [last] [SCOPED]
  4. Net 10.0.0.1/32 Ifp en0 Ifa 10.0.0.10
  5. Net 10.0.0.1/32 Ifp en1 Ifa 10.0.0.20 [last] [SCOPED]
+ 6. Net 224.0.0.0/4 Ifp en0 Ifa 10.0.0.10
+ 7. Net 224.0.0.0/4 Ifp en1 Ifa 10.0.0.20 [last] [SCOPED]
+ 8. Net 255.255.255.255/32 Ifp en0 Ifa 10.0.0.10
+ 9. Net 255.255.255.255/32 Ifp en1 Ifa 10.0.0.20 [last] [SCOPED]
 }
 Remove old[1]: Net 0.0.0.0/0 Gate 192.168.2.1 Ifp en1 Ifa 192.168.2.50 [never] [SCOPED]
 Remove old[4]: Net 192.168.2.0/24 Ifp en1 Ifa 192.168.2.50 [last]
 Remove old[5]: Net 192.168.2.1/32 Ifp en1 Ifa 192.168.2.50 [last]
+Remove old[7]: Net 224.0.0.0/4 Ifp en1 Ifa 192.168.2.50 [last] [SCOPED]
+Remove old[9]: Net 255.255.255.255/32 Ifp en1 Ifa 192.168.2.50 [last] [SCOPED]
 Add new[5]: Net 10.0.0.1/32 Ifp en1 Ifa 10.0.0.20 [last] [SCOPED]
 Add new[1]: Net 0.0.0.0/0 Gate 10.0.0.1 Ifp en1 Ifa 10.0.0.20 [never] [SCOPED]
 Add new[3]: Net 10.0.0.0/24 Ifp en1 Ifa 10.0.0.20 [last] [SCOPED]
+Add new[7]: Net 224.0.0.0/4 Ifp en1 Ifa 10.0.0.20 [last] [SCOPED]
+Add new[9]: Net 255.255.255.255/32 Ifp en1 Ifa 10.0.0.20 [last] [SCOPED]
 =================> Apply 'test17', 'test13' End <=================
 
 =================> Apply 'test13', 'test18' Begin <=================
-Old routes ('test13') = <IPv4RouteList[6]> = {
+Old routes ('test13') = <IPv4RouteList[10]> = {
  0. Net 0.0.0.0/0 Gate 10.0.0.1 Ifp en0 Ifa 10.0.0.10
  1. Net 0.0.0.0/0 Gate 10.0.0.1 Ifp en1 Ifa 10.0.0.20 [never] [SCOPED]
  2. Net 10.0.0.0/24 Ifp en0 Ifa 10.0.0.10
  3. Net 10.0.0.0/24 Ifp en1 Ifa 10.0.0.20 [last] [SCOPED]
  4. Net 10.0.0.1/32 Ifp en0 Ifa 10.0.0.10
  5. Net 10.0.0.1/32 Ifp en1 Ifa 10.0.0.20 [last] [SCOPED]
+ 6. Net 224.0.0.0/4 Ifp en0 Ifa 10.0.0.10
+ 7. Net 224.0.0.0/4 Ifp en1 Ifa 10.0.0.20 [last] [SCOPED]
+ 8. Net 255.255.255.255/32 Ifp en0 Ifa 10.0.0.10
+ 9. Net 255.255.255.255/32 Ifp en1 Ifa 10.0.0.20 [last] [SCOPED]
 }
 Add new[4]: Net 10.0.0.1/32 Ifp en0 Ifa 10.0.0.10
 Add new[0]: Net 0.0.0.0/0 Gate 10.0.0.1 Ifp en0 Ifa 10.0.0.10
@@ -17142,7 +24220,11 @@ Add new[5]: Net 10.0.0.1/32 Ifp en1 Ifa 10.0.0.20 [last] [SCOPED]
 Add new[1]: Net 0.0.0.0/0 Gate 10.0.0.1 Ifp en1 Ifa 10.0.0.20 [never] [SCOPED]
 Add new[2]: Net 10.0.0.0/24 Ifp en0 Ifa 10.0.0.10
 Add new[3]: Net 10.0.0.0/24 Ifp en1 Ifa 10.0.0.20 [last] [SCOPED]
-New Routes ('test18') = <IPv4RouteList[14]> = {
+Add new[6]: Net 224.0.0.0/4 Ifp en0 Ifa 10.0.0.10
+Add new[7]: Net 224.0.0.0/4 Ifp en1 Ifa 10.0.0.20 [last] [SCOPED]
+Add new[8]: Net 255.255.255.255/32 Ifp en0 Ifa 10.0.0.10
+Add new[9]: Net 255.255.255.255/32 Ifp en1 Ifa 10.0.0.20 [last] [SCOPED]
+New Routes ('test18') = <IPv4RouteList[16]> = {
  0. Net 0.0.0.0/0 Gate 192.168.130.1 Ifp en0 Ifa 192.168.130.16
  1. Host 1.1.1.1 Gate 1.1.1.2 Ifp en0 Ifa 192.168.130.16
  2. Host 1.1.1.2 Gate 1.1.1.3 Ifp en0 Ifa 192.168.130.16
@@ -17157,6 +24239,8 @@ New Routes ('test18') = <IPv4RouteList[14]> = {
 11. Host 1.1.1.11 Gate 1.1.1.1 Ifp en0 Ifa 192.168.130.16
 12. Net 192.168.130.0/24 Ifp en0 Ifa 192.168.130.16
 13. Net 192.168.130.1/32 Ifp en0 Ifa 192.168.130.16
+14. Net 224.0.0.0/4 Ifp en0 Ifa 192.168.130.16
+15. Net 255.255.255.255/32 Ifp en0 Ifa 192.168.130.16
 }
 Remove old[0]: Net 0.0.0.0/0 Gate 10.0.0.1 Ifp en0 Ifa 10.0.0.10
 Remove old[1]: Net 0.0.0.0/0 Gate 10.0.0.1 Ifp en1 Ifa 10.0.0.20 [never] [SCOPED]
@@ -17164,24 +24248,30 @@ Remove old[2]: Net 10.0.0.0/24 Ifp en0 Ifa 10.0.0.10
 Remove old[3]: Net 10.0.0.0/24 Ifp en1 Ifa 10.0.0.20 [last] [SCOPED]
 Remove old[4]: Net 10.0.0.1/32 Ifp en0 Ifa 10.0.0.10
 Remove old[5]: Net 10.0.0.1/32 Ifp en1 Ifa 10.0.0.20 [last] [SCOPED]
+Remove old[6]: Net 224.0.0.0/4 Ifp en0 Ifa 10.0.0.10
+Remove old[7]: Net 224.0.0.0/4 Ifp en1 Ifa 10.0.0.20 [last] [SCOPED]
+Remove old[8]: Net 255.255.255.255/32 Ifp en0 Ifa 10.0.0.10
+Remove old[9]: Net 255.255.255.255/32 Ifp en1 Ifa 10.0.0.20 [last] [SCOPED]
 Add new[13]: Net 192.168.130.1/32 Ifp en0 Ifa 192.168.130.16
 Add new[0]: Net 0.0.0.0/0 Gate 192.168.130.1 Ifp en0 Ifa 192.168.130.16
-IPMonitor RouteProcess: routing loop detected, not adding: Host 1.1.1.11 Gate 1.1.1.1 Ifp en0 Ifa 192.168.130.16
-IPMonitor RouteProcess: failed to add: Host 1.1.1.10 Gate 1.1.1.11 Ifp en0 Ifa 192.168.130.16
-IPMonitor RouteProcess: failed to add: Host 1.1.1.9 Gate 1.1.1.10 Ifp en0 Ifa 192.168.130.16
-IPMonitor RouteProcess: failed to add: Host 1.1.1.8 Gate 1.1.1.9 Ifp en0 Ifa 192.168.130.16
-IPMonitor RouteProcess: failed to add: Host 1.1.1.7 Gate 1.1.1.8 Ifp en0 Ifa 192.168.130.16
-IPMonitor RouteProcess: failed to add: Host 1.1.1.6 Gate 1.1.1.7 Ifp en0 Ifa 192.168.130.16
-IPMonitor RouteProcess: failed to add: Host 1.1.1.5 Gate 1.1.1.6 Ifp en0 Ifa 192.168.130.16
-IPMonitor RouteProcess: failed to add: Host 1.1.1.4 Gate 1.1.1.5 Ifp en0 Ifa 192.168.130.16
-IPMonitor RouteProcess: failed to add: Host 1.1.1.3 Gate 1.1.1.4 Ifp en0 Ifa 192.168.130.16
-IPMonitor RouteProcess: failed to add: Host 1.1.1.2 Gate 1.1.1.3 Ifp en0 Ifa 192.168.130.16
-IPMonitor RouteProcess: failed to add: Host 1.1.1.1 Gate 1.1.1.2 Ifp en0 Ifa 192.168.130.16
+routing loop detected, not adding: Host 1.1.1.11 Gate 1.1.1.1 Ifp en0 Ifa 192.168.130.16
+failed to add: Host 1.1.1.10 Gate 1.1.1.11 Ifp en0 Ifa 192.168.130.16
+failed to add: Host 1.1.1.9 Gate 1.1.1.10 Ifp en0 Ifa 192.168.130.16
+failed to add: Host 1.1.1.8 Gate 1.1.1.9 Ifp en0 Ifa 192.168.130.16
+failed to add: Host 1.1.1.7 Gate 1.1.1.8 Ifp en0 Ifa 192.168.130.16
+failed to add: Host 1.1.1.6 Gate 1.1.1.7 Ifp en0 Ifa 192.168.130.16
+failed to add: Host 1.1.1.5 Gate 1.1.1.6 Ifp en0 Ifa 192.168.130.16
+failed to add: Host 1.1.1.4 Gate 1.1.1.5 Ifp en0 Ifa 192.168.130.16
+failed to add: Host 1.1.1.3 Gate 1.1.1.4 Ifp en0 Ifa 192.168.130.16
+failed to add: Host 1.1.1.2 Gate 1.1.1.3 Ifp en0 Ifa 192.168.130.16
+failed to add: Host 1.1.1.1 Gate 1.1.1.2 Ifp en0 Ifa 192.168.130.16
 Add new[12]: Net 192.168.130.0/24 Ifp en0 Ifa 192.168.130.16
+Add new[14]: Net 224.0.0.0/4 Ifp en0 Ifa 192.168.130.16
+Add new[15]: Net 255.255.255.255/32 Ifp en0 Ifa 192.168.130.16
 =================> Apply 'test13', 'test18' End <=================
 
 =================> Apply 'test18', 'test13' Begin <=================
-Old routes ('test18') = <IPv4RouteList[14]> = {
+Old routes ('test18') = <IPv4RouteList[16]> = {
  0. Net 0.0.0.0/0 Gate 192.168.130.1 Ifp en0 Ifa 192.168.130.16
  1. Host 1.1.1.1 Gate 1.1.1.2 Ifp en0 Ifa 192.168.130.16
  2. Host 1.1.1.2 Gate 1.1.1.3 Ifp en0 Ifa 192.168.130.16
@@ -17196,84 +24286,122 @@ Old routes ('test18') = <IPv4RouteList[14]> = {
 11. Host 1.1.1.11 Gate 1.1.1.1 Ifp en0 Ifa 192.168.130.16
 12. Net 192.168.130.0/24 Ifp en0 Ifa 192.168.130.16
 13. Net 192.168.130.1/32 Ifp en0 Ifa 192.168.130.16
+14. Net 224.0.0.0/4 Ifp en0 Ifa 192.168.130.16
+15. Net 255.255.255.255/32 Ifp en0 Ifa 192.168.130.16
 }
 Add new[13]: Net 192.168.130.1/32 Ifp en0 Ifa 192.168.130.16
 Add new[0]: Net 0.0.0.0/0 Gate 192.168.130.1 Ifp en0 Ifa 192.168.130.16
-IPMonitor RouteProcess: routing loop detected, not adding: Host 1.1.1.11 Gate 1.1.1.1 Ifp en0 Ifa 192.168.130.16
-IPMonitor RouteProcess: failed to add: Host 1.1.1.10 Gate 1.1.1.11 Ifp en0 Ifa 192.168.130.16
-IPMonitor RouteProcess: failed to add: Host 1.1.1.9 Gate 1.1.1.10 Ifp en0 Ifa 192.168.130.16
-IPMonitor RouteProcess: failed to add: Host 1.1.1.8 Gate 1.1.1.9 Ifp en0 Ifa 192.168.130.16
-IPMonitor RouteProcess: failed to add: Host 1.1.1.7 Gate 1.1.1.8 Ifp en0 Ifa 192.168.130.16
-IPMonitor RouteProcess: failed to add: Host 1.1.1.6 Gate 1.1.1.7 Ifp en0 Ifa 192.168.130.16
-IPMonitor RouteProcess: failed to add: Host 1.1.1.5 Gate 1.1.1.6 Ifp en0 Ifa 192.168.130.16
-IPMonitor RouteProcess: failed to add: Host 1.1.1.4 Gate 1.1.1.5 Ifp en0 Ifa 192.168.130.16
-IPMonitor RouteProcess: failed to add: Host 1.1.1.3 Gate 1.1.1.4 Ifp en0 Ifa 192.168.130.16
-IPMonitor RouteProcess: failed to add: Host 1.1.1.2 Gate 1.1.1.3 Ifp en0 Ifa 192.168.130.16
-IPMonitor RouteProcess: failed to add: Host 1.1.1.1 Gate 1.1.1.2 Ifp en0 Ifa 192.168.130.16
+routing loop detected, not adding: Host 1.1.1.11 Gate 1.1.1.1 Ifp en0 Ifa 192.168.130.16
+failed to add: Host 1.1.1.10 Gate 1.1.1.11 Ifp en0 Ifa 192.168.130.16
+failed to add: Host 1.1.1.9 Gate 1.1.1.10 Ifp en0 Ifa 192.168.130.16
+failed to add: Host 1.1.1.8 Gate 1.1.1.9 Ifp en0 Ifa 192.168.130.16
+failed to add: Host 1.1.1.7 Gate 1.1.1.8 Ifp en0 Ifa 192.168.130.16
+failed to add: Host 1.1.1.6 Gate 1.1.1.7 Ifp en0 Ifa 192.168.130.16
+failed to add: Host 1.1.1.5 Gate 1.1.1.6 Ifp en0 Ifa 192.168.130.16
+failed to add: Host 1.1.1.4 Gate 1.1.1.5 Ifp en0 Ifa 192.168.130.16
+failed to add: Host 1.1.1.3 Gate 1.1.1.4 Ifp en0 Ifa 192.168.130.16
+failed to add: Host 1.1.1.2 Gate 1.1.1.3 Ifp en0 Ifa 192.168.130.16
+failed to add: Host 1.1.1.1 Gate 1.1.1.2 Ifp en0 Ifa 192.168.130.16
 Add new[12]: Net 192.168.130.0/24 Ifp en0 Ifa 192.168.130.16
-New Routes ('test13') = <IPv4RouteList[6]> = {
+Add new[14]: Net 224.0.0.0/4 Ifp en0 Ifa 192.168.130.16
+Add new[15]: Net 255.255.255.255/32 Ifp en0 Ifa 192.168.130.16
+New Routes ('test13') = <IPv4RouteList[10]> = {
  0. Net 0.0.0.0/0 Gate 10.0.0.1 Ifp en0 Ifa 10.0.0.10
  1. Net 0.0.0.0/0 Gate 10.0.0.1 Ifp en1 Ifa 10.0.0.20 [never] [SCOPED]
  2. Net 10.0.0.0/24 Ifp en0 Ifa 10.0.0.10
  3. Net 10.0.0.0/24 Ifp en1 Ifa 10.0.0.20 [last] [SCOPED]
  4. Net 10.0.0.1/32 Ifp en0 Ifa 10.0.0.10
  5. Net 10.0.0.1/32 Ifp en1 Ifa 10.0.0.20 [last] [SCOPED]
+ 6. Net 224.0.0.0/4 Ifp en0 Ifa 10.0.0.10
+ 7. Net 224.0.0.0/4 Ifp en1 Ifa 10.0.0.20 [last] [SCOPED]
+ 8. Net 255.255.255.255/32 Ifp en0 Ifa 10.0.0.10
+ 9. Net 255.255.255.255/32 Ifp en1 Ifa 10.0.0.20 [last] [SCOPED]
 }
 Remove old[0]: Net 0.0.0.0/0 Gate 192.168.130.1 Ifp en0 Ifa 192.168.130.16
 Remove old[12]: Net 192.168.130.0/24 Ifp en0 Ifa 192.168.130.16
 Remove old[13]: Net 192.168.130.1/32 Ifp en0 Ifa 192.168.130.16
+Remove old[14]: Net 224.0.0.0/4 Ifp en0 Ifa 192.168.130.16
+Remove old[15]: Net 255.255.255.255/32 Ifp en0 Ifa 192.168.130.16
 Add new[4]: Net 10.0.0.1/32 Ifp en0 Ifa 10.0.0.10
 Add new[0]: Net 0.0.0.0/0 Gate 10.0.0.1 Ifp en0 Ifa 10.0.0.10
 Add new[5]: Net 10.0.0.1/32 Ifp en1 Ifa 10.0.0.20 [last] [SCOPED]
 Add new[1]: Net 0.0.0.0/0 Gate 10.0.0.1 Ifp en1 Ifa 10.0.0.20 [never] [SCOPED]
 Add new[2]: Net 10.0.0.0/24 Ifp en0 Ifa 10.0.0.10
 Add new[3]: Net 10.0.0.0/24 Ifp en1 Ifa 10.0.0.20 [last] [SCOPED]
+Add new[6]: Net 224.0.0.0/4 Ifp en0 Ifa 10.0.0.10
+Add new[7]: Net 224.0.0.0/4 Ifp en1 Ifa 10.0.0.20 [last] [SCOPED]
+Add new[8]: Net 255.255.255.255/32 Ifp en0 Ifa 10.0.0.10
+Add new[9]: Net 255.255.255.255/32 Ifp en1 Ifa 10.0.0.20 [last] [SCOPED]
 =================> Apply 'test18', 'test13' End <=================
 
 =================> Apply 'test14', 'test15' Begin <=================
-Old routes ('test14') = <IPv4RouteList[3]> = {
+Old routes ('test14') = <IPv4RouteList[5]> = {
  0. Net 0.0.0.0/0 Gate 10.0.0.1 Ifp en1 Ifa 10.0.0.20 [never] [SCOPED]
  1. Net 10.0.0.0/24 Ifp en1 Ifa 10.0.0.20 [last]
  2. Net 10.0.0.1/32 Ifp en1 Ifa 10.0.0.20 [last]
+ 3. Net 224.0.0.0/4 Ifp en1 Ifa 10.0.0.20 [last]
+ 4. Net 255.255.255.255/32 Ifp en1 Ifa 10.0.0.20 [last]
 }
 Add new[2]: Net 10.0.0.1/32 Ifp en1 Ifa 10.0.0.20 [last]
 Add new[0]: Net 0.0.0.0/0 Gate 10.0.0.1 Ifp en1 Ifa 10.0.0.20 [never] [SCOPED]
 Add new[1]: Net 10.0.0.0/24 Ifp en1 Ifa 10.0.0.20 [last]
-New Routes ('test15') = <IPv4RouteList[1]> = {
- 0. Net 0.0.0.0/0 Ifp en0 Ifa 169.254.22.44
+Add new[3]: Net 224.0.0.0/4 Ifp en1 Ifa 10.0.0.20 [last]
+Add new[4]: Net 255.255.255.255/32 Ifp en1 Ifa 10.0.0.20 [last]
+New Routes ('test15') = <IPv4RouteList[3]> = {
+ 0. Net 169.254.0.0/16 Ifp en0 Ifa 169.254.22.44 [last]
+ 1. Net 224.0.0.0/4 Ifp en0 Ifa 169.254.22.44 [last]
+ 2. Net 255.255.255.255/32 Ifp en0 Ifa 169.254.22.44 [last]
 }
 Remove old[0]: Net 0.0.0.0/0 Gate 10.0.0.1 Ifp en1 Ifa 10.0.0.20 [never] [SCOPED]
 Remove old[1]: Net 10.0.0.0/24 Ifp en1 Ifa 10.0.0.20 [last]
 Remove old[2]: Net 10.0.0.1/32 Ifp en1 Ifa 10.0.0.20 [last]
-Add new[0]: Net 0.0.0.0/0 Ifp en0 Ifa 169.254.22.44
+Remove old[3]: Net 224.0.0.0/4 Ifp en1 Ifa 10.0.0.20 [last]
+Remove old[4]: Net 255.255.255.255/32 Ifp en1 Ifa 10.0.0.20 [last]
+Add new[0]: Net 169.254.0.0/16 Ifp en0 Ifa 169.254.22.44 [last]
+Add new[1]: Net 224.0.0.0/4 Ifp en0 Ifa 169.254.22.44 [last]
+Add new[2]: Net 255.255.255.255/32 Ifp en0 Ifa 169.254.22.44 [last]
 =================> Apply 'test14', 'test15' End <=================
 
 =================> Apply 'test15', 'test14' Begin <=================
-Old routes ('test15') = <IPv4RouteList[1]> = {
- 0. Net 0.0.0.0/0 Ifp en0 Ifa 169.254.22.44
-}
-Add new[0]: Net 0.0.0.0/0 Ifp en0 Ifa 169.254.22.44
-New Routes ('test14') = <IPv4RouteList[3]> = {
+Old routes ('test15') = <IPv4RouteList[3]> = {
+ 0. Net 169.254.0.0/16 Ifp en0 Ifa 169.254.22.44 [last]
+ 1. Net 224.0.0.0/4 Ifp en0 Ifa 169.254.22.44 [last]
+ 2. Net 255.255.255.255/32 Ifp en0 Ifa 169.254.22.44 [last]
+}
+Add new[0]: Net 169.254.0.0/16 Ifp en0 Ifa 169.254.22.44 [last]
+Add new[1]: Net 224.0.0.0/4 Ifp en0 Ifa 169.254.22.44 [last]
+Add new[2]: Net 255.255.255.255/32 Ifp en0 Ifa 169.254.22.44 [last]
+New Routes ('test14') = <IPv4RouteList[5]> = {
  0. Net 0.0.0.0/0 Gate 10.0.0.1 Ifp en1 Ifa 10.0.0.20 [never] [SCOPED]
  1. Net 10.0.0.0/24 Ifp en1 Ifa 10.0.0.20 [last]
  2. Net 10.0.0.1/32 Ifp en1 Ifa 10.0.0.20 [last]
+ 3. Net 224.0.0.0/4 Ifp en1 Ifa 10.0.0.20 [last]
+ 4. Net 255.255.255.255/32 Ifp en1 Ifa 10.0.0.20 [last]
 }
-Remove old[0]: Net 0.0.0.0/0 Ifp en0 Ifa 169.254.22.44
+Remove old[0]: Net 169.254.0.0/16 Ifp en0 Ifa 169.254.22.44 [last]
+Remove old[1]: Net 224.0.0.0/4 Ifp en0 Ifa 169.254.22.44 [last]
+Remove old[2]: Net 255.255.255.255/32 Ifp en0 Ifa 169.254.22.44 [last]
 Add new[2]: Net 10.0.0.1/32 Ifp en1 Ifa 10.0.0.20 [last]
 Add new[0]: Net 0.0.0.0/0 Gate 10.0.0.1 Ifp en1 Ifa 10.0.0.20 [never] [SCOPED]
 Add new[1]: Net 10.0.0.0/24 Ifp en1 Ifa 10.0.0.20 [last]
+Add new[3]: Net 224.0.0.0/4 Ifp en1 Ifa 10.0.0.20 [last]
+Add new[4]: Net 255.255.255.255/32 Ifp en1 Ifa 10.0.0.20 [last]
 =================> Apply 'test15', 'test14' End <=================
 
 =================> Apply 'test14', 'test16' Begin <=================
-Old routes ('test14') = <IPv4RouteList[3]> = {
+Old routes ('test14') = <IPv4RouteList[5]> = {
  0. Net 0.0.0.0/0 Gate 10.0.0.1 Ifp en1 Ifa 10.0.0.20 [never] [SCOPED]
  1. Net 10.0.0.0/24 Ifp en1 Ifa 10.0.0.20 [last]
  2. Net 10.0.0.1/32 Ifp en1 Ifa 10.0.0.20 [last]
+ 3. Net 224.0.0.0/4 Ifp en1 Ifa 10.0.0.20 [last]
+ 4. Net 255.255.255.255/32 Ifp en1 Ifa 10.0.0.20 [last]
 }
 Add new[2]: Net 10.0.0.1/32 Ifp en1 Ifa 10.0.0.20 [last]
 Add new[0]: Net 0.0.0.0/0 Gate 10.0.0.1 Ifp en1 Ifa 10.0.0.20 [never] [SCOPED]
 Add new[1]: Net 10.0.0.0/24 Ifp en1 Ifa 10.0.0.20 [last]
-New Routes ('test16') = <IPv4RouteList[50]> = {
+Add new[3]: Net 224.0.0.0/4 Ifp en1 Ifa 10.0.0.20 [last]
+Add new[4]: Net 255.255.255.255/32 Ifp en1 Ifa 10.0.0.20 [last]
+New Routes ('test16') = <IPv4RouteList[54]> = {
  0. Net 0.0.0.0/0 Gate 10.0.0.1 Ifp en0 Ifa 10.0.0.10
  1. Net 0.0.0.0/0 Ifp utun0 Ifa 17.153.46.24 [SCOPED]
  2. Net 10.0.0.0/24 Ifp en0 Ifa 10.0.0.10
@@ -17324,10 +24452,16 @@ New Routes ('test16') = <IPv4RouteList[50]> = {
 47. Net 192.35.50.0/24 Gate 17.153.46.24 Ifp utun0 Ifa 17.153.46.24
 48. Net 204.179.20.0/24 Gate 17.153.46.24 Ifp utun0 Ifa 17.153.46.24
 49. Net 206.112.116.0/24 Gate 17.153.46.24 Ifp utun0 Ifa 17.153.46.24
+50. Net 224.0.0.0/4 Ifp en0 Ifa 10.0.0.10
+51. Net 224.0.0.0/4 Ifp utun0 Ifa 17.153.46.24 [SCOPED]
+52. Net 255.255.255.255/32 Ifp en0 Ifa 10.0.0.10
+53. Net 255.255.255.255/32 Ifp utun0 Ifa 17.153.46.24 [SCOPED]
 }
 Remove old[0]: Net 0.0.0.0/0 Gate 10.0.0.1 Ifp en1 Ifa 10.0.0.20 [never] [SCOPED]
 Remove old[1]: Net 10.0.0.0/24 Ifp en1 Ifa 10.0.0.20 [last]
 Remove old[2]: Net 10.0.0.1/32 Ifp en1 Ifa 10.0.0.20 [last]
+Remove old[3]: Net 224.0.0.0/4 Ifp en1 Ifa 10.0.0.20 [last]
+Remove old[4]: Net 255.255.255.255/32 Ifp en1 Ifa 10.0.0.20 [last]
 Add new[3]: Net 10.0.0.1/32 Ifp en0 Ifa 10.0.0.10
 Add new[0]: Net 0.0.0.0/0 Gate 10.0.0.1 Ifp en0 Ifa 10.0.0.10
 Add new[1]: Net 0.0.0.0/0 Ifp utun0 Ifa 17.153.46.24 [SCOPED]
@@ -17378,10 +24512,14 @@ Add new[46]: Net 172.16.2.0/24 Gate 17.153.46.24 Ifp utun0 Ifa 17.153.46.24
 Add new[47]: Net 192.35.50.0/24 Gate 17.153.46.24 Ifp utun0 Ifa 17.153.46.24
 Add new[48]: Net 204.179.20.0/24 Gate 17.153.46.24 Ifp utun0 Ifa 17.153.46.24
 Add new[49]: Net 206.112.116.0/24 Gate 17.153.46.24 Ifp utun0 Ifa 17.153.46.24
+Add new[50]: Net 224.0.0.0/4 Ifp en0 Ifa 10.0.0.10
+Add new[51]: Net 224.0.0.0/4 Ifp utun0 Ifa 17.153.46.24 [SCOPED]
+Add new[52]: Net 255.255.255.255/32 Ifp en0 Ifa 10.0.0.10
+Add new[53]: Net 255.255.255.255/32 Ifp utun0 Ifa 17.153.46.24 [SCOPED]
 =================> Apply 'test14', 'test16' End <=================
 
 =================> Apply 'test16', 'test14' Begin <=================
-Old routes ('test16') = <IPv4RouteList[50]> = {
+Old routes ('test16') = <IPv4RouteList[54]> = {
  0. Net 0.0.0.0/0 Gate 10.0.0.1 Ifp en0 Ifa 10.0.0.10
  1. Net 0.0.0.0/0 Ifp utun0 Ifa 17.153.46.24 [SCOPED]
  2. Net 10.0.0.0/24 Ifp en0 Ifa 10.0.0.10
@@ -17432,6 +24570,10 @@ Old routes ('test16') = <IPv4RouteList[50]> = {
 47. Net 192.35.50.0/24 Gate 17.153.46.24 Ifp utun0 Ifa 17.153.46.24
 48. Net 204.179.20.0/24 Gate 17.153.46.24 Ifp utun0 Ifa 17.153.46.24
 49. Net 206.112.116.0/24 Gate 17.153.46.24 Ifp utun0 Ifa 17.153.46.24
+50. Net 224.0.0.0/4 Ifp en0 Ifa 10.0.0.10
+51. Net 224.0.0.0/4 Ifp utun0 Ifa 17.153.46.24 [SCOPED]
+52. Net 255.255.255.255/32 Ifp en0 Ifa 10.0.0.10
+53. Net 255.255.255.255/32 Ifp utun0 Ifa 17.153.46.24 [SCOPED]
 }
 Add new[3]: Net 10.0.0.1/32 Ifp en0 Ifa 10.0.0.10
 Add new[0]: Net 0.0.0.0/0 Gate 10.0.0.1 Ifp en0 Ifa 10.0.0.10
@@ -17483,10 +24625,16 @@ Add new[46]: Net 172.16.2.0/24 Gate 17.153.46.24 Ifp utun0 Ifa 17.153.46.24
 Add new[47]: Net 192.35.50.0/24 Gate 17.153.46.24 Ifp utun0 Ifa 17.153.46.24
 Add new[48]: Net 204.179.20.0/24 Gate 17.153.46.24 Ifp utun0 Ifa 17.153.46.24
 Add new[49]: Net 206.112.116.0/24 Gate 17.153.46.24 Ifp utun0 Ifa 17.153.46.24
-New Routes ('test14') = <IPv4RouteList[3]> = {
+Add new[50]: Net 224.0.0.0/4 Ifp en0 Ifa 10.0.0.10
+Add new[51]: Net 224.0.0.0/4 Ifp utun0 Ifa 17.153.46.24 [SCOPED]
+Add new[52]: Net 255.255.255.255/32 Ifp en0 Ifa 10.0.0.10
+Add new[53]: Net 255.255.255.255/32 Ifp utun0 Ifa 17.153.46.24 [SCOPED]
+New Routes ('test14') = <IPv4RouteList[5]> = {
  0. Net 0.0.0.0/0 Gate 10.0.0.1 Ifp en1 Ifa 10.0.0.20 [never] [SCOPED]
  1. Net 10.0.0.0/24 Ifp en1 Ifa 10.0.0.20 [last]
  2. Net 10.0.0.1/32 Ifp en1 Ifa 10.0.0.20 [last]
+ 3. Net 224.0.0.0/4 Ifp en1 Ifa 10.0.0.20 [last]
+ 4. Net 255.255.255.255/32 Ifp en1 Ifa 10.0.0.20 [last]
 }
 Remove old[0]: Net 0.0.0.0/0 Gate 10.0.0.1 Ifp en0 Ifa 10.0.0.10
 Remove old[1]: Net 0.0.0.0/0 Ifp utun0 Ifa 17.153.46.24 [SCOPED]
@@ -17538,47 +24686,71 @@ Remove old[46]: Net 172.16.2.0/24 Gate 17.153.46.24 Ifp utun0 Ifa 17.153.46.24
 Remove old[47]: Net 192.35.50.0/24 Gate 17.153.46.24 Ifp utun0 Ifa 17.153.46.24
 Remove old[48]: Net 204.179.20.0/24 Gate 17.153.46.24 Ifp utun0 Ifa 17.153.46.24
 Remove old[49]: Net 206.112.116.0/24 Gate 17.153.46.24 Ifp utun0 Ifa 17.153.46.24
+Remove old[50]: Net 224.0.0.0/4 Ifp en0 Ifa 10.0.0.10
+Remove old[51]: Net 224.0.0.0/4 Ifp utun0 Ifa 17.153.46.24 [SCOPED]
+Remove old[52]: Net 255.255.255.255/32 Ifp en0 Ifa 10.0.0.10
+Remove old[53]: Net 255.255.255.255/32 Ifp utun0 Ifa 17.153.46.24 [SCOPED]
 Add new[2]: Net 10.0.0.1/32 Ifp en1 Ifa 10.0.0.20 [last]
 Add new[0]: Net 0.0.0.0/0 Gate 10.0.0.1 Ifp en1 Ifa 10.0.0.20 [never] [SCOPED]
 Add new[1]: Net 10.0.0.0/24 Ifp en1 Ifa 10.0.0.20 [last]
+Add new[3]: Net 224.0.0.0/4 Ifp en1 Ifa 10.0.0.20 [last]
+Add new[4]: Net 255.255.255.255/32 Ifp en1 Ifa 10.0.0.20 [last]
 =================> Apply 'test16', 'test14' End <=================
 
 =================> Apply 'test14', 'test17' Begin <=================
-Old routes ('test14') = <IPv4RouteList[3]> = {
+Old routes ('test14') = <IPv4RouteList[5]> = {
  0. Net 0.0.0.0/0 Gate 10.0.0.1 Ifp en1 Ifa 10.0.0.20 [never] [SCOPED]
  1. Net 10.0.0.0/24 Ifp en1 Ifa 10.0.0.20 [last]
  2. Net 10.0.0.1/32 Ifp en1 Ifa 10.0.0.20 [last]
+ 3. Net 224.0.0.0/4 Ifp en1 Ifa 10.0.0.20 [last]
+ 4. Net 255.255.255.255/32 Ifp en1 Ifa 10.0.0.20 [last]
 }
 Add new[2]: Net 10.0.0.1/32 Ifp en1 Ifa 10.0.0.20 [last]
 Add new[0]: Net 0.0.0.0/0 Gate 10.0.0.1 Ifp en1 Ifa 10.0.0.20 [never] [SCOPED]
 Add new[1]: Net 10.0.0.0/24 Ifp en1 Ifa 10.0.0.20 [last]
-New Routes ('test17') = <IPv4RouteList[6]> = {
+Add new[3]: Net 224.0.0.0/4 Ifp en1 Ifa 10.0.0.20 [last]
+Add new[4]: Net 255.255.255.255/32 Ifp en1 Ifa 10.0.0.20 [last]
+New Routes ('test17') = <IPv4RouteList[10]> = {
  0. Net 0.0.0.0/0 Gate 10.0.0.1 Ifp en0 Ifa 10.0.0.10
  1. Net 0.0.0.0/0 Gate 192.168.2.1 Ifp en1 Ifa 192.168.2.50 [never] [SCOPED]
  2. Net 10.0.0.0/24 Ifp en0 Ifa 10.0.0.10
  3. Net 10.0.0.1/32 Ifp en0 Ifa 10.0.0.10
  4. Net 192.168.2.0/24 Ifp en1 Ifa 192.168.2.50 [last]
  5. Net 192.168.2.1/32 Ifp en1 Ifa 192.168.2.50 [last]
+ 6. Net 224.0.0.0/4 Ifp en0 Ifa 10.0.0.10
+ 7. Net 224.0.0.0/4 Ifp en1 Ifa 192.168.2.50 [last] [SCOPED]
+ 8. Net 255.255.255.255/32 Ifp en0 Ifa 10.0.0.10
+ 9. Net 255.255.255.255/32 Ifp en1 Ifa 192.168.2.50 [last] [SCOPED]
 }
 Remove old[0]: Net 0.0.0.0/0 Gate 10.0.0.1 Ifp en1 Ifa 10.0.0.20 [never] [SCOPED]
 Remove old[1]: Net 10.0.0.0/24 Ifp en1 Ifa 10.0.0.20 [last]
 Remove old[2]: Net 10.0.0.1/32 Ifp en1 Ifa 10.0.0.20 [last]
+Remove old[3]: Net 224.0.0.0/4 Ifp en1 Ifa 10.0.0.20 [last]
+Remove old[4]: Net 255.255.255.255/32 Ifp en1 Ifa 10.0.0.20 [last]
 Add new[3]: Net 10.0.0.1/32 Ifp en0 Ifa 10.0.0.10
 Add new[0]: Net 0.0.0.0/0 Gate 10.0.0.1 Ifp en0 Ifa 10.0.0.10
 Add new[5]: Net 192.168.2.1/32 Ifp en1 Ifa 192.168.2.50 [last]
 Add new[1]: Net 0.0.0.0/0 Gate 192.168.2.1 Ifp en1 Ifa 192.168.2.50 [never] [SCOPED]
 Add new[2]: Net 10.0.0.0/24 Ifp en0 Ifa 10.0.0.10
 Add new[4]: Net 192.168.2.0/24 Ifp en1 Ifa 192.168.2.50 [last]
+Add new[6]: Net 224.0.0.0/4 Ifp en0 Ifa 10.0.0.10
+Add new[7]: Net 224.0.0.0/4 Ifp en1 Ifa 192.168.2.50 [last] [SCOPED]
+Add new[8]: Net 255.255.255.255/32 Ifp en0 Ifa 10.0.0.10
+Add new[9]: Net 255.255.255.255/32 Ifp en1 Ifa 192.168.2.50 [last] [SCOPED]
 =================> Apply 'test14', 'test17' End <=================
 
 =================> Apply 'test17', 'test14' Begin <=================
-Old routes ('test17') = <IPv4RouteList[6]> = {
+Old routes ('test17') = <IPv4RouteList[10]> = {
  0. Net 0.0.0.0/0 Gate 10.0.0.1 Ifp en0 Ifa 10.0.0.10
  1. Net 0.0.0.0/0 Gate 192.168.2.1 Ifp en1 Ifa 192.168.2.50 [never] [SCOPED]
  2. Net 10.0.0.0/24 Ifp en0 Ifa 10.0.0.10
  3. Net 10.0.0.1/32 Ifp en0 Ifa 10.0.0.10
  4. Net 192.168.2.0/24 Ifp en1 Ifa 192.168.2.50 [last]
  5. Net 192.168.2.1/32 Ifp en1 Ifa 192.168.2.50 [last]
+ 6. Net 224.0.0.0/4 Ifp en0 Ifa 10.0.0.10
+ 7. Net 224.0.0.0/4 Ifp en1 Ifa 192.168.2.50 [last] [SCOPED]
+ 8. Net 255.255.255.255/32 Ifp en0 Ifa 10.0.0.10
+ 9. Net 255.255.255.255/32 Ifp en1 Ifa 192.168.2.50 [last] [SCOPED]
 }
 Add new[3]: Net 10.0.0.1/32 Ifp en0 Ifa 10.0.0.10
 Add new[0]: Net 0.0.0.0/0 Gate 10.0.0.1 Ifp en0 Ifa 10.0.0.10
@@ -17586,10 +24758,16 @@ Add new[5]: Net 192.168.2.1/32 Ifp en1 Ifa 192.168.2.50 [last]
 Add new[1]: Net 0.0.0.0/0 Gate 192.168.2.1 Ifp en1 Ifa 192.168.2.50 [never] [SCOPED]
 Add new[2]: Net 10.0.0.0/24 Ifp en0 Ifa 10.0.0.10
 Add new[4]: Net 192.168.2.0/24 Ifp en1 Ifa 192.168.2.50 [last]
-New Routes ('test14') = <IPv4RouteList[3]> = {
+Add new[6]: Net 224.0.0.0/4 Ifp en0 Ifa 10.0.0.10
+Add new[7]: Net 224.0.0.0/4 Ifp en1 Ifa 192.168.2.50 [last] [SCOPED]
+Add new[8]: Net 255.255.255.255/32 Ifp en0 Ifa 10.0.0.10
+Add new[9]: Net 255.255.255.255/32 Ifp en1 Ifa 192.168.2.50 [last] [SCOPED]
+New Routes ('test14') = <IPv4RouteList[5]> = {
  0. Net 0.0.0.0/0 Gate 10.0.0.1 Ifp en1 Ifa 10.0.0.20 [never] [SCOPED]
  1. Net 10.0.0.0/24 Ifp en1 Ifa 10.0.0.20 [last]
  2. Net 10.0.0.1/32 Ifp en1 Ifa 10.0.0.20 [last]
+ 3. Net 224.0.0.0/4 Ifp en1 Ifa 10.0.0.20 [last]
+ 4. Net 255.255.255.255/32 Ifp en1 Ifa 10.0.0.20 [last]
 }
 Remove old[0]: Net 0.0.0.0/0 Gate 10.0.0.1 Ifp en0 Ifa 10.0.0.10
 Remove old[1]: Net 0.0.0.0/0 Gate 192.168.2.1 Ifp en1 Ifa 192.168.2.50 [never] [SCOPED]
@@ -17597,21 +24775,31 @@ Remove old[2]: Net 10.0.0.0/24 Ifp en0 Ifa 10.0.0.10
 Remove old[3]: Net 10.0.0.1/32 Ifp en0 Ifa 10.0.0.10
 Remove old[4]: Net 192.168.2.0/24 Ifp en1 Ifa 192.168.2.50 [last]
 Remove old[5]: Net 192.168.2.1/32 Ifp en1 Ifa 192.168.2.50 [last]
+Remove old[6]: Net 224.0.0.0/4 Ifp en0 Ifa 10.0.0.10
+Remove old[7]: Net 224.0.0.0/4 Ifp en1 Ifa 192.168.2.50 [last] [SCOPED]
+Remove old[8]: Net 255.255.255.255/32 Ifp en0 Ifa 10.0.0.10
+Remove old[9]: Net 255.255.255.255/32 Ifp en1 Ifa 192.168.2.50 [last] [SCOPED]
 Add new[2]: Net 10.0.0.1/32 Ifp en1 Ifa 10.0.0.20 [last]
 Add new[0]: Net 0.0.0.0/0 Gate 10.0.0.1 Ifp en1 Ifa 10.0.0.20 [never] [SCOPED]
 Add new[1]: Net 10.0.0.0/24 Ifp en1 Ifa 10.0.0.20 [last]
+Add new[3]: Net 224.0.0.0/4 Ifp en1 Ifa 10.0.0.20 [last]
+Add new[4]: Net 255.255.255.255/32 Ifp en1 Ifa 10.0.0.20 [last]
 =================> Apply 'test17', 'test14' End <=================
 
 =================> Apply 'test14', 'test18' Begin <=================
-Old routes ('test14') = <IPv4RouteList[3]> = {
+Old routes ('test14') = <IPv4RouteList[5]> = {
  0. Net 0.0.0.0/0 Gate 10.0.0.1 Ifp en1 Ifa 10.0.0.20 [never] [SCOPED]
  1. Net 10.0.0.0/24 Ifp en1 Ifa 10.0.0.20 [last]
  2. Net 10.0.0.1/32 Ifp en1 Ifa 10.0.0.20 [last]
+ 3. Net 224.0.0.0/4 Ifp en1 Ifa 10.0.0.20 [last]
+ 4. Net 255.255.255.255/32 Ifp en1 Ifa 10.0.0.20 [last]
 }
 Add new[2]: Net 10.0.0.1/32 Ifp en1 Ifa 10.0.0.20 [last]
 Add new[0]: Net 0.0.0.0/0 Gate 10.0.0.1 Ifp en1 Ifa 10.0.0.20 [never] [SCOPED]
 Add new[1]: Net 10.0.0.0/24 Ifp en1 Ifa 10.0.0.20 [last]
-New Routes ('test18') = <IPv4RouteList[14]> = {
+Add new[3]: Net 224.0.0.0/4 Ifp en1 Ifa 10.0.0.20 [last]
+Add new[4]: Net 255.255.255.255/32 Ifp en1 Ifa 10.0.0.20 [last]
+New Routes ('test18') = <IPv4RouteList[16]> = {
  0. Net 0.0.0.0/0 Gate 192.168.130.1 Ifp en0 Ifa 192.168.130.16
  1. Host 1.1.1.1 Gate 1.1.1.2 Ifp en0 Ifa 192.168.130.16
  2. Host 1.1.1.2 Gate 1.1.1.3 Ifp en0 Ifa 192.168.130.16
@@ -17626,28 +24814,34 @@ New Routes ('test18') = <IPv4RouteList[14]> = {
 11. Host 1.1.1.11 Gate 1.1.1.1 Ifp en0 Ifa 192.168.130.16
 12. Net 192.168.130.0/24 Ifp en0 Ifa 192.168.130.16
 13. Net 192.168.130.1/32 Ifp en0 Ifa 192.168.130.16
+14. Net 224.0.0.0/4 Ifp en0 Ifa 192.168.130.16
+15. Net 255.255.255.255/32 Ifp en0 Ifa 192.168.130.16
 }
 Remove old[0]: Net 0.0.0.0/0 Gate 10.0.0.1 Ifp en1 Ifa 10.0.0.20 [never] [SCOPED]
 Remove old[1]: Net 10.0.0.0/24 Ifp en1 Ifa 10.0.0.20 [last]
 Remove old[2]: Net 10.0.0.1/32 Ifp en1 Ifa 10.0.0.20 [last]
+Remove old[3]: Net 224.0.0.0/4 Ifp en1 Ifa 10.0.0.20 [last]
+Remove old[4]: Net 255.255.255.255/32 Ifp en1 Ifa 10.0.0.20 [last]
 Add new[13]: Net 192.168.130.1/32 Ifp en0 Ifa 192.168.130.16
 Add new[0]: Net 0.0.0.0/0 Gate 192.168.130.1 Ifp en0 Ifa 192.168.130.16
-IPMonitor RouteProcess: routing loop detected, not adding: Host 1.1.1.11 Gate 1.1.1.1 Ifp en0 Ifa 192.168.130.16
-IPMonitor RouteProcess: failed to add: Host 1.1.1.10 Gate 1.1.1.11 Ifp en0 Ifa 192.168.130.16
-IPMonitor RouteProcess: failed to add: Host 1.1.1.9 Gate 1.1.1.10 Ifp en0 Ifa 192.168.130.16
-IPMonitor RouteProcess: failed to add: Host 1.1.1.8 Gate 1.1.1.9 Ifp en0 Ifa 192.168.130.16
-IPMonitor RouteProcess: failed to add: Host 1.1.1.7 Gate 1.1.1.8 Ifp en0 Ifa 192.168.130.16
-IPMonitor RouteProcess: failed to add: Host 1.1.1.6 Gate 1.1.1.7 Ifp en0 Ifa 192.168.130.16
-IPMonitor RouteProcess: failed to add: Host 1.1.1.5 Gate 1.1.1.6 Ifp en0 Ifa 192.168.130.16
-IPMonitor RouteProcess: failed to add: Host 1.1.1.4 Gate 1.1.1.5 Ifp en0 Ifa 192.168.130.16
-IPMonitor RouteProcess: failed to add: Host 1.1.1.3 Gate 1.1.1.4 Ifp en0 Ifa 192.168.130.16
-IPMonitor RouteProcess: failed to add: Host 1.1.1.2 Gate 1.1.1.3 Ifp en0 Ifa 192.168.130.16
-IPMonitor RouteProcess: failed to add: Host 1.1.1.1 Gate 1.1.1.2 Ifp en0 Ifa 192.168.130.16
+routing loop detected, not adding: Host 1.1.1.11 Gate 1.1.1.1 Ifp en0 Ifa 192.168.130.16
+failed to add: Host 1.1.1.10 Gate 1.1.1.11 Ifp en0 Ifa 192.168.130.16
+failed to add: Host 1.1.1.9 Gate 1.1.1.10 Ifp en0 Ifa 192.168.130.16
+failed to add: Host 1.1.1.8 Gate 1.1.1.9 Ifp en0 Ifa 192.168.130.16
+failed to add: Host 1.1.1.7 Gate 1.1.1.8 Ifp en0 Ifa 192.168.130.16
+failed to add: Host 1.1.1.6 Gate 1.1.1.7 Ifp en0 Ifa 192.168.130.16
+failed to add: Host 1.1.1.5 Gate 1.1.1.6 Ifp en0 Ifa 192.168.130.16
+failed to add: Host 1.1.1.4 Gate 1.1.1.5 Ifp en0 Ifa 192.168.130.16
+failed to add: Host 1.1.1.3 Gate 1.1.1.4 Ifp en0 Ifa 192.168.130.16
+failed to add: Host 1.1.1.2 Gate 1.1.1.3 Ifp en0 Ifa 192.168.130.16
+failed to add: Host 1.1.1.1 Gate 1.1.1.2 Ifp en0 Ifa 192.168.130.16
 Add new[12]: Net 192.168.130.0/24 Ifp en0 Ifa 192.168.130.16
+Add new[14]: Net 224.0.0.0/4 Ifp en0 Ifa 192.168.130.16
+Add new[15]: Net 255.255.255.255/32 Ifp en0 Ifa 192.168.130.16
 =================> Apply 'test14', 'test18' End <=================
 
 =================> Apply 'test18', 'test14' Begin <=================
-Old routes ('test18') = <IPv4RouteList[14]> = {
+Old routes ('test18') = <IPv4RouteList[16]> = {
  0. Net 0.0.0.0/0 Gate 192.168.130.1 Ifp en0 Ifa 192.168.130.16
  1. Host 1.1.1.1 Gate 1.1.1.2 Ifp en0 Ifa 192.168.130.16
  2. Host 1.1.1.2 Gate 1.1.1.3 Ifp en0 Ifa 192.168.130.16
@@ -17662,40 +24856,54 @@ Old routes ('test18') = <IPv4RouteList[14]> = {
 11. Host 1.1.1.11 Gate 1.1.1.1 Ifp en0 Ifa 192.168.130.16
 12. Net 192.168.130.0/24 Ifp en0 Ifa 192.168.130.16
 13. Net 192.168.130.1/32 Ifp en0 Ifa 192.168.130.16
+14. Net 224.0.0.0/4 Ifp en0 Ifa 192.168.130.16
+15. Net 255.255.255.255/32 Ifp en0 Ifa 192.168.130.16
 }
 Add new[13]: Net 192.168.130.1/32 Ifp en0 Ifa 192.168.130.16
 Add new[0]: Net 0.0.0.0/0 Gate 192.168.130.1 Ifp en0 Ifa 192.168.130.16
-IPMonitor RouteProcess: routing loop detected, not adding: Host 1.1.1.11 Gate 1.1.1.1 Ifp en0 Ifa 192.168.130.16
-IPMonitor RouteProcess: failed to add: Host 1.1.1.10 Gate 1.1.1.11 Ifp en0 Ifa 192.168.130.16
-IPMonitor RouteProcess: failed to add: Host 1.1.1.9 Gate 1.1.1.10 Ifp en0 Ifa 192.168.130.16
-IPMonitor RouteProcess: failed to add: Host 1.1.1.8 Gate 1.1.1.9 Ifp en0 Ifa 192.168.130.16
-IPMonitor RouteProcess: failed to add: Host 1.1.1.7 Gate 1.1.1.8 Ifp en0 Ifa 192.168.130.16
-IPMonitor RouteProcess: failed to add: Host 1.1.1.6 Gate 1.1.1.7 Ifp en0 Ifa 192.168.130.16
-IPMonitor RouteProcess: failed to add: Host 1.1.1.5 Gate 1.1.1.6 Ifp en0 Ifa 192.168.130.16
-IPMonitor RouteProcess: failed to add: Host 1.1.1.4 Gate 1.1.1.5 Ifp en0 Ifa 192.168.130.16
-IPMonitor RouteProcess: failed to add: Host 1.1.1.3 Gate 1.1.1.4 Ifp en0 Ifa 192.168.130.16
-IPMonitor RouteProcess: failed to add: Host 1.1.1.2 Gate 1.1.1.3 Ifp en0 Ifa 192.168.130.16
-IPMonitor RouteProcess: failed to add: Host 1.1.1.1 Gate 1.1.1.2 Ifp en0 Ifa 192.168.130.16
+routing loop detected, not adding: Host 1.1.1.11 Gate 1.1.1.1 Ifp en0 Ifa 192.168.130.16
+failed to add: Host 1.1.1.10 Gate 1.1.1.11 Ifp en0 Ifa 192.168.130.16
+failed to add: Host 1.1.1.9 Gate 1.1.1.10 Ifp en0 Ifa 192.168.130.16
+failed to add: Host 1.1.1.8 Gate 1.1.1.9 Ifp en0 Ifa 192.168.130.16
+failed to add: Host 1.1.1.7 Gate 1.1.1.8 Ifp en0 Ifa 192.168.130.16
+failed to add: Host 1.1.1.6 Gate 1.1.1.7 Ifp en0 Ifa 192.168.130.16
+failed to add: Host 1.1.1.5 Gate 1.1.1.6 Ifp en0 Ifa 192.168.130.16
+failed to add: Host 1.1.1.4 Gate 1.1.1.5 Ifp en0 Ifa 192.168.130.16
+failed to add: Host 1.1.1.3 Gate 1.1.1.4 Ifp en0 Ifa 192.168.130.16
+failed to add: Host 1.1.1.2 Gate 1.1.1.3 Ifp en0 Ifa 192.168.130.16
+failed to add: Host 1.1.1.1 Gate 1.1.1.2 Ifp en0 Ifa 192.168.130.16
 Add new[12]: Net 192.168.130.0/24 Ifp en0 Ifa 192.168.130.16
-New Routes ('test14') = <IPv4RouteList[3]> = {
+Add new[14]: Net 224.0.0.0/4 Ifp en0 Ifa 192.168.130.16
+Add new[15]: Net 255.255.255.255/32 Ifp en0 Ifa 192.168.130.16
+New Routes ('test14') = <IPv4RouteList[5]> = {
  0. Net 0.0.0.0/0 Gate 10.0.0.1 Ifp en1 Ifa 10.0.0.20 [never] [SCOPED]
  1. Net 10.0.0.0/24 Ifp en1 Ifa 10.0.0.20 [last]
  2. Net 10.0.0.1/32 Ifp en1 Ifa 10.0.0.20 [last]
+ 3. Net 224.0.0.0/4 Ifp en1 Ifa 10.0.0.20 [last]
+ 4. Net 255.255.255.255/32 Ifp en1 Ifa 10.0.0.20 [last]
 }
 Remove old[0]: Net 0.0.0.0/0 Gate 192.168.130.1 Ifp en0 Ifa 192.168.130.16
 Remove old[12]: Net 192.168.130.0/24 Ifp en0 Ifa 192.168.130.16
 Remove old[13]: Net 192.168.130.1/32 Ifp en0 Ifa 192.168.130.16
+Remove old[14]: Net 224.0.0.0/4 Ifp en0 Ifa 192.168.130.16
+Remove old[15]: Net 255.255.255.255/32 Ifp en0 Ifa 192.168.130.16
 Add new[2]: Net 10.0.0.1/32 Ifp en1 Ifa 10.0.0.20 [last]
 Add new[0]: Net 0.0.0.0/0 Gate 10.0.0.1 Ifp en1 Ifa 10.0.0.20 [never] [SCOPED]
 Add new[1]: Net 10.0.0.0/24 Ifp en1 Ifa 10.0.0.20 [last]
+Add new[3]: Net 224.0.0.0/4 Ifp en1 Ifa 10.0.0.20 [last]
+Add new[4]: Net 255.255.255.255/32 Ifp en1 Ifa 10.0.0.20 [last]
 =================> Apply 'test18', 'test14' End <=================
 
 =================> Apply 'test15', 'test16' Begin <=================
-Old routes ('test15') = <IPv4RouteList[1]> = {
- 0. Net 0.0.0.0/0 Ifp en0 Ifa 169.254.22.44
+Old routes ('test15') = <IPv4RouteList[3]> = {
+ 0. Net 169.254.0.0/16 Ifp en0 Ifa 169.254.22.44 [last]
+ 1. Net 224.0.0.0/4 Ifp en0 Ifa 169.254.22.44 [last]
+ 2. Net 255.255.255.255/32 Ifp en0 Ifa 169.254.22.44 [last]
 }
-Add new[0]: Net 0.0.0.0/0 Ifp en0 Ifa 169.254.22.44
-New Routes ('test16') = <IPv4RouteList[50]> = {
+Add new[0]: Net 169.254.0.0/16 Ifp en0 Ifa 169.254.22.44 [last]
+Add new[1]: Net 224.0.0.0/4 Ifp en0 Ifa 169.254.22.44 [last]
+Add new[2]: Net 255.255.255.255/32 Ifp en0 Ifa 169.254.22.44 [last]
+New Routes ('test16') = <IPv4RouteList[54]> = {
  0. Net 0.0.0.0/0 Gate 10.0.0.1 Ifp en0 Ifa 10.0.0.10
  1. Net 0.0.0.0/0 Ifp utun0 Ifa 17.153.46.24 [SCOPED]
  2. Net 10.0.0.0/24 Ifp en0 Ifa 10.0.0.10
@@ -17746,8 +24954,14 @@ New Routes ('test16') = <IPv4RouteList[50]> = {
 47. Net 192.35.50.0/24 Gate 17.153.46.24 Ifp utun0 Ifa 17.153.46.24
 48. Net 204.179.20.0/24 Gate 17.153.46.24 Ifp utun0 Ifa 17.153.46.24
 49. Net 206.112.116.0/24 Gate 17.153.46.24 Ifp utun0 Ifa 17.153.46.24
-}
-Remove old[0]: Net 0.0.0.0/0 Ifp en0 Ifa 169.254.22.44
+50. Net 224.0.0.0/4 Ifp en0 Ifa 10.0.0.10
+51. Net 224.0.0.0/4 Ifp utun0 Ifa 17.153.46.24 [SCOPED]
+52. Net 255.255.255.255/32 Ifp en0 Ifa 10.0.0.10
+53. Net 255.255.255.255/32 Ifp utun0 Ifa 17.153.46.24 [SCOPED]
+}
+Remove old[0]: Net 169.254.0.0/16 Ifp en0 Ifa 169.254.22.44 [last]
+Remove old[1]: Net 224.0.0.0/4 Ifp en0 Ifa 169.254.22.44 [last]
+Remove old[2]: Net 255.255.255.255/32 Ifp en0 Ifa 169.254.22.44 [last]
 Add new[3]: Net 10.0.0.1/32 Ifp en0 Ifa 10.0.0.10
 Add new[0]: Net 0.0.0.0/0 Gate 10.0.0.1 Ifp en0 Ifa 10.0.0.10
 Add new[1]: Net 0.0.0.0/0 Ifp utun0 Ifa 17.153.46.24 [SCOPED]
@@ -17798,10 +25012,14 @@ Add new[46]: Net 172.16.2.0/24 Gate 17.153.46.24 Ifp utun0 Ifa 17.153.46.24
 Add new[47]: Net 192.35.50.0/24 Gate 17.153.46.24 Ifp utun0 Ifa 17.153.46.24
 Add new[48]: Net 204.179.20.0/24 Gate 17.153.46.24 Ifp utun0 Ifa 17.153.46.24
 Add new[49]: Net 206.112.116.0/24 Gate 17.153.46.24 Ifp utun0 Ifa 17.153.46.24
+Add new[50]: Net 224.0.0.0/4 Ifp en0 Ifa 10.0.0.10
+Add new[51]: Net 224.0.0.0/4 Ifp utun0 Ifa 17.153.46.24 [SCOPED]
+Add new[52]: Net 255.255.255.255/32 Ifp en0 Ifa 10.0.0.10
+Add new[53]: Net 255.255.255.255/32 Ifp utun0 Ifa 17.153.46.24 [SCOPED]
 =================> Apply 'test15', 'test16' End <=================
 
 =================> Apply 'test16', 'test15' Begin <=================
-Old routes ('test16') = <IPv4RouteList[50]> = {
+Old routes ('test16') = <IPv4RouteList[54]> = {
  0. Net 0.0.0.0/0 Gate 10.0.0.1 Ifp en0 Ifa 10.0.0.10
  1. Net 0.0.0.0/0 Ifp utun0 Ifa 17.153.46.24 [SCOPED]
  2. Net 10.0.0.0/24 Ifp en0 Ifa 10.0.0.10
@@ -17852,6 +25070,10 @@ Old routes ('test16') = <IPv4RouteList[50]> = {
 47. Net 192.35.50.0/24 Gate 17.153.46.24 Ifp utun0 Ifa 17.153.46.24
 48. Net 204.179.20.0/24 Gate 17.153.46.24 Ifp utun0 Ifa 17.153.46.24
 49. Net 206.112.116.0/24 Gate 17.153.46.24 Ifp utun0 Ifa 17.153.46.24
+50. Net 224.0.0.0/4 Ifp en0 Ifa 10.0.0.10
+51. Net 224.0.0.0/4 Ifp utun0 Ifa 17.153.46.24 [SCOPED]
+52. Net 255.255.255.255/32 Ifp en0 Ifa 10.0.0.10
+53. Net 255.255.255.255/32 Ifp utun0 Ifa 17.153.46.24 [SCOPED]
 }
 Add new[3]: Net 10.0.0.1/32 Ifp en0 Ifa 10.0.0.10
 Add new[0]: Net 0.0.0.0/0 Gate 10.0.0.1 Ifp en0 Ifa 10.0.0.10
@@ -17903,8 +25125,14 @@ Add new[46]: Net 172.16.2.0/24 Gate 17.153.46.24 Ifp utun0 Ifa 17.153.46.24
 Add new[47]: Net 192.35.50.0/24 Gate 17.153.46.24 Ifp utun0 Ifa 17.153.46.24
 Add new[48]: Net 204.179.20.0/24 Gate 17.153.46.24 Ifp utun0 Ifa 17.153.46.24
 Add new[49]: Net 206.112.116.0/24 Gate 17.153.46.24 Ifp utun0 Ifa 17.153.46.24
-New Routes ('test15') = <IPv4RouteList[1]> = {
- 0. Net 0.0.0.0/0 Ifp en0 Ifa 169.254.22.44
+Add new[50]: Net 224.0.0.0/4 Ifp en0 Ifa 10.0.0.10
+Add new[51]: Net 224.0.0.0/4 Ifp utun0 Ifa 17.153.46.24 [SCOPED]
+Add new[52]: Net 255.255.255.255/32 Ifp en0 Ifa 10.0.0.10
+Add new[53]: Net 255.255.255.255/32 Ifp utun0 Ifa 17.153.46.24 [SCOPED]
+New Routes ('test15') = <IPv4RouteList[3]> = {
+ 0. Net 169.254.0.0/16 Ifp en0 Ifa 169.254.22.44 [last]
+ 1. Net 224.0.0.0/4 Ifp en0 Ifa 169.254.22.44 [last]
+ 2. Net 255.255.255.255/32 Ifp en0 Ifa 169.254.22.44 [last]
 }
 Remove old[0]: Net 0.0.0.0/0 Gate 10.0.0.1 Ifp en0 Ifa 10.0.0.10
 Remove old[1]: Net 0.0.0.0/0 Ifp utun0 Ifa 17.153.46.24 [SCOPED]
@@ -17956,39 +25184,63 @@ Remove old[46]: Net 172.16.2.0/24 Gate 17.153.46.24 Ifp utun0 Ifa 17.153.46.24
 Remove old[47]: Net 192.35.50.0/24 Gate 17.153.46.24 Ifp utun0 Ifa 17.153.46.24
 Remove old[48]: Net 204.179.20.0/24 Gate 17.153.46.24 Ifp utun0 Ifa 17.153.46.24
 Remove old[49]: Net 206.112.116.0/24 Gate 17.153.46.24 Ifp utun0 Ifa 17.153.46.24
-Add new[0]: Net 0.0.0.0/0 Ifp en0 Ifa 169.254.22.44
+Remove old[50]: Net 224.0.0.0/4 Ifp en0 Ifa 10.0.0.10
+Remove old[51]: Net 224.0.0.0/4 Ifp utun0 Ifa 17.153.46.24 [SCOPED]
+Remove old[52]: Net 255.255.255.255/32 Ifp en0 Ifa 10.0.0.10
+Remove old[53]: Net 255.255.255.255/32 Ifp utun0 Ifa 17.153.46.24 [SCOPED]
+Add new[0]: Net 169.254.0.0/16 Ifp en0 Ifa 169.254.22.44 [last]
+Add new[1]: Net 224.0.0.0/4 Ifp en0 Ifa 169.254.22.44 [last]
+Add new[2]: Net 255.255.255.255/32 Ifp en0 Ifa 169.254.22.44 [last]
 =================> Apply 'test16', 'test15' End <=================
 
 =================> Apply 'test15', 'test17' Begin <=================
-Old routes ('test15') = <IPv4RouteList[1]> = {
- 0. Net 0.0.0.0/0 Ifp en0 Ifa 169.254.22.44
+Old routes ('test15') = <IPv4RouteList[3]> = {
+ 0. Net 169.254.0.0/16 Ifp en0 Ifa 169.254.22.44 [last]
+ 1. Net 224.0.0.0/4 Ifp en0 Ifa 169.254.22.44 [last]
+ 2. Net 255.255.255.255/32 Ifp en0 Ifa 169.254.22.44 [last]
 }
-Add new[0]: Net 0.0.0.0/0 Ifp en0 Ifa 169.254.22.44
-New Routes ('test17') = <IPv4RouteList[6]> = {
+Add new[0]: Net 169.254.0.0/16 Ifp en0 Ifa 169.254.22.44 [last]
+Add new[1]: Net 224.0.0.0/4 Ifp en0 Ifa 169.254.22.44 [last]
+Add new[2]: Net 255.255.255.255/32 Ifp en0 Ifa 169.254.22.44 [last]
+New Routes ('test17') = <IPv4RouteList[10]> = {
  0. Net 0.0.0.0/0 Gate 10.0.0.1 Ifp en0 Ifa 10.0.0.10
  1. Net 0.0.0.0/0 Gate 192.168.2.1 Ifp en1 Ifa 192.168.2.50 [never] [SCOPED]
  2. Net 10.0.0.0/24 Ifp en0 Ifa 10.0.0.10
  3. Net 10.0.0.1/32 Ifp en0 Ifa 10.0.0.10
  4. Net 192.168.2.0/24 Ifp en1 Ifa 192.168.2.50 [last]
  5. Net 192.168.2.1/32 Ifp en1 Ifa 192.168.2.50 [last]
-}
-Remove old[0]: Net 0.0.0.0/0 Ifp en0 Ifa 169.254.22.44
+ 6. Net 224.0.0.0/4 Ifp en0 Ifa 10.0.0.10
+ 7. Net 224.0.0.0/4 Ifp en1 Ifa 192.168.2.50 [last] [SCOPED]
+ 8. Net 255.255.255.255/32 Ifp en0 Ifa 10.0.0.10
+ 9. Net 255.255.255.255/32 Ifp en1 Ifa 192.168.2.50 [last] [SCOPED]
+}
+Remove old[0]: Net 169.254.0.0/16 Ifp en0 Ifa 169.254.22.44 [last]
+Remove old[1]: Net 224.0.0.0/4 Ifp en0 Ifa 169.254.22.44 [last]
+Remove old[2]: Net 255.255.255.255/32 Ifp en0 Ifa 169.254.22.44 [last]
 Add new[3]: Net 10.0.0.1/32 Ifp en0 Ifa 10.0.0.10
 Add new[0]: Net 0.0.0.0/0 Gate 10.0.0.1 Ifp en0 Ifa 10.0.0.10
 Add new[5]: Net 192.168.2.1/32 Ifp en1 Ifa 192.168.2.50 [last]
 Add new[1]: Net 0.0.0.0/0 Gate 192.168.2.1 Ifp en1 Ifa 192.168.2.50 [never] [SCOPED]
 Add new[2]: Net 10.0.0.0/24 Ifp en0 Ifa 10.0.0.10
 Add new[4]: Net 192.168.2.0/24 Ifp en1 Ifa 192.168.2.50 [last]
+Add new[6]: Net 224.0.0.0/4 Ifp en0 Ifa 10.0.0.10
+Add new[7]: Net 224.0.0.0/4 Ifp en1 Ifa 192.168.2.50 [last] [SCOPED]
+Add new[8]: Net 255.255.255.255/32 Ifp en0 Ifa 10.0.0.10
+Add new[9]: Net 255.255.255.255/32 Ifp en1 Ifa 192.168.2.50 [last] [SCOPED]
 =================> Apply 'test15', 'test17' End <=================
 
 =================> Apply 'test17', 'test15' Begin <=================
-Old routes ('test17') = <IPv4RouteList[6]> = {
+Old routes ('test17') = <IPv4RouteList[10]> = {
  0. Net 0.0.0.0/0 Gate 10.0.0.1 Ifp en0 Ifa 10.0.0.10
  1. Net 0.0.0.0/0 Gate 192.168.2.1 Ifp en1 Ifa 192.168.2.50 [never] [SCOPED]
  2. Net 10.0.0.0/24 Ifp en0 Ifa 10.0.0.10
  3. Net 10.0.0.1/32 Ifp en0 Ifa 10.0.0.10
  4. Net 192.168.2.0/24 Ifp en1 Ifa 192.168.2.50 [last]
  5. Net 192.168.2.1/32 Ifp en1 Ifa 192.168.2.50 [last]
+ 6. Net 224.0.0.0/4 Ifp en0 Ifa 10.0.0.10
+ 7. Net 224.0.0.0/4 Ifp en1 Ifa 192.168.2.50 [last] [SCOPED]
+ 8. Net 255.255.255.255/32 Ifp en0 Ifa 10.0.0.10
+ 9. Net 255.255.255.255/32 Ifp en1 Ifa 192.168.2.50 [last] [SCOPED]
 }
 Add new[3]: Net 10.0.0.1/32 Ifp en0 Ifa 10.0.0.10
 Add new[0]: Net 0.0.0.0/0 Gate 10.0.0.1 Ifp en0 Ifa 10.0.0.10
@@ -17996,8 +25248,14 @@ Add new[5]: Net 192.168.2.1/32 Ifp en1 Ifa 192.168.2.50 [last]
 Add new[1]: Net 0.0.0.0/0 Gate 192.168.2.1 Ifp en1 Ifa 192.168.2.50 [never] [SCOPED]
 Add new[2]: Net 10.0.0.0/24 Ifp en0 Ifa 10.0.0.10
 Add new[4]: Net 192.168.2.0/24 Ifp en1 Ifa 192.168.2.50 [last]
-New Routes ('test15') = <IPv4RouteList[1]> = {
- 0. Net 0.0.0.0/0 Ifp en0 Ifa 169.254.22.44
+Add new[6]: Net 224.0.0.0/4 Ifp en0 Ifa 10.0.0.10
+Add new[7]: Net 224.0.0.0/4 Ifp en1 Ifa 192.168.2.50 [last] [SCOPED]
+Add new[8]: Net 255.255.255.255/32 Ifp en0 Ifa 10.0.0.10
+Add new[9]: Net 255.255.255.255/32 Ifp en1 Ifa 192.168.2.50 [last] [SCOPED]
+New Routes ('test15') = <IPv4RouteList[3]> = {
+ 0. Net 169.254.0.0/16 Ifp en0 Ifa 169.254.22.44 [last]
+ 1. Net 224.0.0.0/4 Ifp en0 Ifa 169.254.22.44 [last]
+ 2. Net 255.255.255.255/32 Ifp en0 Ifa 169.254.22.44 [last]
 }
 Remove old[0]: Net 0.0.0.0/0 Gate 10.0.0.1 Ifp en0 Ifa 10.0.0.10
 Remove old[1]: Net 0.0.0.0/0 Gate 192.168.2.1 Ifp en1 Ifa 192.168.2.50 [never] [SCOPED]
@@ -18005,15 +25263,25 @@ Remove old[2]: Net 10.0.0.0/24 Ifp en0 Ifa 10.0.0.10
 Remove old[3]: Net 10.0.0.1/32 Ifp en0 Ifa 10.0.0.10
 Remove old[4]: Net 192.168.2.0/24 Ifp en1 Ifa 192.168.2.50 [last]
 Remove old[5]: Net 192.168.2.1/32 Ifp en1 Ifa 192.168.2.50 [last]
-Add new[0]: Net 0.0.0.0/0 Ifp en0 Ifa 169.254.22.44
+Remove old[6]: Net 224.0.0.0/4 Ifp en0 Ifa 10.0.0.10
+Remove old[7]: Net 224.0.0.0/4 Ifp en1 Ifa 192.168.2.50 [last] [SCOPED]
+Remove old[8]: Net 255.255.255.255/32 Ifp en0 Ifa 10.0.0.10
+Remove old[9]: Net 255.255.255.255/32 Ifp en1 Ifa 192.168.2.50 [last] [SCOPED]
+Add new[0]: Net 169.254.0.0/16 Ifp en0 Ifa 169.254.22.44 [last]
+Add new[1]: Net 224.0.0.0/4 Ifp en0 Ifa 169.254.22.44 [last]
+Add new[2]: Net 255.255.255.255/32 Ifp en0 Ifa 169.254.22.44 [last]
 =================> Apply 'test17', 'test15' End <=================
 
 =================> Apply 'test15', 'test18' Begin <=================
-Old routes ('test15') = <IPv4RouteList[1]> = {
- 0. Net 0.0.0.0/0 Ifp en0 Ifa 169.254.22.44
-}
-Add new[0]: Net 0.0.0.0/0 Ifp en0 Ifa 169.254.22.44
-New Routes ('test18') = <IPv4RouteList[14]> = {
+Old routes ('test15') = <IPv4RouteList[3]> = {
+ 0. Net 169.254.0.0/16 Ifp en0 Ifa 169.254.22.44 [last]
+ 1. Net 224.0.0.0/4 Ifp en0 Ifa 169.254.22.44 [last]
+ 2. Net 255.255.255.255/32 Ifp en0 Ifa 169.254.22.44 [last]
+}
+Add new[0]: Net 169.254.0.0/16 Ifp en0 Ifa 169.254.22.44 [last]
+Add new[1]: Net 224.0.0.0/4 Ifp en0 Ifa 169.254.22.44 [last]
+Add new[2]: Net 255.255.255.255/32 Ifp en0 Ifa 169.254.22.44 [last]
+New Routes ('test18') = <IPv4RouteList[16]> = {
  0. Net 0.0.0.0/0 Gate 192.168.130.1 Ifp en0 Ifa 192.168.130.16
  1. Host 1.1.1.1 Gate 1.1.1.2 Ifp en0 Ifa 192.168.130.16
  2. Host 1.1.1.2 Gate 1.1.1.3 Ifp en0 Ifa 192.168.130.16
@@ -18028,26 +25296,32 @@ New Routes ('test18') = <IPv4RouteList[14]> = {
 11. Host 1.1.1.11 Gate 1.1.1.1 Ifp en0 Ifa 192.168.130.16
 12. Net 192.168.130.0/24 Ifp en0 Ifa 192.168.130.16
 13. Net 192.168.130.1/32 Ifp en0 Ifa 192.168.130.16
+14. Net 224.0.0.0/4 Ifp en0 Ifa 192.168.130.16
+15. Net 255.255.255.255/32 Ifp en0 Ifa 192.168.130.16
 }
-Remove old[0]: Net 0.0.0.0/0 Ifp en0 Ifa 169.254.22.44
+Remove old[0]: Net 169.254.0.0/16 Ifp en0 Ifa 169.254.22.44 [last]
+Remove old[1]: Net 224.0.0.0/4 Ifp en0 Ifa 169.254.22.44 [last]
+Remove old[2]: Net 255.255.255.255/32 Ifp en0 Ifa 169.254.22.44 [last]
 Add new[13]: Net 192.168.130.1/32 Ifp en0 Ifa 192.168.130.16
 Add new[0]: Net 0.0.0.0/0 Gate 192.168.130.1 Ifp en0 Ifa 192.168.130.16
-IPMonitor RouteProcess: routing loop detected, not adding: Host 1.1.1.11 Gate 1.1.1.1 Ifp en0 Ifa 192.168.130.16
-IPMonitor RouteProcess: failed to add: Host 1.1.1.10 Gate 1.1.1.11 Ifp en0 Ifa 192.168.130.16
-IPMonitor RouteProcess: failed to add: Host 1.1.1.9 Gate 1.1.1.10 Ifp en0 Ifa 192.168.130.16
-IPMonitor RouteProcess: failed to add: Host 1.1.1.8 Gate 1.1.1.9 Ifp en0 Ifa 192.168.130.16
-IPMonitor RouteProcess: failed to add: Host 1.1.1.7 Gate 1.1.1.8 Ifp en0 Ifa 192.168.130.16
-IPMonitor RouteProcess: failed to add: Host 1.1.1.6 Gate 1.1.1.7 Ifp en0 Ifa 192.168.130.16
-IPMonitor RouteProcess: failed to add: Host 1.1.1.5 Gate 1.1.1.6 Ifp en0 Ifa 192.168.130.16
-IPMonitor RouteProcess: failed to add: Host 1.1.1.4 Gate 1.1.1.5 Ifp en0 Ifa 192.168.130.16
-IPMonitor RouteProcess: failed to add: Host 1.1.1.3 Gate 1.1.1.4 Ifp en0 Ifa 192.168.130.16
-IPMonitor RouteProcess: failed to add: Host 1.1.1.2 Gate 1.1.1.3 Ifp en0 Ifa 192.168.130.16
-IPMonitor RouteProcess: failed to add: Host 1.1.1.1 Gate 1.1.1.2 Ifp en0 Ifa 192.168.130.16
+routing loop detected, not adding: Host 1.1.1.11 Gate 1.1.1.1 Ifp en0 Ifa 192.168.130.16
+failed to add: Host 1.1.1.10 Gate 1.1.1.11 Ifp en0 Ifa 192.168.130.16
+failed to add: Host 1.1.1.9 Gate 1.1.1.10 Ifp en0 Ifa 192.168.130.16
+failed to add: Host 1.1.1.8 Gate 1.1.1.9 Ifp en0 Ifa 192.168.130.16
+failed to add: Host 1.1.1.7 Gate 1.1.1.8 Ifp en0 Ifa 192.168.130.16
+failed to add: Host 1.1.1.6 Gate 1.1.1.7 Ifp en0 Ifa 192.168.130.16
+failed to add: Host 1.1.1.5 Gate 1.1.1.6 Ifp en0 Ifa 192.168.130.16
+failed to add: Host 1.1.1.4 Gate 1.1.1.5 Ifp en0 Ifa 192.168.130.16
+failed to add: Host 1.1.1.3 Gate 1.1.1.4 Ifp en0 Ifa 192.168.130.16
+failed to add: Host 1.1.1.2 Gate 1.1.1.3 Ifp en0 Ifa 192.168.130.16
+failed to add: Host 1.1.1.1 Gate 1.1.1.2 Ifp en0 Ifa 192.168.130.16
 Add new[12]: Net 192.168.130.0/24 Ifp en0 Ifa 192.168.130.16
+Add new[14]: Net 224.0.0.0/4 Ifp en0 Ifa 192.168.130.16
+Add new[15]: Net 255.255.255.255/32 Ifp en0 Ifa 192.168.130.16
 =================> Apply 'test15', 'test18' End <=================
 
 =================> Apply 'test18', 'test15' Begin <=================
-Old routes ('test18') = <IPv4RouteList[14]> = {
+Old routes ('test18') = <IPv4RouteList[16]> = {
  0. Net 0.0.0.0/0 Gate 192.168.130.1 Ifp en0 Ifa 192.168.130.16
  1. Host 1.1.1.1 Gate 1.1.1.2 Ifp en0 Ifa 192.168.130.16
  2. Host 1.1.1.2 Gate 1.1.1.3 Ifp en0 Ifa 192.168.130.16
@@ -18062,32 +25336,42 @@ Old routes ('test18') = <IPv4RouteList[14]> = {
 11. Host 1.1.1.11 Gate 1.1.1.1 Ifp en0 Ifa 192.168.130.16
 12. Net 192.168.130.0/24 Ifp en0 Ifa 192.168.130.16
 13. Net 192.168.130.1/32 Ifp en0 Ifa 192.168.130.16
+14. Net 224.0.0.0/4 Ifp en0 Ifa 192.168.130.16
+15. Net 255.255.255.255/32 Ifp en0 Ifa 192.168.130.16
 }
 Add new[13]: Net 192.168.130.1/32 Ifp en0 Ifa 192.168.130.16
 Add new[0]: Net 0.0.0.0/0 Gate 192.168.130.1 Ifp en0 Ifa 192.168.130.16
-IPMonitor RouteProcess: routing loop detected, not adding: Host 1.1.1.11 Gate 1.1.1.1 Ifp en0 Ifa 192.168.130.16
-IPMonitor RouteProcess: failed to add: Host 1.1.1.10 Gate 1.1.1.11 Ifp en0 Ifa 192.168.130.16
-IPMonitor RouteProcess: failed to add: Host 1.1.1.9 Gate 1.1.1.10 Ifp en0 Ifa 192.168.130.16
-IPMonitor RouteProcess: failed to add: Host 1.1.1.8 Gate 1.1.1.9 Ifp en0 Ifa 192.168.130.16
-IPMonitor RouteProcess: failed to add: Host 1.1.1.7 Gate 1.1.1.8 Ifp en0 Ifa 192.168.130.16
-IPMonitor RouteProcess: failed to add: Host 1.1.1.6 Gate 1.1.1.7 Ifp en0 Ifa 192.168.130.16
-IPMonitor RouteProcess: failed to add: Host 1.1.1.5 Gate 1.1.1.6 Ifp en0 Ifa 192.168.130.16
-IPMonitor RouteProcess: failed to add: Host 1.1.1.4 Gate 1.1.1.5 Ifp en0 Ifa 192.168.130.16
-IPMonitor RouteProcess: failed to add: Host 1.1.1.3 Gate 1.1.1.4 Ifp en0 Ifa 192.168.130.16
-IPMonitor RouteProcess: failed to add: Host 1.1.1.2 Gate 1.1.1.3 Ifp en0 Ifa 192.168.130.16
-IPMonitor RouteProcess: failed to add: Host 1.1.1.1 Gate 1.1.1.2 Ifp en0 Ifa 192.168.130.16
+routing loop detected, not adding: Host 1.1.1.11 Gate 1.1.1.1 Ifp en0 Ifa 192.168.130.16
+failed to add: Host 1.1.1.10 Gate 1.1.1.11 Ifp en0 Ifa 192.168.130.16
+failed to add: Host 1.1.1.9 Gate 1.1.1.10 Ifp en0 Ifa 192.168.130.16
+failed to add: Host 1.1.1.8 Gate 1.1.1.9 Ifp en0 Ifa 192.168.130.16
+failed to add: Host 1.1.1.7 Gate 1.1.1.8 Ifp en0 Ifa 192.168.130.16
+failed to add: Host 1.1.1.6 Gate 1.1.1.7 Ifp en0 Ifa 192.168.130.16
+failed to add: Host 1.1.1.5 Gate 1.1.1.6 Ifp en0 Ifa 192.168.130.16
+failed to add: Host 1.1.1.4 Gate 1.1.1.5 Ifp en0 Ifa 192.168.130.16
+failed to add: Host 1.1.1.3 Gate 1.1.1.4 Ifp en0 Ifa 192.168.130.16
+failed to add: Host 1.1.1.2 Gate 1.1.1.3 Ifp en0 Ifa 192.168.130.16
+failed to add: Host 1.1.1.1 Gate 1.1.1.2 Ifp en0 Ifa 192.168.130.16
 Add new[12]: Net 192.168.130.0/24 Ifp en0 Ifa 192.168.130.16
-New Routes ('test15') = <IPv4RouteList[1]> = {
- 0. Net 0.0.0.0/0 Ifp en0 Ifa 169.254.22.44
+Add new[14]: Net 224.0.0.0/4 Ifp en0 Ifa 192.168.130.16
+Add new[15]: Net 255.255.255.255/32 Ifp en0 Ifa 192.168.130.16
+New Routes ('test15') = <IPv4RouteList[3]> = {
+ 0. Net 169.254.0.0/16 Ifp en0 Ifa 169.254.22.44 [last]
+ 1. Net 224.0.0.0/4 Ifp en0 Ifa 169.254.22.44 [last]
+ 2. Net 255.255.255.255/32 Ifp en0 Ifa 169.254.22.44 [last]
 }
 Remove old[0]: Net 0.0.0.0/0 Gate 192.168.130.1 Ifp en0 Ifa 192.168.130.16
 Remove old[12]: Net 192.168.130.0/24 Ifp en0 Ifa 192.168.130.16
 Remove old[13]: Net 192.168.130.1/32 Ifp en0 Ifa 192.168.130.16
-Add new[0]: Net 0.0.0.0/0 Ifp en0 Ifa 169.254.22.44
+Remove old[14]: Net 224.0.0.0/4 Ifp en0 Ifa 192.168.130.16
+Remove old[15]: Net 255.255.255.255/32 Ifp en0 Ifa 192.168.130.16
+Add new[0]: Net 169.254.0.0/16 Ifp en0 Ifa 169.254.22.44 [last]
+Add new[1]: Net 224.0.0.0/4 Ifp en0 Ifa 169.254.22.44 [last]
+Add new[2]: Net 255.255.255.255/32 Ifp en0 Ifa 169.254.22.44 [last]
 =================> Apply 'test18', 'test15' End <=================
 
 =================> Apply 'test16', 'test17' Begin <=================
-Old routes ('test16') = <IPv4RouteList[50]> = {
+Old routes ('test16') = <IPv4RouteList[54]> = {
  0. Net 0.0.0.0/0 Gate 10.0.0.1 Ifp en0 Ifa 10.0.0.10
  1. Net 0.0.0.0/0 Ifp utun0 Ifa 17.153.46.24 [SCOPED]
  2. Net 10.0.0.0/24 Ifp en0 Ifa 10.0.0.10
@@ -18138,6 +25422,10 @@ Old routes ('test16') = <IPv4RouteList[50]> = {
 47. Net 192.35.50.0/24 Gate 17.153.46.24 Ifp utun0 Ifa 17.153.46.24
 48. Net 204.179.20.0/24 Gate 17.153.46.24 Ifp utun0 Ifa 17.153.46.24
 49. Net 206.112.116.0/24 Gate 17.153.46.24 Ifp utun0 Ifa 17.153.46.24
+50. Net 224.0.0.0/4 Ifp en0 Ifa 10.0.0.10
+51. Net 224.0.0.0/4 Ifp utun0 Ifa 17.153.46.24 [SCOPED]
+52. Net 255.255.255.255/32 Ifp en0 Ifa 10.0.0.10
+53. Net 255.255.255.255/32 Ifp utun0 Ifa 17.153.46.24 [SCOPED]
 }
 Add new[3]: Net 10.0.0.1/32 Ifp en0 Ifa 10.0.0.10
 Add new[0]: Net 0.0.0.0/0 Gate 10.0.0.1 Ifp en0 Ifa 10.0.0.10
@@ -18189,13 +25477,21 @@ Add new[46]: Net 172.16.2.0/24 Gate 17.153.46.24 Ifp utun0 Ifa 17.153.46.24
 Add new[47]: Net 192.35.50.0/24 Gate 17.153.46.24 Ifp utun0 Ifa 17.153.46.24
 Add new[48]: Net 204.179.20.0/24 Gate 17.153.46.24 Ifp utun0 Ifa 17.153.46.24
 Add new[49]: Net 206.112.116.0/24 Gate 17.153.46.24 Ifp utun0 Ifa 17.153.46.24
-New Routes ('test17') = <IPv4RouteList[6]> = {
+Add new[50]: Net 224.0.0.0/4 Ifp en0 Ifa 10.0.0.10
+Add new[51]: Net 224.0.0.0/4 Ifp utun0 Ifa 17.153.46.24 [SCOPED]
+Add new[52]: Net 255.255.255.255/32 Ifp en0 Ifa 10.0.0.10
+Add new[53]: Net 255.255.255.255/32 Ifp utun0 Ifa 17.153.46.24 [SCOPED]
+New Routes ('test17') = <IPv4RouteList[10]> = {
  0. Net 0.0.0.0/0 Gate 10.0.0.1 Ifp en0 Ifa 10.0.0.10
  1. Net 0.0.0.0/0 Gate 192.168.2.1 Ifp en1 Ifa 192.168.2.50 [never] [SCOPED]
  2. Net 10.0.0.0/24 Ifp en0 Ifa 10.0.0.10
  3. Net 10.0.0.1/32 Ifp en0 Ifa 10.0.0.10
  4. Net 192.168.2.0/24 Ifp en1 Ifa 192.168.2.50 [last]
  5. Net 192.168.2.1/32 Ifp en1 Ifa 192.168.2.50 [last]
+ 6. Net 224.0.0.0/4 Ifp en0 Ifa 10.0.0.10
+ 7. Net 224.0.0.0/4 Ifp en1 Ifa 192.168.2.50 [last] [SCOPED]
+ 8. Net 255.255.255.255/32 Ifp en0 Ifa 10.0.0.10
+ 9. Net 255.255.255.255/32 Ifp en1 Ifa 192.168.2.50 [last] [SCOPED]
 }
 Remove old[1]: Net 0.0.0.0/0 Ifp utun0 Ifa 17.153.46.24 [SCOPED]
 Remove old[4]: Net 10.1.3.0/24 Gate 17.153.46.24 Ifp utun0 Ifa 17.153.46.24
@@ -18244,19 +25540,27 @@ Remove old[46]: Net 172.16.2.0/24 Gate 17.153.46.24 Ifp utun0 Ifa 17.153.46.24
 Remove old[47]: Net 192.35.50.0/24 Gate 17.153.46.24 Ifp utun0 Ifa 17.153.46.24
 Remove old[48]: Net 204.179.20.0/24 Gate 17.153.46.24 Ifp utun0 Ifa 17.153.46.24
 Remove old[49]: Net 206.112.116.0/24 Gate 17.153.46.24 Ifp utun0 Ifa 17.153.46.24
+Remove old[51]: Net 224.0.0.0/4 Ifp utun0 Ifa 17.153.46.24 [SCOPED]
+Remove old[53]: Net 255.255.255.255/32 Ifp utun0 Ifa 17.153.46.24 [SCOPED]
 Add new[5]: Net 192.168.2.1/32 Ifp en1 Ifa 192.168.2.50 [last]
 Add new[1]: Net 0.0.0.0/0 Gate 192.168.2.1 Ifp en1 Ifa 192.168.2.50 [never] [SCOPED]
 Add new[4]: Net 192.168.2.0/24 Ifp en1 Ifa 192.168.2.50 [last]
+Add new[7]: Net 224.0.0.0/4 Ifp en1 Ifa 192.168.2.50 [last] [SCOPED]
+Add new[9]: Net 255.255.255.255/32 Ifp en1 Ifa 192.168.2.50 [last] [SCOPED]
 =================> Apply 'test16', 'test17' End <=================
 
 =================> Apply 'test17', 'test16' Begin <=================
-Old routes ('test17') = <IPv4RouteList[6]> = {
+Old routes ('test17') = <IPv4RouteList[10]> = {
  0. Net 0.0.0.0/0 Gate 10.0.0.1 Ifp en0 Ifa 10.0.0.10
  1. Net 0.0.0.0/0 Gate 192.168.2.1 Ifp en1 Ifa 192.168.2.50 [never] [SCOPED]
  2. Net 10.0.0.0/24 Ifp en0 Ifa 10.0.0.10
  3. Net 10.0.0.1/32 Ifp en0 Ifa 10.0.0.10
  4. Net 192.168.2.0/24 Ifp en1 Ifa 192.168.2.50 [last]
  5. Net 192.168.2.1/32 Ifp en1 Ifa 192.168.2.50 [last]
+ 6. Net 224.0.0.0/4 Ifp en0 Ifa 10.0.0.10
+ 7. Net 224.0.0.0/4 Ifp en1 Ifa 192.168.2.50 [last] [SCOPED]
+ 8. Net 255.255.255.255/32 Ifp en0 Ifa 10.0.0.10
+ 9. Net 255.255.255.255/32 Ifp en1 Ifa 192.168.2.50 [last] [SCOPED]
 }
 Add new[3]: Net 10.0.0.1/32 Ifp en0 Ifa 10.0.0.10
 Add new[0]: Net 0.0.0.0/0 Gate 10.0.0.1 Ifp en0 Ifa 10.0.0.10
@@ -18264,7 +25568,11 @@ Add new[5]: Net 192.168.2.1/32 Ifp en1 Ifa 192.168.2.50 [last]
 Add new[1]: Net 0.0.0.0/0 Gate 192.168.2.1 Ifp en1 Ifa 192.168.2.50 [never] [SCOPED]
 Add new[2]: Net 10.0.0.0/24 Ifp en0 Ifa 10.0.0.10
 Add new[4]: Net 192.168.2.0/24 Ifp en1 Ifa 192.168.2.50 [last]
-New Routes ('test16') = <IPv4RouteList[50]> = {
+Add new[6]: Net 224.0.0.0/4 Ifp en0 Ifa 10.0.0.10
+Add new[7]: Net 224.0.0.0/4 Ifp en1 Ifa 192.168.2.50 [last] [SCOPED]
+Add new[8]: Net 255.255.255.255/32 Ifp en0 Ifa 10.0.0.10
+Add new[9]: Net 255.255.255.255/32 Ifp en1 Ifa 192.168.2.50 [last] [SCOPED]
+New Routes ('test16') = <IPv4RouteList[54]> = {
  0. Net 0.0.0.0/0 Gate 10.0.0.1 Ifp en0 Ifa 10.0.0.10
  1. Net 0.0.0.0/0 Ifp utun0 Ifa 17.153.46.24 [SCOPED]
  2. Net 10.0.0.0/24 Ifp en0 Ifa 10.0.0.10
@@ -18315,10 +25623,16 @@ New Routes ('test16') = <IPv4RouteList[50]> = {
 47. Net 192.35.50.0/24 Gate 17.153.46.24 Ifp utun0 Ifa 17.153.46.24
 48. Net 204.179.20.0/24 Gate 17.153.46.24 Ifp utun0 Ifa 17.153.46.24
 49. Net 206.112.116.0/24 Gate 17.153.46.24 Ifp utun0 Ifa 17.153.46.24
+50. Net 224.0.0.0/4 Ifp en0 Ifa 10.0.0.10
+51. Net 224.0.0.0/4 Ifp utun0 Ifa 17.153.46.24 [SCOPED]
+52. Net 255.255.255.255/32 Ifp en0 Ifa 10.0.0.10
+53. Net 255.255.255.255/32 Ifp utun0 Ifa 17.153.46.24 [SCOPED]
 }
 Remove old[1]: Net 0.0.0.0/0 Gate 192.168.2.1 Ifp en1 Ifa 192.168.2.50 [never] [SCOPED]
 Remove old[4]: Net 192.168.2.0/24 Ifp en1 Ifa 192.168.2.50 [last]
 Remove old[5]: Net 192.168.2.1/32 Ifp en1 Ifa 192.168.2.50 [last]
+Remove old[7]: Net 224.0.0.0/4 Ifp en1 Ifa 192.168.2.50 [last] [SCOPED]
+Remove old[9]: Net 255.255.255.255/32 Ifp en1 Ifa 192.168.2.50 [last] [SCOPED]
 Add new[1]: Net 0.0.0.0/0 Ifp utun0 Ifa 17.153.46.24 [SCOPED]
 Add new[4]: Net 10.1.3.0/24 Gate 17.153.46.24 Ifp utun0 Ifa 17.153.46.24
 Add new[5]: Net 10.1.4.0/24 Gate 17.153.46.24 Ifp utun0 Ifa 17.153.46.24
@@ -18366,10 +25680,12 @@ Add new[46]: Net 172.16.2.0/24 Gate 17.153.46.24 Ifp utun0 Ifa 17.153.46.24
 Add new[47]: Net 192.35.50.0/24 Gate 17.153.46.24 Ifp utun0 Ifa 17.153.46.24
 Add new[48]: Net 204.179.20.0/24 Gate 17.153.46.24 Ifp utun0 Ifa 17.153.46.24
 Add new[49]: Net 206.112.116.0/24 Gate 17.153.46.24 Ifp utun0 Ifa 17.153.46.24
+Add new[51]: Net 224.0.0.0/4 Ifp utun0 Ifa 17.153.46.24 [SCOPED]
+Add new[53]: Net 255.255.255.255/32 Ifp utun0 Ifa 17.153.46.24 [SCOPED]
 =================> Apply 'test17', 'test16' End <=================
 
 =================> Apply 'test16', 'test18' Begin <=================
-Old routes ('test16') = <IPv4RouteList[50]> = {
+Old routes ('test16') = <IPv4RouteList[54]> = {
  0. Net 0.0.0.0/0 Gate 10.0.0.1 Ifp en0 Ifa 10.0.0.10
  1. Net 0.0.0.0/0 Ifp utun0 Ifa 17.153.46.24 [SCOPED]
  2. Net 10.0.0.0/24 Ifp en0 Ifa 10.0.0.10
@@ -18420,6 +25736,10 @@ Old routes ('test16') = <IPv4RouteList[50]> = {
 47. Net 192.35.50.0/24 Gate 17.153.46.24 Ifp utun0 Ifa 17.153.46.24
 48. Net 204.179.20.0/24 Gate 17.153.46.24 Ifp utun0 Ifa 17.153.46.24
 49. Net 206.112.116.0/24 Gate 17.153.46.24 Ifp utun0 Ifa 17.153.46.24
+50. Net 224.0.0.0/4 Ifp en0 Ifa 10.0.0.10
+51. Net 224.0.0.0/4 Ifp utun0 Ifa 17.153.46.24 [SCOPED]
+52. Net 255.255.255.255/32 Ifp en0 Ifa 10.0.0.10
+53. Net 255.255.255.255/32 Ifp utun0 Ifa 17.153.46.24 [SCOPED]
 }
 Add new[3]: Net 10.0.0.1/32 Ifp en0 Ifa 10.0.0.10
 Add new[0]: Net 0.0.0.0/0 Gate 10.0.0.1 Ifp en0 Ifa 10.0.0.10
@@ -18471,7 +25791,11 @@ Add new[46]: Net 172.16.2.0/24 Gate 17.153.46.24 Ifp utun0 Ifa 17.153.46.24
 Add new[47]: Net 192.35.50.0/24 Gate 17.153.46.24 Ifp utun0 Ifa 17.153.46.24
 Add new[48]: Net 204.179.20.0/24 Gate 17.153.46.24 Ifp utun0 Ifa 17.153.46.24
 Add new[49]: Net 206.112.116.0/24 Gate 17.153.46.24 Ifp utun0 Ifa 17.153.46.24
-New Routes ('test18') = <IPv4RouteList[14]> = {
+Add new[50]: Net 224.0.0.0/4 Ifp en0 Ifa 10.0.0.10
+Add new[51]: Net 224.0.0.0/4 Ifp utun0 Ifa 17.153.46.24 [SCOPED]
+Add new[52]: Net 255.255.255.255/32 Ifp en0 Ifa 10.0.0.10
+Add new[53]: Net 255.255.255.255/32 Ifp utun0 Ifa 17.153.46.24 [SCOPED]
+New Routes ('test18') = <IPv4RouteList[16]> = {
  0. Net 0.0.0.0/0 Gate 192.168.130.1 Ifp en0 Ifa 192.168.130.16
  1. Host 1.1.1.1 Gate 1.1.1.2 Ifp en0 Ifa 192.168.130.16
  2. Host 1.1.1.2 Gate 1.1.1.3 Ifp en0 Ifa 192.168.130.16
@@ -18486,6 +25810,8 @@ New Routes ('test18') = <IPv4RouteList[14]> = {
 11. Host 1.1.1.11 Gate 1.1.1.1 Ifp en0 Ifa 192.168.130.16
 12. Net 192.168.130.0/24 Ifp en0 Ifa 192.168.130.16
 13. Net 192.168.130.1/32 Ifp en0 Ifa 192.168.130.16
+14. Net 224.0.0.0/4 Ifp en0 Ifa 192.168.130.16
+15. Net 255.255.255.255/32 Ifp en0 Ifa 192.168.130.16
 }
 Remove old[0]: Net 0.0.0.0/0 Gate 10.0.0.1 Ifp en0 Ifa 10.0.0.10
 Remove old[1]: Net 0.0.0.0/0 Ifp utun0 Ifa 17.153.46.24 [SCOPED]
@@ -18537,24 +25863,30 @@ Remove old[46]: Net 172.16.2.0/24 Gate 17.153.46.24 Ifp utun0 Ifa 17.153.46.24
 Remove old[47]: Net 192.35.50.0/24 Gate 17.153.46.24 Ifp utun0 Ifa 17.153.46.24
 Remove old[48]: Net 204.179.20.0/24 Gate 17.153.46.24 Ifp utun0 Ifa 17.153.46.24
 Remove old[49]: Net 206.112.116.0/24 Gate 17.153.46.24 Ifp utun0 Ifa 17.153.46.24
+Remove old[50]: Net 224.0.0.0/4 Ifp en0 Ifa 10.0.0.10
+Remove old[51]: Net 224.0.0.0/4 Ifp utun0 Ifa 17.153.46.24 [SCOPED]
+Remove old[52]: Net 255.255.255.255/32 Ifp en0 Ifa 10.0.0.10
+Remove old[53]: Net 255.255.255.255/32 Ifp utun0 Ifa 17.153.46.24 [SCOPED]
 Add new[13]: Net 192.168.130.1/32 Ifp en0 Ifa 192.168.130.16
 Add new[0]: Net 0.0.0.0/0 Gate 192.168.130.1 Ifp en0 Ifa 192.168.130.16
-IPMonitor RouteProcess: routing loop detected, not adding: Host 1.1.1.11 Gate 1.1.1.1 Ifp en0 Ifa 192.168.130.16
-IPMonitor RouteProcess: failed to add: Host 1.1.1.10 Gate 1.1.1.11 Ifp en0 Ifa 192.168.130.16
-IPMonitor RouteProcess: failed to add: Host 1.1.1.9 Gate 1.1.1.10 Ifp en0 Ifa 192.168.130.16
-IPMonitor RouteProcess: failed to add: Host 1.1.1.8 Gate 1.1.1.9 Ifp en0 Ifa 192.168.130.16
-IPMonitor RouteProcess: failed to add: Host 1.1.1.7 Gate 1.1.1.8 Ifp en0 Ifa 192.168.130.16
-IPMonitor RouteProcess: failed to add: Host 1.1.1.6 Gate 1.1.1.7 Ifp en0 Ifa 192.168.130.16
-IPMonitor RouteProcess: failed to add: Host 1.1.1.5 Gate 1.1.1.6 Ifp en0 Ifa 192.168.130.16
-IPMonitor RouteProcess: failed to add: Host 1.1.1.4 Gate 1.1.1.5 Ifp en0 Ifa 192.168.130.16
-IPMonitor RouteProcess: failed to add: Host 1.1.1.3 Gate 1.1.1.4 Ifp en0 Ifa 192.168.130.16
-IPMonitor RouteProcess: failed to add: Host 1.1.1.2 Gate 1.1.1.3 Ifp en0 Ifa 192.168.130.16
-IPMonitor RouteProcess: failed to add: Host 1.1.1.1 Gate 1.1.1.2 Ifp en0 Ifa 192.168.130.16
+routing loop detected, not adding: Host 1.1.1.11 Gate 1.1.1.1 Ifp en0 Ifa 192.168.130.16
+failed to add: Host 1.1.1.10 Gate 1.1.1.11 Ifp en0 Ifa 192.168.130.16
+failed to add: Host 1.1.1.9 Gate 1.1.1.10 Ifp en0 Ifa 192.168.130.16
+failed to add: Host 1.1.1.8 Gate 1.1.1.9 Ifp en0 Ifa 192.168.130.16
+failed to add: Host 1.1.1.7 Gate 1.1.1.8 Ifp en0 Ifa 192.168.130.16
+failed to add: Host 1.1.1.6 Gate 1.1.1.7 Ifp en0 Ifa 192.168.130.16
+failed to add: Host 1.1.1.5 Gate 1.1.1.6 Ifp en0 Ifa 192.168.130.16
+failed to add: Host 1.1.1.4 Gate 1.1.1.5 Ifp en0 Ifa 192.168.130.16
+failed to add: Host 1.1.1.3 Gate 1.1.1.4 Ifp en0 Ifa 192.168.130.16
+failed to add: Host 1.1.1.2 Gate 1.1.1.3 Ifp en0 Ifa 192.168.130.16
+failed to add: Host 1.1.1.1 Gate 1.1.1.2 Ifp en0 Ifa 192.168.130.16
 Add new[12]: Net 192.168.130.0/24 Ifp en0 Ifa 192.168.130.16
+Add new[14]: Net 224.0.0.0/4 Ifp en0 Ifa 192.168.130.16
+Add new[15]: Net 255.255.255.255/32 Ifp en0 Ifa 192.168.130.16
 =================> Apply 'test16', 'test18' End <=================
 
 =================> Apply 'test18', 'test16' Begin <=================
-Old routes ('test18') = <IPv4RouteList[14]> = {
+Old routes ('test18') = <IPv4RouteList[16]> = {
  0. Net 0.0.0.0/0 Gate 192.168.130.1 Ifp en0 Ifa 192.168.130.16
  1. Host 1.1.1.1 Gate 1.1.1.2 Ifp en0 Ifa 192.168.130.16
  2. Host 1.1.1.2 Gate 1.1.1.3 Ifp en0 Ifa 192.168.130.16
@@ -18569,22 +25901,26 @@ Old routes ('test18') = <IPv4RouteList[14]> = {
 11. Host 1.1.1.11 Gate 1.1.1.1 Ifp en0 Ifa 192.168.130.16
 12. Net 192.168.130.0/24 Ifp en0 Ifa 192.168.130.16
 13. Net 192.168.130.1/32 Ifp en0 Ifa 192.168.130.16
+14. Net 224.0.0.0/4 Ifp en0 Ifa 192.168.130.16
+15. Net 255.255.255.255/32 Ifp en0 Ifa 192.168.130.16
 }
 Add new[13]: Net 192.168.130.1/32 Ifp en0 Ifa 192.168.130.16
 Add new[0]: Net 0.0.0.0/0 Gate 192.168.130.1 Ifp en0 Ifa 192.168.130.16
-IPMonitor RouteProcess: routing loop detected, not adding: Host 1.1.1.11 Gate 1.1.1.1 Ifp en0 Ifa 192.168.130.16
-IPMonitor RouteProcess: failed to add: Host 1.1.1.10 Gate 1.1.1.11 Ifp en0 Ifa 192.168.130.16
-IPMonitor RouteProcess: failed to add: Host 1.1.1.9 Gate 1.1.1.10 Ifp en0 Ifa 192.168.130.16
-IPMonitor RouteProcess: failed to add: Host 1.1.1.8 Gate 1.1.1.9 Ifp en0 Ifa 192.168.130.16
-IPMonitor RouteProcess: failed to add: Host 1.1.1.7 Gate 1.1.1.8 Ifp en0 Ifa 192.168.130.16
-IPMonitor RouteProcess: failed to add: Host 1.1.1.6 Gate 1.1.1.7 Ifp en0 Ifa 192.168.130.16
-IPMonitor RouteProcess: failed to add: Host 1.1.1.5 Gate 1.1.1.6 Ifp en0 Ifa 192.168.130.16
-IPMonitor RouteProcess: failed to add: Host 1.1.1.4 Gate 1.1.1.5 Ifp en0 Ifa 192.168.130.16
-IPMonitor RouteProcess: failed to add: Host 1.1.1.3 Gate 1.1.1.4 Ifp en0 Ifa 192.168.130.16
-IPMonitor RouteProcess: failed to add: Host 1.1.1.2 Gate 1.1.1.3 Ifp en0 Ifa 192.168.130.16
-IPMonitor RouteProcess: failed to add: Host 1.1.1.1 Gate 1.1.1.2 Ifp en0 Ifa 192.168.130.16
+routing loop detected, not adding: Host 1.1.1.11 Gate 1.1.1.1 Ifp en0 Ifa 192.168.130.16
+failed to add: Host 1.1.1.10 Gate 1.1.1.11 Ifp en0 Ifa 192.168.130.16
+failed to add: Host 1.1.1.9 Gate 1.1.1.10 Ifp en0 Ifa 192.168.130.16
+failed to add: Host 1.1.1.8 Gate 1.1.1.9 Ifp en0 Ifa 192.168.130.16
+failed to add: Host 1.1.1.7 Gate 1.1.1.8 Ifp en0 Ifa 192.168.130.16
+failed to add: Host 1.1.1.6 Gate 1.1.1.7 Ifp en0 Ifa 192.168.130.16
+failed to add: Host 1.1.1.5 Gate 1.1.1.6 Ifp en0 Ifa 192.168.130.16
+failed to add: Host 1.1.1.4 Gate 1.1.1.5 Ifp en0 Ifa 192.168.130.16
+failed to add: Host 1.1.1.3 Gate 1.1.1.4 Ifp en0 Ifa 192.168.130.16
+failed to add: Host 1.1.1.2 Gate 1.1.1.3 Ifp en0 Ifa 192.168.130.16
+failed to add: Host 1.1.1.1 Gate 1.1.1.2 Ifp en0 Ifa 192.168.130.16
 Add new[12]: Net 192.168.130.0/24 Ifp en0 Ifa 192.168.130.16
-New Routes ('test16') = <IPv4RouteList[50]> = {
+Add new[14]: Net 224.0.0.0/4 Ifp en0 Ifa 192.168.130.16
+Add new[15]: Net 255.255.255.255/32 Ifp en0 Ifa 192.168.130.16
+New Routes ('test16') = <IPv4RouteList[54]> = {
  0. Net 0.0.0.0/0 Gate 10.0.0.1 Ifp en0 Ifa 10.0.0.10
  1. Net 0.0.0.0/0 Ifp utun0 Ifa 17.153.46.24 [SCOPED]
  2. Net 10.0.0.0/24 Ifp en0 Ifa 10.0.0.10
@@ -18635,10 +25971,16 @@ New Routes ('test16') = <IPv4RouteList[50]> = {
 47. Net 192.35.50.0/24 Gate 17.153.46.24 Ifp utun0 Ifa 17.153.46.24
 48. Net 204.179.20.0/24 Gate 17.153.46.24 Ifp utun0 Ifa 17.153.46.24
 49. Net 206.112.116.0/24 Gate 17.153.46.24 Ifp utun0 Ifa 17.153.46.24
+50. Net 224.0.0.0/4 Ifp en0 Ifa 10.0.0.10
+51. Net 224.0.0.0/4 Ifp utun0 Ifa 17.153.46.24 [SCOPED]
+52. Net 255.255.255.255/32 Ifp en0 Ifa 10.0.0.10
+53. Net 255.255.255.255/32 Ifp utun0 Ifa 17.153.46.24 [SCOPED]
 }
 Remove old[0]: Net 0.0.0.0/0 Gate 192.168.130.1 Ifp en0 Ifa 192.168.130.16
 Remove old[12]: Net 192.168.130.0/24 Ifp en0 Ifa 192.168.130.16
 Remove old[13]: Net 192.168.130.1/32 Ifp en0 Ifa 192.168.130.16
+Remove old[14]: Net 224.0.0.0/4 Ifp en0 Ifa 192.168.130.16
+Remove old[15]: Net 255.255.255.255/32 Ifp en0 Ifa 192.168.130.16
 Add new[3]: Net 10.0.0.1/32 Ifp en0 Ifa 10.0.0.10
 Add new[0]: Net 0.0.0.0/0 Gate 10.0.0.1 Ifp en0 Ifa 10.0.0.10
 Add new[1]: Net 0.0.0.0/0 Ifp utun0 Ifa 17.153.46.24 [SCOPED]
@@ -18689,16 +26031,24 @@ Add new[46]: Net 172.16.2.0/24 Gate 17.153.46.24 Ifp utun0 Ifa 17.153.46.24
 Add new[47]: Net 192.35.50.0/24 Gate 17.153.46.24 Ifp utun0 Ifa 17.153.46.24
 Add new[48]: Net 204.179.20.0/24 Gate 17.153.46.24 Ifp utun0 Ifa 17.153.46.24
 Add new[49]: Net 206.112.116.0/24 Gate 17.153.46.24 Ifp utun0 Ifa 17.153.46.24
+Add new[50]: Net 224.0.0.0/4 Ifp en0 Ifa 10.0.0.10
+Add new[51]: Net 224.0.0.0/4 Ifp utun0 Ifa 17.153.46.24 [SCOPED]
+Add new[52]: Net 255.255.255.255/32 Ifp en0 Ifa 10.0.0.10
+Add new[53]: Net 255.255.255.255/32 Ifp utun0 Ifa 17.153.46.24 [SCOPED]
 =================> Apply 'test18', 'test16' End <=================
 
 =================> Apply 'test17', 'test18' Begin <=================
-Old routes ('test17') = <IPv4RouteList[6]> = {
+Old routes ('test17') = <IPv4RouteList[10]> = {
  0. Net 0.0.0.0/0 Gate 10.0.0.1 Ifp en0 Ifa 10.0.0.10
  1. Net 0.0.0.0/0 Gate 192.168.2.1 Ifp en1 Ifa 192.168.2.50 [never] [SCOPED]
  2. Net 10.0.0.0/24 Ifp en0 Ifa 10.0.0.10
  3. Net 10.0.0.1/32 Ifp en0 Ifa 10.0.0.10
  4. Net 192.168.2.0/24 Ifp en1 Ifa 192.168.2.50 [last]
  5. Net 192.168.2.1/32 Ifp en1 Ifa 192.168.2.50 [last]
+ 6. Net 224.0.0.0/4 Ifp en0 Ifa 10.0.0.10
+ 7. Net 224.0.0.0/4 Ifp en1 Ifa 192.168.2.50 [last] [SCOPED]
+ 8. Net 255.255.255.255/32 Ifp en0 Ifa 10.0.0.10
+ 9. Net 255.255.255.255/32 Ifp en1 Ifa 192.168.2.50 [last] [SCOPED]
 }
 Add new[3]: Net 10.0.0.1/32 Ifp en0 Ifa 10.0.0.10
 Add new[0]: Net 0.0.0.0/0 Gate 10.0.0.1 Ifp en0 Ifa 10.0.0.10
@@ -18706,7 +26056,11 @@ Add new[5]: Net 192.168.2.1/32 Ifp en1 Ifa 192.168.2.50 [last]
 Add new[1]: Net 0.0.0.0/0 Gate 192.168.2.1 Ifp en1 Ifa 192.168.2.50 [never] [SCOPED]
 Add new[2]: Net 10.0.0.0/24 Ifp en0 Ifa 10.0.0.10
 Add new[4]: Net 192.168.2.0/24 Ifp en1 Ifa 192.168.2.50 [last]
-New Routes ('test18') = <IPv4RouteList[14]> = {
+Add new[6]: Net 224.0.0.0/4 Ifp en0 Ifa 10.0.0.10
+Add new[7]: Net 224.0.0.0/4 Ifp en1 Ifa 192.168.2.50 [last] [SCOPED]
+Add new[8]: Net 255.255.255.255/32 Ifp en0 Ifa 10.0.0.10
+Add new[9]: Net 255.255.255.255/32 Ifp en1 Ifa 192.168.2.50 [last] [SCOPED]
+New Routes ('test18') = <IPv4RouteList[16]> = {
  0. Net 0.0.0.0/0 Gate 192.168.130.1 Ifp en0 Ifa 192.168.130.16
  1. Host 1.1.1.1 Gate 1.1.1.2 Ifp en0 Ifa 192.168.130.16
  2. Host 1.1.1.2 Gate 1.1.1.3 Ifp en0 Ifa 192.168.130.16
@@ -18721,6 +26075,8 @@ New Routes ('test18') = <IPv4RouteList[14]> = {
 11. Host 1.1.1.11 Gate 1.1.1.1 Ifp en0 Ifa 192.168.130.16
 12. Net 192.168.130.0/24 Ifp en0 Ifa 192.168.130.16
 13. Net 192.168.130.1/32 Ifp en0 Ifa 192.168.130.16
+14. Net 224.0.0.0/4 Ifp en0 Ifa 192.168.130.16
+15. Net 255.255.255.255/32 Ifp en0 Ifa 192.168.130.16
 }
 Remove old[0]: Net 0.0.0.0/0 Gate 10.0.0.1 Ifp en0 Ifa 10.0.0.10
 Remove old[1]: Net 0.0.0.0/0 Gate 192.168.2.1 Ifp en1 Ifa 192.168.2.50 [never] [SCOPED]
@@ -18728,24 +26084,30 @@ Remove old[2]: Net 10.0.0.0/24 Ifp en0 Ifa 10.0.0.10
 Remove old[3]: Net 10.0.0.1/32 Ifp en0 Ifa 10.0.0.10
 Remove old[4]: Net 192.168.2.0/24 Ifp en1 Ifa 192.168.2.50 [last]
 Remove old[5]: Net 192.168.2.1/32 Ifp en1 Ifa 192.168.2.50 [last]
+Remove old[6]: Net 224.0.0.0/4 Ifp en0 Ifa 10.0.0.10
+Remove old[7]: Net 224.0.0.0/4 Ifp en1 Ifa 192.168.2.50 [last] [SCOPED]
+Remove old[8]: Net 255.255.255.255/32 Ifp en0 Ifa 10.0.0.10
+Remove old[9]: Net 255.255.255.255/32 Ifp en1 Ifa 192.168.2.50 [last] [SCOPED]
 Add new[13]: Net 192.168.130.1/32 Ifp en0 Ifa 192.168.130.16
 Add new[0]: Net 0.0.0.0/0 Gate 192.168.130.1 Ifp en0 Ifa 192.168.130.16
-IPMonitor RouteProcess: routing loop detected, not adding: Host 1.1.1.11 Gate 1.1.1.1 Ifp en0 Ifa 192.168.130.16
-IPMonitor RouteProcess: failed to add: Host 1.1.1.10 Gate 1.1.1.11 Ifp en0 Ifa 192.168.130.16
-IPMonitor RouteProcess: failed to add: Host 1.1.1.9 Gate 1.1.1.10 Ifp en0 Ifa 192.168.130.16
-IPMonitor RouteProcess: failed to add: Host 1.1.1.8 Gate 1.1.1.9 Ifp en0 Ifa 192.168.130.16
-IPMonitor RouteProcess: failed to add: Host 1.1.1.7 Gate 1.1.1.8 Ifp en0 Ifa 192.168.130.16
-IPMonitor RouteProcess: failed to add: Host 1.1.1.6 Gate 1.1.1.7 Ifp en0 Ifa 192.168.130.16
-IPMonitor RouteProcess: failed to add: Host 1.1.1.5 Gate 1.1.1.6 Ifp en0 Ifa 192.168.130.16
-IPMonitor RouteProcess: failed to add: Host 1.1.1.4 Gate 1.1.1.5 Ifp en0 Ifa 192.168.130.16
-IPMonitor RouteProcess: failed to add: Host 1.1.1.3 Gate 1.1.1.4 Ifp en0 Ifa 192.168.130.16
-IPMonitor RouteProcess: failed to add: Host 1.1.1.2 Gate 1.1.1.3 Ifp en0 Ifa 192.168.130.16
-IPMonitor RouteProcess: failed to add: Host 1.1.1.1 Gate 1.1.1.2 Ifp en0 Ifa 192.168.130.16
+routing loop detected, not adding: Host 1.1.1.11 Gate 1.1.1.1 Ifp en0 Ifa 192.168.130.16
+failed to add: Host 1.1.1.10 Gate 1.1.1.11 Ifp en0 Ifa 192.168.130.16
+failed to add: Host 1.1.1.9 Gate 1.1.1.10 Ifp en0 Ifa 192.168.130.16
+failed to add: Host 1.1.1.8 Gate 1.1.1.9 Ifp en0 Ifa 192.168.130.16
+failed to add: Host 1.1.1.7 Gate 1.1.1.8 Ifp en0 Ifa 192.168.130.16
+failed to add: Host 1.1.1.6 Gate 1.1.1.7 Ifp en0 Ifa 192.168.130.16
+failed to add: Host 1.1.1.5 Gate 1.1.1.6 Ifp en0 Ifa 192.168.130.16
+failed to add: Host 1.1.1.4 Gate 1.1.1.5 Ifp en0 Ifa 192.168.130.16
+failed to add: Host 1.1.1.3 Gate 1.1.1.4 Ifp en0 Ifa 192.168.130.16
+failed to add: Host 1.1.1.2 Gate 1.1.1.3 Ifp en0 Ifa 192.168.130.16
+failed to add: Host 1.1.1.1 Gate 1.1.1.2 Ifp en0 Ifa 192.168.130.16
 Add new[12]: Net 192.168.130.0/24 Ifp en0 Ifa 192.168.130.16
+Add new[14]: Net 224.0.0.0/4 Ifp en0 Ifa 192.168.130.16
+Add new[15]: Net 255.255.255.255/32 Ifp en0 Ifa 192.168.130.16
 =================> Apply 'test17', 'test18' End <=================
 
 =================> Apply 'test18', 'test17' Begin <=================
-Old routes ('test18') = <IPv4RouteList[14]> = {
+Old routes ('test18') = <IPv4RouteList[16]> = {
  0. Net 0.0.0.0/0 Gate 192.168.130.1 Ifp en0 Ifa 192.168.130.16
  1. Host 1.1.1.1 Gate 1.1.1.2 Ifp en0 Ifa 192.168.130.16
  2. Host 1.1.1.2 Gate 1.1.1.3 Ifp en0 Ifa 192.168.130.16
@@ -18760,44 +26122,57 @@ Old routes ('test18') = <IPv4RouteList[14]> = {
 11. Host 1.1.1.11 Gate 1.1.1.1 Ifp en0 Ifa 192.168.130.16
 12. Net 192.168.130.0/24 Ifp en0 Ifa 192.168.130.16
 13. Net 192.168.130.1/32 Ifp en0 Ifa 192.168.130.16
+14. Net 224.0.0.0/4 Ifp en0 Ifa 192.168.130.16
+15. Net 255.255.255.255/32 Ifp en0 Ifa 192.168.130.16
 }
 Add new[13]: Net 192.168.130.1/32 Ifp en0 Ifa 192.168.130.16
 Add new[0]: Net 0.0.0.0/0 Gate 192.168.130.1 Ifp en0 Ifa 192.168.130.16
-IPMonitor RouteProcess: routing loop detected, not adding: Host 1.1.1.11 Gate 1.1.1.1 Ifp en0 Ifa 192.168.130.16
-IPMonitor RouteProcess: failed to add: Host 1.1.1.10 Gate 1.1.1.11 Ifp en0 Ifa 192.168.130.16
-IPMonitor RouteProcess: failed to add: Host 1.1.1.9 Gate 1.1.1.10 Ifp en0 Ifa 192.168.130.16
-IPMonitor RouteProcess: failed to add: Host 1.1.1.8 Gate 1.1.1.9 Ifp en0 Ifa 192.168.130.16
-IPMonitor RouteProcess: failed to add: Host 1.1.1.7 Gate 1.1.1.8 Ifp en0 Ifa 192.168.130.16
-IPMonitor RouteProcess: failed to add: Host 1.1.1.6 Gate 1.1.1.7 Ifp en0 Ifa 192.168.130.16
-IPMonitor RouteProcess: failed to add: Host 1.1.1.5 Gate 1.1.1.6 Ifp en0 Ifa 192.168.130.16
-IPMonitor RouteProcess: failed to add: Host 1.1.1.4 Gate 1.1.1.5 Ifp en0 Ifa 192.168.130.16
-IPMonitor RouteProcess: failed to add: Host 1.1.1.3 Gate 1.1.1.4 Ifp en0 Ifa 192.168.130.16
-IPMonitor RouteProcess: failed to add: Host 1.1.1.2 Gate 1.1.1.3 Ifp en0 Ifa 192.168.130.16
-IPMonitor RouteProcess: failed to add: Host 1.1.1.1 Gate 1.1.1.2 Ifp en0 Ifa 192.168.130.16
+routing loop detected, not adding: Host 1.1.1.11 Gate 1.1.1.1 Ifp en0 Ifa 192.168.130.16
+failed to add: Host 1.1.1.10 Gate 1.1.1.11 Ifp en0 Ifa 192.168.130.16
+failed to add: Host 1.1.1.9 Gate 1.1.1.10 Ifp en0 Ifa 192.168.130.16
+failed to add: Host 1.1.1.8 Gate 1.1.1.9 Ifp en0 Ifa 192.168.130.16
+failed to add: Host 1.1.1.7 Gate 1.1.1.8 Ifp en0 Ifa 192.168.130.16
+failed to add: Host 1.1.1.6 Gate 1.1.1.7 Ifp en0 Ifa 192.168.130.16
+failed to add: Host 1.1.1.5 Gate 1.1.1.6 Ifp en0 Ifa 192.168.130.16
+failed to add: Host 1.1.1.4 Gate 1.1.1.5 Ifp en0 Ifa 192.168.130.16
+failed to add: Host 1.1.1.3 Gate 1.1.1.4 Ifp en0 Ifa 192.168.130.16
+failed to add: Host 1.1.1.2 Gate 1.1.1.3 Ifp en0 Ifa 192.168.130.16
+failed to add: Host 1.1.1.1 Gate 1.1.1.2 Ifp en0 Ifa 192.168.130.16
 Add new[12]: Net 192.168.130.0/24 Ifp en0 Ifa 192.168.130.16
-New Routes ('test17') = <IPv4RouteList[6]> = {
+Add new[14]: Net 224.0.0.0/4 Ifp en0 Ifa 192.168.130.16
+Add new[15]: Net 255.255.255.255/32 Ifp en0 Ifa 192.168.130.16
+New Routes ('test17') = <IPv4RouteList[10]> = {
  0. Net 0.0.0.0/0 Gate 10.0.0.1 Ifp en0 Ifa 10.0.0.10
  1. Net 0.0.0.0/0 Gate 192.168.2.1 Ifp en1 Ifa 192.168.2.50 [never] [SCOPED]
  2. Net 10.0.0.0/24 Ifp en0 Ifa 10.0.0.10
  3. Net 10.0.0.1/32 Ifp en0 Ifa 10.0.0.10
  4. Net 192.168.2.0/24 Ifp en1 Ifa 192.168.2.50 [last]
  5. Net 192.168.2.1/32 Ifp en1 Ifa 192.168.2.50 [last]
+ 6. Net 224.0.0.0/4 Ifp en0 Ifa 10.0.0.10
+ 7. Net 224.0.0.0/4 Ifp en1 Ifa 192.168.2.50 [last] [SCOPED]
+ 8. Net 255.255.255.255/32 Ifp en0 Ifa 10.0.0.10
+ 9. Net 255.255.255.255/32 Ifp en1 Ifa 192.168.2.50 [last] [SCOPED]
 }
 Remove old[0]: Net 0.0.0.0/0 Gate 192.168.130.1 Ifp en0 Ifa 192.168.130.16
 Remove old[12]: Net 192.168.130.0/24 Ifp en0 Ifa 192.168.130.16
 Remove old[13]: Net 192.168.130.1/32 Ifp en0 Ifa 192.168.130.16
+Remove old[14]: Net 224.0.0.0/4 Ifp en0 Ifa 192.168.130.16
+Remove old[15]: Net 255.255.255.255/32 Ifp en0 Ifa 192.168.130.16
 Add new[3]: Net 10.0.0.1/32 Ifp en0 Ifa 10.0.0.10
 Add new[0]: Net 0.0.0.0/0 Gate 10.0.0.1 Ifp en0 Ifa 10.0.0.10
 Add new[5]: Net 192.168.2.1/32 Ifp en1 Ifa 192.168.2.50 [last]
 Add new[1]: Net 0.0.0.0/0 Gate 192.168.2.1 Ifp en1 Ifa 192.168.2.50 [never] [SCOPED]
 Add new[2]: Net 10.0.0.0/24 Ifp en0 Ifa 10.0.0.10
 Add new[4]: Net 192.168.2.0/24 Ifp en1 Ifa 192.168.2.50 [last]
+Add new[6]: Net 224.0.0.0/4 Ifp en0 Ifa 10.0.0.10
+Add new[7]: Net 224.0.0.0/4 Ifp en1 Ifa 192.168.2.50 [last] [SCOPED]
+Add new[8]: Net 255.255.255.255/32 Ifp en0 Ifa 10.0.0.10
+Add new[9]: Net 255.255.255.255/32 Ifp en1 Ifa 192.168.2.50 [last] [SCOPED]
 =================> Apply 'test18', 'test17' End <=================
 
 Checking for leaks
 Process:         test_ipv4_routelist [XXXX]
 Path: XXXX
-Load Address:    0xXXXX
 Identifier:      test_ipv4_routelist
 Code Type:       X86-64
 Parent Process:  sh [XXXX]
@@ -18805,6 +26180,9 @@ Parent Process:  sh [XXXX]
 Date/Time:       XXXX
 OS Version: XXXX
 Report Version:  7
+Analysis Tool Version:  Xcode 11.0 (11M275m)
 
-leaks Report Version:  2.0
+
+leaks Report Version: 4.0
 Process XXXX 0 leaks for 0 total leaked bytes.
+
index 5679d1b67a76356403f692ca976b639bcabd8d9e..34fb3308fae35ce39f33f0d6c08ac4af0e6facf0 100644 (file)
@@ -579,17 +579,17 @@ New Routes ('test4') = <IPv6RouteList[17]> = {
 !Remove old[2]: Net ::/0 Gate fe80::21f:f3ff:fe43:1abf Ifp fw0 Ifa 2011:470:1f05:3cb:cabc:c8ff:fe96:ab01 [kern] [SCOPED]
 !Remove old[5]: Net 2011:470:1f05:3cb::/64 Ifp fw0 Ifa 2011:470:1f05:3cb:cabc:c8ff:fe96:ab01 [kern]
 !Remove old[8]: Net fe80::/64 Ifp fw0 [kern] [SCOPED]
-IPMonitor RouteProcess: routing loop detected, not adding: Host 2620:149:4:f01:225:ff:fecc:89ab Gate 2620:149:4:f01:225:ff:fecc:89a1 Ifp en0 Ifa 2001:470:1f05:3cb:cabc:c8ff:fe96:9601
-IPMonitor RouteProcess: failed to add: Host 2620:149:4:f01:225:ff:fecc:89aa Gate 2620:149:4:f01:225:ff:fecc:89ab Ifp en0 Ifa 2001:470:1f05:3cb:cabc:c8ff:fe96:9601
-IPMonitor RouteProcess: failed to add: Host 2620:149:4:f01:225:ff:fecc:89a9 Gate 2620:149:4:f01:225:ff:fecc:89aa Ifp en0 Ifa 2001:470:1f05:3cb:cabc:c8ff:fe96:9601
-IPMonitor RouteProcess: failed to add: Host 2620:149:4:f01:225:ff:fecc:89a8 Gate 2620:149:4:f01:225:ff:fecc:89a9 Ifp en0 Ifa 2001:470:1f05:3cb:cabc:c8ff:fe96:9601
-IPMonitor RouteProcess: failed to add: Host 2620:149:4:f01:225:ff:fecc:89a7 Gate 2620:149:4:f01:225:ff:fecc:89a8 Ifp en0 Ifa 2001:470:1f05:3cb:cabc:c8ff:fe96:9601
-IPMonitor RouteProcess: failed to add: Host 2620:149:4:f01:225:ff:fecc:89a6 Gate 2620:149:4:f01:225:ff:fecc:89a7 Ifp en0 Ifa 2001:470:1f05:3cb:cabc:c8ff:fe96:9601
-IPMonitor RouteProcess: failed to add: Host 2620:149:4:f01:225:ff:fecc:89a5 Gate 2620:149:4:f01:225:ff:fecc:89a6 Ifp en0 Ifa 2001:470:1f05:3cb:cabc:c8ff:fe96:9601
-IPMonitor RouteProcess: failed to add: Host 2620:149:4:f01:225:ff:fecc:89a4 Gate 2620:149:4:f01:225:ff:fecc:89a5 Ifp en0 Ifa 2001:470:1f05:3cb:cabc:c8ff:fe96:9601
-IPMonitor RouteProcess: failed to add: Host 2620:149:4:f01:225:ff:fecc:89a3 Gate 2620:149:4:f01:225:ff:fecc:89a4 Ifp en0 Ifa 2001:470:1f05:3cb:cabc:c8ff:fe96:9601
-IPMonitor RouteProcess: failed to add: Host 2620:149:4:f01:225:ff:fecc:89a2 Gate 2620:149:4:f01:225:ff:fecc:89a3 Ifp en0 Ifa 2001:470:1f05:3cb:cabc:c8ff:fe96:9601
-IPMonitor RouteProcess: failed to add: Host 2620:149:4:f01:225:ff:fecc:89a1 Gate 2620:149:4:f01:225:ff:fecc:89a2 Ifp en0 Ifa 2001:470:1f05:3cb:cabc:c8ff:fe96:9601
+routing loop detected, not adding: Host 2620:149:4:f01:225:ff:fecc:89ab Gate 2620:149:4:f01:225:ff:fecc:89a1 Ifp en0 Ifa 2001:470:1f05:3cb:cabc:c8ff:fe96:9601
+failed to add: Host 2620:149:4:f01:225:ff:fecc:89aa Gate 2620:149:4:f01:225:ff:fecc:89ab Ifp en0 Ifa 2001:470:1f05:3cb:cabc:c8ff:fe96:9601
+failed to add: Host 2620:149:4:f01:225:ff:fecc:89a9 Gate 2620:149:4:f01:225:ff:fecc:89aa Ifp en0 Ifa 2001:470:1f05:3cb:cabc:c8ff:fe96:9601
+failed to add: Host 2620:149:4:f01:225:ff:fecc:89a8 Gate 2620:149:4:f01:225:ff:fecc:89a9 Ifp en0 Ifa 2001:470:1f05:3cb:cabc:c8ff:fe96:9601
+failed to add: Host 2620:149:4:f01:225:ff:fecc:89a7 Gate 2620:149:4:f01:225:ff:fecc:89a8 Ifp en0 Ifa 2001:470:1f05:3cb:cabc:c8ff:fe96:9601
+failed to add: Host 2620:149:4:f01:225:ff:fecc:89a6 Gate 2620:149:4:f01:225:ff:fecc:89a7 Ifp en0 Ifa 2001:470:1f05:3cb:cabc:c8ff:fe96:9601
+failed to add: Host 2620:149:4:f01:225:ff:fecc:89a5 Gate 2620:149:4:f01:225:ff:fecc:89a6 Ifp en0 Ifa 2001:470:1f05:3cb:cabc:c8ff:fe96:9601
+failed to add: Host 2620:149:4:f01:225:ff:fecc:89a4 Gate 2620:149:4:f01:225:ff:fecc:89a5 Ifp en0 Ifa 2001:470:1f05:3cb:cabc:c8ff:fe96:9601
+failed to add: Host 2620:149:4:f01:225:ff:fecc:89a3 Gate 2620:149:4:f01:225:ff:fecc:89a4 Ifp en0 Ifa 2001:470:1f05:3cb:cabc:c8ff:fe96:9601
+failed to add: Host 2620:149:4:f01:225:ff:fecc:89a2 Gate 2620:149:4:f01:225:ff:fecc:89a3 Ifp en0 Ifa 2001:470:1f05:3cb:cabc:c8ff:fe96:9601
+failed to add: Host 2620:149:4:f01:225:ff:fecc:89a1 Gate 2620:149:4:f01:225:ff:fecc:89a2 Ifp en0 Ifa 2001:470:1f05:3cb:cabc:c8ff:fe96:9601
 =================> Apply 'test1', 'test4' End <=================
 
 =================> Apply 'test4', 'test1' Begin <=================
@@ -618,17 +618,17 @@ Old routes ('test4') = <IPv6RouteList[17]> = {
 !Add new[1]: Net ::/0 Gate fe80::21f:f3ff:fe43:1abf Ifp en1 Ifa 2001:470:1f05:3cb:cabc:c8ff:fed9:125a [kern] [SCOPED]
 !Add new[2]: Net 2001:470:1f05:3cb::/64 Ifp en0 Ifa 2001:470:1f05:3cb:cabc:c8ff:fe96:9601 [kern]
 !Add new[3]: Net 2001:470:1f05:3cb::/64 Ifp en1 Ifa 2001:470:1f05:3cb:cabc:c8ff:fed9:125a [kern] [SCOPED]
-IPMonitor RouteProcess: routing loop detected, not adding: Host 2620:149:4:f01:225:ff:fecc:89ab Gate 2620:149:4:f01:225:ff:fecc:89a1 Ifp en0 Ifa 2001:470:1f05:3cb:cabc:c8ff:fe96:9601
-IPMonitor RouteProcess: failed to add: Host 2620:149:4:f01:225:ff:fecc:89aa Gate 2620:149:4:f01:225:ff:fecc:89ab Ifp en0 Ifa 2001:470:1f05:3cb:cabc:c8ff:fe96:9601
-IPMonitor RouteProcess: failed to add: Host 2620:149:4:f01:225:ff:fecc:89a9 Gate 2620:149:4:f01:225:ff:fecc:89aa Ifp en0 Ifa 2001:470:1f05:3cb:cabc:c8ff:fe96:9601
-IPMonitor RouteProcess: failed to add: Host 2620:149:4:f01:225:ff:fecc:89a8 Gate 2620:149:4:f01:225:ff:fecc:89a9 Ifp en0 Ifa 2001:470:1f05:3cb:cabc:c8ff:fe96:9601
-IPMonitor RouteProcess: failed to add: Host 2620:149:4:f01:225:ff:fecc:89a7 Gate 2620:149:4:f01:225:ff:fecc:89a8 Ifp en0 Ifa 2001:470:1f05:3cb:cabc:c8ff:fe96:9601
-IPMonitor RouteProcess: failed to add: Host 2620:149:4:f01:225:ff:fecc:89a6 Gate 2620:149:4:f01:225:ff:fecc:89a7 Ifp en0 Ifa 2001:470:1f05:3cb:cabc:c8ff:fe96:9601
-IPMonitor RouteProcess: failed to add: Host 2620:149:4:f01:225:ff:fecc:89a5 Gate 2620:149:4:f01:225:ff:fecc:89a6 Ifp en0 Ifa 2001:470:1f05:3cb:cabc:c8ff:fe96:9601
-IPMonitor RouteProcess: failed to add: Host 2620:149:4:f01:225:ff:fecc:89a4 Gate 2620:149:4:f01:225:ff:fecc:89a5 Ifp en0 Ifa 2001:470:1f05:3cb:cabc:c8ff:fe96:9601
-IPMonitor RouteProcess: failed to add: Host 2620:149:4:f01:225:ff:fecc:89a3 Gate 2620:149:4:f01:225:ff:fecc:89a4 Ifp en0 Ifa 2001:470:1f05:3cb:cabc:c8ff:fe96:9601
-IPMonitor RouteProcess: failed to add: Host 2620:149:4:f01:225:ff:fecc:89a2 Gate 2620:149:4:f01:225:ff:fecc:89a3 Ifp en0 Ifa 2001:470:1f05:3cb:cabc:c8ff:fe96:9601
-IPMonitor RouteProcess: failed to add: Host 2620:149:4:f01:225:ff:fecc:89a1 Gate 2620:149:4:f01:225:ff:fecc:89a2 Ifp en0 Ifa 2001:470:1f05:3cb:cabc:c8ff:fe96:9601
+routing loop detected, not adding: Host 2620:149:4:f01:225:ff:fecc:89ab Gate 2620:149:4:f01:225:ff:fecc:89a1 Ifp en0 Ifa 2001:470:1f05:3cb:cabc:c8ff:fe96:9601
+failed to add: Host 2620:149:4:f01:225:ff:fecc:89aa Gate 2620:149:4:f01:225:ff:fecc:89ab Ifp en0 Ifa 2001:470:1f05:3cb:cabc:c8ff:fe96:9601
+failed to add: Host 2620:149:4:f01:225:ff:fecc:89a9 Gate 2620:149:4:f01:225:ff:fecc:89aa Ifp en0 Ifa 2001:470:1f05:3cb:cabc:c8ff:fe96:9601
+failed to add: Host 2620:149:4:f01:225:ff:fecc:89a8 Gate 2620:149:4:f01:225:ff:fecc:89a9 Ifp en0 Ifa 2001:470:1f05:3cb:cabc:c8ff:fe96:9601
+failed to add: Host 2620:149:4:f01:225:ff:fecc:89a7 Gate 2620:149:4:f01:225:ff:fecc:89a8 Ifp en0 Ifa 2001:470:1f05:3cb:cabc:c8ff:fe96:9601
+failed to add: Host 2620:149:4:f01:225:ff:fecc:89a6 Gate 2620:149:4:f01:225:ff:fecc:89a7 Ifp en0 Ifa 2001:470:1f05:3cb:cabc:c8ff:fe96:9601
+failed to add: Host 2620:149:4:f01:225:ff:fecc:89a5 Gate 2620:149:4:f01:225:ff:fecc:89a6 Ifp en0 Ifa 2001:470:1f05:3cb:cabc:c8ff:fe96:9601
+failed to add: Host 2620:149:4:f01:225:ff:fecc:89a4 Gate 2620:149:4:f01:225:ff:fecc:89a5 Ifp en0 Ifa 2001:470:1f05:3cb:cabc:c8ff:fe96:9601
+failed to add: Host 2620:149:4:f01:225:ff:fecc:89a3 Gate 2620:149:4:f01:225:ff:fecc:89a4 Ifp en0 Ifa 2001:470:1f05:3cb:cabc:c8ff:fe96:9601
+failed to add: Host 2620:149:4:f01:225:ff:fecc:89a2 Gate 2620:149:4:f01:225:ff:fecc:89a3 Ifp en0 Ifa 2001:470:1f05:3cb:cabc:c8ff:fe96:9601
+failed to add: Host 2620:149:4:f01:225:ff:fecc:89a1 Gate 2620:149:4:f01:225:ff:fecc:89a2 Ifp en0 Ifa 2001:470:1f05:3cb:cabc:c8ff:fe96:9601
 New Routes ('test1') = <IPv6RouteList[9]> = {
  0. Net ::/0 Gate fe80::21f:f3ff:fe43:1abf Ifp en0 Ifa 2001:470:1f05:3cb:cabc:c8ff:fe96:9601 [kern]
  1. Net ::/0 Gate fe80::21f:f3ff:fe43:1abf Ifp en1 Ifa 2001:470:1f05:3cb:cabc:c8ff:fed9:125a [kern] [SCOPED]
@@ -870,17 +870,17 @@ New Routes ('test4') = <IPv6RouteList[17]> = {
 !Remove old[2]: Net ::/0 Gate fe80::21f:f3ff:fe43:1abf Ifp fw0 Ifa 2011:470:1f05:3cb:cabc:c8ff:fe96:ab01 [kern] [SCOPED]
 !Remove old[5]: Net 2011:470:1f05:3cb::/64 Ifp fw0 Ifa 2011:470:1f05:3cb:cabc:c8ff:fe96:ab01 [kern]
 !Remove old[8]: Net fe80::/64 Ifp fw0 [kern] [SCOPED]
-IPMonitor RouteProcess: routing loop detected, not adding: Host 2620:149:4:f01:225:ff:fecc:89ab Gate 2620:149:4:f01:225:ff:fecc:89a1 Ifp en0 Ifa 2001:470:1f05:3cb:cabc:c8ff:fe96:9601
-IPMonitor RouteProcess: failed to add: Host 2620:149:4:f01:225:ff:fecc:89aa Gate 2620:149:4:f01:225:ff:fecc:89ab Ifp en0 Ifa 2001:470:1f05:3cb:cabc:c8ff:fe96:9601
-IPMonitor RouteProcess: failed to add: Host 2620:149:4:f01:225:ff:fecc:89a9 Gate 2620:149:4:f01:225:ff:fecc:89aa Ifp en0 Ifa 2001:470:1f05:3cb:cabc:c8ff:fe96:9601
-IPMonitor RouteProcess: failed to add: Host 2620:149:4:f01:225:ff:fecc:89a8 Gate 2620:149:4:f01:225:ff:fecc:89a9 Ifp en0 Ifa 2001:470:1f05:3cb:cabc:c8ff:fe96:9601
-IPMonitor RouteProcess: failed to add: Host 2620:149:4:f01:225:ff:fecc:89a7 Gate 2620:149:4:f01:225:ff:fecc:89a8 Ifp en0 Ifa 2001:470:1f05:3cb:cabc:c8ff:fe96:9601
-IPMonitor RouteProcess: failed to add: Host 2620:149:4:f01:225:ff:fecc:89a6 Gate 2620:149:4:f01:225:ff:fecc:89a7 Ifp en0 Ifa 2001:470:1f05:3cb:cabc:c8ff:fe96:9601
-IPMonitor RouteProcess: failed to add: Host 2620:149:4:f01:225:ff:fecc:89a5 Gate 2620:149:4:f01:225:ff:fecc:89a6 Ifp en0 Ifa 2001:470:1f05:3cb:cabc:c8ff:fe96:9601
-IPMonitor RouteProcess: failed to add: Host 2620:149:4:f01:225:ff:fecc:89a4 Gate 2620:149:4:f01:225:ff:fecc:89a5 Ifp en0 Ifa 2001:470:1f05:3cb:cabc:c8ff:fe96:9601
-IPMonitor RouteProcess: failed to add: Host 2620:149:4:f01:225:ff:fecc:89a3 Gate 2620:149:4:f01:225:ff:fecc:89a4 Ifp en0 Ifa 2001:470:1f05:3cb:cabc:c8ff:fe96:9601
-IPMonitor RouteProcess: failed to add: Host 2620:149:4:f01:225:ff:fecc:89a2 Gate 2620:149:4:f01:225:ff:fecc:89a3 Ifp en0 Ifa 2001:470:1f05:3cb:cabc:c8ff:fe96:9601
-IPMonitor RouteProcess: failed to add: Host 2620:149:4:f01:225:ff:fecc:89a1 Gate 2620:149:4:f01:225:ff:fecc:89a2 Ifp en0 Ifa 2001:470:1f05:3cb:cabc:c8ff:fe96:9601
+routing loop detected, not adding: Host 2620:149:4:f01:225:ff:fecc:89ab Gate 2620:149:4:f01:225:ff:fecc:89a1 Ifp en0 Ifa 2001:470:1f05:3cb:cabc:c8ff:fe96:9601
+failed to add: Host 2620:149:4:f01:225:ff:fecc:89aa Gate 2620:149:4:f01:225:ff:fecc:89ab Ifp en0 Ifa 2001:470:1f05:3cb:cabc:c8ff:fe96:9601
+failed to add: Host 2620:149:4:f01:225:ff:fecc:89a9 Gate 2620:149:4:f01:225:ff:fecc:89aa Ifp en0 Ifa 2001:470:1f05:3cb:cabc:c8ff:fe96:9601
+failed to add: Host 2620:149:4:f01:225:ff:fecc:89a8 Gate 2620:149:4:f01:225:ff:fecc:89a9 Ifp en0 Ifa 2001:470:1f05:3cb:cabc:c8ff:fe96:9601
+failed to add: Host 2620:149:4:f01:225:ff:fecc:89a7 Gate 2620:149:4:f01:225:ff:fecc:89a8 Ifp en0 Ifa 2001:470:1f05:3cb:cabc:c8ff:fe96:9601
+failed to add: Host 2620:149:4:f01:225:ff:fecc:89a6 Gate 2620:149:4:f01:225:ff:fecc:89a7 Ifp en0 Ifa 2001:470:1f05:3cb:cabc:c8ff:fe96:9601
+failed to add: Host 2620:149:4:f01:225:ff:fecc:89a5 Gate 2620:149:4:f01:225:ff:fecc:89a6 Ifp en0 Ifa 2001:470:1f05:3cb:cabc:c8ff:fe96:9601
+failed to add: Host 2620:149:4:f01:225:ff:fecc:89a4 Gate 2620:149:4:f01:225:ff:fecc:89a5 Ifp en0 Ifa 2001:470:1f05:3cb:cabc:c8ff:fe96:9601
+failed to add: Host 2620:149:4:f01:225:ff:fecc:89a3 Gate 2620:149:4:f01:225:ff:fecc:89a4 Ifp en0 Ifa 2001:470:1f05:3cb:cabc:c8ff:fe96:9601
+failed to add: Host 2620:149:4:f01:225:ff:fecc:89a2 Gate 2620:149:4:f01:225:ff:fecc:89a3 Ifp en0 Ifa 2001:470:1f05:3cb:cabc:c8ff:fe96:9601
+failed to add: Host 2620:149:4:f01:225:ff:fecc:89a1 Gate 2620:149:4:f01:225:ff:fecc:89a2 Ifp en0 Ifa 2001:470:1f05:3cb:cabc:c8ff:fe96:9601
 =================> Apply 'test2', 'test4' End <=================
 
 =================> Apply 'test4', 'test2' Begin <=================
@@ -909,17 +909,17 @@ Old routes ('test4') = <IPv6RouteList[17]> = {
 !Add new[1]: Net ::/0 Gate fe80::21f:f3ff:fe43:1abf Ifp en1 Ifa 2001:470:1f05:3cb:cabc:c8ff:fed9:125a [kern] [SCOPED]
 !Add new[2]: Net 2001:470:1f05:3cb::/64 Ifp en0 Ifa 2001:470:1f05:3cb:cabc:c8ff:fe96:9601 [kern]
 !Add new[3]: Net 2001:470:1f05:3cb::/64 Ifp en1 Ifa 2001:470:1f05:3cb:cabc:c8ff:fed9:125a [kern] [SCOPED]
-IPMonitor RouteProcess: routing loop detected, not adding: Host 2620:149:4:f01:225:ff:fecc:89ab Gate 2620:149:4:f01:225:ff:fecc:89a1 Ifp en0 Ifa 2001:470:1f05:3cb:cabc:c8ff:fe96:9601
-IPMonitor RouteProcess: failed to add: Host 2620:149:4:f01:225:ff:fecc:89aa Gate 2620:149:4:f01:225:ff:fecc:89ab Ifp en0 Ifa 2001:470:1f05:3cb:cabc:c8ff:fe96:9601
-IPMonitor RouteProcess: failed to add: Host 2620:149:4:f01:225:ff:fecc:89a9 Gate 2620:149:4:f01:225:ff:fecc:89aa Ifp en0 Ifa 2001:470:1f05:3cb:cabc:c8ff:fe96:9601
-IPMonitor RouteProcess: failed to add: Host 2620:149:4:f01:225:ff:fecc:89a8 Gate 2620:149:4:f01:225:ff:fecc:89a9 Ifp en0 Ifa 2001:470:1f05:3cb:cabc:c8ff:fe96:9601
-IPMonitor RouteProcess: failed to add: Host 2620:149:4:f01:225:ff:fecc:89a7 Gate 2620:149:4:f01:225:ff:fecc:89a8 Ifp en0 Ifa 2001:470:1f05:3cb:cabc:c8ff:fe96:9601
-IPMonitor RouteProcess: failed to add: Host 2620:149:4:f01:225:ff:fecc:89a6 Gate 2620:149:4:f01:225:ff:fecc:89a7 Ifp en0 Ifa 2001:470:1f05:3cb:cabc:c8ff:fe96:9601
-IPMonitor RouteProcess: failed to add: Host 2620:149:4:f01:225:ff:fecc:89a5 Gate 2620:149:4:f01:225:ff:fecc:89a6 Ifp en0 Ifa 2001:470:1f05:3cb:cabc:c8ff:fe96:9601
-IPMonitor RouteProcess: failed to add: Host 2620:149:4:f01:225:ff:fecc:89a4 Gate 2620:149:4:f01:225:ff:fecc:89a5 Ifp en0 Ifa 2001:470:1f05:3cb:cabc:c8ff:fe96:9601
-IPMonitor RouteProcess: failed to add: Host 2620:149:4:f01:225:ff:fecc:89a3 Gate 2620:149:4:f01:225:ff:fecc:89a4 Ifp en0 Ifa 2001:470:1f05:3cb:cabc:c8ff:fe96:9601
-IPMonitor RouteProcess: failed to add: Host 2620:149:4:f01:225:ff:fecc:89a2 Gate 2620:149:4:f01:225:ff:fecc:89a3 Ifp en0 Ifa 2001:470:1f05:3cb:cabc:c8ff:fe96:9601
-IPMonitor RouteProcess: failed to add: Host 2620:149:4:f01:225:ff:fecc:89a1 Gate 2620:149:4:f01:225:ff:fecc:89a2 Ifp en0 Ifa 2001:470:1f05:3cb:cabc:c8ff:fe96:9601
+routing loop detected, not adding: Host 2620:149:4:f01:225:ff:fecc:89ab Gate 2620:149:4:f01:225:ff:fecc:89a1 Ifp en0 Ifa 2001:470:1f05:3cb:cabc:c8ff:fe96:9601
+failed to add: Host 2620:149:4:f01:225:ff:fecc:89aa Gate 2620:149:4:f01:225:ff:fecc:89ab Ifp en0 Ifa 2001:470:1f05:3cb:cabc:c8ff:fe96:9601
+failed to add: Host 2620:149:4:f01:225:ff:fecc:89a9 Gate 2620:149:4:f01:225:ff:fecc:89aa Ifp en0 Ifa 2001:470:1f05:3cb:cabc:c8ff:fe96:9601
+failed to add: Host 2620:149:4:f01:225:ff:fecc:89a8 Gate 2620:149:4:f01:225:ff:fecc:89a9 Ifp en0 Ifa 2001:470:1f05:3cb:cabc:c8ff:fe96:9601
+failed to add: Host 2620:149:4:f01:225:ff:fecc:89a7 Gate 2620:149:4:f01:225:ff:fecc:89a8 Ifp en0 Ifa 2001:470:1f05:3cb:cabc:c8ff:fe96:9601
+failed to add: Host 2620:149:4:f01:225:ff:fecc:89a6 Gate 2620:149:4:f01:225:ff:fecc:89a7 Ifp en0 Ifa 2001:470:1f05:3cb:cabc:c8ff:fe96:9601
+failed to add: Host 2620:149:4:f01:225:ff:fecc:89a5 Gate 2620:149:4:f01:225:ff:fecc:89a6 Ifp en0 Ifa 2001:470:1f05:3cb:cabc:c8ff:fe96:9601
+failed to add: Host 2620:149:4:f01:225:ff:fecc:89a4 Gate 2620:149:4:f01:225:ff:fecc:89a5 Ifp en0 Ifa 2001:470:1f05:3cb:cabc:c8ff:fe96:9601
+failed to add: Host 2620:149:4:f01:225:ff:fecc:89a3 Gate 2620:149:4:f01:225:ff:fecc:89a4 Ifp en0 Ifa 2001:470:1f05:3cb:cabc:c8ff:fe96:9601
+failed to add: Host 2620:149:4:f01:225:ff:fecc:89a2 Gate 2620:149:4:f01:225:ff:fecc:89a3 Ifp en0 Ifa 2001:470:1f05:3cb:cabc:c8ff:fe96:9601
+failed to add: Host 2620:149:4:f01:225:ff:fecc:89a1 Gate 2620:149:4:f01:225:ff:fecc:89a2 Ifp en0 Ifa 2001:470:1f05:3cb:cabc:c8ff:fe96:9601
 New Routes ('test2') = <IPv6RouteList[9]> = {
  0. Net ::/0 Gate fe80::21f:f3ff:fe43:1abf Ifp en0 Ifa 2001:470:1f05:3cb:cabc:c8ff:fe96:9601 [kern]
  1. Net ::/0 Gate fe80::21f:f3ff:fe43:1abf Ifp en1 Ifa 2001:470:1f05:3cb:cabc:c8ff:fed9:125a [kern] [SCOPED]
@@ -1081,17 +1081,17 @@ New Routes ('test4') = <IPv6RouteList[17]> = {
 !Add new[0]: Net ::/0 Gate fe80::21f:f3ff:fe43:1abf Ifp en0 Ifa 2001:470:1f05:3cb:cabc:c8ff:fe96:9601 [kern]
 !Add new[2]: Net 2001:470:1f05:3cb::/64 Ifp en0 Ifa 2001:470:1f05:3cb:cabc:c8ff:fe96:9601 [kern]
 !Add new[3]: Net 2001:470:1f05:3cb::/64 Ifp en1 Ifa 2001:470:1f05:3cb:cabc:c8ff:fed9:125a [kern] [SCOPED]
-IPMonitor RouteProcess: routing loop detected, not adding: Host 2620:149:4:f01:225:ff:fecc:89ab Gate 2620:149:4:f01:225:ff:fecc:89a1 Ifp en0 Ifa 2001:470:1f05:3cb:cabc:c8ff:fe96:9601
-IPMonitor RouteProcess: failed to add: Host 2620:149:4:f01:225:ff:fecc:89aa Gate 2620:149:4:f01:225:ff:fecc:89ab Ifp en0 Ifa 2001:470:1f05:3cb:cabc:c8ff:fe96:9601
-IPMonitor RouteProcess: failed to add: Host 2620:149:4:f01:225:ff:fecc:89a9 Gate 2620:149:4:f01:225:ff:fecc:89aa Ifp en0 Ifa 2001:470:1f05:3cb:cabc:c8ff:fe96:9601
-IPMonitor RouteProcess: failed to add: Host 2620:149:4:f01:225:ff:fecc:89a8 Gate 2620:149:4:f01:225:ff:fecc:89a9 Ifp en0 Ifa 2001:470:1f05:3cb:cabc:c8ff:fe96:9601
-IPMonitor RouteProcess: failed to add: Host 2620:149:4:f01:225:ff:fecc:89a7 Gate 2620:149:4:f01:225:ff:fecc:89a8 Ifp en0 Ifa 2001:470:1f05:3cb:cabc:c8ff:fe96:9601
-IPMonitor RouteProcess: failed to add: Host 2620:149:4:f01:225:ff:fecc:89a6 Gate 2620:149:4:f01:225:ff:fecc:89a7 Ifp en0 Ifa 2001:470:1f05:3cb:cabc:c8ff:fe96:9601
-IPMonitor RouteProcess: failed to add: Host 2620:149:4:f01:225:ff:fecc:89a5 Gate 2620:149:4:f01:225:ff:fecc:89a6 Ifp en0 Ifa 2001:470:1f05:3cb:cabc:c8ff:fe96:9601
-IPMonitor RouteProcess: failed to add: Host 2620:149:4:f01:225:ff:fecc:89a4 Gate 2620:149:4:f01:225:ff:fecc:89a5 Ifp en0 Ifa 2001:470:1f05:3cb:cabc:c8ff:fe96:9601
-IPMonitor RouteProcess: failed to add: Host 2620:149:4:f01:225:ff:fecc:89a3 Gate 2620:149:4:f01:225:ff:fecc:89a4 Ifp en0 Ifa 2001:470:1f05:3cb:cabc:c8ff:fe96:9601
-IPMonitor RouteProcess: failed to add: Host 2620:149:4:f01:225:ff:fecc:89a2 Gate 2620:149:4:f01:225:ff:fecc:89a3 Ifp en0 Ifa 2001:470:1f05:3cb:cabc:c8ff:fe96:9601
-IPMonitor RouteProcess: failed to add: Host 2620:149:4:f01:225:ff:fecc:89a1 Gate 2620:149:4:f01:225:ff:fecc:89a2 Ifp en0 Ifa 2001:470:1f05:3cb:cabc:c8ff:fe96:9601
+routing loop detected, not adding: Host 2620:149:4:f01:225:ff:fecc:89ab Gate 2620:149:4:f01:225:ff:fecc:89a1 Ifp en0 Ifa 2001:470:1f05:3cb:cabc:c8ff:fe96:9601
+failed to add: Host 2620:149:4:f01:225:ff:fecc:89aa Gate 2620:149:4:f01:225:ff:fecc:89ab Ifp en0 Ifa 2001:470:1f05:3cb:cabc:c8ff:fe96:9601
+failed to add: Host 2620:149:4:f01:225:ff:fecc:89a9 Gate 2620:149:4:f01:225:ff:fecc:89aa Ifp en0 Ifa 2001:470:1f05:3cb:cabc:c8ff:fe96:9601
+failed to add: Host 2620:149:4:f01:225:ff:fecc:89a8 Gate 2620:149:4:f01:225:ff:fecc:89a9 Ifp en0 Ifa 2001:470:1f05:3cb:cabc:c8ff:fe96:9601
+failed to add: Host 2620:149:4:f01:225:ff:fecc:89a7 Gate 2620:149:4:f01:225:ff:fecc:89a8 Ifp en0 Ifa 2001:470:1f05:3cb:cabc:c8ff:fe96:9601
+failed to add: Host 2620:149:4:f01:225:ff:fecc:89a6 Gate 2620:149:4:f01:225:ff:fecc:89a7 Ifp en0 Ifa 2001:470:1f05:3cb:cabc:c8ff:fe96:9601
+failed to add: Host 2620:149:4:f01:225:ff:fecc:89a5 Gate 2620:149:4:f01:225:ff:fecc:89a6 Ifp en0 Ifa 2001:470:1f05:3cb:cabc:c8ff:fe96:9601
+failed to add: Host 2620:149:4:f01:225:ff:fecc:89a4 Gate 2620:149:4:f01:225:ff:fecc:89a5 Ifp en0 Ifa 2001:470:1f05:3cb:cabc:c8ff:fe96:9601
+failed to add: Host 2620:149:4:f01:225:ff:fecc:89a3 Gate 2620:149:4:f01:225:ff:fecc:89a4 Ifp en0 Ifa 2001:470:1f05:3cb:cabc:c8ff:fe96:9601
+failed to add: Host 2620:149:4:f01:225:ff:fecc:89a2 Gate 2620:149:4:f01:225:ff:fecc:89a3 Ifp en0 Ifa 2001:470:1f05:3cb:cabc:c8ff:fe96:9601
+failed to add: Host 2620:149:4:f01:225:ff:fecc:89a1 Gate 2620:149:4:f01:225:ff:fecc:89a2 Ifp en0 Ifa 2001:470:1f05:3cb:cabc:c8ff:fe96:9601
 =================> Apply 'test3', 'test4' End <=================
 
 =================> Apply 'test4', 'test3' Begin <=================
@@ -1120,17 +1120,17 @@ Old routes ('test4') = <IPv6RouteList[17]> = {
 !Add new[1]: Net ::/0 Gate fe80::21f:f3ff:fe43:1abf Ifp en1 Ifa 2001:470:1f05:3cb:cabc:c8ff:fed9:125a [kern] [SCOPED]
 !Add new[2]: Net 2001:470:1f05:3cb::/64 Ifp en0 Ifa 2001:470:1f05:3cb:cabc:c8ff:fe96:9601 [kern]
 !Add new[3]: Net 2001:470:1f05:3cb::/64 Ifp en1 Ifa 2001:470:1f05:3cb:cabc:c8ff:fed9:125a [kern] [SCOPED]
-IPMonitor RouteProcess: routing loop detected, not adding: Host 2620:149:4:f01:225:ff:fecc:89ab Gate 2620:149:4:f01:225:ff:fecc:89a1 Ifp en0 Ifa 2001:470:1f05:3cb:cabc:c8ff:fe96:9601
-IPMonitor RouteProcess: failed to add: Host 2620:149:4:f01:225:ff:fecc:89aa Gate 2620:149:4:f01:225:ff:fecc:89ab Ifp en0 Ifa 2001:470:1f05:3cb:cabc:c8ff:fe96:9601
-IPMonitor RouteProcess: failed to add: Host 2620:149:4:f01:225:ff:fecc:89a9 Gate 2620:149:4:f01:225:ff:fecc:89aa Ifp en0 Ifa 2001:470:1f05:3cb:cabc:c8ff:fe96:9601
-IPMonitor RouteProcess: failed to add: Host 2620:149:4:f01:225:ff:fecc:89a8 Gate 2620:149:4:f01:225:ff:fecc:89a9 Ifp en0 Ifa 2001:470:1f05:3cb:cabc:c8ff:fe96:9601
-IPMonitor RouteProcess: failed to add: Host 2620:149:4:f01:225:ff:fecc:89a7 Gate 2620:149:4:f01:225:ff:fecc:89a8 Ifp en0 Ifa 2001:470:1f05:3cb:cabc:c8ff:fe96:9601
-IPMonitor RouteProcess: failed to add: Host 2620:149:4:f01:225:ff:fecc:89a6 Gate 2620:149:4:f01:225:ff:fecc:89a7 Ifp en0 Ifa 2001:470:1f05:3cb:cabc:c8ff:fe96:9601
-IPMonitor RouteProcess: failed to add: Host 2620:149:4:f01:225:ff:fecc:89a5 Gate 2620:149:4:f01:225:ff:fecc:89a6 Ifp en0 Ifa 2001:470:1f05:3cb:cabc:c8ff:fe96:9601
-IPMonitor RouteProcess: failed to add: Host 2620:149:4:f01:225:ff:fecc:89a4 Gate 2620:149:4:f01:225:ff:fecc:89a5 Ifp en0 Ifa 2001:470:1f05:3cb:cabc:c8ff:fe96:9601
-IPMonitor RouteProcess: failed to add: Host 2620:149:4:f01:225:ff:fecc:89a3 Gate 2620:149:4:f01:225:ff:fecc:89a4 Ifp en0 Ifa 2001:470:1f05:3cb:cabc:c8ff:fe96:9601
-IPMonitor RouteProcess: failed to add: Host 2620:149:4:f01:225:ff:fecc:89a2 Gate 2620:149:4:f01:225:ff:fecc:89a3 Ifp en0 Ifa 2001:470:1f05:3cb:cabc:c8ff:fe96:9601
-IPMonitor RouteProcess: failed to add: Host 2620:149:4:f01:225:ff:fecc:89a1 Gate 2620:149:4:f01:225:ff:fecc:89a2 Ifp en0 Ifa 2001:470:1f05:3cb:cabc:c8ff:fe96:9601
+routing loop detected, not adding: Host 2620:149:4:f01:225:ff:fecc:89ab Gate 2620:149:4:f01:225:ff:fecc:89a1 Ifp en0 Ifa 2001:470:1f05:3cb:cabc:c8ff:fe96:9601
+failed to add: Host 2620:149:4:f01:225:ff:fecc:89aa Gate 2620:149:4:f01:225:ff:fecc:89ab Ifp en0 Ifa 2001:470:1f05:3cb:cabc:c8ff:fe96:9601
+failed to add: Host 2620:149:4:f01:225:ff:fecc:89a9 Gate 2620:149:4:f01:225:ff:fecc:89aa Ifp en0 Ifa 2001:470:1f05:3cb:cabc:c8ff:fe96:9601
+failed to add: Host 2620:149:4:f01:225:ff:fecc:89a8 Gate 2620:149:4:f01:225:ff:fecc:89a9 Ifp en0 Ifa 2001:470:1f05:3cb:cabc:c8ff:fe96:9601
+failed to add: Host 2620:149:4:f01:225:ff:fecc:89a7 Gate 2620:149:4:f01:225:ff:fecc:89a8 Ifp en0 Ifa 2001:470:1f05:3cb:cabc:c8ff:fe96:9601
+failed to add: Host 2620:149:4:f01:225:ff:fecc:89a6 Gate 2620:149:4:f01:225:ff:fecc:89a7 Ifp en0 Ifa 2001:470:1f05:3cb:cabc:c8ff:fe96:9601
+failed to add: Host 2620:149:4:f01:225:ff:fecc:89a5 Gate 2620:149:4:f01:225:ff:fecc:89a6 Ifp en0 Ifa 2001:470:1f05:3cb:cabc:c8ff:fe96:9601
+failed to add: Host 2620:149:4:f01:225:ff:fecc:89a4 Gate 2620:149:4:f01:225:ff:fecc:89a5 Ifp en0 Ifa 2001:470:1f05:3cb:cabc:c8ff:fe96:9601
+failed to add: Host 2620:149:4:f01:225:ff:fecc:89a3 Gate 2620:149:4:f01:225:ff:fecc:89a4 Ifp en0 Ifa 2001:470:1f05:3cb:cabc:c8ff:fe96:9601
+failed to add: Host 2620:149:4:f01:225:ff:fecc:89a2 Gate 2620:149:4:f01:225:ff:fecc:89a3 Ifp en0 Ifa 2001:470:1f05:3cb:cabc:c8ff:fe96:9601
+failed to add: Host 2620:149:4:f01:225:ff:fecc:89a1 Gate 2620:149:4:f01:225:ff:fecc:89a2 Ifp en0 Ifa 2001:470:1f05:3cb:cabc:c8ff:fe96:9601
 New Routes ('test3') = <IPv6RouteList[6]> = {
  0. Net ::/0 Gate fe80::21f:f3ff:fe43:1abf Ifp en0 Ifa 2020:299:abcd:ef12:1:2:3:4 [kern]
  1. Net ::/0 Gate fe80::21f:f3ff:fe43:1abf Ifp en1 Ifa 2001:470:1f05:3cb:cabc:c8ff:fed9:125a [kern] [SCOPED]
@@ -1275,17 +1275,17 @@ Old routes ('test4') = <IPv6RouteList[17]> = {
 !Add new[1]: Net ::/0 Gate fe80::21f:f3ff:fe43:1abf Ifp en1 Ifa 2001:470:1f05:3cb:cabc:c8ff:fed9:125a [kern] [SCOPED]
 !Add new[2]: Net 2001:470:1f05:3cb::/64 Ifp en0 Ifa 2001:470:1f05:3cb:cabc:c8ff:fe96:9601 [kern]
 !Add new[3]: Net 2001:470:1f05:3cb::/64 Ifp en1 Ifa 2001:470:1f05:3cb:cabc:c8ff:fed9:125a [kern] [SCOPED]
-IPMonitor RouteProcess: routing loop detected, not adding: Host 2620:149:4:f01:225:ff:fecc:89ab Gate 2620:149:4:f01:225:ff:fecc:89a1 Ifp en0 Ifa 2001:470:1f05:3cb:cabc:c8ff:fe96:9601
-IPMonitor RouteProcess: failed to add: Host 2620:149:4:f01:225:ff:fecc:89aa Gate 2620:149:4:f01:225:ff:fecc:89ab Ifp en0 Ifa 2001:470:1f05:3cb:cabc:c8ff:fe96:9601
-IPMonitor RouteProcess: failed to add: Host 2620:149:4:f01:225:ff:fecc:89a9 Gate 2620:149:4:f01:225:ff:fecc:89aa Ifp en0 Ifa 2001:470:1f05:3cb:cabc:c8ff:fe96:9601
-IPMonitor RouteProcess: failed to add: Host 2620:149:4:f01:225:ff:fecc:89a8 Gate 2620:149:4:f01:225:ff:fecc:89a9 Ifp en0 Ifa 2001:470:1f05:3cb:cabc:c8ff:fe96:9601
-IPMonitor RouteProcess: failed to add: Host 2620:149:4:f01:225:ff:fecc:89a7 Gate 2620:149:4:f01:225:ff:fecc:89a8 Ifp en0 Ifa 2001:470:1f05:3cb:cabc:c8ff:fe96:9601
-IPMonitor RouteProcess: failed to add: Host 2620:149:4:f01:225:ff:fecc:89a6 Gate 2620:149:4:f01:225:ff:fecc:89a7 Ifp en0 Ifa 2001:470:1f05:3cb:cabc:c8ff:fe96:9601
-IPMonitor RouteProcess: failed to add: Host 2620:149:4:f01:225:ff:fecc:89a5 Gate 2620:149:4:f01:225:ff:fecc:89a6 Ifp en0 Ifa 2001:470:1f05:3cb:cabc:c8ff:fe96:9601
-IPMonitor RouteProcess: failed to add: Host 2620:149:4:f01:225:ff:fecc:89a4 Gate 2620:149:4:f01:225:ff:fecc:89a5 Ifp en0 Ifa 2001:470:1f05:3cb:cabc:c8ff:fe96:9601
-IPMonitor RouteProcess: failed to add: Host 2620:149:4:f01:225:ff:fecc:89a3 Gate 2620:149:4:f01:225:ff:fecc:89a4 Ifp en0 Ifa 2001:470:1f05:3cb:cabc:c8ff:fe96:9601
-IPMonitor RouteProcess: failed to add: Host 2620:149:4:f01:225:ff:fecc:89a2 Gate 2620:149:4:f01:225:ff:fecc:89a3 Ifp en0 Ifa 2001:470:1f05:3cb:cabc:c8ff:fe96:9601
-IPMonitor RouteProcess: failed to add: Host 2620:149:4:f01:225:ff:fecc:89a1 Gate 2620:149:4:f01:225:ff:fecc:89a2 Ifp en0 Ifa 2001:470:1f05:3cb:cabc:c8ff:fe96:9601
+routing loop detected, not adding: Host 2620:149:4:f01:225:ff:fecc:89ab Gate 2620:149:4:f01:225:ff:fecc:89a1 Ifp en0 Ifa 2001:470:1f05:3cb:cabc:c8ff:fe96:9601
+failed to add: Host 2620:149:4:f01:225:ff:fecc:89aa Gate 2620:149:4:f01:225:ff:fecc:89ab Ifp en0 Ifa 2001:470:1f05:3cb:cabc:c8ff:fe96:9601
+failed to add: Host 2620:149:4:f01:225:ff:fecc:89a9 Gate 2620:149:4:f01:225:ff:fecc:89aa Ifp en0 Ifa 2001:470:1f05:3cb:cabc:c8ff:fe96:9601
+failed to add: Host 2620:149:4:f01:225:ff:fecc:89a8 Gate 2620:149:4:f01:225:ff:fecc:89a9 Ifp en0 Ifa 2001:470:1f05:3cb:cabc:c8ff:fe96:9601
+failed to add: Host 2620:149:4:f01:225:ff:fecc:89a7 Gate 2620:149:4:f01:225:ff:fecc:89a8 Ifp en0 Ifa 2001:470:1f05:3cb:cabc:c8ff:fe96:9601
+failed to add: Host 2620:149:4:f01:225:ff:fecc:89a6 Gate 2620:149:4:f01:225:ff:fecc:89a7 Ifp en0 Ifa 2001:470:1f05:3cb:cabc:c8ff:fe96:9601
+failed to add: Host 2620:149:4:f01:225:ff:fecc:89a5 Gate 2620:149:4:f01:225:ff:fecc:89a6 Ifp en0 Ifa 2001:470:1f05:3cb:cabc:c8ff:fe96:9601
+failed to add: Host 2620:149:4:f01:225:ff:fecc:89a4 Gate 2620:149:4:f01:225:ff:fecc:89a5 Ifp en0 Ifa 2001:470:1f05:3cb:cabc:c8ff:fe96:9601
+failed to add: Host 2620:149:4:f01:225:ff:fecc:89a3 Gate 2620:149:4:f01:225:ff:fecc:89a4 Ifp en0 Ifa 2001:470:1f05:3cb:cabc:c8ff:fe96:9601
+failed to add: Host 2620:149:4:f01:225:ff:fecc:89a2 Gate 2620:149:4:f01:225:ff:fecc:89a3 Ifp en0 Ifa 2001:470:1f05:3cb:cabc:c8ff:fe96:9601
+failed to add: Host 2620:149:4:f01:225:ff:fecc:89a1 Gate 2620:149:4:f01:225:ff:fecc:89a2 Ifp en0 Ifa 2001:470:1f05:3cb:cabc:c8ff:fe96:9601
 New Routes ('test5') = <IPv6RouteList[14]> = {
  0. Net ::/0 Gate fe80::21f:f3ff:fe43:1abf Ifp en0 Ifa 2001:470:1f05:3cb:cabc:c8ff:fe96:9601 [kern]
  1. Net ::/0 Gate fe80::21f:f3ff:fe43:1abf Ifp en1 Ifa 2001:470:1f05:3cb:cabc:c8ff:fed9:125a [kern] [SCOPED]
@@ -1370,23 +1370,22 @@ Remove old[8]: Net 2010:470:1f05:3cb::/64 Gate fe80::2d0:bcff:fe3d:8c00 Ifp utun
 Remove old[9]: Host 2020:299:a:e02:825:1ed:fecc:abab Gate fe80::21f:f3ff:fe43:1abf Ifp en0 !Ifp utun0
 !Remove old[10]: Net 2620:149:4:f01::/64 Ifp utun0 Ifa 2620:149:4:f01:225:ff:fecc:89aa [kern]
 !Remove old[13]: Net fe80::/64 Ifp utun0 [kern] [SCOPED]
-IPMonitor RouteProcess: routing loop detected, not adding: Host 2620:149:4:f01:225:ff:fecc:89ab Gate 2620:149:4:f01:225:ff:fecc:89a1 Ifp en0 Ifa 2001:470:1f05:3cb:cabc:c8ff:fe96:9601
-IPMonitor RouteProcess: failed to add: Host 2620:149:4:f01:225:ff:fecc:89aa Gate 2620:149:4:f01:225:ff:fecc:89ab Ifp en0 Ifa 2001:470:1f05:3cb:cabc:c8ff:fe96:9601
-IPMonitor RouteProcess: failed to add: Host 2620:149:4:f01:225:ff:fecc:89a9 Gate 2620:149:4:f01:225:ff:fecc:89aa Ifp en0 Ifa 2001:470:1f05:3cb:cabc:c8ff:fe96:9601
-IPMonitor RouteProcess: failed to add: Host 2620:149:4:f01:225:ff:fecc:89a8 Gate 2620:149:4:f01:225:ff:fecc:89a9 Ifp en0 Ifa 2001:470:1f05:3cb:cabc:c8ff:fe96:9601
-IPMonitor RouteProcess: failed to add: Host 2620:149:4:f01:225:ff:fecc:89a7 Gate 2620:149:4:f01:225:ff:fecc:89a8 Ifp en0 Ifa 2001:470:1f05:3cb:cabc:c8ff:fe96:9601
-IPMonitor RouteProcess: failed to add: Host 2620:149:4:f01:225:ff:fecc:89a6 Gate 2620:149:4:f01:225:ff:fecc:89a7 Ifp en0 Ifa 2001:470:1f05:3cb:cabc:c8ff:fe96:9601
-IPMonitor RouteProcess: failed to add: Host 2620:149:4:f01:225:ff:fecc:89a5 Gate 2620:149:4:f01:225:ff:fecc:89a6 Ifp en0 Ifa 2001:470:1f05:3cb:cabc:c8ff:fe96:9601
-IPMonitor RouteProcess: failed to add: Host 2620:149:4:f01:225:ff:fecc:89a4 Gate 2620:149:4:f01:225:ff:fecc:89a5 Ifp en0 Ifa 2001:470:1f05:3cb:cabc:c8ff:fe96:9601
-IPMonitor RouteProcess: failed to add: Host 2620:149:4:f01:225:ff:fecc:89a3 Gate 2620:149:4:f01:225:ff:fecc:89a4 Ifp en0 Ifa 2001:470:1f05:3cb:cabc:c8ff:fe96:9601
-IPMonitor RouteProcess: failed to add: Host 2620:149:4:f01:225:ff:fecc:89a2 Gate 2620:149:4:f01:225:ff:fecc:89a3 Ifp en0 Ifa 2001:470:1f05:3cb:cabc:c8ff:fe96:9601
-IPMonitor RouteProcess: failed to add: Host 2620:149:4:f01:225:ff:fecc:89a1 Gate 2620:149:4:f01:225:ff:fecc:89a2 Ifp en0 Ifa 2001:470:1f05:3cb:cabc:c8ff:fe96:9601
+routing loop detected, not adding: Host 2620:149:4:f01:225:ff:fecc:89ab Gate 2620:149:4:f01:225:ff:fecc:89a1 Ifp en0 Ifa 2001:470:1f05:3cb:cabc:c8ff:fe96:9601
+failed to add: Host 2620:149:4:f01:225:ff:fecc:89aa Gate 2620:149:4:f01:225:ff:fecc:89ab Ifp en0 Ifa 2001:470:1f05:3cb:cabc:c8ff:fe96:9601
+failed to add: Host 2620:149:4:f01:225:ff:fecc:89a9 Gate 2620:149:4:f01:225:ff:fecc:89aa Ifp en0 Ifa 2001:470:1f05:3cb:cabc:c8ff:fe96:9601
+failed to add: Host 2620:149:4:f01:225:ff:fecc:89a8 Gate 2620:149:4:f01:225:ff:fecc:89a9 Ifp en0 Ifa 2001:470:1f05:3cb:cabc:c8ff:fe96:9601
+failed to add: Host 2620:149:4:f01:225:ff:fecc:89a7 Gate 2620:149:4:f01:225:ff:fecc:89a8 Ifp en0 Ifa 2001:470:1f05:3cb:cabc:c8ff:fe96:9601
+failed to add: Host 2620:149:4:f01:225:ff:fecc:89a6 Gate 2620:149:4:f01:225:ff:fecc:89a7 Ifp en0 Ifa 2001:470:1f05:3cb:cabc:c8ff:fe96:9601
+failed to add: Host 2620:149:4:f01:225:ff:fecc:89a5 Gate 2620:149:4:f01:225:ff:fecc:89a6 Ifp en0 Ifa 2001:470:1f05:3cb:cabc:c8ff:fe96:9601
+failed to add: Host 2620:149:4:f01:225:ff:fecc:89a4 Gate 2620:149:4:f01:225:ff:fecc:89a5 Ifp en0 Ifa 2001:470:1f05:3cb:cabc:c8ff:fe96:9601
+failed to add: Host 2620:149:4:f01:225:ff:fecc:89a3 Gate 2620:149:4:f01:225:ff:fecc:89a4 Ifp en0 Ifa 2001:470:1f05:3cb:cabc:c8ff:fe96:9601
+failed to add: Host 2620:149:4:f01:225:ff:fecc:89a2 Gate 2620:149:4:f01:225:ff:fecc:89a3 Ifp en0 Ifa 2001:470:1f05:3cb:cabc:c8ff:fe96:9601
+failed to add: Host 2620:149:4:f01:225:ff:fecc:89a1 Gate 2620:149:4:f01:225:ff:fecc:89a2 Ifp en0 Ifa 2001:470:1f05:3cb:cabc:c8ff:fe96:9601
 =================> Apply 'test5', 'test4' End <=================
 
 Checking for leaks
 Process:         test_ipv6_routelist [XXXX]
 Path: XXXX
-Load Address:    0xXXXX
 Identifier:      test_ipv6_routelist
 Code Type:       X86-64
 Parent Process:  sh [XXXX]
@@ -1394,6 +1393,9 @@ Parent Process:  sh [XXXX]
 Date/Time:       XXXX
 OS Version: XXXX
 Report Version:  7
+Analysis Tool Version:  Xcode 11.0 (11M275m)
 
-leaks Report Version:  2.0
+
+leaks Report Version: 4.0
 Process XXXX 0 leaks for 0 total leaked bytes.
+
index 22ed8d96df2f33190cb92c412b8898a3af13925f..d354d5a3ec5a003f2b586c60eb13eaaaef3c6418 100644 (file)
        <key>CFBundlePackageType</key>
        <string>BNDL</string>
        <key>CFBundleShortVersionString</key>
-       <string>1.17</string>
+       <string>1.19</string>
        <key>CFBundleSignature</key>
        <string>????</string>
        <key>CFBundleVersion</key>
-       <string>1.17</string>
+       <string>1.19</string>
 </dict>
 </plist>
index bccc4b399d999a966ba502701f917c88dad81509..010f3f845dc9bf76d73717dd5369961967b1a8bd 100644 (file)
@@ -607,17 +607,10 @@ updateVirtualNetworkInterfaceConfiguration(SCPreferencesRef               prefs,
                                           void                         *info)
 {
 #pragma unused(info)
-    os_activity_t   activity;
-
     if ((notificationType & kSCPreferencesNotificationApply) != kSCPreferencesNotificationApply) {
        return;
     }
 
-    activity = os_activity_create("check/update virtual network interface configuration",
-                                 OS_ACTIVITY_CURRENT,
-                                 OS_ACTIVITY_FLAG_DEFAULT);
-    os_activity_scope(activity);
-
     if (prefs == NULL) {
        // if a new interface has been "named"
        prefs = S_prefs;
@@ -644,8 +637,6 @@ updateVirtualNetworkInterfaceConfiguration(SCPreferencesRef         prefs,
     // we are finished with current prefs, wait for changes
     SCPreferencesSynchronize(prefs);
 
-    os_release(activity);
-
     return;
 }
 
@@ -1668,7 +1659,7 @@ watcherCreate(SCNetworkInterfaceRef interface, InterfaceUpdateCallBack callback)
     watched = CFDataCreateMutable(NULL, sizeof(WatchedInfo));
     CFDataSetLength(watched, sizeof(WatchedInfo));
     watchedInfo = (WatchedInfo *)(void *)CFDataGetBytePtr(watched);
-    bzero(watchedInfo, sizeof(*watchedInfo));
+    memset(watchedInfo, 0, sizeof(*watchedInfo));
 
     // retain interface
     watchedInfo->interface = CFRetain(interface);
@@ -1894,14 +1885,8 @@ lockedNotification_reply(CFUserNotificationRef userNotification, CFOptionFlags r
 {
 #pragma unused(userNotification)
 
-    os_activity_t      activity;
     CFIndex            n;
 
-    activity = os_activity_create("process locked interface notification",
-                                 OS_ACTIVITY_CURRENT,
-                                 OS_ACTIVITY_FLAG_DEFAULT);
-    os_activity_scope(activity);
-
     n = (S_locked != NULL) ? CFArrayGetCount(S_locked) : 0;
     for (CFIndex i = 0; i < n; i++) {
        CFDataRef       watched         = CFArrayGetValueAtIndex(S_locked, i);
@@ -1946,8 +1931,6 @@ lockedNotification_reply(CFUserNotificationRef userNotification, CFOptionFlags r
        updateInterfaces();
     }
 
-    os_release(activity);
-
     return;
 }
 
@@ -2159,6 +2142,16 @@ watchLockedInterface(SCNetworkInterfaceRef interface)
 
 
 #if    TARGET_OS_IPHONE
+static Boolean
+haveLockdown()
+{
+    void * volatile    fn_WeakFunction = (void *)&(lockdown_is_host_trusted);
+    Boolean            haveLibrary;
+
+    haveLibrary = (fn_WeakFunction != NULL) ? TRUE : FALSE;
+    return haveLibrary;
+}
+
 static void
 shareExcluded()
 {
@@ -2412,6 +2405,118 @@ updateTrustRequiredInterfaces(CFArrayRef interfaces)
 #endif // TARGET_OS_IPHONE
 
 
+#pragma mark -
+#pragma mark Pre-configured interface support
+
+
+static void
+sharePreconfigured()
+{
+    CFIndex    n;
+
+    n = (S_preconfigured != NULL) ? CFArrayGetCount(S_preconfigured) : 0;
+    if (n > 0) {
+       CFMutableArrayRef       preconfigured;
+
+       preconfigured = CFArrayCreateMutable(NULL, 0, &kCFTypeArrayCallBacks);
+
+       for (CFIndex i = 0; i < n; i++) {
+           CFStringRef bsdName;
+           CFDataRef   watched         = CFArrayGetValueAtIndex(S_preconfigured, i);
+           WatchedInfo *watchedInfo    = (WatchedInfo *)(void *)CFDataGetBytePtr(watched);
+
+           bsdName = SCNetworkInterfaceGetBSDName(watchedInfo->interface);
+           CFArrayAppendValue(preconfigured, bsdName);
+       }
+
+       CFDictionarySetValue(S_state, kInterfaceNamerKey_PreConfiguredInterfaces, preconfigured);
+       CFRelease(preconfigured);
+    } else {
+       CFDictionaryRemoveValue(S_state, kInterfaceNamerKey_PreConfiguredInterfaces);
+    }
+
+    updateStore();
+
+    return;
+}
+
+static void
+preconfiguredInterfaceUpdated(CFDataRef watched, natural_t messageType, void *messageArgument)
+{
+    Boolean    updated         = FALSE;
+    WatchedInfo        *watchedInfo    = (WatchedInfo *)(void *)CFDataGetBytePtr(watched);
+
+#pragma unused(messageArgument)
+    switch (messageType) {
+       case kIOMessageServiceIsTerminated : {          // if [locked] interface yanked
+           SC_log(LOG_INFO, "[pre-configured] interface removed: %@",
+                  SCNetworkInterfaceGetBSDName(watchedInfo->interface));
+
+           if (S_preconfigured != NULL) {
+               CFIndex i;
+               CFIndex n       = CFArrayGetCount(S_preconfigured);
+
+               i = CFArrayGetFirstIndexOfValue(S_preconfigured, CFRangeMake(0, n), watched);
+               if (i != kCFNotFound) {
+                   CFArrayRemoveValueAtIndex(S_preconfigured, i);
+                   if (CFArrayGetCount(S_preconfigured) == 0) {
+                       CFRelease(S_preconfigured);
+                       S_preconfigured = NULL;
+                   }
+                   updated = TRUE;
+               }
+           }
+
+           break;
+       }
+
+       default :
+           return;
+    }
+
+    if (updated) {
+       sharePreconfigured();
+    }
+
+    return;
+}
+
+static void
+updatePreConfiguredInterfaces(CFArrayRef interfaces)
+{
+    CFIndex    n;
+    Boolean    updated = FALSE;
+
+    n = (interfaces != NULL) ? CFArrayGetCount(interfaces) : 0;
+    for (CFIndex i = 0; i < n; i++) {
+       SCNetworkInterfaceRef   interface;
+
+       interface = CFArrayGetValueAtIndex(interfaces, i);
+       if (_SCNetworkInterfaceIsApplePreconfigured(interface)) {
+           CFDataRef   watched;
+
+           watched = watcherCreate(interface, preconfiguredInterfaceUpdated);
+           if (watched != NULL) {
+               SC_log(LOG_INFO, "watching [pre-configured] interface: %@",
+                      SCNetworkInterfaceGetBSDName(interface));
+
+               if (S_preconfigured == NULL) {
+                   S_preconfigured = CFArrayCreateMutable(NULL, 0, &kCFTypeArrayCallBacks);
+               }
+               CFArrayAppendValue(S_preconfigured, watched);
+               updated = TRUE;
+           }
+       }
+    }
+
+    if (updated) {
+       sharePreconfigured();
+    }
+
+    return;
+}
+
+
 #pragma mark -
 #pragma mark Interface naming
 
@@ -2725,6 +2830,9 @@ nameInterfaces(CFMutableArrayRef if_list)
 }
 
 #if    !TARGET_OS_IPHONE
+
+#define INSTALL_ENVIRONMENT    "__OSINSTALL_ENVIRONMENT"
+
 static Boolean
 isRecoveryOS()
 {
@@ -2732,12 +2840,12 @@ isRecoveryOS()
     static dispatch_once_t  once;
 
     /*
-     * We check to see if the UserEventAgent daemon is present.  If not, then
-     * we are most likely booted into the Recovery OS with no "SCMonitor"
-     * [UserEventAgent] plugin.
+     * We check to see if the __OSINSTALL_ENVIRONMENT env var is present.  If
+     * so, then we are most likely booted into the Recovery OS with no [Aqua]
+     * "SCMonitor" [UserEventAgent] plugin.
      */
     dispatch_once(&once, ^{
-       if ((access("/usr/libexec/UserEventAgent", X_OK) == -1) && (errno == ENOENT)) {
+       if (getenv(INSTALL_ENVIRONMENT) != NULL) {
            isRecovery = TRUE;
        }
 
@@ -2815,113 +2923,6 @@ updateNetworkConfiguration(CFArrayRef if_list)
 }
 #endif // !TARGET_OS_IPHONE
 
-static void
-sharePreconfigured()
-{
-    CFIndex    n;
-
-    n = (S_preconfigured != NULL) ? CFArrayGetCount(S_preconfigured) : 0;
-    if (n > 0) {
-       CFMutableArrayRef       preconfigured;
-
-       preconfigured = CFArrayCreateMutable(NULL, 0, &kCFTypeArrayCallBacks);
-
-       for (CFIndex i = 0; i < n; i++) {
-           CFStringRef bsdName;
-           CFDataRef   watched         = CFArrayGetValueAtIndex(S_preconfigured, i);
-           WatchedInfo *watchedInfo    = (WatchedInfo *)(void *)CFDataGetBytePtr(watched);
-
-           bsdName = SCNetworkInterfaceGetBSDName(watchedInfo->interface);
-           CFArrayAppendValue(preconfigured, bsdName);
-       }
-
-       CFDictionarySetValue(S_state, kInterfaceNamerKey_PreConfiguredInterfaces, preconfigured);
-       CFRelease(preconfigured);
-    } else {
-       CFDictionaryRemoveValue(S_state, kInterfaceNamerKey_PreConfiguredInterfaces);
-    }
-
-    updateStore();
-
-    return;
-}
-
-static void
-preconfiguredInterfaceUpdated(CFDataRef watched, natural_t messageType, void *messageArgument)
-{
-    Boolean    updated         = FALSE;
-    WatchedInfo        *watchedInfo    = (WatchedInfo *)(void *)CFDataGetBytePtr(watched);
-
-#pragma unused(messageArgument)
-    switch (messageType) {
-       case kIOMessageServiceIsTerminated : {          // if [locked] interface yanked
-           SC_log(LOG_INFO, "[pre-configured] interface removed: %@",
-                  SCNetworkInterfaceGetBSDName(watchedInfo->interface));
-
-           if (S_preconfigured != NULL) {
-               CFIndex i;
-               CFIndex n       = CFArrayGetCount(S_preconfigured);
-
-               i = CFArrayGetFirstIndexOfValue(S_preconfigured, CFRangeMake(0, n), watched);
-               if (i != kCFNotFound) {
-                   CFArrayRemoveValueAtIndex(S_preconfigured, i);
-                   if (CFArrayGetCount(S_preconfigured) == 0) {
-                       CFRelease(S_preconfigured);
-                       S_preconfigured = NULL;
-                   }
-                   updated = TRUE;
-               }
-           }
-
-           break;
-       }
-
-       default :
-           return;
-    }
-
-    if (updated) {
-       sharePreconfigured();
-    }
-
-    return;
-}
-
-static void
-updatePreConfiguredInterfaces(CFArrayRef interfaces)
-{
-    CFIndex    n;
-    Boolean    updated = FALSE;
-
-    n = (interfaces != NULL) ? CFArrayGetCount(interfaces) : 0;
-    for (CFIndex i = 0; i < n; i++) {
-       SCNetworkInterfaceRef   interface;
-
-       interface = CFArrayGetValueAtIndex(interfaces, i);
-       if (_SCNetworkInterfaceIsApplePreconfigured(interface)) {
-           CFDataRef   watched;
-
-           watched = watcherCreate(interface, preconfiguredInterfaceUpdated);
-           if (watched != NULL) {
-               SC_log(LOG_INFO, "watching [pre-configured] interface: %@",
-                      SCNetworkInterfaceGetBSDName(interface));
-
-               if (S_preconfigured == NULL) {
-                   S_preconfigured = CFArrayCreateMutable(NULL, 0, &kCFTypeArrayCallBacks);
-               }
-               CFArrayAppendValue(S_preconfigured, watched);
-               updated = TRUE;
-           }
-       }
-    }
-
-    if (updated) {
-       sharePreconfigured();
-    }
-
-    return;
-}
-
 static void
 updateInterfaces()
 {
@@ -2949,7 +2950,9 @@ updateInterfaces()
     /*
      * Update the list of "trust required" interfaces
      */
-    updateTrustRequiredInterfaces(S_iflist);
+    if (haveLockdown()) {
+       updateTrustRequiredInterfaces(S_iflist);
+    }
 #endif // TARGET_OS_IPHONE
 
     if (isQuiet()) {
@@ -3033,14 +3036,8 @@ static void
 interfaceArrivalCallback(void *refcon, io_iterator_t iter)
 {
 #pragma unused(refcon)
-    os_activity_t      activity;
     io_object_t                obj;
 
-    activity = os_activity_create("process new network interface",
-                                 OS_ACTIVITY_CURRENT,
-                                 OS_ACTIVITY_FLAG_DEFAULT);
-    os_activity_scope(activity);
-
     while ((obj = IOIteratorNext(iter)) != MACH_PORT_NULL) {
        SCNetworkInterfaceRef   interface;
 
@@ -3057,8 +3054,6 @@ interfaceArrivalCallback(void *refcon, io_iterator_t iter)
 
     updateInterfaces();
 
-    os_release(activity);
-
     return;
 }
 
@@ -3075,15 +3070,9 @@ static void
 stackCallback(void *refcon, io_iterator_t iter)
 {
 #pragma unused(refcon)
-    os_activity_t      activity;
     kern_return_t      kr;
     io_object_t                stack;
 
-    activity = os_activity_create("process IONetworkStack",
-                                 OS_ACTIVITY_CURRENT,
-                                 OS_ACTIVITY_FLAG_DEFAULT);
-    os_activity_scope(activity);
-
     stack = IOIteratorNext(iter);
     if (stack == MACH_PORT_NULL) {
        goto error;
@@ -3119,8 +3108,6 @@ stackCallback(void *refcon, io_iterator_t iter)
        IOObjectRelease(stack);
     }
 
-    os_release(activity);
-
     return;
 }
 
@@ -3132,18 +3119,11 @@ quietCallback(void              *refcon,
 {
 #pragma unused(refcon)
 #pragma unused(service)
-    os_activity_t      activity;
-
     if (messageArgument != NULL) {
        // if not yet quiet
        return;
     }
 
-    activity = os_activity_create("process IOKit quiet",
-                                 OS_ACTIVITY_CURRENT,
-                                 OS_ACTIVITY_FLAG_DEFAULT);
-    os_activity_scope(activity);
-
     if (messageType == kIOMessageServiceBusyStateChange) {
        addTimestamp(S_state, kInterfaceNamerKey_Quiet);
        SC_log(LOG_INFO, "IOKit quiet");
@@ -3151,7 +3131,7 @@ quietCallback(void                *refcon,
 
     if (S_connect == MACH_PORT_NULL) {
        SC_log(LOG_ERR, "No network stack object");
-       goto done;
+       return;
     }
 
     if (S_quiet != MACH_PORT_NULL) {
@@ -3173,10 +3153,6 @@ quietCallback(void               *refcon,
        updateStore();
     }
 
-  done :
-
-    os_release(activity);
-
     return;
 }
 
@@ -3309,13 +3285,6 @@ timerCallback(CFRunLoopTimerRef  timer, void *info)
 {
 #pragma unused(timer)
 #pragma unused(info)
-    os_activity_t      activity;
-
-    activity = os_activity_create("process IOKit timer",
-                                 OS_ACTIVITY_CURRENT,
-                                 OS_ACTIVITY_FLAG_DEFAULT);
-    os_activity_scope(activity);
-
     // We've been waiting for IOKit to quiesce and it just
     // hasn't happenned.  Time to just move on!
     addTimestamp(S_state, kInterfaceNamerKey_Timeout);
@@ -3329,8 +3298,6 @@ timerCallback(CFRunLoopTimerRef   timer, void *info)
     addTimestamp(S_state, CFSTR("*TIMEOUT&NAMED*"));
     updateStore();
 
-    os_release(activity);
-
     return;
 }
 
@@ -3658,7 +3625,7 @@ main(int argc, char ** argv)
     exit(0);
     return 0;
 }
-#endif /* MAIN */
+#endif /* MAIN */
 
 #ifdef TEST_SNAPSHOT
 int
index 96d2b1ac75bda364b5368f2cbd59e01f7bbcc460..8e3020d912d55e3d3d562817b71df7d5660a0803 100644 (file)
        <key>CFBundlePackageType</key>
        <string>BNDL</string>
        <key>CFBundleShortVersionString</key>
-       <string>1.17</string>
+       <string>1.19</string>
        <key>CFBundleSignature</key>
        <string>????</string>
        <key>CFBundleVersion</key>
-       <string>1.17</string>
+       <string>1.19</string>
        <key>Requires</key>
        <array>
                <string>com.apple.SystemConfiguration.InterfaceNamer</string>
index c1b136b886a822a18cc97b411e2bb2abe3eaf2e3..27cbe055b74bac34c1651549269cbfad461f05f0 100644 (file)
  */
 
 #include "eventmon.h"
-#include "cache.h"
 #include "ev_dlil.h"
 #include "ev_extra.h"
 
-#ifndef kSCEntNetIdleRoute
-#define kSCEntNetIdleRoute       CFSTR("IdleRoute")
-#endif  /* kSCEntNetIdleRoute */
-
 static CFStringRef
 create_interface_cfstring(const char * if_name)
 {
@@ -83,7 +78,7 @@ copy_entity(CFStringRef key)
        CFDictionaryRef         dict;
        CFMutableDictionaryRef  newDict         = NULL;
 
-       dict = cache_SCDynamicStoreCopyValue(store, key);
+       dict = SCDynamicStoreCopyValue(store, key);
        newDict = copy_mutable_dictionary(dict);
        if (dict != NULL) {
                CFRelease(dict);
@@ -103,7 +98,7 @@ interface_update_status(const char *if_name,
        CFDictionaryRef         oldDict;
 
        key = create_interface_key(interface);
-       oldDict = cache_SCDynamicStoreCopyValue(store, key);
+       oldDict = SCDynamicStoreCopyValue(store, key);
        if (oldDict != NULL && isA_CFDictionary(oldDict) == NULL) {
                CFRelease(oldDict);
                oldDict = NULL;
@@ -135,14 +130,14 @@ interface_update_status(const char *if_name,
                    || oldDict == NULL
                    || !CFEqual(oldDict, newDict)) {
                        SC_log(LOG_DEBUG, "Update interface link status: %s: %@", if_name, newDict);
-                       cache_SCDynamicStoreSetValue(store, key, newDict);
+                       SCDynamicStoreSetValue(store, key, newDict);
                }
        } else {
                /* remove the value */
                if (oldDict != NULL) {
                        SC_log(LOG_DEBUG, "Update interface link status: %s: <removed>", if_name);
                }
-               cache_SCDynamicStoreRemoveValue(store, key);
+               SCDynamicStoreRemoveValue(store, key);
        }
 
        CFRelease(key);
@@ -194,10 +189,10 @@ interface_update_quality_metric(const char *if_name,
        /* update status */
        if (CFDictionaryGetCount(newDict) > 0) {
                SC_log(LOG_DEBUG, "Update interface link quality: %s: %@", if_name, newDict);
-               cache_SCDynamicStoreSetValue(store, key, newDict);
+               SCDynamicStoreSetValue(store, key, newDict);
        } else {
                SC_log(LOG_DEBUG, "Update interface link quality: %s: <unknown>", if_name);
-               cache_SCDynamicStoreRemoveValue(store, key);
+               SCDynamicStoreRemoveValue(store, key);
        }
 
        CFRelease(interface);
@@ -220,7 +215,7 @@ link_update_quality_metric(const char *if_name)
                goto done;
        }
 
-       bzero((char *)&ifr, sizeof(ifr));
+       memset((char *)&ifr, 0, sizeof(ifr));
        snprintf(ifr.ifr_name, sizeof(ifr.ifr_name), "%s", if_name);
 
        if (ioctl(sock, SIOCGIFLINKQUALITYMETRIC, (caddr_t)&ifr) != -1) {
@@ -292,7 +287,7 @@ interface_update_link_issues(const char             *if_name,
        CFRelease(timeStamp);
 
        SC_log(LOG_DEBUG, "Update interface link issues: %s: %@", if_name, newDict);
-       cache_SCDynamicStoreSetValue(store, key, newDict);
+       SCDynamicStoreSetValue(store, key, newDict);
        CFRelease(interface);
        CFRelease(newDict);
        CFRelease(key);
@@ -316,7 +311,7 @@ interface_detaching(const char *if_name)
        newDict = copy_entity(key);
        CFDictionarySetValue(newDict, kSCPropNetLinkDetaching,
                             kCFBooleanTrue);
-       cache_SCDynamicStoreSetValue(store, key, newDict);
+       SCDynamicStoreSetValue(store, key, newDict);
        CFRelease(interface);
        CFRelease(newDict);
        CFRelease(key);
@@ -347,22 +342,22 @@ interface_remove(const char *if_name)
        interface = create_interface_cfstring(if_name);
 
        key = create_interface_key(interface);
-       cache_SCDynamicStoreRemoveValue(store, key);
+       SCDynamicStoreRemoveValue(store, key);
        CFRelease(key);
 
        key = create_nat64_key(interface);
-       cache_SCDynamicStoreRemoveValue(store, key);
+       SCDynamicStoreRemoveValue(store, key);
        CFRelease(key);
 
 #ifdef KEV_DL_LINK_QUALITY_METRIC_CHANGED
        key = create_linkquality_key(interface);
-       cache_SCDynamicStoreRemoveValue(store, key);
+       SCDynamicStoreRemoveValue(store, key);
        CFRelease(key);
 #endif /* KEV_DL_LINK_QUALITY_METRIC_CHANGED */
 
 #ifdef KEV_DL_ISSUES
        key = create_link_issues_key(interface);
-       cache_SCDynamicStoreRemoveValue(store, key);
+       SCDynamicStoreRemoveValue(store, key);
        CFRelease(key);
 #endif /* KEV_DL_ISSUES */
 
@@ -385,7 +380,7 @@ S_link_update_status(const char *if_name, CFStringRef interface, boolean_t attac
        }
 
        /* get "Link" */
-       bzero((char *)&ifm, sizeof(ifm));
+       memset((char *)&ifm, 0, sizeof(ifm));
        (void) strlcpy(ifm.ifm_name, if_name, sizeof(ifm.ifm_name));
 
        if (ioctl(sock, SIOCGIFXMEDIA, (caddr_t)&ifm) == -1) {
@@ -447,14 +442,14 @@ link_update_status_if_missing(const char * if_name)
 
        interface = create_interface_cfstring(if_name);
        key = create_interface_key(interface);
-       dict = cache_SCDynamicStoreCopyValue(store, key);
+       dict = SCDynamicStoreCopyValue(store, key);
        if (dict != NULL) {
                /* it's already present, don't update */
                CFRelease(dict);
                goto done;
        }
        S_link_update_status(if_name, interface, FALSE, FALSE);
-       dict = cache_SCDynamicStoreCopyValue(store, key);
+       dict = SCDynamicStoreCopyValue(store, key);
        if (dict != NULL) {
                /* our action made it appear */
                messages_add_msg_with_arg("added missing link status", if_name);
@@ -476,7 +471,7 @@ interfaceListCopy(void)
 
        cacheKey = SCDynamicStoreKeyCreateNetworkInterface(NULL,
                                                           kSCDynamicStoreDomainState);
-       dict = cache_SCDynamicStoreCopyValue(store, cacheKey);
+       dict = SCDynamicStoreCopyValue(store, cacheKey);
        CFRelease(cacheKey);
        if (dict != NULL) {
                if (isA_CFDictionary(dict) != NULL) {
@@ -505,7 +500,7 @@ interfaceListUpdate(CFArrayRef ifList)
 
        cacheKey = SCDynamicStoreKeyCreateNetworkInterface(NULL,
                                                           kSCDynamicStoreDomainState);
-       dict = cache_SCDynamicStoreCopyValue(store, cacheKey);
+       dict = SCDynamicStoreCopyValue(store, cacheKey);
        if (dict != NULL && isA_CFDictionary(dict) == NULL) {
                CFRelease(dict);
                dict = NULL;
@@ -517,7 +512,7 @@ interfaceListUpdate(CFArrayRef ifList)
                                          1,
                                          &kCFTypeDictionaryKeyCallBacks,
                                          &kCFTypeDictionaryValueCallBacks);
-               cache_SCDynamicStoreSetValue(store, cacheKey, dict);
+               SCDynamicStoreSetValue(store, cacheKey, dict);
                CFRelease(dict);
 
        }
@@ -527,7 +522,7 @@ interfaceListUpdate(CFArrayRef ifList)
                newDict = CFDictionaryCreateMutableCopy(NULL, 0, dict);
                CFRelease(dict);
                CFDictionarySetValue(newDict, kSCPropNetInterfaces, ifList);
-               cache_SCDynamicStoreSetValue(store, cacheKey, newDict);
+               SCDynamicStoreSetValue(store, cacheKey, newDict);
                CFRelease(newDict);
        }
        CFRelease(cacheKey);
@@ -616,6 +611,26 @@ link_remove(const char *if_name)
 }
 
 
+__private_extern__
+void
+interface_update_delegation(const char *if_name)
+{
+       CFStringRef             interface;
+       CFStringRef             key;
+
+       interface = create_interface_cfstring(if_name);
+       key = SCDynamicStoreKeyCreateNetworkInterfaceEntity(NULL,
+                                                           kSCDynamicStoreDomainState,
+                                                           interface,
+                                                           kSCEntNetInterfaceDelegation);
+       SC_log(LOG_DEBUG, "Post interface delegation change: %s", if_name);
+       SCDynamicStoreNotifyValue(store, key);
+       CFRelease(key);
+       CFRelease(interface);
+       return;
+}
+
+
 #ifdef KEV_DL_IF_IDLE_ROUTE_REFCNT
 #define INVALID_SOCKET_REF     -1
 static
@@ -630,7 +645,7 @@ socket_reference_count(const char* if_name) {
                return (ref);
        }
 
-       bzero((char *)&ifr, sizeof(ifr));
+       memset((char *)&ifr, 0, sizeof(ifr));
        snprintf(ifr.ifr_name, sizeof(ifr.ifr_name), "%s", if_name);
 
        if (ioctl(s, SIOCGIFGETRTREFCNT, (caddr_t)&ifr) != -1) {
@@ -664,7 +679,7 @@ interface_update_idle_state(const char *if_name)
                                                            kSCEntNetIdleRoute);
 
        SC_log(LOG_DEBUG, "Post interface idle: %s", if_name);
-       cache_SCDynamicStoreNotifyValue(store, key);
+       SCDynamicStoreNotifyValue(store, key);
        CFRelease(key);
        CFRelease(interface);
        return;
index deda1406244f2e1de28a82b76d5038c59976e4b5..1deda21e12cd90db0064a4d00c32fdd3acfb06e9 100644 (file)
@@ -1,15 +1,15 @@
 /*
- * Copyright (c) 2002-2015 Apple Inc. All rights reserved.
+ * Copyright (c) 2002-2015, 2019 Apple Inc. All rights reserved.
  *
  * @APPLE_LICENSE_HEADER_START@
- * 
+ *
  * This file contains Original Code and/or Modifications of Original Code
  * as defined in and that are subject to the Apple Public Source License
  * Version 2.0 (the 'License'). You may not use this file except in
  * compliance with the License. Please obtain a copy of the License at
  * http://www.opensource.apple.com/apsl/ and read it before using this
  * file.
- * 
+ *
  * The Original Code and all software distributed under the License are
  * distributed on an 'AS IS' basis, WITHOUT WARRANTY OF ANY KIND, EITHER
  * EXPRESS OR IMPLIED, AND APPLE HEREBY DISCLAIMS ALL SUCH WARRANTIES,
@@ -17,7 +17,7 @@
  * FITNESS FOR A PARTICULAR PURPOSE, QUIET ENJOYMENT OR NON-INFRINGEMENT.
  * Please see the License for the specific language governing rights and
  * limitations under the License.
- * 
+ *
  * @APPLE_LICENSE_HEADER_END@
  */
 
@@ -36,6 +36,8 @@ __BEGIN_DECLS
 
 void   interface_detaching             (const char *if_name);
 
+void   interface_update_delegation     (const char *if_name);
+
 void   interface_update_idle_state     (const char *if_name);
 
 void   interface_update_link_issues    (const char     *if_name,
index 5c42ec323baa98a6048b7eb481f38f266db45392..3af8018e0b89d35e3d73a774f6cf7102420aeee2 100644 (file)
 
 
 
+#if    TARGET_OS_IPHONE && !TARGET_OS_SIMULATOR
+static Boolean
+haveMobileWiFi()
+{
+       void * volatile fn_WeakFunction = (void *)&(WiFiManagerClientCreate);
+       Boolean         haveFramework;
+
+       haveFramework = (fn_WeakFunction != NULL) ? TRUE : FALSE;
+       return haveFramework;
+}
+#endif // TARGET_OS_IPHONE && !TARGET_OS_SIMULATOR
+
+
 static CFBooleanRef
 is_expensive(SCNetworkInterfaceRef _Nonnull interface)
 {
@@ -77,11 +90,11 @@ ifexpensive_set(int s, const char * name, uint32_t expensive)
        struct ifreq    ifr;
        int             ret;
 
-       bzero(&ifr, sizeof(ifr));
+       memset(&ifr, 0, sizeof(ifr));
        strlcpy(ifr.ifr_name, name, sizeof(ifr.ifr_name));
        ifr.ifr_expensive = expensive;
        ret = ioctl(s, SIOCSIFEXPENSIVE, &ifr);
-       if (ret == -1) {
+       if ((ret == -1) && (errno != EPERM)) {
                SC_log(LOG_ERR, "%s: ioctl(SIOCSIFEXPENSIVE) failed: %s", name, strerror(errno));
        }
 
index 109b47e906ffb201792907610e0817d20104b7a6..55c4cf294944f0019418e267838f9d3267012141 100644 (file)
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2002-2017 Apple Inc. All rights reserved.
+ * Copyright (c) 2002-2018 Apple Inc. All rights reserved.
  *
  * @APPLE_LICENSE_HEADER_START@
  *
  */
 
 #include "eventmon.h"
-#include "cache.h"
 #include "ev_ipv4.h"
 
-#ifndef        kSCEntNetIPv4ARPCollision
-#define        kSCEntNetIPv4ARPCollision       CFSTR("IPv4ARPCollision")
-#endif /* kSCEntNetIPv4ARPCollision */
-
-#if    !TARGET_OS_IPHONE
-#ifndef        kSCEntNetIPv4PortInUse
-#define        kSCEntNetIPv4PortInUse          CFSTR("PortInUse")
-#endif /* kSCEntNetIPv4PortInUse */
-#endif /* !TARGET_OS_IPHONE */
-
 #define IP_FORMAT      "%d.%d.%d.%d"
 #define IP_CH(ip, i)   (((u_char *)(ip))[i])
 #define IP_LIST(ip)    IP_CH(ip,0),IP_CH(ip,1),IP_CH(ip,2),IP_CH(ip,3)
@@ -80,7 +69,7 @@ copyIF(CFStringRef key, CFMutableDictionaryRef oldIFs, CFMutableDictionaryRef ne
        if (CFDictionaryGetValueIfPresent(newIFs, key, (const void **)&dict)) {
                newDict = CFDictionaryCreateMutableCopy(NULL, 0, dict);
        } else {
-               dict = cache_SCDynamicStoreCopyValue(store, key);
+               dict = SCDynamicStoreCopyValue(store, key);
                if (dict) {
                        CFDictionarySetValue(oldIFs, key, dict);
                        if (isA_CFDictionary(dict)) {
@@ -117,16 +106,16 @@ updateStore(const void *key, const void *value, void *context)
        if (!dict || !CFEqual(dict, newDict)) {
                if (CFDictionaryGetCount(newDict) > 0) {
                        SC_log(LOG_DEBUG, "Update interface configuration: %@: %@", key, newDict);
-                       cache_SCDynamicStoreSetValue(store, key, newDict);
+                       SCDynamicStoreSetValue(store, key, newDict);
                } else if (dict) {
                        CFDictionaryRef         oldDict;
 
-                       oldDict = cache_SCDynamicStoreCopyValue(store, key);
+                       oldDict = SCDynamicStoreCopyValue(store, key);
                        if (oldDict != NULL) {
                                SC_log(LOG_DEBUG, "Update interface configuration: %@: <removed>", key);
                                CFRelease(oldDict);
                        }
-                       cache_SCDynamicStoreRemoveValue(store, key);
+                       SCDynamicStoreRemoveValue(store, key);
                }
                network_changed = TRUE;
        }
@@ -269,7 +258,7 @@ ipv4_arp_collision(const char *if_name, struct in_addr ip_addr, int hw_len, cons
                                 (i == 0) ? "/" : ":", hw_addr_bytes[i]);
        }
        SC_log(LOG_DEBUG, "Post ARP collision: %@", key);
-       cache_SCDynamicStoreNotifyValue(store, key);
+       SCDynamicStoreNotifyValue(store, key);
        CFRelease(key);
        CFRelease(prefix);
        CFRelease(if_name_cf);
@@ -291,7 +280,7 @@ ipv4_port_in_use(uint16_t port, pid_t req_pid)
                                      kSCEntNetIPv4PortInUse,
                                      port, req_pid);
        SC_log(LOG_DEBUG, "Post port-in-use: %@", key);
-       cache_SCDynamicStoreNotifyValue(store, key);
+       SCDynamicStoreNotifyValue(store, key);
        CFRelease(key);
        return;
 }
@@ -311,7 +300,7 @@ interface_notify_entity(const char * if_name, const char * type, CFStringRef ent
                                                            entity);
        CFRelease(if_name_cf);
        SC_log(LOG_DEBUG, "Post %s: %@", type, key);
-       cache_SCDynamicStoreNotifyValue(store, key);
+       SCDynamicStoreNotifyValue(store, key);
        CFRelease(key);
        return;
 }
index 5ab6bdbb1dc769854efbb62f95d641c5148e1860..4b3e6bc7015747ea94935c1b566af1197905d00c 100644 (file)
@@ -30,7 +30,6 @@
 
 
 #include "eventmon.h"
-#include "cache.h"
 #include "ev_ipv6.h"
 
 #define s6_addr16 __u6_addr.__u6_addr16
@@ -196,7 +195,7 @@ copyIF(CFStringRef key, CFMutableDictionaryRef oldIFs, CFMutableDictionaryRef ne
        if (CFDictionaryGetValueIfPresent(newIFs, key, (const void **)&dict)) {
                newDict = CFDictionaryCreateMutableCopy(NULL, 0, dict);
        } else {
-               dict = cache_SCDynamicStoreCopyValue(store, key);
+               dict = SCDynamicStoreCopyValue(store, key);
                if (dict) {
                        CFDictionarySetValue(oldIFs, key, dict);
                        if (isA_CFDictionary(dict)) {
@@ -236,16 +235,16 @@ updateStore(const void *key, const void *value, void *context)
        if (!dict || !CFEqual(dict, newDict)) {
                if (CFDictionaryGetCount(newDict) > 0) {
                        SC_log(LOG_DEBUG, "Update interface configuration: %@: %@", key, newDict);
-                       cache_SCDynamicStoreSetValue(store, key, newDict);
+                       SCDynamicStoreSetValue(store, key, newDict);
                } else if (dict) {
                        CFDictionaryRef         oldDict;
 
-                       oldDict = cache_SCDynamicStoreCopyValue(store, key);
+                       oldDict = SCDynamicStoreCopyValue(store, key);
                        if (oldDict != NULL) {
                                SC_log(LOG_DEBUG, "Update interface configuration: %@: <removed>", key);
                                CFRelease(oldDict);
                        }
-                       cache_SCDynamicStoreRemoveValue(store, key);
+                       SCDynamicStoreRemoveValue(store, key);
                }
                network_changed = TRUE;
        }
@@ -336,7 +335,7 @@ interface_update_ipv6(struct ifaddrs *ifap, const char *if_name)
                        }
                }
 
-               bzero((char *)&ifr6, sizeof(ifr6));
+               memset((char *)&ifr6, 0, sizeof(ifr6));
                strlcpy(ifr6.ifr_name, ifa->ifa_name, sizeof(ifr6.ifr_name));
                ifr6.ifr_addr = *sin6;
                if (ioctl(sock, SIOCGIFAFLAG_IN6, &ifr6) == -1) {
@@ -437,7 +436,7 @@ ipv6_duplicated_address(const char * if_name, const struct in6_addr * addr,
            CFStringAppendFormat(key, NULL, CFSTR("%s%02x"),
                                 (i == 0) ? "/" : ":", hw_addr_bytes[i]);
        }
-       cache_SCDynamicStoreNotifyValue(store, key);
+       SCDynamicStoreNotifyValue(store, key);
        CFRelease(key);
        CFRelease(prefix);
        CFRelease(if_name_cf);
@@ -457,7 +456,7 @@ nat64_prefix_request(const char *if_name)
                                                            kSCEntNetNAT64PrefixRequest);
        CFRelease(if_name_cf);
        SC_log(LOG_DEBUG, "Post NAT64 prefix request: %@", key);
-       cache_SCDynamicStoreNotifyValue(store, key);
+       SCDynamicStoreNotifyValue(store, key);
        CFRelease(key);
 }
 
@@ -474,6 +473,6 @@ ipv6_router_expired(const char *if_name)
                                                            kSCEntNetIPv6RouterExpired);
        CFRelease(if_name_cf);
        SC_log(LOG_DEBUG, "Post IPv6 Router Expired: %@", key);
-       cache_SCDynamicStoreNotifyValue(store, key);
+       SCDynamicStoreNotifyValue(store, key);
        CFRelease(key);
 }
index 9c3d7b4cd7bb26cc0be4480f9daa46f20e707944..9e0a245d27ccf7e4ca6a79705457da0737842fe2 100644 (file)
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2000-2017 Apple Inc. All rights reserved.
+ * Copyright (c) 2000-2019 Apple Inc. All rights reserved.
  *
  * @APPLE_LICENSE_HEADER_START@
  *
  */
 
 #include "eventmon.h"
-#include "cache.h"
 #include "ev_dlil.h"
 #include "ev_ipv4.h"
 #include "ev_ipv6.h"
 #include <notify.h>
 #include <sys/sysctl.h>
 #include <sys/kern_event.h>
-#if __has_include(<nw/private.h>)
 #include <nw/private.h>
-#else // __has_include(<nw/private.h>)
-#include <network/config.h>
-#endif // __has_include(<nw/private.h>)
 #include <netinet6/nd6.h>
 
 static dispatch_queue_t                        S_kev_queue;
@@ -452,6 +447,20 @@ processEvent_Apple_Network(struct kern_event_msg *ev_msg)
                                }
 #endif // KEV_DL_IF_IDLE_ROUTE_REFCNT
 
+                               case KEV_DL_IFDELEGATE_CHANGED: {
+                                       /*
+                                        * interface delegation changed
+                                        */
+                                       if (dataLen < sizeof(*ev)) {
+                                               handled = FALSE;
+                                               break;
+                                       }
+                                       copy_if_name(ev, ifr_name, sizeof(ifr_name));
+                                       SC_log(LOG_INFO, "Process interface delegation change: %s", (char *)ifr_name);
+                                       interface_update_delegation(ifr_name);
+                                       break;
+                               }
+
                                case KEV_DL_LINK_OFF :
                                case KEV_DL_LINK_ON :
                                        /*
@@ -485,7 +494,7 @@ processEvent_Apple_Network(struct kern_event_msg *ev_msg)
                                                                   lqm_data->link_quality_metric);
                                        break;
                                }
-#endif  // KEV_DL_LINK_QUALITY_METRIC_CHANGED
+#endif // KEV_DL_LINK_QUALITY_METRIC_CHANGED
 
 #ifdef KEV_DL_ISSUES
                                case KEV_DL_ISSUES: {
@@ -613,7 +622,7 @@ eventCallback(int so)
                return FALSE;
        }
 
-       cache_open();
+       _SCDynamicStoreCacheOpen(store);
 
        while (offset < status) {
                if ((offset + (ssize_t)ev_msg->total_size) > status) {
@@ -639,8 +648,8 @@ eventCallback(int so)
                ev_msg = (struct kern_event_msg *)(void *)&buf.bytes[offset];
        }
 
-       cache_write(store);
-       cache_close();
+       _SCDynamicStoreCacheCommitChanges(store);
+       _SCDynamicStoreCacheClose(store);
        post_network_changed();
        messages_post();
 
@@ -744,10 +753,10 @@ check_for_new_interfaces(void * context)
 
        /* update KEV driven content in case a message got dropped */
        snprintf(msg, sizeof(msg), "update %d (of %d)", count, MAX_TIMER_COUNT);
-       cache_open();
+       _SCDynamicStoreCacheOpen(store);
        update_interfaces(msg, FALSE);
-       cache_write(store);
-       cache_close();
+       _SCDynamicStoreCacheCommitChanges(store);
+       _SCDynamicStoreCacheClose(store);
        messages_post();
 
        /* schedule the next timer, if needed */
@@ -766,11 +775,11 @@ prime(void)
 {
        SC_log(LOG_DEBUG, "prime() called");
 
-       cache_open();
+       _SCDynamicStoreCacheOpen(store);
        messages_init();
        update_interfaces("prime", TRUE);
-       cache_write(store);
-       cache_close();
+       _SCDynamicStoreCacheCommitChanges(store);
+       _SCDynamicStoreCacheClose(store);
 
        network_changed = TRUE;
        post_network_changed();
@@ -870,21 +879,13 @@ load_KernelEventMonitor(CFBundleRef bundle, Boolean bundleVerbose)
                close(so);
        });
        dispatch_source_set_event_handler(S_kev_source, ^{
-               os_activity_t   activity;
                Boolean         ok;
 
-               activity = os_activity_create("processing network kernel events",
-                                             OS_ACTIVITY_CURRENT,
-                                             OS_ACTIVITY_FLAG_DEFAULT);
-               os_activity_scope(activity);
-
                ok = eventCallback(so);
                if (!ok) {
                        SC_log(LOG_ERR, "kernel event monitor disabled");
                        dispatch_source_cancel(S_kev_source);
                }
-
-               os_release(activity);
        });
        // NOTE: dispatch_resume() will be called in prime()
 
index 4990682d7ee3f50d808b0dd116afa9ced65a584d..569e04244c0cbeb7f947f98b33693286a4cb5db6 100644 (file)
@@ -67,14 +67,14 @@ os_log_t
 __log_KernelEventMonitor       (void);
 
 int
-dgram_socket                   (int    domain);
+dgram_socket                   (int            domain);
 
 void
 messages_add_msg_with_arg      (const char     *msg,
                                 const char     *arg);
 
 void
-config_new_interface(const char * ifname);
+config_new_interface           (const char     *ifname);
 
 __END_DECLS
 
index bccd851e2090ef0577cce12b514834ef6c343449..68baee0dfa7bd9b56dd35c3dbea7f6091986873f 100644 (file)
        <key>CFBundlePackageType</key>
        <string>BNDL</string>
        <key>CFBundleShortVersionString</key>
-       <string>1.17</string>
+       <string>1.19</string>
        <key>CFBundleSignature</key>
        <string>????</string>
        <key>CFBundleVersion</key>
-       <string>1.17</string>
+       <string>1.19</string>
        <key>Requires</key>
        <array>
                <string>com.apple.SystemConfiguration.InterfaceNamer</string>
index 5ce1cf61d7a9c72409947ddc451c5e9360ac5fdf..39f84f6d1bfea0e0173b1d26e1db4a5d755272c0 100644 (file)
@@ -37,7 +37,7 @@
 #include <net/if.h>
 #include <net/if_media.h>
 
-#define        SC_LOG_HANDLE           __log_LinkConfiguration()
+#define        SC_LOG_HANDLE           __log_LinkConfiguration
 #define SC_LOG_HANDLE_TYPE     static
 #include "SCNetworkConfigurationInternal.h"
 #include <SystemConfiguration/SCDPlugin.h>             // for _SCDPluginExecCommand
@@ -123,7 +123,7 @@ _SCNetworkInterfaceSetCapabilities(SCNetworkInterfaceRef    interface,
                return TRUE;
        }
 
-       bzero((char *)&ifr, sizeof(ifr));
+       memset((char *)&ifr, 0, sizeof(ifr));
        (void)_SC_cfstring_to_cstring(interfaceName, ifr.ifr_name, sizeof(ifr.ifr_name), kCFStringEncodingASCII);
        ifr.ifr_curcap = cap_current;
        ifr.ifr_reqcap = cap_requested;
@@ -262,7 +262,7 @@ _SCNetworkInterfaceSetMediaOptions(SCNetworkInterfaceRef    interface,
                goto done;
        }
 
-       bzero((char *)&ifm, sizeof(ifm));
+       memset((char *)&ifm, 0, sizeof(ifm));
        (void)_SC_cfstring_to_cstring(interfaceName, ifm.ifm_name, sizeof(ifm.ifm_name), kCFStringEncodingASCII);
 
        if (ioctl(sock, SIOCGIFXMEDIA, (caddr_t)&ifm) == -1) {
@@ -270,8 +270,8 @@ _SCNetworkInterfaceSetMediaOptions(SCNetworkInterfaceRef    interface,
                goto done;
        }
 
-       bzero((char *)&ifr, sizeof(ifr));
-       bcopy(ifm.ifm_name, ifr.ifr_name, sizeof(ifr.ifr_name));
+       memset((char *)&ifr, 0, sizeof(ifr));
+       memcpy(ifr.ifr_name, ifm.ifm_name, sizeof(ifr.ifr_name));
        ifr.ifr_media =  ifm.ifm_current & ~(IFM_NMASK|IFM_TMASK|IFM_OMASK|IFM_GMASK);
        ifr.ifr_media |= newOptions;
 
@@ -426,7 +426,7 @@ _SCNetworkInterfaceSetMTU(SCNetworkInterfaceRef     interface,
        int             ret;
        int             sock;
 
-       bzero((char *)&ifr, sizeof(ifr));
+       memset((char *)&ifr, 0, sizeof(ifr));
        (void)_SC_cfstring_to_cstring(interfaceName, ifr.ifr_name, sizeof(ifr.ifr_name), kCFStringEncodingASCII);
        ifr.ifr_mtu = requested;
 
@@ -662,17 +662,11 @@ static void
 linkConfigChangedCallback(SCDynamicStoreRef store, CFArrayRef changedKeys, void *arg)
 {
 #pragma unused(arg)
-       os_activity_t           activity;
        CFDictionaryRef         changes;
        CFIndex                 i;
        CFIndex                 n;
        static CFStringRef      prefix          = NULL;
 
-       activity = os_activity_create("processing link configuration changes",
-                                     OS_ACTIVITY_CURRENT,
-                                     OS_ACTIVITY_FLAG_DEFAULT);
-       os_activity_scope(activity);
-
        if (prefix == NULL) {
                prefix = SCDynamicStoreKeyCreate(NULL,
                                                 CFSTR("%@/%@/%@/"),
@@ -715,8 +709,6 @@ linkConfigChangedCallback(SCDynamicStoreRef store, CFArrayRef changedKeys, void
                CFRelease(changes);
        }
 
-       os_release(activity);
-
        return;
 }
 
index f23fa3b831e42ff88d2eab4e5a6a319df344b9bb..d4e8af912b2140746a2768c81a9e8693dfd2e034 100644 (file)
        <key>CFBundlePackageType</key>
        <string>BNDL</string>
        <key>CFBundleShortVersionString</key>
-       <string>1.17</string>
+       <string>1.19</string>
        <key>CFBundleSignature</key>
        <string>????</string>
        <key>CFBundleVersion</key>
-       <string>1.17</string>
+       <string>1.19</string>
        <key>Builtin</key>
        <true/>
        <key>Requires</key>
index a8d8ef010cfb514130767657885ef25e8372aa68..23d69a53c5d08662a4e8567dd9142c8671328a2d 100644 (file)
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2000-2008, 2010, 2012-2018 Apple Inc. All rights reserved.
+ * Copyright (c) 2000-2008, 2010, 2012-2019 Apple Inc. All rights reserved.
  *
  * @APPLE_LICENSE_HEADER_START@
  *
@@ -43,7 +43,7 @@
 #include <unistd.h>
 
 
-#define        SC_LOG_HANDLE           __log_PreferencesMonitor()
+#define        SC_LOG_HANDLE           __log_PreferencesMonitor
 #define SC_LOG_HANDLE_TYPE     static
 #include <SystemConfiguration/SystemConfiguration.h>
 #include <SystemConfiguration/SCPrivate.h>
@@ -467,6 +467,7 @@ findInterfaces(CFArrayRef interfaces, CFMutableArrayRef *matched_interfaces, CFM
                        CFRelease(interface);
 
                        updated = TRUE;
+                       break;
                }
        }
 
@@ -718,28 +719,28 @@ static CF_RETURNS_RETAINED CFStringRef
 copyInterfaceUUID(CFStringRef bsdName)
 {
        union {
-               unsigned char   sha1_bytes[CC_SHA1_DIGEST_LENGTH];
+               unsigned char   sha256_bytes[CC_SHA256_DIGEST_LENGTH];
                CFUUIDBytes     uuid_bytes;
        } bytes;
-       CC_SHA1_CTX     ctx;
+       CC_SHA256_CTX   ctx;
        char            if_name[IF_NAMESIZE];
        CFUUIDRef       uuid;
        CFStringRef     uuid_str;
 
        // start with interface name
-       bzero(&if_name, sizeof(if_name));
+       memset(&if_name, 0, sizeof(if_name));
        (void) _SC_cfstring_to_cstring(bsdName,
                                       if_name,
                                       sizeof(if_name),
                                       kCFStringEncodingASCII);
 
-       // create SHA1 hash
-       bzero(&bytes, sizeof(bytes));
-       CC_SHA1_Init(&ctx);
-       CC_SHA1_Update(&ctx,
+       // create SHA256 hash
+       memset(&bytes, 0, sizeof(bytes));
+       CC_SHA256_Init(&ctx);
+       CC_SHA256_Update(&ctx,
                       if_name,
                       sizeof(if_name));
-       CC_SHA1_Final(bytes.sha1_bytes, &ctx);
+       CC_SHA256_Final(bytes.sha256_bytes, &ctx);
 
        // create UUID string
        uuid = CFUUIDCreateFromUUIDBytes(NULL, bytes.uuid_bytes);
@@ -805,7 +806,7 @@ excludeConfigurations(SCPreferencesRef prefs)
                        }
 
                        // remove [excluded] network service from the prefs
-                       SC_log(LOG_NOTICE, "removing network service for %@", bsdName);
+                       SC_log(LOG_NOTICE, "excluding network service for %@", bsdName);
                        ok = SCNetworkSetRemoveService(set, service);
                        if (!ok) {
                                SC_log(LOG_ERR, "SCNetworkSetRemoveService() failed: %s",
@@ -1162,13 +1163,6 @@ updateConfiguration(SCPreferencesRef             prefs,
                    void                        *info)
 {
 #pragma unused(info)
-       os_activity_t   activity;
-
-       activity = os_activity_create("processing [SC] preferences.plist changes",
-                                     OS_ACTIVITY_CURRENT,
-                                     OS_ACTIVITY_FLAG_DEFAULT);
-       os_activity_scope(activity);
-
 #if    !TARGET_OS_IPHONE
        if ((notificationType & kSCPreferencesNotificationCommit) == kSCPreferencesNotificationCommit) {
                SCNetworkSetRef current;
@@ -1204,8 +1198,6 @@ updateConfiguration(SCPreferencesRef              prefs,
 
     done :
 
-       os_release(activity);
-
        return;
 }
 
index a50488cba01b3865af6a9ebc6e2ee40118dcead3..f554c12efc5dc2bc718bba542373f763fe1dda2f 100644 (file)
        <key>CFBundlePackageType</key>
        <string>BNDL</string>
        <key>CFBundleShortVersionString</key>
-       <string>1.17</string>
+       <string>1.19</string>
        <key>CFBundleSignature</key>
        <string>????</string>
        <key>CFBundleVersion</key>
-       <string>1.17</string>
+       <string>1.19</string>
        <key>QoSMarking_AppleAudioVideoCalls_BundleIDs</key>
        <array>
                <string>com.apple.datausage.telephony.ims</string>
index 93d87337a79b3f8590d323d5e0aca1828b3c92ca..3c3a7268cb97a3493e18a58f3a5bcce3e8fc5b26 100644 (file)
        <key>CFBundlePackageType</key>
        <string>BNDL</string>
        <key>CFBundleShortVersionString</key>
-       <string>1.17</string>
+       <string>1.19</string>
        <key>CFBundleSignature</key>
        <string>????</string>
        <key>CFBundleVersion</key>
-       <string>1.17</string>
+       <string>1.19</string>
        <key>QoSMarking_AppleAudioVideoCalls_BundleIDs</key>
        <array>
                <string>com.apple.datausage.telephony.ims</string>
index 07b42c1aff8680ff2dd248ea433e0d9fb7b15e7d..de2afca128d64e5f2070e5d13265b3ea07ac8401 100644 (file)
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2016-2018 Apple Inc. All rights reserved.
+ * Copyright (c) 2016-2019 Apple Inc. All rights reserved.
  *
  * @APPLE_LICENSE_HEADER_START@
  *
 #include <net/if.h>
 #include <net/if_types.h>
 #include <net/necp.h>
+#include <os/overflow.h>
 #include <sys/ioctl.h>
 #include <sys/kern_control.h>
 #include <sys/socket.h>
 #include <sys/sockio.h>
 #include <sys/sys_domain.h>
 
-#define        SC_LOG_HANDLE   __log_QoSMarking()
+#define        SC_LOG_HANDLE   __log_QoSMarking
 #include <SystemConfiguration/SystemConfiguration.h>
 #include <SystemConfiguration/SCPrivate.h>
 #include <SystemConfiguration/SCValidation.h>
@@ -132,7 +133,7 @@ supportsQoSMarking(int s, const char *ifname)
 {
        struct ifreq    ifr;
 
-       bzero(&ifr, sizeof(ifr));
+       memset(&ifr, 0, sizeof(ifr));
        strlcpy(ifr.ifr_name, ifname, sizeof(ifr.ifr_name));
        if (ioctl(s, SIOCGIFTYPE, (caddr_t)&ifr) == -1) {
                SC_log(LOG_NOTICE, "%s: ioctl(SIOCGIFTYPE) failed: %s",
@@ -164,7 +165,7 @@ qosMarkingSetEnabled(int s, const char *ifname, BOOL enabled)
        struct ifreq    ifr;
        int             ret;
 
-       bzero(&ifr, sizeof(ifr));
+       memset(&ifr, 0, sizeof(ifr));
        strlcpy(ifr.ifr_name, ifname, sizeof(ifr.ifr_name));
        ifr.ifr_qosmarking_enabled = enabled ? 1 : 0;
        ret = ioctl(s, SIOCSQOSMARKINGENABLED, &ifr);
@@ -302,6 +303,7 @@ qosMarkingSetEnabled(int s, const char *ifname, BOOL enabled)
 
 - (NSUUID *)copyUUIDForSingleArch:(int)fd
 {
+       uint64_t                bytes   = 0;
        struct mach_header      header;
        NSUUID *                uuid    = nil;
 
@@ -317,6 +319,14 @@ qosMarkingSetEnabled(int s, const char *ifname, BOOL enabled)
                }
        }
 
+       if(os_mul_overflow((uint64_t)header.ncmds, sizeof(struct load_command), &bytes) ||
+          (bytes > header.sizeofcmds)) {
+               SC_log(LOG_ERR, "mach_header error with \".ncmds\" (%llu), \".sizeofcmds\" (%llu)",
+                      (uint64_t)header.ncmds,
+                      (uint64_t)header.sizeofcmds);
+               return nil;
+       }
+
        // Find LC_UUID in the load commands
        for (size_t i = 0; i < header.ncmds; i++) {
                struct load_command     lcmd;
@@ -359,7 +369,7 @@ qosMarkingSetEnabled(int s, const char *ifname, BOOL enabled)
        NSMutableArray *        uuids           = nil;
 
        // For a fat architecture, we need find the section that is closet to the host cpu
-       bzero(&hostinfo, sizeof(hostinfo));
+       memset(&hostinfo, 0, sizeof(hostinfo));
        count = HOST_BASIC_INFO_COUNT;
        kr = host_info(mach_host_self(), HOST_BASIC_INFO, (host_info_t)&hostinfo, &count);
        if (kr != KERN_SUCCESS) {
@@ -1036,16 +1046,10 @@ static void
 qosMarkingConfigChangedCallback(SCDynamicStoreRef store, CFArrayRef changedKeys, void *arg)
 {
 #pragma unused(arg)
-       os_activity_t           activity;
        CFDictionaryRef         changes;
        CFIndex                 n;
        static CFStringRef      prefix          = NULL;
 
-       activity = os_activity_create("processing QoS marking configuration changes",
-                                     OS_ACTIVITY_CURRENT,
-                                     OS_ACTIVITY_FLAG_DEFAULT);
-       os_activity_scope(activity);
-
        if (prefix == NULL) {
                prefix = SCDynamicStoreKeyCreate(NULL,
                                                 CFSTR("%@/%@/%@/"),
@@ -1107,6 +1111,16 @@ qosMarkingConfigChangedCallback(SCDynamicStoreRef store, CFArrayRef changedKeys,
 }
 
 
+static Boolean
+haveNetworkExtensionFramework()
+{
+       Boolean haveFramework;
+
+       haveFramework = ([NEPolicy class] != nil);
+       return haveFramework;
+}
+
+
 __private_extern__
 void
 load_QoSMarking(CFBundleRef bundle, Boolean bundleVerbose)
@@ -1123,6 +1137,10 @@ load_QoSMarking(CFBundleRef bundle, Boolean bundleVerbose)
        SC_log(LOG_DEBUG, "load() called");
        SC_log(LOG_DEBUG, "  bundle ID = %@", CFBundleGetIdentifier(bundle));
 
+       if (!haveNetworkExtensionFramework()) {
+               return;
+       }
+
        // initialize a few globals
        interfacesKey = SCDynamicStoreKeyCreateNetworkInterface(NULL,
                                                                kSCDynamicStoreDomainState);
index 47f1a6b4d4b916e3c81b096b9786c8ca18124c0c..8b4c01b23d7cb7803658fb6fd0f0b07514af9745 100644 (file)
        <key>CFBundlePackageType</key>
        <string>BNDL</string>
        <key>CFBundleShortVersionString</key>
-       <string>1.17</string>
+       <string>1.19</string>
        <key>CFBundleSignature</key>
        <string>????</string>
        <key>CFBundleVersion</key>
-       <string>1.17</string>
+       <string>1.19</string>
 </dict>
 </plist>
index 8c953a46c48262689cc0918fca0bd090d1ea1ad2..4f5cf9b31522eda7c3e55469103cda535fb1e998 100644 (file)
@@ -37,8 +37,6 @@
 #include <dns_sd.h>
 #include <dns_sd_private.h>
 
-#include "cache.h"
-
 #if    TARGET_OS_SIMULATOR && !TARGET_OS_IOSMAC
 
 
@@ -98,7 +96,7 @@ mirror(SCDynamicStoreRef store, CFArrayRef changes, void *info)
        content_sim = SCDynamicStoreCopyMultiple(store_sim, changes, NULL);
 
        // update
-       cache_open();
+       _SCDynamicStoreCacheOpen(store);
        for (i = 0; i < n; i++) {
                CFStringRef             key;
                CFPropertyListRef       val;
@@ -107,21 +105,21 @@ mirror(SCDynamicStoreRef store, CFArrayRef changes, void *info)
                val = (content_host != NULL) ? CFDictionaryGetValue(content_host, key) : NULL;
                if (val != NULL) {
                        // if "host" content changed
-                       cache_SCDynamicStoreSetValue(store_sim, key, val);
+                       SCDynamicStoreSetValue(store_sim, key, val);
                } else {
                        // if no "host" content
                        val = (content_sim != NULL) ? CFDictionaryGetValue(content_sim, key) : NULL;
                        if (val != NULL) {
                                // if we need to remove the "sim" content
-                               cache_SCDynamicStoreRemoveValue(store_sim, key);
+                               SCDynamicStoreRemoveValue(store_sim, key);
                        } else {
                                // if no "sim" content to remove, just notify
-                               cache_SCDynamicStoreNotifyValue(store_sim, key);
+                               SCDynamicStoreNotifyValue(store_sim, key);
                        }
                }
        }
-       cache_write(store_sim);
-       cache_close();
+       _SCDynamicStoreCacheCommitChanges(store_sim);
+       _SCDynamicStoreCacheClose(store);
 
        // cleanup
        if ((info == NULL) && (content_host != NULL)) {
index cf441b0dcc2465d8699473763c45d63870a84391..5d13253ba9debf6fae7fb0084dd49fb3c41b71be 100644 (file)
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2013, 2015-2018 Apple Inc. All rights reserved.
+ * Copyright (c) 2013, 2015-2019 Apple Inc. All rights reserved.
  *
  * @APPLE_LICENSE_HEADER_START@
  *
@@ -70,20 +70,11 @@ static void
 prefs_changed(void * arg)
 {
 #pragma unused(arg)
-    os_activity_t      activity;
-
-    activity = os_activity_create("processing IPMonitor [rank] preference change",
-                                 OS_ACTIVITY_CURRENT,
-                                 OS_ACTIVITY_FLAG_DEFAULT);
-    os_activity_scope(activity);
-
     /* get the current value */
     if (S_callback != NULL) {
        (*S_callback)(S_prefs);
     }
 
-    os_release(activity);
-
     return;
 }
 
@@ -116,7 +107,7 @@ enable_prefs_observer(CFRunLoopRef runloop)
     dispatch_queue_t           queue;
     CFRunLoopSourceRef         source;
 
-    bzero(&context, sizeof(context));
+    memset(&context, 0, sizeof(context));
     context.perform = prefs_changed;
     source = CFRunLoopSourceCreate(kCFAllocatorDefault, 0, &context);
     CFRunLoopAddSource(runloop, source, kCFRunLoopCommonModes);
index bb119fa7bdb80bdc59220599667bcfbe4d31d456..43fb7c4f3ff457bb12eba0e17da14f9083eced54 100644 (file)
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2017, 2018 Apple Inc. All rights reserved.
+ * Copyright (c) 2017-2019 Apple Inc. All rights reserved.
  *
  * @APPLE_LICENSE_HEADER_START@
  *
@@ -70,20 +70,11 @@ static void
 prefs_changed(void * arg)
 {
 #pragma unused(arg)
-       os_activity_t   activity;
-
-       activity = os_activity_create("processing InterfaceNamer preference change",
-                                     OS_ACTIVITY_CURRENT,
-                                     OS_ACTIVITY_FLAG_DEFAULT);
-       os_activity_scope(activity);
-
        /* get the current value */
        if (S_callback != NULL) {
                (*S_callback)(S_prefs);
        }
 
-       os_release(activity);
-
        return;
 }
 
@@ -125,7 +116,7 @@ enable_prefs_observer(CFRunLoopRef runloop)
        dispatch_queue_t        queue;
        CFRunLoopSourceRef      source;
 
-       bzero(&context, sizeof(context));
+       memset(&context, 0, sizeof(context));
        context.perform = prefs_changed;
        source = CFRunLoopSourceCreate(kCFAllocatorDefault, 0, &context);
        CFRunLoopAddSource(runloop, source, kCFRunLoopCommonModes);
diff --git a/Plugins/common/cache.c b/Plugins/common/cache.c
deleted file mode 100644 (file)
index 49b614e..0000000
+++ /dev/null
@@ -1,190 +0,0 @@
-/*
- * Copyright (c) 2003, 2004, 2006, 2011, 2015-2017 Apple Inc. All rights reserved.
- *
- * @APPLE_LICENSE_HEADER_START@
- *
- * This file contains Original Code and/or Modifications of Original Code
- * as defined in and that are subject to the Apple Public Source License
- * Version 2.0 (the 'License'). You may not use this file except in
- * compliance with the License. Please obtain a copy of the License at
- * http://www.opensource.apple.com/apsl/ and read it before using this
- * file.
- *
- * The Original Code and all software distributed under the License are
- * distributed on an 'AS IS' basis, WITHOUT WARRANTY OF ANY KIND, EITHER
- * EXPRESS OR IMPLIED, AND APPLE HEREBY DISCLAIMS ALL SUCH WARRANTIES,
- * INCLUDING WITHOUT LIMITATION, ANY WARRANTIES OF MERCHANTABILITY,
- * FITNESS FOR A PARTICULAR PURPOSE, QUIET ENJOYMENT OR NON-INFRINGEMENT.
- * Please see the License for the specific language governing rights and
- * limitations under the License.
- *
- * @APPLE_LICENSE_HEADER_END@
- */
-
-/*
- * Modification History
- *
- * May 1, 2003 Allan Nathanson <ajn@apple.com>
- * - initial revision
- */
-
-
-#ifdef SC_LOG_HANDLE
-#include <os/log.h>
-os_log_t       SC_LOG_HANDLE;
-#endif //SC_LOG_HANDLE
-
-#include <CoreFoundation/CoreFoundation.h>
-#include <SystemConfiguration/SystemConfiguration.h>
-#include <SystemConfiguration/SCPrivate.h>
-
-#include "cache.h"
-
-
-static CFMutableDictionaryRef  cached_keys     = NULL;
-static CFMutableDictionaryRef  cached_set      = NULL;
-static CFMutableArrayRef       cached_removals = NULL;
-static CFMutableArrayRef       cached_notifys  = NULL;
-
-
-__private_extern__
-void
-cache_open(void)
-{
-       cached_keys     = CFDictionaryCreateMutable(NULL,
-                                                   0,
-                                                   &kCFTypeDictionaryKeyCallBacks,
-                                                   &kCFTypeDictionaryValueCallBacks);
-       cached_set      = CFDictionaryCreateMutable(NULL,
-                                                   0,
-                                                   &kCFTypeDictionaryKeyCallBacks,
-                                                   &kCFTypeDictionaryValueCallBacks);
-       cached_removals = CFArrayCreateMutable(NULL,
-                                              0,
-                                              &kCFTypeArrayCallBacks);
-       cached_notifys  = CFArrayCreateMutable(NULL,
-                                              0,
-                                              &kCFTypeArrayCallBacks);
-
-       return;
-}
-
-
-__private_extern__
-CFPropertyListRef
-cache_SCDynamicStoreCopyValue(SCDynamicStoreRef store, CFStringRef key)
-{
-       CFPropertyListRef       value;
-
-       value = CFDictionaryGetValue(cached_set, key);
-       if (value) {
-               // if we have "set" a new value
-               return (CFRetain(value));
-       }
-
-       if (CFArrayContainsValue(cached_removals,
-                                CFRangeMake(0, CFArrayGetCount(cached_removals)),
-                                key)) {
-               // if we have "removed" the key
-               _SCErrorSet(kSCStatusNoKey);
-               return NULL;
-       }
-
-       value = CFDictionaryGetValue(cached_keys, key);
-       if (value) {
-               // if we have a cached value
-               return (CFRetain(value));
-       }
-
-       value = SCDynamicStoreCopyValue(store, key);
-       if (value) {
-               CFDictionarySetValue(cached_keys, key, value);
-       }
-
-       return value;
-}
-
-
-__private_extern__
-void
-cache_SCDynamicStoreSetValue(SCDynamicStoreRef store, CFStringRef key, CFPropertyListRef value)
-{
-#pragma unused(store)
-       CFIndex i;
-
-       i = CFArrayGetFirstIndexOfValue(cached_removals,
-                                       CFRangeMake(0, CFArrayGetCount(cached_removals)),
-                                       key);
-       if (i != kCFNotFound) {
-               // if previously "removed"
-               CFArrayRemoveValueAtIndex(cached_removals, i);
-       }
-
-       CFDictionarySetValue(cached_set, key, value);
-
-       return;
-}
-
-__private_extern__
-void
-cache_SCDynamicStoreRemoveValue(SCDynamicStoreRef store, CFStringRef key)
-{
-#pragma unused(store)
-       CFDictionaryRemoveValue(cached_set, key);
-
-       if (!CFArrayContainsValue(cached_removals,
-                                 CFRangeMake(0, CFArrayGetCount(cached_removals)),
-                                 key)) {
-               CFArrayAppendValue(cached_removals, key);
-       }
-
-       return;
-}
-
-
-__private_extern__
-void
-cache_SCDynamicStoreNotifyValue(SCDynamicStoreRef store, CFStringRef key)
-{
-#pragma unused(store)
-       if (!CFArrayContainsValue(cached_notifys,
-                                 CFRangeMake(0, CFArrayGetCount(cached_notifys)),
-                                 key)) {
-               CFArrayAppendValue(cached_notifys, key);
-       }
-
-       return;
-}
-
-
-__private_extern__
-void
-cache_write(SCDynamicStoreRef store)
-{
-       if ((CFDictionaryGetCount(cached_set) > 0) ||
-           (CFArrayGetCount(cached_removals) > 0) ||
-           (CFArrayGetCount(cached_notifys)  > 0)) {
-               if (!SCDynamicStoreSetMultiple(store,
-                                              cached_set,
-                                              cached_removals,
-                                              cached_notifys)) {
-                       SC_log(LOG_NOTICE, "SCDynamicStoreSetMultiple() failed: %s",
-                              SCErrorString(SCError()));
-               }
-       }
-
-       return;
-}
-
-
-__private_extern__
-void
-cache_close(void)
-{
-       CFRelease(cached_keys);
-       CFRelease(cached_set);
-       CFRelease(cached_removals);
-       CFRelease(cached_notifys);
-
-       return;
-}
diff --git a/Plugins/common/cache.h b/Plugins/common/cache.h
deleted file mode 100644 (file)
index f8efe16..0000000
+++ /dev/null
@@ -1,63 +0,0 @@
-/*
- * Copyright (c) 2003, 2004, 2006 Apple Computer, Inc. All rights reserved.
- *
- * @APPLE_LICENSE_HEADER_START@
- * 
- * This file contains Original Code and/or Modifications of Original Code
- * as defined in and that are subject to the Apple Public Source License
- * Version 2.0 (the 'License'). You may not use this file except in
- * compliance with the License. Please obtain a copy of the License at
- * http://www.opensource.apple.com/apsl/ and read it before using this
- * file.
- * 
- * The Original Code and all software distributed under the License are
- * distributed on an 'AS IS' basis, WITHOUT WARRANTY OF ANY KIND, EITHER
- * EXPRESS OR IMPLIED, AND APPLE HEREBY DISCLAIMS ALL SUCH WARRANTIES,
- * INCLUDING WITHOUT LIMITATION, ANY WARRANTIES OF MERCHANTABILITY,
- * FITNESS FOR A PARTICULAR PURPOSE, QUIET ENJOYMENT OR NON-INFRINGEMENT.
- * Please see the License for the specific language governing rights and
- * limitations under the License.
- * 
- * @APPLE_LICENSE_HEADER_END@
- */
-
-/*
- * Modification History
- *
- * May 1, 2003 Allan Nathanson <ajn@apple.com>
- * - initial revision
- */
-
-
-#ifndef        _CACHE_H
-#define        _CACHE_H
-
-
-#include <CoreFoundation/CoreFoundation.h>
-#include <SystemConfiguration/SystemConfiguration.h>
-
-
-__BEGIN_DECLS
-
-void                   cache_open                      (void);
-
-CFPropertyListRef      cache_SCDynamicStoreCopyValue   (SCDynamicStoreRef      store,
-                                                        CFStringRef            key);
-
-void                   cache_SCDynamicStoreSetValue    (SCDynamicStoreRef      store,
-                                                        CFStringRef            key,
-                                                        CFPropertyListRef      value);
-
-void                   cache_SCDynamicStoreRemoveValue (SCDynamicStoreRef      store,
-                                                        CFStringRef            key);
-
-void                   cache_SCDynamicStoreNotifyValue (SCDynamicStoreRef      store,
-                                                        CFStringRef            key);
-
-void                   cache_write                     (SCDynamicStoreRef      store);
-
-void                   cache_close                     (void);
-
-__END_DECLS
-
-#endif /* _CACHE_H */
index 0816b57bfc31937e8301695973a71a83eae7ad6b..5fdad83cf7639fbe2924e1ed582ef4ac789e328f 100644 (file)
@@ -2,14 +2,14 @@
  * Copyright (c) 2016, 2018 Apple Computer, Inc. All rights reserved.
  *
  * @APPLE_LICENSE_HEADER_START@
- * 
+ *
  * This file contains Original Code and/or Modifications of Original Code
  * as defined in and that are subject to the Apple Public Source License
  * Version 2.0 (the 'License'). You may not use this file except in
  * compliance with the License. Please obtain a copy of the License at
  * http://www.opensource.apple.com/apsl/ and read it before using this
  * file.
- * 
+ *
  * The Original Code and all software distributed under the License are
  * distributed on an 'AS IS' basis, WITHOUT WARRANTY OF ANY KIND, EITHER
  * EXPRESS OR IMPLIED, AND APPLE HEREBY DISCLAIMS ALL SUCH WARRANTIES,
@@ -17,7 +17,7 @@
  * FITNESS FOR A PARTICULAR PURPOSE, QUIET ENJOYMENT OR NON-INFRINGEMENT.
  * Please see the License for the specific language governing rights and
  * limitations under the License.
- * 
+ *
  * @APPLE_LICENSE_HEADER_END@
  */
 
diff --git a/SCMonitor/English.lproj/Localizable.strings b/SCMonitor/English.lproj/Localizable.strings
deleted file mode 100644 (file)
index 1234856..0000000
Binary files a/SCMonitor/English.lproj/Localizable.strings and /dev/null differ
index 434b514dca10ccc2f9240345f742cb819b0ac9ec..4b358daea52efce549f200ea5caa6bce62ecadd6 100644 (file)
        <key>CFBundlePackageType</key>
        <string>BNDL</string>
        <key>CFBundleShortVersionString</key>
-       <string>1.17</string>
+       <string>1.19</string>
        <key>CFBundleSignature</key>
        <string>????</string>
        <key>CFBundleVersion</key>
-       <string>1.14</string>
+       <string>1.19</string>
        <key>CFPlugInDynamicRegistration</key>
        <string>NO</string>
        <key>CFPlugInFactories</key>
diff --git a/SCMonitor/en.lproj/Localizable.strings b/SCMonitor/en.lproj/Localizable.strings
new file mode 100644 (file)
index 0000000..1234856
Binary files /dev/null and b/SCMonitor/en.lproj/Localizable.strings differ
index 220b188676a2c371498319be748e0ad0c69107a1..30371509a457e7cb287b0c44556854df850093de 100644 (file)
@@ -33,7 +33,7 @@
 #include <unistd.h>
 #include <CoreFoundation/CoreFoundation.h>
 
-#define        SC_LOG_HANDLE           __log_SCMonitor()
+#define        SC_LOG_HANDLE           __log_SCMonitor
 #define SC_LOG_HANDLE_TYPE     static
 #include <SystemConfiguration/SystemConfiguration.h>
 #include <SystemConfiguration/SCPrivate.h>
@@ -980,7 +980,7 @@ add_node_watcher(MyType *myInstance, io_registry_entry_t node, io_registry_entry
        /* ALIGN: CF aligns to at least >8 bytes */
        myNode = (MyNode *)(void *)CFDataGetBytePtr(myData);
 
-       bzero(myNode, sizeof(MyNode));
+       memset(myNode, 0, sizeof(MyNode));
        myNode->interface      = interface;
        if (myNode->interface != MACH_PORT_NULL) {
                IOObjectRetain(myNode->interface);
@@ -1372,7 +1372,7 @@ UserEventAgentFactory(CFAllocatorRef allocator, CFUUIDRef typeID)
 
        if (CFEqual(typeID, kUserEventAgentTypeID)) {
                newOne  = (MyType *)malloc(sizeof(MyType));
-               bzero(newOne, sizeof(*newOne));
+               memset(newOne, 0, sizeof(*newOne));
                newOne->_UserEventAgentInterface = &UserEventAgentInterfaceFtbl;
                newOne->_factoryID = (CFUUIDRef)CFRetain(kUserEventAgentFactoryID);
                CFPlugInAddInstanceForFactory(kUserEventAgentFactoryID);
@@ -1392,7 +1392,7 @@ main(int argc, char **argv)
        _sc_log     = FALSE;
        _sc_verbose = (argc > 1) ? TRUE : FALSE;
 
-       bzero(newOne, sizeof(*newOne));
+       memset(newOne, 0, sizeof(*newOne));
        myInstall(newOne);
        CFRunLoopRun();
        exit(0);
index 90007b9d82f06ce4be8875879bf6f239a7b5da95..6fc52401199b5a3a4a5a64507bb69a5d7c703a71 100644 (file)
@@ -1,17 +1,69 @@
 /*
- *  Copyright (c) 2015 Apple Inc. All rights reserved.
+ * Copyright (c) 2015, 2018 Apple Inc. All rights reserved.
  *
- *  A Objective-C test target to test SC APIs
+ * @APPLE_LICENSE_HEADER_START@
+ *
+ * This file contains Original Code and/or Modifications of Original Code
+ * as defined in and that are subject to the Apple Public Source License
+ * Version 2.0 (the 'License'). You may not use this file except in
+ * compliance with the License. Please obtain a copy of the License at
+ * http://www.opensource.apple.com/apsl/ and read it before using this
+ * file.
+ *
+ * The Original Code and all software distributed under the License are
+ * distributed on an 'AS IS' basis, WITHOUT WARRANTY OF ANY KIND, EITHER
+ * EXPRESS OR IMPLIED, AND APPLE HEREBY DISCLAIMS ALL SUCH WARRANTIES,
+ * INCLUDING WITHOUT LIMITATION, ANY WARRANTIES OF MERCHANTABILITY,
+ * FITNESS FOR A PARTICULAR PURPOSE, QUIET ENJOYMENT OR NON-INFRINGEMENT.
+ * Please see the License for the specific language governing rights and
+ * limitations under the License.
  *
- *  Created by Sushant Chavan on 4/21/15.
+ * @APPLE_LICENSE_HEADER_END@
+ */
+
+/*
+ * Modification History
+ *
+ * April 21, 2015              Sushant Chavan
+ * - initial revision
+ */
+
+/*
+ *  A Objective-C test target to test SC APIs
  */
 
+#import <TargetConditionals.h>
 @import Foundation;
 @import SystemConfiguration;
+@import SystemConfiguration_Private;
 
 #define MY_APP_NAME    CFSTR("SCTestObjC")
 #define TARGET_HOST    "www.apple.com"
 
+
+#if    !TARGET_OS_SIMULATOR
+static void
+test_SCDynamicStore()
+{
+       NSLog(@"\n\n*** SCDynamicStore ***\n\n");
+       CFDictionaryRef         dict;
+       CFStringRef             intf;
+       CFStringRef             key;
+       SCDynamicStoreRef       store;
+
+       store = SCDynamicStoreCreate(NULL, MY_APP_NAME, NULL, NULL);
+       key = SCDynamicStoreKeyCreateNetworkGlobalEntity(NULL, kSCDynamicStoreDomainState, kSCEntNetIPv4);
+       dict = SCDynamicStoreCopyValue(store, key);
+       intf = CFDictionaryGetValue(dict, kSCDynamicStorePropNetPrimaryInterface);
+       NSLog(@"- Primary Interface is %@\n", intf);
+
+       CFRelease(store);
+       CFRelease(dict);
+       CFRelease(key);
+}
+#endif // !TARGET_OS_SIMULATOR
+
+#if    !TARGET_OS_SIMULATOR
 static void
 test_SCNetworkConfiguration()
 {
@@ -34,27 +86,23 @@ test_SCNetworkConfiguration()
        
        CFRelease(interfaces);
 }
+#endif // !TARGET_OS_SIMULATOR
 
-static void
-test_SCDynamicStore()
+void
+test_SCNetworkReachability()
 {
-       NSLog(@"\n\n*** SCDynamicStore ***\n\n");
-       CFDictionaryRef         dict;
-       CFStringRef             intf;
-       CFStringRef             key;
-       SCDynamicStoreRef       store;
-       
-       store = SCDynamicStoreCreate(NULL, MY_APP_NAME, NULL, NULL);
-       key = SCDynamicStoreKeyCreateNetworkGlobalEntity(NULL, kSCDynamicStoreDomainState, kSCEntNetIPv4);
-       dict = SCDynamicStoreCopyValue(store, key);
-       intf = CFDictionaryGetValue(dict, kSCDynamicStorePropNetPrimaryInterface);
-       NSLog(@"- Primary Interface is %@\n", intf);
-       
-       CFRelease(store);
-       CFRelease(dict);
-       CFRelease(key);
+       NSLog(@"\n\n*** SCNetworkReachability ***\n\n");
+       SCNetworkReachabilityFlags      flags;
+       SCNetworkReachabilityRef        target;
+
+       target = SCNetworkReachabilityCreateWithName(NULL, TARGET_HOST);
+       (void)SCNetworkReachabilityGetFlags(target, &flags);
+       NSLog(@"- Reachability flags for "TARGET_HOST": %#x", flags);
+
+       CFRelease(target);
 }
 
+#if    !TARGET_OS_SIMULATOR
 static void
 test_SCPreferences()
 {
@@ -86,31 +134,30 @@ test_SCPreferences()
        CFRelease(prefs);
        CFRelease(services);
 }
-
-void
-test_SCNetworkReachability()
-{
-       NSLog(@"\n\n*** SCNetworkReachability ***\n\n");
-       SCNetworkReachabilityFlags      flags;
-       SCNetworkReachabilityRef        target;
-       
-       target = SCNetworkReachabilityCreateWithName(NULL, TARGET_HOST);
-       (void)SCNetworkReachabilityGetFlags(target, &flags);
-       NSLog(@"- Reachability flags for "TARGET_HOST": %#x", flags);
-       
-       CFRelease(target);
-}
+#endif // !TARGET_OS_SIMULATOR
 
 void
 SCTest()
 {
+
+#if    !TARGET_OS_SIMULATOR
+       test_SCDynamicStore();
+#endif // !TARGET_OS_SIMULATOR
+
+#if    !TARGET_OS_SIMULATOR
        test_SCNetworkConfiguration();
+#endif // !TARGET_OS_SIMULATOR
+
        test_SCNetworkReachability();
+
+#if    !TARGET_OS_SIMULATOR
        test_SCPreferences();
-       test_SCDynamicStore();
+#endif // !TARGET_OS_SIMULATOR
+
 }
 
 int main(int argc, const char * argv[]) {
+#pragma unused(argc, argv)
        @autoreleasepool {
                SCTest();
        }
index aa6b02077af8deeda002379dcb664bd447d262d4..312b1cc604db8e4c9ae5b99dcabf070ca623a2f1 100644 (file)
@@ -1,36 +1,90 @@
 /*
- *  Copyright (c) 2015 Apple Inc. All rights reserved.
- *
- *  A Swift test target to test SC APIs
- *
- *  Created by Sushant Chavan on 4/21/15.
+* Copyright (c) 2015, 2018 Apple Inc. All rights reserved.
+*
+* @APPLE_LICENSE_HEADER_START@
+*
+* This file contains Original Code and/or Modifications of Original Code
+* as defined in and that are subject to the Apple Public Source License
+* Version 2.0 (the 'License'). You may not use this file except in
+* compliance with the License. Please obtain a copy of the License at
+* http://www.opensource.apple.com/apsl/ and read it before using this
+* file.
+*
+* The Original Code and all software distributed under the License are
+* distributed on an 'AS IS' basis, WITHOUT WARRANTY OF ANY KIND, EITHER
+* EXPRESS OR IMPLIED, AND APPLE HEREBY DISCLAIMS ALL SUCH WARRANTIES,
+* INCLUDING WITHOUT LIMITATION, ANY WARRANTIES OF MERCHANTABILITY,
+* FITNESS FOR A PARTICULAR PURPOSE, QUIET ENJOYMENT OR NON-INFRINGEMENT.
+* Please see the License for the specific language governing rights and
+* limitations under the License.
+*
+* @APPLE_LICENSE_HEADER_END@
+*/
+
+/*
+* Modification History
+*
+* April 21, 2015               Sushant Chavan
+* - initial revision
+*/
+
+/*
+*  A Swift test target to test SC APIs
 */
 
 import Foundation
 import SystemConfiguration
+import SystemConfiguration_Private
 
 let target_host = "www.apple.com"
 var application = "SCTest-Swift" as CFString
 
+#if    !targetEnvironment(simulator)
+func
+       test_SCDynamicStore ()
+{
+       //SCDynamicStore APIs
+       NSLog("\n\n*** SCDynamicStore ***\n\n")
+       let key:CFString
+       let store:SCDynamicStore?
+       let dict:[String:String]?
+       let primaryIntf:String?
+
+       store = SCDynamicStoreCreate(nil, application, nil, nil)
+       if store == nil {
+               NSLog("Error creating session: %s", SCErrorString(SCError()))
+               return
+       }
+
+       key =   SCDynamicStoreKeyCreateNetworkGlobalEntity(nil, kSCDynamicStoreDomainState, kSCEntNetIPv4)
+       dict =  SCDynamicStoreCopyValue(store, key) as? [String:String]
+       primaryIntf = dict?[kSCDynamicStorePropNetPrimaryInterface as String]
+       if (primaryIntf != nil) {
+               NSLog("Primary interface is %@", primaryIntf!)
+       } else {
+               NSLog("Primary interface is unavailable")
+       }
+}
+#endif // !targetEnvironment(simulator)
+
+#if    !targetEnvironment(simulator)
 func
 test_SCNetworkConfiguration ()
 {
        //SCNetworkConfiguration APIs
        NSLog("\n\n*** SCNetworkConfiguration ***\n\n")
        let interfaceArray:[CFArray]
-       let count:CFIndex
-       var idx:CFIndex
-       
-       interfaceArray = SCNetworkInterfaceCopyAll() as! [CFArray]
-       count = CFArrayGetCount(interfaceArray)
+
        NSLog("Network Interfaces:")
-       for idx = 0; idx < count ; idx++ {
+       interfaceArray = SCNetworkInterfaceCopyAll() as! [CFArray]
+       for idx in 0...interfaceArray.count {
                let interface = interfaceArray[idx]
-               if let bsdName? = SCNetworkInterfaceGetBSDName(interface as! SCNetworkInterface) {
+               if let bsdName = SCNetworkInterfaceGetBSDName(interface as! SCNetworkInterface) {
                        NSLog("- %@", bsdName as String)
                }
        }
 }
+#endif // !targetEnvironment(simulator)
 
 func
 test_SCNetworkReachability ()
@@ -38,7 +92,7 @@ test_SCNetworkReachability ()
        //SCNetworkReachability APIs
        NSLog("\n\n*** SCNetworkReachability ***\n\n")
        let target:SCNetworkReachability?
-       var flags:SCNetworkReachabilityFlags = SCNetworkReachabilityFlags.allZeros
+       var flags:SCNetworkReachabilityFlags = SCNetworkReachabilityFlags.init(rawValue: 0)
        
        target = SCNetworkReachabilityCreateWithName(nil, target_host)
        if target == nil {
@@ -50,6 +104,7 @@ test_SCNetworkReachability ()
        NSLog("SCNetworkReachability flags for %@ is %#x", String(target_host), flags.rawValue)
 }
 
+#if    !targetEnvironment(simulator)
 func
 test_SCPreferences ()
 {
@@ -57,16 +112,14 @@ test_SCPreferences ()
        NSLog("\n\n*** SCPreferences ***\n\n")
        let prefs:SCPreferences?
        let networkServices:[CFArray]?
-       let count:CFIndex
-       var idx:CFIndex
-       
+
        prefs = SCPreferencesCreate(nil, application, nil)
        if prefs == nil {
                NSLog("Error creating prefs: %s", SCErrorString(SCError()))
                return
        }
        
-       if let model? = SCPreferencesGetValue(prefs!, "Model" as CFString) {
+       if let model = SCPreferencesGetValue(prefs!, "Model" as CFString) {
                NSLog("Current system model is %@", model as! String)
        }
        
@@ -76,50 +129,35 @@ test_SCPreferences ()
                return
        }
        
-       count = CFArrayGetCount(networkServices)
        NSLog("Network Services:")
-       for idx = 0; idx < count ; idx++ {
+       for idx in 0...(networkServices?.count)! {
                let service     = networkServices?[idx]
-               if let serviceName? = SCNetworkServiceGetName(service as! SCNetworkService) {
+               if let serviceName = SCNetworkServiceGetName(service as! SCNetworkService) {
                        NSLog("- %@", serviceName as String)
                }
                
        }
 }
-
-func
-test_SCDynamicStore ()
-{
-       //SCDynamicStore APIs
-       NSLog("\n\n*** SCDynamicStore ***\n\n")
-       let key:CFString
-       let store:SCDynamicStore?
-       let dict:[String:String]?
-       let primaryIntf:String?
-       
-       store = SCDynamicStoreCreate(nil, application, nil, nil)
-       if store == nil {
-               NSLog("Error creating session: %s", SCErrorString(SCError()))
-               return
-       }
-       
-       key =   SCDynamicStoreKeyCreateNetworkGlobalEntity(nil, kSCDynamicStoreDomainState, kSCEntNetIPv4)
-       dict =  SCDynamicStoreCopyValue(store, key) as? [String:String]
-       primaryIntf = dict?[kSCDynamicStorePropNetPrimaryInterface as String]
-       if (primaryIntf != nil) {
-               NSLog("Primary interface is %@", primaryIntf!)
-       } else {
-               NSLog("Primary interface is unavailable")
-       }
-}
+#endif // !targetEnvironment(simulator)
 
 func
 my_main ()
 {
+
+#if    !targetEnvironment(simulator)
+       test_SCDynamicStore()
+#endif // !targetEnvironment(simulator)
+
+#if    !targetEnvironment(simulator)
        test_SCNetworkConfiguration()
+#endif // !targetEnvironment(simulator)
+
        test_SCNetworkReachability()
+
+#if    !targetEnvironment(simulator)
        test_SCPreferences()
-       test_SCDynamicStore()
+#endif // !targetEnvironment(simulator)
+
 }
 
 // Run the test
diff --git a/SystemConfiguration.fproj/AppWorkaround.plist b/SystemConfiguration.fproj/AppWorkaround.plist
deleted file mode 100644 (file)
index e4c1550..0000000
+++ /dev/null
@@ -1,26 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
-<plist version="1.0">
-<dict>
-       <key>kCSCheckFixVersion</key>
-       <string>1</string>
-       <key>kCSCheckFixUniversal</key>
-       <dict>
-               <key>7408115</key>
-               <dict>
-                       <key>com.mackiev.3dweatherglobe</key>
-                       <array>
-                               <string>231</string>
-                               <string>232</string>
-                       </array>
-               </dict>
-               <key>9022571</key>
-               <dict>
-                       <key>com.mackiev.3dweatherglobe</key>
-                       <array>
-                               <string>256</string>
-                       </array>
-               </dict>
-       </dict>
-</dict>
-</plist>
index 3135897f030b1141165bc05941e4efe2a3f3cee7..1fe9ceb86a6f44dcf327930595b7598b129db50d 100644 (file)
@@ -77,7 +77,7 @@ siocgifxmedia(int s, const char * ifname, int * status, int * active)
 
        *status = 0;
        *active = 0;
-       bzero(&ifmr, sizeof(ifmr));
+       memset(&ifmr, 0, sizeof(ifmr));
        strlcpy(ifmr.ifm_name, ifname, sizeof(ifmr.ifm_name));
        if (ioctl(s, SIOCGIFXMEDIA, &ifmr) == -1) {
                return (-1);
@@ -97,9 +97,9 @@ if_bond_status_req_copy(int s, const char * ifname)
        struct if_bond_status_req *     ibsr_p;
        struct ifreq                    ifr;
 
-       bzero(&ifr, sizeof(ifr));
+       memset(&ifr, 0, sizeof(ifr));
        strlcpy(ifr.ifr_name, ifname, sizeof(ifr.ifr_name));
-       bzero((char *)&ibr, sizeof(ibr));
+       memset((char *)&ibr, 0, sizeof(ibr));
        ibr.ibr_op = IF_BOND_OP_GET_STATUS;
        ibsr_p = &ibr.ibr_ibru.ibru_status;
        ibsr_p->ibsr_version = IF_BOND_STATUS_REQ_VERSION;
@@ -1404,13 +1404,13 @@ __bond_set_mode(int s, CFStringRef bond_if, CFNumberRef mode)
        }
 
        // bond interface
-       bzero(&ifr, sizeof(ifr));
+       memset(&ifr, 0, sizeof(ifr));
        (void) _SC_cfstring_to_cstring(bond_if,
                                       ifr.ifr_name,
                                       sizeof(ifr.ifr_name),
                                       kCFStringEncodingASCII);
        ifr.ifr_data = (caddr_t)&breq;
-       bzero(&breq, sizeof(breq));
+       memset(&breq, 0, sizeof(breq));
        breq.ibr_op = IF_BOND_OP_SET_MODE;
        breq.ibr_ibru.ibru_int_val = mode_num;
        if (ioctl(s, SIOCSIFBOND, (caddr_t)&ifr) == -1) {
@@ -1432,7 +1432,7 @@ __bond_add_interface(int s, CFStringRef bond_if, CFStringRef interface_if)
        struct ifreq            ifr;
 
        // bond interface
-       bzero(&ifr, sizeof(ifr));
+       memset(&ifr, 0, sizeof(ifr));
        (void) _SC_cfstring_to_cstring(bond_if,
                                       ifr.ifr_name,
                                       sizeof(ifr.ifr_name),
@@ -1440,7 +1440,7 @@ __bond_add_interface(int s, CFStringRef bond_if, CFStringRef interface_if)
        ifr.ifr_data = (caddr_t)&breq;
 
        // new bond member
-       bzero(&breq, sizeof(breq));
+       memset(&breq, 0, sizeof(breq));
        breq.ibr_op = IF_BOND_OP_ADD_INTERFACE;
        (void) _SC_cfstring_to_cstring(interface_if,
                                       breq.ibr_ibru.ibru_if_name,
@@ -1468,7 +1468,7 @@ __bond_remove_interface(int s, CFStringRef bond_if, CFStringRef interface_if)
        struct ifreq            ifr;
 
        // bond interface
-       bzero(&ifr, sizeof(ifr));
+       memset(&ifr, 0, sizeof(ifr));
        (void) _SC_cfstring_to_cstring(bond_if,
                                       ifr.ifr_name,
                                       sizeof(ifr.ifr_name),
@@ -1476,7 +1476,7 @@ __bond_remove_interface(int s, CFStringRef bond_if, CFStringRef interface_if)
        ifr.ifr_data = (caddr_t)&breq;
 
        // bond member to remove
-       bzero(&breq, sizeof(breq));
+       memset(&breq, 0, sizeof(breq));
        breq.ibr_op = IF_BOND_OP_REMOVE_INTERFACE;
        (void) _SC_cfstring_to_cstring(interface_if,
                                       breq.ibr_ibru.ibru_if_name,
index 2624382321c376f348e333d84772b33f18f976af..e410d8e284c19c90ce534d76081745566c1142b0 100644 (file)
@@ -80,14 +80,14 @@ ifbifconf_copy(int s, const char * ifname)
        struct ifdrv            ifd;
        uint32_t                len     = sizeof(struct ifbreq) * 16;
 
-       bzero(&ifd, sizeof(ifd));
+       memset(&ifd, 0, sizeof(ifd));
        strlcpy(ifd.ifd_name, ifname, sizeof(ifd.ifd_name));
        ifd.ifd_cmd = BRDGGIFS;
 
        buflen = sizeof(struct ifbifconf) + len;
        buf = malloc(buflen);
        while (buf != NULL) {
-               bzero(buf, buflen);
+               memset(buf, 0, buflen);
                ibc_p = (struct ifbifconf *)buf;
                ibc_p->ifbic_len = len;
                ibc_p->ifbic_buf = buf + sizeof(*ibc_p);
@@ -949,7 +949,7 @@ __bridge_add_interface(int s, CFStringRef bridge_if, CFStringRef interface_if)
        struct ifdrv    ifd;
 
        // bridge interface
-       bzero(&ifd, sizeof(ifd));
+       memset(&ifd, 0, sizeof(ifd));
        (void) _SC_cfstring_to_cstring(bridge_if,
                                       ifd.ifd_name,
                                       sizeof(ifd.ifd_name),
@@ -959,7 +959,7 @@ __bridge_add_interface(int s, CFStringRef bridge_if, CFStringRef interface_if)
        ifd.ifd_data = (caddr_t)&breq;
 
        // new bridge member
-       bzero(&breq, sizeof(breq));
+       memset(&breq, 0, sizeof(breq));
        (void) _SC_cfstring_to_cstring(interface_if,
                                       breq.ifbr_ifsname,
                                       sizeof(breq.ifbr_ifsname),
@@ -987,7 +987,7 @@ __bridge_remove_interface(int s, CFStringRef bridge_if, CFStringRef interface_if
        struct ifdrv    ifd;
 
        // bridge interface
-       bzero(&ifd, sizeof(ifd));
+       memset(&ifd, 0, sizeof(ifd));
        (void) _SC_cfstring_to_cstring(bridge_if,
                                       ifd.ifd_name,
                                       sizeof(ifd.ifd_name),
@@ -997,7 +997,7 @@ __bridge_remove_interface(int s, CFStringRef bridge_if, CFStringRef interface_if
        ifd.ifd_data = (caddr_t)&breq;
 
        // bridge member to remove
-       bzero(&breq, sizeof(breq));
+       memset(&breq, 0, sizeof(breq));
        (void) _SC_cfstring_to_cstring(interface_if,
                                       breq.ifbr_ifsname,
                                       sizeof(breq.ifbr_ifsname),
@@ -1023,7 +1023,7 @@ __bridge_set_mac(int s, CFStringRef bridge_if, CFDataRef macAddr)
 {
        struct ifreq    ifr;
 
-       bzero(&ifr, sizeof(ifr));
+       memset(&ifr, 0, sizeof(ifr));
        (void) _SC_cfstring_to_cstring(bridge_if,
                                       ifr.ifr_name,
                                       sizeof(ifr.ifr_name),
index 5caac04d2a129d85e0c3b4cb8da5168298a86a82..b6181673a5494dbe60c98ade8735c9a2d446c19a 100644 (file)
@@ -1,15 +1,15 @@
 /*
- * Copyright (c) 2009, 2010, 2012, 2013, 2015, 2018 Apple Inc. All rights reserved.
+ * Copyright (c) 2009, 2010, 2012, 2013, 2015, 2018, 2019 Apple Inc. All rights reserved.
  *
  * @APPLE_LICENSE_HEADER_START@
- * 
+ *
  * This file contains Original Code and/or Modifications of Original Code
  * as defined in and that are subject to the Apple Public Source License
  * Version 2.0 (the 'License'). You may not use this file except in
  * compliance with the License. Please obtain a copy of the License at
  * http://www.opensource.apple.com/apsl/ and read it before using this
  * file.
- * 
+ *
  * The Original Code and all software distributed under the License are
  * distributed on an 'AS IS' basis, WITHOUT WARRANTY OF ANY KIND, EITHER
  * EXPRESS OR IMPLIED, AND APPLE HEREBY DISCLAIMS ALL SUCH WARRANTIES,
@@ -17,7 +17,7 @@
  * FITNESS FOR A PARTICULAR PURPOSE, QUIET ENJOYMENT OR NON-INFRINGEMENT.
  * Please see the License for the specific language governing rights and
  * limitations under the License.
- * 
+ *
  * @APPLE_LICENSE_HEADER_END@
  */
 
 #include <sys/param.h>
 #include <sys/stat.h>
 #include <dlfcn.h>
-#include <mach-o/dyld_priv.h>
-#include <sys/codesign.h>
-
 #include <SystemConfiguration/CaptiveNetwork.h>
 #include <SystemConfiguration/SCPrivate.h>
 
-
 #pragma mark -
 #pragma mark CaptiveNetwork.framework APIs (exported through the SystemConfiguration.framework)
 
-
 const CFStringRef kCNNetworkInfoKeySSIDData    = CFSTR("SSIDDATA");
 const CFStringRef kCNNetworkInfoKeySSID        = CFSTR("SSID");
 const CFStringRef kCNNetworkInfoKeyBSSID       = CFSTR("BSSID");
 
-
 static void *
 __loadCaptiveNetwork(void) {
        static void             *image  = NULL;
@@ -54,7 +48,6 @@ __loadCaptiveNetwork(void) {
        return image;
 }
 
-
 Boolean
 CNSetSupportedSSIDs(CFArrayRef ssidArray)
 {
@@ -66,7 +59,6 @@ CNSetSupportedSSIDs(CFArrayRef ssidArray)
        return dyfunc ? dyfunc(ssidArray) : FALSE;
 }
 
-
 Boolean
 CNMarkPortalOnline(CFStringRef interfaceName)
 {
@@ -78,7 +70,6 @@ CNMarkPortalOnline(CFStringRef interfaceName)
        return dyfunc ? dyfunc(interfaceName) : FALSE;
 }
 
-
 Boolean
 CNMarkPortalOffline(CFStringRef interfaceName)
 {
@@ -101,113 +92,10 @@ CNCopySupportedInterfaces(void)
        return dyfunc ? dyfunc() : NULL;
 }
 
-#if    TARGET_OS_IPHONE
-
-#define CN_COPY_ENTITLEMENT CFSTR("com.apple.developer.networking.wifi-info")
-
-static CFDictionaryRef
-__CopyEntitlementsForPID(pid_t pid)
-{
-       uint8_t *buffer = NULL;
-       size_t bufferlen = 0L;
-       int64_t datalen = 0L;
-       CFDataRef cfdata = NULL;
-       struct csheader {
-               uint32_t magic;
-               uint32_t length;
-       } csheader = { 0, 0 };
-       int error = -1;
-       CFPropertyListRef plist = NULL;
-
-       /*
-        * Get the length of the actual entitlement data
-        */
-       error = csops(pid, CS_OPS_ENTITLEMENTS_BLOB, &csheader, sizeof(csheader));
-
-       if (error == -1 && errno == ERANGE) {
-               bufferlen = ntohl(csheader.length);
-               if (bufferlen > 1024 * 1024 || bufferlen < 8) {
-                       errno = EINVAL;
-                       goto out;
-               }
-               buffer = malloc(bufferlen);
-               if (buffer == NULL) {
-                       goto out;
-               }
-               error = csops(pid, CS_OPS_ENTITLEMENTS_BLOB, buffer, bufferlen);
-               if (error < 0) {
-                       goto out;
-               }
-       }
-
-       datalen = bufferlen - sizeof(csheader);
-
-       if (error == 0 && buffer && datalen > 0) {
-               cfdata = CFDataCreateWithBytesNoCopy(kCFAllocatorDefault, buffer + sizeof(csheader), datalen, kCFAllocatorNull);
-               if (cfdata == NULL) {
-                       goto out;
-               }
-
-               plist = CFPropertyListCreateWithData(NULL, cfdata, kCFPropertyListImmutable, NULL, NULL);
-               if (!plist) {
-                       SC_log(LOG_ERR, "Could not decode entitlements for pid %d", pid);
-               }
-       }
-       else {
-               SC_log(LOG_ERR, "Could not get valid codesigning data for pid %d. Error %d", pid, error);
-       }
-out:
-       if (error < 0) {
-               SC_log(LOG_ERR, "Error getting entitlements for pid %d: %s", pid, strerror(errno));
-       }
-       if (cfdata != NULL) {
-               CFRelease(cfdata);
-       }
-       if (buffer != NULL) {
-               free(buffer);
-       }
-       if (plist && !isA_CFDictionary(plist)) {
-               SC_log(LOG_ERR, "Could not decode entitlements for pid %d as a dictionary.", pid);
-               CFRelease(plist);
-               plist = NULL;
-       }
-
-       return plist;
-}
-
-static Boolean
-__isApplicationEntitled(void)
-{
-       if (dyld_get_program_sdk_version() >= DYLD_IOS_VERSION_12_0) {
-               /* application is linked on or after iOS 12.0 SDK so it must have the entitlement */
-               CFTypeRef entitlement = NULL;
-               CFDictionaryRef entitlements = __CopyEntitlementsForPID(getpid());
-               if (entitlements != NULL) {
-                       Boolean entitled = FALSE;
-                       entitlement = CFDictionaryGetValue(entitlements, CN_COPY_ENTITLEMENT);
-                       if(isA_CFBoolean(entitlement)) {
-                               entitled = CFBooleanGetValue(entitlement);
-                       }
-                       CFRelease(entitlements);
-                       return entitled;
-               }
-               /* application is linked on or after iOS 12.0 SDK but missing entitlement */
-               return FALSE;
-       }
-       /* application is linked before iOS 12.0 SDK */
-       return TRUE;
-}
-
-#endif /* TARGET_OS_IPHONE */
-
 CFDictionaryRef
 CNCopyCurrentNetworkInfo(CFStringRef   interfaceName)
 {
 #if    TARGET_OS_IPHONE && !TARGET_OS_IOSMAC
-       if (__isApplicationEntitled() == FALSE) {
-               SC_log(LOG_DEBUG, "Application does not have %@ entitlement", CN_COPY_ENTITLEMENT);
-               return NULL;
-       }
        static typeof (CNCopyCurrentNetworkInfo) *dyfunc = NULL;
        if (!dyfunc) {
                void *image = __loadCaptiveNetwork();
index 38c49ca70c773139b460060de1ef90b37423151c..36ab01e44ecc0dfbd5769871f80c799bf9d2a095 100644 (file)
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2009-2016, 2018 Apple Inc. All rights reserved.
+ * Copyright (c) 2009-2016, 2018, 2019 Apple Inc. All rights reserved.
  *
  * @APPLE_LICENSE_HEADER_START@
  *
@@ -145,9 +145,17 @@ extern const CFStringRef kCNNetworkInfoKeyBSSID
 
 /*!
  @function CNCopyCurrentNetworkInfo
- @discussion Returns the Network Info for the specified interface.
-       For example, Network Info dictionary will contain the following
-       keys, and values:
+ @discussion Returns the network information for the specified interface when the requesting application meets one of following 3 requirements -.
+       1. application is using CoreLocation API and has user's authorization to access location.
+       2. application has used NEHotspotConfiguration API to configure the current Wi-Fi network.
+       3. application has active VPN configurations installed.
+
+       - An application that is linked against iOS 12.0 SDK and above must have the "com.apple.developer.networking.wifi-info" entitlement.
+       - An application will receive a pseudo network information if it is linked against an SDK before iOS 13.0, and if it fails to meet any of the
+         above 3 requirements.
+       - An application will receive NULL if it is linked against iOS 13.0 SDK or above, and if it fails to meet any of the above 3 requirements..
+
+       Network Information dictionary will contain the following keys, and values:
        <pre>
        @textblock
        Keys                      : Values
@@ -157,8 +165,10 @@ extern const CFStringRef kCNNetworkInfoKeyBSSID
        kCNNetworkInfoKeyBSSID    : CFStringRef
        @/textblock
        </pre>
+
+       Pseudo network information will contain "Wi-Fi" SSID and "00:00:00:00:00:00" BSSID. For China region, the SSID will be "WLAN".
  @param interfaceName Name of the interface you are interested in
- @result Network Info dictionary associated with the interface.
+ @result Network Information dictionary associated with the interface.
         Returns NULL if an error was encountered.
         You MUST release the returned value.
  */
diff --git a/SystemConfiguration.fproj/English.lproj/Localizable.strings b/SystemConfiguration.fproj/English.lproj/Localizable.strings
deleted file mode 100644 (file)
index f930b18..0000000
Binary files a/SystemConfiguration.fproj/English.lproj/Localizable.strings and /dev/null differ
diff --git a/SystemConfiguration.fproj/English.lproj/NetworkInterface.strings b/SystemConfiguration.fproj/English.lproj/NetworkInterface.strings
deleted file mode 100644 (file)
index dd0b14b..0000000
Binary files a/SystemConfiguration.fproj/English.lproj/NetworkInterface.strings and /dev/null differ
index b42b8df6a49400392df8bd3e0c8295a12ce5a948..5515f5bc0594306dc14b833526222005eca48a3b 100644 (file)
@@ -7,7 +7,7 @@
        <key>CFBundleExecutable</key>
        <string>SystemConfiguration</string>
        <key>CFBundleGetInfoString</key>
-       <string>1.17</string>
+       <string>1.19</string>
        <key>CFBundleIdentifier</key>
        <string>$(PRODUCT_BUNDLE_IDENTIFIER)</string>
        <key>CFBundleInfoDictionaryVersion</key>
        <key>CFBundlePackageType</key>
        <string>FMWK</string>
        <key>CFBundleShortVersionString</key>
-       <string>1.17</string>
+       <string>1.19</string>
        <key>CFBundleSignature</key>
        <string>????</string>
        <key>CFBundleVersion</key>
-       <string>1.17</string>
+       <string>1.19</string>
 </dict>
 </plist>
index b42b8df6a49400392df8bd3e0c8295a12ce5a948..5515f5bc0594306dc14b833526222005eca48a3b 100644 (file)
@@ -7,7 +7,7 @@
        <key>CFBundleExecutable</key>
        <string>SystemConfiguration</string>
        <key>CFBundleGetInfoString</key>
-       <string>1.17</string>
+       <string>1.19</string>
        <key>CFBundleIdentifier</key>
        <string>$(PRODUCT_BUNDLE_IDENTIFIER)</string>
        <key>CFBundleInfoDictionaryVersion</key>
        <key>CFBundlePackageType</key>
        <string>FMWK</string>
        <key>CFBundleShortVersionString</key>
-       <string>1.17</string>
+       <string>1.19</string>
        <key>CFBundleSignature</key>
        <string>????</string>
        <key>CFBundleVersion</key>
-       <string>1.17</string>
+       <string>1.19</string>
 </dict>
 </plist>
index 6d5335e73ed7743587cd299ada5b0d81495a1523..54989bf7d06dfbdcc7ffb39e89841977e1abd41d 100644 (file)
@@ -100,7 +100,7 @@ __getCapabilities(CFStringRef       interfaceName,
        Boolean         ok              = FALSE;
        int             sock            = -1;
 
-       bzero((void *)&ifr, sizeof(ifr));
+       memset((void *)&ifr, 0, sizeof(ifr));
        if (_SC_cfstring_to_cstring(interfaceName, ifr.ifr_name, sizeof(ifr.ifr_name), kCFStringEncodingASCII) == NULL) {
                SC_log(LOG_NOTICE, "could not convert interface name");
                _SCErrorSet(kSCStatusInvalidArgument);
@@ -397,7 +397,7 @@ __copyMediaList(CFStringRef interfaceName)
        int                     sock    = -1;
 
        ifm = (struct ifmediareq *)CFAllocatorAllocate(NULL, sizeof(struct ifmediareq), 0);
-       bzero((void *)ifm, sizeof(*ifm));
+       memset((void *)ifm, 0, sizeof(*ifm));
 
        if (_SC_cfstring_to_cstring(interfaceName, ifm->ifm_name, sizeof(ifm->ifm_name), kCFStringEncodingASCII) == NULL) {
                SC_log(LOG_NOTICE, "could not convert interface name");
@@ -1012,7 +1012,7 @@ SCNetworkInterfaceCopyMTU(SCNetworkInterfaceRef   interface,
                return FALSE;
        }
 
-       bzero((void *)&ifr, sizeof(ifr));
+       memset((void *)&ifr, 0, sizeof(ifr));
        if (_SC_cfstring_to_cstring(interfaceName, ifr.ifr_name, sizeof(ifr.ifr_name), kCFStringEncodingASCII) == NULL) {
                SC_log(LOG_NOTICE, "could not convert interface name");
                _SCErrorSet(kSCStatusInvalidArgument);
diff --git a/SystemConfiguration.fproj/Modules/SystemConfiguration.modulemap b/SystemConfiguration.fproj/Modules/SystemConfiguration.modulemap
new file mode 100644 (file)
index 0000000..2ddaf4b
--- /dev/null
@@ -0,0 +1,21 @@
+framework module SystemConfiguration [extern_c] [system] {
+  umbrella header "SystemConfiguration.h"
+
+  export *
+  module * { export * }
+
+  explicit module CaptiveNetwork {
+    header "CaptiveNetwork.h"
+    export *
+  }
+
+  explicit module DHCPClientPreferences {
+    header "DHCPClientPreferences.h"
+    export *
+  }
+
+  explicit module SCDynamicStoreCopyDHCPInfo {
+    header "SCDynamicStoreCopyDHCPInfo.h"
+    export *
+  }
+}
diff --git a/SystemConfiguration.fproj/Modules/SystemConfiguration.private.modulemap b/SystemConfiguration.fproj/Modules/SystemConfiguration.private.modulemap
new file mode 100644 (file)
index 0000000..c035276
--- /dev/null
@@ -0,0 +1,76 @@
+framework module SystemConfiguration_Private [extern_c] [system] {
+  umbrella header "SCPrivate.h"
+
+  export *
+  module * { export * }
+
+  explicit module SCDPlugin {
+         header "SCDPlugin.h"
+         export *
+  }
+
+  explicit module SCNetworkInterfaceProvider {
+         header "SCNetworkInterfaceProvider.h"
+         export *
+  }
+
+  explicit module SCDynamicStoreCopyDHCPInfo {
+         header "SCDynamicStoreCopyDHCPInfo.h"
+         export *
+  }
+
+  explicit module SCNetworkSignature {
+         header "SCNetworkSignature.h"
+         export *
+  }
+
+  explicit module SCNetworkSignaturePrivate {
+         header "SCNetworkSignaturePrivate.h"
+         export *
+  }
+
+  explicit module SCPreferencesPathKey {
+         header "SCPreferencesPathKey.h"
+         export *
+  }
+
+  explicit module SCValidation {
+         header "SCValidation.h"
+         export *
+  }
+
+  explicit module SNHelperPrivate {
+         header "SNHelperPrivate.h"
+         export *
+  }
+
+  explicit module VPNConfiguration {
+         header "VPNConfiguration.h"
+         export *
+  }
+
+  explicit module VPNFlow {
+         header "VPNFlow.h"
+         export *
+  }
+
+  explicit module VPNPrivate {
+         header "VPNPrivate.h"
+         export *
+  }
+
+  explicit module VPNTunnel {
+         header "VPNTunnel.h"
+         export *
+  }
+
+  explicit module VPNTunnelPrivate {
+         header "VPNTunnelPrivate.h"
+         export *
+  }
+
+  explicit module scprefs_observer {
+         header "scprefs_observer.h"
+         export *
+  }
+}
diff --git a/SystemConfiguration.fproj/Modules/sc_modules.modulemap b/SystemConfiguration.fproj/Modules/sc_modules.modulemap
deleted file mode 100644 (file)
index 78d273c..0000000
+++ /dev/null
@@ -1,22 +0,0 @@
-framework module SystemConfiguration [extern_c] {
-  umbrella header "SystemConfiguration.h"
-
-  export *
-  module * { export * }
-
-  explicit module CaptiveNetwork {
-    header "CaptiveNetwork.h"
-    export *
-  }
-
-  explicit module DHCPClientPreferences {
-    header "DHCPClientPreferences.h"
-    export *
-  }
-
-  explicit module SCDynamicStoreCopyDHCPInfo {
-    header "SCDynamicStoreCopyDHCPInfo.h"
-    export *
-  }
-}
-
index 8b9a638d17e51d78a648b61f00676a57e95550a3..8ff839eb32098e1392af883be6aa75f0dca3c7be 100644 (file)
                        <key>VerboseLogging</key>
                        <integer>0</integer>
                </dict>
+               <key>PPP-VLAN</key>
+               <dict>
+                       <key>ACSPEnabled</key>
+                       <integer>0</integer>
+                       <key>CommUseTerminalScript</key>
+                       <integer>0</integer>
+                       <key>DialOnDemand</key>
+                       <integer>0</integer>
+                       <key>DisconnectOnFastUserSwitch</key>
+                       <integer>1</integer>
+                       <key>DisconnectOnIdle</key>
+                       <integer>0</integer>
+                       <key>DisconnectOnIdleTimer</key>
+                       <integer>1800</integer>
+                       <key>DisconnectOnLogout</key>
+                       <integer>1</integer>
+                       <key>DisconnectOnSleep</key>
+                       <integer>1</integer>
+                       <key>IdleReminder</key>
+                       <integer>0</integer>
+                       <key>IdleReminderTimer</key>
+                       <integer>1800</integer>
+                       <key>LCPEchoEnabled</key>
+                       <integer>1</integer>
+                       <key>LCPEchoFailure</key>
+                       <integer>4</integer>
+                       <key>LCPEchoInterval</key>
+                       <integer>10</integer>
+                       <key>Logfile</key>
+                       <string>/var/log/ppp.log</string>
+                       <key>VerboseLogging</key>
+                       <integer>0</integer>
+               </dict>
                <key>PPP-WWAN</key>
                <dict>
                        <key>ACSPEnabled</key>
                                <integer>1</integer>
                        </dict>
                </dict>
+               <key>PPP-VLAN</key>
+               <dict>
+                       <key>DNS</key>
+                       <dict/>
+                       <key>IPv4</key>
+                       <dict>
+                               <key>ConfigMethod</key>
+                               <string>PPP</string>
+                       </dict>
+                       <key>IPv6</key>
+                       <dict>
+                               <key>ConfigMethod</key>
+                               <string>Automatic</string>
+                       </dict>
+                       <key>Proxies</key>
+                       <dict>
+                               <key>FTPPassive</key>
+                               <integer>1</integer>
+                       </dict>
+               </dict>
                <key>PPP-WWAN</key>
                <dict>
                        <key>DNS</key>
index c195cff5b20184289cb724a3a5cf77a9b1b6687d..3fc0dc04de35dd0329bfeb25c8988b5782cfc51a 100644 (file)
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2000-2008, 2010-2017 Apple Inc. All rights reserved.
+ * Copyright (c) 2000-2008, 2010-2019 Apple Inc. All rights reserved.
  *
  * @APPLE_LICENSE_HEADER_START@
  *
@@ -105,10 +105,6 @@ __SCGetThreadSpecificData()
 #pragma mark Logging
 
 
-#define kASLModule             "ASLModule"
-#define kASLOption             "ASLOption"
-#define kLoggerID              "LoggerID"
-
 #define        ENABLE_SC_FORMATTING
 #ifdef ENABLE_SC_FORMATTING
 // from <CoreFoundation/ForFoundationOnly.h>
index 6589099964f359b620e80b4af1c2393dba79fbe7..3c8650eb7ab7ee67ccad922dc2a48dd450cf21e1 100644 (file)
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2000-2005, 2009-2011, 2013, 2016, 2017 Apple Inc. All rights reserved.
+ * Copyright (c) 2000-2005, 2009-2011, 2013, 2016, 2017, 2019 Apple Inc. All rights reserved.
  *
  * @APPLE_LICENSE_HEADER_START@
  *
@@ -73,10 +73,6 @@ SCDynamicStoreAddTemporaryValue(SCDynamicStoreRef store, CFStringRef key, CFProp
                return FALSE;
        }
 
-#ifdef VERBOSE_ACTIVITY_LOGGING
-       os_activity_scope(storePrivate->activity);
-#endif // VERBOSE_ACTIVITY_LOGGING
-
     retry :
 
        /* send the key & data to the server */
@@ -150,10 +146,6 @@ SCDynamicStoreAddValue(SCDynamicStoreRef store, CFStringRef key, CFPropertyListR
                return FALSE;
        }
 
-#ifdef VERBOSE_ACTIVITY_LOGGING
-       os_activity_scope(storePrivate->activity);
-#endif // VERBOSE_ACTIVITY_LOGGING
-
     retry :
 
        /* send the key & data to the server */
diff --git a/SystemConfiguration.fproj/SCDCache.c b/SystemConfiguration.fproj/SCDCache.c
new file mode 100644 (file)
index 0000000..d3c6275
--- /dev/null
@@ -0,0 +1,152 @@
+/*
+ * Copyright (c) 2018 Apple Inc. All rights reserved.
+ *
+ * @APPLE_LICENSE_HEADER_START@
+ *
+ * This file contains Original Code and/or Modifications of Original Code
+ * as defined in and that are subject to the Apple Public Source License
+ * Version 2.0 (the 'License'). You may not use this file except in
+ * compliance with the License. Please obtain a copy of the License at
+ * http://www.opensource.apple.com/apsl/ and read it before using this
+ * file.
+ *
+ * The Original Code and all software distributed under the License are
+ * distributed on an 'AS IS' basis, WITHOUT WARRANTY OF ANY KIND, EITHER
+ * EXPRESS OR IMPLIED, AND APPLE HEREBY DISCLAIMS ALL SUCH WARRANTIES,
+ * INCLUDING WITHOUT LIMITATION, ANY WARRANTIES OF MERCHANTABILITY,
+ * FITNESS FOR A PARTICULAR PURPOSE, QUIET ENJOYMENT OR NON-INFRINGEMENT.
+ * Please see the License for the specific language governing rights and
+ * limitations under the License.
+ *
+ * @APPLE_LICENSE_HEADER_END@
+ */
+
+/*
+ * Modification History
+ *
+ * Oct 1, 2018 Allan Nathanson <ajn@apple.com>
+ * - initial revision
+ */
+
+
+#ifdef SC_LOG_HANDLE
+#include <os/log.h>
+os_log_t       SC_LOG_HANDLE(void);
+#endif //SC_LOG_HANDLE
+
+#include "SCDynamicStoreInternal.h"
+
+
+Boolean
+_SCDynamicStoreCacheIsActive(SCDynamicStoreRef store)
+{
+       SCDynamicStorePrivateRef        storePrivate    = (SCDynamicStorePrivateRef)store;
+
+       if (store == NULL) {
+               // sorry, you must provide a session
+               _SCErrorSet(kSCStatusNoStoreSession);
+               return FALSE;
+       }
+
+       return storePrivate->cache_active;
+}
+
+
+static void
+__SCDynamicStoreCacheRelease(SCDynamicStoreRef store)
+{
+       SCDynamicStorePrivateRef        storePrivate    = (SCDynamicStorePrivateRef)store;
+
+       if (storePrivate->cached_keys != NULL) {
+               CFRelease(storePrivate->cached_keys);
+               storePrivate->cached_keys = NULL;
+       }
+       if (storePrivate->cached_set != NULL) {
+               CFRelease(storePrivate->cached_set);
+               storePrivate->cached_set = NULL;
+       }
+       if (storePrivate->cached_removals != NULL) {
+               CFRelease(storePrivate->cached_removals);
+               storePrivate->cached_removals = NULL;
+       }
+       if (storePrivate->cached_notifys != NULL) {
+               CFRelease(storePrivate->cached_notifys);
+               storePrivate->cached_notifys = NULL;
+       }
+
+       return;
+}
+
+
+Boolean
+_SCDynamicStoreCacheOpen(SCDynamicStoreRef store)
+{
+       SCDynamicStorePrivateRef        storePrivate    = (SCDynamicStorePrivateRef)store;
+
+       if (store == NULL) {
+               // sorry, you must provide a session
+               _SCErrorSet(kSCStatusNoStoreSession);
+               return FALSE;
+       }
+
+       __SCDynamicStoreCacheRelease(store);    // if we are already using the cache, start clean
+       storePrivate->cache_active = TRUE;
+
+       return TRUE;
+}
+
+
+Boolean
+_SCDynamicStoreCacheCommitChanges(SCDynamicStoreRef store)
+{
+       Boolean                         ok              = TRUE;
+       SCDynamicStorePrivateRef        storePrivate    = (SCDynamicStorePrivateRef)store;
+
+       if (store == NULL) {
+               // sorry, you must provide a session
+               _SCErrorSet(kSCStatusNoStoreSession);
+               return FALSE;
+       }
+
+       if (!storePrivate->cache_active) {
+               // if not using the cache
+               _SCErrorSet(kSCStatusFailed);
+               return FALSE;
+       }
+
+       if ((storePrivate->cached_set != NULL) ||
+           (storePrivate->cached_removals != NULL) ||
+           (storePrivate->cached_notifys != NULL)) {
+               ok = SCDynamicStoreSetMultiple(store,
+                                              storePrivate->cached_set,
+                                              storePrivate->cached_removals,
+                                              storePrivate->cached_notifys);
+               __SCDynamicStoreCacheRelease(store);
+       }
+
+       return ok;
+}
+
+
+Boolean
+_SCDynamicStoreCacheClose(SCDynamicStoreRef store)
+{
+       SCDynamicStorePrivateRef        storePrivate    = (SCDynamicStorePrivateRef)store;
+
+       if (store == NULL) {
+               // sorry, you must provide a session
+               _SCErrorSet(kSCStatusNoStoreSession);
+               return FALSE;
+       }
+
+       if (!storePrivate->cache_active) {
+               // if not using the cache
+               _SCErrorSet(kSCStatusFailed);
+               return FALSE;
+       }
+
+       __SCDynamicStoreCacheRelease(store);
+       storePrivate->cache_active = FALSE;
+
+       return TRUE;
+}
index ed0d196fff2ee0ae39c360b00592b93a71c0beef..3f6b72d4c0996d290cf40f778fc3810ae67542b3 100644 (file)
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2000-2005, 2009-2011, 2013, 2016, 2017 Apple Inc. All rights reserved.
+ * Copyright (c) 2000-2005, 2009-2011, 2013, 2016-2019 Apple Inc. All rights reserved.
  *
  * @APPLE_LICENSE_HEADER_START@
  *
@@ -86,10 +86,6 @@ SCDynamicStoreCopyMultiple(SCDynamicStoreRef store,
                }
        }
 
-#ifdef VERBOSE_ACTIVITY_LOGGING
-       os_activity_scope(storePrivate->activity);
-#endif // VERBOSE_ACTIVITY_LOGGING
-
     retry :
 
        /* send the keys and patterns, fetch the associated result from the server */
@@ -109,27 +105,29 @@ SCDynamicStoreCopyMultiple(SCDynamicStoreRef      store,
                goto retry;
        }
 
-       /* clean up */
-       if (xmlKeys != NULL)            CFRelease(xmlKeys);
-       if (xmlPatterns != NULL)        CFRelease(xmlPatterns);
-
        if (sc_status != kSCStatusOK) {
                if (xmlDictRef != NULL) {
                        (void) vm_deallocate(mach_task_self(), (vm_address_t)xmlDictRef, xmlDictLen);
                }
                _SCErrorSet(sc_status);
-               return NULL;
+               goto done;
        }
 
        /* un-serialize the dictionary */
        if (!_SCUnserialize((CFPropertyListRef *)&dict, NULL, xmlDictRef, xmlDictLen)) {
                _SCErrorSet(kSCStatusFailed);
-               return NULL;
+               goto done;
        }
 
        expDict = _SCUnserializeMultiple(dict);
        CFRelease(dict);
 
+    done:
+
+       /* clean up */
+       if (xmlKeys != NULL)            CFRelease(xmlKeys);
+       if (xmlPatterns != NULL)        CFRelease(xmlPatterns);
+
        return expDict;
 }
 
@@ -163,16 +161,35 @@ SCDynamicStoreCopyValue(SCDynamicStoreRef store, CFStringRef key)
                return NULL;    /* you must have an open session to play */
        }
 
+       if (storePrivate->cache_active) {
+               if ((storePrivate->cached_set != NULL) &&
+                   CFDictionaryGetValueIfPresent(storePrivate->cached_set, key, (const void **)&data)) {
+                       // if we have "set" a new value
+                       return (CFRetain(data));
+               }
+
+               if ((storePrivate->cached_removals != NULL) &&
+                   CFArrayContainsValue(storePrivate->cached_removals,
+                                        CFRangeMake(0, CFArrayGetCount(storePrivate->cached_removals)),
+                                        key)) {
+                       // if we have "removed" the key
+                       _SCErrorSet(kSCStatusNoKey);
+                       return NULL;
+               }
+
+               if ((storePrivate->cached_keys != NULL) &&
+                   CFDictionaryGetValueIfPresent(storePrivate->cached_keys, key, (const void **)&data)) {
+                       // if we have a cached value
+                       return (CFRetain(data));
+               }
+       }
+
        /* serialize the key */
        if (!_SCSerializeString(key, &utfKey, (void **)&myKeyRef, &myKeyLen)) {
                _SCErrorSet(kSCStatusFailed);
                return NULL;
        }
 
-#ifdef VERBOSE_ACTIVITY_LOGGING
-       os_activity_scope(storePrivate->activity);
-#endif // VERBOSE_ACTIVITY_LOGGING
-
     retry :
 
        /* send the key & fetch the associated data from the server */
@@ -208,5 +225,15 @@ SCDynamicStoreCopyValue(SCDynamicStoreRef store, CFStringRef key)
                return NULL;
        }
 
+       if (storePrivate->cache_active && (data != NULL)) {
+               if (storePrivate->cached_keys == NULL) {
+                       storePrivate->cached_keys = CFDictionaryCreateMutable(NULL,
+                                                                             0,
+                                                                             &kCFTypeDictionaryKeyCallBacks,
+                                                                             &kCFTypeDictionaryValueCallBacks);
+               }
+               CFDictionarySetValue(storePrivate->cached_keys, key, data);
+       }
+
        return data;
 }
index c11c2ddc1af6c9ca9338979c254ee826b9dc5c27..c45e9f0e054937aadc0f7eb65482c912f8c8e595 100644 (file)
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2000-2005, 2009-2011, 2013, 2016, 2017 Apple Inc. All rights reserved.
+ * Copyright (c) 2000-2005, 2009-2011, 2013, 2016, 2017, 2019 Apple Inc. All rights reserved.
  *
  * @APPLE_LICENSE_HEADER_START@
  *
@@ -68,10 +68,6 @@ SCDynamicStoreCopyKeyList(SCDynamicStoreRef store, CFStringRef pattern)
                return NULL;
        }
 
-#ifdef VERBOSE_ACTIVITY_LOGGING
-       os_activity_scope(storePrivate->activity);
-#endif // VERBOSE_ACTIVITY_LOGGING
-
     retry :
 
        /* send the pattern & fetch the associated data from the server */
index d9f581b54747e336f1e4424d360f556ca7387636..42e5800028baefff9d546eeb10452637d7065c2c 100644 (file)
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2000-2005, 2009-2011, 2013, 2016, 2017 Apple Inc. All rights reserved.
+ * Copyright (c) 2000-2005, 2009-2011, 2013, 2016, 2017, 2019 Apple Inc. All rights reserved.
  *
  * @APPLE_LICENSE_HEADER_START@
  *
@@ -75,10 +75,6 @@ SCDynamicStoreAddWatchedKey(SCDynamicStoreRef store, CFStringRef key, Boolean is
                return FALSE;
        }
 
-#ifdef VERBOSE_ACTIVITY_LOGGING
-       os_activity_scope(storePrivate->activity);
-#endif // VERBOSE_ACTIVITY_LOGGING
-
     retry :
 
        /* send the key to the server */
index 91c67ef65bf6d4a96a5dbccda061c0e2f165c728..e5cacde67e3349bd8da3993c472c12c9cb5943a4 100644 (file)
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2000-2005, 2008-2011, 2015-2017 Apple Inc. All rights reserved.
+ * Copyright (c) 2000-2005, 2008-2011, 2015-2017, 2019 Apple Inc. All rights reserved.
  *
  * @APPLE_LICENSE_HEADER_START@
  *
@@ -37,9 +37,6 @@
 Boolean
 SCDynamicStoreNotifyCancel(SCDynamicStoreRef store)
 {
-#ifdef VERBOSE_ACTIVITY_LOGGING
-       struct os_activity_scope_state_s        activity_state;
-#endif // VERBOSE_ACTIVITY_LOGGING
        SCDynamicStorePrivateRef                storePrivate = (SCDynamicStorePrivateRef)store;
        kern_return_t                           status;
        int                                     sc_status;
@@ -78,10 +75,6 @@ SCDynamicStoreNotifyCancel(SCDynamicStoreRef store)
                goto done;
        }
 
-#ifdef VERBOSE_ACTIVITY_LOGGING
-       os_activity_scope_enter(storePrivate->activity, &activity_state);
-#endif // VERBOSE_ACTIVITY_LOGGING
-
        status = notifycancel(storePrivate->server, (int *)&sc_status);
 
        if (__SCDynamicStoreCheckRetryAndHandleError(store,
@@ -91,10 +84,6 @@ SCDynamicStoreNotifyCancel(SCDynamicStoreRef store)
                sc_status = kSCStatusOK;
        }
 
-#ifdef VERBOSE_ACTIVITY_LOGGING
-       os_activity_scope_leave(&activity_state);
-#endif // VERBOSE_ACTIVITY_LOGGING
-
     done :
 
        if (sc_status != kSCStatusOK) {
index 1ff609f51685031c79b4f737babce6918ea21b23..a0c41c23ad4f8533678d541fca187bb320246ebb 100644 (file)
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2000, 2001, 2003-2005, 2009-2011, 2016, 2017 Apple Inc. All rights reserved.
+ * Copyright (c) 2000, 2001, 2003-2005, 2009-2011, 2016, 2017, 2019 Apple Inc. All rights reserved.
  *
  * @APPLE_LICENSE_HEADER_START@
  *
@@ -55,10 +55,6 @@ SCDynamicStoreCopyNotifiedKeys(SCDynamicStoreRef store)
                return NULL;
        }
 
-#ifdef VERBOSE_ACTIVITY_LOGGING
-       os_activity_scope(storePrivate->activity);
-#endif // VERBOSE_ACTIVITY_LOGGING
-
     retry :
 
        /* send the key & fetch the associated data from the server */
index 484fd64b880152f9996684da7596c1e1a48be403..50abd52a16fc2cee16c8c4ba6592b93acd971887 100644 (file)
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2000-2005, 2008-2018 Apple Inc. All rights reserved.
+ * Copyright (c) 2000-2005, 2008-2019 Apple Inc. All rights reserved.
  *
  * @APPLE_LICENSE_HEADER_START@
  *
 #endif
 
 
+static void
+removeReceiveRight(SCDynamicStoreRef store, mach_port_t port)
+{
+       /* remove our receive right */
+#ifdef HAVE_MACHPORT_GUARDS
+       (void) mach_port_destruct(mach_task_self(), port, 0, (mach_port_context_t)store);
+#else  // HAVE_MACHPORT_GUARDS
+       (void) mach_port_mod_refs(mach_task_self(), port, MACH_PORT_RIGHT_RECEIVE, -1);
+#endif // HAVE_MACHPORT_GUARDS
+       return;
+}
+
+
+#define        MAX_INVALID_RIGHT_RETRY 3
+
 static mach_port_t
-acquireNotifyPort(SCDynamicStoreRef store)
+addNotifyPort(SCDynamicStoreRef store)
 {
-       kern_return_t                   kr;
-       mach_port_t                     oldNotify;
+       kern_return_t                           kr;
+       mach_port_t                             oldNotify;
 #ifdef HAVE_MACHPORT_GUARDS
-       mach_port_options_t             opts;
+       mach_port_options_t                     opts;
 #endif // HAVE_MACHPORT_GUARDS
-       mach_port_t                     port;
-       int                             sc_status;
-       SCDynamicStorePrivateRef        storePrivate    = (SCDynamicStorePrivateRef)store;
+       mach_port_t                             port;
+       int                                     sc_status;
+       SCDynamicStorePrivateRef                storePrivate    = (SCDynamicStorePrivateRef)store;
+       int                                     try             = 0;
 
        /* allocate a mach port for the SCDynamicStore notifications */
 
@@ -68,11 +84,10 @@ acquireNotifyPort(SCDynamicStoreRef store)
        if (kr != KERN_SUCCESS) {
                SC_log(LOG_NOTICE, "could not allocate mach port: %s", mach_error_string(kr));
                if ((kr == KERN_NO_SPACE) || (kr == KERN_RESOURCE_SHORTAGE)) {
-                       sleep(1);
+                       usleep(50 * 1000);      // sleep 50ms between attempts
                        goto retry_allocate;
-               } else {
-                       return MACH_PORT_NULL;
                }
+               goto fail;
        }
 
 #ifndef        HAVE_MACHPORT_GUARDS
@@ -87,7 +102,7 @@ acquireNotifyPort(SCDynamicStoreRef store)
                 * the port alone).
                 */
                SC_log(LOG_NOTICE, "mach_port_insert_right() failed: %s", mach_error_string(kr));
-               return MACH_PORT_NULL;
+               goto fail;
        }
 #endif // HAVE_MACHPORT_GUARDS
 
@@ -106,7 +121,7 @@ acquireNotifyPort(SCDynamicStoreRef store)
                 * the port alone).
                 */
                SC_log(LOG_NOTICE, "mach_port_request_notification() failed: %s", mach_error_string(kr));
-               return MACH_PORT_NULL;
+               goto fail;
        }
 
        if (oldNotify != MACH_PORT_NULL) {
@@ -114,51 +129,77 @@ acquireNotifyPort(SCDynamicStoreRef store)
        }
 
 #ifdef DEBUG
-       SC_log(LOG_DEBUG, "  establish notification request with SCDynamicStore server");
+       SC_log(LOG_DEBUG, "+ establish notification request w/port=0x%x (%d) with SCDynamicStore server (%@)",
+              port, port,
+              (storePrivate->name != NULL) ? storePrivate->name : CFSTR("?"));
 #endif /* DEBUG */
 
-#ifdef VERBOSE_ACTIVITY_LOGGING
-       os_activity_scope(storePrivate->activity);
-#endif // VERBOSE_ACTIVITY_LOGGING
-
     retry :
 
-       __MACH_PORT_DEBUG(TRUE, "*** rlsSchedule", port);
+       __MACH_PORT_DEBUG(TRUE, "*** addNotifyPort", port);
        kr = notifyviaport(storePrivate->server, port, 0, (int *)&sc_status);
 
+       if (kr == MACH_SEND_INVALID_RIGHT) {
+               /*
+                * the notifyviaport() call was not able to pass/process
+                * the [notify port] send right.  This was most likely due
+                * to the [SCDynamicStore] server having restarted.  We
+                * handle this issue by removing the remaining receive
+                * right, reallocating the notify port, and retrying
+                * the operation.
+                */
+               SC_log((try++ < MAX_INVALID_RIGHT_RETRY) ? LOG_INFO : LOG_ERR,
+                      "SCDynamicStore callback notifyviaport() w/port 0x%x (%d) failed (try %d): %s",
+                      port, port,
+                      try,
+                      mach_error_string(kr));
+
+               removeReceiveRight(store, port);
+       }
+
        if (__SCDynamicStoreCheckRetryAndHandleError(store,
                                                     kr,
                                                     &sc_status,
-                                                    "rlsSchedule notifyviaport()")) {
+                                                    "SCDynamicStore callback notifyviaport()")) {
+               if (kr == MACH_SEND_INVALID_RIGHT) {
+                       if (try <= MAX_INVALID_RIGHT_RETRY) {
+                               goto retry_allocate;
+                       }
+                       goto fail;
+               }
                goto retry;
        }
 
+       if (try > 0) {
+               SC_log(LOG_INFO,
+                      "SCDynamicStore callback notifyviaport() succeeded after %d retr%s w/port 0x%x (%d)",
+                      try,
+                      (try == 1) ? "y" : "ies",
+                      port, port);
+       }
+
        if (kr != KERN_SUCCESS) {
                if ((kr == MACH_SEND_INVALID_DEST) || (kr == MIG_SERVER_DIED)) {
                        /* remove the send right that we tried (but failed) to pass to the server */
                        (void) mach_port_deallocate(mach_task_self(), port);
                }
-
-               /* remove our receive right  */
-#ifdef HAVE_MACHPORT_GUARDS
-               (void) mach_port_destruct(mach_task_self(), port, 0, (mach_port_context_t)store);
-#else  // HAVE_MACHPORT_GUARDS
-               (void) mach_port_mod_refs(mach_task_self(), port, MACH_PORT_RIGHT_RECEIVE, -1);
-#endif // HAVE_MACHPORT_GUARDS
-               return MACH_PORT_NULL;
+               removeReceiveRight(store, port);
+               goto fail;
        }
 
        if (sc_status != kSCStatusOK) {
-               /* something [else] didn't work, remove our receive right  */
-#ifdef HAVE_MACHPORT_GUARDS
-               (void) mach_port_destruct(mach_task_self(), port, 0, (mach_port_context_t)store);
-#else  // HAVE_MACHPORT_GUARDS
-               (void) mach_port_mod_refs(mach_task_self(), port, MACH_PORT_RIGHT_RECEIVE, -1);
-#endif // HAVE_MACHPORT_GUARDS
-               return MACH_PORT_NULL;
+               /* something [else] didn't work  */
+               removeReceiveRight(store, port);
+               kr = sc_status;
+               goto fail;
        }
 
        return port;
+
+    fail :
+
+       _SCErrorSet(kr);
+       return MACH_PORT_NULL;
 }
 
 
@@ -186,6 +227,12 @@ rlsCallback(CFMachPortRef port, void *msg, CFIndex size, void *info)
        SCDynamicStoreRef               store           = (SCDynamicStoreRef)info;
        SCDynamicStorePrivateRef        storePrivate    = (SCDynamicStorePrivateRef)store;
 
+#ifdef DEBUG
+       SC_log(LOG_DEBUG, "mach port callback, %ssignal RLS(%@)",
+              (msgid == MACH_NOTIFY_NO_SENDERS) ? "reconnect and " : "",
+              (storePrivate->name != NULL) ? storePrivate->name : CFSTR("?"));
+#endif /* DEBUG */
+
        if (msgid == MACH_NOTIFY_NO_SENDERS) {
                /* the server died, disable additional callbacks */
 #ifdef DEBUG
@@ -202,10 +249,6 @@ rlsCallback(CFMachPortRef port, void *msg, CFIndex size, void *info)
                (void)__SCDynamicStoreReconnectNotifications(store);
        }
 
-#ifdef DEBUG
-       SC_log(LOG_DEBUG, "mach port callback, signal RLS");
-#endif /* DEBUG */
-
        /* signal the real runloop source */
        if (storePrivate->rls != NULL) {
                CFRunLoopSourceSignal(storePrivate->rls);
@@ -238,12 +281,12 @@ rlsSchedule(void *info, CFRunLoopRef rl, CFStringRef mode)
                SC_log(LOG_DEBUG, "  activate callback runloop source");
 #endif /* DEBUG */
 
-               port = acquireNotifyPort(store);
+               port = addNotifyPort(store);
                if (port == MACH_PORT_NULL) {
                        return;
                }
 
-               __MACH_PORT_DEBUG(TRUE, "*** rlsSchedule (after notifyviaport)", port);
+               __MACH_PORT_DEBUG(TRUE, "*** rlsSchedule (after addNotifyPort)", port);
                storePrivate->rlsNotifyPort = _SC_CFMachPortCreateWithPort("SCDynamicStore",
                                                                           port,
                                                                           rlsCallback,
@@ -345,21 +388,13 @@ rlsCancel(void *info, CFRunLoopRef rl, CFStringRef mode)
                        storePrivate->rlsNotifyPort = NULL;
 
                        /* and, finally, remove our receive right  */
-#ifdef HAVE_MACHPORT_GUARDS
-                       (void) mach_port_destruct(mach_task_self(), mp, 0, (mach_port_context_t)store);
-#else  // HAVE_MACHPORT_GUARDS
-                       (void) mach_port_mod_refs(mach_task_self(), mp, MACH_PORT_RIGHT_RECEIVE, -1);
-#endif // HAVE_MACHPORT_GUARDS
+                       removeReceiveRight(store, mp);
                }
 
 #ifdef DEBUG
                SC_log(LOG_DEBUG, "  cancel notification request with SCDynamicStore server");
 #endif /* DEBUG */
 
-#ifdef VERBOSE_ACTIVITY_LOGGING
-               os_activity_scope(storePrivate->activity);
-#endif // VERBOSE_ACTIVITY_LOGGING
-
                if (storePrivate->server != MACH_PORT_NULL) {
                        kr = notifycancel(storePrivate->server, (int *)&sc_status);
 
@@ -392,7 +427,8 @@ rlsPerform(void *info)
        SCDynamicStorePrivateRef        storePrivate    = (SCDynamicStorePrivateRef)store;
 
 #ifdef DEBUG
-       SC_log(LOG_DEBUG, "  executing notification function");
+       SC_log(LOG_DEBUG, "handling SCDynamicStore changes (%@)",
+              (storePrivate->name != NULL) ? storePrivate->name : CFSTR("?"));
 #endif /* DEBUG */
 
        changedKeys = SCDynamicStoreCopyNotifiedKeys(store);
@@ -416,8 +452,9 @@ rlsPerform(void *info)
                context_release = NULL;
        }
        if (rlsFunction != NULL) {
-               SC_log(LOG_DEBUG, "exec SCDynamicStore callout");
+               SC_log(LOG_DEBUG, "exec SCDynamicStore callout");
                (*rlsFunction)(store, changedKeys, context_info);
+               SC_log(LOG_DEBUG, "+ done");
        }
        if (context_release != NULL) {
                context_release(context_info);
@@ -426,7 +463,7 @@ rlsPerform(void *info)
     done :
 
 #ifdef DEBUG
-       SC_log(LOG_DEBUG, "  done!");
+       SC_log(LOG_DEBUG, "done");
 #endif /* DEBUG */
 
        if (changedKeys != NULL) {
@@ -551,6 +588,11 @@ SCDynamicStoreSetDispatchQueue(SCDynamicStoreRef store, dispatch_queue_t queue)
                        return FALSE;
                }
 
+#ifdef DEBUG
+               SC_log(LOG_DEBUG, "unschedule notifications from dispatch queue (%@)",
+                      (storePrivate->name != NULL) ? storePrivate->name : CFSTR("?"));
+#endif /* DEBUG */
+
                ok = TRUE;
                goto cleanup;
        }
@@ -570,7 +612,8 @@ SCDynamicStoreSetDispatchQueue(SCDynamicStoreRef store, dispatch_queue_t queue)
        }
 
 #ifdef DEBUG
-       SC_log(LOG_DEBUG, "schedule notifications for dispatch queue");
+       SC_log(LOG_DEBUG, "schedule notifications for dispatch queue (%@)",
+              (storePrivate->name != NULL) ? storePrivate->name : CFSTR("?"));
 #endif /* DEBUG */
 
        //
@@ -580,10 +623,14 @@ SCDynamicStoreSetDispatchQueue(SCDynamicStoreRef store, dispatch_queue_t queue)
        //
        storePrivate->notifyStatus = Using_NotifierInformViaDispatch;
 
-       mp = acquireNotifyPort(store);
+       mp = addNotifyPort(store);
        if (mp == MACH_PORT_NULL) {
                // if we could not schedule the notification
                _SCErrorSet(kSCStatusFailed);
+#ifdef DEBUG
+               SC_log(LOG_DEBUG, "addNotifyPort() failed (%@)",
+                      (storePrivate->name != NULL) ? storePrivate->name : CFSTR("?"));
+#endif /* DEBUG */
                goto cleanup;
        }
 
@@ -612,11 +659,7 @@ SCDynamicStoreSetDispatchQueue(SCDynamicStoreRef store, dispatch_queue_t queue)
                SC_log(LOG_NOTICE, "dispatch_source_create() failed");
 
                //  remove our receive right
-#ifdef HAVE_MACHPORT_GUARDS
-               (void) mach_port_destruct(mach_task_self(), mp, 0, (mach_port_context_t)store);
-#else  // HAVE_MACHPORT_GUARDS
-               (void) mach_port_mod_refs(mach_task_self(), mp, MACH_PORT_RIGHT_RECEIVE, -1);
-#endif // HAVE_MACHPORT_GUARDS
+               removeReceiveRight(store, mp);
 
                _SCErrorSet(kSCStatusFailed);
                goto cleanup;
@@ -626,7 +669,8 @@ SCDynamicStoreSetDispatchQueue(SCDynamicStoreRef store, dispatch_queue_t queue)
                kern_return_t   kr;
                mach_msg_id_t   msgid;
                union {
-                       u_int8_t                        buf[sizeof(mach_msg_empty_t) + MAX_TRAILER_SIZE];
+                       u_int8_t                        buf1[sizeof(mach_msg_empty_rcv_t) + MAX_TRAILER_SIZE];
+                       u_int8_t                        buf2[sizeof(mach_no_senders_notification_t) + MAX_TRAILER_SIZE];
                        mach_msg_empty_rcv_t            msg;
                        mach_no_senders_notification_t  no_senders;
                } notify_msg;
@@ -647,7 +691,8 @@ SCDynamicStoreSetDispatchQueue(SCDynamicStoreRef store, dispatch_queue_t queue)
                mach_msg_destroy(&notify_msg.msg.header);
 
 #ifdef DEBUG
-               SC_log(LOG_DEBUG, "dispatch source callback, queue rlsPerform");
+               SC_log(LOG_DEBUG, "dispatch source callback, queue rlsPerform (%@)",
+                      (storePrivate->name != NULL) ? storePrivate->name : CFSTR("?"));
 #endif /* DEBUG */
 
                CFRetain(store);
@@ -662,16 +707,12 @@ SCDynamicStoreSetDispatchQueue(SCDynamicStoreRef store, dispatch_queue_t queue)
        });
 
        dispatch_source_set_cancel_handler(source, ^{
-               __MACH_PORT_DEBUG((storePrivate->rlsNotifyPort != NULL),
-                                 "*** SCDynamicStoreSetDispatchQueue (before releasing source/port)",
+               __MACH_PORT_DEBUG(TRUE,
+                                 "*** SCDynamicStoreSetDispatchQueue (before cancel)",
                                  mp);
 
                // remove our receive right
-#ifdef HAVE_MACHPORT_GUARDS
-               (void) mach_port_destruct(mach_task_self(), mp, 0, (mach_port_context_t)store);
-#else  // HAVE_MACHPORT_GUARDS
-               (void) mach_port_mod_refs(mach_task_self(), mp, MACH_PORT_RIGHT_RECEIVE, -1);
-#endif // HAVE_MACHPORT_GUARDS
+               removeReceiveRight(store, mp);
 
                // release source
                dispatch_release(source);
@@ -684,10 +725,6 @@ SCDynamicStoreSetDispatchQueue(SCDynamicStoreRef store, dispatch_queue_t queue)
 
     cleanup :
 
-#ifdef DEBUG
-       SC_log(LOG_DEBUG, "cancel notifications for dispatch queue");
-#endif /* DEBUG */
-
        CFRetain(store);
 
        if (storePrivate->dispatchSource != NULL) {
index e8abafac5df79eaff0458a33e766a65bcbbd7a12..a76c93f20386d159ed827b2b3e0e8308740723e8 100644 (file)
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2000, 2001, 2003-2005, 2008-2011, 2013, 2015-2017 Apple Inc. All rights reserved.
+ * Copyright (c) 2000, 2001, 2003-2005, 2008-2011, 2013, 2015-2017, 2019 Apple Inc. All rights reserved.
  *
  * @APPLE_LICENSE_HEADER_START@
  *
@@ -45,9 +45,6 @@ SCDynamicStoreNotifyFileDescriptor(SCDynamicStoreRef  store,
                                    int32_t             identifier,
                                    int                 *fd)
 {
-#ifdef VERBOSE_ACTIVITY_LOGGING
-       struct os_activity_scope_state_s        activity_state;
-#endif // VERBOSE_ACTIVITY_LOGGING
        int                                     fildes[2]       = { -1, -1 };
        fileport_t                              fileport        = MACH_PORT_NULL;
        int                                     ret;
@@ -93,10 +90,6 @@ SCDynamicStoreNotifyFileDescriptor(SCDynamicStoreRef store,
                goto fail;
        }
 
-#ifdef VERBOSE_ACTIVITY_LOGGING
-       os_activity_scope_enter(storePrivate->activity, &activity_state);
-#endif // VERBOSE_ACTIVITY_LOGGING
-
     retry :
 
        status = notifyviafd(storePrivate->server,
@@ -111,10 +104,6 @@ SCDynamicStoreNotifyFileDescriptor(SCDynamicStoreRef       store,
                goto retry;
        }
 
-#ifdef VERBOSE_ACTIVITY_LOGGING
-       os_activity_scope_leave(&activity_state);
-#endif // VERBOSE_ACTIVITY_LOGGING
-
        if (status != KERN_SUCCESS) {
                _SCErrorSet(status);
                goto fail;
diff --git a/SystemConfiguration.fproj/SCDNotifierInformViaSignal.c b/SystemConfiguration.fproj/SCDNotifierInformViaSignal.c
deleted file mode 100644 (file)
index 1f8e737..0000000
+++ /dev/null
@@ -1,94 +0,0 @@
-/*
- * Copyright (c) 2000, 2001, 2004, 2005, 2009-2011, 2015-2017 Apple Inc. All rights reserved.
- *
- * @APPLE_LICENSE_HEADER_START@
- *
- * This file contains Original Code and/or Modifications of Original Code
- * as defined in and that are subject to the Apple Public Source License
- * Version 2.0 (the 'License'). You may not use this file except in
- * compliance with the License. Please obtain a copy of the License at
- * http://www.opensource.apple.com/apsl/ and read it before using this
- * file.
- *
- * The Original Code and all software distributed under the License are
- * distributed on an 'AS IS' basis, WITHOUT WARRANTY OF ANY KIND, EITHER
- * EXPRESS OR IMPLIED, AND APPLE HEREBY DISCLAIMS ALL SUCH WARRANTIES,
- * INCLUDING WITHOUT LIMITATION, ANY WARRANTIES OF MERCHANTABILITY,
- * FITNESS FOR A PARTICULAR PURPOSE, QUIET ENJOYMENT OR NON-INFRINGEMENT.
- * Please see the License for the specific language governing rights and
- * limitations under the License.
- *
- * @APPLE_LICENSE_HEADER_END@
- */
-
-/*
- * Modification History
- *
- * June 1, 2001                        Allan Nathanson <ajn@apple.com>
- * - public API conversion
- *
- * March 31, 2000              Allan Nathanson <ajn@apple.com>
- * - initial revision
- */
-
-#include "SCDynamicStoreInternal.h"
-#include "config.h"            /* MiG generated file */
-
-Boolean
-SCDynamicStoreNotifySignal(SCDynamicStoreRef store, pid_t pid, int sig)
-{
-       SCDynamicStorePrivateRef        storePrivate = (SCDynamicStorePrivateRef)store;
-       kern_return_t                   status;
-       int                             sc_status;
-       task_t                          task;
-
-       if (store == NULL) {
-               /* sorry, you must provide a session */
-               _SCErrorSet(kSCStatusNoStoreSession);
-               return FALSE;
-       }
-
-       if (storePrivate->server == MACH_PORT_NULL) {
-               /* sorry, you must have an open session to play */
-               _SCErrorSet(kSCStatusNoStoreServer);
-               return FALSE;
-       }
-
-       if (storePrivate->notifyStatus != NotifierNotRegistered) {
-               /* sorry, you can only have one notification registered at once */
-               _SCErrorSet(kSCStatusNotifierActive);
-               return FALSE;
-       }
-
-       status = task_for_pid(mach_task_self(), pid, &task);
-       if (status != KERN_SUCCESS) {
-               SC_log(LOG_ERR, "task_for_pid() failed: %s", mach_error_string(status));
-               _SCErrorSet(status);
-               return FALSE;
-       }
-
-#ifdef VERBOSE_ACTIVITY_LOGGING
-       os_activity_scope(storePrivate->activity);
-#endif // VERBOSE_ACTIVITY_LOGGING
-
-    retry :
-
-       status = notifyviasignal(storePrivate->server, task, sig, (int *)&sc_status);
-
-       if (__SCDynamicStoreCheckRetryAndHandleError(store,
-                                                    status,
-                                                    &sc_status,
-                                                    "SCDynamicStoreNotifySignal notifyviasignal()")) {
-               goto retry;
-       }
-
-       if (status != KERN_SUCCESS) {
-               _SCErrorSet(status);
-               return FALSE;
-       }
-
-       /* set notifier active */
-       storePrivate->notifyStatus = Using_NotifierInformViaSignal;
-
-       return TRUE;
-}
index 07bd9f9b473737a1a4401041673eef966b46c275..83a4ea228b886e29bdc1a8525a6659551358a662 100644 (file)
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2000-2005, 2009-2011, 2013, 2016, 2017 Apple Inc. All rights reserved.
+ * Copyright (c) 2000-2005, 2009-2011, 2013, 2016, 2017, 2019 Apple Inc. All rights reserved.
  *
  * @APPLE_LICENSE_HEADER_START@
  *
@@ -85,10 +85,6 @@ SCDynamicStoreRemoveWatchedKey(SCDynamicStoreRef store, CFStringRef key, Boolean
                return FALSE;
        }
 
-#ifdef VERBOSE_ACTIVITY_LOGGING
-       os_activity_scope(storePrivate->activity);
-#endif // VERBOSE_ACTIVITY_LOGGING
-
     retry :
 
        /* send the key to the server */
index 93f0f490f93c21c9907f670ac49d94c2a4db9c34..4f0c286c49e08802c59c28def5e04a9f9f6d2d91 100644 (file)
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2000, 2001, 2003-2005, 2009-2011, 2013, 2016, 2017 Apple Inc. All rights reserved.
+ * Copyright (c) 2000, 2001, 2003-2005, 2009-2011, 2013, 2016, 2017, 2019 Apple Inc. All rights reserved.
  *
  * @APPLE_LICENSE_HEADER_START@
  *
@@ -75,9 +75,6 @@ SCDynamicStoreSetNotificationKeys(SCDynamicStoreRef   store,
                }
        }
 
-#ifdef VERBOSE_ACTIVITY_LOGGING
-       os_activity_scope(storePrivate->activity);
-#endif // VERBOSE_ACTIVITY_LOGGING
 
     retry :
 
index 8a2310f92867506d8f2d6d7f63410267a07033ea..51d496f9ce0960de1a1d8e6c31bc560984a4ab9a 100644 (file)
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2000, 2001, 2004, 2006, 2009-2011, 2015-2017 Apple Inc. All rights reserved.
+ * Copyright (c) 2000, 2001, 2004, 2006, 2009-2011, 2015-2017, 2019 Apple Inc. All rights reserved.
  *
  * @APPLE_LICENSE_HEADER_START@
  *
@@ -135,10 +135,6 @@ SCDynamicStoreNotifyWait(SCDynamicStoreRef store)
                SC_log(LOG_NOTICE, "oldNotify != MACH_PORT_NULL");
        }
 
-#ifdef VERBOSE_ACTIVITY_LOGGING
-       os_activity_scope(storePrivate->activity);
-#endif // VERBOSE_ACTIVITY_LOGGING
-
     retry :
 
        status = notifyviaport(storePrivate->server,
@@ -195,10 +191,6 @@ SCDynamicStoreNotifyWait(SCDynamicStoreRef store)
                return FALSE;
        }
 
-#ifdef VERBOSE_ACTIVITY_LOGGING
-       os_activity_scope(storePrivate->activity);
-#endif // VERBOSE_ACTIVITY_LOGGING
-
        // something changed, cancelling notification request
        status = notifycancel(storePrivate->server,
                              (int *)&sc_status);
index 2f7997d602d13cd606ca3b201a9fd6434c3d58ef..8d927d6f7cf79c0c7f848cb8028ce278f3e07c15 100644 (file)
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2000-2005, 2009-2011, 2013, 2016, 2017 Apple Inc. All rights reserved.
+ * Copyright (c) 2000-2005, 2009-2011, 2013, 2016-2019 Apple Inc. All rights reserved.
  *
  * @APPLE_LICENSE_HEADER_START@
  *
@@ -58,16 +58,28 @@ SCDynamicStoreNotifyValue(SCDynamicStoreRef store,
                return FALSE;
        }
 
+       if (storePrivate->cache_active) {
+               if (storePrivate->cached_notifys == NULL)  {
+                       storePrivate->cached_notifys = CFArrayCreateMutable(NULL,
+                                                                           0,
+                                                                           &kCFTypeArrayCallBacks);
+               }
+
+               if (!CFArrayContainsValue(storePrivate->cached_notifys,
+                                         CFRangeMake(0, CFArrayGetCount(storePrivate->cached_notifys)),
+                                         key)) {
+                       CFArrayAppendValue(storePrivate->cached_notifys, key);
+               }
+
+               return TRUE;
+       }
+
        /* serialize the key */
        if (!_SCSerializeString(key, &utfKey, (void **)&myKeyRef, &myKeyLen)) {
                _SCErrorSet(kSCStatusFailed);
                return FALSE;
        }
 
-#ifdef VERBOSE_ACTIVITY_LOGGING
-       os_activity_scope(storePrivate->activity);
-#endif // VERBOSE_ACTIVITY_LOGGING
-
     retry :
 
        /* send the key to the server */
index f6347cccd5430edc6f8db4516dde092ada557165..d43a2a1db41e31cfb3d6a8ba429547bf30509742 100644 (file)
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2000-2006, 2008-2018 Apple Inc. All rights reserved.
+ * Copyright (c) 2000-2006, 2008-2019 Apple Inc. All rights reserved.
  *
  * @APPLE_LICENSE_HEADER_START@
  *
@@ -47,6 +47,8 @@
 static CFStringRef             _sc_bundleID    = NULL;
 static pthread_mutex_t         _sc_lock        = PTHREAD_MUTEX_INITIALIZER;
 static mach_port_t             _sc_server      = MACH_PORT_NULL;
+static unsigned int            _sc_store_cnt   = 0;
+static unsigned int            _sc_store_max   = 50;   /* complain if SCDynamicStore objects exceeds this [soft-]limit */
 
 
 static const char      *notifyType[] = {
@@ -55,12 +57,19 @@ static const char   *notifyType[] = {
        "inform w/callback",
        "inform w/mach port",
        "inform w/fd",
-       "inform w/signal",
        "inform w/runLoop",
        "inform w/dispatch"
 };
 
 
+void
+_SCDynamicStoreSetSessionWatchLimit(unsigned int limit)
+{
+       _sc_store_max = limit;
+       return;
+}
+
+
 __private_extern__ os_log_t
 __log_SCDynamicStore(void)
 {
@@ -100,9 +109,6 @@ __SCDynamicStoreCopyDescription(CFTypeRef cf) {
                case Using_NotifierInformViaFD :
                        CFStringAppendFormat(result, NULL, CFSTR(", FD notifications"));
                        break;
-               case Using_NotifierInformViaSignal :
-                       CFStringAppendFormat(result, NULL, CFSTR(", BSD signal notifications"));
-                       break;
                case Using_NotifierInformViaRunLoop :
                case Using_NotifierInformViaDispatch :
                        if (storePrivate->notifyStatus == Using_NotifierInformViaRunLoop) {
@@ -110,6 +116,7 @@ __SCDynamicStoreCopyDescription(CFTypeRef cf) {
                                CFStringAppendFormat(result, NULL, CFSTR(" {callout = %p"), storePrivate->rlsFunction);
                                CFStringAppendFormat(result, NULL, CFSTR(", info = %p"), storePrivate->rlsContext.info);
                                CFStringAppendFormat(result, NULL, CFSTR(", rls = %p"), storePrivate->rls);
+                               CFStringAppendFormat(result, NULL, CFSTR(", notify rls = %@" ), storePrivate->rlsNotifyRLS);
                        } else if (storePrivate->notifyStatus == Using_NotifierInformViaDispatch) {
                                CFStringAppendFormat(result, NULL, CFSTR(", dispatch notifications"));
                                CFStringAppendFormat(result, NULL, CFSTR(" {callout = %p"), storePrivate->rlsFunction);
@@ -117,9 +124,6 @@ __SCDynamicStoreCopyDescription(CFTypeRef cf) {
                                CFStringAppendFormat(result, NULL, CFSTR(", queue = %p"), storePrivate->dispatchQueue);
                                CFStringAppendFormat(result, NULL, CFSTR(", source = %p"), storePrivate->dispatchSource);
                        }
-                       if (storePrivate->rlsNotifyRLS != NULL) {
-                               CFStringAppendFormat(result, NULL, CFSTR(", notify rls = %@" ), storePrivate->rlsNotifyRLS);
-                       }
                        CFStringAppendFormat(result, NULL, CFSTR("}"));
                        break;
                default :
@@ -176,10 +180,12 @@ __SCDynamicStoreDeallocate(CFTypeRef cf)
        if (storePrivate->name != NULL) CFRelease(storePrivate->name);
        if (storePrivate->options != NULL) CFRelease(storePrivate->options);
 
-#ifdef VERBOSE_ACTIVITY_LOGGING
-       /* release activity tracing */
-       if (storePrivate->activity != NULL) os_release(storePrivate->activity);
-#endif // VERBOSE_ACTIVITY_LOGGING
+       /* release any cached content */
+       if (storePrivate->cache_active) {
+               _SCDynamicStoreCacheClose(store);
+       }
+
+       _SC_ATOMIC_DEC(&_sc_store_cnt);
 
        return;
 }
@@ -299,8 +305,9 @@ __SCDynamicStoreServerPort(SCDynamicStorePrivateRef storePrivate, kern_return_t
                        break;
                default :
 #ifdef DEBUG
-                       SC_log(LOG_INFO, "bootstrap_look_up() failed: status=%s",
-                              bootstrap_strerror(*status));
+                       SC_log(LOG_INFO, "bootstrap_look_up() failed: status=%s (%d)",
+                              bootstrap_strerror(*status),
+                              *status);
 #endif /* DEBUG */
                        break;
        }
@@ -315,6 +322,7 @@ __SCDynamicStoreCreatePrivate(CFAllocatorRef                allocator,
                             SCDynamicStoreCallBack     callout,
                             SCDynamicStoreContext      *context)
 {
+       unsigned int                    n;
        uint32_t                        size;
        SCDynamicStorePrivateRef        storePrivate;
 
@@ -337,20 +345,13 @@ __SCDynamicStoreCreatePrivate(CFAllocatorRef              allocator,
        /* client side of the "configd" session */
        storePrivate->name                              = (name != NULL) ? CFRetain(name) : NULL;
 
-#ifdef VERBOSE_ACTIVITY_LOGGING
-       /* "client" activity tracing */
-       storePrivate->activity                          = os_activity_create("accessing SCDynamicStore",
-                                                                            OS_ACTIVITY_CURRENT,
-                                                                            OS_ACTIVITY_FLAG_DEFAULT);
-#endif // VERBOSE_ACTIVITY_LOGGING
-
        /* Notification status */
        storePrivate->notifyStatus                      = NotifierNotRegistered;
 
        /* "client" information associated with SCDynamicStoreCreateRunLoopSource() */
        storePrivate->rlsFunction                       = callout;
        if (context != NULL) {
-               bcopy(context, &storePrivate->rlsContext, sizeof(SCDynamicStoreContext));
+               memcpy(&storePrivate->rlsContext, context, sizeof(SCDynamicStoreContext));
                if (context->retain != NULL) {
                        storePrivate->rlsContext.info = (void *)(*context->retain)(context->info);
                }
@@ -359,6 +360,16 @@ __SCDynamicStoreCreatePrivate(CFAllocatorRef               allocator,
        /* "server" information associated with SCDynamicStoreNotifyFileDescriptor(); */
        storePrivate->notifyFile                        = -1;
 
+       /* watch for excessive SCDynamicStore usage */
+       n = _SC_ATOMIC_INC(&_sc_store_cnt);
+       if (n > _sc_store_max) {
+               if (_sc_store_max > 0) {
+                       SC_log(LOG_ERR, "SCDynamicStoreCreate(): number of SCDynamicStore objects now exceeds %u", n - 1);
+                       _sc_store_max = (_sc_store_max < 5000) ? (_sc_store_max * 2) : 0;
+                       _SC_crash_once("Excessive number of SCDynamicStore objects", NULL, NULL);
+               }
+       }
+
        return storePrivate;
 }
 
@@ -366,16 +377,15 @@ __SCDynamicStoreCreatePrivate(CFAllocatorRef              allocator,
 static void
 updateServerPort(SCDynamicStorePrivateRef storePrivate, mach_port_t *server, int *sc_status_p)
 {
+       mach_port_t     old_port;
+
        pthread_mutex_lock(&_sc_lock);
+       old_port = _sc_server;
        if (_sc_server != MACH_PORT_NULL) {
                if (*server == _sc_server) {
-                       mach_port_t     old_port;
-
                        // if the server we tried returned the error, save the old port,
                        // [re-]lookup the name to the server, and deallocate the original
                        // send [or dead name] right
-
-                       old_port = _sc_server;
                        _sc_server = __SCDynamicStoreServerPort(storePrivate, sc_status_p);
                        (void)mach_port_deallocate(mach_task_self(), old_port);
                } else {
@@ -384,9 +394,17 @@ updateServerPort(SCDynamicStorePrivateRef storePrivate, mach_port_t *server, int
        } else {
                _sc_server = __SCDynamicStoreServerPort(storePrivate, sc_status_p);
        }
+
        *server = _sc_server;
        pthread_mutex_unlock(&_sc_lock);
 
+#ifdef DEBUG
+       SC_log(LOG_DEBUG, "updateServerPort (%@): 0x%x (%d) --> 0x%x (%d)",
+              (storePrivate->name != NULL) ? storePrivate->name : CFSTR("?"),
+              old_port, old_port,
+              *server, *server);
+#endif // DEBUG
+
        return;
 }
 
@@ -394,9 +412,6 @@ updateServerPort(SCDynamicStorePrivateRef storePrivate, mach_port_t *server, int
 static Boolean
 __SCDynamicStoreAddSession(SCDynamicStorePrivateRef storePrivate)
 {
-#ifdef VERBOSE_ACTIVITY_LOGGING
-       struct os_activity_scope_state_s        activity_state;
-#endif // VERBOSE_ACTIVITY_LOGGING
        kern_return_t                           kr              = KERN_SUCCESS;
        CFDataRef                               myName;                 /* serialized name */
        xmlData_t                               myNameRef;
@@ -426,10 +441,6 @@ __SCDynamicStoreAddSession(SCDynamicStorePrivateRef storePrivate)
        updateServerPort(storePrivate, &server, &sc_status);
 
 
-#ifdef VERBOSE_ACTIVITY_LOGGING
-       os_activity_scope_enter(storePrivate->activity, &activity_state);
-#endif // VERBOSE_ACTIVITY_LOGGING
-
        while (server != MACH_PORT_NULL) {
                // if SCDynamicStore server available
 
@@ -481,10 +492,6 @@ __SCDynamicStoreAddSession(SCDynamicStorePrivateRef storePrivate)
        }
        __MACH_PORT_DEBUG(TRUE, "*** SCDynamicStoreAddSession", storePrivate->server);
 
-#ifdef VERBOSE_ACTIVITY_LOGGING
-       os_activity_scope_leave(&activity_state);
-#endif // VERBOSE_ACTIVITY_LOGGING
-
        // clean up
        CFRelease(myName);
        if (myOptions != NULL)  CFRelease(myOptions);
@@ -563,22 +570,47 @@ __SCDynamicStoreCheckRetryAndHandleError(SCDynamicStoreRef        store,
                return FALSE;
        }
 
-       if ((status == MACH_SEND_INVALID_DEST) || (status == MIG_SERVER_DIED)) {
-               /* the server's gone, remove the session's dead name right */
-               (void) mach_port_deallocate(mach_task_self(), storePrivate->server);
-               storePrivate->server = MACH_PORT_NULL;
+       switch (status) {
+               case MACH_SEND_INVALID_DEST :
+               case MACH_SEND_INVALID_RIGHT :
+               case MIG_SERVER_DIED :
+                       /*
+                        * the server's gone, remove the session's send (or dead name) right
+                        */
+#ifdef DEBUG
+                       SC_log(LOG_DEBUG, "__SCDynamicStoreCheckRetryAndHandleError(%s): %@: 0x%x (%d) --> 0x%x (%d)",
+                              log_str,
+                              (storePrivate->name != NULL) ? storePrivate->name : CFSTR("?"),
+                              storePrivate->server, storePrivate->server,
+                              MACH_PORT_NULL, MACH_PORT_NULL);
+#endif // DEBUG
+                       (void) mach_port_deallocate(mach_task_self(), storePrivate->server);
+                       storePrivate->server = MACH_PORT_NULL;
+
+                       /* reconnect */
+                       if (__SCDynamicStoreReconnect(store)) {
+                               /* retry needed */
+                               return TRUE;
+                       } else {
+                               status = SCError();
+                       }
+                       ;;
 
-               /* reconnect */
-               if (__SCDynamicStoreReconnect(store)) {
-                       /* retry needed */
-                       return TRUE;
-               } else {
-                       status = SCError();
-               }
-       } else {
-               /* an unexpected error, leave the [session] port alone */
-               SC_log(LOG_NOTICE, "%s: %s", log_str, mach_error_string(status));
-               storePrivate->server = MACH_PORT_NULL;
+               default :
+                       /*
+                        * an unexpected error, leave the [session] port alone
+                        */
+#ifdef DEBUG
+                       SC_log(LOG_DEBUG, "__SCDynamicStoreCheckRetryAndHandleError(%s): %@: unexpected status=%s (0x%x)",
+                              log_str,
+                              (storePrivate->name != NULL) ? storePrivate->name : CFSTR("?"),
+                              mach_error_string(status),
+                              status);
+#endif // DEBUG
+
+                       SC_log(LOG_NOTICE, "%s: %s", log_str, mach_error_string(status));
+                       storePrivate->server = MACH_PORT_NULL;
+                       ;;
        }
 
        *sc_status = status;
@@ -628,6 +660,11 @@ __SCDynamicStoreReconnectNotifications(SCDynamicStoreRef store)
        CFArrayRef                              rlList          = NULL;
        SCDynamicStorePrivateRef                storePrivate    = (SCDynamicStorePrivateRef)store;
 
+#ifdef DEBUG
+       SC_log(LOG_DEBUG, "SCDynamicStore: reconnect notifications (%@)",
+              (storePrivate->name != NULL) ? storePrivate->name : CFSTR("?"));
+#endif // DEBUG
+
        // save old SCDynamicStore [notification] state
        notifyStatus = storePrivate->notifyStatus;
 
@@ -673,6 +710,11 @@ __SCDynamicStoreReconnectNotifications(SCDynamicStoreRef store)
                        CFIndex                 n;
                        CFRunLoopSourceRef      rls;
 
+#ifdef DEBUG
+                       SC_log(LOG_DEBUG, "SCDynamicStore: reconnecting w/CFRunLoop (%@)",
+                              (storePrivate->name != NULL) ? storePrivate->name : CFSTR("?"));
+#endif // DEBUG
+
                        rls = SCDynamicStoreCreateRunLoopSource(NULL, store, 0);
                        if (rls == NULL) {
                                if (SCError() != BOOTSTRAP_UNKNOWN_SERVICE) {
@@ -694,6 +736,12 @@ __SCDynamicStoreReconnectNotifications(SCDynamicStoreRef store)
                        break;
                }
                case Using_NotifierInformViaDispatch :
+
+#ifdef DEBUG
+                       SC_log(LOG_DEBUG, "SCDynamicStore: reconnecting w/dispatch queue (%@)",
+                              (storePrivate->name != NULL) ? storePrivate->name : CFSTR("?"));
+#endif // DEBUG
+
                        ok = SCDynamicStoreSetDispatchQueue(store, dispatchQueue);
                        if (!ok) {
                                if (SCError() != BOOTSTRAP_UNKNOWN_SERVICE) {
index a8e244a3bdb12199609b75f70c16af26e7d04872..ff6bb846835fa52e303bcab607f30fe590202dc9 100644 (file)
@@ -385,7 +385,7 @@ _SCDPluginExecCommand2(SCDPluginExecCallBack        callout,
 
                                // create child process info
                                child = CFAllocatorAllocate(NULL, sizeof(struct childInfo), 0);
-                               bzero(child, sizeof(struct childInfo));
+                               memset(child, 0, sizeof(struct childInfo));
                                child->pid     = pid;
                                child->callout = callout;
                                child->context = context;
index edb9d14de12246b2ce1756dd20e7d7b1bc875b7d..90fd1ecb13f66efc4219b9c90d654aec6e3d2a91 100644 (file)
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2000-2004, 2006, 2017, 2018 Apple Computer, Inc. All rights reserved.
+ * Copyright (c) 2000-2004, 2006, 2017 Apple Computer, Inc. All rights reserved.
  *
  * @APPLE_LICENSE_HEADER_START@
  * 
index 2d38a9af3c886dcc97f49be5cc073e8794b90390..485d12289af570ecf57817516f8f83dc31fab183 100644 (file)
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2000-2018 Apple Inc. All rights reserved.
+ * Copyright (c) 2000-2019 Apple Inc. All rights reserved.
  *
  * @APPLE_LICENSE_HEADER_START@
  *
@@ -31,7 +31,7 @@
  * - initial revision
  */
 
-#define SC_LOG_HANDLE  _SC_LOG_DEFAULT()
+#define SC_LOG_HANDLE  _SC_LOG_DEFAULT
 #include <SystemConfiguration/SystemConfiguration.h>
 #include <SystemConfiguration/SCValidation.h>
 #include <SystemConfiguration/SCPrivate.h>
 
 #include <execinfo.h>
 #include <unistd.h>
-#include <dlfcn.h>
 
-
-#if    TARGET_OS_IPHONE && !TARGET_OS_SIMULATOR && !defined(DO_NOT_INFORM)
+#if    TARGET_OS_IPHONE && !TARGET_OS_SIMULATOR
 #include <CoreFoundation/CFUserNotification.h>
-#endif // TARGET_OS_IPHONE && !TARGET_OS_SIMULATOR && !defined(DO_NOT_INFORM)
+#endif // TARGET_OS_IPHONE && !TARGET_OS_SIMULATOR
 
 /* CrashReporter "Application Specific Information" */
 #include <CrashReporterClient.h>
@@ -153,7 +151,7 @@ _SC_sockaddr_to_string(const struct sockaddr *address, char *buf, size_t bufLen)
 
        addr.sa = address;
 
-       bzero(buf, bufLen);
+       memset(buf, 0, bufLen);
        switch (address->sa_family) {
                case AF_INET :
                        (void)inet_ntop(addr.sin->sin_family,
@@ -203,7 +201,7 @@ _SC_string_to_sockaddr(const char *str, sa_family_t af, void *buf, size_t bufLen
                addr.buf = buf;
        }
 
-       bzero(addr.buf, bufLen);
+       memset(addr.buf, 0, bufLen);
        if (((af == AF_UNSPEC) || (af == AF_INET)) &&
            (bufLen >= sizeof(struct sockaddr_in)) &&
            inet_aton(str, &addr.sin->sin_addr) == 1) {
@@ -253,6 +251,7 @@ _SC_sendMachMessage(mach_port_t port, mach_msg_id_t msg_id)
        mach_msg_option_t       options;
        kern_return_t           status;
 
+       memset(&msg, 0, sizeof(msg));
        msg.header.msgh_bits = MACH_MSGH_BITS(MACH_MSG_TYPE_COPY_SEND, 0);
        msg.header.msgh_size = sizeof(msg);
        msg.header.msgh_remote_port = port;
@@ -266,7 +265,7 @@ _SC_sendMachMessage(mach_port_t port, mach_msg_id_t msg_id)
                          MACH_PORT_NULL,               /* rcv_name */
                          0,                            /* timeout */
                          MACH_PORT_NULL);              /* notify */
-       if (status != MACH_MSG_SUCCESS) {
+       if ((status == MACH_SEND_INVALID_DEST) || (status == MACH_SEND_TIMED_OUT)) {
                mach_msg_destroy(&msg.header);
        }
 
@@ -331,7 +330,7 @@ _SC_hw_model(Boolean trim)
                int     ret;
 
                // get HW model name
-               bzero(&hwModel, sizeof(hwModel));
+               memset(&hwModel, 0, sizeof(hwModel));
                ret = sysctl(mib, sizeof(mib) / sizeof(mib[0]), &hwModel, &n, NULL, 0);
                if (ret != 0) {
                        SC_log(LOG_NOTICE, "sysctl() CTL_HW/HW_MODEL failed: %s", strerror(errno));
@@ -382,7 +381,7 @@ __CFDataCopyVMData(CFDataRef data, void **dataRef, CFIndex *dataLen)
                return kr;
        }
 
-       bcopy((char *)CFDataGetBytePtr(data), (void *)vm_address, vm_size);
+       memcpy((void *)vm_address, (char *)CFDataGetBytePtr(data), vm_size);
        *dataRef = (void *)vm_address;
        *dataLen = vm_size;
 
@@ -606,7 +605,7 @@ _SCSerializeMultiple(CFDictionaryRef dict)
                        values = CFAllocatorAllocate(NULL, nElements * sizeof(CFTypeRef), 0);
                        pLists = CFAllocatorAllocate(NULL, nElements * sizeof(CFDataRef), 0);
                }
-               bzero(pLists, nElements * sizeof(CFDataRef));
+               memset(pLists, 0, nElements * sizeof(CFDataRef));
 
                CFDictionaryGetKeysAndValues(dict, keys, values);
                for (i = 0; i < nElements; i++) {
@@ -664,7 +663,7 @@ _SCUnserializeMultiple(CFDictionaryRef dict)
                        values = CFAllocatorAllocate(NULL, nElements * sizeof(CFTypeRef), 0);
                        pLists = CFAllocatorAllocate(NULL, nElements * sizeof(CFTypeRef), 0);
                }
-               bzero(pLists, nElements * sizeof(CFTypeRef));
+               memset(pLists, 0, nElements * sizeof(CFTypeRef));
 
                CFDictionaryGetKeysAndValues(dict, keys, values);
                for (i = 0; i < nElements; i++) {
@@ -1103,7 +1102,7 @@ _SC_CFBundleCopyNonLocalizedString(CFBundleRef bundle, CFStringRef key, CFString
                                                             tableName,
                                                             CFSTR("strings"),
                                                             NULL,
-                                                            CFSTR("English"));
+                                                            CFSTR("en"));
                if (url != NULL) {
                        table = _SCCreatePropertyListFromResource(url);
                        CFRelease(url);
@@ -1145,12 +1144,12 @@ _SC_CFMachPortCreateWithPort(const char         *portDescription,
                             CFMachPortContext  *context)
 {
        CFMachPortRef   port;
-       Boolean shouldFree      = FALSE;
+       Boolean         shouldFree      = FALSE;
 
        port = CFMachPortCreateWithPort(NULL, portNum, callout, context, &shouldFree);
        if ((port == NULL) || shouldFree) {
+               char            *crash_info;
                CFStringRef     err;
-               char            *crash_info     = NULL;
 
                SC_log(LOG_NOTICE, "%s: CFMachPortCreateWithPort() failed , port = %p",
                       portDescription,
@@ -1165,8 +1164,7 @@ _SC_CFMachPortCreateWithPort(const char           *portDescription,
                                                       portDescription);
                }
                crash_info = _SC_cfstring_to_cstring(err, NULL, 0, kCFStringEncodingASCII);
-               if (err != NULL) CFRelease(err);
-
+               CFRelease(err);
 
                err = CFStringCreateWithFormat(NULL,
                                               NULL,
@@ -1174,7 +1172,7 @@ _SC_CFMachPortCreateWithPort(const char           *portDescription,
                                               getprogname());
                _SC_crash(crash_info, CFSTR("CFMachPort error"), err);
                CFAllocatorDeallocate(NULL, crash_info);
-               if (err != NULL) CFRelease(err);
+               CFRelease(err);
        }
 
        return port;
@@ -1522,90 +1520,62 @@ _SC_copyBacktrace()
 }
 
 
-static Boolean
-_SC_SimulateCrash(const char *crash_info, CFStringRef notifyHeader, CFStringRef notifyMessage)
+static void
+_SC_ReportCrash(CFStringRef notifyHeader, CFStringRef notifyMessage)
 {
-#if    !defined(DO_NOT_INFORM)
+#if    !TARGET_OS_IPHONE || TARGET_OS_SIMULATOR
 #pragma unused(notifyHeader)
 #pragma unused(notifyMessage)
-#endif // !defined(DO_NOT_INFORM)
-#if    TARGET_OS_SIMULATOR
-#pragma unused(crash_info)
-#endif // TARGET_OS_SIMULATOR
-       Boolean ok      = FALSE;
-
-#if    !TARGET_OS_SIMULATOR
-       static bool             (*dyfunc_SimulateCrash)(pid_t, mach_exception_data_type_t, CFStringRef) = NULL;
-       static void             *image  = NULL;
-       static dispatch_once_t  once;
-
-       dispatch_once(&once, ^{
-               image = _SC_dlopen("/System/Library/PrivateFrameworks/CrashReporterSupport.framework/CrashReporterSupport");
-               if (image != NULL) {
-                       dyfunc_SimulateCrash = dlsym(image, "SimulateCrash");
-               }
-       });
-
-       if (dyfunc_SimulateCrash != NULL) {
-               CFStringRef     str;
-
-               str = CFStringCreateWithCString(NULL, crash_info, kCFStringEncodingUTF8);
-               ok = dyfunc_SimulateCrash(getpid(), 0xbad0005cull, str);
-               CFRelease(str);
+#endif // !TARGET_OS_IPHONE || TARGET_OS_SIMULATOR
+       static Boolean  warned  = FALSE;
+
+       if (!warned) {
+#if    TARGET_OS_IPHONE && !TARGET_OS_SIMULATOR
+               CFStringRef     displayMessage;
+
+               displayMessage = CFStringCreateWithFormat(NULL,
+                                                         NULL,
+                                                         CFSTR("%@\n\nPlease collect the crash report and file a Radar."),
+                                                         notifyMessage);
+               CFUserNotificationDisplayNotice(0,
+                                               kCFUserNotificationStopAlertLevel,
+                                               NULL,
+                                               NULL,
+                                               NULL,
+                                               notifyHeader,
+                                               displayMessage,
+                                               NULL);
+               CFRelease(displayMessage);
+#endif // TARGET_OS_IPHONE && !TARGET_OS_SIMULATOR
+               warned = TRUE;
        }
 
-#if    !defined(DO_NOT_INFORM)
-       if (ok && (notifyHeader != NULL) && (notifyMessage != NULL)) {
-               static Boolean  warned  = FALSE;
-
-               if (!warned) {
-                       CFStringRef     displayMessage;
-
-                       displayMessage = CFStringCreateWithFormat(NULL,
-                                                                 NULL,
-                                                                 CFSTR("%@\n\nPlease collect the crash report and file a Radar."),
-                                                                 notifyMessage);
-                       CFUserNotificationDisplayNotice(0,
-                                                       kCFUserNotificationStopAlertLevel,
-                                                       NULL,
-                                                       NULL,
-                                                       NULL,
-                                                       notifyHeader,
-                                                       displayMessage,
-                                                       NULL);
-                       CFRelease(displayMessage);
-                       warned = TRUE;
-               }
-       }
-#endif // !defined(DO_NOT_INFORM)
-#endif // !TARGET_OS_SIMULATOR
-
-       return ok;
+       return;
 }
 
 
 void
 _SC_crash(const char *crash_info, CFStringRef notifyHeader, CFStringRef notifyMessage)
 {
-       Boolean ok      = FALSE;
-
-       if (crash_info != NULL) {
-               CRSetCrashLogMessage(crash_info);
-               SC_log(LOG_NOTICE, "%s", crash_info);
-       }
-
        if (_SC_isAppleInternal()) {
+               if (crash_info != NULL) {
+                       CRSetCrashLogMessage(crash_info);
+                       SC_log(LOG_NOTICE, "%s", crash_info);
+               }
+
                // simulate a crash report
-               ok = _SC_SimulateCrash(crash_info, notifyHeader, notifyMessage);
-#ifndef DO_NOT_CRASH
-               if (!ok) {
-                       // if we could not simulate a crash report, crash for real
-                       __builtin_trap();
+               os_log_with_type(SC_LOG_HANDLE(), OS_LOG_TYPE_FAULT, "%s", crash_info);
+
+               // report the crash to the user
+               if ((notifyHeader != NULL) && (notifyMessage != NULL)) {
+                       _SC_ReportCrash(notifyHeader, notifyMessage);
+               }
+
+               if (crash_info != NULL) {
+                       CRSetCrashLogMessage(NULL);
                }
-#endif // DO_NOT_CRASH
        }
 
-       CRSetCrashLogMessage(NULL);
        return;
 }
 
index ccf6240a6858f3c960eae34f3c71141633570201..78d56d68a480cb4e4a77365dfa7b83f067cc3c34 100644 (file)
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2000-2005, 2009-2011, 2013, 2016, 2017 Apple Inc. All rights reserved.
+ * Copyright (c) 2000-2005, 2009-2011, 2013, 2016-2019 Apple Inc. All rights reserved.
  *
  * @APPLE_LICENSE_HEADER_START@
  *
@@ -61,16 +61,32 @@ SCDynamicStoreRemoveValue(SCDynamicStoreRef store, CFStringRef key)
                return FALSE;
        }
 
+       if (storePrivate->cache_active) {
+               if (storePrivate->cached_set != NULL)  {
+                       CFDictionaryRemoveValue(storePrivate->cached_set, key);
+               }
+
+               if (storePrivate->cached_removals == NULL) {
+                       storePrivate->cached_removals = CFArrayCreateMutable(NULL,
+                                                                            0,
+                                                                            &kCFTypeArrayCallBacks);
+               }
+
+               if (!CFArrayContainsValue(storePrivate->cached_removals,
+                                         CFRangeMake(0, CFArrayGetCount(storePrivate->cached_removals)),
+                                         key)) {
+                       CFArrayAppendValue(storePrivate->cached_removals, key);
+               }
+
+               return TRUE;
+       }
+
        /* serialize the key */
        if (!_SCSerializeString(key, &utfKey, (void **)&myKeyRef, &myKeyLen)) {
                _SCErrorSet(kSCStatusFailed);
                return FALSE;
        }
 
-#ifdef VERBOSE_ACTIVITY_LOGGING
-       os_activity_scope(storePrivate->activity);
-#endif // VERBOSE_ACTIVITY_LOGGING
-
     retry :
 
        /* send the key to the server */
index 3a1b6f1fcaba900537f1ba7cb5f34fe471917113..7a4ea46f65a82a127ea2271715e67051b784c155 100644 (file)
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2000-2006, 2009-2011, 2013, 2016, 2017 Apple Inc. All rights reserved.
+ * Copyright (c) 2000-2006, 2009-2011, 2013, 2016-2019 Apple Inc. All rights reserved.
  *
  * @APPLE_LICENSE_HEADER_START@
  *
@@ -107,10 +107,6 @@ SCDynamicStoreSetMultiple(SCDynamicStoreRef        store,
                }
        }
 
-#ifdef VERBOSE_ACTIVITY_LOGGING
-       os_activity_scope(storePrivate->activity);
-#endif // VERBOSE_ACTIVITY_LOGGING
-
     retry :
 
        /* send the keys and patterns, fetch the associated result from the server */
@@ -173,6 +169,29 @@ SCDynamicStoreSetValue(SCDynamicStoreRef store, CFStringRef key, CFPropertyListR
                return FALSE;
        }
 
+       if (storePrivate->cache_active) {
+               if (storePrivate->cached_removals != NULL) {
+                       CFIndex i;
+
+                       i = CFArrayGetFirstIndexOfValue(storePrivate->cached_removals,
+                                                       CFRangeMake(0, CFArrayGetCount(storePrivate->cached_removals)),
+                                                       key);
+                       if (i != kCFNotFound) {
+                               // if previously "removed"
+                               CFArrayRemoveValueAtIndex(storePrivate->cached_removals, i);
+                       }
+               }
+
+               if (storePrivate->cached_set == NULL) {
+                       storePrivate->cached_set = CFDictionaryCreateMutable(NULL,
+                                                                            0,
+                                                                            &kCFTypeDictionaryKeyCallBacks,
+                                                                            &kCFTypeDictionaryValueCallBacks);
+               }
+               CFDictionarySetValue(storePrivate->cached_set, key, value);
+               return TRUE;
+       }
+
        /* serialize the key */
        if (!_SCSerializeString(key, &utfKey, (void **)&myKeyRef, &myKeyLen)) {
                _SCErrorSet(kSCStatusInvalidArgument);
@@ -186,10 +205,6 @@ SCDynamicStoreSetValue(SCDynamicStoreRef store, CFStringRef key, CFPropertyListR
                return FALSE;
        }
 
-#ifdef VERBOSE_ACTIVITY_LOGGING
-       os_activity_scope(storePrivate->activity);
-#endif // VERBOSE_ACTIVITY_LOGGING
-
     retry :
 
        /* send the key & data to the server, get new instance id */
index eccc54d22cb1ee726c31b030935cd83af508ab55..739743219d2259e80f43c2447dff7e86c05fdb6d 100644 (file)
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2000, 2001, 2004, 2005, 2009-2011, 2016, 2017 Apple Inc. All rights reserved.
+ * Copyright (c) 2000, 2001, 2004, 2005, 2009-2011, 2016, 2017, 2019 Apple Inc. All rights reserved.
  *
  * @APPLE_LICENSE_HEADER_START@
  *
@@ -57,10 +57,6 @@ SCDynamicStoreSnapshot(SCDynamicStoreRef store)
                return FALSE;
        }
 
-#ifdef VERBOSE_ACTIVITY_LOGGING
-       os_activity_scope(storePrivate->activity);
-#endif // VERBOSE_ACTIVITY_LOGGING
-
     retry :
 
        status = snapshot(storePrivate->server, (int *)&sc_status);
index 3879f3188794e454e333a948ae2afc1f79633160..aa4479a67f0a4a196cc117a092d5ca781f9b4b76 100644 (file)
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2000-2004, 2006, 2009-2011, 2013, 2015-2018 Apple Inc. All rights reserved.
+ * Copyright (c) 2000-2004, 2006, 2009-2011, 2013, 2015-2019 Apple Inc. All rights reserved.
  *
  * @APPLE_LICENSE_HEADER_START@
  *
 #include <mach/mach.h>
 #include <pthread.h>
 #include <regex.h>
-#ifdef VERBOSE_ACTIVITY_LOGGING
-#include <os/activity.h>
-#endif // VERBOSE_ACTIVITY_LOGGING
 #include <os/log.h>
 #include <CoreFoundation/CoreFoundation.h>
 #include <CoreFoundation/CFRuntime.h>
 
 #ifndef        SC_LOG_HANDLE
-#define        SC_LOG_HANDLE   __log_SCDynamicStore()
+#define        SC_LOG_HANDLE   __log_SCDynamicStore
 #endif // SC_LOG_HANDLE
 #include <SystemConfiguration/SystemConfiguration.h>
 #include <SystemConfiguration/SCPrivate.h>
@@ -53,7 +50,6 @@ typedef enum {
        Using_NotifierWait,
        Using_NotifierInformViaMachPort,
        Using_NotifierInformViaFD,
-       Using_NotifierInformViaSignal,
        Using_NotifierInformViaRunLoop,
        Using_NotifierInformViaDispatch
 } __SCDynamicStoreNotificationStatus;
@@ -68,11 +64,6 @@ typedef struct {
        CFStringRef                     name;
        CFDictionaryRef                 options;
 
-#ifdef VERBOSE_ACTIVITY_LOGGING
-       /* activity tracing */
-       os_activity_t                   activity;
-#endif // VERBOSE_ACTIVITY_LOGGING
-
        /* server side of the "configd" session */
        mach_port_t                     server;
        Boolean                         serverNullSession;
@@ -112,9 +103,12 @@ typedef struct {
        int                             notifyFile;
        int                             notifyFileIdentifier;
 
-       /* "server" information associated with SCDynamicStoreNotifySignal() */
-       int                             notifySignal;
-       task_t                          notifySignalTask;
+       /* caching */
+       Boolean                         cache_active;
+       CFMutableDictionaryRef          cached_keys;
+       CFMutableDictionaryRef          cached_set;
+       CFMutableArrayRef               cached_removals;
+       CFMutableArrayRef               cached_notifys;
 
 } SCDynamicStorePrivate, *SCDynamicStorePrivateRef;
 
index 43a98d97e92bd6f62b02f06bd164111421afed02..847690868904eda75265c9896cd5c3bf3cbd65a8 100644 (file)
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2000, 2001, 2004, 2005, 2010, 2011, 2013, 2015, 2018 Apple Inc. All rights reserved.
+ * Copyright (c) 2000, 2001, 2004, 2005, 2010, 2011, 2013, 2015, 2018, 2019 Apple Inc. All rights reserved.
  *
  * @APPLE_LICENSE_HEADER_START@
  *
@@ -168,25 +168,6 @@ SCDynamicStoreNotifyFileDescriptor (SCDynamicStoreRef              store,
                                         int32_t                        identifier,
                                         int                            *fd);
 
-/*!
-       @function SCDynamicStoreNotifySignal
-       @discussion Requests that the specified BSD signal be sent to the process
-               with the indicated process id whenever a change has been detected
-               to one of the system configuration data entries associated with the
-               current session's notifier keys.
-
-               Note: this function is not valid for "configd" plug-ins.
-
-       @param store An SCDynamicStoreRef that should be used for communication with the server.
-       @param pid A UNIX process ID that should be signalled for any notifications.
-       @param sig A signal number to be used.
-       @result A boolean indicating the success (or failure) of the call.
- */
-Boolean
-SCDynamicStoreNotifySignal             (SCDynamicStoreRef              store,
-                                        pid_t                          pid,
-                                        int                            sig);
-
 /*!
        @function SCDynamicStoreNotifyWait
        @discussion Waits for a change to be made to a value in the
@@ -230,6 +211,27 @@ SCDynamicStoreSetDisconnectCallBack        (
 Boolean
 SCDynamicStoreSnapshot                 (SCDynamicStoreRef              store);
 
+
+Boolean
+_SCDynamicStoreCacheIsActive           (SCDynamicStoreRef              store)
+                                                                       API_AVAILABLE(macos(10.15)) SPI_AVAILABLE(ios(13.0), tvos(13.0), watchos(6.0), bridgeos(4.0));
+
+Boolean
+_SCDynamicStoreCacheOpen               (SCDynamicStoreRef              store)
+                                                                       API_AVAILABLE(macos(10.15)) SPI_AVAILABLE(ios(13.0), tvos(13.0), watchos(6.0), bridgeos(4.0));
+
+Boolean
+_SCDynamicStoreCacheCommitChanges      (SCDynamicStoreRef              store)
+                                                                       API_AVAILABLE(macos(10.15)) SPI_AVAILABLE(ios(13.0), tvos(13.0), watchos(6.0), bridgeos(4.0));
+
+Boolean
+_SCDynamicStoreCacheClose              (SCDynamicStoreRef              store)
+                                                                       API_AVAILABLE(macos(10.15)) SPI_AVAILABLE(ios(13.0), tvos(13.0), watchos(6.0), bridgeos(4.0));
+
+void
+_SCDynamicStoreSetSessionWatchLimit    (unsigned int                   limit)
+                                                                       API_AVAILABLE(macos(10.15)) SPI_AVAILABLE(ios(13.0), tvos(13.0), watchos(6.0), bridgeos(4.0));
+
 __END_DECLS
 
 #endif /* _SCDYNAMICSTOREPRIVATE_H */
index 06ce43fb731311741df4f4bb69c7adfda778059c..1810defc8a8874ad47cab3a0c8d904c6d03fbe29 100644 (file)
@@ -2,14 +2,14 @@
  * Copyright (c) 2000, 2001, 2003-2007, 2018 Apple Inc. All rights reserved.
  *
  * @APPLE_LICENSE_HEADER_START@
- * 
+ *
  * This file contains Original Code and/or Modifications of Original Code
  * as defined in and that are subject to the Apple Public Source License
  * Version 2.0 (the 'License'). You may not use this file except in
  * compliance with the License. Please obtain a copy of the License at
  * http://www.opensource.apple.com/apsl/ and read it before using this
  * file.
- * 
+ *
  * The Original Code and all software distributed under the License are
  * distributed on an 'AS IS' basis, WITHOUT WARRANTY OF ANY KIND, EITHER
  * EXPRESS OR IMPLIED, AND APPLE HEREBY DISCLAIMS ALL SUCH WARRANTIES,
@@ -17,7 +17,7 @@
  * FITNESS FOR A PARTICULAR PURPOSE, QUIET ENJOYMENT OR NON-INFRINGEMENT.
  * Please see the License for the specific language governing rights and
  * limitations under the License.
- * 
+ *
  * @APPLE_LICENSE_HEADER_END@
  */
 
@@ -61,8 +61,8 @@ SCNetworkCheckReachabilityByAddress(const struct sockaddr     *address,
                return FALSE;
        }
 
-       bzero(&ss, sizeof(ss));
-       bcopy(address, &ss, addrlen);
+       memset(&ss, 0, sizeof(ss));
+       memcpy(&ss, address, addrlen);
        ss.ss_len = addrlen;
 
        networkAddress = SCNetworkReachabilityCreateWithAddress(NULL, (struct sockaddr *)&ss);
index f6c92ab47e6449dea9f1a1a1ac1b87e46f262d58..74d62d35255cb12d5bfb8b2209ce0f376019377b 100644 (file)
@@ -577,13 +577,15 @@ SCNetworkInterfaceCopyMTU                 (SCNetworkInterfaceRef                  interface,
                media subtype and options.
        @param interface The desired network interface.
        @param subtype The desired media subtype (e.g. "autoselect", "100baseTX", ...).
+               If NULL, no specific media subtype will be requested.
        @param options The desired media options (e.g. "half-duplex", "full-duplex", ...).
+               If NULL, no specific media options will be requested.
        @result TRUE if the configuration was updated; FALSE if an error was encountered.
  */
 Boolean
-SCNetworkInterfaceSetMediaOptions              (SCNetworkInterfaceRef          interface,
-                                                CFStringRef                    subtype,
-                                                CFArrayRef                     options)        API_AVAILABLE(macos(10.5))
+SCNetworkInterfaceSetMediaOptions              (SCNetworkInterfaceRef                  interface,
+                                                CFStringRef            __nullable      subtype,
+                                                CFArrayRef             __nullable      options)        API_AVAILABLE(macos(10.5))
                                                                                                SPI_AVAILABLE(ios(2.0), tvos(9.0), watchos(1.0), bridgeos(1.0));
 
 /*!
@@ -592,6 +594,7 @@ SCNetworkInterfaceSetMediaOptions           (SCNetworkInterfaceRef          interface,
                requested MTU setting.
        @param interface The desired network interface.
        @param mtu The desired MTU setting for the interface.
+               If zero, the interface will use the default MTU setting.
        @result TRUE if the configuration was updated; FALSE if an error was encountered.
  */
 Boolean
index f5b888c9aba8a610ad67272fd751850c06c94506..c8db81ecf1f93b401ab01abe7d538c4d96f34a04 100644 (file)
@@ -361,7 +361,7 @@ __createInterface(int s, CFStringRef interface)
 {
        struct ifreq    ifr;
 
-       bzero(&ifr, sizeof(ifr));
+       memset(&ifr, 0, sizeof(ifr));
        (void) _SC_cfstring_to_cstring(interface,
                                       ifr.ifr_name,
                                       sizeof(ifr.ifr_name),
@@ -383,7 +383,7 @@ __destroyInterface(int s, CFStringRef interface)
 {
        struct ifreq    ifr;
 
-       bzero(&ifr, sizeof(ifr));
+       memset(&ifr, 0, sizeof(ifr));
        (void) _SC_cfstring_to_cstring(interface,
                                       ifr.ifr_name,
                                       sizeof(ifr.ifr_name),
index ddabf4d0f8c195e3eee5bf34409af4b99684edb9..dc2f7bc2618c5d591a03197cee307c9f045c985f 100644 (file)
 #include <CoreFoundation/CFRuntime.h>
 
 #ifndef        SC_LOG_HANDLE
-#define        SC_LOG_HANDLE   __log_SCNetworkConfiguration()
+#define        SC_LOG_HANDLE   __log_SCNetworkConfiguration
 #endif // SC_LOG_HANDLE
 #include <SystemConfiguration/SystemConfiguration.h>
 #include <SystemConfiguration/SCPrivate.h>
 #include <SystemConfiguration/SCValidation.h>
 #include "SCPreferencesPathKey.h"
-#include <IOKit/IOKitLib.h>
-
-#if    !TARGET_OS_SIMULATOR
 #include "IPMonitorControl.h"
-#endif // !TARGET_OS_SIMULATOR
+#include <IOKit/IOKitLib.h>
 
 
 typedef struct {
@@ -169,7 +166,7 @@ typedef struct {
        } usb;
 
        // misc
-       int                     sort_order;             // sort order for this interface
+       unsigned int            sort_order;             // sort order for this interface
 
        // for BOND interfaces
        Boolean                 supportsBond;
@@ -194,10 +191,9 @@ typedef struct {
                CFDictionaryRef         options;
        } vlan;
 
-#if    !TARGET_OS_SIMULATOR
        // for interface rank assertions
        IPMonitorControlRef     IPMonitorControl;
-#endif // !TARGET_OS_SIMULATOR
+
 } SCNetworkInterfacePrivate, *SCNetworkInterfacePrivateRef;
 
 
@@ -338,7 +334,7 @@ __SCNetworkInterfaceIsValidExtendedConfigurationType
                                                 CFStringRef            extendedType,
                                                 Boolean                requirePerInterface);
 
-CFDictionaryRef
+CFPropertyListRef
 __SCNetworkInterfaceGetTemplateOverrides       (SCNetworkInterfaceRef  interface,
                                                 CFStringRef            overrideType);
 
@@ -435,6 +431,9 @@ __SCNetworkServiceCreatePrivate                     (CFAllocatorRef         allocator,
                                                 CFStringRef            serviceID,
                                                 SCNetworkInterfaceRef  interface);
 
+Boolean
+__SCNetworkServiceExists                       (SCNetworkServiceRef    service);
+
 Boolean
 __SCNetworkServiceExistsForInterface           (CFArrayRef             services,
                                                 SCNetworkInterfaceRef  interface);
@@ -476,6 +475,10 @@ __SCNetworkServiceAddProtocolToService             (SCNetworkServiceRef            service,
 #pragma mark SCNetworkSet configuration (internal)
 
 
+Boolean
+__SCNetworkSetExists                           (SCNetworkSetRef                set);
+
+
 #pragma mark -
 #pragma mark Logging
 
index 025b7a5698e36cbcab28d2629426c5e1a3ab5195..e1346b0424a48b460bc66339a0eb5c6ced225264 100644 (file)
@@ -492,6 +492,15 @@ _SCNetworkInterfaceIsBluetoothP2P                  (SCNetworkInterfaceRef          interface)      API_AVAIL
 Boolean
 _SCNetworkInterfaceIsBuiltin                           (SCNetworkInterfaceRef          interface)      API_AVAILABLE(macos(10.5), ios(2.0));
 
+/*!
+       @function _SCNetworkInterfaceIsCarPlay
+       @discussion Identifies if a network interface is a CarPlay device.
+       @param interface The network interface.
+       @result TRUE if the interface is a CarPlay device.
+ */
+Boolean
+_SCNetworkInterfaceIsCarPlay                           (SCNetworkInterfaceRef          interface)      API_AVAILABLE(macos(10.15), ios(13.0));
+
 /*!
        @function _SCNetworkInterfaceIsHiddenConfiguration
        @discussion Identifies if the configuration of a network interface should be
@@ -523,7 +532,7 @@ _SCNetworkInterfaceIsThunderbolt                    (SCNetworkInterfaceRef          interface)      API_AVAILA
 /*!
        @function _SCNetworkInterfaceIsTrustRequired
        @discussion Identifies if a network interface requires that the
-               associated host be trusted.
+               associated host be trusted.
        @param interface The network interface.
        @result TRUE if the interface requires trust.
  */
index 00f9d4f31ef5ec82f58448d9b6328951fb913c7c..bd9be38a310e60e1b2a4683d91ff596647b6cfda 100644 (file)
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2003-2018 Apple Inc. All rights reserved.
+ * Copyright (c) 2003-2019 Apple Inc. All rights reserved.
  *
  * @APPLE_LICENSE_HEADER_START@
  *
@@ -35,7 +35,6 @@
 //#define DEBUG_MACH_PORT_ALLOCATIONS
 
 
-#include <os/availability.h>
 #include <TargetConditionals.h>
 #include <sys/cdefs.h>
 #include <dispatch/dispatch.h>
@@ -257,17 +256,13 @@ __SCNetworkConnectionDeallocate(CFTypeRef cf)
        pthread_mutex_destroy(&connectionPrivate->lock);
 
        if (connectionPrivate->client_audit_session != MACH_PORT_NULL) {
-               mach_port_mod_refs(mach_task_self(),
-                                  connectionPrivate->client_audit_session,
-                                  MACH_PORT_RIGHT_SEND,
-                                  -1);
+               mach_port_deallocate(mach_task_self(),
+                                    connectionPrivate->client_audit_session);
        }
 
        if (connectionPrivate->client_bootstrap_port != MACH_PORT_NULL) {
-               mach_port_mod_refs(mach_task_self(),
-                                  connectionPrivate->client_bootstrap_port,
-                                  MACH_PORT_RIGHT_SEND,
-                                  -1);
+               mach_port_deallocate(mach_task_self(),
+                                    connectionPrivate->client_bootstrap_port);
        }
 
        if (connectionPrivate->client_bundle_id != NULL) {
@@ -407,25 +402,12 @@ __SCNetworkConnectionNotify(SCNetworkConnectionRef        connection,
                            void                        (*context_release)(const void *),
                            void                        *context_info)
 {
-#ifdef VERBOSE_ACTIVITY_LOGGING
-       os_activity_t   activity;
-
-       activity = os_activity_create("processing SCNetworkConnection notification",
-                                     OS_ACTIVITY_CURRENT,
-                                     OS_ACTIVITY_FLAG_DEFAULT);
-       os_activity_scope(activity);
-#endif // VERBOSE_ACTIVITY_LOGGING
-
        SC_log(LOG_DEBUG, "exec SCNetworkConnection callout");
        (*rlsFunction)(connection, nc_status, context_info);
        if ((context_release != NULL) && (context_info != NULL)) {
                (*context_release)(context_info);
        }
 
-#ifdef VERBOSE_ACTIVITY_LOGGING
-       os_release(activity);
-#endif // VERBOSE_ACTIVITY_LOGGING
-
        return;
 }
 
@@ -637,7 +619,7 @@ __SCNetworkConnectionCreatePrivate(CFAllocatorRef           allocator,
        connectionPrivate->client_pid = getpid();
        connectionPrivate->rlsFunction = callout;
        if (context) {
-               bcopy(context, &connectionPrivate->rlsContext, sizeof(SCNetworkConnectionContext));
+               memcpy(&connectionPrivate->rlsContext, context, sizeof(SCNetworkConnectionContext));
                if (context->retain != NULL) {
                        connectionPrivate->rlsContext.info = (void *)(*context->retain)(context->info);
                }
@@ -1337,10 +1319,8 @@ SCNetworkConnectionSetClientInfo(SCNetworkConnectionRef  connection,
 
        // save client audit session port
        if (connectionPrivate->client_audit_session != MACH_PORT_NULL) {
-               mach_port_mod_refs(mach_task_self(),
-                                  connectionPrivate->client_audit_session,
-                                  MACH_PORT_RIGHT_SEND,
-                                  -1);
+               mach_port_deallocate(mach_task_self(),
+                                    connectionPrivate->client_audit_session);
                connectionPrivate->client_audit_session = MACH_PORT_NULL;
        }
        connectionPrivate->client_audit_session = client_audit_session;
@@ -1348,7 +1328,7 @@ SCNetworkConnectionSetClientInfo(SCNetworkConnectionRef   connection,
                mach_port_mod_refs(mach_task_self(),
                                   connectionPrivate->client_audit_session,
                                   MACH_PORT_RIGHT_SEND,
-                                  1);
+                                  +1);
        }
 
        // save client UID, GID, and PID
@@ -1392,10 +1372,8 @@ SCNetworkConnectionSetClientAuditInfo(SCNetworkConnectionRef     connection,
        }
 
        if (connectionPrivate->client_bootstrap_port != MACH_PORT_NULL) {
-               mach_port_mod_refs(mach_task_self(),
-                                  connectionPrivate->client_bootstrap_port,
-                                  MACH_PORT_RIGHT_SEND,
-                                  -1);
+               mach_port_deallocate(mach_task_self(),
+                                    connectionPrivate->client_bootstrap_port);
                connectionPrivate->client_bootstrap_port = MACH_PORT_NULL;
        }
 
@@ -1404,7 +1382,7 @@ SCNetworkConnectionSetClientAuditInfo(SCNetworkConnectionRef      connection,
                mach_port_mod_refs(mach_task_self(),
                                   connectionPrivate->client_bootstrap_port,
                                   MACH_PORT_RIGHT_SEND,
-                                  1);
+                                  +1);
        }
 
        memcpy(&connectionPrivate->client_audit_token, &client_audit_token, sizeof(connectionPrivate->client_audit_token));
@@ -2124,75 +2102,9 @@ SCNetworkConnectionResume(SCNetworkConnectionRef connection)
 
 #if    !TARGET_OS_SIMULATOR
 Boolean
-SCNetworkConnectionRefreshOnDemandState(SCNetworkConnectionRef connection)
+SCNetworkConnectionRefreshOnDemandState(__unused SCNetworkConnectionRef connection)
 {
-       SCNetworkConnectionPrivateRef   connectionPrivate       = (SCNetworkConnectionPrivateRef)connection;
-       Boolean                         ok                      = FALSE;
-       uint32_t                        retry                   = 0;
-       int                             sc_status               = kSCStatusFailed;
-       mach_port_t                     server_port             = __SCNetworkConnectionGetCurrentServerPort();
-       kern_return_t                   status                  = KERN_SUCCESS;
-
-       if (!isA_SCNetworkConnection(connection)) {
-               _SCErrorSet(kSCStatusInvalidArgument);
-               return FALSE;
-       }
-
-       if (debug > 0) {
-               SC_log(LOG_INFO, "SCNetworkConnectionRefreshOnDemandState (%p)", connectionPrivate);
-       }
-
-       pthread_mutex_lock(&connectionPrivate->lock);
-
-       while (TRUE) {
-               if (server_port == MACH_PORT_NULL) {
-                       server_port = __SCNetworkConnectionRefreshServerPort(server_port, &sc_status);
-                       if (server_port == MACH_PORT_NULL) {
-                               // if server not available
-                               if (sc_status == BOOTSTRAP_UNKNOWN_SERVICE) {
-                                       // wait up to 2.5 seconds for the [SCNetworkConnection] server
-                                       // to startup
-                                       if ((retry += 50) < 2500) {
-                                               usleep(50 * 1000);      // sleep 50ms between attempts
-                                               continue;
-                                       }
-                               }
-                               break;
-                       }
-               }
-
-               status = pppcontroller_ondemand_refresh_state(server_port, &sc_status);
-               if (status == KERN_SUCCESS)
-                       break;
-
-               if (status == MACH_SEND_INVALID_DEST) {
-                       // the server is not yet available
-                       SC_log(LOG_NOTICE, "SCNetworkConnectionRefreshOnDemandState (!dest) (%p)", connectionPrivate);
-               } else if (status == MIG_SERVER_DIED) {
-                       // the server we were using is gone
-                       SC_log(LOG_NOTICE, "SCNetworkConnectionRefreshOnDemandState (!mig) (%p)", connectionPrivate);
-               } else {
-                       // if we got an unexpected error, don't retry
-                       sc_status = status;
-                       break;
-               }
-       }
-
-       if (debug > 0) {
-               SC_log(LOG_INFO, "SCNetworkConnectionRefreshOnDemandState (%p), return: %d/%d", connectionPrivate, status, sc_status);
-       }
-
-       if (sc_status != kSCStatusOK) {
-               _SCErrorSet(sc_status);
-               goto done;
-       }
-
-       ok = TRUE;
-
-    done :
-
-       pthread_mutex_unlock(&connectionPrivate->lock);
-       return ok;
+       return FALSE;
 }
 #endif /* !TARGET_OS_SIMULATOR */
 
@@ -2746,13 +2658,6 @@ SCNetworkConnectionTriggerOnDemandIfNeeded       (CFStringRef                    hostName,
                                                                ne_session_set_event_handler(new_session, __SCNetworkConnectionQueue(),
                                                                        ^(ne_session_event_t event, void *event_data) {
 #pragma unused(event_data)
-                                                                               os_activity_t   activity;
-
-                                                                               activity = os_activity_create("processing ne_session notification",
-                                                                                                             OS_ACTIVITY_CURRENT,
-                                                                                                             OS_ACTIVITY_FLAG_DEFAULT);
-                                                                               os_activity_scope(activity);
-
                                                                                if (event == NESessionEventStatusChanged) {
                                                                                        dispatch_retain(wait_for_session);
                                                                                        ne_session_get_status(new_session, __SCNetworkConnectionQueue(),
@@ -2769,8 +2674,6 @@ SCNetworkConnectionTriggerOnDemandIfNeeded        (CFStringRef                    hostName,
                                                                                        dispatch_semaphore_signal(wait_for_session);
                                                                                        dispatch_release(wait_for_session);
                                                                                }
-
-                                                                               os_release(activity);
                                                                        });
                                                                ne_session_start_with_options(new_session, start_options);
                                                        } else {
@@ -3575,70 +3478,6 @@ __SCNetworkConnectionCopyTriggerWithService(CFDictionaryRef      configuration,
 }
 
 
-__private_extern__ CFDictionaryRef
-__SCNetworkConnectionCopyTokenParameters(SCNetworkConnectionRef connection)
-{
-       SCNetworkConnectionPrivateRef   connectionPrivate       = (SCNetworkConnectionPrivateRef)connection;
-       CFDictionaryRef                 parameters              = NULL;
-       uint8_t                         params_buffer[PPP_MACH_MAX_INLINE_DATA];
-       uint32_t                        params_buffer_len       = sizeof(params_buffer);
-       int                             sc_status               = kSCStatusOK;
-       mach_port_t                     session_port;
-       kern_return_t                   status;
-
-       pthread_mutex_lock(&connectionPrivate->lock);
-
-       parameters = connectionPrivate->flow_divert_token_params;
-       if (parameters != NULL) {
-           CFRetain(parameters);
-           goto done;
-       }
-
-retry:
-       if (parameters != NULL) {
-               CFRelease(parameters);
-               parameters = NULL;
-       }
-
-       session_port = __SCNetworkConnectionSessionPort(connectionPrivate);
-       if (session_port == MACH_PORT_NULL) {
-               goto done;
-       }
-
-       status = pppcontroller_flow_divert_copy_token_parameters(session_port, params_buffer, &params_buffer_len);
-       if (status == KERN_SUCCESS) {
-               if (params_buffer_len > 0) {
-                       CFDataRef params_data = CFDataCreateWithBytesNoCopy(kCFAllocatorDefault,
-                                                                           params_buffer,
-                                                                           params_buffer_len,
-                                                                           kCFAllocatorNull);
-                       parameters = CFPropertyListCreateWithData(kCFAllocatorDefault,
-                                                                 params_data,
-                                                                 kCFPropertyListImmutable,
-                                                                 NULL,
-                                                                 NULL);
-                       CFRelease(params_data);
-               }
-       }
-
-       if (__SCNetworkConnectionNeedsRetry(connection, "__SCNetworkConnectionCopyTokenParameters()", status, &sc_status)) {
-               goto retry;
-       }
-
-       if (sc_status != kSCStatusOK) {
-               _SCErrorSet(sc_status);
-       }
-
-done:
-       if (parameters != NULL && connectionPrivate->flow_divert_token_params == NULL) {
-           connectionPrivate->flow_divert_token_params = (CFDictionaryRef)CFRetain(parameters);
-       }
-
-       pthread_mutex_unlock(&connectionPrivate->lock);
-
-       return parameters;
-}
-
 Boolean
 __SCNetworkConnectionCopyOnDemandInfoWithName(SCDynamicStoreRef                *storeP,
                                              CFStringRef               hostName,
index a34f2963024c4e4d7c5ec20b00b78318a244f721..33c0378c068b2e57da547a08acb6b8f5b8b79e58 100644 (file)
@@ -30,7 +30,7 @@
 #include <CoreFoundation/CFRuntime.h>
 
 #ifndef SC_LOG_HANDLE
-#define        SC_LOG_HANDLE   __log_SCNetworkConnection()
+#define        SC_LOG_HANDLE   __log_SCNetworkConnection
 #endif // SC_LOG_HANDLE
 #include <SystemConfiguration/SystemConfiguration.h>
 #include <SystemConfiguration/SCPrivate.h>
@@ -42,7 +42,6 @@ __BEGIN_DECLS
 os_log_t       __log_SCNetworkConnection(void);
 void           __SCNetworkConnectionForceOnDemandConfigurationRefresh(void);
 char *         __SCNetworkConnectionGetControllerPortName(void);
-CFDictionaryRef        __SCNetworkConnectionCopyTokenParameters(SCNetworkConnectionRef connection);
 
 __END_DECLS
 
index 9e01fc52d480d55d38887d0044a9c0170e24826e..28a32ad86e3550ac3c39e85d2b7203a659bba2d2 100644 (file)
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2006-2012, 2015-2017 Apple Inc. All rights reserved.
+ * Copyright (c) 2006-2012, 2015-2018 Apple Inc. All rights reserved.
  *
  * @APPLE_LICENSE_HEADER_START@
  *
@@ -602,6 +602,10 @@ copyNameCallout(CFStringRef        serviceID,
        }
 
        if (isMatchingPrefsID(current, matchID)) {
+               if (*name != NULL) {
+                       CFRelease(*name);
+                       *name = NULL;
+               }
                *name = CFDictionaryGetValue(current, kSCPropUserDefinedName);
 
                // for backwards compatibility, we also check for the name in the PPP entity
@@ -749,6 +753,10 @@ copyInterfaceConfigurationCallout(CFStringRef              serviceID,
        }
 
        if (isMatchingPrefsID(current, matchID)) {
+               if (*dict != NULL) {
+                       CFRelease(*dict);
+                       *dict = NULL;
+               }
                *dict = CFDictionaryGetValue(current, interfaceType);
                *dict = isA_CFDictionary(*dict);
                if (*dict != NULL) {
@@ -1967,7 +1975,7 @@ SCUserPreferencesSetInterfacePassword(SCUserPreferencesRef                userPreferences,
        CFDictionaryRef config;
        CFStringRef     description     = NULL;
        CFStringRef     label           = NULL;
-       Boolean         ok      = FALSE;
+       Boolean         ok              = FALSE;
 
        if (!checkUserPreferencesPassword(userPreferences, interface, passwordType)) {
                return FALSE;
index f4e252118ac9a6eb5feb560943e784126901a963..32c6c61f2441e9da698d9b9a79726a6a1cc18ff0 100644 (file)
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2004-2018 Apple Inc. All rights reserved.
+ * Copyright (c) 2004-2019 Apple Inc. All rights reserved.
  *
  * @APPLE_LICENSE_HEADER_START@
  *
@@ -33,7 +33,6 @@
  */
 
 
-#include <os/availability.h>
 #include <TargetConditionals.h>
 #include <CoreFoundation/CoreFoundation.h>
 #include <CoreFoundation/CFRuntime.h>
 #define kPCIThunderboltString          "PCI-Thunderbolt"
 #endif
 
+#if    TARGET_OS_OSX
+#ifndef        kUSBSupportsIPhoneOS
+#define kUSBSupportsIPhoneOS           "SupportsIPhoneOS"
+#endif // !kUSBSupportsIPhoneOS
+#endif // TARGET_OS_OSX
+
 #ifndef        kIOUserEthernetInterfaceRoleKey
 #define        kIOUserEthernetInterfaceRoleKey "InterfaceRole"
 #endif
 #include <pthread.h>
 #include <ifaddrs.h>
 
+/* CrashReporter "Application Specific Information" */
+#include <CrashReporterClient.h>
+
 
 static CFStringRef     copy_interface_string                           (CFBundleRef bundle, CFStringRef key, Boolean localized);
 static CFStringRef     __SCNetworkInterfaceCopyDescription             (CFTypeRef cf);
@@ -108,7 +116,7 @@ static CFArrayRef   __SCNetworkInterfaceCacheCopy                   (CFStringRef bsdName);
 
 
 enum {
-       kSortInternalModem,
+       kSortInternalModem      = 0,
        kSortUSBModem,
        kSortModem,
        kSortBluetooth,
@@ -127,6 +135,7 @@ enum {
        kSortBluetoothPAN_NAP,
        kSortBluetoothPAN_U,
        kSortThunderbolt,
+       kSortCarPlay,
        kSortBond,
        kSortBridge,
        kSortVLAN,
@@ -134,6 +143,34 @@ enum {
 };
 
 
+static const char *sortOrderName[]     = {
+       "InternalModem",
+       "USBModem",
+       "Modem",
+       "Bluetooth",
+       "IrDA",
+       "SerialPort",
+       "WWAN",
+       "EthernetPPP",
+       "AirportPPP",
+       "Ethernet",
+       "FireWire",
+       "AirPort",
+       "OtherWireless",
+       "Tethered",
+       "WWANEthernet",
+       "BluetoothPAN_GN",
+       "BluetoothPAN_NAP",
+       "BluetoothPAN_U",
+       "Thunderbolt",
+       "CarPlay",
+       "Bond",
+       "Bridge",
+       "VLAN",
+       "Unknown"
+};
+
+
 const CFStringRef kSCNetworkInterfaceType6to4          = CFSTR("6to4");
 const CFStringRef kSCNetworkInterfaceTypeBluetooth     = CFSTR("Bluetooth");
 const CFStringRef kSCNetworkInterfaceTypeBond          = CFSTR("Bond");
@@ -225,7 +262,7 @@ static const struct {
        { &kSCNetworkInterfaceTypePPTP          , NULL                , FALSE,  doPPP,          &kSCValNetInterfaceSubTypePPTP,         doNone                                  },
 #pragma GCC diagnostic pop
        { &kSCNetworkInterfaceTypeSerial        , &kSCEntNetModem     , FALSE,  doPPP,          &kSCValNetInterfaceSubTypePPPSerial,    doNone                                  },
-       { &kSCNetworkInterfaceTypeVLAN          , &kSCEntNetEthernet  , TRUE ,  doNone,         NULL,                                   doDNS|doIPv4|doIPv6|doProxies|doSMB     },
+       { &kSCNetworkInterfaceTypeVLAN          , &kSCEntNetEthernet  , TRUE ,  doNone,         &kSCValNetInterfaceSubTypePPPoE,        doDNS|doIPv4|doIPv6|doProxies|doSMB     },
        { &kSCNetworkInterfaceTypeVPN           , &kSCEntNetVPN       , FALSE,  doNone,         NULL,                                   doDNS|doIPv4|doIPv6|doProxies|doSMB     },
        { &kSCNetworkInterfaceTypeWWAN          , &kSCEntNetModem     , FALSE,  doPPP,          &kSCValNetInterfaceSubTypePPPSerial,    doNone                                  },
        // =====================================  =================== ========== =============== ======================================= =========================================
@@ -385,9 +422,15 @@ __SCNetworkInterfaceCopyFormattingDescription(CFTypeRef cf, CFDictionaryRef form
                CFStringAppendFormat(result, NULL, CFSTR(", action = %@"), interfacePrivate->configurationAction);
        }
        if (interfacePrivate->overrides != NULL) {
-               CFStringAppendFormat(result, formatOptions, CFSTR(", overrides = %p"), interfacePrivate->overrides);
+               CFStringRef     str;
+
+               str = _SCCopyDescription(interfacePrivate->overrides, formatOptions);
+               CFStringAppendFormat(result, formatOptions, CFSTR(", overrides = %@"), str);
+               CFRelease(str);
        }
-       CFStringAppendFormat(result, NULL, CFSTR(", order = %d"), interfacePrivate->sort_order);
+       CFStringAppendFormat(result, NULL, CFSTR(", order = %d (%s)"),
+                            interfacePrivate->sort_order,
+                            interfacePrivate->sort_order <= kSortUnknown ? sortOrderName[interfacePrivate->sort_order] : "?");
        if (interfacePrivate->prefs != NULL) {
                CFStringAppendFormat(result, NULL, CFSTR(", prefs = %p"), interfacePrivate->prefs);
        }
@@ -1334,7 +1377,7 @@ pci_slot(io_registry_entry_t interface, CFTypeRef *pci_slot_name)
                                        if (*pci_slot_name != NULL) CFRelease(*pci_slot_name);
                                        *pci_slot_name = parent_pci_slot_name;
                                } else {
-                                       CFRelease(parent_pci_slot_name);
+                                       if (parent_pci_slot_name != NULL) CFRelease(parent_pci_slot_name);
                                }
                        }
 
@@ -1811,6 +1854,10 @@ processNetworkInterface(SCNetworkInterfacePrivateRef     interfacePrivate,
                                                        interfacePrivate->interface_type        = kSCNetworkInterfaceTypeEthernet;
                                                        interfacePrivate->entity_type           = kSCValNetInterfaceTypeEthernet;
                                                        interfacePrivate->sort_order            = kSortBluetoothPAN_U;
+                                               } else if (CFEqual(val, CFSTR("CarPlay"))) {
+                                                       interfacePrivate->interface_type        = kSCNetworkInterfaceTypeEthernet;
+                                                       interfacePrivate->entity_type           = kSCValNetInterfaceTypeEthernet;
+                                                       interfacePrivate->sort_order            = kSortCarPlay;
                                                }
                                        }
 
@@ -1818,6 +1865,25 @@ processNetworkInterface(SCNetworkInterfacePrivateRef     interfacePrivate,
                                }
                        }
 
+#if    TARGET_OS_OSX
+                       if (interfacePrivate->interface_type == NULL) {
+                               val = IORegistryEntrySearchCFProperty(interface,
+                                                                     kIOServicePlane,
+                                                                     CFSTR(kUSBSupportsIPhoneOS),
+                                                                     NULL,
+                                                                     kIORegistryIterateRecursively | kIORegistryIterateParents);
+                               if (val != NULL) {
+                                       if (isA_CFBoolean(val) && CFBooleanGetValue(val)) {
+                                               interfacePrivate->interface_type        = kSCNetworkInterfaceTypeEthernet;
+                                               interfacePrivate->entity_type           = kSCValNetInterfaceTypeEthernet;
+                                               interfacePrivate->sort_order            = kSortTethered;
+                                       }
+
+                                       CFRelease(val);
+                               }
+                       }
+#endif // TARGET_OS_OSX
+
                        if (interfacePrivate->interface_type == NULL) {
                                str = IODictionaryCopyCFStringValue(bus_dict, CFSTR("name"));
                                if (str != NULL) {
@@ -2536,8 +2602,6 @@ createInterface(io_registry_entry_t interface, processInterface func,
        CFTypeRef                       val;
 
        // Keys of interest
-#if    TARGET_OS_SIMULATOR || 1        // while waiting for rdar://19431723
-#else
        const CFStringRef interface_dict_keys[] = {
                CFSTR(kIOInterfaceType),
                CFSTR(kIOBuiltin),
@@ -2550,7 +2614,6 @@ createInterface(io_registry_entry_t interface, processInterface func,
                CFSTR(kIOSerialBSDTypeKey),
                CFSTR(kIOLocation)
        };
-#endif // !TARGET_OS_SIMULATOR
 
        const CFStringRef controller_dict_keys[] = {
                CFSTR(kIOFeatures),
@@ -2574,18 +2637,9 @@ createInterface(io_registry_entry_t interface, processInterface func,
                }
        }
 
-#if    TARGET_OS_SIMULATOR || 1        // while waiting for rdar://19431723
-       // get the dictionary associated with the [interface] node
-       kr = IORegistryEntryCreateCFProperties(interface, &interface_dict, NULL, kNilOptions);
-       if (kr != kIOReturnSuccess) {
-               SC_log(LOG_INFO, "IORegistryEntryCreateCFProperties() failed, kr = 0x%x", kr);
-               goto done;
-       }
-#else
         interface_dict = copyIORegistryProperties(interface,
                                                   interface_dict_keys,
                                                   sizeof(interface_dict_keys)/sizeof(interface_dict_keys[0]));
-#endif // !TARGET_OS_SIMULATOR
 
        // get the controller node
        kr = IORegistryEntryGetParentEntry(interface, kIOServicePlane, &controller);
@@ -3357,7 +3411,7 @@ _SCNetworkInterfaceCreateWithBSDName(CFAllocatorRef       allocator,
        struct ifreq            ifr;
        SCNetworkInterfaceRef   interface;
 
-       bzero(&ifr, sizeof(ifr));
+       memset(&ifr, 0, sizeof(ifr));
        if (_SC_cfstring_to_cstring(bsdName, ifr.ifr_name, sizeof(ifr.ifr_name), kCFStringEncodingASCII) != NULL) {
                int     s;
 
@@ -4628,14 +4682,16 @@ add_interfaces(CFMutableArrayRef all_interfaces, CFArrayRef new_interfaces)
 static void
 __waitForInterfaces()
 {
-       CFStringRef             key;
+       CFStringRef             key     = NULL;
        CFArrayRef              keys;
        Boolean                 ok;
-       SCDynamicStoreRef       store;
+       SCDynamicStoreRef       store   = NULL;
+
+       CRSetCrashLogMessage("Waiting for IOKit to quiesce (or timeout)");
 
        store = SCDynamicStoreCreate(NULL, CFSTR("SCNetworkInterfaceCopyAll"), NULL, NULL);
        if (store == NULL) {
-               return;
+               goto done;
        }
 
        key = SCDynamicStoreKeyCreate(NULL, CFSTR("%@" "InterfaceNamer"), kSCDynamicStoreDomainPlugin);
@@ -4680,8 +4736,10 @@ __waitForInterfaces()
 
     done :
 
-       CFRelease(key);
-       CFRelease(store);
+       CRSetCrashLogMessage(NULL);
+
+       if (key != NULL) CFRelease(key);
+       if (store != NULL) CFRelease(store);
        return;
 }
 
@@ -5586,11 +5644,11 @@ SCNetworkInterfaceGetLocalizedDisplayName(SCNetworkInterfaceRef interface)
 
 
 __private_extern__
-CFDictionaryRef
+CFPropertyListRef
 __SCNetworkInterfaceGetTemplateOverrides(SCNetworkInterfaceRef interface, CFStringRef overrideType)
 {
        SCNetworkInterfacePrivateRef    interfacePrivate        = (SCNetworkInterfacePrivateRef)interface;
-       CFDictionaryRef                 overrides               = NULL;
+       CFPropertyListRef               overrides               = NULL;
 
        if (interfacePrivate->overrides != NULL) {
                overrides = CFDictionaryGetValue(interfacePrivate->overrides, overrideType);
@@ -5813,10 +5871,6 @@ SCNetworkInterfaceSetExtendedConfiguration(SCNetworkInterfaceRef interface,
 #pragma mark SCNetworkInterface [Refresh Configuration] API
 
 
-#ifndef kSCEntNetRefreshConfiguration
-#define kSCEntNetRefreshConfiguration  CFSTR("RefreshConfiguration")
-#endif // kSCEntNetRefreshConfiguration
-
 Boolean
 _SCNetworkInterfaceForceConfigurationRefresh(CFStringRef ifName)
 {
@@ -7011,7 +7065,9 @@ SCNetworkInterfaceSetAdvisory(SCNetworkInterfaceRef interface,
                              SCNetworkInterfaceAdvisory advisory,
                              CFStringRef reason)
 {
-#pragma unused(interface, advisory, reason)
+#pragma unused(interface)
+#pragma unused(advisory)
+#pragma unused(reason)
        return (FALSE);
 }
 
@@ -7224,7 +7280,7 @@ update_ift_family(SCNetworkInterfaceRef interface)
                CFStringRef     bsdName = SCNetworkInterfaceGetBSDName(interface);
                struct ifreq    ifr;
 
-               bzero(&ifr, sizeof(ifr));
+               memset(&ifr, 0, sizeof(ifr));
                if ((bsdName != NULL) &&
                    _SC_cfstring_to_cstring(bsdName, ifr.ifr_name, sizeof(ifr.ifr_name), kCFStringEncodingASCII) != NULL) {
                        int     s;
@@ -7510,7 +7566,7 @@ _SCNetworkInterfaceIsApplePreconfigured(SCNetworkInterfaceRef interface)
 #else  // TARGET_OS_SIMULATOR
        SCNetworkInterfacePrivateRef    interfacePrivate        = (SCNetworkInterfacePrivateRef)interface;
 
-       if (!interfacePrivate->hidden) {
+       if (!_SCNetworkInterfaceIsHiddenConfiguration(interface)) {
                // if not HiddenConfiguration
                return FALSE;
        }
@@ -7522,11 +7578,16 @@ _SCNetworkInterfaceIsApplePreconfigured(SCNetworkInterfaceRef interface)
                return FALSE;
        }
 
-       if (interfacePrivate->builtin) {
+       if (_SCNetworkInterfaceIsBuiltin(interface)) {
                // if built-in (and overrides are present)
                return TRUE;
        }
 
+       if (_SCNetworkInterfaceIsCarPlay(interface)) {
+               // if CarPlay (and overrides are present)
+               return TRUE;
+       }
+
        if (isA_CFNumber(interfacePrivate->usb.vid)) {
                int             vid;
 
@@ -7569,6 +7630,15 @@ _SCNetworkInterfaceIsBluetoothP2P(SCNetworkInterfaceRef interface)
 }
 
 
+Boolean
+_SCNetworkInterfaceIsCarPlay(SCNetworkInterfaceRef interface)
+{
+       SCNetworkInterfacePrivateRef    interfacePrivate        = (SCNetworkInterfacePrivateRef)interface;
+
+       return (interfacePrivate->sort_order == kSortCarPlay);
+}
+
+
 Boolean
 _SCNetworkInterfaceIsHiddenConfiguration(SCNetworkInterfaceRef interface)
 {
index 6874469d93d69eab2952aa92fc38d9ae4977eb45..27c7d8b37081eb4228fdb57c6ef5f8c17bc87091 100644 (file)
@@ -1526,7 +1526,8 @@ _SCNetworkConfigurationCheckValidityWithPreferences(SCPreferencesRef prefs,
         __SCNetworkInterfaceCreateMappingUsingBSDName(SCPreferencesRef prefs);
         */
        interfaces = __SCNetworkInterfaceCopyStoredWithPreferences(ni_prefs);
-       if (isA_CFArray(interfaces) == NULL) {
+       if (!isA_CFArray(interfaces)) {
+               if (interfaces != NULL) CFRelease(interfaces);
                SC_log(LOG_NOTICE, "No interfaces");
                isValid = FALSE;
                goto done;
@@ -1540,7 +1541,8 @@ _SCNetworkConfigurationCheckValidityWithPreferences(SCPreferencesRef prefs,
        }
 
        interfaces = __SCNetworkServiceCopyAllInterfaces(prefs);
-       if (isA_CFArray(interfaces) == NULL) {
+       if (!isA_CFArray(interfaces)) {
+               if (interfaces != NULL) CFRelease(interfaces);
                isValid = FALSE;
                SC_log(LOG_INFO, "No interfaces");
                goto done;
index 537b90294a1009fbcf5caf68a886f13f7b41ce6d..d0cd41ea214e662dac5fb60e54c5c5025f80d169 100644 (file)
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2004-2008, 2016, 2017 Apple Inc. All rights reserved.
+ * Copyright (c) 2004-2008, 2016-2018 Apple Inc. All rights reserved.
  *
  * @APPLE_LICENSE_HEADER_START@
  *
@@ -310,6 +310,7 @@ SCNetworkProtocolSetConfiguration(SCNetworkProtocolRef protocol, CFDictionaryRef
        Boolean                         ok;
        CFStringRef                     path;
        SCNetworkProtocolPrivateRef     protocolPrivate = (SCNetworkProtocolPrivateRef)protocol;
+       SCNetworkServiceRef             service;
        SCNetworkServicePrivateRef      servicePrivate;
 
        if (!isA_SCNetworkProtocol(protocol)) {
@@ -317,7 +318,17 @@ SCNetworkProtocolSetConfiguration(SCNetworkProtocolRef protocol, CFDictionaryRef
                return FALSE;
        }
 
-       servicePrivate = (SCNetworkServicePrivateRef)protocolPrivate->service;
+       service = protocolPrivate->service;
+       servicePrivate = (SCNetworkServicePrivateRef)service;
+       if (!__SCNetworkServiceExists(service)) {
+               SC_log(LOG_ERR, "SCNetworkProtocolSetConfiguration() w/removed service\n  protocol = %@\n  service = %@",
+                      protocolPrivate->entityID,
+                      servicePrivate);
+               _SC_crash_once("SCNetworkProtocolSetConfiguration() w/removed service", NULL, NULL);
+               _SCErrorSet(kSCStatusInvalidArgument);
+               return FALSE;
+       }
+
        path = copyProtocolConfigurationPath(protocolPrivate);
        ok = __setPrefsConfiguration(servicePrivate->prefs, path, config, TRUE);
        CFRelease(path);
@@ -338,6 +349,7 @@ SCNetworkProtocolSetEnabled(SCNetworkProtocolRef protocol, Boolean enabled)
        Boolean                         ok;
        CFStringRef                     path;
        SCNetworkProtocolPrivateRef     protocolPrivate = (SCNetworkProtocolPrivateRef)protocol;
+       SCNetworkServiceRef             service;
        SCNetworkServicePrivateRef      servicePrivate;
 
        if (!isA_SCNetworkProtocol(protocol)) {
@@ -345,7 +357,17 @@ SCNetworkProtocolSetEnabled(SCNetworkProtocolRef protocol, Boolean enabled)
                return FALSE;
        }
 
-       servicePrivate = (SCNetworkServicePrivateRef)protocolPrivate->service;
+       service = protocolPrivate->service;
+       servicePrivate = (SCNetworkServicePrivateRef)service;
+       if (!__SCNetworkServiceExists(service)) {
+               SC_log(LOG_ERR, "SCNetworkProtocolSetEnabled() w/removed service\n  protocol = %@\n  service = %@",
+                      protocolPrivate->entityID,
+                      servicePrivate);
+               _SC_crash_once("SCNetworkProtocolSetEnabled() w/removed service", NULL, NULL);
+               _SCErrorSet(kSCStatusInvalidArgument);
+               return FALSE;
+       }
+
        path = copyProtocolConfigurationPath(protocolPrivate);
        ok = __setPrefsEnabled(servicePrivate->prefs, path, enabled);
        CFRelease(path);
index 436077c3b3ddc94c5142ef36640d885d71e65931..5b572365e7db2bca62511b513f0eed7570225b83 100644 (file)
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2003-2018 Apple Inc. All rights reserved.
+ * Copyright (c) 2003-2019 Apple Inc. All rights reserved.
  *
  * @APPLE_LICENSE_HEADER_START@
  *
@@ -34,7 +34,6 @@
  * - add advanced reachability APIs
  */
 
-#include <os/availability.h>
 #include <TargetConditionals.h>
 #include <sys/cdefs.h>
 #include <dispatch/dispatch.h>
@@ -58,7 +57,7 @@
 #include <CoreFoundation/CoreFoundation.h>
 #include <CoreFoundation/CFRuntime.h>
 
-#define        SC_LOG_HANDLE           __log_SCNetworkReachability()
+#define        SC_LOG_HANDLE           __log_SCNetworkReachability
 #define SC_LOG_HANDLE_TYPE     static
 #include <SystemConfiguration/SystemConfiguration.h>
 #include <SystemConfiguration/SCValidation.h>
 
 
 
-
-#if __has_include(<nw/private.h>)
 #include <nw/private.h>
-#else // __has_include(<nw/private.h>)
-#include <network/private.h>
-#endif // __has_include(<nw/private.h>)
 
 #define        DEBUG_REACHABILITY_TYPE_NAME                    "create w/name"
 #define        DEBUG_REACHABILITY_TYPE_NAME_OPTIONS            "    + options"
@@ -344,31 +338,31 @@ __SCNetworkReachabilityDeallocate(CFTypeRef cf)
        targetPrivate->scheduled = FALSE;
 
        if (targetPrivate->hostnameEndpoint) {
-               network_release(targetPrivate->hostnameEndpoint);
+               nw_release(targetPrivate->hostnameEndpoint);
                targetPrivate->hostnameEndpoint = NULL;
        }
        if (targetPrivate->localAddressEndpoint) {
-               network_release(targetPrivate->localAddressEndpoint);
+               nw_release(targetPrivate->localAddressEndpoint);
                targetPrivate->localAddressEndpoint = NULL;
        }
        if (targetPrivate->remoteAddressEndpoint) {
-               network_release(targetPrivate->remoteAddressEndpoint);
+               nw_release(targetPrivate->remoteAddressEndpoint);
                targetPrivate->remoteAddressEndpoint = NULL;
        }
        if (targetPrivate->parameters) {
-               network_release(targetPrivate->parameters);
+               nw_release(targetPrivate->parameters);
                targetPrivate->parameters = NULL;
        }
        if (targetPrivate->lastPath) {
-               network_release(targetPrivate->lastPath);
+               nw_release(targetPrivate->lastPath);
                targetPrivate->lastPath = NULL;
        }
        if (targetPrivate->lastPathParameters) {
-               network_release(targetPrivate->lastPathParameters);
+               nw_release(targetPrivate->lastPathParameters);
                targetPrivate->lastPathParameters = NULL;
        }
        if (targetPrivate->lastResolvedEndpoints) {
-               network_release(targetPrivate->lastResolvedEndpoints);
+               nw_release(targetPrivate->lastResolvedEndpoints);
                targetPrivate->lastResolvedEndpoints = NULL;
        }
 
@@ -426,7 +420,6 @@ __SCNetworkReachabilityCreatePrivate(CFAllocatorRef allocator)
        return targetPrivate;
 }
 
-
 static const struct sockaddr *
 is_valid_address(const struct sockaddr *address)
 {
@@ -439,13 +432,11 @@ is_valid_address(const struct sockaddr *address)
                        case AF_INET :
                                if (address->sa_len >= sizeof(struct sockaddr_in)) {
                                        valid = address;
-                               } else {
-                                       if (!warned) {
-                                               SC_log(LOG_WARNING, "SCNetworkReachabilityCreateWithAddress[Pair] called with \"struct sockaddr *\" len %d < %zu",
-                                                     address->sa_len,
-                                                     sizeof(struct sockaddr_in));
-                                               warned = TRUE;
-                                       }
+                               } else if (!warned) {
+                                       SC_log(LOG_WARNING, "SCNetworkReachabilityCreateWithAddress[Pair] called with \"struct sockaddr *\" len %d < %zu",
+                                             address->sa_len,
+                                             sizeof(struct sockaddr_in));
+                                       warned = TRUE;
                                }
                                break;
                        case AF_INET6 :
@@ -648,7 +639,7 @@ SCNetworkReachabilityCreateWithAddressPair(CFAllocatorRef           allocator,
 
        if (remoteAddress != NULL) {
                if (is_same_address(localAddress, remoteAddress)) {
-                       targetPrivate->remoteAddressEndpoint = network_retain(targetPrivate->localAddressEndpoint);
+                       targetPrivate->remoteAddressEndpoint = nw_retain(targetPrivate->localAddressEndpoint);
                } else {
                        targetPrivate->remoteAddressEndpoint = nw_endpoint_create_address(remoteAddress);
                }
@@ -826,7 +817,6 @@ SCNetworkReachabilityCreateWithOptions(CFAllocatorRef       allocator,
                return NULL;
        }
 
-
        if (nodename != NULL) {
                const char      *name;
 
@@ -884,7 +874,7 @@ SCNetworkReachabilityCreateWithOptions(CFAllocatorRef       allocator,
        if (if_index != 0) {
                nw_interface_t interfaceObject = nw_interface_create_with_index(if_index);
                nw_parameters_require_interface(targetPrivate->parameters, interfaceObject);
-               network_release(interfaceObject);
+               nw_release(interfaceObject);
                haveOpt = TRUE;
        }
 
@@ -1079,12 +1069,12 @@ nw_path_is_linklocal_direct(nw_path_t path)
                                        is_linklocal_direct = true;
                                }
 
-                               network_release(interface);
+                               nw_release(interface);
                        }
                }
        }
 
-       network_release(endpoint);
+       nw_release(endpoint);
        return is_linklocal_direct;
 }
 
@@ -1274,11 +1264,7 @@ __SCNetworkReachabilityCreateCrazyIvan46Path(nw_path_t path, nw_endpoint_t endpo
                        struct sockaddr_in6 synthesizedAddress = {
                                .sin6_len = sizeof(struct sockaddr_in6),
                                .sin6_family = AF_INET6,
-#if defined(NW_PORT_HOST_BYTE_ORDER) && NW_PORT_HOST_BYTE_ORDER
-                .sin6_port = htons(nw_endpoint_get_port(endpoint)),
-#else
-                               .sin6_port = nw_endpoint_get_port(endpoint),
-#endif
+                               .sin6_port = htons(nw_endpoint_get_port(endpoint)),
                                .sin6_flowinfo = 0,
                                .sin6_scope_id = 0
                        };
@@ -1294,10 +1280,10 @@ __SCNetworkReachabilityCreateCrazyIvan46Path(nw_path_t path, nw_endpoint_t endpo
                                retPath = synthesizedPath;
                                SC_log(LOG_INFO, "Using CrazyIvan46 synthesized reachability result");
                        } else {
-                               network_release(synthesizedPath);
+                               nw_release(synthesizedPath);
                        }
-                       network_release(synthesizedEvaluator);
-                       network_release(synthesizedEndpoint);
+                       nw_release(synthesizedEvaluator);
+                       nw_release(synthesizedEndpoint);
                }
        } else {
                // Don't synthesize in non-scheduled mode to avoid generating DNS traffic
@@ -1317,10 +1303,10 @@ __SCNetworkReachabilityCreateCrazyIvan46Path(nw_path_t path, nw_endpoint_t endpo
                        retPath = v6Path;
                        SC_log(LOG_INFO, "Using CrazyIvan46 simple reachability result");
                } else {
-                       network_release(v6Path);
+                       nw_release(v6Path);
                }
-               network_release(v6PathEvaluator);
-               network_release(v6Parameters);
+               nw_release(v6PathEvaluator);
+               nw_release(v6Parameters);
        }
        return retPath;
 }
@@ -1368,14 +1354,14 @@ SCNetworkReachabilityGetFlags(SCNetworkReachabilityRef          target,
                crazyIvanPath = __SCNetworkReachabilityCreateCrazyIvan46Path(path, endpoint,
                                                                             targetPrivate->parameters, FALSE);
                if (NULL != crazyIvanPath) {
-                       network_release(path);
+                       nw_release(path);
                        path = crazyIvanPath;
                }
        }
 
        *flags = __SCNetworkReachabilityGetFlagsFromPath(path, 0, nw_resolver_status_invalid, NULL, FALSE, 0);
-       network_release(path);
-       network_release(pathEvaluator);
+       nw_release(path);
+       nw_release(pathEvaluator);
 
     done :
 
@@ -1390,23 +1376,17 @@ SCNetworkReachabilityGetFlags(SCNetworkReachabilityRef          target,
 static void
 reachPerformAndUnlock(SCNetworkReachabilityPrivateRef targetPrivate)
 {
-       os_activity_t                   activity;
        void                            *context_info;
        void                            (*context_release)(const void *);
        SCNetworkReachabilityCallBack   rlsFunction;
        SCNetworkReachabilityFlags      flags           = 0;
 
-       activity = os_activity_create("processing SCNetworkReachability notification",
-                                     OS_ACTIVITY_CURRENT,
-                                     OS_ACTIVITY_FLAG_DEFAULT);
-       os_activity_scope(activity);
-
        if (!targetPrivate->scheduled) {
                // if no longer scheduled
                SC_log(LOG_INFO, "%sskipping SCNetworkReachability callback, no longer scheduled",
                       targetPrivate->log_prefix);
                MUTEX_UNLOCK(&targetPrivate->lock);
-               goto done;
+               return;
        }
 
        // callout
@@ -1441,10 +1421,6 @@ reachPerformAndUnlock(SCNetworkReachabilityPrivateRef targetPrivate)
                (*context_release)(context_info);
        }
 
-    done :
-
-       os_release(activity);
-
        return;
 }
 
@@ -1493,7 +1469,7 @@ SCNetworkReachabilitySetCallback(SCNetworkReachabilityRef target,
        targetPrivate->rlsContext.release               = NULL;
        targetPrivate->rlsContext.copyDescription       = NULL;
        if (context) {
-               bcopy(context, &targetPrivate->rlsContext, sizeof(SCNetworkReachabilityContext));
+               memcpy(&targetPrivate->rlsContext, context, sizeof(SCNetworkReachabilityContext));
                if (context->retain != NULL) {
                        targetPrivate->rlsContext.info = (void *)(*context->retain)(context->info);
                }
@@ -1709,7 +1685,7 @@ __SCNetworkReachabilityRestartResolver(SCNetworkReachabilityPrivateRef targetPri
                        if (resolver == targetPrivate->resolver) {
                                targetPrivate->resolver = NULL;
                        }
-                       network_release(resolver);
+                       nw_release(resolver);
                        MUTEX_UNLOCK(&targetPrivate->lock);
                        CFRelease(targetPrivate);
                });
@@ -1722,8 +1698,8 @@ __SCNetworkReachabilityRestartResolver(SCNetworkReachabilityPrivateRef targetPri
                                __SCNetworkReachabilityCopyPathStatus(targetPrivate, &oldFlags, &oldIFIndex, &oldEndpointCount);
 
                                targetPrivate->lastResolverStatus = status;
-                               network_release(targetPrivate->lastResolvedEndpoints);
-                               targetPrivate->lastResolvedEndpoints = network_retain(resolved_endpoints);
+                               nw_release(targetPrivate->lastResolvedEndpoints);
+                               targetPrivate->lastResolvedEndpoints = nw_retain(resolved_endpoints);
 
                                // Run path evaluation on the resolved endpoints
                                __block Boolean hasFlags = FALSE;
@@ -1743,8 +1719,8 @@ __SCNetworkReachabilityRestartResolver(SCNetworkReachabilityPrivateRef targetPri
                                                hasFlags = TRUE;
                                        }
                                        interfaceIndex = nw_path_get_interface_index(path);
-                                       network_release(path);
-                                       network_release(pathEvaluator);
+                                       nw_release(path);
+                                       nw_release(pathEvaluator);
 
                                        rank = __SCNetworkReachabilityRank(flags);
                                        if (rank > __SCNetworkReachabilityRank(targetPrivate->lastResolvedEndpointFlags)) {
@@ -1769,7 +1745,7 @@ __SCNetworkReachabilityRestartResolver(SCNetworkReachabilityPrivateRef targetPri
                                MUTEX_UNLOCK(&targetPrivate->lock);
                        }
                })) {
-                       network_release(resolver);
+                       nw_release(resolver);
                        targetPrivate->resolver = NULL;
                        CFRelease(targetPrivate);
                }
@@ -1810,23 +1786,23 @@ __SCNetworkReachabilitySetDispatchQueue(SCNetworkReachabilityPrivateRef targetPr
                        targetPrivate->sentFirstUpdate = TRUE;
                }
 
-               network_release(targetPrivate->lastPath);
+               nw_release(targetPrivate->lastPath);
                targetPrivate->lastPath = nw_path_evaluator_copy_path(pathEvaluator);
 
                if (isReachabilityTypeAddress(targetPrivate->type)) {
                        crazyIvanPath = __SCNetworkReachabilityCreateCrazyIvan46Path(targetPrivate->lastPath, endpoint,
                                                                                     targetPrivate->parameters, FALSE);
                        if (NULL != crazyIvanPath) {
-                               network_release(targetPrivate->lastPath);
+                               nw_release(targetPrivate->lastPath);
                                targetPrivate->lastPath = crazyIvanPath;
                        }
                }
 
-               network_release(targetPrivate->lastPathParameters);
+               nw_release(targetPrivate->lastPathParameters);
                targetPrivate->lastPathParameters = nw_path_copy_derived_parameters(targetPrivate->lastPath);
 
                targetPrivate->lastResolverStatus = nw_resolver_status_invalid;
-               network_release(targetPrivate->lastResolvedEndpoints);
+               nw_release(targetPrivate->lastResolvedEndpoints);
                targetPrivate->lastResolvedEndpoints = NULL;
                __SCNetworkReachabilityRestartResolver(targetPrivate);
 
@@ -1836,7 +1812,7 @@ __SCNetworkReachabilitySetDispatchQueue(SCNetworkReachabilityPrivateRef   targetPr
                        if (pathEvaluator == targetPrivate->pathEvaluator) {
                                targetPrivate->pathEvaluator = NULL;
                        }
-                       network_release(pathEvaluator);
+                       nw_release(pathEvaluator);
                        MUTEX_UNLOCK(&targetPrivate->lock);
                        CFRelease(targetPrivate);
                });
@@ -1850,8 +1826,8 @@ __SCNetworkReachabilitySetDispatchQueue(SCNetworkReachabilityPrivateRef   targetPr
                                size_t oldEndpointCount = 0;
                                __SCNetworkReachabilityCopyPathStatus(targetPrivate, &oldFlags, &oldIFIndex, &oldEndpointCount);
 
-                               network_release(targetPrivate->lastPath);
-                               targetPrivate->lastPath = network_retain(path);
+                               nw_release(targetPrivate->lastPath);
+                               targetPrivate->lastPath = nw_retain(path);
 
                                if (isReachabilityTypeAddress(targetPrivate->type)) {
                                        crazyIvanPath =
@@ -1860,7 +1836,7 @@ __SCNetworkReachabilitySetDispatchQueue(SCNetworkReachabilityPrivateRef   targetPr
                                                                                             targetPrivate->parameters,
                                                                                             TRUE);
                                        if (NULL != crazyIvanPath) {
-                                               network_release(targetPrivate->lastPath);
+                                               nw_release(targetPrivate->lastPath);
                                                targetPrivate->lastPath = crazyIvanPath;
                                        }
                                }
@@ -1880,7 +1856,7 @@ __SCNetworkReachabilitySetDispatchQueue(SCNetworkReachabilityPrivateRef   targetPr
                        }
                })) {
                        targetPrivate->pathEvaluator = NULL;
-                       network_release(pathEvaluator);
+                       nw_release(pathEvaluator);
                        CFRelease(targetPrivate);
                }
        } else {
@@ -1899,11 +1875,11 @@ __SCNetworkReachabilitySetDispatchQueue(SCNetworkReachabilityPrivateRef targetPr
                targetPrivate->sentFirstUpdate = FALSE;
                nw_path_evaluator_cancel(targetPrivate->pathEvaluator);
                targetPrivate->pathEvaluator = NULL;
-               network_release(targetPrivate->lastPath);
+               nw_release(targetPrivate->lastPath);
                targetPrivate->lastPath = NULL;
-               network_release(targetPrivate->lastPathParameters);
+               nw_release(targetPrivate->lastPathParameters);
                targetPrivate->lastPathParameters = NULL;
-               network_release(targetPrivate->lastResolvedEndpoints);
+               nw_release(targetPrivate->lastResolvedEndpoints);
                targetPrivate->lastResolvedEndpoints = NULL;
                if (NULL != targetPrivate->resolver) {
                        nw_resolver_cancel(targetPrivate->resolver);
@@ -1968,8 +1944,8 @@ _SC_checkResolverReachabilityByAddress(SCDynamicStoreRef          *storeP,
                        *haveDNS = TRUE;
                }
        }
-       network_release(evaluator);
-       network_release(path);
+       nw_release(evaluator);
+       nw_release(path);
 
        return TRUE;
 }
index 85ecdb9b879e78fecb237bf8009cd360f8036e31..0a98fe4f1315f5606a1a882a50751aa76d292910 100644 (file)
 #include <net/if.h>
 #include <xpc/xpc.h>
 
-#if __has_include(<nw/private.h>)
 #include <nw/private.h>
-#else // __has_include(<nw/private.h>)
-#include <network/private.h>
-#endif // __has_include(<nw/private.h>)
 
 #pragma mark -
 #pragma mark SCNetworkReachability
index 727c56c242bbac2a3ffd043b0c7f80578a2ce795..d9c8d4bed15e63048bfd5db122fb49c29fd26b34 100644 (file)
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2004-2017 Apple Inc. All rights reserved.
+ * Copyright (c) 2004-2018 Apple Inc. All rights reserved.
  *
  * @APPLE_LICENSE_HEADER_START@
  *
@@ -68,10 +68,11 @@ __SCNetworkServiceCopyDescription(CFTypeRef cf)
 {
        CFAllocatorRef                  allocator       = CFGetAllocator(cf);
        CFMutableStringRef              result;
-       SCNetworkServicePrivateRef      servicePrivate  = (SCNetworkServicePrivateRef)cf;
+       SCNetworkServiceRef             service         = (SCNetworkServiceRef)cf;
+       SCNetworkServicePrivateRef      servicePrivate  = (SCNetworkServicePrivateRef)service;
 
        result = CFStringCreateMutable(allocator, 0);
-       CFStringAppendFormat(result, NULL, CFSTR("<SCNetworkService %p [%p]> {"), cf, allocator);
+       CFStringAppendFormat(result, NULL, CFSTR("<SCNetworkService %p [%p]> {"), service, allocator);
        CFStringAppendFormat(result, NULL, CFSTR("id = %@"), servicePrivate->serviceID);
        if (servicePrivate->prefs != NULL) {
                CFStringAppendFormat(result, NULL, CFSTR(", prefs = %p"), servicePrivate->prefs);
@@ -81,6 +82,9 @@ __SCNetworkServiceCopyDescription(CFTypeRef cf)
        if (servicePrivate->name != NULL) {
                CFStringAppendFormat(result, NULL, CFSTR(", name = %@"), servicePrivate->name);
        }
+       if (!__SCNetworkServiceExists(service)) {
+               CFStringAppendFormat(result, NULL, CFSTR(", REMOVED"));
+       }
        CFStringAppendFormat(result, NULL, CFSTR("}"));
 
        return result;
@@ -337,7 +341,7 @@ _protocolTemplate(SCNetworkServiceRef service, CFStringRef protocolType)
                        }
 
                        overrides = __SCNetworkInterfaceGetTemplateOverrides(interface, protocolType);
-                       if (overrides != NULL) {
+                       if (isA_CFDictionary(overrides)) {
                                CFMutableDictionaryRef  newTemplate;
 
                                newTemplate = CFDictionaryCreateMutableCopy(NULL, 0, template);
@@ -365,10 +369,11 @@ Boolean
 SCNetworkServiceAddProtocolType(SCNetworkServiceRef service, CFStringRef protocolType)
 {
        CFDictionaryRef                 entity;
+       Boolean                         newEnabled;
        CFDictionaryRef                 newEntity       = NULL;
        Boolean                         ok              = FALSE;
        CFStringRef                     path;
-       SCNetworkProtocolRef            protocol;
+       SCNetworkProtocolRef            protocol        = NULL;
        SCNetworkServicePrivateRef      servicePrivate  = (SCNetworkServicePrivateRef)service;
 
        if (!isA_SCNetworkService(service) || (servicePrivate->prefs == NULL)) {
@@ -381,6 +386,15 @@ SCNetworkServiceAddProtocolType(SCNetworkServiceRef service, CFStringRef protoco
                return FALSE;
        }
 
+       if (!__SCNetworkServiceExists(service)) {
+               SC_log(LOG_ERR, "SCNetworkServiceAddProtocolType() w/removed service\n  service = %@\n  protocol = %@",
+                      service,
+                      protocolType);
+               _SC_crash_once("SCNetworkServiceAddProtocolType() w/removed service", NULL, NULL);
+               _SCErrorSet(kSCStatusInvalidArgument);
+               return FALSE;
+       }
+
        path = SCPreferencesPathKeyCreateNetworkServiceEntity(NULL,                             // allocator
                                                              servicePrivate->serviceID,        // service
                                                              protocolType);                    // entity
@@ -400,6 +414,7 @@ SCNetworkServiceAddProtocolType(SCNetworkServiceRef service, CFStringRef protoco
                                       &kCFTypeDictionaryValueCallBacks);
        ok = SCPreferencesPathSetValue(servicePrivate->prefs, path, newEntity);
        CFRelease(newEntity);
+       newEntity = NULL;
        if (!ok) {
                goto done;
        }
@@ -408,12 +423,26 @@ SCNetworkServiceAddProtocolType(SCNetworkServiceRef service, CFStringRef protoco
        assert(protocol != NULL);
 
        newEntity = _protocolTemplate(service, protocolType);
+       assert(newEntity != NULL);
+       
        ok = SCNetworkProtocolSetConfiguration(protocol, newEntity);
-       CFRelease(newEntity);
-       CFRelease(protocol);
+       if (!ok) {
+               // could not set default configuration
+               goto done;
+       }
+
+       newEnabled = !CFDictionaryContainsKey(newEntity, kSCResvInactive);
+       ok = SCNetworkProtocolSetEnabled(protocol, newEnabled);
+       if (!ok) {
+               // could not enable/disable protocol
+               goto done;
+       }
 
     done :
 
+       if (newEntity != NULL) CFRelease(newEntity);
+       if (protocol != NULL) CFRelease(protocol);
+
        if (ok) {
                SC_log(LOG_DEBUG, "SCNetworkServiceAddProtocolType(): %@, %@", service, protocolType);
        }
@@ -879,7 +908,7 @@ SCNetworkServiceCreate(SCPreferencesRef prefs, SCNetworkInterfaceRef interface)
 
                                // a ConnectionScript (and related keys) from the interface
                                // should trump the settings from the configuration template.
-                               if (overrides != NULL) {
+                               if (isA_CFDictionary(overrides)) {
                                        CFMutableDictionaryRef  newConfig;
 
                                        newConfig = CFDictionaryCreateMutableCopy(NULL, 0, config);
@@ -898,7 +927,7 @@ SCNetworkServiceCreate(SCPreferencesRef prefs, SCNetworkInterfaceRef interface)
                                CFDictionaryRef         overrides;
 
                                overrides = __SCNetworkInterfaceGetTemplateOverrides(interface, kSCNetworkInterfaceTypePPP);
-                               if (overrides != NULL) {
+                               if (isA_CFDictionary(overrides)) {
                                        CFMutableDictionaryRef  newConfig;
 
                                        newConfig = CFDictionaryCreateMutableCopy(NULL, 0, config);
@@ -954,7 +983,9 @@ SCNetworkServiceEstablishDefaultConfiguration(SCNetworkServiceRef service)
        CFIndex                         i;
        SCNetworkInterfaceRef           interface;
        CFIndex                         n;
+       Boolean                         ok;
        CFArrayRef                      protocolTypes;
+       CFStringRef                     rankStr;
        SCNetworkServicePrivateRef      servicePrivate  = (SCNetworkServicePrivateRef)service;
 
        if (!isA_SCNetworkService(service) || (servicePrivate->prefs == NULL)) {
@@ -970,45 +1001,40 @@ SCNetworkServiceEstablishDefaultConfiguration(SCNetworkServiceRef service)
        protocolTypes = SCNetworkInterfaceGetSupportedProtocolTypes(interface);
        n = (protocolTypes != NULL) ? CFArrayGetCount(protocolTypes) : 0;
        for (i = 0; i < n; i++) {
-               Boolean                 enabled;
-               CFDictionaryRef         newEntity       = NULL;
-               Boolean                 ok;
-               SCNetworkProtocolRef    protocol        = NULL;
-               CFStringRef             protocolType;
+               CFStringRef     protocolType;
 
                protocolType = CFArrayGetValueAtIndex(protocolTypes, i);
                ok = SCNetworkServiceAddProtocolType(service, protocolType);
-               if (!ok && (SCError() != kSCStatusKeyExists)) {
-                       // could not add protocol
-                       goto nextProtocol;
+               if (!ok) {
+                       SC_log(LOG_INFO,
+                              "SCNetworkServiceEstablishDefaultConfiguration(): could not add protocol \"%@\"",
+                              protocolType);
                }
+       }
 
-               protocol = SCNetworkServiceCopyProtocol(service, protocolType);
-               if (protocol == NULL) {
-                       // oops, somethings wrong (should never happen)
-                       goto nextProtocol;
-               }
+       rankStr = __SCNetworkInterfaceGetTemplateOverrides(interface, kSCPropNetServicePrimaryRank);
+       if (isA_CFString(rankStr)) {
+               SCNetworkServicePrimaryRank     rank;
 
-               newEntity = _protocolTemplate(service, protocolType);
-               ok = SCNetworkProtocolSetConfiguration(protocol, newEntity);
+               ok = __str_to_rank(rankStr, &rank);
                if (!ok) {
-                       // could not set default configuration
-                       goto nextProtocol;
+                       SC_log(LOG_INFO,
+                              "SCNetworkServiceEstablishDefaultConfiguration(): unknown rank \"%@\"",
+                              rankStr);
+                       goto done;
                }
 
-               enabled = !CFDictionaryContainsKey(newEntity, kSCResvInactive);
-               ok = SCNetworkProtocolSetEnabled(protocol, enabled);
+               ok = SCNetworkServiceSetPrimaryRank(service, rank);
                if (!ok) {
-                       // could not enable/disable protocol
-                       goto nextProtocol;
+                       SC_log(LOG_INFO,
+                              "SCNetworkServiceEstablishDefaultConfiguration(): could not set rank \"%@\"",
+                              rankStr);
+                       goto done;
                }
-
-           nextProtocol :
-
-               if (newEntity != NULL) CFRelease(newEntity);
-               if (protocol  != NULL) CFRelease(protocol);
        }
 
+    done :
+
        return TRUE;
 }
 
@@ -1251,6 +1277,13 @@ SCNetworkServiceRemove(SCNetworkServiceRef service)
                return FALSE;
        }
 
+       if (!__SCNetworkServiceExists(service)) {
+               SC_log(LOG_ERR, "SCNetworkServiceRemove() w/removed service\n  service = %@", service);
+               _SC_crash_once("SCNetworkServiceRemove() w/removed service", NULL, NULL);
+               _SCErrorSet(kSCStatusInvalidArgument);
+               return FALSE;
+       }
+
        // remove service from all sets
 
        sets = SCNetworkSetCopyAll(servicePrivate->prefs);
@@ -1300,6 +1333,15 @@ SCNetworkServiceRemoveProtocolType(SCNetworkServiceRef service, CFStringRef prot
                return FALSE;
        }
 
+       if (!__SCNetworkServiceExists(service)) {
+               SC_log(LOG_ERR, "SCNetworkServiceRemoveProtocolType() w/removed service\n  service = %@\n  protocol = %@",
+                      service,
+                      protocolType);
+               _SC_crash_once("SCNetworkServiceRemoveProtocolType() w/removed service", NULL, NULL);
+               _SCErrorSet(kSCStatusInvalidArgument);
+               return FALSE;
+       }
+
        if (!__SCNetworkProtocolIsValidType(protocolType)) {
                _SCErrorSet(kSCStatusInvalidArgument);
                return FALSE;
@@ -1341,6 +1383,13 @@ SCNetworkServiceSetEnabled(SCNetworkServiceRef service, Boolean enabled)
                return FALSE;
        }
 
+       if (!__SCNetworkServiceExists(service)) {
+               SC_log(LOG_ERR, "SCNetworkServiceSetEnabled() w/removed service\n  service = %@", service);
+               _SC_crash_once("SCNetworkProtocolSetEnabled() w/removed service", NULL, NULL);
+               _SCErrorSet(kSCStatusInvalidArgument);
+               return FALSE;
+       }
+
        // make sure that we do not enable a network service if the
        // associated interface is a member of a bond or bridge.
        if (enabled) {
@@ -1384,6 +1433,15 @@ SCNetworkServiceSetName(SCNetworkServiceRef service, CFStringRef name)
                return FALSE;
        }
 
+       if (!__SCNetworkServiceExists(service)) {
+               SC_log(LOG_ERR, "SCNetworkServiceSetName() w/removed service\n  service = %@\n  name = %@",
+                      service,
+                      name != NULL ? name : CFSTR("<NULL>"));
+               _SC_crash_once("SCNetworkServiceSetName() w/removed service", NULL, NULL);
+               _SCErrorSet(kSCStatusInvalidArgument);
+               return FALSE;
+       }
+
        if (name != NULL) {
                if (!isA_CFString(name)) {
                        _SCErrorSet(kSCStatusInvalidArgument);
@@ -1553,6 +1611,34 @@ SCNetworkServiceSetName(SCNetworkServiceRef service, CFStringRef name)
 #pragma mark SCNetworkService SPIs
 
 
+__private_extern__
+Boolean
+__SCNetworkServiceExists(SCNetworkServiceRef service)
+{
+       CFDictionaryRef                 entity;
+       CFStringRef                     path;
+       SCNetworkServicePrivateRef      servicePrivate  = (SCNetworkServicePrivateRef)service;
+
+       if (servicePrivate->prefs == NULL) {
+               // if no prefs
+               return FALSE;
+       }
+
+       path = SCPreferencesPathKeyCreateNetworkServiceEntity(NULL,                             // allocator
+                                                             servicePrivate->serviceID,        // service
+                                                             kSCEntNetInterface);               // entity
+       entity = SCPreferencesPathGetValue(servicePrivate->prefs, path);
+       CFRelease(path);
+
+       if (!isA_CFDictionary(entity)) {
+               // a "service" must have an "interface"
+               return FALSE;
+       }
+
+       return TRUE;
+}
+
+
 SCNetworkServicePrimaryRank
 SCNetworkServiceGetPrimaryRank(SCNetworkServiceRef service)
 {
@@ -1624,6 +1710,13 @@ SCNetworkServiceSetPrimaryRank(SCNetworkServiceRef               service,
                return FALSE;
        }
 
+       if ((servicePrivate->prefs != NULL) && !__SCNetworkServiceExists(service)) {
+               SC_log(LOG_ERR, "SCNetworkServiceSetPrimaryRank() w/removed\n  service = %@", service);
+               _SC_crash_once("SCNetworkServiceSetPrimaryRank() w/removed service", NULL, NULL);
+               _SCErrorSet(kSCStatusInvalidArgument);
+               return FALSE;
+       }
+
        ok = __rank_to_str(newRank, &rankStr);
        if (!ok) {
                _SCErrorSet(kSCStatusInvalidArgument);
@@ -1761,11 +1854,20 @@ SCNetworkServiceSetExternalID(SCNetworkServiceRef service, CFStringRef identifie
 {
        CFStringRef                     prefs_path;
        CFDictionaryRef                 service_dictionary;
-       SCNetworkServicePrivateRef      service_private         = (SCNetworkServicePrivateRef)service;
+       SCNetworkServicePrivateRef      servicePrivate          = (SCNetworkServicePrivateRef)service;
        Boolean                         success                 = FALSE;
        CFStringRef                     prefixed_domain;
 
-       if (!isA_SCNetworkService(service) || (service_private->prefs == NULL) || !isA_CFString(identifierDomain)) {
+       if (!isA_SCNetworkService(service) || (servicePrivate->prefs == NULL) || !isA_CFString(identifierDomain)) {
+               _SCErrorSet(kSCStatusInvalidArgument);
+               return FALSE;
+       }
+
+       if (!__SCNetworkServiceExists(service)) {
+               SC_log(LOG_ERR, "SCNetworkServiceSetExternalID() w/removed\n  service = %@\n  id = %@",
+                      service,
+                      identifier);
+               _SC_crash_once("SCNetworkServiceSetExternalID() w/removed service", NULL, NULL);
                _SCErrorSet(kSCStatusInvalidArgument);
                return FALSE;
        }
@@ -1778,10 +1880,10 @@ SCNetworkServiceSetExternalID(SCNetworkServiceRef service, CFStringRef identifie
        prefixed_domain = CFStringCreateWithFormat(NULL, 0, CFSTR("%s%@"), EXTERNAL_ID_DOMAIN_PREFIX, identifierDomain);
 
        prefs_path = SCPreferencesPathKeyCreateNetworkServiceEntity(NULL,
-                                                                   service_private->serviceID,
+                                                                   servicePrivate->serviceID,
                                                                    NULL);
 
-       service_dictionary = SCPreferencesPathGetValue(service_private->prefs, prefs_path);
+       service_dictionary = SCPreferencesPathGetValue(servicePrivate->prefs, prefs_path);
        if (isA_CFDictionary(service_dictionary) || ((service_dictionary == NULL) && (identifier != NULL))) {
                CFMutableDictionaryRef  new_service_dictionary;
 
@@ -1799,22 +1901,22 @@ SCNetworkServiceSetExternalID(SCNetworkServiceRef service, CFStringRef identifie
                } else {
                        CFDictionaryRemoveValue(new_service_dictionary, prefixed_domain);
                }
-               success = SCPreferencesPathSetValue(service_private->prefs, prefs_path, new_service_dictionary);
+               success = SCPreferencesPathSetValue(servicePrivate->prefs, prefs_path, new_service_dictionary);
                CFRelease(new_service_dictionary);
        }
        CFRelease(prefs_path);
 
        if (identifier != NULL) {
-           if (service_private->externalIDs == NULL) {
-                       service_private->externalIDs = CFDictionaryCreateMutable(NULL,
+           if (servicePrivate->externalIDs == NULL) {
+                       servicePrivate->externalIDs = CFDictionaryCreateMutable(NULL,
                                                                                 0,
                                                                                 &kCFTypeDictionaryKeyCallBacks,
                                                                                 &kCFTypeDictionaryValueCallBacks);
            }
-           CFDictionarySetValue(service_private->externalIDs, prefixed_domain, identifier);
+           CFDictionarySetValue(servicePrivate->externalIDs, prefixed_domain, identifier);
        } else {
-           if (service_private->externalIDs != NULL) {
-                       CFDictionaryRemoveValue(service_private->externalIDs, prefixed_domain);
+           if (servicePrivate->externalIDs != NULL) {
+                       CFDictionaryRemoveValue(servicePrivate->externalIDs, prefixed_domain);
            }
        }
 
@@ -1990,6 +2092,15 @@ _SCNetworkServiceSetServiceID(SCNetworkServiceRef service, CFStringRef newServic
                return TRUE;
        }
 
+       if (!__SCNetworkServiceExists(service)) {
+               SC_log(LOG_ERR, "_SCNetworkServiceSetServiceID() w/removed service\n  service = %@\n  serviceID = %@",
+                      service,
+                      newServiceID);
+               _SC_crash_once("_SCNetworkServiceSetServiceID() w/removed service", NULL, NULL);
+               _SCErrorSet(kSCStatusInvalidArgument);
+               return FALSE;
+       }
+
        newPath = SCPreferencesPathKeyCreateNetworkServiceEntity(NULL,                          // allocator
                                                                 newServiceID,                  // service
                                                                 NULL);                         // entity
index 0ace9a3dc8f0224d6acbee38ea5d42170cd448b9..bfcf499e614a4e9e2c0592070ac49ff67927aa66 100644 (file)
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2004-2017 Apple Inc. All rights reserved.
+ * Copyright (c) 2004-2019 Apple Inc. All rights reserved.
  *
  * @APPLE_LICENSE_HEADER_START@
  *
@@ -66,15 +66,19 @@ __SCNetworkSetCopyDescription(CFTypeRef cf)
 {
        CFAllocatorRef          allocator       = CFGetAllocator(cf);
        CFMutableStringRef      result;
-       SCNetworkSetPrivateRef  setPrivate      = (SCNetworkSetPrivateRef)cf;
+       SCNetworkSetRef         set             = (SCNetworkSetRef)cf;
+       SCNetworkSetPrivateRef  setPrivate      = (SCNetworkSetPrivateRef)set;
 
        result = CFStringCreateMutable(allocator, 0);
-       CFStringAppendFormat(result, NULL, CFSTR("<SCNetworkSet %p [%p]> {"), cf, allocator);
+       CFStringAppendFormat(result, NULL, CFSTR("<SCNetworkSet %p [%p]> {"), set, allocator);
        CFStringAppendFormat(result, NULL, CFSTR("id = %@"), setPrivate->setID);
        CFStringAppendFormat(result, NULL, CFSTR(", prefs = %p"), setPrivate->prefs);
        if (setPrivate->name != NULL) {
                CFStringAppendFormat(result, NULL, CFSTR(", name = %@"), setPrivate->name);
        }
+       if (!__SCNetworkSetExists(set)) {
+               CFStringAppendFormat(result, NULL, CFSTR(", REMOVED"));
+       }
        CFStringAppendFormat(result, NULL, CFSTR("}"));
 
        return result;
@@ -179,15 +183,42 @@ _serviceOrder(SCNetworkServiceRef service)
 }
 
 
+static CFIndex
+_serviceOrder_clear(CFMutableArrayRef order, CFStringRef serviceID)
+{
+       CFIndex f;      // # of serviceID's found
+       CFIndex i;
+       CFIndex n;
+
+       f = 0;
+       i = 0;
+       n = CFArrayGetCount(order);
+       while (i < n) {
+               CFStringRef     thisServiceID   = CFArrayGetValueAtIndex(order, i);
+
+               if (CFEqual(thisServiceID, serviceID)) {
+                       // remove the serviceID
+                       CFArrayRemoveValueAtIndex(order, i);
+                       n--;
+                       f++;
+                       continue;
+               }
+
+               i++;    // move to the next serviceID
+       }
+
+       return f;
+}
+
+
 static void
 _serviceOrder_add(SCNetworkSetRef set, SCNetworkServiceRef service)
 {
-       CFIndex                 i;
        CFIndex                 n;
        CFMutableArrayRef       newOrder;
        CFArrayRef              order;
-       CFStringRef             serviceID;
-       CFIndex                 serviceOrder;
+       CFStringRef             serviceID       = SCNetworkServiceGetServiceID(service);
+       CFIndex                 serviceOrder    = _serviceOrder(service);
        SCNetworkSetPrivateRef  setPrivate      = (SCNetworkSetPrivateRef)set;
        CFIndex                 slot;
 
@@ -198,18 +229,18 @@ _serviceOrder_add(SCNetworkSetRef set, SCNetworkServiceRef service)
                newOrder = CFArrayCreateMutable(NULL, 0, &kCFTypeArrayCallBacks);
        }
        assert(newOrder != NULL);
-       n = CFArrayGetCount(newOrder);
 
-       serviceID = SCNetworkServiceGetServiceID(service);
-       if (CFArrayContainsValue(newOrder, CFRangeMake(0, n), serviceID)) {
-               // if serviceID already present
-               goto done;
+       n = _serviceOrder_clear(newOrder, serviceID);
+       if (n > 0) {
+               SC_log(LOG_ERR, "SCNetworkSetAddService() w/service already in ServiceOrder\n  service = %@\n  matched = %ld",
+                      service,
+                      n);
+               _SC_crash_once("SCNetworkSetAddService() w/service already in ServiceOrder", NULL, NULL);
        }
 
-       serviceOrder = _serviceOrder(service);
-
        slot = 0;
-       for (i = 0; i < n; i++) {
+       n = CFArrayGetCount(newOrder);
+       for (CFIndex i = 0; i < n; i++) {
                int                     slotOrder;
                SCNetworkServiceRef     slotService;
                CFStringRef             slotServiceID;
@@ -237,9 +268,6 @@ _serviceOrder_add(SCNetworkSetRef set, SCNetworkServiceRef service)
 
        CFArrayInsertValueAtIndex(newOrder, slot, serviceID);
        (void) SCNetworkSetSetServiceOrder(set, newOrder);
-
-    done :
-
        CFRelease(newOrder);
 
        return;
@@ -249,6 +277,7 @@ _serviceOrder_add(SCNetworkSetRef set, SCNetworkServiceRef service)
 static void
 _serviceOrder_remove(SCNetworkSetRef set, SCNetworkServiceRef service)
 {
+       CFIndex                 n;
        CFMutableArrayRef       newOrder;
        CFArrayRef              order;
        CFStringRef             serviceID;
@@ -257,22 +286,17 @@ _serviceOrder_remove(SCNetworkSetRef set, SCNetworkServiceRef service)
        if (order == NULL) {
                return;
        }
-
-       serviceID = SCNetworkServiceGetServiceID(service);
-
        newOrder = CFArrayCreateMutableCopy(NULL, 0, order);
-       while (TRUE) {
-               CFIndex i;
 
-               i = CFArrayGetFirstIndexOfValue(newOrder,
-                                               CFRangeMake(0, CFArrayGetCount(newOrder)),
-                                               serviceID);
-               if (i == kCFNotFound) {
-                       break;
-               }
+       serviceID = SCNetworkServiceGetServiceID(service);
 
-               CFArrayRemoveValueAtIndex(newOrder, i);
+       n = _serviceOrder_clear(newOrder, serviceID);
+       if (n > 1) {
+               SC_log(LOG_ERR, "SCNetworkSetRemoveService() w/multiple instances of service in ServiceOrder\n  service = %@\n  count = %ld",
+                      service,
+                      n);
        }
+
        (void) SCNetworkSetSetServiceOrder(set, newOrder);
        CFRelease(newOrder);
 
@@ -284,11 +308,61 @@ _serviceOrder_remove(SCNetworkSetRef set, SCNetworkServiceRef service)
 #pragma mark SCNetworkSet APIs
 
 
+#define DEFAULT_SET_NAME       CFSTR("Automatic")
 #define        N_QUICK 16
 
 
-#define PREVENT_DUPLICATE_SERVICE_NAMES
-#ifdef  PREVENT_DUPLICATE_SERVICE_NAMES
+static CFStringRef
+copy_default_set_name(Boolean loc)
+{
+       CFStringRef             name;
+       static CFStringRef      non_localized   = NULL;
+       static CFStringRef      localized       = NULL;
+
+       if (!loc) {
+               static dispatch_once_t  once;
+
+               dispatch_once(&once, ^{
+                       CFBundleRef     bundle;
+
+                       bundle = _SC_CFBundleGet();
+                       if (bundle != NULL) {
+                               non_localized = _SC_CFBundleCopyNonLocalizedString(bundle,
+                                                                                  CFSTR("DEFAULT_SET_NAME"),
+                                                                                  DEFAULT_SET_NAME,
+                                                                                  NULL);
+                       }
+               });
+               name = non_localized;
+       } else {
+               static dispatch_once_t  once;
+
+               dispatch_once(&once, ^{
+                       CFBundleRef     bundle;
+
+                       bundle = _SC_CFBundleGet();
+                       if (bundle != NULL) {
+                               localized = CFBundleCopyLocalizedString(bundle,
+                                                                       CFSTR("DEFAULT_SET_NAME"),
+                                                                       DEFAULT_SET_NAME,
+                                                                       NULL);
+                       }
+               });
+               name = localized;
+       }
+
+       if (name == NULL) {
+               // if bundle or localized names not available
+               name = DEFAULT_SET_NAME;
+       }
+
+       CFRetain(name);
+       return name;
+}
+
+
+#define        PREVENT_DUPLICATE_SERVICE_NAMES
+#ifdef PREVENT_DUPLICATE_SERVICE_NAMES
 static CFStringRef
 copy_next_name(CFStringRef name)
 {
@@ -408,6 +482,23 @@ SCNetworkSetAddService(SCNetworkSetRef set, SCNetworkServiceRef service)
                return FALSE;
        }
 
+       if (!__SCNetworkSetExists(set)) {
+               SC_log(LOG_ERR, "SCNetworkSetAddService() w/removed set\n  set = %@\n  service = %@",
+                      set,
+                      service);
+               _SC_crash_once("SCNetworkSetAddService() w/removed set", NULL, NULL);
+               _SCErrorSet(kSCStatusInvalidArgument);
+       }
+
+       if (!__SCNetworkServiceExists(service)) {
+               SC_log(LOG_ERR, "SCNetworkSetAddService() w/removed service\n  set = %@\n  service =  %@",
+                      set,
+                      service);
+               _SC_crash_once("SCNetworkSetAddService() w/removed service", NULL, NULL);
+               _SCErrorSet(kSCStatusInvalidArgument);
+               return FALSE;
+       }
+
        // make sure that we do not add an orphaned network service if its
        // associated interface is a member of a bond or bridge.
        interface = SCNetworkServiceGetInterface(service);
@@ -873,7 +964,7 @@ SCNetworkSetCreate(SCPreferencesRef prefs)
 SCNetworkSetRef
 _SCNetworkSetCreateDefault(SCPreferencesRef prefs)
 {
-       CFBundleRef     bundle;
+       CFStringRef     model;
        Boolean         ok              = TRUE;
        SCNetworkSetRef set;
        CFStringRef     setName         = NULL;
@@ -894,15 +985,9 @@ _SCNetworkSetCreateDefault(SCPreferencesRef prefs)
                goto done;
        }
 
-       bundle = _SC_CFBundleGet();
-       if (bundle != NULL) {
-               setName = CFBundleCopyLocalizedString(bundle,
-                                                     CFSTR("DEFAULT_SET_NAME"),
-                                                     CFSTR("Automatic"),
-                                                     NULL);
-       }
-
-       ok = SCNetworkSetSetName(set, (setName != NULL) ? setName : CFSTR("Automatic"));
+       setName = copy_default_set_name(TRUE);
+       ok = SCNetworkSetSetName(set, setName);
+       CFRelease(setName);
        if (!ok) {
                // if we could not save the new set's "name"
                SC_log(LOG_NOTICE, "could not save the new set's name: %s",
@@ -918,6 +1003,12 @@ _SCNetworkSetCreateDefault(SCPreferencesRef prefs)
 //             goto done;
        }
 
+       model = SCPreferencesGetValue(prefs, MODEL);
+       if (model == NULL) {
+               model = _SC_hw_model(FALSE);
+               SCPreferencesSetValue(prefs, MODEL, model);
+       }
+
     done :
 
        if (!ok && (set != NULL)) {
@@ -925,7 +1016,6 @@ _SCNetworkSetCreateDefault(SCPreferencesRef prefs)
                CFRelease(set);
                set = NULL;
        }
-       if (setName != NULL) CFRelease(setName);
        return set;
 }
 
@@ -947,7 +1037,6 @@ SCNetworkSetGetSetID(SCNetworkSetRef set)
 CFStringRef
 SCNetworkSetGetName(SCNetworkSetRef set)
 {
-       CFBundleRef             bundle;
        CFDictionaryRef         entity;
        CFStringRef             path;
        SCNetworkSetPrivateRef  setPrivate      = (SCNetworkSetPrivateRef)set;
@@ -974,33 +1063,20 @@ SCNetworkSetGetName(SCNetworkSetRef set)
                }
        }
 
-       bundle = _SC_CFBundleGet();
-       if (bundle != NULL) {
-               if (setPrivate->name != NULL) {
-                       CFStringRef     non_localized;
-
-                       non_localized = _SC_CFBundleCopyNonLocalizedString(bundle,
-                                                                          CFSTR("DEFAULT_SET_NAME"),
-                                                                          CFSTR("Automatic"),
-                                                                          NULL);
-                       if (non_localized != NULL) {
-                               if (CFEqual(setPrivate->name, non_localized)) {
-                                       CFStringRef     localized;
-
-                                       // if "Automatic", return localized name
-                                       localized = CFBundleCopyLocalizedString(bundle,
-                                                                               CFSTR("DEFAULT_SET_NAME"),
-                                                                               CFSTR("Automatic"),
-                                                                               NULL);
-                                       if (localized != NULL) {
-                                               CFRelease(setPrivate->name);
-                                               setPrivate->name = localized;
-                                       }
-                               }
+       if (setPrivate->name != NULL) {
+               CFStringRef     non_localized;
 
-                               CFRelease(non_localized);
-                       }
+               non_localized = copy_default_set_name(FALSE);
+               if (CFEqual(setPrivate->name, non_localized)) {
+                       CFStringRef     localized;
+
+                       // if "Automatic", return localized name
+                       localized = copy_default_set_name(TRUE);
+                       CFRelease(setPrivate->name);
+                       setPrivate->name = localized;
                }
+
+               CFRelease(non_localized);
        }
 
        return setPrivate->name;
@@ -1046,6 +1122,24 @@ SCNetworkSetGetTypeID(void)
 }
 
 
+#if    TARGET_OS_IPHONE
+static Boolean
+isDefaultSet(SCNetworkSetRef set)
+{
+       CFStringRef     defaultName;
+       Boolean         isDefault       = FALSE;
+       CFStringRef     setName;
+
+       defaultName = copy_default_set_name(TRUE);
+       setName = SCNetworkSetGetName(set);
+       isDefault = _SC_CFEqual(setName, defaultName);
+       CFRelease(defaultName);
+
+       return isDefault;
+}
+#endif // TARGET_OS_IPHONE
+
+
 Boolean
 SCNetworkSetRemove(SCNetworkSetRef set)
 {
@@ -1059,6 +1153,21 @@ SCNetworkSetRemove(SCNetworkSetRef set)
                return FALSE;
        }
 
+       if (!__SCNetworkSetExists(set)) {
+               SC_log(LOG_ERR, "SCNetworkSetRemove() w/removed set\n  set = %@", set);
+               _SC_crash_once("SCNetworkSetRemove() w/removed set", NULL, NULL);
+               _SCErrorSet(kSCStatusInvalidArgument);
+       }
+
+#if    TARGET_OS_IPHONE
+       if (isDefaultSet(set) && (geteuid() != 0)) {
+               SC_log(LOG_ERR, "SCNetworkSetRemove() failed, cannot remove set : %@", set);
+               _SC_crash("The \"Automatic\" network set cannot be removed", NULL, NULL);
+               _SCErrorSet(kSCStatusInvalidArgument);
+               return FALSE;
+       }
+#endif // TARGET_OS_IPHONE
+
        currentPath = SCPreferencesGetValue(setPrivate->prefs, kSCPrefCurrentSet);
        path = SCPreferencesPathKeyCreateSet(NULL, setPrivate->setID);
        if (!isA_CFString(currentPath) || !CFEqual(currentPath, path)) {
@@ -1098,6 +1207,23 @@ SCNetworkSetRemoveService(SCNetworkSetRef set, SCNetworkServiceRef service)
                return FALSE;
        }
 
+       if (!__SCNetworkSetExists(set)) {
+               SC_log(LOG_ERR, "SCNetworkSetRemoveService() w/removed set\n  set = %@\n  service = %@",
+                      set,
+                      service);
+               _SC_crash_once("SCNetworkSetRemoveService() w/removed set", NULL, NULL);
+               _SCErrorSet(kSCStatusInvalidArgument);
+       }
+
+       if (!__SCNetworkServiceExists(service)) {
+               SC_log(LOG_ERR, "SCNetworkSetRemoveService() w/removed service\n  set = %@\n  service = %@",
+                      set,
+                      service);
+               _SC_crash_once("SCNetworkSetRemoveService() w/removed service", NULL, NULL);
+               _SCErrorSet(kSCStatusInvalidArgument);
+               return FALSE;
+       }
+
        // remove service from ServiceOrder
        _serviceOrder_remove(set, service);
 
@@ -1150,6 +1276,13 @@ SCNetworkSetSetCurrent(SCNetworkSetRef set)
                return FALSE;
        }
 
+       if (!__SCNetworkSetExists(set)) {
+               SC_log(LOG_ERR, "SCNetworkSetSetCurrent() w/removed set\n  set = %@", set);
+               _SC_crash_once("SCNetworkSetSetCurrent() w/removed set", NULL, NULL);
+               _SCErrorSet(kSCStatusInvalidArgument);
+               return FALSE;
+       }
+
        path = SCPreferencesPathKeyCreateSet(NULL, setPrivate->setID);
        ok = SCPreferencesSetValue(setPrivate->prefs, kSCPrefCurrentSet, path);
        CFRelease(path);
@@ -1165,8 +1298,10 @@ SCNetworkSetSetCurrent(SCNetworkSetRef set)
 Boolean
 SCNetworkSetSetName(SCNetworkSetRef set, CFStringRef name)
 {
-       CFBundleRef             bundle          = NULL;
        CFDictionaryRef         entity;
+#if    TARGET_OS_IPHONE
+       Boolean                 isDefaultName   = FALSE;
+#endif // TARGET_OS_IPHONE
        CFStringRef             localized       = NULL;
        CFStringRef             non_localized   = NULL;
        Boolean                 ok              = FALSE;
@@ -1178,6 +1313,15 @@ SCNetworkSetSetName(SCNetworkSetRef set, CFStringRef name)
                return FALSE;
        }
 
+       if (!__SCNetworkSetExists(set)) {
+               SC_log(LOG_ERR, "SCNetworkSetSetName() w/removed set\n  set = %@\n  name = %@",
+                      set,
+                      name != NULL ? name : CFSTR("<NULL>"));
+               _SC_crash_once("SCNetworkSetSetName() w/removed set", NULL, NULL);
+               _SCErrorSet(kSCStatusInvalidArgument);
+               return FALSE;
+       }
+
        if ((name != NULL) && !isA_CFString(name)) {
                _SCErrorSet(kSCStatusInvalidArgument);
                return FALSE;
@@ -1186,28 +1330,42 @@ SCNetworkSetSetName(SCNetworkSetRef set, CFStringRef name)
        // if known, compare against localized name
 
        if (name != NULL) {
-               bundle = _SC_CFBundleGet();
-               if (bundle != NULL) {
-                       non_localized = _SC_CFBundleCopyNonLocalizedString(bundle,
-                                                                          CFSTR("DEFAULT_SET_NAME"),
-                                                                          CFSTR("Automatic"),
-                                                                          NULL);
-                       if (non_localized != NULL) {
-                               if (CFEqual(name, non_localized)) {
-                                       localized = CFBundleCopyLocalizedString(bundle,
-                                                                               CFSTR("DEFAULT_SET_NAME"),
-                                                                               CFSTR("Automatic"),
-                                                                               NULL);
-                                       if (localized != NULL) {
-                                               name = localized;
-                                       }
-                               }
-                       }
+               non_localized = copy_default_set_name(FALSE);
+               if (CFEqual(name, non_localized)) {
+                       localized = copy_default_set_name(TRUE);
+                       name = localized;
+#if    TARGET_OS_IPHONE
+                       isDefaultName = TRUE;
+#endif // TARGET_OS_IPHONE
+               }
+#if    TARGET_OS_IPHONE
+               else {
+                       localized = copy_default_set_name(TRUE);
+                       isDefaultName = CFEqual(name, non_localized);
                }
+#endif // TARGET_OS_IPHONE
        }
 
-#define PREVENT_DUPLICATE_SET_NAMES
-#ifdef  PREVENT_DUPLICATE_SET_NAMES
+#if    TARGET_OS_IPHONE
+       if (!isDefaultName && isDefaultSet(set) && (geteuid() != 0)) {
+               // if we are trying to change the name of the "Automatic" set
+               SC_log(LOG_ERR, "SCNetworkSetSetName() failed, cannot rename : %@", set);
+               _SC_crash("The \"Automatic\" network set cannot be renamed", NULL, NULL);
+               _SCErrorSet(kSCStatusInvalidArgument);
+               goto done;
+       }
+#endif // TARGET_OS_IPHONE
+
+#define        PREVENT_DUPLICATE_SET_NAMES
+#ifdef PREVENT_DUPLICATE_SET_NAMES
+
+#if    TARGET_OS_IPHONE
+       if (!isDefaultName) {
+               // On iOS, only block naming multiple sets with the name
+               // "Automatic".  Others names are OK.
+       } else
+#endif // TARGET_OS_IPHONE
+
        if (name != NULL) {
                CFArrayRef      sets;
 
@@ -1244,18 +1402,12 @@ SCNetworkSetSetName(SCNetworkSetRef set, CFStringRef name)
 
        // if known, store non-localized name
 
-       if ((name != NULL) && (bundle != NULL) && (non_localized != NULL)) {
+       if ((name != NULL) && (non_localized != NULL)) {
                if (localized == NULL) {
-                       localized = CFBundleCopyLocalizedString(bundle,
-                                                               CFSTR("DEFAULT_SET_NAME"),
-                                                               CFSTR("Automatic"),
-                                                               NULL);
+                       localized = copy_default_set_name(TRUE);
                }
-
-               if (localized != NULL) {
-                       if (CFEqual(name, localized)) {
-                               name = non_localized;
-                       }
+               if (CFEqual(name, localized)) {
+                       name = non_localized;
                }
        }
 
@@ -1300,7 +1452,10 @@ SCNetworkSetSetName(SCNetworkSetRef set, CFStringRef name)
 Boolean
 SCNetworkSetSetServiceOrder(SCNetworkSetRef set, CFArrayRef newOrder)
 {
+       CFMutableArrayRef       cleanOrder;
        CFDictionaryRef         dict;
+       CFIndex                 i;
+       CFIndex                 n;
        CFMutableDictionaryRef  newDict;
        Boolean                 ok;
        CFStringRef             path;
@@ -1311,10 +1466,15 @@ SCNetworkSetSetServiceOrder(SCNetworkSetRef set, CFArrayRef newOrder)
                return FALSE;
        }
 
-       if (isA_CFArray(newOrder)) {
-               CFIndex i;
-               CFIndex n       = CFArrayGetCount(newOrder);
+       if (!__SCNetworkSetExists(set)) {
+               SC_log(LOG_ERR, "SCNetworkSetSetServiceOrder() w/removed set\n  set = %@", set);
+               _SC_crash_once("SCNetworkSetSetServiceOrder() w/removed set", NULL, NULL);
+               _SCErrorSet(kSCStatusInvalidArgument);
+               return FALSE;
+       }
 
+       if (isA_CFArray(newOrder)) {
+               n = CFArrayGetCount(newOrder);
                for (i = 0; i < n; i++) {
                        CFStringRef     serviceID;
 
@@ -1344,7 +1504,24 @@ SCNetworkSetSetServiceOrder(SCNetworkSetRef set, CFArrayRef newOrder)
                                                    &kCFTypeDictionaryValueCallBacks);
        }
 
-       CFDictionarySetValue(newDict, kSCPropNetServiceOrder, newOrder);
+       cleanOrder = CFArrayCreateMutable(NULL, 0, &kCFTypeArrayCallBacks);
+       n = CFArrayGetCount(newOrder);
+       for (i = 0; i < n; i++) {
+               CFIndex         nClean          = CFArrayGetCount(cleanOrder);
+               CFStringRef     serviceID       = CFArrayGetValueAtIndex(newOrder, i);
+
+               if ((nClean == 0) ||
+                   !CFArrayContainsValue(cleanOrder, CFRangeMake(0, nClean), serviceID)) {
+                       // if first reference to this serviceID
+                       CFArrayAppendValue(cleanOrder, serviceID);
+               } else {
+                       // skip duplicate serviceID
+                       SC_log(LOG_ERR, "SCNetworkSetSetServiceOrder() found duplicate serviceID: removed %@\n", serviceID);
+               }
+       }
+       CFDictionarySetValue(newDict, kSCPropNetServiceOrder, cleanOrder);
+       CFRelease(cleanOrder);
+
        ok = SCPreferencesPathSetValue(setPrivate->prefs, path, newDict);
        CFRelease(newDict);
        CFRelease(path);
@@ -1357,6 +1534,31 @@ SCNetworkSetSetServiceOrder(SCNetworkSetRef set, CFArrayRef newOrder)
 #pragma mark SCNetworkSet SPIs
 
 
+__private_extern__
+Boolean
+__SCNetworkSetExists(SCNetworkSetRef set)
+{
+       CFDictionaryRef                 entity;
+       CFStringRef                     path;
+       SCNetworkSetPrivateRef          setPrivate      = (SCNetworkSetPrivateRef)set;
+
+       if (setPrivate->prefs == NULL) {
+               return FALSE;
+       }
+
+       path = SCPreferencesPathKeyCreateSet(NULL, setPrivate->setID);
+       entity = SCPreferencesPathGetValue(setPrivate->prefs, path);
+       CFRelease(path);
+
+       if (!isA_CFDictionary(entity)) {
+               // if no "set"
+               return FALSE;
+       }
+
+       return TRUE;
+}
+
+
 static void
 add_supported_interfaces(CFMutableArrayRef interface_list, SCNetworkInterfaceRef interface)
 {
@@ -1492,7 +1694,7 @@ copyServices(SCNetworkSetRef set)
 
 
 #if    !TARGET_OS_IPHONE
-static CFArrayRef
+static CF_RETURNS_RETAINED CFArrayRef
 updateServices(CFArrayRef services, SCNetworkInterfaceRef interface)
 {
        CFStringRef             bsdName;
@@ -1591,7 +1793,7 @@ _SCNetworkSetCompare(const void *val1, const void *val2, void *context)
 static Boolean
 __SCNetworkSetEstablishDefaultConfigurationForInterfaces(SCNetworkSetRef set, CFArrayRef interfaces, Boolean excludeHidden)
 {
-       CFSetRef                excluded        = NULL;
+       CFSetRef                excluded;
        CFIndex                 i;
        CFIndex                 n               = 0;
        Boolean                 ok              = TRUE;
@@ -1635,7 +1837,7 @@ __SCNetworkSetEstablishDefaultConfigurationForInterfaces(SCNetworkSetRef set, CF
 #if    !TARGET_OS_IPHONE
        // look for interfaces that should auto-magically be added
        // to an Ethernet bridge
-       n = (interfaces != NULL) ? CFArrayGetCount(interfaces) : 0;
+       n = ((services != NULL) && (interfaces != NULL)) ? CFArrayGetCount(interfaces) : 0;
        for (i = 0; i < n; i++) {
                SCBridgeInterfaceRef    bridge          = NULL;
                SCNetworkInterfaceRef   interface;
@@ -1647,8 +1849,7 @@ __SCNetworkSetEstablishDefaultConfigurationForInterfaces(SCNetworkSetRef set, CF
                        continue;
                }
 
-               if ((excluded != NULL)
-                   && CFSetContainsValue(excluded, interface)) {
+               if (CFSetContainsValue(excluded, interface)) {
                        // if this interface is a member of a Bond or Bridge
                        continue;
                }
@@ -1728,7 +1929,7 @@ __SCNetworkSetEstablishDefaultConfigurationForInterfaces(SCNetworkSetRef set, CF
        }
 #endif // !TARGET_OS_IPHONE
 
-       n = (interfaces != NULL) ? CFArrayGetCount(interfaces) : 0;
+       n = ((services != NULL) && (interfaces != NULL)) ? CFArrayGetCount(interfaces) : 0;
        for (i = 0; i < n; i++) {
                SCNetworkInterfaceRef   interface;
                CFMutableArrayRef       interface_list;
@@ -1740,8 +1941,7 @@ __SCNetworkSetEstablishDefaultConfigurationForInterfaces(SCNetworkSetRef set, CF
                        continue;
                }
 
-               if ((excluded != NULL)
-                   && CFSetContainsValue(excluded, interface)) {
+               if (CFSetContainsValue(excluded, interface)) {
                        // if this interface is a member of a Bond or Bridge
                        continue;
                }
@@ -1805,10 +2005,12 @@ __SCNetworkSetEstablishDefaultConfigurationForInterfaces(SCNetworkSetRef set, CF
                CFRelease(interface_list);
        }
 #if    !TARGET_OS_IPHONE
-       if (updatedIFs)         CFRelease(interfaces);
+       if (updatedIFs && (interfaces != NULL)) {
+               CFRelease(interfaces);
+       }
 #endif // !TARGET_OS_IPHONE
        if (services != NULL)   CFRelease(services);
-       if (excluded != NULL)   CFRelease(excluded);
+       CFRelease(excluded);
 
 #if    TARGET_OS_IPHONE
        if (orphans != NULL) {
@@ -1833,9 +2035,19 @@ __SCNetworkSetEstablishDefaultConfigurationForInterfaces(SCNetworkSetRef set, CF
        }
 #endif // TARGET_OS_IPHONE
 
-       if (ok && !updated) {
-               // if no changes were made
-               _SCErrorSet(kSCStatusOK);
+       if (ok) {
+               if (updated) {
+                       CFStringRef     model;
+
+                       model = SCPreferencesGetValue(setPrivate->prefs, MODEL);
+                       if (model == NULL) {
+                               model = _SC_hw_model(FALSE);
+                               SCPreferencesSetValue(setPrivate->prefs, MODEL, model);
+                       }
+               } else {
+                       // if no changes were made
+                       _SCErrorSet(kSCStatusOK);
+               }
        }
 
        return updated;
@@ -2058,6 +2270,15 @@ _SCNetworkSetSetSetID(SCNetworkSetRef set, CFStringRef newSetID)
                return FALSE;
        }
 
+       if (!__SCNetworkSetExists(set)) {
+               SC_log(LOG_ERR, "_SCNetworkSetSetSetID() w/removed set\n  set = %@\n  setID = %@",
+                      set,
+                      newSetID);
+               _SC_crash_once("_SCNetworkSetSetSetID() w/removed set", NULL, NULL);
+               _SCErrorSet(kSCStatusInvalidArgument);
+               return FALSE;
+       }
+
        // If newSetID is equal to current setID, our work is done
        if (CFEqual(newSetID, setPrivate->setID)) {
                return TRUE;
index 38b695c9934354633c2cf41fde68c65085a9bcfc..69371985a66577c6c54d007694f9ebce9d543e81 100644 (file)
@@ -1,15 +1,15 @@
 /*
- * Copyright (c) 2006, 2008, 2009, 2011-2015, 2017, 2018 Apple Inc. All rights reserved.
+ * Copyright (c) 2006, 2008, 2009, 2011-2019 Apple Inc. All rights reserved.
  *
  * @APPLE_LICENSE_HEADER_START@
- * 
+ *
  * This file contains Original Code and/or Modifications of Original Code
  * as defined in and that are subject to the Apple Public Source License
  * Version 2.0 (the 'License'). You may not use this file except in
  * compliance with the License. Please obtain a copy of the License at
  * http://www.opensource.apple.com/apsl/ and read it before using this
  * file.
- * 
+ *
  * The Original Code and all software distributed under the License are
  * distributed on an 'AS IS' basis, WITHOUT WARRANTY OF ANY KIND, EITHER
  * EXPRESS OR IMPLIED, AND APPLE HEREBY DISCLAIMS ALL SUCH WARRANTIES,
@@ -17,7 +17,7 @@
  * FITNESS FOR A PARTICULAR PURPOSE, QUIET ENJOYMENT OR NON-INFRINGEMENT.
  * Please see the License for the specific language governing rights and
  * limitations under the License.
- * 
+ *
  * @APPLE_LICENSE_HEADER_END@
  */
 
 #include <sys/types.h>
 #include <sys/socket.h>
 #include <net/if.h>
-#if __has_include(<nw/private.h>)
 #include <nw/private.h>
-#else // __has_include(<nw/private.h>)
-#include <network/conninfo.h>
-#endif // __has_include(<nw/private.h>)
 
 #pragma mark SCNetworkSignature Supporting APIs
 
@@ -162,7 +158,7 @@ SCNetworkSignatureCopyActiveIdentifierForAddress(CFAllocatorRef alloc,
 
        /* ALIGN: force alignment */
        sin_p = (struct sockaddr_in *)(void *)addr;
-       bcopy(&sin_p->sin_addr.s_addr, &s_addr, sizeof(s_addr));
+       memcpy(&s_addr, &sin_p->sin_addr.s_addr, sizeof(s_addr));
        if (s_addr != 0) {
                _SCErrorSet(kSCStatusInvalidArgument);
                goto done;
index 2873294d0745508fedda8d9e0a58804bf78ffc43..2e223eb830a16a70ccecad6d4c44ac00def3bb42 100644 (file)
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2000, 2001, 2003-2005, 2007-2009, 2011, 2014-2017 Apple Inc. All rights reserved.
+ * Copyright (c) 2000, 2001, 2003-2005, 2007-2009, 2011, 2014-2018 Apple Inc. All rights reserved.
  *
  * @APPLE_LICENSE_HEADER_START@
  *
@@ -132,6 +132,24 @@ __SCPreferencesGetLimitSCNetworkConfiguration(SCPreferencesRef prefs)
 }
 
 
+__private_extern__
+off_t
+__SCPreferencesPrefsSize(SCPreferencesRef prefs)
+{
+       SCPreferencesPrivateRef prefsPrivate    = (SCPreferencesPrivateRef)prefs;
+       SCPSignatureDataRef     sig;
+       CFDataRef               signature;
+
+       signature = prefsPrivate->signature;
+       if (signature == NULL) {
+               return 0;
+       }
+
+       sig = (SCPSignatureDataRef)(void *)CFDataGetBytePtr(signature);
+       return sig->st_size;
+}
+
+
 __private_extern__
 Boolean
 __SCPreferencesUsingDefaultPrefs(SCPreferencesRef prefs)
index b311bddbee7e10c06bee2fbbfba8e6a798d4513a..42b9890bb11b6f39ca6f23bed431562d16f6341a 100644 (file)
@@ -202,7 +202,7 @@ SCPreferencesCommitChanges(SCPreferencesRef prefs)
 
                if (stat(prefsPrivate->path, &statBuf) == -1) {
                        if (errno == ENOENT) {
-                               bzero(&statBuf, sizeof(statBuf));
+                               memset(&statBuf, 0, sizeof(statBuf));
                                statBuf.st_mode = 0644;
                                statBuf.st_uid  = geteuid();
                                statBuf.st_gid  = getegid();
@@ -237,12 +237,12 @@ SCPreferencesCommitChanges(SCPreferencesRef prefs)
                        pc = str[0] - 'A' + 1;  // PROTECTION_CLASS_[ABCDEF]
                        fd = open_dprotected_np(thePath, O_WRONLY|O_CREAT, pc, 0, statBuf.st_mode);
                } else {
-               fd = open(thePath, O_WRONLY|O_CREAT, statBuf.st_mode);
+                       fd = open(thePath, O_WRONLY|O_CREAT, statBuf.st_mode);
                }
 
                if (fd == -1) {
                        _SCErrorSet(errno);
-                       SC_log(LOG_INFO, "open() failed: %s", strerror(errno));
+                       SC_log(LOG_NOTICE, "open() failed: %s", strerror(errno));
                        CFAllocatorDeallocate(NULL, thePath);
                        goto done;
                }
@@ -323,7 +323,7 @@ SCPreferencesCommitChanges(SCPreferencesRef prefs)
                unlink(path);
 
                /* init the new signature */
-               bzero(&statBuf, sizeof(statBuf));
+               memset(&statBuf, 0, sizeof(statBuf));
        }
 
        /* update signature */
@@ -332,8 +332,9 @@ SCPreferencesCommitChanges(SCPreferencesRef prefs)
 
     committed :
 
-       SC_log(LOG_INFO, "SCPreferences() commit: %s",
-              prefsPrivate->newPath ? prefsPrivate->newPath : prefsPrivate->path);
+       SC_log(LOG_INFO, "SCPreferences() commit: %s, size=%lld",
+              prefsPrivate->newPath ? prefsPrivate->newPath : prefsPrivate->path,
+              __SCPreferencesPrefsSize(prefs));
 
        /* post notification */
        ok = SCDynamicStoreNotifyValue(NULL, prefsPrivate->sessionKeyCommit);
index cc1fca2736a5b60dcdcf0eba0f37611822878a80..3de6de562e13850dbde7dba53eefc34c71c99986 100644 (file)
@@ -44,6 +44,7 @@
 #include <sys/mount.h>
 #include <sys/param.h>
 
+
 static Boolean
 __SCPreferencesLock_helper(SCPreferencesRef prefs, Boolean wait)
 {
@@ -75,7 +76,7 @@ __SCPreferencesLock_helper(SCPreferencesRef prefs, Boolean wait)
                goto error;
        }
 
-       prefsPrivate->locked = TRUE;
+       __SCPreferencesUpdateLockedState(prefs, TRUE);
        return TRUE;
 
     fail :
@@ -223,10 +224,10 @@ has_O_EXLOCK(SCPreferencesPrivateRef prefsPrivate)
                return FALSE;
        }
 
-       bzero(&attrs, sizeof(attrs));
+       memset(&attrs, 0, sizeof(attrs));
        attrs.bitmapcount = ATTR_BIT_MAP_COUNT;
        attrs.volattr     = ATTR_VOL_INFO | ATTR_VOL_CAPABILITIES;
-       bzero(&attrbuf, sizeof(attrbuf));
+       memset(&attrbuf, 0, sizeof(attrbuf));
        ret = getattrlist(statbuf.f_mntonname,  // path (of mount point)
                          &attrs,               // attribute list
                          &attrbuf,             // attribute buffer
@@ -480,7 +481,7 @@ SCPreferencesLock(SCPreferencesRef prefs, Boolean wait)
                 */
                if (stat(prefsPrivate->path, &statBuf) == -1) {
                        if (errno == ENOENT) {
-                               bzero(&statBuf, sizeof(statBuf));
+                               memset(&statBuf, 0, sizeof(statBuf));
                        } else {
                                SC_log(LOG_INFO, "stat() failed: %s",
                                      strerror(errno));
@@ -515,7 +516,7 @@ SCPreferencesLock(SCPreferencesRef prefs, Boolean wait)
        SC_log(LOG_DEBUG, "SCPreferences() lock: %s",
               prefsPrivate->newPath ? prefsPrivate->newPath : prefsPrivate->path);
 
-       prefsPrivate->locked = TRUE;
+       __SCPreferencesUpdateLockedState(prefs, TRUE);
        pthread_mutex_unlock(&prefsPrivate->lock);
        return TRUE;
 
index d800ce5b92a70b52bf846d6fdb5ffbeb94fb762d..05ef3a3f105b0875b50407591a2ff347fc1b2aa5 100644 (file)
@@ -1,5 +1,5 @@
 /*
- * Copyright(c) 2000-2018 Apple Inc. All rights reserved.
+ * Copyright(c) 2000-2019 Apple Inc. All rights reserved.
  *
  * @APPLE_LICENSE_HEADER_START@
  *
@@ -34,7 +34,6 @@
  * - initial revision
  */
 
-#include <os/availability.h>
 #include <TargetConditionals.h>
 #include <fcntl.h>
 #include <pthread.h>
@@ -107,10 +106,15 @@ __SCPreferencesCopyDescription(CFTypeRef cf) {
 static void
 __SCPreferencesDeallocate(CFTypeRef cf)
 {
-       SCPreferencesPrivateRef prefsPrivate    = (SCPreferencesPrivateRef)cf;
+       SCPreferencesRef        prefs           = (SCPreferencesRef)cf;
+       SCPreferencesPrivateRef prefsPrivate    = (SCPreferencesPrivateRef)prefs;
 
        SC_log(LOG_DEBUG, "release %@", prefsPrivate);
 
+       if (prefsPrivate->locked) {
+               __SCPreferencesUpdateLockedState(prefs, FALSE);
+       }
+
        /* release resources */
 
        pthread_mutex_destroy(&prefsPrivate->lock);
@@ -455,11 +459,11 @@ __SCPreferencesCreate(CFAllocatorRef      allocator,
                                goto done;
                        }
 
-                       SC_log(LOG_INFO, "open() failed: %s", strerror(errno));
+                       SC_log(LOG_NOTICE, "open() failed: %s", strerror(errno));
                        sc_status = kSCStatusAccessError;
                        break;
                default :
-                       SC_log(LOG_INFO, "open() failed: %s", strerror(errno));
+                       SC_log(LOG_NOTICE, "open() failed: %s", strerror(errno));
                        sc_status = kSCStatusFailed;
                        break;
        }
@@ -500,7 +504,7 @@ __SCPreferencesAccess(SCPreferencesRef      prefs)
                // create signature
                if (fstat(fd, &statBuf) == -1) {
                        SC_log(LOG_NOTICE, "fstat() failed: %s", strerror(errno));
-                       bzero(&statBuf, sizeof(statBuf));
+                       memset(&statBuf, 0, sizeof(statBuf));
                }
        } else {
                switch (errno) {
@@ -523,7 +527,7 @@ __SCPreferencesAccess(SCPreferencesRef      prefs)
                                SC_log(LOG_NOTICE, "open() failed: %s", strerror(errno));
                                break;
                }
-               bzero(&statBuf, sizeof(statBuf));
+               memset(&statBuf, 0, sizeof(statBuf));
        }
 
        if (prefsPrivate->signature != NULL) CFRelease(prefsPrivate->signature);
@@ -593,8 +597,9 @@ __SCPreferencesAccess(SCPreferencesRef      prefs)
                prefsPrivate->changed = TRUE;
        }
 
-       SC_log(LOG_DEBUG, "SCPreferences() access: %s",
-              prefsPrivate->newPath ? prefsPrivate->newPath : prefsPrivate->path);
+       SC_log(LOG_DEBUG, "SCPreferences() access: %s, size=%lld",
+              prefsPrivate->newPath ? prefsPrivate->newPath : prefsPrivate->path,
+              __SCPreferencesPrefsSize(prefs));
 
        prefsPrivate->accessed = TRUE;
        return;
@@ -905,6 +910,107 @@ __SCPreferencesRemoveSession(SCPreferencesRef prefs)
 }
 
 
+static void
+appendLockedPreferences(const void *key, const void *value, void *context)
+{
+#pragma unused(key)
+       CFMutableStringRef      str     = (CFMutableStringRef)context;
+
+       CFStringAppendFormat(str, NULL, CFSTR("%s%@"),
+                            (CFStringGetLength(str) > 0) ? "\n" : "",
+                            value);
+       return;
+}
+
+
+__private_extern__ void
+__SCPreferencesUpdateLockedState(SCPreferencesRef prefs, Boolean locked)
+{
+       static dispatch_queue_t         lockedQueue;
+       static CFMutableDictionaryRef   lockedState;
+       static dispatch_once_t          once;
+       SCPreferencesPrivateRef         prefsPrivate    = (SCPreferencesPrivateRef)prefs;
+
+       dispatch_once(&once, ^{
+               os_state_block_t        state_block;
+
+               lockedQueue = dispatch_queue_create("SCPreferences locked state queue", NULL);
+
+               lockedState = CFDictionaryCreateMutable(NULL,
+                                                       0,
+                                                       NULL,   // NO retain/release
+                                                       &kCFTypeDictionaryValueCallBacks);
+
+               state_block = ^os_state_data_t(os_state_hints_t hints) {
+#pragma unused(hints)
+                       CFDataRef               data    = NULL;
+                       Boolean                 ok;
+                       os_state_data_t         state_data;
+                       size_t                  state_data_size;
+                       CFIndex                 state_len;
+                       CFMutableStringRef      str;
+
+                       if (CFDictionaryGetCount(lockedState) == 0) {
+                               // if no locked preferences
+                               return NULL;
+                       }
+
+                       str = CFStringCreateMutable(NULL, 0);
+                       CFDictionaryApplyFunction(lockedState, appendLockedPreferences, str);
+                       ok = _SCSerialize(str, &data, NULL, NULL);
+                       CFRelease(str);
+
+                       state_len = (ok && (data != NULL)) ? CFDataGetLength(data) : 0;
+                       state_data_size = OS_STATE_DATA_SIZE_NEEDED(state_len);
+                       if (state_data_size > MAX_STATEDUMP_SIZE) {
+                               SC_log(LOG_ERR, "locked SCPreferences : state data too large (%zd > %zd)",
+                                      state_data_size,
+                                      (size_t)MAX_STATEDUMP_SIZE);
+                               if (data != NULL) CFRelease(data);
+                               return NULL;
+                       }
+
+                       state_data = calloc(1, state_data_size);
+                       if (state_data == NULL) {
+                               SC_log(LOG_ERR, "locked SCPreferences: could not allocate state data");
+                               if (data != NULL) CFRelease(data);
+                               return NULL;
+                       }
+
+                       state_data->osd_type = OS_STATE_DATA_SERIALIZED_NSCF_OBJECT;
+                       state_data->osd_data_size = (uint32_t)state_len;
+                       strlcpy(state_data->osd_title, "open/locked SCPreferences", sizeof(state_data->osd_title));
+                       if (state_len > 0) {
+                               memcpy(state_data->osd_data, CFDataGetBytePtr(data), state_len);
+                       }
+                       if (data != NULL) CFRelease(data);
+
+                       return state_data;
+               };
+
+               (void) os_state_add_handler(lockedQueue, state_block);
+       });
+
+       // update the locked state
+       prefsPrivate->locked = locked;
+
+       // add (or update) the locked preferences
+       dispatch_sync(lockedQueue, ^{
+               if (locked) {
+                       CFStringRef     str;
+
+                       str = CFCopyDescription(prefs);
+                       CFDictionarySetValue(lockedState, prefs, str);
+                       CFRelease(str);
+               } else {
+                       CFDictionaryRemoveValue(lockedState, prefs);
+               }
+       });
+
+       return;
+}
+
+
 Boolean
 SCPreferencesSetCallback(SCPreferencesRef       prefs,
                         SCPreferencesCallBack  callout,
@@ -931,7 +1037,7 @@ SCPreferencesSetCallback(SCPreferencesRef       prefs,
        prefsPrivate->rlsContext.release                = NULL;
        prefsPrivate->rlsContext.copyDescription        = NULL;
        if (context != NULL) {
-               bcopy(context, &prefsPrivate->rlsContext, sizeof(SCPreferencesContext));
+               memcpy(&prefsPrivate->rlsContext, context, sizeof(SCPreferencesContext));
                if (context->retain != NULL) {
                        prefsPrivate->rlsContext.info = (void *)(*context->retain)(context->info);
                }
index 8af8040c7c8db6a1c53151e2f6581d36778ed527..4c5e525c1a737fc673eadf2a0da908b89928d1f7 100644 (file)
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2000, 2001, 2004-2010, 2013, 2015, 2016 Apple Inc. All rights reserved.
+ * Copyright (c) 2000, 2001, 2004-2010, 2013, 2015, 2016, 2018 Apple Inc. All rights reserved.
  *
  * @APPLE_LICENSE_HEADER_START@
  *
@@ -37,6 +37,7 @@
 #include <unistd.h>
 #include <pthread.h>
 
+
 static Boolean
 __SCPreferencesUnlock_helper(SCPreferencesRef prefs)
 {
@@ -64,7 +65,7 @@ __SCPreferencesUnlock_helper(SCPreferencesRef prefs)
                goto error;
        }
 
-       prefsPrivate->locked = FALSE;
+       __SCPreferencesUpdateLockedState(prefs, FALSE);
        return TRUE;
 
     fail :
@@ -148,7 +149,7 @@ SCPreferencesUnlock(SCPreferencesRef prefs)
        SC_log(LOG_DEBUG, "SCPreferences() unlock: %s",
               prefsPrivate->newPath ? prefsPrivate->newPath : prefsPrivate->path);
 
-       prefsPrivate->locked = FALSE;
+       __SCPreferencesUpdateLockedState(prefs, FALSE);
 
        pthread_mutex_unlock(&prefsPrivate->lock);
        return TRUE;
index 95fb934c29800d70e9b8fe051f811a2dbeec2b03..4201dc4c1733874342af5e0d552511baaab57668 100644 (file)
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2000, 2001, 2003-2005, 2007-2011, 2013-2016 Apple Inc. All rights reserved.
+ * Copyright (c) 2000, 2001, 2003-2005, 2007-2011, 2013-2018 Apple Inc. All rights reserved.
  *
  * @APPLE_LICENSE_HEADER_START@
  *
 #include <sys/stat.h>
 #include <sys/time.h>
 #include <os/log.h>
+#include <os/state_private.h>
 #include <CoreFoundation/CoreFoundation.h>
 #include <CoreFoundation/CFRuntime.h>
 
 #ifndef        SC_LOG_HANDLE
-#define        SC_LOG_HANDLE   __log_SCPreferences()
+#define        SC_LOG_HANDLE   __log_SCPreferences
 #endif // SC_LOG_HANDLE
 #include <SystemConfiguration/SystemConfiguration.h>
 #include <SystemConfiguration/SCValidation.h>
@@ -150,6 +151,10 @@ __SCPreferencesAddSession          (SCPreferencesRef       prefs);
 void
 __SCPreferencesRemoveSession           (SCPreferencesRef       prefs);
 
+void
+__SCPreferencesUpdateLockedState       (SCPreferencesRef       prefs,
+                                        Boolean                locked);
+
 CF_RETURNS_RETAINED
 CFDataRef
 __SCPSignatureFromStatbuf              (const struct stat      *statBuf);
@@ -159,6 +164,9 @@ __SCPreferencesPath                 (CFAllocatorRef         allocator,
                                         CFStringRef            prefsID,
                                         Boolean                useNewPrefs);
 
+off_t
+__SCPreferencesPrefsSize               (SCPreferencesRef       prefs);
+
 CF_RETURNS_RETAINED
 CFStringRef
 _SCPNotificationKey                    (CFAllocatorRef         allocator,
index cb421e790f0cb491d5296f2e93c88fdccaa1a4fd..64d43420fcbe36c05a0ff1173cf72a7bc9109834 100644 (file)
@@ -25,7 +25,7 @@
 #define        _SCPREFERENCESKEYCHAINPRIVATE_H
 
 /*
- * SCPreferencesKeychain.h
+ * SCPreferencesKeychainPrivate.h
  * - routines to deal with keychain passwords
  */
 
 #include <sys/cdefs.h>
 #include <CoreFoundation/CoreFoundation.h>
 #include <SystemConfiguration/SCPreferences.h>
-#if    !TARGET_OS_IPHONE
 #include <Security/Security.h>
-#else  // !TARGET_OS_IPHONE
-typedef struct CF_BRIDGED_TYPE(id) __SecKeychain *SecKeychainRef;
-#endif // !TARGET_OS_IPHONE
 
 #pragma mark -
 #pragma mark Keychain helper APIs
index 2a71f971d0af21bbcdf8eb6c35ad52a7300f39bb..f9bf278522bd5aeebb9103d744a1391121fa2874 100644 (file)
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2000-2018 Apple Inc. All rights reserved.
+ * Copyright (c) 2000-2019 Apple Inc. All rights reserved.
  *
  * @APPLE_LICENSE_HEADER_START@
  *
@@ -29,8 +29,8 @@
 #include <sys/stat.h>
 #include <sys/syslog.h>
 #include <mach/message.h>
-#include <os/activity.h>
 #include <os/log.h>
+#include <os/variant_private.h>
 #include <sys/sysctl.h>
 
 #include <CoreFoundation/CoreFoundation.h>
@@ -486,9 +486,9 @@ void                SCLog                           (Boolean                condition,
     #ifndef    SC_LOG_HANDLE_TYPE
     #define SC_LOG_HANDLE_TYPE
     #endif     // SC_LOG_HANDLE_TYPE
-    SC_LOG_HANDLE_TYPE os_log_t        SC_LOG_HANDLE;
+    SC_LOG_HANDLE_TYPE os_log_t        SC_LOG_HANDLE(void);
   #else        // SC_LOG_HANDLE
-    #define    SC_LOG_HANDLE   _SC_LOG_DEFAULT()       // use [SC] default os_log handle
+    #define    SC_LOG_HANDLE   _SC_LOG_DEFAULT         // use [SC] default os_log handle
     #ifndef    SC_LOG_OR_PRINT
       #define  USE_SC_LOG_OR_PRINT     1               // and use '_sc_log' to control os_log, printf
     #endif     // !SC_LOG_OR_PRINT
@@ -497,7 +497,7 @@ void                SCLog                           (Boolean                condition,
   #if  USE_SC_LOG_OR_PRINT
     #define    SC_log(__level, __format, ...)                                          \
        do {                                                                            \
-               os_log_t        __handle = SC_LOG_HANDLE;                               \
+               os_log_t        __handle = SC_LOG_HANDLE();                             \
                os_log_type_t   __type   = _SC_syslog_os_log_mapping(__level);          \
                                                                                        \
                if (((_sc_log != 1) && ((__level > LOG_DEBUG) || _sc_debug)) ||         \
@@ -513,8 +513,10 @@ void               SCLog                           (Boolean                condition,
   #else        // USE_SC_LOG_OR_PRINT
     #define    SC_log(__level, __format, ...)                                          \
        do {                                                                            \
+               os_log_t        __handle = SC_LOG_HANDLE();                             \
                os_log_type_t   __type = _SC_syslog_os_log_mapping(__level);            \
-               os_log_with_type(SC_LOG_HANDLE, __type, __format, ## __VA_ARGS__);      \
+                                                                                       \
+               os_log_with_type(__handle, __type, __format, ## __VA_ARGS__);           \
        } while (0)
   #endif       // USE_SC_LOG_OR_PRINT
 #endif // !SC_log
@@ -808,17 +810,14 @@ _SC_CFEqual(CFTypeRef val1, CFTypeRef val2)
 static __inline__ Boolean
 _SC_isAppleInternal()
 {
-       static int isInternal   = 0;
-
-       if (isInternal == 0) {
-               int             ret;
-               struct stat     statbuf;
+       static Boolean          isInternal;
+       static dispatch_once_t  once;
 
-               ret = stat("/AppleInternal", &statbuf);
-               isInternal = (ret == 0) ? 1 : 2;
-       }
+       dispatch_once(&once, ^{
+               isInternal = os_variant_has_internal_content("com.apple.SystemConfiguration");
+       });
 
-       return (isInternal == 1);
+       return isInternal;
 }
 
 Boolean
@@ -860,6 +859,18 @@ _SC_crash                                  (const char             *crash_info,
                                                 CFStringRef            notifyHeader,
                                                 CFStringRef            notifyMessage);
 
+static __inline__ void
+_SC_crash_once                                 (const char             *crash_info,
+                                                CFStringRef            notifyHeader,
+                                                CFStringRef            notifyMessage)
+{
+       static dispatch_once_t  once;
+
+       _dispatch_once(&once, ^{
+               _SC_crash(crash_info, notifyHeader, notifyMessage);
+       });
+}
+
 Boolean
 _SC_getconninfo                                        (int                            socket,
                                                 struct sockaddr_storage        *src_addr,
index b975b4fe91e1a217747fd20996bdcad9651bb21a..ebb53abd50111825567404ae05c754c5d7adfd0c 100644 (file)
@@ -3,7 +3,6 @@
  * DO NOT EDIT!
  */
 
-#include <os/availability.h>
 #include <TargetConditionals.h>
 #include <CoreFoundation/CFString.h>
 
@@ -62,12 +61,16 @@ const CFStringRef kSCEntNetSMB                                     = CFSTR("SMB"
 #endif // !TARGET_OS_IPHONE
 
 const CFStringRef kSCEntNet6to4                                    = CFSTR("6to4");
-const CFStringRef kSCEntNetActiveDuringSleepRequested              = CFSTR("ActiveDuringSleepRequested");
-const CFStringRef kSCEntNetActiveDuringSleepSupported              = CFSTR("ActiveDuringSleepSupported");
 const CFStringRef kSCEntNetAppLayer                                = CFSTR("AppLayer");
 
 
 const CFStringRef kSCEntNetEAPOL                                   = CFSTR("EAPOL");
+const CFStringRef kSCEntNetIdleRoute                               = CFSTR("IdleRoute");
+const CFStringRef kSCEntNetInterfaceActiveDuringSleepRequested     = CFSTR("ActiveDuringSleepRequested");
+const CFStringRef kSCEntNetInterfaceActiveDuringSleepSupported     = CFSTR("ActiveDuringSleepSupported");
+const CFStringRef kSCEntNetInterfaceDelegation                     = CFSTR("InterfaceDelegation");
+const CFStringRef kSCEntNetIPv4ARPCollision                        = CFSTR("IPv4ARPCollision");
+const CFStringRef kSCEntNetIPv4PortInUse                           = CFSTR("PortInUse");
 const CFStringRef kSCEntNetIPv4RouterARPFailure                    = CFSTR("IPv4RouterARPFailure");
 const CFStringRef kSCEntNetIPv4RouterARPAlive                      = CFSTR("IPv4RouterARPAlive");
 const CFStringRef kSCEntNetIPv6RouterExpired                       = CFSTR("IPv6RouterExpired");
@@ -78,6 +81,7 @@ const CFStringRef kSCEntNetNAT64                                   = CFSTR("NAT6
 const CFStringRef kSCEntNetNAT64PrefixRequest                      = CFSTR("NAT64PrefixRequest");
 const CFStringRef kSCEntNetOnDemand                                = CFSTR("OnDemand");
 const CFStringRef kSCEntNetQoSMarkingPolicy                        = CFSTR("QoSMarkingPolicy");
+const CFStringRef kSCEntNetRefreshConfiguration                    = CFSTR("RefreshConfiguration");
 const CFStringRef kSCEntNetService                                 = CFSTR("__SERVICE__");
 const CFStringRef kSCEntNetVPN                                     = CFSTR("VPN");
 const CFStringRef kSCPropNetOverridePrimary                        = CFSTR("OverridePrimary");
@@ -220,6 +224,7 @@ const CFStringRef kSCPropNetIPv6AdditionalRoutes                   = CFSTR("Addi
 const CFStringRef kSCPropNetIPv6EnableCGA                          = CFSTR("EnableCGA");
 const CFStringRef kSCPropNetIPv6ExcludedRoutes                     = CFSTR("ExcludedRoutes");
 const CFStringRef kSCPropNetIPv6IncludedRoutes                     = CFSTR("IncludedRoutes");
+const CFStringRef kSCPropNetIPv6LinkLocalAddress                   = CFSTR("LinkLocalAddress");
 const CFStringRef kSCPropNetIPv6PerformPLATDiscovery               = CFSTR("PerformPLATDiscovery");
 const CFStringRef kSCPropNetIPv6RouteDestinationAddress            = CFSTR("DestinationAddress");
 const CFStringRef kSCPropNetIPv6RoutePrefixLength                  = CFSTR("PrefixLength");
@@ -267,8 +272,8 @@ const CFStringRef kSCPropNetPPPDisconnectOnSleep                   = CFSTR("Disc
 const CFStringRef kSCPropNetPPPDisconnectOnWake                    = CFSTR("DisconnectOnWake");
 const CFStringRef kSCPropNetPPPDisconnectOnWakeTimer               = CFSTR("DisconnectOnWakeTimer");
 const CFStringRef kSCPropNetPPPDisconnectTime                      = CFSTR("DisconnectTime");
-const CFStringRef kSCPropNetPPPIdleReminderTimer                   = CFSTR("IdleReminderTimer");
 const CFStringRef kSCPropNetPPPIdleReminder                        = CFSTR("IdleReminder");
+const CFStringRef kSCPropNetPPPIdleReminderTimer                   = CFSTR("IdleReminderTimer");
 const CFStringRef kSCPropNetPPPLastCause                           = CFSTR("LastCause");
 const CFStringRef kSCPropNetPPPLogfile                             = CFSTR("Logfile");
 const CFStringRef kSCPropNetPPPPlugins                             = CFSTR("Plugins");
index 236eaa3d9d09246c97078bdbb4c6de0868ecc576..94d61c985e110c8a5f713fb77fd354d11d440c43 100644 (file)
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2000-2018 Apple Inc. All rights reserved.
+ * Copyright (c) 2000-2019 Apple Inc. All rights reserved.
  *
  * @APPLE_LICENSE_HEADER_START@
  *
  *   kSCPropNetPPPDisconnectOnLogout                    "DisconnectOnLogout"           CFNumber (0 or 1)
  *   kSCPropNetPPPDisconnectOnSleep                     "DisconnectOnSleep"            CFNumber (0 or 1)
  *   kSCPropNetPPPDisconnectTime                        "DisconnectTime"               CFNumber
- *   kSCPropNetPPPIdleReminderTimer                     "IdleReminderTimer"            CFNumber
  *   kSCPropNetPPPIdleReminder                          "IdleReminder"                 CFNumber (0 or 1)
+ *   kSCPropNetPPPIdleReminderTimer                     "IdleReminderTimer"            CFNumber
  *   kSCPropNetPPPLastCause                             "LastCause"                    CFNumber
  *   kSCPropNetPPPLogfile                               "Logfile"                      CFString
- *   kSCPropNetPPPPlugins                               "Plugins"                      CFArray[CFString]
  *   kSCPropNetPPPRetryConnectTime                      "RetryConnectTime"             CFNumber
  *   kSCPropNetPPPSessionTimer                          "SessionTimer"                 CFNumber
  *   kSCPropNetPPPStatus                                "Status"                       CFNumber
  *   kSCPropNetPPPVerboseLogging                        "VerboseLogging"               CFNumber (0 or 1)
  *
  *   --- Auth: ---
- *   kSCPropNetPPPAuthEAPPlugins                        "AuthEAPPlugins"               CFArray[CFString]
  *   kSCPropNetPPPAuthName                              "AuthName"                     CFString
  *   kSCPropNetPPPAuthPassword                          "AuthPassword"                 CFString
  *   kSCPropNetPPPAuthPasswordEncryption                "AuthPasswordEncryption"       CFString
@@ -1585,13 +1583,6 @@ extern const CFStringRef kSCPropNetPPPDisconnectOnSleep                     API_
 extern const CFStringRef kSCPropNetPPPDisconnectTime                        API_AVAILABLE(macos(10.3)) SPI_AVAILABLE(ios(2.0), tvos(9.0), watchos(1.0), bridgeos(1.0));
 #define kSCPropNetPPPDisconnectTime kSCPropNetPPPDisconnectTime
 
-/*!
-  @const kSCPropNetPPPIdleReminderTimer
-  @discussion Value is a CFNumber
- */
-extern const CFStringRef kSCPropNetPPPIdleReminderTimer                     API_AVAILABLE(macos(10.1)) SPI_AVAILABLE(ios(2.0), tvos(9.0), watchos(1.0), bridgeos(1.0));
-#define kSCPropNetPPPIdleReminderTimer kSCPropNetPPPIdleReminderTimer
-
 /*!
   @const kSCPropNetPPPIdleReminder
   @discussion Value is a CFNumber (0 or 1)
@@ -1599,6 +1590,13 @@ extern const CFStringRef kSCPropNetPPPIdleReminderTimer                     API_
 extern const CFStringRef kSCPropNetPPPIdleReminder                          API_AVAILABLE(macos(10.1)) SPI_AVAILABLE(ios(2.0), tvos(9.0), watchos(1.0), bridgeos(1.0));
 #define kSCPropNetPPPIdleReminder kSCPropNetPPPIdleReminder
 
+/*!
+  @const kSCPropNetPPPIdleReminderTimer
+  @discussion Value is a CFNumber
+ */
+extern const CFStringRef kSCPropNetPPPIdleReminderTimer                     API_AVAILABLE(macos(10.1)) SPI_AVAILABLE(ios(2.0), tvos(9.0), watchos(1.0), bridgeos(1.0));
+#define kSCPropNetPPPIdleReminderTimer kSCPropNetPPPIdleReminderTimer
+
 /*!
   @const kSCPropNetPPPLastCause
   @discussion Value is a CFNumber
@@ -1617,7 +1615,7 @@ extern const CFStringRef kSCPropNetPPPLogfile                               API_
   @const kSCPropNetPPPPlugins
   @discussion Value is a CFArray[CFString]
  */
-extern const CFStringRef kSCPropNetPPPPlugins                               API_AVAILABLE(macos(10.2)) SPI_AVAILABLE(ios(2.0), tvos(9.0), watchos(1.0), bridgeos(1.0));
+extern const CFStringRef kSCPropNetPPPPlugins                               API_DEPRECATED("No longer supported", macos(10.2,10.15)) SPI_AVAILABLE(ios(2.0), tvos(9.0), watchos(1.0), bridgeos(1.0));
 #define kSCPropNetPPPPlugins kSCPropNetPPPPlugins
 
 /*!
@@ -1659,7 +1657,7 @@ extern const CFStringRef kSCPropNetPPPVerboseLogging                        API_
   @const kSCPropNetPPPAuthEAPPlugins
   @discussion Value is a CFArray[CFString]
  */
-extern const CFStringRef kSCPropNetPPPAuthEAPPlugins                        API_AVAILABLE(macos(10.3)) SPI_AVAILABLE(ios(2.0), tvos(9.0), watchos(1.0), bridgeos(1.0));
+extern const CFStringRef kSCPropNetPPPAuthEAPPlugins                        API_DEPRECATED("No longer supported", macos(10.3,10.15)) SPI_AVAILABLE(ios(2.0), tvos(9.0), watchos(1.0), bridgeos(1.0));
 #define kSCPropNetPPPAuthEAPPlugins kSCPropNetPPPAuthEAPPlugins
 
 /*!
index 7691229e31fc6785a95a0ee33bf99e44e141fd10..35b00fd02853e06c2c683abba585aa6cd93acfb2 100644 (file)
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2000-2018 Apple Inc. All rights reserved.
+ * Copyright (c) 2000-2019 Apple Inc. All rights reserved.
  *
  * @APPLE_LICENSE_HEADER_START@
  *
  *
  * Network Entity Keys
  *
- *   kSCEntNetActiveDuringSleepRequested                "ActiveDuringSleepRequested"   CFDictionary
- *   kSCEntNetActiveDuringSleepSupported                "ActiveDuringSleepSupported"   CFDictionary
  *   kSCEntNetAppLayer                                  "AppLayer"                     CFDictionary
  *   kSCEntNetCommCenter                                "com.apple.CommCenter"         CFDictionary
  *   kSCEntNetEAPOL                                     "EAPOL"                        CFDictionary
+ *   kSCEntNetIdleRoute                                 "IdleRoute"
+ *   kSCEntNetInterfaceActiveDuringSleepRequested       "ActiveDuringSleepRequested"   CFDictionary
+ *   kSCEntNetInterfaceActiveDuringSleepSupported       "ActiveDuringSleepSupported"   CFDictionary
+ *   kSCEntNetInterfaceDelegation                       "InterfaceDelegation"
+ *   kSCEntNetIPv4ARPCollision                          "IPv4ARPCollision"
+ *   kSCEntNetIPv4PortInUse                             "PortInUse"
  *   kSCEntNetIPv4RouterARPFailure                      "IPv4RouterARPFailure"
  *   kSCEntNetIPv4RouterARPAlive                        "IPv4RouterARPAlive"
  *   kSCEntNetIPv6RouterExpired                         "IPv6RouterExpired"
@@ -54,6 +58,7 @@
  *   kSCEntNetNAT64PrefixRequest                        "NAT64PrefixRequest"
  *   kSCEntNetOnDemand                                  "OnDemand"                     CFDictionary
  *   kSCEntNetQoSMarkingPolicy                          "QoSMarkingPolicy"             CFDictionary
+ *   kSCEntNetRefreshConfiguration                      "RefreshConfiguration"
  *   kSCEntNetService                                   "__SERVICE__"                  CFDictionary
  *   kSCEntNetVPN                                       "VPN"                          CFDictionary
  *
  *   kSCPropNetIPv6EnableCGA                            "EnableCGA"                    CFNumber (0 or 1)
  *   kSCPropNetIPv6ExcludedRoutes                       "ExcludedRoutes"               CFArray[CFDictionary]
  *   kSCPropNetIPv6IncludedRoutes                       "IncludedRoutes"               CFArray[CFDictionary]
+ *   kSCPropNetIPv6LinkLocalAddress                     "LinkLocalAddress"             CFString
  *   kSCPropNetIPv6PerformPLATDiscovery                 "PerformPLATDiscovery"         CFBoolean
  *
  *   --- kSCPropNetIPv6AdditionalRoutes, kSCPropNetIPv6IncludedRoutes, kSCPropNetIPv6ExcludedRoutes [CFDictionary] keys ---
@@ -360,20 +366,6 @@ extern const CFStringRef kSCPrefVirtualNetworkInterfaces                    API_
   @group Network Entity Keys
  */
 
-/*!
-  @const kSCEntNetActiveDuringSleepRequested
-  @discussion Value is a CFDictionary
- */
-extern const CFStringRef kSCEntNetActiveDuringSleepRequested                API_AVAILABLE(macos(10.10)) SPI_AVAILABLE(ios(7.0), tvos(9.0), watchos(1.0), bridgeos(1.0));
-#define kSCEntNetActiveDuringSleepRequested kSCEntNetActiveDuringSleepRequested
-
-/*!
-  @const kSCEntNetActiveDuringSleepSupported
-  @discussion Value is a CFDictionary
- */
-extern const CFStringRef kSCEntNetActiveDuringSleepSupported                API_AVAILABLE(macos(10.10)) SPI_AVAILABLE(ios(7.0), tvos(9.0), watchos(1.0), bridgeos(1.0));
-#define kSCEntNetActiveDuringSleepSupported kSCEntNetActiveDuringSleepSupported
-
 /*!
   @const kSCEntNetAppLayer
   @discussion Value is a CFDictionary
@@ -395,6 +387,44 @@ extern const CFStringRef kSCEntNetCommCenter                                SPI_
 extern const CFStringRef kSCEntNetEAPOL                                     API_AVAILABLE(macos(10.5)) SPI_AVAILABLE(ios(2.0), tvos(9.0), watchos(1.0), bridgeos(1.0));
 #define kSCEntNetEAPOL kSCEntNetEAPOL
 
+/*!
+  @const kSCEntNetIdleRoute
+ */
+extern const CFStringRef kSCEntNetIdleRoute                                 API_AVAILABLE(macos(10.7)) SPI_AVAILABLE(ios(5.0), tvos(9.0), watchos(1.0), bridgeos(1.0));
+#define kSCEntNetIdleRoute kSCEntNetIdleRoute
+
+/*!
+  @const kSCEntNetInterfaceActiveDuringSleepRequested
+  @discussion Value is a CFDictionary
+ */
+extern const CFStringRef kSCEntNetInterfaceActiveDuringSleepRequested       API_AVAILABLE(macos(10.10)) SPI_AVAILABLE(ios(7.0), tvos(9.0), watchos(1.0), bridgeos(1.0));
+#define kSCEntNetInterfaceActiveDuringSleepRequested kSCEntNetInterfaceActiveDuringSleepRequested
+
+/*!
+  @const kSCEntNetInterfaceActiveDuringSleepSupported
+  @discussion Value is a CFDictionary
+ */
+extern const CFStringRef kSCEntNetInterfaceActiveDuringSleepSupported       API_AVAILABLE(macos(10.10)) SPI_AVAILABLE(ios(7.0), tvos(9.0), watchos(1.0), bridgeos(1.0));
+#define kSCEntNetInterfaceActiveDuringSleepSupported kSCEntNetInterfaceActiveDuringSleepSupported
+
+/*!
+  @const kSCEntNetInterfaceDelegation
+ */
+extern const CFStringRef kSCEntNetInterfaceDelegation                       API_AVAILABLE(macos(10.15)) SPI_AVAILABLE(ios(13.0), tvos(13.0), watchos(6.0), bridgeos(4.0));
+#define kSCEntNetInterfaceDelegation kSCEntNetInterfaceDelegation
+
+/*!
+  @const kSCEntNetIPv4ARPCollision
+ */
+extern const CFStringRef kSCEntNetIPv4ARPCollision                          API_AVAILABLE(macos(10.6)) SPI_AVAILABLE(ios(2.0), tvos(9.0), watchos(1.0), bridgeos(1.0));
+#define kSCEntNetIPv4ARPCollision kSCEntNetIPv4ARPCollision
+
+/*!
+  @const kSCEntNetIPv4PortInUse
+ */
+extern const CFStringRef kSCEntNetIPv4PortInUse                             API_AVAILABLE(macos(10.6)) SPI_AVAILABLE(ios(2.0), tvos(9.0), watchos(1.0), bridgeos(1.0));
+#define kSCEntNetIPv4PortInUse kSCEntNetIPv4PortInUse
+
 /*!
   @const kSCEntNetIPv4RouterARPFailure
  */
@@ -410,7 +440,7 @@ extern const CFStringRef kSCEntNetIPv4RouterARPAlive                        API_
 /*!
   @const kSCEntNetIPv6RouterExpired
  */
-extern const CFStringRef kSCEntNetIPv6RouterExpired                         API_AVAILABLE(macos(10.13)) SPI_AVAILABLE(ios(11.0), tvos(11.0), watchos(4.0), bridgeos(4.0));
+extern const CFStringRef kSCEntNetIPv6RouterExpired                         API_AVAILABLE(macos(10.13)) SPI_AVAILABLE(ios(11.0), tvos(11.0), watchos(4.0), bridgeos(2.0));
 #define kSCEntNetIPv6RouterExpired kSCEntNetIPv6RouterExpired
 
 /*!
@@ -438,13 +468,13 @@ extern const CFStringRef kSCEntNetLoopback                                  API_
   @const kSCEntNetNAT64
   @discussion Value is a CFDictionary
  */
-extern const CFStringRef kSCEntNetNAT64                                     API_AVAILABLE(macos(10.14)) SPI_AVAILABLE(ios(12.0), tvos(12.0), watchos(5.0), bridgeos(5.0));
+extern const CFStringRef kSCEntNetNAT64                                     API_AVAILABLE(macos(10.14)) SPI_AVAILABLE(ios(12.0), tvos(12.0), watchos(5.0), bridgeos(3.0));
 #define kSCEntNetNAT64 kSCEntNetNAT64
 
 /*!
   @const kSCEntNetNAT64PrefixRequest
  */
-extern const CFStringRef kSCEntNetNAT64PrefixRequest                        API_AVAILABLE(macos(10.13)) SPI_AVAILABLE(ios(11.0), tvos(11.0), watchos(4.0), bridgeos(4.0));
+extern const CFStringRef kSCEntNetNAT64PrefixRequest                        API_AVAILABLE(macos(10.13)) SPI_AVAILABLE(ios(11.0), tvos(11.0), watchos(4.0), bridgeos(2.0));
 #define kSCEntNetNAT64PrefixRequest kSCEntNetNAT64PrefixRequest
 
 /*!
@@ -458,9 +488,15 @@ extern const CFStringRef kSCEntNetOnDemand                                  API_
   @const kSCEntNetQoSMarkingPolicy
   @discussion Value is a CFDictionary
  */
-extern const CFStringRef kSCEntNetQoSMarkingPolicy                          API_AVAILABLE(macos(10.13)) SPI_AVAILABLE(ios(10.0), tvos(10.0), watchos(3.0), bridgeos(3.0));
+extern const CFStringRef kSCEntNetQoSMarkingPolicy                          API_AVAILABLE(macos(10.13)) SPI_AVAILABLE(ios(10.0), tvos(10.0), watchos(3.0), bridgeos(2.0));
 #define kSCEntNetQoSMarkingPolicy kSCEntNetQoSMarkingPolicy
 
+/*!
+  @const kSCEntNetRefreshConfiguration
+ */
+extern const CFStringRef kSCEntNetRefreshConfiguration                      API_AVAILABLE(macos(10.5)) SPI_AVAILABLE(ios(2.0), tvos(9.0), watchos(1.0), bridgeos(1.0));
+#define kSCEntNetRefreshConfiguration kSCEntNetRefreshConfiguration
+
 /*!
   @const kSCEntNetService
   @discussion Value is a CFDictionary
@@ -682,7 +718,7 @@ extern const CFStringRef kSCPropNetIPv4AdditionalRoutes                     API_
   @const kSCPropNetIPv4CLAT46
   @discussion Value is a CFBoolean
  */
-extern const CFStringRef kSCPropNetIPv4CLAT46                               API_AVAILABLE(macos(10.14)) SPI_AVAILABLE(ios(12.0), tvos(12.0), watchos(5.0), bridgeos(5.0));
+extern const CFStringRef kSCPropNetIPv4CLAT46                               API_AVAILABLE(macos(10.14)) SPI_AVAILABLE(ios(12.0), tvos(12.0), watchos(5.0), bridgeos(3.0));
 #define kSCPropNetIPv4CLAT46 kSCPropNetIPv4CLAT46
 
 /*!
@@ -762,7 +798,7 @@ extern const CFStringRef kSCPropNetIPv6AdditionalRoutes                     API_
   @const kSCPropNetIPv6EnableCGA
   @discussion Value is a CFNumber (0 or 1)
  */
-extern const CFStringRef kSCPropNetIPv6EnableCGA                            API_AVAILABLE(macos(10.12)) SPI_AVAILABLE(ios(10.0), tvos(10.0), watchos(3.0), bridgeos(3.0));
+extern const CFStringRef kSCPropNetIPv6EnableCGA                            API_AVAILABLE(macos(10.12)) SPI_AVAILABLE(ios(10.0), tvos(10.0), watchos(3.0), bridgeos(2.0));
 #define kSCPropNetIPv6EnableCGA kSCPropNetIPv6EnableCGA
 
 /*!
@@ -779,11 +815,18 @@ extern const CFStringRef kSCPropNetIPv6ExcludedRoutes                       API_
 extern const CFStringRef kSCPropNetIPv6IncludedRoutes                       API_AVAILABLE(macos(10.7)) SPI_AVAILABLE(ios(4.0), tvos(9.0), watchos(1.0), bridgeos(1.0));
 #define kSCPropNetIPv6IncludedRoutes kSCPropNetIPv6IncludedRoutes
 
+/*!
+  @const kSCPropNetIPv6LinkLocalAddress
+  @discussion Value is a CFString
+ */
+extern const CFStringRef kSCPropNetIPv6LinkLocalAddress                     API_AVAILABLE(macos(10.12)) SPI_AVAILABLE(ios(10.0), tvos(10.0), watchos(3.0), bridgeos(2.0));
+#define kSCPropNetIPv6LinkLocalAddress kSCPropNetIPv6LinkLocalAddress
+
 /*!
   @const kSCPropNetIPv6PerformPLATDiscovery
   @discussion Value is a CFBoolean
  */
-extern const CFStringRef kSCPropNetIPv6PerformPLATDiscovery                 API_AVAILABLE(macos(10.14)) SPI_AVAILABLE(ios(12.0), tvos(12.0), watchos(5.0), bridgeos(5.0));
+extern const CFStringRef kSCPropNetIPv6PerformPLATDiscovery                 API_AVAILABLE(macos(10.14)) SPI_AVAILABLE(ios(12.0), tvos(12.0), watchos(5.0), bridgeos(3.0));
 #define kSCPropNetIPv6PerformPLATDiscovery kSCPropNetIPv6PerformPLATDiscovery
 
 /*!
@@ -979,21 +1022,21 @@ extern const CFStringRef kSCValNetPPPOnDemandPriorityLow                    API_
   @const kSCPropNetNAT64PrefixList
   @discussion Value is a CFArray[CFString]
  */
-extern const CFStringRef kSCPropNetNAT64PrefixList                          API_AVAILABLE(macos(10.14)) SPI_AVAILABLE(ios(12.0), tvos(12.0), watchos(5.0), bridgeos(5.0));
+extern const CFStringRef kSCPropNetNAT64PrefixList                          API_AVAILABLE(macos(10.14)) SPI_AVAILABLE(ios(12.0), tvos(12.0), watchos(5.0), bridgeos(3.0));
 #define kSCPropNetNAT64PrefixList kSCPropNetNAT64PrefixList
 
 /*!
   @const kSCPropNetNAT64PLATDiscoveryStartTime
   @discussion Value is a CFDate
  */
-extern const CFStringRef kSCPropNetNAT64PLATDiscoveryStartTime              API_AVAILABLE(macos(10.14)) SPI_AVAILABLE(ios(12.0), tvos(12.0), watchos(5.0), bridgeos(5.0));
+extern const CFStringRef kSCPropNetNAT64PLATDiscoveryStartTime              API_AVAILABLE(macos(10.14)) SPI_AVAILABLE(ios(12.0), tvos(12.0), watchos(5.0), bridgeos(3.0));
 #define kSCPropNetNAT64PLATDiscoveryStartTime kSCPropNetNAT64PLATDiscoveryStartTime
 
 /*!
   @const kSCPropNetNAT64PLATDiscoveryCompletionTime
   @discussion Value is a CFDate
  */
-extern const CFStringRef kSCPropNetNAT64PLATDiscoveryCompletionTime         API_AVAILABLE(macos(10.14)) SPI_AVAILABLE(ios(12.0), tvos(12.0), watchos(5.0), bridgeos(5.0));
+extern const CFStringRef kSCPropNetNAT64PLATDiscoveryCompletionTime         API_AVAILABLE(macos(10.14)) SPI_AVAILABLE(ios(12.0), tvos(12.0), watchos(5.0), bridgeos(3.0));
 #define kSCPropNetNAT64PLATDiscoveryCompletionTime kSCPropNetNAT64PLATDiscoveryCompletionTime
 
 /*!
@@ -1071,21 +1114,21 @@ extern const CFStringRef kSCPropNetProxiesSupplementalMatchDomain           API_
   @const kSCPropNetQoSMarkingAppleAudioVideoCalls
   @discussion Value is a CFBoolean
  */
-extern const CFStringRef kSCPropNetQoSMarkingAppleAudioVideoCalls           API_AVAILABLE(macos(10.13)) SPI_AVAILABLE(ios(10.0), tvos(10.0), watchos(3.0), bridgeos(3.0));
+extern const CFStringRef kSCPropNetQoSMarkingAppleAudioVideoCalls           API_AVAILABLE(macos(10.13)) SPI_AVAILABLE(ios(10.0), tvos(10.0), watchos(3.0), bridgeos(2.0));
 #define kSCPropNetQoSMarkingAppleAudioVideoCalls kSCPropNetQoSMarkingAppleAudioVideoCalls
 
 /*!
   @const kSCPropNetQoSMarkingEnabled
   @discussion Value is a CFBoolean
  */
-extern const CFStringRef kSCPropNetQoSMarkingEnabled                        API_AVAILABLE(macos(10.13)) SPI_AVAILABLE(ios(10.0), tvos(10.0), watchos(3.0), bridgeos(3.0));
+extern const CFStringRef kSCPropNetQoSMarkingEnabled                        API_AVAILABLE(macos(10.13)) SPI_AVAILABLE(ios(10.0), tvos(10.0), watchos(3.0), bridgeos(2.0));
 #define kSCPropNetQoSMarkingEnabled kSCPropNetQoSMarkingEnabled
 
 /*!
   @const kSCPropNetQoSMarkingWhitelistedAppIdentifiers
   @discussion Value is a CFArray[CFString]
  */
-extern const CFStringRef kSCPropNetQoSMarkingWhitelistedAppIdentifiers      API_AVAILABLE(macos(10.13)) SPI_AVAILABLE(ios(10.0), tvos(10.0), watchos(3.0), bridgeos(3.0));
+extern const CFStringRef kSCPropNetQoSMarkingWhitelistedAppIdentifiers      API_AVAILABLE(macos(10.13)) SPI_AVAILABLE(ios(10.0), tvos(10.0), watchos(3.0), bridgeos(2.0));
 #define kSCPropNetQoSMarkingWhitelistedAppIdentifiers kSCPropNetQoSMarkingWhitelistedAppIdentifiers
 
 /*!
@@ -1103,7 +1146,7 @@ extern const CFStringRef kSCPropNetServicePrimaryRank                       API_
   @const kSCPropNetServiceServiceIndex
   @discussion Value is a CFNumber
  */
-extern const CFStringRef kSCPropNetServiceServiceIndex                      API_AVAILABLE(macos(10.12)) SPI_AVAILABLE(ios(10.0), tvos(10.0), watchos(3.0), bridgeos(3.0));
+extern const CFStringRef kSCPropNetServiceServiceIndex                      API_AVAILABLE(macos(10.12)) SPI_AVAILABLE(ios(10.0), tvos(10.0), watchos(3.0), bridgeos(2.0));
 #define kSCPropNetServiceServiceIndex kSCPropNetServiceServiceIndex
 
 /*!
index 40495575eca22a5b8eef4b3a2957a251eb553275..7e825c81b06eac3d41811b1be8459bbeccb56f48 100644 (file)
@@ -163,4 +163,3 @@ isa_xpc_error(xpc_object_t obj)
 {
        return isa_xpc_object_of_type(obj, XPC_TYPE_ERROR);
 }
-
index c30a68359adb014c2b2a45faf54c4e78d83c4102..fab6098b01a92b790d1e5949c5bd3b368cd23bc7 100644 (file)
@@ -169,8 +169,9 @@ int         SCError                 (void)                          API_AVAILABLE(macos(10.1), ios(2.0));
 /*!
        @function SCErrorString
        @discussion Returns a pointer to the message string
-               associated with the specified status or error.
-       @param status The SCDynamicStoreStatus to be returned.
+               associated with the specified status or error
+               number.
+       @param status The status or error number.
        @result Returns a pointer to the error message string.
  */
 const char *   SCErrorString           (int    status)                 API_AVAILABLE(macos(10.1), ios(2.0));
index 1c9e1f371ca5d2f33bc8d09f51e4252e7dfa35d2..a961d64740170f5bca15c14d15d9c5f5bc8dd19e 100644 (file)
@@ -30,9 +30,6 @@
 
 #include "SCDynamicStoreInternal.h"
 
-extern const unsigned char *   SystemConfigurationVersionString;
-extern const double            SystemConfigurationVersionNumber;
-
 #if    !TARGET_OS_IPHONE
 extern const CFStringRef       kSCEntNetAppleTalk;
 extern const CFStringRef       kSCEntNetNetInfo;
index cd6cdf8634064ab6befa947307be8aad492ec53b..e505e579b84471db57fc8edf0d2a371dac84c6e4 100644 (file)
@@ -380,8 +380,8 @@ _SCVLANInterfaceCopyActive(void)
                        continue;
                }
 
-               bzero(&ifr, sizeof(ifr));
-               bzero(&vreq, sizeof(vreq));
+               memset(&ifr, 0, sizeof(ifr));
+               memset(&vreq, 0, sizeof(vreq));
                strlcpy(ifr.ifr_name, ifp->ifa_name, sizeof(ifr.ifr_name));
                ifr.ifr_data = (caddr_t)&vreq;
 
@@ -857,8 +857,8 @@ __vlan_set(int s, CFStringRef interface_if, CFStringRef physical_if, CFNumberRef
        int             tag_val;
        struct vlanreq  vreq;
 
-       bzero(&ifr, sizeof(ifr));
-       bzero(&vreq, sizeof(vreq));
+       memset(&ifr, 0, sizeof(ifr));
+       memset(&vreq, 0, sizeof(vreq));
 
        // interface
        (void) _SC_cfstring_to_cstring(interface_if,
@@ -894,8 +894,8 @@ __vlan_clear(int s, CFStringRef interface_if)
        struct ifreq    ifr;
        struct vlanreq  vreq;
 
-       bzero(&ifr, sizeof(ifr));
-       bzero(&vreq, sizeof(vreq));
+       memset(&ifr, 0, sizeof(ifr));
+       memset(&vreq, 0, sizeof(vreq));
 
        // interface
        (void) _SC_cfstring_to_cstring(interface_if,
@@ -905,7 +905,7 @@ __vlan_clear(int s, CFStringRef interface_if)
        ifr.ifr_data = (caddr_t)&vreq;
 
        // clear physical interface
-       bzero(&vreq.vlr_parent, sizeof(vreq.vlr_parent));
+       memset(&vreq.vlr_parent, 0, sizeof(vreq.vlr_parent));
 
        // clear tag
        vreq.vlr_tag = 0;
index 1462f70fe7e973f6658fc6f0a02a42a65a014e0a..90e32e10fd66d790c7f9224d427fa4db072d85c7 100644 (file)
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2012-2016 Apple Inc.
+ * Copyright (c) 2012-2018 Apple Inc.
  * All rights reserved.
  */
 
index 836f3667502939dd80fe7060beabf71d07588d4e..4d0c29439b560c7fe237ee0c96093065326d5f45 100644 (file)
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2000, 2001, 2003-2005, 2011, 2012, 2015, 2019 Apple Inc. All rights reserved.
+ * Copyright (c) 2000, 2001, 2003-2005, 2011, 2012, 2015, 2018-2019 Apple Inc. All rights reserved.
  *
  * @APPLE_LICENSE_HEADER_START@
  *
@@ -36,6 +36,7 @@
 
 subsystem config 20000;
 serverprefix _;
+UseSpecialReplyPort 1;
 
 import "config_types.h";
 
@@ -185,10 +186,7 @@ routine notifyviaport      (       server          : mach_port_t;
 
        skip;   /* was notifyviafd (passing UNIX domain socket filename) */
 
-routine notifyviasignal        (       server          : mach_port_t;
-                               task            : task_t /*task_move_send_t*/;
-                               sig             : int;
-                        out    status          : int);
+       skip;   /* was notifyviasignal */
 
 routine notifycancel   (       server          : mach_port_t;
                         out    status          : int);
diff --git a/SystemConfiguration.fproj/en.lproj/Localizable.strings b/SystemConfiguration.fproj/en.lproj/Localizable.strings
new file mode 100644 (file)
index 0000000..f930b18
Binary files /dev/null and b/SystemConfiguration.fproj/en.lproj/Localizable.strings differ
diff --git a/SystemConfiguration.fproj/en.lproj/NetworkInterface.strings b/SystemConfiguration.fproj/en.lproj/NetworkInterface.strings
new file mode 100644 (file)
index 0000000..dd0b14b
Binary files /dev/null and b/SystemConfiguration.fproj/en.lproj/NetworkInterface.strings differ
index e8c6d945e36bfe4198c3bf32530f85be688c8cfe..07ba69359172fa879ca098b7128d9ba22dad44fa 100644 (file)
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2000-2018 Apple Inc. All rights reserved.
+ * Copyright (c) 2000-2019 Apple Inc. All rights reserved.
  *
  * @APPLE_LICENSE_HEADER_START@
  *
@@ -62,7 +62,7 @@
 
 char copyright_string[] =
 "/*\n"
-" * Copyright (c) 2000-2018 Apple Inc. All rights reserved.\n"
+" * Copyright (c) 2000-2019 Apple Inc. All rights reserved.\n"
 " *\n"
 " * @APPLE_LICENSE_HEADER_START@\n"
 " *\n"
@@ -102,7 +102,9 @@ typedef enum {
        SC_10_1_10_9,   // deprecated in 10.9
        SC_10_2_10_9,   // deprecated in 10.9
        SC_10_2_10_13,  // deprecated in 10.13
+       SC_10_2_10_15,  // deprecated in 10.15
        SC_10_3_10_9,   // deprecated in 10.9
+       SC_10_3_10_15,  // deprecated in 10.15
        SC_10_4_10_9,   // deprecated in 10.9
        SC_10_6_IPHONE_2_0,
        SC_10_6_IPHONE_3_0,
@@ -126,6 +128,7 @@ typedef enum {
        SC_10_13_IPHONE_10_0_PRIVATE,
        SC_10_13_IPHONE_11_0_PRIVATE,
        SC_10_14_IPHONE_12_0_PRIVATE,
+       SC_10_15_IPHONE_13_0_PRIVATE,
        SC_IPHONE_2_0_PRIVATE,
        SC_IPHONE_7_0_PRIVATE,
        SC_IPHONE_8_0_PRIVATE,
@@ -218,6 +221,7 @@ typedef enum {
 #define CGA                    "CGA"
 #define CHAP                   "CHAP"
 #define CLAT46                 "CLAT46"
+#define COLLISION              "Collision"
 #define COMM                   "Comm"
 #define COMPATIBLE             "Compatible"
 #define COMPRESSIONACFIELD     "CompressionACField"
@@ -226,6 +230,7 @@ typedef enum {
 #define COMPUTERNAME           "ComputerName"
 #define COMPLETIONTIME         "CompletionTime"
 #define CONFIGMETHOD           "ConfigMethod"
+#define CONFIGURATION          "Configuration"
 #define CONFIRMED              "Confirmed"
 #define CONNECT                        "Connect"
 #define CONNECTDELAY           "ConnectDelay"
@@ -240,6 +245,7 @@ typedef enum {
 #define DATACOMPRESSION                "DataCompression"
 #define DEFAULT                        "Default"
 #define DEFAULTZONE            "DefaultZone"
+#define DELEGATION             "Delegation"
 #define DESIGNATED             "Designated"
 #define DEST                   "Dest"
 #define DESTINATION            "Destination"
@@ -308,8 +314,7 @@ typedef enum {
 #define HYBRID                 "Hybrid"
 #define IDENTIFIER             "Identifier"
 #define IDENTIFIERS            "Identifiers"
-#define IDLEREMINDER           "IdleReminder"
-#define IDLEREMINDERTIMER      "IdleReminderTimer"
+#define IDLE                   "Idle"
 #define IFNEEDED               "IfNeeded"
 #define IGNORE                 "Ignore"
 #define IGNOREDIALTONE         "IgnoreDialTone"
@@ -392,6 +397,7 @@ typedef enum {
 #define PLUGINS                        "Plugins"
 #define POLICY                 "Policy"
 #define PORT                   "Port"
+#define PORTINUSE              "PortInUse"
 #define POWER                  "Power"
 #define PPP                    "PPP"
 #define PPPOE                  "PPPoE"
@@ -419,6 +425,7 @@ typedef enum {
 #define REDIAL                 "Redial"
 #define REDIALCOUNT            "RedialCount"
 #define REDIALINTERVAL         "RedialInterval"
+#define REFRESH                        "Refresh"
 #define REGION                 "Region"
 #define RELAY                  "Relay"
 #define REMINDER               "Reminder"
@@ -483,6 +490,7 @@ typedef enum {
 #define TAGS                   "Tags"
 #define TERMINALSCRIPT         "TerminalScript"
 #define TIMEOUT                        "Timeout"
+#define TIMER                  "Timer"
 #define TIMESTAMP              "TimeStamp"
 #define TOKEN                  "Token"
 #define TRANSMITACCM           "TransmitACCM"
@@ -606,20 +614,25 @@ static schemaDefinition names[] = {
 
   { GROUP_PRIVATE, NETENT, "Network Entity Keys", NULL, NULL },
 
-    { SC_10_10_IPHONE_7_0_PRIVATE, NETENT, ACTIVE DURINGSLEEP REQUESTED, NULL, CFDICTIONARY},
-    { SC_10_10_IPHONE_7_0_PRIVATE, NETENT, ACTIVE DURINGSLEEP SUPPORTED, NULL, CFDICTIONARY},
     { SC_10_9_IPHONE_7_0_PRIVATE, NETENT, APP LAYER, NULL, CFDICTIONARY},
     { SC_10_5_PRIVATE, NETENT, EAPOL, NULL, CFDICTIONARY },
-    { SC_10_10_IPHONE_8_0_PRIVATE, NETENT, IPV4 ROUTER ARP FAILURE, NULL, NULL},
-    { SC_10_10_IPHONE_8_0_PRIVATE, NETENT, IPV4 ROUTER ARP ALIVE, NULL, NULL},
-    { SC_10_13_IPHONE_11_0_PRIVATE, NETENT, IPV6 ROUTER EXPIRED, NULL, NULL},
+    { SC_10_7_IPHONE_5_0_PRIVATE, NETENT, IDLE ROUTE, NULL, NULL},                     // notification
+    { SC_10_10_IPHONE_7_0_PRIVATE, NETENT, INTERFACE ACTIVE DURINGSLEEP REQUESTED, ACTIVE DURINGSLEEP REQUESTED, CFDICTIONARY},
+    { SC_10_10_IPHONE_7_0_PRIVATE, NETENT, INTERFACE ACTIVE DURINGSLEEP SUPPORTED, ACTIVE DURINGSLEEP SUPPORTED, CFDICTIONARY},
+    { SC_10_15_IPHONE_13_0_PRIVATE, NETENT, INTERFACE DELEGATION, NULL, NULL},         // notification
+    { SC_10_6_IPHONE_2_0_PRIVATE, NETENT, IPV4 ARP COLLISION, NULL, NULL},             // notification
+    { SC_10_6_IPHONE_2_0_PRIVATE, NETENT, IPV4 PORTINUSE, PORTINUSE, NULL},            // notification
+    { SC_10_10_IPHONE_8_0_PRIVATE, NETENT, IPV4 ROUTER ARP FAILURE, NULL, NULL},       // notification
+    { SC_10_10_IPHONE_8_0_PRIVATE, NETENT, IPV4 ROUTER ARP ALIVE, NULL, NULL},         // notification
+    { SC_10_13_IPHONE_11_0_PRIVATE, NETENT, IPV6 ROUTER EXPIRED, NULL, NULL},          // notification
     { SC_10_9_IPHONE_7_0_PRIVATE, NETENT, LINKISSUES, NULL, CFDICTIONARY},
     { SC_10_7_IPHONE_5_0_PRIVATE, NETENT, LINKQUALITY, NULL, CFDICTIONARY},
     { SC_10_7_IPHONE_4_0_PRIVATE, NETENT, LOOPBACK, NULL, CFDICTIONARY },
     { SC_10_14_IPHONE_12_0_PRIVATE, NETENT, NAT64, NULL, CFDICTIONARY },
-    { SC_10_13_IPHONE_11_0_PRIVATE, NETENT, NAT64 PREFIX REQUEST, NULL, NULL},
+    { SC_10_13_IPHONE_11_0_PRIVATE, NETENT, NAT64 PREFIX REQUEST, NULL, NULL},         // notification
     { SC_10_6_IPHONE_3_0_PRIVATE, NETENT, ONDEMAND, NULL, CFDICTIONARY },
     { SC_10_13_IPHONE_10_0_PRIVATE, NETENT, QOSMARKING POLICY, NULL, CFDICTIONARY },
+    { SC_10_5_PRIVATE, NETENT, REFRESH CONFIGURATION, NULL, NULL },                    // notification
     { SC_10_6_IPHONE_2_0_PRIVATE, NETENT, SERVICE, "__SERVICE__", CFDICTIONARY },
     { SC_10_7_IPHONE_4_0_PRIVATE, NETENT, VPN, NULL, CFDICTIONARY },
     { COMMENT_PRIVATE, "", NULL, NULL, NULL },
@@ -870,6 +883,7 @@ static schemaDefinition names[] = {
     { SC_10_12_IPHONE_10_0_PRIVATE, NETPROP IPV6, ENABLE CGA, NULL, CFNUMBER_BOOL },
     { SC_10_7_IPHONE_4_0_PRIVATE, NETPROP IPV6, EXCLUDED ROUTES, NULL, CFARRAY_CFDICTIONARY },
     { SC_10_7_IPHONE_4_0_PRIVATE, NETPROP IPV6, INCLUDED ROUTES, NULL, CFARRAY_CFDICTIONARY },
+    { SC_10_12_IPHONE_10_0_PRIVATE, NETPROP IPV6, LINKLOCAL ADDRESS, NULL, CFSTRING },
     { SC_10_14_IPHONE_12_0_PRIVATE, NETPROP IPV6, PERFORM PLAT DISCOVERY, NULL, CFBOOLEAN },
     { COMMENT_PRIVATE, "", NULL, NULL, NULL },
     { COMMENT_PRIVATE,
@@ -971,11 +985,11 @@ static schemaDefinition names[] = {
     { SC_10_9_IPHONE_7_0_PRIVATE, NETPROP PPP, DISCONNECTONWAKE, NULL, CFNUMBER_BOOL },
     { SC_10_9_IPHONE_7_0_PRIVATE, NETPROP PPP, DISCONNECTONWAKETIMER, NULL, CFNUMBER },
     { SC_10_3, NETPROP PPP, DISCONNECTTIME, NULL, CFNUMBER },
-    { SC_10_1, NETPROP PPP, IDLEREMINDERTIMER, NULL, CFNUMBER },
-    { SC_10_1, NETPROP PPP, IDLEREMINDER, NULL, CFNUMBER_BOOL },
+    { SC_10_1, NETPROP PPP, IDLE REMINDER, NULL, CFNUMBER_BOOL },
+    { SC_10_1, NETPROP PPP, IDLE REMINDER TIMER, NULL, CFNUMBER },
     { SC_10_2, NETPROP PPP, LAST CAUSE, NULL, CFNUMBER },
     { SC_10_1, NETPROP PPP, LOGFILE, NULL, CFSTRING },
-    { SC_10_2, NETPROP PPP, PLUGINS, NULL, CFARRAY_CFSTRING },
+    { SC_10_2_10_15, NETPROP PPP, PLUGINS, NULL, CFARRAY_CFSTRING },
     { SC_10_3, NETPROP PPP, RETRYCONNECTTIME, NULL, CFNUMBER },
     { SC_10_1, NETPROP PPP, SESSIONTIMER, NULL, CFNUMBER },
     { SC_10_2, NETPROP PPP, STATUS, NULL, CFNUMBER },
@@ -984,7 +998,7 @@ static schemaDefinition names[] = {
     { COMMENT, "", NULL, NULL, NULL },
 
     { COMMENT, "--- " AUTH ": ---", NULL, NULL, NULL },
-    { SC_10_3, NETPROP PPP, AUTH EAP PLUGINS, NULL, CFARRAY_CFSTRING },
+    { SC_10_3_10_15, NETPROP PPP, AUTH EAP PLUGINS, NULL, CFARRAY_CFSTRING },
     { SC_10_1, NETPROP PPP, AUTH NAME, NULL, CFSTRING },
     { SC_10_1, NETPROP PPP, AUTH PASSWORD, NULL, CFSTRING },
     { SC_10_1, NETPROP PPP, AUTH PASSWORD ENCRYPTION, NULL, CFSTRING },
@@ -1435,9 +1449,15 @@ print_headerdoc(schemaDefinition *def)
            case SC_10_2_10_13:
                printf("  API_DEPRECATED(\"No longer supported\", macos(10.2,10.13)) SPI_AVAILABLE(ios(2.0), tvos(9.0), watchos(1.0), bridgeos(1.0));\n");
                break;
+           case SC_10_2_10_15:
+               printf("  API_DEPRECATED(\"No longer supported\", macos(10.2,10.15)) SPI_AVAILABLE(ios(2.0), tvos(9.0), watchos(1.0), bridgeos(1.0));\n");
+               break;
            case SC_10_3_10_9:
                printf("  API_DEPRECATED(\"No longer supported\", macos(10.3,10.9)) SPI_AVAILABLE(ios(2.0), tvos(9.0), watchos(1.0), bridgeos(1.0));\n");
                break;
+           case SC_10_3_10_15:
+               printf("  API_DEPRECATED(\"No longer supported\", macos(10.3,10.15)) SPI_AVAILABLE(ios(2.0), tvos(9.0), watchos(1.0), bridgeos(1.0));\n");
+               break;
            case SC_10_4_10_9:
                printf("  API_DEPRECATED(\"No longer supported\", macos(10.4,10.9)) SPI_AVAILABLE(ios(2.0), tvos(9.0), watchos(1.0), bridgeos(1.0));\n");
                break;
@@ -1485,16 +1505,19 @@ print_headerdoc(schemaDefinition *def)
                printf("  API_AVAILABLE(macos(10.11)) SPI_AVAILABLE(ios(9.0), tvos(9.0), watchos(2.0), bridgeos(2.0));\n");
                break;
            case SC_10_12_IPHONE_10_0_PRIVATE:
-               printf("  API_AVAILABLE(macos(10.12)) SPI_AVAILABLE(ios(10.0), tvos(10.0), watchos(3.0), bridgeos(3.0));\n");
+               printf("  API_AVAILABLE(macos(10.12)) SPI_AVAILABLE(ios(10.0), tvos(10.0), watchos(3.0), bridgeos(2.0));\n");
                break;
            case SC_10_13_IPHONE_10_0_PRIVATE:
-               printf("  API_AVAILABLE(macos(10.13)) SPI_AVAILABLE(ios(10.0), tvos(10.0), watchos(3.0), bridgeos(3.0));\n");
+               printf("  API_AVAILABLE(macos(10.13)) SPI_AVAILABLE(ios(10.0), tvos(10.0), watchos(3.0), bridgeos(2.0));\n");
                break;
            case SC_10_13_IPHONE_11_0_PRIVATE:
-               printf("  API_AVAILABLE(macos(10.13)) SPI_AVAILABLE(ios(11.0), tvos(11.0), watchos(4.0), bridgeos(4.0));\n");
+               printf("  API_AVAILABLE(macos(10.13)) SPI_AVAILABLE(ios(11.0), tvos(11.0), watchos(4.0), bridgeos(2.0));\n");
                break;
            case SC_10_14_IPHONE_12_0_PRIVATE:
-               printf("  API_AVAILABLE(macos(10.14)) SPI_AVAILABLE(ios(12.0), tvos(12.0), watchos(5.0), bridgeos(5.0));\n");
+               printf("  API_AVAILABLE(macos(10.14)) SPI_AVAILABLE(ios(12.0), tvos(12.0), watchos(5.0), bridgeos(3.0));\n");
+               break;
+           case SC_10_15_IPHONE_13_0_PRIVATE:
+               printf("  API_AVAILABLE(macos(10.15)) SPI_AVAILABLE(ios(13.0), tvos(13.0), watchos(6.0), bridgeos(4.0));\n");
                break;
            case SC_IPHONE_2_0_PRIVATE:
                printf("  SPI_AVAILABLE(macos(10.6), ios(2.0), tvos(9.0), watchos(1.0), bridgeos(1.0));\n");
@@ -1662,7 +1685,9 @@ dump_names(int type)
                            case SC_10_1_10_9:
                            case SC_10_2_10_9:
                            case SC_10_2_10_13:
+                           case SC_10_2_10_15:
                            case SC_10_3_10_9:
+                           case SC_10_3_10_15:
                            case SC_10_4_10_9:
                                // don't report deprecated keys
                                break;
@@ -1681,6 +1706,7 @@ dump_names(int type)
                            case SC_10_13_IPHONE_10_0_PRIVATE:
                            case SC_10_13_IPHONE_11_0_PRIVATE:
                            case SC_10_14_IPHONE_12_0_PRIVATE:
+                           case SC_10_15_IPHONE_13_0_PRIVATE:
                            case SC_IPHONE_2_0_PRIVATE:
                            case SC_IPHONE_7_0_PRIVATE:
                            case SC_IPHONE_8_0_PRIVATE:
@@ -1698,7 +1724,9 @@ dump_names(int type)
                            case SC_10_1_10_9:
                            case SC_10_2_10_9:
                            case SC_10_2_10_13:
+                           case SC_10_2_10_15:
                            case SC_10_3_10_9:
+                           case SC_10_3_10_15:
                            case SC_10_4_10_9:
                                // don't report deprecated keys
                                break;
@@ -1717,6 +1745,7 @@ dump_names(int type)
                            case SC_10_13_IPHONE_10_0_PRIVATE:
                            case SC_10_13_IPHONE_11_0_PRIVATE:
                            case SC_10_14_IPHONE_12_0_PRIVATE:
+                           case SC_10_15_IPHONE_13_0_PRIVATE:
                            case SC_IPHONE_2_0_PRIVATE:
                            case SC_IPHONE_7_0_PRIVATE:
                            case SC_IPHONE_8_0_PRIVATE:
@@ -1746,6 +1775,7 @@ dump_names(int type)
                            case SC_10_13_IPHONE_10_0_PRIVATE:
                            case SC_10_13_IPHONE_11_0_PRIVATE:
                            case SC_10_14_IPHONE_12_0_PRIVATE:
+                           case SC_10_15_IPHONE_13_0_PRIVATE:
                            case SC_IPHONE_2_0_PRIVATE:
                            case SC_IPHONE_7_0_PRIVATE:
                            case SC_IPHONE_8_0_PRIVATE:
@@ -1773,6 +1803,7 @@ dump_names(int type)
                            case SC_10_13_IPHONE_10_0_PRIVATE:
                            case SC_10_13_IPHONE_11_0_PRIVATE:
                            case SC_10_14_IPHONE_12_0_PRIVATE:
+                           case SC_10_15_IPHONE_13_0_PRIVATE:
                            case SC_IPHONE_2_0_PRIVATE:
                            case SC_IPHONE_7_0_PRIVATE:
                            case SC_IPHONE_8_0_PRIVATE:
@@ -1873,7 +1904,6 @@ main(int argc, char * argv[])
        printf(" * DO NOT EDIT!\n");
        printf(" */\n");
        printf("\n");
-       printf("#include <os/availability.h>\n");
        printf("#include <TargetConditionals.h>\n");
        printf("#include <CoreFoundation/CFString.h>\n");
        printf("\n");
index e259b8dff382d94d01ce97bcfeea55107d38329e..0418706ea30aaa965b39a067fdd68bdb59ad8bcc 100644 (file)
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2005-2008, 2010, 2011, 2013, 2015, 2016, 2018 Apple Inc. All rights reserved.
+ * Copyright (c) 2005-2008, 2010, 2011, 2013, 2015, 2016, 2018, 2019 Apple Inc. All rights reserved.
  *
  * @APPLE_LICENSE_HEADER_START@
  *
@@ -55,22 +55,6 @@ static pthread_mutex_t       _helper_lock            = PTHREAD_MUTEX_INITIALIZER;
 static mach_port_t     _helper_server          = MACH_PORT_NULL;
 
 
-static os_activity_t
-__SCHelperActivity()
-{
-       static os_activity_t    activity        = NULL;
-       static dispatch_once_t  once;
-
-       dispatch_once(&once, ^{
-               activity = os_activity_create("accessing SCPreferences [helper]",
-                                             OS_ACTIVITY_CURRENT,
-                                             OS_ACTIVITY_FLAG_DEFAULT);
-       });
-
-       return activity;
-}
-
-
 static mach_port_t
 __SCHelperServerPort(kern_return_t *status)
 {
@@ -129,8 +113,6 @@ _SCHelperOpen(CFDataRef authorizationData, mach_port_t *helper_port)
        server = _helper_server;
        while (TRUE) {
                if (server != MACH_PORT_NULL) {
-                       os_activity_scope(__SCHelperActivity());
-
                        kr = helperinit(server,
                                        helper_port,
                                        &status);
@@ -263,8 +245,6 @@ _SCHelperExec(mach_port_t port, uint32_t msgID, CFDataRef data, uint32_t *status
 
        traceData = _SCHelperExecCopyBacktrace();
 
-       os_activity_scope(__SCHelperActivity());
-
        kr = helperexec(port,
                        msgID,
                        (data != NULL) ? (void *)CFDataGetBytePtr(data) : NULL,
index 10a21ed2094636e28be0c3b2fd35b14abd88e250..f7ded0e126ffc84af0176ac4ff2c128e648c4061 100644 (file)
@@ -38,7 +38,7 @@
 #include <Security/Security.h>
 #include <Security/SecTask.h>
 
-#define SC_LOG_HANDLE          __log_SCHelper()
+#define SC_LOG_HANDLE          __log_SCHelper
 #define SC_LOG_HANDLE_TYPE     static
 #include "SCPreferencesInternal.h"
 #include "SCHelper_client.h"
index 88657e15b85d68d6d4be7583927827aca1937cc7..fb1e9ba282bebcf9663d269438cde2a73a159f81 100755 (executable)
@@ -1,11 +1,11 @@
 #!/bin/sh
 
-if [ -z "${INSTALL_DIR}" -o -z "${PRIVATE_HEADERS_FOLDER_PATH}" ]; then
-       echo "Cannot update headers, missing ENV vars"
+if [ $# -lt 1 ]; then
+       echo "Cannot update headers, private header directory not specified"
        exit 1
 fi
 
-SPI_BASE="${INSTALL_DIR}/${PRIVATE_HEADERS_FOLDER_PATH}"
+SPI_BASE="${1}"
 
 for H in                               \
        DHCPClientPreferences.h         \
index b3a708a02051c1778bf79e50f571be0518661ef2..74369faa01e1d419958b4c2e44f88f29b8ba3ec2 100644 (file)
@@ -30,9 +30,9 @@
 #include <sys/stat.h>
 
 #ifndef        SC_LOG_HANDLE
-#define SC_LOG_HANDLE  __log_SCPreferences()
+#define SC_LOG_HANDLE  __log_SCPreferences
 #endif //SC_LOG_HANDLE
-os_log_t       SC_LOG_HANDLE;
+os_log_t       SC_LOG_HANDLE(void);
 
 #include <SystemConfiguration/SCPrivate.h>
 #include <SystemConfiguration/scprefs_observer.h>
@@ -53,7 +53,7 @@ os_log_t      SC_LOG_HANDLE;
 
 static void
 iterate_dir(const char *d_name, const char *f_name,
-           CC_SHA1_CTX *ctxP, Boolean *found)
+           CC_SHA256_CTX *ctxP, Boolean *found)
 {
        DIR *dir;
        struct dirent * dp;
@@ -86,8 +86,8 @@ iterate_dir(const char *d_name, const char *f_name,
                                 * the path and last modification time in
                                 * the digest
                                */
-                               CC_SHA1_Update(ctxP, full_path, (CC_LONG)strlen(full_path));
-                               CC_SHA1_Update(ctxP,
+                               CC_SHA256_Update(ctxP, full_path, (CC_LONG)strlen(full_path));
+                               CC_SHA256_Update(ctxP,
                                               (void *)&s.st_mtimespec.tv_sec,
                                               sizeof(s.st_mtimespec.tv_sec));
                                *found = TRUE;
@@ -101,14 +101,14 @@ iterate_dir(const char *d_name, const char *f_name,
 static CF_RETURNS_RETAINED CFDataRef
 build_digest(const char *top_dir, const char *file)
 {
-       unsigned char   bytes[CC_SHA1_DIGEST_LENGTH];
-       CC_SHA1_CTX     ctx;
+       unsigned char   bytes[CC_SHA256_DIGEST_LENGTH];
+       CC_SHA256_CTX   ctx;
        CFDataRef       digest = NULL;
        Boolean         found = FALSE;
 
-       CC_SHA1_Init(&ctx);
+       CC_SHA256_Init(&ctx);
        iterate_dir(top_dir, file, &ctx, &found);
-       CC_SHA1_Final(bytes, &ctx);
+       CC_SHA256_Final(bytes, &ctx);
        if (found) {
                digest = CFDataCreate(NULL, bytes, sizeof(bytes));
        }
@@ -170,9 +170,10 @@ has_changed(scprefs_observer_t  observer) {
 
        observer->digest = digest;
 
-       SC_log(LOG_INFO, "preferences file: \"%s\", %s",
+       SC_log(changed ? LOG_INFO : LOG_DEBUG,
+              "preferences file: \"%s\" %s",
               observer->file,
-              changed ? "has changed" : "has not changed");
+              changed ? "changed" : "did not change");
        return changed;
 }
 
@@ -200,11 +201,10 @@ prefs_observer_handle_notifications()
 {
        scprefs_observer_t observer;
 
-       SC_log(LOG_INFO, "PrefsObserver notification received");
+       SC_log(LOG_DEBUG, "PrefsObserver notification received");
 
        SLIST_FOREACH(observer, &head, next) {
-               /* if the preferences plist has changed,
-                * called the block */
+               /* if the preferences plist changed, call the block */
                if (has_changed(observer)) {
                        dispatch_async(observer->queue, observer->block);
                }
@@ -245,7 +245,7 @@ prefs_observer_priv_create(_scprefs_observer_type type,
        path_buflen = strlen(plist_name) + 1;
 
        observer = (scprefs_observer_t)malloc(sizeof(struct _scprefs_observer_t) + path_buflen);
-       bzero((void *)observer, sizeof(struct _scprefs_observer_t));
+       memset((void *)observer, 0, sizeof(struct _scprefs_observer_t));
 
        /* Create the observer */
        observer->type = type;
index e9e4940ebb6fe4fc2d2f617cc34963be04bdab26..eedd1ec757badecad93234c2da469e25a43dbf7d 100644 (file)
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2000, 2001, 2003-2005, 2009, 2011, 2012, 2015-2017 Apple Inc. All rights reserved.
+ * Copyright (c) 2000, 2001, 2003-2005, 2009, 2011, 2012, 2015-2019 Apple Inc. All rights reserved.
  *
  * @APPLE_LICENSE_HEADER_START@
  *
@@ -39,8 +39,6 @@
 #include "session.h"
 
 
-__private_extern__ CFMutableDictionaryRef      sessionData             = NULL;
-
 __private_extern__ CFMutableDictionaryRef      storeData               = NULL;
 
 __private_extern__ CFMutableDictionaryRef      patternData             = NULL;
@@ -267,11 +265,6 @@ pushNotifications(void)
                 */
                if ((storePrivate->notifyStatus == Using_NotifierInformViaMachPort) &&
                    (storePrivate->notifyPort != MACH_PORT_NULL)) {
-                       /*
-                        * Associate notification activity with the client
-                        */
-                       os_activity_scope(theSession->activity);
-
                        /*
                         * Post notification as mach message
                         */
@@ -291,11 +284,6 @@ pushNotifications(void)
                    (storePrivate->notifyFile >= 0)) {
                        ssize_t         written;
 
-                       /*
-                        * Associate notification activity with the client
-                        */
-                       os_activity_scope(theSession->activity);
-
                        SC_trace("-->fd   : %5d : fd = %d, msgid = %d",
                                 storePrivate->server,
                                 storePrivate->notifyFile,
@@ -323,54 +311,6 @@ pushNotifications(void)
                                storePrivate->notifyFile = -1;
                        }
                }
-
-               if ((storePrivate->notifyStatus == Using_NotifierInformViaSignal) &&
-                   (storePrivate->notifySignal > 0)) {
-                       kern_return_t   status;
-                       pid_t           pid;
-
-                       /*
-                        * Associate notification activity with the client
-                        */
-                       os_activity_scope(theSession->activity);
-
-                       /*
-                        * Post notification as signal
-                        */
-                       status = pid_for_task(storePrivate->notifySignalTask, &pid);
-                       if (status == KERN_SUCCESS) {
-                               SC_trace("-->sig  : %5d : pid = %d, signal = sig%s (%d)",
-                                        storePrivate->server,
-                                        pid,
-                                        sys_signame[storePrivate->notifySignal],
-                                        storePrivate->notifySignal);
-
-                               if (kill(pid, storePrivate->notifySignal) != 0) {
-                                       if (errno != ESRCH) {
-                                               SC_log(LOG_NOTICE, "could not send sig%s to PID %d: %s",
-                                                      sys_signame[storePrivate->notifySignal],
-                                                      pid,
-                                                      strerror(errno));
-                                       }
-                               }
-                       } else {
-                               mach_port_type_t        pt;
-
-                               __MACH_PORT_DEBUG(TRUE, "*** pushNotifications pid_for_task failed: releasing task", storePrivate->notifySignalTask);
-                               if (mach_port_type(mach_task_self(), storePrivate->notifySignalTask, &pt) == KERN_SUCCESS) {
-                                       if ((pt & MACH_PORT_TYPE_DEAD_NAME) != 0) {
-                                               SC_log(LOG_NOTICE, "pid_for_task() failed: %s", mach_error_string(status));
-                                       }
-                               } else {
-                                       SC_log(LOG_NOTICE, "mach_port_type() failed: %s", mach_error_string(status));
-                               }
-
-                               /* don't bother with any more attempts */
-                               (void) mach_port_deallocate(mach_task_self(), storePrivate->notifySignalTask);
-                               storePrivate->notifySignal     = 0;
-                               storePrivate->notifySignalTask = TASK_NULL;
-                       }
-              }
        }
        if (sessionsToNotify != sessionsToNotify_q) CFAllocatorDeallocate(NULL, sessionsToNotify);
 
index 8263ed29c9006084739b3836ebd81eb03f59d998..3325c4f94b01c96e84aba7e061c4997e7c66a6e6 100644 (file)
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2000, 2001, 2003, 2004, 2006, 2009, 2011, 2015, 2016 Apple Inc. All rights reserved.
+ * Copyright (c) 2000, 2001, 2003, 2004, 2006, 2009, 2011, 2015, 2016, 2018, 2019 Apple Inc. All rights reserved.
  *
  * @APPLE_LICENSE_HEADER_START@
  *
 #define        kSCDSession     CFSTR("session")
 
 
-/*
- * keys in the "sessionData" dictionary
- */
-
-/*
- * the name of the calling application / plug-in
- */
-#define        kSCDName        CFSTR("name")
-/*
- * keys which have changed since last call to SCDNotifierGetChanges()
- */
-#define        kSCDChangedKeys CFSTR("changedKeys")
-/*
- * keys which are to be removed when the session is closed
- */
-#define        kSCDSessionKeys CFSTR("sessionKeys")
-
-
 extern CFMutableDictionaryRef  storeData;
-extern CFMutableDictionaryRef  sessionData;
 extern CFMutableDictionaryRef  patternData;
 extern CFMutableSetRef         changedKeys;
 extern CFMutableSetRef         deferredRemovals;
@@ -174,11 +155,6 @@ __SCDynamicStoreNotifyMachPort             (SCDynamicStoreRef      store,
 int
 __SCDynamicStoreNotifyFileDescriptor   (SCDynamicStoreRef      store);
 
-int
-__SCDynamicStoreNotifySignal           (SCDynamicStoreRef      store,
-                                        pid_t                  pid,
-                                        int                    sig);
-
 int
 __SCDynamicStoreNotifyCancel           (SCDynamicStoreRef      store);
 
@@ -195,4 +171,4 @@ pushNotifications                   (void);
 
 __END_DECLS
 
-#endif /* !_S_SCD_H */
+#endif /* !_S_SCD_H */
index c66bede0776459d8a1e0c9c5a5750be5fcfcb269..b43e1974cdce7cf6fc2395c667ccc840c55e45f0 100644 (file)
@@ -104,7 +104,6 @@ _configadd(mach_port_t                      server,
        /* un-serialize the key */
        if (!_SCUnserializeString(&key, NULL, (void *)keyRef, keyLen)) {
                *sc_status = kSCStatusFailed;
-               goto done;
        }
 
        /* un-serialize the data */
index 425e3647af88e0d885bfe8a2a110673db47d26fc..c739e4bd2ea58ff5bff05466b8894b8ba59fae55 100644 (file)
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2000, 2001, 2003, 2004, 2006-2012, 2015, 2016 Apple Inc. All rights reserved.
+ * Copyright (c) 2000, 2001, 2003, 2004, 2006-2012, 2015, 2016, 2019 Apple Inc. All rights reserved.
  *
  * @APPLE_LICENSE_HEADER_START@
  *
@@ -94,11 +94,7 @@ __private_extern__
 int
 __SCDynamicStoreClose(SCDynamicStoreRef *store)
 {
-       CFDictionaryRef                 dict;
-       CFArrayRef                      keys;
-       CFIndex                         keyCnt;
        serverSessionRef                mySession;
-       CFStringRef                     sessionKey;
        SCDynamicStorePrivateRef        storePrivate = (SCDynamicStorePrivateRef)*store;
 
        SC_trace("close   : %5d",
@@ -113,47 +109,31 @@ __SCDynamicStoreClose(SCDynamicStoreRef *store)
        (void) __SCDynamicStoreNotifyCancel(*store);
 
        /* Remove any session keys */
-       sessionKey = CFStringCreateWithFormat(NULL, NULL, CFSTR("%d"), storePrivate->server);
-       dict = CFDictionaryGetValue(sessionData, sessionKey);
-       keys = CFDictionaryGetValue(dict, kSCDSessionKeys);
-       if (keys && ((keyCnt = CFArrayGetCount(keys)) > 0)) {
-               CFIndex i;
-               Boolean push    = FALSE;
-
-               /* remove session keys */
-               for (i = 0; i < keyCnt; i++) {
-                       if (isMySessionKey(sessionKey, CFArrayGetValueAtIndex(keys, i))) {
-                               (void) __SCDynamicStoreRemoveValue(*store, CFArrayGetValueAtIndex(keys, i), TRUE);
+       mySession = getSession(storePrivate->server);
+       if (mySession->sessionKeys != NULL) {
+               CFIndex         n       = CFArrayGetCount(mySession->sessionKeys);
+               Boolean         push    = FALSE;
+               CFStringRef     sessionKey;
+
+               sessionKey = CFStringCreateWithFormat(NULL, NULL, CFSTR("%d"), storePrivate->server);
+               for (CFIndex i = 0; i < n; i++) {
+                       CFStringRef     key     = CFArrayGetValueAtIndex(mySession->sessionKeys, i);
+
+                       if (isMySessionKey(sessionKey, key)) {
+                               (void) __SCDynamicStoreRemoveValue(*store, key, TRUE);
                                push = TRUE;
                        }
                }
+               CFRelease(sessionKey);
 
                if (push) {
                        /* push changes */
                        (void) __SCDynamicStorePush();
                }
        }
-       CFRelease(sessionKey);
-
-       /*
-        * invalidate and release our run loop source on the server
-        * port (for this client).  Then, release the port.
-        */
-       mySession = getSession(storePrivate->server);
-       assert(mySession != NULL);
-
-       if (mySession->serverRunLoopSource) {
-               CFRunLoopSourceInvalidate(mySession->serverRunLoopSource);
-               CFRelease(mySession->serverRunLoopSource);
-               mySession->serverRunLoopSource = NULL;
-       }
-       if (mySession->serverPort != NULL) {
-               CFMachPortInvalidate(mySession->serverPort);
-               CFRelease(mySession->serverPort);
-               mySession->serverPort = NULL;
-       }
 
        storePrivate->server = MACH_PORT_NULL;
+
        CFRelease(*store);
        *store = NULL;
 
index f4a2500bb7fa64435f6a878a5ec81a79dfddfbb0..dad6bc6f778556957994aa9c86b4dc7331171ebc 100644 (file)
@@ -52,10 +52,6 @@ __SCDynamicStoreOpen(SCDynamicStoreRef *store, CFStringRef name)
         * If necessary, initialize the store and session data dictionaries
         */
        if (storeData == NULL) {
-               sessionData        = CFDictionaryCreateMutable(NULL,
-                                                              0,
-                                                              &kCFTypeDictionaryKeyCallBacks,
-                                                              &kCFTypeDictionaryValueCallBacks);
                storeData          = CFDictionaryCreateMutable(NULL,
                                                               0,
                                                               &kCFTypeDictionaryKeyCallBacks,
@@ -79,14 +75,6 @@ __SCDynamicStoreOpen(SCDynamicStoreRef *store, CFStringRef name)
 }
 
 
-static CFStringRef
-openMPCopyDescription(const void *info)
-{
-#pragma unused(info)
-       return CFStringCreateWithFormat(NULL, NULL, CFSTR("<SCDynamicStore MP>"));
-}
-
-
 __private_extern__
 kern_return_t
 _configopen(mach_port_t                        server,
@@ -98,14 +86,9 @@ _configopen(mach_port_t                      server,
            int                         *sc_status,
            audit_token_t               audit_token)
 {
-       CFDictionaryRef                 info;
        serverSessionRef                mySession;
        CFStringRef                     name            = NULL; /* name (un-serialized) */
-       CFMutableDictionaryRef          newInfo;
-       mach_port_t                     oldNotify;
        CFDictionaryRef                 options         = NULL; /* options (un-serialized) */
-       CFStringRef                     sessionKey;
-       kern_return_t                   status;
        SCDynamicStorePrivateRef        storePrivate;
        CFBooleanRef                    useSessionKeys  = NULL;
 
@@ -154,7 +137,7 @@ _configopen(mach_port_t                     server,
        /*
         * establish the new session
         */
-       mySession = addSession(server, openMPCopyDescription);
+       mySession = addClient(server, audit_token);
        if (mySession == NULL) {
                SC_log(LOG_NOTICE, "session is already open");
                *sc_status = kSCStatusFailed;   /* you can't re-open an "open" session */
@@ -162,16 +145,7 @@ _configopen(mach_port_t                    server,
        }
 
        *newServer = mySession->key;
-       __MACH_PORT_DEBUG(TRUE, "*** _configopen (after addSession)", *newServer);
-
-       /* save the audit_token in case we need to check the callers credentials */
-       mySession->auditToken = audit_token;
-
-       /* Create and add a run loop source for the port */
-       mySession->serverRunLoopSource = CFMachPortCreateRunLoopSource(NULL, mySession->serverPort, 0);
-       CFRunLoopAddSource(CFRunLoopGetCurrent(),
-                          mySession->serverRunLoopSource,
-                          kCFRunLoopDefaultMode);
+       __MACH_PORT_DEBUG(TRUE, "*** _configopen (after addClient)", *newServer);
 
        SC_trace("open    : %5d : %@",
                 *newServer,
@@ -193,44 +167,10 @@ _configopen(mach_port_t                   server,
                storePrivate->useSessionKeys = CFBooleanGetValue(useSessionKeys);
        }
 
-       /* Request a notification when/if the client dies */
-       status = mach_port_request_notification(mach_task_self(),
-                                               *newServer,
-                                               MACH_NOTIFY_NO_SENDERS,
-                                               1,
-                                               *newServer,
-                                               MACH_MSG_TYPE_MAKE_SEND_ONCE,
-                                               &oldNotify);
-       if (status != KERN_SUCCESS) {
-               SC_log(LOG_NOTICE, "mach_port_request_notification() failed: %s", mach_error_string(status));
-               cleanupSession(*newServer);
-               *newServer = MACH_PORT_NULL;
-               *sc_status = kSCStatusFailed;
-               goto done;
-       }
-       __MACH_PORT_DEBUG(TRUE, "*** _configopen (after mach_port_request_notification)", *newServer);
-
-       if (oldNotify != MACH_PORT_NULL) {
-               SC_log(LOG_NOTICE, "oldNotify != MACH_PORT_NULL");
-       }
-
        /*
         * Save the name of the calling application / plug-in with the session data.
         */
-       sessionKey = CFStringCreateWithFormat(NULL, NULL, CFSTR("%d"), *newServer);
-       info = CFDictionaryGetValue(sessionData, sessionKey);
-       if (info != NULL) {
-               newInfo = CFDictionaryCreateMutableCopy(NULL, 0, info);
-       } else {
-               newInfo = CFDictionaryCreateMutable(NULL,
-                                                   0,
-                                                   &kCFTypeDictionaryKeyCallBacks,
-                                                   &kCFTypeDictionaryValueCallBacks);
-       }
-       CFDictionarySetValue(newInfo, kSCDName, name);
-       CFDictionarySetValue(sessionData, sessionKey, newInfo);
-       CFRelease(newInfo);
-       CFRelease(sessionKey);
+       mySession->name = name;
 
        /*
         * Note: at this time we should be holding ONE send right and
@@ -240,7 +180,6 @@ _configopen(mach_port_t                     server,
 
     done :
 
-       if (name != NULL)       CFRelease(name);
        if (options != NULL)    CFRelease(options);
        return KERN_SUCCESS;
 }
index 88706d049dc2bb9667937a9996ab1b12eac175ea..50ab03f604f6776bf21b36820f03aa439f58d186 100644 (file)
@@ -42,6 +42,7 @@ int
 __SCDynamicStoreSetValue(SCDynamicStoreRef store, CFStringRef key, CFDataRef value, Boolean internal)
 {
        CFDictionaryRef                 dict;
+       serverSessionRef                mySession;
        CFMutableDictionaryRef          newDict;
        Boolean                         newEntry        = FALSE;
        int                             sc_status       = kSCStatusOK;
@@ -77,46 +78,29 @@ __SCDynamicStoreSetValue(SCDynamicStoreRef store, CFStringRef key, CFDataRef val
        newEntry = !CFDictionaryContainsKey(newDict, kSCDData);
        CFDictionarySetValue(newDict, kSCDData, value);
 
-       sessionKey = CFStringCreateWithFormat(NULL, NULL, CFSTR("%d"), storePrivate->server);
-
        /*
         * Manage per-session keys.
         */
+       sessionKey = CFStringCreateWithFormat(NULL, NULL, CFSTR("%d"), storePrivate->server);
        if (storePrivate->useSessionKeys) {
                if (newEntry) {
-                       CFArrayRef              keys;
-                       CFMutableDictionaryRef  newSession;
-                       CFMutableArrayRef       newKeys;
-                       CFDictionaryRef         session;
-
                        /*
                         * Add this key to my list of per-session keys
                         */
-                       session = CFDictionaryGetValue(sessionData, sessionKey);
-                       keys = CFDictionaryGetValue(session, kSCDSessionKeys);
-                       if ((keys == NULL) ||
-                           (CFArrayGetFirstIndexOfValue(keys,
-                                                        CFRangeMake(0, CFArrayGetCount(keys)),
-                                                        key) == kCFNotFound)) {
+                       mySession = getSession(storePrivate->server);
+                       if ((mySession->sessionKeys == NULL) ||
+                           !CFArrayContainsValue(mySession->sessionKeys,
+                                                 CFRangeMake(0, CFArrayGetCount(mySession->sessionKeys)),
+                                                 key)) {
                                /*
                                 * if no session keys defined "or" keys defined but not
                                 * this one...
                                 */
-                               if (keys != NULL) {
-                                       /* this is the first session key */
-                                       newKeys = CFArrayCreateMutableCopy(NULL, 0, keys);
-                               } else {
+                               if (mySession->sessionKeys == NULL) {
                                        /* this is an additional session key */
-                                       newKeys = CFArrayCreateMutable(NULL, 0, &kCFTypeArrayCallBacks);
+                                       mySession->sessionKeys = CFArrayCreateMutable(NULL, 0, &kCFTypeArrayCallBacks);
                                }
-                               CFArrayAppendValue(newKeys, key);
-
-                               /* update session dictionary */
-                               newSession = CFDictionaryCreateMutableCopy(NULL, 0, session);
-                               CFDictionarySetValue(newSession, kSCDSessionKeys, newKeys);
-                               CFRelease(newKeys);
-                               CFDictionarySetValue(sessionData, sessionKey, newSession);
-                               CFRelease(newSession);
+                               CFArrayAppendValue(mySession->sessionKeys, key);
                        }
 
                        /*
@@ -161,7 +145,6 @@ __SCDynamicStoreSetValue(SCDynamicStoreRef store, CFStringRef key, CFDataRef val
                        CFRelease(removedKey);
                }
        }
-
        CFRelease(sessionKey);
 
        /*
index 4ccff66eb0d1c17bda3c35f778d20ac5e477c4c7..8cd91382871311de4bd9a656c8c6ae196411ebd5 100644 (file)
@@ -1,15 +1,15 @@
 /*
- * Copyright (c) 2000-2004, 2006, 2011, 2015, 2017 Apple Inc. All rights reserved.
+ * Copyright (c) 2000-2004, 2006, 2011, 2015, 2017, 2019 Apple Inc. All rights reserved.
  *
  * @APPLE_LICENSE_HEADER_START@
- * 
+ *
  * This file contains Original Code and/or Modifications of Original Code
  * as defined in and that are subject to the Apple Public Source License
  * Version 2.0 (the 'License'). You may not use this file except in
  * compliance with the License. Please obtain a copy of the License at
  * http://www.opensource.apple.com/apsl/ and read it before using this
  * file.
- * 
+ *
  * The Original Code and all software distributed under the License are
  * distributed on an 'AS IS' basis, WITHOUT WARRANTY OF ANY KIND, EITHER
  * EXPRESS OR IMPLIED, AND APPLE HEREBY DISCLAIMS ALL SUCH WARRANTIES,
@@ -17,7 +17,7 @@
  * FITNESS FOR A PARTICULAR PURPOSE, QUIET ENJOYMENT OR NON-INFRINGEMENT.
  * Please see the License for the specific language governing rights and
  * limitations under the License.
- * 
+ *
  * @APPLE_LICENSE_HEADER_END@
  */
 
@@ -58,17 +58,14 @@ _notifyWatchers()
        CFSetGetValues(changedKeys, keys);
 
        while (--keyCnt >= 0) {
-               CFArrayRef              changes;
+               CFStringRef             changedKey      = (CFStringRef)keys[keyCnt];
                CFDictionaryRef         dict;
-               CFDictionaryRef         info;
-               CFMutableDictionaryRef  newInfo;
-               CFMutableArrayRef       newChanges;
                CFArrayRef              sessionsWatchingKey;
                CFIndex                 watcherCnt;
                const void *            watchers_q[N_QUICK];
                const void **           watchers        = watchers_q;
 
-               dict = CFDictionaryGetValue(storeData, (CFStringRef)keys[keyCnt]);
+               dict = CFDictionaryGetValue(storeData, changedKey);
                if ((dict == NULL) || !CFDictionaryContainsKey(dict, kSCDWatchers)) {
                        /* key doesn't exist or nobody cares if it changed */
                        continue;
@@ -91,36 +88,18 @@ _notifyWatchers()
                CFArrayGetValues(sessionsWatchingKey, CFRangeMake(0, watcherCnt), watchers);
 
                while (--watcherCnt >= 0) {
-                       CFStringRef     sessionKey;
-
-                       sessionKey = CFStringCreateWithFormat(NULL, NULL, CFSTR("%@"), watchers[watcherCnt]);
-                       info = CFDictionaryGetValue(sessionData, sessionKey);
-                       if (info != NULL) {
-                               newInfo = CFDictionaryCreateMutableCopy(NULL, 0, info);
-                       } else {
-                               newInfo = CFDictionaryCreateMutable(NULL,
-                                                                   0,
-                                                                   &kCFTypeDictionaryKeyCallBacks,
-                                                                   &kCFTypeDictionaryValueCallBacks);
-                       }
+                       serverSessionRef        session;
+                       CFNumberRef             watchedSession  = watchers[watcherCnt];
 
-                       changes = CFDictionaryGetValue(newInfo, kSCDChangedKeys);
-                       if (changes) {
-                               newChanges = CFArrayCreateMutableCopy(NULL, 0, changes);
-                       } else {
-                               newChanges = CFArrayCreateMutable(NULL, 0, &kCFTypeArrayCallBacks);
+                       session = getSessionNum(watchedSession);
+                       if (session->changedKeys == NULL) {
+                               session->changedKeys = CFArrayCreateMutable(NULL, 0, &kCFTypeArrayCallBacks);
                        }
-
-                       if (!CFArrayContainsValue(newChanges,
-                                                 CFRangeMake(0, CFArrayGetCount(newChanges)),
-                                                 (CFStringRef)keys[keyCnt])) {
-                               CFArrayAppendValue(newChanges, (CFStringRef)keys[keyCnt]);
+                       if (!CFArrayContainsValue(session->changedKeys,
+                                                 CFRangeMake(0, CFArrayGetCount(session->changedKeys)),
+                                                 changedKey)) {
+                               CFArrayAppendValue(session->changedKeys, changedKey);
                        }
-                       CFDictionarySetValue(newInfo, kSCDChangedKeys, newChanges);
-                       CFRelease(newChanges);
-                       CFDictionarySetValue(sessionData, sessionKey, newInfo);
-                       CFRelease(newInfo);
-                       CFRelease(sessionKey);
 
                        /*
                         * flag this session as needing a kick
@@ -129,7 +108,7 @@ _notifyWatchers()
                                needsNotification = CFSetCreateMutable(NULL,
                                                                       0,
                                                                       &kCFTypeSetCallBacks);
-                       CFSetAddValue(needsNotification, watchers[watcherCnt]);
+                       CFSetAddValue(needsNotification, watchedSession);
                }
 
                if (watchers != watchers_q) CFAllocatorDeallocate(NULL, watchers);
@@ -185,12 +164,10 @@ _cleanupRemovedSessionKeys(const void *value, void *context)
 #pragma unused(context)
        CFStringRef             removedKey = (CFStringRef)value;
        CFRange                 dRange;
+       serverSessionRef        session;
        CFStringRef             sessionKey;
        CFStringRef             key;
-       CFDictionaryRef         sessionDict;
-       CFArrayRef              sessionKeys;
        CFIndex                 i;
-       CFMutableDictionaryRef  newSessionDict;
 
        dRange     = CFStringFind(removedKey, CFSTR(":"), 0);
        sessionKey = CFStringCreateWithSubstring(NULL,
@@ -201,44 +178,24 @@ _cleanupRemovedSessionKeys(const void *value, void *context)
                                                 CFRangeMake(dRange.location+dRange.length,
                                                             CFStringGetLength(removedKey)-dRange.location-dRange.length));
 
-       /*
-        * remove the key from the session key list
-        */
-       sessionDict = CFDictionaryGetValue(sessionData, sessionKey);
-       if (!sessionDict) {
+       session = getSessionStr(sessionKey);
+       if (session == NULL) {
                /* if no session */
                goto done;
        }
 
-       sessionKeys = CFDictionaryGetValue(sessionDict, kSCDSessionKeys);
-       if (!sessionKeys) {
-               /* if no session keys */
-               goto done;
-       }
-
-       i = CFArrayGetFirstIndexOfValue(sessionKeys,
-                                       CFRangeMake(0, CFArrayGetCount(sessionKeys)),
+       i = CFArrayGetFirstIndexOfValue(session->sessionKeys,
+                                       CFRangeMake(0, CFArrayGetCount(session->sessionKeys)),
                                        key);
        if (i == kCFNotFound) {
                /* if this session key has already been removed */
                goto done;
        }
-
-       newSessionDict = CFDictionaryCreateMutableCopy(NULL, 0, sessionDict);
-       if (CFArrayGetCount(sessionKeys) == 1) {
-               /* remove the last (session) key */
-               CFDictionaryRemoveValue(newSessionDict, kSCDSessionKeys);
-       } else {
-               CFMutableArrayRef       newSessionKeys;
-
-               /* remove the (session) key */
-               newSessionKeys = CFArrayCreateMutableCopy(NULL, 0, sessionKeys);
-               CFArrayRemoveValueAtIndex(newSessionKeys, i);
-               CFDictionarySetValue(newSessionDict, kSCDSessionKeys, newSessionKeys);
-               CFRelease(newSessionKeys);
+       CFArrayRemoveValueAtIndex(session->sessionKeys, i);
+       if (CFArrayGetCount(session->sessionKeys) == 0) {
+               CFRelease(session->sessionKeys);
+               session->sessionKeys = NULL;
        }
-       CFDictionarySetValue(sessionData, sessionKey, newSessionDict);
-       CFRelease(newSessionDict);
 
     done:
 
index 36311c75fbde5b5233ba87dd2991d7b33693b271..1d4c727f52dc09c7c6ec85876080cb02fdb0866c 100644 (file)
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2000, 2001, 2003-2006, 2009 Apple Inc. All rights reserved.
+ * Copyright (c) 2000, 2001, 2003-2006, 2009, 2018 Apple Inc. All rights reserved.
  *
  * @APPLE_LICENSE_HEADER_START@
  * 
@@ -61,16 +61,6 @@ __SCDynamicStoreNotifyCancel(SCDynamicStoreRef store)
                storePrivate->notifyFile = -1;
        }
 
-       /*
-        * cleanup any signal notifications.
-        */
-       if (storePrivate->notifySignal > 0) {
-               __MACH_PORT_DEBUG(TRUE, "*** __SCDynamicStoreNotifyCancel (signal)", storePrivate->notifySignalTask);
-               (void) mach_port_deallocate(mach_task_self(), storePrivate->notifySignalTask);
-               storePrivate->notifySignal     = 0;
-               storePrivate->notifySignalTask = TASK_NULL;
-       }
-
        /* remove this session from the to-be-notified list */
        if (needsNotification) {
                CFNumberRef     num;
index 5bc426857f37a266327cb300b9b867c39961d2ca..31f64c7516ed5246d0fc01b8a69ec9c0dae0b9f3 100644 (file)
@@ -1,15 +1,15 @@
 /*
- * Copyright (c) 2000-2004, 2006, 2011, 2013, 2015 Apple Inc. All rights reserved.
+ * Copyright (c) 2000-2004, 2006, 2011, 2013, 2015, 2019 Apple Inc. All rights reserved.
  *
  * @APPLE_LICENSE_HEADER_START@
- * 
+ *
  * This file contains Original Code and/or Modifications of Original Code
  * as defined in and that are subject to the Apple Public Source License
  * Version 2.0 (the 'License'). You may not use this file except in
  * compliance with the License. Please obtain a copy of the License at
  * http://www.opensource.apple.com/apsl/ and read it before using this
  * file.
- * 
+ *
  * The Original Code and all software distributed under the License are
  * distributed on an 'AS IS' basis, WITHOUT WARRANTY OF ANY KIND, EITHER
  * EXPRESS OR IMPLIED, AND APPLE HEREBY DISCLAIMS ALL SUCH WARRANTIES,
@@ -17,7 +17,7 @@
  * FITNESS FOR A PARTICULAR PURPOSE, QUIET ENJOYMENT OR NON-INFRINGEMENT.
  * Please see the License for the specific language governing rights and
  * limitations under the License.
- * 
+ *
  * @APPLE_LICENSE_HEADER_END@
  */
 
@@ -38,32 +38,16 @@ __private_extern__
 int
 __SCDynamicStoreCopyNotifiedKeys(SCDynamicStoreRef store, CFArrayRef *notifierKeys)
 {
+       serverSessionRef                mySession;
        SCDynamicStorePrivateRef        storePrivate = (SCDynamicStorePrivateRef)store;
-       CFStringRef                     sessionKey;
-       CFDictionaryRef                 info;
-       CFMutableDictionaryRef          newInfo;
-
-       sessionKey = CFStringCreateWithFormat(NULL, NULL, CFSTR("%d"), storePrivate->server);
-       info = CFDictionaryGetValue(sessionData, sessionKey);
-       if ((info == NULL) ||
-           !CFDictionaryContainsKey(info, kSCDChangedKeys)) {
-               CFRelease(sessionKey);
-               *notifierKeys = CFArrayCreate(NULL, NULL, 0, &kCFTypeArrayCallBacks);
-               return kSCStatusOK;
-       }
-       newInfo = CFDictionaryCreateMutableCopy(NULL, 0, info);
 
-       *notifierKeys = CFDictionaryGetValue(newInfo, kSCDChangedKeys);
-       CFRetain(*notifierKeys);
-
-       CFDictionaryRemoveValue(newInfo, kSCDChangedKeys);
-       if (CFDictionaryGetCount(newInfo) > 0) {
-               CFDictionarySetValue(sessionData, sessionKey, newInfo);
+       mySession = getSession(storePrivate->server);
+       if (mySession->changedKeys != NULL) {
+               *notifierKeys = mySession->changedKeys;
+               mySession->changedKeys = NULL;
        } else {
-               CFDictionaryRemoveValue(sessionData, sessionKey);
+               *notifierKeys = CFArrayCreate(NULL, NULL, 0, &kCFTypeArrayCallBacks);
        }
-       CFRelease(newInfo);
-       CFRelease(sessionKey);
 
        return kSCStatusOK;
 }
index fbc7b003bab6a38ef82bb9210a7fdb138c7de10a..5001a67fd205bacf14ff91637532aaf324274a3e 100644 (file)
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2000, 2001, 2003-2006, 2008-2011, 2015 Apple Inc. All rights reserved.
+ * Copyright (c) 2000, 2001, 2003-2006, 2008-2011, 2015, 2019 Apple Inc. All rights reserved.
  *
  * @APPLE_LICENSE_HEADER_START@
  *
@@ -47,9 +47,8 @@ __private_extern__
 int
 __SCDynamicStoreNotifyFileDescriptor(SCDynamicStoreRef store)
 {
+       serverSessionRef                mySession;
        SCDynamicStorePrivateRef        storePrivate = (SCDynamicStorePrivateRef)store;
-       CFStringRef                     sessionKey;
-       CFDictionaryRef                 info;
 
        if (storePrivate->notifyStatus != NotifierNotRegistered) {
                /* sorry, you can only have one notification registered at once */
@@ -57,10 +56,8 @@ __SCDynamicStoreNotifyFileDescriptor(SCDynamicStoreRef       store)
        }
 
        /* push out a notification if any changes are pending */
-       sessionKey = CFStringCreateWithFormat(NULL, NULL, CFSTR("%d"), storePrivate->server);
-       info = CFDictionaryGetValue(sessionData, sessionKey);
-       CFRelease(sessionKey);
-       if (info && CFDictionaryContainsKey(info, kSCDChangedKeys)) {
+       mySession = getSession(storePrivate->server);
+       if (mySession->changedKeys != NULL) {
                CFNumberRef     sessionNum;
 
                if (needsNotification == NULL)
index 8c7e2192de52796568ea16aa4d98a7d87c3e18e1..e8740de99065d4b8c3a0e558a028f147ec33c8b6 100644 (file)
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2000, 2001, 2003, 2004, 2006, 2009, 2011, 2015 Apple Inc. All rights reserved.
+ * Copyright (c) 2000, 2001, 2003, 2004, 2006, 2009, 2011, 2015, 2019 Apple Inc. All rights reserved.
  *
  * @APPLE_LICENSE_HEADER_START@
  *
@@ -40,9 +40,8 @@ __SCDynamicStoreNotifyMachPort(SCDynamicStoreRef      store,
                               mach_msg_id_t            identifier,
                               mach_port_t              port)
 {
+       serverSessionRef                mySession;
        SCDynamicStorePrivateRef        storePrivate = (SCDynamicStorePrivateRef)store;
-       CFStringRef                     sessionKey;
-       CFDictionaryRef                 info;
 
        if (storePrivate->notifyStatus != NotifierNotRegistered) {
                /* sorry, you can only have one notification registered at once */
@@ -60,10 +59,8 @@ __SCDynamicStoreNotifyMachPort(SCDynamicStoreRef     store,
        }
 
        /* push out a notification if any changes are pending */
-       sessionKey = CFStringCreateWithFormat(NULL, NULL, CFSTR("%d"), storePrivate->server);
-       info = CFDictionaryGetValue(sessionData, sessionKey);
-       CFRelease(sessionKey);
-       if (info && CFDictionaryContainsKey(info, kSCDChangedKeys)) {
+       mySession = getSession(storePrivate->server);
+       if (mySession->changedKeys != NULL) {
                CFNumberRef     sessionNum;
 
                if (needsNotification == NULL)
diff --git a/configd.tproj/_notifyviasignal.c b/configd.tproj/_notifyviasignal.c
deleted file mode 100644 (file)
index 9d15ce9..0000000
+++ /dev/null
@@ -1,134 +0,0 @@
-/*
- * Copyright (c) 2000-2004, 2006, 2009, 2011 Apple Inc. All rights reserved.
- *
- * @APPLE_LICENSE_HEADER_START@
- * 
- * This file contains Original Code and/or Modifications of Original Code
- * as defined in and that are subject to the Apple Public Source License
- * Version 2.0 (the 'License'). You may not use this file except in
- * compliance with the License. Please obtain a copy of the License at
- * http://www.opensource.apple.com/apsl/ and read it before using this
- * file.
- * 
- * The Original Code and all software distributed under the License are
- * distributed on an 'AS IS' basis, WITHOUT WARRANTY OF ANY KIND, EITHER
- * EXPRESS OR IMPLIED, AND APPLE HEREBY DISCLAIMS ALL SUCH WARRANTIES,
- * INCLUDING WITHOUT LIMITATION, ANY WARRANTIES OF MERCHANTABILITY,
- * FITNESS FOR A PARTICULAR PURPOSE, QUIET ENJOYMENT OR NON-INFRINGEMENT.
- * Please see the License for the specific language governing rights and
- * limitations under the License.
- * 
- * @APPLE_LICENSE_HEADER_END@
- */
-
-/*
- * Modification History
- *
- * June 1, 2001                        Allan Nathanson <ajn@apple.com>
- * - public API conversion
- *
- * March 24, 2000              Allan Nathanson <ajn@apple.com>
- * - initial revision
- */
-
-#include <unistd.h>
-#include <sys/types.h>
-
-#include "configd.h"
-#include "configd_server.h"
-#include "session.h"
-
-__private_extern__
-int
-__SCDynamicStoreNotifySignal(SCDynamicStoreRef store, pid_t pid, int sig)
-{
-       SCDynamicStorePrivateRef        storePrivate = (SCDynamicStorePrivateRef)store;
-       CFStringRef                     sessionKey;
-       CFDictionaryRef                 info;
-
-       if (storePrivate->notifyStatus != NotifierNotRegistered) {
-               /* sorry, you can only have one notification registered at once */
-               return kSCStatusNotifierActive;
-       }
-
-       if (pid == getpid()) {
-               /* sorry, you can't request that configd be signalled */
-               return kSCStatusInvalidArgument;
-       }
-
-       if ((sig <= 0) || (sig > NSIG)) {
-               /* sorry, you must specify a valid signal */
-               return kSCStatusInvalidArgument;
-       }
-
-       /* push out a notification if any changes are pending */
-       sessionKey = CFStringCreateWithFormat(NULL, NULL, CFSTR("%d"), storePrivate->server);
-       info = CFDictionaryGetValue(sessionData, sessionKey);
-       CFRelease(sessionKey);
-       if (info && CFDictionaryContainsKey(info, kSCDChangedKeys)) {
-               CFNumberRef     sessionNum;
-
-               if (needsNotification == NULL)
-                       needsNotification = CFSetCreateMutable(NULL,
-                                                              0,
-                                                              &kCFTypeSetCallBacks);
-
-               sessionNum = CFNumberCreate(NULL, kCFNumberIntType, &storePrivate->server);
-               CFSetAddValue(needsNotification, sessionNum);
-               CFRelease(sessionNum);
-       }
-
-       return kSCStatusOK;
-}
-
-
-__private_extern__
-kern_return_t
-_notifyviasignal(mach_port_t   server,
-                task_t         task,
-                int            sig,
-                int            *sc_status)
-{
-       serverSessionRef                mySession  = getSession(server);
-       pid_t                           pid;
-       kern_return_t                   status;
-       SCDynamicStorePrivateRef        storePrivate;
-
-       if (mySession == NULL) {
-               /* sorry, you must have an open session to play */
-               *sc_status = kSCStatusNoStoreSession;
-               if (task != TASK_NULL) {
-                       (void) mach_port_deallocate(mach_task_self(), task);
-               }
-               return KERN_SUCCESS;
-       }
-       storePrivate = (SCDynamicStorePrivateRef)mySession->store;
-
-       if (task != TASK_NULL) {
-               status = pid_for_task(task, &pid);
-               if (status != KERN_SUCCESS) {
-                       /* could not determine pid for task */
-                       *sc_status = kSCStatusFailed;
-                       (void) mach_port_deallocate(mach_task_self(), task);
-                       return KERN_SUCCESS;
-               }
-       } else {
-               /* sorry, you must specify a valid task */
-               *sc_status = kSCStatusInvalidArgument;
-               return KERN_SUCCESS;
-       }
-
-       *sc_status = __SCDynamicStoreNotifySignal(mySession->store, pid, sig);
-       if (*sc_status != kSCStatusOK) {
-               __MACH_PORT_DEBUG(TRUE, "*** _notifyviasignal __SCDynamicStoreNotifySignal failed: releasing task)", task);
-               (void) mach_port_deallocate(mach_task_self(), task);
-               return KERN_SUCCESS;
-       }
-
-       __MACH_PORT_DEBUG(TRUE, "*** _notifyviasignal", task);
-       storePrivate->notifyStatus     = Using_NotifierInformViaSignal;
-       storePrivate->notifySignal     = sig;
-       storePrivate->notifySignalTask = task;
-
-       return KERN_SUCCESS;
-}
index 9c506a118a56d20080c97700d9b5872fa47ab0a7..5197780b015bbc4f65b5b78ca6ce3a4b057914e4 100644 (file)
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2000-2006, 2009-2011, 2015, 2018 Apple Inc. All rights reserved.
+ * Copyright (c) 2000-2006, 2009-2011, 2015, 2018, 2019 Apple Inc. All rights reserved.
  *
  * @APPLE_LICENSE_HEADER_START@
  *
@@ -44,7 +44,6 @@
 #define        SNAPSHOT_PATH_STATE     _PATH_VARTMP "configd-state"
 #define        SNAPSHOT_PATH_STORE     _PATH_VARTMP "configd-store.plist"
 #define        SNAPSHOT_PATH_PATTERN   _PATH_VARTMP "configd-pattern.plist"
-#define        SNAPSHOT_PATH_SESSION   _PATH_VARTMP "configd-session.plist"
 
 
 #define N_QUICK        100
@@ -70,7 +69,7 @@ _expandStore(CFDictionaryRef storeData)
                        oValues = CFAllocatorAllocate(NULL, nElements * sizeof(CFTypeRef), 0);
                        nValues = CFAllocatorAllocate(NULL, nElements * sizeof(CFTypeRef), 0);
                }
-               bzero(nValues, nElements * sizeof(CFTypeRef));
+               memset(nValues, 0, nElements * sizeof(CFTypeRef));
 
                CFDictionaryGetKeysAndValues(storeData, keys, oValues);
                for (i = 0; i < nElements; i++) {
@@ -190,24 +189,6 @@ __SCDynamicStoreSnapshot(SCDynamicStoreRef store)
        (void) close(fd);
        CFRelease(xmlData);
 
-       /* Save a snapshot of the "session" data */
-
-       (void) unlink(SNAPSHOT_PATH_SESSION);
-       fd = open(SNAPSHOT_PATH_SESSION, O_WRONLY|O_CREAT|O_TRUNC|O_EXCL, 0644);
-       if (fd == -1) {
-               return kSCStatusFailed;
-       }
-
-       xmlData = CFPropertyListCreateData(NULL, sessionData, kCFPropertyListXMLFormat_v1_0, 0, NULL);
-       if (xmlData == NULL) {
-               SC_log(LOG_NOTICE, "CFPropertyListCreateData() failed");
-               close(fd);
-               return kSCStatusFailed;
-       }
-       (void) write(fd, CFDataGetBytePtr(xmlData), CFDataGetLength(xmlData));
-       (void) close(fd);
-       CFRelease(xmlData);
-
        return kSCStatusOK;
 }
 
index 78e658a616239255298f361b6a90b01c24e0d2fb..8e1cdef8fa432c32950db8659856ed6e45ab0853 100644 (file)
@@ -41,7 +41,7 @@
 #define _SCSCHEMADEFINITIONS_H
 #define _SCSCHEMADEFINITIONSPRIVATE_H
 
-#define        SC_LOG_HANDLE   __configd_SCDynamicStore()
+#define        SC_LOG_HANDLE   __configd_SCDynamicStore
 #include "SCDynamicStoreInternal.h"
 #include "config_types.h"
 #include "_SCD.h"
@@ -53,7 +53,7 @@ extern CFMutableSetRef        _plugins_verbose;               /* bundle identifiers to enable verbos
 
 
 #define SC_trace(__string, ...)        \
-       os_log_debug(SC_LOG_HANDLE, __string, ## __VA_ARGS__)
+       os_log_debug(SC_LOG_HANDLE(), __string, ## __VA_ARGS__)
 
 
 __BEGIN_DECLS
index 9e88ed5184440eded93debdea5930215ac36fa90..d94730f278d3061b7058f7e484789b194bd7fab8 100644 (file)
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2000-2011, 2013-2017 Apple Inc. All rights reserved.
+ * Copyright (c) 2000-2011, 2013-2019 Apple Inc. All rights reserved.
  *
  * @APPLE_LICENSE_HEADER_START@
  *
@@ -54,6 +54,7 @@
 #include "configd.h"
 #include "configd_server.h"
 #include "plugin_support.h"
+#include "SCDynamicStoreInternal.h"
 
 #if    TARGET_OS_IPHONE && !TARGET_OS_SIMULATOR && !defined(DO_NOT_INFORM)
 #include <CoreFoundation/CFUserNotification.h>
@@ -164,7 +165,6 @@ term(CFMachPortRef port, void *msg, CFIndex size, void *info)
        wait = plugin_term(&status);
        if (!wait) {
                // if we are not waiting on a plugin
-               status = server_shutdown();
                exit (status);
        }
 
@@ -467,6 +467,9 @@ main(int argc, char * const argv[])
        CFRelease(rls);
 
        if (testBundle == NULL) {
+               /* don't complain about having  lots of SCDynamicStore objects */
+               _SCDynamicStoreSetSessionWatchLimit(0);
+
                /* initialize primary (store management) thread */
                server_init();
 
@@ -481,8 +484,8 @@ main(int argc, char * const argv[])
                        plugin_init();
                }
 
-               /* start primary (store management) thread */
-               server_loop();
+               /* start main thread */
+               CFRunLoopRun();
        } else {
                /* load/initialize/start specified plug-in */
                plugin_exec((void *)testBundle);
index f5e799c662041af10b4cceb4902f421e6c7b43d3..a5229850ba6b2a0258744abe5d15003bd195af0c 100644 (file)
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2000-2011, 2013, 2015-2017 Apple Inc. All rights reserved.
+ * Copyright (c) 2000-2011, 2013, 2015-2017, 2019 Apple Inc. All rights reserved.
  *
  * @APPLE_LICENSE_HEADER_START@
  *
 
 #include "configd.h"
 #include "configd_server.h"
-#include "notify_server.h"
 #include "session.h"
 
 /* MiG generated externals and functions */
 extern struct mig_subsystem    _config_subsystem;
-extern boolean_t               config_server(mach_msg_header_t *, mach_msg_header_t *);
-
-/* configd server port (for new session requests) */
-static CFMachPortRef           configd_port            = NULL;
-
-
-__private_extern__
-boolean_t
-config_demux(mach_msg_header_t *request, mach_msg_header_t *reply)
-{
-       Boolean                         processed = FALSE;
-
-       /*
-        * (attempt to) process SCDynamicStore requests.
-        */
-       processed = config_server(request, reply);
-       if (processed) {
-               return TRUE;
-       }
-
-       /*
-        * (attempt to) process (NO MORE SENDERS) notification messages.
-        */
-       processed = notify_server(request, reply);
-       if (processed) {
-               return TRUE;
-       }
-
-       /*
-        * unknown message ID, log and return an error.
-        */
-       SC_log(LOG_ERR, "unknown message ID (%d) received", request->msgh_id);
-       reply->msgh_bits        = MACH_MSGH_BITS(MACH_MSGH_BITS_REMOTE(request->msgh_bits), 0);
-       reply->msgh_remote_port = request->msgh_remote_port;
-       reply->msgh_size        = sizeof(mig_reply_error_t);    /* Minimal size */
-       reply->msgh_local_port  = MACH_PORT_NULL;
-       reply->msgh_id          = request->msgh_id + 100;
-       ((mig_reply_error_t *)reply)->NDR = NDR_record;
-       ((mig_reply_error_t *)reply)->RetCode = MIG_BAD_ID;
-
-       return FALSE;
-}
-
-
-#define        MACH_MSG_BUFFER_SIZE    128
 
 
 __private_extern__
 void
-configdCallback(CFMachPortRef port, void *msg, CFIndex size, void *info)
+server_mach_channel_handler(void                       *context,       // serverSessionRef
+                           dispatch_mach_reason_t      reason,
+                           dispatch_mach_msg_t         message,
+                           mach_error_t                error)
 {
-#pragma unused(port)
-#pragma unused(size)
-#pragma unused(info)
-       mig_reply_error_t *     bufRequest      = msg;
-       uint32_t                bufReply_q[MACH_MSG_BUFFER_SIZE/sizeof(uint32_t)];
-       mig_reply_error_t *     bufReply        = (mig_reply_error_t *)bufReply_q;
-       static size_t           bufSize         = 0;
-       mach_msg_return_t       mr;
-       int                     options;
-
-       if (bufSize == 0) {
-               // get max size for MiG reply buffers
-               bufSize = _config_subsystem.maxsize;
-
-               // check if our on-the-stack reply buffer will be big enough
-               if (bufSize > sizeof(bufReply_q)) {
-                       SC_log(LOG_NOTICE, "buffer size should be increased > %d",
-                              _config_subsystem.maxsize);
-               }
-       }
-
-       if (bufSize > sizeof(bufReply_q)) {
-               bufReply = CFAllocatorAllocate(NULL, _config_subsystem.maxsize, 0);
-       }
-       bufReply->RetCode = 0;
-
-       /* we have a request message */
-       (void) config_demux(&bufRequest->Head, &bufReply->Head);
-
-       if (!(bufReply->Head.msgh_bits & MACH_MSGH_BITS_COMPLEX)) {
-               if (bufReply->RetCode == MIG_NO_REPLY) {
-                       bufReply->Head.msgh_remote_port = MACH_PORT_NULL;
-               } else if ((bufReply->RetCode != KERN_SUCCESS) &&
-                          (bufRequest->Head.msgh_bits & MACH_MSGH_BITS_COMPLEX)) {
-                       /*
-                        * destroy the request - but not the reply port
-                        */
-                       bufRequest->Head.msgh_remote_port = MACH_PORT_NULL;
-                       mach_msg_destroy(&bufRequest->Head);
-               }
-       }
-
-       if (bufReply->Head.msgh_remote_port != MACH_PORT_NULL) {
-               /*
-                * send reply.
-                *
-                * We don't want to block indefinitely because the client
-                * isn't receiving messages from the reply port.
-                * If we have a send-once right for the reply port, then
-                * this isn't a concern because the send won't block.
-                * If we have a send right, we need to use MACH_SEND_TIMEOUT.
-                * To avoid falling off the kernel's fast RPC path unnecessarily,
-                * we only supply MACH_SEND_TIMEOUT when absolutely necessary.
-                */
+#pragma unused(error)
+       bool                    ok;
+       serverSessionRef        session = (serverSessionRef)context;
+
+       static const struct mig_subsystem * const subsystems[] = {
+               (mig_subsystem_t)&_config_subsystem,
+       };
+
+       switch (reason) {
+               case DISPATCH_MACH_MESSAGE_RECEIVED:
+                       ok = dispatch_mach_mig_demux(context, subsystems, 1, message);
+                       if (ok) {
+                               /*
+                                * the dispatch mach message has been consumed as per
+                                * usual MIG rules.  Check for, and if necessary, push
+                                * out [SCDynamicStore] change notifications to other
+                                * processes.
+                                */
+                               pushNotifications();
+                       } else {
+                               /*
+                                * no subsystem claimed the message, destroy it
+                                */
+                               mach_msg_destroy(dispatch_mach_msg_get_msg(message, NULL));
+                       }
+                       break;
 
-               options = MACH_SEND_MSG;
-               if (MACH_MSGH_BITS_REMOTE(bufReply->Head.msgh_bits) != MACH_MSG_TYPE_MOVE_SEND_ONCE) {
-                       options |= MACH_SEND_TIMEOUT;
-               }
-               mr = mach_msg(&bufReply->Head,          /* msg */
-                             options,                  /* option */
-                             bufReply->Head.msgh_size, /* send_size */
-                             0,                        /* rcv_size */
-                             MACH_PORT_NULL,           /* rcv_name */
-                             MACH_MSG_TIMEOUT_NONE,    /* timeout */
-                             MACH_PORT_NULL);          /* notify */
+               case DISPATCH_MACH_NO_SENDERS:
+                       __MACH_PORT_DEBUG(TRUE, "*** server_mach_channel_handler DISPATCH_MACH_NO_SENDERS", session->key);
+                       closeSession(session);
+                       break;
 
-               /* Has a message error occurred? */
-               switch (mr) {
-                       case MACH_SEND_INVALID_DEST:
-                       case MACH_SEND_TIMED_OUT:
-                               break;
-                       default :
-                               /* Includes success case.  */
-                               goto done;
-               }
-       }
+               case DISPATCH_MACH_CANCELED:
+                       __MACH_PORT_DEBUG(TRUE, "*** server_mach_channel_handler DISPATCH_MACH_CANCELED", session->key);
+                       cleanupSession(session);
+                       break;
 
-       if (bufReply->Head.msgh_bits & MACH_MSGH_BITS_COMPLEX) {
-               mach_msg_destroy(&bufReply->Head);
+               default:
+                       break;
        }
 
-    done :
-
-       if (bufReply != (mig_reply_error_t *)bufReply_q)
-               CFAllocatorDeallocate(NULL, bufReply);
-
        return;
 }
 
 
-static CFStringRef
-serverMPCopyDescription(const void *info)
+__private_extern__
+dispatch_workloop_t
+server_queue(void)
 {
-#pragma unused(info)
-       return CFStringCreateWithFormat(NULL, NULL, CFSTR("<main DynamicStore MP>"));
+       static dispatch_once_t          once;
+       static dispatch_workloop_t      workloop;
+
+       dispatch_once(&once, ^{
+               workloop = dispatch_workloop_create_inactive("configd/SCDynamicStore");
+               dispatch_set_qos_class_fallback(workloop, QOS_CLASS_UTILITY);
+               dispatch_activate(workloop);
+       });
+
+       return workloop;
 }
 
 
@@ -201,9 +121,6 @@ __private_extern__
 void
 server_init()
 {
-       serverSessionRef        mySession;
-       int                     ret;
-       CFRunLoopSourceRef      rls;
        char                    *service_name;
        mach_port_t             service_port    = MACH_PORT_NULL;
        kern_return_t           status;
@@ -235,66 +152,7 @@ server_init()
        }
 
        /* Create the primary / new connection port and backing session */
-       mySession = addSession(service_port, serverMPCopyDescription);
-       configd_port = mySession->serverPort;
-
-       /*
-        * Create and add a run loop source for the port and add this source
-        * to the default run loop mode.
-        */
-       rls = CFMachPortCreateRunLoopSource(NULL, configd_port, 0);
-       CFRunLoopAddSource(CFRunLoopGetCurrent(), rls, kCFRunLoopDefaultMode);
-       CFRelease(rls);
-
-       // bump thread QoS priority
-       ret = pthread_set_qos_class_self_np(QOS_CLASS_USER_INITIATED, 0);
-       if (ret != 0) {
-               SC_log(LOG_ERR, "pthread_set_qos_class_self_np() failed: %s", strerror(errno));
-       }
+       addServer(service_port);
 
        return;
 }
-
-
-__private_extern__
-int
-server_shutdown()
-{
-       if (configd_port != NULL) {
-               mach_port_t     service_port    = CFMachPortGetPort(configd_port);
-
-               CFMachPortInvalidate(configd_port);
-               CFRelease(configd_port);
-               configd_port = NULL;
-
-               if (service_port != MACH_PORT_NULL) {
-                       (void) mach_port_mod_refs(mach_task_self(),
-                                                 service_port,
-                                                 MACH_PORT_RIGHT_RECEIVE,
-                                                 -1);
-               }
-       }
-
-       return EX_OK;
-}
-
-
-__private_extern__
-void
-server_loop()
-{
-       pthread_setname_np("SCDynamicStore");
-
-       while (TRUE) {
-               /*
-                * process one run loop event
-                */
-               CFRunLoopRunInMode(kCFRunLoopDefaultMode, 1.0e10, TRUE);
-
-               /*
-                * check for, and if necessary, push out change notifications
-                * to other processes.
-                */
-               pushNotifications();
-       }
-}
index caf743f4f6ebbdfafec919d4971185fbe59796f4..0e8bc31a912f8af02676a2415502dc787e4a6406 100644 (file)
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2000-2006, 2008, 2011, 2015, 2019 Apple Inc. All rights reserved.
+ * Copyright (c) 2000-2006, 2008, 2011. 2015, 2018-2019 Apple Inc. All rights reserved.
  *
  * @APPLE_LICENSE_HEADER_START@
  *
 #include <mach/mach.h>
 #include <CoreFoundation/CoreFoundation.h>
 
-__BEGIN_DECLS
+#define DISPATCH_MACH_SPI 1
+#import <dispatch/private.h>
 
-void           configdCallback (CFMachPortRef          port,
-                                void                   *msg,
-                                CFIndex                size,
-                                void                   *info);
+__BEGIN_DECLS
 
-void           server_init     (void);
+void                   server_mach_channel_handler
+                                       (void                   *context,       // serverSessionRef
+                                        dispatch_mach_reason_t reason,
+                                        dispatch_mach_msg_t    message,
+                                        mach_error_t           error);
 
-int            server_shutdown (void);
+void                   server_init     (void);
 
-void           server_loop     (void);
+dispatch_workloop_t    server_queue    (void);
 
 kern_return_t  _snapshot       (mach_port_t            server,
                                 int                    *sc_status,
@@ -168,12 +170,6 @@ kern_return_t      _notifyviafd    (mach_port_t            server,
                                 int                    identifier,
                                 int                    *status);
 
-kern_return_t  _notifyviasignal
-                               (mach_port_t            server,
-                                task_t                 task,
-                                int                    signal,
-                                int                    *status);
-
 kern_return_t  _notifycancel   (mach_port_t            server,
                                 int                    *sc_status);
 
index 256c3d95d553502a6423f9b036e64fb9a8a8f9f7..deff580c7c2fc370b927f41aac587e376ad7482a 100644 (file)
@@ -2,6 +2,8 @@
 <!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
 <plist version="1.0">
 <dict>
+       <key>com.apple.multitasking.systemappassertions</key>
+       <true/>
        <key>keychain-access-groups</key>
        <array>
                <string>apple</string>
        <true/>
        <key>com.apple.private.SCNetworkConnection-proxy-user</key>
        <true/>
+       <key>com.apple.private.lockdown.is-host-trusted</key>
+       <array>
+               <string>com.apple.SystemConfiguration.InterfaceNamer</string>
+       </array>
        <key>com.apple.private.mobileinstall.allowedSPI</key>
        <array>
                <string>Uninstall</string>
                <string>Lookup</string>
        </array>
+       <key>com.apple.private.necp.drop_all_bypass</key>
+       <true/>
        <key>com.apple.private.necp.match</key>
        <true/>
        <key>com.apple.private.necp.policies</key>
@@ -50,9 +58,5 @@
        <true/>
        <key>com.apple.carousel.modalappservice</key>
        <true/>
-       <key>com.apple.private.lockdown.is-host-trusted</key>
-       <array>
-               <string>com.apple.SystemConfiguration.InterfaceNamer</string>
-       </array>
 </dict>
 </plist>
diff --git a/configd.tproj/notify_server.c b/configd.tproj/notify_server.c
deleted file mode 100644 (file)
index ea03d32..0000000
+++ /dev/null
@@ -1,74 +0,0 @@
-/*
- * Copyright (c) 2000-2004, 2007, 2015 Apple Inc. All rights reserved.
- *
- * @APPLE_LICENSE_HEADER_START@
- *
- * This file contains Original Code and/or Modifications of Original Code
- * as defined in and that are subject to the Apple Public Source License
- * Version 2.0 (the 'License'). You may not use this file except in
- * compliance with the License. Please obtain a copy of the License at
- * http://www.opensource.apple.com/apsl/ and read it before using this
- * file.
- *
- * The Original Code and all software distributed under the License are
- * distributed on an 'AS IS' basis, WITHOUT WARRANTY OF ANY KIND, EITHER
- * EXPRESS OR IMPLIED, AND APPLE HEREBY DISCLAIMS ALL SUCH WARRANTIES,
- * INCLUDING WITHOUT LIMITATION, ANY WARRANTIES OF MERCHANTABILITY,
- * FITNESS FOR A PARTICULAR PURPOSE, QUIET ENJOYMENT OR NON-INFRINGEMENT.
- * Please see the License for the specific language governing rights and
- * limitations under the License.
- *
- * @APPLE_LICENSE_HEADER_END@
- */
-
-/*
- * Modification History
- *
- * March 24, 2000              Allan Nathanson <ajn@apple.com>
- * - initial revision
- */
-
-#include "configd.h"
-#include "session.h"
-
-__private_extern__
-boolean_t
-notify_server(mach_msg_header_t *request, mach_msg_header_t *reply)
-{
-       mach_no_senders_notification_t  *Request = (mach_no_senders_notification_t *)request;
-       mig_reply_error_t               *Reply   = (mig_reply_error_t *)reply;
-
-       reply->msgh_bits        = MACH_MSGH_BITS(MACH_MSGH_BITS_REMOTE(request->msgh_bits), 0);
-       reply->msgh_remote_port = request->msgh_remote_port;
-       reply->msgh_size        = sizeof(mig_reply_error_t);    /* Minimal size: update as needed */
-       reply->msgh_local_port  = MACH_PORT_NULL;
-       reply->msgh_id          = request->msgh_id + 100;
-
-       if ((Request->not_header.msgh_id > MACH_NOTIFY_LAST) ||
-           (Request->not_header.msgh_id < MACH_NOTIFY_FIRST)) {
-               Reply->NDR     = NDR_record;
-               Reply->RetCode = MIG_BAD_ID;
-               return FALSE;   /* if this is not a notification message */
-       }
-
-       switch (Request->not_header.msgh_id) {
-               case MACH_NOTIFY_NO_SENDERS :
-                       __MACH_PORT_DEBUG(TRUE, "*** notify_server MACH_NOTIFY_NO_SENDERS", Request->not_header.msgh_local_port);
-                       cleanupSession(Request->not_header.msgh_local_port);
-
-                       Reply->Head.msgh_bits           = 0;
-                       Reply->Head.msgh_remote_port    = MACH_PORT_NULL;
-                       Reply->RetCode                  = KERN_SUCCESS;
-                       return TRUE;
-               default :
-                       break;
-       }
-
-       SC_log(LOG_NOTICE, "HELP!, Received notification: port=%d, msgh_id=%d",
-             Request->not_header.msgh_local_port,
-             Request->not_header.msgh_id);
-
-       Reply->NDR     = NDR_record;
-       Reply->RetCode = MIG_BAD_ID;
-       return FALSE;   /* if this is not a notification we are handling */
-}
diff --git a/configd.tproj/notify_server.h b/configd.tproj/notify_server.h
deleted file mode 100644 (file)
index f1b46ec..0000000
+++ /dev/null
@@ -1,46 +0,0 @@
-/*
- * Copyright (c) 2000, 2001 Apple Computer, Inc. All rights reserved.
- *
- * @APPLE_LICENSE_HEADER_START@
- * 
- * This file contains Original Code and/or Modifications of Original Code
- * as defined in and that are subject to the Apple Public Source License
- * Version 2.0 (the 'License'). You may not use this file except in
- * compliance with the License. Please obtain a copy of the License at
- * http://www.opensource.apple.com/apsl/ and read it before using this
- * file.
- * 
- * The Original Code and all software distributed under the License are
- * distributed on an 'AS IS' basis, WITHOUT WARRANTY OF ANY KIND, EITHER
- * EXPRESS OR IMPLIED, AND APPLE HEREBY DISCLAIMS ALL SUCH WARRANTIES,
- * INCLUDING WITHOUT LIMITATION, ANY WARRANTIES OF MERCHANTABILITY,
- * FITNESS FOR A PARTICULAR PURPOSE, QUIET ENJOYMENT OR NON-INFRINGEMENT.
- * Please see the License for the specific language governing rights and
- * limitations under the License.
- * 
- * @APPLE_LICENSE_HEADER_END@
- */
-
-/*
- * Modification History
- *
- * June 1, 2001                        Allan Nathanson <ajn@apple.com>
- * - public API conversion
- *
- * March 24, 2000              Allan Nathanson <ajn@apple.com>
- * - initial revision
- */
-
-#ifndef _S_NOTIFY_SERVER_H
-#define _S_NOTIFY_SERVER_H
-
-#include <sys/cdefs.h>
-#include <mach/mach.h>
-
-__BEGIN_DECLS
-
-boolean_t      notify_server   (mach_msg_header_t *request, mach_msg_header_t *reply);
-
-__END_DECLS
-
-#endif /* !_S_NOTIFY_SERVER_H */
index ea172fd3360d230bd35a4dd970b35557aaafc9a6..760cc9a3f1c157ab5dc35a0becd88445015c6110 100644 (file)
@@ -560,12 +560,9 @@ stopComplete(void *info)
        CFDictionaryRemoveValue(exiting, bundle);
 
        if (CFDictionaryGetCount(exiting) == 0) {
-               int     status;
-
                // if all of the plugins are happy
-               status = server_shutdown();
                SC_log(LOG_INFO, "server shutdown complete (%f)", CFAbsoluteTimeGetCurrent());
-               exit (status);
+               exit (EX_OK);
        }
 
        return;
@@ -580,7 +577,6 @@ stopDelayed(CFRunLoopTimerRef timer, void *info)
        const void      **keys;
        CFIndex         i;
        CFIndex         n;
-       int             status;
 
        SC_log(LOG_INFO, "server shutdown was delayed, unresponsive plugins:");
 
@@ -601,8 +597,7 @@ stopDelayed(CFRunLoopTimerRef timer, void *info)
        }
        CFAllocatorDeallocate(NULL, keys);
 
-       status = server_shutdown();
-       exit (status);
+       exit (EX_OK);
 }
 
 static CFStringRef
@@ -648,9 +643,8 @@ stopBundle(const void *value, void *context)
        stopRls = CFRunLoopSourceCreate(NULL, 0, &stopContext);
        CFRunLoopAddSource(CFRunLoopGetCurrent(), stopRls, kCFRunLoopDefaultMode);
        CFDictionaryAddValue(exiting, bundleInfo->bundle, stopRls);
-       CFRelease(stopRls);
-
        (*bundleInfo->stop)(stopRls);
+       CFRelease(stopRls);
 
        return;
 }
@@ -672,12 +666,9 @@ stopBundles()
                             NULL);
 
        if (CFDictionaryGetCount(exiting) == 0) {
-               int     status;
-
                // if all of the plugins are happy
-               status = server_shutdown();
                SC_log(LOG_INFO, "server shutdown complete (%f)", CFAbsoluteTimeGetCurrent());
-               exit (status);
+               exit (EX_OK);
        } else {
                CFRunLoopTimerRef       timer;
 
index 82262115313817d15fca20b3b2ddab95da9a5ce7..f3cc0d8d87a7c3a919fd6d2b012943386832ff47 100644 (file)
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2000, 2001, 2003-2005, 2007-2018 Apple Inc. All rights reserved.
+ * Copyright (c) 2000, 2001, 2003-2005, 2007-2019 Apple Inc. All rights reserved.
  *
  * @APPLE_LICENSE_HEADER_START@
  *
@@ -39,6 +39,7 @@
 
 #include <unistd.h>
 #include <bsm/libbsm.h>
+#include <os/state_private.h>
 #include <sandbox.h>
 
 #if !TARGET_OS_SIMULATOR || (defined(IPHONE_SIMULATOR_HOST_MIN_VERSION_REQUIRED) && (IPHONE_SIMULATOR_HOST_MIN_VERSION_REQUIRED >= 1090))
 #endif
 
 
-/* information maintained for each active session */
-static serverSessionRef        *sessions       = NULL;
-static int             nSessions       = 0;    /* # of allocated sessions */
-static int             lastSession     = -1;   /* # of last used session */
+/* information maintained for the main listener */
+static serverSessionRef                server_session          = NULL;
 
-/* CFMachPortInvalidation runloop */
-static CFRunLoopRef    sessionRunLoop  = NULL;
+/*
+ * information maintained for each active session
+ * Note: sync w/sessionQueue()
+ */
+static CFMutableDictionaryRef  client_sessions         = NULL;
 
 
-__private_extern__
-serverSessionRef
-getSession(mach_port_t server)
+static dispatch_queue_t
+sessionQueue(void)
 {
-       int     i;
+       static dispatch_once_t  once;
+       static dispatch_queue_t q;
 
-       if (server == MACH_PORT_NULL) {
-               SC_log(LOG_NOTICE, "Excuse me, why is getSession() being called with an invalid port?");
-               return NULL;
-       }
+       dispatch_once(&once, ^{
+               // allocate mapping between [client] session mach port and session info
+               client_sessions = CFDictionaryCreateMutable(NULL,
+                                                           0,
+                                                           NULL,       // use the actual mach_port_t as the key
+                                                           &kCFTypeDictionaryValueCallBacks);
+
+               // and a queue to synchronize access to the mapping
+               q = dispatch_queue_create("SCDynamicStore/sessions", NULL);
+       });
 
-       /* look for matching session (note: slot 0 is the "server" port) */
-       for (i = 1; i <= lastSession; i++) {
-               serverSessionRef        thisSession = sessions[i];
+       return q;
+}
 
-               if (thisSession == NULL) {
-                       /* found an empty slot, skip it */
-                       continue;
-               }
 
-               if (thisSession->key == server) {
-                       /* we've seen this server before */
-                       return thisSession;
-               }
+#pragma mark -
+#pragma mark __serverSession object
 
-               if ((thisSession->store != NULL) &&
-                   (((SCDynamicStorePrivateRef)thisSession->store)->notifySignalTask == server)) {
-                       /* we've seen this task port before */
-                       return thisSession;
-               }
-       }
+static CFStringRef             __serverSessionCopyDescription  (CFTypeRef cf);
+static void                    __serverSessionDeallocate       (CFTypeRef cf);
 
-       /* no sessions available */
-       return NULL;
-}
+static const CFRuntimeClass    __serverSessionClass = {
+       0,                                      // version
+       "serverSession",                        // className
+       NULL,                                   // init
+       NULL,                                   // copy
+       __serverSessionDeallocate,              // dealloc
+       NULL,                                   // equal
+       NULL,                                   // hash
+       NULL,                                   // copyFormattingDesc
+       __serverSessionCopyDescription  // copyDebugDesc
+};
 
+static CFTypeID        __serverSessionTypeID   = _kCFRuntimeNotATypeID;
 
-__private_extern__
-serverSessionRef
-tempSession(mach_port_t server, CFStringRef name, audit_token_t auditToken)
+
+static CFStringRef
+__serverSessionCopyDescription(CFTypeRef cf)
 {
-       static dispatch_once_t          once;
-       SCDynamicStorePrivateRef        storePrivate;   /* temp session */
-       static serverSession            temp_session;
+       CFAllocatorRef          allocator       = CFGetAllocator(cf);
+       CFMutableStringRef      result;
+       serverSessionRef        session         = (serverSessionRef)cf;
 
-       dispatch_once(&once, ^{
-               temp_session = *sessions[0];    /* use "server" session */
-               temp_session.activity = NULL;
-               (void) __SCDynamicStoreOpen(&temp_session.store, NULL);
-       });
+       result = CFStringCreateMutable(allocator, 0);
+       CFStringAppendFormat(result, NULL, CFSTR("<serverSession %p [%p]> {"), cf, allocator);
 
-       if (temp_session.key != server) {
-               // if not SCDynamicStore "server" port
-               return NULL;
-       }
+       // add client port
+       CFStringAppendFormat(result, NULL, CFSTR("port = 0x%x (%d)"), session->key, session->key);
 
-       /* save audit token, caller entitlements */
-       temp_session.auditToken                 = auditToken;
-       temp_session.callerEUID                 = 1;            /* not "root" */
-       temp_session.callerRootAccess           = UNKNOWN;
-       if ((temp_session.callerWriteEntitlement != NULL) &&
-           (temp_session.callerWriteEntitlement != kCFNull)) {
-               CFRelease(temp_session.callerWriteEntitlement);
+       // add session info
+       if (session->name != NULL) {
+               CFStringAppendFormat(result, NULL, CFSTR(", name = %@"), session->name);
        }
-       temp_session.callerWriteEntitlement     = kCFNull;      /* UNKNOWN */
-
-       /* save name */
-       storePrivate = (SCDynamicStorePrivateRef)temp_session.store;
-       if (storePrivate->name != NULL) CFRelease(storePrivate->name);
-       storePrivate->name = CFRetain(name);
 
-       return &temp_session;
+       CFStringAppendFormat(result, NULL, CFSTR("}"));
+       return result;
 }
 
 
-__private_extern__
-serverSessionRef
-addSession(mach_port_t server, CFStringRef (*copyDescription)(const void *info))
+static void
+__serverSessionDeallocate(CFTypeRef cf)
 {
-       CFMachPortContext       context         = { 0, NULL, NULL, NULL, NULL };
-       kern_return_t           kr;
-       mach_port_t             mp              = server;
-       int                     n               = -1;
-       serverSessionRef        newSession      = NULL;
-
-       /* save current (SCDynamicStore) runloop */
-       if (sessionRunLoop == NULL) {
-               sessionRunLoop = CFRunLoopGetCurrent();
-       }
-
-       if (nSessions <= 0) {
-               /* if first session (the "server" port) */
-               n = 0;          /* use slot "0" */
-               lastSession = 0;        /* last used slot */
+#pragma unused(cf)
+       serverSessionRef        session         = (serverSessionRef)cf;
 
-               nSessions = 64;
-               sessions = malloc(nSessions * sizeof(serverSessionRef));
+       if (session->changedKeys != NULL)       CFRelease(session->changedKeys);
+       if (session->name != NULL)              CFRelease(session->name);
+       if (session->sessionKeys != NULL)       CFRelease(session->sessionKeys);
 
-               // allocate a new session for "the" server
-               newSession = calloc(1, sizeof(serverSession));
-       } else {
-               int                     i;
-#ifdef HAVE_MACHPORT_GUARDS
-               mach_port_options_t     opts;
-#endif // HAVE_MACHPORT_GUARDS
-
-               /* check to see if we already have an open session (note: slot 0 is the "server" port) */
-               for (i = 1; i <= lastSession; i++) {
-                       serverSessionRef        thisSession     = sessions[i];
-
-                       if (thisSession == NULL) {
-                               /* found an empty slot */
-                               if (n < 0) {
-                                       /* keep track of the first [empty] slot */
-                                       n = i;
-                               }
-
-                               /* and keep looking for a matching session */
-                               continue;
-                       }
+       return;
+}
 
-                       if (thisSession->key == server) {
-                               /* we've seen this server before */
-                               return NULL;
-                       }
 
-                       if ((thisSession->store != NULL) &&
-                                  (((SCDynamicStorePrivateRef)thisSession->store)->notifySignalTask == server)) {
-                               /* we've seen this task port before */
-                               return NULL;
-                       }
-               }
+static serverSessionRef
+__serverSessionCreate(CFAllocatorRef allocator, mach_port_t server)
+{
+       static dispatch_once_t  once;
+       serverSessionRef        session;
+       uint32_t                size;
 
-               /* add a new session */
-               if (n < 0) {
-                       /* if no empty slots */
-                       n = ++lastSession;
-                       if (lastSession >= nSessions) {
-                               /* expand the session list */
-                               nSessions *= 2;
-                               sessions = reallocf(sessions, (nSessions * sizeof(serverSessionRef)));
-                       }
-               }
+       // initialize runtime
+       dispatch_once(&once, ^{
+               __serverSessionTypeID = _CFRuntimeRegisterClass(&__serverSessionClass);
+       });
 
-               // allocate a session for this client
-               newSession = calloc(1, sizeof(serverSession));
+       // allocate session
+       size    = sizeof(serverSession) - sizeof(CFRuntimeBase);
+       session = (serverSessionRef)_CFRuntimeCreateInstance(allocator,
+                                                            __serverSessionTypeID,
+                                                            size,
+                                                            NULL);
+       if (session == NULL) {
+               return NULL;
+       }
 
-               // create mach port for SCDynamicStore client
-               mp = MACH_PORT_NULL;
+       // if needed, allocate a mach port for SCDynamicStore client
+       if (server == MACH_PORT_NULL) {
+               kern_return_t           kr;
+               mach_port_t             mp      = MACH_PORT_NULL;
+#ifdef HAVE_MACHPORT_GUARDS
+               mach_port_options_t     opts;
+#endif // HAVE_MACHPORT_GUARDS
 
            retry_allocate :
 
 #ifdef HAVE_MACHPORT_GUARDS
-               bzero(&opts, sizeof(opts));
+               memset(&opts, 0, sizeof(opts));
                opts.flags = MPO_CONTEXT_AS_GUARD;
 
-               kr = mach_port_construct(mach_task_self(), &opts, (mach_port_context_t)newSession, &mp);
+               kr = mach_port_construct(mach_task_self(), &opts, (mach_port_context_t)session, &mp);
 #else  // HAVE_MACHPORT_GUARDS
                kr = mach_port_allocate(mach_task_self(), MACH_PORT_RIGHT_RECEIVE, &mp);
 #endif // HAVE_MACHPORT_GUARDS
@@ -230,27 +191,10 @@ addSession(mach_port_t server, CFStringRef (*copyDescription)(const void *info))
                                  NULL,
                                  NULL);
                        if (err != NULL) free(err);
-
-                       free(newSession);
+                       CFRelease(session);
                        return NULL;
                }
-       }
 
-       // create server port
-       context.info            = newSession;
-       context.copyDescription = copyDescription;
-
-       //
-       // Note: we create the CFMachPort *before* we insert a send
-       //       right present to ensure that CF does not establish
-       //       its dead name notification.
-       //
-       newSession->serverPort = _SC_CFMachPortCreateWithPort("SCDynamicStore/session",
-                                                             mp,
-                                                             configdCallback,
-                                                             &context);
-
-       if (n > 0) {
                // insert send right that will be moved to the client
                kr = mach_port_insert_right(mach_task_self(),
                                            mp,
@@ -262,194 +206,398 @@ addSession(mach_port_t server, CFStringRef (*copyDescription)(const void *info))
                         * only happen if someone stomped on OUR port (so let's leave
                         * the port alone).
                         */
-                       SC_log(LOG_NOTICE, "mach_port_insert_right() failed: %s", mach_error_string(kr));
-
-                       free(newSession);
+                       SC_log(LOG_ERR, "mach_port_insert_right() failed: %s", mach_error_string(kr));
+                       CFRelease(session);
                        return NULL;
                }
+
+               server = mp;
        }
 
-       newSession->activity                    = os_activity_create("processing SCDynamicStore notification",
-                                                                    OS_ACTIVITY_CURRENT,
-                                                                    OS_ACTIVITY_FLAG_DEFAULT);
-       newSession->callerEUID                  = 1;            /* not "root" */
-       newSession->callerRootAccess            = UNKNOWN;
-       newSession->callerWriteEntitlement      = kCFNull;      /* UNKNOWN */
-       newSession->key                         = mp;
-//     newSession->serverRunLoopSource         = NULL;
-//     newSession->store                       = NULL;
+       session->callerEUID             = 1;            /* not "root" */
+       session->callerRootAccess       = UNKNOWN;
+       session->callerWriteEntitlement = kCFNull;      /* UNKNOWN */
+       session->key                    = server;
+//     session->store                  = NULL;
+
+       return session;
+}
 
-       sessions[n] = newSession;
 
-       return newSession;
+#pragma mark -
+#pragma mark SCDynamicStore state handler
+
+
+static void
+addSessionReference(const void *key, const void *value, void *context)
+{
+#pragma unused(key)
+       CFMutableDictionaryRef  dict            = (CFMutableDictionaryRef)context;
+       serverSessionRef        session         = (serverSessionRef)value;
+
+       if (session->name != NULL) {
+               int             cnt;
+               CFNumberRef     num;
+
+               if (!CFDictionaryGetValueIfPresent(dict,
+                                                  session->name,
+                                                  (const void **)&num) ||
+                   !CFNumberGetValue(num, kCFNumberIntType, &cnt)) {
+                       // if first session
+                       cnt = 0;
+               }
+               cnt++;
+               num = CFNumberCreate(NULL, kCFNumberIntType, &cnt);
+               CFDictionarySetValue(dict, session->name, num);
+               CFRelease(num);
+       }
+
+       return;
 }
 
 
-__private_extern__
-void
-cleanupSession(mach_port_t server)
+static void
+add_state_handler()
 {
-       int             i;
+       os_state_block_t        state_block;
+
+       state_block = ^os_state_data_t(os_state_hints_t hints) {
+#pragma unused(hints)
+               CFDataRef               data    = NULL;
+               CFIndex                 n;
+               Boolean                 ok;
+               os_state_data_t         state_data;
+               size_t                  state_data_size;
+               CFIndex                 state_len;
+
+               n = CFDictionaryGetCount(client_sessions);
+               if (n < 500) {
+                       CFStringRef     str;
+
+                       str = CFStringCreateWithFormat(NULL, NULL, CFSTR("n = %ld"), n);
+                       ok = _SCSerialize(str, &data, NULL, NULL);
+                       CFRelease(str);
+               } else {
+                       CFMutableDictionaryRef  dict;
+
+                       dict = CFDictionaryCreateMutable(NULL,
+                                                        0,
+                                                        &kCFTypeDictionaryKeyCallBacks,
+                                                        &kCFTypeDictionaryValueCallBacks);
+                       CFDictionaryApplyFunction(client_sessions, addSessionReference, dict);
+                       ok = _SCSerialize(dict, &data, NULL, NULL);
+                       CFRelease(dict);
+               }
 
-       for (i = 1; i <= lastSession; i++) {
-               CFStringRef             sessionKey;
-               serverSessionRef        thisSession = sessions[i];
+               state_len = (ok && (data != NULL)) ? CFDataGetLength(data) : 0;
+               state_data_size = OS_STATE_DATA_SIZE_NEEDED(state_len);
+               if (state_data_size > MAX_STATEDUMP_SIZE) {
+                       SC_log(LOG_ERR, "SCDynamicStore/sessions : state data too large (%zd > %zd)",
+                              state_data_size,
+                              (size_t)MAX_STATEDUMP_SIZE);
+                       if (data != NULL) CFRelease(data);
+                       return NULL;
+               }
 
-               if (thisSession == NULL) {
-                       /* found an empty slot, skip it */
-                       continue;
+               state_data = calloc(1, state_data_size);
+               if (state_data == NULL) {
+                       SC_log(LOG_ERR, "SCDynamicStore/sessions: could not allocate state data");
+                       if (data != NULL) CFRelease(data);
+                       return NULL;
                }
 
-               if (thisSession->key == server) {
-                       /*
-                        * session entry still exists.
-                        */
+               state_data->osd_type = OS_STATE_DATA_SERIALIZED_NSCF_OBJECT;
+               state_data->osd_data_size = (uint32_t)state_len;
+               strlcpy(state_data->osd_title, "SCDynamicStore/sessions", sizeof(state_data->osd_title));
+               if (state_len > 0) {
+                       memcpy(state_data->osd_data, CFDataGetBytePtr(data), state_len);
+               }
+               if (data != NULL) CFRelease(data);
 
-                       SC_trace("cleanup : %5d", server);
+               return state_data;
+       };
 
-                       /*
-                        * Close any open connections including cancelling any outstanding
-                        * notification requests and releasing any locks.
-                        */
-                       __MACH_PORT_DEBUG(TRUE, "*** cleanupSession", server);
-                       (void) __SCDynamicStoreClose(&thisSession->store);
-                       __MACH_PORT_DEBUG(TRUE, "*** cleanupSession (after __SCDynamicStoreClose)", server);
+       (void) os_state_add_handler(sessionQueue(), state_block);
+       return;
+}
 
-                       /*
-                        * Our send right has already been removed. Remove our receive right.
-                        */
-#ifdef HAVE_MACHPORT_GUARDS
-                       (void) mach_port_destruct(mach_task_self(), server, 0, (mach_port_context_t)thisSession);
-#else  // HAVE_MACHPORT_GUARDS
-                       (void) mach_port_mod_refs(mach_task_self(), server, MACH_PORT_RIGHT_RECEIVE, -1);
-#endif // HAVE_MACHPORT_GUARDS
 
-                       /*
-                        * release any entitlement info
-                        */
-                       if ((thisSession->callerWriteEntitlement != NULL) &&
-                           (thisSession->callerWriteEntitlement != kCFNull)) {
-                               CFRelease(thisSession->callerWriteEntitlement);
-                       }
+#pragma mark -
+#pragma mark SCDynamicStore session management
 
-                       /*
-                        * release our per-session activity
-                        */
-                       if (thisSession->activity != NULL) {
-                               os_release(thisSession->activity);
-                       }
 
-                       /*
-                        * We don't need any remaining information in the
-                        * sessionData dictionary, remove it.
-                        */
-                       sessionKey = CFStringCreateWithFormat(NULL, NULL, CFSTR("%d"), server);
-                       CFDictionaryRemoveValue(sessionData, sessionKey);
-                       CFRelease(sessionKey);
+__private_extern__
+serverSessionRef
+getSession(mach_port_t server)
+{
+       __block serverSessionRef        session;
 
-                       /*
-                        * get rid of the per-session structure.
-                        */
-                       free(thisSession);
-                       sessions[i] = NULL;
-
-                       if (i == lastSession) {
-                               /* we are removing the last session, update last used slot */
-                               while (--lastSession > 0) {
-                                       if (sessions[lastSession] != NULL) {
-                                               break;
-                                       }
-                               }
-                       }
+       assert(server != MACH_PORT_NULL);
+       dispatch_sync(sessionQueue(), ^{
+               session = (serverSessionRef)CFDictionaryGetValue(client_sessions,
+                                                                (const void *)(uintptr_t)server);
+       });
 
-                       return;
-               }
+       return session;
+}
+
+
+__private_extern__
+serverSessionRef
+getSessionNum(CFNumberRef serverNum)
+{
+       union {
+               mach_port_t     mp;
+               uint64_t        val;
+       } server;
+       serverSessionRef        session;
+
+       (void) CFNumberGetValue(serverNum, kCFNumberSInt64Type, &server.val);
+       session = getSession(server.mp);
+
+       return session;
+}
+
+
+__private_extern__
+serverSessionRef
+getSessionStr(CFStringRef serverKey)
+{
+       mach_port_t             server;
+       serverSessionRef        session;
+       char                    str[16];
+
+       (void) _SC_cfstring_to_cstring(serverKey, str, sizeof(str), kCFStringEncodingASCII);
+       server = atoi(str);
+       session = getSession(server);
+
+       return session;
+}
+
+
+__private_extern__
+serverSessionRef
+tempSession(mach_port_t server, CFStringRef name, audit_token_t auditToken)
+{
+       static dispatch_once_t          once;
+       SCDynamicStorePrivateRef        storePrivate;   /* temp session */
+       static serverSession            temp_session;
+
+       dispatch_once(&once, ^{
+               temp_session = *server_session;         /* use "server" session clone */
+               (void) __SCDynamicStoreOpen(&temp_session.store, NULL);
+       });
+
+       if (temp_session.key != server) {
+               // if not SCDynamicStore "server" port
+               return NULL;
        }
 
-       SC_log(LOG_NOTICE, "MACH_NOTIFY_NO_SENDERS w/no session, port = %d", server);
-       __MACH_PORT_DEBUG(TRUE, "*** cleanupSession w/no session", server);
-       return;
+       /* save audit token, caller entitlements */
+       temp_session.auditToken                 = auditToken;
+       temp_session.callerEUID                 = 1;            /* not "root" */
+       temp_session.callerRootAccess           = UNKNOWN;
+       if ((temp_session.callerWriteEntitlement != NULL) &&
+           (temp_session.callerWriteEntitlement != kCFNull)) {
+               CFRelease(temp_session.callerWriteEntitlement);
+       }
+       temp_session.callerWriteEntitlement     = kCFNull;      /* UNKNOWN */
+
+       /* save name */
+       storePrivate = (SCDynamicStorePrivateRef)temp_session.store;
+       if (storePrivate->name != NULL) CFRelease(storePrivate->name);
+       storePrivate->name = CFRetain(name);
+
+       return &temp_session;
 }
 
 
 __private_extern__
 void
-listSessions(FILE *f)
+addSession(serverSessionRef session, Boolean isMain)
 {
-       int     i;
+       session->serverChannel = dispatch_mach_create_f("configd/SCDynamicStore",
+                                                       server_queue(),
+                                                       (void *)session,
+                                                       server_mach_channel_handler);
+       if (!isMain) {
+               // if not main SCDynamicStore port, watch for exit
+               dispatch_mach_request_no_senders(session->serverChannel);
+       }
+#if    TARGET_OS_SIMULATOR
+       // simulators don't support MiG QoS propagation yet
+       dispatch_set_qos_class_fallback(session->serverChannel, QOS_CLASS_USER_INITIATED);
+#else
+       dispatch_set_qos_class_fallback(session->serverChannel, QOS_CLASS_BACKGROUND);
+#endif
+       dispatch_mach_connect(session->serverChannel, session->key, MACH_PORT_NULL, NULL);
+       return;
+}
 
-       SCPrint(TRUE, f, CFSTR("Current sessions :\n"));
-       for (i = 0; i <= lastSession; i++) {
-               serverSessionRef        thisSession = sessions[i];
 
-               if (thisSession == NULL) {
-                       continue;
-               }
+__private_extern__
+serverSessionRef
+addClient(mach_port_t server, audit_token_t audit_token)
+{
 
-               SCPrint(TRUE, f, CFSTR("\t%d : port = 0x%x"), i, thisSession->key);
+       __block serverSessionRef        newSession      = NULL;
 
-               if (thisSession->store != NULL) {
-                       SCDynamicStorePrivateRef        storePrivate    = (SCDynamicStorePrivateRef)thisSession->store;
+       dispatch_sync(sessionQueue(), ^{
+               Boolean         ok;
 
-                       if (storePrivate->notifySignalTask != TASK_NULL) {
-                              SCPrint(TRUE, f, CFSTR(", task = %d"), storePrivate->notifySignalTask);
-                       }
+               // check to see if we already have an open session
+               ok = CFDictionaryContainsKey(client_sessions,
+                                            (const void *)(uintptr_t)server);
+               if (ok) {
+                       // if we've already added a session for this port
+                       return;
                }
 
-               if (sessionData != NULL) {
-                       CFDictionaryRef info;
-                       CFStringRef     key;
+               // allocate a new session for "the" server
+               newSession = __serverSessionCreate(NULL, MACH_PORT_NULL);
+               if (newSession != NULL) {
+                       // and add a port --> session mapping
+                       CFDictionarySetValue(client_sessions,
+                                            (const void *)(uintptr_t)newSession->key,
+                                            newSession);
 
-                       key = CFStringCreateWithFormat(NULL, NULL, CFSTR("%d"), thisSession->key);
-                       info = CFDictionaryGetValue(sessionData, key);
-                       CFRelease(key);
-                       if (info != NULL) {
-                               CFStringRef     name;
+                       // save the audit_token in case we need to check the callers credentials
+                       newSession->auditToken = audit_token;
 
-                               name = CFDictionaryGetValue(info, kSCDName);
-                               if (name != NULL) {
-                                       SCPrint(TRUE, f, CFSTR(", name = %@"), name);
-                               }
-                       }
+                       CFRelease(newSession);  // reference held by dictionary
                }
+       });
 
-               if (thisSession->serverPort != NULL) {
-                       SCPrint(TRUE, f, CFSTR("\n\t\t%@"), thisSession->serverPort);
-               }
+       if (newSession != NULL) {
+               addSession(newSession, FALSE);
+       }
 
-               if (thisSession->serverRunLoopSource != NULL) {
-                       SCPrint(TRUE, f, CFSTR("\n\t\t%@"), thisSession->serverRunLoopSource);
-               }
+       return newSession;
+}
 
-               SCPrint(TRUE, f, CFSTR("\n"));
+
+__private_extern__
+serverSessionRef
+addServer(mach_port_t server)
+{
+       // allocate a session for "the" server
+       server_session = __serverSessionCreate(NULL, server);
+       addSession(server_session, TRUE);
+
+       // add a state dump handler
+       add_state_handler();
+
+       return server_session;
+}
+
+
+__private_extern__
+void
+cleanupSession(serverSessionRef session)
+{
+       mach_port_t     server          = session->key;
+
+       SC_trace("cleanup : %5d", server);
+
+       /*
+        * Close any open connections including cancelling any outstanding
+        * notification requests and releasing any locks.
+        */
+       __MACH_PORT_DEBUG(TRUE, "*** cleanupSession", server);
+       (void) __SCDynamicStoreClose(&session->store);
+       __MACH_PORT_DEBUG(TRUE, "*** cleanupSession (after __SCDynamicStoreClose)", server);
+
+       /*
+        * Our send right has already been removed. Remove our receive right.
+        */
+#ifdef HAVE_MACHPORT_GUARDS
+       (void) mach_port_destruct(mach_task_self(), server, 0, (mach_port_context_t)session);
+#else  // HAVE_MACHPORT_GUARDS
+       (void) mach_port_mod_refs(mach_task_self(), server, MACH_PORT_RIGHT_RECEIVE, -1);
+#endif // HAVE_MACHPORT_GUARDS
+
+       /*
+        * release any entitlement info
+        */
+       if ((session->callerWriteEntitlement != NULL) &&
+           (session->callerWriteEntitlement != kCFNull)) {
+               CFRelease(session->callerWriteEntitlement);
+       }
+
+       /*
+        * get rid of the per-session structure.
+        */
+       dispatch_sync(sessionQueue(), ^{
+               CFDictionaryRemoveValue(client_sessions,
+                                       (const void *)(uintptr_t)server);
+       });
+
+       return;
+}
+
+
+__private_extern__
+void
+closeSession(serverSessionRef session)
+{
+       /*
+        * cancel and release the mach channel
+        */
+       if (session->serverChannel != NULL) {
+               dispatch_mach_cancel(session->serverChannel);
+               dispatch_release(session->serverChannel);
+               session->serverChannel = NULL;
        }
 
-       SCPrint(TRUE, f, CFSTR("\n"));
        return;
 }
 
 
-#include <Security/Security.h>
-#include <Security/SecTask.h>
+typedef struct ReportSessionInfo {
+       FILE    *f;
+       int     n;
+} ReportSessionInfo, *ReportSessionInfoRef;
 
-static CFStringRef
-sessionName(serverSessionRef session)
+static void
+printOne(const void *key, const void *value, void *context)
 {
-       CFDictionaryRef info;
-       CFStringRef     name    = NULL;
-       CFStringRef     sessionKey;
+#pragma unused(key)
+       ReportSessionInfoRef    reportInfo      = (ReportSessionInfoRef)context;
+       serverSessionRef        session         = (serverSessionRef)value;
+
+       SCPrint(TRUE, reportInfo->f, CFSTR("  %d : port = 0x%x"), ++reportInfo->n, session->key);
+       SCPrint(TRUE, reportInfo->f, CFSTR(", name = %@"), session->name);
+       if (session->changedKeys != NULL) {
+               SCPrint(TRUE, reportInfo->f, CFSTR("\n    changedKeys = %@"), session->changedKeys);
+       }
+       if (session->sessionKeys != NULL) {
+               SCPrint(TRUE, reportInfo->f, CFSTR("\n    sessionKeys = %@"), session->sessionKeys);
+       }
+       SCPrint(TRUE, reportInfo->f, CFSTR("\n"));
+       return;
+}
 
-       sessionKey = CFStringCreateWithFormat(NULL, NULL, CFSTR("%d"), session->key);
-       info = CFDictionaryGetValue(sessionData, sessionKey);
-       CFRelease(sessionKey);
 
-       if (info != NULL) {
-               name = CFDictionaryGetValue(info, kSCDName);
-       }
+__private_extern__
+void
+listSessions(FILE *f)
+{
+       dispatch_sync(sessionQueue(), ^{
+               ReportSessionInfo       reportInfo      = { .f = f, .n = 0 };
 
-       return (name != NULL) ? name : CFSTR("???");
+               SCPrint(TRUE, f, CFSTR("Current sessions :\n"));
+               CFDictionaryApplyFunction(client_sessions,
+                                         printOne,
+                                         (void *)&reportInfo);
+               SCPrint(TRUE, f, CFSTR("\n"));
+       });
+       return;
 }
 
+
+#include <Security/Security.h>
+#include <Security/SecTask.h>
+
 static CFTypeRef
 copyEntitlement(serverSessionRef session, CFStringRef entitlement)
 {
@@ -473,7 +621,7 @@ copyEntitlement(serverSessionRef session, CFStringRef entitlement)
                                SC_log(LOG_NOTICE, "SecTaskCopyValueForEntitlement(,\"%@\",) failed, error = %@ : %@",
                                       entitlement,
                                       error,
-                                      sessionName(session));
+                                      session->name);
                        }
                        CFRelease(error);
                }
@@ -481,7 +629,7 @@ copyEntitlement(serverSessionRef session, CFStringRef entitlement)
                CFRelease(task);
        } else {
                SC_log(LOG_NOTICE, "SecTaskCreateWithAuditToken() failed: %@",
-                      sessionName(session));
+                      session->name);
        }
 
        return value;
@@ -595,7 +743,7 @@ hasWriteAccess(serverSessionRef session, const char *op, CFStringRef key)
                       sessionPid(session),
                       key);
 
-               //return FALSE;         // return FALSE when rdar://9811832 has beed fixed
+               return FALSE;
        }
 
        if (session->callerWriteEntitlement == kCFNull) {
index 9a87c4fa890ab1896247363c089f98b2cd88988b..0d2cdb3a9c64e11756973b2c4afa411ab4237e80 100644 (file)
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2000, 2001, 2005-2007, 2009-2012, 2014, 2016-2018 Apple Inc. All rights reserved.
+ * Copyright (c) 2000, 2001, 2005-2007, 2009-2012, 2014, 2016-2019 Apple Inc. All rights reserved.
  *
  * @APPLE_LICENSE_HEADER_START@
  *
@@ -38,6 +38,8 @@
 #include <os/availability.h>
 #include <TargetConditionals.h>
 
+#define DISPATCH_MACH_SPI 1
+#import <dispatch/private.h>
 
 /*
  * SCDynamicStore write access entitlement
@@ -64,19 +66,21 @@ typedef     enum { NO = 0, YES, UNKNOWN } lazyBoolean;
 /* Per client server state */
 typedef struct {
 
+       // base CFType information
+       CFRuntimeBase           cfBase;
+
        /* mach port used as the key to this session */
        mach_port_t             key;
 
-       /* mach port associated with this session */
-       CFMachPortRef           serverPort;
-       CFRunLoopSourceRef      serverRunLoopSource;
+       /* mach channel associated with this session */
+       dispatch_mach_t         serverChannel;
 
        /* data associated with this "open" session */
+       CFMutableArrayRef       changedKeys;
+       CFStringRef             name;
+       CFMutableArrayRef       sessionKeys;
        SCDynamicStoreRef       store;
 
-       /* caller's activity */
-       os_activity_t           activity;
-
        /* credentials associated with this "open" session */
        uid_t                   callerEUID;
 
@@ -101,16 +105,24 @@ typedef struct {
 
 __BEGIN_DECLS
 
+serverSessionRef       addClient       (mach_port_t    server,
+                                        audit_token_t  audit_token);
+
+serverSessionRef       addServer       (mach_port_t    server);
+
 serverSessionRef       getSession      (mach_port_t    server);
 
+serverSessionRef       getSessionNum   (CFNumberRef    serverKey);
+
+serverSessionRef       getSessionStr   (CFStringRef    serverKey);
+
 serverSessionRef       tempSession     (mach_port_t    server,
                                         CFStringRef    name,
                                         audit_token_t  auditToken);
 
-serverSessionRef       addSession      (mach_port_t    server,
-                                        CFStringRef    (*copyDescription)(const void *info));
+void                   cleanupSession  (serverSessionRef       session);
 
-void                   cleanupSession  (mach_port_t    server);
+void                   closeSession    (serverSessionRef       session);
 
 void                   listSessions    (FILE           *f);
 
index d7e4567198f47ab937f4dcecbc618e89124fe0d5..fd9a358dd8dd823af60af0e4736d8f6f471fc2c3 100644 (file)
@@ -17,6 +17,9 @@
                                158317100CFB77D1006F62B9 /* PBXTargetDependency */,
                                158317160CFB783B006F62B9 /* PBXTargetDependency */,
                                158317180CFB784D006F62B9 /* PBXTargetDependency */,
+                               15401C2E21991B1B006326B7 /* PBXTargetDependency */,
+                               15EF89C221894837003B2C5C /* PBXTargetDependency */,
+                               15EF89C421894837003B2C5C /* PBXTargetDependency */,
                        );
                        name = "All-Embedded";
                        productName = Embedded;
                        name = "configd_base-EmbeddedSimulator";
                        productName = Frameworks;
                };
+               15401C1C21991506006326B7 /* configd_extras */ = {
+                       isa = PBXAggregateTarget;
+                       buildConfigurationList = 15401C1D21991506006326B7 /* Build configuration list for PBXAggregateTarget "configd_extras" */;
+                       buildPhases = (
+                               15401C2021991549006326B7 /* Create non-empty Root */,
+                       );
+                       dependencies = (
+                       );
+                       name = configd_extras;
+                       productName = configd_extras;
+               };
+               15401C21219915BC006326B7 /* configd_extras-Embedded */ = {
+                       isa = PBXAggregateTarget;
+                       buildConfigurationList = 15401C23219915BC006326B7 /* Build configuration list for PBXAggregateTarget "configd_extras-Embedded" */;
+                       buildPhases = (
+                               15401C22219915BC006326B7 /* Create non-empty Root */,
+                       );
+                       dependencies = (
+                               155C626121C2B6FD008DCB1A /* PBXTargetDependency */,
+                               155C626521C2B6FD008DCB1A /* PBXTargetDependency */,
+                       );
+                       name = "configd_extras-Embedded";
+                       productName = configd_extras;
+               };
+               15401C26219915C6006326B7 /* configd_extras-EmbeddedSimulator */ = {
+                       isa = PBXAggregateTarget;
+                       buildConfigurationList = 15401C28219915C6006326B7 /* Build configuration list for PBXAggregateTarget "configd_extras-EmbeddedSimulator" */;
+                       buildPhases = (
+                               15401C27219915C6006326B7 /* Create non-empty Root */,
+                       );
+                       dependencies = (
+                       );
+                       name = "configd_extras-EmbeddedSimulator";
+                       productName = configd_extras;
+               };
                155847FA07550D210046C2E9 /* configd_executables */ = {
                        isa = PBXAggregateTarget;
                        buildConfigurationList = 156EB62E0905594A00EEF749 /* Build configuration list for PBXAggregateTarget "configd_executables" */;
@@ -45,9 +83,9 @@
                        );
                        dependencies = (
                                15631D111ECF92E70088EEDD /* PBXTargetDependency */,
-                               72C4A4801BE44D19009D570E /* PBXTargetDependency */,
                                1558480607550D470046C2E9 /* PBXTargetDependency */,
                                1558480807550D470046C2E9 /* PBXTargetDependency */,
+                               72C4A4801BE44D19009D570E /* PBXTargetDependency */,
                                D6DDAC3D147A24BC00A2E902 /* PBXTargetDependency */,
                                150ECB300D0042DA0065E94D /* PBXTargetDependency */,
                                72C12CB11D6EA2CA000EE61C /* PBXTargetDependency */,
                        dependencies = (
                                15631D131ECF93040088EEDD /* PBXTargetDependency */,
                                158317660CFB80D5006F62B9 /* PBXTargetDependency */,
-                               157434210D4A8166002ACA73 /* PBXTargetDependency */,
-                               1574341F0D4A815E002ACA73 /* PBXTargetDependency */,
                                1523BBE21E075859006281F1 /* PBXTargetDependency */,
-                               7271EA341D7660980055B1AA /* PBXTargetDependency */,
+                               1574341F0D4A815E002ACA73 /* PBXTargetDependency */,
                        );
                        name = "configd_executables-Embedded";
                        productName = configd_executables;
                                157BB8C40759244B0025DA7A /* PBXTargetDependency */,
                                159D542E07529008004F8947 /* PBXTargetDependency */,
                                1558480F07550DD00046C2E9 /* PBXTargetDependency */,
+                               15401C2C21991B05006326B7 /* PBXTargetDependency */,
+                               150EC101210171AE0047F4BF /* PBXTargetDependency */,
+                               150EC103210171B60047F4BF /* PBXTargetDependency */,
                        );
                        name = All;
                        productName = "configd (Aggregate)";
                                157FDE44164A079B0040D6A8 /* PBXTargetDependency */,
                                151FE37A0D5B713C000D6DB1 /* PBXTargetDependency */,
                                15631D2D1ECF99A00088EEDD /* PBXTargetDependency */,
+                               15401C3021991B31006326B7 /* PBXTargetDependency */,
+                               15EF89C62189484C003B2C5C /* PBXTargetDependency */,
+                               15EF89C82189484C003B2C5C /* PBXTargetDependency */,
                        );
                        name = "All-EmbeddedSimulator";
                        productName = EmbeddedSimulator;
                150BEC1814CA24F900237116 /* dnsinfo_server.c in Sources */ = {isa = PBXBuildFile; fileRef = 15B73F0D05FD1B670096477F /* dnsinfo_server.c */; };
                150BEC1A14CA252200237116 /* dnsinfo_server.c in Sources */ = {isa = PBXBuildFile; fileRef = 15B73F0D05FD1B670096477F /* dnsinfo_server.c */; };
                150D7E1E0D16DC6C00AF4BED /* Security.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 1520A3DE0846B2DC0010B584 /* Security.framework */; };
+               150EC0FF21016BFD0047F4BF /* SystemConfiguration.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 1547072E0D1F70C80075C28D /* SystemConfiguration.framework */; };
                151D060E1EC14C8600E02E48 /* liblog_SystemConfiguration.m in Sources */ = {isa = PBXBuildFile; fileRef = 151D060D1EC14C6700E02E48 /* liblog_SystemConfiguration.m */; };
                1520A3870846829A0010B584 /* CoreFoundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 15CB6A6F05C0722B0099E85F /* CoreFoundation.framework */; };
                1520A3DF0846B2DD0010B584 /* Security.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 1520A3DE0846B2DC0010B584 /* Security.framework */; };
                153E16A91EE500ED0027698E /* SCNetworkReachabilityInternal.h in Headers */ = {isa = PBXBuildFile; fileRef = 15C330D0134B95AA0028E36B /* SCNetworkReachabilityInternal.h */; };
                153E16AA1EE500EF0027698E /* SCNetworkReachabilityInternal.h in Headers */ = {isa = PBXBuildFile; fileRef = 15C330D0134B95AA0028E36B /* SCNetworkReachabilityInternal.h */; };
                1540E3610987DA9500157C07 /* com.apple.configd.plist in Copy Files */ = {isa = PBXBuildFile; fileRef = 1540E3600987DA9500157C07 /* com.apple.configd.plist */; };
+               1542400521626F5A00C7CE8B /* SCDCache.c in Sources */ = {isa = PBXBuildFile; fileRef = 1542400421626DD300C7CE8B /* SCDCache.c */; };
+               1542400621626F5C00C7CE8B /* SCDCache.c in Sources */ = {isa = PBXBuildFile; fileRef = 1542400421626DD300C7CE8B /* SCDCache.c */; };
+               1542400721626F6000C7CE8B /* SCDCache.c in Sources */ = {isa = PBXBuildFile; fileRef = 1542400421626DD300C7CE8B /* SCDCache.c */; };
                154361E00752C81800A8EC6C /* set-hostname.c in Sources */ = {isa = PBXBuildFile; fileRef = 159D53AB07528B36004F8947 /* set-hostname.c */; };
                1543636B0752D03C00A8EC6C /* IOKit.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 1543636A0752D03C00A8EC6C /* IOKit.framework */; };
                154707300D1F70C80075C28D /* SystemConfiguration.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 1547072E0D1F70C80075C28D /* SystemConfiguration.framework */; };
                155D223D0AF13A7300D52ED0 /* smb-configuration.h in Headers */ = {isa = PBXBuildFile; fileRef = 155D223A0AF13A7300D52ED0 /* smb-configuration.h */; };
                155F49A61C864FFC00E47D08 /* qos-marking.m in Sources */ = {isa = PBXBuildFile; fileRef = 155F49A51C864FE500E47D08 /* qos-marking.m */; };
                155F49A71C86500100E47D08 /* qos-marking.m in Sources */ = {isa = PBXBuildFile; fileRef = 155F49A51C864FE500E47D08 /* qos-marking.m */; };
-               1562569120856CCC00FCD61E /* liblockdown.dylib in Frameworks */ = {isa = PBXBuildFile; fileRef = 1562569020856CCC00FCD61E /* liblockdown.dylib */; };
+               1562569120856CCC00FCD61E /* liblockdown.dylib in Frameworks */ = {isa = PBXBuildFile; fileRef = 1562569020856CCC00FCD61E /* liblockdown.dylib */; settings = {ATTRIBUTES = (Weak, ); }; };
                1565D85018B847590097062B /* SCNetworkMigration.c in Sources */ = {isa = PBXBuildFile; fileRef = 55A3DB9D183C2A8200ED3DB7 /* SCNetworkMigration.c */; };
                1565D85118B847F20097062B /* SCNetworkMigration.c in Sources */ = {isa = PBXBuildFile; fileRef = 55A3DB9D183C2A8200ED3DB7 /* SCNetworkMigration.c */; };
                156BD6BC07E0DFA9008698FF /* SCPreferencesSetSpecificPrivate.h in Headers */ = {isa = PBXBuildFile; fileRef = 156BD6BB07E0DFA9008698FF /* SCPreferencesSetSpecificPrivate.h */; settings = {ATTRIBUTES = (Private, ); }; };
                1572C4F20CFB55B400E2776E /* SCDNotifierWait.c in Sources */ = {isa = PBXBuildFile; fileRef = 15CB697605C0722B0099E85F /* SCDNotifierWait.c */; settings = {ATTRIBUTES = (); }; };
                1572C4F30CFB55B400E2776E /* SCDNotifierInformViaCallback.c in Sources */ = {isa = PBXBuildFile; fileRef = 15CB697805C0722B0099E85F /* SCDNotifierInformViaCallback.c */; settings = {ATTRIBUTES = (); }; };
                1572C4F50CFB55B400E2776E /* SCDNotifierInformViaFD.c in Sources */ = {isa = PBXBuildFile; fileRef = 15CB697C05C0722B0099E85F /* SCDNotifierInformViaFD.c */; settings = {ATTRIBUTES = (); }; };
-               1572C4F60CFB55B400E2776E /* SCDNotifierInformViaSignal.c in Sources */ = {isa = PBXBuildFile; fileRef = 15CB697E05C0722B0099E85F /* SCDNotifierInformViaSignal.c */; settings = {ATTRIBUTES = (); }; };
                1572C4F70CFB55B400E2776E /* SCDNotifierCancel.c in Sources */ = {isa = PBXBuildFile; fileRef = 15CB698005C0722B0099E85F /* SCDNotifierCancel.c */; settings = {ATTRIBUTES = (); }; };
                1572C4F80CFB55B400E2776E /* SCDSnapshot.c in Sources */ = {isa = PBXBuildFile; fileRef = 15CB698205C0722B0099E85F /* SCDSnapshot.c */; settings = {ATTRIBUTES = (); }; };
                1572C4F90CFB55B400E2776E /* SCP.c in Sources */ = {isa = PBXBuildFile; fileRef = 15CB698405C0722B0099E85F /* SCP.c */; settings = {ATTRIBUTES = (); }; };
                15732A7816EA503200F3AC4C /* configd.h in Headers */ = {isa = PBXBuildFile; fileRef = 15CB69CF05C0722B0099E85F /* configd.h */; };
                15732A7916EA503200F3AC4C /* _SCD.h in Headers */ = {isa = PBXBuildFile; fileRef = 15CB69D105C0722B0099E85F /* _SCD.h */; };
                15732A7A16EA503200F3AC4C /* configd_server.h in Headers */ = {isa = PBXBuildFile; fileRef = 15CB69D305C0722B0099E85F /* configd_server.h */; };
-               15732A7B16EA503200F3AC4C /* notify_server.h in Headers */ = {isa = PBXBuildFile; fileRef = 15CB69D505C0722B0099E85F /* notify_server.h */; };
                15732A7C16EA503200F3AC4C /* plugin_support.h in Headers */ = {isa = PBXBuildFile; fileRef = 15CB69D705C0722B0099E85F /* plugin_support.h */; };
                15732A7D16EA503200F3AC4C /* session.h in Headers */ = {isa = PBXBuildFile; fileRef = 15CB69D905C0722B0099E85F /* session.h */; };
                15732A7E16EA503200F3AC4C /* pattern.h in Headers */ = {isa = PBXBuildFile; fileRef = 15CB69DB05C0722B0099E85F /* pattern.h */; };
                15732A8016EA503200F3AC4C /* configd.m in Sources */ = {isa = PBXBuildFile; fileRef = 15CB69E005C0722B0099E85F /* configd.m */; settings = {ATTRIBUTES = (); }; };
                15732A8116EA503200F3AC4C /* _SCD.c in Sources */ = {isa = PBXBuildFile; fileRef = 15CB69E205C0722B0099E85F /* _SCD.c */; settings = {ATTRIBUTES = (); }; };
                15732A8216EA503200F3AC4C /* configd_server.c in Sources */ = {isa = PBXBuildFile; fileRef = 15CB69E405C0722B0099E85F /* configd_server.c */; settings = {ATTRIBUTES = (); }; };
-               15732A8316EA503200F3AC4C /* notify_server.c in Sources */ = {isa = PBXBuildFile; fileRef = 15CB69E605C0722B0099E85F /* notify_server.c */; settings = {ATTRIBUTES = (); }; };
                15732A8416EA503200F3AC4C /* plugin_support.c in Sources */ = {isa = PBXBuildFile; fileRef = 15CB69E805C0722B0099E85F /* plugin_support.c */; settings = {ATTRIBUTES = (); }; };
                15732A8516EA503200F3AC4C /* session.c in Sources */ = {isa = PBXBuildFile; fileRef = 15CB69EA05C0722B0099E85F /* session.c */; settings = {ATTRIBUTES = (); }; };
                15732A8616EA503200F3AC4C /* pattern.c in Sources */ = {isa = PBXBuildFile; fileRef = 15CB69EC05C0722B0099E85F /* pattern.c */; settings = {ATTRIBUTES = (); }; };
                15732A9216EA503200F3AC4C /* _notifychanges.c in Sources */ = {isa = PBXBuildFile; fileRef = 15CB6A0C05C0722B0099E85F /* _notifychanges.c */; settings = {ATTRIBUTES = (); }; };
                15732A9316EA503200F3AC4C /* _notifyviaport.c in Sources */ = {isa = PBXBuildFile; fileRef = 15CB6A0E05C0722B0099E85F /* _notifyviaport.c */; settings = {ATTRIBUTES = (); }; };
                15732A9416EA503200F3AC4C /* _notifyviafd.c in Sources */ = {isa = PBXBuildFile; fileRef = 15CB6A1005C0722B0099E85F /* _notifyviafd.c */; settings = {ATTRIBUTES = (); }; };
-               15732A9516EA503200F3AC4C /* _notifyviasignal.c in Sources */ = {isa = PBXBuildFile; fileRef = 15CB6A1205C0722B0099E85F /* _notifyviasignal.c */; settings = {ATTRIBUTES = (); }; };
                15732A9616EA503200F3AC4C /* _notifycancel.c in Sources */ = {isa = PBXBuildFile; fileRef = 15CB6A1405C0722B0099E85F /* _notifycancel.c */; settings = {ATTRIBUTES = (); }; };
                15732A9716EA503200F3AC4C /* _snapshot.c in Sources */ = {isa = PBXBuildFile; fileRef = 15CB6A1605C0722B0099E85F /* _snapshot.c */; settings = {ATTRIBUTES = (); }; };
                15732A9816EA503200F3AC4C /* config.defs in Sources */ = {isa = PBXBuildFile; fileRef = 15CB69BE05C0722B0099E85F /* config.defs */; settings = {ATTRIBUTES = (Server, ); }; };
                157A84FB0D56C7E800B6F1A0 /* dns-configuration.c in Sources */ = {isa = PBXBuildFile; fileRef = 159D53AA07528B36004F8947 /* dns-configuration.c */; };
                157A84FC0D56C7E800B6F1A0 /* set-hostname.c in Sources */ = {isa = PBXBuildFile; fileRef = 159D53AB07528B36004F8947 /* set-hostname.c */; };
                157A85080D56C8AA00B6F1A0 /* ifnamer.c in Sources */ = {isa = PBXBuildFile; fileRef = 159D53AE07528B36004F8947 /* ifnamer.c */; };
-               157A85120D56C8E000B6F1A0 /* cache.h in Headers */ = {isa = PBXBuildFile; fileRef = 159D53CB07528B36004F8947 /* cache.h */; };
                157A85140D56C8E000B6F1A0 /* ev_dlil.h in Headers */ = {isa = PBXBuildFile; fileRef = 159D53B207528B36004F8947 /* ev_dlil.h */; };
                157A85150D56C8E000B6F1A0 /* ev_ipv4.h in Headers */ = {isa = PBXBuildFile; fileRef = 159D53B807528B36004F8947 /* ev_ipv4.h */; };
                157A85160D56C8E000B6F1A0 /* ev_ipv6.h in Headers */ = {isa = PBXBuildFile; fileRef = 159D53BA07528B36004F8947 /* ev_ipv6.h */; };
                157A85170D56C8E000B6F1A0 /* eventmon.h in Headers */ = {isa = PBXBuildFile; fileRef = 159D53B707528B36004F8947 /* eventmon.h */; };
-               157A85190D56C8E000B6F1A0 /* cache.c in Sources */ = {isa = PBXBuildFile; fileRef = 159D53CA07528B36004F8947 /* cache.c */; };
                157A851B0D56C8E000B6F1A0 /* ev_dlil.c in Sources */ = {isa = PBXBuildFile; fileRef = 159D53B107528B36004F8947 /* ev_dlil.c */; };
                157A851C0D56C8E000B6F1A0 /* ev_ipv4.c in Sources */ = {isa = PBXBuildFile; fileRef = 159D53B307528B36004F8947 /* ev_ipv4.c */; };
                157A851D0D56C8E000B6F1A0 /* ev_ipv6.c in Sources */ = {isa = PBXBuildFile; fileRef = 159D53B407528B36004F8947 /* ev_ipv6.c */; };
                158317250CFB80A1006F62B9 /* configd.h in Headers */ = {isa = PBXBuildFile; fileRef = 15CB69CF05C0722B0099E85F /* configd.h */; };
                158317260CFB80A1006F62B9 /* _SCD.h in Headers */ = {isa = PBXBuildFile; fileRef = 15CB69D105C0722B0099E85F /* _SCD.h */; };
                158317270CFB80A1006F62B9 /* configd_server.h in Headers */ = {isa = PBXBuildFile; fileRef = 15CB69D305C0722B0099E85F /* configd_server.h */; };
-               158317280CFB80A1006F62B9 /* notify_server.h in Headers */ = {isa = PBXBuildFile; fileRef = 15CB69D505C0722B0099E85F /* notify_server.h */; };
                158317290CFB80A1006F62B9 /* plugin_support.h in Headers */ = {isa = PBXBuildFile; fileRef = 15CB69D705C0722B0099E85F /* plugin_support.h */; };
                1583172A0CFB80A1006F62B9 /* session.h in Headers */ = {isa = PBXBuildFile; fileRef = 15CB69D905C0722B0099E85F /* session.h */; };
                1583172B0CFB80A1006F62B9 /* pattern.h in Headers */ = {isa = PBXBuildFile; fileRef = 15CB69DB05C0722B0099E85F /* pattern.h */; };
                1583172D0CFB80A1006F62B9 /* configd.m in Sources */ = {isa = PBXBuildFile; fileRef = 15CB69E005C0722B0099E85F /* configd.m */; settings = {ATTRIBUTES = (); }; };
                1583172E0CFB80A1006F62B9 /* _SCD.c in Sources */ = {isa = PBXBuildFile; fileRef = 15CB69E205C0722B0099E85F /* _SCD.c */; settings = {ATTRIBUTES = (); }; };
                1583172F0CFB80A1006F62B9 /* configd_server.c in Sources */ = {isa = PBXBuildFile; fileRef = 15CB69E405C0722B0099E85F /* configd_server.c */; settings = {ATTRIBUTES = (); }; };
-               158317300CFB80A1006F62B9 /* notify_server.c in Sources */ = {isa = PBXBuildFile; fileRef = 15CB69E605C0722B0099E85F /* notify_server.c */; settings = {ATTRIBUTES = (); }; };
                158317310CFB80A1006F62B9 /* plugin_support.c in Sources */ = {isa = PBXBuildFile; fileRef = 15CB69E805C0722B0099E85F /* plugin_support.c */; settings = {ATTRIBUTES = (); }; };
                158317320CFB80A1006F62B9 /* session.c in Sources */ = {isa = PBXBuildFile; fileRef = 15CB69EA05C0722B0099E85F /* session.c */; settings = {ATTRIBUTES = (); }; };
                158317330CFB80A1006F62B9 /* pattern.c in Sources */ = {isa = PBXBuildFile; fileRef = 15CB69EC05C0722B0099E85F /* pattern.c */; settings = {ATTRIBUTES = (); }; };
                158317410CFB80A1006F62B9 /* _notifychanges.c in Sources */ = {isa = PBXBuildFile; fileRef = 15CB6A0C05C0722B0099E85F /* _notifychanges.c */; settings = {ATTRIBUTES = (); }; };
                158317420CFB80A1006F62B9 /* _notifyviaport.c in Sources */ = {isa = PBXBuildFile; fileRef = 15CB6A0E05C0722B0099E85F /* _notifyviaport.c */; settings = {ATTRIBUTES = (); }; };
                158317430CFB80A1006F62B9 /* _notifyviafd.c in Sources */ = {isa = PBXBuildFile; fileRef = 15CB6A1005C0722B0099E85F /* _notifyviafd.c */; settings = {ATTRIBUTES = (); }; };
-               158317440CFB80A1006F62B9 /* _notifyviasignal.c in Sources */ = {isa = PBXBuildFile; fileRef = 15CB6A1205C0722B0099E85F /* _notifyviasignal.c */; settings = {ATTRIBUTES = (); }; };
                158317450CFB80A1006F62B9 /* _notifycancel.c in Sources */ = {isa = PBXBuildFile; fileRef = 15CB6A1405C0722B0099E85F /* _notifycancel.c */; settings = {ATTRIBUTES = (); }; };
                158317460CFB80A1006F62B9 /* _snapshot.c in Sources */ = {isa = PBXBuildFile; fileRef = 15CB6A1605C0722B0099E85F /* _snapshot.c */; settings = {ATTRIBUTES = (); }; };
                158317470CFB80A1006F62B9 /* config.defs in Sources */ = {isa = PBXBuildFile; fileRef = 15CB69BE05C0722B0099E85F /* config.defs */; settings = {ATTRIBUTES = (Server, ); }; };
                159A752C107FEAA400A57EAB /* VPNPrivate.c in Sources */ = {isa = PBXBuildFile; fileRef = 159A7517107FEAA400A57EAB /* VPNPrivate.c */; };
                159A752E107FEAA400A57EAB /* VPNConfiguration.c in Sources */ = {isa = PBXBuildFile; fileRef = 159A7519107FEAA400A57EAB /* VPNConfiguration.c */; };
                159C32B60F583724008A72EE /* Security.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 1520A3DE0846B2DC0010B584 /* Security.framework */; };
-               159D540907528D3A004F8947 /* cache.c in Sources */ = {isa = PBXBuildFile; fileRef = 159D53CA07528B36004F8947 /* cache.c */; };
-               159D540A07528D3B004F8947 /* cache.h in Headers */ = {isa = PBXBuildFile; fileRef = 159D53CB07528B36004F8947 /* cache.h */; };
                159D540D07528DAE004F8947 /* ev_dlil.c in Sources */ = {isa = PBXBuildFile; fileRef = 159D53B107528B36004F8947 /* ev_dlil.c */; };
                159D540E07528DAE004F8947 /* ev_dlil.h in Headers */ = {isa = PBXBuildFile; fileRef = 159D53B207528B36004F8947 /* ev_dlil.h */; };
                159D540F07528DB0004F8947 /* ev_ipv4.c in Sources */ = {isa = PBXBuildFile; fileRef = 159D53B307528B36004F8947 /* ev_ipv4.c */; };
                159D54A407529FFF004F8947 /* configd.h in Headers */ = {isa = PBXBuildFile; fileRef = 15CB69CF05C0722B0099E85F /* configd.h */; };
                159D54A507529FFF004F8947 /* _SCD.h in Headers */ = {isa = PBXBuildFile; fileRef = 15CB69D105C0722B0099E85F /* _SCD.h */; };
                159D54A607529FFF004F8947 /* configd_server.h in Headers */ = {isa = PBXBuildFile; fileRef = 15CB69D305C0722B0099E85F /* configd_server.h */; };
-               159D54A707529FFF004F8947 /* notify_server.h in Headers */ = {isa = PBXBuildFile; fileRef = 15CB69D505C0722B0099E85F /* notify_server.h */; };
                159D54A807529FFF004F8947 /* plugin_support.h in Headers */ = {isa = PBXBuildFile; fileRef = 15CB69D705C0722B0099E85F /* plugin_support.h */; };
                159D54A907529FFF004F8947 /* session.h in Headers */ = {isa = PBXBuildFile; fileRef = 15CB69D905C0722B0099E85F /* session.h */; };
                159D54AA07529FFF004F8947 /* pattern.h in Headers */ = {isa = PBXBuildFile; fileRef = 15CB69DB05C0722B0099E85F /* pattern.h */; };
                159D54AC07529FFF004F8947 /* configd.m in Sources */ = {isa = PBXBuildFile; fileRef = 15CB69E005C0722B0099E85F /* configd.m */; settings = {ATTRIBUTES = (); }; };
                159D54AD07529FFF004F8947 /* _SCD.c in Sources */ = {isa = PBXBuildFile; fileRef = 15CB69E205C0722B0099E85F /* _SCD.c */; settings = {ATTRIBUTES = (); }; };
                159D54AE07529FFF004F8947 /* configd_server.c in Sources */ = {isa = PBXBuildFile; fileRef = 15CB69E405C0722B0099E85F /* configd_server.c */; settings = {ATTRIBUTES = (); }; };
-               159D54AF07529FFF004F8947 /* notify_server.c in Sources */ = {isa = PBXBuildFile; fileRef = 15CB69E605C0722B0099E85F /* notify_server.c */; settings = {ATTRIBUTES = (); }; };
                159D54B007529FFF004F8947 /* plugin_support.c in Sources */ = {isa = PBXBuildFile; fileRef = 15CB69E805C0722B0099E85F /* plugin_support.c */; settings = {ATTRIBUTES = (); }; };
                159D54B107529FFF004F8947 /* session.c in Sources */ = {isa = PBXBuildFile; fileRef = 15CB69EA05C0722B0099E85F /* session.c */; settings = {ATTRIBUTES = (); }; };
                159D54B207529FFF004F8947 /* pattern.c in Sources */ = {isa = PBXBuildFile; fileRef = 15CB69EC05C0722B0099E85F /* pattern.c */; settings = {ATTRIBUTES = (); }; };
                159D54C007529FFF004F8947 /* _notifychanges.c in Sources */ = {isa = PBXBuildFile; fileRef = 15CB6A0C05C0722B0099E85F /* _notifychanges.c */; settings = {ATTRIBUTES = (); }; };
                159D54C107529FFF004F8947 /* _notifyviaport.c in Sources */ = {isa = PBXBuildFile; fileRef = 15CB6A0E05C0722B0099E85F /* _notifyviaport.c */; settings = {ATTRIBUTES = (); }; };
                159D54C207529FFF004F8947 /* _notifyviafd.c in Sources */ = {isa = PBXBuildFile; fileRef = 15CB6A1005C0722B0099E85F /* _notifyviafd.c */; settings = {ATTRIBUTES = (); }; };
-               159D54C307529FFF004F8947 /* _notifyviasignal.c in Sources */ = {isa = PBXBuildFile; fileRef = 15CB6A1205C0722B0099E85F /* _notifyviasignal.c */; settings = {ATTRIBUTES = (); }; };
                159D54C407529FFF004F8947 /* _notifycancel.c in Sources */ = {isa = PBXBuildFile; fileRef = 15CB6A1405C0722B0099E85F /* _notifycancel.c */; settings = {ATTRIBUTES = (); }; };
                159D54C507529FFF004F8947 /* _snapshot.c in Sources */ = {isa = PBXBuildFile; fileRef = 15CB6A1605C0722B0099E85F /* _snapshot.c */; settings = {ATTRIBUTES = (); }; };
                159D54C607529FFF004F8947 /* config.defs in Sources */ = {isa = PBXBuildFile; fileRef = 15CB69BE05C0722B0099E85F /* config.defs */; settings = {ATTRIBUTES = (Server, ); }; };
                159D54CC07529FFF004F8947 /* CoreFoundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 15CB6A6F05C0722B0099E85F /* CoreFoundation.framework */; };
                159D54D607529FFF004F8947 /* configd.8 in CopyFiles */ = {isa = PBXBuildFile; fileRef = 15CB6A2005C0722B0099E85F /* configd.8 */; };
+               159FFD5F2110EA44009311DD /* dnsinfo_flatfile.c in Sources */ = {isa = PBXBuildFile; fileRef = 1522FCE50FA7FD7000B24128 /* dnsinfo_flatfile.c */; };
+               159FFD612110EA71009311DD /* dnsinfo_flatfile.c in Sources */ = {isa = PBXBuildFile; fileRef = 1522FCE50FA7FD7000B24128 /* dnsinfo_flatfile.c */; };
                15A1FF3210597F17004C9CC9 /* CaptiveNetwork.h in Headers */ = {isa = PBXBuildFile; fileRef = 15A1FF3010597F17004C9CC9 /* CaptiveNetwork.h */; settings = {ATTRIBUTES = (Public, ); }; };
                15A1FF3310597F17004C9CC9 /* CaptiveNetwork.c in Sources */ = {isa = PBXBuildFile; fileRef = 15A1FF3110597F17004C9CC9 /* CaptiveNetwork.c */; };
                15A1FF3410597F17004C9CC9 /* CaptiveNetwork.h in Headers */ = {isa = PBXBuildFile; fileRef = 15A1FF3010597F17004C9CC9 /* CaptiveNetwork.h */; settings = {ATTRIBUTES = (Public, ); }; };
                15A5A2310D5B94190087BDA0 /* SCDNotifierWait.c in Sources */ = {isa = PBXBuildFile; fileRef = 15CB697605C0722B0099E85F /* SCDNotifierWait.c */; settings = {ATTRIBUTES = (); }; };
                15A5A2320D5B94190087BDA0 /* SCDNotifierInformViaCallback.c in Sources */ = {isa = PBXBuildFile; fileRef = 15CB697805C0722B0099E85F /* SCDNotifierInformViaCallback.c */; settings = {ATTRIBUTES = (); }; };
                15A5A2340D5B94190087BDA0 /* SCDNotifierInformViaFD.c in Sources */ = {isa = PBXBuildFile; fileRef = 15CB697C05C0722B0099E85F /* SCDNotifierInformViaFD.c */; settings = {ATTRIBUTES = (); }; };
-               15A5A2350D5B94190087BDA0 /* SCDNotifierInformViaSignal.c in Sources */ = {isa = PBXBuildFile; fileRef = 15CB697E05C0722B0099E85F /* SCDNotifierInformViaSignal.c */; settings = {ATTRIBUTES = (); }; };
                15A5A2360D5B94190087BDA0 /* SCDNotifierCancel.c in Sources */ = {isa = PBXBuildFile; fileRef = 15CB698005C0722B0099E85F /* SCDNotifierCancel.c */; settings = {ATTRIBUTES = (); }; };
                15A5A2370D5B94190087BDA0 /* SCDSnapshot.c in Sources */ = {isa = PBXBuildFile; fileRef = 15CB698205C0722B0099E85F /* SCDSnapshot.c */; settings = {ATTRIBUTES = (); }; };
                15A5A2380D5B94190087BDA0 /* SCP.c in Sources */ = {isa = PBXBuildFile; fileRef = 15CB698405C0722B0099E85F /* SCP.c */; settings = {ATTRIBUTES = (); }; };
                15C330D1134B95AA0028E36B /* SCNetworkReachabilityInternal.h in Headers */ = {isa = PBXBuildFile; fileRef = 15C330D0134B95AA0028E36B /* SCNetworkReachabilityInternal.h */; };
                15C330D2134B95AA0028E36B /* SCNetworkReachabilityInternal.h in Headers */ = {isa = PBXBuildFile; fileRef = 15C330D0134B95AA0028E36B /* SCNetworkReachabilityInternal.h */; };
                15C330D3134B95AA0028E36B /* SCNetworkReachabilityInternal.h in Headers */ = {isa = PBXBuildFile; fileRef = 15C330D0134B95AA0028E36B /* SCNetworkReachabilityInternal.h */; };
-               15C8C6BF170AAB4E005375CE /* cache.c in Sources */ = {isa = PBXBuildFile; fileRef = 159D53CA07528B36004F8947 /* cache.c */; };
-               15C8C6C0170AAB4E005375CE /* cache.h in Headers */ = {isa = PBXBuildFile; fileRef = 159D53CB07528B36004F8947 /* cache.h */; };
                15CB8F701EE4DCFC00726685 /* network_state_information_logging.h in Headers */ = {isa = PBXBuildFile; fileRef = 1528922C1EDE41ED00FCFE71 /* network_state_information_logging.h */; };
                15CB8F711EE4DCFF00726685 /* network_state_information_logging.h in Headers */ = {isa = PBXBuildFile; fileRef = 1528922C1EDE41ED00FCFE71 /* network_state_information_logging.h */; };
                15CB8F721EE4DD0400726685 /* network_state_information_logging.h in Headers */ = {isa = PBXBuildFile; fileRef = 1528922C1EDE41ED00FCFE71 /* network_state_information_logging.h */; };
                15D92BA31FFC647800DF2632 /* libnetwork.tbd in Frameworks */ = {isa = PBXBuildFile; fileRef = 15D92BA01FFC641500DF2632 /* libnetwork.tbd */; };
                15D92BA41FFC648900DF2632 /* libnetwork.tbd in Frameworks */ = {isa = PBXBuildFile; fileRef = 15D92B9D1FFC61F400DF2632 /* libnetwork.tbd */; };
                15D92BA51FFC64DB00DF2632 /* libnetwork.tbd in Frameworks */ = {isa = PBXBuildFile; fileRef = 15D92BA01FFC641500DF2632 /* libnetwork.tbd */; };
-               15D92BA71FFC669100DF2632 /* MobileWiFi.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 15D92BA61FFC669000DF2632 /* MobileWiFi.framework */; };
-               15D9DCFB10DD90A1004E545D /* AppWorkaround.plist in AppWorkaround.plist */ = {isa = PBXBuildFile; fileRef = 15D9DCFA10DD90A1004E545D /* AppWorkaround.plist */; };
+               15D92BA71FFC669100DF2632 /* MobileWiFi.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 15D92BA61FFC669000DF2632 /* MobileWiFi.framework */; settings = {ATTRIBUTES = (Weak, ); }; };
                15DAD5E1075913CE0084A6ED /* dnsinfo.h in Headers */ = {isa = PBXBuildFile; fileRef = 15B73F0905FD1B670096477F /* dnsinfo.h */; settings = {ATTRIBUTES = (Public, ); }; };
                15DAD5E2075913CE0084A6ED /* dnsinfo_private.h in Headers */ = {isa = PBXBuildFile; fileRef = 15B73F0C05FD1B670096477F /* dnsinfo_private.h */; };
                15DAD5E6075913CE0084A6ED /* dnsinfo_copy.c in Sources */ = {isa = PBXBuildFile; fileRef = 15B73F0805FD1B670096477F /* dnsinfo_copy.c */; };
                15DAD67F07591A1A0084A6ED /* SCDNotifierWait.c in Sources */ = {isa = PBXBuildFile; fileRef = 15CB697605C0722B0099E85F /* SCDNotifierWait.c */; settings = {ATTRIBUTES = (); }; };
                15DAD68007591A1A0084A6ED /* SCDNotifierInformViaCallback.c in Sources */ = {isa = PBXBuildFile; fileRef = 15CB697805C0722B0099E85F /* SCDNotifierInformViaCallback.c */; settings = {ATTRIBUTES = (); }; };
                15DAD68207591A1A0084A6ED /* SCDNotifierInformViaFD.c in Sources */ = {isa = PBXBuildFile; fileRef = 15CB697C05C0722B0099E85F /* SCDNotifierInformViaFD.c */; settings = {ATTRIBUTES = (); }; };
-               15DAD68307591A1A0084A6ED /* SCDNotifierInformViaSignal.c in Sources */ = {isa = PBXBuildFile; fileRef = 15CB697E05C0722B0099E85F /* SCDNotifierInformViaSignal.c */; settings = {ATTRIBUTES = (); }; };
                15DAD68407591A1A0084A6ED /* SCDNotifierCancel.c in Sources */ = {isa = PBXBuildFile; fileRef = 15CB698005C0722B0099E85F /* SCDNotifierCancel.c */; settings = {ATTRIBUTES = (); }; };
                15DAD68507591A1A0084A6ED /* SCDSnapshot.c in Sources */ = {isa = PBXBuildFile; fileRef = 15CB698205C0722B0099E85F /* SCDSnapshot.c */; settings = {ATTRIBUTES = (); }; };
                15DAD68607591A1A0084A6ED /* SCP.c in Sources */ = {isa = PBXBuildFile; fileRef = 15CB698405C0722B0099E85F /* SCP.c */; settings = {ATTRIBUTES = (); }; };
                15E1B05316EBAE3C00E5F06F /* libSystemConfiguration_server.c in Sources */ = {isa = PBXBuildFile; fileRef = 1596A7AF14EDB73D00798C39 /* libSystemConfiguration_server.c */; };
                15E1B05416EBAE3C00E5F06F /* scprefs_observer.c in Sources */ = {isa = PBXBuildFile; fileRef = D61AAEAD1522C99C0066B003 /* scprefs_observer.c */; };
                15E1B05516EBAE3C00E5F06F /* IPMonitorControlPrefs.c in Sources */ = {isa = PBXBuildFile; fileRef = F9A3780E16A4846E00C57CDC /* IPMonitorControlPrefs.c */; };
+               15E56C552193840000088C51 /* SystemConfiguration.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 15A5A26A0D5B94190087BDA0 /* SystemConfiguration.framework */; };
+               15E56C5921939B6400088C51 /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 725CB7541BF439C6000C05A8 /* Foundation.framework */; };
+               15E56C5B21939B7B00088C51 /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 15E56C5A21939B7B00088C51 /* Foundation.framework */; };
+               15E56C5C21939B8E00088C51 /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 15E56C5A21939B7B00088C51 /* Foundation.framework */; };
+               15E91DB721893E83001155DC /* test-objC.m in Sources */ = {isa = PBXBuildFile; fileRef = 72D3E66B1AE6EAF600DB4C69 /* test-objC.m */; };
+               15E91DB921893E83001155DC /* SystemConfiguration.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 1547072E0D1F70C80075C28D /* SystemConfiguration.framework */; };
+               15E91DD021893EE1001155DC /* main.swift in Sources */ = {isa = PBXBuildFile; fileRef = 72D3E6601AE6EA3A00DB4C69 /* main.swift */; };
+               15EF899F21894452003B2C5C /* SCNetworkInterfaceProvider.h in Headers */ = {isa = PBXBuildFile; fileRef = F90E43542012AD3900EF27C4 /* SCNetworkInterfaceProvider.h */; settings = {ATTRIBUTES = (Private, ); }; };
+               15EF89A021894533003B2C5C /* SNHelperPrivate.h in Headers */ = {isa = PBXBuildFile; fileRef = B0C967F717441F0E00889853 /* SNHelperPrivate.h */; settings = {ATTRIBUTES = (Private, ); }; };
+               15EF89AA21894636003B2C5C /* test-objC.m in Sources */ = {isa = PBXBuildFile; fileRef = 72D3E66B1AE6EAF600DB4C69 /* test-objC.m */; };
+               15EF89AC21894636003B2C5C /* SystemConfiguration.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 1547072E0D1F70C80075C28D /* SystemConfiguration.framework */; };
+               15EF89B621894665003B2C5C /* main.swift in Sources */ = {isa = PBXBuildFile; fileRef = 72D3E6601AE6EA3A00DB4C69 /* main.swift */; };
+               15EF89C921894AA5003B2C5C /* SCNetworkInterfaceProvider.c in Sources */ = {isa = PBXBuildFile; fileRef = F90E43552012AD4500EF27C4 /* SCNetworkInterfaceProvider.c */; };
+               15EF89CA21894AB4003B2C5C /* SNHelper.c in Sources */ = {isa = PBXBuildFile; fileRef = B0C9689B174426C200889853 /* SNHelper.c */; };
+               15EF89CB21894B1A003B2C5C /* IPMonitorControlPrivate.h in Headers */ = {isa = PBXBuildFile; fileRef = F9B7AE5E1862116500C78D18 /* IPMonitorControlPrivate.h */; };
+               15EF89CC21894B28003B2C5C /* IPMonitorControl.h in Headers */ = {isa = PBXBuildFile; fileRef = F9B7AE5D1862116500C78D18 /* IPMonitorControl.h */; };
+               15EF89CD21894B32003B2C5C /* IPMonitorControl.c in Sources */ = {isa = PBXBuildFile; fileRef = F9B7AE5C1862116500C78D18 /* IPMonitorControl.c */; };
                15F21618110F823500E89CF7 /* libbsm.dylib in Frameworks */ = {isa = PBXBuildFile; fileRef = 15BAA32207F0699A00D9EC95 /* libbsm.dylib */; };
                15F742DD1EC6370000DA2E7A /* liblog_SystemConfiguration.m in Sources */ = {isa = PBXBuildFile; fileRef = 151D060D1EC14C6700E02E48 /* liblog_SystemConfiguration.m */; };
                15F742DF1EC6370000DA2E7A /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 725CB7541BF439C6000C05A8 /* Foundation.framework */; };
                720A4C0C1C585C97007436B8 /* dnsAgent.h in Headers */ = {isa = PBXBuildFile; fileRef = 7280157C1BE16833009F4F60 /* dnsAgent.h */; };
                720A4C0D1C585C9F007436B8 /* proxyAgent.h in Headers */ = {isa = PBXBuildFile; fileRef = 7280157F1BE16833009F4F60 /* proxyAgent.h */; };
                7214BCE31BEB392000A8F056 /* Network.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 728015951BE16B6C009F4F60 /* Network.framework */; };
-               7214BCE41BEB392300A8F056 /* NetworkExtension.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 728015961BE16B6C009F4F60 /* NetworkExtension.framework */; };
+               7214BCE41BEB392300A8F056 /* NetworkExtension.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 728015961BE16B6C009F4F60 /* NetworkExtension.framework */; settings = {ATTRIBUTES = (Weak, ); }; };
                72499BA41AC9B7AB0090C49F /* get-network-info in Resources */ = {isa = PBXBuildFile; fileRef = 72499BA31AC9B7AB0090C49F /* get-network-info */; };
                72499BA51AC9B7AB0090C49F /* get-network-info in Resources */ = {isa = PBXBuildFile; fileRef = 72499BA31AC9B7AB0090C49F /* get-network-info */; };
                72573D291D667372004975AD /* main.m in Sources */ = {isa = PBXBuildFile; fileRef = 72573D281D667372004975AD /* main.m */; };
                728015911BE1686C009F4F60 /* proxyAgent.m in Sources */ = {isa = PBXBuildFile; fileRef = 728015801BE16833009F4F60 /* proxyAgent.m */; };
                728015921BE1686F009F4F60 /* proxyAgent.m in Sources */ = {isa = PBXBuildFile; fileRef = 728015801BE16833009F4F60 /* proxyAgent.m */; };
                728015971BE16B6C009F4F60 /* Network.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 728015951BE16B6C009F4F60 /* Network.framework */; };
-               728015981BE16B6C009F4F60 /* NetworkExtension.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 728015961BE16B6C009F4F60 /* NetworkExtension.framework */; };
+               728015981BE16B6C009F4F60 /* NetworkExtension.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 728015961BE16B6C009F4F60 /* NetworkExtension.framework */; settings = {ATTRIBUTES = (Required, ); }; };
                728015991BE1812B009F4F60 /* agent-monitor.h in Headers */ = {isa = PBXBuildFile; fileRef = 728015931BE1697E009F4F60 /* agent-monitor.h */; };
                7280159B1BE1812B009F4F60 /* configAgent.h in Headers */ = {isa = PBXBuildFile; fileRef = 728015781BE16833009F4F60 /* configAgent.h */; };
                7280159C1BE1812B009F4F60 /* controller.h in Headers */ = {isa = PBXBuildFile; fileRef = 7280157A1BE16833009F4F60 /* controller.h */; };
                C42633891A9E4991009F7AE4 /* VPNFlow.c in Sources */ = {isa = PBXBuildFile; fileRef = C4CDB8141631935700819B44 /* VPNFlow.c */; };
                C4666C72206ED01800247AB6 /* EventFactory.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 15FA0F74203A390E00C7702F /* EventFactory.framework */; };
                C4666C7A206ED27800247AB6 /* EventFactory.m in Sources */ = {isa = PBXBuildFile; fileRef = 1597A9A41FBCECCD000FAA86 /* EventFactory.m */; };
+               C469CB2920EED6C100A7AD35 /* StateDumpParser.m in Sources */ = {isa = PBXBuildFile; fileRef = C469CB2820EED6C100A7AD35 /* StateDumpParser.m */; };
+               C496A09620F909FF0098B3E5 /* IPConfigurationParser.m in Sources */ = {isa = PBXBuildFile; fileRef = C496A09520F909FF0098B3E5 /* IPConfigurationParser.m */; };
+               C4C5FB0520EA9B6F00F35614 /* SCLogParser.m in Sources */ = {isa = PBXBuildFile; fileRef = C4C5FB0420EA9B6F00F35614 /* SCLogParser.m */; };
+               C4C5FB0620EA9C3200F35614 /* KernelEventMonitorParser.m in Sources */ = {isa = PBXBuildFile; fileRef = C4C5FB0220EA9A5A00F35614 /* KernelEventMonitorParser.m */; };
+               C4C5FB0920EAB0DD00F35614 /* InterfaceNamerParser.m in Sources */ = {isa = PBXBuildFile; fileRef = C4C5FB0820EAB0DD00F35614 /* InterfaceNamerParser.m */; };
+               C4C5FB0C20EABD9E00F35614 /* IPMonitorParser.m in Sources */ = {isa = PBXBuildFile; fileRef = C4C5FB0B20EABD9E00F35614 /* IPMonitorParser.m */; };
+               C4C5FB0F20EAC05200F35614 /* PreferencesMonitorParser.m in Sources */ = {isa = PBXBuildFile; fileRef = C4C5FB0E20EAC05200F35614 /* PreferencesMonitorParser.m */; };
                C4CDB8151631935700819B44 /* VPNFlow.c in Sources */ = {isa = PBXBuildFile; fileRef = C4CDB8141631935700819B44 /* VPNFlow.c */; };
                C4CDB8161631935700819B44 /* VPNFlow.c in Sources */ = {isa = PBXBuildFile; fileRef = C4CDB8141631935700819B44 /* VPNFlow.c */; };
                C4CDB8171631938000819B44 /* VPNFlow.h in Headers */ = {isa = PBXBuildFile; fileRef = C4CDB8111631933400819B44 /* VPNFlow.h */; settings = {ATTRIBUTES = (Private, ); }; };
                D6986A79136891650091C931 /* network_information.c in Sources */ = {isa = PBXBuildFile; fileRef = D6986A77136891300091C931 /* network_information.c */; };
                E49173E1137C4E4F0000089F /* network_state_information_priv.c in Sources */ = {isa = PBXBuildFile; fileRef = D6986A75136891120091C931 /* network_state_information_priv.c */; };
                E4F211D3137B0AB900BBB915 /* network_state_information_priv.c in Sources */ = {isa = PBXBuildFile; fileRef = D6986A75136891120091C931 /* network_state_information_priv.c */; };
+               F90E43562012AD4F00EF27C4 /* SCNetworkInterfaceProvider.h in Headers */ = {isa = PBXBuildFile; fileRef = F90E43542012AD3900EF27C4 /* SCNetworkInterfaceProvider.h */; settings = {ATTRIBUTES = (Private, ); }; };
+               F90E43572012AD6000EF27C4 /* SCNetworkInterfaceProvider.h in Headers */ = {isa = PBXBuildFile; fileRef = F90E43542012AD3900EF27C4 /* SCNetworkInterfaceProvider.h */; settings = {ATTRIBUTES = (Private, ); }; };
+               F90E43582012AD6900EF27C4 /* SCNetworkInterfaceProvider.c in Sources */ = {isa = PBXBuildFile; fileRef = F90E43552012AD4500EF27C4 /* SCNetworkInterfaceProvider.c */; };
+               F90E43592012AD6B00EF27C4 /* SCNetworkInterfaceProvider.c in Sources */ = {isa = PBXBuildFile; fileRef = F90E43552012AD4500EF27C4 /* SCNetworkInterfaceProvider.c */; };
                F9347FF7187C796E003D4178 /* IPMonitorControl.c in Sources */ = {isa = PBXBuildFile; fileRef = F9B7AE5C1862116500C78D18 /* IPMonitorControl.c */; };
                F9347FF8187C7993003D4178 /* IPMonitorControl.h in Headers */ = {isa = PBXBuildFile; fileRef = F9B7AE5D1862116500C78D18 /* IPMonitorControl.h */; };
                F9347FF9187C7993003D4178 /* IPMonitorControlPrivate.h in Headers */ = {isa = PBXBuildFile; fileRef = F9B7AE5E1862116500C78D18 /* IPMonitorControlPrivate.h */; };
                F95B8A430B03E07A00993BA3 /* SCNetworkSignature.c in Sources */ = {isa = PBXBuildFile; fileRef = F95B8A420B03E07A00993BA3 /* SCNetworkSignature.c */; };
                F95B8A460B03E09300993BA3 /* SCNetworkSignature.h in Headers */ = {isa = PBXBuildFile; fileRef = F95B8A440B03E09300993BA3 /* SCNetworkSignature.h */; settings = {ATTRIBUTES = (Private, ); }; };
                F95B8A470B03E09300993BA3 /* SCNetworkSignaturePrivate.h in Headers */ = {isa = PBXBuildFile; fileRef = F95B8A450B03E09300993BA3 /* SCNetworkSignaturePrivate.h */; settings = {ATTRIBUTES = (Private, ); }; };
-               F97F9FC7202CBD5A0040BD50 /* SCNetworkInterfaceProvider.h in Headers */ = {isa = PBXBuildFile; fileRef = F97F9FC5202CBD130040BD50 /* SCNetworkInterfaceProvider.h */; settings = {ATTRIBUTES = (Private, ); }; };
-               F97F9FC8202CBD600040BD50 /* SCNetworkInterfaceProvider.h in Headers */ = {isa = PBXBuildFile; fileRef = F97F9FC5202CBD130040BD50 /* SCNetworkInterfaceProvider.h */; settings = {ATTRIBUTES = (Private, ); }; };
-               F97F9FC9202CBD710040BD50 /* SCNetworkInterfaceProvider.c in Sources */ = {isa = PBXBuildFile; fileRef = F97F9FC6202CBD230040BD50 /* SCNetworkInterfaceProvider.c */; };
-               F999388920FE54DB005EE20D /* AwdMetadata-0x81-IPMonitor.bin in CopyFiles */ = {isa = PBXBuildFile; fileRef = F999388820FE54CB005EE20D /* AwdMetadata-0x81-IPMonitor.bin */; };
+               F963401020FE8E6000F1E1F1 /* AwdMetadata-0x81-IPMonitor.bin in CopyFiles */ = {isa = PBXBuildFile; fileRef = F963400E20FE8E1D00F1E1F1 /* AwdMetadata-0x81-IPMonitor.bin */; };
+               F97289D322652D0600080596 /* serviceIDNumber.c in Sources */ = {isa = PBXBuildFile; fileRef = F97289D122652CE600080596 /* serviceIDNumber.c */; };
+               F97289D422652D0A00080596 /* serviceIDNumber.c in Sources */ = {isa = PBXBuildFile; fileRef = F97289D122652CE600080596 /* serviceIDNumber.c */; };
+               F97289D522652D0D00080596 /* serviceIDNumber.c in Sources */ = {isa = PBXBuildFile; fileRef = F97289D122652CE600080596 /* serviceIDNumber.c */; };
                F9A3781016A4847700C57CDC /* IPMonitorControlPrefs.c in Sources */ = {isa = PBXBuildFile; fileRef = F9A3780E16A4846E00C57CDC /* IPMonitorControlPrefs.c */; };
                F9A3781116A4849100C57CDC /* IPMonitorControlPrefs.c in Sources */ = {isa = PBXBuildFile; fileRef = F9A3780E16A4846E00C57CDC /* IPMonitorControlPrefs.c */; };
-               F9AF76C1202CCD86008D3BEB /* SCNetworkInterfaceProvider.c in Sources */ = {isa = PBXBuildFile; fileRef = F97F9FC6202CBD230040BD50 /* SCNetworkInterfaceProvider.c */; };
                F9B50FF316A4CBB200CA274E /* IPMonitorControlPrefs.c in Sources */ = {isa = PBXBuildFile; fileRef = F9A3780E16A4846E00C57CDC /* IPMonitorControlPrefs.c */; };
                F9B50FF416A4CBB800CA274E /* IPMonitorControlPrefs.c in Sources */ = {isa = PBXBuildFile; fileRef = F9A3780E16A4846E00C57CDC /* IPMonitorControlPrefs.c */; };
                F9B7AE641862119300C78D18 /* IPMonitorControl.c in Sources */ = {isa = PBXBuildFile; fileRef = F9B7AE5C1862116500C78D18 /* IPMonitorControl.c */; };
                F9B7AE6F186211F600C78D18 /* symbol_scope.h in Headers */ = {isa = PBXBuildFile; fileRef = F9B7AE631862116500C78D18 /* symbol_scope.h */; };
                F9D7304B20DDBE9900521181 /* AWDIPMonitorInterfaceAdvisoryReport.m in Sources */ = {isa = PBXBuildFile; fileRef = F9D7304920DD89C600521181 /* AWDIPMonitorInterfaceAdvisoryReport.m */; settings = {COMPILER_FLAGS = "-fno-objc-arc"; }; };
                F9D7304C20DDBEAB00521181 /* IPMonitorAWDReport.m in Sources */ = {isa = PBXBuildFile; fileRef = F9D7303D20DD894C00521181 /* IPMonitorAWDReport.m */; settings = {COMPILER_FLAGS = "-fno-objc-arc"; }; };
-               F9D7304F20E41D9C00521181 /* ProtocolBuffer.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = F9D7304E20E41D9C00521181 /* ProtocolBuffer.framework */; };
-               F9D7305120E41DD500521181 /* WirelessDiagnostics.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = F9D7305020E41DD500521181 /* WirelessDiagnostics.framework */; settings = {ATTRIBUTES = (Required, ); }; };
+               F9D7304F20E41D9C00521181 /* ProtocolBuffer.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = F9D7304E20E41D9C00521181 /* ProtocolBuffer.framework */; settings = {ATTRIBUTES = (Weak, ); }; };
+               F9D7305120E41DD500521181 /* WirelessDiagnostics.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = F9D7305020E41DD500521181 /* WirelessDiagnostics.framework */; settings = {ATTRIBUTES = (Weak, ); }; };
                F9D7305220E4211900521181 /* AWDIPMonitorInterfaceAdvisoryReport.m in Sources */ = {isa = PBXBuildFile; fileRef = F9D7304920DD89C600521181 /* AWDIPMonitorInterfaceAdvisoryReport.m */; settings = {COMPILER_FLAGS = "-fno-objc-arc"; }; };
                F9D7305320E4211900521181 /* IPMonitorAWDReport.m in Sources */ = {isa = PBXBuildFile; fileRef = F9D7303D20DD894C00521181 /* IPMonitorAWDReport.m */; settings = {COMPILER_FLAGS = "-fno-objc-arc"; }; };
                F9D7305420E4387A00521181 /* ProtocolBuffer.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = F9D7304E20E41D9C00521181 /* ProtocolBuffer.framework */; };
 /* End PBXBuildFile section */
 
 /* Begin PBXContainerItemProxy section */
+               150EC100210171AE0047F4BF /* PBXContainerItemProxy */ = {
+                       isa = PBXContainerItemProxy;
+                       containerPortal = 15CB6A7705C0722B0099E85F /* Project object */;
+                       proxyType = 1;
+                       remoteGlobalIDString = 72D3E6681AE6EAF600DB4C69;
+                       remoteInfo = "SCTest-ObjC";
+               };
+               150EC102210171B60047F4BF /* PBXContainerItemProxy */ = {
+                       isa = PBXContainerItemProxy;
+                       containerPortal = 15CB6A7705C0722B0099E85F /* Project object */;
+                       proxyType = 1;
+                       remoteGlobalIDString = 72D3E65D1AE6EA3900DB4C69;
+                       remoteInfo = "SCTest-Swift";
+               };
                150ECB2F0D0042DA0065E94D /* PBXContainerItemProxy */ = {
                        isa = PBXContainerItemProxy;
                        containerPortal = 15CB6A7705C0722B0099E85F /* Project object */;
                        remoteGlobalIDString = 158337990CFB6B9E0033AB93;
                        remoteInfo = "SCHelper-Embedded";
                };
+               15401C2B21991B05006326B7 /* PBXContainerItemProxy */ = {
+                       isa = PBXContainerItemProxy;
+                       containerPortal = 15CB6A7705C0722B0099E85F /* Project object */;
+                       proxyType = 1;
+                       remoteGlobalIDString = 15401C1C21991506006326B7;
+                       remoteInfo = configd_extras;
+               };
+               15401C2D21991B1B006326B7 /* PBXContainerItemProxy */ = {
+                       isa = PBXContainerItemProxy;
+                       containerPortal = 15CB6A7705C0722B0099E85F /* Project object */;
+                       proxyType = 1;
+                       remoteGlobalIDString = 15401C21219915BC006326B7;
+                       remoteInfo = "configd_extras-Embedded";
+               };
+               15401C2F21991B31006326B7 /* PBXContainerItemProxy */ = {
+                       isa = PBXContainerItemProxy;
+                       containerPortal = 15CB6A7705C0722B0099E85F /* Project object */;
+                       proxyType = 1;
+                       remoteGlobalIDString = 15401C26219915C6006326B7;
+                       remoteInfo = "configd_extras-EmbeddedSimulator";
+               };
                1558480507550D470046C2E9 /* PBXContainerItemProxy */ = {
                        isa = PBXContainerItemProxy;
                        containerPortal = 15CB6A7705C0722B0099E85F /* Project object */;
                        remoteGlobalIDString = 155847FA07550D210046C2E9;
                        remoteInfo = configd_executables;
                };
+               155C626021C2B6FD008DCB1A /* PBXContainerItemProxy */ = {
+                       isa = PBXContainerItemProxy;
+                       containerPortal = 15CB6A7705C0722B0099E85F /* Project object */;
+                       proxyType = 1;
+                       remoteGlobalIDString = 157433DD0D4A8122002ACA73;
+                       remoteInfo = "scselect-Embedded";
+               };
+               155C626421C2B6FD008DCB1A /* PBXContainerItemProxy */ = {
+                       isa = PBXContainerItemProxy;
+                       containerPortal = 15CB6A7705C0722B0099E85F /* Project object */;
+                       proxyType = 1;
+                       remoteGlobalIDString = 7271EA1B1D76600B0055B1AA;
+                       remoteInfo = "sctest-Embedded";
+               };
                155F49A81C8650E900E47D08 /* PBXContainerItemProxy */ = {
                        isa = PBXContainerItemProxy;
                        containerPortal = 15CB6A7705C0722B0099E85F /* Project object */;
                        remoteGlobalIDString = 157433F00D4A8137002ACA73;
                        remoteInfo = "scutil-Embedded";
                };
-               157434200D4A8166002ACA73 /* PBXContainerItemProxy */ = {
-                       isa = PBXContainerItemProxy;
-                       containerPortal = 15CB6A7705C0722B0099E85F /* Project object */;
-                       proxyType = 1;
-                       remoteGlobalIDString = 157433DD0D4A8122002ACA73;
-                       remoteInfo = "scselect-Embedded";
-               };
                157A85470D56CA0B00B6F1A0 /* PBXContainerItemProxy */ = {
                        isa = PBXContainerItemProxy;
                        containerPortal = 15CB6A7705C0722B0099E85F /* Project object */;
                        remoteGlobalIDString = 15FD13BF0D59485000F9409C;
                        remoteInfo = "All-EmbeddedSimulator";
                };
-               723050311AE6F292004AC149 /* PBXContainerItemProxy */ = {
+               15EF89A121894601003B2C5C /* PBXContainerItemProxy */ = {
                        isa = PBXContainerItemProxy;
                        containerPortal = 15CB6A7705C0722B0099E85F /* Project object */;
                        proxyType = 1;
-                       remoteGlobalIDString = 15DAD63F07591A1A0084A6ED;
-                       remoteInfo = SystemConfiguration.framework;
+                       remoteGlobalIDString = 1572C4A60CFB55B400E2776E;
+                       remoteInfo = "SystemConfiguration.framework-Embedded";
                };
-               723050331AE6F29D004AC149 /* PBXContainerItemProxy */ = {
+               15EF89A32189461B003B2C5C /* PBXContainerItemProxy */ = {
+                       isa = PBXContainerItemProxy;
+                       containerPortal = 15CB6A7705C0722B0099E85F /* Project object */;
+                       proxyType = 1;
+                       remoteGlobalIDString = 1572C4A60CFB55B400E2776E;
+                       remoteInfo = "SystemConfiguration.framework-Embedded";
+               };
+               15EF89BD2189467B003B2C5C /* PBXContainerItemProxy */ = {
+                       isa = PBXContainerItemProxy;
+                       containerPortal = 15CB6A7705C0722B0099E85F /* Project object */;
+                       proxyType = 1;
+                       remoteGlobalIDString = 15A5A1E40D5B94190087BDA0;
+                       remoteInfo = "SystemConfiguration.framework-EmbeddedSimulator";
+               };
+               15EF89BF21894688003B2C5C /* PBXContainerItemProxy */ = {
+                       isa = PBXContainerItemProxy;
+                       containerPortal = 15CB6A7705C0722B0099E85F /* Project object */;
+                       proxyType = 1;
+                       remoteGlobalIDString = 15A5A1E40D5B94190087BDA0;
+                       remoteInfo = "SystemConfiguration.framework-EmbeddedSimulator";
+               };
+               15EF89C121894837003B2C5C /* PBXContainerItemProxy */ = {
+                       isa = PBXContainerItemProxy;
+                       containerPortal = 15CB6A7705C0722B0099E85F /* Project object */;
+                       proxyType = 1;
+                       remoteGlobalIDString = 15E91DB221893E83001155DC;
+                       remoteInfo = "SCTest-ObjC-Embedded";
+               };
+               15EF89C321894837003B2C5C /* PBXContainerItemProxy */ = {
+                       isa = PBXContainerItemProxy;
+                       containerPortal = 15CB6A7705C0722B0099E85F /* Project object */;
+                       proxyType = 1;
+                       remoteGlobalIDString = 15E91DCC21893EE1001155DC;
+                       remoteInfo = "SCTest-Swift-Embedded";
+               };
+               15EF89C52189484C003B2C5C /* PBXContainerItemProxy */ = {
+                       isa = PBXContainerItemProxy;
+                       containerPortal = 15CB6A7705C0722B0099E85F /* Project object */;
+                       proxyType = 1;
+                       remoteGlobalIDString = 15EF89A521894636003B2C5C;
+                       remoteInfo = "SCTest-ObjC-EmbeddedSimulator";
+               };
+               15EF89C72189484C003B2C5C /* PBXContainerItemProxy */ = {
+                       isa = PBXContainerItemProxy;
+                       containerPortal = 15CB6A7705C0722B0099E85F /* Project object */;
+                       proxyType = 1;
+                       remoteGlobalIDString = 15EF89B221894665003B2C5C;
+                       remoteInfo = "SCTest-Swift-EmbeddedSimulator";
+               };
+               723050311AE6F292004AC149 /* PBXContainerItemProxy */ = {
                        isa = PBXContainerItemProxy;
                        containerPortal = 15CB6A7705C0722B0099E85F /* Project object */;
                        proxyType = 1;
                        remoteGlobalIDString = 15DAD63F07591A1A0084A6ED;
                        remoteInfo = SystemConfiguration.framework;
                };
-               7271EA331D7660980055B1AA /* PBXContainerItemProxy */ = {
+               723050331AE6F29D004AC149 /* PBXContainerItemProxy */ = {
                        isa = PBXContainerItemProxy;
                        containerPortal = 15CB6A7705C0722B0099E85F /* Project object */;
                        proxyType = 1;
-                       remoteGlobalIDString = 7271EA1B1D76600B0055B1AA;
-                       remoteInfo = "sctest-Embedded";
+                       remoteGlobalIDString = 15DAD63F07591A1A0084A6ED;
+                       remoteInfo = SystemConfiguration.framework;
                };
                72C12CB01D6EA2CA000EE61C /* PBXContainerItemProxy */ = {
                        isa = PBXContainerItemProxy;
                        name = "Copy Files";
                        runOnlyForDeploymentPostprocessing = 1;
                };
-               15D9DCF910DD909F004E545D /* AppWorkaround.plist */ = {
+               15E91DBA21893E83001155DC /* CopyFiles */ = {
                        isa = PBXCopyFilesBuildPhase;
-                       buildActionMask = 8;
-                       dstPath = /usr/local/AppSpecificWorkaround/SystemConfiguration;
+                       buildActionMask = 2147483647;
+                       dstPath = /usr/share/man/man1/;
+                       dstSubfolderSpec = 0;
+                       files = (
+                       );
+                       runOnlyForDeploymentPostprocessing = 1;
+               };
+               15E91DD221893EE1001155DC /* CopyFiles */ = {
+                       isa = PBXCopyFilesBuildPhase;
+                       buildActionMask = 2147483647;
+                       dstPath = /usr/share/man/man1/;
+                       dstSubfolderSpec = 0;
+                       files = (
+                       );
+                       runOnlyForDeploymentPostprocessing = 1;
+               };
+               15EF89AD21894636003B2C5C /* CopyFiles */ = {
+                       isa = PBXCopyFilesBuildPhase;
+                       buildActionMask = 2147483647;
+                       dstPath = /usr/share/man/man1/;
+                       dstSubfolderSpec = 0;
+                       files = (
+                       );
+                       runOnlyForDeploymentPostprocessing = 1;
+               };
+               15EF89B821894665003B2C5C /* CopyFiles */ = {
+                       isa = PBXCopyFilesBuildPhase;
+                       buildActionMask = 2147483647;
+                       dstPath = /usr/share/man/man1/;
                        dstSubfolderSpec = 0;
                        files = (
-                               15D9DCFB10DD90A1004E545D /* AppWorkaround.plist in AppWorkaround.plist */,
                        );
-                       name = AppWorkaround.plist;
                        runOnlyForDeploymentPostprocessing = 1;
                };
                15FF5C380CDF778F00EEC8AA /* CopyFiles */ = {
                        );
                        runOnlyForDeploymentPostprocessing = 1;
                };
-               F999388720FE546D005EE20D /* CopyFiles */ = {
+               F963400F20FE8E4100F1E1F1 /* CopyFiles */ = {
                        isa = PBXCopyFilesBuildPhase;
                        buildActionMask = 8;
                        dstPath = /System/Library/AWD/Metadata;
                        dstSubfolderSpec = 0;
                        files = (
-                               F999388920FE54DB005EE20D /* AwdMetadata-0x81-IPMonitor.bin in CopyFiles */,
+                               F963401020FE8E6000F1E1F1 /* AwdMetadata-0x81-IPMonitor.bin in CopyFiles */,
                        );
                        runOnlyForDeploymentPostprocessing = 1;
                };
                153ACCA614E322D5005029A5 /* network_information_server.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; lineEnding = 0; name = network_information_server.c; path = nwi/network_information_server.c; sourceTree = "<group>"; xcLanguageSpecificationIdentifier = xcode.lang.c; };
                153ACCA714E322D5005029A5 /* network_information_server.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = network_information_server.h; path = nwi/network_information_server.h; sourceTree = "<group>"; };
                1540E3600987DA9500157C07 /* com.apple.configd.plist */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = text.plist.xml; path = com.apple.configd.plist; sourceTree = "<group>"; };
+               1542400421626DD300C7CE8B /* SCDCache.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = SCDCache.c; sourceTree = "<group>"; };
+               15436251218AA22800283462 /* en */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = en; path = SCMonitor/en.lproj/Localizable.strings; sourceTree = "<group>"; };
+               15436253218AA26100283462 /* en */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = en; path = en.lproj/Localizable.strings; sourceTree = "<group>"; };
+               15436255218AA27400283462 /* en */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = en; path = en.lproj/NetworkInterface.strings; sourceTree = "<group>"; };
                1543636A0752D03C00A8EC6C /* IOKit.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = IOKit.framework; path = /System/Library/Frameworks/IOKit.framework; sourceTree = "<absolute>"; };
                1547001D08455B98006787CE /* SCHelper */ = {isa = PBXFileReference; explicitFileType = "compiled.mach-o.executable"; includeInIndex = 0; path = SCHelper; sourceTree = BUILT_PRODUCTS_DIR; };
                1547072E0D1F70C80075C28D /* SystemConfiguration.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = SystemConfiguration.framework; sourceTree = BUILT_PRODUCTS_DIR; };
                1574341A0D4A8137002ACA73 /* scutil */ = {isa = PBXFileReference; explicitFileType = "compiled.mach-o.executable"; includeInIndex = 0; path = scutil; sourceTree = BUILT_PRODUCTS_DIR; };
                1575FD2512CD15C60003D86E /* proxy-configuration.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = "proxy-configuration.c"; sourceTree = "<group>"; };
                1575FD2612CD15C60003D86E /* proxy-configuration.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = "proxy-configuration.h"; sourceTree = "<group>"; };
-               1577252F06EFB96700D7B52B /* English */ = {isa = PBXFileReference; fileEncoding = 10; lastKnownFileType = text.plist.strings; name = English; path = English.lproj/NetworkInterface.strings; sourceTree = "<group>"; };
                157A84E80D56C63900B6F1A0 /* libsystem_configuration.dylib */ = {isa = PBXFileReference; explicitFileType = "compiled.mach-o.dylib"; includeInIndex = 0; path = libsystem_configuration.dylib; sourceTree = BUILT_PRODUCTS_DIR; };
                157A85020D56C7E800B6F1A0 /* libIPMonitor.a */ = {isa = PBXFileReference; explicitFileType = archive.ar; includeInIndex = 0; path = libIPMonitor.a; sourceTree = BUILT_PRODUCTS_DIR; };
                157A850D0D56C8AA00B6F1A0 /* libInterfaceNamer.a */ = {isa = PBXFileReference; explicitFileType = archive.ar; includeInIndex = 0; path = libInterfaceNamer.a; sourceTree = BUILT_PRODUCTS_DIR; };
                159D53BA07528B36004F8947 /* ev_ipv6.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; path = ev_ipv6.h; sourceTree = "<group>"; };
                159D53C107528B36004F8947 /* linkconfig.c */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.c; path = linkconfig.c; sourceTree = "<group>"; };
                159D53C307528B36004F8947 /* prefsmon.c */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.c; path = prefsmon.c; sourceTree = "<group>"; };
-               159D53CA07528B36004F8947 /* cache.c */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.c; path = cache.c; sourceTree = "<group>"; };
-               159D53CB07528B36004F8947 /* cache.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; path = cache.h; sourceTree = "<group>"; };
                159D53D407528BDA004F8947 /* libKernelEventMonitor.a */ = {isa = PBXFileReference; explicitFileType = archive.ar; includeInIndex = 0; path = libKernelEventMonitor.a; sourceTree = BUILT_PRODUCTS_DIR; };
                159D53E507528C4A004F8947 /* libInterfaceNamer.a */ = {isa = PBXFileReference; explicitFileType = archive.ar; includeInIndex = 0; path = libInterfaceNamer.a; sourceTree = BUILT_PRODUCTS_DIR; };
                159D53EC07528C61004F8947 /* libIPMonitor.a */ = {isa = PBXFileReference; explicitFileType = archive.ar; includeInIndex = 0; path = libIPMonitor.a; sourceTree = BUILT_PRODUCTS_DIR; };
                15A509A306C2518F001F0AB7 /* net.c */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.c; path = net.c; sourceTree = "<group>"; };
                15A509A406C2518F001F0AB7 /* net.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; path = net.h; sourceTree = "<group>"; };
                15A5A26A0D5B94190087BDA0 /* SystemConfiguration.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = SystemConfiguration.framework; sourceTree = BUILT_PRODUCTS_DIR; };
-               15A6F7C30A4B266D00B907EA /* English */ = {isa = PBXFileReference; fileEncoding = 10; lastKnownFileType = text.plist.strings; name = English; path = English.lproj/Localizable.strings; sourceTree = "<group>"; };
                15AAA7F1108E310700C2A607 /* VPNTunnelPrivate.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = VPNTunnelPrivate.h; sourceTree = "<group>"; };
                15AAA7F2108E310700C2A607 /* VPNTunnel.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = VPNTunnel.h; sourceTree = "<group>"; };
                15AAA7F3108E310700C2A607 /* VPNTunnel.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = VPNTunnel.c; sourceTree = "<group>"; };
                15CB697605C0722B0099E85F /* SCDNotifierWait.c */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.c; path = SCDNotifierWait.c; sourceTree = "<group>"; };
                15CB697805C0722B0099E85F /* SCDNotifierInformViaCallback.c */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.c; path = SCDNotifierInformViaCallback.c; sourceTree = "<group>"; };
                15CB697C05C0722B0099E85F /* SCDNotifierInformViaFD.c */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.c; path = SCDNotifierInformViaFD.c; sourceTree = "<group>"; };
-               15CB697E05C0722B0099E85F /* SCDNotifierInformViaSignal.c */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.c; path = SCDNotifierInformViaSignal.c; sourceTree = "<group>"; };
                15CB698005C0722B0099E85F /* SCDNotifierCancel.c */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.c; path = SCDNotifierCancel.c; sourceTree = "<group>"; };
                15CB698205C0722B0099E85F /* SCDSnapshot.c */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.c; path = SCDSnapshot.c; sourceTree = "<group>"; };
                15CB698405C0722B0099E85F /* SCP.c */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.c; path = SCP.c; sourceTree = "<group>"; };
                15CB69CF05C0722B0099E85F /* configd.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = configd.h; sourceTree = "<group>"; };
                15CB69D105C0722B0099E85F /* _SCD.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = _SCD.h; sourceTree = "<group>"; };
                15CB69D305C0722B0099E85F /* configd_server.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = configd_server.h; sourceTree = "<group>"; };
-               15CB69D505C0722B0099E85F /* notify_server.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = notify_server.h; sourceTree = "<group>"; };
                15CB69D705C0722B0099E85F /* plugin_support.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = plugin_support.h; sourceTree = "<group>"; };
                15CB69D905C0722B0099E85F /* session.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = session.h; sourceTree = "<group>"; };
                15CB69DB05C0722B0099E85F /* pattern.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = pattern.h; sourceTree = "<group>"; };
                15CB69E005C0722B0099E85F /* configd.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = configd.m; sourceTree = "<group>"; };
                15CB69E205C0722B0099E85F /* _SCD.c */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.c; path = _SCD.c; sourceTree = "<group>"; };
                15CB69E405C0722B0099E85F /* configd_server.c */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.c; path = configd_server.c; sourceTree = "<group>"; };
-               15CB69E605C0722B0099E85F /* notify_server.c */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.c; path = notify_server.c; sourceTree = "<group>"; };
                15CB69E805C0722B0099E85F /* plugin_support.c */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.c; path = plugin_support.c; sourceTree = "<group>"; };
                15CB69EA05C0722B0099E85F /* session.c */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.c; path = session.c; sourceTree = "<group>"; };
                15CB69EC05C0722B0099E85F /* pattern.c */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.c; path = pattern.c; sourceTree = "<group>"; };
                15CB6A0C05C0722B0099E85F /* _notifychanges.c */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.c; path = _notifychanges.c; sourceTree = "<group>"; };
                15CB6A0E05C0722B0099E85F /* _notifyviaport.c */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.c; path = _notifyviaport.c; sourceTree = "<group>"; };
                15CB6A1005C0722B0099E85F /* _notifyviafd.c */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.c; path = _notifyviafd.c; sourceTree = "<group>"; };
-               15CB6A1205C0722B0099E85F /* _notifyviasignal.c */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.c; path = _notifyviasignal.c; sourceTree = "<group>"; };
                15CB6A1405C0722B0099E85F /* _notifycancel.c */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.c; path = _notifycancel.c; sourceTree = "<group>"; };
                15CB6A1605C0722B0099E85F /* _snapshot.c */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.c; path = _snapshot.c; sourceTree = "<group>"; };
                15CB6A2005C0722B0099E85F /* configd.8 */ = {isa = PBXFileReference; explicitFileType = text.man; path = configd.8; sourceTree = "<group>"; };
                15D92B9D1FFC61F400DF2632 /* libnetwork.tbd */ = {isa = PBXFileReference; lastKnownFileType = "sourcecode.text-based-dylib-definition"; name = libnetwork.tbd; path = usr/lib/libnetwork.tbd; sourceTree = SDKROOT; };
                15D92BA01FFC641500DF2632 /* libnetwork.tbd */ = {isa = PBXFileReference; lastKnownFileType = "sourcecode.text-based-dylib-definition"; name = libnetwork.tbd; path = usr/lib/libnetwork.tbd; sourceTree = SDKROOT; };
                15D92BA61FFC669000DF2632 /* MobileWiFi.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = MobileWiFi.framework; path = System/Library/PrivateFrameworks/MobileWiFi.framework; sourceTree = SDKROOT; };
-               15D9DCFA10DD90A1004E545D /* AppWorkaround.plist */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.xml; path = AppWorkaround.plist; sourceTree = "<group>"; };
                15DAD5EE075913CE0084A6ED /* libsystem_configuration.dylib */ = {isa = PBXFileReference; explicitFileType = "compiled.mach-o.dylib"; includeInIndex = 0; path = libsystem_configuration.dylib; sourceTree = BUILT_PRODUCTS_DIR; };
                15DAF2D808466D4900D1B2BD /* SCHelper_client.c */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.c; name = SCHelper_client.c; path = helper/SCHelper_client.c; sourceTree = "<group>"; };
                15DAF2D908466D4900D1B2BD /* SCHelper_server.c */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.c; name = SCHelper_server.c; path = helper/SCHelper_server.c; sourceTree = "<group>"; };
                15DC346E0711D49400A3311C /* net_set.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; path = net_set.h; sourceTree = "<group>"; };
                15E1B05916EBAE3C00E5F06F /* libIPMonitor_sim.a */ = {isa = PBXFileReference; explicitFileType = archive.ar; includeInIndex = 0; path = libIPMonitor_sim.a; sourceTree = BUILT_PRODUCTS_DIR; };
                15E1B06116EBAE7800E5F06F /* IPMonitor.bundle */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = IPMonitor.bundle; sourceTree = BUILT_PRODUCTS_DIR; };
+               15E56C5A21939B7B00088C51 /* Foundation.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Foundation.framework; path = Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS13.0.Internal.sdk/System/Library/Frameworks/Foundation.framework; sourceTree = DEVELOPER_DIR; };
+               15E91DBE21893E83001155DC /* SCTest-ObjC-Embedded */ = {isa = PBXFileReference; explicitFileType = "compiled.mach-o.executable"; includeInIndex = 0; path = "SCTest-ObjC-Embedded"; sourceTree = BUILT_PRODUCTS_DIR; };
+               15E91DD621893EE1001155DC /* SCTest-Swift-Embedded */ = {isa = PBXFileReference; explicitFileType = "compiled.mach-o.executable"; includeInIndex = 0; path = "SCTest-Swift-Embedded"; sourceTree = BUILT_PRODUCTS_DIR; };
+               15EF89B121894636003B2C5C /* SCTest-ObjC-EmbeddedSimulator */ = {isa = PBXFileReference; explicitFileType = "compiled.mach-o.executable"; includeInIndex = 0; path = "SCTest-ObjC-EmbeddedSimulator"; sourceTree = BUILT_PRODUCTS_DIR; };
+               15EF89BC21894665003B2C5C /* SCTest-Swift-EmbeddedSimulator */ = {isa = PBXFileReference; explicitFileType = "compiled.mach-o.executable"; includeInIndex = 0; path = "SCTest-Swift-EmbeddedSimulator"; sourceTree = BUILT_PRODUCTS_DIR; };
                15F742E41EC6370000DA2E7A /* liblog_SystemConfiguration.dylib */ = {isa = PBXFileReference; explicitFileType = "compiled.mach-o.dylib"; includeInIndex = 0; path = liblog_SystemConfiguration.dylib; sourceTree = BUILT_PRODUCTS_DIR; };
                15F742F11EC638D100DA2E7A /* liblog_SystemConfiguration.dylib */ = {isa = PBXFileReference; explicitFileType = "compiled.mach-o.dylib"; includeInIndex = 0; path = liblog_SystemConfiguration.dylib; sourceTree = BUILT_PRODUCTS_DIR; };
                15FA0F73203A379600C7702F /* EventFactory.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; path = EventFactory.framework; sourceTree = "<group>"; };
                15FD743E0754DE7A001CC321 /* Info.plist */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = "<group>"; };
                15FD7B3B101E439200C56621 /* BridgeConfiguration.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = BridgeConfiguration.c; sourceTree = "<group>"; };
                15FEE80D0CCFD341001312F9 /* ApplicationServices.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = ApplicationServices.framework; path = /System/Library/Frameworks/ApplicationServices.framework; sourceTree = "<absolute>"; };
-               15FEE8160CD03CA3001312F9 /* English */ = {isa = PBXFileReference; fileEncoding = 10; lastKnownFileType = text.plist.strings; name = English; path = SCMonitor/English.lproj/Localizable.strings; sourceTree = "<group>"; };
                15FF5C290CDF770500EEC8AA /* com.apple.SCHelper.plist */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.xml; name = com.apple.SCHelper.plist; path = helper/com.apple.SCHelper.plist; sourceTree = "<group>"; };
                23C1E2B4062DD2C700835B54 /* pppcontroller_types.h */ = {isa = PBXFileReference; explicitFileType = sourcecode.c.h; fileEncoding = 30; name = pppcontroller_types.h; path = usr/local/include/ppp/pppcontroller_types.h; sourceTree = SDKROOT; };
                23C1E2B8062DD45900835B54 /* pppcontroller.defs */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.mig; name = pppcontroller.defs; path = SystemConfiguration.fproj/pppcontroller.defs; sourceTree = "<group>"; };
                B0A88CA616397A1200A60B3A /* VPNAppLayerPrivate.h */ = {isa = PBXFileReference; fileEncoding = 4; indentWidth = 4; lastKnownFileType = sourcecode.c.h; path = VPNAppLayerPrivate.h; sourceTree = "<group>"; tabWidth = 4; };
                B0C967F717441F0E00889853 /* SNHelperPrivate.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = SNHelperPrivate.h; sourceTree = "<group>"; };
                B0C9689B174426C200889853 /* SNHelper.c */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.c; path = SNHelper.c; sourceTree = "<group>"; };
+               C43F873A226D3A18000E8CE5 /* entitlements.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = entitlements.plist; sourceTree = "<group>"; };
                C4666C71206ED01800247AB6 /* SystemConfigurationEventFactory.bundle */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = SystemConfigurationEventFactory.bundle; sourceTree = BUILT_PRODUCTS_DIR; };
                C4666C74206ED01800247AB6 /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = "<group>"; };
+               C469CB2720EED63C00A7AD35 /* StateDumpParser.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = StateDumpParser.h; sourceTree = "<group>"; };
+               C469CB2820EED6C100A7AD35 /* StateDumpParser.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = StateDumpParser.m; sourceTree = "<group>"; };
+               C496A09420F909BD0098B3E5 /* IPConfigurationParser.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = IPConfigurationParser.h; sourceTree = "<group>"; };
+               C496A09520F909FF0098B3E5 /* IPConfigurationParser.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = IPConfigurationParser.m; sourceTree = "<group>"; };
+               C4C5FB0020EA98AC00F35614 /* KernelEventMonitorParser.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = KernelEventMonitorParser.h; sourceTree = "<group>"; };
+               C4C5FB0120EA992700F35614 /* SCLogParser.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = SCLogParser.h; sourceTree = "<group>"; };
+               C4C5FB0220EA9A5A00F35614 /* KernelEventMonitorParser.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = KernelEventMonitorParser.m; sourceTree = "<group>"; };
+               C4C5FB0420EA9B6F00F35614 /* SCLogParser.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = SCLogParser.m; sourceTree = "<group>"; };
+               C4C5FB0720EAB0BC00F35614 /* InterfaceNamerParser.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = InterfaceNamerParser.h; sourceTree = "<group>"; };
+               C4C5FB0820EAB0DD00F35614 /* InterfaceNamerParser.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = InterfaceNamerParser.m; sourceTree = "<group>"; };
+               C4C5FB0A20EABD5F00F35614 /* IPMonitorParser.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = IPMonitorParser.h; sourceTree = "<group>"; };
+               C4C5FB0B20EABD9E00F35614 /* IPMonitorParser.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = IPMonitorParser.m; sourceTree = "<group>"; };
+               C4C5FB0D20EAC01900F35614 /* PreferencesMonitorParser.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = PreferencesMonitorParser.h; sourceTree = "<group>"; };
+               C4C5FB0E20EAC05200F35614 /* PreferencesMonitorParser.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = PreferencesMonitorParser.m; sourceTree = "<group>"; };
                C4CDB8111631933400819B44 /* VPNFlow.h */ = {isa = PBXFileReference; indentWidth = 4; lastKnownFileType = sourcecode.c.h; path = VPNFlow.h; sourceTree = "<group>"; tabWidth = 4; };
                C4CDB8141631935700819B44 /* VPNFlow.c */ = {isa = PBXFileReference; fileEncoding = 4; indentWidth = 4; lastKnownFileType = sourcecode.c.c; path = VPNFlow.c; sourceTree = "<group>"; tabWidth = 4; };
                C4F1847F16237AFC00D97043 /* VPNService.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = VPNService.c; sourceTree = "<group>"; };
                D6986A77136891300091C931 /* network_information.c */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.c; name = network_information.c; path = nwi/network_information.c; sourceTree = "<group>"; };
                D6986A781368913C0091C931 /* network_information.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = network_information.h; path = nwi/network_information.h; sourceTree = "<group>"; };
                D6AEB89815AE4446009F2FAF /* ip_plugin.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = ip_plugin.h; sourceTree = "<group>"; };
+               F90E43542012AD3900EF27C4 /* SCNetworkInterfaceProvider.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = SCNetworkInterfaceProvider.h; sourceTree = "<group>"; };
+               F90E43552012AD4500EF27C4 /* SCNetworkInterfaceProvider.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = SCNetworkInterfaceProvider.c; sourceTree = "<group>"; };
                F95B8A420B03E07A00993BA3 /* SCNetworkSignature.c */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.c; path = SCNetworkSignature.c; sourceTree = "<group>"; };
                F95B8A440B03E09300993BA3 /* SCNetworkSignature.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; path = SCNetworkSignature.h; sourceTree = "<group>"; };
                F95B8A450B03E09300993BA3 /* SCNetworkSignaturePrivate.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; path = SCNetworkSignaturePrivate.h; sourceTree = "<group>"; };
-               F97F9FC5202CBD130040BD50 /* SCNetworkInterfaceProvider.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = SCNetworkInterfaceProvider.h; sourceTree = "<group>"; };
-               F97F9FC6202CBD230040BD50 /* SCNetworkInterfaceProvider.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = SCNetworkInterfaceProvider.c; sourceTree = "<group>"; };
-               F999388820FE54CB005EE20D /* AwdMetadata-0x81-IPMonitor.bin */ = {isa = PBXFileReference; lastKnownFileType = archive.macbinary; path = "AwdMetadata-0x81-IPMonitor.bin"; sourceTree = "<group>"; };
+               F963400E20FE8E1D00F1E1F1 /* AwdMetadata-0x81-IPMonitor.bin */ = {isa = PBXFileReference; lastKnownFileType = archive.macbinary; path = "AwdMetadata-0x81-IPMonitor.bin"; sourceTree = "<group>"; };
+               F97289D122652CE600080596 /* serviceIDNumber.c */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.c; path = serviceIDNumber.c; sourceTree = "<group>"; };
+               F97289D222652CE600080596 /* serviceIDNumber.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = serviceIDNumber.h; sourceTree = "<group>"; };
                F9A3780E16A4846E00C57CDC /* IPMonitorControlPrefs.c */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.c; path = IPMonitorControlPrefs.c; sourceTree = "<group>"; };
                F9A3780F16A4846E00C57CDC /* IPMonitorControlPrefs.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = IPMonitorControlPrefs.h; sourceTree = "<group>"; };
                F9B7AE5C1862116500C78D18 /* IPMonitorControl.c */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.c; path = IPMonitorControl.c; sourceTree = "<group>"; };
                        );
                        runOnlyForDeploymentPostprocessing = 0;
                };
+               15E91DB821893E83001155DC /* Frameworks */ = {
+                       isa = PBXFrameworksBuildPhase;
+                       buildActionMask = 2147483647;
+                       files = (
+                               15E91DB921893E83001155DC /* SystemConfiguration.framework in Frameworks */,
+                       );
+                       runOnlyForDeploymentPostprocessing = 0;
+               };
+               15E91DD121893EE1001155DC /* Frameworks */ = {
+                       isa = PBXFrameworksBuildPhase;
+                       buildActionMask = 2147483647;
+                       files = (
+                               15E56C5B21939B7B00088C51 /* Foundation.framework in Frameworks */,
+                       );
+                       runOnlyForDeploymentPostprocessing = 0;
+               };
+               15EF89AB21894636003B2C5C /* Frameworks */ = {
+                       isa = PBXFrameworksBuildPhase;
+                       buildActionMask = 2147483647;
+                       files = (
+                               15EF89AC21894636003B2C5C /* SystemConfiguration.framework in Frameworks */,
+                       );
+                       runOnlyForDeploymentPostprocessing = 0;
+               };
+               15EF89B721894665003B2C5C /* Frameworks */ = {
+                       isa = PBXFrameworksBuildPhase;
+                       buildActionMask = 2147483647;
+                       files = (
+                               15E56C5C21939B8E00088C51 /* Foundation.framework in Frameworks */,
+                               15E56C552193840000088C51 /* SystemConfiguration.framework in Frameworks */,
+                       );
+                       runOnlyForDeploymentPostprocessing = 0;
+               };
                15F742DE1EC6370000DA2E7A /* Frameworks */ = {
                        isa = PBXFrameworksBuildPhase;
                        buildActionMask = 2147483647;
                        isa = PBXFrameworksBuildPhase;
                        buildActionMask = 2147483647;
                        files = (
+                               15E56C5921939B6400088C51 /* Foundation.framework in Frameworks */,
                        );
                        runOnlyForDeploymentPostprocessing = 0;
                };
                        isa = PBXFrameworksBuildPhase;
                        buildActionMask = 2147483647;
                        files = (
+                               150EC0FF21016BFD0047F4BF /* SystemConfiguration.framework in Frameworks */,
                        );
                        runOnlyForDeploymentPostprocessing = 0;
                };
                                15812A2D1EA5540B001CF384 /* nat64-configuration.c */,
                                1575FD2612CD15C60003D86E /* proxy-configuration.h */,
                                1575FD2512CD15C60003D86E /* proxy-configuration.c */,
+                               F97289D122652CE600080596 /* serviceIDNumber.c */,
+                               F97289D222652CE600080596 /* serviceIDNumber.h */,
                                155D22390AF13A7300D52ED0 /* set-hostname.h */,
                                159D53AB07528B36004F8947 /* set-hostname.c */,
                                155D223A0AF13A7300D52ED0 /* smb-configuration.h */,
                                15FB1F881E27E9A000B4F809 /* InterfaceNamerControlPrefs.c */,
                                F9A3780F16A4846E00C57CDC /* IPMonitorControlPrefs.h */,
                                F9A3780E16A4846E00C57CDC /* IPMonitorControlPrefs.c */,
-                               159D53CA07528B36004F8947 /* cache.c */,
-                               159D53CB07528B36004F8947 /* cache.h */,
                                1572AA8B1D8234500021E093 /* plugin_shared.h */,
                        );
                        name = common;
                15B6861D0678B61900FF4023 /* Supporting Files */ = {
                        isa = PBXGroup;
                        children = (
-                               15D9DCFA10DD90A1004E545D /* AppWorkaround.plist */,
                                15A6F7C20A4B266D00B907EA /* Localizable.strings */,
                                15B686220678B65C00FF4023 /* NetworkConfiguration.plist */,
                                1577253606EFBF3100D7B52B /* NetworkInterface.strings */,
                                15CB695805C0722B0099E85F /* SCDOpen.c */,
                                15CB695E05C0722B0099E85F /* SCDList.c */,
                                15CB696005C0722B0099E85F /* SCDAdd.c */,
+                               1542400421626DD300C7CE8B /* SCDCache.c */,
                                15CB696405C0722B0099E85F /* SCDGet.c */,
                                15CB696605C0722B0099E85F /* SCDSet.c */,
                                15CB696805C0722B0099E85F /* SCDRemove.c */,
                                15CB697605C0722B0099E85F /* SCDNotifierWait.c */,
                                15CB697805C0722B0099E85F /* SCDNotifierInformViaCallback.c */,
                                15CB697C05C0722B0099E85F /* SCDNotifierInformViaFD.c */,
-                               15CB697E05C0722B0099E85F /* SCDNotifierInformViaSignal.c */,
                                15CB698005C0722B0099E85F /* SCDNotifierCancel.c */,
                                15CB698205C0722B0099E85F /* SCDSnapshot.c */,
                        );
                                15CB690705C0722A0099E85F /* SystemConfiguration */,
                                151F5DA80CCE995D0093AC3B /* SCMonitor */,
                                15CB69C205C0722B0099E85F /* configd */,
-                               15CB6A2205C0722B0099E85F /* scselect */,
-                               15CB6A3705C0722B0099E85F /* scutil */,
                                159D53A207528B06004F8947 /* Plugins */,
                                F9B7AE5B1862116500C78D18 /* IPMonitorControl */,
-                               15CB6A6E05C0722B0099E85F /* External Frameworks and Libraries */,
-                               72D3E65F1AE6EA3A00DB4C69 /* SCTest-Swift */,
-                               72D3E66A1AE6EAF600DB4C69 /* SCTest-ObjC */,
+                               15CB6A3705C0722B0099E85F /* scutil */,
+                               15CB6A2205C0722B0099E85F /* scselect */,
                                72573D271D667372004975AD /* sctest */,
                                C4666C73206ED01800247AB6 /* EventFactory */,
+                               72D3E66A1AE6EAF600DB4C69 /* SCTest-ObjC */,
+                               72D3E65F1AE6EA3A00DB4C69 /* SCTest-Swift */,
                                15CB690F05C0722B0099E85F /* Products */,
                                90507AAE1CE2F55B0067D16B /* Frameworks */,
+                               15CB6A6E05C0722B0099E85F /* External Frameworks and Libraries */,
                        );
                        indentWidth = 8;
                        name = configd;
                                1547002E084561B4006787CE /* SCHelper */,
                                15C330DB134B9B8B0028E36B /* SCNetworkConfiguration */,
                                15C330DE134B9C290028E36B /* SCNetworkConnection */,
-                               F97F9FC2202CBCA00040BD50 /* SCNetworkInterfaceProvider */,
+                               F90E43512012ACF900EF27C4 /* SCNetworkInterfaceProvider */,
                                15C330B4134B91930028E36B /* SCNetworkReachability */,
                                15C330E1134B9C8E0028E36B /* VPN */,
                                15CB691205C0722B0099E85F /* Other Headers */,
                                15F742E41EC6370000DA2E7A /* liblog_SystemConfiguration.dylib */,
                                15F742F11EC638D100DA2E7A /* liblog_SystemConfiguration.dylib */,
                                C4666C71206ED01800247AB6 /* SystemConfigurationEventFactory.bundle */,
+                               15E91DBE21893E83001155DC /* SCTest-ObjC-Embedded */,
+                               15E91DD621893EE1001155DC /* SCTest-Swift-Embedded */,
+                               15EF89B121894636003B2C5C /* SCTest-ObjC-EmbeddedSimulator */,
+                               15EF89BC21894665003B2C5C /* SCTest-Swift-EmbeddedSimulator */,
                        );
                        name = Products;
                        sourceTree = "<group>";
                                15CB69CF05C0722B0099E85F /* configd.h */,
                                15CB69D105C0722B0099E85F /* _SCD.h */,
                                15CB69D305C0722B0099E85F /* configd_server.h */,
-                               15CB69D505C0722B0099E85F /* notify_server.h */,
                                15CB69D705C0722B0099E85F /* plugin_support.h */,
                                15CB69D905C0722B0099E85F /* session.h */,
                                15CB69DB05C0722B0099E85F /* pattern.h */,
                                15CB69E005C0722B0099E85F /* configd.m */,
                                15CB69E205C0722B0099E85F /* _SCD.c */,
                                15CB69E405C0722B0099E85F /* configd_server.c */,
-                               15CB69E605C0722B0099E85F /* notify_server.c */,
                                15CB69E805C0722B0099E85F /* plugin_support.c */,
                                15CB69EA05C0722B0099E85F /* session.c */,
                                15CB69EC05C0722B0099E85F /* pattern.c */,
                                15CB6A0C05C0722B0099E85F /* _notifychanges.c */,
                                15CB6A0E05C0722B0099E85F /* _notifyviaport.c */,
                                15CB6A1005C0722B0099E85F /* _notifyviafd.c */,
-                               15CB6A1205C0722B0099E85F /* _notifyviasignal.c */,
                                15CB6A1405C0722B0099E85F /* _notifycancel.c */,
                                15CB6A1605C0722B0099E85F /* _snapshot.c */,
                        );
                        isa = PBXGroup;
                        children = (
                                15CB6A6A05C0722B0099E85F /* scutil.8 */,
+                               C43F873A226D3A18000E8CE5 /* entitlements.plist */,
                        );
                        name = "Supporting Files";
                        sourceTree = "<group>";
                90507AAE1CE2F55B0067D16B /* Frameworks */ = {
                        isa = PBXGroup;
                        children = (
+                               15E56C5A21939B7B00088C51 /* Foundation.framework */,
                                F9D7305020E41DD500521181 /* WirelessDiagnostics.framework */,
                                F9D7304E20E41D9C00521181 /* ProtocolBuffer.framework */,
                                1562569020856CCC00FCD61E /* liblockdown.dylib */,
                        children = (
                                1597A9A31FBCECCD000FAA86 /* EventFactory.h */,
                                1597A9A41FBCECCD000FAA86 /* EventFactory.m */,
+                               C4C5FB0120EA992700F35614 /* SCLogParser.h */,
+                               C4C5FB0420EA9B6F00F35614 /* SCLogParser.m */,
+                               C4C5FB0020EA98AC00F35614 /* KernelEventMonitorParser.h */,
+                               C4C5FB0220EA9A5A00F35614 /* KernelEventMonitorParser.m */,
+                               C4C5FB0720EAB0BC00F35614 /* InterfaceNamerParser.h */,
+                               C4C5FB0820EAB0DD00F35614 /* InterfaceNamerParser.m */,
+                               C496A09420F909BD0098B3E5 /* IPConfigurationParser.h */,
+                               C496A09520F909FF0098B3E5 /* IPConfigurationParser.m */,
+                               C4C5FB0A20EABD5F00F35614 /* IPMonitorParser.h */,
+                               C4C5FB0B20EABD9E00F35614 /* IPMonitorParser.m */,
+                               C4C5FB0D20EAC01900F35614 /* PreferencesMonitorParser.h */,
+                               C4C5FB0E20EAC05200F35614 /* PreferencesMonitorParser.m */,
+                               C469CB2720EED63C00A7AD35 /* StateDumpParser.h */,
+                               C469CB2820EED6C100A7AD35 /* StateDumpParser.m */,
                                C4666C74206ED01800247AB6 /* Info.plist */,
                        );
                        path = EventFactory;
                        name = Sources;
                        sourceTree = "<group>";
                };
-               F97F9FC2202CBCA00040BD50 /* SCNetworkInterfaceProvider */ = {
+               F90E43512012ACF900EF27C4 /* SCNetworkInterfaceProvider */ = {
                        isa = PBXGroup;
                        children = (
-                               F97F9FC4202CBCF50040BD50 /* Headers */,
-                               F97F9FC3202CBCF10040BD50 /* Source */,
+                               F90E43522012AD1900EF27C4 /* Headers */,
+                               F90E43532012AD2300EF27C4 /* Source */,
                        );
                        name = SCNetworkInterfaceProvider;
                        sourceTree = "<group>";
                };
-               F97F9FC3202CBCF10040BD50 /* Source */ = {
+               F90E43522012AD1900EF27C4 /* Headers */ = {
                        isa = PBXGroup;
                        children = (
-                               F97F9FC6202CBD230040BD50 /* SCNetworkInterfaceProvider.c */,
+                               F90E43542012AD3900EF27C4 /* SCNetworkInterfaceProvider.h */,
                        );
-                       name = Source;
+                       name = Headers;
                        sourceTree = "<group>";
                };
-               F97F9FC4202CBCF50040BD50 /* Headers */ = {
+               F90E43532012AD2300EF27C4 /* Source */ = {
                        isa = PBXGroup;
                        children = (
-                               F97F9FC5202CBD130040BD50 /* SCNetworkInterfaceProvider.h */,
+                               F90E43552012AD4500EF27C4 /* SCNetworkInterfaceProvider.c */,
                        );
-                       name = Headers;
+                       name = Source;
                        sourceTree = "<group>";
                };
                F9B7AE5B1862116500C78D18 /* IPMonitorControl */ = {
                F9D7304420DD89C600521181 /* AWD */ = {
                        isa = PBXGroup;
                        children = (
-                               F999388820FE54CB005EE20D /* AwdMetadata-0x81-IPMonitor.bin */,
+                               F963400E20FE8E1D00F1E1F1 /* AwdMetadata-0x81-IPMonitor.bin */,
                                F9D7304620DD89C600521181 /* AWDIPMonitorInterfaceAdvisoryReport.h */,
                                F9D7304720DD89C600521181 /* AWDIPMonitorGlobalEnums.h */,
                                F9D7304820DD89C600521181 /* AWDMetricIds_IPMonitor.h */,
                                1572C4B90CFB55B400E2776E /* SCNetworkConfiguration.h in Headers */,
                                1572C4BA0CFB55B400E2776E /* SCNetworkConfigurationInternal.h in Headers */,
                                D61AAEB61522C9E60066B003 /* scprefs_observer.h in Headers */,
-                               F97F9FC8202CBD600040BD50 /* SCNetworkInterfaceProvider.h in Headers */,
+                               F90E43572012AD6000EF27C4 /* SCNetworkInterfaceProvider.h in Headers */,
                                1572C4BB0CFB55B400E2776E /* SCNetwork.h in Headers */,
                                1572C4BC0CFB55B400E2776E /* SCNetworkConnection.h in Headers */,
                                1572C4BD0CFB55B400E2776E /* SCNetworkReachability.h in Headers */,
                                15732A7816EA503200F3AC4C /* configd.h in Headers */,
                                15732A7916EA503200F3AC4C /* _SCD.h in Headers */,
                                15732A7A16EA503200F3AC4C /* configd_server.h in Headers */,
-                               15732A7B16EA503200F3AC4C /* notify_server.h in Headers */,
                                15732A7C16EA503200F3AC4C /* plugin_support.h in Headers */,
                                15732A7D16EA503200F3AC4C /* session.h in Headers */,
                                15732A7E16EA503200F3AC4C /* pattern.h in Headers */,
                        buildActionMask = 2147483647;
                        files = (
                                157A85170D56C8E000B6F1A0 /* eventmon.h in Headers */,
-                               157A85120D56C8E000B6F1A0 /* cache.h in Headers */,
                                157A85140D56C8E000B6F1A0 /* ev_dlil.h in Headers */,
                                157A85150D56C8E000B6F1A0 /* ev_ipv4.h in Headers */,
                                157A85160D56C8E000B6F1A0 /* ev_ipv6.h in Headers */,
                                158317250CFB80A1006F62B9 /* configd.h in Headers */,
                                158317260CFB80A1006F62B9 /* _SCD.h in Headers */,
                                158317270CFB80A1006F62B9 /* configd_server.h in Headers */,
-                               158317280CFB80A1006F62B9 /* notify_server.h in Headers */,
                                158317290CFB80A1006F62B9 /* plugin_support.h in Headers */,
                                1583172A0CFB80A1006F62B9 /* session.h in Headers */,
                                1583172B0CFB80A1006F62B9 /* pattern.h in Headers */,
                        buildActionMask = 2147483647;
                        files = (
                                159D541407528DB5004F8947 /* eventmon.h in Headers */,
-                               159D540A07528D3B004F8947 /* cache.h in Headers */,
                                159D540E07528DAE004F8947 /* ev_dlil.h in Headers */,
                                159D541007528DB1004F8947 /* ev_ipv4.h in Headers */,
                                159D541207528DB3004F8947 /* ev_ipv6.h in Headers */,
                                159D54A407529FFF004F8947 /* configd.h in Headers */,
                                159D54A507529FFF004F8947 /* _SCD.h in Headers */,
                                159D54A607529FFF004F8947 /* configd_server.h in Headers */,
-                               159D54A707529FFF004F8947 /* notify_server.h in Headers */,
                                159D54A807529FFF004F8947 /* plugin_support.h in Headers */,
                                159D54A907529FFF004F8947 /* session.h in Headers */,
                                159D54AA07529FFF004F8947 /* pattern.h in Headers */,
                        buildActionMask = 2147483647;
                        files = (
                                15A5A2090D5B94190087BDA0 /* pppcontroller.h in Headers */,
+                               15EF899F21894452003B2C5C /* SCNetworkInterfaceProvider.h in Headers */,
+                               15EF89CC21894B28003B2C5C /* IPMonitorControl.h in Headers */,
                                15A5A2080D5B94190087BDA0 /* pppcontroller_types.h in Headers */,
                                1572C57F171CCFE200870549 /* pppcontroller_mach_defines.h in Headers */,
                                15A5A1E70D5B94190087BDA0 /* SCSchemaDefinitions.h in Headers */,
                                15A5A2050D5B94190087BDA0 /* SCPreferencesPathKey.h in Headers */,
                                15A5A2060D5B94190087BDA0 /* dnsinfo.h in Headers */,
                                15A5A2070D5B94190087BDA0 /* dnsinfo_private.h in Headers */,
+                               15EF89CB21894B1A003B2C5C /* IPMonitorControlPrivate.h in Headers */,
                                15A5A20C0D5B94190087BDA0 /* SCPreferencesSetSpecificPrivate.h in Headers */,
                                15A5A20D0D5B94190087BDA0 /* SCPreferencesGetSpecificPrivate.h in Headers */,
                                727AF255191386A0009AB153 /* VPNFlow.h in Headers */,
                                15A5A2100D5B94190087BDA0 /* SCHelper_client.h in Headers */,
                                15A5A2110D5B94190087BDA0 /* SCNetworkConnectionPrivate.h in Headers */,
                                15A5A2120D5B94190087BDA0 /* SCPreferencesKeychainPrivate.h in Headers */,
+                               15EF89A021894533003B2C5C /* SNHelperPrivate.h in Headers */,
                                15A5A2130D5B94190087BDA0 /* SCSchemaDefinitionsPrivate.h in Headers */,
                                15A5A2140D5B94190087BDA0 /* SCNetworkSignature.h in Headers */,
                                15A5A2150D5B94190087BDA0 /* SCNetworkSignaturePrivate.h in Headers */,
                        isa = PBXHeadersBuildPhase;
                        buildActionMask = 2147483647;
                        files = (
-                               15C8C6C0170AAB4E005375CE /* cache.h in Headers */,
                        );
                        runOnlyForDeploymentPostprocessing = 0;
                };
                                15DAD65107591A1A0084A6ED /* SCPreferencesSetSpecific.h in Headers */,
                                15DAD65207591A1A0084A6ED /* SCNetworkConfiguration.h in Headers */,
                                D61AAEB51522C9D00066B003 /* scprefs_observer.h in Headers */,
-                               F97F9FC7202CBD5A0040BD50 /* SCNetworkInterfaceProvider.h in Headers */,
+                               F90E43562012AD4F00EF27C4 /* SCNetworkInterfaceProvider.h in Headers */,
                                15DAD65307591A1A0084A6ED /* SCNetworkConfigurationInternal.h in Headers */,
                                F9B7AE66186211BE00C78D18 /* IPMonitorControlPrivate.h in Headers */,
                                15DAD65407591A1A0084A6ED /* SCNetwork.h in Headers */,
                        buildPhases = (
                                157A84F50D56C7E800B6F1A0 /* Headers */,
                                157A84F90D56C7E800B6F1A0 /* Sources */,
-                               F999388720FE546D005EE20D /* CopyFiles */,
+                               F963400F20FE8E4100F1E1F1 /* CopyFiles */,
                        );
                        buildRules = (
                        );
                                15A66BB11F18177100F7253B /* Update "install_path" for address|thread sanitizers */,
                                15DAD66807591A1A0084A6ED /* Resources */,
                                15DAD6B007591A1A0084A6ED /* get-mobility-info */,
-                               15D9DCF910DD909F004E545D /* AppWorkaround.plist */,
                                158D6D881C974E7E00A08E78 /* Logging Preferences */,
                        );
                        buildRules = (
                        productReference = 15E1B06116EBAE7800E5F06F /* IPMonitor.bundle */;
                        productType = "com.apple.product-type.bundle";
                };
+               15E91DB221893E83001155DC /* SCTest-ObjC-Embedded */ = {
+                       isa = PBXNativeTarget;
+                       buildConfigurationList = 15E91DBB21893E83001155DC /* Build configuration list for PBXNativeTarget "SCTest-ObjC-Embedded" */;
+                       buildPhases = (
+                               15E91DB521893E83001155DC /* Flush Module Cache */,
+                               15E91DB621893E83001155DC /* Sources */,
+                               15E91DB821893E83001155DC /* Frameworks */,
+                               15E91DBA21893E83001155DC /* CopyFiles */,
+                       );
+                       buildRules = (
+                       );
+                       dependencies = (
+                               15EF89A221894601003B2C5C /* PBXTargetDependency */,
+                       );
+                       name = "SCTest-ObjC-Embedded";
+                       productName = "SCTest-ObjC";
+                       productReference = 15E91DBE21893E83001155DC /* SCTest-ObjC-Embedded */;
+                       productType = "com.apple.product-type.tool";
+               };
+               15E91DCC21893EE1001155DC /* SCTest-Swift-Embedded */ = {
+                       isa = PBXNativeTarget;
+                       buildConfigurationList = 15E91DD321893EE1001155DC /* Build configuration list for PBXNativeTarget "SCTest-Swift-Embedded" */;
+                       buildPhases = (
+                               15E91DCF21893EE1001155DC /* Sources */,
+                               15E91DD121893EE1001155DC /* Frameworks */,
+                               15E91DD221893EE1001155DC /* CopyFiles */,
+                       );
+                       buildRules = (
+                       );
+                       dependencies = (
+                               15EF89A42189461B003B2C5C /* PBXTargetDependency */,
+                       );
+                       name = "SCTest-Swift-Embedded";
+                       productName = "SCTest-Swift";
+                       productReference = 15E91DD621893EE1001155DC /* SCTest-Swift-Embedded */;
+                       productType = "com.apple.product-type.tool";
+               };
+               15EF89A521894636003B2C5C /* SCTest-ObjC-EmbeddedSimulator */ = {
+                       isa = PBXNativeTarget;
+                       buildConfigurationList = 15EF89AE21894636003B2C5C /* Build configuration list for PBXNativeTarget "SCTest-ObjC-EmbeddedSimulator" */;
+                       buildPhases = (
+                               15EF89A821894636003B2C5C /* Flush Module Cache */,
+                               15EF89A921894636003B2C5C /* Sources */,
+                               15EF89AB21894636003B2C5C /* Frameworks */,
+                               15EF89AD21894636003B2C5C /* CopyFiles */,
+                       );
+                       buildRules = (
+                       );
+                       dependencies = (
+                               15EF89BE2189467B003B2C5C /* PBXTargetDependency */,
+                       );
+                       name = "SCTest-ObjC-EmbeddedSimulator";
+                       productName = "SCTest-ObjC";
+                       productReference = 15EF89B121894636003B2C5C /* SCTest-ObjC-EmbeddedSimulator */;
+                       productType = "com.apple.product-type.tool";
+               };
+               15EF89B221894665003B2C5C /* SCTest-Swift-EmbeddedSimulator */ = {
+                       isa = PBXNativeTarget;
+                       buildConfigurationList = 15EF89B921894665003B2C5C /* Build configuration list for PBXNativeTarget "SCTest-Swift-EmbeddedSimulator" */;
+                       buildPhases = (
+                               15EF89B521894665003B2C5C /* Sources */,
+                               15EF89B721894665003B2C5C /* Frameworks */,
+                               15EF89B821894665003B2C5C /* CopyFiles */,
+                       );
+                       buildRules = (
+                       );
+                       dependencies = (
+                               15EF89C021894688003B2C5C /* PBXTargetDependency */,
+                       );
+                       name = "SCTest-Swift-EmbeddedSimulator";
+                       productName = "SCTest-Swift";
+                       productReference = 15EF89BC21894665003B2C5C /* SCTest-Swift-EmbeddedSimulator */;
+                       productType = "com.apple.product-type.tool";
+               };
                15F742DA1EC6370000DA2E7A /* liblog_SystemConfiguration-Embedded */ = {
                        isa = PBXNativeTarget;
                        buildConfigurationList = 15F742E11EC6370000DA2E7A /* Build configuration list for PBXNativeTarget "liblog_SystemConfiguration-Embedded" */;
                        isa = PBXNativeTarget;
                        buildConfigurationList = 72D3E66D1AE6EAF600DB4C69 /* Build configuration list for PBXNativeTarget "SCTest-ObjC" */;
                        buildPhases = (
+                               150EC0FE21016BAA0047F4BF /* Flush Module Cache */,
                                72D3E6651AE6EAF600DB4C69 /* Sources */,
                                72D3E6661AE6EAF600DB4C69 /* Frameworks */,
                                72D3E6671AE6EAF600DB4C69 /* CopyFiles */,
                        buildPhases = (
                                C4666C6D206ED01800247AB6 /* Sources */,
                                C4666C6E206ED01800247AB6 /* Frameworks */,
-                               C4666C6F206ED01800247AB6 /* Resources */,
                        );
                        buildRules = (
                        );
                15CB6A7705C0722B0099E85F /* Project object */ = {
                        isa = PBXProject;
                        attributes = {
-                               LastUpgradeCheck = 0930;
+                               LastUpgradeCheck = 1100;
                                TargetAttributes = {
+                                       15401C1C21991506006326B7 = {
+                                               CreatedOnToolsVersion = 11.0;
+                                       };
                                        72573D251D667372004975AD = {
                                                CreatedOnToolsVersion = 8.0;
                                                ProvisioningStyle = Automatic;
                        };
                        buildConfigurationList = 156EB63E0905594A00EEF749 /* Build configuration list for PBXProject "configd" */;
                        compatibilityVersion = "Xcode 3.2";
-                       developmentRegion = English;
+                       developmentRegion = en;
                        hasScannedForEncodings = 1;
                        knownRegions = (
-                               English,
-                               Japanese,
-                               French,
-                               German,
+                               en,
+                               Base,
                        );
                        mainGroup = 15CB68FC05C072220099E85F /* configd */;
                        productRefGroup = 15CB690F05C0722B0099E85F /* Products */;
                                15DAD5DF075913CE0084A6ED /* libsystem_configuration */,
                                157BB8AE075924360025DA7A /* configd_base */,
                                15DAD63F07591A1A0084A6ED /* SystemConfiguration.framework */,
-                               1547001808455B98006787CE /* SCHelper */,
                                159D542007528E7C004F8947 /* configd_plugins */,
-                               159D53EB07528C61004F8947 /* IPMonitor */,
-                               15FD72A10754DA4C001CC321 /* IPMonitor.bundle */,
-                               159D53E407528C4A004F8947 /* InterfaceNamer */,
-                               15FD72930754DA2B001CC321 /* InterfaceNamer.bundle */,
                                159D53D307528BDA004F8947 /* KernelEventMonitor */,
                                15828AE60753B5F900AD4710 /* KernelEventMonitor.bundle */,
+                               159D53E407528C4A004F8947 /* InterfaceNamer */,
+                               15FD72930754DA2B001CC321 /* InterfaceNamer.bundle */,
+                               159D53EB07528C61004F8947 /* IPMonitor */,
+                               15FD72A10754DA4C001CC321 /* IPMonitor.bundle */,
                                159D53F207528C79004F8947 /* LinkConfiguration */,
                                15FD72B10754DA69001CC321 /* LinkConfiguration.bundle */,
                                159D53F907528C95004F8947 /* PreferencesMonitor */,
                                159D549F07529FFF004F8947 /* configd */,
                                1558481207550EC10046C2E9 /* scselect */,
                                155847430754FDCD0046C2E9 /* scutil */,
-                               72573D251D667372004975AD /* sctest */,
+                               1547001808455B98006787CE /* SCHelper */,
                                151F5D990CCE98E50093AC3B /* SCMonitor */,
+                               72573D251D667372004975AD /* sctest */,
                                C4666C70206ED01800247AB6 /* SystemConfigurationEventFactory */,
+                               15401C1C21991506006326B7 /* configd_extras */,
                                151C1CC60CFB487000C5AFD6 /* All-Embedded */,
                                15C64A280F684C6B00D78394 /* configd_libSystem-Embedded */,
                                157A84D80D56C63900B6F1A0 /* libsystem_configuration-Embedded */,
                                158316CF0CFB774B006F62B9 /* configd_base-Embedded */,
                                1572C4A60CFB55B400E2776E /* SystemConfiguration.framework-Embedded */,
-                               158337990CFB6B9E0033AB93 /* SCHelper-Embedded */,
                                158316E30CFB7761006F62B9 /* configd_plugins-Embedded */,
-                               157A84F40D56C7E800B6F1A0 /* IPMonitor-Embedded */,
-                               1583177D0CFB85C8006F62B9 /* IPMonitor.bundle-Embedded */,
                                157A85050D56C8AA00B6F1A0 /* InterfaceNamer-Embedded */,
                                158317870CFB85DD006F62B9 /* InterfaceNamer.bundle-Embedded */,
+                               157A84F40D56C7E800B6F1A0 /* IPMonitor-Embedded */,
+                               1583177D0CFB85C8006F62B9 /* IPMonitor.bundle-Embedded */,
                                157A85100D56C8E000B6F1A0 /* KernelEventMonitor-Embedded */,
                                158317900CFB85F7006F62B9 /* KernelEventMonitor.bundle-Embedded */,
                                157A85260D56C91100B6F1A0 /* LinkConfiguration-Embedded */,
                                158317230CFB80A1006F62B9 /* configd-Embedded */,
                                157433DD0D4A8122002ACA73 /* scselect-Embedded */,
                                157433F00D4A8137002ACA73 /* scutil-Embedded */,
+                               158337990CFB6B9E0033AB93 /* SCHelper-Embedded */,
                                7271EA1B1D76600B0055B1AA /* sctest-Embedded */,
+                               15401C21219915BC006326B7 /* configd_extras-Embedded */,
                                15FD13BF0D59485000F9409C /* All-EmbeddedSimulator */,
                                157FDE3B164A075F0040D6A8 /* configd_libSystem-EmbeddedSimulator */,
                                15732AD616EA6B6700F3AC4C /* libsystem_configuration-EmbeddedSimulator */,
                                15F742E71EC638D100DA2E7A /* liblog_SystemConfiguration-EmbeddedSimulator */,
                                15732A7616EA503200F3AC4C /* configd-EmbeddedSimulator */,
                                15732AAD16EA511900F3AC4C /* scutil-EmbeddedSimulator */,
-                               151F63DA09328A3C0096DCC9 /* Schema */,
+                               15401C26219915C6006326B7 /* configd_extras-EmbeddedSimulator */,
                                15E83104167F9AF600FD51EC /* EVERYTHING */,
-                               72D3E65D1AE6EA3900DB4C69 /* SCTest-Swift */,
+                               151F63DA09328A3C0096DCC9 /* Schema */,
                                72D3E6681AE6EAF600DB4C69 /* SCTest-ObjC */,
+                               15E91DB221893E83001155DC /* SCTest-ObjC-Embedded */,
+                               15EF89A521894636003B2C5C /* SCTest-ObjC-EmbeddedSimulator */,
+                               72D3E65D1AE6EA3900DB4C69 /* SCTest-Swift */,
+                               15E91DCC21893EE1001155DC /* SCTest-Swift-Embedded */,
+                               15EF89B221894665003B2C5C /* SCTest-Swift-EmbeddedSimulator */,
                        );
                };
 /* End PBXProject section */
                        );
                        runOnlyForDeploymentPostprocessing = 0;
                };
-               C4666C6F206ED01800247AB6 /* Resources */ = {
-                       isa = PBXResourcesBuildPhase;
-                       buildActionMask = 2147483647;
-                       files = (
-                       );
-                       runOnlyForDeploymentPostprocessing = 0;
-               };
 /* End PBXResourcesBuildPhase section */
 
 /* Begin PBXShellScriptBuildPhase section */
                        shellScript = "#\n# move libsystem_configuration_[at]san.dylib out of /usr/lib/system\n#\n# Note: to use the asan/tsan .dylib, set DYLD_INSERT_LIBRARIES=...\n#\nfor VARIANT in ${BUILD_VARIANTS}\ndo\n    if [ \"${VARIANT}\" = \"asan\" -o  \"${VARIANT}\" = \"tsan\" ]; then\n        DIR_O=\"/usr/lib/system\"\n        DIR_N=\"/usr/local/lib\"\n        DYLIB=\"libsystem_configuration_${VARIANT}.dylib\"\n\n\t\tmkdir -p \"${DSTROOT}/${DIR_N}\"\n\t\tmv \"${DSTROOT}/${DIR_O}/${DYLIB}\" \"${DSTROOT}/${DIR_N}/${DYLIB}\"\n\t\tif [ -d \"${DSTROOT}/${DIR_O}/${DYLIB}.dSYM\" ]; then\n\t\t\tmv \"${DSTROOT}/${DIR_O}/${DYLIB}.dSYM\" \"${DSTROOT}/${DIR_N}/${DYLIB}.dSYM\"\n\t\tfi\n    fi\ndone";
                        showEnvVarsInLog = 0;
                };
+               150EC0FE21016BAA0047F4BF /* Flush Module Cache */ = {
+                       isa = PBXShellScriptBuildPhase;
+                       buildActionMask = 2147483647;
+                       files = (
+                       );
+                       inputFileListPaths = (
+                       );
+                       inputPaths = (
+                       );
+                       name = "Flush Module Cache";
+                       outputFileListPaths = (
+                       );
+                       outputPaths = (
+                       );
+                       runOnlyForDeploymentPostprocessing = 0;
+                       shellPath = /bin/sh;
+                       shellScript = "rm -rf \"${CLANG_MODULE_CACHE_PATH}\"\n";
+                       showEnvVarsInLog = 0;
+               };
                1510A7301B17E1AF00125A85 /* Add framework symlink (TEMPORARY) */ = {
                        isa = PBXShellScriptBuildPhase;
                        buildActionMask = 2147483647;
                        );
                        runOnlyForDeploymentPostprocessing = 0;
                        shellPath = /bin/sh;
-                       shellScript = "if [ -x ${SCRIPT_INPUT_FILE_0} ]; then\n    ${SCRIPT_INPUT_FILE_0}\nfi\n";
+                       shellScript = "if [ -x ${SCRIPT_INPUT_FILE_0} ]; then\n    ${SCRIPT_INPUT_FILE_0} \"${TARGET_BUILD_DIR}/${PRIVATE_HEADERS_FOLDER_PATH}\"\nfi\n";
                        showEnvVarsInLog = 0;
                };
                1535FEDC1B0FDDCD00B2A3AD /* Add framework symlink (TEMPORARY) */ = {
                        shellScript = "if [ \"${USING_PRIVATE_SYSTEMCONFIGURATION_FRAMEWORK}\" = \"YES\" ]; then\n    mkdir -p ${DSTROOT}/System/Library/Frameworks\n    cd ${DSTROOT}/System/Library/Frameworks\n    rm -rf SystemConfiguration.framework\n    ln -s ../PrivateFrameworks/SystemConfiguration.framework .\nfi";
                        showEnvVarsInLog = 0;
                };
-               154070A01B968548003195EF /* Update "install_path" for address|thread sanitizers */ = {
+               15401C2021991549006326B7 /* Create non-empty Root */ = {
                        isa = PBXShellScriptBuildPhase;
-                       buildActionMask = 12;
+                       buildActionMask = 2147483647;
+                       files = (
+                       );
+                       inputFileListPaths = (
+                       );
+                       inputPaths = (
+                       );
+                       name = "Create non-empty Root";
+                       outputFileListPaths = (
+                       );
+                       outputPaths = (
+                       );
+                       runOnlyForDeploymentPostprocessing = 0;
+                       shellPath = /bin/sh;
+                       shellScript = "mkdir -p \"${DSTROOT}/AppleInternal\"\n";
+                       showEnvVarsInLog = 0;
+               };
+               15401C22219915BC006326B7 /* Create non-empty Root */ = {
+                       isa = PBXShellScriptBuildPhase;
+                       buildActionMask = 2147483647;
+                       files = (
+                       );
+                       inputFileListPaths = (
+                       );
+                       inputPaths = (
+                       );
+                       name = "Create non-empty Root";
+                       outputFileListPaths = (
+                       );
+                       outputPaths = (
+                       );
+                       runOnlyForDeploymentPostprocessing = 0;
+                       shellPath = /bin/sh;
+                       shellScript = "mkdir -p \"${DSTROOT}/AppleInternal\"\n";
+                       showEnvVarsInLog = 0;
+               };
+               15401C27219915C6006326B7 /* Create non-empty Root */ = {
+                       isa = PBXShellScriptBuildPhase;
+                       buildActionMask = 2147483647;
+                       files = (
+                       );
+                       inputFileListPaths = (
+                       );
+                       inputPaths = (
+                       );
+                       name = "Create non-empty Root";
+                       outputFileListPaths = (
+                       );
+                       outputPaths = (
+                       );
+                       runOnlyForDeploymentPostprocessing = 0;
+                       shellPath = /bin/sh;
+                       shellScript = "mkdir -p \"${DSTROOT}/AppleInternal\"\n";
+                       showEnvVarsInLog = 0;
+               };
+               154070A01B968548003195EF /* Update "install_path" for address|thread sanitizers */ = {
+                       isa = PBXShellScriptBuildPhase;
+                       buildActionMask = 12;
                        files = (
                        );
                        inputPaths = (
                        );
                        runOnlyForDeploymentPostprocessing = 0;
                        shellPath = /bin/sh;
-                       shellScript = "if [ -x ${SCRIPT_INPUT_FILE_0} ]; then\n    ${SCRIPT_INPUT_FILE_0}\nfi\n";
+                       shellScript = "if [ -x ${SCRIPT_INPUT_FILE_0} ]; then\n${SCRIPT_INPUT_FILE_0} \"${TARGET_BUILD_DIR}/${PRIVATE_HEADERS_FOLDER_PATH}\"\nfi\n";
                        showEnvVarsInLog = 0;
                };
                15A66BB11F18177100F7253B /* Update "install_path" for address|thread sanitizers */ = {
                        shellScript = "mkdir -p \"${DSTROOT}/usr/local/bin\"\nln -fs \"${INSTALL_PATH}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/get-mobility-info\" \"${DSTROOT}/usr/local/bin/\"\n";
                        showEnvVarsInLog = 0;
                };
+               15E91DB521893E83001155DC /* Flush Module Cache */ = {
+                       isa = PBXShellScriptBuildPhase;
+                       buildActionMask = 2147483647;
+                       files = (
+                       );
+                       inputFileListPaths = (
+                       );
+                       inputPaths = (
+                       );
+                       name = "Flush Module Cache";
+                       outputFileListPaths = (
+                       );
+                       outputPaths = (
+                       );
+                       runOnlyForDeploymentPostprocessing = 0;
+                       shellPath = /bin/sh;
+                       shellScript = "rm -rf \"${CLANG_MODULE_CACHE_PATH}\"\n";
+                       showEnvVarsInLog = 0;
+               };
+               15EF89A821894636003B2C5C /* Flush Module Cache */ = {
+                       isa = PBXShellScriptBuildPhase;
+                       buildActionMask = 2147483647;
+                       files = (
+                       );
+                       inputFileListPaths = (
+                       );
+                       inputPaths = (
+                       );
+                       name = "Flush Module Cache";
+                       outputFileListPaths = (
+                       );
+                       outputPaths = (
+                       );
+                       runOnlyForDeploymentPostprocessing = 0;
+                       shellPath = /bin/sh;
+                       shellScript = "rm -rf \"${CLANG_MODULE_CACHE_PATH}\"\n";
+                       showEnvVarsInLog = 0;
+               };
                15FBB54D17D75DE70035D752 /* Update MachServices */ = {
                        isa = PBXShellScriptBuildPhase;
                        buildActionMask = 2147483647;
                                1572C4F20CFB55B400E2776E /* SCDNotifierWait.c in Sources */,
                                1572C4F30CFB55B400E2776E /* SCDNotifierInformViaCallback.c in Sources */,
                                1572C4F50CFB55B400E2776E /* SCDNotifierInformViaFD.c in Sources */,
-                               1572C4F60CFB55B400E2776E /* SCDNotifierInformViaSignal.c in Sources */,
                                1572C4F70CFB55B400E2776E /* SCDNotifierCancel.c in Sources */,
                                1572C4F80CFB55B400E2776E /* SCDSnapshot.c in Sources */,
                                1572C4F90CFB55B400E2776E /* SCP.c in Sources */,
                                1572C5000CFB55B400E2776E /* SCPSet.c in Sources */,
                                1572C5010CFB55B400E2776E /* SCPRemove.c in Sources */,
                                1572C5020CFB55B400E2776E /* SCPCommit.c in Sources */,
-                               F97F9FC9202CBD710040BD50 /* SCNetworkInterfaceProvider.c in Sources */,
+                               F90E43592012AD6B00EF27C4 /* SCNetworkInterfaceProvider.c in Sources */,
                                1572C5040CFB55B400E2776E /* SCPPath.c in Sources */,
                                1572C5030CFB55B400E2776E /* SCPApply.c in Sources */,
                                1572C5060CFB55B400E2776E /* SCDHostName.c in Sources */,
                                1572C5150CFB55B400E2776E /* SCPreferencesPathKey.c in Sources */,
                                1572C5190CFB55B400E2776E /* SCNetworkConfigurationInternal.c in Sources */,
                                1572C51A0CFB55B400E2776E /* SCNetworkInterface.c in Sources */,
+                               1542400621626F5C00C7CE8B /* SCDCache.c in Sources */,
                                1572C51B0CFB55B400E2776E /* SCNetworkProtocol.c in Sources */,
                                1572C51C0CFB55B400E2776E /* SCNetworkService.c in Sources */,
                                1572C51D0CFB55B400E2776E /* SCNetworkSet.c in Sources */,
                                15732A8016EA503200F3AC4C /* configd.m in Sources */,
                                15732A8116EA503200F3AC4C /* _SCD.c in Sources */,
                                15732A8216EA503200F3AC4C /* configd_server.c in Sources */,
-                               15732A8316EA503200F3AC4C /* notify_server.c in Sources */,
                                15732A8416EA503200F3AC4C /* plugin_support.c in Sources */,
                                15732A8516EA503200F3AC4C /* session.c in Sources */,
                                15732A8616EA503200F3AC4C /* pattern.c in Sources */,
                                15732A9216EA503200F3AC4C /* _notifychanges.c in Sources */,
                                15732A9316EA503200F3AC4C /* _notifyviaport.c in Sources */,
                                15732A9416EA503200F3AC4C /* _notifyviafd.c in Sources */,
-                               15732A9516EA503200F3AC4C /* _notifyviasignal.c in Sources */,
                                15732A9616EA503200F3AC4C /* _notifycancel.c in Sources */,
                                15732A9716EA503200F3AC4C /* _snapshot.c in Sources */,
                        );
                        files = (
                                157A84FB0D56C7E800B6F1A0 /* dns-configuration.c in Sources */,
                                15D48EC10F67061F00B4711E /* dnsinfo_create.c in Sources */,
+                               159FFD5F2110EA44009311DD /* dnsinfo_flatfile.c in Sources */,
+                               150BEC1A14CA252200237116 /* dnsinfo_server.c in Sources */,
                                7280158E1BE16863009F4F60 /* dnsAgent.m in Sources */,
                                F9B7AE69186211CE00C78D18 /* IPMonitorControlServer.c in Sources */,
                                728015881BE16851009F4F60 /* configAgent.m in Sources */,
                                728015911BE1686C009F4F60 /* proxyAgent.m in Sources */,
-                               150BEC1A14CA252200237116 /* dnsinfo_server.c in Sources */,
                                155281020E3E4A0F00C54315 /* ip_plugin.c in Sources */,
                                E4F211D3137B0AB900BBB915 /* network_state_information_priv.c in Sources */,
                                153ACCA914E322D5005029A5 /* network_information_server.c in Sources */,
+                               F97289D322652D0600080596 /* serviceIDNumber.c in Sources */,
                                1575FD2712CD15C60003D86E /* proxy-configuration.c in Sources */,
                                157A84FC0D56C7E800B6F1A0 /* set-hostname.c in Sources */,
                                1501F76A1EA8019D006A71B0 /* nat64-configuration.c in Sources */,
                        buildActionMask = 2147483647;
                        files = (
                                157A851E0D56C8E000B6F1A0 /* eventmon.c in Sources */,
-                               157A85190D56C8E000B6F1A0 /* cache.c in Sources */,
                                157A851B0D56C8E000B6F1A0 /* ev_dlil.c in Sources */,
                                157A851C0D56C8E000B6F1A0 /* ev_ipv4.c in Sources */,
                                157A851D0D56C8E000B6F1A0 /* ev_ipv6.c in Sources */,
                                1583172D0CFB80A1006F62B9 /* configd.m in Sources */,
                                1583172E0CFB80A1006F62B9 /* _SCD.c in Sources */,
                                1583172F0CFB80A1006F62B9 /* configd_server.c in Sources */,
-                               158317300CFB80A1006F62B9 /* notify_server.c in Sources */,
                                158317310CFB80A1006F62B9 /* plugin_support.c in Sources */,
                                158317320CFB80A1006F62B9 /* session.c in Sources */,
                                158317330CFB80A1006F62B9 /* pattern.c in Sources */,
                                158317410CFB80A1006F62B9 /* _notifychanges.c in Sources */,
                                158317420CFB80A1006F62B9 /* _notifyviaport.c in Sources */,
                                158317430CFB80A1006F62B9 /* _notifyviafd.c in Sources */,
-                               158317440CFB80A1006F62B9 /* _notifyviasignal.c in Sources */,
                                158317450CFB80A1006F62B9 /* _notifycancel.c in Sources */,
                                158317460CFB80A1006F62B9 /* _snapshot.c in Sources */,
                        );
                        buildActionMask = 2147483647;
                        files = (
                                159D541307528DB5004F8947 /* eventmon.c in Sources */,
-                               159D540907528D3A004F8947 /* cache.c in Sources */,
                                159D540D07528DAE004F8947 /* ev_dlil.c in Sources */,
                                159D540F07528DB0004F8947 /* ev_ipv4.c in Sources */,
                                159D541107528DB2004F8947 /* ev_ipv6.c in Sources */,
                                F9B7AE6A186211D300C78D18 /* IPMonitorControlServer.c in Sources */,
                                F9D7305320E4211900521181 /* IPMonitorAWDReport.m in Sources */,
                                F9D7305220E4211900521181 /* AWDIPMonitorInterfaceAdvisoryReport.m in Sources */,
+                               F97289D422652D0A00080596 /* serviceIDNumber.c in Sources */,
                        );
                        runOnlyForDeploymentPostprocessing = 0;
                };
                                159D54AC07529FFF004F8947 /* configd.m in Sources */,
                                159D54AD07529FFF004F8947 /* _SCD.c in Sources */,
                                159D54AE07529FFF004F8947 /* configd_server.c in Sources */,
-                               159D54AF07529FFF004F8947 /* notify_server.c in Sources */,
                                159D54B007529FFF004F8947 /* plugin_support.c in Sources */,
                                159D54B107529FFF004F8947 /* session.c in Sources */,
                                159D54B207529FFF004F8947 /* pattern.c in Sources */,
                                159D54C007529FFF004F8947 /* _notifychanges.c in Sources */,
                                159D54C107529FFF004F8947 /* _notifyviaport.c in Sources */,
                                159D54C207529FFF004F8947 /* _notifyviafd.c in Sources */,
-                               159D54C307529FFF004F8947 /* _notifyviasignal.c in Sources */,
                                159D54C407529FFF004F8947 /* _notifycancel.c in Sources */,
                                159D54C507529FFF004F8947 /* _snapshot.c in Sources */,
                        );
                                15A5A2310D5B94190087BDA0 /* SCDNotifierWait.c in Sources */,
                                15A5A2320D5B94190087BDA0 /* SCDNotifierInformViaCallback.c in Sources */,
                                15A5A2340D5B94190087BDA0 /* SCDNotifierInformViaFD.c in Sources */,
-                               15A5A2350D5B94190087BDA0 /* SCDNotifierInformViaSignal.c in Sources */,
+                               1542400721626F6000C7CE8B /* SCDCache.c in Sources */,
                                15A5A2360D5B94190087BDA0 /* SCDNotifierCancel.c in Sources */,
                                15A5A2370D5B94190087BDA0 /* SCDSnapshot.c in Sources */,
+                               15EF89CA21894AB4003B2C5C /* SNHelper.c in Sources */,
                                15A5A2380D5B94190087BDA0 /* SCP.c in Sources */,
                                15A5A2390D5B94190087BDA0 /* SCPOpen.c in Sources */,
                                15A5A23A0D5B94190087BDA0 /* SCPLock.c in Sources */,
                                15A5A23F0D5B94190087BDA0 /* SCPSet.c in Sources */,
                                15A5A2400D5B94190087BDA0 /* SCPRemove.c in Sources */,
                                15A5A2410D5B94190087BDA0 /* SCPCommit.c in Sources */,
+                               15EF89C921894AA5003B2C5C /* SCNetworkInterfaceProvider.c in Sources */,
                                15A5A2420D5B94190087BDA0 /* SCPApply.c in Sources */,
                                15A5A2430D5B94190087BDA0 /* SCPPath.c in Sources */,
                                15A5A2450D5B94190087BDA0 /* SCDHostName.c in Sources */,
                                D61AAEB21522C99C0066B003 /* scprefs_observer.c in Sources */,
                                C4F1848316237B1400D97043 /* VPNService.c in Sources */,
                                B0FEF41B1644089200174B99 /* VPNAppLayer.c in Sources */,
+                               15EF89CD21894B32003B2C5C /* IPMonitorControl.c in Sources */,
                                727AF25919138E24009AB153 /* VPNTunnel.c in Sources */,
                        );
                        runOnlyForDeploymentPostprocessing = 0;
                        buildActionMask = 2147483647;
                        files = (
                                15D3083916F3EB8600014F82 /* simulator_support.c in Sources */,
-                               15C8C6BF170AAB4E005375CE /* cache.c in Sources */,
                        );
                        runOnlyForDeploymentPostprocessing = 0;
                };
                                15DAD66F07591A1A0084A6ED /* SCDPrivate.c in Sources */,
                                15DAD67007591A1A0084A6ED /* SCDPlugin.c in Sources */,
                                7264C144147319E7004FD76D /* CaptiveNetwork.c in Sources */,
+                               1542400521626F5A00C7CE8B /* SCDCache.c in Sources */,
                                15DAD67107591A1A0084A6ED /* SCDOpen.c in Sources */,
                                15DAD67407591A1A0084A6ED /* SCDList.c in Sources */,
                                15DAD67507591A1A0084A6ED /* SCDAdd.c in Sources */,
                                15DAD67F07591A1A0084A6ED /* SCDNotifierWait.c in Sources */,
                                15DAD68007591A1A0084A6ED /* SCDNotifierInformViaCallback.c in Sources */,
                                15DAD68207591A1A0084A6ED /* SCDNotifierInformViaFD.c in Sources */,
-                               15DAD68307591A1A0084A6ED /* SCDNotifierInformViaSignal.c in Sources */,
                                15DAD68407591A1A0084A6ED /* SCDNotifierCancel.c in Sources */,
                                15DAD68507591A1A0084A6ED /* SCDSnapshot.c in Sources */,
                                15DAD68607591A1A0084A6ED /* SCP.c in Sources */,
                                15DAD6A707591A1A0084A6ED /* SCNetworkInterface.c in Sources */,
                                15DAD6A807591A1A0084A6ED /* SCNetworkProtocol.c in Sources */,
                                15DAD6A907591A1A0084A6ED /* SCNetworkService.c in Sources */,
-                               F9AF76C1202CCD86008D3BEB /* SCNetworkInterfaceProvider.c in Sources */,
+                               F90E43582012AD6900EF27C4 /* SCNetworkInterfaceProvider.c in Sources */,
                                15DAD6AA07591A1A0084A6ED /* SCNetworkSet.c in Sources */,
                                55A3DB9E183C2AD900ED3DB7 /* SCNetworkMigration.c in Sources */,
                                15DAD6AB07591A1A0084A6ED /* BondConfiguration.c in Sources */,
                        files = (
                                15E1B04B16EBAE3C00E5F06F /* dns-configuration.c in Sources */,
                                15E1B04C16EBAE3C00E5F06F /* dnsinfo_create.c in Sources */,
+                               159FFD612110EA71009311DD /* dnsinfo_flatfile.c in Sources */,
                                15E1B04D16EBAE3C00E5F06F /* dnsinfo_server.c in Sources */,
                                15E1B04E16EBAE3C00E5F06F /* ip_plugin.c in Sources */,
+                               F97289D522652D0D00080596 /* serviceIDNumber.c in Sources */,
                                15E1B04F16EBAE3C00E5F06F /* network_state_information_priv.c in Sources */,
                                15E1B05016EBAE3C00E5F06F /* network_information_server.c in Sources */,
                                15E1B05116EBAE3C00E5F06F /* proxy-configuration.c in Sources */,
                        );
                        runOnlyForDeploymentPostprocessing = 0;
                };
+               15E91DB621893E83001155DC /* Sources */ = {
+                       isa = PBXSourcesBuildPhase;
+                       buildActionMask = 2147483647;
+                       files = (
+                               15E91DB721893E83001155DC /* test-objC.m in Sources */,
+                       );
+                       runOnlyForDeploymentPostprocessing = 0;
+               };
+               15E91DCF21893EE1001155DC /* Sources */ = {
+                       isa = PBXSourcesBuildPhase;
+                       buildActionMask = 2147483647;
+                       files = (
+                               15E91DD021893EE1001155DC /* main.swift in Sources */,
+                       );
+                       runOnlyForDeploymentPostprocessing = 0;
+               };
+               15EF89A921894636003B2C5C /* Sources */ = {
+                       isa = PBXSourcesBuildPhase;
+                       buildActionMask = 2147483647;
+                       files = (
+                               15EF89AA21894636003B2C5C /* test-objC.m in Sources */,
+                       );
+                       runOnlyForDeploymentPostprocessing = 0;
+               };
+               15EF89B521894665003B2C5C /* Sources */ = {
+                       isa = PBXSourcesBuildPhase;
+                       buildActionMask = 2147483647;
+                       files = (
+                               15EF89B621894665003B2C5C /* main.swift in Sources */,
+                       );
+                       runOnlyForDeploymentPostprocessing = 0;
+               };
                15F742DC1EC6370000DA2E7A /* Sources */ = {
                        isa = PBXSourcesBuildPhase;
                        buildActionMask = 2147483647;
                        isa = PBXSourcesBuildPhase;
                        buildActionMask = 2147483647;
                        files = (
+                               C496A09620F909FF0098B3E5 /* IPConfigurationParser.m in Sources */,
                                C4666C7A206ED27800247AB6 /* EventFactory.m in Sources */,
+                               C4C5FB0C20EABD9E00F35614 /* IPMonitorParser.m in Sources */,
+                               C4C5FB0520EA9B6F00F35614 /* SCLogParser.m in Sources */,
+                               C4C5FB0920EAB0DD00F35614 /* InterfaceNamerParser.m in Sources */,
+                               C469CB2920EED6C100A7AD35 /* StateDumpParser.m in Sources */,
+                               C4C5FB0F20EAC05200F35614 /* PreferencesMonitorParser.m in Sources */,
+                               C4C5FB0620EA9C3200F35614 /* KernelEventMonitorParser.m in Sources */,
                        );
                        runOnlyForDeploymentPostprocessing = 0;
                };
 /* End PBXSourcesBuildPhase section */
 
 /* Begin PBXTargetDependency section */
+               150EC101210171AE0047F4BF /* PBXTargetDependency */ = {
+                       isa = PBXTargetDependency;
+                       target = 72D3E6681AE6EAF600DB4C69 /* SCTest-ObjC */;
+                       targetProxy = 150EC100210171AE0047F4BF /* PBXContainerItemProxy */;
+               };
+               150EC103210171B60047F4BF /* PBXTargetDependency */ = {
+                       isa = PBXTargetDependency;
+                       target = 72D3E65D1AE6EA3900DB4C69 /* SCTest-Swift */;
+                       targetProxy = 150EC102210171B60047F4BF /* PBXContainerItemProxy */;
+               };
                150ECB300D0042DA0065E94D /* PBXTargetDependency */ = {
                        isa = PBXTargetDependency;
                        target = 151F5D990CCE98E50093AC3B /* SCMonitor */;
                        target = 158337990CFB6B9E0033AB93 /* SCHelper-Embedded */;
                        targetProxy = 1523BBE11E075859006281F1 /* PBXContainerItemProxy */;
                };
+               15401C2C21991B05006326B7 /* PBXTargetDependency */ = {
+                       isa = PBXTargetDependency;
+                       target = 15401C1C21991506006326B7 /* configd_extras */;
+                       targetProxy = 15401C2B21991B05006326B7 /* PBXContainerItemProxy */;
+               };
+               15401C2E21991B1B006326B7 /* PBXTargetDependency */ = {
+                       isa = PBXTargetDependency;
+                       target = 15401C21219915BC006326B7 /* configd_extras-Embedded */;
+                       targetProxy = 15401C2D21991B1B006326B7 /* PBXContainerItemProxy */;
+               };
+               15401C3021991B31006326B7 /* PBXTargetDependency */ = {
+                       isa = PBXTargetDependency;
+                       target = 15401C26219915C6006326B7 /* configd_extras-EmbeddedSimulator */;
+                       targetProxy = 15401C2F21991B31006326B7 /* PBXContainerItemProxy */;
+               };
                1558480607550D470046C2E9 /* PBXTargetDependency */ = {
                        isa = PBXTargetDependency;
                        target = 159D549F07529FFF004F8947 /* configd */;
                        target = 155847FA07550D210046C2E9 /* configd_executables */;
                        targetProxy = 1558480E07550DD00046C2E9 /* PBXContainerItemProxy */;
                };
+               155C626121C2B6FD008DCB1A /* PBXTargetDependency */ = {
+                       isa = PBXTargetDependency;
+                       target = 157433DD0D4A8122002ACA73 /* scselect-Embedded */;
+                       targetProxy = 155C626021C2B6FD008DCB1A /* PBXContainerItemProxy */;
+               };
+               155C626521C2B6FD008DCB1A /* PBXTargetDependency */ = {
+                       isa = PBXTargetDependency;
+                       target = 7271EA1B1D76600B0055B1AA /* sctest-Embedded */;
+                       targetProxy = 155C626421C2B6FD008DCB1A /* PBXContainerItemProxy */;
+               };
                155F49A91C8650E900E47D08 /* PBXTargetDependency */ = {
                        isa = PBXTargetDependency;
                        target = 155F49861C864F1400E47D08 /* QoSMarking */;
                        target = 157433F00D4A8137002ACA73 /* scutil-Embedded */;
                        targetProxy = 1574341E0D4A815E002ACA73 /* PBXContainerItemProxy */;
                };
-               157434210D4A8166002ACA73 /* PBXTargetDependency */ = {
-                       isa = PBXTargetDependency;
-                       target = 157433DD0D4A8122002ACA73 /* scselect-Embedded */;
-                       targetProxy = 157434200D4A8166002ACA73 /* PBXContainerItemProxy */;
-               };
                157A85480D56CA0B00B6F1A0 /* PBXTargetDependency */ = {
                        isa = PBXTargetDependency;
                        target = 157A84F40D56C7E800B6F1A0 /* IPMonitor-Embedded */;
                        target = 15FD13BF0D59485000F9409C /* All-EmbeddedSimulator */;
                        targetProxy = 15E8310C167F9B1200FD51EC /* PBXContainerItemProxy */;
                };
+               15EF89A221894601003B2C5C /* PBXTargetDependency */ = {
+                       isa = PBXTargetDependency;
+                       target = 1572C4A60CFB55B400E2776E /* SystemConfiguration.framework-Embedded */;
+                       targetProxy = 15EF89A121894601003B2C5C /* PBXContainerItemProxy */;
+               };
+               15EF89A42189461B003B2C5C /* PBXTargetDependency */ = {
+                       isa = PBXTargetDependency;
+                       target = 1572C4A60CFB55B400E2776E /* SystemConfiguration.framework-Embedded */;
+                       targetProxy = 15EF89A32189461B003B2C5C /* PBXContainerItemProxy */;
+               };
+               15EF89BE2189467B003B2C5C /* PBXTargetDependency */ = {
+                       isa = PBXTargetDependency;
+                       target = 15A5A1E40D5B94190087BDA0 /* SystemConfiguration.framework-EmbeddedSimulator */;
+                       targetProxy = 15EF89BD2189467B003B2C5C /* PBXContainerItemProxy */;
+               };
+               15EF89C021894688003B2C5C /* PBXTargetDependency */ = {
+                       isa = PBXTargetDependency;
+                       target = 15A5A1E40D5B94190087BDA0 /* SystemConfiguration.framework-EmbeddedSimulator */;
+                       targetProxy = 15EF89BF21894688003B2C5C /* PBXContainerItemProxy */;
+               };
+               15EF89C221894837003B2C5C /* PBXTargetDependency */ = {
+                       isa = PBXTargetDependency;
+                       target = 15E91DB221893E83001155DC /* SCTest-ObjC-Embedded */;
+                       targetProxy = 15EF89C121894837003B2C5C /* PBXContainerItemProxy */;
+               };
+               15EF89C421894837003B2C5C /* PBXTargetDependency */ = {
+                       isa = PBXTargetDependency;
+                       target = 15E91DCC21893EE1001155DC /* SCTest-Swift-Embedded */;
+                       targetProxy = 15EF89C321894837003B2C5C /* PBXContainerItemProxy */;
+               };
+               15EF89C62189484C003B2C5C /* PBXTargetDependency */ = {
+                       isa = PBXTargetDependency;
+                       target = 15EF89A521894636003B2C5C /* SCTest-ObjC-EmbeddedSimulator */;
+                       targetProxy = 15EF89C52189484C003B2C5C /* PBXContainerItemProxy */;
+               };
+               15EF89C82189484C003B2C5C /* PBXTargetDependency */ = {
+                       isa = PBXTargetDependency;
+                       target = 15EF89B221894665003B2C5C /* SCTest-Swift-EmbeddedSimulator */;
+                       targetProxy = 15EF89C72189484C003B2C5C /* PBXContainerItemProxy */;
+               };
                723050321AE6F292004AC149 /* PBXTargetDependency */ = {
                        isa = PBXTargetDependency;
                        target = 15DAD63F07591A1A0084A6ED /* SystemConfiguration.framework */;
                        target = 15DAD63F07591A1A0084A6ED /* SystemConfiguration.framework */;
                        targetProxy = 723050331AE6F29D004AC149 /* PBXContainerItemProxy */;
                };
-               7271EA341D7660980055B1AA /* PBXTargetDependency */ = {
-                       isa = PBXTargetDependency;
-                       target = 7271EA1B1D76600B0055B1AA /* sctest-Embedded */;
-                       targetProxy = 7271EA331D7660980055B1AA /* PBXContainerItemProxy */;
-               };
                72C12CB11D6EA2CA000EE61C /* PBXTargetDependency */ = {
                        isa = PBXTargetDependency;
                        target = 72573D251D667372004975AD /* sctest */;
                1577253606EFBF3100D7B52B /* NetworkInterface.strings */ = {
                        isa = PBXVariantGroup;
                        children = (
-                               1577252F06EFB96700D7B52B /* English */,
+                               15436255218AA27400283462 /* en */,
                        );
                        name = NetworkInterface.strings;
                        sourceTree = "<group>";
                15A6F7C20A4B266D00B907EA /* Localizable.strings */ = {
                        isa = PBXVariantGroup;
                        children = (
-                               15A6F7C30A4B266D00B907EA /* English */,
+                               15436253218AA26100283462 /* en */,
                        );
                        name = Localizable.strings;
                        sourceTree = "<group>";
                15FEE8180CD03CBB001312F9 /* Localizable.strings */ = {
                        isa = PBXVariantGroup;
                        children = (
-                               15FEE8160CD03CA3001312F9 /* English */,
+                               15436251218AA22800283462 /* en */,
                        );
                        name = Localizable.strings;
                        sourceTree = "<group>";
                                STRIP_INSTALLED_PRODUCT_normal = YES;
                                STRIP_INSTALLED_PRODUCT_profile = NO;
                                STRIP_INSTALLED_PRODUCT_tsan = NO;
-                               VERSION_INFO_PREFIX = liblog_;
                        };
                        name = Debug;
                };
                                STRIP_INSTALLED_PRODUCT_normal = YES;
                                STRIP_INSTALLED_PRODUCT_profile = NO;
                                STRIP_INSTALLED_PRODUCT_tsan = NO;
-                               VERSION_INFO_PREFIX = liblog_;
                        };
                        name = Release;
                };
                        };
                        name = Release;
                };
+               15401C1E21991506006326B7 /* Debug */ = {
+                       isa = XCBuildConfiguration;
+                       buildSettings = {
+                               PRODUCT_NAME = configd_extras;
+                       };
+                       name = Debug;
+               };
+               15401C1F21991506006326B7 /* Release */ = {
+                       isa = XCBuildConfiguration;
+                       buildSettings = {
+                               PRODUCT_NAME = configd_extras;
+                       };
+                       name = Release;
+               };
+               15401C24219915BC006326B7 /* Debug */ = {
+                       isa = XCBuildConfiguration;
+                       buildSettings = {
+                               PRODUCT_NAME = "configd_extras (Embedded)";
+                               SUPPORTED_PLATFORMS = "iphoneos watchos tvos bridgeos";
+                       };
+                       name = Debug;
+               };
+               15401C25219915BC006326B7 /* Release */ = {
+                       isa = XCBuildConfiguration;
+                       buildSettings = {
+                               PRODUCT_NAME = "configd_extras (Embedded)";
+                               SUPPORTED_PLATFORMS = "iphoneos watchos tvos bridgeos";
+                       };
+                       name = Release;
+               };
+               15401C29219915C6006326B7 /* Debug */ = {
+                       isa = XCBuildConfiguration;
+                       buildSettings = {
+                               PRODUCT_NAME = "configd_extras (EmbeddedSimulator)";
+                               SUPPORTED_PLATFORMS = "iphonesimulator tvossimulator watchsimulator bridgesimulator";
+                       };
+                       name = Debug;
+               };
+               15401C2A219915C6006326B7 /* Release */ = {
+                       isa = XCBuildConfiguration;
+                       buildSettings = {
+                               PRODUCT_NAME = "configd_extras (EmbeddedSimulator)";
+                               SUPPORTED_PLATFORMS = "iphonesimulator tvossimulator watchsimulator bridgesimulator";
+                       };
+                       name = Release;
+               };
                155F498B1C864F1400E47D08 /* Debug */ = {
                        isa = XCBuildConfiguration;
                        buildSettings = {
                15631D241ECF98FB0088EEDD /* Debug */ = {
                        isa = XCBuildConfiguration;
                        buildSettings = {
-                               PRODUCT_NAME = "$(TARGET_NAME)";
+                               PRODUCT_NAME = "configd_executables (EmbeddedSimulator)";
                                SUPPORTED_PLATFORMS = "iphonesimulator tvossimulator watchsimulator bridgesimulator";
                        };
                        name = Debug;
                15631D251ECF98FB0088EEDD /* Release */ = {
                        isa = XCBuildConfiguration;
                        buildSettings = {
-                               PRODUCT_NAME = "$(TARGET_NAME)";
+                               PRODUCT_NAME = "configd_executables (EmbeddedSimulator)";
                                SUPPORTED_PLATFORMS = "iphonesimulator tvossimulator watchsimulator bridgesimulator";
                        };
                        name = Release;
                                        "$(SYMROOT)",
                                        "$(SDKROOT)/usr/local/lib",
                                );
-                               MODULEMAP_FILE = SystemConfiguration.fproj/Modules/sc_modules.modulemap;
+                               MODULEMAP_FILE = SystemConfiguration.fproj/Modules/SystemConfiguration.modulemap;
+                               MODULEMAP_PRIVATE_FILE = SystemConfiguration.fproj/Modules/SystemConfiguration.private.modulemap;
                                OTHER_CFLAGS = (
                                        "$(inherited)",
                                        "-DSC_LOG_OR_PRINT",
                                );
                                OTHER_CFLAGS_debug = "-O0";
-                               OTHER_TAPI_FLAGS = "$(inherited) -DEXCLUDE_VPN_TUNNEL_PLUGIN_FUNCTIONS -I$(SDKROOT)$(SYSTEM_LIBRARY_DIR)/Frameworks/System.framework/PrivateHeaders --extra-private-header=$(PROJECT_DIR)/SystemConfiguration.fproj/SystemConfigurationInternal.h --extra-private-header=$(PROJECT_DIR)/SystemConfiguration.fproj/SCDynamicStoreInternal.h";
+                               OTHER_TAPI_FLAGS = "$(inherited) -DEXCLUDE_VPN_TUNNEL_PLUGIN_FUNCTIONS -I$(SDKROOT)$(SYSTEM_LIBRARY_DIR)/Frameworks/System.framework/PrivateHeaders --extra-private-header=$(PROJECT_DIR)/SystemConfiguration.fproj/SystemConfigurationInternal.h --extra-private-header=$(PROJECT_DIR)/SystemConfiguration.fproj/SCDynamicStoreInternal.h --verify-api-skip-external-headers";
                                PRODUCT_BUNDLE_IDENTIFIER = com.apple.SystemConfiguration;
                                PRODUCT_NAME = SystemConfiguration;
                                WRAPPER_EXTENSION = framework;
                                        "$(SYMROOT)",
                                        "$(SDKROOT)/usr/local/lib",
                                );
-                               MODULEMAP_FILE = SystemConfiguration.fproj/Modules/sc_modules.modulemap;
+                               MODULEMAP_FILE = SystemConfiguration.fproj/Modules/SystemConfiguration.modulemap;
+                               MODULEMAP_PRIVATE_FILE = SystemConfiguration.fproj/Modules/SystemConfiguration.private.modulemap;
                                OTHER_CFLAGS = (
                                        "$(inherited)",
                                        "-DSC_LOG_OR_PRINT",
                                );
                                OTHER_CFLAGS_debug = "-O0";
-                               OTHER_TAPI_FLAGS = "$(inherited) -DEXCLUDE_VPN_TUNNEL_PLUGIN_FUNCTIONS -I$(SDKROOT)$(SYSTEM_LIBRARY_DIR)/Frameworks/System.framework/PrivateHeaders --extra-private-header=$(PROJECT_DIR)/SystemConfiguration.fproj/SystemConfigurationInternal.h --extra-private-header=$(PROJECT_DIR)/SystemConfiguration.fproj/SCDynamicStoreInternal.h";
+                               OTHER_TAPI_FLAGS = "$(inherited) -DEXCLUDE_VPN_TUNNEL_PLUGIN_FUNCTIONS -I$(SDKROOT)$(SYSTEM_LIBRARY_DIR)/Frameworks/System.framework/PrivateHeaders --extra-private-header=$(PROJECT_DIR)/SystemConfiguration.fproj/SystemConfigurationInternal.h --extra-private-header=$(PROJECT_DIR)/SystemConfiguration.fproj/SCDynamicStoreInternal.h --verify-api-skip-external-headers";
                                PRODUCT_BUNDLE_IDENTIFIER = com.apple.SystemConfiguration;
                                PRODUCT_NAME = SystemConfiguration;
                                SECTORDER_FLAGS = (
                                LIBRARY_STYLE = STATIC;
                                OTHER_CFLAGS = (
                                        "$(inherited)",
-                                       "-DSC_LOG_HANDLE=\"__log_IPMonitor()\"",
+                                       "-DSC_LOG_HANDLE=\"__log_IPMonitor\"",
                                );
                                PRODUCT_NAME = IPMonitor;
                                STRIP_INSTALLED_PRODUCT = NO;
                                LIBRARY_STYLE = STATIC;
                                OTHER_CFLAGS = (
                                        "$(inherited)",
-                                       "-DSC_LOG_HANDLE=\"__log_IPMonitor()\"",
+                                       "-DSC_LOG_HANDLE=\"__log_IPMonitor\"",
                                );
                                PRODUCT_NAME = IPMonitor;
                                STRIP_INSTALLED_PRODUCT = NO;
                                LIBRARY_STYLE = STATIC;
                                OTHER_CFLAGS = (
                                        "$(inherited)",
-                                       "-DSC_LOG_HANDLE=\"__log_InterfaceNamer()\"",
+                                       "-DSC_LOG_HANDLE=\"__log_InterfaceNamer\"",
                                );
                                PRODUCT_NAME = InterfaceNamer;
                                STRIP_INSTALLED_PRODUCT = NO;
                                LIBRARY_STYLE = STATIC;
                                OTHER_CFLAGS = (
                                        "$(inherited)",
-                                       "-DSC_LOG_HANDLE=\"__log_InterfaceNamer()\"",
+                                       "-DSC_LOG_HANDLE=\"__log_InterfaceNamer\"",
                                );
                                PRODUCT_NAME = InterfaceNamer;
                                STRIP_INSTALLED_PRODUCT = NO;
                                LIBRARY_STYLE = STATIC;
                                OTHER_CFLAGS = (
                                        "$(inherited)",
-                                       "-DSC_LOG_HANDLE=\"__log_KernelEventMonitor()\"",
+                                       "-DSC_LOG_HANDLE=\"__log_KernelEventMonitor\"",
                                );
                                PRODUCT_NAME = KernelEventMonitor;
                                STRIP_INSTALLED_PRODUCT = NO;
                                LIBRARY_STYLE = STATIC;
                                OTHER_CFLAGS = (
                                        "$(inherited)",
-                                       "-DSC_LOG_HANDLE=\"__log_KernelEventMonitor()\"",
+                                       "-DSC_LOG_HANDLE=\"__log_KernelEventMonitor\"",
                                );
                                PRODUCT_NAME = KernelEventMonitor;
                                STRIP_INSTALLED_PRODUCT = NO;
                156EB62B0905594A00EEF749 /* Debug */ = {
                        isa = XCBuildConfiguration;
                        buildSettings = {
+                               CODE_SIGN_ENTITLEMENTS = scutil.tproj/entitlements.plist;
                                FRAMEWORK_SEARCH_PATHS = "$(SYMROOT)";
                                GCC_DYNAMIC_NO_PIC = NO;
                                INSTALL_PATH = /usr/sbin;
                156EB62C0905594A00EEF749 /* Release */ = {
                        isa = XCBuildConfiguration;
                        buildSettings = {
+                               CODE_SIGN_ENTITLEMENTS = scutil.tproj/entitlements.plist;
                                FRAMEWORK_SEARCH_PATHS = "$(SYMROOT)";
                                GCC_DYNAMIC_NO_PIC = NO;
                                INSTALL_PATH = /usr/sbin;
                156EB63F0905594A00EEF749 /* Debug */ = {
                        isa = XCBuildConfiguration;
                        buildSettings = {
+                               ALWAYS_SEARCH_USER_PATHS = NO;
                                APPLY_RULES_IN_COPY_FILES = YES;
                                BUILD_VARIANTS = (
                                        normal,
                                        "${EXTRA_BUILD_VARIANT}",
                                );
                                CLANG_ANALYZER_LOCALIZABILITY_NONLOCALIZED = YES;
+                               CLANG_ANALYZER_SECURITY_FLOATLOOPCOUNTER = YES;
+                               CLANG_ANALYZER_SECURITY_INSECUREAPI_STRCPY = YES;
                                CLANG_ENABLE_OBJC_WEAK = YES;
+                               CLANG_MODULE_CACHE_PATH = "$(CONFIGURATION_TEMP_DIR)/ModuleCache";
+                               CLANG_STATIC_ANALYZER_MODE = deep;
                                CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES;
                                CLANG_WARN_BOOL_CONVERSION = YES;
                                CLANG_WARN_COMMA = YES;
                                CLANG_WARN_CONSTANT_CONVERSION = YES;
+                               CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES;
                                CLANG_WARN_DOCUMENTATION_COMMENTS = YES;
                                CLANG_WARN_EMPTY_BODY = YES;
                                CLANG_WARN_ENUM_CONVERSION = YES;
                                CLANG_WARN_INFINITE_RECURSION = YES;
                                CLANG_WARN_INT_CONVERSION = YES;
                                CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES;
+                               CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES;
                                CLANG_WARN_OBJC_LITERAL_CONVERSION = YES;
                                CLANG_WARN_RANGE_LOOP_ANALYSIS = YES;
+                               CLANG_WARN_STRICT_PROTOTYPES = YES;
                                CLANG_WARN_SUSPICIOUS_MOVE = YES;
                                CLANG_WARN_UNREACHABLE_CODE = YES;
                                CLANG_WARN__DUPLICATE_METHOD_MATCH = YES;
+                               CODE_SIGN_IDENTITY = "-";
                                COMBINE_HIDPI_IMAGES = YES;
                                COPY_PHASE_STRIP = NO;
                                CURRENT_PROJECT_VERSION = "$(RC_ProjectSourceVersion)";
                                        "$(inherited)",
                                        "-fconstant-cfstrings",
                                        "-fstack-protector-all",
-                                       "-DOS_ACTIVITY_OBJECT_API=1",
                                );
                                OTHER_CFLAGS_asan = "-fsanitize=address";
                                "OTHER_CFLAGS_asan[arch=i386]" = "";
                                SDKROOT = macosx.internal;
                                SUPPORTED_PLATFORMS = macosx;
                                SUPPORTS_TEXT_BASED_API = YES;
-                               TAPI_VERIFY_MODE = ErrorsAndWarnings;
+                               SWIFT_VERSION = 4.2;
+                               TAPI_VERIFY_MODE = Pedantic;
                                VERSIONING_SYSTEM = "apple-generic";
+                               VERSION_INFO_PREFIX = "__attribute__((visibility(\"hidden\")))";
                                WARNING_CFLAGS = (
                                        "-Wall",
                                        "-Wextra",
                156EB6400905594A00EEF749 /* Release */ = {
                        isa = XCBuildConfiguration;
                        buildSettings = {
+                               ALWAYS_SEARCH_USER_PATHS = NO;
                                APPLY_RULES_IN_COPY_FILES = YES;
                                BUILD_VARIANTS = (
                                        normal,
                                        "${EXTRA_BUILD_VARIANT}",
                                );
                                CLANG_ANALYZER_LOCALIZABILITY_NONLOCALIZED = YES;
+                               CLANG_ANALYZER_SECURITY_FLOATLOOPCOUNTER = YES;
+                               CLANG_ANALYZER_SECURITY_INSECUREAPI_STRCPY = YES;
                                CLANG_ENABLE_OBJC_WEAK = YES;
+                               CLANG_MODULE_CACHE_PATH = "$(CONFIGURATION_TEMP_DIR)/ModuleCache";
+                               CLANG_STATIC_ANALYZER_MODE = deep;
                                CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES;
                                CLANG_WARN_BOOL_CONVERSION = YES;
                                CLANG_WARN_COMMA = YES;
                                CLANG_WARN_CONSTANT_CONVERSION = YES;
+                               CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES;
                                CLANG_WARN_DOCUMENTATION_COMMENTS = YES;
                                CLANG_WARN_EMPTY_BODY = YES;
                                CLANG_WARN_ENUM_CONVERSION = YES;
                                CLANG_WARN_INFINITE_RECURSION = YES;
                                CLANG_WARN_INT_CONVERSION = YES;
                                CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES;
+                               CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES;
                                CLANG_WARN_OBJC_LITERAL_CONVERSION = YES;
                                CLANG_WARN_RANGE_LOOP_ANALYSIS = YES;
+                               CLANG_WARN_STRICT_PROTOTYPES = YES;
                                CLANG_WARN_SUSPICIOUS_MOVE = YES;
                                CLANG_WARN_UNREACHABLE_CODE = YES;
                                CLANG_WARN__DUPLICATE_METHOD_MATCH = YES;
+                               CODE_SIGN_IDENTITY = "-";
                                COMBINE_HIDPI_IMAGES = YES;
                                CURRENT_PROJECT_VERSION = "$(RC_ProjectSourceVersion)";
                                DEAD_CODE_STRIPPING = YES;
                                        "$(inherited)",
                                        "-fconstant-cfstrings",
                                        "-fstack-protector-all",
-                                       "-DOS_ACTIVITY_OBJECT_API=1",
                                );
                                OTHER_CFLAGS_asan = "-fsanitize=address";
                                "OTHER_CFLAGS_asan[arch=i386]" = "";
                                SUPPORTED_PLATFORMS = macosx;
                                SUPPORTS_TEXT_BASED_API = YES;
                                SWIFT_OPTIMIZATION_LEVEL = "-Owholemodule";
-                               TAPI_VERIFY_MODE = ErrorsAndWarnings;
+                               SWIFT_VERSION = 4.2;
+                               TAPI_VERIFY_MODE = Pedantic;
                                VERSIONING_SYSTEM = "apple-generic";
+                               VERSION_INFO_PREFIX = "__attribute__((visibility(\"hidden\")))";
                                WARNING_CFLAGS = (
                                        "-Wall",
                                        "-Wextra",
                                "INSTALL_PATH[sdk=appletv*]" = "$(SYSTEM_LIBRARY_DIR)/Frameworks";
                                "INSTALL_PATH[sdk=iphone*]" = "$(SYSTEM_LIBRARY_DIR)/Frameworks";
                                "INSTALL_PATH[sdk=watch*]" = "$(SYSTEM_LIBRARY_DIR)/PrivateFrameworks";
-                               IS_ZIPPERED = YES;
                                LIBRARY_SEARCH_PATHS = (
                                        "$(SYMROOT)",
                                        "$(SDKROOT)/usr/local/lib",
                                );
-                               MODULEMAP_FILE = SystemConfiguration.fproj/Modules/sc_modules.modulemap;
+                               MODULEMAP_FILE = SystemConfiguration.fproj/Modules/SystemConfiguration.modulemap;
+                               MODULEMAP_PRIVATE_FILE = SystemConfiguration.fproj/Modules/SystemConfiguration.private.modulemap;
                                OTHER_CFLAGS = (
                                        "$(inherited)",
                                        "-DSC_LOG_OR_PRINT",
                                "INSTALL_PATH[sdk=appletv*]" = "$(SYSTEM_LIBRARY_DIR)/Frameworks";
                                "INSTALL_PATH[sdk=iphone*]" = "$(SYSTEM_LIBRARY_DIR)/Frameworks";
                                "INSTALL_PATH[sdk=watch*]" = "$(SYSTEM_LIBRARY_DIR)/PrivateFrameworks";
-                               IS_ZIPPERED = YES;
                                LIBRARY_SEARCH_PATHS = (
                                        "$(SYMROOT)",
                                        "$(SDKROOT)/usr/local/lib",
                                );
-                               MODULEMAP_FILE = SystemConfiguration.fproj/Modules/sc_modules.modulemap;
+                               MODULEMAP_FILE = SystemConfiguration.fproj/Modules/SystemConfiguration.modulemap;
+                               MODULEMAP_PRIVATE_FILE = SystemConfiguration.fproj/Modules/SystemConfiguration.private.modulemap;
                                OTHER_CFLAGS = (
                                        "$(inherited)",
                                        "-DSC_LOG_OR_PRINT",
                        isa = XCBuildConfiguration;
                        buildSettings = {
                                BUILD_VARIANTS = normal;
+                               CODE_SIGN_ENTITLEMENTS = scutil.tproj/entitlements.plist;
                                FRAMEWORK_SEARCH_PATHS = (
                                        "$(SYMROOT)",
                                        "$(SDKROOT)$(SYSTEM_LIBRARY_DIR)/PrivateFrameworks",
                        isa = XCBuildConfiguration;
                        buildSettings = {
                                BUILD_VARIANTS = normal;
+                               CODE_SIGN_ENTITLEMENTS = scutil.tproj/entitlements.plist;
                                FRAMEWORK_SEARCH_PATHS = (
                                        "$(SYMROOT)",
                                        "$(SDKROOT)$(SYSTEM_LIBRARY_DIR)/PrivateFrameworks",
                                GENERATE_PROFILING_CODE_profile = YES;
                                INSTALLHDRS_COPY_PHASE = YES;
                                INSTALL_PATH = /usr/lib/system;
-                               IS_ZIPPERED = YES;
                                LINK_WITH_STANDARD_LIBRARIES = NO;
                                OTHER_LDFLAGS = (
                                        "-Wl,-umbrella,System",
                                GENERATE_PROFILING_CODE_profile = YES;
                                INSTALLHDRS_COPY_PHASE = YES;
                                INSTALL_PATH = /usr/lib/system;
-                               IS_ZIPPERED = YES;
                                LINK_WITH_STANDARD_LIBRARIES = NO;
                                OTHER_LDFLAGS = (
                                        "-Wl,-umbrella,System",
                157434170D4A8137002ACA73 /* Debug */ = {
                        isa = XCBuildConfiguration;
                        buildSettings = {
+                               CODE_SIGN_ENTITLEMENTS = scutil.tproj/entitlements.plist;
                                FRAMEWORK_SEARCH_PATHS = (
                                        "$(SYMROOT)",
                                        "$(SDKROOT)$(SYSTEM_LIBRARY_DIR)/PrivateFrameworks",
                157434180D4A8137002ACA73 /* Release */ = {
                        isa = XCBuildConfiguration;
                        buildSettings = {
+                               CODE_SIGN_ENTITLEMENTS = scutil.tproj/entitlements.plist;
                                FRAMEWORK_SEARCH_PATHS = (
                                        "$(SYMROOT)",
                                        "$(SDKROOT)$(SYSTEM_LIBRARY_DIR)/PrivateFrameworks",
                                INSTALL_PATH = /usr/lib/system;
                                INSTALL_PATH_asan = /usr/local/lib;
                                INSTALL_PATH_tsan = /usr/local/lib;
-                               IS_ZIPPERED = YES;
                                LINK_WITH_STANDARD_LIBRARIES = NO;
                                OTHER_LDFLAGS = (
                                        "-Wl,-umbrella,System",
                                INSTALL_PATH = /usr/lib/system;
                                INSTALL_PATH_asan = /usr/local/lib;
                                INSTALL_PATH_tsan = /usr/local/lib;
-                               IS_ZIPPERED = YES;
                                LINK_WITH_STANDARD_LIBRARIES = NO;
                                OTHER_LDFLAGS = (
                                        "-Wl,-umbrella,System",
                                LIBRARY_STYLE = STATIC;
                                OTHER_CFLAGS = (
                                        "$(inherited)",
-                                       "-DSC_LOG_HANDLE=\"__log_IPMonitor()\"",
+                                       "-DSC_LOG_HANDLE=\"__log_IPMonitor\"",
                                );
                                PRODUCT_NAME = IPMonitor;
                                SDKROOT = iphoneos.internal;
                                LIBRARY_STYLE = STATIC;
                                OTHER_CFLAGS = (
                                        "$(inherited)",
-                                       "-DSC_LOG_HANDLE=\"__log_IPMonitor()\"",
+                                       "-DSC_LOG_HANDLE=\"__log_IPMonitor\"",
                                );
                                PRODUCT_NAME = IPMonitor;
                                SDKROOT = iphoneos.internal;
                                LIBRARY_STYLE = STATIC;
                                OTHER_CFLAGS = (
                                        "$(inherited)",
-                                       "-DSC_LOG_HANDLE=\"__log_InterfaceNamer()\"",
+                                       "-DSC_LOG_HANDLE=\"__log_InterfaceNamer\"",
                                );
                                PRODUCT_NAME = InterfaceNamer;
                                SDKROOT = iphoneos.internal;
                                LIBRARY_STYLE = STATIC;
                                OTHER_CFLAGS = (
                                        "$(inherited)",
-                                       "-DSC_LOG_HANDLE=\"__log_InterfaceNamer()\"",
+                                       "-DSC_LOG_HANDLE=\"__log_InterfaceNamer\"",
                                );
                                PRODUCT_NAME = InterfaceNamer;
                                SDKROOT = iphoneos.internal;
                                LIBRARY_STYLE = STATIC;
                                OTHER_CFLAGS = (
                                        "$(inherited)",
-                                       "-DSC_LOG_HANDLE=\"__log_KernelEventMonitor()\"",
+                                       "-DSC_LOG_HANDLE=\"__log_KernelEventMonitor\"",
                                );
                                PRODUCT_NAME = KernelEventMonitor;
                                SDKROOT = iphoneos.internal;
                                LIBRARY_STYLE = STATIC;
                                OTHER_CFLAGS = (
                                        "$(inherited)",
-                                       "-DSC_LOG_HANDLE=\"__log_KernelEventMonitor()\"",
+                                       "-DSC_LOG_HANDLE=\"__log_KernelEventMonitor\"",
                                );
                                PRODUCT_NAME = KernelEventMonitor;
                                SDKROOT = iphoneos.internal;
                                "INSTALL_PATH[sdk=appletv*]" = "$(SYSTEM_LIBRARY_DIR)/Frameworks";
                                "INSTALL_PATH[sdk=iphone*]" = "$(SYSTEM_LIBRARY_DIR)/Frameworks";
                                "INSTALL_PATH[sdk=watch*]" = "$(SYSTEM_LIBRARY_DIR)/PrivateFrameworks";
-                               IS_ZIPPERED = YES;
                                LIBRARY_SEARCH_PATHS = (
                                        "$(SYMROOT)",
                                        "$(SDKROOT)/usr/local/lib",
                                );
-                               MODULEMAP_FILE = SystemConfiguration.fproj/Modules/sc_modules.modulemap;
+                               MODULEMAP_FILE = SystemConfiguration.fproj/Modules/SystemConfiguration.modulemap;
+                               MODULEMAP_PRIVATE_FILE = SystemConfiguration.fproj/Modules/SystemConfiguration.private.modulemap;
                                OTHER_CFLAGS = (
                                        "$(inherited)",
                                        "-idirafter",
                                "INSTALL_PATH[sdk=appletv*]" = "$(SYSTEM_LIBRARY_DIR)/Frameworks";
                                "INSTALL_PATH[sdk=iphone*]" = "$(SYSTEM_LIBRARY_DIR)/Frameworks";
                                "INSTALL_PATH[sdk=watch*]" = "$(SYSTEM_LIBRARY_DIR)/PrivateFrameworks";
-                               IS_ZIPPERED = YES;
                                LIBRARY_SEARCH_PATHS = (
                                        "$(SYMROOT)",
                                        "$(SDKROOT)/usr/local/lib",
                                );
-                               MODULEMAP_FILE = SystemConfiguration.fproj/Modules/sc_modules.modulemap;
+                               MODULEMAP_FILE = SystemConfiguration.fproj/Modules/SystemConfiguration.modulemap;
+                               MODULEMAP_PRIVATE_FILE = SystemConfiguration.fproj/Modules/SystemConfiguration.private.modulemap;
                                OTHER_CFLAGS = (
                                        "$(inherited)",
                                        "-idirafter",
                                LIBRARY_STYLE = STATIC;
                                OTHER_CFLAGS = (
                                        "$(inherited)",
-                                       "-DSC_LOG_HANDLE=\"__log_SimulatorSupport()\"",
+                                       "-DSC_LOG_HANDLE=\"__log_SimulatorSupport\"",
                                );
                                PRODUCT_NAME = SimulatorSupport_sim;
                                SDKROOT = iphoneos.internal;
                                LIBRARY_STYLE = STATIC;
                                OTHER_CFLAGS = (
                                        "$(inherited)",
-                                       "-DSC_LOG_HANDLE=\"__log_SimulatorSupport()\"",
+                                       "-DSC_LOG_HANDLE=\"__log_SimulatorSupport\"",
                                );
                                PRODUCT_NAME = SimulatorSupport_sim;
                                SDKROOT = iphoneos.internal;
                                LIBRARY_STYLE = STATIC;
                                OTHER_CFLAGS = (
                                        "$(inherited)",
-                                       "-DSC_LOG_HANDLE=\"__log_IPMonitor()\"",
+                                       "-DSC_LOG_HANDLE=\"__log_IPMonitor\"",
                                );
                                PRODUCT_BUNDLE_IDENTIFIER = com.apple.SystemConfiguration.IPMonitor;
                                PRODUCT_NAME = IPMonitor_sim;
                                LIBRARY_STYLE = STATIC;
                                OTHER_CFLAGS = (
                                        "$(inherited)",
-                                       "-DSC_LOG_HANDLE=\"__log_IPMonitor()\"",
+                                       "-DSC_LOG_HANDLE=\"__log_IPMonitor\"",
                                );
                                PRODUCT_BUNDLE_IDENTIFIER = com.apple.SystemConfiguration.IPMonitor;
                                PRODUCT_NAME = IPMonitor_sim;
                        };
                        name = Release;
                };
+               15E91DBC21893E83001155DC /* Debug */ = {
+                       isa = XCBuildConfiguration;
+                       buildSettings = {
+                               CLANG_ALLOW_NON_MODULAR_INCLUDES_IN_FRAMEWORK_MODULES = YES;
+                               CLANG_ENABLE_MODULES = YES;
+                               CLANG_MODULES_DISABLE_PRIVATE_WARNING = YES;
+                               OTHER_CFLAGS = (
+                                       "$(inherited)",
+                                       "-Wnon-modular-include-in-module",
+                               );
+                               PRODUCT_NAME = "$(TARGET_NAME)";
+                               SDKROOT = iphoneos.internal;
+                               SUPPORTED_PLATFORMS = iphoneos;
+                       };
+                       name = Debug;
+               };
+               15E91DBD21893E83001155DC /* Release */ = {
+                       isa = XCBuildConfiguration;
+                       buildSettings = {
+                               CLANG_ALLOW_NON_MODULAR_INCLUDES_IN_FRAMEWORK_MODULES = YES;
+                               CLANG_ENABLE_MODULES = YES;
+                               CLANG_MODULES_DISABLE_PRIVATE_WARNING = YES;
+                               OTHER_CFLAGS = (
+                                       "$(inherited)",
+                                       "-Wnon-modular-include-in-module",
+                               );
+                               PRODUCT_NAME = "$(TARGET_NAME)";
+                               SDKROOT = iphoneos.internal;
+                               SUPPORTED_PLATFORMS = iphoneos;
+                       };
+                       name = Release;
+               };
+               15E91DD421893EE1001155DC /* Debug */ = {
+                       isa = XCBuildConfiguration;
+                       buildSettings = {
+                               PRODUCT_NAME = "$(TARGET_NAME)";
+                               SDKROOT = iphoneos.internal;
+                               SUPPORTED_PLATFORMS = iphoneos;
+                       };
+                       name = Debug;
+               };
+               15E91DD521893EE1001155DC /* Release */ = {
+                       isa = XCBuildConfiguration;
+                       buildSettings = {
+                               PRODUCT_NAME = "$(TARGET_NAME)";
+                               SDKROOT = iphoneos.internal;
+                               SUPPORTED_PLATFORMS = iphoneos;
+                       };
+                       name = Release;
+               };
+               15EF89AF21894636003B2C5C /* Debug */ = {
+                       isa = XCBuildConfiguration;
+                       buildSettings = {
+                               CLANG_ALLOW_NON_MODULAR_INCLUDES_IN_FRAMEWORK_MODULES = YES;
+                               CLANG_ENABLE_MODULES = YES;
+                               CLANG_MODULES_DISABLE_PRIVATE_WARNING = YES;
+                               OTHER_CFLAGS = (
+                                       "$(inherited)",
+                                       "-Wnon-modular-include-in-module",
+                               );
+                               PRODUCT_NAME = "$(TARGET_NAME)";
+                               SDKROOT = iphoneos.internal;
+                               SUPPORTED_PLATFORMS = iphonesimulator;
+                       };
+                       name = Debug;
+               };
+               15EF89B021894636003B2C5C /* Release */ = {
+                       isa = XCBuildConfiguration;
+                       buildSettings = {
+                               CLANG_ALLOW_NON_MODULAR_INCLUDES_IN_FRAMEWORK_MODULES = YES;
+                               CLANG_ENABLE_MODULES = YES;
+                               CLANG_MODULES_DISABLE_PRIVATE_WARNING = YES;
+                               OTHER_CFLAGS = (
+                                       "$(inherited)",
+                                       "-Wnon-modular-include-in-module",
+                               );
+                               PRODUCT_NAME = "$(TARGET_NAME)";
+                               SDKROOT = iphoneos.internal;
+                               SUPPORTED_PLATFORMS = iphonesimulator;
+                       };
+                       name = Release;
+               };
+               15EF89BA21894665003B2C5C /* Debug */ = {
+                       isa = XCBuildConfiguration;
+                       buildSettings = {
+                               PRODUCT_NAME = "$(TARGET_NAME)";
+                               SDKROOT = iphoneos.internal;
+                               SUPPORTED_PLATFORMS = iphonesimulator;
+                       };
+                       name = Debug;
+               };
+               15EF89BB21894665003B2C5C /* Release */ = {
+                       isa = XCBuildConfiguration;
+                       buildSettings = {
+                               PRODUCT_NAME = "$(TARGET_NAME)";
+                               SDKROOT = iphoneos.internal;
+                               SUPPORTED_PLATFORMS = iphonesimulator;
+                       };
+                       name = Release;
+               };
                15F742E21EC6370000DA2E7A /* Debug */ = {
                        isa = XCBuildConfiguration;
                        buildSettings = {
                                GENERATE_PROFILING_CODE_profile = YES;
                                INSTALLHDRS_COPY_PHASE = YES;
                                INSTALL_PATH = /usr/lib/log;
-                               IS_ZIPPERED = YES;
                                OTHER_CFLAGS_debug = "-O0";
                                OTHER_TAPI_FLAGS = "$(inherited) --extra-private-header=$(PROJECT_DIR)/logging/liblog_SystemConfiguration_internal.h";
                                PRODUCT_NAME = SystemConfiguration;
                                STRIP_INSTALLED_PRODUCT_profile = NO;
                                STRIP_INSTALLED_PRODUCT_tsan = NO;
                                SUPPORTED_PLATFORMS = "iphoneos tvos watchos bridgeos";
-                               VERSION_INFO_PREFIX = liblog_;
                        };
                        name = Debug;
                };
                                GENERATE_PROFILING_CODE_profile = YES;
                                INSTALLHDRS_COPY_PHASE = YES;
                                INSTALL_PATH = /usr/lib/log;
-                               IS_ZIPPERED = YES;
                                OTHER_CFLAGS_debug = "-O0";
                                OTHER_TAPI_FLAGS = "$(inherited) --extra-private-header=$(PROJECT_DIR)/logging/liblog_SystemConfiguration_internal.h";
                                PRODUCT_NAME = SystemConfiguration;
                                STRIP_INSTALLED_PRODUCT_profile = NO;
                                STRIP_INSTALLED_PRODUCT_tsan = NO;
                                SUPPORTED_PLATFORMS = "iphoneos tvos watchos bridgeos";
-                               VERSION_INFO_PREFIX = liblog_;
                        };
                        name = Release;
                };
                                GENERATE_PROFILING_CODE_profile = YES;
                                INSTALLHDRS_COPY_PHASE = YES;
                                INSTALL_PATH = /usr/lib/log;
-                               IS_ZIPPERED = YES;
                                OTHER_CFLAGS_debug = "-O0";
                                OTHER_TAPI_FLAGS = "$(inherited) --extra-private-header=$(PROJECT_DIR)/logging/liblog_SystemConfiguration_internal.h";
                                PRODUCT_NAME = SystemConfiguration;
                                STRIP_INSTALLED_PRODUCT_profile = NO;
                                STRIP_INSTALLED_PRODUCT_tsan = NO;
                                SUPPORTED_PLATFORMS = "iphonesimulator tvossimulator watchsimulator bridgesimulator";
-                               VERSION_INFO_PREFIX = liblog_;
                        };
                        name = Debug;
                };
                                GENERATE_PROFILING_CODE_profile = YES;
                                INSTALLHDRS_COPY_PHASE = YES;
                                INSTALL_PATH = /usr/lib/log;
-                               IS_ZIPPERED = YES;
                                OTHER_CFLAGS_debug = "-O0";
                                OTHER_TAPI_FLAGS = "$(inherited) --extra-private-header=$(PROJECT_DIR)/logging/liblog_SystemConfiguration_internal.h";
                                PRODUCT_NAME = SystemConfiguration;
                                STRIP_INSTALLED_PRODUCT_profile = NO;
                                STRIP_INSTALLED_PRODUCT_tsan = NO;
                                SUPPORTED_PLATFORMS = "iphonesimulator tvossimulator watchsimulator bridgesimulator";
-                               VERSION_INFO_PREFIX = liblog_;
                        };
                        name = Release;
                };
                72573D2B1D667372004975AD /* Debug */ = {
                        isa = XCBuildConfiguration;
                        buildSettings = {
-                               CLANG_ENABLE_MODULES = NO;
                                CLANG_ENABLE_OBJC_ARC = YES;
                                CODE_SIGN_ENTITLEMENTS = "sctest/sctest-entitlements.plist";
                                CODE_SIGN_IDENTITY = "-";
                                FRAMEWORK_SEARCH_PATHS = "$(SDKROOT)$(SYSTEM_LIBRARY_DIR)/PrivateFrameworks";
                                HEADER_SEARCH_PATHS = "$(SDKROOT)$(SYSTEM_LIBRARY_DIR)/Frameworks/System.framework/PrivateHeaders";
                                INSTALL_PATH = /usr/local/bin;
-                               MTL_ENABLE_DEBUG_INFO = YES;
                                PLIST_FILE_OUTPUT_FORMAT = "same-as-input";
                                PRODUCT_NAME = "$(TARGET_NAME)";
                        };
                72573D2C1D667372004975AD /* Release */ = {
                        isa = XCBuildConfiguration;
                        buildSettings = {
-                               CLANG_ENABLE_MODULES = NO;
                                CLANG_ENABLE_OBJC_ARC = YES;
                                CODE_SIGN_ENTITLEMENTS = "sctest/sctest-entitlements.plist";
                                CODE_SIGN_IDENTITY = "-";
                                FRAMEWORK_SEARCH_PATHS = "$(SDKROOT)$(SYSTEM_LIBRARY_DIR)/PrivateFrameworks";
                                HEADER_SEARCH_PATHS = "$(SDKROOT)$(SYSTEM_LIBRARY_DIR)/Frameworks/System.framework/PrivateHeaders";
                                INSTALL_PATH = /usr/local/bin;
-                               MTL_ENABLE_DEBUG_INFO = NO;
                                PLIST_FILE_OUTPUT_FORMAT = "same-as-input";
                                PRODUCT_NAME = "$(TARGET_NAME)";
                        };
                7271EA301D76600B0055B1AA /* Debug */ = {
                        isa = XCBuildConfiguration;
                        buildSettings = {
-                               CLANG_ENABLE_MODULES = NO;
                                CLANG_ENABLE_OBJC_ARC = YES;
                                CODE_SIGN_ENTITLEMENTS = "sctest/sctest-entitlements.plist";
                                CODE_SIGN_IDENTITY = "-";
                                FRAMEWORK_SEARCH_PATHS = "$(SDKROOT)$(SYSTEM_LIBRARY_DIR)/PrivateFrameworks";
                                HEADER_SEARCH_PATHS = "$(SDKROOT)$(SYSTEM_LIBRARY_DIR)/Frameworks/System.framework/PrivateHeaders";
                                INSTALL_PATH = /usr/local/bin;
-                               MTL_ENABLE_DEBUG_INFO = YES;
                                PLIST_FILE_OUTPUT_FORMAT = "same-as-input";
                                PRODUCT_NAME = sctest;
                                SDKROOT = iphoneos.internal;
                7271EA311D76600B0055B1AA /* Release */ = {
                        isa = XCBuildConfiguration;
                        buildSettings = {
-                               CLANG_ENABLE_MODULES = NO;
                                CLANG_ENABLE_OBJC_ARC = YES;
                                CODE_SIGN_ENTITLEMENTS = "sctest/sctest-entitlements.plist";
                                CODE_SIGN_IDENTITY = "-";
                                FRAMEWORK_SEARCH_PATHS = "$(SDKROOT)$(SYSTEM_LIBRARY_DIR)/PrivateFrameworks";
                                HEADER_SEARCH_PATHS = "$(SDKROOT)$(SYSTEM_LIBRARY_DIR)/Frameworks/System.framework/PrivateHeaders";
                                INSTALL_PATH = /usr/local/bin;
-                               MTL_ENABLE_DEBUG_INFO = NO;
                                PLIST_FILE_OUTPUT_FORMAT = "same-as-input";
                                PRODUCT_NAME = sctest;
                                SDKROOT = iphoneos.internal;
                72D3E6631AE6EA3A00DB4C69 /* Debug */ = {
                        isa = XCBuildConfiguration;
                        buildSettings = {
-                               ALWAYS_SEARCH_USER_PATHS = NO;
-                               CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x";
-                               CLANG_CXX_LIBRARY = "libc++";
-                               CLANG_ENABLE_MODULES = YES;
-                               CLANG_ENABLE_OBJC_ARC = YES;
-                               CLANG_WARN_BOOL_CONVERSION = YES;
-                               CLANG_WARN_CONSTANT_CONVERSION = YES;
-                               CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR;
-                               CLANG_WARN_EMPTY_BODY = YES;
-                               CLANG_WARN_ENUM_CONVERSION = YES;
-                               CLANG_WARN_INT_CONVERSION = YES;
-                               CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR;
-                               CLANG_WARN_UNREACHABLE_CODE = YES;
-                               CLANG_WARN__DUPLICATE_METHOD_MATCH = YES;
-                               DEBUG_INFORMATION_FORMAT = dwarf;
-                               ENABLE_STRICT_OBJC_MSGSEND = YES;
-                               GCC_C_LANGUAGE_STANDARD = gnu99;
-                               GCC_DYNAMIC_NO_PIC = NO;
-                               GCC_NO_COMMON_BLOCKS = YES;
-                               GCC_SYMBOLS_PRIVATE_EXTERN = NO;
-                               GCC_WARN_64_TO_32_BIT_CONVERSION = YES;
-                               GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR;
-                               GCC_WARN_UNDECLARED_SELECTOR = YES;
-                               GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE;
-                               GCC_WARN_UNUSED_FUNCTION = YES;
-                               GCC_WARN_UNUSED_VARIABLE = YES;
-                               MTL_ENABLE_DEBUG_INFO = YES;
-                               ONLY_ACTIVE_ARCH = YES;
                                PRODUCT_NAME = "$(TARGET_NAME)";
-                               SDKROOT = macosx;
-                               SWIFT_OPTIMIZATION_LEVEL = "-Onone";
                        };
                        name = Debug;
                };
                72D3E6641AE6EA3A00DB4C69 /* Release */ = {
                        isa = XCBuildConfiguration;
                        buildSettings = {
-                               ALWAYS_SEARCH_USER_PATHS = NO;
-                               CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x";
-                               CLANG_CXX_LIBRARY = "libc++";
-                               CLANG_ENABLE_MODULES = YES;
-                               CLANG_ENABLE_OBJC_ARC = YES;
-                               CLANG_WARN_BOOL_CONVERSION = YES;
-                               CLANG_WARN_CONSTANT_CONVERSION = YES;
-                               CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR;
-                               CLANG_WARN_EMPTY_BODY = YES;
-                               CLANG_WARN_ENUM_CONVERSION = YES;
-                               CLANG_WARN_INT_CONVERSION = YES;
-                               CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR;
-                               CLANG_WARN_UNREACHABLE_CODE = YES;
-                               CLANG_WARN__DUPLICATE_METHOD_MATCH = YES;
-                               COPY_PHASE_STRIP = NO;
-                               ENABLE_NS_ASSERTIONS = NO;
-                               ENABLE_STRICT_OBJC_MSGSEND = YES;
-                               GCC_C_LANGUAGE_STANDARD = gnu99;
-                               GCC_NO_COMMON_BLOCKS = YES;
-                               GCC_WARN_64_TO_32_BIT_CONVERSION = YES;
-                               GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR;
-                               GCC_WARN_UNDECLARED_SELECTOR = YES;
-                               GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE;
-                               GCC_WARN_UNUSED_FUNCTION = YES;
-                               GCC_WARN_UNUSED_VARIABLE = YES;
-                               MTL_ENABLE_DEBUG_INFO = NO;
                                PRODUCT_NAME = "$(TARGET_NAME)";
-                               SDKROOT = macosx;
                        };
                        name = Release;
                };
                72D3E66E1AE6EAF600DB4C69 /* Debug */ = {
                        isa = XCBuildConfiguration;
                        buildSettings = {
-                               ALWAYS_SEARCH_USER_PATHS = NO;
-                               CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x";
-                               CLANG_CXX_LIBRARY = "libc++";
+                               CLANG_ALLOW_NON_MODULAR_INCLUDES_IN_FRAMEWORK_MODULES = YES;
                                CLANG_ENABLE_MODULES = YES;
-                               CLANG_ENABLE_OBJC_ARC = YES;
-                               CLANG_WARN_BOOL_CONVERSION = YES;
-                               CLANG_WARN_CONSTANT_CONVERSION = YES;
-                               CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR;
-                               CLANG_WARN_EMPTY_BODY = YES;
-                               CLANG_WARN_ENUM_CONVERSION = YES;
-                               CLANG_WARN_INT_CONVERSION = YES;
-                               CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR;
-                               CLANG_WARN_UNREACHABLE_CODE = YES;
-                               CLANG_WARN__DUPLICATE_METHOD_MATCH = YES;
-                               DEBUG_INFORMATION_FORMAT = dwarf;
-                               ENABLE_STRICT_OBJC_MSGSEND = YES;
-                               GCC_C_LANGUAGE_STANDARD = gnu99;
-                               GCC_DYNAMIC_NO_PIC = NO;
-                               GCC_NO_COMMON_BLOCKS = YES;
-                               GCC_SYMBOLS_PRIVATE_EXTERN = NO;
-                               GCC_WARN_64_TO_32_BIT_CONVERSION = YES;
-                               GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR;
-                               GCC_WARN_UNDECLARED_SELECTOR = YES;
-                               GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE;
-                               GCC_WARN_UNUSED_FUNCTION = YES;
-                               GCC_WARN_UNUSED_VARIABLE = YES;
-                               MTL_ENABLE_DEBUG_INFO = YES;
-                               ONLY_ACTIVE_ARCH = YES;
+                               CLANG_MODULES_DISABLE_PRIVATE_WARNING = YES;
+                               OTHER_CFLAGS = (
+                                       "$(inherited)",
+                                       "-Wnon-modular-include-in-module",
+                               );
                                PRODUCT_NAME = "$(TARGET_NAME)";
-                               SDKROOT = macosx;
                        };
                        name = Debug;
                };
                72D3E66F1AE6EAF600DB4C69 /* Release */ = {
                        isa = XCBuildConfiguration;
                        buildSettings = {
-                               ALWAYS_SEARCH_USER_PATHS = NO;
-                               CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x";
-                               CLANG_CXX_LIBRARY = "libc++";
+                               CLANG_ALLOW_NON_MODULAR_INCLUDES_IN_FRAMEWORK_MODULES = YES;
                                CLANG_ENABLE_MODULES = YES;
-                               CLANG_ENABLE_OBJC_ARC = YES;
-                               CLANG_WARN_BOOL_CONVERSION = YES;
-                               CLANG_WARN_CONSTANT_CONVERSION = YES;
-                               CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR;
-                               CLANG_WARN_EMPTY_BODY = YES;
-                               CLANG_WARN_ENUM_CONVERSION = YES;
-                               CLANG_WARN_INT_CONVERSION = YES;
-                               CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR;
-                               CLANG_WARN_UNREACHABLE_CODE = YES;
-                               CLANG_WARN__DUPLICATE_METHOD_MATCH = YES;
-                               COPY_PHASE_STRIP = NO;
-                               ENABLE_NS_ASSERTIONS = NO;
-                               ENABLE_STRICT_OBJC_MSGSEND = YES;
-                               GCC_C_LANGUAGE_STANDARD = gnu99;
-                               GCC_NO_COMMON_BLOCKS = YES;
-                               GCC_WARN_64_TO_32_BIT_CONVERSION = YES;
-                               GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR;
-                               GCC_WARN_UNDECLARED_SELECTOR = YES;
-                               GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE;
-                               GCC_WARN_UNUSED_FUNCTION = YES;
-                               GCC_WARN_UNUSED_VARIABLE = YES;
-                               MTL_ENABLE_DEBUG_INFO = NO;
+                               CLANG_MODULES_DISABLE_PRIVATE_WARNING = YES;
+                               OTHER_CFLAGS = (
+                                       "$(inherited)",
+                                       "-Wnon-modular-include-in-module",
+                               );
                                PRODUCT_NAME = "$(TARGET_NAME)";
-                               SDKROOT = macosx;
                        };
                        name = Release;
                };
                C4666C75206ED01800247AB6 /* Debug */ = {
                        isa = XCBuildConfiguration;
                        buildSettings = {
-                               ALWAYS_SEARCH_USER_PATHS = NO;
                                CLANG_ANALYZER_NONNULL = YES;
                                CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE;
                                CLANG_CXX_LANGUAGE_STANDARD = "gnu++14";
                                CLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE;
                                CODE_SIGN_IDENTITY = "-";
                                CODE_SIGN_STYLE = Automatic;
-                               DEBUG_INFORMATION_FORMAT = dwarf;
+                               DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym";
+                               DWARF_DSYM_FILE_SHOULD_ACCOMPANY_PRODUCT = YES;
                                FRAMEWORK_SEARCH_PATHS = (
                                        "$(SDKROOT)$(SYSTEM_LIBRARY_DIR)/PrivateFrameworks",
                                        "$(SDKROOT)$(APPLE_INTERNAL_LIBRARY_DIR)/Frameworks",
                                );
                                GCC_C_LANGUAGE_STANDARD = gnu11;
-                               GCC_DYNAMIC_NO_PIC = NO;
-                               GCC_PREPROCESSOR_DEFINITIONS = (
-                                       "DEBUG=1",
-                                       "$(inherited)",
-                               );
                                GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR;
                                GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE;
                                INFOPLIST_FILE = EventFactory/Info.plist;
                                INSTALL_PATH = "$(APPLE_INTERNAL_LIBRARY_DIR)/Frameworks/EventFactory.framework/PlugIns";
+                               LD_RUNPATH_SEARCH_PATHS = "@loader_path/../../../../../";
                                MACOSX_DEPLOYMENT_TARGET = 10.14;
-                               MTL_ENABLE_DEBUG_INFO = YES;
                                ONLY_ACTIVE_ARCH = YES;
                                PRODUCT_BUNDLE_IDENTIFIER = "com.apple.$(TARGET_NAME)";
                                PRODUCT_NAME = "$(TARGET_NAME)";
                                SDKROOT = macosx.internal;
-                               SKIP_INSTALL = NO;
                        };
                        name = Debug;
                };
                C4666C76206ED01800247AB6 /* Release */ = {
                        isa = XCBuildConfiguration;
                        buildSettings = {
-                               ALWAYS_SEARCH_USER_PATHS = NO;
                                CLANG_ANALYZER_NONNULL = YES;
                                CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE;
                                CLANG_CXX_LANGUAGE_STANDARD = "gnu++14";
                                CODE_SIGN_IDENTITY = "-";
                                CODE_SIGN_STYLE = Automatic;
                                COPY_PHASE_STRIP = NO;
+                               DWARF_DSYM_FILE_SHOULD_ACCOMPANY_PRODUCT = "";
                                ENABLE_NS_ASSERTIONS = NO;
                                FRAMEWORK_SEARCH_PATHS = (
                                        "$(SDKROOT)$(SYSTEM_LIBRARY_DIR)/PrivateFrameworks",
                                GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE;
                                INFOPLIST_FILE = EventFactory/Info.plist;
                                INSTALL_PATH = "$(APPLE_INTERNAL_LIBRARY_DIR)/Frameworks/EventFactory.framework/PlugIns";
+                               LD_RUNPATH_SEARCH_PATHS = "@loader_path/../../../../../";
                                MACOSX_DEPLOYMENT_TARGET = 10.14;
-                               MTL_ENABLE_DEBUG_INFO = NO;
                                PRODUCT_BUNDLE_IDENTIFIER = "com.apple.$(TARGET_NAME)";
                                PRODUCT_NAME = "$(TARGET_NAME)";
                                SDKROOT = macosx.internal;
-                               SKIP_INSTALL = NO;
                        };
                        name = Release;
                };
                        defaultConfigurationIsVisible = 0;
                        defaultConfigurationName = Release;
                };
+               15401C1D21991506006326B7 /* Build configuration list for PBXAggregateTarget "configd_extras" */ = {
+                       isa = XCConfigurationList;
+                       buildConfigurations = (
+                               15401C1E21991506006326B7 /* Debug */,
+                               15401C1F21991506006326B7 /* Release */,
+                       );
+                       defaultConfigurationIsVisible = 0;
+                       defaultConfigurationName = Release;
+               };
+               15401C23219915BC006326B7 /* Build configuration list for PBXAggregateTarget "configd_extras-Embedded" */ = {
+                       isa = XCConfigurationList;
+                       buildConfigurations = (
+                               15401C24219915BC006326B7 /* Debug */,
+                               15401C25219915BC006326B7 /* Release */,
+                       );
+                       defaultConfigurationIsVisible = 0;
+                       defaultConfigurationName = Release;
+               };
+               15401C28219915C6006326B7 /* Build configuration list for PBXAggregateTarget "configd_extras-EmbeddedSimulator" */ = {
+                       isa = XCConfigurationList;
+                       buildConfigurations = (
+                               15401C29219915C6006326B7 /* Debug */,
+                               15401C2A219915C6006326B7 /* Release */,
+                       );
+                       defaultConfigurationIsVisible = 0;
+                       defaultConfigurationName = Release;
+               };
                155F498A1C864F1400E47D08 /* Build configuration list for PBXNativeTarget "QoSMarking" */ = {
                        isa = XCConfigurationList;
                        buildConfigurations = (
                        defaultConfigurationIsVisible = 0;
                        defaultConfigurationName = Release;
                };
+               15E91DBB21893E83001155DC /* Build configuration list for PBXNativeTarget "SCTest-ObjC-Embedded" */ = {
+                       isa = XCConfigurationList;
+                       buildConfigurations = (
+                               15E91DBC21893E83001155DC /* Debug */,
+                               15E91DBD21893E83001155DC /* Release */,
+                       );
+                       defaultConfigurationIsVisible = 0;
+                       defaultConfigurationName = Release;
+               };
+               15E91DD321893EE1001155DC /* Build configuration list for PBXNativeTarget "SCTest-Swift-Embedded" */ = {
+                       isa = XCConfigurationList;
+                       buildConfigurations = (
+                               15E91DD421893EE1001155DC /* Debug */,
+                               15E91DD521893EE1001155DC /* Release */,
+                       );
+                       defaultConfigurationIsVisible = 0;
+                       defaultConfigurationName = Release;
+               };
+               15EF89AE21894636003B2C5C /* Build configuration list for PBXNativeTarget "SCTest-ObjC-EmbeddedSimulator" */ = {
+                       isa = XCConfigurationList;
+                       buildConfigurations = (
+                               15EF89AF21894636003B2C5C /* Debug */,
+                               15EF89B021894636003B2C5C /* Release */,
+                       );
+                       defaultConfigurationIsVisible = 0;
+                       defaultConfigurationName = Release;
+               };
+               15EF89B921894665003B2C5C /* Build configuration list for PBXNativeTarget "SCTest-Swift-EmbeddedSimulator" */ = {
+                       isa = XCConfigurationList;
+                       buildConfigurations = (
+                               15EF89BA21894665003B2C5C /* Debug */,
+                               15EF89BB21894665003B2C5C /* Release */,
+                       );
+                       defaultConfigurationIsVisible = 0;
+                       defaultConfigurationName = Release;
+               };
                15F742E11EC6370000DA2E7A /* Build configuration list for PBXNativeTarget "liblog_SystemConfiguration-Embedded" */ = {
                        isa = XCConfigurationList;
                        buildConfigurations = (
index 31d28fb8ca8f20f448f9e82af9fbf50a439c02c4..b5fda07390f70253060e87904fd0a7677fb64509 100644 (file)
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2004, 2006, 2008-2013, 2015-2017 Apple Inc. All rights reserved.
+ * Copyright (c) 2004, 2006, 2008-2013, 2015-2017, 2019 Apple Inc. All rights reserved.
  *
  * @APPLE_LICENSE_HEADER_START@
  *
@@ -33,9 +33,6 @@
 #include <pthread.h>
 #include <dispatch/dispatch.h>
 #include <mach/mach.h>
-#ifdef VERBOSE_ACTIVITY_LOGGING
-#include <os/activity.h>
-#endif // VERBOSE_ACTIVITY_LOGGING
 #include <xpc/xpc.h>
 
 #ifndef        SC_LOG_HANDLE
@@ -68,24 +65,6 @@ static int                   dnsinfo_active          = 0;
 static libSC_info_client_t     *dnsinfo_client         = NULL;
 
 
-#ifdef VERBOSE_ACTIVITY_LOGGING
-static os_activity_t
-__dns_configuration_activity()
-{
-       static os_activity_t    activity;
-       static dispatch_once_t  once;
-
-       dispatch_once(&once, ^{
-               activity = os_activity_create("accessing DNS configuration",
-                                             OS_ACTIVITY_CURRENT,
-                                             OS_ACTIVITY_FLAG_DEFAULT);
-       });
-
-       return activity;
-}
-#endif // VERBOSE_ACTIVITY_LOGGING
-
-
 static dispatch_queue_t
 __dns_configuration_queue()
 {
@@ -149,11 +128,6 @@ dns_configuration_copy()
                return NULL;
        }
 
-#ifdef VERBOSE_ACTIVITY_LOGGING
-       // scope DNS configuration activity
-       os_activity_scope(__dns_configuration_activity());
-#endif // VERBOSE_ACTIVITY_LOGGING
-
        // create message
        reqdict = xpc_dictionary_create(NULL, NULL, 0);
 
index 26328a04c0b8906ff3556f50d5006b76d09be837..06dc18221d6bd576cd4bf3f6567507886b138b1f 100644 (file)
@@ -108,7 +108,7 @@ config_add_attribute(dns_create_config_t    *_config,
 
        // add attribute [data]
 
-       bcopy(attribute, &header->attribute[0], attribute_length);
+       memcpy(&header->attribute[0], attribute, attribute_length);
        for (uint32_t i = attribute_length; i < rounded_length; i++) {
                header->attribute[i] = 0;
        }
@@ -185,28 +185,28 @@ _dns_configuration_signature(dns_create_config_t  *_config,
                             unsigned char              *signature,
                             size_t                     signature_len)
 {
-       bzero(signature, signature_len);
+       memset(signature, 0, signature_len);
 
        if (_config != NULL) {
                _dns_config_buf_t       *config = (_dns_config_buf_t *)*_config;
 
                if (config != NULL) {
-                       CC_SHA1_CTX     ctx;
+                       CC_SHA256_CTX   ctx;
                        uint64_t        generation_save;
-                       unsigned char   *sha1;
-                       unsigned char   sha1_buf[CC_SHA1_DIGEST_LENGTH];
+                       unsigned char   *sha256;
+                       unsigned char   sha256_buf[CC_SHA256_DIGEST_LENGTH];
 
                        generation_save = config->config.generation;
                        config->config.generation = 0;
 
-                       sha1 = (signature_len >= CC_SHA1_DIGEST_LENGTH) ? signature : sha1_buf;
-                       CC_SHA1_Init(&ctx);
-                       CC_SHA1_Update(&ctx,
+                       sha256 = (signature_len >= CC_SHA256_DIGEST_LENGTH) ? signature : sha256_buf;
+                       CC_SHA256_Init(&ctx);
+                       CC_SHA256_Update(&ctx,
                                       config,
                                       sizeof(_dns_config_buf_t) + ntohl(config->n_attribute));
-                       CC_SHA1_Final(sha1, &ctx);
-                       if (sha1 != signature) {
-                               bcopy(sha1, signature, signature_len);
+                       CC_SHA256_Final(sha256, &ctx);
+                       if (sha256 != signature) {
+                               memcpy(signature, sha256, signature_len);
                        }
 
                        config->config.generation = generation_save;
@@ -278,7 +278,7 @@ _dns_resolver_add_attribute(dns_create_resolver_t   *_resolver,
 
        // add attribute [data]
 
-       bcopy(attribute, &header->attribute[0], attribute_length);
+       memcpy(&header->attribute[0], attribute, attribute_length);
        for (uint32_t i = attribute_length; i < rounded_length; i++) {
                header->attribute[i] = 0;
        }
index d80a65341f8e90b63c07c17c455fbe9ac50d8a16..8dd83a64017cd046ca602b35217d74490e8be3c3 100644 (file)
 typedef const struct __dns_create_config *      dns_create_config_t;
 typedef const struct __dns_create_resolver *    dns_create_resolver_t;
 
-#if    !TARGET_OS_IPHONE
 #ifndef _PATH_RESOLVER_DIR
+#if    TARGET_OS_OSX
 #define _PATH_RESOLVER_DIR "/etc/resolver"
+#else
+#define _PATH_RESOLVER_DIR "/Library/Preferences/SystemConfiguration/resolver"
+#endif
 #endif
-#endif /* !TARGET_OS_IPHONE */
 
 __BEGIN_DECLS
 
@@ -62,7 +64,7 @@ _dns_configuration_add_resolver (dns_create_config_t  *_config,
 void
 _dns_configuration_signature   (dns_create_config_t    *_config,
                                 unsigned char          *signature,
-                                size_t                 signature_len)          API_AVAILABLE(macos(10.7), ios(5.0));   // signature_len >= CC_SHA1_DIGEST_LENGTH
+                                size_t                 signature_len)          API_AVAILABLE(macos(10.7), ios(5.0));   // signature_len >= CC_SHA256_DIGEST_LENGTH
 
 void
 _dns_configuration_free                (dns_create_config_t    *_config)               API_AVAILABLE(macos(10.4), ios(2.0));
@@ -127,16 +129,14 @@ _dns_resolver_set_service_identifier
 void
 _dns_resolver_free             (dns_create_resolver_t  *_resolver)             API_AVAILABLE(macos(10.4), ios(2.0));
 
-#if    !TARGET_OS_IPHONE
 /*
  * DNS [resolver] flat-file configuration creation APIs
  */
 void
-_dnsinfo_flatfile_add_resolvers        (dns_create_config_t    *config)                API_AVAILABLE(macos(10.6)) API_UNAVAILABLE(ios, tvos, watchos, bridgeos);
+_dnsinfo_flatfile_add_resolvers        (dns_create_config_t    *config)                API_AVAILABLE(macos(10.6)) SPI_AVAILABLE(ios(10.15), tvos(13.0), watchos(6.0), bridgeos(6.0));
 
 void
-_dnsinfo_flatfile_set_flags    (uint32_t               flags)                  API_AVAILABLE(macos(10.9)) API_UNAVAILABLE(ios, tvos, watchos, bridgeos);
-#endif // !TARGET_OS_IPHONE
+_dnsinfo_flatfile_set_flags    (uint32_t               flags)                  API_AVAILABLE(macos(10.9)) SPI_AVAILABLE(ios(10.15), tvos(13.0), watchos(6.0), bridgeos(6.0));
 
 __END_DECLS
 
index 7317d255c16d5a8d41813c2bf4de7988cdd22d84..2820371dd48d9bfec549a1b3d99205232c296319 100644 (file)
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2009, 2011, 2012, 2014, 2015, 2017 Apple Inc. All rights reserved.
+ * Copyright (c) 2009, 2011, 2012, 2014, 2015, 2017-2019 Apple Inc. All rights reserved.
  *
  * @APPLE_LICENSE_HEADER_START@
  *
@@ -466,7 +466,7 @@ _dnsinfo_flatfile_create_resolver(const char *dir, const char *path)
                                long    number  = -1;
 
                                number = strtol(word, NULL, 0);
-                               if (number < 0 || number > UINT32_MAX) break;
+                               if (number < 0 || number > (long)UINT32_MAX) break;
                                _dns_resolver_set_order(&res, (uint32_t)number);
                                break;
                        }
@@ -490,13 +490,12 @@ _dnsinfo_flatfile_create_resolver(const char *dir, const char *path)
                                long    number  = -1;
 
                                number = strtol(word, NULL, 0);
-                               if (number < 0 || number > UINT32_MAX) break;
+                               if (number < 0 || number > (long)UINT32_MAX) break;
                                _dns_resolver_set_timeout(&res, (uint32_t)number);
                                break;
                        }
                }
        }
-       if (line != NULL) free(line);
 
        // set the domain to the basename of the path if not specified
        if ((res != NULL) && (token_count[TOKEN_DOMAIN] == 0)) {
@@ -522,6 +521,7 @@ _dnsinfo_flatfile_create_resolver(const char *dir, const char *path)
 
     done :
 
+       if (line != NULL) free(line);
        fclose(f);
        return res;
 }
index c37e949f83ccd71b405098dcab6d3bb265c7c80a..52f2d5701d74b4a3b3223f549e0b04d8c5e29f8e 100644 (file)
@@ -293,8 +293,8 @@ _dns_configuration_buffer_create(const void *dataRef, size_t dataLen)
        // allocate a buffer large enough to hold both the configuration
        // data and the padding.
        buf = malloc(bufLen);
-       bcopy((void *)dataRef, buf, dataLen);
-       bzero(&buf[dataLen], n_padding);
+       memcpy(buf, (void *)dataRef, dataLen);
+       memset(&buf[dataLen], 0, n_padding);
 
        return (_dns_config_buf_t *)(void *)buf;
 }
index b6c96a36eb4ed1b8e03a7707d326f5527e7d4dfe..419279c1c13fd25fe7e7d5b3079c33d2aa6f20df 100644 (file)
@@ -51,7 +51,7 @@
 
 #ifdef SC_LOG_HANDLE
 #include <os/log.h>
-os_log_t       SC_LOG_HANDLE;
+os_log_t       SC_LOG_HANDLE(void);
 #endif //SC_LOG_HANDLE
 
 
index 92ae111ac5bbe272f0fa480c955d5afddf574002..f6e5e87d380043672445296ae7320ed3a93f8829 100755 (executable)
@@ -318,7 +318,7 @@ fi
 # open files
 #
 if [ -x /usr/sbin/lsof ]; then
-       ${PRIV} /usr/sbin/lsof -n -O -P -T q            > lsof                  2>&1    &
+       ${PRIV} /usr/sbin/lsof +c 0 -n -O -P -T q       > lsof                  2>&1    &
        LSOF_PID=$!
        # Init a watchdog for lsof
        (
@@ -445,7 +445,7 @@ if [ -x /usr/sbin/lsof -a -x /bin/ls ]; then
                N=`expr ${N} + 1`
 
                echo "#"                                                >> system-statistics
-               ${PRIV} /usr/sbin/lsof -- ${lock}                       >> system-statistics    2>&1
+               ${PRIV} /usr/sbin/lsof +c 0 -- ${lock}                  >> system-statistics    2>&1
        done
 fi
 
index a3ca6d3464c35bbf3056942a101d926af2bac72c..e2749fdf4be2130d874ced20c5ee1b72d1e163a4 100755 (executable)
@@ -1,7 +1,7 @@
 #!/bin/sh
 
 #
-#  Copyright Â© 2015-2017 Apple Inc.
+#  Copyright Â© 2015-2019 Apple Inc.
 #
 #  get-network-info
 #
@@ -25,7 +25,7 @@ process_opts () {
                           COLLECT_NDF_INFO="Y"
                           shift
                           ;;
-                  -P)
+                   -P)
                           COLLECT_PCAP="N"
                           shift
                           ;;
@@ -70,13 +70,14 @@ setup () {
 
 # __COMMAND_ROUTINES_BEGIN__
 
-# note: the daemons dump to syslog so you need to wait a bit before
-# capturing the logs.
+#
+# mDNSResponder state dump
+# /usr/bin/dns-sd -O -stdout will print the state of mDNSResponder to STDOUT
+#
 collect_state_dump_sensitive () {
 
-       ${PRIV} /usr/bin/killall -INFO mDNSResponder                                            2>/dev/null
-
-       sleep 1                                                                                 &
+       echo "`date +"%Y-%m-%d %H:%M:%S"`: collect_state_dump_sensitive"        >> get-network-info.txt
+       ${PRIV} /usr/bin/dns-sd -O -stdout                              > mDNSResponder_state_dump.txt          2>&1
 
 }
 
@@ -89,6 +90,7 @@ run_ifconfig () {
                return
        fi
 
+       echo "`date +"%Y-%m-%d %H:%M:%S"`: run_ifconfig"                >> get-network-info.txt
        /sbin/ifconfig -a -L -b -m -r -v -v                             > ifconfig.txt          2>&1
        if [ $? -ne 0 ]; then
                /sbin/ifconfig -a                                       > ifconfig.txt          2>&1
@@ -105,15 +107,16 @@ run_netstat () {
                return
        fi
 
+       echo "`date +"%Y-%m-%d %H:%M:%S"`: run_netstat"                 >> get-network-info.txt
        echo "#"                                                         > netstat.txt
        echo "# netstat -n -r -a -l"                                    >> netstat.txt
        echo "#"                                                        >> netstat.txt
        /usr/sbin/netstat -n -r -a -l                                   >> netstat.txt          2>&1
 
        echo "#"                                                        >> netstat.txt
-       echo "# netstat -A -a -l -n -v"                                 >> netstat.txt
+       echo "# netstat -A -a -l -n -v -W"                              >> netstat.txt
        echo "#"                                                        >> netstat.txt
-       /usr/sbin/netstat -A -a -l -n -v                                >> netstat.txt          2>&1
+       /usr/sbin/netstat -A -a -l -n -v -W                             >> netstat.txt          2>&1
 
        echo "#"                                                        >> netstat.txt
        echo "# netstat -s"                                             >> netstat.txt
@@ -158,6 +161,11 @@ run_netstat () {
        if [ -x /sbin/ifconfig ]; then
                for if in ${IF_LIST}
                do
+                       echo "#"                                        >> netstat.txt
+                       echo "# netstat -s -I ${if}"                    >> netstat.txt
+                       echo "#"                                        >> netstat.txt
+                       /usr/sbin/netstat -s -I ${if}                   >> netstat.txt          2>&1
+
                        IF_INFO=`/sbin/ifconfig -v ${if}`
                        `echo $IF_INFO | grep -q TXSTART`
                        if [ $? -eq 0 ]; then
@@ -166,6 +174,7 @@ run_netstat () {
                                echo "#"                                >> netstat.txt
                                /usr/sbin/netstat -qq -I ${if}          >> netstat.txt          2>&1
                        fi
+
                        `echo $IF_INFO | grep -q RXPOLL`
                        if [ $? -eq 0 ]; then
                                echo "#"                                >> netstat.txt
@@ -187,6 +196,7 @@ run_ndp () {
                return
        fi
 
+       echo "`date +"%Y-%m-%d %H:%M:%S"`: run_ndp"                     >> get-network-info.txt
        echo "#"                                                         > ndp-info.txt
        echo "# ndp -n -a"                                              >> ndp-info.txt
        echo "#"                                                        >> ndp-info.txt
@@ -223,6 +233,7 @@ run_arp () {
                return
        fi
 
+       echo "`date +"%Y-%m-%d %H:%M:%S"`: run_arp"                     >> get-network-info.txt
        echo "#"                                                         > arp-info.txt
        echo "# arp -n -a"                                              >> arp-info.txt
        echo "#"                                                        >> arp-info.txt
@@ -239,6 +250,7 @@ run_ipconfig () {
                return
        fi
 
+       echo "`date +"%Y-%m-%d %H:%M:%S"`: run_ipconfig"                >> get-network-info.txt
        for if in ${IF_LIST}
        do
                case ${if} in
@@ -285,9 +297,10 @@ run_setkey () {
                return
        fi
 
-       echo "#"                                                                        >  ipsec.txt
-       echo "# setkey -D"                                                              >> ipsec.txt
-       echo "#"                                                                        >> ipsec.txt
+       echo "`date +"%Y-%m-%d %H:%M:%S"`: run_setkey"                  >> get-network-info.txt
+       echo "#"                                                        >  ipsec.txt
+       echo "# setkey -D"                                              >> ipsec.txt
+       echo "#"                                                        >> ipsec.txt
        ${PRIV} /usr/sbin/setkey -D                             \
        | /usr/bin/perl -l -n -e '
                if (/^(\s+[AE]:\s+\S+\s+)"?(.*)"?\s*$/) {
@@ -295,13 +308,13 @@ run_setkey () {
                } else {
                        printf "%s\n", $_;
                }
-       '                                                                               >> ipsec.txt
+       '                                                               >> ipsec.txt
 
-       echo ""                                                                         >> ipsec.txt
-       echo "#"                                                                        >> ipsec.txt
-       echo "# setkey -Pp -D"                                                          >> ipsec.txt
-       echo "#"                                                                        >> ipsec.txt
-       ${PRIV} /usr/sbin/setkey -Pp -D                                                 >> ipsec.txt
+       echo ""                                                         >> ipsec.txt
+       echo "#"                                                        >> ipsec.txt
+       echo "# setkey -Pp -D"                                          >> ipsec.txt
+       echo "#"                                                        >> ipsec.txt
+       ${PRIV} /usr/sbin/setkey -Pp -D                                 >> ipsec.txt
 
        for CF in /var/run/racoon/*.conf
        do
@@ -309,10 +322,10 @@ run_setkey () {
                        continue
                fi
 
-               echo ""                                                                 >> ipsec.txt
-               echo "#"                                                                >> ipsec.txt
-               echo "# ${CF}"                                                          >> ipsec.txt
-               echo "#"                                                                >> ipsec.txt
+               echo ""                                                 >> ipsec.txt
+               echo "#"                                                >> ipsec.txt
+               echo "# ${CF}"                                          >> ipsec.txt
+               echo "#"                                                >> ipsec.txt
                ${PRIV} cat ${CF}                               \
                | /usr/bin/perl -l -n -e '
                        if (/^(\s+shared_secret\s+use\s+)"?([^\s;"]+)"?(.*)/) {
@@ -320,7 +333,7 @@ run_setkey () {
                        } else {
                                printf "%s\n", $_;
                        }
-               '                                                                       >> ipsec.txt
+               '                                                       >> ipsec.txt
        done
 
 }
@@ -334,6 +347,7 @@ run_skywalk () {
                return
        fi
 
+       echo "`date +"%Y-%m-%d %H:%M:%S"`: run_skywalk"                 >> get-network-info.txt
        echo "#"                                                         > skywalk.txt
        echo "# skywalkctl show"                                        >> skywalk.txt
        echo "#"                                                        >> skywalk.txt
@@ -410,10 +424,11 @@ run_nettop () {
                return
        fi
 
+       echo "`date +"%Y-%m-%d %H:%M:%S"`: run_nettop"                  >> get-network-info.txt
        echo "#"                                                         > nettop.txt
-       echo "# nettop -U -l 1"                                         >> nettop.txt
+       echo "# nettop -n -l 1"                                         >> nettop.txt
        echo "#"                                                        >> nettop.txt
-       /usr/bin/nettop -U -l 1                                         >> nettop.txt           2>&1
+       /usr/bin/nettop -n -l 1                                         >> nettop.txt           2>&1
 
 }
 
@@ -422,6 +437,7 @@ run_nettop () {
 #
 collect_configuration_files () {
 
+       echo "`date +"%Y-%m-%d %H:%M:%S"`: collect_configuration_files" >> get-network-info.txt
        for f in                                                                                \
                /Library/Preferences/com.apple.networkextension.plist                           \
                /Library/Preferences/com.apple.networkextension.control.plist                   \
@@ -438,18 +454,18 @@ collect_configuration_files () {
        do
                if [ -e "${f}" ]; then
                        b="`basename ${f}`"
-                       cat "${f}"                                                      > "${b}"                        2>&1
+                       cat "${f}"                                      > "${b}"                        2>&1
                fi
        done
 
        if [ -e /etc/resolv.conf ]; then
-               cat /etc/resolv.conf                                                    > etc-resolv-conf.txt           2>&1
+               cat /etc/resolv.conf                                    > etc-resolv-conf.txt           2>&1
        fi
        if [ -e /var/run/resolv.conf ]; then
-               cat /var/run/resolv.conf                                                > var-run-resolv-conf.txt       2>&1
+               cat /var/run/resolv.conf                                > var-run-resolv-conf.txt       2>&1
        fi
        if [ -e /etc/resolver ]; then
-               tar -c -H /etc/resolver                                                 > etc-resolver.tar              2>/dev/null
+               tar -c -H /etc/resolver                                 > etc-resolver.tar              2>/dev/null
        fi
 }
 
@@ -458,6 +474,7 @@ collect_configuration_files () {
 #
 collect_vpn_logs () {
 
+       echo "`date +"%Y-%m-%d %H:%M:%S"`: collect_vpn_logs"            >> get-network-info.txt
        for f in                                                                                \
                /var/log/vpnd.log                                                               \
                /var/log/racoon.log                                                             \
@@ -465,7 +482,7 @@ collect_vpn_logs () {
        do
                if [ -e "${f}" ]; then
                        b="`basename ${f}`"
-                       ${PRIV} cat "${f}"                                                      > "${b}".txt    2>&1
+                       ${PRIV} cat "${f}"                              > "${b}".txt    2>&1
                fi
        done
 }
@@ -479,16 +496,17 @@ run_neutil () {
                return
        fi
 
+       echo "`date +"%Y-%m-%d %H:%M:%S"`: run_neutil"                  >> get-network-info.txt
        (
-               echo "#"                                                                >  necp.txt
-               echo "# neutil policy dump"                                             >> necp.txt
-               echo "#"                                                                >> necp.txt
-               /usr/local/bin/neutil policy dump                                       >> necp.txt             2>&1
+               echo "#"                                                >  necp.txt
+               echo "# neutil policy dump"                             >> necp.txt
+               echo "#"                                                >> necp.txt
+               /usr/local/bin/neutil policy dump                       >> necp.txt             2>&1
 
-               echo "#"                                                                >  network-agents.txt
-               echo "# neutil agent dump"                                              >> network-agents.txt
-               echo "#"                                                                >> network-agents.txt
-               /usr/local/bin/neutil agent dump                                        >> network-agents.txt   2>&1
+               echo "#"                                                >  network-agents.txt
+               echo "# neutil agent dump"                              >> network-agents.txt
+               echo "#"                                                >> network-agents.txt
+               /usr/local/bin/neutil agent dump                        >> network-agents.txt   2>&1
 
                # Generates a default-level log message containing the current file handles that UserEventAgent has
                /usr/local/bin/neutil session log-file-handles
@@ -505,7 +523,8 @@ run_network_test () {
                return
        fi
 
-       /usr/local/bin/network_test path_watcher                                > nw_path.txt   2>&1
+       echo "`date +"%Y-%m-%d %H:%M:%S"`: run_network_test"            >> get-network-info.txt
+       /usr/local/bin/network_test path_watcher -dump                  > nw_path.txt   2>&1
 
 }
 
@@ -518,50 +537,51 @@ run_scutil () {
                return
        fi
 
-       echo "#"                                                                >  network-information.txt
-       echo "# scutil -d -v --nwi"                                             >> network-information.txt
-       echo "#"                                                                >> network-information.txt
-       /usr/sbin/scutil -d -v --nwi                                            >> network-information.txt      2>&1
+       echo "`date +"%Y-%m-%d %H:%M:%S"`: run_scutil"                  >> get-network-info.txt
+       echo "#"                                                        >  network-information.txt
+       echo "# scutil -d -v --nwi"                                     >> network-information.txt
+       echo "#"                                                        >> network-information.txt
+       /usr/sbin/scutil -d -v --nwi                                    >> network-information.txt      2>&1
        for if in ${IF_LIST}
        do
-               echo ""                                                         >> network-information.txt
-               echo "#"                                                        >> network-information.txt
-               echo "# scutil --nwi ${if}"                                     >> network-information.txt
-               echo "#"                                                        >> network-information.txt
-               scutil --nwi ${if}                                              >> network-information.txt      2>&1
+               echo ""                                                 >> network-information.txt
+               echo "#"                                                >> network-information.txt
+               echo "# scutil --nwi ${if}"                             >> network-information.txt
+               echo "#"                                                >> network-information.txt
+               scutil --nwi ${if}                                      >> network-information.txt      2>&1
        done
 
-       echo "#"                                                                >  dns-configuration.txt
-       echo "# scutil -d -v --dns"                                             >> dns-configuration.txt
-       echo "#"                                                                >> dns-configuration.txt
-       /usr/sbin/scutil -d -v --dns                                            >> dns-configuration.txt        2>&1
+       echo "#"                                                        >  dns-configuration.txt
+       echo "# scutil -d -v --dns"                                     >> dns-configuration.txt
+       echo "#"                                                        >> dns-configuration.txt
+       /usr/sbin/scutil -d -v --dns                                    >> dns-configuration.txt        2>&1
 
-       echo "#"                                                                >  proxy-configuration.txt
-       echo "# scutil -d -v --proxy"                                           >> proxy-configuration.txt
-       echo "#"                                                                >> proxy-configuration.txt
-       /usr/sbin/scutil -d -v --proxy                                          >> proxy-configuration.txt      2>&1
+       echo "#"                                                        >  proxy-configuration.txt
+       echo "# scutil -d -v --proxy"                                   >> proxy-configuration.txt
+       echo "#"                                                        >> proxy-configuration.txt
+       /usr/sbin/scutil -d -v --proxy                                  >> proxy-configuration.txt      2>&1
 
-       echo "#"                                                                >  reachability-info.txt
-       echo '# scutil -d -v -r www.apple.com'                                  >> reachability-info.txt
-       echo "#"                                                                >> reachability-info.txt
-       /usr/sbin/scutil -d -v -r www.apple.com                                 >> reachability-info.txt        2>&1
+       echo "#"                                                        >  reachability-info.txt
+       echo '# scutil -d -v -r www.apple.com'                          >> reachability-info.txt
+       echo "#"                                                        >> reachability-info.txt
+       /usr/sbin/scutil -d -v -r www.apple.com                         >> reachability-info.txt        2>&1
 
-       echo "#"                                                                >> reachability-info.txt
-       echo '# scutil -d -v -r 0.0.0.0'                                        >> reachability-info.txt
-       echo "#"                                                                >> reachability-info.txt
-       /usr/sbin/scutil -d -v -r 0.0.0.0                                       >> reachability-info.txt        2>&1
+       echo "#"                                                        >> reachability-info.txt
+       echo '# scutil -d -v -r 0.0.0.0'                                >> reachability-info.txt
+       echo "#"                                                        >> reachability-info.txt
+       /usr/sbin/scutil -d -v -r 0.0.0.0                               >> reachability-info.txt        2>&1
 
-       echo "#"                                                                >> reachability-info.txt
-       echo '# scutil -d -v -r 169.254.0.0'                                    >> reachability-info.txt
-       echo "#"                                                                >> reachability-info.txt
-       /usr/sbin/scutil -d -v -r 169.254.0.0                                   >> reachability-info.txt        2>&1
+       echo "#"                                                        >> reachability-info.txt
+       echo '# scutil -d -v -r 169.254.0.0'                            >> reachability-info.txt
+       echo "#"                                                        >> reachability-info.txt
+       /usr/sbin/scutil -d -v -r 169.254.0.0                           >> reachability-info.txt        2>&1
 
-       echo "#"                                                                >  nc-info.txt
-       echo '# scutil --nc list'                                               >> nc-info.txt
-       echo "#"                                                                >> nc-info.txt
-       /usr/sbin/scutil --nc list                                              >> nc-info.txt                  2>&1
+       echo "#"                                                        >  nc-info.txt
+       echo '# scutil --nc list'                                       >> nc-info.txt
+       echo "#"                                                        >> nc-info.txt
+       /usr/sbin/scutil --nc list                                      >> nc-info.txt                  2>&1
 
-       /usr/sbin/scutil -p --snapshot                                          SCDynamicStore.plist            2>&1
+       /usr/sbin/scutil -p --snapshot                                  SCDynamicStore.plist            2>&1
 
 }
 
@@ -574,15 +594,16 @@ run_route () {
                return
        fi
 
-       echo "#"                                                                >  route-info.txt
-       echo '# route -n -v get www.apple.com'                                  >> route-info.txt
-       echo "#"                                                                >> route-info.txt
-       /sbin/route -n -v get www.apple.com                                     >> route-info.txt       2>&1
+       echo "`date +"%Y-%m-%d %H:%M:%S"`: run_route"                   >> get-network-info.txt
+       echo "#"                                                        >  route-info.txt
+       echo '# route -n -v get www.apple.com'                          >> route-info.txt
+       echo "#"                                                        >> route-info.txt
+       /sbin/route -n -v get www.apple.com                             >> route-info.txt       2>&1
 
-       echo "#"                                                                >> route-info.txt
-       echo '# route -n -v get 0.0.0.0'                                        >> route-info.txt
-       echo "#"                                                                >> route-info.txt
-       /sbin/route -n -v get 0.0.0.0                                           >> route-info.txt       2>&1
+       echo "#"                                                        >> route-info.txt
+       echo '# route -n -v get 0.0.0.0'                                >> route-info.txt
+       echo "#"                                                        >> route-info.txt
+       /sbin/route -n -v get 0.0.0.0                                   >> route-info.txt       2>&1
 
 }
 
@@ -595,10 +616,11 @@ run_dig () {
                return
        fi
 
-       echo "#"                                                                >  dig-info.txt
-       echo '# dig -t any -c any www.apple.com'                                >> dig-info.txt
-       echo "#"                                                                >> dig-info.txt
-       /usr/bin/dig +time=2 -t any -c any www.apple.com                        >> dig-info.txt         2>/dev/null
+       echo "`date +"%Y-%m-%d %H:%M:%S"`: run_dig"                     >> get-network-info.txt
+       echo "#"                                                        >  dig-info.txt
+       echo '# dig -t any -c any www.apple.com'                        >> dig-info.txt
+       echo "#"                                                        >> dig-info.txt
+       /usr/bin/dig +time=2 -t any -c any www.apple.com                >> dig-info.txt         2>/dev/null
 
 }
 
@@ -611,7 +633,8 @@ run_hostname () {
                return
        fi
 
-       /bin/hostname                                                           > hostname.txt          2>&1
+       echo "`date +"%Y-%m-%d %H:%M:%S"`: run_hostname"                >> get-network-info.txt
+       /bin/hostname                                                   > hostname.txt          2>&1
 
 }
 
@@ -624,14 +647,15 @@ run_lsof () {
                return
        fi
 
-       ${PRIV} /usr/sbin/lsof -i -n -O -P -T q                                 > lsof.txt              2>&1    &
+       echo "`date +"%Y-%m-%d %H:%M:%S"`: run_lsof"                    >> get-network-info.txt
+       ${PRIV} /usr/sbin/lsof +c 0 -X -n -O -P -T q            > lsof.txt              2>&1    &
        LSOF_PID=$!
        # start a watchdog for lsof
        (
                WAIT_TIME=5
                while [ $WAIT_TIME -gt 0 ]
                do
-                       ${PRIV} kill -0 ${LSOF_PID}                                                     2>/dev/null
+                       ${PRIV} kill -0 ${LSOF_PID}                                             2>/dev/null
                        if [ $? -eq 0 ]; then
                                # lsof is [still] gathering data...
                                sleep 1
@@ -645,19 +669,34 @@ run_lsof () {
 
                if [ $WAIT_TIME -eq 0 ]; then
                        # lsof timed out
-                       ${PRIV} kill ${LSOF_PID}                                                        2>/dev/null
+                       ${PRIV} kill ${LSOF_PID}                                                2>/dev/null
                fi
        ) &
 
 }
 
+#
+# sysctl
+#
+run_sysctl () {
+
+       if [ ! -x /usr/sbin/sysctl ]; then
+               return
+       fi
+
+       echo "`date +"%Y-%m-%d %H:%M:%S"`: run_sysctl"                  >> get-network-info.txt
+       ${PRIV} /usr/sbin/sysctl -a                                     > sysctl.txt    2>&1    &
+
+}
+
 start_pcap() {
        #
        # collect a packet capture if netdiagnose is available
        #
        if [ -x /usr/local/bin/netdiagnose ]; then
+               echo "`date +"%Y-%m-%d %H:%M:%S"`: start_pcap"          >> get-network-info.txt
                trap stop_pcap SIGINT
-               /usr/local/bin/netdiagnose -p "${REQUESTED_OUTDIR}" start sysdiagpcap                   2>&1    1>/dev/null
+               /usr/local/bin/netdiagnose -p "${REQUESTED_OUTDIR}" start sysdiagpcap           2>&1    1>/dev/null
                PCAP_STARTED=1
        fi
 }
@@ -665,12 +704,14 @@ start_pcap() {
 stop_pcap () {
        if [ ${PCAP_STARTED} -ne 0 ]; then
                trap '' SIGINT
-               /usr/local/bin/netdiagnose stop sysdiagpcap                                             2>&1    1>/dev/null
+               /usr/local/bin/netdiagnose stop sysdiagpcap                                     2>&1    1>/dev/null
+               echo "`date +"%Y-%m-%d %H:%M:%S"`: stop_pcap done"      >> get-network-info.txt
        fi
 }
 
 collect_ndf_info () {
        run_lsof
+       run_sysctl
 }
 
 collect_sensitive_info () {
index 3860ad524183bd3380f5290940104852ee199950..8f250778337c0049820d1e4bb27810abb2c1bc5e 100644 (file)
@@ -21,7 +21,6 @@
  * @APPLE_LICENSE_HEADER_END@
  */
 
-#include <os/availability.h>
 #include <TargetConditionals.h>
 #include <dispatch/dispatch.h>
 #include <dispatch/private.h>
index ccd600e09f08c6f17e01d7c08a6454aee38ca32d..52e24bea3b1fd9db884238f6717655f24424b11e 100644 (file)
@@ -28,9 +28,6 @@
 #include <TargetConditionals.h>
 #include <sys/cdefs.h>
 
-extern const unsigned char *   libsystem_configurationVersionString;
-extern const double            libsystem_configurationVersionNumber;
-
 __BEGIN_DECLS
 
 void
index 3d8e43d924e281839f824859e1b5476a83570baa..c193147a9d4b1cee2197639a1df805b9cd165fe8 100644 (file)
@@ -21,7 +21,6 @@
  * @APPLE_LICENSE_HEADER_END@
  */
 
-#include <os/availability.h>
 #include <TargetConditionals.h>
 #include <dispatch/dispatch.h>
 #include <vproc.h>
@@ -37,7 +36,7 @@
 
 #ifdef SC_LOG_HANDLE
 #include <os/log.h>
-os_log_t       SC_LOG_HANDLE;
+os_log_t       SC_LOG_HANDLE(void);
 #endif //SC_LOG_HANDLE
 
 
@@ -113,7 +112,7 @@ _handle_entitlement_check_failure(pid_t pid)
 __private_extern__
 void
 _libSC_info_server_init(libSC_info_server_t *server_info) {
-       bzero(server_info, sizeof(*server_info));
+       memset(server_info, 0, sizeof(*server_info));
        server_info->info = CFDictionaryCreateMutable(NULL,
                                                      0,
                                                      &kCFTypeDictionaryKeyCallBacks,
index 81aed02b5ab8b9fbe12159de11ab8f5f8ddf252e..e62933bf6117d11f67fd68712cda034656cecbe7 100644 (file)
@@ -30,9 +30,6 @@
 #include <os/log_private.h>
 #include <os/state_private.h>
 
-extern const unsigned char *   liblog_SystemConfigurationVersionString;
-extern const double            liblog_SystemConfigurationVersionNumber;
-
 // <os/log_private.h>
 #ifdef __OBJC__
 #import <Foundation/NSObjCRuntime.h>
index d6e765682973a12b4d7be1f092d87e0b0c2b5724..96c5f86a5575ce8176843332d9ce07e079fe48a9 100644 (file)
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2011-2018 Apple Inc. All rights reserved.
+ * Copyright (c) 2011-2019 Apple Inc. All rights reserved.
  *
  * @APPLE_LICENSE_HEADER_START@
  *
@@ -28,9 +28,6 @@
 #include <stdio.h>
 #include <sys/socket.h>
 #include <dispatch/dispatch.h>
-#ifdef VERBOSE_ACTIVITY_LOGGING
-#include <os/activity.h>
-#endif // VERBOSE_ACTIVITY_LOGGING
 #include <os/log.h>
 #include <xpc/xpc.h>
 
@@ -62,24 +59,6 @@ static int                   nwi_active      = 0;
 static libSC_info_client_t     *nwi_client     = NULL;
 
 
-#ifdef VERBOSE_ACTIVITY_LOGGING
-static os_activity_t
-__nwi_client_activity()
-{
-       static os_activity_t    activity;
-       static dispatch_once_t  once;
-
-       dispatch_once(&once, ^{
-               activity = os_activity_create("accessing network information",
-                                             OS_ACTIVITY_CURRENT,
-                                             OS_ACTIVITY_FLAG_DEFAULT);
-       });
-
-       return activity;
-}
-#endif // VERBOSE_ACTIVITY_LOGGING
-
-
 static dispatch_queue_t
 __nwi_client_queue()
 {
@@ -233,11 +212,6 @@ _nwi_state_copy_data()
                return NULL;
        }
 
-#ifdef VERBOSE_ACTIVITY_LOGGING
-       // scope NWI activity
-       os_activity_scope(__nwi_client_activity());
-#endif // VERBOSE_ACTIVITY_LOGGING
-
        // create message
        reqdict = xpc_dictionary_create(NULL, NULL, 0);
 
@@ -260,7 +234,7 @@ _nwi_state_copy_data()
                dataRef = xpc_dictionary_get_data(reply, NWI_CONFIGURATION, &dataLen);
                if (dataRef != NULL) {
                        nwi_state = malloc(dataLen);
-                       bcopy((void *)dataRef, nwi_state, dataLen);
+                       memcpy(nwi_state, (void *)dataRef, dataLen);
                        if (nwi_state->version != NWI_STATE_VERSION) {
                                /* make sure the version matches */
                                nwi_state_free(nwi_state);
@@ -297,11 +271,6 @@ _nwi_config_agent_copy_data(const struct netagent *agent, uint64_t *length)
 
        _nwi_client_init();
 
-#ifdef VERBOSE_ACTIVITY_LOGGING
-       // scope NWI activity
-       os_activity_scope(__nwi_client_activity());
-#endif // VERBOSE_ACTIVITY_LOGGING
-
        reqdict = xpc_dictionary_create(NULL, NULL, 0);
 
        xpc_dictionary_set_int64(reqdict, NWI_REQUEST, NWI_CONFIG_AGENT_REQUEST_COPY);
@@ -324,7 +293,7 @@ _nwi_config_agent_copy_data(const struct netagent *agent, uint64_t *length)
                if ((xpc_buffer != NULL) && (len > 0)) {
                        buffer = malloc(len);
                        *length = len;
-                       bcopy((void *)xpc_buffer, (void *)buffer, len);
+                       memcpy((void *)buffer, (void *)xpc_buffer, len);
                }
                xpc_release(reply);
        }
@@ -912,11 +881,11 @@ nwi_ifstate_print(nwi_ifstate_t ifstate)
               ifstate->ifname,
               diff_str,
               (ifstate->flags & NWI_IFSTATE_FLAGS_HAS_DNS) != 0
-                       ? " dns" : "",
+                       ? " dns" : "",
               (ifstate->flags & NWI_IFSTATE_FLAGS_HAS_CLAT46) != 0
-                       ? " clat46" : "",
+                       ? " clat46" : "",
               (ifstate->flags & NWI_IFSTATE_FLAGS_NOT_IN_LIST) != 0
-                       ? " never" : "",
+                       ? " never" : "",
               ifstate->rank,
               addr_str,
               (vpn_addr_str != NULL) ? " vpn_server_addr: " : "",
@@ -1050,7 +1019,7 @@ doit(void)
        state = nwi_state_new(state, 10);
        nwi_state_print(state);
 
-       bzero(&addr6, sizeof(addr6));
+       memset(&addr6, 0, sizeof(addr6));
        /* populate old_state */
        old_state = nwi_state_new(NULL, 5);
        for (int i = 0; i < 5; i++) {
index 944ce25a425b55181097bbefe5c9c4c438a41057..3ca3d04fbbf828deb647f52a4ec623f0f832de91 100644 (file)
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2011-2018 Apple Inc. All rights reserved.
+ * Copyright (c) 2011-2019 Apple Inc. All rights reserved.
  *
  * @APPLE_LICENSE_HEADER_START@
  *
@@ -132,6 +132,7 @@ nwi_ifstate_get_ifname(nwi_ifstate_t ifstate);
 #define NWI_IFSTATE_FLAGS_HAS_IPV4     0x1     /* has IPv4 connectivity */
 #define NWI_IFSTATE_FLAGS_HAS_IPV6     0x2     /* has IPv6 connectivity */
 #define NWI_IFSTATE_FLAGS_HAS_DNS      0x4     /* has DNS configured */
+#define NWI_IFSTATE_FLAGS_HAS_CLAT46   0x0040  /* has CLAT46 configured */
 
 typedef uint64_t nwi_ifstate_flags;
 /*
index d50a930838a7b2be3047525859d363d037e11aa4..805798c540ea9aa77e54a6f8b21313b7a5df2ff1 100644 (file)
@@ -52,7 +52,7 @@
 
 #ifdef SC_LOG_HANDLE
 #include <os/log.h>
-os_log_t       SC_LOG_HANDLE;
+os_log_t       SC_LOG_HANDLE(void);
 #endif //SC_LOG_HANDLE
 
 
index d2c52b17e23eb994377f246503d13e723cc568c0..560965a17f406666d88bf2ba207f4f12fcc2962e 100644 (file)
@@ -232,7 +232,7 @@ _nwi_ifstate_log(nwi_ifstate_t ifstate, boolean_t debug, my_log_context_type my_
                uint32_t        rank_index;
                const char      *rank_str;
                const uint8_t   *signature;
-               int             signature_length;
+               int             signature_length        = 0;
 
                // Rank
                rank = ifstate->rank;
@@ -249,7 +249,7 @@ _nwi_ifstate_log(nwi_ifstate_t ifstate, boolean_t debug, my_log_context_type my_
                if (signature != NULL) {
                        CFDataRef       digest;
 
-                       digest = CFDataCreate(NULL, signature, CC_SHA1_DIGEST_LENGTH);
+                       digest = CFDataCreate(NULL, signature, signature_length);
                        my_log(LOG_INFO, "           signature  : %@", digest);
                        CFRelease(digest);
                }
index 129732b7373347a2a42432124d2f8be7528615ea..85024d20420014c11ce0a28e87b74d256933507b 100644 (file)
@@ -176,7 +176,7 @@ nwi_state_make_copy(nwi_state_t src)
        dest = (nwi_state_t)malloc(size);
 
        if (dest != NULL) {
-               bcopy(src, dest, size);
+               memcpy(dest, src, size);
        }
        return dest;
 }
@@ -201,23 +201,23 @@ nwi_state_new(nwi_state_t old_state, int max_if_count)
        }
        size = nwi_state_compute_size(max_if_count);
        state = (nwi_state_t)malloc(size);
-       bzero(state, size);
+       memset(state, 0, size);
        state->max_if_count = max_if_count;
        state->version = NWI_STATE_VERSION;
 
        if (old_state != NULL) {
                state->ipv6_count = old_state->ipv6_count;
                if (state->ipv6_count > 0) {
-                       bcopy((void *)&old_state->ifstate_list[old_state->max_if_count],
-                             (void *)&state->ifstate_list[state->max_if_count],
-                             old_state->ipv6_count * sizeof(nwi_ifstate));
+                       memcpy((void *)&state->ifstate_list[state->max_if_count],
+                              (void *)&old_state->ifstate_list[old_state->max_if_count],
+                              old_state->ipv6_count * sizeof(nwi_ifstate));
                }
 
                state->ipv4_count = old_state->ipv4_count;
                if (state->ipv4_count > 0) {
-                       bcopy((void *)old_state->ifstate_list,
-                             (void *)state->ifstate_list,
-                             old_state->ipv4_count * sizeof(nwi_ifstate));
+                       memcpy((void *)state->ifstate_list,
+                              (void *)old_state->ifstate_list,
+                              old_state->ipv4_count * sizeof(nwi_ifstate));
                }
                /* we grew the arrays so re-compute the offsets */
                nwi_state_fix_af_aliases(state, old_state->max_if_count);
@@ -264,7 +264,7 @@ __private_extern__
 void
 nwi_ifstate_set_signature(nwi_ifstate_t ifstate, uint8_t * signature)
 {
-       bcopy(signature, ifstate->signature, sizeof(ifstate->signature));
+       memcpy(ifstate->signature, signature, sizeof(ifstate->signature));
        ifstate->flags |= NWI_IFSTATE_FLAGS_HAS_SIGNATURE;
        return;
 }
@@ -326,7 +326,7 @@ nwi_state_add_ifstate(nwi_state_t state,
 
                        prev->flags &= ~NWI_IFSTATE_FLAGS_LAST_ITEM;
                }
-               bzero(ifstate, sizeof(*ifstate));
+               memset(ifstate, 0, sizeof(*ifstate));
                strlcpy(ifstate->ifname, ifname, sizeof(ifstate->ifname));
                ifstate->af = af;
                /* this is the new last ifstate */
@@ -702,29 +702,30 @@ _nwi_state_update_interface_generations(nwi_state_t old_state, nwi_state_t state
 
 __private_extern__
 void
-_nwi_state_compute_sha1_hash(nwi_state_t state,
-                            unsigned char hash[CC_SHA1_DIGEST_LENGTH])
+_nwi_state_compute_sha256_hash(nwi_state_t state,
+                              unsigned char hash[CC_SHA256_DIGEST_LENGTH])
 {
+       CC_SHA256_CTX   ctx;
+       uint64_t        generation_save;
+
        if (state == NULL) {
-               bzero(hash, CC_SHA1_DIGEST_LENGTH);
+               memset(hash, 0, CC_SHA256_DIGEST_LENGTH);
+               return;
        }
-       else {
-               CC_SHA1_CTX     ctx;
-               uint64_t        generation_save;
 
-               generation_save = state->generation_count;
+       /* preserve generation */
+       generation_save = state->generation_count;
 
-               /* zero out the generation count before computing hash */
-               state->generation_count = 0;
+       /* zero out the generation count before computing hash */
+       state->generation_count = 0;
 
-               /* compute hash */
-               CC_SHA1_Init(&ctx);
-               CC_SHA1_Update(&ctx, state, (CC_LONG)nwi_state_size(state));
-               CC_SHA1_Final(hash, &ctx);
+       /* compute hash */
+       CC_SHA256_Init(&ctx);
+       CC_SHA256_Update(&ctx, state, (CC_LONG)nwi_state_size(state));
+       CC_SHA256_Final(hash, &ctx);
 
-               /* restore generation */
-               state->generation_count = generation_save;
-       }
+       /* restore generation */
+       state->generation_count = generation_save;
 
        return;
 }
index 23c9e7a2944c7a84cfbd192677428897cdd9945c..06d31c4e0c15f9d4cf6f1bb6bc1c2451a83e16a3 100644 (file)
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2011-2013, 2016-2018 Apple Inc. All rights reserved.
+ * Copyright (c) 2011-2013, 2016-2019 Apple Inc. All rights reserved.
  *
  * @APPLE_LICENSE_HEADER_START@
  *
@@ -40,7 +40,6 @@
 #define NWI_IFSTATE_FLAGS_NOT_IN_LIST  0x0008
 #define NWI_IFSTATE_FLAGS_HAS_SIGNATURE        0x0010
 #define NWI_IFSTATE_FLAGS_NOT_IN_IFLIST        0x0020
-#define NWI_IFSTATE_FLAGS_HAS_CLAT46   0x0040  /* has CLAT46 configured */
 
 /*
  * NWI_IFSTATE_FLAGS_MASK
@@ -86,6 +85,8 @@ typedef uint32_t        Rank;
 
 typedef int32_t                nwi_ifindex_t;
 
+#define NWI_SIGNATURE_LENGTH   20
+
 #pragma pack(4)
 typedef struct _nwi_ifstate {
        char                    ifname[IFNAMSIZ];
@@ -103,7 +104,7 @@ typedef struct _nwi_ifstate {
            struct sockaddr_in  vpn_server_address4;
            struct sockaddr_in6 vpn_server_address6;
        } vpn_server_address;
-       unsigned char           signature[CC_SHA1_DIGEST_LENGTH];
+       unsigned char           signature[NWI_SIGNATURE_LENGTH];
 } nwi_ifstate;
 #pragma pack()
 
@@ -279,8 +280,7 @@ _nwi_ifstate_set_vpn_server(nwi_ifstate_t ifstate, struct sockaddr *serv_addr)
        size_t len;
 
        if (serv_addr == NULL) {
-               bzero(&ifstate->vpn_server_address,
-                     sizeof(ifstate->vpn_server_address));
+               memset(&ifstate->vpn_server_address, 0, sizeof(ifstate->vpn_server_address));
                return;
        }
 
@@ -349,7 +349,7 @@ void
 _nwi_state_update_interface_generations(nwi_state_t old_state, nwi_state_t state, nwi_state_t changes);
 
 void
-_nwi_state_compute_sha1_hash(nwi_state_t state,
-                            unsigned char hash[CC_SHA1_DIGEST_LENGTH]);
+_nwi_state_compute_sha256_hash(nwi_state_t state,
+                              unsigned char hash[CC_SHA256_DIGEST_LENGTH]);
 
-#endif // _NETWORK_STATE_INFORMATION_PRIV_H_
+#endif // _NETWORK_STATE_INFORMATION_PRIV_H_
index a84e8084275b51b1a8d6d28f4e39996acb3c5446..8140cbdef6e2d58e35cb230a2c0f3424ca5fc1e6 100644 (file)
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2000-2009, 2011, 2012, 2014, 2015 Apple Inc. All rights reserved.
+ * Copyright (c) 2000-2009, 2011, 2012, 2014, 2015, 2018 Apple Inc. All rights reserved.
  *
  * @APPLE_LICENSE_HEADER_START@
  *
@@ -134,7 +134,7 @@ main(int argc, char **argv)
                        CFRelease(newSet);
 
                        CFStringDelete(str, CFRangeMake(0, CFStringGetLength(prefix)));
-                       newSet = CFStringCreateCopy(NULL, newSet);
+                       newSet = CFStringCreateCopy(NULL, str);
                        CFRelease(str);
 
                        range = CFStringFind(newSet, CFSTR("/"), 0);
index b04dc0592feb4f2d98390f5d3d94b5441d80d809..7ac2efe9eac239f5fe9c2f9ccf2b643760ccf842 100644 (file)
@@ -1,15 +1,15 @@
 /*
- * Copyright (c) 2000-2005, 2011, 2017 Apple Inc. All rights reserved.
+ * Copyright (c) 2000-2005, 2011, 2017, 2018 Apple Inc. All rights reserved.
  *
  * @APPLE_LICENSE_HEADER_START@
- * 
+ *
  * This file contains Original Code and/or Modifications of Original Code
  * as defined in and that are subject to the Apple Public Source License
  * Version 2.0 (the 'License'). You may not use this file except in
  * compliance with the License. Please obtain a copy of the License at
  * http://www.opensource.apple.com/apsl/ and read it before using this
  * file.
- * 
+ *
  * The Original Code and all software distributed under the License are
  * distributed on an 'AS IS' basis, WITHOUT WARRANTY OF ANY KIND, EITHER
  * EXPRESS OR IMPLIED, AND APPLE HEREBY DISCLAIMS ALL SUCH WARRANTIES,
@@ -17,7 +17,7 @@
  * FITNESS FOR A PARTICULAR PURPOSE, QUIET ENJOYMENT OR NON-INFRINGEMENT.
  * Please see the License for the specific language governing rights and
  * limitations under the License.
- * 
+ *
  * @APPLE_LICENSE_HEADER_END@
  */
 
 
 #include "scutil.h"
 #include "cache.h"
+#include "SCDynamicStoreInternal.h"
 
 
 #pragma mark -
 #pragma mark SCDynamicStore "cache"
 
 
-static Boolean                 use_cache       = FALSE;
-
-static CFMutableDictionaryRef  cached_keys     = NULL;
-static CFMutableDictionaryRef  cached_set      = NULL;
-static CFMutableArrayRef       cached_removals = NULL;
-static CFMutableArrayRef       cached_notifys  = NULL;
-
-
-static void
-cache_open(void)
-{
-       if (use_cache) {
-               // if we are already using the cache
-               cache_close();
-       }
-
-       cached_keys     = CFDictionaryCreateMutable(NULL,
-                                                   0,
-                                                   &kCFTypeDictionaryKeyCallBacks,
-                                                   &kCFTypeDictionaryValueCallBacks);
-       cached_set      = CFDictionaryCreateMutable(NULL,
-                                                   0,
-                                                   &kCFTypeDictionaryKeyCallBacks,
-                                                   &kCFTypeDictionaryValueCallBacks);
-       cached_removals = CFArrayCreateMutable(NULL,
-                                              0,
-                                              &kCFTypeArrayCallBacks);
-       cached_notifys  = CFArrayCreateMutable(NULL,
-                                              0,
-                                              &kCFTypeArrayCallBacks);
-
-       use_cache = TRUE;
-       return;
-}
-
-
-static CFPropertyListRef
-cache_SCDynamicStoreCopyValue(SCDynamicStoreRef store, CFStringRef key)
-{
-       CFPropertyListRef       value;
-
-       value = CFDictionaryGetValue(cached_set, key);
-       if (value) {
-               // if we have "set" a new value
-               return (CFRetain(value));
-       }
-
-       if (CFArrayContainsValue(cached_removals,
-                                CFRangeMake(0, CFArrayGetCount(cached_removals)),
-                                key)) {
-               // if we have "removed" the key
-               _SCErrorSet(kSCStatusNoKey);
-               return NULL;
-       }
-
-       value = CFDictionaryGetValue(cached_keys, key);
-       if (value) {
-               // if we have a cached value
-               return (CFRetain(value));
-       }
-
-       value = SCDynamicStoreCopyValue(store, key);
-       if (value) {
-               CFDictionarySetValue(cached_keys, key, value);
-       }
-
-       return value;
-}
-
-
-static void
-cache_SCDynamicStoreSetValue(SCDynamicStoreRef store, CFStringRef key, CFPropertyListRef value)
-{
-#pragma unused (store)
-       CFIndex i;
-
-       i = CFArrayGetFirstIndexOfValue(cached_removals,
-                                       CFRangeMake(0, CFArrayGetCount(cached_removals)),
-                                       key);
-       if (i != kCFNotFound) {
-               // if previously "removed"
-               CFArrayRemoveValueAtIndex(cached_removals, i);
-       }
-
-       CFDictionarySetValue(cached_set, key, value);
-
-       return;
-}
-
-static void
-cache_SCDynamicStoreRemoveValue(SCDynamicStoreRef store, CFStringRef key)
-{
-#pragma unused (store)
-       CFDictionaryRemoveValue(cached_set, key);
-
-       if (!CFArrayContainsValue(cached_removals,
-                                 CFRangeMake(0, CFArrayGetCount(cached_removals)),
-                                 key)) {
-               CFArrayAppendValue(cached_removals, key);
-       }
-
-       return;
-}
-
-
-static void
-cache_SCDynamicStoreNotifyValue(SCDynamicStoreRef store, CFStringRef key)
-{
-#pragma unused (store)
-       if (!CFArrayContainsValue(cached_notifys,
-                                 CFRangeMake(0, CFArrayGetCount(cached_notifys)),
-                                 key)) {
-               CFArrayAppendValue(cached_notifys, key);
-       }
-
-       return;
-}
-
-
-static void
-cache_write(SCDynamicStoreRef store)
-{
-       if ((CFDictionaryGetCount(cached_set) > 0) ||
-           (CFArrayGetCount(cached_removals) > 0) ||
-           (CFArrayGetCount(cached_notifys)  > 0)) {
-               if (!SCDynamicStoreSetMultiple(store,
-                                              cached_set,
-                                              cached_removals,
-                                              cached_notifys)) {
-                       SCPrint(TRUE, stdout, CFSTR("  %s\n"), SCErrorString(SCError()));
-               }
-       }
-
-       return;
-}
-
-
-__private_extern__
-void
-cache_close(void)
-{
-       if (!use_cache) {
-               return;
-       }
-
-       CFRelease(cached_keys);
-       CFRelease(cached_set);
-       CFRelease(cached_removals);
-       CFRelease(cached_notifys);
-
-       use_cache = FALSE;
-       return;
-}
-
-
 #pragma mark -
 #pragma mark SCDynamicStore operations
 
@@ -222,38 +68,43 @@ do_block(int argc, char **argv)
                        return;
                }
        } else {
-               enable = !use_cache;    // toggle
+               enable = !_SCDynamicStoreCacheIsActive(store);  // toggle
        }
 
        if (enable) {
                // begin block of SCDynamicStore operations
-               if (use_cache) {
+               if (_SCDynamicStoreCacheIsActive(store)) {
                        SCPrint(TRUE, stdout, CFSTR("  %s\n"), SCErrorString(kSCStatusLocked));
                        return;
                }
 
                SCPrint(TRUE, stdout, CFSTR("Begin block of SCDynamicStore operations\n"));
 
-               cache_open();
+               _SCDynamicStoreCacheOpen(store);
        } else {
-               CFIndex n;
+               CFIndex                         n               = 0;
+               SCDynamicStorePrivateRef        storePrivate    = (SCDynamicStorePrivateRef)store;
 
                // end block of SCDynamicStore operations
-               if (!use_cache) {
+               if (!_SCDynamicStoreCacheIsActive(store)) {
                        SCPrint(TRUE, stdout, CFSTR("  %s\n"), SCErrorString(kSCStatusNeedLock));
                        return;
                }
 
-               n = CFDictionaryGetCount(cached_keys) +
-                   CFArrayGetCount(cached_removals)  +
-                   CFArrayGetCount(cached_notifys);
+               n += (storePrivate->cached_set != NULL)
+                       ? CFDictionaryGetCount(storePrivate->cached_set) : 0;
+               n += (storePrivate->cached_removals != NULL)
+                       ? CFArrayGetCount(storePrivate->cached_removals) : 0;
+               n += (storePrivate->cached_notifys != NULL)
+                       ? CFArrayGetCount(storePrivate->cached_notifys) : 0;
+
                SCPrint(TRUE, stdout,
                        CFSTR("End block of SCDynamicStore operations%s\n"),
                        (n > 0) ? ", posting changes" : "");
                if (n > 0) {
-                       cache_write(store);
+                       _SCDynamicStoreCacheCommitChanges(store);
                }
-               cache_close();
+               _SCDynamicStoreCacheClose(store);
        }
 
        return;
@@ -277,11 +128,12 @@ __private_extern__
 void
 do_list(int argc, char **argv)
 {
-       int                     i;
-       CFStringRef             pattern;
-       CFArrayRef              list;
-       CFIndex                 listCnt;
-       CFMutableArrayRef       sortedList;
+       int                             i;
+       CFStringRef                     pattern;
+       CFArrayRef                      list;
+       CFIndex                         listCnt;
+       CFMutableArrayRef               sortedList;
+       SCDynamicStorePrivateRef        storePrivate    = (SCDynamicStorePrivateRef)store;
 
        pattern = CFStringCreateWithCString(NULL,
                                            (argc >= 1) ? argv[0] : ".*",
@@ -294,13 +146,14 @@ do_list(int argc, char **argv)
                        SCPrint(TRUE, stdout, CFSTR("  %s\n"), SCErrorString(SCError()));
                        return;
                } else {
-                   if (!use_cache) {
+                   if (!_SCDynamicStoreCacheIsActive(store)) {
                        SCPrint(TRUE, stdout, CFSTR("  no keys.\n"));
                        return;
                    } else {
                        CFIndex n;
 
-                       n = CFDictionaryGetCount(cached_set);
+                       n = (storePrivate->cached_set != NULL)
+                               ? CFDictionaryGetCount(storePrivate->cached_set) : 0;
                        if (n > 0) {
                                const void *    cachedKeys_q[N_QUICK];
                                const void **   cachedKeys      = cachedKeys_q;
@@ -308,7 +161,7 @@ do_list(int argc, char **argv)
                                if (n > (CFIndex)(sizeof(cachedKeys_q) / sizeof(CFStringRef))) {
                                        cachedKeys = CFAllocatorAllocate(NULL, n * sizeof(CFStringRef), 0);
                                }
-                               CFDictionaryGetKeysAndValues(cached_set, cachedKeys, NULL);
+                               CFDictionaryGetKeysAndValues(storePrivate->cached_set, cachedKeys, NULL);
                                list = CFArrayCreate(NULL, cachedKeys, n, &kCFTypeArrayCallBacks);
                                if (cachedKeys != cachedKeys_q) {
                                        CFAllocatorDeallocate(NULL, cachedKeys);
@@ -319,8 +172,11 @@ do_list(int argc, char **argv)
                        }
                    }
                }
-       } else if (use_cache &&
-                  ((CFDictionaryGetCount(cached_set) > 0) || (CFArrayGetCount(cached_removals) > 0))) {
+       } else if (_SCDynamicStoreCacheIsActive(store) &&
+                  (((storePrivate->cached_set != NULL) &&
+                    (CFDictionaryGetCount(storePrivate->cached_set) > 0)) ||
+                   ((storePrivate->cached_removals != NULL) &&
+                    (CFArrayGetCount(storePrivate->cached_removals) > 0)))) {
                SCPrint(TRUE, stdout,
                        CFSTR("  Note: SCDynamicStore transactions in progress, key list (below) may be out of date.\n\n"));
        }
@@ -359,41 +215,20 @@ do_add(int argc, char **argv)
        key    = CFStringCreateWithCString(NULL, argv[0], kCFStringEncodingUTF8);
 
        if (argc < 2) {
-               if (!use_cache) {
+               if (!_SCDynamicStoreCacheIsActive(store)) {
                        if (!SCDynamicStoreAddValue(store, key, value)) {
                                SCPrint(TRUE, stdout, CFSTR("  %s\n"), SCErrorString(SCError()));
                        }
                } else {
-                       CFTypeRef       val;
-
-                       val = cache_SCDynamicStoreCopyValue(store, key);
-                       if (val != NULL) {
-                               CFRelease(val);
-                               SCPrint(TRUE, stdout, CFSTR("  %s\n"), SCErrorString(kSCStatusKeyExists));
-                       } else {
-                               cache_SCDynamicStoreSetValue(store, key, value);
-                       }
+                       SCPrint(TRUE, stdout, CFSTR("  Cannot \"add\" with block\n"));
                }
        } else {
-               if (!use_cache) {
+               if (!_SCDynamicStoreCacheIsActive(store)) {
                        if (!SCDynamicStoreAddTemporaryValue(store, key, value)) {
                                SCPrint(TRUE, stdout, CFSTR("  %s\n"), SCErrorString(SCError()));
                        }
                } else {
-                       CFTypeRef       val;
-
-                       val = cache_SCDynamicStoreCopyValue(store, key);
-                       if (val != NULL) {
-                               CFRelease(val);
-                               SCPrint(TRUE, stdout, CFSTR("  %s\n"), SCErrorString(kSCStatusKeyExists));
-                       } else {
-                               if (!SCDynamicStoreAddTemporaryValue(store, key, value)) {
-                                       SCPrint(TRUE, stdout, CFSTR("  %s\n"), SCErrorString(SCError()));
-                               } else {
-                                       // and save the temp value in the cache too!
-                                       cache_SCDynamicStoreSetValue(store, key, value);
-                               }
-                       }
+                       SCPrint(TRUE, stdout, CFSTR("  Cannot \"add temporary\" with block\n"));
                }
        }
 
@@ -411,11 +246,7 @@ do_get(int argc, char **argv)
        CFPropertyListRef       newValue;
 
        key      = CFStringCreateWithCString(NULL, argv[0], kCFStringEncodingUTF8);
-       if (!use_cache) {
-               newValue = SCDynamicStoreCopyValue(store, key);
-       } else {
-               newValue = cache_SCDynamicStoreCopyValue(store, key);
-       }
+       newValue = SCDynamicStoreCopyValue(store, key);
        CFRelease(key);
        if (newValue == NULL) {
                SCPrint(TRUE, stdout, CFSTR("  %s\n"), SCErrorString(SCError()));
@@ -439,12 +270,8 @@ do_set(int argc, char **argv)
        CFStringRef     key;
 
        key = CFStringCreateWithCString(NULL, argv[0], kCFStringEncodingUTF8);
-       if (!use_cache) {
-               if (!SCDynamicStoreSetValue(store, key, value)) {
-                       SCPrint(TRUE, stdout, CFSTR("  %s\n"), SCErrorString(SCError()));
-               }
-       } else {
-               cache_SCDynamicStoreSetValue(store, key, value);
+       if (!SCDynamicStoreSetValue(store, key, value)) {
+               SCPrint(TRUE, stdout, CFSTR("  %s\n"), SCErrorString(SCError()));
        }
        CFRelease(key);
        return;
@@ -461,20 +288,17 @@ do_show(int argc, char **argv)
        key = CFStringCreateWithCString(NULL, argv[0], kCFStringEncodingUTF8);
 
        if (argc == 1) {
-               if (!use_cache) {
-                       newValue = SCDynamicStoreCopyValue(store, key);
-               } else {
-                       newValue = cache_SCDynamicStoreCopyValue(store, key);
-               }
+               newValue = SCDynamicStoreCopyValue(store, key);
        } else {
                CFArrayRef      patterns;
 
                patterns = CFArrayCreate(NULL, (const void **)&key, 1, &kCFTypeArrayCallBacks);
-               if (!use_cache) {
+               if (!_SCDynamicStoreCacheIsActive(store)) {
                        newValue = SCDynamicStoreCopyMultiple(store, NULL, patterns);
                } else {
-                       CFArrayRef              keys;
-                       CFMutableDictionaryRef  newDict;
+                       CFArrayRef                      keys;
+                       CFMutableDictionaryRef          newDict;
+                       SCDynamicStorePrivateRef        storePrivate    = (SCDynamicStorePrivateRef)store;
 
                        newDict = CFDictionaryCreateMutable(NULL,
                                                            0,
@@ -491,7 +315,7 @@ do_show(int argc, char **argv)
                                        CFTypeRef       storeVal;
 
                                        storeKey = CFArrayGetValueAtIndex(keys, i);
-                                       storeVal = cache_SCDynamicStoreCopyValue(store, storeKey);
+                                       storeVal = SCDynamicStoreCopyValue(store, storeKey);
                                        if (storeVal != NULL) {
                                                CFDictionarySetValue(newDict, storeKey, storeVal);
                                                CFRelease(storeVal);
@@ -500,7 +324,10 @@ do_show(int argc, char **argv)
                                CFRelease(keys);
                        }
 
-                       if ((CFDictionaryGetCount(cached_set) > 0) || (CFArrayGetCount(cached_removals) > 0)) {
+                       if (((storePrivate->cached_set != NULL) &&
+                            (CFDictionaryGetCount(storePrivate->cached_set) > 0)) ||
+                           ((storePrivate->cached_removals != NULL) &&
+                            (CFArrayGetCount(storePrivate->cached_removals) > 0))) {
                                SCPrint(TRUE, stdout, CFSTR("  Note: SCDynamicStore locked, keys included (below) may be out of date.\n\n"));
                        }
 
@@ -529,12 +356,8 @@ do_remove(int argc, char **argv)
        CFStringRef     key;
 
        key = CFStringCreateWithCString(NULL, argv[0], kCFStringEncodingUTF8);
-       if (!use_cache) {
-               if (!SCDynamicStoreRemoveValue(store, key)) {
-                       SCPrint(TRUE, stdout, CFSTR("  %s\n"), SCErrorString(SCError()));
-               }
-       } else {
-               cache_SCDynamicStoreRemoveValue(store, key);
+       if (!SCDynamicStoreRemoveValue(store, key)) {
+               SCPrint(TRUE, stdout, CFSTR("  %s\n"), SCErrorString(SCError()));
        }
        CFRelease(key);
        return;
@@ -549,12 +372,8 @@ do_notify(int argc, char **argv)
        CFStringRef     key;
 
        key = CFStringCreateWithCString(NULL, argv[0], kCFStringEncodingUTF8);
-       if (!use_cache) {
-               if (!SCDynamicStoreNotifyValue(store, key)) {
-                       SCPrint(TRUE, stdout, CFSTR("  %s\n"), SCErrorString(SCError()));
-               }
-       } else {
-               cache_SCDynamicStoreNotifyValue(store, key);
+       if (!SCDynamicStoreNotifyValue(store, key)) {
+               SCPrint(TRUE, stdout, CFSTR("  %s\n"), SCErrorString(SCError()));
        }
        CFRelease(key);
        return;
index 5e322848e3514c3cf278924c22211daf97518ada..3d7155639923ea166ac24a8f1b639da510fd1c32 100644 (file)
@@ -40,8 +40,6 @@
 
 __BEGIN_DECLS
 
-void   cache_close             (void);
-
 void   do_block                (int argc, char **argv);
 
 void   do_list                 (int argc, char **argv);
index 24afcddd883deb6493f9ca4f0377677699bdfdce..aeab336d475c4bbcf171c5001cc5e997298ab59c 100644 (file)
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2000-2011, 2013, 2014, 2017 Apple Inc. All rights reserved.
+ * Copyright (c) 2000-2011, 2013, 2014, 2017, 2018 Apple Inc. All rights reserved.
  *
  * @APPLE_LICENSE_HEADER_START@
  *
@@ -75,7 +75,7 @@ const cmdInfo commands_store[] = {
                " d.show                        : show dictionary contents"                     },
 
        { "d.add",      2,      101,    do_dictSetKey,          1,      0,
-               " d.add key [*#?] val [v2 ...]  : add information to dictionary\n"
+               " d.add key [*#?%] val [v2 ...]  : add information to dictionary\n"
                "       (*=array, #=number, ?=boolean, %=hex data)"                             },
 
        { "d.remove",   1,      1,      do_dictRemoveKey,       1,      0,
@@ -131,9 +131,6 @@ const cmdInfo commands_store[] = {
        { "n.wait",     0,      0,      do_notify_wait,         5,      2,
                " n.wait                        : wait for changes"                             },
 
-       { "n.signal",   1,      2,      do_notify_signal,       5,      2,
-               " n.signal sig [pid]            : signal changes"                               },
-
        { "n.file",     0,      1,      do_notify_file,         5,      2,
                " n.file [identifier]           : watch for changes via file"                   },
 
@@ -266,7 +263,7 @@ const cmdInfo commands_prefs[] = {
                " d.show                        : show dictionary contents"                     },
 
        { "d.add",      2,      101,    do_dictSetKey,          1,      0,
-               " d.add key [*#?] val [v2 ...]  : add information to dictionary\n"
+               " d.add key [*#?%] val [v2 ...]  : add information to dictionary\n"
                "       (*=array, #=number, ?=boolean, %=hex data)"                             },
 
        { "d.remove",   1,      1,      do_dictRemoveKey,       1,      0,
diff --git a/scutil.tproj/entitlements.plist b/scutil.tproj/entitlements.plist
new file mode 100644 (file)
index 0000000..8fc7442
--- /dev/null
@@ -0,0 +1,8 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
+<plist version="1.0">
+<dict>
+       <key>com.apple.private.networkextension.configuration</key>
+       <true/>
+</dict>
+</plist>
index 54607828419a5197957d91250dd91e332649cd28..b4b67663bda4845c9c28c2e869e2bb4cb3eab75f 100644 (file)
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2010-2015, 2017, 2018 Apple Inc. All rights reserved.
+ * Copyright (c) 2010-2015, 2017-2019 Apple Inc. All rights reserved.
  *
  * @APPLE_LICENSE_HEADER_START@
  *
@@ -44,6 +44,9 @@
 #include <SystemConfiguration/VPNConfiguration.h>
 
 #include <sys/time.h>
+#if !TARGET_OS_SIMULATOR
+#include <NEHelperClient.h>
+#endif // !TARGET_OS_SIMULATOR
 
 CFStringRef                    username        = NULL;
 CFStringRef                    password        = NULL;
@@ -1097,7 +1100,12 @@ nc_select(int argc, char **argv)
        SCNetworkSetRef         current_set;
        int                     exit_code       = 1;
        SCNetworkServiceRef     service         = NULL;
+#if NE_HAS_ENABLE_VPN
+       uuid_string_t           config_id_string;
+       uuid_t                  config_id;
+#else  // NE_HAS_ENABLE_VPN
        Boolean                 status;
+#endif // NE_HAS_ENABLE_VPN
 
        do_prefs_init();        /* initialization */
        do_prefs_open(0, NULL); /* open default prefs */
@@ -1114,6 +1122,18 @@ nc_select(int argc, char **argv)
                goto done;
        }
 
+#if NE_HAS_ENABLE_VPN
+       memset(config_id_string, 0, sizeof(config_id_string));
+       if (_SC_cfstring_to_cstring(SCNetworkServiceGetServiceID(service), config_id_string, sizeof(config_id_string), kCFStringEncodingUTF8) != NULL &&
+               uuid_parse(config_id_string, config_id) == 0)
+       {
+               if (!NEHelperVPNSetEnabled(config_id, true)) {
+                       SCPrint(TRUE, stderr, CFSTR("Unable to enable service\n"));
+               }
+       } else {
+               SCPrint(TRUE, stderr, CFSTR("Invalid service ID: %@\n"), SCNetworkServiceGetServiceID(service));
+       }
+#else  // NE_HAS_ENABLE_VPN
 #if !TARGET_OS_IPHONE
        status = SCNetworkServiceSetEnabled(service, TRUE);
        if (!status) {
@@ -1129,6 +1149,7 @@ nc_select(int argc, char **argv)
 #endif // !TARGET_OS_IPHONE
 
        _prefs_save();
+#endif // NE_HAS_ENABLE_VPN
        exit_code = 0;
 done:
        my_CFRelease(&service);
index c570db5d021cbde88750269fa9541216b9cdea31..37f6fc53e3a499d081a3486373ab9361dbf27c28 100644 (file)
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2004-2011, 2013-2017 Apple Inc. All rights reserved.
+ * Copyright (c) 2004-2011, 2013-2017, 2019 Apple Inc. All rights reserved.
  *
  * @APPLE_LICENSE_HEADER_START@
  *
@@ -2206,14 +2206,20 @@ static options pppOptions[] = {
        { "IdleReminder"              , NULL          , isBoolean        , &kSCPropNetPPPIdleReminder              , NULL                , NULL                           },
        { "IdleReminderTimer"         , "time"        , isNumber         , &kSCPropNetPPPIdleReminderTimer         , NULL                , NULL                           },
        { "Logfile"                   , "path"        , isString         , &kSCPropNetPPPLogfile                   , NULL                , NULL                           },
+#pragma GCC diagnostic push
+#pragma GCC diagnostic ignored "-Wdeprecated"
        { "Plugins"                   , "plugin"      , isStringArray    , &kSCPropNetPPPPlugins                   , NULL                , NULL                           },
+#pragma GCC diagnostic pop
        { "RetryConnectTime"          , "time"        , isNumber         , &kSCPropNetPPPRetryConnectTime          , NULL                , NULL                           },
        { "SessionTimer"              , "time"        , isNumber         , &kSCPropNetPPPSessionTimer              , NULL                , NULL                           },
        { "UseSessionTimer"           , NULL          , isBoolean        , &kSCPropNetPPPUseSessionTimer           , NULL                , NULL                           },
        { "VerboseLogging"            , NULL          , isBoolean        , &kSCPropNetPPPVerboseLogging            , NULL                , NULL                           },
 
        // --- Auth: ---
+#pragma GCC diagnostic push
+#pragma GCC diagnostic ignored "-Wdeprecated"
        { "AuthEAPPlugins"            , "plugin"      , isStringArray    , &kSCPropNetPPPAuthEAPPlugins            , NULL                , NULL                           },
+#pragma GCC diagnostic pop
        { "AuthName"                  , "account"     , isString         , &kSCPropNetPPPAuthName                  , NULL                , NULL                           },
        {   "Account"                 , "account"     , isString         , &kSCPropNetPPPAuthName                  , NULL                , NULL                           },
        { "AuthPassword"              , "password"    , isOther          , &kSCPropNetPPPAuthPassword              , __doPPPAuthPW       , NULL                           },
index 81f4ac7f119cfddcc379a87bee7923dd2f2eca35..f76b6e01dd25fc74abe58edd458c032f57fec825 100644 (file)
@@ -1,15 +1,15 @@
 /*
- * Copyright (c) 2004-2009, 2011, 2014, 2017 Apple Inc. All rights reserved.
+ * Copyright (c) 2004-2009, 2011, 2014, 2017, 2019 Apple Inc. All rights reserved.
  *
  * @APPLE_LICENSE_HEADER_START@
- * 
+ *
  * This file contains Original Code and/or Modifications of Original Code
  * as defined in and that are subject to the Apple Public Source License
  * Version 2.0 (the 'License'). You may not use this file except in
  * compliance with the License. Please obtain a copy of the License at
  * http://www.opensource.apple.com/apsl/ and read it before using this
  * file.
- * 
+ *
  * The Original Code and all software distributed under the License are
  * distributed on an 'AS IS' basis, WITHOUT WARRANTY OF ANY KIND, EITHER
  * EXPRESS OR IMPLIED, AND APPLE HEREBY DISCLAIMS ALL SUCH WARRANTIES,
@@ -17,7 +17,7 @@
  * FITNESS FOR A PARTICULAR PURPOSE, QUIET ENJOYMENT OR NON-INFRINGEMENT.
  * Please see the License for the specific language governing rights and
  * limitations under the License.
- * 
+ *
  * @APPLE_LICENSE_HEADER_END@
  */
 
@@ -856,6 +856,7 @@ static options ipv6Options[] = {
                                         , isChooseOne, &kSCPropNetIPv6ConfigMethod, __doIPv6ConfigMethod, (void *)ipv6ConfigMethods },
        { "Addresses"   , "address"      , isOther    , &kSCPropNetIPv6Addresses   , __doIPv6Addresses   , (void *)TRUE              },
        {   "address"   , "address"      , isOther    , &kSCPropNetIPv6Addresses   , __doIPv6Addresses   , (void *)TRUE              },
+       { "EnableCGA"   , NULL           , isBoolean  , &kSCPropNetIPv6EnableCGA   , NULL                , NULL                      },
        { "PrefixLength", "prefix length", isNumber   , &kSCPropNetIPv6PrefixLength, NULL                , NULL                      },
        { "Router"      , "address"      , isOther    , &kSCPropNetIPv6Router      , __doIPv6Addresses   , (void *)FALSE             },
 
@@ -1724,6 +1725,7 @@ _protocol_description(SCNetworkProtocolRef protocol, Boolean skipEmpty)
                                                     CFArrayGetValueAtIndex(addresses, 0));
                        } else if (CFEqual(method, kSCValNetIPv4ConfigMethodManual) &&
                                   isA_CFArray(addresses)) {
+                               CFArrayRef      masks;
                                CFStringRef     router;
 
                                CFStringAppendFormat(description,
@@ -1732,6 +1734,16 @@ _protocol_description(SCNetworkProtocolRef protocol, Boolean skipEmpty)
                                                     method,
                                                     CFArrayGetValueAtIndex(addresses, 0));
 
+                               if (CFDictionaryGetValueIfPresent(configuration,
+                                                                 kSCPropNetIPv4SubnetMasks,
+                                                                 (const void **)&masks) &&
+                                   isA_CFArray(masks)) {
+                                       CFStringAppendFormat(description,
+                                                            NULL,
+                                                            CFSTR(", mask=%@"),
+                                                            CFArrayGetValueAtIndex(masks, 0));
+                               }
+
                                if (CFDictionaryGetValueIfPresent(configuration,
                                                                  kSCPropNetIPv4Router,
                                                                  (const void **)&router) &&
index fd0e53995fb33e643f0f80265f57951b848a15f0..85283401a0f465ec0969f8d142f78a35d6dbc221 100644 (file)
 #include "notifications.h"
 
 
-static int                     osig;
-static struct sigaction                *oact   = NULL;
-
-
 static char *
 elapsed()
 {
@@ -380,7 +376,7 @@ do_notify_file(int argc, char **argv)
                return;
        }
 
-       bzero(buf.data, sizeof(buf.data));
+       memset(buf.data, 0, sizeof(buf.data));
        bufPtr = &buf.data[0];
        needed = sizeof(buf.gotID);
        while (needed > 0) {
@@ -420,82 +416,6 @@ do_notify_file(int argc, char **argv)
 }
 
 
-static void
-signalCatcher(int signum)
-{
-       static int      n = 0;
-
-       SCPrint(TRUE, stdout, CFSTR("Received sig%s (#%d).\n"), sys_signame[signum], n++);
-       return;
-}
-
-
-__private_extern__
-void
-do_notify_signal(int argc, char **argv)
-{
-       int                     sig;
-       pid_t                   pid;
-       struct sigaction        nact;
-
-       if (isdigit(*argv[0])) {
-               if ((sscanf(argv[0], "%d", &sig) != 1) || (sig <= 0) || (sig >= NSIG)) {
-                       SCPrint(TRUE, stdout, CFSTR("signal must be in the range of 1 .. %d.\n"), NSIG-1);
-                       return;
-               }
-       } else {
-               for (sig = 1; sig < NSIG; sig++) {
-                       if (strcasecmp(argv[0], sys_signame[sig]) == 0)
-                               break;
-               }
-               if (sig >= NSIG) {
-                       CFMutableStringRef      str;
-
-                       SCPrint(TRUE, stdout, CFSTR("Signal must be one of the following:\n"));
-
-                       str = CFStringCreateMutable(NULL, 0);
-                       for (sig = 1; sig < NSIG; sig++) {
-                               CFStringAppendFormat(str, NULL, CFSTR(" %-6s"), sys_signame[sig]);
-                               if ((sig % 10) == 0) {
-                                       CFStringAppendFormat(str, NULL, CFSTR("\n"));
-                               }
-                       }
-                       if ((sig % 10) != 0) {
-                               CFStringAppendFormat(str, NULL, CFSTR("\n"));
-                       }
-                       SCPrint(TRUE, stdout, CFSTR("%@"), str);
-                       CFRelease(str);
-                       return;
-               }
-
-       }
-
-       if ((argc != 2) || (sscanf(argv[1], "%d", &pid) != 1)) {
-               pid = getpid();
-       }
-
-       if (oact != NULL) {
-               (void) sigaction(osig, oact, NULL);     /* restore original signal handler */
-       } else {
-               oact = malloc(sizeof(struct sigaction));
-       }
-
-       nact.sa_handler = signalCatcher;
-       sigemptyset(&nact.sa_mask);
-       nact.sa_flags = SA_RESTART;
-       (void) sigaction(sig, &nact, oact);
-       osig = sig;
-       SCPrint(TRUE, stdout, CFSTR("signal handler started.\n"));
-
-       if (!SCDynamicStoreNotifySignal(store, pid, sig)) {
-               SCPrint(TRUE, stdout, CFSTR("  %s\n"), SCErrorString(SCError()));
-               return;
-       }
-
-       return;
-}
-
-
 __private_extern__
 void
 do_notify_cancel(int argc, char **argv)
@@ -524,11 +444,5 @@ do_notify_cancel(int argc, char **argv)
                CFRunLoopStop(notifyRl);
        }
 
-       if (oact != NULL) {
-               (void) sigaction(osig, oact, NULL);     /* restore original signal handler */
-               free(oact);
-               oact = NULL;
-       }
-
        return;
 }
index 27a9f39dee8248df0eadb43825eedad0a88fda2e..33003ef342311e6455748fa4c8a49603e0ffaf6d 100644 (file)
@@ -1,15 +1,15 @@
 /*
- * Copyright (c) 2000, 2001, 2004, 2011 Apple Inc. All rights reserved.
+ * Copyright (c) 2000, 2001, 2004, 2011, 2018 Apple Inc. All rights reserved.
  *
  * @APPLE_LICENSE_HEADER_START@
- * 
+ *
  * This file contains Original Code and/or Modifications of Original Code
  * as defined in and that are subject to the Apple Public Source License
  * Version 2.0 (the 'License'). You may not use this file except in
  * compliance with the License. Please obtain a copy of the License at
  * http://www.opensource.apple.com/apsl/ and read it before using this
  * file.
- * 
+ *
  * The Original Code and all software distributed under the License are
  * distributed on an 'AS IS' basis, WITHOUT WARRANTY OF ANY KIND, EITHER
  * EXPRESS OR IMPLIED, AND APPLE HEREBY DISCLAIMS ALL SUCH WARRANTIES,
@@ -17,7 +17,7 @@
  * FITNESS FOR A PARTICULAR PURPOSE, QUIET ENJOYMENT OR NON-INFRINGEMENT.
  * Please see the License for the specific language governing rights and
  * limitations under the License.
- * 
+ *
  * @APPLE_LICENSE_HEADER_END@
  */
 
@@ -48,10 +48,9 @@ void do_notify_remove        (int argc, char **argv);
 void   do_notify_changes       (int argc, char **argv);
 void   do_notify_watch         (int argc, char **argv);
 void   do_notify_wait          (int argc, char **argv);
-void   do_notify_signal        (int argc, char **argv);
 void   do_notify_file          (int argc, char **argv);
 void   do_notify_cancel        (int argc, char **argv);
 
 __END_DECLS
 
-#endif /* !_NOTIFICATIONS_H */
+#endif /* !_NOTIFICATIONS_H */
index 4be484df003b7db9985928dd474c94a157482dd7..b72f28022dbc0d0948cd6878ffdbdc28d4e24c5e 100644 (file)
@@ -37,7 +37,7 @@
 #include <sys/cdefs.h>
 #include <histedit.h>
 
-#define SC_LOG_HANDLE  _SC_LOG_DEFAULT()
+#define SC_LOG_HANDLE  _SC_LOG_DEFAULT
 #include <SystemConfiguration/SystemConfiguration.h>
 #include <SystemConfiguration/SCPrivate.h>
 #include <SystemConfiguration/SCValidation.h>
index 3655aae1f68ee0a0cac12f4c551e3ccf438661f4..9e5b803638042b2f8681c2405f9c1865051d5490 100644 (file)
@@ -1,15 +1,15 @@
 /*
- * Copyright (c) 2000-2004, 2010, 2011, 2017 Apple Inc. All rights reserved.
+ * Copyright (c) 2000-2004, 2010, 2011, 2017, 2018 Apple Inc. All rights reserved.
  *
  * @APPLE_LICENSE_HEADER_START@
- * 
+ *
  * This file contains Original Code and/or Modifications of Original Code
  * as defined in and that are subject to the Apple Public Source License
  * Version 2.0 (the 'License'). You may not use this file except in
  * compliance with the License. Please obtain a copy of the License at
  * http://www.opensource.apple.com/apsl/ and read it before using this
  * file.
- * 
+ *
  * The Original Code and all software distributed under the License are
  * distributed on an 'AS IS' basis, WITHOUT WARRANTY OF ANY KIND, EITHER
  * EXPRESS OR IMPLIED, AND APPLE HEREBY DISCLAIMS ALL SUCH WARRANTIES,
@@ -17,7 +17,7 @@
  * FITNESS FOR A PARTICULAR PURPOSE, QUIET ENJOYMENT OR NON-INFRINGEMENT.
  * Please see the License for the specific language governing rights and
  * limitations under the License.
- * 
+ *
  * @APPLE_LICENSE_HEADER_END@
  */
 
@@ -85,7 +85,7 @@ do_open(int argc, char **argv)
        watchedKeys     = CFArrayCreateMutable(NULL, 0, &kCFTypeArrayCallBacks);
        watchedPatterns = CFArrayCreateMutable(NULL, 0, &kCFTypeArrayCallBacks);
 
-       cache_close();
+       _SCDynamicStoreCacheClose(store);
 
        return;
 }
@@ -121,7 +121,7 @@ do_close(int argc, char **argv)
                watchedPatterns = NULL;
        }
 
-       cache_close();
+       _SCDynamicStoreCacheClose(store);
 
        return;
 }
index 876d766d5e8f5c12de99a25db8c8f01057aa08c1..38b657968cdc321eba2f8b1371b6db98aed08d60 100644 (file)
@@ -169,11 +169,11 @@ _setupReachability(int argc, char **argv, SCNetworkReachabilityContext *context)
        struct sockaddr_in6             sin6;
        SCNetworkReachabilityRef        target          = NULL;
 
-       bzero(&sin, sizeof(sin));
+       memset(&sin, 0, sizeof(sin));
        sin.sin_len    = sizeof(sin);
        sin.sin_family = AF_INET;
 
-       bzero(&sin6, sizeof(sin6));
+       memset(&sin6, 0, sizeof(sin6));
        sin6.sin6_len    = sizeof(sin6);
        sin6.sin6_family = AF_INET6;
 
@@ -201,7 +201,7 @@ _setupReachability(int argc, char **argv, SCNetworkReachabilityContext *context)
                struct sockaddr_in      r_sin;
 
                if (argc > 1) {
-                       bzero(&r_sin, sizeof(r_sin));
+                       memset(&r_sin, 0, sizeof(r_sin));
                        r_sin.sin_len    = sizeof(r_sin);
                        r_sin.sin_family = AF_INET;
                }
@@ -290,7 +290,7 @@ _setupReachability(int argc, char **argv, SCNetworkReachabilityContext *context)
                }
 
                if (argc > 1) {
-                       bzero(&r_sin6, sizeof(r_sin6));
+                       memset(&r_sin6, 0, sizeof(r_sin6));
                        r_sin6.sin6_len    = sizeof(r_sin6);
                        r_sin6.sin6_family = AF_INET6;
                }
@@ -1110,7 +1110,7 @@ do_wait(char *waitKey, int timeout)
 
        if (timeout > 0) {
                signal(SIGALRM, waitTimeout);
-               bzero(&itv, sizeof(itv));
+               memset(&itv, 0, sizeof(itv));
                itv.it_value.tv_sec = timeout;
                if (setitimer(ITIMER_REAL, &itv, NULL) == -1) {
                        SCPrint(TRUE, stderr,