私は現在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_str
linkinfoオブジェクトを追加する必要がありますmnl_attr_nest_start
。mnl_attr_put_str
次に、同じ機能を使用してキャンビットタイミングオブジェクト()も追加する必要がありますstruct can_bittiming
。バラよりiplink_can.cこの構造にどのデータを設定するかを示す例です。mnl_attr_nest_end
2つのネストされたオブジェクトを呼び出すことでペイロード設定を完了できます。