ioctlなどのC / C ++を使用して転送速度を設定できます。

ioctlなどのC / C ++を使用して転送速度を設定できます。

私は現在IPリンクを使用してcan0のボーレートを設定しています。

/sbin/ip リンク設定 can0 up タイプのビットレートは 250000 です。

C / C ++で同じことを行う方法を知りたいです。

答え1

前述のように、libnetlinkを使用してiproute2ソースコードを表示できます。しかし、文書によるとlibnetlinkは内部用で、新しいプログラムではlibmnlを使用します。

LibmnlのAPIはわずかに異なるため、直接置き換えることはありませんが、同じ方法で動作して動作します。デフォルトでは、netlinkメッセージを設定してから入れ子になった属性の追加を開始する必要があります。メッセージが作成されたら、libmnlソケットAPIを使用してnetlinkに送信すると完了します。

リンクアップ/ダウンを設定するサンプルコード: https://github.com/pevik/libmnl/blob/60e34d339522bbad3142fa1609e4506edd33c969/examples/rtnl/rtnl-link-set.c

ボーレートを設定するために設定する必要はありません。代わりifi_flagsに、デバイス名を含むプロパティを追加した後(canを使用)、ネストされたmnl_attr_put_strlinkinfoオブジェクトを追加する必要がありますmnl_attr_nest_startmnl_attr_put_str次に、同じ機能を使用してキャンビットタイミングオブジェクト()も追加する必要がありますstruct can_bittiming。バラよりiplink_can.cこの構造にどのデータを設定するかを示す例です。mnl_attr_nest_end2つのネストされたオブジェクトを呼び出すことでペイロード設定を完了できます。

関連情報