goflowdを趣味で作っていて気づいたこと

昨年から趣味でgoflowdというソフトウェアを(進捗度合いが良くないですが)作っています。作ろうと思ったモチベーションは以下のとおりです。 メンテしているsoftflowdのメンテが面倒になってきて、最近の言語で代替となるソフトウェアを作りたくなりました。 (元々softflowdはDamien MillerさんというOpenBSD comitterの人が作っていたソフトウェアです。以前、Patchを送っていたらContributor扱いにしてもらいました。 google codeが廃止になった際にに自分がgithubへとCloneしたら今や自分のgithubレポジトリがdebian packageの参照先になってしまいました。) softflowdの実装だと(-Tオプションで何パターンか選べますが)Felxible NetFlow相当のFlowKey選択ができません。そこでFlowKeyが自由に選択できる実装をRFC6728のyangを用いて作りたいと思いました。 yangをgoのソースコードに変換する方法として、例えばgobgpではopenconfigのyangをpyangのpluginで変換していますが最新のopenconfigのyangを変換できない状態になっていてpyang pluginを適切にメンテしないとyang側の変更についていけてないように見受けられます。 なのでpyangではなく、openconfigツールであるygotを試して見ようと思いました。 NetFlow/IPFIXのSource/Destination ASの情報を得るために、gobgpと連携したくなりました。(これは全くまだできていませんが。) 以上の意気込みで作り始めましたが実際使ってみるとRFC6728とygotにそれぞれイマイチな点がありました。 RFC6728の問題 よくある5 tuppleのflowはSrc IP/Dst IP/Src Port/Dst Port/Protocolの5つで実際L4はTCP/UDP/ICMPが代表的なプロトコルなので、これを表そうとすると最低限以下の4パターンのIEを含めた4種類のテンプレートが必要になります。 sourceIPv4Address, destinationIPv4Address, sourceTransportPort, destinationTransportPort, protocolIdentifier sourceIPv6Address, destinationIPv6Address, sourceTransportPort, destinationTransportPort, protocolIdentifier sourceIPv4Address, destinationIPv4Address, icmpTypeCodeIPv4, protocolIdentifier sourceIPv6Address, destinationIPv6Address, icmpTypeCodeIPv6, protocolIdentifier RFC6728で表されるコンフィグの構造を一部抜き出すとOvservationPoint<->SeectionProcess<->Selectorの関係になっています。 上の4パターンを考慮した場合に観測したパケットがICMPかそれ以外でテンプレートを使いわけたいわけですが、パケットをFilterしようとすると、IPFIXのConfiguration ModelではFilterMatchを使う必要があります。 ところがFilterMatchはieとそのvalueしか指定できません。ICMPだけを指定したければie=4(protocolIdentifier)にしてvalue=1(ICMP)にすれば指定できます。 一方、それ以上のことができないので、ICMP以外という指定ができません。Notみたいな構文が欲しいわけです。 または、TCP/UDP/SCTP/DCCPなどのプロトコルを複数指定したいですが、valueはleafになっておりleaf-listになっていないため1つしか指定できません。 今のConfiguration Modelで表現するにはobservationPointにTCP用、UDP用、SCTP用、DCCP用、ICMP用のSelectionProcessを作れば実現できますが、単純なことをやりたい目的に対して大変設定が面倒です。 +-------------------------------+ | ObservationPoint | +-------------------------------+ | name | | observationPointId {readOnly} | | observationDomainId | 0..* | ifName[0....

January 3, 2020

Nexus7(2012)をAndroid 7.1.2にする

Nexus7(2012)を純正の5.1.1だとどんどんもっさりになって全く使える気がしないのですが、7.1.2にすると軽くなるというweb上の記載が多いので、やってみた。色々と試行錯誤してしまったので記憶ベースで書いているので正確ではないかもしれないです。 参考にしたページ Asus Nexus 7 2012 WiFi/3G Android 7.x AOSP Nexus 7(2012) Wi-Fi版にAndroid 7.1.2 AOSPを焼く方法! Android 7.1 Nougat on Nexus 7 2012 WiFi Installation AOSP 7.1.2 + root + bootloader sur NEXUS 7 2012]] ADBコマンドの準備 SDK Platform Tools release notesのページから"SDK Platform-Tools for Windows"をダウンロードする。最初誤ってPlatform-toolsではなく、別のページからAndroid Studioをダウンロードして時間を無駄にしてしまった。ダウンロードしたzipを回答したら適当において、PATH通す。 USBドライバの準備と接続 Google USB ドライバを入手するのページからダウンロードする。これまた、Asusのページから古いドライバダウンロードしてしまって最初認識しなかった。やり方はAndroidのadbコマンドをWindows PCにインストールとかが詳しい。 必要なファイルの準備 Asus Nexus 7 2012 WiFi/3G Android 7.x AOSPに書いてあるファイルを準備すれば良いです。 TWRP 3.2.3-0 for Grouper Install 7.1.2 Grouper OTA-Package OpenGAPPSのARMの7.1のpicoを選択 SetupWizzard-Fix 作業 adb push aosp_grouper-7....

January 12, 2019

RENATをUbuntu 18.04上で動かす

RENATを触ってみようかと思ったが、CentOSのインストール事例しかなかった。Ubuntuで環境作るのに意外と時間がかかったので、そのメモ。 Python3をデフォルトにする方法 sudo update-alternatives --install /usr/bin/python python /usr/bin/python2.7 1 sudo update-alternatives --install /usr/bin/python python /usr/bin/python3.6 2 aptでインストール可能なものをインストール sudo apt install python3-jinja2 python3-numpy python3-pandas python3-pdfkit python3-pyte python3-pyvmomi libsnmp-dev python3-pip pip3でその他のパッケージをインストール pip3 install robotframework robotframework-seleniumlibrary robotframework-selenium2library robotframework-sshlibrary docutils python3-netsnmp pyscreenshot PyVirtualDisplay ixnetwork

December 30, 2018

OpenDayLightのNitrogenのKaraf4でapidocを出す

opendaylight startupの作成 archtypeVersion=1.4.1としてスケルトンを作成。 mvn archetype:generate -DarchetypeGroupId=org.opendaylight.controller -DarchetypeArtifactId=opendaylight-startup-archetype -DarchetypeRepository=http://nexus.opendaylight.org/content/repositories/opendaylight.release/ -DarchetypeCatalog=remote -DarchetypeVersion=1.4.1 apiへのdependenciesの追加 利用したい基本的なyangはmdsal.modelで使われ、定義されているのでこの依存関係を書いてあげれば使えるようになるらしい。 api/pom.xmlに以下の依存関係を追加. <dependencies> <dependency> <groupId>org.opendaylight.mdsal.model</groupId> <artifactId>ietf-yang-types-20130715</artifactId> </dependency> <dependency> <groupId>org.opendaylight.mdsal.model</groupId> <artifactId>ietf-topology</artifactId> </dependency> <dependency> <groupId>org.opendaylight.mdsal.model</groupId> <artifactId>yang-ext</artifactId> </dependency> </dependencies> featureの修正 featureディレクトリ以下にfeature-X, odl-X-api, odl-X-cli, odl-X-restのXの部分を好きなアプリケーション名に変更する。 <modules> <module>features-X</module> <module>odl-X</module> <module>odl-X-api</module> <module>odl-X-rest</module> <module>odl-X-cli</module> </modules> featuresのディレクトリはkarafで立ち上げた時にfeature:lisで出てくるfeaturesを規定しているようなので、ここに依存関係で呼び出したいfeatureを記述すればいいようである。今回は、rest経由でapidocを出したかったのでfeature-X-restにodl-restconfとodl-mdsal-apidocsを追記 featre-X-rest/pom.xmlに以下を追加 <dependencies> <dependency> <groupId>org.opendaylight.netconf</groupId> <artifactId>odl-restconf</artifactId> <type>xml</type> <classifier>features</classifier> </dependency> <dependency> <groupId>org.opendaylight.netconf</groupId> <artifactId>odl-mdsal-apidocs</artifactId> <type>xml</type> <classifier>features</classifier> </dependency> </dependencies> コンパイル とりあえず今回は何もjavaのソースコードを書いていないので、以下のオプションをつけてコンパイル mvn clean install -DskipTests -Dcheckstyle.skip=true

January 21, 2018 · hitoshi

初めてのOpenDayLightのHello Worldが難しすぎた

OpenDayLightのドキュメントは結構充実しているが、古かったり、たくさんあったりでどれを信頼していいかわからない。 公式Developer DocumentのDeveloping Apps on the OpenDaylight controllerの通り実施しようとしたら大ハマリした。 事前準備:環境構築 ひとまずGettingStarted:Development Environment Setupの通り環境をUbuntu上で構築する。 .bashrcに書くべき以下のパラメータは-XX:MaxPermSize=512mの部分のパラメータがコンパイル時にWarning出るのでOptionalの設定なのでやめました。 あと必要性があるかはわかりませんが、念の為Server Faultの通りに.bashrcにJAVE_HOMEを設定しました。 それでドキュメント通りm2のsetteing.xmlを入手する。 ...

May 14, 2017 · hitoshi

初めてのgithub pull requestのmerge

今朝起きるとgithubでpull requestを受けていました。自分でもpull reqを送ったことないし、どちらかというとsubversion脳なので、調べながら以下のページを参考にやってみました。 参考ページ 初めてPull Requestをマージしてみた github で pull request をされたとき・するときの手順 流れは以下のとおりと理解しました。 “git clone 自分のレポジトリ” でmerge元のソースコードの入手(clone) “cd checkoutされたディレクトリ” で作業フォルダの変更 “git checkout -b 一時作業用ブランチ” でブランチの作成かつ一時作業ブランチの変更(checkout) “git pull プルリクエスト元のレポジトリ” で作成したブランチへ他人が変更・更新したソースコードの入手(pull)。このあと適宜必要に応じて試験をする。 “git checkout master” でmasterブランチへ変更(checkout) “git merge 一時作業ブランチ” で現作業ブランチのmasterへ一時作業ブランチをmerge “git push origin master” で手元からorigin(clone元のgithub)へpush

May 14, 2017 · hitoshi

新宿Pizzeria CAPOLI

新宿のピザ屋CAPOLIに行きました。 食べログ(https://tabelog.com/tokyo/A1304/A130401/13123990/)だと評価いいみたいですが、平日はランチセットがあるようで割安みたいですが、土日はそんな安くないし、味もと凄くおいしいとかではなかったです。おいしいですけど値段との兼ね合いだと今後いかないかなという感じでした。

April 23, 2017 · hitoshi

netowlのwpblogに引っ越した

000webhostが頻繁にダウンしていたと思ったら、ずっとダウンしぱなしになってしまったのでwpblogに引っ越しました。 モバイルでは広告が出てしまいますが、独自ドメインが使えるサービスということで選択しました。引っ越しの際に画像がうまいこと引っ越しできず飛ばしてしまったのが残念ですが。

April 23, 2017 · hitoshi

sysrepoのがコンパイル通らない

sysrepoをgithubからcloneしてコンパイルしたところlibyangの最新版(0.12.102)に対応できてなくてコンパイルが通らなかった。とりあえず適当に直してコンパイルしてみた。 ...

March 4, 2017 · hitoshi

システム監査技術者試験の勉強(H28 AM2)その1

...

March 4, 2017 · hitoshi