Схема конфигурации системы
Схема Конфигурации системы определяет расположение информации о конфигурации сети в персистентном хранилище. В этой главе описываются это расположение и некоторые определенные комбинации пар ключ/значение, определяющих наборы и службы. Это тогда описывает который пары ключ/значение использование агентов конфигурации для управления их сферами интересов. Наконец, эта глава описывает, как использовать Ваше знание схемы для обеспечения предпочтений, определяющих службу. Если приложение определяет наборы или службы, необходимо считать эту главу. Кроме того, если для Вашего приложения нужна подробная информация о состоянии соединения PPP, необходимо считать эту главу, чтобы узнать, как интерпретировать информацию, которую Вы получаете.
Большинство сетевых осведомленных приложений не должно к предпочтениям сети доступа или динамической памяти выполнять свои задачи. Если Ваши сетевые соединения запросов приложения или узнают, достижим ли удаленный сервер, Вы могли бы принять решение перейти непосредственно к Определению Достижимости и быть соединенным.
Расположение персистентного хранилища
Иерархическое размещение ключей и значений в персистентном хранилище диктует схема Конфигурации системы. В этом разделе описываются иерархию пар ключ/значение и идентифицирует некоторые определенные комбинации предпочтений, определяющих отдельные службы.
Персистентное Хранилище представляет четыре предпочтения верхнего уровня в персистентном хранилище:
Наборы
CurrentSet
NetworkServices
Система
Система использует информацию в этих четырех предпочтениях для конфигурирования сетевых служб. Рисунок 3-1 показывает, как связаны эти предпочтения.
Как Вы видите на рисунке 3-1, Системное предпочтение является отдельным от других трех предпочтений. Это вызвано тем, что Системный словарь содержит глобальную переменную, информацию в масштабе всей системы, такую как имя компьютера. Эта информация применима к машине в целом, независимо от текущей конфигурации сети. Приложение конфигурации сети не имеет никакой потребности к добавленным стоимостям к Системному предпочтению.
Предпочтение CurrentSet всегда содержит внутренний ID, представляющий в настоящее время активный набор в предпочтении Наборов (на рисунке 3-1, это - Setk). Когда пользователь выбирает различное расположение в Сетевых предпочтениях или из Меню Apple, предпочтительный монитор замечает и обновляет динамическую память для отражения изменения. Для получения дополнительной информации о предпочтительном мониторе посмотрите Предпочтительный Монитор).
Оставление двумя предпочтениями верхнего уровня, Наборами и NetworkServices, содержит объем информации, система должна сконфигурировать сетевые службы. Как Вы видите на рисунке 3-1, набор, перечисленный в словаре Наборов, содержит внутренний IDs, представляющий отдельные службы, перечисленные в словаре NetworkServices. Следующие разделы описывают Наборы и словари NetworkServices более подробно.
Словарь наборов
Словарь Наборов содержит подсловарь для каждого набора, определенного в системе. Обычно наборы представляют расположения, создаваемые пользователем в Сетевых предпочтениях, несмотря на то, что приложения конфигурации сети могут также создать их. Например, ISP мог бы обеспечить приложение, определяющее новое расположение, упрощающее для пользователя соединяться с ISP. Для предложения этого нового расположения приложение создает новый словарь набора и некоторое число новых служб. Новый словарь набора содержит конфигурационную информацию для расположения, включая свойство, содержащее имя ISP’s и ссылки на новые службы.
Каждый отдельный словарь набора в словаре Наборов верхнего уровня содержит следующие свойства:
UserDefinedName
Сеть
Свойство UserDefinedName является строкой, содержащей имя расположения, которое пользователь вводит в Сетевых предпочтениях. Приложение, определяющее новое расположение, использовало бы этот ключ для обеспечения подходящего имени расположения, например, имени ISP. Имя ISP’s тогда выведено на экран в меню Location Сетевых предпочтений и в Меню Apple.
Свойство Network является словарем, описывающим конфигурацию сети для набора, включая список служб, определенных для набора. Каждый Сетевой словарь в наборе должен содержать следующие свойства, все из которых являются словарями:
Глобальная переменная
Интерфейс
Служба
Поскольку его имя подразумевает, Глобальный словарь предоставляет информацию, которая не является определенной ни для какой определенной службы. В настоящее время Глобальный словарь содержит два задействованных словаря: IPv4 и NetInfo, оба из которых требуются.
Словарь IPv4 должен содержать ключ ServiceOrder. Значение этого ключа является массивом, позволяющим пользователю налагать упорядочивание на свои сетевые службы в Сетевых предпочтениях. Когда многократные службы активны одновременно, система использует массив ServiceOrder для определения, какую службу нужно считать основной. Основная служба определяет маршрут по умолчанию и конфигурации прокси-сервера и DNS.
Словарь IPv4 может также содержать ключ PPPOverridePrimary. Это - устаревший ключ, позволяющий любой активной основанной на PPP службе быть обработанной, как будто это было первым в массиве ServiceOrder. Эта функциональность была заменена, позволив любой отдельной службе включать ключ OverridePrimary в его собственном (на службу) словарь IPv4.
Словарь NetInfo содержит NetInfo обязательные предпочтения. Поскольку использование Служб каталогов становится более широко распространенным, однако, словарь NetInfo меньше станет распространен.
Интерфейсный словарь содержит настройки на интерфейс. Каждый элемент Интерфейсного словаря является подсловарем, идентифицированным именем BSD интерфейса, такой как en0
. Каждый подсловарь содержит словарь, названный Ethernet, содержащим результаты ручной конфигурации интерфейса. Скорость, дуплекс и максимальный размер пакета (максимальный блок передачи или MTU) значения сохранены здесь. Эта информация хранится на интерфейсном уровне, чтобы препятствовать тому, чтобы отдельные службы пытались сконфигурировать тот же интерфейс по-разному.
Как правило, однако, пользователь принимает конфигурацию Ethernet по умолчанию путем выбора опции Automatically на вкладке конфигурации Ethernet Сетевых предпочтений. Когда дело обстоит так, словарь Ethernet или не существует или содержит ключ __INACTIVE__
.
Словарь Службы содержит ссылки на службы, определенные для этого набора. Каждый элемент словаря Службы является самостоятельно словарем, содержащим единственный элемент — внутренняя служба ID, относящаяся к службе, перечисленной в словаре NetworkServices верхнего уровня. Сетевые предпочтения используют информацию в словаре Службы для отображения служб и включают ли им. Предпочтительный монитор также использует эту информацию, поскольку это загружает текущие предпочтения конфигурации в динамическую память (для получения дополнительной информации об этом процессе, посмотрите Предпочтительный Монитор).
Словарь NetworkServices
Словарь NetworkServices верхнего уровня содержит все сетевые службы, определенные для системы. Каждая сетевая служба представлена словарем (идентифицированный уникальным ключом), который содержит свойства конфигурации для объектов, связанных с той службой. Комбинация объектов определяется типом службы. Например, основанной на модеме службе нужны Интерфейс, PPP, Модем, и объекты IPv4, но не объект AppleTalk, потому что OS X не поддерживает AppleTalk по PPP.
Если Вы разрабатываете приложение, добавляющее службу к новому набору, необходимо создать словарь сетевой службы, описывающий его. Этот раздел обрисовывает в общих чертах содержание словаря сетевой службы.
Словарь сетевой службы может включать следующие свойства:
Интерфейсный словарь, описывающий сетевой интерфейс, лежащий в основе службы
Переменное число словарей объекта протоколов, каждый из которых описывает конфигурацию объекта протоколов (такого как PPP или AppleTalk) это определяется для службы. (Обратите внимание на то, что некоторые словари объекта протоколов могут присутствовать в словаре сетевой службы, но быть пустыми или отмечены как неактивные.)
Один аппаратный словарь объекта, в зависимости от типа службы (тип службы указан в интерфейсном словаре объекта),
Словарь прокси, идентифицирующий, какие прокси включены для службы
Видимое пользователем имя для службы
Интерфейсный словарь
Интерфейсный словарь описывает транспорт сетевого соединения службы. Содержание Интерфейсного словаря варьируется согласно типу службы, но требуются три элемента:
DeviceName
Оборудование.
Ввести
Значение ключа DeviceName предоставляет имя устройства BSD для сетевого соединения, например, en0
или en1
. Для подобных сериалу устройств значение ключа DeviceName является базовым именем минус любой префикс. Например, DeviceName оценивают за модем с именем cu.modem
modem
. В настоящее время платформа Конфигурации системы не предоставляет API для нахождения всех портов подходящими для сетей. Посмотрите Программно Устанавливающие Предпочтения ссылки на библиотеку примера кода, который может помочь с этим.
Значение Аппаратного ключа является свойством типа CFString, называющий тип аппаратных средств, лежащих в основе сетевого соединения, такого как Ethernet или AirPort. Можно просмотреть содержание этого словаря как ссылка на аппаратный словарь объекта того же имени (для получения дополнительной информации об аппаратных словарях объекта, см. Аппаратные Словари Объекта).
Ключ Type идентифицирует тип соединения, которое могло быть Ethernet, FireWire, PPP, или 6to4.
В дополнение к требуемым ключам Интерфейсный словарь обычно содержит ключ UserDefinedName, содержащий видимое пользователем имя сетевого порта.
Интерфейсные ключи словаря и значения получены в итоге в Таблице 3-1, вместе со связанными действиями агентов конфигурации.
Ключ | Значение | Дальнейшие действия требуются | Примечания |
---|---|---|---|
DeviceName | Имя устройства BSD | Ни один | |
Оборудование. | AirPort | Ни один | |
Оборудование. | Ethernet | Ни один | |
Оборудование. | Модем | Ни один | |
Ввести | Ethernet | Ни один | |
Ввести | FireWire | Ни один | |
Ввести | 6to4 | Ни один | |
Ввести | PPP | Должен предоставить ключ SubType. | Контроллер PPP конфигурирует эту службу. |
SubType | PPPoE | Требуемый для PPP по службам Ethernet. | |
SubType | PPPSerial | Требуемый для PPP по последовательному, модему, Bluetooth, и т.д. службы. | |
SubType | PPTP | Требуемый для VPN (использующий PPTP) службы. | |
SubType | L2TP | Требуемый для VPN (использующий L2TP) службы. | |
UserDefinedName | Человекочитаемое имя | Ни один |
Словари объекта протоколов
Каждый словарь объекта протоколов содержит информацию, система должна сконфигурировать протокол. Например, свойство ConfigMethod в словаре объекта IPv4 могло бы сказать системе использовать DHCP для конфигурирования IPv4.
В настоящее время объекты протоколов, которые могут быть определены для службы:
AppleTalk
DNS
IPv4
IPv6
PPP
По большей части словарь службы может содержать любую комбинацию этих словарей объекта протоколов. Если интерфейс не поддерживает протокол, однако, соответствующий словарь проигнорирован. Например, в версии 10.3 OS X, словарь AppleTalk проигнорирован для служб PPP, потому что OS X не поддерживает AppleTalk по PPP.
Содержание некоторых словарей объекта протоколов (такое как PPP) влияет на содержание других элементов словаря сетевой службы. Следующие разделы описывают содержание каждого словаря объекта протоколов, включая любой эффект, который то содержание могло бы иметь на другие свойства.
AppleTalk
Словарь объекта протоколов AppleTalk является дополнительным словарем объекта протоколов. Если это присутствует, это содержит следующий требуемый ключ:
ConfigMethod (
kSCValNetAppleTalkConfigMethod
)
Возможные значения для ключа ConfigMethod:
Узел (
kSCPropNetAppleTalkConfigMethodNode
). Стандартная конфигурация AppleTalk, подходящая для общих рабочих станций.Маршрутизатор (
kSCPropNetAppleTalkConfigMethodRouter
). Используемый для маршрутизаторов AppleTalk.SeedRouter (
kSCPropNetAppleTalkConfigMethodSeedRouter
). Используемый для AppleTalk отбирают маршрутизаторы.
В зависимости от которого метода конфигурации Вы выбираете, другие пары ключ/значение могут требоваться. Например, при выборе метода конфигурации SeedRouter необходимо также предоставить значения для ключей SeedNetworkRange и SeedZones.
Для получения дополнительной информации о параметрах конфигурации AppleTalk можно просмотреть страницу справочника для appletalk.cfg
файл (конфигурационный файл по умолчанию appletalk
чтения команды) в http://developer .apple.com/documentation/Darwin/Reference/ManPages/index.html.
Пары ключ/значение в словаре объекта протоколов AppleTalk не имеют никакого эффекта на содержание других словарей в словаре сетевой службы.
DNS
Словарь объекта протоколов DNS является дополнительным словарем объекта протоколов. Это обычно присутствует в словаре сетевой службы службы, но часто пусто. Пустой словарь протокола DNS означает, что пользователь выбирает not to manually configure DNS, позволяя именам серверов DNS и областям поиска быть автоматически предоставленными ISP.
Если Вы хотите потребовать использования определенных серверов DNS и областей поиска, можно добавить любой из следующих дополнительных ключей к словарю объекта протоколов DNS:
DomainName (
kSCPropNetDNSDomainName
)SearchDomains (
kSCPropNetDNSSearchDomains
)ServerAddresses (
kSCPropNetDNSServerAddresses
)SortList (
kSCPropNetDNSSortList
)
Для получения дополнительной информации о ключе SortList можно просмотреть страницу справочника для формата файла настройки преобразователя в http://developer .apple.com/documentation/Darwin/Reference/ManPages/index.html.
Пары ключ/значение в словаре объекта протоколов DNS не имеют никакого эффекта на содержание других словарей в словаре сетевой службы.
IPv4
Словарь объекта протоколов IPv4 является дополнительным словарем объекта протоколов. Это имеет тот требуемый ключ:
ConfigMethod (
kSCPropNetIPv4ConfigMethod
)
Таблица 3-2 показывает шесть возможных значений ключа ConfigMethod. Это также показывает дополнительные ключи, которые необходимо предоставить определенные значения ConfigMethod.
Значение | Дальнейшие действия требуются |
---|---|
BOOTP | Ни один |
DHCP | Ни один |
LinkLocal | Ни один |
СООБЩИТЬ | Обеспечьте значения для Адресов, Маршрутизатора, SubnetMasks |
Руководство | Обеспечьте значения для Адресов, Маршрутизатора, SubnetMasks |
PPP | Может указать ручной адрес. |
Для всех значений ConfigMethod кроме PPP агент конфигурации IPv4 публикует значения для Адресов, SubnetMasks, Маршрутизатора и InterfaceName State:
ключи. Когда ConfigMethod является PPP, контроллер PPP публикует значения для Адресов, DestAddresses, Маршрутизатора и InterfaceName State:
ключи. Для получения дополнительной информации об этих агентах конфигурации посмотрите Поведение Агентов Конфигурации.
IPv6
Словарь объекта протоколов IPv6 является дополнительным словарем объекта протоколов. Словарь объекта протоколов IPv6 имеет почти такой же состав как словарь объекта протоколов IPv4, и это, также, имеет единственный требуемый ключ:
ConfigMethod (
kSCPropNetIPv6ConfigMethod
)
Таблица 3-3 показывает четыре возможных значения ключа ConfigMethod, вместе с дальнейшим требуемым действием.
Значение | Дальнейшие действия требуются | Примечания |
---|---|---|
Автоматический | Ни один | Агент конфигурации IPv6 публикует значения для Адресов, PrefixLength, Флагов и InterfaceName |
Руководство | Обеспечьте значения для Адресов, Маршрутизатора и PrefixLength | Агент конфигурации IPv6 публикует значения для Адресов, PrefixLength, Флагов, Маршрутизатора и InterfaceName |
RouterAdvertisement | Ни один | Агент конфигурации IPv6 публикует значения для PrefixLength, Флагов и InterfaceName |
6to4 | Обеспечьте значение для 6to4 Реле | Агент конфигурации IPv6 публикует значения для Адресов, PrefixLength, Флагов и InterfaceName |
Если словарь объекта протоколов IPv6 присутствует в словаре сетевой службы, контроллер PPP инициировал согласование IPv6 в PPP. Если согласование IPv6 с сервером было успешно, это тогда конфигурирует адрес LinkLocal.
PPP
Словарь объекта протоколов PPP является дополнительным словарем объекта протоколов. Схема обеспечивает много ключей и оценивает за использование в этом словаре, чтобы позволить разработчикам определять точно гранулировавшие службы. Содержание словаря объекта протоколов PPP влияет на содержание некоторых из других словарей в сетевой службе, прежде всего, IPv4 и Интерфейсных словарях. Кроме того, присутствие службы PPP в наборе требует, чтобы присутствие PPPOverridePrimary ввело подсловарь IPv4 в Глобальном словаре набора (как описано в Словаре Наборов).
OS X распознает широкий диапазон опций для служб PPP, многие из которых используются только при совершенно особых обстоятельствах. Этот документ не пытается описать их всех. Вместо этого этот раздел внимание на опции PPP пользователь видит в Сетевых предпочтениях. Поскольку можно соединиться с подавляющим большинством служб PPP с помощью этого большего количества универсальных опций, можно создать словарь объекта протоколов PPP с помощью ключей, описанных в этом разделе (и их значения по умолчанию), и соединение должно успешно выполниться. Затем можно совершенствовать службу путем добавления других ключей, определенных в SCSchemaDefinitions.h
файл.
Таблица 3-4 показывает ключи для видимых пользователем опций PPP, вместе с некоторыми возможными значениями.
Ключ | Значение | Примечания |
---|---|---|
DialOnDemand | 0 | Включает автоматический коммутируемый доступ. Этот ключ должен использоваться с осторожностью для предотвращения нежелательного набора номера. |
IdleReminder | 0 | Когда секунды в значении IdleReminderTimer протекают, предлагает пользователю поддерживать соединение PPP. Если пользователь не подтверждает экранное диалоговое окно, PPP автоматически разъединяется. |
IdleReminderTimer | 1800 | Числу секунд для протекания перед пользователем напоминают поддержать соединение PPP (если IdleReminder включают). |
DisconnectOnIdle | 1 | Автоматически разъединения, если нет никакого трафика для числа секунд в значении DisconnectOnIdleTimer. |
DisconnectOnIdleTimer | 900 | Число неактивных секунд для протекания перед соединением PPP автоматически разъединяется (если DisconnectOnIdle включают). |
DisconnectOnLogout | 1 | Автоматически разъединения, когда пользователь выходит из системы или когда пользователь выключает с быстрым переключением между пользователями. |
CommRedialEnabled | 1 | Для основанных на модеме соединений, включает повторный набор, если занятый. |
CommRedialCount | 1 | Число раз, чтобы повторно набрать, если занятый (если CommRedialEnabled включают). |
CommRedialInterval | 30 | Интервал в секундах для ожидания между повторным набором, если занятый (если CommRedialEnabled включают). |
LCPEchoEnabled | 1 | Включает протокол эха PPP. Этот протокол позволяет быстрое обнаружение модемного разъединения, о котором не сообщают. Если пользователь платит нагрузкой по трафику вместо ко времени соединения, включение этого протокола генерирует дополнительный трафик и может не подойти. |
IPCPCompressionVJ | 1 | Включает VJ (Ван Джэйкобсон) сжатие на ссылке PPP. Для соединений PPPSerial значение может быть 1 («на») или 0 («прочь»). Для PPPoE, PPTP и соединений L2TP, значение должно быть 0 («прочь»). |
CommDisplayTerminalWindow | 0 | Позволяет дисплею Окна терминала показать вход в систему и взаимодействие пароля с сервером. Это работает только с соединениями PPPSerial. |
VerboseLogging | 0 | Включает журналирование всего согласования PPP, которое может быть полезно для отладки сбоя соединения. |
UserDefinedName | Дополнительное имя для соединения. Это значение не имеет никакого эффекта на протокол PPP. | |
AuthName | Имя пользователя в целях аутентификации. | |
AuthPassword | Пароль в целях аутентификации. | |
CommRemoteAddress | Адрес или имя удаленного сервера. Это может быть телефонным номером для соединения PPPSerial, ServiceName для соединения PPPoE, или IP-адресом или именем для PPTP или соединения L2TP. | |
CommAlternateRemoteAddress | Когда адрес в CommRemoteAddress занят, используемый только для соединений PPPSerial, это - альтернативный адрес для использования. |
Определение службы PPP требует нескольких изменений в некоторых из других элементов Вашего словаря сетевой службы. Если Вы предоставляете услугу PPP, необходимо внести следующие изменения в словарь сетевой службы, который Вы создаете:
Ключ Типа в Интерфейсном словаре должен иметь значение PPP. Это гарантирует, что агент Контроллера PPP будет действовать на эту службу.
Необходимо добавить ключ SubType к Интерфейсному словарю и дать ему значение, описывающее тип услуги PPP, которую Вы предоставляете, такие как PPPoE или L2TP.
При определении службы PPP, предназначенной, чтобы использоваться по модему, необходимо будет добавить словарь объекта оборудования модема к словарю сетевой службы.
Аппаратные словари объекта
Ваш словарь сетевой службы должен содержать точно один аппаратный словарь объекта, который должен предоставить информацию на основе на службу. Его имя должно соответствовать значение свойства Hardware Интерфейсного словаря (описанный в Интерфейсном Словаре). Аппаратный словарь объекта может быть:
Ethernet
AirPort
Модем
Аппаратный словарь объекта содержит подробные данные о сетевом оборудовании, лежащем в основе службы, определенной словарем сетевой службы. Поэтому ключи и значения в словаре варьируются согласно типу аппаратных средств, которые описывает словарь.
Аппаратный словарь объекта AirPort может содержать некоторую комбинацию ключей, показанных в Таблице 3-5.
Ключ | Значение |
---|---|
AllowNetCreation | 0 или 1 |
AuthPassword | |
AuthPasswordEncryption | Цепочка для ключей |
JoinMode | Автоматический |
JoinMode | Предпочтительный |
JoinMode | Недавний |
JoinMode | Самый сильный |
PowerEnabled | 0 или 1 |
PreferredNetwork | |
SavePasswords | 0 или 1 |
Словарь объекта Оборудования модема поддерживает большое количество опций, позволяющих Вам указывать очень подробную установку. Таблица 3-6 выводит на экран некоторые ключи, которые схема определяет вместе с некоторыми типичными значениями.
Ключ | Значение | Примечания |
---|---|---|
ConnectionScript | Имя файла в модемной папке сценариев | Это - CCL (язык управления соединениями) сценарий. |
DataCompression | 1 | |
DialMode | WaitForDialTone | Другими значениями является IgnoreDialTone и Руководство. |
ErrorCorrection | 1 | |
HoldCallWaitingAudibleAlert | 0 или 1 | |
HoldDisconnectOnAnswer | 0 или 1 | |
HoldEnabled | 0 или 1 | |
HoldReminder | 0 или 1 | |
HoldReminderTime | ||
PulseDial | 0 | |
Динамик | 1 | |
Скорость | Скорость последовательный порт открыта со связаться с модемом. |
Как разработчик приложения конфигурации сети, Вы предоставляете параметры модема, требуемые Вашей установкой. Когда пользователь открывает предпочтения Network, она может установить опции тот вопрос в нее. Например, приложение может установить свойство ConnectionScript для указания на файл в модемной папке сценариев в /Library/Modem Scripts
. Пользователь мог бы выбрать различные опции Speaker и DialMode в зависимости от среды, в которой она делает соединение.
Словарь прокси
Словарь Прокси в каждом словаре сетевой службы содержит конфигурационную информацию прокси-сервера. Схема Конфигурации системы определяет несколько свойств, позволяющих пользователю указывать, как сконфигурировать прокси для данной службы. Например, пользователь может:
Выберите который прокси включить
Идентифицируйте сервер и порт, связанный с включенными прокси
Перечислите сетевые ресурсы, к которым нужно получить доступ без прокси-сервера
Приложение конфигурации сети могло бы поставить пользовательский набор информации прокси по умолчанию для пользователя, чтобы принять или изменить. Чтобы сделать это, приложение предоставляет словарь Прокси, включающий определенные прокси-серверы, порты, и включите состояние.
Для большинства типов прокси, SCSchemaDefinitions.h
файл определяет три ключа, обеспечивающие имя прокси, порта, и включен ли прокси. Ключи имеют форму ProtocolProxy, ProtocolPort и ProtocolEnable, где Протокол является именем службы, которая будет проксирована. Кроме того, схема определяет ключ ExceptionsList, позволяющий Вам перечислять определенные узлы и домены, для которых должны быть обойдены настройки прокси. Таблица 3-7 перечисляет ключи и значения, которые можно использовать для создания словаря Прокси.
Ключ | Значение | Примечания |
---|---|---|
ExceptionsList | Массив имен хоста и доменных имен | |
FTPPassive | 0 или 1 | Средства управления, используют ли клиенты FTP пассивный FTP. Обратите внимание на то, что пассивный FTP может вызвать проблемы с более старыми серверами и некоторыми конфигурациями сети. Значение по умолчанию равняется 1 (пассивный FTP включил). |
FTPEnable | 0 или 1 | Если значение FTPEnable равняется 1, прокси-сервер FTP указан значением ключа FTPProxy. |
FTPPort | Номер порта | |
FTPProxy | Прокси-сервер | |
GopherEnable | 0 или 1 | Если значение GopherEnable равняется 1, прокси-сервер гофера указан значением ключа GopherProxy. |
GopherPort | Номер порта | |
GopherProxy | Прокси-сервер | |
HTTPEnable | 0 или 1 | Если значение HTTPEnable равняется 1, сервер Прокси HTTP указан значением ключа HTTPProxy. |
HTTPPort | Номер порта | |
HTTPProxy | Прокси-сервер | |
HTTPSEnable | 0 или 1 | Если значение HTTPSEnable равняется 1, прокси-сервер HTTPS указан значением ключа HTTPSProxy. |
HTTPSPort | Номер порта | |
HTTPSProxy | Прокси-сервер | |
RTSPEnable | 0 или 1 | Если значение RTSPEnable равняется 1, прокси-сервер RTSP указан значением ключа RTSPProxy. |
RTSPPort | Номер порта | |
RTSPProxy | Прокси-сервер | |
SOCKSEnable | 0 или 1 | Если значение SOCKSProxy равняется 1, прокси-сервер SOCKS указан значением ключа SOCKSProxy. |
SOCKSPort | Номер порта | |
SOCKSProxy | Прокси-сервер |
Поведение агентов конфигурации
Вспомните что демон системного уровня, configd
, держит данные состояния сети в курсе путем инициализации динамической памяти и загрузки агентов конфигурации как пакетов (или плагины). Агенты, выполненные в configd
пространство памяти и является каждым ответственным за четко определенную область управления конфигурацией.
Агенты конфигурации используют ключи и значения, определенные в SCSchemaDefinitions.h
файл для передачи с динамической памятью. Агенты используют некоторые ключи для получения конфигурационной информации и других для публикации результатов событий, которые они обнаруживают и меры, которые они принимают.
Несмотря на то, что некоторые агенты конфигурации представляют внутренний интерес только, другие влияют на динамическую память способами, которыми Ваше приложение, возможно, должно было бы понять. В этом разделе описываются поведение этих агентов конфигурации и перечисляет многие ключи и значения, которые они используют.
Предпочтительный монитор
Предпочтительный монитор читает в настоящее время активный набор конфигурации, указанный предпочтением CurrentSet пользователя, и загружает связанные предпочтения в динамическую память. Загрузка предпочтений включает процесс отображения, сглаживающий на единственный уровень иерархию вложенных словарей, составляющих в настоящее время активный набор. Отображающиеся замены каждый вложенный словарь с новой парой ключ/значение. Новый ключ является путем от корня словаря набора к вложенному словарю, и значение является значением вложенного словаря минус любые дополнительные вложенные словари. Таким образом произвольно глубокая иерархия вложенных словарей может быть представлена как ряд словарей верхнего уровня, ни один из которых не содержит вложенные словари.
Процесс отображения также удаляет словари, которые пусты или отмечены неактивный, и он разрешает все ссылки и ссылки. Важно отметить, что словарь считают неактивным, когда это содержит __INACTIVE__
ключ, независимо от значения ключа.
Поскольку это отображает содержание словаря набора в динамическую память, предпочтения контролируют префиксы каждый ключ со строкой Setup:
. Это идентифицирует эти ключи как прибывавший из предпочтений пользователя в персистентном хранилище. Другие ключи в динамической памяти начинаются с других строк, такой как State:
. State:
ключи - те другое использование агентов конфигурации для содержания переходной сети и системной информации о состоянии.
Поскольку пример процесса отображения, который предпочтительный монитор выполняет, Перечисление 3-1, показывает подмножество предпочтений пользователя, как это появляется в персистентном хранилище.
Подмножество перечисления 3-1 словаря службы (ServiceID
100)
<key>100</key> |
<dict> |
<key>IPv4</key> |
<dict> |
<key>ConfigMethod</key> |
<string>BootP</string> |
</dict> |
<key>DNS</key> |
</dict> |
<key>Interface</key> |
<dict> |
<key>DeviceName</key> |
<string>en0</string> |
<key>Hardware</key> |
<string>Ethernet</string> |
<key>Type</key> |
<string>Ethernet</string> |
<key>UserDefinedName</key> |
<string>Built-in Ethernet</string> |
</dict> |
<key>UserDefinedName</key> |
<string>Built-in Ethernet</string> |
</dict> |
Перечисление 3-2 показывает то, на что похож этот словарь после того, как предпочтительный монитор отображает его.
Подмножество перечисления 3-2 словаря службы, после отображения в динамическую память
/Network/Service/100 |
/Network/Service/100/IPv4 |
<dictionary> |
<key>ConfigMethod</key> |
<string>BootP</string> |
</dictionary> |
/Network/Service/100/Interface |
<dictionary> |
<key>DeviceName</key> |
<string>en0</string> |
<key>Hardware</key> |
<string>Ethernet</string> |
<key>Type</key> |
<string>Ethernet</string> |
<key>UserDefinedName</key> |
<string>Built-in Ethernet</string> |
</dictionary> |
<dictionary> |
<key>UserDefinedName</key> |
<string>Built-in Ethernet</string> |
</dictionary> |
Как Вы видите в Перечислении 3-2, IPv4 и Интерфейсные подсловари теперь на том же уровне как их родитель (словарь службы) и имеют ключи, описывающие их позицию в родительском словаре. Кроме того, пустой подсловарь DNS в Перечислении 3-1 не представлен в отображении.
Когда это генерирует новое отображение, предпочтительный монитор отслеживает различия от старого отображения. Применение этих различий для динамической памяти инициировало уведомления, связанные с изменившимися ключами. Это гарантирует, что реконфигурирование является автоматическим, когда, например, пользователь выбирает различное расположение в Сетевых предпочтениях или из Меню Apple.
Event Monitor ядра
Монитор события ядра ведет список всех сетевых интерфейсов, определенных в системе, состояние канала, связанное с каждым интерфейсом и любыми присвоенными адресами. Это следит за развитием низкоуровневых событий ядра и наблюдает сетевые стеки, отслеживание состояния канала каждого сетевого интерфейса. Основное задание монитора события ядра должно отправить состояние каждого сетевого интерфейса в динамической памяти. Это освобождает приложения от необходимости достигнуть ядра для обнаружения, например, если кабель Ethernet включается или если изменились присвоенные адреса.
В отличие от большинства других агентов, монитор события ядра не получает конфигурационную информацию от Setup:
ключи в динамической памяти. Вместо этого это получает свой ввод непосредственно от ядра и публикует его наблюдения в части из State:
ключи, как показано в Таблице 3-8.
Ключ | Свойство | Примечания |
---|---|---|
State:/Network/Interface/InterfaceName/IPv4 | Адреса | Опубликованный для всех интерфейсов. |
State:/Network/Interface/InterfaceName/IPv4 | SubnetMasks | Опубликованный для широковещательных интерфейсов. |
State:/Network/Interface/InterfaceName/IPv4 | BroadcastAddresses | Опубликованный для широковещательных интерфейсов. |
State:/Network/Interface/InterfaceName/IPv4 | DestAddresses | Опубликованный для интерфейсов точка-точка. |
State:/Network/Interface/InterfaceName/Link | Активный |
|
State:/Network/Interface | Интерфейсы | Это - массив имен интерфейса. |
Агент конфигурации IPv4
Агент конфигурации IPv4 конфигурирует устройства типа Ethernet для сетей IP. Когда предпочтительный монитор загружает обновленное отображение из персистентного хранилища в динамическую память, агент конфигурации IPv4 получает уведомление для каждой сконфигурированной службы. Это получает конфигурационную информацию от соответствующего Setup:
ключи и применяют ту конфигурацию к обозначенному интерфейсу. Это тогда обновляет динамическую память для отражения присвоенных фактических IP-адресов. Для некоторых конфигураций, таких как DHCP и BootP, агент конфигурации IPv4 также обновляет динамическую память с любыми параметрами конфигурации, которые это получило от сервера.
Когда пользователь переключает расположения или вносит изменение в предпочтения конфигурации IP в Сетевых предпочтениях, предпочтительный монитор загружает новые настройки в динамическую память. Агент конфигурации IPv4 получает уведомление об изменениях и обновляет конфигурацию сети согласно новым настройкам. Это тогда публикует новую информацию о состоянии сети в надлежащем State:
ключи.
Агент конфигурации IPv4 также наблюдает изменения в состоянии канала. Это делает это путем регистрации интереса в State:
вводит монитор события ядра публикует (показанный в Таблице 3-8). Когда компьютер включается в сеть, это поддерживает автоматическую конфигурацию сетевых интерфейсов. Таблица 3-9 показывает ключам использование агента конфигурации IPv4.
Ключ | Свойство | Примечания |
---|---|---|
State:/Network/Interface | Интерфейсы | Список сетевых интерфейсов. |
State:/Network/Interface/InterfaceName/Link | Активный | Состояние канала данного интерфейса. |
Setup:/Network/Global/IPv4 | ServiceOrder | Массив службы IDs, используемой для ранжирования и установления приоритетов. |
Setup:/Network/Service/ServiceID/Interface | DeviceName | Имя интерфейса BSD, которое будет сконфигурировано. |
Setup:/Network/Service/ServiceID/Interface | Ввести | Когда Тип является Ethernet, конфигурирует службы. |
Setup:/Network/Service/ServiceID/IPv4 | ConfigMethod | Руководство, BootP, DHCP, PPP, INFORM, LinkLocal. |
Setup:/Network/Service/ServiceID/IPv4 | Адреса | Для Руководства и INFORM, IP-адреса, который будет присвоен. |
Setup:/Network/Service/ServiceID/IPv4 | SubnetMasks | Для Руководства и INFORM, маски IP, которая будет присвоена. |
Агент конфигурации IPv4 также публикует значения в динамической памяти. Таблица 3-10 показывает ключи, которые агент конфигурации IPv4 публикует и обстоятельства, при которых это делает так.
Ключ | Свойство | Примечания |
---|---|---|
State:/Network/Service/ServiceID/IPv4 | Адреса | IP-адрес присвоился для этой службы. Для Руководства и INFORM, это должно быть тем же адресом, указанным в |
State:/Network/Service/ServiceID/IPv4 | SubnetMasks | Маска IP присвоилась для этой службы. Для Руководства и INFORM, это должно быть тем же адресом, указанным в |
State:/Network/Service/ServiceID/IPv4 | Маршрутизатор | |
State:/Network/Service/ServiceID/IPv4 | InterfaceName | Имя интерфейса BSD связалось с этой службой. |
State:/Network/Service/ServiceID/DNS | DomainName | Опубликованный, когда ConfigMethod является DHCP, BootP, или INFORM и требуемые данные были предоставлены сервером. |
State:/Network/Service/ServiceID/DNS | ServerAddresses | Опубликованный, когда ConfigMethod является DHCP, BootP, или INFORM и требуемые данные были предоставлены сервером. |
State:/Network/Service/ServiceID/NetInfo | ServerAddresses | Опубликованный, когда ConfigMethod является DHCP, BootP, или INFORM и требуемые данные были предоставлены сервером. |
State:/Network/Service/ServiceID/NetInfo | ServerTags | Опубликованный, когда ConfigMethod является DHCP, BootP, или INFORM и требуемые данные были предоставлены сервером. |
State:/Network/Service/ServiceID/DHCP | Специфичная для DHCP информация, такая как время владения. |
Агент конфигурации IPv6
Как агент конфигурации IPv4, агент конфигурации IPv6 также конфигурирует устройства типа Ethernet для сетей IP. Кроме того, агент конфигурации IPv6 конфигурирует устройства FireWire и новое 6to4 интерфейс. Когда предпочтительный монитор загружает обновленное отображение из персистентного хранилища в динамическую память, агент конфигурации IPv6 получает уведомление для каждой сконфигурированной службы. Это получает конфигурационную информацию от соответствующего Setup:
ключи и применяют ту конфигурацию к обозначенному интерфейсу. Это тогда обновляет динамическую память для отражения присвоенных фактических IP-адресов.
Агент конфигурации IPv6 также наблюдает изменения в состоянии канала. Это делает это путем регистрации интереса в State:
вводит монитор события ядра публикует (показанный в Таблице 3-8). Когда компьютер включается в сеть, это поддерживает автоматическую конфигурацию сетевых интерфейсов. Таблица 3-11 показывает ключам использование агента конфигурации IPv6.
Ключ | Свойство | Примечания |
---|---|---|
State:/Network/Global/IPv4 | PrimaryService | Используемый для определения, который интерфейс использовать для 6to4 туннелирование. |
State:/Network/Interface | Интерфейсы | Список сетевых интерфейсов. |
State:/Network/Interface/InterfaceName/IPv6 | Адреса | Руководство или автоматически присвоенный IP-адрес. |
State:/Network/Interface/InterfaceName/IPv6 | Флаги | Флаги специфических особенностей адреса. |
State:/Network/Interface/InterfaceName/IPv6 | PrefixLength | Длина префикса адреса или подсети. |
State:/Network/Interface/InterfaceName/IPv6 | Маршрутизатор | |
State:/Network/Interface/InterfaceName/Link | Активный | Состояние канала данного интерфейса. |
Setup:/Network/Service/ServiceID/IPv6 | Адреса | IP-адрес, который будет присвоен. |
Setup:/Network/Service/ServiceID/IPv6 | ConfigMethod | Автоматический, ручной, RouterAdvertisement, 6to4. |
Setup:/Network/Service/ServiceID/IPv6 | Флаги | Специфичные для адреса флаги. |
Setup:/Network/Service/ServiceID/IPv6 | PrefixLength | Длина префикса адреса или подсети. |
Setup:/Network/Service/ServiceID/IPv6 | Маршрутизатор | Таблица маршрутизации обновлений с маршрутом по умолчанию. |
Setup:/Network/Service/ServiceID/Interface | Ввести | Когда Тип является Ethernet, FireWire или 6to4, конфигурирует службы. Также конфигурирует службы IPv4 по FireWire. |
Setup:/Network/Service/ServiceID/6to4 | Реле | 6to4 релейный адрес. |
Агент конфигурации IPv6 также публикует значения в динамической памяти. Таблица 3-12 показывает ключи, которые агент конфигурации IPv6 публикует и для некоторых ключей, обстоятельств, при которых это делает так.
Ключ | Свойство | Примечания |
---|---|---|
State:/Network/Service/ServiceID/IPv6 | Адреса | |
State:/Network/Service/ServiceID/IPv6 | Флаги | |
State:/Network/Service/ServiceID/IPv6 | PrefixLength | |
State:/Network/Service/ServiceID/IPv6 | Маршрутизатор | Когда ConfigMethod является Ручным. |
State:/Network/Service/ServiceID/IPv6 | InterfaceName |
Монитор IP
Основное задание агента монитора IP должно выбрать основную сетевую службу. Это обычно - служба, связанная с маршрутом по умолчанию и DNS по умолчанию для системы. Для создания его определения агент монитора IP исследует и предпочтительный приоритет пользователя служб и текущий статус тех служб. Это тогда выбирает в настоящее время доступную службу, которая является самой высокой в списке приоритетов пользователя и отмечает ту службу как основную в динамической памяти.
Агент монитора IP управляется информацией, которую другие агенты публикуют в динамической памяти. Это контролирует предпочтения пользователя, отображенные в предпочтительным монитором и состоянием конфигурации служб, опубликованных IPv4 и агентами конфигурации IPv6 и контроллером PPP. Таблица 3-13 показывает ключам использование агента монитора IP.
Ключ | Свойство | Примечания |
---|---|---|
State:/Network/Interface/InterfaceName/Link | Активный | |
Setup:/Network/Global/IPv4 | ServiceOrder | |
Setup:/Network/Service/ServiceID/IPv4 | Маршрутизатор | Указанный пользователем. В целом эти настройки предпочтены по значениям, полученным на сеть. |
Setup:/Network/Service/ServiceID/DNS | DomainName | |
Setup:/Network/Service/ServiceID/DNS | ServerAddresses | |
Setup:/Network/Service/ServiceID/DNS | SearchDomains | |
Setup:/Network/Service/ServiceID/DNS | SortList | |
Setup:/Network/Service/ServiceID/NetInfo | BindingMethods | |
Setup:/Network/Service/ServiceID/NetInfo | ServerAddresses | |
Setup:/Network/Service/ServiceID/NetInfo | ServerTags | |
Setup:/Network/Service/ServiceID/Proxies | Все свойства | |
State:/Network/Service/ServiceID/IPv4 | Адреса | Настройки произошли из типа конфигурации. В целом, когда указанная пользователями установка недоступна, эти настройки используются. |
State:/Network/Service/ServiceID/IPv4 | Маршрутизатор | |
State:/Network/Service/ServiceID/DNS | DomainName | |
State:/Network/Service/ServiceID/DNS | ServerAddresses | |
State:/Network/Service/ServiceID/DNS | SearchDomains | |
State:/Network/Service/ServiceID/DNS | SortList | |
State:/Network/Service/ServiceID/NetInfo | ServerAddresses | |
State:/Network/Service/ServiceID/NetInfo | ServerTags | |
State:/Network/Service/ServiceID/Proxies | Все свойства |
Монитор IP также публикует значения в динамической памяти. Таблица 3-14 показывает ключи, которые монитор IP публикует и обстоятельства, при которых это делает так.
Ключ | Свойство | Примечания |
---|---|---|
State:/Network/Global/IPv4 | PrimaryService | Идентифицирует, какую сетевую службу считают основной. |
State:/Network/Global/IPv4 | PrimaryInterface | Идентифицирует, какой сетевой интерфейс считают основным. |
State:/Network/Global/IPv4 | Маршрутизатор | Таблица маршрутизации обновлений с маршрутом значения по умолчанию PrimaryService. Дескрипторы “проксируют arp”, включенный, если значение Маршрутизатора совпадает с одним из значений Адресов службы (включил автоматически, если Маршрутизатор не имеет никакого значения). |
State:/Network/Global/DNS | DomainName | Проверки каждое из свойств DNS для основной службы, одобряя свойство от |
State:/Network/Global/DNS | ServerAddresses | |
State:/Network/Global/DNS | SearchDomains | |
State:/Network/Global/DNS | SortList | |
State:/Network/Global/NetInfo | ServerAddresses | Генерирует список адресов сервера NetInfo и тегов сервера на основе информации о NetInfo основной службы. |
State:/Network/Global/NetInfo | ServerTags | |
State:/Network/Global/Proxies | Все свойства | При наличии, использует информацию основной службы прокси в |
State:/Network/Service/ServiceID/IPv6 | Маршрутизатор | Для ConfigMethod кроме Руководства. |
Контроллер PPP
Контроллер PPP конфигурирует интерфейсы PPP для сетей IP. Это управляет соединениями через модемы коммутируемого доступа и через PPP по Ethernet (PPPoE) и VPN (виртуальная частная сеть) соединения с помощью PPTP (протокол туннелирования точка-точка) и L2TP (протокол туннелирования уровня 2). Контроллер PPP взаимодействует с приложениями номеронабирателя и инстанцирует интерфейсов PPP по мере необходимости.
Контроллер PPP получает свою конфигурационную информацию от Setup:
ключи, предоставленные предпочтениями, контролируют, и получает уведомление, когда изменяются эти ключи. После того, как интерфейс сконфигурирован, контроллер PPP публикует IP, место назначения, и адреса маршрутизатора и информацию DNS, предоставленную сервером PPP. Таблица 3-15 показывает ключам использование контроллера PPP.
Ключ | Свойство | Примечания |
---|---|---|
Setup:/Network/Service/ServiceID/Interface | DeviceName | |
Setup:/Network/Service/ServiceID/Interface | Ввести | Конфигурирует службы с Типом PPP |
Setup:/Network/Service/ServiceID/Interface | SubType | PPPSerial, PPPoE, PPTP, L2TP |
Setup:/Network/Global/IPv4 | ServiceOrder | |
Setup:/Network/Service/ServiceID/PPP | Все свойства |
Контроллер PPP публикует много ключей в динамической памяти. Таблица 3-16 показывает некоторым из них.
Ключ | Свойство | Примечания |
---|---|---|
State:/Network/Service/ServiceID/IPv4 | Адреса | |
State:/Network/Service/ServiceID/IPv4 | DestAddresses | |
State:/Network/Service/ServiceID/IPv4 | Маршрутизатор | |
State:/Network/Service/ServiceID/IPv4 | InterfaceName | |
State:/Network/Service/ServiceID/DNS | DomainName | |
State:/Network/Service/ServiceID/DNS | ServerAddresses | |
State:/Network/Service/ServiceID/DNS | SearchDomains | |
State:/Network/Service/ServiceID/DNS | SortList | |
State:/Network/Service/ServiceID/PPP | Зарезервированный для использования Apple |
Используя схему
Предыдущий раздел описывает, как схема Конфигурации системы структурирует персистентное хранилище и какие комбинации значения ключа определяют наборы и определенные службы. Это - существенное знание для любого разработчика, пишущего приложение, определяющее набор или предоставляющее сетевую услугу, потому что информация должна быть представлена в правильном формате. Это - также существенное знание для разработчика приложения, запрашивающего подробную информацию соединения PPP, или это запрашивает уведомления. Это вызвано тем, что агенты конфигурации и динамическая память также придерживаются схемы. Необходимо ли зарегистрироваться для уведомлений или получить информацию о текущем состоянии соединения, необходимо знать, какие пары ключ/значение содержат данные, которыми Вы интересуетесь.
В этом разделе описываются три ситуации, в которых знание схемы важно.
Программно устанавливающие предпочтения
Платформа Конфигурации системы обеспечивает API, чтобы программно установить ключи и значения, определяющие наборы и службы. К сожалению, API является очень низким уровнем. По большей части это состоит из функций, чтобы получить и установить отдельные пары ключ/значение. Это не обеспечивает руководства о том, как разметить набор или словарь сетевой службы и никакую поддержку создания этих сложных структур.
Чтобы помочь удовлетворить потребности разработчиков, Техническая поддержка Разработчика Apple предоставляет крупной библиотеке примера кода, обертывающего часть низкоуровневой Конфигурации системы API в высокоуровневых функциях. Мало того, что эта библиотека изолирует Вас от большой части низкоуровневого манипулирования парами ключ/значение, это также обеспечивает оптимизированный шаблон, который можно использовать для определения базовой услуги. Когда Вы получаете эту работу базовой услуги, можно тогда настроить настройки, с помощью информации inLayout Персистентного Хранилища как руководство.
Библиотека примера кода, названная MoreSCF, содержит несколько модулей, помогающих Вам программно определить наборы, найти активные порты и активировать службы.
Получение подробной информации состояния соединения PPP
Платформа Конфигурации системы обеспечивает API, позволяющий Вам получать подробную информацию о текущем соединении PPP. Доступный в версии 10.3 OS X и позже, этот API предоставляет Вам доступ к информации, собранной контроллером PPP. Для использования этого API необходимо быть знакомы с расположением словаря сетевой службы и словаря объекта протоколов PPP, как определено схемой. Это вызвано тем, что информация, которую API возвращает Вам, следует за той же структурой.
Вспомните, что предпочтительный монитор читает персистентное хранилище и заполняет динамическую память со сглаженными ключами и значениями, описывающими в настоящее время активную конфигурацию пользователя. Эта информация находится в части установки динамической памяти, с помощью ключей, снабженных префиксом Setup:
(для получения дополнительной информации о том, как эти ключи создаются, видят Предпочтительный Монитор). Другие агенты конфигурации читают ключи установки, они интересуются, источники монитора информации о состоянии сети, и публикуют результаты своих наблюдений и действий конфигурации в части состояния динамической памяти. Несмотря на то, что заманчиво перейти непосредственно к динамической памяти и получить значение определенного ключа, в некоторых случаях, это не столь эффективно, как Вы могли бы ожидать.
В частности для получения текущего состояния PPP намного лучше использовать SCNetworkConnectionCopyExtendedStatus
функция в SCNetworkConnection API (определенный в SCNetworkConnection.h
файл в платформе Конфигурации системы). Используя эту функцию, можно получить очень подробную информацию состояния соединения от контроллера PPP, включая некоторую информацию, никогда не копирующуюся в часть состояния динамической памяти.
Например, когда пользователь принимает решение сделать соединение PPP через модем, существует несколько шагов, которые предпринимает модем, прежде чем соединение наконец установлено. Если Вы регистрируетесь для уведомления на Состоянии PPP, вводят динамическую память (State:/Network/Service/serviceID/PPP/Status
), Вы получите уведомление, когда будет обновлено значение этого ключа. При необходимости в информации о состоянии соединения раньше Вы могли бы принять решение получить значение ключа PPP Status сразу после того, как инициируется соединение. Когда Вы сделаете это, однако, Вы получите значение, Разъединенное, пока не завершается соединение. Это вызвано тем, что контроллер PPP не обновляет динамическую память ключ PPP Status, пока соединение не будет завершено. Если, вместо этого, Вы используете SCNetworkConnectionCopyExtendedStatus
функционируйте для запроса немедленного оповещения, Вы будете в состоянии наблюдать промежуточные состояния, те, которые Инициализируют, Подключение, Согласовывают, Аутентифицируют, и Связанный. Таким образом, чем если бы Вы просто следили за динамическим магазином, можно стать намного более подробными (и более точный) информация.
Важно помнить, что SCNetworkConnection API, как большая часть другой Конфигурации системы APIs, зависит от определенного с помощью схемы расположения словарей сетевой службы и динамической памяти. Когда Вы используете SCNetworkConnectionCopyExtendedStatus
функция для получения информации состояния соединения PPP Вы получаете словарь, содержащий подсловарь для каждого из субкомпонентов службы, таких как PPP, IPv4 и Модем. Для успешной интерпретации информации в этих словарях необходимо знать, как схема определяет расположение пар ключ/значение. Для получения дополнительной информации о структуре этих словарей посмотрите надлежащие разделы в Словаре NetworkServices.
Получение уведомлений
Понимание, как схема располагает информацию в динамическую память, дает Вам много питания. В частности это предоставляет Вам доступ к большой низкоуровневой информации о состоянии сети. С другой стороны, это также способствует понятию, что необходимо быть уделением внимания каждой мелочи в состоянии сети. Очевидно, Вы могли записать приложение, наблюдающее большие количества ключей и предоставляющее пользователю постоянные обновления на каждом изменении состояния сети. Это редко необходимо, однако, и это не желательно.
Несмотря на то, что платформа Конфигурации системы позволяет Вам запросить информацию на этом уровне, это также обеспечивает APIs, что краткий обзор часть его и обеспечивает его в более приемлемых формах. Поэтому важно знать, когда является надлежащим запросить уведомления на отдельных ключах и когда является надлежащим использовать API для получения информации.
Например, если Ваше приложение должно знать об изменениях в сетевых настройках прокси, в то время как оно работает, необходимо наблюдать ключ динамической памяти, связанный с сетевыми настройками прокси. Это, гарантирует, чтобы Вы получили уведомление, когда изменяется любая из этих настроек. Если, вместо этого, Вы вызываете SCDynamicStoreCopyProxies
функция для получения настроек прокси в силе, когда приложение запустится Вы не будете уведомлены относительно изменений как Ваше выполнение приложения.
С другой стороны, наблюдая ключи конфигурации ( Setup:
ключи в динамической памяти), обычно плохая идея, если Вы не разрабатываете агент конфигурации. Это вызвано тем, что Ваше приложение не имеет никакого способа знать, если, или что еще более важно когда, изменения конфигурации отражаются в рабочей конфигурации системы.