Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

wip: Add support for NXAST_LEARN #298

Open
wants to merge 2 commits into
base: develop
Choose a base branch
from
Open

wip: Add support for NXAST_LEARN #298

wants to merge 2 commits into from

Conversation

shun159
Copy link
Member

@shun159 shun159 commented Nov 26, 2015

No description provided.

list
end

def length

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Use delegate to define delegations.


def destination_class
Match.const_get(@destination.to_s
.split('_')

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Place the . on the previous line, together with the method call receiver.

@shun159
Copy link
Member Author

shun159 commented Nov 30, 2015

書きかけ

NiciraLearn

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: [])

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)

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

Successfully merging this pull request may close these issues.

2 participants