Компоненты платформы конфигурации системы
При разработке приложения конфигурации сети необходимо знать, как компоненты платформы Конфигурации системы сотрудничают и как приложение взаимодействует с ними. В этой главе описываются каждый компонент более подробно.
При разработке сетевого осведомленного приложения Вам не нужна всесторонняя информация о динамических и персистентных хранилищах, схеме или агентах конфигурации. Вместо этого необходимо сконцентрировать на достижимости и соединении APIs, описанный в Определении Достижимости и быть соединенным.
Персистентное хранилище
Персистентное хранилище содержит сетевые предпочтения, установленные пользователем и приложениями, конфигурирующими сетевые службы. Это - иерархически структурированная база данных, содержащая конфигурационную информацию для всех расположений, служб и интерфейсов, определенных в системе, в настоящее время активны ли они. Информация хранится в большом словаре ключей (типы CFString) и значения (типы CFPropertyList, обычно типы CFDictionary). Схема Конфигурации системы (описанный в Схеме: Иерархия и Определения), диктует точные комбинации пар ключ/значение, требуемых определить каждую службу и объект. Словарь сохраняется как XML-файл, в версии 10.3 OS X и выше, в настоящее время находящийся в расположении по умолчанию /Library/Preferences/SystemConfiguration/preferences.plist
. (Расположение по умолчанию в более ранних версиях OS X /var/db/SystemConfiguration/preferences.xml
.)
Этот раздел представляет обзор персистентного хранилища, фокусирующегося на предпочтениях верхнего уровня. При разработке приложения конфигурации сети необходимо знать, как определить службу с помощью определенных пар ключ/значение. Для получения дополнительной информации о точном расположении предпочтений см. Схему Конфигурации системы.
В настоящее время персистентное хранилище содержит четыре предпочтения верхнего уровня:
Наборы. CFDictionary возражает, что перечисляет все расположения, в настоящее время конфигурируемые в системе, такие как Office или Домой. Существует набор того для каждого расположения. (Вспомните, что «расположение» относится к видимой пользователем конфигурации сетевой среды.)
CurrentSet. Объект CFString, содержащий идентификационные данные в настоящее время активного расположения (элемент словаря Наборов).
NetworkServices. Объект CFDictionary, содержащий полный список сетевых служб, определенных для всех наборов. Каждая служба содержит объекты протоколов, определенные для той службы.
Система. Объект CFDictionary, содержащий конфигурационную информацию, которая специфична для системы, а не специфична для расположения, такова как имя компьютера.
Вместе, эти четыре предпочтения описывают конфигурации всех расположений и сетевых служб в системе. При установке Пакета средств разработки можно использовать Редактора Списка свойств приложение (расположенный в /Developer/Applications/Utilities/Property List Editor
) исследовать персистентное хранилище на Вашем компьютере. Например, рисунок 2-1 показывает часть персистентного хранилища от компьютера вымышленного руководителя Марии (представленный в Примере Мобильности), как выведено на экран Редактором Списка свойств:
Как Вы видите на рисунке 2-1, предпочтение верхнего уровня, CurrentSet содержит строку, относящуюся к элементу словаря Наборов (в этом примере, в настоящее время активное расположение является Office).
Словарь Наборов содержит подсловарь, представляющий набор, связанный с каждым расположением, которое Мария определила в своей системе. На рисунке 2-1 Вы видите словари для Office расположений, Оффлайн, и Домой.
Словарь NetworkServices содержит подсловарь для каждой сетевой службы, определенной на компьютере Марии. Заметьте, что на рисунке 2-1, словарь NetworkServices содержит только словари, представляющие эти три службы, перечисленные в Местоположении станции; службы, перечисленные в других расположениях, не показаны. Каждый подсловарь службы в словаре NetworkServices идентифицируется строкой уникального идентификатора. Эти Строки идентификатора не имеют никакого свойственного значения и не связаны с видимым пользователем именем для службы или расположения. В версии 10.3 OS X и выше, Строки идентификатора часто состоят из GUID или глобально уникального идентификатора.
Каждый подсловарь сетевой службы содержит конфигурационную информацию для всех объектов, связанных с той службой, таких как PPP или AppleTalk. Информация в масштабе всей системы в Системном словаре состоит из имени компьютера (“Компьютер Марии”) и локальное имя хоста («Marias-компьютер»).
Динамическая память
В рабочей системе OS X динамическая память содержит снимок текущего состояния сети. Это также содержит копию предпочтений, определяющих в настоящее время активную конфигурацию. Поскольку это содержит текущую конфигурацию, в противоположность всем конфигурациям, которые определил пользователь, эта часть динамической памяти является подмножеством персистентного хранилища. Также, иерархическая структура динамической памяти и комбинации пар ключ/значение также определяются схемой Конфигурации системы.
Различные агенты конфигурации (представленный в Агентах Конфигурации) совершенствуют динамическую память. Чтобы сделать это, они используют информацию в некоторых ключах для решения, что сделать, и они публикуют результаты своих действий в других ключах. Это взаимодействие между агентами конфигурации и динамической памятью является продолжающимся процессом и не ограничивается начальной конфигурацией сетевых служб, происходящей, когда Вы включаете свой компьютер. Вместо этого агенты конфигурации обновляют динамическую память каждый раз, когда система или сетевые события влияют на состояние существующей системы. Возможность динамической памяти отразить состояние существующей системы в основе сетевой мобильности OS X.
В дополнение к содержанию текущего состояния сети динамическая память обеспечивает уровень абстракции между низкоуровневыми сетями и системными событиями и приложениями, которые должны знать о них. Например, при отключении кабеля Ethernet, агент конфигурации получает эту информацию от низкоуровневого события ядра и обновляет значение надлежащего ключа динамической памяти. Через динамическую память приложение может получить эту информацию, не имея необходимость контролировать низкоуровневые системные события. Это вызвано тем, что платформа Конфигурации системы предоставляет услуги уведомления, позволяющие приложению регистрировать интерес к определенным ключам. Когда значение ключа изменяется, заинтересованное приложение уведомляется, что произошло изменение. Это - тогда ответственность приложения проверить значение ключа.
Несмотря на то, что можно зарегистрировать интерес к любому ключу, лучше быть очень выборочным об уведомлениях, которые Вы принимаете решение получить. С одной стороны, чтобы быть уверенными Вы наблюдаете корректный ключ и интерпретировать информацию, которую Вы получаете от него, Вам нужно детальное знание сложной схемы Конфигурации системы. Во многих случаях можно использовать Конфигурацию системы APIs для получения уведомлений об определенных событиях, не обращаясь к наблюдению отдельных ключей. Для получения информации о части этого APIs посмотрите Конфигурацию системы APIs и Определение Достижимости и быть соединенным.
Схема: иерархия и определения
Схема Конфигурации системы описывает сложное иерархическое расположение персистентных и динамических хранилищ. В дополнение к наложению полной структуры схема также определяет точные комбинации пар ключ/значение, описывающих все службы, доступные в системе. Все агенты конфигурации должны полностью понять часть схемы, определяющей их сферу интересов, чтобы быть в состоянии считать и правильно обновить динамическую память.
Несмотря на то, что схема не является частной системой API, это - очень низкий уровень. Как можно больше, приложение должно избежать зависеть непосредственно от схемы и использовать высокоуровневые интерфейсы вместо этого. Например, сетевое осведомленное приложение может использовать службы уведомления в достижимости и соединении APIs вместо того, чтобы запросить уведомления на определенных ключах, которые определяет схема. Однако для некоторых приложений это не опция. Приложение конфигурации сети, например, должно объединить корректные пары ключ/значение для определения новых расположений и служб. Разработчики таких приложений должны считать Схему Конфигурации системы для получения дополнительной информации о том, как схема определяет определенные службы.
SCSchemaDefinitions.h
файл в платформе Конфигурации системы определяет ключи и оценивает использование схемы, но не указывает, как они используются. В этом разделе приведены краткий обзор типов ключей и значений, которые Вы находите в SCSchemaDefinitions.h
файл. Дополнительные сведения о ключах и значениях схемы см. в Схеме Конфигурации системы.
SCSchemaDefinitions.h
группы файлов ключи и значения в следующие типы:
Универсальные ключи. Это ключи, такой как
kSCPropUserDefinedName
иkSCPropVersion
, это может использоваться на разных уровнях в персистентном хранилище. Например,kSCPropUserDefinedName
надлежащий ключ и для словаря службы и для словаря расположения.Предпочтительные ключи. Эти ключи определяют предпочтения верхнего уровня в персистентном хранилище, такой как
kSCPrefCurrentSet
иkSCPrefSystem
. (Предпочтения верхнего уровня описаны в Персистентном Хранилище.)Ключи компонента. Эти ключи определяют основные категории в динамических и персистентных хранилищах, такой как
kSCCompSystem
иkSCCompInterface
.Ключи объекта. Ключи объекта называют сетевые объекты, такой как
kSCEntNetIPv4
иkSCEntNetDNS
.Ключи свойства. Эти ключи идентифицируют свойства для каждого объекта, такие как IPv4
kSCPropNetIPv4ConfigMethod
свойство.Ключи значения. Эти ключи обеспечивают надлежащие значения для определенных ключей свойства. Например,
kSCValNetIPv4ConfigMethodBOOTP
возможное значение для IPv4kSCPropNetIPv4ConfigMethod
свойство.
Агенты конфигурации
Платформа Конфигурации системы связывается с демоном системного уровня, configd
, управлять конфигурацией сети. Когда Вы включаете свой компьютер, configd
выполнения рано в процессе начальной загрузки для конфигурирования сети. Держать данные состояния сети в курсе, configd
инициализирует динамическую память и загружает агенты конфигурации как пакеты (или плагины). Эти агенты, выполненные в configd
пространство памяти, как часть его процесса. Каждый агент ответственен за четко определенный аспект управления конфигурацией, таков как IPv4 или PPP. Агент следит за развитием низкоуровневых событий ядра, соответствующих источников конфигурации, и состояния, о котором сообщают другие агенты конфигурации, чтобы сконфигурировать ее сферу интересов и обновить динамическую память.
Для передачи с динамической памятью агенты конфигурации используют ключи и значения, определенные в SCSchemaDefinitions.h
файл и следует за иерархией, определенной схемой Конфигурации системы. Каждый агент понимает четко определенное подмножество пар ключ/значение, касающееся его сферы интересов. Агент использует некоторые ключи для получения конфигурационной информации и других для публикации результатов событий, которые это обнаруживает и меры, которые это принимает.
В OS X, configd
загрузки несколько агентов конфигурации, некоторые из которых представляют внутренний интерес только. Ваше приложение могло бы знать о следующих агентах конфигурации:
Предпочтительный монитор. Заполняет динамическую память с предпочтениями, связанными с в настоящее время активным набором конфигурации (указанный в предпочтении CurrentSet пользователя).
Монитор события Kernel. Поддерживает информацию о сетевых интерфейсах, определенных в системе, и следит за развитием низкоуровневых событий ядра.
Агент конфигурации IPv4. Конфигурирует устройства типа Ethernet для сетей IP.
Агент конфигурации IPv6. Конфигурирует устройства типа Ethernet, устройства FireWire, и 6to4 интерфейсы для сетей IP.
Монитор IP. Выбирает основную сетевую службу (служба, связанная с маршрутом по умолчанию и DNS по умолчанию для системы).
Контроллер PPP. Конфигурирует интерфейсы PPP для сетей IP.
Для получения дополнительной информации об этих агентах конфигурации и определенных ключах и значениях они используют, видят Поведение Агентов Конфигурации.