ioctl コマンド SIOCSVIPA または SIOCSVIPA6 をアプリケーションで使用すると、そのアプリケーションが実行されているスタック上に動的 VIPA を作成したり、そこから動的 VIPA を削除したりすることができます。アプリケーションは、ランタイム XL C/C++ または UNIX システム・サービス呼び出し可能サービス BPX1IOC API を使用して、 IOCTL 呼び出しを発行できます。 SIOCSVIPA または SIOCSVIPA6 ioctl コマンドを発行するアプリケーションは、APF 許可である必要があります。セキュリティー製品がない場合、あるいはセキュリティー製品が MODDVIPA のプロファイルが定義されていないことを示している場合は、スーパーユーザー権限を持つユーザー ID を使用してアプリケーションを実行する必要があります。MODDVIPA プログラムのプロファイルが定義されている場合は、ID にスーパーユーザー権限がある場合でも、そのユーザー ID はプロファイルの READ アクセスを許可されます。一部のセキュリティー製品は、プロファイルが定義されていない場合、使用可能なアクセスはないことを示します。RACF® を使用していない場合は、これらの ioctl コマンドを使用するために、プロファイルの定義が必要な場合があります。 詳しくは、SIOCSVIPA、 SIOCSVIPA6、 MODDVIPA のためのセキュリティー・プロファイルの定義を参照してください。
新規の動的 VIPA を作成するには、このスタックの PROFILE.TCPIP データ・セット内で VIPARANGE 構成ステートメントによって 既に指定されているサブネット内に、要求された IP アドレスがなければなりません。 SIOCSVIPA または SIOCSVIPA6 ioctl コマンドを使用すると、 分散 DVIPA を除き、スタック上の既存のすべての動的 VIPA を削除することができます。動的 VIPA は、DVR_DEFINE オプションまたは DVR_DEFINE_AFFINITY オプションを使用して作成できます。DVR_DEFINE_AFFINITY オプションは、 それを作成したアドレス・スペースへのアフィニティーを持つ DVIPA を作成します。アフィニティーとともに作成された DVIPA に対する接続要求は、DVIPA を作成したアプリケーション・インスタンスが bind() 呼び出しを発行した場合に、TCP リスナーに 送信されます。マッチング・リスナーが見つからない場合は、 通常の shareport ロード・バランシングを使用して TCP リスナーが選択されます。
#include "ezbzdvpc.h" /* header that contains
the structure for
SIOCSVIPA ioctl
and needed constants*/
struct dvreq dv; /* the structure passed
on the ioctl command*/
dv.dvr_version = DVR_VER1; /*version */
dv.dvr_length = sizeof(struct dvreq); /* structure length */
dv.dvr_option = DVR_DEFINE; /* to define a new
dynamic VIPA. Use
DVR_DELETE to delete
a dynamic VIPA */
dv.dvr_addr.s_addr = inet_addr(my_ipaddr); /* where my_ipaddr is
a character string
in standard
dotted-decimal
notation */
この場合、ioctl コマンドは以下のように呼び出されます。
rc = ioctl(s, SIOCSVIPA, &dv);
以下の例は、IPv6 アドレスをサポートする入力パラメーター・リストを使用して SIOCSVIPA6 ioctl コマンドをセットアップする方法を示しています。
#include "ezbzdvpc.h" /* header that contains
the structure for
SIOCSVIPA6 ioctl
and needed constants */
struct dvreq6 dv6; /* the structure passed on
the ioctl command */
dv6.dvr6_version = DVR_VER2; /* version */
dv6.dvr6_length = sizeof(struct dvreq6); /* structure length */
dv6.dvr6_option = DVR_DEFINE; /* to define a new dynamic
VIPA. Use DVR_DELETE to
delete a dynamic VIPA. */
inet_pton(AF_INET6, my_ipv6addr, dv6.dvr6_addr6.s6_addr);
/* where my_ipv6addr
is a character string in
standard IPv6 address
notation, representing a
fully qualified IPv6
address */
この場合、ioctl コマンドは以下のように呼び出されます。
rc = ioctl(s, SIOCSVIPA6, &dv6);
SIOCSVIPA または SIOCSVIPA6 ioctl コマンドは、 非ゼロの errno および errnojr 値を設定してエラー条件を示します。 戻される errnojr 値の説明は、「z/OS Communications Server: IP and SNA Codes」を参照してください。