158 lines
5.0 KiB
Python
158 lines
5.0 KiB
Python
# -*- Mode:python; c-file-style:"gnu"; indent-tabs-mode:nil -*- */
|
|
#
|
|
# Copyright (C) 2015 The University of Memphis,
|
|
# Arizona Board of Regents,
|
|
# Regents of the University of California.
|
|
#
|
|
# This file is part of Mini-NDN.
|
|
# See AUTHORS.md for a complete list of Mini-NDN authors and contributors.
|
|
#
|
|
# Mini-NDN is free software: you can redistribute it and/or modify
|
|
# it under the terms of the GNU General Public License as published by
|
|
# the Free Software Foundation, either version 3 of the License, or
|
|
# (at your option) any later version.
|
|
#
|
|
# Mini-NDN is distributed in the hope that it will be useful,
|
|
# but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
# GNU General Public License for more details.
|
|
#
|
|
# You should have received a copy of the GNU General Public License
|
|
# along with Mini-NDN, e.g., in COPYING.md file.
|
|
# If not, see <http://www.gnu.org/licenses/>.
|
|
|
|
from Tkinter import *
|
|
|
|
LOG_LEVELS = [
|
|
"NONE",
|
|
"ERROR",
|
|
"WARN",
|
|
"INFO",
|
|
"DEBUG",
|
|
"TRACE",
|
|
"ALL"
|
|
]
|
|
|
|
class GuiFrame(Frame):
|
|
def __init__(self, notebook, prefValues, appId):
|
|
Frame.__init__(self, notebook)
|
|
|
|
self.prefValues = prefValues
|
|
self.appId = appId
|
|
|
|
self.row = 0
|
|
self.column = 0
|
|
|
|
def addEntryBox(self, label, variable, defaultValue=""):
|
|
variable.set(defaultValue)
|
|
|
|
Label(self, text=label).grid(row=self.row, sticky=E)
|
|
entry = Entry(self, textvariable=variable)
|
|
entry.grid(row=self.row, column=1)
|
|
|
|
self.row += 1
|
|
|
|
def addDropDown(self, label, variable, values, defaultValue=""):
|
|
variable.set(defaultValue)
|
|
|
|
Label(self, text=label).grid(row=self.row, sticky=E)
|
|
|
|
self.entry = apply(OptionMenu, (self, variable) + tuple(values))
|
|
self.entry.grid(row=self.row, column=1)
|
|
|
|
self.row += 1
|
|
|
|
def getPreferredOrDefaultValue(self, key, defaultValue):
|
|
if self.appId in self.prefValues:
|
|
return self.prefValues[self.appId][key]
|
|
else:
|
|
return defaultValue
|
|
|
|
class NfdFrame(GuiFrame):
|
|
def __init__(self, notebook, prefValues):
|
|
GuiFrame.__init__(self, notebook, prefValues, "nfd")
|
|
|
|
self.frameLabel = "NFD"
|
|
|
|
# log-level
|
|
self.logLevel = StringVar(self)
|
|
self.addDropDown("Log level:",
|
|
self.logLevel,
|
|
LOG_LEVELS,
|
|
self.getPreferredOrDefaultValue("log-level", LOG_LEVELS[3]))
|
|
|
|
def getValues(self):
|
|
return {
|
|
"log-level": self.logLevel.get()
|
|
}
|
|
|
|
class NlsrFrame(GuiFrame):
|
|
|
|
HYPERBOLIC_STATES = [
|
|
"off",
|
|
"on",
|
|
"dry-run"
|
|
]
|
|
|
|
def __init__(self, notebook, prefValues):
|
|
GuiFrame.__init__(self, notebook, prefValues, "nlsr")
|
|
|
|
self.frameLabel = "NLSR"
|
|
|
|
# general: network
|
|
self.network = StringVar(self)
|
|
self.addEntryBox("Network:",
|
|
self.network,
|
|
self.getPreferredOrDefaultValue("network", "/ndn"))
|
|
|
|
# general: site
|
|
self.site = StringVar(self)
|
|
self.addEntryBox("Site:", self.site, self.getPreferredOrDefaultValue("site", "/edu/site"))
|
|
|
|
# general: router
|
|
self.router = StringVar(self)
|
|
self.addEntryBox("Router:",
|
|
self.router,
|
|
self.getPreferredOrDefaultValue("router", "/%C1.Router/cs/host"))
|
|
|
|
# general: log-level
|
|
self.logLevel = StringVar(self)
|
|
self.addDropDown("Log level:",
|
|
self.logLevel,
|
|
LOG_LEVELS,
|
|
self.getPreferredOrDefaultValue("log-level", LOG_LEVELS[3]))
|
|
|
|
# hyperbolic: state
|
|
self.hyperbolicState = StringVar(self)
|
|
self.addDropDown("Hyperbolic routing:",
|
|
self.hyperbolicState,
|
|
self.HYPERBOLIC_STATES,
|
|
self.getPreferredOrDefaultValue("hyperbolic-state", self.HYPERBOLIC_STATES[0]))
|
|
|
|
# hyperbolic: angle
|
|
self.angle = StringVar(self)
|
|
self.addEntryBox("Angle:", self.angle, self.getPreferredOrDefaultValue("angle", "0.0"))
|
|
|
|
# hyperbolic: radius
|
|
self.radius = StringVar(self)
|
|
self.addEntryBox("Radius:", self.radius, self.getPreferredOrDefaultValue("radius", "0.0"))
|
|
|
|
# fib: max-faces-per-prefix
|
|
self.maxFaces = StringVar(self)
|
|
self.addEntryBox("Max faces per prefix:",
|
|
self.maxFaces,
|
|
self.getPreferredOrDefaultValue("max-faces-per-prefix", "0"))
|
|
|
|
def getValues(self):
|
|
return {
|
|
"network": self.network.get(),
|
|
"site": self.site.get(),
|
|
"router": self.router.get(),
|
|
"log-level": self.logLevel.get(),
|
|
"hyperbolic-state": self.hyperbolicState.get(),
|
|
"angle": self.angle.get(),
|
|
"radius": self.radius.get(),
|
|
"max-faces-per-prefix": self.maxFaces.get()
|
|
}
|
|
|