• 博客园logo
  • 会员
  • 周边
  • 众包
  • 新闻
  • 博问
  • 闪存
  • 赞助商
  • Chat2DB
    • 搜索
      所有博客
    • 搜索
      当前博客
  • 写随笔 我的博客 短消息 简洁模式
    用户头像
    我的博客 我的园子 账号设置 会员中心 简洁模式 ... 退出登录
    注册 登录

HypocriSY966

  • 博客园
  • 联系
  • 订阅
  • 管理

公告

View Post

实验4:开源控制器实践——OpenDaylight

(一)基本要求

1、利用Mininet平台搭建下图所示网络拓扑,并连接OpenDaylight控制器;

2、通过Postman工具调用OpenDaylight提供的API下发流表,实现拓扑内主机h1和h3网络中断10s。

(二)进阶要求

ODL提供的文档链接

http://localhost:8181/apidoc/explorer/index.html

获取拓扑的交换机

http://localhost:8181/apidoc/explorer/index.html#!/network-topology(2013-07-12)/GET_network_topology_get_1

查看代码
Response Class

    Model
    Model Schema

(config)network-topology {
topology (array[(config)topology], optional): This is the model of an abstract topology. A topology contins nodes and links. Each topology MUST be identified by unique topology-id for reason that a network could contain many topologies.
}
(config)topology {
node (array[(config)node], optional): The list of network nodes defined for the topology.,
topology-types (object[(config)topology-types], optional): This container is used to identify the type, or types (as a topology can support several types simultaneously), of the topology. Topology types are the subject of several integrity constraints that an implementing server can validate in order to maintain integrity of the datastore. Topology types are indicated through separate data nodes; the set of topology types is expected to increase over time. To add support for a new topology, an augmenting module needs to augment this container with a new empty optional container to indicate the new topology type. The use of a container allows to indicate a subcategorization of topology types. The container SHALL NOT be augmented with any data nodes that serve a purpose other than identifying a particular topology type. ,
topology-id (string, optional): It is presumed that a datastore will contain many topologies. To distinguish between topologies it is vital to have UNIQUE topology identifiers. ,
l3-unicast-igp-topology:igp-topology-attributes (object[(config)igp-topology-attributes], optional),
link (array[(config)link], optional): A Network Link connects a by Local (Source) node and a Remote (Destination) Network Nodes via a set of the nodes' termination points. As it is possible to have several links between the same source and destination nodes, and as a link could potentially be re-homed between termination points, to ensure that we would always know to distinguish between links, every link is identified by a dedicated link identifier. Note that a link models a point-to-point link, not a multipoint link. Layering dependencies on links in underlay topologies are not represented as the layering information of nodes and of termination points is sufficient. ,
underlay-topology (array[(config)underlay-topology], optional): Identifies the topology, or topologies, that this topology is dependent on.
}
(config)node {
node-id (string, optional): The identifier of a node in the topology. A node is specific to a topology to which it belongs.,
termination-point (array[(config)termination-point], optional): A termination point can terminate a link. Depending on the type of topology, a termination point could, for example, refer to a port or an interface.,
l3-unicast-igp-topology:igp-node-attributes (object[(config)igp-node-attributes], optional),
supporting-node (array[(config)supporting-node], optional): This list defines vertical layering information for nodes. It allows to capture for any given node, which node (or nodes) in the corresponding underlay topology it maps onto. A node can map to zero, one, or more nodes below it; accordingly there can be zero, one, or more elements in the list. If there are specific layering requirements, for example specific to a particular type of topology that only allows for certain layering relationships, the choice below can be augmented with additional cases. A list has been chosen rather than a leaf-list in order to provide room for augmentations, e.g. for statistics or priorization information associated with supporting nodes.
}
(config)termination-point {
l3-unicast-igp-topology:igp-termination-point-attributes (object[(config)igp-termination-point-attributes], optional),
tp-id (string, optional)
}
(config)igp-termination-point-attributes {
l3-unicast-igp-topology:termination-point-type (object, optional)
}
(config)igp-node-attributes {
l3-unicast-igp-topology:router-id (array[string or string], optional): Router-id for the node,
l3-unicast-igp-topology:flag (array[flag-identity], optional): Node operational flags,
isis-topology:isis-node-attributes (object[(config)isis-node-attributes], optional),
l3-unicast-igp-topology:prefix (array[(config)prefix], optional),
ospf-topology:ospf-node-attributes (object[(config)ospf-node-attributes], optional),
l3-unicast-igp-topology:name (string, optional): Node name
}
(config)isis-node-attributes {
isis-topology:net (array[string], optional),
isis-topology:multi-topology-id (array[integer], optional): List of Multi Topology Identifier upto 128 (0-127). RFC 4915,
isis-topology:iso (object[(config)iso], optional),
isis-topology:ted (object[(config)ted], optional),
isis-topology:router-type (object, optional)
}
(config)iso {
isis-topology:iso-system-id (string, optional),
isis-topology:iso-pseudonode-id (string, optional)
}
(config)ted {
isis-topology:color (integer, optional): Administrative group or color of the link,
isis-topology:te-default-metric (integer, optional): Traffic Engineering Metric,
isis-topology:unreserved-bandwidth (array[(config)unreserved-bandwidth], optional): Unreserved bandwidth for 0-7 priority levels. Units in bytes per second,
isis-topology:srlg (object[(config)srlg], optional): Shared Risk Link Group Attributes,
isis-topology:max-link-bandwidth (number, optional): Maximum bandwidth that can be see on this link in this direction. Units in bytes per second,
isis-topology:max-resv-link-bandwidth (number, optional): Maximum amount of bandwidth that can be reserved in this direction in this link. Units in bytes per second
}
(config)unreserved-bandwidth {
isis-topology:bandwidth (number, optional): Unreserved bandwidth for this level,
isis-topology:priority (integer, optional)
}
(config)srlg {
isis-topology:interface-switching-capabilities (array[(config)interface-switching-capabilities], optional): List of interface capabilities for this interface,
isis-topology:srlg-values (array[(config)srlg-values], optional): List of Shared Risk Link Group this interface belongs to.,
isis-topology:link-protection-type (integer, optional): Link Protection Type desired for this link
}
(config)interface-switching-capabilities {
isis-topology:switching-capability (undefined, optional) = ['PSC-1' or 'PSC-2' or 'PSC-3' or 'PSC-4' or 'L2SC' or 'TDM' or 'LSC' or 'FSC']: Switching Capability for this interface,
isis-topology:time-division-multiplex-capable (object[(config)time-division-multiplex-capable], optional): Interface has time-division multiplex capabilities,
isis-topology:packet-switch-capable (object[(config)packet-switch-capable], optional): Interface has packet-switching capabilities,
isis-topology:encoding (integer, optional): Encoding supported by this interface,
isis-topology:max-lsp-bandwidth (array[(config)max-lsp-bandwidth], optional): Maximum LSP Bandwidth at priorities 0-7
}
(config)time-division-multiplex-capable {
isis-topology:minimum-lsp-bandwidth (number, optional): Minimum LSP Bandwidth. Units in bytes per second,
isis-topology:indication (integer, optional): Indication whether the interface supports Standard or Arbitrary SONET/SDH
}
(config)packet-switch-capable {
isis-topology:minimum-lsp-bandwidth (number, optional): Minimum LSP Bandwidth. Units in bytes per second,
isis-topology:interface-mtu (integer, optional): Interface MTU
}
(config)max-lsp-bandwidth {
isis-topology:bandwidth (number, optional): Max LSP Bandwidth for this level,
isis-topology:priority (integer, optional)
}
(config)srlg-values {
isis-topology:srlg-value (integer, optional): Shared Risk Link Group value
}
(config)prefix {
l3-unicast-igp-topology:metric (integer, optional),
l3-unicast-igp-topology:flag (array[flag-identity], optional),
ospf-topology:ospf-prefix-attributes (object[(config)ospf-prefix-attributes], optional),
l3-unicast-igp-topology:prefix (string or string, optional)
}
(config)ospf-prefix-attributes {
ospf-topology:forwarding-address (string, optional)
}
(config)ospf-node-attributes {
ospf-topology:router-type (object, optional),
ospf-topology:dr-interface-id (integer, optional): For pseudonodes, DR interface-id,
ospf-topology:ted (object[(config)ted], optional),
ospf-topology:multi-topology-id (array[integer], optional): List of Multi-Topology Identifier up-to 128 (0-127). RFC 4915,
ospf-topology:capabilities (array, optional): OSPF capabilities as bit vector. RFC 4970
}
(config)supporting-node {
node-ref (object, optional)
}
(config)topology-types {
l3-unicast-igp-topology:l3-unicast-igp-topology (object[(config)l3-unicast-igp-topology], optional)
}
(config)l3-unicast-igp-topology {
isis-topology:isis (object[(config)isis], optional),
ospf-topology:ospf (object[(config)ospf], optional)
}
(config)isis {
}
(config)ospf {
}
(config)igp-topology-attributes {
l3-unicast-igp-topology:flag (array[flag-identity], optional): Topology flags,
ospf-topology:ospf-topology-attributes (object[(config)ospf-topology-attributes], optional),
isis-topology:isis-topogloy-attributes (object[(config)isis-topogloy-attributes], optional),
l3-unicast-igp-topology:name (string, optional): Name of the topology
}
(config)ospf-topology-attributes {
ospf-topology:area-id (integer, optional)
}
(config)isis-topogloy-attributes {
isis-topology:net (string, optional)
}
(config)link {
link-id (string, optional): The identifier of a link in the topology. A link is specific to a topology to which it belongs.,
supporting-link (array[(config)supporting-link], optional),
destination (object[(config)destination], optional),
source (object[(config)source], optional),
l3-unicast-igp-topology:igp-link-attributes (object[(config)igp-link-attributes], optional)
}
(config)supporting-link {
link-ref (object, optional)
}
(config)destination {
dest-node (object): Destination node identifier, must be in same topology.,
dest-tp (object, optional): Termination point within destination node that terminates the link.
}
(config)source {
source-node (object): Source node identifier, must be in same topology.,
source-tp (object, optional): Termination point within source node that terminates the link.
}
(config)igp-link-attributes {
l3-unicast-igp-topology:metric (integer, optional): Link Metric,
ospf-topology:ospf-link-attributes (object[(config)ospf-link-attributes], optional),
l3-unicast-igp-topology:flag (array[flag-identity], optional): Link flags,
l3-unicast-igp-topology:name (string, optional): Link Name,
isis-topology:isis-link-attributes (object[(config)isis-link-attributes], optional)
}
(config)ospf-link-attributes {
ospf-topology:ted (object[(config)ted], optional),
ospf-topology:multi-topology-id (integer, optional)
}
(config)isis-link-attributes {
isis-topology:multi-topology-id (integer, optional),
isis-topology:ted (object[(config)ted], optional)
}
(config)underlay-topology {
topology-ref (object, optional)
}

获取指定交换机信息

http://localhost:8181/apidoc/explorer/index.html#!/opendaylight-inventory(2013-08-19)/GET_node_get_5

查看代码
 Implementation Notes

A list of nodes (as defined by the 'grouping node').
Response Class

    Model
    Model Schema

(config)node {
netconf-node-inventory:pass-through (object[(config)pass-through], optional): When the underlying node is connected, its NETCONF context is available verbatim under this container through the mount extension.,
flow-node-inventory:group (array[(config)group], optional),
flow-node-inventory:table (array[(config)table], optional),
netconf-node-inventory:initial-capability (array[string], optional),
flow-node-inventory:port-number (integer, optional): Port number of a flow capable node.,
flow-node-inventory:stale-group (array[(config)stale-group], optional),
flow-node-inventory:supported-actions (object[(config)supported-actions], optional),
netconf-node-inventory:connected (boolean, optional),
flow-node-inventory:switch-features (object[(config)switch-features], optional),
netconf-node-inventory:current-capability (array[string], optional),
opendaylight-group-statistics:group-features (object[(config)group-features], optional),
flow-node-inventory:ip-address (string or string, optional): IP address of a flow capable node.,
flow-node-inventory:supported-match-types (object[(config)supported-match-types], optional),
flow-node-inventory:manufacturer (string, optional),
flow-node-inventory:supported-instructions (object[(config)supported-instructions], optional),
flow-node-inventory:hardware (string, optional),
flow-node-inventory:description (string, optional),
opendaylight-meter-statistics:meter-features (object[(config)meter-features], optional),
flow-node-inventory:serial-number (string, optional),
id (string, optional): The unique identifier for the node.,
flow-node-inventory:meter (array[(config)meter], optional),
flow-node-inventory:stale-meter (array[(config)stale-meter], optional),
node-connector (array[(config)node-connector], optional): A list of node connectors that belong this node.,
flow-node-inventory:software (string, optional)
}
(config)pass-through {
}
(config)group {
opendaylight-group-statistics:group-desc (object[(config)group-desc], optional),
flow-node-inventory:buckets (object[(config)buckets], optional),
opendaylight-group-statistics:group-statistics (object[(config)group-statistics], optional),
flow-node-inventory:group-name (string, optional),
flow-node-inventory:group-type (undefined, optional) = ['group-all' or 'group-select' or 'group-indirect' or 'group-ff'],
flow-node-inventory:group-id (integer, optional),
flow-node-inventory:container-name (string, optional),
flow-node-inventory:barrier (boolean, optional)
}
(config)group-desc {
opendaylight-group-statistics:container-name (string, optional),
opendaylight-group-statistics:barrier (boolean, optional),
opendaylight-group-statistics:group-id (integer, optional),
opendaylight-group-statistics:buckets (object[(config)buckets], optional),
opendaylight-group-statistics:group-name (string, optional),
opendaylight-group-statistics:group-type (undefined, optional) = ['group-all' or 'group-select' or 'group-indirect' or 'group-ff']
}
(config)buckets {
flow-node-inventory:bucket (array[(config)bucket], optional)
}
(config)bucket {
flow-node-inventory:watch_group (integer, optional),
flow-node-inventory:weight (integer, optional),
flow-node-inventory:action (array[(config)action], optional),
flow-node-inventory:watch_port (integer, optional),
flow-node-inventory:bucket-id (integer, optional)
}
(config)action {
opendaylight-flow-table-statistics:action (object, optional),
opendaylight-flow-table-statistics:order (integer, optional)
}
(config)group-statistics {
opendaylight-group-statistics:byte-count (integer, optional),
opendaylight-group-statistics:duration (object[(config)duration], optional),
opendaylight-group-statistics:group-id (integer, optional),
opendaylight-group-statistics:buckets (object[(config)buckets], optional),
opendaylight-group-statistics:ref-count (integer, optional),
opendaylight-group-statistics:packet-count (integer, optional)
}
(config)duration {
opendaylight-flow-statistics:nanosecond (integer, optional),
opendaylight-flow-statistics:second (integer, optional)
}
(config)table {
flow-node-inventory:stale-flow (array[(config)stale-flow], optional),
flow-node-inventory:flow (array[(config)flow], optional),
flow-node-inventory:id (integer, optional),
opendaylight-flow-statistics:aggregate-flow-statistics (object[(config)aggregate-flow-statistics], optional),
flow-node-inventory:table-features (array[(config)table-features], optional),
opendaylight-flow-table-statistics:flow-table-statistics (object[(config)flow-table-statistics], optional),
opendaylight-flow-table-statistics:table-feature-container (object[(config)table-feature-container], optional),
flow-node-inventory:flow-hash-id-map (array[(config)flow-hash-id-map], optional)
}
(config)stale-flow {
flow-node-inventory:id (string, optional),
flow-node-inventory:cookie_mask (integer, optional),
flow-node-inventory:out_group (integer, optional),
flow-node-inventory:barrier (boolean, optional),
flow-node-inventory:flow-name (string, optional),
flow-node-inventory:out_port (integer, optional),
flow-node-inventory:instructions (object[(config)instructions], optional),
flow-node-inventory:hard-timeout (integer, optional),
flow-node-inventory:buffer_id (integer, optional),
flow-node-inventory:installHw (boolean, optional),
flow-node-inventory:cookie (integer, optional),
flow-node-inventory:match (object[(config)match], optional),
flow-node-inventory:flags (array, optional),
flow-node-inventory:idle-timeout (integer, optional),
flow-node-inventory:table_id (integer, optional),
flow-node-inventory:strict (boolean, optional),
flow-node-inventory:container-name (string, optional),
flow-node-inventory:priority (integer, optional)
}
(config)instructions {
opendaylight-flow-table-statistics:instruction (array[(config)instruction], optional)
}
(config)instruction {
opendaylight-flow-table-statistics:instruction (object, optional),
opendaylight-flow-table-statistics:order (integer, optional)
}
(config)match {
flow-node-inventory:metadata (object[(config)metadata], optional),
flow-node-inventory:in-phy-port (string, optional),
flow-node-inventory:tunnel (object[(config)tunnel], optional),
flow-node-inventory:vlan-match (object[(config)vlan-match], optional),
flow-node-inventory:in-port (string, optional),
flow-node-inventory:ip-match (object[(config)ip-match], optional),
flow-node-inventory:layer-3-match (object, optional),
flow-node-inventory:icmpv6-match (object[(config)icmpv6-match], optional),
flow-node-inventory:ethernet-match (object[(config)ethernet-match], optional),
flow-node-inventory:tcp-flag-match (object[(config)tcp-flag-match], optional),
flow-node-inventory:protocol-match-fields (object[(config)protocol-match-fields], optional),
flow-node-inventory:layer-4-match (object, optional),
flow-node-inventory:icmpv4-match (object[(config)icmpv4-match], optional)
}
(config)metadata {
opendaylight-flow-table-statistics:metadata (integer, optional),
opendaylight-flow-table-statistics:metadata-mask (integer, optional)
}
(config)tunnel {
opendaylight-flow-table-statistics:tunnel-mask (integer, optional),
opendaylight-flow-table-statistics:tunnel-id (integer, optional): Metadata associated in the logical port
}
(config)vlan-match {
opendaylight-flow-table-statistics:vlan-id (object[(config)vlan-id], optional): VLAN id.,
opendaylight-flow-table-statistics:vlan-pcp (integer, optional): VLAN priority.
}
(config)vlan-id {
opendaylight-flow-table-statistics:vlan-id (integer, optional),
opendaylight-flow-table-statistics:vlan-id-present (boolean, optional)
}
(config)ip-match {
opendaylight-flow-table-statistics:ip-proto (undefined, optional) = ['unknown' or 'ipv4' or 'ipv6']: IP Proto (IPv4 or IPv6 Protocol Number).,
opendaylight-flow-table-statistics:ip-dscp (integer, optional): IP DSCP (6 bits in ToS field).,
opendaylight-flow-table-statistics:ip-ecn (integer, optional): IP ECN (2 bits in ToS field).,
opendaylight-flow-table-statistics:ip-protocol (integer, optional): IP protocol.
}
(config)icmpv6-match {
opendaylight-flow-table-statistics:icmpv6-code (integer, optional),
opendaylight-flow-table-statistics:icmpv6-type (integer, optional): ICMP type.
}
(config)ethernet-match {
opendaylight-flow-table-statistics:ethernet-source (object[(config)ethernet-source], optional): Ethernet source address.,
opendaylight-flow-table-statistics:ethernet-destination (object[(config)ethernet-destination], optional): Ethernet destination address.,
opendaylight-flow-table-statistics:ethernet-type (object[(config)ethernet-type], optional): Ethernet frame type.
}
(config)ethernet-source {
opendaylight-flow-table-statistics:address (string),
opendaylight-flow-table-statistics:mask (string, optional)
}
(config)ethernet-destination {
opendaylight-flow-table-statistics:address (string),
opendaylight-flow-table-statistics:mask (string, optional)
}
(config)ethernet-type {
opendaylight-flow-table-statistics:type (integer)
}
(config)tcp-flag-match {
opendaylight-flow-table-statistics:tcp-flag (integer, optional)
}
(config)protocol-match-fields {
opendaylight-flow-table-statistics:mpls-bos (integer, optional): BoS bit in the first MPLS shim header,
opendaylight-flow-table-statistics:pbb (object[(config)pbb], optional),
opendaylight-flow-table-statistics:mpls-label (integer, optional): Label in the first MPLS shim header,
opendaylight-flow-table-statistics:mpls-tc (integer, optional): TC in the first MPLS shim header
}
(config)pbb {
opendaylight-flow-table-statistics:pbb-isid (integer, optional): I-SID in the first PBB service instance tag,
opendaylight-flow-table-statistics:pbb-mask (integer, optional)
}
(config)icmpv4-match {
opendaylight-flow-table-statistics:icmpv4-type (integer, optional): ICMP type.,
opendaylight-flow-table-statistics:icmpv4-code (integer, optional)
}
(config)flow {
flow-node-inventory:id (string, optional),
flow-node-inventory:cookie_mask (integer, optional),
flow-node-inventory:out_group (integer, optional),
opendaylight-flow-statistics:flow-statistics (object[(config)flow-statistics], optional),
flow-node-inventory:barrier (boolean, optional),
flow-node-inventory:flow-name (string, optional),
flow-node-inventory:out_port (integer, optional),
flow-node-inventory:instructions (object[(config)instructions], optional),
flow-node-inventory:hard-timeout (integer, optional),
flow-node-inventory:buffer_id (integer, optional),
flow-node-inventory:installHw (boolean, optional),
flow-node-inventory:cookie (integer, optional),
flow-node-inventory:match (object[(config)match], optional),
flow-node-inventory:flags (array, optional),
flow-node-inventory:idle-timeout (integer, optional),
flow-node-inventory:table_id (integer, optional),
flow-node-inventory:strict (boolean, optional),
flow-node-inventory:container-name (string, optional),
flow-node-inventory:priority (integer, optional)
}
(config)flow-statistics {
opendaylight-flow-statistics:duration (object[(config)duration], optional),
opendaylight-flow-statistics:packet-count (integer, optional),
opendaylight-flow-statistics:byte-count (integer, optional)
}
(config)aggregate-flow-statistics {
opendaylight-flow-statistics:packet-count (integer, optional),
opendaylight-flow-statistics:flow-count (integer, optional),
opendaylight-flow-statistics:byte-count (integer, optional)
}
(config)table-features {
opendaylight-flow-table-statistics:metadata-write (integer, optional): Bits of metadata table can write,
opendaylight-flow-table-statistics:metadata-match (integer, optional): Bits of metadata table can match,
opendaylight-flow-table-statistics:table-properties (object[(config)table-properties], optional),
opendaylight-flow-table-statistics:max-entries (integer, optional): Max number of entries supported,
opendaylight-flow-table-statistics:table-id (integer, optional),
opendaylight-flow-table-statistics:config (array, optional): Bitmap of OFPTC_ values,
opendaylight-flow-table-statistics:name (string, optional): Name of the table
}
(config)table-properties {
opendaylight-flow-table-statistics:table-feature-properties (array[(config)table-feature-properties], optional)
}
(config)table-feature-properties {
opendaylight-flow-table-statistics:table-feature-prop-type (object, optional),
opendaylight-flow-table-statistics:order (integer, optional)
}
(config)flow-table-statistics {
opendaylight-flow-table-statistics:packets-looked-up (integer, optional),
opendaylight-flow-table-statistics:packets-matched (integer, optional),
opendaylight-flow-table-statistics:active-flows (integer, optional)
}
(config)table-feature-container {
opendaylight-flow-table-statistics:table-features (array[(config)table-features], optional)
}
(config)flow-hash-id-map {
flow-node-inventory:hash (string, optional),
flow-node-inventory:flow-id (string, optional)
}
(config)stale-group {
flow-node-inventory:buckets (object[(config)buckets], optional),
flow-node-inventory:group-name (string, optional),
flow-node-inventory:group-type (undefined, optional) = ['group-all' or 'group-select' or 'group-indirect' or 'group-ff'],
flow-node-inventory:group-id (integer, optional),
flow-node-inventory:container-name (string, optional),
flow-node-inventory:barrier (boolean, optional)
}
(config)supported-actions {
flow-node-inventory:action-type (array[(config)action-type], optional)
}
(config)action-type {
flow-node-inventory:support-state (undefined, optional) = ['native' or 'emulated' or 'not-supported'],
flow-node-inventory:action (string, optional)
}
(config)switch-features {
flow-node-inventory:max_buffers (integer, optional),
flow-node-inventory:max_tables (integer, optional),
flow-node-inventory:capabilities (array[feature-capability], optional)
}
(config)group-features {
opendaylight-group-statistics:max-groups (array[integer], optional): Maximum number of groups for each type,
opendaylight-group-statistics:actions (array[integer], optional): Bitmap number OFPAT_* that are supported,
opendaylight-group-statistics:group-capabilities-supported (array[group-capability], optional),
opendaylight-group-statistics:group-types-supported (array[group-type], optional)
}
(config)supported-match-types {
flow-node-inventory:match-type (array[(config)match-type], optional)
}
(config)match-type {
flow-node-inventory:support-state (undefined, optional) = ['native' or 'emulated' or 'not-supported'],
flow-node-inventory:match (string, optional)
}
(config)supported-instructions {
flow-node-inventory:instruction-type (array[(config)instruction-type], optional)
}
(config)instruction-type {
flow-node-inventory:support-state (undefined, optional) = ['native' or 'emulated' or 'not-supported'],
flow-node-inventory:instruction (string, optional)
}
(config)meter-features {
opendaylight-meter-statistics:meter-band-supported (array[meter-band], optional),
opendaylight-meter-statistics:max_bands (integer, optional),
opendaylight-meter-statistics:max_meter (integer, optional),
opendaylight-meter-statistics:meter-capabilities-supported (array[meter-capability], optional),
opendaylight-meter-statistics:max_color (integer, optional)
}
(config)meter {
opendaylight-flow-table-statistics:meter-id (integer, optional)
}
(config)stale-meter {
flow-node-inventory:meter-band-headers (object[(config)meter-band-headers], optional),
flow-node-inventory:flags (array, optional): Meter configuration flags,
flow-node-inventory:meter-name (string, optional): Name of meter instance,
flow-node-inventory:container-name (string, optional): Name of container,
flow-node-inventory:barrier (boolean, optional): If true, barrier message is sent,
flow-node-inventory:meter-id (integer, optional): Meter instance
}
(config)meter-band-headers {
flow-node-inventory:meter-band-header (array[(config)meter-band-header], optional)
}
(config)meter-band-header {
flow-node-inventory:band-burst-size (integer, optional): Size of bursts,
flow-node-inventory:meter-band-types (object[(config)meter-band-types], optional),
flow-node-inventory:band-type (object, optional),
flow-node-inventory:band-id (integer, optional): Meter band id,
flow-node-inventory:band-rate (integer, optional): Rate for this band
}
(config)meter-band-types {
flow-node-inventory:flags (array, optional): Meter band flags
}
(config)node-connector {
flow-node-inventory:port-number (integer or string, optional),
flow-node-inventory:queue (array[(config)queue], optional),
flow-node-inventory:hardware-address (string, optional): MAC Address of the port,
opendaylight-port-statistics:flow-capable-node-connector-statistics (object[(config)flow-capable-node-connector-statistics], optional),
flow-node-inventory:supported (array, optional): Features supported by the port,
flow-node-inventory:peer-features (array, optional): Features advertised by peer,
flow-node-inventory:name (string, optional): Human readable name of the port,
flow-node-inventory:maximum-speed (integer, optional): Max port bit rate in kbps,
flow-node-inventory:advertised-features (array, optional): Features being advertised by the port,
flow-node-inventory:current-feature (array, optional): Bit map of OFPPF-* flags,
stp-status-aware-node-connector:status (undefined, optional) = ['forwarding' or 'discarding'],
flow-node-inventory:configuration (array, optional): Bit map of OFPPC-* flags,
flow-node-inventory:state (object[(config)state], optional): Description of state of port,
id (string, optional): The unique identifier for the node-connector.,
address-tracker:addresses (array[(config)addresses], optional),
flow-node-inventory:current-speed (integer, optional): Current port bit rate in kbps
}
(config)queue {
flow-node-inventory:queue-id (integer, optional): id for the specific queue.,
opendaylight-queue-statistics:flow-capable-node-connector-queue-statistics (object[(config)flow-capable-node-connector-queue-statistics], optional),
flow-node-inventory:port (integer, optional): Port this queue is attached to.,
flow-node-inventory:property (integer, optional): One of OFPQT_. TODO:: use queue-properties type.
}
(config)flow-capable-node-connector-queue-statistics {
opendaylight-queue-statistics:transmitted-packets (integer, optional),
opendaylight-queue-statistics:transmission-errors (integer, optional),
opendaylight-queue-statistics:transmitted-bytes (integer, optional),
opendaylight-queue-statistics:duration (object[(config)duration], optional)
}
(config)flow-capable-node-connector-statistics {
opendaylight-port-statistics:receive-drops (integer, optional),
opendaylight-port-statistics:transmit-errors (integer, optional),
opendaylight-port-statistics:transmit-drops (integer, optional),
opendaylight-port-statistics:bytes (object[(config)bytes], optional),
opendaylight-port-statistics:receive-crc-error (integer, optional),
opendaylight-port-statistics:receive-frame-error (integer, optional),
opendaylight-port-statistics:duration (object[(config)duration], optional),
opendaylight-port-statistics:receive-errors (integer, optional),
opendaylight-port-statistics:receive-over-run-error (integer, optional),
opendaylight-port-statistics:packets (object[(config)packets], optional),
opendaylight-port-statistics:collision-count (integer, optional)
}
(config)bytes {
opendaylight-port-statistics:transmitted (integer, optional),
opendaylight-port-statistics:received (integer, optional)
}
(config)packets {
opendaylight-port-statistics:transmitted (integer, optional),
opendaylight-port-statistics:received (integer, optional)
}
(config)state {
flow-node-inventory:link-down (boolean, optional),
flow-node-inventory:blocked (boolean, optional),
flow-node-inventory:live (boolean, optional)
}
(config)addresses {
address-tracker:vlan (integer, optional): VLAN id,
address-tracker:id (integer, optional): A 64-bit key for this observation. This is opaque and should not be interpreted.,
address-tracker:first-seen (integer, optional): Timestamp (number of ms since January 1, 1970, 00:00:00 GMT) of observing this address for the first time,
address-tracker:mac (string, optional): MAC address,
address-tracker:ip (string or string, optional): IPv4 or IPv6 address,
address-tracker:last-seen (integer, optional): The most recent timestamp (tnumber of ms since January 1, 1970, 00:00:00 GMT) of observing this address
} 

 

获取特定交换机端口的状态

http://localhost:8181/apidoc/explorer/index.html#!/opendaylight-port-statistics(2013-12-14)/get_node_connector_statistics_post_0

查看代码
 Implementation Notes

Get statistics for given node connector from the node
Response Class

    Model
    Model Schema

(get-node-connector-statistics)output {
} 

获取交换机中某个流表信息

http://localhost:8181/apidoc/explorer/index.html#!/opendaylight-inventory(2013-08-19)/GET_table_get_194

查看代码
 Response Class

    Model
    Model Schema

(config)table {
flow-node-inventory:stale-flow (array[(config)stale-flow], optional),
flow-node-inventory:flow (array[(config)flow], optional),
flow-node-inventory:id (integer, optional),
opendaylight-flow-statistics:aggregate-flow-statistics (object[(config)aggregate-flow-statistics], optional),
flow-node-inventory:table-features (array[(config)table-features], optional),
opendaylight-flow-table-statistics:flow-table-statistics (object[(config)flow-table-statistics], optional),
opendaylight-flow-table-statistics:table-feature-container (object[(config)table-feature-container], optional),
flow-node-inventory:flow-hash-id-map (array[(config)flow-hash-id-map], optional)
}
(config)stale-flow {
flow-node-inventory:id (string, optional),
flow-node-inventory:cookie_mask (integer, optional),
flow-node-inventory:out_group (integer, optional),
flow-node-inventory:barrier (boolean, optional),
flow-node-inventory:flow-name (string, optional),
flow-node-inventory:out_port (integer, optional),
flow-node-inventory:instructions (object[(config)instructions], optional),
flow-node-inventory:hard-timeout (integer, optional),
flow-node-inventory:buffer_id (integer, optional),
flow-node-inventory:installHw (boolean, optional),
flow-node-inventory:cookie (integer, optional),
flow-node-inventory:match (object[(config)match], optional),
flow-node-inventory:flags (array, optional),
flow-node-inventory:idle-timeout (integer, optional),
flow-node-inventory:table_id (integer, optional),
flow-node-inventory:strict (boolean, optional),
flow-node-inventory:container-name (string, optional),
flow-node-inventory:priority (integer, optional)
}
(config)instructions {
opendaylight-flow-table-statistics:instruction (array[(config)instruction], optional)
}
(config)instruction {
opendaylight-flow-table-statistics:instruction (object, optional),
opendaylight-flow-table-statistics:order (integer, optional)
}
(config)match {
flow-node-inventory:metadata (object[(config)metadata], optional),
flow-node-inventory:in-phy-port (string, optional),
flow-node-inventory:tunnel (object[(config)tunnel], optional),
flow-node-inventory:vlan-match (object[(config)vlan-match], optional),
flow-node-inventory:in-port (string, optional),
flow-node-inventory:ip-match (object[(config)ip-match], optional),
flow-node-inventory:layer-3-match (object, optional),
flow-node-inventory:icmpv6-match (object[(config)icmpv6-match], optional),
flow-node-inventory:ethernet-match (object[(config)ethernet-match], optional),
flow-node-inventory:tcp-flag-match (object[(config)tcp-flag-match], optional),
flow-node-inventory:protocol-match-fields (object[(config)protocol-match-fields], optional),
flow-node-inventory:layer-4-match (object, optional),
flow-node-inventory:icmpv4-match (object[(config)icmpv4-match], optional)
}
(config)metadata {
opendaylight-flow-table-statistics:metadata (integer, optional),
opendaylight-flow-table-statistics:metadata-mask (integer, optional)
}
(config)tunnel {
opendaylight-flow-table-statistics:tunnel-mask (integer, optional),
opendaylight-flow-table-statistics:tunnel-id (integer, optional): Metadata associated in the logical port
}
(config)vlan-match {
opendaylight-flow-table-statistics:vlan-id (object[(config)vlan-id], optional): VLAN id.,
opendaylight-flow-table-statistics:vlan-pcp (integer, optional): VLAN priority.
}
(config)vlan-id {
opendaylight-flow-table-statistics:vlan-id (integer, optional),
opendaylight-flow-table-statistics:vlan-id-present (boolean, optional)
}
(config)ip-match {
opendaylight-flow-table-statistics:ip-proto (undefined, optional) = ['unknown' or 'ipv4' or 'ipv6']: IP Proto (IPv4 or IPv6 Protocol Number).,
opendaylight-flow-table-statistics:ip-dscp (integer, optional): IP DSCP (6 bits in ToS field).,
opendaylight-flow-table-statistics:ip-ecn (integer, optional): IP ECN (2 bits in ToS field).,
opendaylight-flow-table-statistics:ip-protocol (integer, optional): IP protocol.
}
(config)icmpv6-match {
opendaylight-flow-table-statistics:icmpv6-code (integer, optional),
opendaylight-flow-table-statistics:icmpv6-type (integer, optional): ICMP type.
}
(config)ethernet-match {
opendaylight-flow-table-statistics:ethernet-source (object[(config)ethernet-source], optional): Ethernet source address.,
opendaylight-flow-table-statistics:ethernet-destination (object[(config)ethernet-destination], optional): Ethernet destination address.,
opendaylight-flow-table-statistics:ethernet-type (object[(config)ethernet-type], optional): Ethernet frame type.
}
(config)ethernet-source {
opendaylight-flow-table-statistics:address (string),
opendaylight-flow-table-statistics:mask (string, optional)
}
(config)ethernet-destination {
opendaylight-flow-table-statistics:address (string),
opendaylight-flow-table-statistics:mask (string, optional)
}
(config)ethernet-type {
opendaylight-flow-table-statistics:type (integer)
}
(config)tcp-flag-match {
opendaylight-flow-table-statistics:tcp-flag (integer, optional)
}
(config)protocol-match-fields {
opendaylight-flow-table-statistics:mpls-bos (integer, optional): BoS bit in the first MPLS shim header,
opendaylight-flow-table-statistics:pbb (object[(config)pbb], optional),
opendaylight-flow-table-statistics:mpls-label (integer, optional): Label in the first MPLS shim header,
opendaylight-flow-table-statistics:mpls-tc (integer, optional): TC in the first MPLS shim header
}
(config)pbb {
opendaylight-flow-table-statistics:pbb-isid (integer, optional): I-SID in the first PBB service instance tag,
opendaylight-flow-table-statistics:pbb-mask (integer, optional)
}
(config)icmpv4-match {
opendaylight-flow-table-statistics:icmpv4-type (integer, optional): ICMP type.,
opendaylight-flow-table-statistics:icmpv4-code (integer, optional)
}
(config)flow {
flow-node-inventory:id (string, optional),
flow-node-inventory:cookie_mask (integer, optional),
flow-node-inventory:out_group (integer, optional),
opendaylight-flow-statistics:flow-statistics (object[(config)flow-statistics], optional),
flow-node-inventory:barrier (boolean, optional),
flow-node-inventory:flow-name (string, optional),
flow-node-inventory:out_port (integer, optional),
flow-node-inventory:instructions (object[(config)instructions], optional),
flow-node-inventory:hard-timeout (integer, optional),
flow-node-inventory:buffer_id (integer, optional),
flow-node-inventory:installHw (boolean, optional),
flow-node-inventory:cookie (integer, optional),
flow-node-inventory:match (object[(config)match], optional),
flow-node-inventory:flags (array, optional),
flow-node-inventory:idle-timeout (integer, optional),
flow-node-inventory:table_id (integer, optional),
flow-node-inventory:strict (boolean, optional),
flow-node-inventory:container-name (string, optional),
flow-node-inventory:priority (integer, optional)
}
(config)flow-statistics {
opendaylight-flow-statistics:duration (object[(config)duration], optional),
opendaylight-flow-statistics:packet-count (integer, optional),
opendaylight-flow-statistics:byte-count (integer, optional)
}
(config)duration {
opendaylight-flow-statistics:nanosecond (integer, optional),
opendaylight-flow-statistics:second (integer, optional)
}
(config)aggregate-flow-statistics {
opendaylight-flow-statistics:packet-count (integer, optional),
opendaylight-flow-statistics:flow-count (integer, optional),
opendaylight-flow-statistics:byte-count (integer, optional)
}
(config)table-features {
opendaylight-flow-table-statistics:metadata-write (integer, optional): Bits of metadata table can write,
opendaylight-flow-table-statistics:metadata-match (integer, optional): Bits of metadata table can match,
opendaylight-flow-table-statistics:table-properties (object[(config)table-properties], optional),
opendaylight-flow-table-statistics:max-entries (integer, optional): Max number of entries supported,
opendaylight-flow-table-statistics:table-id (integer, optional),
opendaylight-flow-table-statistics:config (array, optional): Bitmap of OFPTC_ values,
opendaylight-flow-table-statistics:name (string, optional): Name of the table
}
(config)table-properties {
opendaylight-flow-table-statistics:table-feature-properties (array[(config)table-feature-properties], optional)
}
(config)table-feature-properties {
opendaylight-flow-table-statistics:table-feature-prop-type (object, optional),
opendaylight-flow-table-statistics:order (integer, optional)
}
(config)flow-table-statistics {
opendaylight-flow-table-statistics:packets-looked-up (integer, optional),
opendaylight-flow-table-statistics:packets-matched (integer, optional),
opendaylight-flow-table-statistics:active-flows (integer, optional)
}
(config)table-feature-container {
opendaylight-flow-table-statistics:table-features (array[(config)table-features], optional)
}
(config)flow-hash-id-map {
flow-node-inventory:hash (string, optional),
flow-node-inventory:flow-id (string, optional)
}

新增修改和删除流表

http://localhost:8181/apidoc/explorer/index.html#!/opendaylight-inventory(2013-08-19)/GET_table_get_194

查看代码
 Response Class

    Model
    Model Schema

(config)table {
flow-node-inventory:stale-flow (array[(config)stale-flow], optional),
flow-node-inventory:flow (array[(config)flow], optional),
flow-node-inventory:id (integer, optional),
opendaylight-flow-statistics:aggregate-flow-statistics (object[(config)aggregate-flow-statistics], optional),
flow-node-inventory:table-features (array[(config)table-features], optional),
opendaylight-flow-table-statistics:flow-table-statistics (object[(config)flow-table-statistics], optional),
opendaylight-flow-table-statistics:table-feature-container (object[(config)table-feature-container], optional),
flow-node-inventory:flow-hash-id-map (array[(config)flow-hash-id-map], optional)
}
(config)stale-flow {
flow-node-inventory:id (string, optional),
flow-node-inventory:cookie_mask (integer, optional),
flow-node-inventory:out_group (integer, optional),
flow-node-inventory:barrier (boolean, optional),
flow-node-inventory:flow-name (string, optional),
flow-node-inventory:out_port (integer, optional),
flow-node-inventory:instructions (object[(config)instructions], optional),
flow-node-inventory:hard-timeout (integer, optional),
flow-node-inventory:buffer_id (integer, optional),
flow-node-inventory:installHw (boolean, optional),
flow-node-inventory:cookie (integer, optional),
flow-node-inventory:match (object[(config)match], optional),
flow-node-inventory:flags (array, optional),
flow-node-inventory:idle-timeout (integer, optional),
flow-node-inventory:table_id (integer, optional),
flow-node-inventory:strict (boolean, optional),
flow-node-inventory:container-name (string, optional),
flow-node-inventory:priority (integer, optional)
}
(config)instructions {
opendaylight-flow-table-statistics:instruction (array[(config)instruction], optional)
}
(config)instruction {
opendaylight-flow-table-statistics:instruction (object, optional),
opendaylight-flow-table-statistics:order (integer, optional)
}
(config)match {
flow-node-inventory:metadata (object[(config)metadata], optional),
flow-node-inventory:in-phy-port (string, optional),
flow-node-inventory:tunnel (object[(config)tunnel], optional),
flow-node-inventory:vlan-match (object[(config)vlan-match], optional),
flow-node-inventory:in-port (string, optional),
flow-node-inventory:ip-match (object[(config)ip-match], optional),
flow-node-inventory:layer-3-match (object, optional),
flow-node-inventory:icmpv6-match (object[(config)icmpv6-match], optional),
flow-node-inventory:ethernet-match (object[(config)ethernet-match], optional),
flow-node-inventory:tcp-flag-match (object[(config)tcp-flag-match], optional),
flow-node-inventory:protocol-match-fields (object[(config)protocol-match-fields], optional),
flow-node-inventory:layer-4-match (object, optional),
flow-node-inventory:icmpv4-match (object[(config)icmpv4-match], optional)
}
(config)metadata {
opendaylight-flow-table-statistics:metadata (integer, optional),
opendaylight-flow-table-statistics:metadata-mask (integer, optional)
}
(config)tunnel {
opendaylight-flow-table-statistics:tunnel-mask (integer, optional),
opendaylight-flow-table-statistics:tunnel-id (integer, optional): Metadata associated in the logical port
}
(config)vlan-match {
opendaylight-flow-table-statistics:vlan-id (object[(config)vlan-id], optional): VLAN id.,
opendaylight-flow-table-statistics:vlan-pcp (integer, optional): VLAN priority.
}
(config)vlan-id {
opendaylight-flow-table-statistics:vlan-id (integer, optional),
opendaylight-flow-table-statistics:vlan-id-present (boolean, optional)
}
(config)ip-match {
opendaylight-flow-table-statistics:ip-proto (undefined, optional) = ['unknown' or 'ipv4' or 'ipv6']: IP Proto (IPv4 or IPv6 Protocol Number).,
opendaylight-flow-table-statistics:ip-dscp (integer, optional): IP DSCP (6 bits in ToS field).,
opendaylight-flow-table-statistics:ip-ecn (integer, optional): IP ECN (2 bits in ToS field).,
opendaylight-flow-table-statistics:ip-protocol (integer, optional): IP protocol.
}
(config)icmpv6-match {
opendaylight-flow-table-statistics:icmpv6-code (integer, optional),
opendaylight-flow-table-statistics:icmpv6-type (integer, optional): ICMP type.
}
(config)ethernet-match {
opendaylight-flow-table-statistics:ethernet-source (object[(config)ethernet-source], optional): Ethernet source address.,
opendaylight-flow-table-statistics:ethernet-destination (object[(config)ethernet-destination], optional): Ethernet destination address.,
opendaylight-flow-table-statistics:ethernet-type (object[(config)ethernet-type], optional): Ethernet frame type.
}
(config)ethernet-source {
opendaylight-flow-table-statistics:address (string),
opendaylight-flow-table-statistics:mask (string, optional)
}
(config)ethernet-destination {
opendaylight-flow-table-statistics:address (string),
opendaylight-flow-table-statistics:mask (string, optional)
}
(config)ethernet-type {
opendaylight-flow-table-statistics:type (integer)
}
(config)tcp-flag-match {
opendaylight-flow-table-statistics:tcp-flag (integer, optional)
}
(config)protocol-match-fields {
opendaylight-flow-table-statistics:mpls-bos (integer, optional): BoS bit in the first MPLS shim header,
opendaylight-flow-table-statistics:pbb (object[(config)pbb], optional),
opendaylight-flow-table-statistics:mpls-label (integer, optional): Label in the first MPLS shim header,
opendaylight-flow-table-statistics:mpls-tc (integer, optional): TC in the first MPLS shim header
}
(config)pbb {
opendaylight-flow-table-statistics:pbb-isid (integer, optional): I-SID in the first PBB service instance tag,
opendaylight-flow-table-statistics:pbb-mask (integer, optional)
}
(config)icmpv4-match {
opendaylight-flow-table-statistics:icmpv4-type (integer, optional): ICMP type.,
opendaylight-flow-table-statistics:icmpv4-code (integer, optional)
}
(config)flow {
flow-node-inventory:id (string, optional),
flow-node-inventory:cookie_mask (integer, optional),
flow-node-inventory:out_group (integer, optional),
opendaylight-flow-statistics:flow-statistics (object[(config)flow-statistics], optional),
flow-node-inventory:barrier (boolean, optional),
flow-node-inventory:flow-name (string, optional),
flow-node-inventory:out_port (integer, optional),
flow-node-inventory:instructions (object[(config)instructions], optional),
flow-node-inventory:hard-timeout (integer, optional),
flow-node-inventory:buffer_id (integer, optional),
flow-node-inventory:installHw (boolean, optional),
flow-node-inventory:cookie (integer, optional),
flow-node-inventory:match (object[(config)match], optional),
flow-node-inventory:flags (array, optional),
flow-node-inventory:idle-timeout (integer, optional),
flow-node-inventory:table_id (integer, optional),
flow-node-inventory:strict (boolean, optional),
flow-node-inventory:container-name (string, optional),
flow-node-inventory:priority (integer, optional)
}
(config)flow-statistics {
opendaylight-flow-statistics:duration (object[(config)duration], optional),
opendaylight-flow-statistics:packet-count (integer, optional),
opendaylight-flow-statistics:byte-count (integer, optional)
}
(config)duration {
opendaylight-flow-statistics:nanosecond (integer, optional),
opendaylight-flow-statistics:second (integer, optional)
}
(config)aggregate-flow-statistics {
opendaylight-flow-statistics:packet-count (integer, optional),
opendaylight-flow-statistics:flow-count (integer, optional),
opendaylight-flow-statistics:byte-count (integer, optional)
}
(config)table-features {
opendaylight-flow-table-statistics:metadata-write (integer, optional): Bits of metadata table can write,
opendaylight-flow-table-statistics:metadata-match (integer, optional): Bits of metadata table can match,
opendaylight-flow-table-statistics:table-properties (object[(config)table-properties], optional),
opendaylight-flow-table-statistics:max-entries (integer, optional): Max number of entries supported,
opendaylight-flow-table-statistics:table-id (integer, optional),
opendaylight-flow-table-statistics:config (array, optional): Bitmap of OFPTC_ values,
opendaylight-flow-table-statistics:name (string, optional): Name of the table
}
(config)table-properties {
opendaylight-flow-table-statistics:table-feature-properties (array[(config)table-feature-properties], optional)
}
(config)table-feature-properties {
opendaylight-flow-table-statistics:table-feature-prop-type (object, optional),
opendaylight-flow-table-statistics:order (integer, optional)
}
(config)flow-table-statistics {
opendaylight-flow-table-statistics:packets-looked-up (integer, optional),
opendaylight-flow-table-statistics:packets-matched (integer, optional),
opendaylight-flow-table-statistics:active-flows (integer, optional)
}
(config)table-feature-container {
opendaylight-flow-table-statistics:table-features (array[(config)table-features], optional)
}
(config)flow-hash-id-map {
flow-node-inventory:hash (string, optional),
flow-node-inventory:flow-id (string, optional)
} 

个人总结

本次实验的基本要求部分只要按照老师的ppt中的指导执行就完全可以执行了,但在执行过程中出现了一个小问题,在刚连接好控制器后执行过一次清除旧的流规则操作,得到了如下错误返回:

{
    "errors": {
        "error": [
            {
                "error-type": "protocol",
                "error-tag": "data-missing",
                "error-message": "Data does not exist for path: /(urn:opendaylight:inventory?revision=2013-08-19)nodes/node/node[{(urn:opendaylight:inventory?revision=2013-08-19)id=openflow:1}]"
            }
        ]
    }
}

在反思后得出结论,使用mininet生成的topo网络在一开始并不具有流表配置,故删除操作无法执行,出现了“data-missing”。

而进阶部分查找各种api花费了较多时间,最后在搜索引擎和同学的帮助下也顺利找到了所要求的内容。

posted on 2022-10-29 22:17  亚欧板块第一帅  阅读(82)  评论(0)    收藏  举报

刷新页面返回顶部
 
博客园  ©  2004-2025
浙公网安备 33010602011771号 浙ICP备2021040463号-3