【Ethernet】車載ネットワーク その57【lwIP+npcap③】

【Ethernet】車載ネットワーク その57【lwIP+npcap③】 車載ネットワーク

バックナンバーはこちら。
https://www.simulationroom999.com/blog/In-vehicle-network-backnumber/

はじめに

ネットワークシミュレーションに向けてのlwIPの構築。

登場人物

博識フクロウのフクさん

指差しフクロウ

イラストACにて公開の「kino_k」さんのイラストを使用しています。
https://www.ac-illust.com/main/profile.php?id=iKciwKA9&area=1

エンジニア歴8年の太郎くん

技術者太郎

イラストACにて公開の「しのみ」さんのイラストを使用しています。
https://www.ac-illust.com/main/profile.php?id=uCKphAW2&area=1

lwIPのソースコード修正

太郎くん
太郎くん

まずは、lwIPをちょっと修正しないとビルドが通らないんだっけ?

フクさん
フクさん

そうだね。
lwIPの疑似受信時にそういうのがあった。

太郎くん
太郎くん

確かここで説明してたね。

フクさん
フクさん

そうそう。

太郎くん
太郎くん

というわけで、
その時のdiffをそのまま適用。
あるものは使わないとね。

diff U3B include/lwip/arch.h include/lwip/arch.h
--- include/lwip/arch.h	Fri Nov 23 04:57:02 2018
+++ include/lwip/arch.h	Tue Jan 14 21:30:50 2020
@@ -45,7 +45,7 @@
 #define BIG_ENDIAN 4321
 #endif
 
-#include "arch/cc.h"
+//#include "arch/cc.h"
 
 /**
  * @defgroup compiler_abstraction Compiler/platform abstraction
@@ -71,6 +71,7 @@
 #ifdef __DOXYGEN__
 #define LWIP_RAND() ((u32_t)rand())
 #endif
+#define LWIP_RAND() ((u32_t)rand())
 
 /** Platform specific diagnostic output.\n
  * Note the default implementation pulls in printf, which may
@@ -122,15 +123,15 @@
 #if !defined(LWIP_HAVE_INT64) && defined(UINT64_MAX)
 #define LWIP_HAVE_INT64 1
 #endif
-typedef uint8_t   u8_t;
-typedef int8_t    s8_t;
-typedef uint16_t  u16_t;
-typedef int16_t   s16_t;
-typedef uint32_t  u32_t;
-typedef int32_t   s32_t;
+typedef unsigned char   u8_t;
+typedef signed char    s8_t;
+typedef unsigned short  u16_t;
+typedef signed short   s16_t;
+typedef unsigned long  u32_t;
+typedef signed long   s32_t;
 #if LWIP_HAVE_INT64
-typedef uint64_t  u64_t;
-typedef int64_t   s64_t;
+typedef unsigned long long  u64_t;
+typedef signed long long   s64_t;
 #endif
 typedef uintptr_t mem_ptr_t;
 #endif
diff U3B netif/lowpan6.c netif/lowpan6.c
--- netif/lowpan6.c	Fri Nov 23 04:57:02 2018
+++ netif/lowpan6.c	Tue Jan 14 20:40:19 2020
@@ -679,7 +679,7 @@
     /* check for duplicate */
     lrh = lowpan6_data.reass_list;
     while (lrh != NULL) {
-      uint8_t discard = 0;
+      unsigned char discard = 0;
       lrh_next = lrh->next_packet;
       if ((lrh->sender_addr.addr_len == src.addr_len) &&
           (memcmp(lrh->sender_addr.addr, src.addr, src.addr_len) == 0)) {
diff U3B netif/lowpan6_ble.c netif/lowpan6_ble.c
--- netif/lowpan6_ble.c	Fri Nov 23 04:57:02 2018
+++ netif/lowpan6_ble.c	Tue Jan 14 20:40:11 2020
@@ -107,7 +107,7 @@
  * @see LWIP_RFC7668_LINUX_WORKAROUND_PUBLIC_ADDRESS
  */
 void
-ble_addr_to_eui64(uint8_t *dst, const uint8_t *src, int public_addr)
+ble_addr_to_eui64(unsigned char *dst, const unsigned char *src, int public_addr)
 {
   /* according to RFC7668 ch 3.2.2. */
   memcpy(dst, src, 3);
@@ -136,7 +136,7 @@
  * 
  */
 void
-eui64_to_ble_addr(uint8_t *dst, const uint8_t *src)
+eui64_to_ble_addr(unsigned char *dst, const unsigned char *src)
 {
   /* according to RFC7668 ch 3.2.2. */
   memcpy(dst,src,3);

lwIPのVisualStudio 2017向けプロジェクト

太郎くん
太郎くん

あとは、VisualStudio 2017でソリューションとプロジェクトを作る。
名称は「lwip_pcap」にしておこう。

太郎くん
太郎くん

あとは、lwIPのフォルダ構成とVisualStudio 2017上のフィルタ構成を一致させる感じで
ソースコードとヘッダファイルを追加していく。

lwIPソースコードとヘッダファイル
太郎くん
太郎くん

これでとりあえずビルドが通るってのだけ確認。

フクさん
フクさん

うん。
問題なさそうだねー。

太郎くん
太郎くん

となると後はnpcap向けのインターフェースか。

まとめ

太郎くん
太郎くん

まとめだよ。

  • lwIPのソースコード修正。
    • 以前のlwIP疑似受信の時の情報を流用。
  • VisualStudio 2017でlwIPのソリューションとプロジェクトを作成。
    • フィルタをフォルダ構成に合わせておくと見やすいかも。

バックナンバーはこちら。

コメント

タイトルとURLをコピーしました