SYSTEM ARCHITECTURE COUNCIL
                           Platform Software ARC
                     ---------------------------------
PSARC Regular Meeting time: Wednesdays 10:00-1:00pm in MPK17-3507.

                           07-22-2009 MEETING MINUTES
============================================================================
Send CORRECTIONS, additions, deletions to psarc-coord at sun.com.

Co-Chair(s):
         Garrett D'Amore:        Yes
         Tim Marsland:           no

ATTENDEES - Members: (6 active members)
         Kais Belgaied:          Yes
         Mark Carlson:           no
         Richard Matthews:       Yes
         Darren Moffat:          no  (on sabbatical)
         Sebastien Roy:          Yes
         Glenn Skinner:          Yes
         Bill Sommerfeld:        no  (on sabbatical)
         Gary Winiger:           Yes  (on sabbatical)

STAFF -
         Asa Romberger (PM):     Yes

ATTENDEES - Interns:
         Frank Che               no
         Charles Debardeleben:   no
         James Falkner:          no (on sabbatical)
         Daniel Hain:            Yes
         Michael Haines:         no
         Alan Hargreaves:        no
         Phil Harman:            no
         Cecilia Hu:             no
         Wyllys Ingersoll:       no
         Alec Muffett:           no (on sabbatical)
         Darren Reed:            no
         Dean Roehrich           no
         Ienup Sung:             no
         Phi Tran                Yes
         Brian Utterback:        no
         James Walker            Yes

         Mark Martin             Yes (external)
         Don Cragun              Yes (external)
Guests:

-- GUESTS --
         Colin Zou               Yes
         Menno Lageman           Yes
         Jordan Brown            Yes
         Govinda Tatti           Yes
         Alan Perry              Yes
         Scott Carter            Yes
         Wesley Shao             Yes

Not all names are captured. Please send email to Asa.Romberger at Sun.com, if
you attended the meeting and your name is missing from the list.

---------------------------------------------------------------------------

MEETING SUMMARY:
================

AGENDA

         10:00-10:10     Open ARC Business (use open dial in above)
         10:10-10:55     Open Commitment: Solaris Hotplug Framework
(2008/181)
                         Submitter:      Colin Zou
                         Owner:          Garrett D'Amore
                         Intern:         Phi Tran
                         Exposure:       open
         10:55-11:40     Open Inception: Clearview IP Tunneling (2009/373)
                         Submitter:      Sebastien Roy
                         Owner:          Sebastien Roy
                         Exposure:       open
         11:45-11:55     Closed ARC Business (use closed dial in above)

===========================================================================

Fast Tracks:
============

      Case     (Timeout)  Exposure Title
      2009/374 (07/08/09) open     libxmlsec
         approved
      2009/388 (07/29/09) open     VRRP Update
         let run
      2009/392 (07/20/09) open     prctl usage output
         approved
      2009/394 (07/21/09) open     SATA Framework Port Multiplier Support
         approved
      2009/395 (07/22/09) open     Add gnuplot command to Solaris WOS
         approved
      2009/397 (07/23/09) open     GnuPG and friends
         approved
      2009/398 (07/23/09) open     IDMU Support for idmap
         approved
      2009/401 (07/27/09) open     Fibre Channel port link reinitialize
support
         approved
      2009/406 (07/28/09) open     fakeroot
         approved

===========================================================================

Name:           Solaris Hotplug Framework
Submitter:      Colin Zou
Owner:          Garrett D'Amore
Intern:         Phi Tran
Exposure:       open

SUMMARY
=======
         The main goal of this project is to provide a generic common 
Solaris
         hotplug framework, a foundation which can support hotplug 
functionality
         for any hotpluggable bus. The key features include:

         o A state machine based, bus independent hotplug framework 
which will
           interact with other frameworks (such as PM, FMA and Devfs). 
It will
           manage the hotplug slot states, interact with bus specific 
hotplug
           controller modules and configuators (including kernel driven
           auto-configuration), deliver hotplug events through the Device
           Contract, LDI and Sysevent frameworks, and handle all user 
initiated
           hotplug operations.

         o Well defined, common interfaces to the physical and virtual 
hotplug
           controller drivers. This will simplify writing a new driver with
           hotplug controller functionality, because drivers can 
implement their
           hotplug requirements by calling into the new framework.

         o DDI hotplug interfaces for leaf device drivers to support 
features
           such as surprise removal, hot replacement, dynamic resource 
re-balance          etc., and framework notification of any asynchronous 
events such as
           errors and brute force user operations.

           At the same time, the new hotplug framework will be 
compatible with
           existing DDI compliant leaf device drivers.

         o A new resource allocator, which will manage bus resources through
           device tree and provides support for dynamic resource re-balance
           operations.

         o Generic hotplug management interfaces, so that various types of
           management applications, including GUIs, can be written to these
           interfaces. The project will deliver a new GUI based hotplug tool
           and may also modify cfgadm or deliver a new command line 
(CLI) tool.

         o A hotplug daemon to deliver hotplug events to all hotplug aware
           applications and userland modules through Device Contract and
           Sysevent frameworks.

         o Support for PCI (SHPC based) and PCI Express hotplug 
functionality
           under the new Solaris Hotplug Framework. In addition, a set 
of new
           features will be supported such as surprise removal, hot 
replacement,
           power fault, hotplug FMA, and hotplug operation on an individual
           device or function in addition to slot or attachment point.

           Please note that the old or proprietary hotplug functionality 
will
           not be migrated to new hotplug framework.

         o Support hotplug under virtual environment like IOV, Ldoms, 
Xen etc.
           Supporting hotplug for virtualized devices requires a virtual 
hotplug
           controller driver.  These virtual HPC drivers may use different
           interfaces or methods for accessing physical/IOV compliant 
devices
           (v/s para-virtualized (PV) devices).

         The project will be implemented and delivered in multiple 
phases due to
         the priority of some key features & time constraints. For 
clarification
         of the big picture, all phases are presented here. However, the 
scope of        ARC review requested for this case is limited to the 
first phase. The
         full definition of other phases including resources and 
schedules are
         not known at this time. Subsequent ARC cases will be submitted when
         subsequent project phases commence.

         o Phase-I:
           Support existing standard PCI, Native and ACPI based PCI Express
           hotplug functionality under the new Solaris Hotplug Framework 
along
           with several new key features such as:
           - New hotplug DDI interfaces for leaf drivers
           - New resource allocator interfaces
           - Kernel initiated auto-configuration
           - Hotplug events through device contract, LDI and sysevent 
frameworks
           - Dynamic resource re-balance
           - Surprise removal, hot replacement, hotplug FMA
           - Modified cfgadm or new userland admin tool (CLI)

         o Phase-II:
           - Support hotplug under virtual environments such as IOV, 
Ldoms, Xen
           - Support for a GUI admin tool

           Please note that the virtual hotplug support may get delivered as
           part of phase-I if required (based on its priority and resource
           availability).

         o Phase-III:
           - Support for Express Card

ISSUES
=======
gw-99   Sorry for the late and parochial issues, but I'm still officially
         on sabbatical.  And I still seem to be the first in the fine.

gw-1    How does this play with devkit, device allocation, SunRay?

gw-2    This project seems to require administrative audit, yet there
         is no mention.  See the 20 Questions (and Solaris Audit Policy).

gw-3    What is the method context for the service?
         Are there any properties?  Is this enabled by the profile?
         Is there any reason to ever disable it manually?

gw-4    Root is not a privilege (nor is uid 0 special) why isn't
         this authorization driven?  Just how are you doing access
         control?   Access control decisions also require audit.

gw-5    I'm dubious about the Patch binding.  Verify with the Solaris
         Evaluations and Trusted Extensions project teams that this is
         appropriate for a Patch.  The manager is Craig Payne.

gw-6    What would be the meaning of "remote clients".  INET sockets
         should be avoided as they add an attack vector.  I'm still
         dubious about doors being complex.

gw-7    What is the compelling reason that RBAC must be postponed?
         How is the project complete without meeting the Solaris
         Policies?  Is a PAC waver going to be requested?

gw-99a  userland:  RBAC is not authentication, in this case it is
         authorization based access control.

gw-1 How does this play with devkit, device allocation, SunRay?

All the above are investigated. They are out of scope of this project and
there are no conflicts. Details see following:
- devkit:
It is being ported to Solaris and is similar as HAL regarding as
functionality and interface dependencies. It is a userland utility which is
going to depend on libdevinfo and libsysevent. It gets device information
from libdevinfo and listens to sysevents for device add/remove events. This
project does not break the existing interfaces which devkit will depend on.
I've talked to the devkit team and confirmed this.

- device allocation:
It "manages the ownership of devices". It depends on devfs interfaces. This
project implements hotplug controller drivers and framework which are in
the kernel device driver level which is under devfs. So it does not impacts
device allocation. The userland administer tool introduced by this project
is used to issue commands to kernel drivers to hot add/remove devices
to/from the "system". It is not related with user ownerships. And the tool
will conform to RBAC, so only a user with proper authorizations can issue
commands to hotplug devices to/from the system. This prevents the tool from
conflicting/breaking device allocation.

- SunRay: Sun Ray client is not related. Sun Ray server is a userland
application which can run on Solaris and Linux. It manages remote devices
on Sun Ray clients including hotplug operations. However, Sun Ray server is
an independent userland application which does not interact with Solaris
hotplug framework or device drivers. For example, if a usb keyboard is
plugged to a Sun Ray client, the Sun Ray server gets the event from network
and starts a userland process to deal with the hotplug event. And then a
Sun Ray specific userland usb device driver works for the device. Sun Ray
support is out of scope of this Solaris project.

gw-2 This project seems to require administrative audit, yet there
is no mention. See the 20 Questions (and Solaris Audit Policy).

In scope.  See section 3.1.7 and 3.3.8 of "Userland Components of Solaris
Hotplug" document (file:  shp-userland.txt).

gw-3 What is the method context for the service?
Are there any properties? Is this enabled by the profile?
Is there any reason to ever disable it manually?

In scope. See section 3.3 of "Userland Components of Solaris Hotplug"
document (file: shp-userland.txt).

gw-4 Root is not a privilege (nor is uid 0 special) why isn't
this authorization driven? Just how are you doing access
control? Access control decisions also require audit.

In scope. See section 3.1.5, 3.2.1, 3.3.1 and 3.3.7 of document
"Userland Components of Solaris Hotplug" (file: shp-userland.txt).

gw-5 I'm dubious about the Patch binding. Verify with the Solaris
Evaluations and Trusted Extensions project teams that this is
appropriate for a Patch. The manager is Craig Payne.

Hotpug project team got comments from Craig's team for this issue:

"The TX implementation of device allocation for hotlug doesn't rely on
cfgadm directly. Instead it relies on devfsadm which relies on HAL. I
can't find any reference in the project materials to devfsadm. That
is the interface we care about since that is where entries get added
to the device allocation files. Do devices managed via the new
hotplug framework still go through devfsadm processing? If so, then
this project seems to be compatible with existing functionality. But
it should be required to verify that by testing with Trusted
Extensions enabled. "

The project team's answer to the above question is:
"Yes, they still go through devfsadm processing."

So it is understood that this project is OK to co-exist with TX and have
a Patch binding.

And the project team  will do the tests with Trusted Extensions enabled.

For reference, the following are more investigation results from
hotplug project team on this issue:
There are mainly two parts of this project, one is to implement hotplug
controller drivers and framework in the kernel device driver level;
another is the userland administer tool to issue commands to the kernel
drivers to initiate the operation of hot add/remove device to/from the
system. All these jobs are not directly related with "Solaris Evaluations
and Trusted Extensions project". Our userland administer tool will
conform to RBAC, so that only users with proper authorizations can
perform the device hotplug operations for a system. Given these, we
didn't see any risks that our project would break "Solaris Evaluations
and Trusted Extensions project". And, for a reference of the existing
stuff, cfgadm(1M) is the existing framework which does the similar
functionality. It co-exists with TX for many years.

gw-6 What would be the meaning of "remote clients". INET sockets
should be avoided as they add an attack vector. I'm still
dubious about doors being complex.

The project team turns to door in commitment documents. See section 3.3.2
of "Userland Components of Solaris Hotplug" document (file: 
shp-userland.txt).

gw-7 What is the compelling reason that RBAC must be postponed?
How is the project complete without meeting the Solaris
Policies? Is a PAC waver going to be requested?

RBAC will be supported. See section 3.1.5, 3.2.1, 3.3.1 and 3.3.7 of 
document
"Userland Components of Solaris Hotplug" (file: shp-userland.txt).

pt-1 Why does the hotplug daemon need to run with all privileges?

The existing software stack for DR and hotplugging is based upon cfgadm(1M),
libcfgadm plugins, and calls to the RCM framework.  The diversity of client
scripts and plugins for the RCM framework complicates the issue of trying
to determine the exact privileges needed.  Different plugins or scripts may
need different privileges to function properly.  And the RCM scripting API
is a public interface.  We could not really know exactly what privileges
are required by customer scripts in the field.  It would be a long term
maintenance nightmare to try and specify a minimized set of privileges
needed by the RCM daemon to cope with the needs of its client plugins and
scripts.  (Especially since any customer could write a new RCM script that
needs a new privilege we didn't think we needed.)

This is the problem as I understand it.  It's possible that my understanding
of how privileges and authorizations are inherited by fork()'ed processes is
incorrect.  I am not totally certain about it.  Because, you see, there was
an effort to investigate and possibly solve this issue, but it was abandoned
before all the investigations were completed.  An agreement was reached by
upper management to defund further enhancements of this nature to the 
existing
software stack.  See the 1-pager about the original investigation, and then
see section 2.3.2 of the agreement that was eventually reached:

http://esp.west/espsw/msw/rm-dr/ProjectStatus/BugCourt/DRCE/docs/lp-1pager.txt
http://esp.west/espsw/msw/rm-dr/ProjectStatus/BugCourt/DRCE/docs/DRtransitionplan.pdf

I don't think our situation is hopeless here because our architecture is
different.  The problem with cfgadm as I understand it is that everything
depends upon the user who runs a cfgadm command, and the privileges that
are then inherited from there by all other parts of the stack.  In our
architecture we have separate address spaces and inserted a controlled door
interface between those address spaces, so that we don't have the same kind
of problem about inherited privileges.

For example, if a user runs cfgadm(1M), it links a libcfgadm plugin into
that same cfgadm(1M) address space.  That libcfgadm plugin then calls the
librcm interface to communicate with RCM.  The librcm library will fork()
a new process to run the RCM daemon on demand for each operation.  First,
librcm checks that the user is running as 'root' before it tries to fork().
Second, if any privileges were dropped before the fork(), I think it would
limit what the RCM daemon could then do when it runs.

In our architecture, the hotplug(1M) CLI uses libhotplug.so to communicate
through a private door interface to the hotplugd(1M) daemon.  No privileges
are required, except certain RBAC authorizations are required.  The CLI and
the library perform the RBAC checks before making a door call to the daemon.
And the daemon makes the same RBAC checks using the credentials of each
incoming door call.  The only way to make the hotplugd(1M) daemon do 
anything
is through that controlled door interface, which is protected by RBAC.  And
then the hotplugd(1M) will only do very specific things in response to those
door calls.  In some cases, the hotplugd(1M) responds to the door call by
doing certain operations that require RCM interactions.  But it has full
privileges so that the RCM daemon will inherit them and function properly
in those cases.

So that's why I tried to say we're keeping with the spirit of the principle
of least privilege in our architecture.  The old model required you to run
as root with full privileges in order to do a cfgadm state change operation.
Our new model let's you grant a specific RBAC authorization to an ordinary
user permitting them to perform hotplug operations, without giving them the
full privileges that cfgadm used to require.



Commitment issues 07/22/2009
gw-8    What's the requirement for the read authorization?
         What data is being protected from viewing?

         TCR: Delete read authorization or justify

gw-9    I find the description of where (non-smf) authorizations are being
         checked confusing: authorizations are to be checked at the point
         of access control enforcement.  Presumably this is in the hotplug
         service (hotplugd).
         Where and how is access control being enforced?

         AI: Review doc, include clear description of audit and 
authorization
         checks (includes gw-10)

gw-10   I find the description of where (non-smf) Solaris Audit take place
         confusing: Audit is to take place (with the calling user's Audit
         context) at the policy enforcement point.  Presumably this is 
in the
         hotplug service (hotplugd).  Audit records are to conform with the
         Solaris Audit Policy through the use of PSARC/2000/517 Thread-safe
         audit API and with a conforming contract as noted in PSARC/2003/397
         Contracted audit interfaces for open source.
         Where and how is Audit being done?

gw-11   Nit: solaris.smf.manage.hotplug probably should follow the
         example found in the SMF policy for the general/framework
         property.

         Policy section 3.3.1

gw-12   All the interfaces seem to be Consolidation Private.  How
         does this permit management of the authorizations?  I'd
         expect some of the interfaces to be Committed, some to be
         Project Private and maybe some Consolidation Private.

         Review interface table

gw-13   hotplug(1m) Evolving -> Committed?
         Some mention should be made of the Rights Profile (i.e., interface)
         required to successfully manage hotpluging.
         Why are there --long options?

         see cfgadm as example

ged-01  In shp-userland.txt, why are you delivering the libhotplug headers.
         Private headers need not be delivered to end-users.  Especially I
         would not deliver the _impl.h, since its internal use only 
within ON.

Okay, not delivering the header files sounds right.  At least not
delivering the libhotplug_impl.h.  The libhotplug interfaces are
all "Consolidation Private" in phase 1, at least.  I think we might
increase the interface stability in phase 2.  So I'm not entirely
sure yet about libhotplug.h.  Let's defer a final decision until the
meeting, so no updates to the materials yet.

ged-02  It seems like changestate is a bit awkward/counterintuitive to admin
         users (at least from my read).

         I'd recommend new commands instead:

            "enable", "disable", "power_off", "power_on" for connectors

         for ports, "attach" and "detach" seem enough... is there a need for
         administrators to enter the initialize state explicitly?  (That
         doesn't make a lot of sense to me.)

ged-03  In shp-overview.pdf, it seems like you could predefine some more 
values
         for DDI_HP_CN_TYPE... I'd like to see types for USB, PCMCIA, 
CARDBUS,
         FIREWIRE, SCSI, FC, IB, and SDCARD.  These are the types of 
devices in
         Solaris that have some form of hotplug support via cfgadm. 
(They might
         not be implemented, but reserving the name space still seems like a
         good idea to me.)

The team's response is that we do not yet have enough information on
which buses will be supported by the new hotplug framework, or how
exactly that support would be implemented.  It might be premature to
reserve such namespaces.  Also, there is a concern we might reserve
namespaces incorrectly if we try doing it now.

One example cited within the team was with USB.  Would we want to
reserve a single value for USB right now?  What if we implement the
USB support and instead realize we want separate values for each
version of USB?

seb-01  What stability level are the options that the -o argument to
         the hotplug command operates on?  They're not documented in
         the man page.  How are users expected to know their semantics?

VOTE
====
Approve -
Deny -
Abstain -
Not Participating (NP) -



THE NEXT STEP
=============
         Spec and AI resolution needed for vote, work with sponsor

===========================================================================

Name:           Clearview IP Tunneling
Submitter:      Sebastien Roy
Owner:          Sebastien Roy
Exposure:       open

SUMMARY
=======
       This project is a redesign and reimplementation of the IP
       tunneling functionality in Solaris.  It delivers a GLDv3 driver
       (iptun) that implements IP tunnel links atop which IP interfaces
       can be plumbed.  Tunnel links are managed using new dladm(1M)
       subroutines (implemented using new libdladm functions), and IP
       interfaces above tunnel links are created using ifconfig(1M) as
       with any other type of IP interface.

       It replaces the old STREAMS-based IP tunneling implementation
       which depended on the ifconfig(1M) command to plumb tunneling
       modules (tun, atun, and 6to4tun) atop of /dev/ip or /dev/ip6.

       With this project, tunnel links gain functionality common to
       other links, including link vanity naming (introduced by
       Clearview in PSARC 2006/499), link-layer observability using
       traditional observability tools such as Wireshark and snoop(1M),
       and the assignment of tunnel links to exclusive stack non-global
       zones.


ISSUES
======

kb-00   It seems to me that we've got two distinct cases here:
         (1) datalinks control from non global zones
         (2) Clearview IP Tunneling
         case (1) brings sufficiently complex architectural changes and is
         independant from (2) to warrant a separate case.
         Keeping these together also increases the risk of making (1)'s
         choices taylored to (2)'s needs.

         split them

kb-01   How does information float from the lower IP to the upper one across
         the tun mac provider
         - support of LSO
         - MTU
         I'm thinking of the cases where MTU for example changes because
         the outer header for a tunnel get re-routed through an interface
         with a different MTU

         Spec update

kb-02   For IPsec tunnels created from the non global zone. I am not 
clear on
         how the global zone sees the keys for encrypting and/or 
authenticating
         the payload.


THE NEXT STEP
=============
         commitment review


Reply via email to