opendaylight中arphandler模块与routing模块的学习

ARPHandler为网络主机发送的ARP请求与回应提供服务。而且它允许控制器自身创造ARP消息。

odl上的ARP处理并没有用请求者的MAC地址,这是为了避免构造转发ARP请求的生成树。

当你在一个不是树形的网络中,为了到达需要被洪泛的地址,ARP请求包被广播。


ARPhandler模块中实现的几个接口:

IHostFinder:这个接口定义了触发主机发现的方法,并且探测一个学习到的主机是否还在网络中。

public void find(InetAddress networkAddress);

基于IP地址初始化主机发现,是有hostracker的应用请求触发的。请求的IP地址当时并不在当地的数据库中。

参数:InetAddress类型的网络IP地址。

public void probe(HostNodeConnector host);

被hostracker调用,探测学习到的主机是否还在网络中。

参数:需要被探测的host

 IListenDataPacket:监听数据包接口,详见数据包监听那篇

ICacheUpdateAware<ARPEvent, Boolean>:组件想要获得通知集群缓存更新的通知实现的接口

几个重要的成员函数:

protected void sendARPReply(NodeConnector p, byte[] sMAC, InetAddress sIP, byte[] tMAC, InetAddress tIP, short vlan) 

参数:发送ARPreply报文的nodeconnector,源MAC地址,源IP地址,目标MAC地址,目标IP地址,vlan号

功能:发送ARPReply


 protected void handleARPPacket(Ethernet eHeader, ARP pkt, NodeConnector p, short vlan)

参数:以太网包头,ARP报文,发送的nodeConnector,vlan号

功能:处理解析ARP报文


protected void sendBcastARPRequest(InetAddress targetIP, Subnet subnet)

功能:发送一个广播的ARP请求到交换机的端口,用子网地址作为发送者的IP,控制器的MAC地址作为发送者的MAC,

目标IP地址作为目标网络地址


protected void sendUcastARPRequest(HostNodeConnector host, Subnet subnet) 

功能:发送一个单播的ARP请求到已知的具体的交换机的某个端口。发送者的IP是子网的网络地址,

发送者的MAC地址是控制器的MAC地址。


 protected void handlePuntedIPPacket(IPv4 pkt, NodeConnector p, short vlan)

iPv4数据包被踢出,如果控制器不知道目的主机 ,需要发送一个广播的ARP请求发现它。


 public byte[] getControllerMAC()

获取控制器的MAC


 private ARP createARP(short opCode, byte[] senderMacAddress, byte[] senderIP, byte[] targetMacAddress,byte[] targetIP)

构造一个ARP数据包


private Ethernet createEthernet(byte[] sourceMAC, byte[] targetMAC, ARP arp, short vlan) 

构造以太网数据包


 private void generateAndSendReply(InetAddress sourceIP, byte[] sourceMAC, short vlan)

产生并发送回复报文


routing模块:

routing模块主要就是 Dijkstra算法的实现

需要实现IRouting, ITopologyManagerClusterWideAware接口,其中IRouting是为了查找路径,ITopologyManagerClusterWideAware

是为了保存拓扑,以便路径更新。


IRouting 接口:

接口中定义的一些方法

 public Path getRoute(Node src, Node dst);

获取从源节点src到目的节点dst的一条路径

public Path getMaxThroughputRoute(Node src, Node dst);

获取一条从源节点src到目的节点dst的最大吞吐量的路径。

 public Path getRoute(Node src, Node dst, Short Bw);

获取一条从源节点到目的节点的满足具体设置的带宽BW的一条路径

 public void initMaxThroughput(Map<Edge, Number> EdgeWeightMap);

初始化最大吞吐量


ITopologyManagerClusterWideAware接口继承 ITopologyManagerAware,ITopologyManagerAware又继承IListenTopoUpdates接口

IListenTopoUpdates接口定义了三个方法:

public void edgeUpdate(List<TopoEdgeUpdate> topoedgeupdateList);

当拓扑更新时会被调用来更新拓扑图中的边。

 public void edgeOverUtilized(Edge edge);

当一个边的利用率超过设置在控制器上的安全阈值时会被调用

  public void edgeUtilBackToNormal(Edge edge);

当一个边的利用率回归到正常状态,安全阈值回归到控制器设置的之下时函数会被调用





  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值