/*
- * Copyright (c) 2005-2011 Apple Inc. All rights reserved.
+ * Copyright (c) 2005-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,
* 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@
*/
*/
#pragma mark -
-#pragma mark SCNetworkInterface configuration (typedefs, consts)
+#pragma mark SCNetworkInterface configuration (typedefs, consts, enums)
/*!
@const kSCNetworkInterfaceTypeBridge
*/
extern const CFStringRef kSCNetworkInterfaceTypeBridge __OSX_AVAILABLE_STARTING(__MAC_10_7,__IPHONE_4_0/*SPI*/);
+
/*!
@const kSCNetworkInterfaceTypeLoopback
*/
*/
typedef SCNetworkInterfaceRef SCBridgeInterfaceRef;
+typedef CF_ENUM(uint32_t, SCNetworkServicePrimaryRank) {
+ kSCNetworkServicePrimaryRankDefault = 0,
+ kSCNetworkServicePrimaryRankFirst = 1,
+ kSCNetworkServicePrimaryRankLast = 2,
+ kSCNetworkServicePrimaryRankNever = 3,
+ kSCNetworkServicePrimaryRankScoped = 4
+};
+
#pragma mark -
#pragma mark SCNetworkInterface configuration (SPI)
const void *val2,
void *context) __OSX_AVAILABLE_STARTING(__MAC_10_5,__IPHONE_2_0);
+/*!
+ @function _SCNetworkInterfaceCopyActive
+ @discussion Creates an SCNetworkInterface and associated with interface name
+ and SCDynamicStoreRef
+ @param the interface name
+ @param the SCDynamicStoreRef
+ @result the SCNetworkInterface
+ */
+SCNetworkInterfaceRef
+_SCNetworkInterfaceCopyActive (SCDynamicStoreRef store,
+ CFStringRef bsdName) __OSX_AVAILABLE_STARTING(__MAC_10_8,__IPHONE_5_0);
+
/*!
@function _SCNetworkInterfaceCopyAllWithPreferences
Returns all network capable interfaces on the system.
CFArrayRef /* of SCNetworkInterfaceRef's */
_SCNetworkInterfaceCopyAllWithPreferences (SCPreferencesRef prefs) __OSX_AVAILABLE_STARTING(__MAC_10_7,__IPHONE_5_0/*SPI*/);
+/*!
+ @function _SCNetworkInterfaceCopyBTPANInterface
+ @discussion Returns the SCNetworkInterface associated with the BT-PAN interface
+ @result The BT-PAN interface; NULL if the interface is not (yet) known.
+ */
+SCNetworkInterfaceRef
+_SCNetworkInterfaceCopyBTPANInterface (void) __OSX_AVAILABLE_STARTING(__MAC_10_9,__IPHONE_NA);
+
/*!
@function _SCNetworkInterfaceCopySlashDevPath
@discussion Returns the /dev pathname for the interface.
SCNetworkInterfaceRef
_SCNetworkInterfaceCreateWithIONetworkInterfaceObject (io_object_t if_obj) __OSX_AVAILABLE_STARTING(__MAC_10_5,__IPHONE_2_0);
+/*!
+ @function SCNetworkInterfaceGetPrimaryRank
+ @discussion We allow caller to retrieve the rank on an interface.
+ @param the interface to get the rank
+ @result SCNetworkServicePrimaryRank
+ */
+SCNetworkServicePrimaryRank
+SCNetworkInterfaceGetPrimaryRank (SCNetworkInterfaceRef interface) __OSX_AVAILABLE_STARTING(__MAC_10_8,__IPHONE_5_0);
+
+/*!
+ @function SCNetworkInterfaceSetPrimaryRank
+ @discussion We allow caller to set an assertion on an interface.
+ The rank assertion lives as long as the SCNetworkInterfaceRef
+ remains valid.
+ @param the interface to set the rank assertion
+ @param the new rank to be set
+ @result TRUE if operation is successful; FALSE if an error was encountered.
+ */
+Boolean
+SCNetworkInterfaceSetPrimaryRank (SCNetworkInterfaceRef interface,
+ SCNetworkServicePrimaryRank newRank) __OSX_AVAILABLE_STARTING(__MAC_10_8,__IPHONE_5_0);
+
#define kSCNetworkInterfaceConfigurationActionKey CFSTR("New Interface Detected Action")
#define kSCNetworkInterfaceConfigurationActionValueNone CFSTR("None")
#define kSCNetworkInterfaceConfigurationActionValuePrompt CFSTR("Prompt")
#define kSCNetworkInterfaceNetworkConfigurationOverridesKey CFSTR("NetworkConfigurationOverrides")
#define kSCNetworkInterfaceHiddenConfigurationKey CFSTR("HiddenConfiguration")
-#define kSCNetworkInterfaceHiddenPortKey CFSTR("HiddenPort")
+#define kSCNetworkInterfaceHiddenPortKey CFSTR("HiddenPort") /* for serial ports */
+#define kSCNetworkInterfaceHiddenInterfaceKey CFSTR("HiddenInterface") /* for network interfaces */
// IORegistry property to indicate that a [WWAN] interface is not yet ready
#define kSCNetworkInterfaceInitializingKey CFSTR("Initializing")
CFDataRef
_SCNetworkInterfaceGetHardwareAddress (SCNetworkInterfaceRef interface) __OSX_AVAILABLE_STARTING(__MAC_10_5,__IPHONE_2_0);
+/*!
+ @function _SCNetworkInterfaceGetIOInterfaceNamePrefix
+ @discussion Returns the IOInterfaceNamePrefix for the interface.
+ @param interface The network interface.
+ @result The IOInterfaceNamePrefix associated with the interface;
+ NULL if no IOInterfaceNamePrefix is available.
+ */
+CFStringRef
+_SCNetworkInterfaceGetIOInterfaceNamePrefix (SCNetworkInterfaceRef interface) __OSX_AVAILABLE_STARTING(__MAC_10_8,__IPHONE_6_0);
+
/*!
@function _SCNetworkInterfaceGetIOInterfaceType
@discussion Returns the IOInterfaceType for the interface.
@discussion Returns the IOInterfaceUnit for the interface.
@param interface The network interface.
@result The IOInterfaceUnit associated with the interface;
- NULL if no IOLocation is available.
+ NULL if no IOInterfaceUnit is available.
*/
CFNumberRef
_SCNetworkInterfaceGetIOInterfaceUnit (SCNetworkInterfaceRef interface) __OSX_AVAILABLE_STARTING(__MAC_10_5,__IPHONE_2_0);
CFStringRef
_SCNetworkInterfaceGetIOPath (SCNetworkInterfaceRef interface) __OSX_AVAILABLE_STARTING(__MAC_10_5,__IPHONE_2_0);
+/*!
+ @function _SCNetworkInterfaceGetIORegistryEntryID
+ @discussion Returns the IORegistry entry ID for the interface.
+ @param interface The network interface.
+ @result The IORegistry entry ID associated with the interface;
+ Zero if no entry ID is available.
+ */
+uint64_t
+_SCNetworkInterfaceGetIORegistryEntryID (SCNetworkInterfaceRef interface) __OSX_AVAILABLE_STARTING(__MAC_10_8,__IPHONE_5_0);
+
/*!
@function _SCNetworkInterfaceIsBluetoothPAN
@discussion Identifies if a network interface is a Bluetooth PAN (GN) device.
Boolean
_SCNetworkInterfaceIsTethered (SCNetworkInterfaceRef interface) __OSX_AVAILABLE_STARTING(__MAC_10_6,__IPHONE_3_0);
+/*!
+ @function _SCNetworkInterfaceIsThunderbolt
+ @discussion Identifies if a network interface is a Thunderbolt device
+ @param interface The network interface.
+ @result TRUE if the interface is a Thunderbolt device.
+ */
+Boolean
+_SCNetworkInterfaceIsThunderbolt (SCNetworkInterfaceRef interface) __OSX_AVAILABLE_STARTING(__MAC_10_9,__IPHONE_7_0);
+
/*!
@function _SCNetworkInterfaceIsPhysicalEthernet
@discussion Indicates whether a network interface is a real ethernet interface i.e. one with an ethernet PHY.
CFDictionaryRef options) __OSX_AVAILABLE_STARTING(__MAC_10_5,__IPHONE_2_0);
+Boolean
+SCNetworkInterfaceGetDisableUntilNeeded (SCNetworkInterfaceRef interface) __OSX_AVAILABLE_STARTING(__MAC_10_11,__IPHONE_9_0);
+
+Boolean
+SCNetworkInterfaceSetDisableUntilNeeded (SCNetworkInterfaceRef interface,
+ Boolean disable) __OSX_AVAILABLE_STARTING(__MAC_10_11,__IPHONE_9_0);
+
+
#pragma mark -
#pragma mark SCNetworkProtocol configuration (SPI)
return (isA_CFType(obj, SCNetworkServiceGetTypeID()));
}
-enum {
- kSCNetworkServicePrimaryRankDefault = 0,
- kSCNetworkServicePrimaryRankFirst = 1,
- kSCNetworkServicePrimaryRankLast = 2,
- kSCNetworkServicePrimaryRankNever = 3
-};
-typedef uint32_t SCNetworkServicePrimaryRank;
-
/*!
@function _SCNetworkServiceCompare
@discussion Compares two SCNetworkService objects.
Boolean
_SCNetworkServiceIsVPN (SCNetworkServiceRef service) __OSX_AVAILABLE_STARTING(__MAC_10_7,__IPHONE_4_0);
+/*!
+ @function SCNetworkServiceSetExternalID
+ @discussion Set the external identifier for a network service.
+ @param service A reference to the network service.
+ @param identifierDomain A service can have multiple external identifiers. This string specifies which external identifier to set.
+ @param identifier The new external identifier to assign to the network service.
+ @result Returns TRUE if the external identifier was set successfully, FALSE if an error occurred.
+ */
+Boolean
+SCNetworkServiceSetExternalID (SCNetworkServiceRef service,
+ CFStringRef identifierDomain,
+ CFStringRef identifier);
+
+/*!
+ @function SCNetworkServiceCopyExternalID
+ @discussion Copy the external identifier for a network service.
+ @param service The network service.
+ @param identifierDomain A service can have multiple external identifiers. This string specifies which external identifier to copy.
+ @result Returns the service's external identifier, or NULL if the service does not have an external identifier in the given domain.
+*/
+CFStringRef
+SCNetworkServiceCopyExternalID (SCNetworkServiceRef service,
+ CFStringRef identifierDomain);
+
+/*!
+ @function _SCNetworkServiceSetServiceID
+ @discussion Sets serviceID of the service to a different value provided.
+ @param service The network service
+ @param newServiceID The new service ID
+ @result TRUE if new service ID is set successfully.
+ */
+Boolean
+_SCNetworkServiceSetServiceID (SCNetworkServiceRef service,
+ CFStringRef newServiceID) __OSX_AVAILABLE_STARTING(__MAC_10_10,__IPHONE_8_0);
+
#pragma mark -
#pragma mark SCNetworkSet configuration (SPI)
}
+/*!
+ @function SCNetworkSetCopyAvailableInterfaces
+ @discussion Returns all available interfaces for the set.
+ The interfaces excludes those of bond and bridge members.
+ @param set The network set.
+ @result The list of SCNetworkInterfaces.
+ You must release the returned value.
+ */
+CFArrayRef
+SCNetworkSetCopyAvailableInterfaces (SCNetworkSetRef set) __OSX_AVAILABLE_STARTING(__MAC_10_9,__IPHONE_7_0/*SPI*/);
+
/*!
@function SCNetworkSetEstablishDefaultConfiguration
@discussion Updates a network set by adding services for
SCNetworkSetSetSelectedVPNService (SCNetworkSetRef set,
SCNetworkServiceRef service) __OSX_AVAILABLE_STARTING(__MAC_10_7,__IPHONE_4_0);
-__END_DECLS
+Boolean
+_SCNetworkSetSetSetID (SCNetworkSetRef set,
+ CFStringRef setID) __OSX_AVAILABLE_STARTING(__MAC_10_10, __IPHONE_8_0);
+
+/*!
+ @group VPN Service configuration
+ */
+#pragma mark -
+#pragma mark VPN Service configuration
+
+typedef SCNetworkServiceRef VPNServiceRef;
+
+/*!
+ @function VPNServiceCopyAllMatchingExternalID
+ @discussion Copy the VPN services with the given external identifier.
+ @param prefs A reference to the prefs where the VPN services are stored.
+ @param identifierDomain A service can have multiple external identifiers. This string specifies which one to match with the given identifier.
+ @param identifier The external identifier of the desired services.
+ @result A array of references to the VPN services with the given identifier, or NULL if no such service exists
+ */
+CFArrayRef
+VPNServiceCopyAllMatchingExternalID (SCPreferencesRef prefs,
+ CFStringRef identifierDomain,
+ CFStringRef identifier) __OSX_AVAILABLE_STARTING(__MAC_10_9,__IPHONE_7_0/*SPI*/);
+
+/*!
+ @function VPNServiceCopyAll
+ @discussion Copy all VPN services.
+ @param prefs A reference to the prefs where the VPN services are stored.
+ @result An array containing VPNServiceRefs for all the VPN services.
+ */
+CFArrayRef
+VPNServiceCopyAll (SCPreferencesRef prefs) __OSX_AVAILABLE_STARTING(__MAC_10_9,__IPHONE_7_0/*SPI*/);
+
+/*!
+ @function VPNServiceCopyAppRuleIDs
+ @discussion Copy all the app rule identifiers for a VPN service.
+ @param service A reference to the VPN service.
+ @result An array of CFStringRefs, each string containing the identifier of a app rule in the given service.
+ */
+CFArrayRef
+VPNServiceCopyAppRuleIDs (VPNServiceRef service) __OSX_AVAILABLE_STARTING(__MAC_10_9,__IPHONE_7_0/*SPI*/);
+
+/*!
+ @function VPNServiceSetAppRule
+ @discussion Add or modify an app rule in a VPN service. The ruleSettings dictionary must contain one of the following keys:
+ <pre>kSCValNetVPNAppRuleExecutableMatch</pre>
+ <pre>kSCValNetVPNAppRuleAccountIdentifierMatch</pre>
+ The ruleSettings dictionary may also contain the following keys:
+ <pre>kSCValNetVPNAppRuleDNSDomainMatch</pre>
+ See SCSchemaDefinitionsPrivate.h for more details.
+ @param service A reference to the VPN service.
+ @param ruleIdentifier The identifier of the new app rule.
+ @param ruleSettings The settings for the new app rule. See the dictionary keys defined above.
+ @result TRUE if the app rule was set successfully, FALSE if an error occurred.
+ */
+Boolean
+VPNServiceSetAppRule (VPNServiceRef service,
+ CFStringRef ruleIdentifier,
+ CFDictionaryRef ruleSettings) __OSX_AVAILABLE_STARTING(__MAC_10_9,__IPHONE_7_0/*SPI*/);
+
+/*!
+ @function VPNServiceCopyAppRule
+ @discussion Copy the settings for a app rule in a VPN service.
+ @param service The app tunnel service.
+ @param ruleIdentifier The ID of the app rule.
+ @result The rule settings, or NULL if the app rule could not be found.
+ */
+CFDictionaryRef
+VPNServiceCopyAppRule (VPNServiceRef service,
+ CFStringRef ruleIdentifier) __OSX_AVAILABLE_STARTING(__MAC_10_9,__IPHONE_7_0/*SPI*/);
+
+/*!
+ @function VPNServiceRemoveAppRule
+ @discussion Remove an app rule from a VPN service.
+ @param service The VPN service.
+ @param ruleIdentifier The ID of the app rule to remove.
+ @result Returns TRUE if the app rule was removed successfully; FALSE otherwise.
+ */
+Boolean
+VPNServiceRemoveAppRule (VPNServiceRef service,
+ CFStringRef ruleIdentifier) __OSX_AVAILABLE_STARTING(__MAC_10_9,__IPHONE_7_0/*SPI*/);
+
+/*!
+ @function VPNServiceIsManagedAppVPN
+ @discussion Check to see if a VPN service is a managed App VPN service
+ @param service The VPN servie.
+ @result Returns TRUE if the service is a managed App VPN service; FALSE otherwise.
+*/
+Boolean
+VPNServiceIsManagedAppVPN (VPNServiceRef service) __OSX_AVAILABLE_STARTING(__MAC_10_9,__IPHONE_7_0/*SPI*/);
+
+/*!
+ @group Migration SPI
+ */
+#pragma mark -
+#pragma mark Migration SPI
+
+extern const CFStringRef kSCNetworkConfigurationRepair /* CFBoolean */ __OSX_AVAILABLE_STARTING(__MAC_10_10, __IPHONE_8_0);
+
+extern const CFStringRef kSCNetworkConfigurationMigrationActionKey /* CFNumber */ __OSX_AVAILABLE_STARTING(__MAC_10_10,__IPHONE_8_0);
+
+typedef CF_ENUM(uint32_t, SCNetworkConfigurationMigrationAction) {
+ kSCNetworkConfigurationMigrationAction_CleanInstall = 0,
+ kSCNetworkConfigurationMigrationAction_Upgrade = 1,
+ kSCNetworkConfigurationMigrationAction_Restore = 2,
+};
+
+/*!
+ @function _SCNetworkConfigurationCopyMigrationPaths
+ @result Returns an array of paths that we would need from the source
+ */
+CFArrayRef
+_SCNetworkConfigurationCopyMigrationPaths(CFDictionaryRef options) __OSX_AVAILABLE_STARTING(__MAC_10_10,__IPHONE_8_0);
+
+/*!
+ @function _SCNetworkConfigurationPerformMigration
+ @discussion Updates the network configuration of the target system with
+ configurations from previous system. Both sourceDir and targetDir
+ cannot be NULL, since NULL indicates API to look at the local system
+ @param sourceDir A reference which points to the root of a directory populated
+ with the list of requested directories/path from the "source" volume. Passing NULL
+ will indicate that sourceDir should point to local system
+ @param currentDir A reference which points to the root of a directory populated
+ with the list of requested directories/path from the "destination" volume. Passing
+ NULL will indicate that currentDir should point to local system.
+ @param targetDir A reference which points to the root of a directory that we
+ will populate (update) with new configuration. Passing NULL will mean that we want to
+ migrate to the currentDir. If not NULL, then this path should exist.
+ @param options Argument which will tell us what action we are supposed to take
+ (clean-install, upgrade, migrate/restore settings from another system, ...)
+ @result Returns array which would consist of those paths that should be moved
+ from the "targetDir" directory to destination volume. You must release the returned value.
+ */
+
+CF_RETURNS_RETAINED
+CFArrayRef
+_SCNetworkConfigurationPerformMigration(CFURLRef sourceDir,
+ CFURLRef currentDir,
+ CFURLRef targetDir,
+ CFDictionaryRef options) __OSX_AVAILABLE_STARTING(__MAC_10_10,__IPHONE_8_0);
+
+
+/*!
+ @function _SCNetworkConfigurationCheckValidity
+ @discussion Verifies whether the configuration files present in the specified
+ directory have valid mappings or not
+ @param configDir A reference which points to the directory where the configuration
+ files are present
+ @result TRUE if valid configurations are found
+
+ */
+
+Boolean
+_SCNetworkConfigurationCheckValidity(CFURLRef configDir,
+ CFDictionaryRef options) __OSX_AVAILABLE_STARTING(__MAC_10_10,__IPHONE_8_0);
+
+
+/*!
+ @function _SCNetworkConfigurationCheckValidityWithPreferences
+ @discussion Validates the specified preferences.plist against NetworkInterfaces.plist
+ @param prefs the preferences ref pointing to the said preferences.plist
+ @param ni_prefs the preferences ref pointing to the said NetworkInterfaces.plist
+ @result TRUE if the configurations are valid against each other
+
+ */
+
+Boolean
+_SCNetworkConfigurationCheckValidityWithPreferences (SCPreferencesRef prefs,
+ SCPreferencesRef ni_prefs,
+ CFDictionaryRef options) __OSX_AVAILABLE_STARTING(__MAC_10_11, __IPHONE_9_0);
+
+
+/*!
+ @function _SCNetworkMigrationAreConfigurationsIdentical
+ @discussion Compares the migration output between network configurations
+ with the expected output.
+ @param configPref Preferences pointing toward preferences.plist file to
+ be compared with expected file.
+ @param configNetworkInterfacePref Preferences pointing toward NetworkInterfaces.plist
+ file to be compared with expected file.
+ @param expectedConfigPref Preferences pointing toward preferences.plist file
+ which is the expected result.
+ @param expectedNetworkInterfacePref Preferences pointing toward NetworkInterfaces.plist
+ file which is the expected file.
+ @result TRUE if configurations match with the expected configurations
+
+ */
+
+Boolean
+_SCNetworkMigrationAreConfigurationsIdentical (CFURLRef configurationURL,
+ CFURLRef expectedConfigurationURL)
+ __OSX_AVAILABLE_STARTING(__MAC_10_10,__IPHONE_8_0);
+
+/*!
+ @function _SCNetworkConfigurationCopyMigrationRemovePaths
+ @discussion List of paths to files which we want to be removed from the target filesystem after migration
+ @param targetPaths the CFArray returned by _SCNetworkConfigurationPerformMigration
+ @param targetDir the CFURL passed to _SCNetworkConfigurationPerformMigration
+ @result An array of CFURL's; NULL if no paths need to be removed from the target filesystem
+
+*/
+
+CFArrayRef // of CFURLRef's
+_SCNetworkConfigurationCopyMigrationRemovePaths (CFArrayRef targetPaths,
+ CFURLRef targetDir) __OSX_AVAILABLE_STARTING(__MAC_10_10, __IPHONE_8_0);
+
+__END_DECLS
#endif /* _SCNETWORKCONFIGURATIONPRIVATE_H */