r14231@Kushana: nickm | 2007-08-27 14:56:14 -0400

Most configuration options have the same names in or.h and in torrc.  Make the macros reflect this, so that it is easier to fit them onto a line, and so that mismatched options stand out more


svn:r11290
This commit is contained in:
Nick Mathewson 2007-08-27 18:56:20 +00:00
parent d3224bad42
commit 7cbe302b3f

View File

@ -112,6 +112,9 @@ typedef struct config_var_t {
#define VAR(name,conftype,member,initvalue) \ #define VAR(name,conftype,member,initvalue) \
{ name, CONFIG_TYPE_ ## conftype, STRUCT_OFFSET(or_options_t, member), \ { name, CONFIG_TYPE_ ## conftype, STRUCT_OFFSET(or_options_t, member), \
initvalue } initvalue }
/** As VAR, but the option name and member name are the same. */
#define V(member,conftype,initvalue) \
VAR(#member, conftype, member, initvalue)
/** An entry for config_vars: "The option <b>name</b> is obsolete." */ /** An entry for config_vars: "The option <b>name</b> is obsolete." */
#define OBSOLETE(name) { name, CONFIG_TYPE_OBSOLETE, 0, NULL } #define OBSOLETE(name) { name, CONFIG_TYPE_OBSOLETE, 0, NULL }
@ -121,170 +124,166 @@ typedef struct config_var_t {
*/ */
static config_var_t _option_vars[] = { static config_var_t _option_vars[] = {
OBSOLETE("AccountingMaxKB"), OBSOLETE("AccountingMaxKB"),
VAR("AccountingMax", MEMUNIT, AccountingMax, "0 bytes"), V(AccountingMax, MEMUNIT, "0 bytes"),
VAR("AccountingStart", STRING, AccountingStart, NULL), V(AccountingStart, STRING, NULL),
VAR("Address", STRING, Address, NULL), V(Address, STRING, NULL),
VAR("AllowInvalidNodes", CSV, AllowInvalidNodes, V(AllowInvalidNodes, CSV, "middle,rendezvous"),
"middle,rendezvous"), V(AllowNonRFC953Hostnames, BOOL, "0"),
VAR("AllowNonRFC953Hostnames", BOOL, AllowNonRFC953Hostnames, "0"), V(AssumeReachable, BOOL, "0"),
VAR("AssumeReachable", BOOL, AssumeReachable, "0"), V(AuthDirBadExit, LINELIST, NULL),
VAR("AuthDirBadExit", LINELIST, AuthDirBadExit, NULL), V(AuthDirInvalid, LINELIST, NULL),
VAR("AuthDirInvalid", LINELIST, AuthDirInvalid, NULL), V(AuthDirReject, LINELIST, NULL),
VAR("AuthDirReject", LINELIST, AuthDirReject, NULL), V(AuthDirRejectUnlisted, BOOL, "0"),
VAR("AuthDirRejectUnlisted",BOOL, AuthDirRejectUnlisted,"0"), V(AuthDirListBadExits, BOOL, "0"),
VAR("AuthDirListBadExits", BOOL, AuthDirListBadExits, "0"), VAR("AuthoritativeDirectory", BOOL, AuthoritativeDir, "0"),
VAR("AuthoritativeDirectory",BOOL, AuthoritativeDir, "0"), V(AutomapHostsOnResolve, BOOL, "0"),
VAR("AutomapHostsOnResolve",BOOL, AutomapHostsOnResolve,"0"), V(AutomapHostsSuffixes, CSV, ".onion,.exit"),
VAR("AutomapHostsSuffixes",CSV, AutomapHostsSuffixes, ".onion,.exit"), V(AvoidDiskWrites, BOOL, "0"),
VAR("AvoidDiskWrites", BOOL, AvoidDiskWrites, "0"), V(BandwidthBurst, MEMUNIT, "6 MB"),
VAR("BandwidthBurst", MEMUNIT, BandwidthBurst, "6 MB"), V(BandwidthRate, MEMUNIT, "3 MB"),
VAR("BandwidthRate", MEMUNIT, BandwidthRate, "3 MB"), V(BridgeAuthoritativeDir, BOOL, "0"),
VAR("BridgeAuthoritativeDir", BOOL, BridgeAuthoritativeDir, "0"), VAR("Bridge", LINELIST, Bridges, NULL),
VAR("Bridge", LINELIST, Bridges, NULL), V(CircuitBuildTimeout, INTERVAL, "1 minute"),
VAR("CircuitBuildTimeout", INTERVAL, CircuitBuildTimeout, "1 minute"), V(CircuitIdleTimeout, INTERVAL, "1 hour"),
VAR("CircuitIdleTimeout", INTERVAL, CircuitIdleTimeout, "1 hour"), V(ClientDNSRejectInternalAddresses, BOOL,"1"),
VAR("ClientDNSRejectInternalAddresses", BOOL, V(ClientOnly, BOOL, "0"),
ClientDNSRejectInternalAddresses, "1"), V(ConnLimit, UINT, "1000"),
VAR("ClientOnly", BOOL, ClientOnly, "0"), V(ConstrainedSockets, BOOL, "0"),
VAR("ConnLimit", UINT, ConnLimit, "1000"), V(ConstrainedSockSize, MEMUNIT, "8192"),
VAR("ConstrainedSockets", BOOL, ConstrainedSockets, "0"), V(ContactInfo, STRING, NULL),
VAR("ConstrainedSockSize", MEMUNIT, ConstrainedSockSize, "8192"), V(ControlListenAddress, LINELIST, NULL),
VAR("ContactInfo", STRING, ContactInfo, NULL), V(ControlPort, UINT, "0"),
VAR("ControlListenAddress",LINELIST, ControlListenAddress, NULL), V(ControlSocket, LINELIST, NULL),
VAR("ControlPort", UINT, ControlPort, "0"), V(CookieAuthentication, BOOL, "0"),
VAR("ControlSocket", LINELIST, ControlSocket, NULL), V(CookieAuthFileGroupReadable, BOOL, "0"),
VAR("CookieAuthentication",BOOL, CookieAuthentication, "0"), V(CookieAuthFile, STRING, NULL),
VAR("CookieAuthFileGroupReadable",BOOL,CookieAuthFileGroupReadable, "0"), V(DataDirectory, STRING, NULL),
VAR("CookieAuthFile", STRING, CookieAuthFile, NULL),
VAR("DataDirectory", STRING, DataDirectory, NULL),
OBSOLETE("DebugLogFile"), OBSOLETE("DebugLogFile"),
VAR("DirAllowPrivateAddresses",BOOL, DirAllowPrivateAddresses, NULL), V(DirAllowPrivateAddresses, BOOL, NULL),
VAR("DirListenAddress", LINELIST, DirListenAddress, NULL), V(DirListenAddress, LINELIST, NULL),
OBSOLETE("DirFetchPeriod"), OBSOLETE("DirFetchPeriod"),
VAR("DirPolicy", LINELIST, DirPolicy, NULL), V(DirPolicy, LINELIST, NULL),
VAR("DirPort", UINT, DirPort, "0"), V(DirPort, UINT, "0"),
OBSOLETE("DirPostPeriod"), OBSOLETE("DirPostPeriod"),
VAR("DirServer", LINELIST, DirServers, NULL), VAR("DirServer", LINELIST, DirServers, NULL),
VAR("DNSPort", UINT, DNSPort, "0"), V(DNSPort, UINT, "0"),
VAR("DNSListenAddress", LINELIST, DNSListenAddress, NULL), V(DNSListenAddress, LINELIST, NULL),
VAR("DownloadExtraInfo", BOOL, DownloadExtraInfo, "0"), V(DownloadExtraInfo, BOOL, "0"),
VAR("EnforceDistinctSubnets", BOOL, EnforceDistinctSubnets,"1"), V(EnforceDistinctSubnets, BOOL, "1"),
VAR("EntryNodes", STRING, EntryNodes, NULL), V(EntryNodes, STRING, NULL),
VAR("ExcludeNodes", STRING, ExcludeNodes, NULL), V(ExcludeNodes, STRING, NULL),
VAR("ExitNodes", STRING, ExitNodes, NULL), V(ExitNodes, STRING, NULL),
VAR("ExitPolicy", LINELIST, ExitPolicy, NULL), V(ExitPolicy, LINELIST, NULL),
VAR("ExitPolicyRejectPrivate", BOOL, ExitPolicyRejectPrivate, "1"), V(ExitPolicyRejectPrivate, BOOL, "1"),
VAR("FascistFirewall", BOOL, FascistFirewall, "0"), V(FascistFirewall, BOOL, "0"),
VAR("FirewallPorts", CSV, FirewallPorts, ""), V(FirewallPorts, CSV, ""),
VAR("FastFirstHopPK", BOOL, FastFirstHopPK, "1"), V(FastFirstHopPK, BOOL, "1"),
VAR("FetchServerDescriptors",BOOL, FetchServerDescriptors,"1"), V(FetchServerDescriptors, BOOL, "1"),
VAR("FetchHidServDescriptors",BOOL, FetchHidServDescriptors, "1"), V(FetchHidServDescriptors, BOOL, "1"),
VAR("FetchUselessDescriptors",BOOL, FetchUselessDescriptors, "0"), V(FetchUselessDescriptors, BOOL, "0"),
VAR("Group", STRING, Group, NULL), V(Group, STRING, NULL),
VAR("HardwareAccel", BOOL, HardwareAccel, "0"), V(HardwareAccel, BOOL, "0"),
VAR("HashedControlPassword",STRING, HashedControlPassword, NULL), V(HashedControlPassword, STRING, NULL),
VAR("HiddenServiceDir", LINELIST_S, RendConfigLines, NULL), VAR("HiddenServiceDir", LINELIST_S, RendConfigLines, NULL),
VAR("HiddenServiceExcludeNodes", LINELIST_S, RendConfigLines, NULL), VAR("HiddenServiceExcludeNodes", LINELIST_S, RendConfigLines, NULL),
VAR("HiddenServiceNodes", LINELIST_S, RendConfigLines, NULL), VAR("HiddenServiceNodes", LINELIST_S, RendConfigLines, NULL),
VAR("HiddenServiceOptions",LINELIST_V, RendConfigLines, NULL), VAR("HiddenServiceOptions",LINELIST_V, RendConfigLines, NULL),
VAR("HiddenServicePort", LINELIST_S, RendConfigLines, NULL), VAR("HiddenServicePort", LINELIST_S, RendConfigLines, NULL),
VAR("HSAuthoritativeDir", BOOL, HSAuthoritativeDir, "0"), V(HSAuthoritativeDir, BOOL, "0"),
VAR("HSAuthorityRecordStats",BOOL, HSAuthorityRecordStats,"0"), V(HSAuthorityRecordStats, BOOL, "0"),
VAR("HttpProxy", STRING, HttpProxy, NULL), V(HttpProxy, STRING, NULL),
VAR("HttpProxyAuthenticator",STRING, HttpProxyAuthenticator,NULL), V(HttpProxyAuthenticator, STRING, NULL),
VAR("HttpsProxy", STRING, HttpsProxy, NULL), V(HttpsProxy, STRING, NULL),
VAR("HttpsProxyAuthenticator",STRING,HttpsProxyAuthenticator,NULL), V(HttpsProxyAuthenticator, STRING, NULL),
OBSOLETE("IgnoreVersion"), OBSOLETE("IgnoreVersion"),
VAR("KeepalivePeriod", INTERVAL, KeepalivePeriod, "5 minutes"), V(KeepalivePeriod, INTERVAL, "5 minutes"),
VAR("Log", LINELIST, Logs, NULL), VAR("Log", LINELIST, Logs, NULL),
OBSOLETE("LinkPadding"), OBSOLETE("LinkPadding"),
OBSOLETE("LogLevel"), OBSOLETE("LogLevel"),
OBSOLETE("LogFile"), OBSOLETE("LogFile"),
VAR("LongLivedPorts", CSV, LongLivedPorts, V(LongLivedPorts, CSV,
"21,22,706,1863,5050,5190,5222,5223,6667,6697,8300"), "21,22,706,1863,5050,5190,5222,5223,6667,6697,8300"),
VAR("MapAddress", LINELIST, AddressMap, NULL), VAR("MapAddress", LINELIST, AddressMap, NULL),
VAR("MaxAdvertisedBandwidth",MEMUNIT,MaxAdvertisedBandwidth,"1 GB"), V(MaxAdvertisedBandwidth, MEMUNIT, "1 GB"),
VAR("MaxCircuitDirtiness", INTERVAL, MaxCircuitDirtiness, "10 minutes"), V(MaxCircuitDirtiness, INTERVAL, "10 minutes"),
VAR("MaxOnionsPending", UINT, MaxOnionsPending, "100"), V(MaxOnionsPending, UINT, "100"),
OBSOLETE("MonthlyAccountingStart"), OBSOLETE("MonthlyAccountingStart"),
VAR("MyFamily", STRING, MyFamily, NULL), V(MyFamily, STRING, NULL),
VAR("NewCircuitPeriod", INTERVAL, NewCircuitPeriod, "30 seconds"), V(NewCircuitPeriod, INTERVAL, "30 seconds"),
VAR("NamingAuthoritativeDirectory",BOOL, NamingAuthoritativeDir, "0"), VAR("NamingAuthoritativeDirectory",BOOL, NamingAuthoritativeDir, "0"),
VAR("NatdListenAddress", LINELIST, NatdListenAddress, NULL), V(NatdListenAddress, LINELIST, NULL),
VAR("NatdPort", UINT, NatdPort, "0"), V(NatdPort, UINT, "0"),
VAR("Nickname", STRING, Nickname, NULL), V(Nickname, STRING, NULL),
VAR("NoPublish", BOOL, NoPublish, "0"), V(NoPublish, BOOL, "0"),
VAR("NodeFamily", LINELIST, NodeFamilies, NULL), VAR("NodeFamily", LINELIST, NodeFamilies, NULL),
VAR("NumCpus", UINT, NumCpus, "1"), V(NumCpus, UINT, "1"),
VAR("NumEntryGuards", UINT, NumEntryGuards, "3"), V(NumEntryGuards, UINT, "3"),
VAR("ORListenAddress", LINELIST, ORListenAddress, NULL), V(ORListenAddress, LINELIST, NULL),
VAR("ORPort", UINT, ORPort, "0"), V(ORPort, UINT, "0"),
VAR("OutboundBindAddress", STRING, OutboundBindAddress, NULL), V(OutboundBindAddress, STRING, NULL),
OBSOLETE("PathlenCoinWeight"), OBSOLETE("PathlenCoinWeight"),
VAR("PidFile", STRING, PidFile, NULL), V(PidFile, STRING, NULL),
VAR("PreferTunneledDirConns", BOOL, PreferTunneledDirConns, "0"), V(PreferTunneledDirConns, BOOL, "0"),
VAR("ProtocolWarnings", BOOL, ProtocolWarnings, "0"), V(ProtocolWarnings, BOOL, "0"),
VAR("PublishServerDescriptor", CSV, PublishServerDescriptor,"v1,v2"), V(PublishServerDescriptor, CSV, "v1,v2"),
VAR("PublishHidServDescriptors",BOOL,PublishHidServDescriptors, "1"), V(PublishHidServDescriptors, BOOL, "1"),
VAR("ReachableAddresses", LINELIST, ReachableAddresses, NULL), V(ReachableAddresses, LINELIST, NULL),
VAR("ReachableDirAddresses",LINELIST,ReachableDirAddresses,NULL), V(ReachableDirAddresses, LINELIST, NULL),
VAR("ReachableORAddresses",LINELIST, ReachableORAddresses, NULL), V(ReachableORAddresses, LINELIST, NULL),
VAR("RecommendedVersions", LINELIST, RecommendedVersions, NULL), V(RecommendedVersions, LINELIST, NULL),
VAR("RecommendedClientVersions", LINELIST, RecommendedClientVersions, NULL), V(RecommendedClientVersions, LINELIST, NULL),
VAR("RecommendedServerVersions", LINELIST, RecommendedServerVersions, NULL), V(RecommendedServerVersions, LINELIST, NULL),
VAR("RedirectExit", LINELIST, RedirectExit, NULL), V(RedirectExit, LINELIST, NULL),
VAR("RelayBandwidthBurst", MEMUNIT, RelayBandwidthBurst, "0"), V(RelayBandwidthBurst, MEMUNIT, "0"),
VAR("RelayBandwidthRate", MEMUNIT, RelayBandwidthRate, "0"), V(RelayBandwidthRate, MEMUNIT, "0"),
VAR("RendExcludeNodes", STRING, RendExcludeNodes, NULL), V(RendExcludeNodes, STRING, NULL),
VAR("RendNodes", STRING, RendNodes, NULL), V(RendNodes, STRING, NULL),
VAR("RendPostPeriod", INTERVAL, RendPostPeriod, "1 hour"), V(RendPostPeriod, INTERVAL, "1 hour"),
VAR("RephistTrackTime", INTERVAL, RephistTrackTime, "24 hours"), V(RephistTrackTime, INTERVAL, "24 hours"),
OBSOLETE("RouterFile"), OBSOLETE("RouterFile"),
VAR("RunAsDaemon", BOOL, RunAsDaemon, "0"), V(RunAsDaemon, BOOL, "0"),
VAR("RunTesting", BOOL, RunTesting, "0"), V(RunTesting, BOOL, "0"),
VAR("SafeLogging", BOOL, SafeLogging, "1"), V(SafeLogging, BOOL, "1"),
VAR("SafeSocks", BOOL, SafeSocks, "0"), V(SafeSocks, BOOL, "0"),
VAR("ServerDNSAllowNonRFC953Hostnames", V(ServerDNSAllowNonRFC953Hostnames, BOOL,"0"),
BOOL, ServerDNSAllowNonRFC953Hostnames, "0"), V(ServerDNSDetectHijacking, BOOL, "1"),
VAR("ServerDNSDetectHijacking",BOOL, ServerDNSDetectHijacking,"1"), V(ServerDNSResolvConfFile, STRING, NULL),
VAR("ServerDNSResolvConfFile", STRING, ServerDNSResolvConfFile, NULL), V(ServerDNSSearchDomains, BOOL, "0"),
VAR("ServerDNSSearchDomains", BOOL, ServerDNSSearchDomains, "0"), V(ServerDNSTestAddresses, CSV,
VAR("ServerDNSTestAddresses", CSV, ServerDNSTestAddresses,
"www.google.com,www.mit.edu,www.yahoo.com,www.slashdot.org"), "www.google.com,www.mit.edu,www.yahoo.com,www.slashdot.org"),
VAR("ShutdownWaitLength", INTERVAL, ShutdownWaitLength, "30 seconds"), V(ShutdownWaitLength, INTERVAL, "30 seconds"),
VAR("SocksListenAddress", LINELIST, SocksListenAddress, NULL), V(SocksListenAddress, LINELIST, NULL),
VAR("SocksPolicy", LINELIST, SocksPolicy, NULL), V(SocksPolicy, LINELIST, NULL),
VAR("SocksPort", UINT, SocksPort, "9050"), V(SocksPort, UINT, "9050"),
VAR("SocksTimeout", INTERVAL, SocksTimeout, "2 minutes"), V(SocksTimeout, INTERVAL, "2 minutes"),
OBSOLETE("StatusFetchPeriod"), OBSOLETE("StatusFetchPeriod"),
VAR("StrictEntryNodes", BOOL, StrictEntryNodes, "0"), V(StrictEntryNodes, BOOL, "0"),
VAR("StrictExitNodes", BOOL, StrictExitNodes, "0"), V(StrictExitNodes, BOOL, "0"),
OBSOLETE("SysLog"), OBSOLETE("SysLog"),
VAR("TestSocks", BOOL, TestSocks, "0"), V(TestSocks, BOOL, "0"),
VAR("TestVia", STRING, TestVia, NULL), V(TestVia, STRING, NULL),
VAR("TrackHostExits", CSV, TrackHostExits, NULL), V(TrackHostExits, CSV, NULL),
VAR("TrackHostExitsExpire",INTERVAL, TrackHostExitsExpire, "30 minutes"), V(TrackHostExitsExpire, INTERVAL, "30 minutes"),
OBSOLETE("TrafficShaping"), OBSOLETE("TrafficShaping"),
VAR("TransListenAddress", LINELIST, TransListenAddress, NULL), V(TransListenAddress, LINELIST, NULL),
VAR("TransPort", UINT, TransPort, "0"), V(TransPort, UINT, "0"),
VAR("TunnelDirConns", BOOL, TunnelDirConns, "0"), V(TunnelDirConns, BOOL, "0"),
VAR("UpdateBridgesFromAuthority",BOOL,UpdateBridgesFromAuthority,"0"), V(UpdateBridgesFromAuthority, BOOL, "0"),
VAR("UseBridges", BOOL, UseBridges, "0"), V(UseBridges, BOOL, "0"),
VAR("UseEntryGuards", BOOL, UseEntryGuards, "1"), V(UseEntryGuards, BOOL, "1"),
VAR("User", STRING, User, NULL), V(User, STRING, NULL),
VAR("V1AuthoritativeDirectory",BOOL, V1AuthoritativeDir, "0"), VAR("V1AuthoritativeDirectory",BOOL, V1AuthoritativeDir, "0"),
VAR("V2AuthoritativeDirectory",BOOL, V2AuthoritativeDir, "0"), VAR("V2AuthoritativeDirectory",BOOL, V2AuthoritativeDir, "0"),
VAR("V3AuthoritativeDirectory",BOOL, V3AuthoritativeDir, "0"), VAR("V3AuthoritativeDirectory",BOOL, V3AuthoritativeDir, "0"),
VAR("V3AuthVotingInterval",INTERVAL, V3AuthVotingInterval, "1 hour"), V(V3AuthVotingInterval, INTERVAL, "1 hour"),
VAR("V3AuthVoteDelay", INTERVAL, V3AuthVoteDelay, "5 minutes"), V(V3AuthVoteDelay, INTERVAL, "5 minutes"),
VAR("V3AuthDistDelay", INTERVAL, V3AuthDistDelay, "5 minutes"), V(V3AuthDistDelay, INTERVAL, "5 minutes"),
VAR("V3AuthNIntervalsValid", UINT, V3AuthNIntervalsValid, "3"), V(V3AuthNIntervalsValid, UINT, "3"),
VAR("VersioningAuthoritativeDirectory",BOOL,VersioningAuthoritativeDir, "0"), VAR("VersioningAuthoritativeDirectory",BOOL,VersioningAuthoritativeDir, "0"),
VAR("VirtualAddrNetwork", STRING, VirtualAddrNetwork, "127.192.0.0/10"), V(VirtualAddrNetwork, STRING, "127.192.0.0/10"),
VAR("__AllDirActionsPrivate",BOOL, AllDirActionsPrivate, "0"), VAR("__AllDirActionsPrivate", BOOL, AllDirActionsPrivate, "0"),
VAR("__DisablePredictedCircuits",BOOL,DisablePredictedCircuits,"0"), VAR("__DisablePredictedCircuits",BOOL,DisablePredictedCircuits, "0"),
VAR("__LeaveStreamsUnattached", BOOL,LeaveStreamsUnattached, "0"), VAR("__LeaveStreamsUnattached",BOOL, LeaveStreamsUnattached, "0"),
{ NULL, CONFIG_TYPE_OBSOLETE, 0, NULL } { NULL, CONFIG_TYPE_OBSOLETE, 0, NULL }
}; };
@ -294,35 +293,34 @@ static config_var_t _option_vars[] = {
{ name, CONFIG_TYPE_ ## conftype, STRUCT_OFFSET(or_state_t, member), \ { name, CONFIG_TYPE_ ## conftype, STRUCT_OFFSET(or_state_t, member), \
initvalue } initvalue }
static config_var_t _state_vars[] = { static config_var_t _state_vars[] = {
VAR("AccountingBytesReadInInterval", MEMUNIT, V(AccountingBytesReadInInterval, MEMUNIT, NULL),
AccountingBytesReadInInterval, NULL), V(AccountingBytesWrittenInInterval, MEMUNIT, NULL),
VAR("AccountingBytesWrittenInInterval", MEMUNIT, V(AccountingExpectedUsage, MEMUNIT, NULL),
AccountingBytesWrittenInInterval, NULL), V(AccountingIntervalStart, ISOTIME, NULL),
VAR("AccountingExpectedUsage", MEMUNIT, AccountingExpectedUsage, NULL), V(AccountingSecondsActive, INTERVAL, NULL),
VAR("AccountingIntervalStart", ISOTIME, AccountingIntervalStart, NULL),
VAR("AccountingSecondsActive", INTERVAL, AccountingSecondsActive, NULL),
VAR("EntryGuard", LINELIST_S, EntryGuards, NULL), VAR("EntryGuard", LINELIST_S, EntryGuards, NULL),
VAR("EntryGuardDownSince", LINELIST_S, EntryGuards, NULL), VAR("EntryGuardDownSince", LINELIST_S, EntryGuards, NULL),
VAR("EntryGuardUnlistedSince", LINELIST_S, EntryGuards, NULL), VAR("EntryGuardUnlistedSince", LINELIST_S, EntryGuards, NULL),
VAR("EntryGuards", LINELIST_V, EntryGuards, NULL), V(EntryGuards, LINELIST_V, NULL),
VAR("BWHistoryReadEnds", ISOTIME, BWHistoryReadEnds, NULL), V(BWHistoryReadEnds, ISOTIME, NULL),
VAR("BWHistoryReadInterval", UINT, BWHistoryReadInterval, "900"), V(BWHistoryReadInterval, UINT, "900"),
VAR("BWHistoryReadValues", CSV, BWHistoryReadValues, ""), V(BWHistoryReadValues, CSV, ""),
VAR("BWHistoryWriteEnds", ISOTIME, BWHistoryWriteEnds, NULL), V(BWHistoryWriteEnds, ISOTIME, NULL),
VAR("BWHistoryWriteInterval", UINT, BWHistoryWriteInterval, "900"), V(BWHistoryWriteInterval, UINT, "900"),
VAR("BWHistoryWriteValues", CSV, BWHistoryWriteValues, ""), V(BWHistoryWriteValues, CSV, ""),
VAR("TorVersion", STRING, TorVersion, NULL), V(TorVersion, STRING, NULL),
VAR("LastRotatedOnionKey", ISOTIME, LastRotatedOnionKey, NULL), V(LastRotatedOnionKey, ISOTIME, NULL),
VAR("LastWritten", ISOTIME, LastWritten, NULL), V(LastWritten, ISOTIME, NULL),
{ NULL, CONFIG_TYPE_OBSOLETE, 0, NULL } { NULL, CONFIG_TYPE_OBSOLETE, 0, NULL }
}; };
#undef VAR #undef VAR
#undef V
#undef OBSOLETE #undef OBSOLETE
/** Represents an English description of a configuration variable; used when /** Represents an English description of a configuration variable; used when