プロキシー ARP のチェック

OS/400 V5R2 から仮想 IP を設定する際にプロキシー ARP という方法が使用できるようになっています。

これはこれでかなりよさそうな機能なのですが、いかんせん iSeries ナビゲーターからしか設定ができない/参照できない、という問題があります。
ファイアーウォールなどがあってポートのアクセスが制限されているような場合、iSeries ナビゲーター自体が接続できない、ということがあり、設定するどころか今どうなっているのか見ることもできない、ということになります。

そこで IP インターフェイスをリストして、その属性を調べるシステム API を使ってどんなことがわかるかを調べてみました。

http://publib.boulder.ibm.com/infocenter/iseries/v5r4/topic/apis/qtoclstnetifc.htm

とりあえずこれがテストプログラムの内容です。

             PGM                                                                
             DCL        VAR(&STS) TYPE(*CHAR) LEN(10)                           
             DCL        VAR(&OBJ) TYPE(*CHAR) LEN(10)                           
             DCL        VAR(&USRSPC) TYPE(*CHAR) LEN(20) +                      
                          VALUE('CHKPRXYARPQTEMP     ')                         
             DCL        VAR(&INETADDR) TYPE(*CHAR) LEN(15)                      
             DCL        VAR(&LINEDESC) TYPE(*CHAR) LEN(10)                      
             DCL        VAR(&ALLOWEDB) TYPE(*CHAR) LEN(4)                       
             DCL        VAR(&ENABLEDB) TYPE(*CHAR) LEN(4)                       
             DCL        VAR(&LINETYPEB) TYPE(*CHAR) LEN(4)                      
             DCL        VAR(&IFCSTSB) TYPE(*CHAR) LEN(4)                        
             DCL        VAR(&ALLOWED) TYPE(*DEC) LEN(8 0)                       
             DCL        VAR(&ENABLED) TYPE(*DEC) LEN(8 0)                       
             DCL        VAR(&LINETYPE) TYPE(*DEC) LEN(8 0)                      
             DCL        VAR(&IFCSTS) TYPE(*DEC) LEN(8 0)                        
             DCL        VAR(&LSTE) TYPE(*CHAR) LEN(370)                         
             DCL        VAR(&BIN4) TYPE(*CHAR) LEN(4)                           
             DCL        VAR(&ENTRY) TYPE(*DEC) LEN(8 0)                         
             DCL        VAR(&STR) TYPE(*DEC) LEN(8 0)                           
             DCL        VAR(&OFFSET) TYPE(*DEC) LEN(8 0)                        
             DCL        VAR(&OFFSETB) TYPE(*CHAR) LEN(4)                        
             DCL        VAR(&ENTLEN) TYPE(*DEC) LEN(8 0)                        
             DCL        VAR(&ENTLENB) TYPE(*CHAR) LEN(4)                        
                                                                                
             CHGVAR     VAR(&OBJ) VALUE(%SST(&USRSPC 1 10))                     
             DLTUSRSPC  USRSPC(QTEMP/&OBJ)                                      
             MONMSG     MSGID(CPF0000)                                          
             CALL       PGM(QUSCRTUS) PARM(&USRSPC 'LISTTCPIP ' +               
                          X'00000100' ' ' '*ALL      ' 'LISTTCPIP +             
                          TEMPORARY USER SPACE')                                
             CALLPRC    PRC('QtocLstNetIfc') PARM((&USRSPC) +                   
                          ('NIFC0100') (&STS))                                  
             CALL       PGM(QUSRTVUS) PARM(&USRSPC X'00000085' +                
                          X'00000004' &BIN4)                                    
             CHGVAR     VAR(&ENTRY) VALUE(%BIN(&BIN4))                          
             IF         COND(&ENTRY = 0) THEN(GOTO CMDLBL(NOIFC))               
             CALL       PGM(QUSRTVUS) PARM(&USRSPC X'00000089' +                
                          X'00000004' &ENTLENB)                                 
             CHGVAR     VAR(&ENTLEN) VALUE(%BIN(&ENTLENB))                      
             CALL       PGM(QUSRTVUS) PARM(&USRSPC X'0000007D' +                
                          X'00000004' &OFFSETB)                                 
             CHGVAR     VAR(&OFFSET) VALUE(%BIN(&OFFSETB))                      
             CHGVAR     VAR(&STR) VALUE(&OFFSET + 1)                            
 DO:         CHGVAR     VAR(%BIN(&BIN4)) VALUE(&STR)                            
             CALL       PGM(QUSRTVUS) PARM(&USRSPC &BIN4 &ENTLENB +             
                          &LSTE)                                                
             CHGVAR     VAR(&INETADDR) VALUE(%SST(&LSTE 1 15))                  
             CHGVAR     VAR(&LINEDESC) VALUE(%SST(&LSTE 51 10))                 
             CHGVAR     VAR(&IFCSTSB) VALUE(%SST(&LSTE 73 4))                   
             CHGVAR     VAR(&IFCSTS) VALUE(%BIN(&IFCSTSB))                      
             CHGVAR     VAR(&LINETYPEB) VALUE(%SST(&LSTE 85 4))                 
             CHGVAR     VAR(&LINETYPE) VALUE(%BIN(&LINETYPEB))                  
             CHGVAR     VAR(&ENABLEDB) VALUE(%SST(&LSTE 205 4))                 
             CHGVAR     VAR(&ENABLED) VALUE(%BIN(&ENABLEDB))                    
             CHGVAR     VAR(&ALLOWEDB) VALUE(%SST(&LSTE 209 4))                 
             CHGVAR     VAR(&ALLOWED) VALUE(%BIN(&ALLOWEDB))                    
             CHGVAR     VAR(&STR) VALUE(&STR + &ENTLEN)                         
             CHGVAR     VAR(&ENTRY) VALUE(&ENTRY - 1)                           
             IF         COND(&ENTRY = 0) THEN(GOTO CMDLBL(NOIFC))               
             GOTO       CMDLBL(DO)                                              
 NOIFC:                                                                         
             DLTUSRSPC  USRSPC(QTEMP/&OBJ)                                      
             MONMSG     MSGID(CPF0000)                                          
             ENDPGM

元にしたソースの片鱗がありますが ...... 上のソースでは修正済みです。

コンパイルします。

デバッグして API の実行結果の内容を確認します。

停止点を定義します。

実行してみましょう。

停止したところで、F11 キーを使って API の実行結果を見てみます。

IP アドレスが 1桁目から 15 桁分で取得できるようになっています。

回線記述名が 51桁目から 10 桁分で取得できます。

インターフェイスの状態が 73 桁目から取得できます。(スクリーンショットが 85 桁目からになっているのは間違いですね。値はたまたま正しい "1" だったので、面倒でそのままにしてしまっています)
以下はインフォメーション・センターからの引用です。

0 Inactive - The interface has not been started. The interface is not active.
1 Active - The interface has been started and is running.
2 Starting - The system is processing the request to start this interface.
3 Ending - The system is processing the request to end this interface.
4 RCYPND - An error with the physical line associated with this interface was detected by the system. The line description associated with this interface is in the recovery pending (RCYPND) state.
5 RCYCNL - A hardware failure has occurred and the line description associated with this interface is in the recovery canceled (RCYCNL) state.
6 Failed - The line description associated with this interface has entered the failed state.
7 Failed (TCP) - An error was detected in the IBM TCP/IP Vertical Licensed Internal Code.
8 DOD - Point-to-Point (PPP) Dial-on-Demand

85 桁目からは回線のタイプが取得できます。
スクリーンショットにある値の "1" は Ethernet の LAN である、ということを示しています。

Interface line type. Type of line used by an interface. The following link protocols are supported:

-1 OTHER -
 IPI - An Internet Protocol (IP) over Internetwork Pack Exchange (IPX) interface.
 IPS - An Internet Protocol (IP) over SNA interface.
 PPPoE - Point-to-Point over Ethernet protocol.
 Note: As of V5R2, IP over IPX is no longer supported.

-2 NONE - Line is not defined. This is used for the following interfaces: *LOOPBACK, *VIRTUALIP, *OPC.
 There is no line type value for these interfaces.
-3 ERROR - This value is displayed if any system errrors other than those for *NOTFND are received while trying to determine the link type for an interface.
-4 NOTFND - Not found. This value is displayed if the line description object for this interface cannot be found.

1 ELAN - Ethernet local area network protocol.
2 TRLAN - Token-ring local area network protocol.
3 FR - Frame relay network protocol.
4 ASYNC - Asynchronous communications protocol.
5 PPP - Point-to-point Protocol.
6 WLS - Wireless local area network protocol.
7 X.25 - X.25 protocol.
8 DDI - Distributed Data Interface protocol.
9 TDLC - Twinaxial Datalink Control. Used for TCP/IP over Twinax.
10 L2TP (Virtual PPP) - Layer Two Tunneling Protocol.

プロキシー ARP が使用可能になっているかどうか、が 205 桁目からわかります。

Proxy ARP enabled. Whether Proxy ARP is currently active for this interface. Proxy ARP allows physically distinct separate networks to appear as if they are a single logical network. It provides connectivity between physically separate network without creating any new logical networks and without updating any route tables.

0 NO - Proxy ARP not enabled.
1 YES - Proxy ARP enabled

プロキシー ARP がサポートされているインターフェイスかどうか、が 209 桁目から確認できるようになっています。

Proxy ARP allowed. This field applies to Opticonnect (*OPC) and Virtual interfaces only. For those types of interfaces, this field indicates whether Proxy ARP has been configured to be allowed or not allowed.

[Top Pageに戻る]

Ads by TOK2