Print this page
Commit IPMP changes
*** 18,27 ****
--- 18,28 ----
*
* CDDL HEADER END
*/
/*
* Copyright (c) 2010, Oracle and/or its affiliates. All rights reserved.
+ * Copyright 2013 Nexenta Systems, Inc. All rights reserved.
*/
#ifndef _IPADM_IPMGMT_H
#define _IPADM_IPMGMT_H
*** 54,63 ****
--- 55,68 ----
* with "_". Note below that 'prefixlen' is an address property and therefore
* not a private nvpair name.
*/
#define IPADM_NVP_PROTONAME "_protocol" /* protocol name */
#define IPADM_NVP_IFNAME "_ifname" /* interface name */
+ #define IPADM_NVP_IFCLASS "_ifclass" /* interface class */
+ #define IPADM_NVP_FAMILIES "_families" /* interface families */
+ #define IPADM_NVP_GIFNAME "_gifname" /* IPMP group interface name */
+ #define IPADM_NVP_MIFNAMES "_mifnames" /* IPMP group members */
#define IPADM_NVP_AOBJNAME "_aobjname" /* addrobj name */
#define IPADM_NVP_FAMILY "_family" /* address family */
#define IPADM_NVP_IPV4ADDR "_ipv4addr" /* name of IPv4 addr nvlist */
#define IPADM_NVP_IPNUMADDR "_addr" /* local address */
#define IPADM_NVP_IPADDRHNAME "_aname" /* local hostname */
*** 104,113 ****
--- 109,146 ----
/* The door file for the ipmgmt (ip-interface management) daemon */
#define IPMGMT_DOOR "/etc/svc/volatile/ipadm/ipmgmt_door"
#define MAXPROTONAMELEN 32
+ /*
+ * ia_flags used inside the arguments for interface/address commands
+ *
+ * - APPEND updates the multi-valued ipadm DB entry with a new value
+ * - REMOVE updates the multi-valued ipadm DB entry by removing a value
+ * - ACTIVE updates the running configuration
+ * - PERSIST updates the permanent data store
+ * - INIT indicates that operation being performed is under init
+ * context
+ *
+ * These two flags are used by ipmgmt_db_update_if function,
+ * because it can be used to update more that one DB line
+ * and we need to be sure that we finished all operations,
+ * after the operation has finished the related flag is cleared
+ *
+ * - UPDATE_IF - used when we need to update IPADM_NVP_FAMILIES and
+ * IPADM_NVP_MIFNAMES fields
+ * - UPDATE_IPMP - used when we need to update IPADM_NVP_GIFNAME
+ */
+ #define IPMGMT_APPEND 0x00000001
+ #define IPMGMT_REMOVE 0x00000002
+ #define IPMGMT_ACTIVE 0x00000004
+ #define IPMGMT_PERSIST 0x00000008
+ #define IPMGMT_INIT 0x00000010
+ #define IPMGMT_UPDATE_IF 0x00000020
+ #define IPMGMT_UPDATE_IPMP 0x00000040
+
+
/* door call command type */
typedef enum {
IPMGMT_CMD_SETPROP = 1, /* persist property */
IPMGMT_CMD_SETIF, /* persist interface */
IPMGMT_CMD_SETADDR, /* persist address */
*** 120,130 ****
IPMGMT_CMD_INITIF, /* retrieve interfaces to initialize */
IPMGMT_CMD_ADDROBJ_LOOKUPADD, /* addr. object lookup & add */
IPMGMT_CMD_ADDROBJ_SETLIFNUM, /* set lifnum on the addrobj */
IPMGMT_CMD_ADDROBJ_ADD, /* add addr. object to addrobj map */
IPMGMT_CMD_LIF2ADDROBJ, /* lifname to addrobj mapping */
! IPMGMT_CMD_AOBJNAME2ADDROBJ /* aobjname to addrobj mapping */
} ipmgmt_door_cmd_type_t;
/*
* Note: We need to keep the size of the structure the same on amd64 and i386
* for all door_call arguments and door_return structures.
--- 153,164 ----
IPMGMT_CMD_INITIF, /* retrieve interfaces to initialize */
IPMGMT_CMD_ADDROBJ_LOOKUPADD, /* addr. object lookup & add */
IPMGMT_CMD_ADDROBJ_SETLIFNUM, /* set lifnum on the addrobj */
IPMGMT_CMD_ADDROBJ_ADD, /* add addr. object to addrobj map */
IPMGMT_CMD_LIF2ADDROBJ, /* lifname to addrobj mapping */
! IPMGMT_CMD_AOBJNAME2ADDROBJ, /* aobjname to addrobj mapping */
! IPMGMT_CMD_IPMP_UPDATE /* update IPMP group members */
} ipmgmt_door_cmd_type_t;
/*
* Note: We need to keep the size of the structure the same on amd64 and i386
* for all door_call arguments and door_return structures.
*** 142,158 ****
char ia_aobjname[IPADM_AOBJSIZ];
char ia_module[MAXPROTONAMELEN];
char ia_pname[MAXPROPNAMELEN];
char ia_pval[MAXPROPVALLEN];
} ipmgmt_prop_arg_t;
- /*
- * ia_flags used in ipmgmt_prop_arg_t.
- * - APPEND updates the multi-valued property entry with a new value
- * - REDUCE updates the multi-valued property entry by removing a value
- */
- #define IPMGMT_APPEND 0x00000001
- #define IPMGMT_REMOVE 0x00000002
/* IPMGMT_CMD_GETIF door_call argument structure */
typedef struct ipmgmt_getif_arg_s {
ipmgmt_door_cmd_type_t ia_cmd;
uint32_t ia_flags;
--- 176,185 ----
*** 163,172 ****
--- 190,200 ----
typedef struct ipmgmt_if_arg_s {
ipmgmt_door_cmd_type_t ia_cmd;
uint32_t ia_flags;
char ia_ifname[LIFNAMSIZ];
sa_family_t ia_family;
+ ipadm_if_class_t ia_ifclass;
} ipmgmt_if_arg_t;
/* IPMGMT_CMD_INITIF door_call argument structure */
typedef struct ipmgmt_initif_arg_s {
ipmgmt_door_cmd_type_t ia_cmd;
*** 174,183 ****
--- 202,219 ----
sa_family_t ia_family;
size_t ia_nvlsize;
/* packed nvl follows */
} ipmgmt_initif_arg_t;
+ /* IPMGMT_CMD_IPMP_UPDATE door_call argument structure */
+ typedef struct ipmgmt_ipmp_update_arg_s {
+ ipmgmt_door_cmd_type_t ia_cmd;
+ uint32_t ia_flags;
+ char ia_gifname[LIFNAMSIZ]; /* group interface name */
+ char ia_mifname[LIFNAMSIZ]; /* group's member interface name */
+ } ipmgmt_ipmp_update_arg_t;
+
/* IPMGMT_CMD_SETADDR door_call argument */
typedef struct ipmgmt_setaddr_arg_s {
ipmgmt_door_cmd_type_t ia_cmd;
uint32_t ia_flags;
size_t ia_nvlsize;
*** 213,233 ****
int32_t ia_lnum;
sa_family_t ia_family;
ipadm_addr_type_t ia_atype;
} ipmgmt_aobjop_arg_t;
- /*
- * ia_flags used inside the arguments for interface/address commands
- * - ACTIVE updates the running configuration
- * - PERSIST updates the permanent data store
- * - INIT indicates that operation being performed is under init
- * context
- */
- #define IPMGMT_ACTIVE 0x00000001
- #define IPMGMT_PERSIST 0x00000002
- #define IPMGMT_INIT 0x00000004
-
/* door call return value */
typedef struct ipmgmt_retval_s {
int32_t ir_err;
} ipmgmt_retval_t;
--- 249,258 ----