pingクライアントについて

はじめて投稿いたします。

けんけんと申します。

以下環境下でpingクライアントを実装したいのですが、実装された方がいましたら実装方法を教えて頂きたいのですが?

PCと双方で疎通確認が行いたいのです。

マイコン:R5F565NEDxFB

スマートコンフィグレータコンポーネント

r_ether_rx ver1.20

r_t4_driver_rx ver1.08

r_t4_rx ver2.09

RXシリーズは初めてのプログラミングとなります。

宜しくお願い致します。

以上。

  • けんけん さん、こんにちは。NoMaYと申します。

    > 以下環境下でpingクライアントを実装したいのですが、実装された方がいましたら実装方法を教えて頂きたいのですが?

    私自身は実装したことが無いのですが、かふぇルネでも何度かpingの話題が出ていましたので何かあるだろうと思いますので、これから探してみようと思います。すみません、少々お待ち下さい。

  • けんけん さん、こんにちは。NoMaYです。

    ルネサスさんのウェブサイトでping client(やhttp clientとかmqtt clientとか)を検索すると、見事なほどにSynergyばっかりでしたね。(多少例外はありますが。) さすがに、これ程の過酷な事態は想定していなかったので、少なくとも今夜一晩は探してみないといけなさそうです、、、

    Renesasキーワード検索: ping client
    www.renesas.com/jp/ja/search/keyword-search.html#q=ping%20client&rows=50

    Renesasキーワード検索: http client
    www.renesas.com/jp/ja/search/keyword-search.html#q=http%20client&rows=50

    Renesasキーワード検索: mqtt client
    www.renesas.com/jp/ja/search/keyword-search.html#q=mqtt%20client&rows=50
     

  • NoMayさん、こんにちは。けんけんです。

    いろいろ探して戴き有難うございます。
    私の方もNET等で探しているのですが、なかなか見つけられない次第です。
    済みませんお手数をお掛け致します。
    宜しくお願い致します。
  • けんけん さん、こんにちは。NoMaYです。

    すみません、そのものズバリはギブアップしました。私はPCでもマイコンでもネットワークには詳しくは無いのですが、この状況で自分が作業するなら以下のような手順で進めると思います。

    ステップ1) PC側からpingするアプリケーションノートとして以下がありますので、まずこちらを作ってみる。

    www.renesas.com/jp/ja/search/keyword-search.html#genre=document&q=r20an0051
    r20an0051jj0209-rx-t4.pdf

    各種 Renesas Starter Kit+同梱のCPU ボードや、がじぇっとるねさすのRX63N 搭載ボードや、サードパーティ製ボードで簡単にTCP/IP 通信の動作確認可能なサンプルを用意しております。このサンプルはネットワーク接続方法、PC の設定方法、CPU ボードの設定方法について確認することが出来ます。



    ステップ2) RXマイコン側からpingするプログラムは、以下のソケットAPIとウェブの情報を頼りに作ってみる。

    RXファミリ 組み込み用TCP/IP M3S-T4-Tiny ソケットAPIモジュール Firmware Integration Technology
    www.renesas.com/jp/ja/search/keyword-search.html#genre=document&q=r20an0296
    r20an0296jj0132-rx-t4.pdf

    このソフトウェアは組み込み用TCP/IP M3S-T4-Tiny(以下T4)用のソケットAPI モジュールです。T4 はITRON TCP/IP API に対応しています。一方、多くの地域で幅広く使われているネットワーク用API はソケットAPI です。より多くのユーザがT4 用アプリケーションを開発できるように、T4 用の簡易ソケットAPI を用意しました。ユーザはT4 に加えて本モジュールを使用することでソケットAPI を使用することが出来ます。



    Google検索: BSD OR POSIX OR Linux Socket API ping source code
    www.google.com/search?q=BSD+OR+POSIX+OR+Linux+Socket+API+ping+source+code


    ソケットAPIモジュールは、以下の画面コピーの手順で組み込みことが出来ます。





     

  • けんけんさん、こんにちは。
    PINGについては、ICMPで検索すると見つかる場合があります。
    過去に、作られた方がみえるようです。
    japan.renesasrulz.com/.../m3s-t4-tiny
  • NoMayさん、こんにちは。けんけんです。

    有難うございます。
    教えて頂いた情報、BSD OR POSIX OR Linux Socket API ping source code等参考にして
    組み込みの方挑戦してみます。
  • HiRoSan。こんにちは。けんけんです。

    情報有難うございます。
    実は私も投稿する前に教えて戴いたURLの内容を参考に挑戦したのですが、
    バージョン違いによりなかなか「***行目」というところが一致しない点と
    コンパイルした結果エラーが何点か発生してしまい
    途中で妥協してしまいました。
    再度挑戦してみようと思います。
    現バージョンでの情報がありましたらお願いいたします。
  • けんけん さん、こんにちは。NoMaYです。

    試そうとして、私が勘違いしていた/私のアドバイスが的外れだった、とか分かったら、その旨を教えて下さい。というか、実は、Google検索の結果だけを見て「Socket APIでいけるっぽい」と思ってリプライしたのですが、HiRoSanさんのリプライ&アドバイスの過去スレッドのICMPに気を付けながらGoogle検索にヒットしたページを読んでみたら以下の指定が必要だったことが分かったのですが、T4の簡易ソケットAPIのアプリケーションノートにはIPPROTO_ICMPの記載がないことに気が付き、これは私が早トチリしたようだ、と思い始めたところです、、、ごめんなさい、、、

    簡単なpingの作成(ICMPの送受信)- Geekなページ
    www.geekpage.jp/programming/linux-network/simple-ping.php

    /* RAWソケットを作成します */
    sock = socket(AF_INET, SOCK_RAW, IPPROTO_ICMP);

     

  • NoMayさん。こんにちは。けんけんです。

    済みません。私の説明の仕方が不十分だったのかもしれません。
    作成したいものはRX65Nからのping送信プログラムでして、開発環境はCS+ V8.03で作成しております。
    M3S-T4-Tiny V2.09を組み込んでいまして、組み込み用T4ユーザーマニュアルを見ましたところエコー応答
    のみサポートと記述されていた為、
    かふぇルネさんで過去に作成された方の投稿を見つけ
    japan.renesasrulz.com/.../m3s-t4-tiny
    現バージョンでの組み込みをされている方がいるのではないかと思い投降した次第です。
  • けんけんさん
    たぶんあまり参考にならないとは思いますが、ずいぶん昔に作成したことがありまして
    それなりに使用していましたが、T4ではありませんし、全体のソースを投稿しても混乱のもとなので
    骨はIP層に作りこまないといけませんし、コマンドラインができる仕組みも必要です
    以下ソースの一部です
    const char pingdata[]={
    0x61,0x62,0x63,0x64,0x65,0x66,0x67,0x68,0x69,0x6A,0x6B,0x6C,0x6D,0x6E,0x6F,0x70
    ,0x71,0x72,0x73,0x74,0x75,0x76,0x77,0x61,0x62,0x63,0x64,0x65,0x66,0x67,0x68,0x69
    };

    void pingrequest_100()
    {
    char buf[ETHER_MAX_PACKET];

    if(sub_proc[sub_proci].ret == 0){
    printf("見つかりません.\r");
    sub_delproc
    prompt;
    return;
    }

    //ICMPH
    icmph_(buf)->Type = ICMP_ECHO;
    icmph_(buf)->Code = 0;
    icmph_(buf)->Checksum = 0;
    icmph_(buf)->ID = rand();
    icmph_(buf)->SequenceNumber = 0;
    memcpy(&icmph_(buf)->Data , &pingdata , sizeof(pingdata));
    icmph_(buf)->Checksum = make_crc((char*)icmph_(buf) ,(WORD)IcmpHeader_size +sizeof(pingdata));

    //IPH
    iph_(buf)->Version = 4;
    iph_(buf)->IHL = IpHeader_size /4;
    iph_(buf)->DifferentiatedServices = 0;
    iph_(buf)->Totallength = IpHeader_size + IcmpHeader_size + sizeof(pingdata);
    iph_(buf)->Identifi = (WORD)rand() +(WORD)cpu_sec;
    iph_(buf)->Flags = 0;
    iph_(buf)->Fragmentoffset = 0;
    iph_(buf)->TTL = 128;
    iph_(buf)->Protocol = IP_ICMP;
    iph_(buf)->Headerchecksum = 0;
    cpy4(&iph_(buf)->SourceIPaddress , &sparam.myip);
    cpy4(&iph_(buf)->DestinationIPaddress , &sub_proc[sub_proci].param);//getmac->ip
    iph_(buf)->Headerchecksum = make_crc((char*)iph_(buf) ,(WORD)iph_(buf)->Totallength);

    //ETH
    cpy6(&eth_(buf)->DestinationMACaddress , sub_proc[sub_proci].ret);//getmac->mac
    cpy6(&eth_(buf)->SourceMACaddress , &eedata.mymac);
    eth_(buf)->Protocol = IP_TYPE;
    ether_put((char*)eth_(buf) , iph_(buf)->Totallength + EtherHeader_size);
    msec1start
    sub_proc[sub_proci].pc = pingrequest_110;
    }

    int pingrequest(char *str)
    {
    IPLINEINPUT ipl;
    if(strlen(str) == 0)return Invalid_Value_Parameter;
    iplineinput(str , &ipl);
    if(!ipl.f) return Invalid_Value_Parameter;

    //まずMACアドレスを取得する
    setproc(&getmac, ipl.ipadr, 0,0,0, &pingrequest_100 );
    return NULLSTR;
    }

    以上です。