示例#1
0
Errc
from_view(View& v, Stats_reply& m) {
  if (remaining(v) < bytes(m))
    return Errc::STATS_REPLY_OVERFLOW;
  from_view(v, m.header);
  return from_view(v, m.payload, m.header.type);
}
示例#2
0
文件: stats.cpp 项目: roitk/freeflow
Errc 
from_view(View& v, Queue_stats_request& m) {
  from_view(v, m.port_number);
  pad(v, 2);
  from_view(v, m.queue_id);
  return {};
}
示例#3
0
Errc
from_view(View& v, Queue_config_reply& m) {
  if (remaining(v) < bytes(m))
    return Errc::QUEUE_CONFIG_REPLY_OVERFLOW;
  from_view(v, m.port);
  from_view(v, m.queues);
  return {};
}
示例#4
0
文件: stats.cpp 项目: roitk/freeflow
Errc 
from_view(View& v, Vendor_stats& m) {
  if (remaining(v) < bytes(m))
    return Errc::VENDOR_STATS_OVERFLOW;
  from_view(v, m.vendor_id);
  from_view(v, m.data);
  return {};
}
示例#5
0
文件: stats.cpp 项目: roitk/freeflow
Errc 
from_view(View& v, Flow_stats_request& m) {
  from_view(v, m.match);
  from_view(v, m.table_id);
  pad(v, 1);
  from_view(v, m.out_port);
  return {};
}
示例#6
0
Errc
from_view(View& v, Set_config& m) {
  if (remaining(v) < bytes(m))
    return Errc::CONFIG_OVERFLOW;
  from_view(v, m.flags);
  from_view(v, m.miss_send_len);
  return {};
}
示例#7
0
文件: stats.cpp 项目: roitk/freeflow
Errc 
from_view(View& v, Stats_header& m) {
  from_view(v, m.type);
  from_view(v, m.flags);
  if (not is_valid(m.type)) // Required semantic check
    return Errc::BAD_STATS_TYPE;
  return {};
}
示例#8
0
文件: stats.cpp 项目: roitk/freeflow
Errc 
from_view(View& v, Aggregate_stats& m) {
  from_view(v, m.packet_count);
  from_view(v, m.byte_count);
  from_view(v, m.flow_count);
  pad(v, 4);
  return {};
}
示例#9
0
文件: stats.cpp 项目: roitk/freeflow
Errc 
from_view(View& v, Description_stats& m) {
  from_view(v, m.mfr_desc);
  from_view(v, m.hw_desc);
  from_view(v, m.sw_desc);
  from_view(v, m.serial_number);
  from_view(v, m.dp_desc);
  return {};
}
示例#10
0
Errc
from_view(View& v, Port_status& m) {
  if (remaining(v) < bytes(m))
    return Errc::PORT_STATUS_OVERFLOW;
  from_view(v, m.reason);
  pad(v, 7);
  from_view(v, m.port);
  return {};
}
示例#11
0
Errc
from_view(View& v, Error& m) {
  if (remaining(v) < bytes(m))
    return Errc::ERROR_OVERFLOW;
  from_view(v, m.type);
  from_view(v, m.code);
  from_view(v, m.data);
  return {};
}
示例#12
0
Errc
from_view(View& v, Message& m) {
  if (remaining(v) < bytes(m))
    return Errc::MESSAGE_OVERFLOW;

  from_view(v, m.header);

  // TODO: Constrain the view?
  return from_view(v, m.payload, m.header.type);
}
示例#13
0
Errc
from_view(View& v, Port_mod& m) {
  if (remaining(v) < bytes(m))
    return Errc::PORT_MOD_OVERFLOW;
  from_view(v, m.port);
  from_view(v, m.hw_addr);
  from_view(v, m.config);
  from_view(v, m.mask);
  from_view(v, m.advertised);
  return {};
}
示例#14
0
文件: stats.cpp 项目: roitk/freeflow
Errc 
from_view(View& v, Queue_stats_entry& m) {
  from_view(v, m.length);
  pad(v, 2);
  from_view(v, m.tx_bytes);
  from_view(v, m.tx_packets);
  from_view(v, m.tx_errors);

  if (m.length != 32) // Required semantic check
    return Errc::BAD_QUEUE_STATS_LENGTH;
  return {};
}
示例#15
0
Errc
from_view(View& v, Packet_in& m) {
  if (remaining(v) < bytes(m))
    return Errc::PACKET_IN_OVERFLOW;
  from_view(v, m.buffer_id);
  from_view(v, m.total_len);
  from_view(v, m.in_port);
  from_view(v, m.reason);
  pad(v, 1);
  from_view(v, m.data);
  return {};
}
示例#16
0
文件: queue.cpp 项目: roitk/freeflow
Errc
from_view(View& v, Queue& m) {
  if (remaining(v) < bytes(m))
    return Errc::PROPERTY_OVERFLOW;
  if (m.length < bytes(m))
    return Errc::BAD_QUEUE_LENGTH;
  from_view(v, m.queue_id);
  from_view(v, m.length);
  pad(v, 2);
  from_view(v, m.properties);
  return {};
}
示例#17
0
Error 
from_view(View& v, Header& h) {
  if (v.remaining() < bytes(h))
    return make_error_code(errc::header_overflow);
  
  from_view(v, h.version);
  from_view(v, h.type);
  from_view(v, h.length);
  from_view(v, h.xid);

  // Minimum semantic checking
  if (h.length < bytes(h))
    return make_error_code(errc::bad_header_length);
  return {};
}
示例#18
0
Errc
from_view(View& v, Flow_mod& m) {
  if (remaining(v) < bytes(m))
    return Errc::FLOW_MOD_OVERFLOW;
  from_view(v, m.match);
  from_view(v, m.cookie);
  from_view(v, m.command);
  from_view(v, m.idle_timeout);
  from_view(v, m.hard_timeout);
  from_view(v, m.priority);
  from_view(v, m.buffer_id);
  from_view(v, m.out_port);
  from_view(v, m.flags);
  return from_view(v, m.actions);
}
示例#19
0
Errc
from_view(View& v, Header& m) {
  if (remaining(v) < bytes(m))
    return Errc::MESSAGE_OVERFLOW; // FIXME: not the right code?
  from_view(v, m.version);
  from_view(v, m.type);
  from_view(v, m.length);
  from_view(v, m.xid);
  if (not is_valid(m.version)) // Optional semantic check
    return Errc::BAD_VERSION;
  if (not is_valid(m.type)) // Required semantic check
    return Errc::BAD_MESSAGE_TYPE;
  if (m.length < bytes(m)) // Required semantic check
    return Errc::BAD_HEADER_LENGTH;
  return {};
}
示例#20
0
文件: queue.cpp 项目: roitk/freeflow
Errc
from_view(View& v, Property& m) {
  from_view(v, m.property);
  from_view(v, m.length);
  pad(v, 4);

  if (not is_valid(m.property)) // Required semantic check
    return Errc::BAD_PROPERTY_TYPE;
  if (m.length < bytes(m)) // Required semantic check
    return Errc::BAD_PROPERTY_LENGTH;

  if (Constrained_view c = constrain(v, m.length - bytes(m)))
    return to_view(c, m.value, m.property);
  else
    return {};
}
示例#21
0
Errc
from_view(View& v, Packet_out& m) {
  if (remaining(v) < bytes(m))
    return Errc::PACKET_OUT_OVERFLOW;

  from_view(v, m.buffer_id);
  from_view(v, m.port);
  from_view(v, m.actions_len);

  if (Constrained_view c = constrain(v, m.actions_len)) {
    if (Trap err = from_view(v, m.actions))
      return err.code();
  } else {
    return Errc::PACKET_OUT_OVERFLOW;
  }

  from_view(v, m.data);
  return {};
}
示例#22
0
Errc
from_view(View& v, Flow_removed& m) {
  if (remaining(v) < bytes(m))
    return Errc::FLOW_REMOVED_OVERFLOW;
  from_view(v, m.match);
  from_view(v, m.cookie);
  from_view(v, m.priority);
  from_view(v, m.reason);
  pad(v, 1);
  from_view(v, m.duration_sec);
  from_view(v, m.duration_nsec);
  from_view(v, m.idle_timeout);
  pad(v, 2);
  from_view(v, m.packet_count);
  from_view(v, m.byte_count);
  return {};
}
示例#23
0
文件: stats.cpp 项目: roitk/freeflow
Errc 
from_view(View& v, Table_stats_entry& m) {
  from_view(v, m.table_id);
  pad(v, 3);
  from_view(v, m.name);
  from_view(v, m.wildcards);
  from_view(v, m.max_entries);
  from_view(v, m.active_count);
  from_view(v, m.lookup_count);
  from_view(v, m.matched_count);
  return {};
}
示例#24
0
文件: stats.cpp 项目: roitk/freeflow
Errc
from_view(View& v, Stats_request_payload& m, Stats_type t) {
  switch(t) {
  case STATS_DESC: return from_view(v, m.empty);
  case STATS_FLOW: return from_view(v, m.flow);
  case STATS_AGGREGATE: return from_view(v, m.flow);
  case STATS_TABLE: return from_view(v, m.empty);
  case STATS_PORT: return from_view(v, m.port);
  case STATS_QUEUE: return from_view(v, m.queue);
  case STATS_VENDOR: return from_view(v, m.vendor);  
  default: break;
  }
  throw Errc::BAD_STATS_TYPE;
}
示例#25
0
文件: stats.cpp 项目: roitk/freeflow
Errc
from_view(View& v, Stats_reply_payload& m, Stats_type t) {
  construct(m, t); // Guarantee that non-trivial members are valid
  switch(t) {
  case STATS_DESC: return from_view(v, m.desc);
  case STATS_FLOW: return from_view(v, m.flow);
  case STATS_AGGREGATE: return from_view(v, m.aggr);
  case STATS_TABLE: return from_view(v, m.table);
  case STATS_PORT: return from_view(v, m.port);
  case STATS_QUEUE: return from_view(v, m.queue);
  case STATS_VENDOR: return from_view(v, m.vendor);  
  default: break;
  }
  throw Errc::BAD_STATS_TYPE;
}
示例#26
0
Errc
from_view(View& v, Feature_reply& m) {
  if (remaining(v) < bytes(m))
    return Errc::FEATURE_OVERFLOW;
  from_view(v, m.datapath_id);
  from_view(v, m.nbuffers);
  from_view(v, m.ntables);
  pad(v, 3);
  from_view(v, m.capabilities);
  from_view(v, m.actions);
  from_view(v, m.ports);
  return {};
}
示例#27
0
文件: stats.cpp 项目: roitk/freeflow
Errc 
from_view(View& v, Port_stats_entry& m) {
  from_view(v, m.port_number);
  pad(v, 6);
  from_view(v, m.rx_packets);
  from_view(v, m.tx_packets);
  from_view(v, m.rx_bytes);
  from_view(v, m.tx_bytes);
  from_view(v, m.rx_dropped);
  from_view(v, m.tx_dropped);
  from_view(v, m.rx_errors);
  from_view(v, m.tx_errors);
  from_view(v, m.rx_frame_err);
  from_view(v, m.rx_over_err);
  from_view(v, m.rx_crc_err);
  from_view(v, m.collisions);
  return {};
}
示例#28
0
文件: stats.cpp 项目: roitk/freeflow
Errc 
from_view(View& v, Port_stats_request& m) {
  from_view(v, m.port_number);
  pad(v, 6);
  return {};
}
示例#29
0
文件: stats.cpp 项目: roitk/freeflow
Errc 
from_view(View& v, Flow_stats_entry& m) {
  from_view(v, m.length);
  from_view(v, m.table_id);
  pad(v, 1);
  from_view(v, m.match);
  from_view(v, m.duration_sec);
  from_view(v, m.duration_nsec);
  from_view(v, m.priority);
  from_view(v, m.idle_timeout);
  from_view(v, m.hard_timeout);
  pad(v, 6);
  from_view(v, m.cookie);
  from_view(v, m.packet_count);
  from_view(v, m.byte_count);

  if (m.length < bytes(m)) // Required semantic check
    return Errc::BAD_FLOW_STATS_LENGTH;

  if (Constrained_view c = constrain(v, m.length - bytes(m)))
    return from_view(c, m.actions);
  return
    Errc::FLOW_STATS_OVERFLOW;
}
示例#30
0
文件: stats.cpp 项目: roitk/freeflow
Errc 
from_view(View& v, Vendor_stats_request& m) {
  from_view(v, m.vendor_id);
  return {};
}