private void IP_FIB_AddButton_Click(object sender, RoutedEventArgs e)
        {
            var routerName  = IP_FIB_RouterName.Text;
            var destAddress = IP_FIB_DestAddress.Text;
            var outPort     = IP_FIB_OutPort.Text;

            if (routerName.Length == 0 || destAddress.Length == 0 || outPort.Length == 0)
            {
                return;
            }
            var isProperRule = CheckIfIsProperIP_FIB_Entry(destAddress, outPort);

            if (!isProperRule || !Manager.RouterNameToIP_FIB_Table.ContainsKey(routerName))
            {
                AddLog("You are trying to add an incorrect rule!", LogType.Error);
                return;
            }

            var foundRow = IP_FIB_Rows.Find(x => x.RouterName.Equals(routerName) &&
                                            x.DestAddress.Equals(IPAddress.Parse(destAddress)));

            if (foundRow != null)
            {
                AddLog("Output port for such destination address already exists!", LogType.Error);
                return;
            }

            var rule = new IpFibTableRow(destAddress + " " + outPort);

            rule.RouterName = routerName;
            Manager.RouterNameToIP_FIB_Table[routerName].Add(rule);
            IP_FIB_Rows.Add(rule);
            Manager.SendRow(routerName, rule, ManagementActions.ADD_IP_FIB_ENTRY);
            SortIpFibRows();
            IP_FIB_Table.Items.Refresh();
            IP_FIB_RouterName.Clear();
            IP_FIB_DestAddress.Clear();
            IP_FIB_OutPort.Clear();
            IP_FIB_RouterName.Focus();
        }