# GR-PEACH nicモジュール (nic)

`nic` モジュールは、ネットワーク環境を制御するためのモジュールです。

#### 使用例

    var nic = require('nic');
    var nics = nic.enumerate();
    console.log( Object.keys( nics ).length + "個のNICが搭載されています" );
    var index = 0;
    Object.keys( nics ).forEach( function(key) {
        console.log( ++ index + "個目は:" + key );
    });

    var eth0 = nics["ETHERNET"];
    if( eth0 ) {
        eth0.ifup();        // use DHCP
        eth0.ntpdate({ server:"ntp.nict.jp" });
        console.log( JSON.stringify( eth0.ifconfig() ) );
        console.log( new Date().toString() );
    }

## nic.enumerate()

- 戻り値: {Array} Nicオブジェクトの一覧を格納した連想配列
  - `ETHERNET` {Nic} Ethernet Interface に対応するNicクラスのインスタンス

ボードに搭載された NIC 一覧を取得します。（現在、Ethernet Interface のみに対応しています）

#### 使用例

    var nic = require('nic');

    // ★★ 一覧取得
    var nics = nic.enumerate();

    // 一覧表示
    console.log( Object.keys( nics ).length + "個のNICが搭載されています" );
    var index = 0;
    Object.keys( nics ).forEach( function(key) {
        console.log( ++ index + "個目は:" + key );
    });

# Nicクラス

NIC の制御や状態の取得を行うクラスです。

## nic.ifup([param])

- `param` {Object} ネットワーク設定。すべての項目を省略する場合、この引数自体を省略可能です。
  - `ip` {string} IPアドレス（省略時、DHCP使用）
  - `netmask` {string} ネットマスク（省略時、DHCP使用）
  - `gateway` {string} ゲートウェイ（省略時、DHCP使用）
  - `dns` {string} DNSサーバ（省略可能）
- 戻り値: {boolean} `true`:接続成功、`false`:接続失敗

ネットワークへ接続します。 `param`を指定しない場合、および`ip`, `netmask`, `gateway`のどれか一つでも省略されている場合はDHCPを使用します。 `ip`, `netmask`, `gateway`が全て指定されている場合は静的IPアドレスを使用します。 `dns`はDHCP・静的IPアドレスのどちらを使用する場合でも省略可能です。

#### 使用例

    var nic = require('nic');
    var nics = nic.enumerate();
    var eth0 = nics["ETHERNET"];
    if( !eth0 ) {
        return;
    }

    // ★★ ネットワークへ接続 (DHCP)
    eth0.ifup();
    eth0.ifdown();

    // ★★ ネットワークへ接続 (静的IPアドレス指定)
    eth0.ifup({
        ip: "192.168.123.100",
        netmask: "255.255.255.0",
        gateway: "192.168.123.1",
        dns: "8.8.8.8"
    });
    eth0.ifdown();

## nic.ifdown()

- 戻り値: {boolean} `true`:切断成功、`false`:切断失敗

ネットワークから切断します。

#### 使用例

    var nic = require('nic');
    var nics = nic.enumerate();
    var eth0 = nics["ETHERNET"];
    if( !eth0 ) {
        return;
    }
    eth0.ifup();

    // ★★ ネットワークから切断
    eth0.ifdown();

## nic.ifconfig()

- 戻り値: {Object} NIC の状態を格納したオブジェクト
  - `NIC` {string} NIC の種類
  - `HWaddr` {string}} MACアドレス
  - `inet` {string} inetアドレス
  - `netmask` {string} ネットマスク
  - `gateway` {string} ゲートウェイ

NICの状態を取得します。

#### 使用例

    var nic = require('nic');
    var nics = nic.enumerate();
    var eth0 = nics["ETHERNET"];
    if( !eth0 ) {
        return;
    }
    eth0.ifup();

    // ★★ NIC の状態を取得 (接続時)
    var conf = eth0.ifconfig();
    console.log( JSON.stringify( conf ) );

    eth0.ifdown();

    // ★★ NIC の状態を取得 (切断時)
    conf = eth0.ifconfig();
    console.log( JSON.stringify( conf ) );

## nic.ntpdate([param])

- `param` {Object} 時刻同期設定。すべての項目を省略する場合、この引数自体を省略可能です。
  - `server` {string} NTPサーバ(省略時:`"0.pool.ntp.org"`)
  - `port` {number} ポート番号(省略時:`123`)
  - `timeout` {number} タイムアウト時間（単位:ミリ秒）(省略時:`10 * 1000`)
- 戻り値: {boolean} `true`:時刻同期成功、`false`:時刻同期失敗

インターネット時刻と同期します。

#### 使用例

    var nic = require('nic');
    var nics = nic.enumerate();
    var eth0 = nics["ETHERNET"];
    if( !eth0 ) {
        return;
    }
    eth0.ifup();

    // ★★ インターネット時刻と同期(デフォルトサーバ "0.pool.ntp.org" 使用)
    if( eth0.ntpdate() ) {
        console.log( '時刻同期成功', new Date().toString() );
    }
    else {
        console.log( '時刻同期失敗' );
    }

    // ★★ インターネット時刻と同期(サーバ指定)
    if( eth0.ntpdate({ server:"ntp.nict.jp" }) ) {
        console.log( '時刻同期成功', new Date().toString() );
    }
    else {
        console.log( '時刻同期失敗' );
    }

    eth0.ifdown();