Print this page
OS-3524 in order to support interaction with docker containers, need to be able to connect to stdio for init from GZ
OS-3525 in order to support 'docker logs' need to be able to get stdio from zone to log file
OS-3294 add support for inotify
Reviewed by: Jerry Jelinek <jerry.jelinek@joyent.com>
Reviewed by: Robert Mustacchi <rm@joyent.com>

Split Close
Expand all
Collapse all
          --- old/usr/src/cmd/devfsadm/misc_link.c
          +++ new/usr/src/cmd/devfsadm/misc_link.c
↓ open down ↓ 24 lines elided ↑ open up ↑
  25   25   */
  26   26  
  27   27  #include <regex.h>
  28   28  #include <devfsadm.h>
  29   29  #include <stdio.h>
  30   30  #include <strings.h>
  31   31  #include <stdlib.h>
  32   32  #include <limits.h>
  33   33  #include <sys/zone.h>
  34   34  #include <sys/zcons.h>
       35 +#include <sys/zfd.h>
  35   36  #include <sys/cpuid_drv.h>
  36   37  
  37   38  static int display(di_minor_t minor, di_node_t node);
  38   39  static int parallel(di_minor_t minor, di_node_t node);
  39   40  static int node_slash_minor(di_minor_t minor, di_node_t node);
  40   41  static int driver_minor(di_minor_t minor, di_node_t node);
  41   42  static int node_name(di_minor_t minor, di_node_t node);
  42   43  static int minor_name(di_minor_t minor, di_node_t node);
  43   44  static int wifi_minor_name(di_minor_t minor, di_node_t node);
  44   45  static int conskbd(di_minor_t minor, di_node_t node);
↓ open down ↓ 1 lines elided ↑ open up ↑
  46   47  static int power_button(di_minor_t minor, di_node_t node);
  47   48  static int fc_port(di_minor_t minor, di_node_t node);
  48   49  static int printer_create(di_minor_t minor, di_node_t node);
  49   50  static int se_hdlc_create(di_minor_t minor, di_node_t node);
  50   51  static int ppm(di_minor_t minor, di_node_t node);
  51   52  static int gpio(di_minor_t minor, di_node_t node);
  52   53  static int av_create(di_minor_t minor, di_node_t node);
  53   54  static int tsalarm_create(di_minor_t minor, di_node_t node);
  54   55  static int ntwdt_create(di_minor_t minor, di_node_t node);
  55   56  static int zcons_create(di_minor_t minor, di_node_t node);
       57 +static int zfd_create(di_minor_t minor, di_node_t node);
  56   58  static int cpuid(di_minor_t minor, di_node_t node);
  57   59  static int glvc(di_minor_t minor, di_node_t node);
  58   60  static int ses_callback(di_minor_t minor, di_node_t node);
  59   61  static int kmdrv_create(di_minor_t minor, di_node_t node);
  60   62  
  61   63  static devfsadm_create_t misc_cbt[] = {
  62   64          { "pseudo", "ddi_pseudo", "(^sad$)",
  63   65              TYPE_EXACT | DRV_RE, ILEVEL_0, node_slash_minor
  64   66          },
  65   67          { "pseudo", "ddi_pseudo", "zsh",
↓ open down ↓ 41 lines elided ↑ open up ↑
 107  109              "(^sysevent$)|(^kssl$)|(^physmem$)",
 108  110              TYPE_EXACT | DRV_RE, ILEVEL_1, minor_name
 109  111          },
 110  112          { "pseudo", "ddi_pseudo",
 111  113              "(^ip$)|(^tcp$)|(^udp$)|(^icmp$)|"
 112  114              "(^ip6$)|(^tcp6$)|(^udp6$)|(^icmp6$)|"
 113  115              "(^rts$)|(^arp$)|(^ipsecah$)|(^ipsecesp$)|(^keysock$)|(^spdsock$)|"
 114  116              "(^nca$)|(^rds$)|(^sdp$)|(^ipnet$)|(^dlpistub$)|(^bpf$)",
 115  117              TYPE_EXACT | DRV_RE, ILEVEL_1, minor_name
 116  118          },
      119 +        { "pseudo", "ddi_pseudo", "inotify",
      120 +            TYPE_EXACT | DRV_EXACT, ILEVEL_0, minor_name
      121 +        },
 117  122          { "pseudo", "ddi_pseudo", "ipd",
 118  123              TYPE_EXACT | DRV_EXACT, ILEVEL_0, minor_name
 119  124          },
 120  125          { "pseudo", "ddi_pseudo",
 121  126              "(^ipf$)|(^ipnat$)|(^ipstate$)|(^ipauth$)|"
 122  127              "(^ipsync$)|(^ipscan$)|(^iplookup$)",
 123  128              TYPE_EXACT | DRV_RE, ILEVEL_0, minor_name,
 124  129          },
 125  130          { "pseudo", "ddi_pseudo", "dld",
 126  131              TYPE_EXACT | DRV_EXACT, ILEVEL_0, node_name
↓ open down ↓ 46 lines elided ↑ open up ↑
 173  178          },
 174  179          { "pseudo", "ddi_pseudo", "ntwdt",
 175  180              TYPE_EXACT | DRV_RE, ILEVEL_0, ntwdt_create,
 176  181          },
 177  182          { "pseudo", "ddi_pseudo", "daplt",
 178  183              TYPE_EXACT | DRV_EXACT, ILEVEL_0, minor_name
 179  184          },
 180  185          { "pseudo", "ddi_pseudo", "zcons",
 181  186              TYPE_EXACT | DRV_EXACT, ILEVEL_0, zcons_create,
 182  187          },
      188 +        { "pseudo", "ddi_pseudo", "zfd",
      189 +            TYPE_EXACT | DRV_EXACT, ILEVEL_0, zfd_create,
      190 +        },
 183  191          { "pseudo", "ddi_pseudo", CPUID_DRIVER_NAME,
 184  192              TYPE_EXACT | DRV_EXACT, ILEVEL_0, cpuid,
 185  193          },
 186  194          { "pseudo", "ddi_pseudo", "glvc",
 187  195              TYPE_EXACT | DRV_EXACT, ILEVEL_0, glvc,
 188  196          },
 189  197          { "pseudo", "ddi_pseudo", "dm2s",
 190  198              TYPE_EXACT | DRV_EXACT, ILEVEL_0, minor_name,
 191  199          },
 192  200          { "pseudo", "ddi_pseudo", "nsmb",
↓ open down ↓ 28 lines elided ↑ open up ↑
 221  229          { "av", "^av/[0-9]+/(async|isoch)$",
 222  230              RM_PRE | RM_HOT | RM_ALWAYS, ILEVEL_0, devfsadm_rm_all
 223  231          },
 224  232          { "pseudo", "^daplt$",
 225  233              RM_PRE | RM_ALWAYS, ILEVEL_0, devfsadm_rm_all
 226  234          },
 227  235          { "pseudo", "^zcons/" ZONENAME_REGEXP "/(" ZCONS_MASTER_NAME "|"
 228  236                  ZCONS_SLAVE_NAME ")$",
 229  237              RM_PRE | RM_HOT | RM_ALWAYS, ILEVEL_0, devfsadm_rm_all
 230  238          },
      239 +        { "pseudo", "^zfd/" ZONENAME_REGEXP "/(master|slave)/[0-9]+$",
      240 +            RM_PRE | RM_HOT | RM_ALWAYS, ILEVEL_0, devfsadm_rm_all
      241 +        },
 231  242          { "pseudo", "^" CPUID_SELF_NAME "$", RM_ALWAYS | RM_PRE | RM_HOT,
 232  243              ILEVEL_0, devfsadm_rm_all
 233  244          },
 234  245          { "enclosure", "^es/ses[0-9]+$", RM_POST,
 235  246                  ILEVEL_0, devfsadm_rm_all
 236  247          },
 237  248          { "pseudo", "^pfil$",
 238  249              RM_PRE | RM_ALWAYS, ILEVEL_0, devfsadm_rm_all
 239  250          },
 240  251          { "pseudo", "^tpm$",
↓ open down ↓ 424 lines elided ↑ open up ↑
 665  676  
 666  677          if (di_prop_lookup_strings(DDI_DEV_T_ANY, node, "zonename",
 667  678              &zonename) == -1) {
 668  679                  return (DEVFSADM_CONTINUE);
 669  680          }
 670  681  
 671  682          (void) snprintf(path, sizeof (path), "zcons/%s/%s", zonename,
 672  683              minor_str);
 673  684          (void) devfsadm_mklink(path, node, minor, 0);
 674  685  
      686 +        return (DEVFSADM_CONTINUE);
      687 +}
      688 +
      689 +static int
      690 +zfd_create(di_minor_t minor, di_node_t node)
      691 +{
      692 +        char    *minor_str;
      693 +        char    *zonename;
      694 +        int     *id;
      695 +        char    path[MAXPATHLEN];
      696 +
      697 +        minor_str = di_minor_name(minor);
      698 +
      699 +        if (di_prop_lookup_strings(DDI_DEV_T_ANY, node, "zfd_zname",
      700 +            &zonename) == -1)
      701 +                return (DEVFSADM_CONTINUE);
      702 +
      703 +        if (di_prop_lookup_ints(DDI_DEV_T_ANY, node, "zfd_id", &id) == -1)
      704 +                return (DEVFSADM_CONTINUE);
      705 +
      706 +        if (strncmp(minor_str, "slave", 5) == 0) {
      707 +                (void) snprintf(path, sizeof (path), "zfd/%s/slave/%d",
      708 +                    zonename, id[0]);
      709 +        } else {
      710 +                (void) snprintf(path, sizeof (path), "zfd/%s/master/%d",
      711 +                    zonename, id[0]);
      712 +        }
      713 +        (void) devfsadm_mklink(path, node, minor, 0);
      714 +
 675  715          return (DEVFSADM_CONTINUE);
 676  716  }
 677  717  
 678  718  /*
 679  719   *      /dev/cpu/self/cpuid     ->      /devices/pseudo/cpuid@0:self
 680  720   */
 681  721  static int
 682  722  cpuid(di_minor_t minor, di_node_t node)
 683  723  {
 684  724          (void) devfsadm_mklink(CPUID_SELF_NAME, node, minor, 0);
↓ open down ↓ 33 lines elided ↑ open up ↑
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX