Open shun159 opened 8 years ago
書きかけ
NiciraLearn.new( idle_timeout: 0, hard_timeout: 0, table_id: 255, # 0xff が有効な値かどうかは未確認です。 # => 追記: 0xffは無効です。bad action/bad argumentが帰ってきてしまいます。なので、defaultは0が無難か priority: 65535, cookie: 0, flags: [], # :send_flow_rem || :delete_learned fin_hard_timeout: 0, fin_idle_timeout: 0, specs: [])
# NXM_OF_VLAN_TCI[0..11]がマッチフィールドに追加される。vlan_tciフィールドの12bitをコピーする。 # 同じマッチフィールドへのコピーの場合は、単に #{ field名 }[ofs:nbits] となる。 # コピー先のマッチフィールドは、以下のようになる。 # vlan_tci=0x0000/0x0fff # NXM_NX_VLAN_TCIは16bit長さであるが、vlan_idは0..11bitの範囲である。 # 上のようにマスクがかかり、vlan_idとマッチできる。 LearnMatch.new( n_bits: 12, # デフォルトはdstに指定したoxm_fieldのビット数 src: :vlan_tci, dst: :vlan_tci) # NXM_NX_REG0[0..15]=0x1をマッチフィールドに追加する。dst_fieldのビット長 == ofs+nbitsなら、単に#{dst_field名}=#{value} # となる。dst_fieldのビット長 > ofs+nbitsの場合には、#{dst_field名}[ofs:nbits]表記となる。コピー後にはmaskがかかる。 # コピー先のマッチフィールドは、以下のようになる。 # reg0=0x1/0xffff # となる。LearnMatchと同様にマスクが可能。 WriteMatch.new( n_bits: 16, value: 1, dst: :reg0) # load:#{ source_field値 }[ofs:nbits]->#{dst_field}[ofs:nbits]をactionsに追加する。 # *Matchとはことなり、指定したdst_fieldにsrc_fieldの値がloadされる。 # コピー先のアクションは、以下のようになる。 # load:0->NXM_NX_REG1[0..11] LearnLoad.new( n_bits: 12, # デフォルトはdstに指定したoxm_fieldのビット数 src: :vlan_tci, dst: :reg1) # load:#{value}->#{dst_field}[ofs:nbits]をactionsに追加する。 # *Matchとはことなり、指定したdst_fieldにsrc_fieldの値がloadされる。 # コピー先のアクションは、以下のようになる。 # load:2->NXM_NX_REG2[] WriteLoad.new( n_bits: 32, # デフォルトはdstに指定したoxm_fieldのビット数 value: 2, dst: :reg2) SendOutReg.new( n_bits: 32, # デフォルトはoutputに指定したoxm_fieldのビット数 output: :reg0, offset: 0)
書きかけ
NiciraLearn
specs