private void Initialize(MemoryStream ms, OfpHeader header) { if (!_versionChecked) { _version = header.Version; _versionChecked = true; var reply = new OfpSwitchFeaturesRequest(); _log.Debug("Request for features"); //Console.WriteLine("Request for features"); Write(reply.ToByteArray()); } else if (header.Type == OfpType.OFPT_FEATURES_REPLY) { OfpSwitchFeatures features = new OfpSwitchFeatures(ms, header); _mac = features.DatapathId.GetPhysicalAddress(); _log.Info($"A switch connected - MAC={_mac}"); //Console.WriteLine($"A switch connected - MAC={_mac}"); foreach (var ofpPhyPort in features.Ports) { //Console.WriteLine($"\tPortNum={ofpPhyPort.PortNo} \tPortName={ofpPhyPort.Name} \tPortState={ofpPhyPort.State.ToString()}"); } SwitchFeatures = features; _featureChecked = true; var reply = new OfpSwitchConfig(true); reply.Flags = OfpConfigFlags.OFPC_FRAG_NORMAL; reply.MissSendLen = 65535; Write(reply.ToByteArray()); var reply2 = new OfpSwitchConfigRequest(); Write(reply2.ToByteArray()); } else if (header.Type == OfpType.OFPT_GET_CONFIG_REPLY) { OfpSwitchConfig config = new OfpSwitchConfig(ms, header); _log.Info($"[{_mac}] Config: Flag={config.Flags} MissSendLen={config.MissSendLen}"); //Console.WriteLine($"[{_mac}] Config: Flag={config.Flags} MissSendLen={config.MissSendLen}"); _configChecked = true; return; } else if (header.Type == OfpType.OFPT_ECHO_REQUEST) { OfpEcho echo = new OfpEcho(ms, header); _version = echo.Header.Version; _versionChecked = true; var reply = new OfpEcho(true); reply.Data = echo.Data; Write(reply.ToByteArray()); } else if (header.Type == OfpType.OFPT_ERROR) { OfpErrorMsg error = new OfpErrorMsg(ms, header); _log.Info($"[{_mac}] Error: type={error.Type.ToString()} code={error.GetErrorCode()}"); //Console.WriteLine($"[{_mac}] Error: type={error.Type.ToString()} code={error.GetErrorCode()}"); return; } else { return; } }
private void Error(MemoryStream ms, OfpHeader header) { OfpErrorMsg error = new OfpErrorMsg(ms, header); Debug.WriteLine($"[{_mac}] ERROR:{error.Type} - {error.GetErrorCode()}"); _log.Info($"[{_mac}] ERROR:{error.Type} - {error.GetErrorCode()}"); //Console.WriteLine($"[{_mac}] ERROR:{error.Type} - {error.GetErrorCode()}"); _controller.PluginSystem.Error(error, this); }
public override bool Error(OfpErrorMsg error, IConnection handler) { foreach (var plugin in Plugins.Values.Where(plugin => plugin.Active)) { try { bool result = plugin.MessageHandler.Error(error, handler); if (result) { break; } } catch (Exception e) { Debug.WriteLine(e); } } return(true); }
/// <summary> /// 处理错误 /// </summary> /// <param name="error"></param> /// <param name="handler"></param> /// <returns></returns> public virtual bool Error(OfpErrorMsg error, IConnection handler) { return(false); }