commit ef633b2cf45d72205c840935e036c16b57517e8b Author: Jannik Beyerstedt Date: Sat Jan 27 15:10:12 2024 +0100 import from old webserver diff --git a/about.shtml b/about.shtml new file mode 100644 index 0000000..5ce7d10 --- /dev/null +++ b/about.shtml @@ -0,0 +1,64 @@ + + + + +Easterhegg 2005 - About + + + + + + + + +
+

About the Easterhegg

+
+ +
+

Was ist das Easterhegg?

+

+Das Easterhegg ist die zweitgrösste, regelmässig durchgeführte +Veranstaltung des Chaos Computer Clubs. +Die Teilnehmer kommen aus dem gesamten Bundesgebiet, vereinzelt auch aus dem Ausland. +Es besteht hauptsächlich aus Workshops, weniger aus reinen Vorträgen. +Abgedeckt wird das ganze Spektrum von Technik über Netzkultur bis zum Szenetreff. +Die Veranstaltung bietet eine Fülle an hochklassigen Workshops und Vorträgen. +Dazu kommt, dass das Easterhegg unschlagbar preiswert ist, da es nichtkommerziell ist +und alle Beteiligten ehrenamtlich arbeiten. +

+
+ +
+

Was ist beim Easterhegg anders als beim Chaos Communication Congress?

+

+Der auffälligste Unterschied ist wohl, dass das Easterhegg nicht nur +aus Vorträgen besteht, sondern hauptsächlich aus Workshops, +bei denen die Besucher selbst mitmachen können und sollen. +Zum anderen ist es keineswegs ein solch gigantisches Event wie der +Chaos Communication Congress, +was allerdings heißt, dass der Platz begrenzt ist und man sich deshalb +anmelden +muss. Darüberhinaus können Tageskarten nur solange ausgegeben werden, +wie die Veranstaltung nicht überfüllt ist. +

+

+Im Eintrittspreis enthalten ist ein Frühstücksbuffet (Brötchen, Obst, Kaffee, Tee, ...), +welches traditionell den ganzen Tag über zugänglich ist. +

+
+ +
+

Wer steckt dahinter?

+ +
+ + + + + diff --git a/announce.php b/announce.php new file mode 100644 index 0000000..76a5869 --- /dev/null +++ b/announce.php @@ -0,0 +1,415 @@ + continue + = FAIL => Abbruchmeldung und Schlußverarbeitung + + Prüfung auf gültige Authentifizierung + = OK => continue + = FAIL => Abbruchmeldung und Schlußverarbeitung + + Prüfung auf Wartungsstatus + = OK => continue + = FAIL => Abbruchmeldung und Schlußverarbeitung + + Verarbeitung der Submit-Aktionen (POST), Anzeige der einzelnen Orga-Formulare +*/ + + + + +// this script needs following additional server modules for PHP +// - (none) + + +// write HTTP header (anti-cache) +header('Expires: Sun, 31 Dec 1989 23:59:59 GMT'); +header('Last-Modified: ' . gmdate('D, d M Y H:i:s') . ' GMT'); +header('Cache-Control: no-store, no-cache, must-revalidate'); +header('Cache-Control: post-check=0, pre-check=0'); +header('Pragma: no-cache'); + + +// define general server constants +define( "SERVER_SITE_MAINTENANCE", false ); // maintenance state, set to TRUE to lock this page temporarily +define( "SERVER_LOCALHOST_IP", "127.0.0.1" ); // localhost IP, which does not need authentication +define( "SERVER_PROTOCOL_HTTPS", "HTTPS" ); // HTTPS protocol name + + +// define server file constants +define( "SERVER_FILE_MYSELF", "announce.php" ); // submit target of forms = this file itself +define( "SERVER_FILE_ANNOUNCE", "index.shtml" ); // announcement file; e.g. index file +define( "SERVER_FILE_HEADER", "ssi_site_header.html" ); // SSI file for site header +define( "SERVER_FILE_INTRO", "ssi_site_intro.html" ); // SSI file for site intro +define( "SERVER_FILE_EXTRO", "ssi_site_extro.html" ); // SSI file for site extro + +// define auth constants +define( "AUTH_SERVER_PASS", "Osterüberraschung" ); // auth password, [todo:] should be outsourced to an external, secured data file + + + +// init references to $_POST variables ($pxxx) +$pstrauth = & $_POST['txtauth']; +$pstrtitle = & $_POST['txttitle']; +$pstrannouncement = & $_POST['txtannouncement']; +$pbolannouncement = & $_POST['cmdannouncement']; + +// init post variables (only for mandatory variables, ignore variables submitted by special forms!) +if ( !isset($pstrauth) ) $pstrauth = ''; +if ( !isset($pstrtitle) ) $pstrtitle = ''; +if ( !isset($pstrannouncement) ) $pstrannouncement = ''; + + +// init instance variables +$intnow = time(); + +$strmsg = ''; // (status/error/etc.) message to user +$strauth = ''; +$strinput = ''; +$stroutput = ''; +$intfileid = 0; + +$strtitle = ''; +$strannouncement = ''; +$strauth = ''; + +$bolannouncement = false; +$bolauthabort= false; +$bolok = false; // action feedback, triggers confirmation if true or warning if false + + +// function library + +function addmsg ($straddmsg) +{ + // adds $straddmsg to $strmsg + global $strmsg; + if ( $straddmsg != '' ) + { + $strmsg = $strmsg . '
  • ' . $straddmsg . '
  • '; + } +} + +function showmsg () +{ + // shows messages in $strmsg if available + global $strmsg, $bolok; + if ( $strmsg != '' ) + { + echo + ' +
    +

    Feedback

    + +
    + '; + $strmsg = ''; + } +} + + + +// check input variables +//$bolannouncement = isset( $pbolannouncement ); // does not work in IE when submitted from within a text field by pressing Return key, reason unknown +$bolannouncement = ( isset( $pbolannouncement ) || $pstrannouncement != '' ); //workaround for IE problem, see line above + +$intwsid = $pintwsid; +$strtitle = $pstrtitle; +$strannouncement = $pstrannouncement; +$strauth = $pstrauth; + +// defuse input variables +$strtitle = trim( htmlentities( $pstrtitle, ENT_QUOTES )); +// leave announcement html'ed +//$strannouncement = trim( htmlentities( $pstrannouncement, ENT_QUOTES )); +$strauth = trim( htmlentities( $pstrauth, ENT_QUOTES )); + +// shorten input variables +if ( strlen( $strauth ) > 255 ) $strauth = substr( $strauth, 0, 4095 ); //cut it, do not modify +if ( strlen( $strtitle ) > 255 ) $strtitle = substr( $strtitle, 0, 252 ) . "..."; +if ( strlen( $strannouncement ) > 4095 ) $strannouncement = substr( $strannouncement, 0, 4092 ) . "..."; + + +if +( + // localhost access + ( + // direkter Aufruf von localhost + htmlspecialchars( $_SERVER['HTTP_X_FORWARDED_FOR'], ENT_QUOTES ) == '' + && + htmlspecialchars( $_SERVER['REMOTE_ADDR'], ENT_QUOTES ) == constant("SERVER_LOCALHOST_IP") + ) + || + ( + // indirekter Aufruf (z.B. transparenter SSL-Proxy) mit übergebenem localhost + htmlspecialchars( $_SERVER['HTTP_X_FORWARDED_FOR'], ENT_QUOTES ) == constant("SERVER_LOCALHOST_IP") + ) +) +{ + // localhost ist immer eingeloggt + // -> continue +} +else +{ + // check protocol and timeout + + + + // check secure connection + // possible results: + // - secure => continue + // - insecure => force logout ($bolauthlogoutnow), show error page and prepare message ($strmsg) + if + ( + ( + // direct connection without HTTPS + $_SERVER['HTTPS'] == '' + && + $_SERVER['HTTP_X_FORWARDED_PROTO'] == '' + ) + || + ( + // indirect connection without local HTTPS proxy, e.g. orenosp + strtolower($_SERVER['HTTP_X_FORWARDED_PROTO']) != strtolower(constant("SERVER_PROTOCOL_HTTPS")) + && $_SERVER['HTTP_X_FORWARDED_PROTO'] != '' + ) + ) + { + // insecure connection -> abort + addmsg ( 'Dein Verbindungsprotokoll ist HTTP. Bitte verwende für die Announce-Seite Verschlüsselung mittels HTTPS.' ); + $bolauthabort = true; + } +} + + +// check maintenance state +if ( constant("SERVER_SITE_MAINTENANCE") ) +{ + // cancel because of maintenance + addmsg ( 'Die Announce-Seite ist zurzeit wegen Wartungsarbeiten deaktiviert. Bitte später wiederkommen. Danke.' ); + $bolauthabort = true; +} + + +// prepare announce page +// assume that all ssi files are there. No, I won't check _that_ explicitely. +// If they ain't there, the user gets a partial page. ...so what? ;o) +readfile( constant("SERVER_FILE_HEADER") ); +echo +' + + +Easterhegg 2005 - Announce + + + +'; +readfile( constant("SERVER_FILE_INTRO") ); +echo +' + + +'; + + +// show msg, if available +if ( $strmsg != '' ) +{ + echo + ' +
    +

    Authentifizierungshinweis:

    + +
    + '; + $strmsg = ''; + $bolauthabort = true; +} + +showmsg(); + + + +if ( $bolauthabort ) +{ + // close page and stoprun. + echo + ' + + + '; + readfile( constant("SERVER_FILE_EXTRO") ); + + die(); +} + + + +// Well, Checkpoint. +// Now a defined and normal state of checking has been reached. +// Possible states are now: +// - $bolauthabort = false: user is authenticated to see this page +// - $bolauthabort = true: user is not authenticated to see this page +// If there were any messages on the way up to here, they are stored as list items (
  • ) in variable $strmsg. + + +// check auth phrase if user tries to login +if ( $bolannouncement ) +{ + if ( $strauth == htmlentities( constant("AUTH_SERVER_PASS") , ENT_QUOTES )) + { + // auth accepted + if ( $strannouncement != '' ) + { + // announcement accepted + if ( $strtitle != '' ) + { + // title accepted + // -> continue + $bolok = true; + + // this feature has been deactivated on the production machine due to security reasons + // to use it on your own machine just delete or uncomment the following lines + //addmsg ( 'Diese Funktion wurde aus Sicherheitsgründen deaktiviert.
    Um sie auf Deiner Umgebung zu reaktivieren, entferne die Sperre in der Datei "announce.php".' ); + //$bolok = false; + } + else + { + // title empty + addmsg ( 'Bitte gib noch einen griffigen Titel an! Danke :-)' ); + } + } + else + { + // announcement empty + addmsg ( 'Das Announcement funktioniert besser, wenn Du etwas zum Announcen einträgst... ;-)' ); + } + } + else + { + // auth failed + addmsg ( 'Das klappt so nicht. Vermutlich hast Du Dich beim Passwort vertippt.' ); + } +} + + +echo +' +
    +

    Announce

    +
    + +'; + +if ( $bolok && $bolannouncement ) +{ + $bolok = false; + + //announce it now + + $strinput = file_get_contents( constant("SERVER_FILE_ANNOUNCE") ); + + $stroutput = + ' + +
    +

    ' . $strtitle . '

    +

    + ' . date( "d.m.Y", $intnow ) . ' + ' . $strannouncement . ' +

    +
    + '; + + $stroutput = str_replace( " [%announcement%] ", ' [%announcement%] ' . $stroutput, $strinput ); + + + if ( is_writable( constant("SERVER_FILE_ANNOUNCE") )) + { + // file_put_contents does not work with PHP 4.x, so use instead: fopen, fwrite, fclose + // file_put_contents( constant("SERVER_FILE_ANNOUNCE"), $stroutput ); + $intfileid = fopen( constant("SERVER_FILE_ANNOUNCE"), "w" ); + fwrite( $intfileid, $stroutput ); + fclose( $intfileid ); + $bolok = true; + } + else + { + addmsg ( 'Die Workshopdatei "' . constant("SERVER_FILE_ANNOUNCE") . '" konnte nicht geschrieben werden. (Rechteproblem?)'); + $bolok = false; + } +} + +if ( $bolannouncement ) +{ + if ( $bolok ) + { + addmsg ( 'Das Announcement wurde gesetzt.' ); + } + else + { + addmsg ( 'Das Announcement wurde nicht gesetzt.' ); + } +} +showmsg(); + + + +// show announce page + +echo +' +
    +

    Startseiten-Announcement

    +
    +
    +
    +

    +Hier können Announcements abgegeben werden, die anschließend auf der Startseite erscheinen.
    +HTML ist nicht nur erlaubt, sondern auch präferiert. Es wird darum gebeten, XHTML-konform zu bleiben.
    +Achtung:Abgegebene Announcements können hier nicht mehr zurückgenommen oder korrigiert werden! +

    +

    +Authentifizierung: +Titel: +Announcement: (HTML accepted) + + +

    +
    +
    +'; + + + +// close page and stoprun. +echo +' + + +'; +readfile( constant("SERVER_FILE_EXTRO") ); + +die(); + +?> diff --git a/css/site_aligns.css b/css/site_aligns.css new file mode 100644 index 0000000..50ac251 --- /dev/null +++ b/css/site_aligns.css @@ -0,0 +1,326 @@ +/* site_aligns.css */ +/* this is for all styles regarding site arrangement of blocks, elements etc. */ + +body +{ + margin: 0px; + padding: 20px; + + /* set "overflow" depending on include method of files: */ + /* when using SSI there won't be scrollbars, so set "overflow: auto" */ + /* when using -Tags (XHTML 1.1) they will have own scrollbars, so set "overflow: hidden" */ + overflow: auto; +} + +div#div_body +{ + width: 96%; + height: 96%; +} + +div#div_left +{ + position: fixed; + left: 20px; + width: 180px; + top: 20px; + bottom: 20px; + overflow: hidden; + z-index: 20; +} + +div#div_menu +{ + position: relative; + left: 0px; + top: 20px; + bottom: 0px; + overflow: auto; + z-index: 70; +} + +div#div_title +{ + position: fixed; + display: block; + left: 120px; + right: 20px; + top: 0px; + padding-left: 0px; + padding-top: 0px; + z-index: 50; +} + +div#div_chaosknoten +{ + position: fixed; + display: block; + right: 20px; + top: 20px; + width: 150px; /* div only holds floating image and must not overlay other elements */ + height: 108px; /* div only holds floating image and must not overlay other elements */ + padding-right: 20px; + padding-top: 2px; + z-index: 50; +} + +img.logo +{ + display: block; + padding: 0px; + margin: 0px; + z-index: 20; +} + +img.rechts +{ + float: right; +} + +div#div_main +{ + position: absolute; + display: block; + padding: 0px; + left: 220px; + right: 20px; + top: 90px; + bottom: 20px; + z-index: 30; +} + +div#div_content +{ + display: block; + padding: 5px; + padding-bottom: 25px; /* keep bottom margin free of content! */ + min-height: 96%; +} + +div.coverbar +{ + position: fixed; + display: block; + left: 220px; + right: 20px; + z-index: 40; +} + +div.coverbar.top +{ + top: 0px; + height: 90px; +} + +div.coverbar.bottom +{ + bottom: 0px; + height: 20px; +} + +h1, h2 +{ + padding: 0.4em; +} + +ul.w3c +{ + position: absolute; + display: block; + float: left; + padding-left: 0px; + padding-bottom: 0px; + margin-bottom: 0px; + bottom: 0px; + left: 0px; + bottom: 0px; + z-index: 40; +} + +li.w3c +{ + display: inline; + padding-top: 0px; + padding-right: 0px; + padding-left: 0px; + padding-bottom: 0px; +} + +.textshadow +{ + position: absolute; + top: 0px; + left: 20px; + right: 0px; +} + +.textshadow.front +{ + padding-top: 0.3em; + padding-left: 1.2em; + z-index: 22; +} +.textshadow.back +{ + padding-top: 0.4em; + padding-left: 1.3em; + z-index: 21; +} + +/* workaround for CSS implementation problem relating */ +/* to anchor positions inside an inner division block */ +/* Problem: anchors will be positioned by top of body */ +/* Solution: anchors must be moved below all top bars */ +.linktarget +{ + display: block; /* anchor must be drawn as block element */ + top: 0px; /* = sum of top and padding-top must be */ + padding-top: 90px; /* ...exact sum of heights of top bars */ + border-bottom-style: none; +} + +a +{ + border-bottom-style: dotted; + border-bottom-width: 1px; +} + +p +{ + text-align: left; +} + +div.leftmenu +{ + margin-left: 0px; + margin-bottom: 10px; + margin-right: 0px; + margin-top: 0px; +} + +.headbox, a.leftmenu +{ + display: block; + padding-left: 5px; + padding-bottom: 2px; + padding-right: 5px; + padding-top: 2px; + border-style: solid; + border-width: 1px; + text-align: left; +} + +a.leftmenu +{ + border-top-width: 0; +} + +.announcement +{ + text-align: center; +} + +div.announcement +{ + margin-bottom: 5px; + padding-left: 0px; + padding-bottom: 10px; + padding-right: 0px; + padding-top: 0px; + border-left-style: none; + border-bottom-style: dashed; + border-right-style: none; + border-top-style: dashed; + border-width: thin; +} + +ul +{ + text-align: left; +} + +div.chapter +{ + margin-top: 30px; +} + +div.box +{ + padding: 2px; + border-style: solid; + border-width: thin; + margin-top: 20px; + margin-bottom: 20px; +} + +h4 +{ + margin-bottom: 10px; +} + +.line +{ + display: block; +} + +li +{ + padding-bottom: 10px; +} + +input +{ + margin-top: 5px; + margin-bottom: 5px; +} + +table.db +{ + border-spacing: 0.05em; + empty-cells: show; +} + +tr.dbhead +{ + height: 3em; + border-spacing: 0.05em; +} + +td.db +{ + padding: 0.2em; + border-left-style: dotted; + border-bottom-style: none; + border-right-style: dotted; + border-top-style: none; + border-width: thin; + vertical-align: top; +} + +input.db, textarea.db, select.db +{ + width: 99%; + margin-bottom: 10px; +} + +select.dbdata +{ + width: 105px; + margin: 0px; +} + +textarea +{ + height: 50px; +} + +.big +{ + height: 100px; +} + +.verybig +{ + height: 200px; +} + diff --git a/css/site_colors.css b/css/site_colors.css new file mode 100644 index 0000000..4d15d3c --- /dev/null +++ b/css/site_colors.css @@ -0,0 +1,127 @@ +/* site_colors.css */ +/* this is for all styles regarding site colorization */ + +body +{ + color : #000000; + background-color: #2e526e; +} + +div#div_main +{ + background: transparent; +} + +div#div_content +{ + background-color: #d0e1f5; +} + +div.coverbar +{ + background-color: #2e526e; +} + +.textshadow.front +{ + color: #000000; +} + +.textshadow.back +{ + color: #7d9fc4; + background-color: #d0e1f5; +} + +.headbox +{ + background-color: #7d9fc4; + color: #ffffff; + border-color: #000000; +} + +.headbox a:hover +{ + color: #ffffff; +} + +h1.announcement, h2.announcement, h3.announcement, h4.announcement, h5.announcement, h6.announcement +{ + background-color: #7d9fc4; + color: #000000; +} + +a +{ + color: #000000; +} + +a.inactive +{ + color: #888888; +} + +a.leftmenu:link, a.leftmenu:visited +{ + background-color: #d0e1f5; + border-color: #000000; +} + +a.leftmenu:hover +{ + background-color: #98c2f0; + border-color: #000000; +} + +a:hover +{ + background-color: #98c2f0; +} + +a.linktarget:hover +{ + background-color: #d0e1f5; +} + +div.announcement +{ + border-color: #000000; +} + +div.box +{ + background: rgb(192,224,255); +} + +.warning +{ + background-color: #ff0000; + color: #000000; +} + +.confirmation +{ + background-color: #00aa00; + color: #000000; +} + +tr.dbhead +{ + background: #7d9fc4; + color: rgb(255,255,255); +} + +tr.db1 +{ + background: rgb(192,224,255); +} + +tr.db0 +{ + background: rgb(192,255,255); +} + +td.db +{ + border-color: #7d9fc4; +} diff --git a/css/site_fonts.css b/css/site_fonts.css new file mode 100644 index 0000000..873fd9e --- /dev/null +++ b/css/site_fonts.css @@ -0,0 +1,84 @@ +/* site_fonts.css */ +/* this is for all styles regarding font settings, except font colors */ + +body +{ + font-family: Arial, Helvetica, sans-serif; + font-weight: normal; +} + +h1, h2, h3, h4, h5, h6 +{ + font-family: "Trebuchet MS", Verdana, "Lucida Sans", Arial, Geneva, Helvetica, Helv, "Myriad Web", Syntax, sans-serif; +} + +h1, h2, h3, h4 +{ + font-weight: bold; +} + +h5, h6 +{ + font-weight: normal; +} + +a +{ + text-decoration: none; +} + +.headbox, a.leftmenu +{ + font-weight: bold; + text-decoration: none; + font-size: 80%; + font-family: Verdana, "Lucida Sans", Arial, Geneva, Helvetica, Helv, "Myriad Web", Syntax, sans-serif; +} + +p, ul, ol, td, span, div.chaptercontent +{ + font-size: 95%; +} + +p +{ + font-weight: normal; +} + +.announcement +{ + font-weight: bold; +} + +span.timestamp +{ + font-size: 80%; + font-family: Courier New, monospace; + border-right: solid; + border-width: 1px; + padding-right: 5px; + margin-right: 5px; +} + +.important +{ + font-weight: bold; + font-size: 90%; +} + +.topic +{ + font-style: italic; + display: block; +} + +.small +{ + font-size: 80%; +} + +tr.dbhead +{ + font-weight: bold; +} + diff --git a/css/site_others.css b/css/site_others.css new file mode 100644 index 0000000..4e3c525 --- /dev/null +++ b/css/site_others.css @@ -0,0 +1,8 @@ +/* site_others.css */ +/* this is a dump area for all styles which do not match any other category */ + +ul.w3c +{ + list-style: none; +} + diff --git a/danke.shtml b/danke.shtml new file mode 100644 index 0000000..b34e171 --- /dev/null +++ b/danke.shtml @@ -0,0 +1,28 @@ + + + + +Easterhegg 2005 - Anmeldung erfolgt + + + + + + + + +
    +

    Danke für Deine Anmeldung!

    +
    + +
    +

    +In den nächsten 1-2 Tagen erhälst du eine Anmeldebestätigung per Email. +

    +
    + + + + + + diff --git a/eh2005_website.tar b/eh2005_website.tar new file mode 100644 index 0000000..39b952c Binary files /dev/null and b/eh2005_website.tar differ diff --git a/eh2005_website.zip b/eh2005_website.zip new file mode 100644 index 0000000..9b677ec Binary files /dev/null and b/eh2005_website.zip differ diff --git a/eh_engel_tickets b/eh_engel_tickets new file mode 100644 index 0000000..209e3ef --- /dev/null +++ b/eh_engel_tickets @@ -0,0 +1 @@ +20 diff --git a/eh_tickets b/eh_tickets new file mode 100644 index 0000000..cb1a40d --- /dev/null +++ b/eh_tickets @@ -0,0 +1 @@ +250 diff --git a/fahrplan.shtml b/fahrplan.shtml new file mode 100644 index 0000000..448e5a4 --- /dev/null +++ b/fahrplan.shtml @@ -0,0 +1,1543 @@ + + + + +Easterhegg 2005 - Fahrplan + + + + + + + + + + + + + + + + + +
    +

    Fahrplan

    + Stand: 27.03.2005 18:50:59 +
    + + +
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    + Freitag
    + 25.3. +
    Aula (OG)Work1 (OG)Work2 (OG)Work4 (EG)Freifunk (OG)Funkamat. (OG)Cafe2 (EG)
    + 12:00 + + Eröffnungs- Veranstaltung (Hans, Nachtkind, Rainer, Sanifox) + + + + + + + + + + + + +
    + 13:00 + + Eröffnungs- Veranstaltung (Hans, Nachtkind, Rainer, Sanifox) + + + + + + + + + + + + +
    + 14:00 + + Die Hackerethik in der Postmoderne (Pylon) + + + + + + + + + + Amateurfunk (MiGri) + + +
    + 15:00 + + Die Hackerethik in der Postmoderne (Pylon) + + + + + + + + + + Amateurfunk (MiGri) + + +
    + 16:00 + + Die Hackerethik in der Postmoderne (Pylon) + + + + + + + + + + Amateurfunk (MiGri) + + +
    + 17:00 + + + + Open Source Hardware (hsank) + + + + + + + + Amateurfunk (MiGri) + + +
    + 18:00 + + + + Open Source Hardware (hsank) + + + + + + + + Amateurfunk (MiGri) + + +
    + 19:00 + + Projekt P + + + + Pentabarf Developer Meeting (Sven) + + + + + + Amateurfunk (MiGri) + + +
    + 20:00 + + Projekt P + + + + Pentabarf Developer Meeting (Sven) + + UNIX History (Aard) + + + + Amateurfunk (MiGri) + + +
    + 21:00 + + Projekt P + + + + Pentabarf Developer Meeting (Sven) + + UNIX History (Aard) + + + + Amateurfunk (MiGri) + + +
    +
    + +
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    + Samstag
    + 26.3. +
    Aula (OG)Work1 (OG)Work2 (OG)Work4 (EG)Freifunk (OG)Funkamat. (OG)Cafe2 (EG)
    + 11:00 + + Rootkits - Wenn die Kids zugeschlagen haben (marco) + + + + First Aid for Nerds (sanifox) + + + + + + Amateurfunk (MiGri) + + +
    + 12:00 + + Rootkits - Wenn die Kids zugeschlagen haben (marco) + + + + Bagatellverletzungen (wuerfel) + + + + Mobile IP mit OLSR und TINC (packbart) + + Amateurfunk (MiGri) + + +
    + 13:00 + + Rootkits - Wenn die Kids zugeschlagen haben (marco) + + + + Bagatellverletzungen (wuerfel) + + + + Mobile IP mit OLSR und TINC (packbart) + + Amateurfunk (MiGri) + + +
    + 14:00 + + www.ccc.de rebuild (Pylon) + + Verschlüsselte (Root-)Dateisysteme (mcfly, no_maam) + + Holographie (HoloClaus) + + + + + + Amateurfunk (MiGri) + + +
    + 15:00 + + www.ccc.de rebuild (Pylon) + + Verschlüsselte (Root-)Dateisysteme (mcfly, no_maam) + + Holographie (HoloClaus) + + Z-Shell - Die Supershell (Julius Plenz, Matthias Kopfermann) + + + + Amateurfunk (MiGri) + + +
    + 16:00 + + www.ccc.de rebuild (Pylon) + + Verschlüsselte (Root-)Dateisysteme (mcfly, no_maam) + + Holographie (HoloClaus) + + Z-Shell - Die Supershell (Julius Plenz, Matthias Kopfermann) + + openwrt buildroot fuer Anfaenger (alxhh, teefour) + + Amateurfunk (MiGri) + + Versammlung DARC OV D23 (MiGri) +
    + 17:00 + + Externe Mailanfragestruktur des CCC umbauen (Pylon) + + Biometrie (starbug) + + + + Z-Shell - Die Supershell (Julius Plenz, Matthias Kopfermann) + + openwrt buildroot fuer Anfaenger (alxhh, teefour) + + Amateurfunk (MiGri) + + Versammlung DARC OV D23 (MiGri) +
    + 18:00 + + Externe Mailanfragestruktur des CCC umbauen (Pylon) + + Biometrie (starbug) + + + + + + openwrt buildroot fuer Anfaenger (alxhh, teefour) + + Amateurfunk (MiGri) + + Versammlung DARC OV D23 (MiGri) +
    + 19:00 + + CCC Regiotreff (Pylon + Erfa-Kreise) + + Biometrie (starbug) + + + + + + openwrt buildroot fuer Anfaenger (alxhh, teefour) + + Amateurfunk (MiGri) + + Versammlung DARC OV D23 (MiGri) +
    + 20:00 + + CCC Regiotreff (Pylon + Erfa-Kreise) + + + + + + + + openwrt buildroot fuer Anfaenger (alxhh, teefour) + + Amateurfunk (MiGri) + + Versammlung DARC OV D23 (MiGri) +
    + 21:00 + + CCC Regiotreff (Pylon + Erfa-Kreise) + + + + + + + + openwrt buildroot fuer Anfaenger (alxhh, teefour) + + Amateurfunk (MiGri) + + Versammlung DARC OV D23 (MiGri) +
    +
    + +
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    + Sonntag
    + 27.3. +
    Aula (OG)Work1 (OG)Work2 (OG)Work4 (EG)Freifunk (OG)Funkamat. (OG)Cafe2 (EG)
    + 11:00 + + Verschlüsselte (Root-)Dateisysteme (mcfly, no_maam) + + + + Bagatellverletzungen (wuerfel) + + Ethernet Switching (Falk) + + + + Amateurfunk (MiGri) + + +
    + 12:00 + + Verschlüsselte (Root-)Dateisysteme (mcfly, no_maam) + + + + Bagatellverletzungen (wuerfel) + + Ethernet Switching (Falk) + + + + Amateurfunk (MiGri) + + +
    + 13:00 + + Verschlüsselte (Root-)Dateisysteme (mcfly, no_maam) + + + + Bagatellverletzungen (wuerfel) + + Ethernet Switching (Falk) + + + + Amateurfunk (MiGri) + + +
    + 14:00 + + Presseworkshop (padeluun, Pylon (to be continued)) + + + + ProzessorDesign (alios) + + Ethernet Switching (Falk) + + + + Amateurfunk (MiGri) + + +
    + 15:00 + + Presseworkshop (padeluun, Pylon (to be continued)) + + IPv6 (Aard) + + ProzessorDesign (alios) + + Finden und Kartografieren von Access Points/Wardriving (ole) + + + + Amateurfunk (MiGri) + + +
    + 16:00 + + Presseworkshop (padeluun, Pylon (to be continued)) + + IPv6 (Aard) + + + + Finden und Kartografieren von Access Points/Wardriving (ole) + + Serielle Schnittstellen am WLAN-Router (Stephanie) + + Amateurfunk (MiGri) + + +
    + 17:00 + + Presseworkshop (padeluun, Pylon (to be continued)) + + IPv6 (Aard) + + + + Finden und Kartografieren von Access Points/Wardriving (ole) + + Serielle Schnittstellen am WLAN-Router (Stephanie) + + Amateurfunk (MiGri) + + +
    + 18:00 + + + + IPv6 (Aard) + + Gentoo - catalyst (Pylon) + + offene Telefonie (Falk, vt100, Friedo) + + Serielle Schnittstellen am WLAN-Router (Stephanie) + + Amateurfunk (MiGri) + + +
    + 19:00 + + + + + + Gentoo - catalyst (Pylon) + + offene Telefonie (Falk, vt100, Friedo) + + + + Amateurfunk (MiGri) + + +
    + 20:00 + + PGP Keysigning Party + + PGP Keysigning Party + + Gentoo - catalyst (Pylon) + + offene Telefonie (Falk, vt100, Friedo) + + + + Amateurfunk (MiGri) + + +
    + 21:00 + + PGP Keysigning Party + + PGP Keysigning Party + + + + offene Telefonie (Falk, vt100, Friedo) + + + + Amateurfunk (MiGri) + + +
    +
    + +
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    + Montag
    + 28.3. +
    Aula (OG)Work1 (OG)Work2 (OG)Work4 (EG)Freifunk (OG)Funkamat. (OG)Cafe2 (EG)
    + 11:00 + + Subjekt, Körper und Medienethik der Netzkultur (Thomas Barth, Sören Ingwersen) + + + + SPL und WebSPL - Yet another programming paradigm (Clifford Wolf) + + Erstellung und Mastering der Chaos-DVDs (Pylon) + + + + Amateurfunk (MiGri) + + +
    + 12:00 + + Subjekt, Körper und Medienethik der Netzkultur (Thomas Barth, Sören Ingwersen) + + GPS - Grundlagen und Geocaching (Momo) + + SPL und WebSPL - Yet another programming paradigm (Clifford Wolf) + + Erstellung und Mastering der Chaos-DVDs (Pylon) + + + + Amateurfunk (MiGri) + + +
    + 13:00 + + Subjekt, Körper und Medienethik der Netzkultur (Thomas Barth, Sören Ingwersen) + + Diet-Linux (Aard) + + SPL und WebSPL - Yet another programming paradigm (Clifford Wolf) + + + + + + Amateurfunk (MiGri) + + +
    + 14:00 + + + + Diet-Linux (Aard) + + + + + + + + Amateurfunk (MiGri) + + +
    + 15:00 + + Abschluss- Veranstaltung (Hans, Nachtkind, Rainer, Sanifox) + + + + + + + + + + + + +
    + 16:00 + + Abschluss- Veranstaltung (Hans, Nachtkind, Rainer, Sanifox) + + + + + + + + + + + + +
    + 17:00 + + Abschluss- Veranstaltung (Hans, Nachtkind, Rainer, Sanifox) + + + + + + + + + + + + +
    +
    + +
    +

    feste Einrichtungen

    +

    + Projektleitung: + NOC (OG), POC (OG) +

    +

    + CERT (Rot-Kreuz): + Flur (OG) +

    +

    + CAcert: + Work3 (OG), bei den Funkamateuren +

    +

    + Freifunker: + Werkstatt (OG), hinter Work3 +

    +

    + Fest- und Flüssignahrung: + Cafe, vorderer Teil (EG) +

    +
    + + + + + + + diff --git a/faq.shtml b/faq.shtml new file mode 100644 index 0000000..e5cabdd --- /dev/null +++ b/faq.shtml @@ -0,0 +1,189 @@ + + + + +Easterhegg 2005 - FAQ + + + + + + + + +
    +

    FAQ

    +
    + +
    +

    Worum geht es?

    +

    +Siehe die Zusammenfassung im About und die Beschreibungen zu den Workshops. +Grundsätzlich ist das Easterhegg stark vom Gemeinsam-Tun geprägt, weniger von Vorträgen. +

    +
    + +
    +

    Wann und wo?

    +

    +Wie jedes Jahr findet das Easterhegg 2005 von Karfreitag bis Ostermontag statt. +Und wie jedes zweite Jahr im Eidelstedter Bürgerhaus (Alte Elbgaustr. 12) in Hamburg. +

    +
    + +
    +

    Wie kommt man dort hin?

    + +
      +
    • +per Beam-Technology: +GPS: N53 36.411 E9 54.095 (hdddd´mm.mm /wgs84) +
    • + +
    • +per Autopilot / Navigationsgerät: +Ziel: Hamburg - Ekenknick +
    • + +
    • +per Bahn und Bus: +Von einem der vier Fernbahnhöfe (Hbf., Altona, Dammtor, Harburg) aus mit der S-Bahn S3 (Richtung Pinneberg) oder S21 (Richtung Elbgaustraße) bis Haltestelle Elbgaustraße. +Von dort aus weiter entweder zu Fuß (ca. 10 Minuten) entlang der Elbgaustraße Richtung Norden +oder mit den Bussen 21 (Richtung U Niendorf Nord) oder 284 (Richtung IKEA Schnelsen) bis Haltestelle Eidelstedter Platz. +
    • + +
    • +per Auto: +Die Autobahn A23 an der Ausfahrt Eidelstedt verlassen +und auf der Holsteiner Chaussee etwa 1 km Richtung Innenstadt bis zum großen Busbahnhof fahren. +Am Busbahnhof dann einen Parkplatz suchen und zum Bürgerhaus durchschlagen. +Achtung: Anwohnerparkzonen. Das Parkhaus macht zu unklaren Zeiten zu, evtl. Aushang beachten wg. Feiertagen. +
    • + +
    • +per Post: +Eidelstedter Bürgerhaus +Alte Elbgaustraße 12 +22523 Hamburg, Germany +
    • + +
    • +per Heart of Gold: + +Die Veranstaltung findet im Virgo-Galaxiencluster statt. +Dort, etwas am Rande, befindet sich die Galaxienwolke Canes-Venatici. +Hier bitte ein wenig Geschwindigkeit wegnehmen, da die Ziel-Galaxiengruppe leicht übersehbar ist. +Außer dem Andromeda-Nebel und der Milchstraße gibt es darin nunmal leider nur noch +ein paar vergleichsweise eher unbedeutende Galaxienhäufchen. + + +In der Milchstraße bitte in den Orion-Spiralarm abbiegen. +Anschließend auf das im äußeren Arm befindliche System Sol zuhalten und dort am besten irgendwo +in der Umlaufbahn um den kleinen blauen Planeten mit den lustigen Zweibeinern und den vielen Insekten (dritter von Sol) einparken. + + +Von dort aus kann man sich problemlos in die relativ gut ausgebaute SkyDSL-Architektur einklinken und +per Datentransfer mittels TCP/IP-SMTP-Protokoll an mail(at)hamburg.ccc.de persönliches Zielgeleit zur Veranstaltung anfordern. + + +p.s. Wer an Alpha Centauri vorbeikommt, möge bitte freundlichst im dortigen Bauplanungsamt nachfragen, +ob der Einspruch gegen die geplante Errichtung der Hyperraum-Umgehung eingetroffen ist. Die Zeit drängt. Vielen Dank. :-) + +
    • +
    + +
    + +
    +

    Kann ich meinen Computer mitbringen?

    +

    +Notebooks immer sehr gern. Wir haben überall Funkvernetzung nach IEEE 802.11b (11 MBit), +(sowie begrenzt 22 MBit), auch WaveLAN/IEEE genannt. +Zu manchen Workshops ist es durchaus vorteilhaft, einen eigenen Rechner dabei zu haben. +

    +
    + +
    +

    Kann man PCMCIA-Funknetzadapter ausleihen?

    +

    +Leider können wir einen solchen Service nicht anbieten. +

    +
    + +
    +

    Gibt es ein Hackcenter?

    +

    +Nein, das ist nicht vorgesehen! Einige Workshops werden sicher hackcenterartigen +Charakter annehmen, aber am Ende des Workshops muss Technik auch wieder abgebaut werden, +weil der Raum für den nächsten Workshop gebraucht wird. +

    +
    + +
    +

    Wo kann ich schlafen?

    +

    +Im Gebäude gibt es keine zum Schlafen vorgesehenen Bereiche. +Die Räume, in denen nachts keine Veranstaltungen stattfinden, müssen auf jeden Fall morgens +wieder zur Verfügung stehen, damit die Vorträge stattfinden können. +Wir bemühen uns auch kurzfristig um Vermittlung von Privatquartieren bei Hackern der Umgebung, +siehe Schlafplatzbörse. +Am sichersten ist es aber, wenn Du Dich selbst mit +Jugendherbergen, Hotels u.ä. in Verbindung setzt. +

    +Einige Übernachtungsmöglichkeiten: + +
    + +
    +

    Was kostet der Eintritt?

    +

    +Der Eintrittspreis hängt davon ab, ob Du Mitglied des CCC e.V. bist, Schüler, oder als Engel mitarbeitest. +Vom vollen Eintritt (50 Euro) für die gesamten vier Tage erhältst Du +täglich Frühstück (siehe weiter unten) sowie eine Easter(H)egg-Tasse. +Ermäßigung erhalten Mitglieder des CCC e.V. (35 Euro) sowie Schüler und Engel (jeweils 25 Euro). +Bisherige Ansage: +Tageskarten gibt es nicht. +Neuer Stand: +Aufgrund der hohen Nachfrage haben wir uns entschlossen, Tageskarten zum Preis von 15 Euro auszugeben. +Tageskarten gelten von 11 Uhr bis 22 Uhr und beinhalten im Gegensatz zu Dauerkarten nicht den Erwerb einer Easterhegg-Tasse, +welche aber trotzdem getrennt für 6 Euro erhältlich ist. +Wir behalten uns vor, bei Überfüllung des Bürgerhauses die Ausgabe von Tageskarten +vorübergehend einzustellen. +

    +
    + +
    +

    Gibt es etwas zu Essen?

    +

    +Ja. Wir stellen Brötchen und Belag (Käse, Wurst, Marmelade) im Cafe +ab morgens zur Verfügung. Auch Cornflakes, Müsli und etwas Obst sind vorgesehen. +Zu Planungszwecken bitten wir, die jeweils gewünschten Mengen bei der Anmeldung bereits grob abzuschätzen. +Ansonsten gibt es diverse kommerzielle Versorgungsmöglichkeiten +in direkter Nähe des Gebäudes. +

    +
    + +
    +

    Und Getränke?

    +

    +Tee und Kaffee gibt es kostenlos im Chaos-Cafe. +Kalte Getränke sind ebenfalls zu zivilen Preisen erhältlich. +Jeder Teilnehmer erhält außerdem eine Easterhegg-Tasse, +die ihn die ganze Veranstaltung hindurch begleitet (und darüber hinaus). +Wir empfehlen, Deinen Namen unten auf Deine Tasse zu schreiben. +Dadurch müssen wir nicht dauernd leere Tassen im Gebäude suchen. + +

    +
    + + + + + + diff --git a/favicon.ico b/favicon.ico new file mode 100644 index 0000000..437c6cf Binary files /dev/null and b/favicon.ico differ diff --git a/img/bionade.gif b/img/bionade.gif new file mode 100644 index 0000000..4a153a8 Binary files /dev/null and b/img/bionade.gif differ diff --git a/img/chaosknoten-150x108-ugly.gif b/img/chaosknoten-150x108-ugly.gif new file mode 100644 index 0000000..31978d1 Binary files /dev/null and b/img/chaosknoten-150x108-ugly.gif differ diff --git a/img/chaosknoten-150x108.gif b/img/chaosknoten-150x108.gif new file mode 100644 index 0000000..48a40bb Binary files /dev/null and b/img/chaosknoten-150x108.gif differ diff --git a/img/chaosknoten-150x108.png b/img/chaosknoten-150x108.png new file mode 100644 index 0000000..f9bc29f Binary files /dev/null and b/img/chaosknoten-150x108.png differ diff --git a/img/chaosknoten.gif b/img/chaosknoten.gif new file mode 100644 index 0000000..cd3531b Binary files /dev/null and b/img/chaosknoten.gif differ diff --git a/img/easterhegg2005.gif b/img/easterhegg2005.gif new file mode 100644 index 0000000..da5169b Binary files /dev/null and b/img/easterhegg2005.gif differ diff --git a/inc_db.php b/inc_db.php new file mode 100644 index 0000000..899ef77 --- /dev/null +++ b/inc_db.php @@ -0,0 +1,337 @@ + (re)open it + switch ( trim(constant("SERVER_DB_TYPE")) ) + { + case constant("DB_TYPE_POSTGRESQL"): + $intdbconnid = pg_connect ("host=" . trim(constant("SERVER_DB_HOST")) . " port=" . trim(strval(constant("SERVER_DB_PORT"))) . " dbname=" . trim(constant("SERVER_DB_NAME")) . " user=" . trim(constant("SERVER_DB_USER")) . " password=" . trim(constant("SERVER_DB_PASS"))); + $strdberror = pg_last_error( $intdbconnid ); + break; + + case constant("DB_TYPE_ODBC"): + $intdbconnid = odbc_connect ( trim(constant("SERVER_DB_NAME")), trim(constant("SERVER_DB_USER")), trim(constant("SERVER_DB_PASS")), SQL_CUR_USE_ODBC ); + $strdberror = odbc_errormsg( $intdbconnid ); + break; + + default: + // SERVER_DB_TYPE not supported! + $intdbconnid = 0; + $strdberror = 'Sorry, database of type "' . trim(constant("SERVER_DB_TYPE")) . '" is not supported.'; + break; + } + + // set return code on success + $bolretcode = ( $intdbconnid != 0 ); + } + + return $bolretcode; +} + +// ********************************************************************** +function db_unsetdb ( &$intdbconnid, &$strdberror ) +// checks/closes database connection +// updates parameter intdbconnid and strdberror +// returns true if database had already been closed or has been closed successfully, +// otherwise returns false and sets strdberror +{ + $bolretcode = true; + + if ( $intdbconnid != 0 ) + { + // database is still opened -> close it + switch ( constant("SERVER_DB_TYPE") ) + { + case constant("DB_TYPE_POSTGRESQL"): + $bolretcode = pg_close ( $intdbconnid ); + $strdberror = pg_last_error( $intdbconnid ); + break; + + case constant("DB_TYPE_ODBC"): + $bolretcode = odbc_close ( $intdbconnid ); + $strdberror = odbc_errormsg( $intdbconnid ); + break; + + default: + // SERVER_DB_TYPE not supported! + $bolretcode = false; + $strdberror = 'Sorry, database of type "' . constant("SERVER_DB_TYPE") . '" is not supported.'; + break; + } + + // clear database connection id on success + if ( $bolretcode ) + { + $intdbconnid = 0; + } + } + + return $bolretcode; +} + +// ********************************************************************** +function db_sql ( &$intdbconnid, $strdbsql, &$intdbresult, &$lngdbrows, &$strdberror ) +// executes SQL statement on given database connection +// updates parameter intdbconnid, intdbresult, lngdbrows and strdberror +// returns true and sets intdbresult and lngdbrows if SQL statement had been executed successfully, +// otherwise returns false and sets strdberror +{ + $bolretcode = false; + $intdbresult = 0; + $lngdbrows = 0; + $strdberror = ''; + + if ( db_setdb( $intdbconnid, $strdberror )) + { + // database is ok + + switch ( constant("SERVER_DB_TYPE") ) + { + case constant("DB_TYPE_POSTGRESQL"): + $intdbresult = pg_query ( $intdbconnid, $strdbsql ); + $strdberror = pg_last_error( $intdbconnid ); + if ( $intdbresult != 0 ) + { + $lngdbrows = pg_num_rows( $intdbresult ) + pg_affected_rows( $intdbresult ); + $bolretcode = true; + } + break; + + case constant("DB_TYPE_ODBC"): + $intdbresult = odbc_exec ( $intdbconnid, $strdbsql ); + $strdberror = odbc_errormsg( $intdbconnid ); + if ( $intdbresult != 0 ) + { + // Attention: odbc_num_rows may return wrong record count in SELECT-statements! + // to retrieve exact number of records in SELECT statements you should walk through the recordset + $lngdbrows = odbc_num_rows( $intdbresult ); + $bolretcode = true; + } + break; + + default: + // SERVER_DB_TYPE not supported! + $bolretcode = false; + $strdberror = 'Sorry, database of type "' . constant("SERVER_DB_TYPE") . '" is not supported.'; + break; + } + } + + return $bolretcode; +} + +// ********************************************************************** +function db_row ( $intdbresult, &$strdbrow, $intdbrow, &$strdberror ) +// fetches row on position intdbrow from intdbresult as associative array into strdbrow +// position intdbrow may be DB_RESULT_NEXTROW to fetch the next row of intdbresult +// updates parameter strdbrow, strdberror +// returns true and sets strdbrow if row has been fetched successfully, +// otherwise returns false and sets strdberror +{ + $bolretcode = false; + $strdbrow = ''; + $strdberror = ''; + + if ( $intdbresult != 0 ) + { + // resultset is ok + + switch ( constant("SERVER_DB_TYPE") ) + { + case constant("DB_TYPE_POSTGRESQL"): + switch ( $intdbrow ) + { + case constant("DB_ROW_FIRST"): + $bolretcode = ( $strdbrow = pg_fetch_assoc( $intdbresult, 0 )); + break; + + case constant("DB_ROW_NEXT"): + $bolretcode = ( $strdbrow = pg_fetch_assoc( $intdbresult )); + break; + + case constant("DB_ROW_LAST"): + $bolretcode = ( $strdbrow = pg_fetch_assoc( $intdbresult, pg_num_rows( $intdbresult ) - 1 )); + break; + + default: + // specific $intdbrow given -> use it directly, offer start at position 1 + $bolretcode = ( $strdbrow = pg_fetch_assoc( $intdbresult, $intdbrow - 1 )); + break; + } + $strdberror = pg_result_error( $intdbresult ); + break; + + case constant("DB_TYPE_ODBC"): + switch ( $intdbrow ) + { + case constant("DB_ROW_FIRST"): + $bolretcode = ( $strdbrow = odbc_fetch_array( $intdbresult, 0 )); + break; + + case constant("DB_ROW_NEXT"): + $bolretcode = ( $strdbrow = odbc_fetch_array( $intdbresult )); + break; + + case constant("DB_ROW_LAST"): + // Attention: odbc_num_rows may return wrong record count in SELECT-statements! + // to retrieve exact number of records in SELECT statements you should walk through the recordset + $bolretcode = ( $strdbrow = odbc_fetch_array( $intdbresult, odbc_num_rows( $intdbresult ) - 1 )); + break; + + default: + // specific $intdbrow given -> use it directly, offer start at position 1 + $bolretcode = ( $strdbrow = odbc_fetch_array( $intdbresult, $intdbrow - 1)); + break; + } + // ODBC does not support error messages on resultset level + if ( !$bolretcode ) + { + $strdberror = 'Sorry, could not read result row on position ' . $intdbrow ; + } + break; + + default: + // SERVER_DB_TYPE not supported! + $bolretcode = false; + $strdberror = 'Sorry, database of type "' . constant("SERVER_DB_TYPE") . '" is not supported.'; + break; + } + } + else + { + $bolretcode = false; + $strdberror = 'Sorry, no data available to read.'; + } + + return $bolretcode; +} + + +// ********************************************************************** +function db_fields ( $intdbresult, &$strdbfields, &$strdberror ) +// returns list of field names, field type and field length from intdbresult as associative arrays into strdbfields +// strdbfields will contain following partial arrays: DB_FIELD_NAME, DB_FIELD_TYPE, DB_FIELD_LEN +// use as following: $strdbfields[constant("DB_FIELD_*")][$intdbfield or $strdbfieldname] +// example: $intdbfieldtype[$strdbfieldname] = $strdbfields[constant("DB_FIELD_TYPE")][$strdbfieldname] +// updates parameter strdbfields, strdberror +// returns true and sets strdbfields if field names have been retrieved successfully, +// otherwise returns false and sets strdberror +{ + $bolretcode = false; + $strdbfields = array (constant("DB_FIELD_NAME") => array(), + constant("DB_FIELD_TYPE") => array(), + constant("DB_FIELD_LEN") => array()); + $strdberror = ''; + $intindex = 0; + + if ( $intdbresult != 0 ) + { + // resultset is ok + + //no errors expected at all + $bolretcode = true; + + switch ( constant("SERVER_DB_TYPE") ) + { + case constant("DB_TYPE_POSTGRESQL"): + // field numeration in PostgreSQL starts with 0 + $intindex = 0; + while ( $intindex < pg_num_fields( $intdbresult )) + { + array_push ( $strdbfields[constant("DB_FIELD_NAME")], pg_field_name( $intdbresult, $intindex )); + array_push ( $strdbfields[constant("DB_FIELD_TYPE")], pg_field_type( $intdbresult, $intindex )); + array_push ( $strdbfields[constant("DB_FIELD_LEN")], pg_field_prtlen( $intdbresult, $intindex )); + $intindex++; + } + $strdberror = pg_result_error( $intdbresult ); + break; + + case constant("DB_TYPE_ODBC"): + // field numeration in ODBC starts with 1 + $intindex = 1; + while ( $intindex <= odbc_num_fields( $intdbresult )) + { + $strfieldname = odbc_field_name( $intdbresult, $intindex ); + array_push ( $strdbfields[constant("DB_FIELD_NAME")], $strfieldname ); + array_push ( $strdbfields[constant("DB_FIELD_TYPE")], odbc_field_type( $intdbresult, $intindex )); + array_push ( $strdbfields[constant("DB_FIELD_LEN")], odbc_field_len( $intdbresult, $intindex )); + $intindex++; + } + // ODBC does not support error messages on resultset level + if ( !$bolretcode ) + { + $strdberror = 'Sorry, could not read field names.'; + } + break; + + default: + // SERVER_DB_TYPE not supported! + $bolretcode = false; + $strdberror = 'Sorry, database of type "' . constant("SERVER_DB_TYPE") . '" is not supported.'; + break; + } + } + else + { + $bolretcode = false; + $strdberror = 'Sorry, no data available to read.'; + } + + return $bolretcode; +} + +?> diff --git a/index.shtml b/index.shtml new file mode 100644 index 0000000..7c99c86 --- /dev/null +++ b/index.shtml @@ -0,0 +1,208 @@ + + + + +Easterhegg 2005 + + + + + + + +
    +

    Easterhegg 2005 - The workshop weekend

    +Fr, 25.03.2005 - Mo, 28.03.2005 in Hamburg, im Eidelstedter Bürgerhaus +
    + + + + + [%announcement%] + +
    +

    EH2007

    +

    + 31.12.2006 + Die arbeiten beginnen +

    +
    + + +
    +

    Rechte und Links

    +

    + 19.04.2005 + Form und Inhalt dieser Website unterliegen vollständig der GNU General Public License.
    + Ab sofort ist diese Website als Tarball und ZIP-Archiv zur freien Verwendung verfügbar.
    + Die Archive beinhalten den vollständigen Source (PHP 4.x+) inklusive des Orga-Teils und die Datenbank (PostgreSQL 8.x+), nicht jedoch das cgi-Anmeldeskript und natürlich auch nicht das Wiki.
    + Selbstverständlich ist die im Source referenzierte Datenbank und alle sonstigen manipulativen Funktionen auf der Produktiv-Maschine bereits deaktiviert. ;-)
    + Habt Spaß! :-)
    +

    +
    + +
    +

    Danke

    +

    + 29.03.2005 + Wir danken allen Teilnehmern und Unterstützern für einen tollen und entspannten Easterhegg 2005 und freuen uns auf ein Wiedersehen vom 14.04. bis 17.04.2006 in Wien. :-)
    +

    +
    + + +
    +

    Überwachung muss nicht kompliziert sein - jeder kann mitmachen, es ist garnicht so schwer :-/

    +

    + 28.03.2005 + Auf der von einem Pariser eingerichteten Website EuroBillTracker.com mit angeschlossener Datenbank kann jeder seine eigenen Banknoten erfassen. Daraus entstehen dann Tracking-Daten der Banknoten und ganz nebenbei - natürlich völlig unbeabsichtigt - auch ein Finanz- und Kauf-Profil der Teilnehmer.
    +Damit der ganze Erfassungsaufwand für die Teilnehmer nicht ohne Gegenleistung bleibt, verspricht die Website in der FAQ, dass es ja Spaß macht. Nur das Brot zu den Spielen muss man eben selbst mitbringen.
    +"...bitte jeder nur ein Kreuz..." *seufz* +

    +
    + + +
    +

    Workshop-Update

    +

    + 27.03.2005 + Am Montag um 12 Uhr hält Momo einen neuen Workshop zum Thema GPS-Grundlagen. +

    +
    + + +
    +

    Sommerzeit-Workshop

    +

    +26.03.2005 +Heute um 2.00 Uhr hält Hans seinen Sommerzeit-Workshop im Maschinenraum. +

    +
    + +
    +

    Update der Workshopinhalte

    +

    +26.03.2005 +Die Inhalte und Beschreibungen der Workshops sind jetzt auf dem aktuellen Stand des Wikis.
    +Außerdem sind die einzelnen Workshops auf der Workshop-Seite nun - endlich ;-) - per Direktlink aus dem Fahrplan heraus erreichbar.
    +Zur direkten und unkomplizierten Workshop-Planung kann und soll weiterhin der Workshop-Bereich des öffentlichen Wikis genutzt werden. Die dortigen (nichttrivialen) Änderungen werden dann regelmäßig in die Easterhegg-Website übernommen. +

    +
    + +
    +

    Workshop-Update

    +

    +26.03.2005 +Der verlegte Workshop "Verschlüsselte Root-Dateisysteme" wird heute (Samstag) zwischen 14 und 17 Uhr im Workshopraum 1 stattfinden. +

    +
    + +
    +

    Workshop-Update

    +

    +25.03.2005 +Leider mussten kurzfristig beide Workshops am Freitag um 17 Uhr abgesagt werden.
    +Der Workshop "Verschlüsselte Root-Dateisysteme" wird verlegt auf einen anderen Tag. Dies wird dann hier bekanntgegeben.
    +Stattdessen wird es jetzt ab 17:00 Uhr einen Workshop "Open Source Hardware" geben, der von hsank geleitet wird.
    +Dabei geht es um die Notwendigkeit von Open Source Hardware, wenn man Open Source Software einsetzen möchte. +

    +
    + +
    +

    Nachfrage nach Tageskarten

    +

    +24.03.2005 +Aufgrund der hohen Nachfrage haben wir uns entschlossen, Tageskarten zum Preis von 15 Euro auszugeben.
    +Tageskarten gelten von 11 Uhr bis 22 Uhr und beinhalten im Gegensatz zu Dauerkarten nicht den Erwerb einer Easterhegg-Tasse, +welche aber trotzdem getrennt für 6 Euro erhältlich ist.
    +Wir behalten uns vor, bei Überfüllung des Bürgerhauses die Ausgabe von Tageskarten +vorübergehend einzustellen. +

    +
    + +
    +

    Fahrplan-Update

    +

    +23.03.2005 +Es gab noch ein paar Änderungen im Fahrplan, die neben anderen Punkten allesamt das vorrangige Ziel hatten, +die großen, teilnehmerintensiven Workshops so zu legen, dass sie sich so wenig wie möglich gegenseitig behindern.
    +Im Falle von dringenden Änderungswünschen oder übersehenen Kollisionen bitte einen kurzen Hinweis an easterhegg2005(at)hamburg.ccc.de richten.
    +Selbstverständlich können auf Anfrage auch weiterhin noch neue Workshops im Rahmen der Möglichkeiten integriert werden. +

    +
    + +
    +

    Nochmal Anmeldebestätigungen versandt

    +

    +23.03.2005 +Die in den letzten Tagen noch eingegangenen Anmeldungen wurden soeben per Email bestätigt.
    +Auch diesmal kamen ein paar Mails als "unzustellbar" zurück.
    +Falls jetzt also noch jemand aus irgendwelchen Gründen Bedenken hat, +ob seine Anmeldung ausreichend zur Kenntnis genommen wurde, +bitte eine kurze Mail an easterhegg(at)hamburg.ccc.de.
    +Alles wird gut. ;-) +

    +
    + +
    +

    Fahrplan online

    +

    +22.03.2005 +Der vorläufige Fahrplan ist online.
    +Vorläufig heißt, dass kleinere Änderungen noch möglich sind, um gewichtige Kollisionen zu vermeiden.
    +Im Falle von dringenden Änderungswünschen (zeitliche oder räumliche Verschiebungen oder gar Absagen) diese bitte an easterhegg2005(at)hamburg.ccc.de richten.
    +Selbstverständlich können auf Anfrage auch weiterhin noch neue Workshops im Rahmen der Möglichkeiten integriert werden. +

    +
    + +
    +

    Restliche Anmeldebestätigungen versandt

    +

    +18.03.2005 +Die noch ausstehenden Anmeldebestätigungen sind per Email versandt.
    +Auch wenn es einige Fälle von kaputten bzw. unvollständigen Emailadressen gab, wurden die Anmeldungen trotzdem akzeptiert.
    +Grundsätzlich gilt: Wer direkt nach der Anmeldung diese Seite gesehen hat, ist auch garantiert angemeldet.
    +

    +
    + +
    +

    HackBus aus Berlin zum EasterHegg

    +

    +17.03.2005 +Sven schreibt: an alle hacker und haecksen in berlin und umgebung...
    +ich wuerde hier in berlin immer noch einen bus mieten, wenn +sich bis naechsten montag noch genuegend leute bei mir melden.
    +plan: hinfahrt am donnerstag nachmittag - und rueckfahrt am montag nachmittag.
    +Weitere Infos unter https://wiki.hamburg.ccc.de/index.php/Anreisen#Bus_Berlin_.3C.3D.3E_Hamburg +

    +
    + +
    +

    Anmeldung aktiv

    +

    +07.03.2005 +Die offizielle Anmeldeseite ist scharf geschaltet. +Bitte beachten, dass nur begrenzt Plätze zur Verfügung stehen. +

    +
    + +
    +

    Chaoscalendar

    +

    +07.02.2005 +Das Easterhegg 2005 taucht im Chaoscalendar auf, welcher auch im PDA-freundlichen ICS-Format verfügbar ist. +

    +
    + + + + + + diff --git a/kontakt.shtml b/kontakt.shtml new file mode 100644 index 0000000..320b1d6 --- /dev/null +++ b/kontakt.shtml @@ -0,0 +1,46 @@ + + + + +Easterhegg 2005 - Kontakt / Impressum + + + + + + + + +
    +

    Kontakt / Impressum

    +

    +Verantwortlich für diese Seiten im Sinne des Teledienstegesetzes ist der Chaos Computer Club Hamburg. +

    +

    +Chaos Computer Club Hamburg +Lokstedter Weg 72 +20251 Hamburg +

    +

    +erreichbar: +per Mail an mail(at)hamburg.ccc.de +telefonisch unter +49(0)40/ 401 801 -0 (dienstags ab 19 Uhr) +

    +
    + +
    +

    Die Organisatoren des Easterhegg 2005

    +

    +...sind direkt erreichbar per Mail an easterhegg2005(at)hamburg.ccc.de +

    +

    +Dies ist gleichzeitig eine quasi-öffentliche Mailingliste.
    +Nähere Infos und Subscribe-Möglichkeit unter: Easterhegg 2005 Mailingliste +

    +
    + + + + + + diff --git a/noc/README.html b/noc/README.html new file mode 100644 index 0000000..474fbf9 --- /dev/null +++ b/noc/README.html @@ -0,0 +1,13 @@ +
    +
    +Config-Daten vom Easterhegg 2005 Router
    +
    +Router:
    +- Debian/Unstable
    +- Kleine Fujitsu/Siemens Box mit P4, 512mb RAM, 1xE100, 1xE1000 Interfaces
    +- Uplink: Hansenet 5mbit down/500kbit up Leitung per PPPOE
    +- Rechner/Router Anbindung: 2 100mbit Etherchannel Ports mit diversen VLANs
    +  an einem Cisco 2948G, und dahinter als Raum-Satellites diverse Cisco
    +  2950/2900
    +- VLANs: Uplink, Management, Kabelnetz, WLAN, Freifunker, Funker+Printer
    +
    diff --git a/noc/configs-all.tar.gz b/noc/configs-all.tar.gz new file mode 100644 index 0000000..dd38cd7 Binary files /dev/null and b/noc/configs-all.tar.gz differ diff --git a/noc/configs/dhcp3/dhcpd.conf b/noc/configs/dhcp3/dhcpd.conf new file mode 100644 index 0000000..880fa51 --- /dev/null +++ b/noc/configs/dhcp3/dhcpd.conf @@ -0,0 +1,51 @@ +# +# +#ddns-update-style none; +ddns-update-style interim; +ddns-domainname "easterhegg.de"; +authoritative; + +# option definitions common to all supported networks... +option domain-name "easterhegg.de"; +option domain-name-servers 172.16.0.1; +min-lease-time 3600; +default-lease-time 7200; +max-lease-time 14400; +ping-check true; +update-optimization false; + +#subnet 204.254.239.0 netmask 255.255.255.224 { +# range 204.254.239.10 204.254.239.20; +# option broadcast-address 204.254.239.31; +# option routers prelude.fugue.com; +#} + +# Kabel +subnet 172.16.0.0 netmask 255.255.252.0 { + range 172.16.2.2 172.16.2.254; + range 172.16.3.2 172.16.3.254; + option broadcast-address 172.16.3.255; + option routers 172.16.0.1; +} + +# WLAN +subnet 172.16.4.0 netmask 255.255.252.0 { + range 172.16.6.2 172.16.6.254; + range 172.16.7.2 172.16.7.254; + option broadcast-address 172.16.7.255; + option routers 172.16.4.1; +} + +# NOC +subnet 172.16.42.0 netmask 255.255.255.0 { + range 172.16.42.128 172.16.42.254; + option broadcast-address 172.16.42.255; + option routers 172.16.42.1; +} + +# AFU-Druck +subnet 172.16.25.0 netmask 255.255.255.0 { + range 172.16.25.2 172.16.25.199; + option broadcast-address 172.16.25.255; + option routers 172.16.25.1; +} diff --git a/noc/configs/dhcp3/dhcpd.conf.dpkg-dist b/noc/configs/dhcp3/dhcpd.conf.dpkg-dist new file mode 100644 index 0000000..0001c0f --- /dev/null +++ b/noc/configs/dhcp3/dhcpd.conf.dpkg-dist @@ -0,0 +1,108 @@ +# +# Sample configuration file for ISC dhcpd for Debian +# +# $Id: dhcpd.conf,v 1.1.1.1 2002/05/21 00:07:44 peloy Exp $ +# + +# The ddns-updates-style parameter controls whether or not the server will +# attempt to do a DNS update when a lease is confirmed. We default to the +# behavior of the version 2 packages ('none', since DHCP v2 didn't +# have support for DDNS.) +ddns-update-style none; + +# option definitions common to all supported networks... +option domain-name "example.org"; +option domain-name-servers ns1.example.org, ns2.example.org; + +default-lease-time 600; +max-lease-time 7200; + +# If this DHCP server is the official DHCP server for the local +# network, the authoritative directive should be uncommented. +#authoritative; + +# Use this to send dhcp log messages to a different log file (you also +# have to hack syslog.conf to complete the redirection). +log-facility local7; + +# No service will be given on this subnet, but declaring it helps the +# DHCP server to understand the network topology. + +#subnet 10.152.187.0 netmask 255.255.255.0 { +#} + +# This is a very basic subnet declaration. + +#subnet 10.254.239.0 netmask 255.255.255.224 { +# range 10.254.239.10 10.254.239.20; +# option routers rtr-239-0-1.example.org, rtr-239-0-2.example.org; +#} + +# This declaration allows BOOTP clients to get dynamic addresses, +# which we don't really recommend. + +#subnet 10.254.239.32 netmask 255.255.255.224 { +# range dynamic-bootp 10.254.239.40 10.254.239.60; +# option broadcast-address 10.254.239.31; +# option routers rtr-239-32-1.example.org; +#} + +# A slightly different configuration for an internal subnet. +#subnet 10.5.5.0 netmask 255.255.255.224 { +# range 10.5.5.26 10.5.5.30; +# option domain-name-servers ns1.internal.example.org; +# option domain-name "internal.example.org"; +# option routers 10.5.5.1; +# option broadcast-address 10.5.5.31; +# default-lease-time 600; +# max-lease-time 7200; +#} + +# Hosts which require special configuration options can be listed in +# host statements. If no address is specified, the address will be +# allocated dynamically (if possible), but the host-specific information +# will still come from the host declaration. + +#host passacaglia { +# hardware ethernet 0:0:c0:5d:bd:95; +# filename "vmunix.passacaglia"; +# server-name "toccata.fugue.com"; +#} + +# Fixed IP addresses can also be specified for hosts. These addresses +# should not also be listed as being available for dynamic assignment. +# Hosts for which fixed IP addresses have been specified can boot using +# BOOTP or DHCP. Hosts for which no fixed address is specified can only +# be booted with DHCP, unless there is an address range on the subnet +# to which a BOOTP client is connected which has the dynamic-bootp flag +# set. +#host fantasia { +# hardware ethernet 08:00:07:26:c0:a5; +# fixed-address fantasia.fugue.com; +#} + +# You can declare a class of clients and then do address allocation +# based on that. The example below shows a case where all clients +# in a certain class get addresses on the 10.17.224/24 subnet, and all +# other clients get addresses on the 10.0.29/24 subnet. + +#class "foo" { +# match if substring (option vendor-class-identifier, 0, 4) = "SUNW"; +#} + +#shared-network 224-29 { +# subnet 10.17.224.0 netmask 255.255.255.0 { +# option routers rtr-224.example.org; +# } +# subnet 10.0.29.0 netmask 255.255.255.0 { +# option routers rtr-29.example.org; +# } +# pool { +# allow members of "foo"; +# range 10.17.224.10 10.17.224.250; +# } +# pool { +# deny members of "foo"; +# range 10.0.29.10 10.0.29.230; +# } +#} diff --git a/noc/configs/group b/noc/configs/group new file mode 100644 index 0000000..53103d5 --- /dev/null +++ b/noc/configs/group @@ -0,0 +1,45 @@ +root:x:0: +daemon:x:1: +bin:x:2: +sys:x:3: +adm:x:4: +tty:x:5: +disk:x:6: +lp:x:7:lp +mail:x:8: +news:x:9: +uucp:x:10: +proxy:x:13: +kmem:x:15: +dialout:x:20: +fax:x:21: +voice:x:22: +cdrom:x:24: +floppy:x:25: +tape:x:26: +sudo:x:27: +audio:x:29: +dip:x:30: +postgres:x:32: +www-data:x:33: +backup:x:34: +operator:x:37: +list:x:38: +irc:x:39: +src:x:40: +gnats:x:41: +shadow:x:42: +utmp:x:43: +video:x:44: +staff:x:50: +games:x:60: +users:x:100: +nogroup:x:65534: +man:*:12: +sasl:*:45: +plugdev:*:46: +crontab:x:101: +ssh:x:102: +noc:x:1000: +bind:x:1001: +ntp:x:103: diff --git a/noc/configs/init.d/bind b/noc/configs/init.d/bind new file mode 100755 index 0000000..71e642c --- /dev/null +++ b/noc/configs/init.d/bind @@ -0,0 +1,50 @@ +#!/bin/sh + +PATH=/sbin:/bin:/usr/sbin:/usr/bin + +test -x /usr/sbin/named || exit 0 + +case "$1" in + start) + echo -n "Starting domain name service: named" + ulimit -n 16384 + #/usr/sbin/named -4 -t /var/named -u bind + /usr/sbin/named -t /var/named -u bind -n 1 -c /etc/namedb/named.conf + #/usr/sbin/named -t /var/named -u bind -n 1 -c /etc/namedb/named.conf.bind9.2 + #/usr/sbin/named -4 -t /var/named -u bind -c /etc/namedb/named.conf.1 + #/usr/sbin/named -4 -t /var/named -u bind -c /etc/namedb/named.conf.2 + echo "." + ;; + + stop) + echo -n "Stopping domain name service: named" + /usr/bin/killall named + echo "." + ;; + + restart) + /usr/bin/killall named + sleep 2 + ulimit -n 16384 + #/usr/sbin/named -4 -t /var/named -u bind -c /etc/namedb/named.conf.1 + #/usr/sbin/named -4 -t /var/named -u bind -c /etc/namedb/named.conf.2 + #/usr/sbin/named -t /var/named -u bind -n 2 -n 2 + /usr/sbin/named -t /var/named -u bind -n 1 -c /etc/namedb/named.conf + #/usr/sbin/named -t /var/named -u bind -n 1 -c /etc/namedb/named.conf.bind9.2 + ;; + + reload) + /usr/bin/killall -HUP named + ;; + + force-reload) + $0 restart + ;; + + *) + echo "Usage: /etc/init.d/bind {start|stop|reload|restart|force-reload}" >&2 + exit 1 + ;; +esac + +exit 0 diff --git a/noc/configs/init.d/inetd b/noc/configs/init.d/inetd new file mode 100755 index 0000000..cc19500 --- /dev/null +++ b/noc/configs/init.d/inetd @@ -0,0 +1,67 @@ +#!/bin/sh +exit 0 + +# +# start/stop inetd super server. + +if ! [ -x /usr/sbin/inetd ]; then + exit 0 +fi + +checkportmap () { + if grep -v "^ *#" /etc/inetd.conf | grep 'rpc/' >/dev/null; then + if ! [ -x /usr/bin/rpcinfo ] + then + echo + echo "WARNING: rpcinfo not available - RPC services may be unavailable!" + echo " (Commenting out the rpc services in inetd.conf will" + echo " disable this message)" + echo + elif ! /usr/bin/rpcinfo -u localhost portmapper >/dev/null 2>/dev/null + then + echo + echo "WARNING: portmapper inactive - RPC services unavailable!" + echo " (Commenting out the rpc services in inetd.conf will" + echo " disable this message)" + echo + fi + fi +} + +case "$1" in + start) + checkportmap + echo -n "Starting internet superserver:" + echo -n " inetd" ; start-stop-daemon --start --quiet --pidfile /var/run/inetd.pid --exec /usr/sbin/inetd + echo "." + ;; + stop) + echo -n "Stopping internet superserver:" + echo -n " inetd" ; start-stop-daemon --stop --quiet --oknodo --pidfile /var/run/inetd.pid --exec /usr/sbin/inetd + echo "." + ;; + reload) + echo -n "Reloading internet superserver:" + echo -n " inetd" + start-stop-daemon --stop --quiet --oknodo --pidfile /var/run/inetd.pid --signal 1 + echo "." + ;; + force-reload) + $0 reload + ;; + restart) + echo -n "Restarting internet superserver:" + echo -n " inetd" + start-stop-daemon --stop --quiet --oknodo --pidfile /var/run/inetd.pid + checkportmap + start-stop-daemon --start --quiet --pidfile /var/run/inetd.pid --exec /usr/sbin/inetd + echo "." + ;; + *) + echo "Usage: /etc/init.d/inetd {start|stop|reload|restart}" + exit 1 + ;; +esac + +exit 0 + diff --git a/noc/configs/init.d/olsr b/noc/configs/init.d/olsr new file mode 100755 index 0000000..d38ea0e --- /dev/null +++ b/noc/configs/init.d/olsr @@ -0,0 +1,92 @@ +#! /bin/sh +# +# skeleton Example initscript +# This file should be used to construct scripts to be +# placed in /etc/init.d. +# +# Author: Miquel van Smoorenburg . +# Ian Murdock . +# +# Please remove the "Author" lines above and replace them +# with your own name if you copy and modify this script. +# +# Version: @(#)skeleton 2.85-23 28-Jul-2004 miquels@cistron.nl +# + +set -e + +PATH=/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin +DESC="freifunk olsr" +NAME="" + +# Read config file if it is present. +#if [ -r /etc/default/$NAME ] +#then +# . /etc/default/$NAME +#fi + +# +# Function that starts the daemon/service. +# +d_start() { + screen -d -m -S olsr /usr/sbin/olsrd +} + +# +# Function that stops the daemon/service. +# +d_stop() { + killall olsrd +} + +# +# Function that sends a SIGHUP to the daemon/service. +# +d_reload() { + echo "no reload" +} + +case "$1" in + start) + echo -n "Starting $DESC: $NAME" + d_start + echo "." + ;; + stop) + echo -n "Stopping $DESC: $NAME" + d_stop + echo "." + ;; + #reload) + # + # If the daemon can reload its configuration without + # restarting (for example, when it is sent a SIGHUP), + # then implement that here. + # + # If the daemon responds to changes in its config file + # directly anyway, make this an "exit 0". + # + # echo -n "Reloading $DESC configuration..." + # d_reload + # echo "done." + #;; + restart|force-reload) + # + # If the "reload" option is implemented, move the "force-reload" + # option to the "reload" entry above. If not, "force-reload" is + # just the same as "restart". + # + echo -n "Restarting $DESC: $NAME" + d_stop + sleep 1 + d_start + echo "." + ;; + *) + # echo "Usage: $SCRIPTNAME {start|stop|restart|reload|force-reload}" >&2 + echo "Usage: $SCRIPTNAME {start|stop|restart|force-reload}" >&2 + exit 1 + ;; +esac + +exit 0 diff --git a/noc/configs/init.d/pppd-dns b/noc/configs/init.d/pppd-dns new file mode 100755 index 0000000..9995ffd --- /dev/null +++ b/noc/configs/init.d/pppd-dns @@ -0,0 +1,10 @@ +#!/bin/sh -e +exit 0 + +# +# Restore /etc/resolv.conf if the system crashed before the ppp link +# was shut down. + +[ -x /etc/ppp/ip-down.d/0000usepeerdns ] \ + && exec /etc/ppp/ip-down.d/0000usepeerdns + diff --git a/noc/configs/init.d/wshaper b/noc/configs/init.d/wshaper new file mode 100755 index 0000000..b60f323 --- /dev/null +++ b/noc/configs/init.d/wshaper @@ -0,0 +1,159 @@ +#!/bin/bash +# Wonderous Shaper +# please read the README before filling out these values +# +# Set the following values to somewhat less than your actual download +# and uplink speed. In kilobits. Also set the device that is to be shaped. + +DOWNLINK=5000 +UPLINK=490 +DEV=ppp0 + +# low priority OUTGOING traffic - you can leave this blank if you want +# low priority source netmasks +NOPRIOHOSTSRC= + +# low priority destination netmasks +NOPRIOHOSTDST= + +# low priority source ports +NOPRIOPORTSRC="80 20 21 4662 4666 4772 4776 2142 4005 6881 6882 6883 6884 6885 6886 6887 6888 6889" + +# low priority destination ports +NOPRIOPORTDST="4662 4666 4772 4776 2142 6881 6882 6883 6884 6885 6886 6887 6888 6889" + + +my_tc() { + /sbin/tc "$@" || echo "failed: tc $@" +} + +# Now remove the following two lines :-) + +#echo Please read the documentation in 'README' first +#exit + +if [ "$1" = "status" ] +then + my_tc -s qdisc ls dev $DEV + my_tc -s class ls dev $DEV + exit +fi + + +# clean existing down- and uplink qdiscs, hide errors +my_tc qdisc del dev $DEV root 2> /dev/null > /dev/null +my_tc qdisc del dev $DEV ingress 2> /dev/null > /dev/null + +if [ "$1" = "stop" ] +then + exit +fi + + +###### uplink + +# install root HTB, point default traffic to 1:20: + +my_tc qdisc add dev $DEV root handle 1: htb default 20 r2q 1 + +# shape everything at $UPLINK speed - this prevents huge queues in your +# DSL modem which destroy latency: + +my_tc class add dev $DEV parent 1: classid 1:1 htb rate ${UPLINK}kbit burst 2k + +# high prio class 1:10: + +my_tc class add dev $DEV parent 1:1 classid 1:10 htb rate ${UPLINK}kbit \ + burst 2k prio 1 + +# bulk & default class 1:20 - gets slightly less traffic, +# and a lower priority: + +my_tc class add dev $DEV parent 1:1 classid 1:20 htb rate $[5*$UPLINK/10]kbit \ + ceil $[9*$UPLINK/10]kbit \ + burst 2k prio 2 + +my_tc class add dev $DEV parent 1:1 classid 1:30 htb rate $[1*$UPLINK/10]kbit \ + ceil $[7*$UPLINK/10]kbit \ + burst 2k prio 5 + +# all get Stochastic Fairness: +my_tc qdisc add dev $DEV parent 1:10 handle 10: sfq perturb 10 +my_tc qdisc add dev $DEV parent 1:20 handle 20: sfq perturb 10 +my_tc qdisc add dev $DEV parent 1:30 handle 30: sfq perturb 10 + +# TOS Minimum Delay (ssh, NOT scp) in 1:10: + +my_tc filter add dev $DEV parent 1:0 protocol ip prio 10 u32 \ + match ip tos 0x10 0xff flowid 1:10 + +# ICMP (ip protocol 1) in the interactive class 1:10 so we +# can do measurements & impress our friends: +my_tc filter add dev $DEV parent 1:0 protocol ip prio 10 u32 \ + match ip protocol 1 0xff flowid 1:10 + +# To speed up downloads while an upload is going on, put ACK packets in +# the interactive class: + +my_tc filter add dev $DEV parent 1: protocol ip prio 10 u32 \ + match ip protocol 6 0xff \ + match u8 0x05 0x0f at 0 \ + match u16 0x0000 0xffc0 at 2 \ + match u8 0x10 0xff at 33 \ + flowid 1:10 + +# our tunnel to mms is "interactive" +my_tc filter add dev $DEV parent 1: protocol ip prio 10 u32 \ + match ip dst 193.103.161.61/32 flowid 1:10 +my_tc filter add dev $DEV parent 1: protocol ip prio 10 u32 \ + match ip dst 194.97.108.53/32 flowid 1:10 + +# rest is 'non-interactive' ie 'bulk' and ends up in 1:20 + +# some traffic however suffers a worse fate +for a in $NOPRIOPORTDST +do + my_tc filter add dev $DEV parent 1: protocol ip prio 14 u32 \ + match ip dport $a 0xffff flowid 1:30 +done + +for a in $NOPRIOPORTSRC +do + my_tc filter add dev $DEV parent 1: protocol ip prio 15 u32 \ + match ip sport $a 0xffff flowid 1:30 +done + +for a in $NOPRIOHOSTSRC +do + my_tc filter add dev $DEV parent 1: protocol ip prio 16 u32 \ + match ip src $a flowid 1:30 +done + +for a in $NOPRIOHOSTDST +do + my_tc filter add dev $DEV parent 1: protocol ip prio 17 u32 \ + match ip dst $a flowid 1:30 +done + +# rest is 'non-interactive' ie 'bulk' and ends up in 1:20 + +my_tc filter add dev $DEV parent 1: protocol ip prio 18 u32 \ + match ip dst 0.0.0.0/0 flowid 1:20 + + +########## downlink ############# +# slow downloads down to somewhat less than the real speed to prevent +# queuing at our ISP. Tune to see how high you can set it. +# ISPs tend to have *huge* queues to make sure big downloads are fast +# +# attach ingress policer: + +my_tc qdisc add dev $DEV handle ffff: ingress + +# filter *everything* to it (0.0.0.0/0), drop everything that's +# coming in too fast: + +my_tc filter add dev $DEV parent ffff: protocol ip prio 50 u32 match ip src \ + 0.0.0.0/0 police rate ${DOWNLINK}kbit burst 10k drop flowid :1 + + diff --git a/noc/configs/inittab b/noc/configs/inittab new file mode 100644 index 0000000..d44945e --- /dev/null +++ b/noc/configs/inittab @@ -0,0 +1,70 @@ +# /etc/inittab: init(8) configuration. +# $Id: inittab,v 1.91 2002/01/25 13:35:21 miquels Exp $ + +# The default runlevel. +id:2:initdefault: + +# Boot-time system configuration/initialization script. +# This is run first except when booting in emergency (-b) mode. +si::sysinit:/etc/init.d/rcS + +# What to do in single-user mode. +~~:S:wait:/sbin/sulogin + +# /etc/init.d executes the S and K scripts upon change +# of runlevel. +# +# Runlevel 0 is halt. +# Runlevel 1 is single-user. +# Runlevels 2-5 are multi-user. +# Runlevel 6 is reboot. + +l0:0:wait:/etc/init.d/rc 0 +l1:1:wait:/etc/init.d/rc 1 +l2:2:wait:/etc/init.d/rc 2 +l3:3:wait:/etc/init.d/rc 3 +l4:4:wait:/etc/init.d/rc 4 +l5:5:wait:/etc/init.d/rc 5 +l6:6:wait:/etc/init.d/rc 6 +# Normally not reached, but fallthrough in case of emergency. +z6:6:respawn:/sbin/sulogin + +# What to do when CTRL-ALT-DEL is pressed. +ca:12345:ctrlaltdel:/sbin/shutdown -t1 -a -r now + +# Action on special keypress (ALT-UpArrow). +#kb::kbrequest:/bin/echo "Keyboard Request--edit /etc/inittab to let this work." + +# What to do when the power fails/returns. +pf::powerwait:/etc/init.d/powerfail start +pn::powerfailnow:/etc/init.d/powerfail now +po::powerokwait:/etc/init.d/powerfail stop + +# /sbin/getty invocations for the runlevels. +# +# The "id" field MUST be the same as the last +# characters of the device (after "tty"). +# +# Format: +# ::: +# +# Note that on most Debian systems tty7 is used by the X Window System, +# so if you want to add more getty's go ahead but skip tty7 if you run X. +# +1:2345:respawn:/sbin/getty 38400 tty1 +2:23:respawn:/sbin/getty 38400 tty2 +3:23:respawn:/sbin/getty 38400 tty3 +4:23:respawn:/sbin/getty 38400 tty4 +5:23:respawn:/sbin/getty 38400 tty5 +6:23:respawn:/sbin/getty 38400 tty6 + +# Example how to put a getty on a serial line (for a terminal) +# +T0:23:respawn:/sbin/getty -L ttyS0 9600 vt100 +#T1:23:respawn:/sbin/getty -L ttyS1 9600 vt100 + +# Example how to put a getty on a modem line. +# +#T3:23:respawn:/sbin/mgetty -x0 -s 57600 ttyS3 + +s:23:respawn:/usr/bin/tail -F /var/log/squid/access.log /var/log/syslog >/dev/tty1 2>&1 diff --git a/noc/configs/modules b/noc/configs/modules new file mode 100644 index 0000000..899723b --- /dev/null +++ b/noc/configs/modules @@ -0,0 +1,9 @@ +# /etc/modules: kernel modules to load at boot time. +# +# This file should contain the names of kernel modules that are +# to be loaded at boot time, one per line. Comments begin with +# a "#", and everything on the line after them are ignored. +ipv6 +capability +e100 +e1000 diff --git a/noc/configs/network/if-down.d/openvpn b/noc/configs/network/if-down.d/openvpn new file mode 100755 index 0000000..a0d6954 --- /dev/null +++ b/noc/configs/network/if-down.d/openvpn @@ -0,0 +1,11 @@ +#!/bin/sh + +OPENVPN=/etc/init.d/openvpn + +if [ ! -x $OPENVPN ]; then + exit 0 +fi + +if [ -n "$IF_OPENVPN" ]; then + $OPENVPN stop $IF_OPENVPN +fi diff --git a/noc/configs/network/if-post-down.d/vlan b/noc/configs/network/if-post-down.d/vlan new file mode 100755 index 0000000..3dfc2e0 --- /dev/null +++ b/noc/configs/network/if-post-down.d/vlan @@ -0,0 +1,27 @@ +#!/bin/sh + +# If IFACE is an automagic vlan interface (without the vlan-raw-device +# parameter) then let's try to discover the magic here.. Another way would be +# to just probe for the right device name in /proc/net/vlan + +case "$IFACE" in + eth*.0*) + IF_VLAN_RAW_DEVICE=`echo $IFACE|sed "s/\(eth[0-9][0-9]*\)\..*/\1/"` + ;; + eth*.*) + IF_VLAN_RAW_DEVICE=`echo $IFACE|sed "s/\(eth[0-9][0-9]*\)\..*/\1/"` + ;; + *) exit 0 + ;; +esac + +if [ -z "$IF_VLAN_RAW_DEVICE" ] +then + exit 0 +fi +if [ ! -x /sbin/vconfig ] +then + exit 0 +fi + +vconfig rem $IFACE diff --git a/noc/configs/network/if-pre-up.d/vlan b/noc/configs/network/if-pre-up.d/vlan new file mode 100755 index 0000000..e50e67a --- /dev/null +++ b/noc/configs/network/if-pre-up.d/vlan @@ -0,0 +1,47 @@ +#!/bin/sh + +# Most of this stuff is to enable vlans + +case "$IFACE" in + vlan0*) + vconfig set_name_type VLAN_PLUS_VID + VLANID=`echo $IFACE|sed "s/vlan0*//"` + ;; + vlan*) + vconfig set_name_type VLAN_PLUS_VID_NO_PAD + VLANID=`echo $IFACE|sed "s/vlan0*//"` + ;; + eth*.0*) + vconfig set_name_type DEV_PLUS_VID + VLANID=`echo $IFACE|sed "s/eth[0-9][0-9]*\.0*//g"` + IF_VLAN_RAW_DEVICE=`echo $IFACE|sed "s/\(eth[0-9][0-9]*\)\..*/\1/"` + ;; + eth*.*) + vconfig set_name_type DEV_PLUS_VID_NO_PAD + VLANID=`echo $IFACE|sed "s/eth[0-9][0-9]*\.0*//g"` + IF_VLAN_RAW_DEVICE=`echo $IFACE|sed "s/\(eth[0-9][0-9]*\)\..*/\1/"` + ;; + *) exit 0 + ;; +esac + +if [ -n "$IF_VLAN_RAW_DEVICE" ] +then + if [ ! -x /sbin/vconfig ] + then + exit 0 + fi + if ! ip link show dev "$IF_VLAN_RAW_DEVICE" > /dev/null + then + echo "$IF_VLAN_RAW_DEVICE does not exist, unable to create $IFACE" + exit 1 + fi + ip link set up dev $IF_VLAN_RAW_DEVICE + vconfig add $IF_VLAN_RAW_DEVICE $VLANID +fi + +# This is not vlan specific, and should actually go somewhere else. +if [ -n "$IF_HW_MAC_ADDRESS" ] +then + ip link set $IFACE address $IF_HW_MAC_ADDRESS +fi diff --git a/noc/configs/network/if-up.d/ip b/noc/configs/network/if-up.d/ip new file mode 100755 index 0000000..a1adb14 --- /dev/null +++ b/noc/configs/network/if-up.d/ip @@ -0,0 +1,18 @@ +#!/bin/sh +# This should probably go into ifupdown +# But usually only those with lots of interfaces (vlans) need these +if [ -d /proc/sys/net/ipv4/conf/$IFACE ] +then + if [ -n "$IF_IP_PROXY_ARP" ] && [ "$IF_IP_PROXY_ARP" -eq "1" ] + then + echo 1 > /proc/sys/net/ipv4/conf/$IFACE/proxy_arp + else + echo 0 > /proc/sys/net/ipv4/conf/$IFACE/proxy_arp + fi + if [ -n "$IF_IP_RP_FILTER" ] && [ "$IF_IP_RP_FILTER" -eq "0" ] + then + echo 0 > /proc/sys/net/ipv4/conf/$IFACE/rp_filter + else + echo 1 > /proc/sys/net/ipv4/conf/$IFACE/rp_filter + fi +fi diff --git a/noc/configs/network/if-up.d/ntp-server b/noc/configs/network/if-up.d/ntp-server new file mode 100755 index 0000000..6e96115 --- /dev/null +++ b/noc/configs/network/if-up.d/ntp-server @@ -0,0 +1,10 @@ +#!/bin/sh + +# remove (or comment out) the next line if your network addresses change +exit 0 + +case $IFACE in + eth*) + /etc/init.d/ntp-server restart + ;; +esac diff --git a/noc/configs/network/if-up.d/openvpn b/noc/configs/network/if-up.d/openvpn new file mode 100755 index 0000000..3b29147 --- /dev/null +++ b/noc/configs/network/if-up.d/openvpn @@ -0,0 +1,11 @@ +#!/bin/sh + +OPENVPN=/etc/init.d/openvpn + +if [ ! -x $OPENVPN ]; then + exit 0 +fi + +if [ -n "$IF_OPENVPN" ]; then + $OPENVPN start $IF_OPENVPN +fi diff --git a/noc/configs/network/ifstate b/noc/configs/network/ifstate new file mode 100644 index 0000000..c8077fb --- /dev/null +++ b/noc/configs/network/ifstate @@ -0,0 +1,7 @@ +lo=lo +bond0=bond0 +vlan24=vlan24 +vlan22=vlan22 +vlan25=vlan25 +vlan42=vlan42 +vlan23=vlan23 diff --git a/noc/configs/network/interfaces b/noc/configs/network/interfaces new file mode 100644 index 0000000..43fd7f2 --- /dev/null +++ b/noc/configs/network/interfaces @@ -0,0 +1,88 @@ +#/etc/network/interfaces -- configuration file for ifup(8), ifdown(8) + +# The loopback interface +auto lo +iface lo inet loopback + +# The first network card - this entry was created during the Debian installation +# (network, broadcast and gateway are optional) +#auto eth1 +#iface eth1 inet static +# address 192.168.178.2 +# netmask 255.255.255.0 +# network 192.168.178.0 +# broadcast 192.168.178.255 +# gateway 192.168.178.1 + + +auto bond0 +iface bond0 inet static + pre-up /sbin/modprobe bonding mode=802.3ad + up /sbin/ifenslave bond0 eth0 + up /sbin/ifenslave bond0 eth1 + address 172.16.0.1 + broadcast 172.16.3.255 + netmask 255.255.252.0 + +iface bond0 inet6 static + address 2001:748:306::1 + netmask 64 + +# WLAN +auto vlan24 +iface vlan24 inet static + vlan_raw_device bond0 + address 172.16.4.1 + broadcast 172.16.8.255 + netmask 255.255.252.0 + +iface vlan24 inet6 static + address 2001:748:306:24::1 + netmask 64 + +# pptp +auto vlan22 +iface vlan22 inet static + vlan_raw_device bond0 + address 192.168.178.2 + netmask 255.255.255.0 + +iface vlan22 inet6 static + address 2001:748:306:22::1 + netmask 64 + +# freifunk +auto vlan23 +iface vlan23 inet static + vlan_raw_device bond0 + address 10.112.23.1 + netmask 255.255.255.255 + +iface vlan23 inet6 static + address 2001:748:306:23::1 + netmask 64 + +# NOC +auto vlan42 +iface vlan42 inet static + vlan_raw_device bond0 + address 172.16.42.1 + broadcast 172.16.42.255 + netmask 255.255.255.0 + up /usr/local/bin/network-foo + +iface vlan42 inet6 static + address 2001:748:306:42::1 + netmask 64 + +# AFU Druck +auto vlan25 +iface vlan25 inet static + vlan_raw_device bond0 + address 172.16.25.1 + broadcast 172.16.25.255 + netmask 255.255.255.0 + +iface vlan25 inet6 static + address 2001:748:306:25::1 + netmask 64 diff --git a/noc/configs/network/interfaces.dpkg-new b/noc/configs/network/interfaces.dpkg-new new file mode 100644 index 0000000..e69de29 diff --git a/noc/configs/network/options b/noc/configs/network/options new file mode 100644 index 0000000..14380f4 --- /dev/null +++ b/noc/configs/network/options @@ -0,0 +1,3 @@ +ip_forward=yes +spoofprotect=yes +syncookies=no diff --git a/noc/configs/olsrd.conf b/noc/configs/olsrd.conf new file mode 100644 index 0000000..e0f1e8e --- /dev/null +++ b/noc/configs/olsrd.conf @@ -0,0 +1,272 @@ +# +# olsr.org OLSR daemon config file +# +# Lines starting with a # are discarded +# +# This file was shipped with olsrd 0.X.X +# + +# Debug level(0-9) +# If set to 0 the daemon runs in the background + +DebugLevel 2 + +# IP version to use (4 or 6) + +IpVersion 4 + +# HNA IPv4 routes +# syntax: netaddr netmask +# Example Internet gateway: +# 0.0.0.0 0.0.0.0 + +Hna4 +{ +# Internet gateway: + 0.0.0.0 0.0.0.0 + 172.16.0.0 255.255.252.0 + 172.16.4.0 255.255.252.0 + 172.16.25.0 255.255.255.0 + 172.16.42.0 255.255.255.0 +# more entries can be added: +# 192.168.1.0 255.255.255.0 +} + +# HNA IPv6 routes +# syntax: netaddr prefix +# Example Internet gateway: +Hna6 +{ +# Internet gateway: +# :: 0 +# more entries can be added: +# fec0:2200:106:: 48 +} + + +# Should olsrd keep on running even if there are +# no interfaces available? This is a good idea +# for a PCMCIA/USB hotswap environment. +# "yes" OR "no" + +AllowNoInt yes + +# TOS(type of service) value for +# the IP header of control traffic. +# If not set it will default to 16 + +#TosValue 16 + +# The fixed willingness to use(0-7) +# If not set willingness will be calculated +# dynamically based on battery/power status +# if such information is available + +#Willingness 4 + +# Allow processes like the GUI front-end +# to connect to the daemon. + +IpcConnect +{ + # Determines how many simultaneously + # IPC connections that will be allowed + # Setting this to 0 disables IPC + + MaxConnections 8 + + # By default only 127.0.0.1 is allowed + # to connect. Here allowed hosts can + # be added + + #Host 127.0.0.1 + #Host 10.0.0.5 + + # You can also specify entire net-ranges + # that are allowed to connect. Multiple + # entries are allowed + + #Net 192.168.1.0 255.255.255.0 + Net 172.16.42.0 255.255.255.0 +} + +# Wether to use hysteresis or not +# Hysteresis adds more robustness to the +# link sensing but delays neighbor registration. +# Used by default. 'yes' or 'no' + +UseHysteresis no + +# Hysteresis parameters +# Do not alter these unless you know +# what you are doing! +# Set to auto by default. Allowed +# values are floating point values +# in the interval 0,1 +# THR_LOW must always be lower than +# THR_HIGH. + +#HystScaling 0.50 +#HystThrHigh 0.80 +#HystThrLow 0.30 + + +# Link quality level +# 0 = do not use link quality +# 1 = use link quality for MPR selection +# 2 = use link quality for MPR selection and routing +# Defaults to 0 + +LinkQualityLevel 2 + +# Link quality window size +# Defaults to 10 + +#LinkQualityWinSize 10 + +# Polling rate in seconds(float). +# Default value 0.05 sec + +Pollrate 0.05 + + +# TC redundancy +# Specifies how much neighbor info should +# be sent in TC messages +# Possible values are: +# 0 - only send MPR selectors +# 1 - send MPR selectors and MPRs +# 2 - send all neighbors +# +# defaults to 0 + +TcRedundancy 2 + + +# +# MPR coverage +# Specifies how many MPRs a node should +# try select to reach every 2 hop neighbor +# +# Can be set to any integer >0 +# +# defaults to 1 + +#MprCoverage 1 + + +# Olsrd plugins to load +# This must be the absolute path to the file +# or the loader will use the following scheme: +# - Try the paths in the LD_LIBRARY_PATH +# environment variable. +# - The list of libraries cached in /etc/ld.so.cache +# - /lib, followed by /usr/lib + +# Example plugin entry with parameters: + +LoadPlugin "olsrd_dyn_gw.so.0.3" +{ + # Here parameters are set to be sent to the + # plugin. Theese are on the form "key" "value". + # Parameters ofcause, differs from plugin to plugin. + # Consult the documentation of your plugin for details. + + # Example: dyn_gw params + + # how often to check for Internet connectivity + # defaults to 5 secs + PlParam "Interval" "5" + + # if one or more IPv4 addresses are given, do a ping on these in + # descending order to validate that there is not only an entry in + # routing table, but also a real internet connection. If any of + # these addresses could be pinged successfully, the test was + # succesful, i.e. if the ping on the 1st address was successful,the + # 2nd won't be pinged + PlParam "Ping" "212.12.48.122" + PlParam "Ping" "141.1.1.1" + PlParam "Ping" "194.25.2.129" +} + +LoadPlugin "olsrd_dot_draw.so.0.3" +{ +} + + +# Interfaces and their rules +# Omitted options will be set to the +# default values. Multiple interfaces +# can be specified in the same block +# and multiple blocks can be set. + +# !!CHANGE THE INTERFACE LABEL(s) TO MATCH YOUR INTERFACE(s)!! +# (eg. wlan0 or eth1): + +Interface "vlan23" +{ + + # IPv4 broadcast address to use. The + # one usefull example would be 255.255.255.255 + # If not defined the broadcastaddress + # every card is configured with is used + + Ip4Broadcast 255.255.255.255 + + # IPv6 address scope to use. + # Must be 'site-local' or 'global' + + # Ip6AddrType site-local + + # IPv6 multicast address to use when + # using site-local addresses. + # If not defined, ff05::15 is used + + # Ip6MulticastSite ff05::11 + + # IPv6 multicast address to use when + # using global addresses + # If not defined, ff0e::1 is used + + # Ip6MulticastGlobal ff0e::1 + + + # Emission intervals. + # If not defined, RFC proposed values will + # be used in most cases. + + # Hello interval in seconds(float) + # HelloInterval 2.0 + + # HELLO validity time + # HelloValidityTime 6.0 + + # TC interval in seconds(float) + # TcInterval 5.0 + + # TC validity time + # TcValidityTime 15.0 + + # MID interval in seconds(float) + # MidInterval 5.0 + + # MID validity time + # MidValidityTime 15.0 + + # HNA interval in seconds(float) + # HnaInterval 5.0 + + # HNA validity time + # HnaValidityTime 15.0 + + # When multiple links exist between hosts + # the weight of interface is used to determine + # the link to use. Normally the weight is + # automatically calculated by olsrd based + # on the characteristics of the interface, + # but here you can specify a fixed value. + # Olsrd will choose links with the lowest value. + + # Weight 0 +} + diff --git a/noc/configs/passwd b/noc/configs/passwd new file mode 100644 index 0000000..aab30ca --- /dev/null +++ b/noc/configs/passwd @@ -0,0 +1,25 @@ +root:x:0:0:root:/root:/bin/bash +daemon:x:1:1:daemon:/usr/sbin:/bin/sh +bin:x:2:2:bin:/bin:/bin/sh +sys:x:3:3:sys:/dev:/bin/sh +sync:x:4:65534:sync:/bin:/bin/sync +games:x:5:60:games:/usr/games:/bin/sh +man:x:6:12:man:/var/cache/man:/bin/sh +lp:x:7:7:lp:/var/spool/lpd:/bin/sh +mail:x:8:8:mail:/var/mail:/bin/sh +news:x:9:9:news:/var/spool/news:/bin/sh +uucp:x:10:10:uucp:/var/spool/uucp:/bin/sh +proxy:x:13:13:proxy:/bin:/bin/sh +postgres:x:31:32:postgres:/var/lib/postgres:/bin/sh +www-data:x:33:33:www-data:/var/www:/bin/sh +backup:x:34:34:backup:/var/backups:/bin/sh +operator:x:37:37:Operator:/var:/bin/sh +list:x:38:38:Mailing List Manager:/var/list:/bin/sh +irc:x:39:39:ircd:/var/run/ircd:/bin/sh +gnats:x:41:41:Gnats Bug-Reporting System (admin):/var/lib/gnats:/bin/sh +nobody:x:65534:65534:nobody:/nonexistent:/bin/sh +sshd:x:100:65534::/var/run/sshd:/bin/false +noc:x:1000:1000:,,,:/home/noc:/bin/bash +bind:x:1001:1001:bind user:/var/named:/bin/bash +ntp:x:103:103::/home/ntp:/bin/false +radvd:x:101:65534::/var/run/radvd:/bin/false diff --git a/noc/configs/radvd.conf b/noc/configs/radvd.conf new file mode 100644 index 0000000..3a1a5e5 --- /dev/null +++ b/noc/configs/radvd.conf @@ -0,0 +1,51 @@ +interface bond0 +{ + AdvSendAdvert on; + prefix 2001:748:306::1/64 + { + }; +}; + +interface vlan22 +{ + AdvSendAdvert on; + prefix 2001:748:306:22::1/64 + { + }; +}; + + +interface vlan23 +{ + AdvSendAdvert on; + prefix 2001:748:306:23::1/64 + { + }; +}; + + +interface vlan24 +{ + AdvSendAdvert on; + prefix 2001:748:306:24::1/64 + { + }; +}; + + +interface vlan42 +{ + AdvSendAdvert on; + prefix 2001:748:306:42::1/64 + { + }; +}; + + +interface vlan25 +{ + AdvSendAdvert on; + prefix 2001:748:306:25::1/64 + { + }; +}; diff --git a/noc/configs/resolv.conf b/noc/configs/resolv.conf new file mode 100644 index 0000000..fcbfca1 --- /dev/null +++ b/noc/configs/resolv.conf @@ -0,0 +1,4 @@ +search easterhegg.de +nameserver 127.0.0.1 +nameserver 172.16.0.1 + diff --git a/noc/configs/shadow b/noc/configs/shadow new file mode 100644 index 0000000..5c66a4a --- /dev/null +++ b/noc/configs/shadow @@ -0,0 +1,24 @@ +root:sxYXG0nuLEgFg:12862:0:99999:7::: +daemon:*:12862:0:99999:7::: +bin:*:12862:0:99999:7::: +sys:*:12862:0:99999:7::: +sync:*:12862:0:99999:7::: +games:*:12862:0:99999:7::: +man:*:12862:0:99999:7::: +lp:*:12862:0:99999:7::: +mail:*:12862:0:99999:7::: +news:*:12862:0:99999:7::: +uucp:*:12862:0:99999:7::: +proxy:*:12862:0:99999:7::: +postgres:*:12862:0:99999:7::: +www-data:*:12862:0:99999:7::: +backup:*:12862:0:99999:7::: +operator:*:12862:0:99999:7::: +list:*:12862:0:99999:7::: +irc:*:12862:0:99999:7::: +gnats:*:12862:0:99999:7::: +nobody:*:12862:0:99999:7::: +sshd:!:12862:0:99999:7::: +noc:$1$zxg9hnVF$t.6zKVVLji4/u/JoKm6dW1:12865:0:99999:7::: +ntp:!:12868:0:99999:7::: +radvd:!:12868:0:99999:7::: diff --git a/noc/configs/squid/squid.conf b/noc/configs/squid/squid.conf new file mode 100644 index 0000000..8886584 --- /dev/null +++ b/noc/configs/squid/squid.conf @@ -0,0 +1,3443 @@ + +# WELCOME TO SQUID 2 +# ------------------ +# +# This is the default Squid configuration file. You may wish +# to look at the Squid home page (http://www.squid-cache.org/) +# for the FAQ and other documentation. +# +# The default Squid config file shows what the defaults for +# various options happen to be. If you don't need to change the +# default, you shouldn't uncomment the line. Doing so may cause +# run-time problems. In some cases "none" refers to no default +# setting at all, while in other cases it refers to a valid +# option - the comments for that keyword indicate if this is the +# case. +# + + +# NETWORK OPTIONS +# ----------------------------------------------------------------------------- + +# TAG: http_port +# Usage: port +# hostname:port +# 1.2.3.4:port +# +# The socket addresses where Squid will listen for HTTP client +# requests. You may specify multiple socket addresses. +# There are three forms: port alone, hostname with port, and +# IP address with port. If you specify a hostname or IP +# address, Squid binds the socket to that specific +# address. This replaces the old 'tcp_incoming_address' +# option. Most likely, you do not need to bind to a specific +# address, so you can use the port number alone. +# +# The default port number is 3128. +# +# If you are running Squid in accelerator mode, you +# probably want to listen on port 80 also, or instead. +# +# The -a command line option will override the *first* port +# number listed here. That option will NOT override an IP +# address, however. +# +# You may specify multiple socket addresses on multiple lines. +# +# If you run Squid on a dual-homed machine with an internal +# and an external interface we recommend you to specify the +# internal address:port in http_port. This way Squid will only be +# visible on the internal address. +# +#Default: + http_port 80 + http_port 3128 + +# TAG: https_port +# Note: This option is only available if Squid is rebuilt with the +# --enable-ssl option +# +# Usage: [ip:]port cert=certificate.pem [key=key.pem] [options...] +# +# The socket address where Squid will listen for HTTPS client +# requests. +# +# This is really only useful for situations where you are running +# squid in accelerator mode and you want to do the SSL work at the +# accelerator level. +# +# You may specify multiple socket addresses on multiple lines, +# each with their own SSL certificate and/or options. +# +# Options: +# +# cert= Path to SSL certificate (PEM format) +# +# key= Path to SSL private key file (PEM format) +# if not specified, the certificate file is +# assumed to be a combined certificate and +# key file +# +# version= The version of SSL/TLS supported +# 1 automatic (default) +# 2 SSLv2 only +# 3 SSLv3 only +# 4 TLSv1 only +# +# cipher= Colon separated list of supported ciphers +# +# options= Varions SSL engine options. The most important +# being: +# NO_SSLv2 Disallow the use of SSLv2 +# NO_SSLv3 Disallow the use of SSLv3 +# NO_TLSv1 Disallow the use of TLSv1 +# See src/ssl_support.c or OpenSSL documentation +# for a more complete list. +# +#Default: +# none + +# TAG: ssl_unclean_shutdown +# Note: This option is only available if Squid is rebuilt with the +# --enable-ssl option +# +# Some browsers (especially MSIE) bugs out on SSL shutdown +# messages. +# +#Default: +# ssl_unclean_shutdown off + +# TAG: icp_port +# The port number where Squid sends and receives ICP queries to +# and from neighbor caches. Default is 3130. To disable use +# "0". May be overridden with -u on the command line. +# +#Default: +# icp_port 3130 +icp_port 0 + +# TAG: htcp_port +# The port number where Squid sends and receives HTCP queries to +# and from neighbor caches. To turn it on you want to set it 4827. +# By default it is set to "0" (disabled). +# +#Default: +# htcp_port 0 + +# TAG: mcast_groups +# This tag specifies a list of multicast groups which your server +# should join to receive multicasted ICP queries. +# +# NOTE! Be very careful what you put here! Be sure you +# understand the difference between an ICP _query_ and an ICP +# _reply_. This option is to be set only if you want to RECEIVE +# multicast queries. Do NOT set this option to SEND multicast +# ICP (use cache_peer for that). ICP replies are always sent via +# unicast, so this option does not affect whether or not you will +# receive replies from multicast group members. +# +# You must be very careful to NOT use a multicast address which +# is already in use by another group of caches. +# +# If you are unsure about multicast, please read the Multicast +# chapter in the Squid FAQ (http://www.squid-cache.org/FAQ/). +# +# Usage: mcast_groups 239.128.16.128 224.0.1.20 +# +# By default, Squid doesn't listen on any multicast groups. +# +#Default: +# none + +# TAG: udp_incoming_address +# TAG: udp_outgoing_address +# udp_incoming_address is used for the ICP socket receiving packets +# from other caches. +# udp_outgoing_address is used for ICP packets sent out to other +# caches. +# +# The default behavior is to not bind to any specific address. +# +# A udp_incoming_address value of 0.0.0.0 indicates Squid +# should listen for UDP messages on all available interfaces. +# +# If udp_outgoing_address is set to 255.255.255.255 (the default) +# it will use the same socket as udp_incoming_address. Only +# change this if you want to have ICP queries sent using another +# address than where this Squid listens for ICP queries from other +# caches. +# +# NOTE, udp_incoming_address and udp_outgoing_address can not +# have the same value since they both use port 3130. +# +#Default: +# udp_incoming_address 0.0.0.0 +# udp_outgoing_address 255.255.255.255 + + +# OPTIONS WHICH AFFECT THE NEIGHBOR SELECTION ALGORITHM +# ----------------------------------------------------------------------------- + +# TAG: cache_peer +# To specify other caches in a hierarchy, use the format: +# +# cache_peer hostname type http_port icp_port +# +# For example, +# +# # proxy icp +# # hostname type port port options +# # -------------------- -------- ----- ----- ----------- +# cache_peer parent.foo.net parent 3128 3130 [proxy-only] +# cache_peer sib1.foo.net sibling 3128 3130 [proxy-only] +# cache_peer sib2.foo.net sibling 3128 3130 [proxy-only] +# +# type: either 'parent', 'sibling', or 'multicast'. +# +# proxy_port: The port number where the cache listens for proxy +# requests. +# +# icp_port: Used for querying neighbor caches about +# objects. To have a non-ICP neighbor +# specify '7' for the ICP port and make sure the +# neighbor machine has the UDP echo port +# enabled in its /etc/inetd.conf file. +# +# options: proxy-only +# weight=n +# ttl=n +# no-query +# default +# round-robin +# multicast-responder +# closest-only +# no-digest +# no-netdb-exchange +# no-delay +# login=user:password | PASS | *:password +# connect-timeout=nn +# digest-url=url +# allow-miss +# max-conn +# htcp +# carp-load-factor +# +# use 'proxy-only' to specify objects fetched +# from this cache should not be saved locally. +# +# use 'weight=n' to specify a weighted parent. +# The weight must be an integer. The default weight +# is 1, larger weights are favored more. +# +# use 'ttl=n' to specify a IP multicast TTL to use +# when sending an ICP queries to this address. +# Only useful when sending to a multicast group. +# Because we don't accept ICP replies from random +# hosts, you must configure other group members as +# peers with the 'multicast-responder' option below. +# +# use 'no-query' to NOT send ICP queries to this +# neighbor. +# +# use 'default' if this is a parent cache which can +# be used as a "last-resort." You should probably +# only use 'default' in situations where you cannot +# use ICP with your parent cache(s). +# +# use 'round-robin' to define a set of parents which +# should be used in a round-robin fashion in the +# absence of any ICP queries. +# +# 'multicast-responder' indicates the named peer +# is a member of a multicast group. ICP queries will +# not be sent directly to the peer, but ICP replies +# will be accepted from it. +# +# 'closest-only' indicates that, for ICP_OP_MISS +# replies, we'll only forward CLOSEST_PARENT_MISSes +# and never FIRST_PARENT_MISSes. +# +# use 'no-digest' to NOT request cache digests from +# this neighbor. +# +# 'no-netdb-exchange' disables requesting ICMP +# RTT database (NetDB) from the neighbor. +# +# use 'no-delay' to prevent access to this neighbor +# from influencing the delay pools. +# +# use 'login=user:password' if this is a personal/workgroup +# proxy and your parent requires proxy authentication. +# Note: The string can include URL escapes (i.e. %20 for +# spaces). This also means % must be written as %%. +# +# use 'login=PASS' if users must authenticate against +# the upstream proxy. This will pass the users credentials +# as they are to the peer proxy. This only works for the +# Basic HTTP authentication sheme. Note: To combine this +# with proxy_auth both proxies must share the same user +# database as HTTP only allows for one proxy login. +# Also be warned this will expose your users proxy +# password to the peer. USE WITH CAUTION +# +# use 'login=*:password' to pass the username to the +# upstream cache, but with a fixed password. This is meant +# to be used when the peer is in another administrative +# domain, but it is still needed to identify each user. +# The star can optionally be followed by some extra +# information which is added to the username. This can +# be used to identify this proxy to the peer, similar to +# the login=username:password option above. +# +# use 'connect-timeout=nn' to specify a peer +# specific connect timeout (also see the +# peer_connect_timeout directive) +# +# use 'digest-url=url' to tell Squid to fetch the cache +# digest (if digests are enabled) for this host from +# the specified URL rather than the Squid default +# location. +# +# use 'allow-miss' to disable Squid's use of only-if-cached +# when forwarding requests to siblings. This is primarily +# useful when icp_hit_stale is used by the sibling. To +# extensive use of this option may result in forwarding +# loops, and you should avoid having two-way peerings +# with this option. (for example to deny peer usage on +# requests from peer by denying cache_peer_access if the +# source is a peer) +# +# use 'max-conn' to limit the amount of connections Squid +# may open to this peer. +# +# use 'htcp' to send HTCP, instead of ICP, queries +# to the neighbor. You probably also want to +# set the "icp port" to 4827 instead of 3130. +# +# use 'carp-load-factor=f' to define a parent +# cache as one participating in a CARP array. +# The 'f' values for all CARP parents must add +# up to 1.0. +# +# +# NOTE: non-ICP/HTCP neighbors must be specified as 'parent'. +# +#Default: +# none + +# TAG: cache_peer_domain +# Use to limit the domains for which a neighbor cache will be +# queried. Usage: +# +# cache_peer_domain cache-host domain [domain ...] +# cache_peer_domain cache-host !domain +# +# For example, specifying +# +# cache_peer_domain parent.foo.net .edu +# +# has the effect such that UDP query packets are sent to +# 'bigserver' only when the requested object exists on a +# server in the .edu domain. Prefixing the domainname +# with '!' means the cache will be queried for objects +# NOT in that domain. +# +# NOTE: * Any number of domains may be given for a cache-host, +# either on the same or separate lines. +# * When multiple domains are given for a particular +# cache-host, the first matched domain is applied. +# * Cache hosts with no domain restrictions are queried +# for all requests. +# * There are no defaults. +# * There is also a 'cache_peer_access' tag in the ACL +# section. +# +#Default: +# none + +# TAG: neighbor_type_domain +# usage: neighbor_type_domain neighbor parent|sibling domain domain ... +# +# Modifying the neighbor type for specific domains is now +# possible. You can treat some domains differently than the the +# default neighbor type specified on the 'cache_peer' line. +# Normally it should only be necessary to list domains which +# should be treated differently because the default neighbor type +# applies for hostnames which do not match domains listed here. +# +#EXAMPLE: +# cache_peer parent cache.foo.org 3128 3130 +# neighbor_type_domain cache.foo.org sibling .com .net +# neighbor_type_domain cache.foo.org sibling .au .de +# +#Default: +# none + +# TAG: icp_query_timeout (msec) +# Normally Squid will automatically determine an optimal ICP +# query timeout value based on the round-trip-time of recent ICP +# queries. If you want to override the value determined by +# Squid, set this 'icp_query_timeout' to a non-zero value. This +# value is specified in MILLISECONDS, so, to use a 2-second +# timeout (the old default), you would write: +# +# icp_query_timeout 2000 +# +#Default: +# icp_query_timeout 0 + +# TAG: maximum_icp_query_timeout (msec) +# Normally the ICP query timeout is determined dynamically. But +# sometimes it can lead to very large values (say 5 seconds). +# Use this option to put an upper limit on the dynamic timeout +# value. Do NOT use this option to always use a fixed (instead +# of a dynamic) timeout value. To set a fixed timeout see the +# 'icp_query_timeout' directive. +# +#Default: +# maximum_icp_query_timeout 2000 + +# TAG: mcast_icp_query_timeout (msec) +# For Multicast peers, Squid regularly sends out ICP "probes" to +# count how many other peers are listening on the given multicast +# address. This value specifies how long Squid should wait to +# count all the replies. The default is 2000 msec, or 2 +# seconds. +# +#Default: +# mcast_icp_query_timeout 2000 + +# TAG: dead_peer_timeout (seconds) +# This controls how long Squid waits to declare a peer cache +# as "dead." If there are no ICP replies received in this +# amount of time, Squid will declare the peer dead and not +# expect to receive any further ICP replies. However, it +# continues to send ICP queries, and will mark the peer as +# alive upon receipt of the first subsequent ICP reply. +# +# This timeout also affects when Squid expects to receive ICP +# replies from peers. If more than 'dead_peer' seconds have +# passed since the last ICP reply was received, Squid will not +# expect to receive an ICP reply on the next query. Thus, if +# your time between requests is greater than this timeout, you +# will see a lot of requests sent DIRECT to origin servers +# instead of to your parents. +# +#Default: +# dead_peer_timeout 10 seconds + +# TAG: hierarchy_stoplist +# A list of words which, if found in a URL, cause the object to +# be handled directly by this cache. In other words, use this +# to not query neighbor caches for certain objects. You may +# list this option multiple times. +#We recommend you to use at least the following line. +hierarchy_stoplist cgi-bin ? + +# TAG: no_cache +# A list of ACL elements which, if matched, cause the request to +# not be satisfied from the cache and the reply to not be cached. +# In other words, use this to force certain objects to never be cached. +# +# You must use the word 'DENY' to indicate the ACL names which should +# NOT be cached. +# +#We recommend you to use the following two lines. +acl QUERY urlpath_regex cgi-bin \? +no_cache deny QUERY + + +# OPTIONS WHICH AFFECT THE CACHE SIZE +# ----------------------------------------------------------------------------- + +# TAG: cache_mem (bytes) +# NOTE: THIS PARAMETER DOES NOT SPECIFY THE MAXIMUM PROCESS SIZE. +# IT ONLY PLACES A LIMIT ON HOW MUCH ADDITIONAL MEMORY SQUID WILL +# USE AS A MEMORY CACHE OF OBJECTS. SQUID USES MEMORY FOR OTHER +# THINGS AS WELL. SEE THE SQUID FAQ SECTION 8 FOR DETAILS. +# +# 'cache_mem' specifies the ideal amount of memory to be used +# for: +# * In-Transit objects +# * Hot Objects +# * Negative-Cached objects +# +# Data for these objects are stored in 4 KB blocks. This +# parameter specifies the ideal upper limit on the total size of +# 4 KB blocks allocated. In-Transit objects take the highest +# priority. +# +# In-transit objects have priority over the others. When +# additional space is needed for incoming data, negative-cached +# and hot objects will be released. In other words, the +# negative-cached and hot objects will fill up any unused space +# not needed for in-transit objects. +# +# If circumstances require, this limit will be exceeded. +# Specifically, if your incoming request rate requires more than +# 'cache_mem' of memory to hold in-transit objects, Squid will +# exceed this limit to satisfy the new requests. When the load +# decreases, blocks will be freed until the high-water mark is +# reached. Thereafter, blocks will be used to store hot +# objects. +# +#Default: +# cache_mem 8 MB +cache_mem 64 MB + +# TAG: cache_swap_low (percent, 0-100) +# TAG: cache_swap_high (percent, 0-100) +# +# The low- and high-water marks for cache object replacement. +# Replacement begins when the swap (disk) usage is above the +# low-water mark and attempts to maintain utilization near the +# low-water mark. As swap utilization gets close to high-water +# mark object eviction becomes more aggressive. If utilization is +# close to the low-water mark less replacement is done each time. +# +# Defaults are 90% and 95%. If you have a large cache, 5% could be +# hundreds of MB. If this is the case you may wish to set these +# numbers closer together. +# +#Default: +# cache_swap_low 90 +# cache_swap_high 95 + +# TAG: maximum_object_size (bytes) +# Objects larger than this size will NOT be saved on disk. The +# value is specified in kilobytes, and the default is 4MB. If +# you wish to get a high BYTES hit ratio, you should probably +# increase this (one 32 MB object hit counts for 3200 10KB +# hits). If you wish to increase speed more than your want to +# save bandwidth you should leave this low. +# +# NOTE: if using the LFUDA replacement policy you should increase +# this value to maximize the byte hit rate improvement of LFUDA! +# See replacement_policy below for a discussion of this policy. +# +#Default: +# maximum_object_size 4096 KB +maximum_object_size 750 MB + +# TAG: minimum_object_size (bytes) +# Objects smaller than this size will NOT be saved on disk. The +# value is specified in kilobytes, and the default is 0 KB, which +# means there is no minimum. +# +#Default: +# minimum_object_size 0 KB + +# TAG: maximum_object_size_in_memory (bytes) +# Objects greater than this size will not be attempted to kept in +# the memory cache. This should be set high enough to keep objects +# accessed frequently in memory to improve performance whilst low +# enough to keep larger objects from hoarding cache_mem . +# +#Default: +# maximum_object_size_in_memory 8 KB +maximum_object_size_in_memory 256 KB + +# TAG: ipcache_size (number of entries) +# TAG: ipcache_low (percent) +# TAG: ipcache_high (percent) +# The size, low-, and high-water marks for the IP cache. +# +#Default: +# ipcache_size 1024 +# ipcache_low 90 +# ipcache_high 95 + +# TAG: fqdncache_size (number of entries) +# Maximum number of FQDN cache entries. +# +#Default: +# fqdncache_size 1024 + +# TAG: cache_replacement_policy +# The cache replacement policy parameter determines which +# objects are evicted (replaced) when disk space is needed. +# +# lru : Squid's original list based LRU policy +# heap GDSF : Greedy-Dual Size Frequency +# heap LFUDA: Least Frequently Used with Dynamic Aging +# heap LRU : LRU policy implemented using a heap +# +# Applies to any cache_dir lines listed below this. +# +# The LRU policies keeps recently referenced objects. +# +# The heap GDSF policy optimizes object hit rate by keeping smaller +# popular objects in cache so it has a better chance of getting a +# hit. It achieves a lower byte hit rate than LFUDA though since +# it evicts larger (possibly popular) objects. +# +# The heap LFUDA policy keeps popular objects in cache regardless of +# their size and thus optimizes byte hit rate at the expense of +# hit rate since one large, popular object will prevent many +# smaller, slightly less popular objects from being cached. +# +# Both policies utilize a dynamic aging mechanism that prevents +# cache pollution that can otherwise occur with frequency-based +# replacement policies. +# +# NOTE: if using the LFUDA replacement policy you should increase +# the value of maximum_object_size above its default of 4096 KB to +# to maximize the potential byte hit rate improvement of LFUDA. +# +# For more information about the GDSF and LFUDA cache replacement +# policies see http://www.hpl.hp.com/techreports/1999/HPL-1999-69.html +# and http://fog.hpl.external.hp.com/techreports/98/HPL-98-173.html. +# +#Default: +# cache_replacement_policy lru +cache_replacement_policy heap LFUDA + +# TAG: memory_replacement_policy +# The memory replacement policy parameter determines which +# objects are purged from memory when memory space is needed. +# +# See cache_replacement_policy for details. +# +#Default: +# memory_replacement_policy lru +memory_replacement_policy heap GDSF + + +# LOGFILE PATHNAMES AND CACHE DIRECTORIES +# ----------------------------------------------------------------------------- + +# TAG: cache_dir +# Usage: +# +# cache_dir Type Directory-Name Fs-specific-data [options] +# +# You can specify multiple cache_dir lines to spread the +# cache among different disk partitions. +# +# Type specifies the kind of storage system to use. Only "ufs" +# is built by default. To eanble any of the other storage systems +# see the --enable-storeio configure option. +# +# 'Directory' is a top-level directory where cache swap +# files will be stored. If you want to use an entire disk +# for caching, this can be the mount-point directory. +# The directory must exist and be writable by the Squid +# process. Squid will NOT create this directory for you. +# +# The ufs store type: +# +# "ufs" is the old well-known Squid storage format that has always +# been there. +# +# cache_dir ufs Directory-Name Mbytes L1 L2 [options] +# +# 'Mbytes' is the amount of disk space (MB) to use under this +# directory. The default is 100 MB. Change this to suit your +# configuration. Do NOT put the size of your disk drive here. +# Instead, if you want Squid to use the entire disk drive, +# subtract 20% and use that value. +# +# 'Level-1' is the number of first-level subdirectories which +# will be created under the 'Directory'. The default is 16. +# +# 'Level-2' is the number of second-level subdirectories which +# will be created under each first-level directory. The default +# is 256. +# +# The aufs store type: +# +# "aufs" uses the same storage format as "ufs", utilizing +# POSIX-threads to avoid blocking the main Squid process on +# disk-I/O. This was formerly known in Squid as async-io. +# +# cache_dir aufs Directory-Name Mbytes L1 L2 [options] +# +# see argument descriptions under ufs above +# +# The diskd store type: +# +# "diskd" uses the same storage format as "ufs", utilizing a +# separate process to avoid blocking the main Squid process on +# disk-I/O. +# +# cache_dir diskd Directory-Name Mbytes L1 L2 [options] [Q1=n] [Q2=n] +# +# see argument descriptions under ufs above +# +# Q1 specifies the number of unacknowledged I/O requests when Squid +# stops opening new files. If this many messages are in the queues, +# Squid won't open new files. Default is 64 +# +# Q2 specifies the number of unacknowledged messages when Squid +# starts blocking. If this many messages are in the queues, +# Squid blocks until it receives some replies. Default is 72 +# +# When Q1 < Q2 (the default), the cache directory is optimized +# for lower response time at the expense of a decrease in hit +# ratio. If Q1 > Q2, the cache directory is optimized for +# higher hit ratio at the expense of an increase in response +# time. +# +# The coss store type: +# +# block-size=n defines the "block size" for COSS cache_dir's. +# Squid uses file numbers as block numbers. Since file numbers +# are limited to 24 bits, the block size determines the maximum +# size of the COSS partition. The default is 512 bytes, which +# leads to a maximum cache_dir size of 512<<24, or 8 GB. Note +# you should not change the coss block size after Squid +# has written some objects to the cache_dir. +# +# Common options: +# +# read-only, this cache_dir is read only. +# +# max-size=n, refers to the max object size this storedir supports. +# It is used to initially choose the storedir to dump the object. +# Note: To make optimal use of the max-size limits you should order +# the cache_dir lines with the smallest max-size value first and the +# ones with no max-size specification last. +# +# Note that for coss, max-size must be less than COSS_MEMBUF_SZ +# (hard coded at 1 MB). +# +#Default: + cache_dir ufs /var/spool/squid 16000 16 256 + +# TAG: cache_access_log +# Logs the client request activity. Contains an entry for +# every HTTP and ICP queries received. To disable, enter "none". +# +#Default: + cache_access_log /var/log/squid/access.log + +# TAG: cache_log +# Cache logging file. This is where general information about +# your cache's behavior goes. You can increase the amount of data +# logged to this file with the "debug_options" tag below. +# +#Default: + cache_log /var/log/squid/cache.log + +# TAG: cache_store_log +# Logs the activities of the storage manager. Shows which +# objects are ejected from the cache, and which objects are +# saved and for how long. To disable, enter "none". There are +# not really utilities to analyze this data, so you can safely +# disable it. +# +#Default: + cache_store_log /var/log/squid/store.log + +# TAG: cache_swap_log +# Location for the cache "swap.state" file. This log file holds +# the metadata of objects saved on disk. It is used to rebuild +# the cache during startup. Normally this file resides in each +# 'cache_dir' directory, but you may specify an alternate +# pathname here. Note you must give a full filename, not just +# a directory. Since this is the index for the whole object +# list you CANNOT periodically rotate it! +# +# If %s can be used in the file name it will be replaced with a +# a representation of the cache_dir name where each / is replaced +# with '.'. This is needed to allow adding/removing cache_dir +# lines when cache_swap_log is being used. +# +# If have more than one 'cache_dir', and %s is not used in the name +# these swap logs will have names such as: +# +# cache_swap_log.00 +# cache_swap_log.01 +# cache_swap_log.02 +# +# The numbered extension (which is added automatically) +# corresponds to the order of the 'cache_dir' lines in this +# configuration file. If you change the order of the 'cache_dir' +# lines in this file, these log files will NOT correspond to +# the correct 'cache_dir' entry (unless you manually rename +# them). We recommend you do NOT use this option. It is +# better to keep these log files in each 'cache_dir' directory. +# +#Default: +# none + +# TAG: emulate_httpd_log on|off +# The Cache can emulate the log file format which many 'httpd' +# programs use. To disable/enable this emulation, set +# emulate_httpd_log to 'off' or 'on'. The default +# is to use the native log format since it includes useful +# information Squid-specific log analyzers use. +# +#Default: +# emulate_httpd_log off + +# TAG: log_ip_on_direct on|off +# Log the destination IP address in the hierarchy log tag when going +# direct. Earlier Squid versions logged the hostname here. If you +# prefer the old way set this to off. +# +#Default: + log_ip_on_direct on + +# TAG: mime_table +# Pathname to Squid's MIME table. You shouldn't need to change +# this, but the default file contains examples and formatting +# information if you do. +# +#Default: +# mime_table /usr/share/squid/mime.conf + +# TAG: log_mime_hdrs on|off +# The Cache can record both the request and the response MIME +# headers for each HTTP transaction. The headers are encoded +# safely and will appear as two bracketed fields at the end of +# the access log (for either the native or httpd-emulated log +# formats). To enable this logging set log_mime_hdrs to 'on'. +# +#Default: + log_mime_hdrs off + +# TAG: useragent_log +# Squid will write the User-Agent field from HTTP requests +# to the filename specified here. By default useragent_log +# is disabled. +# +#Default: +# none + +# TAG: referer_log +# Squid will write the Referer field from HTTP requests to the +# filename specified here. By default referer_log is disabled. +# +#Default: +# none + +# TAG: pid_filename +# A filename to write the process-id to. To disable, enter "none". +# +#Default: +# pid_filename /var/run/squid.pid + +# TAG: debug_options +# Logging options are set as section,level where each source file +# is assigned a unique section. Lower levels result in less +# output, Full debugging (level 9) can result in a very large +# log file, so be careful. The magic word "ALL" sets debugging +# levels for all sections. We recommend normally running with +# "ALL,1". +# +#Default: +# debug_options ALL,1 + +# TAG: log_fqdn on|off +# Turn this on if you wish to log fully qualified domain names +# in the access.log. To do this Squid does a DNS lookup of all +# IP's connecting to it. This can (in some situations) increase +# latency, which makes your cache seem slower for interactive +# browsing. +# +#Default: +# log_fqdn off + +# TAG: client_netmask +# A netmask for client addresses in logfiles and cachemgr output. +# Change this to protect the privacy of your cache clients. +# A netmask of 255.255.255.0 will log all IP's in that range with +# the last digit set to '0'. +# +#Default: +# client_netmask 255.255.255.255 + + +# OPTIONS FOR EXTERNAL SUPPORT PROGRAMS +# ----------------------------------------------------------------------------- + +# TAG: ftp_user +# If you want the anonymous login password to be more informative +# (and enable the use of picky ftp servers), set this to something +# reasonable for your domain, like wwwuser@somewhere.net +# +# The reason why this is domainless by default is the +# request can be made on the behalf of a user in any domain, +# depending on how the cache is used. +# Some ftp server also validate the email address is valid +# (for example perl.com). +# +#Default: +# ftp_user Squid@ + +# TAG: ftp_list_width +# Sets the width of ftp listings. This should be set to fit in +# the width of a standard browser. Setting this too small +# can cut off long filenames when browsing ftp sites. +# +#Default: +# ftp_list_width 32 + +# TAG: ftp_passive +# If your firewall does not allow Squid to use passive +# connections, turn off this option. +# +#Default: +# ftp_passive on + +# TAG: ftp_sanitycheck +# For security and data integrity reasons Squid by default performs +# sanity checks of the addresses of FTP data connections ensure the +# data connection is to the requested server. If you need to allow +# FTP connections to servers using another IP address for the data +# connection turn this off. +# +#Default: +# ftp_sanitycheck on + +# TAG: ftp_telnet_protocol +# The FTP protocol is officially defined to use the telnet protocol +# as transport channel for the control connection. However, many +# implemenations are broken and does not respect this aspect of +# the FTP protocol. +# +# If you have trouble accessing files with ASCII code 255 in the +# path or similar problems involving this ASCII code you can +# try setting this directive to off. If that helps, report to the +# operator of the FTP server in question that their FTP server +# is broken and does not follow the FTP standard. +# +#Default: +# ftp_telnet_protocol on + +# TAG: cache_dns_program +# Note: This option is only available if Squid is rebuilt with the +# --disable-internal-dns option +# +# Specify the location of the executable for dnslookup process. +# +#Default: +# cache_dns_program /usr/lib/squid/dnsserver + +# TAG: dns_children +# Note: This option is only available if Squid is rebuilt with the +# --disable-internal-dns option +# +# The number of processes spawn to service DNS name lookups. +# For heavily loaded caches on large servers, you should +# probably increase this value to at least 10. The maximum +# is 32. The default is 5. +# +# You must have at least one dnsserver process. +# +#Default: +# dns_children 12 + +# TAG: dns_retransmit_interval +# Initial retransmit interval for DNS queries. The interval is +# doubled each time all configured DNS servers have been tried. +# +# +#Default: +# dns_retransmit_interval 5 seconds + +# TAG: dns_timeout +# DNS Query timeout. If no response is received to a DNS query +# within this time all DNS servers for the queried domain +# are assumed to be unavailable. +# +#Default: +# dns_timeout 2 minutes + +# TAG: dns_defnames on|off +# Note: This option is only available if Squid is rebuilt with the +# --disable-internal-dns option +# +# Normally the 'dnsserver' disables the RES_DEFNAMES resolver +# option (see res_init(3)). This prevents caches in a hierarchy +# from interpreting single-component hostnames locally. To allow +# dnsserver to handle single-component names, enable this +# option. +# +#Default: +# dns_defnames off + +# TAG: dns_nameservers +# Use this if you want to specify a list of DNS name servers +# (IP addresses) to use instead of those given in your +# /etc/resolv.conf file. +# On Windows platforms, if no value is specified here or in +# the /etc/resolv.conf file, the list of DNS name servers are +# taken from the Windows registry, both static and dynamic DHCP +# configurations are supported. +# +# Example: dns_nameservers 10.0.0.1 192.172.0.4 +# +#Default: +# none + +# TAG: hosts_file +# Location of the host-local IP name-address associations +# database. Most Operating Systems have such a file: under +# Un*X it's by default in /etc/hosts. MS-Windows NT/2000 places +# it in %SystemRoot%(by default +# c:\winnt)\system32\drivers\etc\hosts, while Windows 9x/ME +# places it in %windir%(usually c:\windows)\hosts +# +# The file contains newline-separated definitions, in the +# form ip_address_in_dotted_form name [name ...] names are +# whitespace-separated. lines beginnng with an hash (#) +# character are comments. +# +# The file is checked at startup and upon configuration. If +# set to 'none', it won't be checked. If append_domain is +# used, that domain will be added to domain-local (i.e. not +# containing any dot character) host definitions. +# +#Default: +# hosts_file /etc/hosts +# +hosts_file /etc/hosts + +# TAG: diskd_program +# Specify the location of the diskd executable. +# Note that this is only useful if you have compiled in +# diskd as one of the store io modules. +# +#Default: +# diskd_program /usr/lib/squid/diskd + +# TAG: unlinkd_program +# Specify the location of the executable for file deletion process. +# +#Default: +# unlinkd_program /usr/lib/squid/unlinkd + +# TAG: pinger_program +# Note: This option is only available if Squid is rebuilt with the +# --enable-icmp option +# +# Specify the location of the executable for the pinger process. +# +#Default: +# pinger_program /usr/lib/squid/pinger + +# TAG: redirect_program +# Specify the location of the executable for the URL redirector. +# Since they can perform almost any function there isn't one included. +# See the FAQ (section 15) for information on how to write one. +# By default, a redirector is not used. +# +#Default: +# none + +# TAG: redirect_children +# The number of redirector processes to spawn. If you start +# too few Squid will have to wait for them to process a backlog of +# URLs, slowing it down. If you start too many they will use RAM +# and other system resources. +# +#Default: +# redirect_children 5 + +# TAG: redirect_rewrites_host_header +# By default Squid rewrites any Host: header in redirected +# requests. If you are running an accelerator this may +# not be a wanted effect of a redirector. +# +#Default: +# redirect_rewrites_host_header on + +# TAG: redirector_access +# If defined, this access list specifies which requests are +# sent to the redirector processes. By default all requests +# are sent. +# +#Default: +# none + +# TAG: auth_param +# This is used to define parameters for the various authentication +# schemes supported by Squid. +# +# format: auth_param scheme parameter [setting] +# +# The order in which authentication schemes are presented to the client is +# dependant on the order the scheme first appears in config file. IE +# has a bug (it's not rfc 2617 compliant) in that it will use the basic +# scheme if basic is the first entry presented, even if more secure +# schemes are presented. For now use the order in the recommended +# settings section below. If other browsers have difficulties (don't +# recognise the schemes offered even if you are using basic) either +# put basic first, or disable the other schemes (by commenting out their +# program entry). +# +# Once an authentication scheme is fully configured, it can only be +# shutdown by shutting squid down and restarting. Changes can be made on +# the fly and activated with a reconfigure. I.E. You can change to a +# different helper, but not unconfigure the helper completely. +# +# Please note that while this directive defines how Squid processes +# authentication it does not automatically activate authentication. +# To use authenticaiton you must in addition make use of acls based +# on login name in http_access (proxy_auth, proxy_auth_regex or +# external with %LOGIN used in the format tag). The browser will be +# challenged for authentication on the first such acl encountered +# in http_access processing and will also be rechallenged for new +# login credentials if the request is being denied by a proxy_auth +# type acl. +# +# === Parameters for the basic scheme follow. === +# +# "program" cmdline +# Specify the command for the external authenticator. Such a program +# reads a line containing "username password" and replies "OK" or +# "ERR" in an endless loop. +# +# By default, the basic authentication sheme is not used unless a +# program is specified. +# +# If you want to use the traditional proxy authentication, jump over to +# the helpers/basic_auth/NCSA directory and type: +# % make +# % make install +# +# Then, set this line to something like +# +# auth_param basic program /usr/lib/squid/ncsa_auth /usr/etc/passwd +# +# "children" numberofchildren +# The number of authenticator processes to spawn. +# If you start too few Squid will have to wait for them to process a +# backlog of usercode/password verifications, slowing it down. When +# password verifications are done via a (slow) network you are likely to +# need lots of authenticator processes. +# auth_param basic children 5 +# +# "realm" realmstring +# Specifies the realm name which is to be reported to the client for +# the basic proxy authentication scheme (part of the text the user +# will see when prompted their username and password). +# auth_param basic realm Squid proxy-caching web server +# +# "credentialsttl" timetolive +# Specifies how long squid assumes an externally validated +# username:password pair is valid for - in other words how often the +# helper program is called for that user. Set this low to force +# revalidation with short lived passwords. Note that setting this high +# does not impact your susceptability to replay attacks unless you are +# using an one-time password system (such as SecureID). If you are using +# such a system, you will be vulnerable to replay attacks unless you +# also use the max_user_ip ACL in an http_access rule. +# auth_param basic credentialsttl 2 hours +# +# "casesensitive" on|off +# Specifies if usernames are case sensitive. Most user databases are +# case insensitive allowing the same username to be spelled using both +# lower and upper case letters, but some are case sensitive. This +# makes a big difference for user_max_ip ACL processing and similar. +# auth_param basic casesensitive off +# +# === Parameters for the digest scheme follow === +# +# "program" cmdline +# Specify the command for the external authenticator. Such a program +# reads a line containing "username":"realm" and replies with the +# appropriate H(A1) value base64 encoded or ERR if the user (or his H(A1) +# hash) does not exists. See rfc 2616 for the definition of H(A1). +# +# By default, the digest authentication scheme is not used unless a +# program is specified. +# +# If you want to use a digest authenticator, jump over to the +# helpers/digest_auth/ directory and choose the authenticator to use. +# It it's directory type +# % make +# % make install +# +# Then, set this line to something like +# +# auth_param digest program /usr/lib/squid/digest_auth_pw /usr/etc/digpass +# +# +# "children" numberofchildren +# The number of authenticator processes to spawn (no default). If you +# start too few Squid will have to wait for them to process a backlog of +# H(A1) calculations, slowing it down. When the H(A1) calculations are +# done via a (slow) network you are likely to need lots of authenticator +# processes. +# auth_param digest children 5 +# +# "realm" realmstring +# Specifies the realm name which is to be reported to the client for the +# digest proxy authentication scheme (part of the text the user will see +# when prompted their username and password). +# auth_param digest realm Squid proxy-caching web server +# +# "nonce_garbage_interval" timeinterval +# Specifies the interval that nonces that have been issued to clients are +# checked for validity. +# auth_param digest nonce_garbage_interval 5 minutes +# +# "nonce_max_duration" timeinterval +# Specifies the maximum length of time a given nonce will be valid for. +# auth_param digest nonce_max_duration 30 minutes +# +# "nonce_max_count" number +# Specifies the maximum number of times a given nonce can be used. +# auth_param digest nonce_max_count 50 +# +# "nonce_strictness" on|off +# Determines if squid requires strict increment-by-1 behaviour for nonce +# counts, or just incrementing (off - for use when useragents generate +# nonce counts that occasionally miss 1 (ie, 1,2,4,6)). +# auth_param digest nonce_strictness off +# +# "check_nonce_count" on|off +# This directive if set to off can disable the nonce count check +# completely to work around buggy digest qop implementations in certain +# mainstream browser versions. Default on to check the nonce count to +# protect from authentication replay attacks. +# auth_param digest check_nonce_count on +# +# "post_workaround" on|off +# This is a workaround to certain buggy browsers who sends an incorrect +# request digest in POST requests when reusing the same nonce as aquired +# earlier in response to a GET request. +# auth_param digest post_workaround off +# +# === NTLM scheme options follow === +# +# "program" cmdline +# Specify the command for the external ntlm authenticator. Such a +# program participates in the NTLMSSP exchanges between Squid and the +# client and reads commands according to the Squid ntlmssp helper +# protocol. See helpers/ntlm_auth/ for details. Recommended ntlm +# authenticator is ntlm_auth from Samba-3.X, but a number of other +# ntlm authenticators is available. +# +# By default, the ntlm authentication scheme is not used unless a +# program is specified. +# +# Note: If you're using Samba >= 3.0.2, please install the winbind +# package and use the ntlm_auth helper from that package. +# +# auth_param ntlm program /usr/bin/ntlm_auth --helper-protocol=squid-2.5-ntlmssp +# +# "children" numberofchildren +# The number of authenticator processes to spawn (no default). If you +# start too few Squid will have to wait for them to process a backlog +# of credential verifications, slowing it down. When crendential +# verifications are done via a (slow) network you are likely to need +# lots of authenticator processes. +# auth_param ntlm children 5 +# +# "max_challenge_reuses" number +# The maximum number of times a challenge given by a ntlm authentication +# helper can be reused. Increasing this number increases your exposure +# to replay attacks on your network. 0 (the default) means use the +# challenge is used only once. See also the max_ntlm_challenge_lifetime +# directive if enabling challenge reuses. +# auth_param ntlm max_challenge_reuses 0 +# +# "max_challenge_lifetime" timespan +# The maximum time period a ntlm challenge is reused over. The +# actual period will be the minimum of this time AND the number of +# reused challenges. +# auth_param ntlm max_challenge_lifetime 2 minutes +# +# "use_ntlm_negotiate" on|off +# Enables support for NTLM NEGOTIATE packet exchanges with the helper. +# The configured ntlm authenticator must be able to handle NTLM +# NEGOTIATE packet. See the authenticator programs documentation if +# unsure. ntlm_auth from Samba-3.0.2 or later supports the use of this +# option. +# The NEGOTIATE packet is required to support NTLMv2 and a +# number of other negotiable NTLMSSP options, and also makes it +# more likely the negotiation is successful. Enabling this parameter +# will also solve problems encountered when NT domain policies +# restrict users to access only certain workstations. When this is off, +# all users must be allowed to log on the proxy servers too, or they'll +# get "invalid workstation" errors - and access denied - when trying to +# use Squid's services. +# Use of ntlm NEGOTIATE is incompatible with challenge reuse, so +# enabling this parameter will OVERRIDE the max_challenge_reuses and +# max_challenge_lifetime parameters and set them to 0. +# auth_param ntlm use_ntlm_negotiate off +# +#Recommended minimum configuration: +#auth_param digest program +#auth_param digest children 5 +#auth_param digest realm Squid proxy-caching web server +#auth_param digest nonce_garbage_interval 5 minutes +#auth_param digest nonce_max_duration 30 minutes +#auth_param digest nonce_max_count 50 +#auth_param ntlm program +#auth_param ntlm children 5 +#auth_param ntlm max_challenge_reuses 0 +#auth_param ntlm max_challenge_lifetime 2 minutes +#auth_param ntlm use_ntlm_negotiate off +#auth_param basic program +#auth_param basic children 5 +#auth_param basic realm Squid proxy-caching web server +#auth_param basic credentialsttl 2 hours +#auth_param basic casesensitive off + +# TAG: authenticate_cache_garbage_interval +# The time period between garbage collection across the username cache. +# This is a tradeoff between memory utilisation (long intervals - say +# 2 days) and CPU (short intervals - say 1 minute). Only change if you +# have good reason to. +# +#Default: +# authenticate_cache_garbage_interval 1 hour + +# TAG: authenticate_ttl +# The time a user & their credentials stay in the logged in user cache +# since their last request. When the garbage interval passes, all user +# credentials that have passed their TTL are removed from memory. +# +#Default: +# authenticate_ttl 1 hour + +# TAG: authenticate_ip_ttl +# If you use proxy authentication and the 'max_user_ip' ACL, this +# directive controls how long Squid remembers the IP addresses +# associated with each user. Use a small value (e.g., 60 seconds) if +# your users might change addresses quickly, as is the case with +# dialups. You might be safe using a larger value (e.g., 2 hours) in a +# corporate LAN environment with relatively static address assignments. +# +#Default: +# authenticate_ip_ttl 0 seconds + +# TAG: external_acl_type +# This option defines external acl classes using a helper program to +# look up the status +# +# external_acl_type name [options] FORMAT.. /path/to/helper [helper arguments..] +# +# Options: +# +# ttl=n TTL in seconds for cached results (defaults to 3600 +# for 1 hour) +# negative_ttl=n +# TTL for cached negative lookups (default same +# as ttl) +# children=n Concurrency level / number of processes spawn +# to service external acl lookups of this type. +# Note: see compatibility note below +# cache=n result cache size, 0 is unbounded (default) +# protocol=3.0 Use URL-escaped strings instead of quoting +# +# FORMAT specifications +# +# %LOGIN Authenticated user login name +# %IDENT Ident user name +# %SRC Client IP +# %DST Requested host +# %PROTO Requested protocol +# %PORT Requested port +# %METHOD Request method +# %{Header} HTTP request header +# %{Hdr:member} HTTP request header list member +# %{Hdr:;member} +# HTTP request header list member using ; as +# list separator. ; can be any non-alphanumeric +# character. +# +# In addition, any string specified in the referencing acl will +# also be included in the helper request line, after the specified +# formats (see the "acl external" directive) +# +# The helper receives lines per the above format specification, +# and returns lines starting with OK or ERR indicating the validity +# of the request and optionally followed by additional keywords with +# more details. +# +# General result syntax: +# +# OK/ERR keyword=value ... +# +# Defined keywords: +# +# user= The users name (login) +# error= Error description (only defined for ERR results) +# +# Keyword values need to be enclosed in quotes if they may contain +# whitespace, or the whitespace escaped using \. Any quotes or \ +# characters within the keyword value must be \ escaped. +# +# If protocol=3.0 then URL escaping of the strings is used instead +# of the above described quoting format. +# +# Compatibility Note: The children= option was named concurrency= in +# Squid-2.5.STABLE3 and earlier and such syntax is still accepted to +# keep compatibility within the Squid-2.5 release. However, the meaning +# of concurrency= option has changed in Squid-3 and the old syntax of +# the directive is therefore depreated from Squid-2.5.STABLE4 and later. +# If you want to be able to easily downgrade to earlier Squid-2.5 +# releases you may want to continue using the old name, if not +# please use the new name. +# +#Default: +# none + + +# OPTIONS FOR TUNING THE CACHE +# ----------------------------------------------------------------------------- + +# TAG: wais_relay_host +# TAG: wais_relay_port +# Relay WAIS request to host (1st arg) at port (2 arg). +# +#Default: +# wais_relay_port 0 + +# TAG: request_header_max_size (KB) +# This specifies the maximum size for HTTP headers in a request. +# Request headers are usually relatively small (about 512 bytes). +# Placing a limit on the request header size will catch certain +# bugs (for example with persistent connections) and possibly +# buffer-overflow or denial-of-service attacks. +# +#Default: +# request_header_max_size 20 KB + +# TAG: request_body_max_size (KB) +# This specifies the maximum size for an HTTP request body. +# In other words, the maximum size of a PUT/POST request. +# A user who attempts to send a request with a body larger +# than this limit receives an "Invalid Request" error message. +# If you set this parameter to a zero (the default), there will +# be no limit imposed. +# +#Default: +# request_body_max_size 0 KB + +# TAG: refresh_pattern +# usage: refresh_pattern [-i] regex min percent max [options] +# +# By default, regular expressions are CASE-SENSITIVE. To make +# them case-insensitive, use the -i option. +# +# 'Min' is the time (in minutes) an object without an explicit +# expiry time should be considered fresh. The recommended +# value is 0, any higher values may cause dynamic applications +# to be erroneously cached unless the application designer +# has taken the appropriate actions. +# +# 'Percent' is a percentage of the objects age (time since last +# modification age) an object without explicit expiry time +# will be considered fresh. +# +# 'Max' is an upper limit on how long objects without an explicit +# expiry time will be considered fresh. +# +# options: override-expire +# override-lastmod +# reload-into-ims +# ignore-reload +# +# override-expire enforces min age even if the server +# sent a Expires: header. Doing this VIOLATES the HTTP +# standard. Enabling this feature could make you liable +# for problems which it causes. +# +# override-lastmod enforces min age even on objects +# that were modified recently. +# +# reload-into-ims changes client no-cache or ``reload'' +# to If-Modified-Since requests. Doing this VIOLATES the +# HTTP standard. Enabling this feature could make you +# liable for problems which it causes. +# +# ignore-reload ignores a client no-cache or ``reload'' +# header. Doing this VIOLATES the HTTP standard. Enabling +# this feature could make you liable for problems which +# it causes. +# +# Basically a cached object is: +# +# FRESH if expires < now, else STALE +# STALE if age > max +# FRESH if lm-factor < percent, else STALE +# FRESH if age < min +# else STALE +# +# The refresh_pattern lines are checked in the order listed here. +# The first entry which matches is used. If none of the entries +# match the default will be used. +# +# Note, you must uncomment all the default lines if you want +# to change one. The default setting is only active if none is +# used. +# +#Suggested default: +refresh_pattern ^ftp: 1440 20% 10080 +refresh_pattern ^gopher: 1440 0% 1440 +refresh_pattern . 0 20% 4320 + +# TAG: quick_abort_min (KB) +# TAG: quick_abort_max (KB) +# TAG: quick_abort_pct (percent) +# The cache by default continues downloading aborted requests +# which are almost completed (less than 16 KB remaining). This +# may be undesirable on slow (e.g. SLIP) links and/or very busy +# caches. Impatient users may tie up file descriptors and +# bandwidth by repeatedly requesting and immediately aborting +# downloads. +# +# When the user aborts a request, Squid will check the +# quick_abort values to the amount of data transfered until +# then. +# +# If the transfer has less than 'quick_abort_min' KB remaining, +# it will finish the retrieval. +# +# If the transfer has more than 'quick_abort_max' KB remaining, +# it will abort the retrieval. +# +# If more than 'quick_abort_pct' of the transfer has completed, +# it will finish the retrieval. +# +# If you do not want any retrieval to continue after the client +# has aborted, set both 'quick_abort_min' and 'quick_abort_max' +# to '0 KB'. +# +# If you want retrievals to always continue if they are being +# cached set 'quick_abort_min' to '-1 KB'. +# +#Default: +# quick_abort_min 16 KB +# quick_abort_max 16 KB +# quick_abort_pct 95 +quick_abort_min 1 MB +quick_abort_max 8 MB + + +# TAG: negative_ttl time-units +# Time-to-Live (TTL) for failed requests. Certain types of +# failures (such as "connection refused" and "404 Not Found") are +# negatively-cached for a configurable amount of time. The +# default is 5 minutes. Note that this is different from +# negative caching of DNS lookups. +# +#Default: +# negative_ttl 5 minutes + +# TAG: positive_dns_ttl time-units +# Upper limit on how long Squid will cache positive DNS responses. +# Default is 6 hours (360 minutes). This directive must be set +# larger than negative_dns_ttl. +# +#Default: +# positive_dns_ttl 6 hours +positive_dns_ttl 1 hours + +# TAG: negative_dns_ttl time-units +# Time-to-Live (TTL) for negative caching of failed DNS lookups. +# This also makes sets the lower cache limit on positive lookups. +# Minimum value is 1 second, and it is not recommendable to go +# much below 10 seconds. +# +#Default: +# negative_dns_ttl 1 minute + +# TAG: range_offset_limit (bytes) +# Sets a upper limit on how far into the the file a Range request +# may be to cause Squid to prefetch the whole file. If beyond this +# limit Squid forwards the Range request as it is and the result +# is NOT cached. +# +# This is to stop a far ahead range request (lets say start at 17MB) +# from making Squid fetch the whole object up to that point before +# sending anything to the client. +# +# A value of -1 causes Squid to always fetch the object from the +# beginning so it may cache the result. (2.0 style) +# +# A value of 0 causes Squid to never fetch more than the +# client requested. (default) +# +#Default: +# range_offset_limit 0 KB + + +# TIMEOUTS +# ----------------------------------------------------------------------------- + +# TAG: forward_timeout time-units +# This parameter specifies how long Squid should at most attempt in +# finding a forwarding path for the request before giving up. +# +#Default: +# forward_timeout 4 minutes + +# TAG: connect_timeout time-units +# This parameter specifies how long to wait for the TCP connect to +# the requested server or peer to complete before Squid should +# attempt to find another path where to forward the request. +# +#Default: +# connect_timeout 1 minute + +# TAG: peer_connect_timeout time-units +# This parameter specifies how long to wait for a pending TCP +# connection to a peer cache. The default is 30 seconds. You +# may also set different timeout values for individual neighbors +# with the 'connect-timeout' option on a 'cache_peer' line. +# +#Default: +# peer_connect_timeout 30 seconds + +# TAG: read_timeout time-units +# The read_timeout is applied on server-side connections. After +# each successful read(), the timeout will be extended by this +# amount. If no data is read again after this amount of time, +# the request is aborted and logged with ERR_READ_TIMEOUT. The +# default is 15 minutes. +# +#Default: +# read_timeout 15 minutes + +# TAG: request_timeout +# How long to wait for an HTTP request after initial +# connection establishment. +# +#Default: +# request_timeout 5 minutes + +# TAG: persistent_request_timeout +# How long to wait for the next HTTP request on a persistent +# connection after the previous request completes. +# +#Default: +# persistent_request_timeout 1 minute + +# TAG: client_lifetime time-units +# The maximum amount of time a client (browser) is allowed to +# remain connected to the cache process. This protects the Cache +# from having a lot of sockets (and hence file descriptors) tied up +# in a CLOSE_WAIT state from remote clients that go away without +# properly shutting down (either because of a network failure or +# because of a poor client implementation). The default is one +# day, 1440 minutes. +# +# NOTE: The default value is intended to be much larger than any +# client would ever need to be connected to your cache. You +# should probably change client_lifetime only as a last resort. +# If you seem to have many client connections tying up +# filedescriptors, we recommend first tuning the read_timeout, +# request_timeout, persistent_request_timeout and quick_abort values. +# +#Default: +# client_lifetime 1 day + +# TAG: half_closed_clients +# Some clients may shutdown the sending side of their TCP +# connections, while leaving their receiving sides open. Sometimes, +# Squid can not tell the difference between a half-closed and a +# fully-closed TCP connection. By default, half-closed client +# connections are kept open until a read(2) or write(2) on the +# socket returns an error. Change this option to 'off' and Squid +# will immediately close client connections when read(2) returns +# "no more data to read." +# +#Default: +# half_closed_clients on + +# TAG: pconn_timeout +# Timeout for idle persistent connections to servers and other +# proxies. +# +#Default: +# pconn_timeout 120 seconds + +# TAG: ident_timeout +# Maximum time to wait for IDENT lookups to complete. +# +# If this is too high, and you enabled IDENT lookups from untrusted +# users, you might be susceptible to denial-of-service by having +# many ident requests going at once. +# +#Default: +# ident_timeout 10 seconds + +# TAG: shutdown_lifetime time-units +# When SIGTERM or SIGHUP is received, the cache is put into +# "shutdown pending" mode until all active sockets are closed. +# This value is the lifetime to set for all open descriptors +# during shutdown mode. Any active clients after this many +# seconds will receive a 'timeout' message. +# +#Default: +# shutdown_lifetime 30 seconds +shutdown_lifetime 5 seconds + + +# ACCESS CONTROLS +# ----------------------------------------------------------------------------- + +# TAG: acl +# Defining an Access List +# +# acl aclname acltype string1 ... +# acl aclname acltype "file" ... +# +# when using "file", the file should contain one item per line +# +# acltype is one of the types described below +# +# By default, regular expressions are CASE-SENSITIVE. To make +# them case-insensitive, use the -i option. +# +# acl aclname src ip-address/netmask ... (clients IP address) +# acl aclname src addr1-addr2/netmask ... (range of addresses) +# acl aclname dst ip-address/netmask ... (URL host's IP address) +# acl aclname myip ip-address/netmask ... (local socket IP address) +# +# acl aclname srcdomain .foo.com ... # reverse lookup, client IP +# acl aclname dstdomain .foo.com ... # Destination server from URL +# acl aclname srcdom_regex [-i] xxx ... # regex matching client name +# acl aclname dstdom_regex [-i] xxx ... # regex matching server +# # For dstdomain and dstdom_regex a reverse lookup is tried if a IP +# # based URL is used. The name "none" is used if the reverse lookup +# # fails. +# +# acl aclname time [day-abbrevs] [h1:m1-h2:m2] +# day-abbrevs: +# S - Sunday +# M - Monday +# T - Tuesday +# W - Wednesday +# H - Thursday +# F - Friday +# A - Saturday +# h1:m1 must be less than h2:m2 +# acl aclname url_regex [-i] ^http:// ... # regex matching on whole URL +# acl aclname urlpath_regex [-i] \.gif$ ... # regex matching on URL path +# acl aclname urllogin [-i] [^a-zA-Z0-9] ... # regex matching on URL login field +# acl aclname port 80 70 21 ... +# acl aclname port 0-1024 ... # ranges allowed +# acl aclname myport 3128 ... # (local socket TCP port) +# acl aclname proto HTTP FTP ... +# acl aclname method GET POST ... +# acl aclname browser [-i] regexp ... +# # pattern match on User-Agent header (see also req_header below) +# acl aclname referer_regex [-i] regexp ... +# # pattern match on Referer header +# # Referer is highly unreliable, so use with care +# acl aclname ident username ... +# acl aclname ident_regex [-i] pattern ... +# # string match on ident output. +# # use REQUIRED to accept any non-null ident. +# acl aclname src_as number ... +# acl aclname dst_as number ... +# # Except for access control, AS numbers can be used for +# # routing of requests to specific caches. Here's an +# # example for routing all requests for AS#1241 and only +# # those to mycache.mydomain.net: +# # acl asexample dst_as 1241 +# # cache_peer_access mycache.mydomain.net allow asexample +# # cache_peer_access mycache_mydomain.net deny all +# +# acl aclname proxy_auth username ... +# acl aclname proxy_auth_regex [-i] pattern ... +# # list of valid usernames +# # use REQUIRED to accept any valid username. +# # +# # NOTE: when a Proxy-Authentication header is sent but it is not +# # needed during ACL checking the username is NOT logged +# # in access.log. +# # +# # NOTE: proxy_auth requires a EXTERNAL authentication program +# # to check username/password combinations (see +# # auth_param directive). +# # +# # WARNING: proxy_auth can't be used in a transparent proxy. It +# # collides with any authentication done by origin servers. It may +# # seem like it works at first, but it doesn't. +# +# acl aclname snmp_community string ... +# # A community string to limit access to your SNMP Agent +# # Example: +# # +# # acl snmppublic snmp_community public +# +# acl aclname maxconn number +# # This will be matched when the client's IP address has +# # more than HTTP connections established. +# +# acl aclname max_user_ip [-s] number +# # This will be matched when the user attempts to log in from more +# # than different ip addresses. The authenticate_ip_ttl +# # parameter controls the timeout on the ip entries. +# # If -s is specified the limit is strict, denying browsing +# # from any further IP addresses until the ttl has expired. Without +# # -s Squid will just annoy the user by "randomly" denying requests. +# # (the counter is reset each time the limit is reached and a +# # request is denied) +# # NOTE: in acceleration mode or where there is mesh of child proxies, +# # clients may appear to come from multiple addresses if they are +# # going through proxy farms, so a limit of 1 may cause user problems. +# +# acl aclname req_mime_type mime-type1 ... +# # regex match against the mime type of the request generated +# # by the client. Can be used to detect file upload or some +# # types HTTP tunelling requests. +# # NOTE: This does NOT match the reply. You cannot use this +# # to match the returned file type. +# +# acl aclname req_header header-name [-i] any\.regex\.here +# # regex match against any of the known request headers. May be +# # thought of as a superset of "browser", "referer" and "mime-type" +# # acls. +# +# acl aclname rep_mime_type mime-type1 ... +# # regex match against the mime type of the reply recieved by +# # squid. Can be used to detect file download or some +# # types HTTP tunelling requests. +# # NOTE: This has no effect in http_access rules. It only has +# # effect in rules that affect the reply data stream such as +# # http_reply_access. +# +# acl aclname rep_header header-name [-i] any\.regex\.here +# # regex match against any of the known response headers. +# # Example: +# # +# # acl many_spaces rep_header Content-Disposition -i [[:space:]]{3,} +# +# acl acl_name external class_name [arguments...] +# # external ACL lookup via a helper class defined by the +# # external_acl_type directive. +# +#Examples: +#acl myexample dst_as 1241 +#acl password proxy_auth REQUIRED +#acl fileupload req_mime_type -i ^multipart/form-data$ +#acl javascript rep_mime_type -i ^application/x-javascript$ +# +#Recommended minimum configuration: +acl all src 0.0.0.0/0.0.0.0 +acl manager proto cache_object +acl localhost src 127.0.0.1/255.255.255.255 +acl to_localhost dst 127.0.0.0/8 +acl SSL_ports port 443 563 # https, snews +acl SSL_ports port 873 # rsync +acl Safe_ports port 80 # http +acl Safe_ports port 21 # ftp +acl Safe_ports port 443 563 # https, snews +acl Safe_ports port 70 # gopher +acl Safe_ports port 210 # wais +acl Safe_ports port 1025-65535 # unregistered ports +acl Safe_ports port 280 # http-mgmt +acl Safe_ports port 488 # gss-http +acl Safe_ports port 591 # filemaker +acl Safe_ports port 777 # multiling http +acl Safe_ports port 631 # cups +acl Safe_ports port 873 # rsync +acl Safe_ports port 901 # SWAT +acl purge method PURGE +acl CONNECT method CONNECT + +acl rfcnets src 10.0.0.0/8 +acl rfcnets src 172.16.0.0/12 +acl rfcnets src 192.168.0.0/16 + +# TAG: http_access +# Allowing or Denying access based on defined access lists +# +# Access to the HTTP port: +# http_access allow|deny [!]aclname ... +# +# NOTE on default values: +# +# If there are no "access" lines present, the default is to deny +# the request. +# +# If none of the "access" lines cause a match, the default is the +# opposite of the last line in the list. If the last line was +# deny, the default is allow. Conversely, if the last line +# is allow, the default will be deny. For these reasons, it is a +# good idea to have an "deny all" or "allow all" entry at the end +# of your access lists to avoid potential confusion. +# +#Default: +# http_access deny all +# +#Recommended minimum configuration: +# +# Only allow cachemgr access from localhost +http_access allow manager localhost +http_access deny manager +# Only allow purge requests from localhost +http_access allow purge localhost +http_access deny purge +# Deny requests to unknown ports +http_access deny !Safe_ports +# Deny CONNECT to other than SSL ports +http_access deny CONNECT !SSL_ports +# +# We strongly recommend the following be uncommented to protect innocent +# web applications running on the proxy server who think the only +# one who can access services on "localhost" is a local user +#http_access deny to_localhost +# +# INSERT YOUR OWN RULE(S) HERE TO ALLOW ACCESS FROM YOUR CLIENTS + +# Example rule allowing access from your local networks. Adapt +# to list your (internal) IP networks from where browsing should +# be allowed +#acl our_networks src 192.168.1.0/24 192.168.2.0/24 +#http_access allow our_networks +http_access allow localhost +http_access allow rfcnets + +# And finally deny all other access to this proxy +http_access deny all + +# TAG: http_reply_access +# Allow replies to client requests. This is complementary to http_access. +# +# http_reply_access allow|deny [!] aclname ... +# +# NOTE: if there are no access lines present, the default is to allow +# all replies +# +# If none of the access lines cause a match the opposite of the +# last line will apply. Thus it is good practice to end the rules +# with an "allow all" or "deny all" entry. +# +#Default: +# http_reply_access allow all +# +#Recommended minimum configuration: +# +# Insert your own rules here. +# +# +# and finally allow by default +http_reply_access allow all + +# TAG: icp_access +# Allowing or Denying access to the ICP port based on defined +# access lists +# +# icp_access allow|deny [!]aclname ... +# +# See http_access for details +# +#Default: +# icp_access deny all +# +#Allow ICP queries from everyone +#icp_access allow all +icp_access deny all + +# TAG: miss_access +# Use to force your neighbors to use you as a sibling instead of +# a parent. For example: +# +# acl localclients src 172.16.0.0/16 +# miss_access allow localclients +# miss_access deny !localclients +# +# This means only your local clients are allowed to fetch +# MISSES and all other clients can only fetch HITS. +# +# By default, allow all clients who passed the http_access rules +# to fetch MISSES from us. +# +#Default setting: +# miss_access allow all + +# TAG: cache_peer_access +# Similar to 'cache_peer_domain' but provides more flexibility by +# using ACL elements. +# +# cache_peer_access cache-host allow|deny [!]aclname ... +# +# The syntax is identical to 'http_access' and the other lists of +# ACL elements. See the comments for 'http_access' below, or +# the Squid FAQ (http://www.squid-cache.org/FAQ/FAQ-10.html). +# +#Default: +# none + +# TAG: ident_lookup_access +# A list of ACL elements which, if matched, cause an ident +# (RFC 931) lookup to be performed for this request. For +# example, you might choose to always perform ident lookups +# for your main multi-user Unix boxes, but not for your Macs +# and PCs. By default, ident lookups are not performed for +# any requests. +# +# To enable ident lookups for specific client addresses, you +# can follow this example: +# +# acl ident_aware_hosts src 198.168.1.0/255.255.255.0 +# ident_lookup_access allow ident_aware_hosts +# ident_lookup_access deny all +# +# Only src type ACL checks are fully supported. A src_domain +# ACL might work at times, but it will not always provide +# the correct result. +# +#Default: +# ident_lookup_access deny all + +# TAG: tcp_outgoing_tos +# Allows you to select a TOS/Diffserv value to mark outgoing +# connections with, based on the username or source address +# making the request. +# +# tcp_outgoing_tos ds-field [!]aclname ... +# +# Example where normal_service_net uses the TOS value 0x00 +# and normal_service_net uses 0x20 +# +# acl normal_service_net src 10.0.0.0/255.255.255.0 +# acl good_service_net src 10.0.1.0/255.255.255.0 +# tcp_outgoing_tos 0x00 normal_service_net 0x00 +# tcp_outgoing_tos 0x20 good_service_net +# +# TOS/DSCP values really only have local significance - so you should +# know what you're specifying. For more, see RFC 2474 +# +# The TOS/DSCP byte must be exactly that - a byte, value 0 - 255, or +# "default" to use whatever default your host has. +# +# Processing proceeds in the order specified, and stops at first fully +# matching line. +# +#Default: +# none + +# TAG: tcp_outgoing_address +# Allows you to map requests to different outgoing IP addresses +# based on the username or sourceaddress of the user making +# the request. +# +# tcp_outgoing_address ipaddr [[!]aclname] ... +# +# Example where requests from 10.0.0.0/24 will be forwareded +# with source address 10.1.0.1, 10.0.2.0/24 forwarded with +# source address 10.1.0.2 and the rest will be forwarded with +# source address 10.1.0.3. +# +# acl normal_service_net src 10.0.0.0/255.255.255.0 +# acl good_service_net src 10.0.1.0/255.255.255.0 +# tcp_outgoing_address 10.0.0.1 normal_service_net +# tcp_outgoing_address 10.0.0.2 good_service_net +# tcp_outgoing_address 10.0.0.3 +# +# Processing proceeds in the order specified, and stops at first fully +# matching line. +# +#Default: +# none + +# TAG: reply_header_max_size (KB) +# This specifies the maximum size for HTTP headers in a reply. +# Reply headers are usually relatively small (about 512 bytes). +# Placing a limit on the reply header size will catch certain +# bugs (for example with persistent connections) and possibly +# buffer-overflow or denial-of-service attacks. +# +#Default: +# reply_header_max_size 20 KB + +# TAG: reply_body_max_size bytes allow|deny acl acl... +# This option specifies the maximum size of a reply body in bytes. +# It can be used to prevent users from downloading very large files, +# such as MP3's and movies. When the reply headers are recieved, +# the reply_body_max_size lines are processed, and the first line with +# a result of "allow" is used as the maximum body size for this reply. +# This size is checked twice. First when we get the reply headers, +# we check the content-length value. If the content length value exists +# and is larger than the allowed size, the request is denied and the +# user receives an error message that says "the request or reply +# is too large." If there is no content-length, and the reply +# size exceeds this limit, the client's connection is just closed +# and they will receive a partial reply. +# +# WARNING: downstream caches probably can not detect a partial reply +# if there is no content-length header, so they will cache +# partial responses and give them out as hits. You should NOT +# use this option if you have downstream caches. +# +# If you set this parameter to zero (the default), there will be +# no limit imposed. +# +#Default: +# reply_body_max_size 0 allow all + + +# ADMINISTRATIVE PARAMETERS +# ----------------------------------------------------------------------------- + +# TAG: cache_mgr +# Email-address of local cache manager who will receive +# mail if the cache dies. The default is "webmaster." +# +#Default: +# cache_mgr webmaster + +# TAG: cache_effective_user +# If you start Squid as root, it will change its effective/real +# UID/GID to the user specified below. The default is to change +# to UID to proxy. If you define cache_effective_user, but not +# cache_effective_group, Squid sets the GID to the effective +# user's default group ID (taken from the password file) and +# supplementary group list from the from groups membership of +# cache_effective_user. +# +#Default: +# cache_effective_user proxy + +# TAG: cache_effective_group +# If you want Squid to run with a specific GID regardless of +# the group memberships of the effective user then set this +# to the group (or GID) you want Squid to run as. When set +# all other group privileges of the effective user is ignored +# and only this GID is effective. If Squid is not started as +# root the user starting Squid must be member of the specified +# group. +# +#Default: +# cache_effective_group proxy + +# TAG: visible_hostname +# If you want to present a special hostname in error messages, etc, +# define this. Otherwise, the return value of gethostname() +# will be used. If you have multiple caches in a cluster and +# get errors about IP-forwarding you must set them to have individual +# names with this setting. +# +#Default: +# none +visible_hostname sinabox.easterhegg.de + +# TAG: unique_hostname +# If you want to have multiple machines with the same +# 'visible_hostname' you must give each machine a different +# 'unique_hostname' so forwarding loops can be detected. +# +#Default: +# none +unique_hostname sinabox.easterhegg.de + +# TAG: hostname_aliases +# A list of other DNS names your cache has. +# +#Default: +# none + + +# OPTIONS FOR THE CACHE REGISTRATION SERVICE +# ----------------------------------------------------------------------------- +# +# This section contains parameters for the (optional) cache +# announcement service. This service is provided to help +# cache administrators locate one another in order to join or +# create cache hierarchies. +# +# An 'announcement' message is sent (via UDP) to the registration +# service by Squid. By default, the announcement message is NOT +# SENT unless you enable it with 'announce_period' below. +# +# The announcement message includes your hostname, plus the +# following information from this configuration file: +# +# http_port +# icp_port +# cache_mgr +# +# All current information is processed regularly and made +# available on the Web at http://www.ircache.net/Cache/Tracker/. + +# TAG: announce_period +# This is how frequently to send cache announcements. The +# default is `0' which disables sending the announcement +# messages. +# +# To enable announcing your cache, just uncomment the line +# below. +# +#Default: +# announce_period 0 +# +#To enable announcing your cache, just uncomment the line below. +#announce_period 1 day +announce_period 0 + +# TAG: announce_host +# TAG: announce_file +# TAG: announce_port +# announce_host and announce_port set the hostname and port +# number where the registration message will be sent. +# +# Hostname will default to 'tracker.ircache.net' and port will +# default default to 3131. If the 'filename' argument is given, +# the contents of that file will be included in the announce +# message. +# +#Default: +# announce_host tracker.ircache.net +# announce_port 3131 + + +# HTTPD-ACCELERATOR OPTIONS +# ----------------------------------------------------------------------------- + +# TAG: httpd_accel_host +# TAG: httpd_accel_port +# If you want to run Squid as an httpd accelerator, define the +# host name and port number where the real HTTP server is. +# +# If you want IP based virtual host support specify the +# hostname as "virtual". This will make Squid use the IP address +# where it accepted the request as hostname in the URL. +# +# If you want virtual port support specify the port as "0". +# +# NOTE: enabling httpd_accel_host disables proxy-caching and +# ICP. If you want these features enabled also, set +# the 'httpd_accel_with_proxy' option. +# +#Default: + httpd_accel_host virtual + httpd_accel_port 80 + +# TAG: httpd_accel_single_host on|off +# If you are running Squid as an accelerator and have a single backend +# server set this to on. This causes Squid to forward the request +# to this server, regardles of what any redirectors or Host headers +# say. +# +# Leave this at off if you have multiple backend servers, and use a +# redirector (or host table or private DNS) to map the requests to the +# appropriate backend servers. Note that the mapping needs to be a +# 1-1 mapping between requested and backend (from redirector) domain +# names or caching will fail, as cacing is performed using the +# URL returned from the redirector. +# +# See also redirect_rewrites_host_header. +# +#Default: + httpd_accel_single_host off + +# TAG: httpd_accel_with_proxy on|off +# If you want to use Squid as both a local httpd accelerator +# and as a proxy, change this to 'on'. Note however your +# proxy users may have trouble to reach the accelerated domains +# unless their browsers are configured not to use this proxy for +# those domains (for example via the no_proxy browser configuration +# setting) +# +#Default: + httpd_accel_with_proxy on + +# TAG: httpd_accel_uses_host_header on|off +# HTTP/1.1 requests include a Host: header which is basically the +# hostname from the URL. The Host: header is used for domain based +# virutal hosts. If your accelerator needs to provide domain based +# virtual hosts on the same IP address you will need to turn this +# on. +# +# Note Squid does NOT check the value of the Host header matches +# any of your accelerated server, so it may open a big security hole +# unless you take care to set up access controls proper. We recommend +# this option remain disabled unless you are sure of what you +# are doing. +# +# However, you will need to enable this option if you run Squid +# as a transparent proxy. Otherwise, virtual servers which +# require the Host: header will not be properly cached. +# +#Default: + httpd_accel_uses_host_header on + +# TAG: httpd_accel_no_pmtu_disc on|off +# In many setups of transparently intercepting proxies Path-MTU +# discovery can not work on traffic towards the clients. This is +# the case when the intercepting device does not fully track +# connections and fails to forward ICMP must fragment messages +# to the cache server. +# +# If you have such setup and experience that certain clients +# sporadically hang or never complete requests set this to on. +# +#Default: + httpd_accel_no_pmtu_disc on + + +# MISCELLANEOUS +# ----------------------------------------------------------------------------- + +# TAG: dns_testnames +# The DNS tests exit as soon as the first site is successfully looked up +# +# This test can be disabled with the -D command line option. +# +#Default: +# dns_testnames netscape.com internic.net nlanr.net microsoft.com + +# TAG: logfile_rotate +# Specifies the number of logfile rotations to make when you +# type 'squid -k rotate'. The default is 10, which will rotate +# with extensions 0 through 9. Setting logfile_rotate to 0 will +# disable the rotation, but the logfiles are still closed and +# re-opened. This will enable you to rename the logfiles +# yourself just before sending the rotate signal. +# +# Note, the 'squid -k rotate' command normally sends a USR1 +# signal to the running squid process. In certain situations +# (e.g. on Linux with Async I/O), USR1 is used for other +# purposes, so -k rotate uses another signal. It is best to get +# in the habit of using 'squid -k rotate' instead of 'kill -USR1 +# '. +# +# Note2, for Debian/Linux the default of logfile_rotate is +# zero, since it includes external logfile-rotation methods. +# +#Default: +# logfile_rotate 0 + +# TAG: append_domain +# Appends local domain name to hostnames without any dots in +# them. append_domain must begin with a period. +# +# Be warned there are now Internet names with no dots in +# them using only top-domain names, so setting this may +# cause some Internet sites to become unavailable. +# +#Example: +# append_domain .yourdomain.com +# +#Default: +# none + +# TAG: tcp_recv_bufsize (bytes) +# Size of receive buffer to set for TCP sockets. Probably just +# as easy to change your kernel's default. Set to zero to use +# the default buffer size. +# +#Default: +# tcp_recv_bufsize 0 bytes + +# TAG: err_html_text +# HTML text to include in error messages. Make this a "mailto" +# URL to your admin address, or maybe just a link to your +# organizations Web page. +# +# To include this in your error messages, you must rewrite +# the error template files (found in the "errors" directory). +# Wherever you want the 'err_html_text' line to appear, +# insert a %L tag in the error template file. +# +#Default: +# none + +# TAG: deny_info +# Usage: deny_info err_page_name acl +# or deny_info http://... acl +# Example: deny_info ERR_CUSTOM_ACCESS_DENIED bad_guys +# +# This can be used to return a ERR_ page for requests which +# do not pass the 'http_access' rules. A single ACL will cause +# the http_access check to fail. If a 'deny_info' line exists +# for that ACL Squid returns a corresponding error page. +# +# You may use ERR_ pages that come with Squid or create your own pages +# and put them into the configured errors/ directory. +# +# Alternatively you can specify an error URL. The browsers will +# get redirected (302) to the specified URL. %s in the redirection +# URL will be replaced by the requested URL. +# +# Alternatively you can tell Squid to reset the TCP connection +# by specifying TCP_RESET. +# +#Default: +# none + +# TAG: memory_pools on|off +# If set, Squid will keep pools of allocated (but unused) memory +# available for future use. If memory is a premium on your +# system and you believe your malloc library outperforms Squid +# routines, disable this. +# +#Default: +# memory_pools on + +# TAG: memory_pools_limit (bytes) +# Used only with memory_pools on: +# memory_pools_limit 50 MB +# +# If set to a non-zero value, Squid will keep at most the specified +# limit of allocated (but unused) memory in memory pools. All free() +# requests that exceed this limit will be handled by your malloc +# library. Squid does not pre-allocate any memory, just safe-keeps +# objects that otherwise would be free()d. Thus, it is safe to set +# memory_pools_limit to a reasonably high value even if your +# configuration will use less memory. +# +# If set to zero, Squid will keep all memory it can. That is, there +# will be no limit on the total amount of memory used for safe-keeping. +# +# To disable memory allocation optimization, do not set +# memory_pools_limit to 0. Set memory_pools to "off" instead. +# +# An overhead for maintaining memory pools is not taken into account +# when the limit is checked. This overhead is close to four bytes per +# object kept. However, pools may actually _save_ memory because of +# reduced memory thrashing in your malloc library. +# +#Default: +# memory_pools_limit 5 MB + +# TAG: forwarded_for on|off +# If set, Squid will include your system's IP address or name +# in the HTTP requests it forwards. By default it looks like +# this: +# +# X-Forwarded-For: 192.1.2.3 +# +# If you disable this, it will appear as +# +# X-Forwarded-For: unknown +# +#Default: + forwarded_for off + +# TAG: log_icp_queries on|off +# If set, ICP queries are logged to access.log. You may wish +# do disable this if your ICP load is VERY high to speed things +# up or to simplify log analysis. +# +#Default: +# log_icp_queries on + +# TAG: icp_hit_stale on|off +# If you want to return ICP_HIT for stale cache objects, set this +# option to 'on'. If you have sibling relationships with caches +# in other administrative domains, this should be 'off'. If you only +# have sibling relationships with caches under your control, +# it is probably okay to set this to 'on'. +# If set to 'on', your siblings should use the option "allow-miss" +# on their cache_peer lines for connecting to you. +# +#Default: +# icp_hit_stale off + +# TAG: minimum_direct_hops +# If using the ICMP pinging stuff, do direct fetches for sites +# which are no more than this many hops away. +# +#Default: +# minimum_direct_hops 4 + +# TAG: minimum_direct_rtt +# If using the ICMP pinging stuff, do direct fetches for sites +# which are no more than this many rtt milliseconds away. +# +#Default: +# minimum_direct_rtt 400 + +# TAG: cachemgr_passwd +# Specify passwords for cachemgr operations. +# +# Usage: cachemgr_passwd password action action ... +# +# Some valid actions are (see cache manager menu for a full list): +# 5min +# 60min +# asndb +# authenticator +# cbdata +# client_list +# comm_incoming +# config * +# counters +# delay +# digest_stats +# dns +# events +# filedescriptors +# fqdncache +# histograms +# http_headers +# info +# io +# ipcache +# mem +# menu +# netdb +# non_peers +# objects +# offline_toggle * +# pconn +# peer_select +# redirector +# refresh +# server_list +# shutdown * +# store_digest +# storedir +# utilization +# via_headers +# vm_objects +# +# * Indicates actions which will not be performed without a +# valid password, others can be performed if not listed here. +# +# To disable an action, set the password to "disable". +# To allow performing an action without a password, set the +# password to "none". +# +# Use the keyword "all" to set the same password for all actions. +# +#Example: +# cachemgr_passwd secret shutdown +# cachemgr_passwd lesssssssecret info stats/objects +# cachemgr_passwd disable all +# +#Default: +# none + +# TAG: store_avg_object_size (kbytes) +# Average object size, used to estimate number of objects your +# cache can hold. See doc/Release-Notes-1.1.txt. The default is +# 13 KB. +# +#Default: +# store_avg_object_size 13 KB + +# TAG: store_objects_per_bucket +# Target number of objects per bucket in the store hash table. +# Lowering this value increases the total number of buckets and +# also the storage maintenance rate. The default is 50. +# +#Default: +# store_objects_per_bucket 20 + +# TAG: client_db on|off +# If you want to disable collecting per-client statistics, +# turn off client_db here. +# +#Default: +# client_db on + +# TAG: netdb_low +# TAG: netdb_high +# The low and high water marks for the ICMP measurement +# database. These are counts, not percents. The defaults are +# 900 and 1000. When the high water mark is reached, database +# entries will be deleted until the low mark is reached. +# +#Default: +# netdb_low 900 +# netdb_high 1000 + +# TAG: netdb_ping_period +# The minimum period for measuring a site. There will be at +# least this much delay between successive pings to the same +# network. The default is five minutes. +# +#Default: +# netdb_ping_period 5 minutes + +# TAG: query_icmp on|off +# If you want to ask your peers to include ICMP data in their ICP +# replies, enable this option. +# +# If your peer has configured Squid (during compilation) with +# '--enable-icmp' that peer will send ICMP pings to origin server +# sites of the URLs it receives. If you enable this option the +# ICP replies from that peer will include the ICMP data (if available). +# Then, when choosing a parent cache, Squid will choose the parent with +# the minimal RTT to the origin server. When this happens, the +# hierarchy field of the access.log will be +# "CLOSEST_PARENT_MISS". This option is off by default. +# +#Default: +# query_icmp off + +# TAG: test_reachability on|off +# When this is 'on', ICP MISS replies will be ICP_MISS_NOFETCH +# instead of ICP_MISS if the target host is NOT in the ICMP +# database, or has a zero RTT. +# +#Default: +# test_reachability off + +# TAG: buffered_logs on|off +# cache.log log file is written with stdio functions, and as such +# it can be buffered or unbuffered. By default it will be unbuffered. +# Buffering it can speed up the writing slightly (though you are +# unlikely to need to worry unless you run with tons of debugging +# enabled in which case performance will suffer badly anyway..). +# +#Default: +# buffered_logs off + +# TAG: reload_into_ims on|off +# When you enable this option, client no-cache or ``reload'' +# requests will be changed to If-Modified-Since requests. +# Doing this VIOLATES the HTTP standard. Enabling this +# feature could make you liable for problems which it +# causes. +# +# see also refresh_pattern for a more selective approach. +# +#Default: +# reload_into_ims off + +# TAG: always_direct +# Usage: always_direct allow|deny [!]aclname ... +# +# Here you can use ACL elements to specify requests which should +# ALWAYS be forwarded directly to origin servers. For example, +# to always directly forward requests for local servers use +# something like: +# +# acl local-servers dstdomain my.domain.net +# always_direct allow local-servers +# +# To always forward FTP requests directly, use +# +# acl FTP proto FTP +# always_direct allow FTP +# +# NOTE: There is a similar, but opposite option named +# 'never_direct'. You need to be aware that "always_direct deny +# foo" is NOT the same thing as "never_direct allow foo". You +# may need to use a deny rule to exclude a more-specific case of +# some other rule. Example: +# +# acl local-external dstdomain external.foo.net +# acl local-servers dstdomain .foo.net +# always_direct deny local-external +# always_direct allow local-servers +# +# This option replaces some v1.1 options such as local_domain +# and local_ip. +# +#Default: +# none + +# TAG: never_direct +# Usage: never_direct allow|deny [!]aclname ... +# +# never_direct is the opposite of always_direct. Please read +# the description for always_direct if you have not already. +# +# With 'never_direct' you can use ACL elements to specify +# requests which should NEVER be forwarded directly to origin +# servers. For example, to force the use of a proxy for all +# requests, except those in your local domain use something like: +# +# acl local-servers dstdomain .foo.net +# acl all src 0.0.0.0/0.0.0.0 +# never_direct deny local-servers +# never_direct allow all +# +# or if Squid is inside a firewall and there are local intranet +# servers inside the firewall use something like: +# +# acl local-intranet dstdomain .foo.net +# acl local-external dstdomain external.foo.net +# always_direct deny local-external +# always_direct allow local-intranet +# never_direct allow all +# +# This option replaces some v1.1 options such as inside_firewall +# and firewall_ip. +# +#Default: +# none + +# TAG: header_access +# Usage: header_access header_name allow|deny [!]aclname ... +# +# WARNING: Doing this VIOLATES the HTTP standard. Enabling +# this feature could make you liable for problems which it +# causes. +# +# This option replaces the old 'anonymize_headers' and the +# older 'http_anonymizer' option with something that is much +# more configurable. This new method creates a list of ACLs +# for each header, allowing you very fine-tuned header +# mangling. +# +# You can only specify known headers for the header name. +# Other headers are reclassified as 'Other'. You can also +# refer to all the headers with 'All'. +# +# For example, to achieve the same behaviour as the old +# 'http_anonymizer standard' option, you should use: +# +# header_access From deny all +# header_access Referer deny all +# header_access Server deny all +# header_access User-Agent deny all +# header_access WWW-Authenticate deny all +# header_access Link deny all +# +# Or, to reproduce the old 'http_anonymizer paranoid' feature +# you should use: +# +# header_access Allow allow all +# header_access Authorization allow all +# header_access WWW-Authenticate allow all +# header_access Cache-Control allow all +# header_access Content-Encoding allow all +# header_access Content-Length allow all +# header_access Content-Type allow all +# header_access Date allow all +# header_access Expires allow all +# header_access Host allow all +# header_access If-Modified-Since allow all +# header_access Last-Modified allow all +# header_access Location allow all +# header_access Pragma allow all +# header_access Accept allow all +# header_access Accept-Charset allow all +# header_access Accept-Encoding allow all +# header_access Accept-Language allow all +# header_access Content-Language allow all +# header_access Mime-Version allow all +# header_access Retry-After allow all +# header_access Title allow all +# header_access Connection allow all +# header_access Proxy-Connection allow all +# header_access All deny all +# +# By default, all headers are allowed (no anonymizing is +# performed). +# +#Default: +# none + +# TAG: header_replace +# Usage: header_replace header_name message +# Example: header_replace User-Agent Nutscrape/1.0 (CP/M; 8-bit) +# +# This option allows you to change the contents of headers +# denied with header_access above, by replacing them with +# some fixed string. This replaces the old fake_user_agent +# option. +# +# By default, headers are removed if denied. +# +#Default: +# none + +# TAG: icon_directory +# Where the icons are stored. These are normally kept in +# /usr/share/squid/icons +# +#Default: +# icon_directory /usr/share/squid/icons + +# TAG: short_icon_urls +# If this is enabled Squid will use short URLs for icons. +# +# If off the URLs for icons will always be absolute URLs +# including the proxy name and port. +# +#Default: +# short_icon_urls off + +# TAG: error_directory +# If you wish to create your own versions of the default +# (English) error files, either to customize them to suit your +# language or company copy the template English files to another +# directory and point this tag at them. +# +#Default: +# error_directory /usr/share/squid/errors/English + +# TAG: maximum_single_addr_tries +# This sets the maximum number of connection attempts for a +# host that only has one address (for multiple-address hosts, +# each address is tried once). +# +# The default value is one attempt, the (not recommended) +# maximum is 255 tries. A warning message will be generated +# if it is set to a value greater than ten. +# +# Note: This is in addition to the request reforwarding which +# takes place if Squid fails to get a satisfying response. +# +#Default: +# maximum_single_addr_tries 1 + +# TAG: retry_on_error +# If set to on Squid will automatically retry requests when +# receiving an error response. This is mainly useful if you +# are in a complex cache hierarchy to work around access +# control errors. +# +#Default: +# retry_on_error off + +# TAG: snmp_port +# Squid can now serve statistics and status information via SNMP. +# By default it listens to port 3401 on the machine. If you don't +# wish to use SNMP, set this to "0". +# +# Note: on Debian/Linux, the default is zero - you need to +# set it to 3401 to enable it. +# +#Default: +# snmp_port 0 + +# TAG: snmp_access +# Allowing or denying access to the SNMP port. +# +# All access to the agent is denied by default. +# usage: +# +# snmp_access allow|deny [!]aclname ... +# +#Example: +# snmp_access allow snmppublic localhost +# snmp_access deny all +# +#Default: +# snmp_access deny all + +# TAG: snmp_incoming_address +# TAG: snmp_outgoing_address +# Just like 'udp_incoming_address' above, but for the SNMP port. +# +# snmp_incoming_address is used for the SNMP socket receiving +# messages from SNMP agents. +# snmp_outgoing_address is used for SNMP packets returned to SNMP +# agents. +# +# The default snmp_incoming_address (0.0.0.0) is to listen on all +# available network interfaces. +# +# If snmp_outgoing_address is set to 255.255.255.255 (the default) +# it will use the same socket as snmp_incoming_address. Only +# change this if you want to have SNMP replies sent using another +# address than where this Squid listens for SNMP queries. +# +# NOTE, snmp_incoming_address and snmp_outgoing_address can not have +# the same value since they both use port 3401. +# +#Default: +# snmp_incoming_address 0.0.0.0 +# snmp_outgoing_address 255.255.255.255 + +# TAG: as_whois_server +# WHOIS server to query for AS numbers. NOTE: AS numbers are +# queried only when Squid starts up, not for every request. +# +#Default: +# as_whois_server whois.ra.net +# as_whois_server whois.ra.net + +# TAG: wccp_router +# Use this option to define your WCCP ``home'' router for +# Squid. Setting the 'wccp_router' to 0.0.0.0 (the default) +# disables WCCP. +# +#Default: +# wccp_router 0.0.0.0 + +# TAG: wccp_version +# According to some users, Cisco IOS 11.2 only supports WCCP +# version 3. If you're using that version of IOS, change +# this value to 3. +# +#Default: +# wccp_version 4 + +# TAG: wccp_incoming_address +# TAG: wccp_outgoing_address +# wccp_incoming_address Use this option if you require WCCP +# messages to be received on only one +# interface. Do NOT use this option if +# you're unsure how many interfaces you +# have, or if you know you have only one +# interface. +# +# wccp_outgoing_address Use this option if you require WCCP +# messages to be sent out on only one +# interface. Do NOT use this option if +# you're unsure how many interfaces you +# have, or if you know you have only one +# interface. +# +# The default behavior is to not bind to any specific address. +# +# NOTE, wccp_incoming_address and wccp_outgoing_address can not have +# the same value since they both use port 2048. +# +#Default: +# wccp_incoming_address 0.0.0.0 +# wccp_outgoing_address 255.255.255.255 + + +# DELAY POOL PARAMETERS (all require DELAY_POOLS compilation option) +# ----------------------------------------------------------------------------- + +# TAG: delay_pools +# This represents the number of delay pools to be used. For example, +# if you have one class 2 delay pool and one class 3 delays pool, you +# have a total of 2 delay pools. +# +#Default: +# delay_pools 1 + +# TAG: delay_class +# This defines the class of each delay pool. There must be exactly one +# delay_class line for each delay pool. For example, to define two +# delay pools, one of class 2 and one of class 3, the settings above +# and here would be: +# +#Example: +# delay_pools 2 # 2 delay pools +# delay_class 1 2 # pool 1 is a class 2 pool +# delay_class 2 3 # pool 2 is a class 3 pool +# +# The delay pool classes are: +# +# class 1 Everything is limited by a single aggregate +# bucket. +# +# class 2 Everything is limited by a single aggregate +# bucket as well as an "individual" bucket chosen +# from bits 25 through 32 of the IP address. +# +# class 3 Everything is limited by a single aggregate +# bucket as well as a "network" bucket chosen +# from bits 17 through 24 of the IP address and a +# "individual" bucket chosen from bits 17 through +# 32 of the IP address. +# +# NOTE: If an IP address is a.b.c.d +# -> bits 25 through 32 are "d" +# -> bits 17 through 24 are "c" +# -> bits 17 through 32 are "c * 256 + d" +# +#Default: +# none +# delay_class 1 1 +#delay_class 1 3 + +# TAG: delay_access +# This is used to determine which delay pool a request falls into. +# The first matched delay pool is always used, i.e., if a request falls +# into delay pool number one, no more delay are checked, otherwise the +# rest are checked in order of their delay pool number until they have +# all been checked. For example, if you want some_big_clients in delay +# pool 1 and lotsa_little_clients in delay pool 2: +# +#Example: +# delay_access 1 allow some_big_clients +# delay_access 1 deny all +# delay_access 2 allow lotsa_little_clients +# delay_access 2 deny all +# +#Default: +# none +# delay_access 1 allow all + +# TAG: delay_parameters +# This defines the parameters for a delay pool. Each delay pool has +# a number of "buckets" associated with it, as explained in the +# description of delay_class. For a class 1 delay pool, the syntax is: +# +#delay_parameters pool aggregate +# +# For a class 2 delay pool: +# +#delay_parameters pool aggregate individual +# +# For a class 3 delay pool: +# +#delay_parameters pool aggregate network individual +# +# The variables here are: +# +# pool a pool number - ie, a number between 1 and the +# number specified in delay_pools as used in +# delay_class lines. +# +# aggregate the "delay parameters" for the aggregate bucket +# (class 1, 2, 3). +# +# individual the "delay parameters" for the individual +# buckets (class 2, 3). +# +# network the "delay parameters" for the network buckets +# (class 3). +# +# A pair of delay parameters is written restore/maximum, where restore is +# the number of bytes (not bits - modem and network speeds are usually +# quoted in bits) per second placed into the bucket, and maximum is the +# maximum number of bytes which can be in the bucket at any time. +# +# For example, if delay pool number 1 is a class 2 delay pool as in the +# above example, and is being used to strictly limit each host to 64kbps +# (plus overheads), with no overall limit, the line is: +# +#delay_parameters 1 -1/-1 8000/8000 +# +# Note that the figure -1 is used to represent "unlimited". +# +# And, if delay pool number 2 is a class 3 delay pool as in the above +# example, and you want to limit it to a total of 256kbps (strict limit) +# with each 8-bit network permitted 64kbps (strict limit) and each +# individual host permitted 4800bps with a bucket maximum size of 64kb +# to permit a decent web page to be downloaded at a decent speed +# (if the network is not being limited due to overuse) but slow down +# large downloads more significantly: +# +#delay_parameters 2 32000/32000 8000/8000 600/8000 +# +# There must be one delay_parameters line for each delay pool. +# +#Default: +# none +#delay_parameters 1 375000/375000 275000/275000 64000/64000 + +# TAG: delay_initial_bucket_level (percent, 0-100) +# The initial bucket percentage is used to determine how much is put +# in each bucket when squid starts, is reconfigured, or first notices +# a host accessing it (in class 2 and class 3, individual hosts and +# networks only have buckets associated with them once they have been +# "seen" by squid). +# +#Default: +# delay_initial_bucket_level 50 + +# TAG: incoming_icp_average +# TAG: incoming_http_average +# TAG: incoming_dns_average +# TAG: min_icp_poll_cnt +# TAG: min_dns_poll_cnt +# TAG: min_http_poll_cnt +# Heavy voodoo here. I can't even believe you are reading this. +# Are you crazy? Don't even think about adjusting these unless +# you understand the algorithms in comm_select.c first! +# +#Default: +# incoming_icp_average 6 +# incoming_http_average 4 +# incoming_dns_average 4 +# min_icp_poll_cnt 8 +# min_dns_poll_cnt 8 +# min_http_poll_cnt 8 + +# TAG: max_open_disk_fds +# To avoid having disk as the I/O bottleneck Squid can optionally +# bypass the on-disk cache if more than this amount of disk file +# descriptors are open. +# +# A value of 0 indicates no limit. +# +#Default: +# max_open_disk_fds 0 + +# TAG: offline_mode +# Enable this option and Squid will never try to validate cached +# objects. +# +#Default: +# offline_mode off + +# TAG: uri_whitespace +# What to do with requests that have whitespace characters in the +# URI. Options: +# +# strip: The whitespace characters are stripped out of the URL. +# This is the behavior recommended by RFC2396. +# deny: The request is denied. The user receives an "Invalid +# Request" message. +# allow: The request is allowed and the URI is not changed. The +# whitespace characters remain in the URI. Note the +# whitespace is passed to redirector processes if they +# are in use. +# encode: The request is allowed and the whitespace characters are +# encoded according to RFC1738. This could be considered +# a violation of the HTTP/1.1 +# RFC because proxies are not allowed to rewrite URI's. +# chop: The request is allowed and the URI is chopped at the +# first whitespace. This might also be considered a +# violation. +# +#Default: +# uri_whitespace strip + +# TAG: broken_posts +# A list of ACL elements which, if matched, causes Squid to send +# an extra CRLF pair after the body of a PUT/POST request. +# +# Some HTTP servers has broken implementations of PUT/POST, +# and rely on an extra CRLF pair sent by some WWW clients. +# +# Quote from RFC 2068 section 4.1 on this matter: +# +# Note: certain buggy HTTP/1.0 client implementations generate an +# extra CRLF's after a POST request. To restate what is explicitly +# forbidden by the BNF, an HTTP/1.1 client must not preface or follow +# a request with an extra CRLF. +# +#Example: +# acl buggy_server url_regex ^http://.... +# broken_posts allow buggy_server +# +#Default: +# none + +# TAG: mcast_miss_addr +# Note: This option is only available if Squid is rebuilt with the +# -DMULTICAST_MISS_STREAM option +# +# If you enable this option, every "cache miss" URL will +# be sent out on the specified multicast address. +# +# Do not enable this option unless you are are absolutely +# certain you understand what you are doing. +# +#Default: +# mcast_miss_addr 255.255.255.255 + +# TAG: mcast_miss_ttl +# Note: This option is only available if Squid is rebuilt with the +# -DMULTICAST_MISS_TTL option +# +# This is the time-to-live value for packets multicasted +# when multicasting off cache miss URLs is enabled. By +# default this is set to 'site scope', i.e. 16. +# +#Default: +# mcast_miss_ttl 16 + +# TAG: mcast_miss_port +# Note: This option is only available if Squid is rebuilt with the +# -DMULTICAST_MISS_STREAM option +# +# This is the port number to be used in conjunction with +# 'mcast_miss_addr'. +# +#Default: +# mcast_miss_port 3135 + +# TAG: mcast_miss_encode_key +# Note: This option is only available if Squid is rebuilt with the +# -DMULTICAST_MISS_STREAM option +# +# The URLs that are sent in the multicast miss stream are +# encrypted. This is the encryption key. +# +#Default: +# mcast_miss_encode_key XXXXXXXXXXXXXXXX + +# TAG: nonhierarchical_direct +# By default, Squid will send any non-hierarchical requests +# (matching hierarchy_stoplist or not cachable request type) direct +# to origin servers. +# +# If you set this to off, Squid will prefer to send these +# requests to parents. +# +# Note that in most configurations, by turning this off you will only +# add latency to these request without any improvement in global hit +# ratio. +# +# If you are inside an firewall see never_direct instead of +# this directive. +# +#Default: +# nonhierarchical_direct on + +# TAG: prefer_direct +# Normally Squid tries to use parents for most requests. If you for some +# reason like it to first try going direct and only use a parent if +# going direct fails set this to on. +# +# By combining nonhierarchical_direct off and prefer_direct on you +# can set up Squid to use a parent as a backup path if going direct +# fails. +# +# Note: If you want Squid to use parents for all requests see +# the never_direct directive. prefer_direct only modifies how Squid +# acts on cachable requests. +# +#Default: +# prefer_direct off + +# TAG: strip_query_terms +# By default, Squid strips query terms from requested URLs before +# logging. This protects your user's privacy. +# +#Default: +# strip_query_terms on + +# TAG: coredump_dir +# By default Squid leaves core files in the directory from where +# it was started. If you set 'coredump_dir' to a directory +# that exists, Squid will chdir() to that directory at startup +# and coredump files will be left there. +# +#Default: +# coredump_dir none +# +# Leave coredumps in the first cache dir +coredump_dir /var/spool/squid + +# TAG: redirector_bypass +# When this is 'on', a request will not go through the +# redirector if all redirectors are busy. If this is 'off' +# and the redirector queue grows too large, Squid will exit +# with a FATAL error and ask you to increase the number of +# redirectors. You should only enable this if the redirectors +# are not critical to your caching system. If you use +# redirectors for access control, and you enable this option, +# users may have access to pages they should not +# be allowed to request. +# +#Default: +# redirector_bypass off + +# TAG: ignore_unknown_nameservers +# By default Squid checks that DNS responses are received +# from the same IP addresses they are sent to. If they +# don't match, Squid ignores the response and writes a warning +# message to cache.log. You can allow responses from unknown +# nameservers by setting this option to 'off'. +# +#Default: +# ignore_unknown_nameservers on + +# TAG: digest_generation +# This controls whether the server will generate a Cache Digest +# of its contents. By default, Cache Digest generation is +# enabled if Squid is compiled with USE_CACHE_DIGESTS defined. +# +#Default: +# digest_generation on + +# TAG: digest_bits_per_entry +# This is the number of bits of the server's Cache Digest which +# will be associated with the Digest entry for a given HTTP +# Method and URL (public key) combination. The default is 5. +# +#Default: +# digest_bits_per_entry 5 + +# TAG: digest_rebuild_period (seconds) +# This is the number of seconds between Cache Digest rebuilds. +# +#Default: +# digest_rebuild_period 1 hour + +# TAG: digest_rewrite_period (seconds) +# This is the number of seconds between Cache Digest writes to +# disk. +# +#Default: +# digest_rewrite_period 1 hour + +# TAG: digest_swapout_chunk_size (bytes) +# This is the number of bytes of the Cache Digest to write to +# disk at a time. It defaults to 4096 bytes (4KB), the Squid +# default swap page. +# +#Default: +# digest_swapout_chunk_size 4096 bytes + +# TAG: digest_rebuild_chunk_percentage (percent, 0-100) +# This is the percentage of the Cache Digest to be scanned at a +# time. By default it is set to 10% of the Cache Digest. +# +#Default: +# digest_rebuild_chunk_percentage 10 + +# TAG: chroot +# Use this to have Squid do a chroot() while initializing. This +# also causes Squid to fully drop root privileges after +# initializing. This means, for example, that if you use a HTTP +# port less than 1024 and try to reconfigure, you will get an +# error. +# +#Default: +# none + +# TAG: client_persistent_connections +# TAG: server_persistent_connections +# Persistent connection support for clients and servers. By +# default, Squid uses persistent connections (when allowed) +# with its clients and servers. You can use these options to +# disable persistent connections with clients and/or servers. +# +#Default: +# client_persistent_connections on +# server_persistent_connections on + +# TAG: detect_broken_pconn +# Some servers have been found to incorrectly signal the use +# of HTTP/1.0 persistent connections even on replies not +# compatible, causing significant delays. This server problem +# has mostly been seen on redirects. +# +# By enabling this directive Squid attempts to detect such +# broken replies and automatically assume the reply is finished +# after 10 seconds timeout. +# +#Default: +# detect_broken_pconn off + +# TAG: balance_on_multiple_ip +# Some load balancing servers based on round robin DNS have been +# found not to preserve user session state across requests +# to different IP addresses. +# +# By default Squid rotates IP's per request. By disabling +# this directive only connection failure trigers rotation. +# +#Default: +# balance_on_multiple_ip on + +# TAG: pipeline_prefetch +# To boost the performance of pipelined requests to closer +# match that of a non-proxied environment Squid can try to fetch +# up to two requests in parallell from a pipeline. +# +# Defaults to off for bandwidth management and access logging +# reasons. +# +#Default: +# pipeline_prefetch off +pipeline_prefetch on + +# TAG: extension_methods +# Squid only knows about standardized HTTP request methods. +# You can add up to 20 additional "extension" methods here. +# +#Default: +# none + +# TAG: request_entities +# Squid defaults to deny GET and HEAD requests with request entities, +# as the meaning of such requests are undefined in the HTTP standard +# even if not explicitly forbidden. +# +# Set this directive to on if you have clients which insists +# on sending request entities in GET or HEAD requests. But be warned +# that there is server software (both proxies and web servers) which +# can fail to properly process this kind of request which may make you +# vulnerable to cache pollution attacks if enabled. +# +#Default: +# request_entities off + +# TAG: high_response_time_warning (msec) +# If the one-minute median response time exceeds this value, +# Squid prints a WARNING with debug level 0 to get the +# administrators attention. The value is in milliseconds. +# +#Default: +# high_response_time_warning 0 + +# TAG: high_page_fault_warning +# If the one-minute average page fault rate exceeds this +# value, Squid prints a WARNING with debug level 0 to get +# the administrators attention. The value is in page faults +# per second. +# +#Default: +# high_page_fault_warning 0 + +# TAG: high_memory_warning +# If the memory usage (as determined by mallinfo) exceeds +# value, Squid prints a WARNING with debug level 0 to get +# the administrators attention. +# +#Default: +# high_memory_warning 0 + +# TAG: store_dir_select_algorithm +# Set this to 'round-robin' as an alternative. +# +#Default: +# store_dir_select_algorithm least-load + +# TAG: forward_log +# Note: This option is only available if Squid is rebuilt with the +# -DWIP_FWD_LOG option +# +# Logs the server-side requests. +# +# This is currently work in progress. +# +#Default: +# none + +# TAG: ie_refresh on|off +# Microsoft Internet Explorer up until version 5.5 Service +# Pack 1 has an issue with transparent proxies, wherein it +# is impossible to force a refresh. Turning this on provides +# a partial fix to the problem, by causing all IMS-REFRESH +# requests from older IE versions to check the origin server +# for fresh content. This reduces hit ratio by some amount +# (~10% in my experience), but allows users to actually get +# fresh content when they want it. Note that because Squid +# cannot tell if the user is using 5.5 or 5.5SP1, the behavior +# of 5.5 is unchanged from old versions of Squid (i.e. a +# forced refresh is impossible). Newer versions of IE will, +# hopefully, continue to have the new behavior and will be +# handled based on that assumption. This option defaults to +# the old Squid behavior, which is better for hit ratios but +# worse for clients using IE, if they need to be able to +# force fresh content. +# +#Default: + ie_refresh off + +# TAG: vary_ignore_expire on|off +# Many HTTP servers supporting Vary gives such objects +# immediate expiry time with no cache-control header +# when requested by a HTTP/1.0 client. This option +# enables Squid to ignore such expiry times until +# HTTP/1.1 is fully implemented. +# WARNING: This may eventually cause some varying +# objects not intended for caching to get cached. +# +#Default: +# vary_ignore_expire off +vary_ignore_expire on + +# TAG: sleep_after_fork (microseconds) +# When this is set to a non-zero value, the main Squid process +# sleeps the specified number of microseconds after a fork() +# system call. This sleep may help the situation where your +# system reports fork() failures due to lack of (virtual) +# memory. Note, however, that if you have a lot of child +# processes, these sleep delays will add up and your +# Squid will not service requests for some amount of time +# until all the child processes have been started. +# +#Default: +# sleep_after_fork 0 + +# TAG: relaxed_header_parser on|off|warn +# In the default "on" setting Squid accepts certain forms +# of non-compliant HTTP messages where it is unambiguous +# what the sending application intended even if the message +# is not correctly formatted. The messages is then normalized +# to the correct form when forwarded by Squid. +# +# If set to "warn" then a warning will be emitted in cache.log +# each time such HTTP error is encountered. +# +# If set to "off" then such HTTP errors will cause the request +# or response to be rejected. +# +#Default: +# relaxed_header_parser on + diff --git a/noc/configs/sudoers b/noc/configs/sudoers new file mode 100644 index 0000000..ed3b4ad --- /dev/null +++ b/noc/configs/sudoers @@ -0,0 +1,16 @@ +# /etc/sudoers +# +# This file MUST be edited with the 'visudo' command as root. +# +# See the man page for details on how to write a sudoers file. +# + +# Host alias specification + +# User alias specification + +# Cmnd alias specification + +# User privilege specification +root ALL=(ALL) ALL +noc ALL=(ALL) ALL diff --git a/noc/configs/sysctl.conf b/noc/configs/sysctl.conf new file mode 100644 index 0000000..4569e1c --- /dev/null +++ b/noc/configs/sysctl.conf @@ -0,0 +1,26 @@ +# +# /etc/sysctl.conf - Configuration file for setting system variables +# See sysctl.conf (5) for information. +# +# Be warned that /etc/init.d/procps is executed to set the following +# variables. However, after that, /etc/init.d/networking sets some +# network options with builtin values. These values may be overridden +# using /etc/network/options. + +#kernel.domainname = example.com +#net/ipv4/icmp_echo_ignore_broadcasts=1 +/proc/sys/net/ipv6/conf/all/forwarding=1 +/proc/sys/net/ipv6/conf/default/forwarding=1 +vm.swappiness = 0 +net.ipv4.tcp_rmem=4096 87380 174760 +net.ipv4.tcp_wmem=4096 16384 131072 +net.core.somaxconn=1024 +net.ipv4.tcp_max_syn_backlog=1024 +net.ipv4.tcp_moderate_rcvbuf=1 +vm.vfs_cache_pressure=100 +vm.overcommit_ratio=0 +vm.dirty_background_ratio=2 +vm.dirty_ratio=6 +vm.dirty_writeback_centisecs=250 +vm.dirty_expire_centisecs=1000 +vm.min_free_kbytes=16384 diff --git a/noc/configs/syslog.conf b/noc/configs/syslog.conf new file mode 100644 index 0000000..ed3a7f5 --- /dev/null +++ b/noc/configs/syslog.conf @@ -0,0 +1,73 @@ +# /etc/syslog.conf Configuration file for syslogd. +# +# For more information see syslog.conf(5) +# manpage. + +# +# First some standard logfiles. Log by facility. +# + +auth,authpriv.* /var/log/auth.log +#*.*;auth,authpriv.none -/var/log/syslog +*.* -/var/log/syslog +#cron.* /var/log/cron.log +daemon.* -/var/log/daemon.log +kern.* -/var/log/kern.log +lpr.* -/var/log/lpr.log +mail.* -/var/log/mail.log +user.* -/var/log/user.log +uucp.* /var/log/uucp.log + +# +# Logging for the mail system. Split it up so that +# it is easy to write scripts to parse these files. +# +mail.info -/var/log/mail.info +mail.warn -/var/log/mail.warn +mail.err /var/log/mail.err + +# Logging for INN news system +# +news.crit /var/log/news/news.crit +news.err /var/log/news/news.err +news.notice -/var/log/news/news.notice + +# +# Some `catch-all' logfiles. +# +*.=debug;\ + auth,authpriv.none;\ + news.none;mail.none -/var/log/debug +*.=info;*.=notice;*.=warn;\ + auth,authpriv.none;\ + cron,daemon.none;\ + mail,news.none -/var/log/messages + +# +# Emergencies are sent to everybody logged in. +# +*.emerg * + +# +# I like to have messages displayed on the console, but only on a virtual +# console I usually leave idle. +# +#daemon,mail.*;\ +# news.=crit;news.=err;news.=notice;\ +# *.=debug;*.=info;\ +# *.=notice;*.=warn /dev/tty8 + +# The named pipe /dev/xconsole is for the `xconsole' utility. To use it, +# you must invoke `xconsole' with the `-file' option: +# +# $ xconsole -file /dev/xconsole [...] +# +# NOTE: adjust the list below, or you'll go crazy if you have a reasonably +# busy site.. +# +daemon.*;mail.*;\ + news.crit;news.err;news.notice;\ + *.=debug;*.=info;\ + *.=notice;*.=warn |/dev/xconsole + +#*.* /dev/tty1 diff --git a/noc/configs/tinc/chaos.first/rsa_key.priv b/noc/configs/tinc/chaos.first/rsa_key.priv new file mode 100644 index 0000000..e75000b --- /dev/null +++ b/noc/configs/tinc/chaos.first/rsa_key.priv @@ -0,0 +1,15 @@ +-----BEGIN RSA PRIVATE KEY----- +MIICXAIBAAKBgQCfFAeEtiohbBCOuH3yuJHBtPN2OHM+uJZJSqAdYAO9tFSPsJ7I +lCQFxRIL673GbhqkkzzOWiljDEZZay4wX9GzTaTuuvxrjfhdDvabfEOPTRfOu7jV +/ihzbhZtXaY7oH9wyKb825lhN4t1gGFN8nfc9ywQNSLmdtat9VmrqfjDzQIDAQAB +AoGAJ2KsId2APNoml09yT4AHBnCovqJnViYZf3fsgJlfE77sGM9f4MVczdjnCPCL +AfAMxKZ3rZeBG7bUTBtPSkbPAjPJ//zT4kNWFLZC93HdzSeeEmSCF+vE7L6xjzku +fwpx/8J9LMLlp96BLtlfPXk4gDA+q858EW0Q1prQBQV7GEECQQDODY9qaVcU3cv2 +/wNeTuWve8wARDKiC2ucFE2RzvDnpcuR+Am5dkfUTTlJTf/Ffdc2M4E7YfwAa1J9 +IAcilM3lAkEAxaN+IVb7vy4xWjx7W5/sVKLz1FgjSHkpNfeuWMxm8sR4HWTHBPFb +hd+E+HhkWeD6Sa6gP8ZIEPfXnBexYRz/yQJBAKU7xofklUpMWiVldgQIbLN+KKcG +CTxcwBxXQ6TrN8/q6gXRy6qHqS4cBxY7kCGEujHit30xI+4KIgnoxw/6F+kCQGh2 +kiRtJYNXlx5q+YjkbrYNq3OBYqTb5bxwveaRo5iN4C8pJUinigiorE/o0qHvGFv5 +wRn0ZAMT/RK0Mz1xZoECQBwOMieJcswrcI2OgY3Ejw+nLf5u4ZbahRFrnHWT0FoN +hBW4Dff5jso/K+weYETZUpdwWb9jv8+4ULGt1wiJ8sc= +-----END RSA PRIVATE KEY----- diff --git a/noc/configs/tinc/chaos.first/rsa_key.pub b/noc/configs/tinc/chaos.first/rsa_key.pub new file mode 100644 index 0000000..f9bd06d --- /dev/null +++ b/noc/configs/tinc/chaos.first/rsa_key.pub @@ -0,0 +1,5 @@ +-----BEGIN RSA PUBLIC KEY----- +MIGJAoGBAJ8UB4S2KiFsEI64ffK4kcG083Y4cz64lklKoB1gA720VI+wnsiUJAXF +EgvrvcZuGqSTPM5aKWMMRllrLjBf0bNNpO66/GuN+F0O9pt8Q49NF867uNX+KHNu +Fm1dpjugf3DIpvzbmWE3i3WAYU3yd9z3LBA1IuZ21q31Waup+MPNAgMBAAE= +-----END RSA PUBLIC KEY----- diff --git a/noc/configs/tinc/chaos.old/hosts/alioshome b/noc/configs/tinc/chaos.old/hosts/alioshome new file mode 100644 index 0000000..ae8e9bc --- /dev/null +++ b/noc/configs/tinc/chaos.old/hosts/alioshome @@ -0,0 +1,14 @@ +Address=alios.dyndns.org +Cipher=blowfish +Compression=0 +Digest=sha1 +IndirectData=yes +Port=655 +Subnet=192.168.8.0/24 +TCPonly=no +-----BEGIN RSA PUBLIC KEY----- +MIGJAoGBAL6nQVPgKAXdt+sFsXR2b/f+DFLJDT7ENuB6fpBdosAI06UIlIov47AT +0hIwhStixzBg1PlKi2QhqRQvGvX6rxWBb2rPU3lsHCOrG4jR+LaPs/fRLMd3nh/K +jiH/QmbM0jn7Foms/Rladp8PJx4ZOFP1ACxnWslE/15BxqynxVeZAgMBAAE= +-----END RSA PUBLIC KEY----- + diff --git a/noc/configs/tinc/chaos.old/hosts/ccchh b/noc/configs/tinc/chaos.old/hosts/ccchh new file mode 100644 index 0000000..ab30148 --- /dev/null +++ b/noc/configs/tinc/chaos.old/hosts/ccchh @@ -0,0 +1,16 @@ +Address=fwhh.hamburg.ccc.de +Cipher=blowfish +Compression=0 +Digest=sha1 +IndirectData=yes +Port=4200 +Subnet=192.168.16.0/23 +Subnet=192.168.20.0/23 +Subnet=192.168.0.64/26 +TCPonly=no +-----BEGIN RSA PUBLIC KEY----- +MIGJAoGBAKH0hS1wybu+D8DF5kOy6dirIlzhdlL0Z26G/S9JPJ4H3keDOdH3tEE/ +81D9S1IiHEkGgLFdJt6PS/mnBPaKInnV4OIS59l9eCZAVg432bb77JMSY0IWibcD +mBZLQFrWTX4Tc8bd0C1UrIslr9PbO5gxEtKSaWsujsah2QOtVaN3AgMBAAE= +-----END RSA PUBLIC KEY----- + diff --git a/noc/configs/tinc/chaos.old/hosts/dew b/noc/configs/tinc/chaos.old/hosts/dew new file mode 100644 index 0000000..e9ea643 --- /dev/null +++ b/noc/configs/tinc/chaos.old/hosts/dew @@ -0,0 +1,14 @@ +Address=home.ainex.net +Cipher=blowfish +Compression=0 +Digest=sha1 +IndirectData=yes +Port=655 +Subnet=192.168.13.0/24 +TCPonly=no +-----BEGIN RSA PUBLIC KEY----- +MIGJAoGBALNiHGhNitniabwXpVRkSkULd5+qS3oLLung9kSD/cwIPgmJEaCLrmdF +iVKcTKYRB7OIc7zv2Ss0eIhUHoD7FzwVYTO1hi/8hqrrUzTC6nN2HU3Rj7+M2724 +ZpE3Q3/my5W2rk6E9MWooWKIMSI5l1Uf6TF3XVhKym3wyk6bg8PXAgMBAAE= +-----END RSA PUBLIC KEY----- + diff --git a/noc/configs/tinc/chaos.old/hosts/eh2005 b/noc/configs/tinc/chaos.old/hosts/eh2005 new file mode 100644 index 0000000..a240909 --- /dev/null +++ b/noc/configs/tinc/chaos.old/hosts/eh2005 @@ -0,0 +1,17 @@ +Address=does.not.exist.example +Cipher=blowfish +Compression=0 +Digest=sha1 +IndirectData=yes +Port=655 +Subnet=172.16.0.0/22 +Subnet=172.16.4.0/22 +Subnet=172.16.42.0/24 +Subnet=10.112.0.0/12 +TCPonly=no +-----BEGIN RSA PUBLIC KEY----- +MIGJAoGBAJ8UB4S2KiFsEI64ffK4kcG083Y4cz64lklKoB1gA720VI+wnsiUJAXF +EgvrvcZuGqSTPM5aKWMMRllrLjBf0bNNpO66/GuN+F0O9pt8Q49NF867uNX+KHNu +Fm1dpjugf3DIpvzbmWE3i3WAYU3yd9z3LBA1IuZ21q31Waup+MPNAgMBAAE= +-----END RSA PUBLIC KEY----- + diff --git a/noc/configs/tinc/chaos.old/hosts/haegarhome b/noc/configs/tinc/chaos.old/hosts/haegarhome new file mode 100644 index 0000000..84c8db7 --- /dev/null +++ b/noc/configs/tinc/chaos.old/hosts/haegarhome @@ -0,0 +1,14 @@ +Address=gate.sdinet.de +Cipher=blowfish +Compression=0 +Digest=sha1 +IndirectData=yes +Port=655 +Subnet=192.168.18.0/23 +TCPonly=no +-----BEGIN RSA PUBLIC KEY----- +MIGJAoGBAMEEsKaNa8fq6+Z31Iy4pNwJub1Ncu1y/+Ngnldh6eC5TlgTsMa1qRfZ +8i+vuNlC8UlXT43vGAdNuP/AJTQgjQWnSt2qlDRQyVE0RkdOnQPecTJckwzcceOv +C76sLaA199ZtPlJl+W7Ft6SMs5UFCBhDpnUUD9GkrLuywHgZ6bpJAgMBAAE= +-----END RSA PUBLIC KEY----- + diff --git a/noc/configs/tinc/chaos.old/hosts/haegarwork b/noc/configs/tinc/chaos.old/hosts/haegarwork new file mode 100644 index 0000000..80e2692 --- /dev/null +++ b/noc/configs/tinc/chaos.old/hosts/haegarwork @@ -0,0 +1,14 @@ +Address=mercury.sdinet.de +Cipher=blowfish +Compression=0 +Digest=sha1 +IndirectData=yes +Port=655 +Subnet=192.168.0.99/32 +TCPonly=no +-----BEGIN RSA PUBLIC KEY----- +MIGJAoGBAJ3k2XMp+ryAsyDlRpTgffZGjSTE4kp2haX3Ax55CN/e7q+IG1yHvK2R +M2v0WHh8e59Hb7IX86J7U6ZOO/7GQ8bkUZD9ntmyRjeIZ4XuF4X8Q5t7zZ6TEm8G +lkh+IiZ3NlFRWdzVNLybQIluJsPIr/7rA3xet9IPUpm8sBgTcbwXAgMBAAE= +-----END RSA PUBLIC KEY----- + diff --git a/noc/configs/tinc/chaos.old/hosts/lardass b/noc/configs/tinc/chaos.old/hosts/lardass new file mode 100644 index 0000000..6521258 --- /dev/null +++ b/noc/configs/tinc/chaos.old/hosts/lardass @@ -0,0 +1,15 @@ +Address=lardass.arles-electrique.de +Cipher=blowfish +Compression=0 +Digest=sha1 +IndirectData=yes +Port=655 +Subnet=10.6.65.0/24 +Subnet=10.6.66.0/24 +TCPonly=no +-----BEGIN RSA PUBLIC KEY----- +MIGJAoGBAMxqMzKqWX4e7mtiRVHnOWTkV7nxwsdgMZVkzx9ATG/9ew1CF6kOHjrq +C4RsWpeuHMiQLUG3xF0Prajh5MXsqS7sP7Zn/6z3t3f1mqDLfBtx2e+6LqBs9j1W +VkNcGI29ibDLYHcdjNejQfwPA+4JKfrq2T0Dzf3xWpMIHrcrLEOXAgMBAAE= +-----END RSA PUBLIC KEY----- + diff --git a/noc/configs/tinc/chaos.old/hosts/packbarthome b/noc/configs/tinc/chaos.old/hosts/packbarthome new file mode 100644 index 0000000..4ffc6aa --- /dev/null +++ b/noc/configs/tinc/chaos.old/hosts/packbarthome @@ -0,0 +1,22 @@ +Address=gw23.formularfetischisten.de +Cipher=blowfish +Compression=0 +Digest=sha1 +IndirectData=yes +Port=655 +Subnet=10.42.0.0/16 +TCPonly=no +-----BEGIN RSA PUBLIC KEY----- +MIICCgKCAgEA7hNnj1THT0JCUPM2gEcF5Mrwj6onlBixFYZnbhNMssNAIhlP5Tvb +7dNWhwnvBtCFCqEW8jnf9sD4+gJcp8vsiWmM8EQMGWuPkqqc+0TCyQKGb7ylbrNM +4n7tzdJX18LEm5TnxQieBinnkYPTkNy8xzgQPe+SwyMwg6ECDIyBwJ5GaeyIjqME +ZuVbvB81GJej2WGqSMlfZPGpGvriDrU0271S7NmAtfbzeuCGzFd877hcDx52YvzT +SDqdFwtO+lEhbfaKzrPS96M3Jj+FyH2NC19NL93Kln4ZDdKZWSzvRwv1loFWDuZ0 +lrZC/Zk/sUSkxM1qQlXAi2wRVnQzl21j0saismra80eKEnv8f0rIbYfJFg4l5PUs +eN7x5AriCR2wSyvuI6SkB7N3QxCSG2OWlTR8jqVd0iCgWum8+jQwvV9jCJBZYgEB +xU85IjfH7yptd39LYJRsQcm58RTco3oO2VTBJ7uQZuIINVPjmp4cIeiF0r4O2WYf +cA8FMX8IbUQAqwAte3J9AtfYcB8nXOsf2uBR+QoEnFf1n2R2vtzSuSTlEeTOD4MJ +qv+4aFqbRMwR/cYTK4krYxJPSk8ZD/boFXcMPc6jud6MjA7PGEw1DKV4lhJ7pPRJ +rgX/xUxmGNhwQEynunP6SWscg/7UFFDqanC/Pv6X7AR2VfmiLpJ66/cCAwEAAQ== +-----END RSA PUBLIC KEY----- + diff --git a/noc/configs/tinc/chaos.old/hosts/pescoheim b/noc/configs/tinc/chaos.old/hosts/pescoheim new file mode 100644 index 0000000..b0ddff8 --- /dev/null +++ b/noc/configs/tinc/chaos.old/hosts/pescoheim @@ -0,0 +1,14 @@ +Address=pesco.dyndns.org +Cipher=blowfish +Compression=0 +Digest=sha1 +IndirectData=yes +Port=655 +Subnet=192.168.9.0/24 +TCPonly=no +-----BEGIN RSA PUBLIC KEY----- +MIGJAoGBAOGdQo3wBi8pDtMe8IstjmWx5kKOKheTOjdPoLX4Qkr9bOhJb7NxalPV +5Ub5BFR51kDafnSPaXtQGMkKgSD6NAXK4LF1Tvsnbr2/za38Zv9YCsoD+HiM9Vz8 +6eO6UpGkvHjXcKHsJbEa9jUnvOOFf7U23UijYgjbrkggckHojTxdAgMBAAE= +-----END RSA PUBLIC KEY----- + diff --git a/noc/configs/tinc/chaos.old/hosts/redbaron b/noc/configs/tinc/chaos.old/hosts/redbaron new file mode 100644 index 0000000..722e4f1 --- /dev/null +++ b/noc/configs/tinc/chaos.old/hosts/redbaron @@ -0,0 +1,14 @@ +Address=redcastle.mine.nu +Cipher=blowfish +Compression=0 +Digest=sha1 +IndirectData=yes +Port=655 +Subnet=10.47.11.0/24 +TCPonly=no +-----BEGIN RSA PUBLIC KEY----- +MIGJAoGBALzcRKUSeEX/qHAJIqDnC+MfYD7F78ftdvOGDvYyzvHpNAlRyMZTea6V +hnxgD3aJSM/MB80XZcdTOHLShYmAehZhfLph82oT0W8bAh+58RUgorYeYit5qvC5 +tNXV/zI8OFCfc08ttmK2Zb0Mqeh13OXzk2Un3gqgWeWauep6wBp1AgMBAAE= +-----END RSA PUBLIC KEY----- + diff --git a/noc/configs/tinc/chaos.old/hosts/turing b/noc/configs/tinc/chaos.old/hosts/turing new file mode 100644 index 0000000..613221b --- /dev/null +++ b/noc/configs/tinc/chaos.old/hosts/turing @@ -0,0 +1,14 @@ +Address=turing.hamburg.ccc.de +Cipher=blowfish +Compression=0 +Digest=sha1 +IndirectData=yes +Port=4200 +Subnet=192.168.0.98/32 +TCPonly=no +-----BEGIN RSA PUBLIC KEY----- +MIGJAoGBAMeWu6JQGmHwalirbG6rSP+wLRNb+9H0wR89PM0s6OulzmRwZYESZXdU +AXiY02+Y9YdkhHZ9b8UGfoL7g6jr3YC1aB5rGU7oOojGUGLO85K4nnd+FxzccY8K +LyCdqkcLudLEP4SmgbKZgsBebR+46CKbnavXZ+l8KLYzQgWfA0kXAgMBAAE= +-----END RSA PUBLIC KEY----- + diff --git a/noc/configs/tinc/chaos.old/hosts/znet b/noc/configs/tinc/chaos.old/hosts/znet new file mode 100644 index 0000000..bc9be4e --- /dev/null +++ b/noc/configs/tinc/chaos.old/hosts/znet @@ -0,0 +1,14 @@ +Address=prometheus.datenknoten.de +Cipher=blowfish +Compression=0 +Digest=sha1 +IndirectData=yes +Port=655 +Subnet=192.168.23.0/24 +TCPonly=no +-----BEGIN RSA PUBLIC KEY----- +MIGJAoGBAMHRsCzBgOvkCokphctbdX11P6MtwWIhaTHmI8BHhDN73Ch384KTFdqA +gGsDkp2QoH2PvFRolOi1NjFuSSJfcGJdvEGa4R/bMhUF2LWTO2VIr3JIA0VsRS+8 +LXe+GpXURFgb9/cenjdzKWYLeksT1g/Y6MAgsl1MAdGFmOtNFc+zAgMBAAE= +-----END RSA PUBLIC KEY----- + diff --git a/noc/configs/tinc/chaos.old/rsa_key.priv b/noc/configs/tinc/chaos.old/rsa_key.priv new file mode 100644 index 0000000..e75000b --- /dev/null +++ b/noc/configs/tinc/chaos.old/rsa_key.priv @@ -0,0 +1,15 @@ +-----BEGIN RSA PRIVATE KEY----- +MIICXAIBAAKBgQCfFAeEtiohbBCOuH3yuJHBtPN2OHM+uJZJSqAdYAO9tFSPsJ7I +lCQFxRIL673GbhqkkzzOWiljDEZZay4wX9GzTaTuuvxrjfhdDvabfEOPTRfOu7jV +/ihzbhZtXaY7oH9wyKb825lhN4t1gGFN8nfc9ywQNSLmdtat9VmrqfjDzQIDAQAB +AoGAJ2KsId2APNoml09yT4AHBnCovqJnViYZf3fsgJlfE77sGM9f4MVczdjnCPCL +AfAMxKZ3rZeBG7bUTBtPSkbPAjPJ//zT4kNWFLZC93HdzSeeEmSCF+vE7L6xjzku +fwpx/8J9LMLlp96BLtlfPXk4gDA+q858EW0Q1prQBQV7GEECQQDODY9qaVcU3cv2 +/wNeTuWve8wARDKiC2ucFE2RzvDnpcuR+Am5dkfUTTlJTf/Ffdc2M4E7YfwAa1J9 +IAcilM3lAkEAxaN+IVb7vy4xWjx7W5/sVKLz1FgjSHkpNfeuWMxm8sR4HWTHBPFb +hd+E+HhkWeD6Sa6gP8ZIEPfXnBexYRz/yQJBAKU7xofklUpMWiVldgQIbLN+KKcG +CTxcwBxXQ6TrN8/q6gXRy6qHqS4cBxY7kCGEujHit30xI+4KIgnoxw/6F+kCQGh2 +kiRtJYNXlx5q+YjkbrYNq3OBYqTb5bxwveaRo5iN4C8pJUinigiorE/o0qHvGFv5 +wRn0ZAMT/RK0Mz1xZoECQBwOMieJcswrcI2OgY3Ejw+nLf5u4ZbahRFrnHWT0FoN +hBW4Dff5jso/K+weYETZUpdwWb9jv8+4ULGt1wiJ8sc= +-----END RSA PRIVATE KEY----- diff --git a/noc/configs/tinc/chaos.old/rsa_key.pub b/noc/configs/tinc/chaos.old/rsa_key.pub new file mode 100644 index 0000000..f9bd06d --- /dev/null +++ b/noc/configs/tinc/chaos.old/rsa_key.pub @@ -0,0 +1,5 @@ +-----BEGIN RSA PUBLIC KEY----- +MIGJAoGBAJ8UB4S2KiFsEI64ffK4kcG083Y4cz64lklKoB1gA720VI+wnsiUJAXF +EgvrvcZuGqSTPM5aKWMMRllrLjBf0bNNpO66/GuN+F0O9pt8Q49NF867uNX+KHNu +Fm1dpjugf3DIpvzbmWE3i3WAYU3yd9z3LBA1IuZ21q31Waup+MPNAgMBAAE= +-----END RSA PUBLIC KEY----- diff --git a/noc/configs/tinc/chaos.old/tinc-up b/noc/configs/tinc/chaos.old/tinc-up new file mode 100755 index 0000000..36a3433 --- /dev/null +++ b/noc/configs/tinc/chaos.old/tinc-up @@ -0,0 +1,16 @@ +#!/bin/sh +/sbin/ifconfig $INTERFACE 172.16.0.1 netmask 255.255.255.255 +/sbin/ip -4 route add 192.168.23.0/24 dev $INTERFACE +/sbin/ip -4 route add 192.168.8.0/24 dev $INTERFACE +/sbin/ip -4 route add 192.168.13.0/24 dev $INTERFACE +/sbin/ip -4 route add 192.168.0.99/32 dev $INTERFACE +/sbin/ip -4 route add 192.168.9.0/24 dev $INTERFACE +/sbin/ip -4 route add 10.6.65.0/24 dev $INTERFACE +/sbin/ip -4 route add 10.6.66.0/24 dev $INTERFACE +/sbin/ip -4 route add 192.168.16.0/23 dev $INTERFACE +/sbin/ip -4 route add 192.168.20.0/23 dev $INTERFACE +/sbin/ip -4 route add 192.168.0.64/26 dev $INTERFACE +/sbin/ip -4 route add 192.168.18.0/23 dev $INTERFACE +/sbin/ip -4 route add 10.42.0.0/16 dev $INTERFACE +/sbin/ip -4 route add 192.168.0.98/32 dev $INTERFACE +/sbin/ip -4 route add 10.47.11.0/24 dev $INTERFACE diff --git a/noc/configs/tinc/chaos.old/tinc.conf b/noc/configs/tinc/chaos.old/tinc.conf new file mode 100644 index 0000000..e7bebe9 --- /dev/null +++ b/noc/configs/tinc/chaos.old/tinc.conf @@ -0,0 +1,17 @@ +AddressFamily=ipv4 +Device=/dev/net/tun +Interface=chaos_vpn +Mode=router +Name=eh2005 +Hostnames=yes +ConnectTo=znet +ConnectTo=alioshome +ConnectTo=dew +ConnectTo=haegarwork +ConnectTo=pescoheim +ConnectTo=lardass +ConnectTo=ccchh +ConnectTo=haegarhome +ConnectTo=packbarthome +ConnectTo=turing +ConnectTo=redbaron diff --git a/noc/configs/tinc/chaos/hosts/alioshome b/noc/configs/tinc/chaos/hosts/alioshome new file mode 100644 index 0000000..ae8e9bc --- /dev/null +++ b/noc/configs/tinc/chaos/hosts/alioshome @@ -0,0 +1,14 @@ +Address=alios.dyndns.org +Cipher=blowfish +Compression=0 +Digest=sha1 +IndirectData=yes +Port=655 +Subnet=192.168.8.0/24 +TCPonly=no +-----BEGIN RSA PUBLIC KEY----- +MIGJAoGBAL6nQVPgKAXdt+sFsXR2b/f+DFLJDT7ENuB6fpBdosAI06UIlIov47AT +0hIwhStixzBg1PlKi2QhqRQvGvX6rxWBb2rPU3lsHCOrG4jR+LaPs/fRLMd3nh/K +jiH/QmbM0jn7Foms/Rladp8PJx4ZOFP1ACxnWslE/15BxqynxVeZAgMBAAE= +-----END RSA PUBLIC KEY----- + diff --git a/noc/configs/tinc/chaos/hosts/ccchh b/noc/configs/tinc/chaos/hosts/ccchh new file mode 100644 index 0000000..ab30148 --- /dev/null +++ b/noc/configs/tinc/chaos/hosts/ccchh @@ -0,0 +1,16 @@ +Address=fwhh.hamburg.ccc.de +Cipher=blowfish +Compression=0 +Digest=sha1 +IndirectData=yes +Port=4200 +Subnet=192.168.16.0/23 +Subnet=192.168.20.0/23 +Subnet=192.168.0.64/26 +TCPonly=no +-----BEGIN RSA PUBLIC KEY----- +MIGJAoGBAKH0hS1wybu+D8DF5kOy6dirIlzhdlL0Z26G/S9JPJ4H3keDOdH3tEE/ +81D9S1IiHEkGgLFdJt6PS/mnBPaKInnV4OIS59l9eCZAVg432bb77JMSY0IWibcD +mBZLQFrWTX4Tc8bd0C1UrIslr9PbO5gxEtKSaWsujsah2QOtVaN3AgMBAAE= +-----END RSA PUBLIC KEY----- + diff --git a/noc/configs/tinc/chaos/hosts/dew b/noc/configs/tinc/chaos/hosts/dew new file mode 100644 index 0000000..e9ea643 --- /dev/null +++ b/noc/configs/tinc/chaos/hosts/dew @@ -0,0 +1,14 @@ +Address=home.ainex.net +Cipher=blowfish +Compression=0 +Digest=sha1 +IndirectData=yes +Port=655 +Subnet=192.168.13.0/24 +TCPonly=no +-----BEGIN RSA PUBLIC KEY----- +MIGJAoGBALNiHGhNitniabwXpVRkSkULd5+qS3oLLung9kSD/cwIPgmJEaCLrmdF +iVKcTKYRB7OIc7zv2Ss0eIhUHoD7FzwVYTO1hi/8hqrrUzTC6nN2HU3Rj7+M2724 +ZpE3Q3/my5W2rk6E9MWooWKIMSI5l1Uf6TF3XVhKym3wyk6bg8PXAgMBAAE= +-----END RSA PUBLIC KEY----- + diff --git a/noc/configs/tinc/chaos/hosts/eh2005 b/noc/configs/tinc/chaos/hosts/eh2005 new file mode 100644 index 0000000..a240909 --- /dev/null +++ b/noc/configs/tinc/chaos/hosts/eh2005 @@ -0,0 +1,17 @@ +Address=does.not.exist.example +Cipher=blowfish +Compression=0 +Digest=sha1 +IndirectData=yes +Port=655 +Subnet=172.16.0.0/22 +Subnet=172.16.4.0/22 +Subnet=172.16.42.0/24 +Subnet=10.112.0.0/12 +TCPonly=no +-----BEGIN RSA PUBLIC KEY----- +MIGJAoGBAJ8UB4S2KiFsEI64ffK4kcG083Y4cz64lklKoB1gA720VI+wnsiUJAXF +EgvrvcZuGqSTPM5aKWMMRllrLjBf0bNNpO66/GuN+F0O9pt8Q49NF867uNX+KHNu +Fm1dpjugf3DIpvzbmWE3i3WAYU3yd9z3LBA1IuZ21q31Waup+MPNAgMBAAE= +-----END RSA PUBLIC KEY----- + diff --git a/noc/configs/tinc/chaos/hosts/haegarhome b/noc/configs/tinc/chaos/hosts/haegarhome new file mode 100644 index 0000000..84c8db7 --- /dev/null +++ b/noc/configs/tinc/chaos/hosts/haegarhome @@ -0,0 +1,14 @@ +Address=gate.sdinet.de +Cipher=blowfish +Compression=0 +Digest=sha1 +IndirectData=yes +Port=655 +Subnet=192.168.18.0/23 +TCPonly=no +-----BEGIN RSA PUBLIC KEY----- +MIGJAoGBAMEEsKaNa8fq6+Z31Iy4pNwJub1Ncu1y/+Ngnldh6eC5TlgTsMa1qRfZ +8i+vuNlC8UlXT43vGAdNuP/AJTQgjQWnSt2qlDRQyVE0RkdOnQPecTJckwzcceOv +C76sLaA199ZtPlJl+W7Ft6SMs5UFCBhDpnUUD9GkrLuywHgZ6bpJAgMBAAE= +-----END RSA PUBLIC KEY----- + diff --git a/noc/configs/tinc/chaos/hosts/haegarwork b/noc/configs/tinc/chaos/hosts/haegarwork new file mode 100644 index 0000000..80e2692 --- /dev/null +++ b/noc/configs/tinc/chaos/hosts/haegarwork @@ -0,0 +1,14 @@ +Address=mercury.sdinet.de +Cipher=blowfish +Compression=0 +Digest=sha1 +IndirectData=yes +Port=655 +Subnet=192.168.0.99/32 +TCPonly=no +-----BEGIN RSA PUBLIC KEY----- +MIGJAoGBAJ3k2XMp+ryAsyDlRpTgffZGjSTE4kp2haX3Ax55CN/e7q+IG1yHvK2R +M2v0WHh8e59Hb7IX86J7U6ZOO/7GQ8bkUZD9ntmyRjeIZ4XuF4X8Q5t7zZ6TEm8G +lkh+IiZ3NlFRWdzVNLybQIluJsPIr/7rA3xet9IPUpm8sBgTcbwXAgMBAAE= +-----END RSA PUBLIC KEY----- + diff --git a/noc/configs/tinc/chaos/hosts/lardass b/noc/configs/tinc/chaos/hosts/lardass new file mode 100644 index 0000000..6521258 --- /dev/null +++ b/noc/configs/tinc/chaos/hosts/lardass @@ -0,0 +1,15 @@ +Address=lardass.arles-electrique.de +Cipher=blowfish +Compression=0 +Digest=sha1 +IndirectData=yes +Port=655 +Subnet=10.6.65.0/24 +Subnet=10.6.66.0/24 +TCPonly=no +-----BEGIN RSA PUBLIC KEY----- +MIGJAoGBAMxqMzKqWX4e7mtiRVHnOWTkV7nxwsdgMZVkzx9ATG/9ew1CF6kOHjrq +C4RsWpeuHMiQLUG3xF0Prajh5MXsqS7sP7Zn/6z3t3f1mqDLfBtx2e+6LqBs9j1W +VkNcGI29ibDLYHcdjNejQfwPA+4JKfrq2T0Dzf3xWpMIHrcrLEOXAgMBAAE= +-----END RSA PUBLIC KEY----- + diff --git a/noc/configs/tinc/chaos/hosts/packbarthome b/noc/configs/tinc/chaos/hosts/packbarthome new file mode 100644 index 0000000..4ffc6aa --- /dev/null +++ b/noc/configs/tinc/chaos/hosts/packbarthome @@ -0,0 +1,22 @@ +Address=gw23.formularfetischisten.de +Cipher=blowfish +Compression=0 +Digest=sha1 +IndirectData=yes +Port=655 +Subnet=10.42.0.0/16 +TCPonly=no +-----BEGIN RSA PUBLIC KEY----- +MIICCgKCAgEA7hNnj1THT0JCUPM2gEcF5Mrwj6onlBixFYZnbhNMssNAIhlP5Tvb +7dNWhwnvBtCFCqEW8jnf9sD4+gJcp8vsiWmM8EQMGWuPkqqc+0TCyQKGb7ylbrNM +4n7tzdJX18LEm5TnxQieBinnkYPTkNy8xzgQPe+SwyMwg6ECDIyBwJ5GaeyIjqME +ZuVbvB81GJej2WGqSMlfZPGpGvriDrU0271S7NmAtfbzeuCGzFd877hcDx52YvzT +SDqdFwtO+lEhbfaKzrPS96M3Jj+FyH2NC19NL93Kln4ZDdKZWSzvRwv1loFWDuZ0 +lrZC/Zk/sUSkxM1qQlXAi2wRVnQzl21j0saismra80eKEnv8f0rIbYfJFg4l5PUs +eN7x5AriCR2wSyvuI6SkB7N3QxCSG2OWlTR8jqVd0iCgWum8+jQwvV9jCJBZYgEB +xU85IjfH7yptd39LYJRsQcm58RTco3oO2VTBJ7uQZuIINVPjmp4cIeiF0r4O2WYf +cA8FMX8IbUQAqwAte3J9AtfYcB8nXOsf2uBR+QoEnFf1n2R2vtzSuSTlEeTOD4MJ +qv+4aFqbRMwR/cYTK4krYxJPSk8ZD/boFXcMPc6jud6MjA7PGEw1DKV4lhJ7pPRJ +rgX/xUxmGNhwQEynunP6SWscg/7UFFDqanC/Pv6X7AR2VfmiLpJ66/cCAwEAAQ== +-----END RSA PUBLIC KEY----- + diff --git a/noc/configs/tinc/chaos/hosts/pescoheim b/noc/configs/tinc/chaos/hosts/pescoheim new file mode 100644 index 0000000..b0ddff8 --- /dev/null +++ b/noc/configs/tinc/chaos/hosts/pescoheim @@ -0,0 +1,14 @@ +Address=pesco.dyndns.org +Cipher=blowfish +Compression=0 +Digest=sha1 +IndirectData=yes +Port=655 +Subnet=192.168.9.0/24 +TCPonly=no +-----BEGIN RSA PUBLIC KEY----- +MIGJAoGBAOGdQo3wBi8pDtMe8IstjmWx5kKOKheTOjdPoLX4Qkr9bOhJb7NxalPV +5Ub5BFR51kDafnSPaXtQGMkKgSD6NAXK4LF1Tvsnbr2/za38Zv9YCsoD+HiM9Vz8 +6eO6UpGkvHjXcKHsJbEa9jUnvOOFf7U23UijYgjbrkggckHojTxdAgMBAAE= +-----END RSA PUBLIC KEY----- + diff --git a/noc/configs/tinc/chaos/hosts/redbaron b/noc/configs/tinc/chaos/hosts/redbaron new file mode 100644 index 0000000..722e4f1 --- /dev/null +++ b/noc/configs/tinc/chaos/hosts/redbaron @@ -0,0 +1,14 @@ +Address=redcastle.mine.nu +Cipher=blowfish +Compression=0 +Digest=sha1 +IndirectData=yes +Port=655 +Subnet=10.47.11.0/24 +TCPonly=no +-----BEGIN RSA PUBLIC KEY----- +MIGJAoGBALzcRKUSeEX/qHAJIqDnC+MfYD7F78ftdvOGDvYyzvHpNAlRyMZTea6V +hnxgD3aJSM/MB80XZcdTOHLShYmAehZhfLph82oT0W8bAh+58RUgorYeYit5qvC5 +tNXV/zI8OFCfc08ttmK2Zb0Mqeh13OXzk2Un3gqgWeWauep6wBp1AgMBAAE= +-----END RSA PUBLIC KEY----- + diff --git a/noc/configs/tinc/chaos/hosts/turing b/noc/configs/tinc/chaos/hosts/turing new file mode 100644 index 0000000..613221b --- /dev/null +++ b/noc/configs/tinc/chaos/hosts/turing @@ -0,0 +1,14 @@ +Address=turing.hamburg.ccc.de +Cipher=blowfish +Compression=0 +Digest=sha1 +IndirectData=yes +Port=4200 +Subnet=192.168.0.98/32 +TCPonly=no +-----BEGIN RSA PUBLIC KEY----- +MIGJAoGBAMeWu6JQGmHwalirbG6rSP+wLRNb+9H0wR89PM0s6OulzmRwZYESZXdU +AXiY02+Y9YdkhHZ9b8UGfoL7g6jr3YC1aB5rGU7oOojGUGLO85K4nnd+FxzccY8K +LyCdqkcLudLEP4SmgbKZgsBebR+46CKbnavXZ+l8KLYzQgWfA0kXAgMBAAE= +-----END RSA PUBLIC KEY----- + diff --git a/noc/configs/tinc/chaos/hosts/znet b/noc/configs/tinc/chaos/hosts/znet new file mode 100644 index 0000000..bc9be4e --- /dev/null +++ b/noc/configs/tinc/chaos/hosts/znet @@ -0,0 +1,14 @@ +Address=prometheus.datenknoten.de +Cipher=blowfish +Compression=0 +Digest=sha1 +IndirectData=yes +Port=655 +Subnet=192.168.23.0/24 +TCPonly=no +-----BEGIN RSA PUBLIC KEY----- +MIGJAoGBAMHRsCzBgOvkCokphctbdX11P6MtwWIhaTHmI8BHhDN73Ch384KTFdqA +gGsDkp2QoH2PvFRolOi1NjFuSSJfcGJdvEGa4R/bMhUF2LWTO2VIr3JIA0VsRS+8 +LXe+GpXURFgb9/cenjdzKWYLeksT1g/Y6MAgsl1MAdGFmOtNFc+zAgMBAAE= +-----END RSA PUBLIC KEY----- + diff --git a/noc/configs/tinc/chaos/rsa_key.priv b/noc/configs/tinc/chaos/rsa_key.priv new file mode 100644 index 0000000..e75000b --- /dev/null +++ b/noc/configs/tinc/chaos/rsa_key.priv @@ -0,0 +1,15 @@ +-----BEGIN RSA PRIVATE KEY----- +MIICXAIBAAKBgQCfFAeEtiohbBCOuH3yuJHBtPN2OHM+uJZJSqAdYAO9tFSPsJ7I +lCQFxRIL673GbhqkkzzOWiljDEZZay4wX9GzTaTuuvxrjfhdDvabfEOPTRfOu7jV +/ihzbhZtXaY7oH9wyKb825lhN4t1gGFN8nfc9ywQNSLmdtat9VmrqfjDzQIDAQAB +AoGAJ2KsId2APNoml09yT4AHBnCovqJnViYZf3fsgJlfE77sGM9f4MVczdjnCPCL +AfAMxKZ3rZeBG7bUTBtPSkbPAjPJ//zT4kNWFLZC93HdzSeeEmSCF+vE7L6xjzku +fwpx/8J9LMLlp96BLtlfPXk4gDA+q858EW0Q1prQBQV7GEECQQDODY9qaVcU3cv2 +/wNeTuWve8wARDKiC2ucFE2RzvDnpcuR+Am5dkfUTTlJTf/Ffdc2M4E7YfwAa1J9 +IAcilM3lAkEAxaN+IVb7vy4xWjx7W5/sVKLz1FgjSHkpNfeuWMxm8sR4HWTHBPFb +hd+E+HhkWeD6Sa6gP8ZIEPfXnBexYRz/yQJBAKU7xofklUpMWiVldgQIbLN+KKcG +CTxcwBxXQ6TrN8/q6gXRy6qHqS4cBxY7kCGEujHit30xI+4KIgnoxw/6F+kCQGh2 +kiRtJYNXlx5q+YjkbrYNq3OBYqTb5bxwveaRo5iN4C8pJUinigiorE/o0qHvGFv5 +wRn0ZAMT/RK0Mz1xZoECQBwOMieJcswrcI2OgY3Ejw+nLf5u4ZbahRFrnHWT0FoN +hBW4Dff5jso/K+weYETZUpdwWb9jv8+4ULGt1wiJ8sc= +-----END RSA PRIVATE KEY----- diff --git a/noc/configs/tinc/chaos/rsa_key.pub b/noc/configs/tinc/chaos/rsa_key.pub new file mode 100644 index 0000000..f9bd06d --- /dev/null +++ b/noc/configs/tinc/chaos/rsa_key.pub @@ -0,0 +1,5 @@ +-----BEGIN RSA PUBLIC KEY----- +MIGJAoGBAJ8UB4S2KiFsEI64ffK4kcG083Y4cz64lklKoB1gA720VI+wnsiUJAXF +EgvrvcZuGqSTPM5aKWMMRllrLjBf0bNNpO66/GuN+F0O9pt8Q49NF867uNX+KHNu +Fm1dpjugf3DIpvzbmWE3i3WAYU3yd9z3LBA1IuZ21q31Waup+MPNAgMBAAE= +-----END RSA PUBLIC KEY----- diff --git a/noc/configs/tinc/chaos/tinc-up b/noc/configs/tinc/chaos/tinc-up new file mode 100755 index 0000000..36a3433 --- /dev/null +++ b/noc/configs/tinc/chaos/tinc-up @@ -0,0 +1,16 @@ +#!/bin/sh +/sbin/ifconfig $INTERFACE 172.16.0.1 netmask 255.255.255.255 +/sbin/ip -4 route add 192.168.23.0/24 dev $INTERFACE +/sbin/ip -4 route add 192.168.8.0/24 dev $INTERFACE +/sbin/ip -4 route add 192.168.13.0/24 dev $INTERFACE +/sbin/ip -4 route add 192.168.0.99/32 dev $INTERFACE +/sbin/ip -4 route add 192.168.9.0/24 dev $INTERFACE +/sbin/ip -4 route add 10.6.65.0/24 dev $INTERFACE +/sbin/ip -4 route add 10.6.66.0/24 dev $INTERFACE +/sbin/ip -4 route add 192.168.16.0/23 dev $INTERFACE +/sbin/ip -4 route add 192.168.20.0/23 dev $INTERFACE +/sbin/ip -4 route add 192.168.0.64/26 dev $INTERFACE +/sbin/ip -4 route add 192.168.18.0/23 dev $INTERFACE +/sbin/ip -4 route add 10.42.0.0/16 dev $INTERFACE +/sbin/ip -4 route add 192.168.0.98/32 dev $INTERFACE +/sbin/ip -4 route add 10.47.11.0/24 dev $INTERFACE diff --git a/noc/configs/tinc/chaos/tinc.conf b/noc/configs/tinc/chaos/tinc.conf new file mode 100644 index 0000000..e7bebe9 --- /dev/null +++ b/noc/configs/tinc/chaos/tinc.conf @@ -0,0 +1,17 @@ +AddressFamily=ipv4 +Device=/dev/net/tun +Interface=chaos_vpn +Mode=router +Name=eh2005 +Hostnames=yes +ConnectTo=znet +ConnectTo=alioshome +ConnectTo=dew +ConnectTo=haegarwork +ConnectTo=pescoheim +ConnectTo=lardass +ConnectTo=ccchh +ConnectTo=haegarhome +ConnectTo=packbarthome +ConnectTo=turing +ConnectTo=redbaron diff --git a/noc/configs/tinc/chaosvpn.conf b/noc/configs/tinc/chaosvpn.conf new file mode 100644 index 0000000..51afa95 --- /dev/null +++ b/noc/configs/tinc/chaosvpn.conf @@ -0,0 +1,41 @@ +# achtung: dies configfile ist perl ;) + + +# name dieses rechners: +$my_peerid = "eh2005"; + +# lokale ips dieses rechners/gateways +# eins von beidem kann auch leergelassen werden, wenn man nur +# ipv4 oder nur ipv6 sprechen moechte +# (angaben ohne netmask, das hier sind die adressen die das +# chaos_vpn-device bekommt, netmask /32 bzw /128) +$my_vpn_ip = "172.16.0.1"; +$my_vpn_ip6 = ""; + +$my_password = "foo"; # unused +$my_ip = "127.0.0.1"; # unused for now +$my_external_ip = "193.103.161.30"; # unused + +# ueber diese einstellung koennen gewisse gegenstellen +# bei chaosvpn-links ignoriert werden (sie werden vom eigenen rechner +# behandelt als waehren sie nicht teil des chaosvpns) +# dies ist z.b. nuetzlich wenn zu diesen gegenstellen schon eine +# anderweitige vpn-verbindung besteht +# im normalfall einfach () +@exclude = (); # links zu gewissen peer-ids nicht aufbauen + + +# ============================================================================ +# you should'nt need to change anything below, +# at least not for linux and chaosvpn + +$networkname = "chaos"; +$tincd_bin = "/usr/sbin/tincd"; +$ip_bin = "/sbin/ip"; +$ifconfig = "/sbin/ifconfig \$INTERFACE $my_vpn_ip netmask $my_vpn_netmask"; +$ifconfig6 = "$ip_bin addr add $my_vpn_ip6/128 dev \$INTERFACE"; + +$master_url = "https://www.vpn.hamburg.ccc.de/tinc-chaosvpn.txt"; +$base = "/etc/tinc/$networkname"; +$pidfile = "/var/run/tinc.$networkname.pid"; +$tincd_debuglevel = 3; diff --git a/noc/configs/tinc/nets.boot b/noc/configs/tinc/nets.boot new file mode 100644 index 0000000..b0bd0ec --- /dev/null +++ b/noc/configs/tinc/nets.boot @@ -0,0 +1 @@ +## This file contains all names of the networks to be started on system startup. diff --git a/noc/monitor.easterhegg.de/README.html b/noc/monitor.easterhegg.de/README.html new file mode 100644 index 0000000..7c8d188 --- /dev/null +++ b/noc/monitor.easterhegg.de/README.html @@ -0,0 +1,7 @@ +
    +
    +Config Daten von monitor.easterhegg.de
    +
    +Drecks-Thinkpad R40e mit Debian/Unstable Webserver und 
    +Netzwerk-Monitor-Krams
    +
    diff --git a/noc/monitor.easterhegg.de/apache2/README b/noc/monitor.easterhegg.de/apache2/README new file mode 100644 index 0000000..6be05b5 --- /dev/null +++ b/noc/monitor.easterhegg.de/apache2/README @@ -0,0 +1,82 @@ +Apache2 Configuration under Debian GNU/Linux +============================================ + +Debian's default Apache2 installation attempts to make adding and +removing modules, virtual hosts, and extra configuration directives as +flexible is possible, in order to make automating the changes and +administering the server as easy as possible. + +Files and Directories in /etc/apache2: +------------------------------------- + +apache2.conf + + This is the main configuration file. + +conf.d/ + + Files in this directory are included by this line in + apache2.conf: + + # Include generic snippets of statements + Include /etc/apache2/conf.d + + This is a good place to add additional configuration + directives. + +httpd.conf + + Empty file. + +magic + + Magic data for mod_mime_magic Apache module, documented in + htdocs/manual/mod/mod_mime_magic.html. You probably don't + need to touch this. + +mods-available/ + + This directory contains a series of .load and .conf files. + The .load files contain the Apache configuration directive + necessary to load the module in question. The respective + .conf files contain configuration directives necessary to + utilize the module in question. + +mods-enabled/ + + To actually enable a module for Apache2, it is necessary to + create a symlink in this directory to the .load (and .conf, if + it exists) files associated with the module in + mods-available/. For example: + + cgi.load -> /etc/apache2/mods-available/cgi.load + +ports.conf + + Configuration directives for which ports and IP addresses to + listen to. + +sites-available/ + + Like mods-available/, except it contains configuration + directives for different virtual hosts that might be used with + apache2. Note that the hostname doesn't have to correspond + exactly with the filename. 'default' is the default host. + +sites-enabled/ + + Similar in functionality to mods-enabled/, sites-enabled + contains symlinks to sites in sites-available/ that the + admnistrator wishes to enable. + + Example: + dedasys -> /etc/apache2/sites-available/dedasys + +Tools +----- + +Currently, a2enmod and a2dismod are available for enabling and +disabling modules utilizing the above configuration system. + +a2ensite and a2dissite have been added, which do essentially the +same thing as the above tools, but for sites rather than modules. diff --git a/noc/monitor.easterhegg.de/apache2/apache2.conf b/noc/monitor.easterhegg.de/apache2/apache2.conf new file mode 100644 index 0000000..75dda3a --- /dev/null +++ b/noc/monitor.easterhegg.de/apache2/apache2.conf @@ -0,0 +1,397 @@ +# Based upon the NCSA server configuration files originally by Rob McCool. +# Changed extensively for the Debian package by Daniel Stone +# and also by Thom May . + +# ServerRoot: The top of the directory tree under which the server's +# configuration, error, and log files are kept. +# +# NOTE! If you intend to place this on an NFS (or otherwise network) +# mounted filesystem then please read the LockFile documentation +# (available at ); +# you will save yourself a lot of trouble. + +ServerRoot "/etc/apache2" + +# The LockFile directive sets the path to the lockfile used when Apache +# is compiled with either USE_FCNTL_SERIALIZED_ACCEPT or +# USE_FLOCK_SERIALIZED_ACCEPT. This directive should normally be left at +# its default value. The main reason for changing it is if the logs +# directory is NFS mounted, since the lockfile MUST BE STORED ON A LOCAL +# DISK. The PID of the main server process is automatically appended to +# the filename. + +LockFile /var/lock/apache2/accept.lock + +# PidFile: The file in which the server should record its process +# identification number when it starts. + +PidFile /var/run/apache2.pid + +# Timeout: The number of seconds before receives and sends time out. + +Timeout 300 + +# KeepAlive: Whether or not to allow persistent connections (more than +# one request per connection). Set to "Off" to deactivate. + +KeepAlive On + +# MaxKeepAliveRequests: The maximum number of requests to allow +# during a persistent connection. Set to 0 to allow an unlimited amount. +# We recommend you leave this number high, for maximum performance. + +MaxKeepAliveRequests 100 + +# KeepAliveTimeout: Number of seconds to wait for the next request from the +# same client on the same connection. + +KeepAliveTimeout 15 + +## +## Server-Pool Size Regulation (MPM specific) +## + +# prefork MPM +# StartServers ......... number of server processes to start +# MinSpareServers ...... minimum number of server processes which are kept spare +# MaxSpareServers ...... maximum number of server processes which are kept spare +# MaxClients ........... maximum number of server processes allowed to start +# MaxRequestsPerChild .. maximum number of requests a server process serves + +StartServers 5 +MinSpareServers 5 +MaxSpareServers 10 +MaxClients 20 +MaxRequestsPerChild 0 + + +# pthread MPM +# StartServers ......... initial number of server processes to start +# MaxClients ........... maximum number of server processes allowed to start +# MinSpareThreads ...... minimum number of worker threads which are kept spare +# MaxSpareThreads ...... maximum number of worker threads which are kept spare +# ThreadsPerChild ...... constant number of worker threads in each server process +# MaxRequestsPerChild .. maximum number of requests a server process serves + +StartServers 2 +MaxClients 150 +MinSpareThreads 25 +MaxSpareThreads 75 +ThreadsPerChild 25 +MaxRequestsPerChild 0 + + +# perchild MPM +# NumServers ........... constant number of server processes +# StartThreads ......... initial number of worker threads in each server process +# MinSpareThreads ...... minimum number of worker threads which are kept spare +# MaxSpareThreads ...... maximum number of worker threads which are kept spare +# MaxThreadsPerChild ... maximum number of worker threads in each server process +# MaxRequestsPerChild .. maximum number of connections per server process (then it dies) + +NumServers 5 +StartThreads 5 +MinSpareThreads 5 +MaxSpareThreads 10 +MaxThreadsPerChild 20 +MaxRequestsPerChild 0 +AcceptMutex fcntl + + +User www-data +Group www-data + +# The following directives define some format nicknames for use with +# a CustomLog directive (see below). +LogFormat "%h %l %u %t \"%r\" %>s %b \"%{Referer}i\" \"%{User-Agent}i\"" combined +LogFormat "%h %l %u %t \"%r\" %>s %b" common +LogFormat "%{Referer}i -> %U" referer +LogFormat "%{User-agent}i" agent + + +# Global error log. +ErrorLog /var/log/apache2/error.log + +# Include module configuration: +Include /etc/apache2/mods-enabled/*.load +Include /etc/apache2/mods-enabled/*.conf + +# Include all the user configurations: +Include /etc/apache2/httpd.conf + +# Include ports listing +Include /etc/apache2/ports.conf + +# Include generic snippets of statements +Include /etc/apache2/conf.d/[^.#]* + +#Let's have some Icons, shall we? +Alias /icons/ "/usr/share/apache2/icons/" + + Options Indexes MultiViews + AllowOverride None + Order allow,deny + Allow from all + + +# Set up the default error docs. +# +# Customizable error responses come in three flavors: +# 1) plain text 2) local redirects 3) external redirects +# +# Some examples: +#ErrorDocument 500 "The server made a boo boo." +#ErrorDocument 404 /missing.html +#ErrorDocument 404 "/cgi-bin/missing_handler.pl" +#ErrorDocument 402 http://www.example.com/subscription_info.html +# + +# +# Putting this all together, we can Internationalize error responses. +# +# We use Alias to redirect any /error/HTTP_.html.var response to +# our collection of by-error message multi-language collections. We use +# includes to substitute the appropriate text. +# +# You can modify the messages' appearance without changing any of the +# default HTTP_.html.var files by adding the line; +# +# Alias /error/include/ "/your/include/path/" +# +# which allows you to create your own set of files by starting with the +# /usr/local/apache2/error/include/ files and +# copying them to /your/include/path/, even on a per-VirtualHost basis. +# + + + + Alias /error/ "/usr/share/apache2/error/" + + + AllowOverride None + Options IncludesNoExec + AddOutputFilter Includes html + AddHandler type-map var + Order allow,deny + Allow from all + LanguagePriority en es de fr + ForceLanguagePriority Prefer Fallback + + + ErrorDocument 400 /error/HTTP_BAD_REQUEST.html.var + ErrorDocument 401 /error/HTTP_UNAUTHORIZED.html.var + ErrorDocument 403 /error/HTTP_FORBIDDEN.html.var + ErrorDocument 404 /error/HTTP_NOT_FOUND.html.var + ErrorDocument 405 /error/HTTP_METHOD_NOT_ALLOWED.html.var + ErrorDocument 408 /error/HTTP_REQUEST_TIME_OUT.html.var + ErrorDocument 410 /error/HTTP_GONE.html.var + ErrorDocument 411 /error/HTTP_LENGTH_REQUIRED.html.var + ErrorDocument 412 /error/HTTP_PRECONDITION_FAILED.html.var + ErrorDocument 413 /error/HTTP_REQUEST_ENTITY_TOO_LARGE.html.var + ErrorDocument 414 /error/HTTP_REQUEST_URI_TOO_LARGE.html.var + ErrorDocument 415 /error/HTTP_SERVICE_UNAVAILABLE.html.var + ErrorDocument 500 /error/HTTP_INTERNAL_SERVER_ERROR.html.var + ErrorDocument 501 /error/HTTP_NOT_IMPLEMENTED.html.var + ErrorDocument 502 /error/HTTP_BAD_GATEWAY.html.var + ErrorDocument 503 /error/HTTP_SERVICE_UNAVAILABLE.html.var + ErrorDocument 506 /error/HTTP_VARIANT_ALSO_VARIES.html.var + + + + +DirectoryIndex index.shtml index.html index.cgi index.pl index.php index.xhtml + +# UserDir is now a module +#UserDir public_html +#UserDir disabled root + +# +# AllowOverride FileInfo AuthConfig Limit +# Options Indexes SymLinksIfOwnerMatch IncludesNoExec +# + +AccessFileName .htaccess + + + Order allow,deny + Deny from all + + +UseCanonicalName Off + +TypesConfig /etc/mime.types +DefaultType text/plain + +HostnameLookups Off + +IndexOptions FancyIndexing VersionSort + +AddIconByEncoding (CMP,/icons/compressed.gif) x-compress x-gzip + +AddIconByType (TXT,/icons/text.gif) text/* +AddIconByType (IMG,/icons/image2.gif) image/* +AddIconByType (SND,/icons/sound2.gif) audio/* +AddIconByType (VID,/icons/movie.gif) video/* + +# This really should be .jpg. + +AddIcon /icons/binary.gif .bin .exe +AddIcon /icons/binhex.gif .hqx +AddIcon /icons/tar.gif .tar +AddIcon /icons/world2.gif .wrl .wrl.gz .vrml .vrm .iv +AddIcon /icons/compressed.gif .Z .z .tgz .gz .zip +AddIcon /icons/a.gif .ps .ai .eps +AddIcon /icons/layout.gif .html .shtml .htm .pdf +AddIcon /icons/text.gif .txt +AddIcon /icons/c.gif .c +AddIcon /icons/p.gif .pl .py +AddIcon /icons/f.gif .for +AddIcon /icons/dvi.gif .dvi +AddIcon /icons/uuencoded.gif .uu +AddIcon /icons/script.gif .conf .sh .shar .csh .ksh .tcl +AddIcon /icons/tex.gif .tex +AddIcon /icons/bomb.gif core + +AddIcon /icons/back.gif .. +AddIcon /icons/hand.right.gif README +AddIcon /icons/folder.gif ^^DIRECTORY^^ +AddIcon /icons/blank.gif ^^BLANKICON^^ + + +# This is from Matty J's patch. Anyone want to make the icons? +#AddIcon /icons/dirsymlink.jpg ^^SYMDIR^^ +#AddIcon /icons/symlink.jpg ^^SYMLINK^^ + +DefaultIcon /icons/unknown.gif + +ReadmeName README.html +HeaderName HEADER.html + +IndexIgnore .??* *~ *# HEADER* RCS CVS *,t + +AddEncoding x-compress Z +AddEncoding x-gzip gz tgz + +AddLanguage da .dk +AddLanguage nl .nl +AddLanguage en .en +AddLanguage et .et +AddLanguage fr .fr +AddLanguage de .de +AddLanguage el .el +AddLanguage it .it +AddLanguage ja .ja +AddLanguage pl .po +AddLanguage ko .ko +AddLanguage pt .pt +AddLanguage no .no +AddLanguage pt-br .pt-br +AddLanguage ltz .ltz +AddLanguage ca .ca +AddLanguage es .es +AddLanguage sv .se +AddLanguage cz .cz +AddLanguage ru .ru +AddLanguage tw .tw +AddLanguage zh-tw .tw + +LanguagePriority en da nl et fr de el it ja ko no pl pt pt-br ltz ca es sv tw + + +#AddDefaultCharset ISO-8859-1 + +AddCharset ISO-8859-1 .iso8859-1 .latin1 +AddCharset ISO-8859-2 .iso8859-2 .latin2 .cen +AddCharset ISO-8859-3 .iso8859-3 .latin3 +AddCharset ISO-8859-4 .iso8859-4 .latin4 +AddCharset ISO-8859-5 .iso8859-5 .latin5 .cyr .iso-ru +AddCharset ISO-8859-6 .iso8859-6 .latin6 .arb +AddCharset ISO-8859-7 .iso8859-7 .latin7 .grk +AddCharset ISO-8859-8 .iso8859-8 .latin8 .heb +AddCharset ISO-8859-9 .iso8859-9 .latin9 .trk +AddCharset ISO-2022-JP .iso2022-jp .jis +AddCharset ISO-2022-KR .iso2022-kr .kis +AddCharset ISO-2022-CN .iso2022-cn .cis +AddCharset Big5 .Big5 .big5 +# For russian, more than one charset is used (depends on client, mostly): +AddCharset WINDOWS-1251 .cp-1251 .win-1251 +AddCharset CP866 .cp866 +AddCharset KOI8-r .koi8-r .koi8-ru +AddCharset KOI8-ru .koi8-uk .ua +AddCharset ISO-10646-UCS-2 .ucs2 +AddCharset ISO-10646-UCS-4 .ucs4 +AddCharset UTF-8 .utf8 + +AddCharset GB2312 .gb2312 .gb +AddCharset utf-7 .utf7 +AddCharset utf-8 .utf8 +AddCharset big5 .big5 .b5 +AddCharset EUC-TW .euc-tw +AddCharset EUC-JP .euc-jp +AddCharset EUC-KR .euc-kr +AddCharset shift_jis .sjis + +AddType application/x-httpd-php .php +AddType application/x-httpd-php-source .phps + +AddType application/x-tar .tgz + +# To use CGI scripts outside /cgi-bin/: +# +#AddHandler cgi-script .cgi + +# To use server-parsed HTML files +# +AddType text/html .shtml + + SetOutputFilter INCLUDES + + + +# If you wish to use server-parsed imagemap files, use +# +#AddHandler imap-file map + +BrowserMatch "Mozilla/2" nokeepalive +BrowserMatch "MSIE 4\.0b2;" nokeepalive downgrade-1.0 force-response-1.0 +BrowserMatch "RealPlayer 4\.0" force-response-1.0 +BrowserMatch "Java/1\.0" force-response-1.0 +BrowserMatch "JDK/1\.0" force-response-1.0 + +# +# The following directive disables redirects on non-GET requests for +# a directory that does not include the trailing slash. This fixes a +# problem with Microsoft WebFolders which does not appropriately handle +# redirects for folders with DAV methods. +# + +BrowserMatch "Microsoft Data Access Internet Publishing Provider" redirect-carefully +BrowserMatch "^WebDrive" redirect-carefully +BrowserMatch "^gnome-vfs" redirect-carefully +BrowserMatch "^WebDAVFS/1.[012]" redirect-carefully + +# Allow server status reports, with the URL of http://servername/server-status +# Change the ".your_domain.com" to match your domain to enable. +# +# +# SetHandler server-status +# Order deny,allow +# Deny from all +# Allow from .your_domain.com +# + +# Allow remote server configuration reports, with the URL of +# http://servername/server-info (requires that mod_info.c be loaded). +# Change the ".your_domain.com" to match your domain to enable. +# +# +# SetHandler server-info +# Order deny,allow +# Deny from all +# Allow from .your_domain.com +# + +# Include the virtual host configurations: +Include /etc/apache2/sites-enabled/[^.#]* + +Include /etc/cacti/apache.conf diff --git a/noc/monitor.easterhegg.de/apache2/envvars b/noc/monitor.easterhegg.de/apache2/envvars new file mode 100644 index 0000000..da1f813 --- /dev/null +++ b/noc/monitor.easterhegg.de/apache2/envvars @@ -0,0 +1,21 @@ +# Copyright 2001-2005 The Apache Software Foundation or its licensors, as +# applicable. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# +# +# envvars-std - default environment variables for apachectl +# +# This file is generated from envvars-std.in +# + diff --git a/noc/monitor.easterhegg.de/apache2/httpd.conf b/noc/monitor.easterhegg.de/apache2/httpd.conf new file mode 100644 index 0000000..8dcc1ed --- /dev/null +++ b/noc/monitor.easterhegg.de/apache2/httpd.conf @@ -0,0 +1,5 @@ +# This is here for backwards compatability reasons and to support +# installing 3rd party modules directly via apxs2, rather than +# through the /etc/apache2/mods-{available,enabled} mechanism. +# +#LoadModule mod_placeholder /usr/lib/apache2/modules/mod_placeholder.so diff --git a/noc/monitor.easterhegg.de/apache2/magic b/noc/monitor.easterhegg.de/apache2/magic new file mode 100644 index 0000000..885b793 --- /dev/null +++ b/noc/monitor.easterhegg.de/apache2/magic @@ -0,0 +1,371 @@ +# Magic data for mod_mime_magic Apache module (originally for file(1) command) +# The module is described in htdocs/manual/mod/mod_mime_magic.html +# +# The format is 4-5 columns: +# Column #1: byte number to begin checking from, ">" indicates continuation +# Column #2: type of data to match +# Column #3: contents of data to match +# Column #4: MIME type of result +# Column #5: MIME encoding of result (optional) + +#------------------------------------------------------------------------------ +# Localstuff: file(1) magic for locally observed files +# Add any locally observed files here. + +#------------------------------------------------------------------------------ +# end local stuff +#------------------------------------------------------------------------------ + +#------------------------------------------------------------------------------ +# Java + +0 short 0xcafe +>2 short 0xbabe application/java + +#------------------------------------------------------------------------------ +# audio: file(1) magic for sound formats +# +# from Jan Nicolai Langfeldt , +# + +# Sun/NeXT audio data +0 string .snd +>12 belong 1 audio/basic +>12 belong 2 audio/basic +>12 belong 3 audio/basic +>12 belong 4 audio/basic +>12 belong 5 audio/basic +>12 belong 6 audio/basic +>12 belong 7 audio/basic + +>12 belong 23 audio/x-adpcm + +# DEC systems (e.g. DECstation 5000) use a variant of the Sun/NeXT format +# that uses little-endian encoding and has a different magic number +# (0x0064732E in little-endian encoding). +0 lelong 0x0064732E +>12 lelong 1 audio/x-dec-basic +>12 lelong 2 audio/x-dec-basic +>12 lelong 3 audio/x-dec-basic +>12 lelong 4 audio/x-dec-basic +>12 lelong 5 audio/x-dec-basic +>12 lelong 6 audio/x-dec-basic +>12 lelong 7 audio/x-dec-basic +# compressed (G.721 ADPCM) +>12 lelong 23 audio/x-dec-adpcm + +# Bytes 0-3 of AIFF, AIFF-C, & 8SVX audio files are "FORM" +# AIFF audio data +8 string AIFF audio/x-aiff +# AIFF-C audio data +8 string AIFC audio/x-aiff +# IFF/8SVX audio data +8 string 8SVX audio/x-aiff + +# Creative Labs AUDIO stuff +# Standard MIDI data +0 string MThd audio/unknown +#>9 byte >0 (format %d) +#>11 byte >1 using %d channels +# Creative Music (CMF) data +0 string CTMF audio/unknown +# SoundBlaster instrument data +0 string SBI audio/unknown +# Creative Labs voice data +0 string Creative\ Voice\ File audio/unknown +## is this next line right? it came this way... +#>19 byte 0x1A +#>23 byte >0 - version %d +#>22 byte >0 \b.%d + +# [GRR 950115: is this also Creative Labs? Guessing that first line +# should be string instead of unknown-endian long...] +#0 long 0x4e54524b MultiTrack sound data +#0 string NTRK MultiTrack sound data +#>4 long x - version %ld + +# Microsoft WAVE format (*.wav) +# [GRR 950115: probably all of the shorts and longs should be leshort/lelong] +# Microsoft RIFF +0 string RIFF audio/unknown +# - WAVE format +>8 string WAVE audio/x-wav + +#------------------------------------------------------------------------------ +# c-lang: file(1) magic for C programs or various scripts +# + +# XPM icons (Greg Roelofs, newt@uchicago.edu) +# ideally should go into "images", but entries below would tag XPM as C source +0 string /*\ XPM image/x-xbm 7bit + +# this first will upset you if you're a PL/1 shop... (are there any left?) +# in which case rm it; ascmagic will catch real C programs +# C or REXX program text +0 string /* text/plain +# C++ program text +0 string // text/plain + +#------------------------------------------------------------------------------ +# compress: file(1) magic for pure-compression formats (no archives) +# +# compress, gzip, pack, compact, huf, squeeze, crunch, freeze, yabba, whap, etc. +# +# Formats for various forms of compressed data +# Formats for "compress" proper have been moved into "compress.c", +# because it tries to uncompress it to figure out what's inside. + +# standard unix compress +0 string \037\235 application/octet-stream x-compress + +# gzip (GNU zip, not to be confused with [Info-ZIP/PKWARE] zip archiver) +0 string \037\213 application/octet-stream x-gzip + +# According to gzip.h, this is the correct byte order for packed data. +0 string \037\036 application/octet-stream +# +# This magic number is byte-order-independent. +# +0 short 017437 application/octet-stream + +# XXX - why *two* entries for "compacted data", one of which is +# byte-order independent, and one of which is byte-order dependent? +# +# compacted data +0 short 0x1fff application/octet-stream +0 string \377\037 application/octet-stream +# huf output +0 short 0145405 application/octet-stream + +# Squeeze and Crunch... +# These numbers were gleaned from the Unix versions of the programs to +# handle these formats. Note that I can only uncrunch, not crunch, and +# I didn't have a crunched file handy, so the crunch number is untested. +# Keith Waclena +#0 leshort 0x76FF squeezed data (CP/M, DOS) +#0 leshort 0x76FE crunched data (CP/M, DOS) + +# Freeze +#0 string \037\237 Frozen file 2.1 +#0 string \037\236 Frozen file 1.0 (or gzip 0.5) + +# lzh? +#0 string \037\240 LZH compressed data + +#------------------------------------------------------------------------------ +# frame: file(1) magic for FrameMaker files +# +# This stuff came on a FrameMaker demo tape, most of which is +# copyright, but this file is "published" as witness the following: +# +0 string \ +# and Anna Shergold +# +0 string \14 byte 12 (OS/2 1.x format) +#>14 byte 64 (OS/2 2.x format) +#>14 byte 40 (Windows 3.x format) +#0 string IC icon +#0 string PI pointer +#0 string CI color icon +#0 string CP color pointer +#0 string BA bitmap array + + +#------------------------------------------------------------------------------ +# lisp: file(1) magic for lisp programs +# +# various lisp types, from Daniel Quinlan (quinlan@yggdrasil.com) +0 string ;; text/plain 8bit +# Emacs 18 - this is always correct, but not very magical. +0 string \012( application/x-elc +# Emacs 19 +0 string ;ELC\023\000\000\000 application/x-elc + +#------------------------------------------------------------------------------ +# mail.news: file(1) magic for mail and news +# +# There are tests to ascmagic.c to cope with mail and news. +0 string Relay-Version: message/rfc822 7bit +0 string #!\ rnews message/rfc822 7bit +0 string N#!\ rnews message/rfc822 7bit +0 string Forward\ to message/rfc822 7bit +0 string Pipe\ to message/rfc822 7bit +0 string Return-Path: message/rfc822 7bit +0 string Path: message/news 8bit +0 string Xref: message/news 8bit +0 string From: message/rfc822 7bit +0 string Article message/news 8bit +#------------------------------------------------------------------------------ +# msword: file(1) magic for MS Word files +# +# Contributor claims: +# Reversed-engineered MS Word magic numbers +# + +0 string \376\067\0\043 application/msword +0 string \333\245-\0\0\0 application/msword + +# disable this one because it applies also to other +# Office/OLE documents for which msword is not correct. See PR#2608. +#0 string \320\317\021\340\241\261 application/msword + + + +#------------------------------------------------------------------------------ +# printer: file(1) magic for printer-formatted files +# + +# PostScript +0 string %! application/postscript +0 string \004%! application/postscript + +# Acrobat +# (due to clamen@cs.cmu.edu) +0 string %PDF- application/pdf + +#------------------------------------------------------------------------------ +# sc: file(1) magic for "sc" spreadsheet +# +38 string Spreadsheet application/x-sc + +#------------------------------------------------------------------------------ +# tex: file(1) magic for TeX files +# +# XXX - needs byte-endian stuff (big-endian and little-endian DVI?) +# +# From + +# Although we may know the offset of certain text fields in TeX DVI +# and font files, we can't use them reliably because they are not +# zero terminated. [but we do anyway, christos] +0 string \367\002 application/x-dvi +#0 string \367\203 TeX generic font data +#0 string \367\131 TeX packed font data +#0 string \367\312 TeX virtual font data +#0 string This\ is\ TeX, TeX transcript text +#0 string This\ is\ METAFONT, METAFONT transcript text + +# There is no way to detect TeX Font Metric (*.tfm) files without +# breaking them apart and reading the data. The following patterns +# match most *.tfm files generated by METAFONT or afm2tfm. +#2 string \000\021 TeX font metric data +#2 string \000\022 TeX font metric data +#>34 string >\0 (%s) + +# Texinfo and GNU Info, from Daniel Quinlan (quinlan@yggdrasil.com) +#0 string \\input\ texinfo Texinfo source text +#0 string This\ is\ Info\ file GNU Info text + +# correct TeX magic for Linux (and maybe more) +# from Peter Tobias (tobias@server.et-inf.fho-emden.de) +# +0 leshort 0x02f7 application/x-dvi + +# RTF - Rich Text Format +0 string {\\rtf application/rtf + +#------------------------------------------------------------------------------ +# animation: file(1) magic for animation/movie formats +# +# animation formats, originally from vax@ccwf.cc.utexas.edu (VaX#n8) +# MPEG file +0 string \000\000\001\263 video/mpeg +# +# The contributor claims: +# I couldn't find a real magic number for these, however, this +# -appears- to work. Note that it might catch other files, too, +# so BE CAREFUL! +# +# Note that title and author appear in the two 20-byte chunks +# at decimal offsets 2 and 22, respectively, but they are XOR'ed with +# 255 (hex FF)! DL format SUCKS BIG ROCKS. +# +# DL file version 1 , medium format (160x100, 4 images/screen) +0 byte 1 video/unknown +0 byte 2 video/unknown + diff --git a/noc/monitor.easterhegg.de/apache2/mods-available/actions.load b/noc/monitor.easterhegg.de/apache2/mods-available/actions.load new file mode 100644 index 0000000..4207df3 --- /dev/null +++ b/noc/monitor.easterhegg.de/apache2/mods-available/actions.load @@ -0,0 +1 @@ +LoadModule actions_module /usr/lib/apache2/modules/mod_actions.so diff --git a/noc/monitor.easterhegg.de/apache2/mods-available/asis.load b/noc/monitor.easterhegg.de/apache2/mods-available/asis.load new file mode 100644 index 0000000..60d1145 --- /dev/null +++ b/noc/monitor.easterhegg.de/apache2/mods-available/asis.load @@ -0,0 +1 @@ +LoadModule asis_module /usr/lib/apache2/modules/mod_asis.so diff --git a/noc/monitor.easterhegg.de/apache2/mods-available/auth_anon.load b/noc/monitor.easterhegg.de/apache2/mods-available/auth_anon.load new file mode 100644 index 0000000..7a7dbf9 --- /dev/null +++ b/noc/monitor.easterhegg.de/apache2/mods-available/auth_anon.load @@ -0,0 +1 @@ +LoadModule auth_anon_module /usr/lib/apache2/modules/mod_auth_anon.so diff --git a/noc/monitor.easterhegg.de/apache2/mods-available/auth_dbm.load b/noc/monitor.easterhegg.de/apache2/mods-available/auth_dbm.load new file mode 100644 index 0000000..935cbc9 --- /dev/null +++ b/noc/monitor.easterhegg.de/apache2/mods-available/auth_dbm.load @@ -0,0 +1 @@ +LoadModule auth_dbm_module /usr/lib/apache2/modules/mod_auth_dbm.so diff --git a/noc/monitor.easterhegg.de/apache2/mods-available/auth_digest.load b/noc/monitor.easterhegg.de/apache2/mods-available/auth_digest.load new file mode 100644 index 0000000..e936bc5 --- /dev/null +++ b/noc/monitor.easterhegg.de/apache2/mods-available/auth_digest.load @@ -0,0 +1 @@ +LoadModule auth_digest_module /usr/lib/apache2/modules/mod_auth_digest.so diff --git a/noc/monitor.easterhegg.de/apache2/mods-available/auth_ldap.load b/noc/monitor.easterhegg.de/apache2/mods-available/auth_ldap.load new file mode 100644 index 0000000..384ba5c --- /dev/null +++ b/noc/monitor.easterhegg.de/apache2/mods-available/auth_ldap.load @@ -0,0 +1,2 @@ +LoadModule ldap_module /usr/lib/apache2/modules/mod_ldap.so +LoadModule auth_ldap_module /usr/lib/apache2/modules/mod_auth_ldap.so diff --git a/noc/monitor.easterhegg.de/apache2/mods-available/cache.load b/noc/monitor.easterhegg.de/apache2/mods-available/cache.load new file mode 100644 index 0000000..e3189a0 --- /dev/null +++ b/noc/monitor.easterhegg.de/apache2/mods-available/cache.load @@ -0,0 +1 @@ +LoadModule cache_module /usr/lib/apache2/modules/mod_cache.so diff --git a/noc/monitor.easterhegg.de/apache2/mods-available/cern_meta.load b/noc/monitor.easterhegg.de/apache2/mods-available/cern_meta.load new file mode 100644 index 0000000..bcc7546 --- /dev/null +++ b/noc/monitor.easterhegg.de/apache2/mods-available/cern_meta.load @@ -0,0 +1 @@ +LoadModule cern_meta_module /usr/lib/apache2/modules/mod_cern_meta.so diff --git a/noc/monitor.easterhegg.de/apache2/mods-available/cgi.load b/noc/monitor.easterhegg.de/apache2/mods-available/cgi.load new file mode 100644 index 0000000..1be9048 --- /dev/null +++ b/noc/monitor.easterhegg.de/apache2/mods-available/cgi.load @@ -0,0 +1 @@ +LoadModule cgi_module /usr/lib/apache2/modules/mod_cgi.so diff --git a/noc/monitor.easterhegg.de/apache2/mods-available/cgid.conf b/noc/monitor.easterhegg.de/apache2/mods-available/cgid.conf new file mode 100644 index 0000000..ef8a393 --- /dev/null +++ b/noc/monitor.easterhegg.de/apache2/mods-available/cgid.conf @@ -0,0 +1,2 @@ +# Socket thingy for CGI. +ScriptSock /var/run/apache2/cgisock diff --git a/noc/monitor.easterhegg.de/apache2/mods-available/cgid.load b/noc/monitor.easterhegg.de/apache2/mods-available/cgid.load new file mode 100644 index 0000000..e036f7d --- /dev/null +++ b/noc/monitor.easterhegg.de/apache2/mods-available/cgid.load @@ -0,0 +1 @@ +LoadModule cgid_module /usr/lib/apache2/modules/mod_cgid.so diff --git a/noc/monitor.easterhegg.de/apache2/mods-available/dav.load b/noc/monitor.easterhegg.de/apache2/mods-available/dav.load new file mode 100644 index 0000000..6f6d1bb --- /dev/null +++ b/noc/monitor.easterhegg.de/apache2/mods-available/dav.load @@ -0,0 +1 @@ +LoadModule dav_module /usr/lib/apache2/modules/mod_dav.so diff --git a/noc/monitor.easterhegg.de/apache2/mods-available/dav_fs.conf b/noc/monitor.easterhegg.de/apache2/mods-available/dav_fs.conf new file mode 100644 index 0000000..ce9f418 --- /dev/null +++ b/noc/monitor.easterhegg.de/apache2/mods-available/dav_fs.conf @@ -0,0 +1,2 @@ +DAVLockDB /var/lock/apache2/DAVLock + diff --git a/noc/monitor.easterhegg.de/apache2/mods-available/dav_fs.load b/noc/monitor.easterhegg.de/apache2/mods-available/dav_fs.load new file mode 100644 index 0000000..748351e --- /dev/null +++ b/noc/monitor.easterhegg.de/apache2/mods-available/dav_fs.load @@ -0,0 +1 @@ +LoadModule dav_fs_module /usr/lib/apache2/modules/mod_dav_fs.so diff --git a/noc/monitor.easterhegg.de/apache2/mods-available/deflate.load b/noc/monitor.easterhegg.de/apache2/mods-available/deflate.load new file mode 100644 index 0000000..d08bbf2 --- /dev/null +++ b/noc/monitor.easterhegg.de/apache2/mods-available/deflate.load @@ -0,0 +1 @@ +LoadModule deflate_module /usr/lib/apache2/modules/mod_deflate.so diff --git a/noc/monitor.easterhegg.de/apache2/mods-available/disk_cache.load b/noc/monitor.easterhegg.de/apache2/mods-available/disk_cache.load new file mode 100644 index 0000000..5fb12f0 --- /dev/null +++ b/noc/monitor.easterhegg.de/apache2/mods-available/disk_cache.load @@ -0,0 +1 @@ +LoadModule disk_cache_module /usr/lib/apache2/modules/mod_disk_cache.so diff --git a/noc/monitor.easterhegg.de/apache2/mods-available/expires.load b/noc/monitor.easterhegg.de/apache2/mods-available/expires.load new file mode 100644 index 0000000..092acab --- /dev/null +++ b/noc/monitor.easterhegg.de/apache2/mods-available/expires.load @@ -0,0 +1 @@ +LoadModule expires_module /usr/lib/apache2/modules/mod_expires.so diff --git a/noc/monitor.easterhegg.de/apache2/mods-available/ext_filter.load b/noc/monitor.easterhegg.de/apache2/mods-available/ext_filter.load new file mode 100644 index 0000000..b3a1596 --- /dev/null +++ b/noc/monitor.easterhegg.de/apache2/mods-available/ext_filter.load @@ -0,0 +1 @@ +LoadModule ext_filter_module /usr/lib/apache2/modules/mod_ext_filter.so diff --git a/noc/monitor.easterhegg.de/apache2/mods-available/file_cache.load b/noc/monitor.easterhegg.de/apache2/mods-available/file_cache.load new file mode 100644 index 0000000..45d1e57 --- /dev/null +++ b/noc/monitor.easterhegg.de/apache2/mods-available/file_cache.load @@ -0,0 +1 @@ +LoadModule file_cache_module /usr/lib/apache2/modules/mod_file_cache.so diff --git a/noc/monitor.easterhegg.de/apache2/mods-available/headers.load b/noc/monitor.easterhegg.de/apache2/mods-available/headers.load new file mode 100644 index 0000000..e4497e5 --- /dev/null +++ b/noc/monitor.easterhegg.de/apache2/mods-available/headers.load @@ -0,0 +1 @@ +LoadModule headers_module /usr/lib/apache2/modules/mod_headers.so diff --git a/noc/monitor.easterhegg.de/apache2/mods-available/imap.load b/noc/monitor.easterhegg.de/apache2/mods-available/imap.load new file mode 100644 index 0000000..38773ee --- /dev/null +++ b/noc/monitor.easterhegg.de/apache2/mods-available/imap.load @@ -0,0 +1 @@ +LoadModule imap_module /usr/lib/apache2/modules/mod_imap.so diff --git a/noc/monitor.easterhegg.de/apache2/mods-available/include.load b/noc/monitor.easterhegg.de/apache2/mods-available/include.load new file mode 100644 index 0000000..73b56f5 --- /dev/null +++ b/noc/monitor.easterhegg.de/apache2/mods-available/include.load @@ -0,0 +1 @@ +LoadModule include_module /usr/lib/apache2/modules/mod_include.so diff --git a/noc/monitor.easterhegg.de/apache2/mods-available/info.load b/noc/monitor.easterhegg.de/apache2/mods-available/info.load new file mode 100644 index 0000000..c71efcc --- /dev/null +++ b/noc/monitor.easterhegg.de/apache2/mods-available/info.load @@ -0,0 +1 @@ +LoadModule info_module /usr/lib/apache2/modules/mod_info.so diff --git a/noc/monitor.easterhegg.de/apache2/mods-available/ldap.load b/noc/monitor.easterhegg.de/apache2/mods-available/ldap.load new file mode 100644 index 0000000..f9d38a3 --- /dev/null +++ b/noc/monitor.easterhegg.de/apache2/mods-available/ldap.load @@ -0,0 +1 @@ +LoadModule ldap_module /usr/lib/apache2/modules/mod_ldap.so diff --git a/noc/monitor.easterhegg.de/apache2/mods-available/mem_cache.load b/noc/monitor.easterhegg.de/apache2/mods-available/mem_cache.load new file mode 100644 index 0000000..9444217 --- /dev/null +++ b/noc/monitor.easterhegg.de/apache2/mods-available/mem_cache.load @@ -0,0 +1 @@ +LoadModule mem_cache_module /usr/lib/apache2/modules/mod_mem_cache.so diff --git a/noc/monitor.easterhegg.de/apache2/mods-available/mime_magic.conf b/noc/monitor.easterhegg.de/apache2/mods-available/mime_magic.conf new file mode 100644 index 0000000..abaa14f --- /dev/null +++ b/noc/monitor.easterhegg.de/apache2/mods-available/mime_magic.conf @@ -0,0 +1,3 @@ + + MIMEMagicFile /usr/share/misc/file/magic.mime + diff --git a/noc/monitor.easterhegg.de/apache2/mods-available/mime_magic.load b/noc/monitor.easterhegg.de/apache2/mods-available/mime_magic.load new file mode 100644 index 0000000..42357db --- /dev/null +++ b/noc/monitor.easterhegg.de/apache2/mods-available/mime_magic.load @@ -0,0 +1 @@ +LoadModule mime_magic_module /usr/lib/apache2/modules/mod_mime_magic.so diff --git a/noc/monitor.easterhegg.de/apache2/mods-available/php4.conf b/noc/monitor.easterhegg.de/apache2/mods-available/php4.conf new file mode 100644 index 0000000..0a85477 --- /dev/null +++ b/noc/monitor.easterhegg.de/apache2/mods-available/php4.conf @@ -0,0 +1,4 @@ + + AddType application/x-httpd-php .php .phtml .php3 + AddType application/x-httpd-php-source .phps + diff --git a/noc/monitor.easterhegg.de/apache2/mods-available/php4.load b/noc/monitor.easterhegg.de/apache2/mods-available/php4.load new file mode 100644 index 0000000..fc3b284 --- /dev/null +++ b/noc/monitor.easterhegg.de/apache2/mods-available/php4.load @@ -0,0 +1 @@ +LoadModule php4_module /usr/lib/apache2/modules/libphp4.so diff --git a/noc/monitor.easterhegg.de/apache2/mods-available/proxy.conf b/noc/monitor.easterhegg.de/apache2/mods-available/proxy.conf new file mode 100644 index 0000000..6b7a567 --- /dev/null +++ b/noc/monitor.easterhegg.de/apache2/mods-available/proxy.conf @@ -0,0 +1,32 @@ + + + #turning ProxyRequests on and allowing proxying from all may allow + #spammers to use your proxy to send email. + + ProxyRequests Off + + + Order deny,allow + Deny from all + #Allow from .your_domain.com + + + # Enable/disable the handling of HTTP/1.1 "Via:" headers. + # ("Full" adds the server version; "Block" removes all outgoing Via: headers) + # Set to one of: Off | On | Full | Block + + ProxyVia On + + # To enable the cache as well, edit and uncomment the following lines: + # (no cacheing without CacheRoot) + + CacheRoot "/var/cache/apache2/proxy" + CacheSize 5 + CacheGcInterval 4 + CacheMaxExpire 24 + CacheLastModifiedFactor 0.1 + CacheDefaultExpire 1 + # Again, you probably should change this. + #NoCache a_domain.com another_domain.edu joes.garage_sale.com + + diff --git a/noc/monitor.easterhegg.de/apache2/mods-available/proxy.load b/noc/monitor.easterhegg.de/apache2/mods-available/proxy.load new file mode 100644 index 0000000..e0301e2 --- /dev/null +++ b/noc/monitor.easterhegg.de/apache2/mods-available/proxy.load @@ -0,0 +1,4 @@ +LoadModule cache_module /usr/lib/apache2/modules/mod_cache.so +LoadModule disk_cache_module /usr/lib/apache2/modules/mod_disk_cache.so +LoadModule proxy_module /usr/lib/apache2/modules/mod_proxy.so +LoadModule proxy_http_module /usr/lib/apache2/modules/mod_proxy_http.so diff --git a/noc/monitor.easterhegg.de/apache2/mods-available/proxy_connect.load b/noc/monitor.easterhegg.de/apache2/mods-available/proxy_connect.load new file mode 100644 index 0000000..c062e54 --- /dev/null +++ b/noc/monitor.easterhegg.de/apache2/mods-available/proxy_connect.load @@ -0,0 +1 @@ +LoadModule proxy_connect_module /usr/lib/apache2/modules/mod_proxy_connect.so diff --git a/noc/monitor.easterhegg.de/apache2/mods-available/proxy_ftp.load b/noc/monitor.easterhegg.de/apache2/mods-available/proxy_ftp.load new file mode 100644 index 0000000..299b692 --- /dev/null +++ b/noc/monitor.easterhegg.de/apache2/mods-available/proxy_ftp.load @@ -0,0 +1 @@ +LoadModule proxy_ftp_module /usr/lib/apache2/modules/mod_proxy_ftp.so diff --git a/noc/monitor.easterhegg.de/apache2/mods-available/proxy_http.load b/noc/monitor.easterhegg.de/apache2/mods-available/proxy_http.load new file mode 100644 index 0000000..1770f0d --- /dev/null +++ b/noc/monitor.easterhegg.de/apache2/mods-available/proxy_http.load @@ -0,0 +1 @@ +LoadModule proxy_http_module /usr/lib/apache2/modules/mod_proxy_http.so diff --git a/noc/monitor.easterhegg.de/apache2/mods-available/rewrite.load b/noc/monitor.easterhegg.de/apache2/mods-available/rewrite.load new file mode 100644 index 0000000..b32f162 --- /dev/null +++ b/noc/monitor.easterhegg.de/apache2/mods-available/rewrite.load @@ -0,0 +1 @@ +LoadModule rewrite_module /usr/lib/apache2/modules/mod_rewrite.so diff --git a/noc/monitor.easterhegg.de/apache2/mods-available/speling.load b/noc/monitor.easterhegg.de/apache2/mods-available/speling.load new file mode 100644 index 0000000..423e401 --- /dev/null +++ b/noc/monitor.easterhegg.de/apache2/mods-available/speling.load @@ -0,0 +1 @@ +LoadModule speling_module /usr/lib/apache2/modules/mod_speling.so diff --git a/noc/monitor.easterhegg.de/apache2/mods-available/ssl.conf b/noc/monitor.easterhegg.de/apache2/mods-available/ssl.conf new file mode 100644 index 0000000..6cf103f --- /dev/null +++ b/noc/monitor.easterhegg.de/apache2/mods-available/ssl.conf @@ -0,0 +1,73 @@ + +# Pseudo Random Number Generator (PRNG): +# Configure one or more sources to seed the PRNG of the SSL library. +# The seed data should be of good random quality. +# WARNING! On some platforms /dev/random blocks if not enough entropy +# is available. This means you then cannot use the /dev/random device +# because it would lead to very long connection times (as long as +# it requires to make more entropy available). But usually those +# platforms additionally provide a /dev/urandom device which doesn't +# block. So, if available, use this one instead. Read the mod_ssl User +# Manual for more details. +# +SSLRandomSeed startup builtin +SSLRandomSeed connect builtin +#SSLRandomSeed startup file:/dev/random 512 +#SSLRandomSeed startup file:/dev/urandom 512 +#SSLRandomSeed connect file:/dev/random 512 +#SSLRandomSeed connect file:/dev/urandom 512 + +# Some MIME-types for downloading Certificates and CRLs +# +AddType application/x-x509-ca-cert .crt +AddType application/x-pkcs7-crl .crl + +# Pass Phrase Dialog: +# Configure the pass phrase gathering process. +# The filtering dialog program (`builtin' is a internal +# terminal dialog) has to provide the pass phrase on stdout. +SSLPassPhraseDialog builtin + +# Inter-Process Session Cache: +# Configure the SSL Session Cache: First the mechanism +# to use and second the expiring timeout (in seconds). +#SSLSessionCache none +#SSLSessionCache shmht:/var/run/apache2/ssl_scache(512000) +#SSLSessionCache shmcb:/var/run/apache2/ssl_scache(512000) +SSLSessionCache dbm:/var/run/apache2/ssl_scache +SSLSessionCacheTimeout 300 + +# Semaphore: +# Configure the path to the mutual exclusion semaphore the +# SSL engine uses internally for inter-process synchronization. +SSLMutex file:/var/run/apache2/ssl_mutex +SSLCipherSuite ALL:!ADH:!EXPORT56:RC4+RSA:+HIGH:+MEDIUM:+LOW:+SSLv2:+EXP:+eNULL + +# SSL Protocol Adjustments: +# The safe and default but still SSL/TLS standard compliant shutdown +# approach is that mod_ssl sends the close notify alert but doesn't wait for +# the close notify alert from client. When you need a different shutdown +# approach you can use one of the following variables: +# o ssl-unclean-shutdown: +# This forces an unclean shutdown when the connection is closed, i.e. no +# SSL close notify alert is send or allowed to received. This violates +# the SSL/TLS standard but is needed for some brain-dead browsers. Use +# this when you receive I/O errors because of the standard approach where +# mod_ssl sends the close notify alert. +# o ssl-accurate-shutdown: +# This forces an accurate shutdown when the connection is closed, i.e. a +# SSL close notify alert is send and mod_ssl waits for the close notify +# alert of the client. This is 100% SSL/TLS standard compliant, but in +# practice often causes hanging connections with brain-dead browsers. Use +# this only for browsers where you know that their SSL implementation +# works correctly. +# Notice: Most problems of broken clients are also related to the HTTP +# keep-alive facility, so you usually additionally want to disable +# keep-alive for those clients, too. Use variable "nokeepalive" for this. +# Similarly, one has to force some clients to use HTTP/1.0 to workaround +# their broken HTTP/1.1 implementation. Use variables "downgrade-1.0" and +# "force-response-1.0" for this. +SetEnvIf User-Agent ".*MSIE.*" \ + nokeepalive ssl-unclean-shutdown \ + downgrade-1.0 force-response-1.0 + diff --git a/noc/monitor.easterhegg.de/apache2/mods-available/ssl.load b/noc/monitor.easterhegg.de/apache2/mods-available/ssl.load new file mode 100644 index 0000000..ff861da --- /dev/null +++ b/noc/monitor.easterhegg.de/apache2/mods-available/ssl.load @@ -0,0 +1 @@ +LoadModule ssl_module /usr/lib/apache2/modules/mod_ssl.so diff --git a/noc/monitor.easterhegg.de/apache2/mods-available/suexec.load b/noc/monitor.easterhegg.de/apache2/mods-available/suexec.load new file mode 100644 index 0000000..116858b --- /dev/null +++ b/noc/monitor.easterhegg.de/apache2/mods-available/suexec.load @@ -0,0 +1 @@ +LoadModule suexec_module /usr/lib/apache2/modules/mod_suexec.so diff --git a/noc/monitor.easterhegg.de/apache2/mods-available/unique_id.load b/noc/monitor.easterhegg.de/apache2/mods-available/unique_id.load new file mode 100644 index 0000000..2d0c9eb --- /dev/null +++ b/noc/monitor.easterhegg.de/apache2/mods-available/unique_id.load @@ -0,0 +1 @@ +LoadModule unique_id_module /usr/lib/apache2/modules/mod_unique_id.so diff --git a/noc/monitor.easterhegg.de/apache2/mods-available/userdir.conf b/noc/monitor.easterhegg.de/apache2/mods-available/userdir.conf new file mode 100644 index 0000000..90ea184 --- /dev/null +++ b/noc/monitor.easterhegg.de/apache2/mods-available/userdir.conf @@ -0,0 +1,9 @@ + + UserDir public_html + UserDir disabled root + + + AllowOverride FileInfo AuthConfig Limit + Options MultiViews Indexes SymLinksIfOwnerMatch IncludesNoExec + + diff --git a/noc/monitor.easterhegg.de/apache2/mods-available/userdir.load b/noc/monitor.easterhegg.de/apache2/mods-available/userdir.load new file mode 100644 index 0000000..0cfc621 --- /dev/null +++ b/noc/monitor.easterhegg.de/apache2/mods-available/userdir.load @@ -0,0 +1 @@ +LoadModule userdir_module /usr/lib/apache2/modules/mod_userdir.so diff --git a/noc/monitor.easterhegg.de/apache2/mods-available/usertrack.load b/noc/monitor.easterhegg.de/apache2/mods-available/usertrack.load new file mode 100644 index 0000000..25918b5 --- /dev/null +++ b/noc/monitor.easterhegg.de/apache2/mods-available/usertrack.load @@ -0,0 +1 @@ +LoadModule usertrack_module /usr/lib/apache2/modules/mod_usertrack.so diff --git a/noc/monitor.easterhegg.de/apache2/mods-available/vhost_alias.load b/noc/monitor.easterhegg.de/apache2/mods-available/vhost_alias.load new file mode 100644 index 0000000..4fe4cb6 --- /dev/null +++ b/noc/monitor.easterhegg.de/apache2/mods-available/vhost_alias.load @@ -0,0 +1 @@ +LoadModule vhost_alias_module /usr/lib/apache2/modules/mod_vhost_alias.so diff --git a/noc/monitor.easterhegg.de/apache2/mods-enabled/cgi.load b/noc/monitor.easterhegg.de/apache2/mods-enabled/cgi.load new file mode 120000 index 0000000..ff02a57 --- /dev/null +++ b/noc/monitor.easterhegg.de/apache2/mods-enabled/cgi.load @@ -0,0 +1 @@ +../mods-available/cgi.load \ No newline at end of file diff --git a/noc/monitor.easterhegg.de/apache2/mods-enabled/include.load b/noc/monitor.easterhegg.de/apache2/mods-enabled/include.load new file mode 120000 index 0000000..5473bf5 --- /dev/null +++ b/noc/monitor.easterhegg.de/apache2/mods-enabled/include.load @@ -0,0 +1 @@ +../mods-available/include.load \ No newline at end of file diff --git a/noc/monitor.easterhegg.de/apache2/mods-enabled/php4.conf b/noc/monitor.easterhegg.de/apache2/mods-enabled/php4.conf new file mode 120000 index 0000000..0ea90c1 --- /dev/null +++ b/noc/monitor.easterhegg.de/apache2/mods-enabled/php4.conf @@ -0,0 +1 @@ +../mods-available/php4.conf \ No newline at end of file diff --git a/noc/monitor.easterhegg.de/apache2/mods-enabled/php4.load b/noc/monitor.easterhegg.de/apache2/mods-enabled/php4.load new file mode 120000 index 0000000..d6ac7d9 --- /dev/null +++ b/noc/monitor.easterhegg.de/apache2/mods-enabled/php4.load @@ -0,0 +1 @@ +../mods-available/php4.load \ No newline at end of file diff --git a/noc/monitor.easterhegg.de/apache2/mods-enabled/userdir.conf b/noc/monitor.easterhegg.de/apache2/mods-enabled/userdir.conf new file mode 120000 index 0000000..52d30ce --- /dev/null +++ b/noc/monitor.easterhegg.de/apache2/mods-enabled/userdir.conf @@ -0,0 +1 @@ +../mods-available/userdir.conf \ No newline at end of file diff --git a/noc/monitor.easterhegg.de/apache2/mods-enabled/userdir.load b/noc/monitor.easterhegg.de/apache2/mods-enabled/userdir.load new file mode 120000 index 0000000..16bb9cf --- /dev/null +++ b/noc/monitor.easterhegg.de/apache2/mods-enabled/userdir.load @@ -0,0 +1 @@ +../mods-available/userdir.load \ No newline at end of file diff --git a/noc/monitor.easterhegg.de/apache2/ports.conf b/noc/monitor.easterhegg.de/apache2/ports.conf new file mode 100644 index 0000000..5c1d82b --- /dev/null +++ b/noc/monitor.easterhegg.de/apache2/ports.conf @@ -0,0 +1 @@ +Listen 80 diff --git a/noc/monitor.easterhegg.de/apache2/sites-available/default b/noc/monitor.easterhegg.de/apache2/sites-available/default new file mode 100644 index 0000000..948f97f --- /dev/null +++ b/noc/monitor.easterhegg.de/apache2/sites-available/default @@ -0,0 +1,46 @@ +NameVirtualHost * + + ServerAdmin webmaster@localhost + + DocumentRoot /var/www/ + + Options FollowSymLinks + AllowOverride None + + + Options Indexes FollowSymLinks MultiViews Includes + AllowOverride None + Order allow,deny + allow from all + # This directive allows us to have apache2's default start page + # in /apache2-default/, but still have / go to the right place + #RedirectMatch ^/$ /apache2-default/ + + + ScriptAlias /cgi-bin/ /usr/lib/cgi-bin/ + + AllowOverride None + Options ExecCGI -MultiViews +SymLinksIfOwnerMatch + Order allow,deny + Allow from all + + + ErrorLog /var/log/apache2/error.log + + # Possible values include: debug, info, notice, warn, error, crit, + # alert, emerg. + LogLevel warn + + CustomLog /var/log/apache2/access.log combined + ServerSignature On + + Alias /doc/ "/usr/share/doc/" + + Options Indexes MultiViews FollowSymLinks + AllowOverride None + Order deny,allow + Deny from all + Allow from 127.0.0.0/255.0.0.0 ::1/128 + + + diff --git a/noc/monitor.easterhegg.de/apache2/sites-enabled/000-default b/noc/monitor.easterhegg.de/apache2/sites-enabled/000-default new file mode 120000 index 0000000..679726d --- /dev/null +++ b/noc/monitor.easterhegg.de/apache2/sites-enabled/000-default @@ -0,0 +1 @@ +/etc/apache2/sites-available/default \ No newline at end of file diff --git a/noc/monitor.easterhegg.de/cacti.sql b/noc/monitor.easterhegg.de/cacti.sql new file mode 100644 index 0000000..8a04b37 --- /dev/null +++ b/noc/monitor.easterhegg.de/cacti.sql @@ -0,0 +1,12789 @@ +-- MySQL dump 9.11 +-- +-- Host: localhost Database: cacti +-- ------------------------------------------------------ +-- Server version 4.0.24_Debian-2-log + +-- +-- Table structure for table `cdef` +-- + +CREATE TABLE `cdef` ( + `id` mediumint(8) unsigned NOT NULL auto_increment, + `hash` varchar(32) NOT NULL default '', + `name` varchar(255) NOT NULL default '', + PRIMARY KEY (`id`), + UNIQUE KEY `ID` (`id`), + KEY `id_2` (`id`) +) TYPE=MyISAM; + +-- +-- Dumping data for table `cdef` +-- + +INSERT INTO `cdef` VALUES (3,'3d352eed9fa8f7b2791205b3273708c7','Make Stack Negative'); +INSERT INTO `cdef` VALUES (4,'e961cc8ec04fda6ed4981cf5ad501aa5','Make Per 5 Minutes'); +INSERT INTO `cdef` VALUES (12,'f1ac79f05f255c02f914c920f1038c54','Total All Data Sources'); +INSERT INTO `cdef` VALUES (2,'73f95f8b77b5508157d64047342c421e','Turn Bytes into Bits'); +INSERT INTO `cdef` VALUES (14,'634a23af5e78af0964e8d33b1a4ed26b','Multiply by 1024'); +INSERT INTO `cdef` VALUES (15,'068984b5ccdfd2048869efae5166f722','Total All Data Sources, Multiply by 1024'); + +-- +-- Table structure for table `cdef_items` +-- + +CREATE TABLE `cdef_items` ( + `id` mediumint(8) unsigned NOT NULL auto_increment, + `hash` varchar(32) NOT NULL default '', + `cdef_id` mediumint(8) unsigned NOT NULL default '0', + `sequence` mediumint(8) unsigned NOT NULL default '0', + `type` tinyint(2) NOT NULL default '0', + `value` varchar(150) NOT NULL default '', + PRIMARY KEY (`id`), + UNIQUE KEY `ID` (`id`), + KEY `cdef_id` (`cdef_id`) +) TYPE=MyISAM; + +-- +-- Dumping data for table `cdef_items` +-- + +INSERT INTO `cdef_items` VALUES (7,'9bbf6b792507bb9bb17d2af0970f9be9',2,1,4,'CURRENT_DATA_SOURCE'); +INSERT INTO `cdef_items` VALUES (9,'a4b8eb2c3bf4920a3ef571a7a004be53',2,2,6,'8'); +INSERT INTO `cdef_items` VALUES (8,'caa4e023ac2d7b1c4b4c8c4adfd55dfe',2,3,2,'3'); +INSERT INTO `cdef_items` VALUES (10,'c888c9fe6b62c26c4bfe23e18991731d',3,1,4,'CURRENT_DATA_SOURCE'); +INSERT INTO `cdef_items` VALUES (11,'1e1d0b29a94e08b648c8f053715442a0',3,3,2,'3'); +INSERT INTO `cdef_items` VALUES (12,'4355c197998c7f8b285be7821ddc6da4',3,2,6,'-1'); +INSERT INTO `cdef_items` VALUES (13,'40bb7a1143b0f2e2efca14eb356236de',4,1,4,'CURRENT_DATA_SOURCE'); +INSERT INTO `cdef_items` VALUES (14,'42686ea0925c0220924b7d333599cd67',4,3,2,'3'); +INSERT INTO `cdef_items` VALUES (15,'faf1b148b2c0e0527362ed5b8ca1d351',4,2,6,'300'); +INSERT INTO `cdef_items` VALUES (16,'0ef6b8a42dc83b4e43e437960fccd2ea',12,1,4,'ALL_DATA_SOURCES_NODUPS'); +INSERT INTO `cdef_items` VALUES (18,'86370cfa0008fe8c56b28be80ee39a40',14,1,4,'CURRENT_DATA_SOURCE'); +INSERT INTO `cdef_items` VALUES (19,'9a35cc60d47691af37f6fddf02064e20',14,2,6,'1024'); +INSERT INTO `cdef_items` VALUES (20,'5d7a7941ec0440b257e5598a27dd1688',14,3,2,'3'); +INSERT INTO `cdef_items` VALUES (21,'44fd595c60539ff0f5817731d9f43a85',15,1,4,'ALL_DATA_SOURCES_NODUPS'); +INSERT INTO `cdef_items` VALUES (22,'aa38be265e5ac31783e57ce6f9314e9a',15,2,6,'1024'); +INSERT INTO `cdef_items` VALUES (23,'204423d4b2598f1f7252eea19458345c',15,3,2,'3'); + +-- +-- Table structure for table `colors` +-- + +CREATE TABLE `colors` ( + `id` mediumint(8) unsigned NOT NULL auto_increment, + `hex` varchar(6) NOT NULL default '', + PRIMARY KEY (`id`), + UNIQUE KEY `ID` (`id`), + KEY `id_2` (`id`) +) TYPE=MyISAM; + +-- +-- Dumping data for table `colors` +-- + +INSERT INTO `colors` VALUES (1,'000000'); +INSERT INTO `colors` VALUES (2,'FFFFFF'); +INSERT INTO `colors` VALUES (4,'FAFD9E'); +INSERT INTO `colors` VALUES (5,'C0C0C0'); +INSERT INTO `colors` VALUES (6,'74C366'); +INSERT INTO `colors` VALUES (7,'6DC8FE'); +INSERT INTO `colors` VALUES (8,'EA8F00'); +INSERT INTO `colors` VALUES (9,'FF0000'); +INSERT INTO `colors` VALUES (10,'4444FF'); +INSERT INTO `colors` VALUES (11,'FF00FF'); +INSERT INTO `colors` VALUES (12,'00FF00'); +INSERT INTO `colors` VALUES (13,'8D85F3'); +INSERT INTO `colors` VALUES (14,'AD3B6E'); +INSERT INTO `colors` VALUES (15,'EACC00'); +INSERT INTO `colors` VALUES (16,'12B3B5'); +INSERT INTO `colors` VALUES (17,'157419'); +INSERT INTO `colors` VALUES (18,'C4FD3D'); +INSERT INTO `colors` VALUES (19,'817C4E'); +INSERT INTO `colors` VALUES (20,'002A97'); +INSERT INTO `colors` VALUES (21,'0000FF'); +INSERT INTO `colors` VALUES (22,'00CF00'); +INSERT INTO `colors` VALUES (24,'F9FD5F'); +INSERT INTO `colors` VALUES (25,'FFF200'); +INSERT INTO `colors` VALUES (26,'CCBB00'); +INSERT INTO `colors` VALUES (27,'837C04'); +INSERT INTO `colors` VALUES (28,'EAAF00'); +INSERT INTO `colors` VALUES (29,'FFD660'); +INSERT INTO `colors` VALUES (30,'FFC73B'); +INSERT INTO `colors` VALUES (31,'FFAB00'); +INSERT INTO `colors` VALUES (33,'FF7D00'); +INSERT INTO `colors` VALUES (34,'ED7600'); +INSERT INTO `colors` VALUES (35,'FF5700'); +INSERT INTO `colors` VALUES (36,'EE5019'); +INSERT INTO `colors` VALUES (37,'B1441E'); +INSERT INTO `colors` VALUES (38,'FFC3C0'); +INSERT INTO `colors` VALUES (39,'FF897C'); +INSERT INTO `colors` VALUES (40,'FF6044'); +INSERT INTO `colors` VALUES (41,'FF4105'); +INSERT INTO `colors` VALUES (42,'DA4725'); +INSERT INTO `colors` VALUES (43,'942D0C'); +INSERT INTO `colors` VALUES (44,'FF3932'); +INSERT INTO `colors` VALUES (45,'862F2F'); +INSERT INTO `colors` VALUES (46,'FF5576'); +INSERT INTO `colors` VALUES (47,'562B29'); +INSERT INTO `colors` VALUES (48,'F51D30'); +INSERT INTO `colors` VALUES (49,'DE0056'); +INSERT INTO `colors` VALUES (50,'ED5394'); +INSERT INTO `colors` VALUES (51,'B90054'); +INSERT INTO `colors` VALUES (52,'8F005C'); +INSERT INTO `colors` VALUES (53,'F24AC8'); +INSERT INTO `colors` VALUES (54,'E8CDEF'); +INSERT INTO `colors` VALUES (55,'D8ACE0'); +INSERT INTO `colors` VALUES (56,'A150AA'); +INSERT INTO `colors` VALUES (57,'750F7D'); +INSERT INTO `colors` VALUES (58,'8D00BA'); +INSERT INTO `colors` VALUES (59,'623465'); +INSERT INTO `colors` VALUES (60,'55009D'); +INSERT INTO `colors` VALUES (61,'3D168B'); +INSERT INTO `colors` VALUES (62,'311F4E'); +INSERT INTO `colors` VALUES (63,'D2D8F9'); +INSERT INTO `colors` VALUES (64,'9FA4EE'); +INSERT INTO `colors` VALUES (65,'6557D0'); +INSERT INTO `colors` VALUES (66,'4123A1'); +INSERT INTO `colors` VALUES (67,'4668E4'); +INSERT INTO `colors` VALUES (68,'0D006A'); +INSERT INTO `colors` VALUES (69,'00004D'); +INSERT INTO `colors` VALUES (70,'001D61'); +INSERT INTO `colors` VALUES (71,'00234B'); +INSERT INTO `colors` VALUES (72,'002A8F'); +INSERT INTO `colors` VALUES (73,'2175D9'); +INSERT INTO `colors` VALUES (74,'7CB3F1'); +INSERT INTO `colors` VALUES (75,'005199'); +INSERT INTO `colors` VALUES (76,'004359'); +INSERT INTO `colors` VALUES (77,'00A0C1'); +INSERT INTO `colors` VALUES (78,'007283'); +INSERT INTO `colors` VALUES (79,'00BED9'); +INSERT INTO `colors` VALUES (80,'AFECED'); +INSERT INTO `colors` VALUES (81,'55D6D3'); +INSERT INTO `colors` VALUES (82,'00BBB4'); +INSERT INTO `colors` VALUES (83,'009485'); +INSERT INTO `colors` VALUES (84,'005D57'); +INSERT INTO `colors` VALUES (85,'008A77'); +INSERT INTO `colors` VALUES (86,'008A6D'); +INSERT INTO `colors` VALUES (87,'00B99B'); +INSERT INTO `colors` VALUES (88,'009F67'); +INSERT INTO `colors` VALUES (89,'00694A'); +INSERT INTO `colors` VALUES (90,'00A348'); +INSERT INTO `colors` VALUES (91,'00BF47'); +INSERT INTO `colors` VALUES (92,'96E78A'); +INSERT INTO `colors` VALUES (93,'00BD27'); +INSERT INTO `colors` VALUES (94,'35962B'); +INSERT INTO `colors` VALUES (95,'7EE600'); +INSERT INTO `colors` VALUES (96,'6EA100'); +INSERT INTO `colors` VALUES (97,'CAF100'); +INSERT INTO `colors` VALUES (98,'F5F800'); +INSERT INTO `colors` VALUES (99,'CDCFC4'); +INSERT INTO `colors` VALUES (100,'BCBEB3'); +INSERT INTO `colors` VALUES (101,'AAABA1'); +INSERT INTO `colors` VALUES (102,'8F9286'); +INSERT INTO `colors` VALUES (103,'797C6E'); +INSERT INTO `colors` VALUES (104,'2E3127'); + +-- +-- Table structure for table `data_input` +-- + +CREATE TABLE `data_input` ( + `id` mediumint(8) unsigned NOT NULL auto_increment, + `hash` varchar(32) NOT NULL default '', + `name` varchar(200) NOT NULL default '', + `input_string` varchar(255) default NULL, + `type_id` tinyint(2) NOT NULL default '0', + PRIMARY KEY (`id`), + UNIQUE KEY `ID` (`id`), + KEY `id_2` (`id`) +) TYPE=MyISAM; + +-- +-- Dumping data for table `data_input` +-- + +INSERT INTO `data_input` VALUES (1,'3eb92bb845b9660a7445cf9740726522','Get SNMP Data','',2); +INSERT INTO `data_input` VALUES (2,'bf566c869ac6443b0c75d1c32b5a350e','Get SNMP Data (Indexed)','',3); +INSERT INTO `data_input` VALUES (3,'274f4685461170b9eb1b98d22567ab5e','Unix - Get Free Disk Space','/scripts/diskfree.sh ',1); +INSERT INTO `data_input` VALUES (4,'95ed0993eb3095f9920d431ac80f4231','Unix - Get Load Average','perl /scripts/loadavg_multi.pl',1); +INSERT INTO `data_input` VALUES (5,'79a284e136bb6b061c6f96ec219ac448','Unix - Get Logged In Users','perl /scripts/unix_users.pl ',1); +INSERT INTO `data_input` VALUES (6,'362e6d4768937c4f899dd21b91ef0ff8','Linux - Get Memory Usage','perl /scripts/linux_memory.pl ',1); +INSERT INTO `data_input` VALUES (7,'a637359e0a4287ba43048a5fdf202066','Unix - Get System Processes','perl /scripts/unix_processes.pl',1); +INSERT INTO `data_input` VALUES (8,'47d6bfe8be57a45171afd678920bd399','Unix - Get TCP Connections','perl /scripts/unix_tcp_connections.pl ',1); +INSERT INTO `data_input` VALUES (9,'cc948e4de13f32b6aea45abaadd287a3','Unix - Get Web Hits','perl /scripts/webhits.pl ',1); +INSERT INTO `data_input` VALUES (10,'8bd153aeb06e3ff89efc73f35849a7a0','Unix - Ping Host','perl /scripts/ping.pl ',1); +INSERT INTO `data_input` VALUES (11,'80e9e4c4191a5da189ae26d0e237f015','Get Script Data (Indexed)','',4); +INSERT INTO `data_input` VALUES (12,'332111d8b54ac8ce939af87a7eac0c06','Get Script Server Data (Indexed)','',6); + +-- +-- Table structure for table `data_input_data` +-- + +CREATE TABLE `data_input_data` ( + `data_input_field_id` mediumint(8) unsigned NOT NULL default '0', + `data_template_data_id` mediumint(8) unsigned NOT NULL default '0', + `t_value` char(2) default NULL, + `value` text, + PRIMARY KEY (`data_input_field_id`,`data_template_data_id`), + KEY `data_input_field_id` (`data_input_field_id`,`data_template_data_id`) +) TYPE=MyISAM; + +-- +-- Dumping data for table `data_input_data` +-- + +INSERT INTO `data_input_data` VALUES (14,1,'on',''); +INSERT INTO `data_input_data` VALUES (13,1,'on',''); +INSERT INTO `data_input_data` VALUES (12,1,'on',''); +INSERT INTO `data_input_data` VALUES (14,2,'on',''); +INSERT INTO `data_input_data` VALUES (13,2,'on',''); +INSERT INTO `data_input_data` VALUES (12,2,'on',''); +INSERT INTO `data_input_data` VALUES (14,3,'on',''); +INSERT INTO `data_input_data` VALUES (13,3,'on',''); +INSERT INTO `data_input_data` VALUES (12,3,'on',''); +INSERT INTO `data_input_data` VALUES (1,4,'',''); +INSERT INTO `data_input_data` VALUES (1,5,'',''); +INSERT INTO `data_input_data` VALUES (1,6,'',''); +INSERT INTO `data_input_data` VALUES (14,7,'on',''); +INSERT INTO `data_input_data` VALUES (13,7,'on',''); +INSERT INTO `data_input_data` VALUES (12,7,'on',''); +INSERT INTO `data_input_data` VALUES (14,8,'on',''); +INSERT INTO `data_input_data` VALUES (13,8,'on',''); +INSERT INTO `data_input_data` VALUES (12,8,'on',''); +INSERT INTO `data_input_data` VALUES (14,9,'on',''); +INSERT INTO `data_input_data` VALUES (13,9,'on',''); +INSERT INTO `data_input_data` VALUES (12,9,'on',''); +INSERT INTO `data_input_data` VALUES (14,10,'on',''); +INSERT INTO `data_input_data` VALUES (13,10,'on',''); +INSERT INTO `data_input_data` VALUES (12,10,'on',''); +INSERT INTO `data_input_data` VALUES (22,12,'','Buffers:'); +INSERT INTO `data_input_data` VALUES (22,13,'','MemFree:'); +INSERT INTO `data_input_data` VALUES (22,14,'','^Cached:'); +INSERT INTO `data_input_data` VALUES (22,15,'','SwapFree:'); +INSERT INTO `data_input_data` VALUES (29,18,'on',''); +INSERT INTO `data_input_data` VALUES (1,19,'',''); +INSERT INTO `data_input_data` VALUES (2,19,'',''); +INSERT INTO `data_input_data` VALUES (6,21,'','.1.3.6.1.2.1.25.3.3.1.2.1'); +INSERT INTO `data_input_data` VALUES (1,27,'',''); +INSERT INTO `data_input_data` VALUES (6,28,'','.1.3.6.1.4.1.9.9.109.1.1.1.1.3.1'); +INSERT INTO `data_input_data` VALUES (6,29,'','.1.3.6.1.4.1.9.9.109.1.1.1.1.4.1'); +INSERT INTO `data_input_data` VALUES (1,30,'',''); +INSERT INTO `data_input_data` VALUES (1,31,'',''); +INSERT INTO `data_input_data` VALUES (1,32,'',''); +INSERT INTO `data_input_data` VALUES (1,33,'',''); +INSERT INTO `data_input_data` VALUES (1,34,'',''); +INSERT INTO `data_input_data` VALUES (14,35,'on',''); +INSERT INTO `data_input_data` VALUES (13,35,'on',''); +INSERT INTO `data_input_data` VALUES (12,35,'on',''); +INSERT INTO `data_input_data` VALUES (14,36,'on',''); +INSERT INTO `data_input_data` VALUES (13,36,'on',''); +INSERT INTO `data_input_data` VALUES (12,36,'on',''); +INSERT INTO `data_input_data` VALUES (1,22,'',''); +INSERT INTO `data_input_data` VALUES (1,23,'',''); +INSERT INTO `data_input_data` VALUES (1,24,'',''); +INSERT INTO `data_input_data` VALUES (1,25,'',''); +INSERT INTO `data_input_data` VALUES (1,26,'',''); +INSERT INTO `data_input_data` VALUES (33,37,'on',''); +INSERT INTO `data_input_data` VALUES (32,37,'on',''); +INSERT INTO `data_input_data` VALUES (31,37,'on',''); +INSERT INTO `data_input_data` VALUES (14,38,'on',''); +INSERT INTO `data_input_data` VALUES (13,38,'on',''); +INSERT INTO `data_input_data` VALUES (12,38,'on',''); +INSERT INTO `data_input_data` VALUES (14,39,'on',''); +INSERT INTO `data_input_data` VALUES (13,39,'on',''); +INSERT INTO `data_input_data` VALUES (12,39,'on',''); +INSERT INTO `data_input_data` VALUES (14,40,'on',''); +INSERT INTO `data_input_data` VALUES (13,40,'on',''); +INSERT INTO `data_input_data` VALUES (12,40,'on',''); +INSERT INTO `data_input_data` VALUES (14,41,'on',''); +INSERT INTO `data_input_data` VALUES (13,41,'on',''); +INSERT INTO `data_input_data` VALUES (12,41,'on',''); +INSERT INTO `data_input_data` VALUES (14,55,'on',''); +INSERT INTO `data_input_data` VALUES (13,55,'on',''); +INSERT INTO `data_input_data` VALUES (12,55,'on',''); +INSERT INTO `data_input_data` VALUES (37,56,'on',''); +INSERT INTO `data_input_data` VALUES (36,56,'on',''); +INSERT INTO `data_input_data` VALUES (35,56,'on',''); +INSERT INTO `data_input_data` VALUES (37,57,'on',''); +INSERT INTO `data_input_data` VALUES (36,57,'on',''); +INSERT INTO `data_input_data` VALUES (35,57,'on',''); +INSERT INTO `data_input_data` VALUES (1,58,'',''); +INSERT INTO `data_input_data` VALUES (1,59,'',''); +INSERT INTO `data_input_data` VALUES (1,20,'',''); +INSERT INTO `data_input_data` VALUES (5,6,'',''); +INSERT INTO `data_input_data` VALUES (22,62,NULL,'MemFree:'); +INSERT INTO `data_input_data` VALUES (22,63,NULL,'SwapFree:'); +INSERT INTO `data_input_data` VALUES (4,6,'',''); +INSERT INTO `data_input_data` VALUES (3,6,'',''); +INSERT INTO `data_input_data` VALUES (2,6,'',''); +INSERT INTO `data_input_data` VALUES (6,69,'on',''); +INSERT INTO `data_input_data` VALUES (1,68,'',''); +INSERT INTO `data_input_data` VALUES (2,68,'',''); +INSERT INTO `data_input_data` VALUES (6,6,'','.1.3.6.1.4.1.2021.11.51.0'); +INSERT INTO `data_input_data` VALUES (2,27,'',''); +INSERT INTO `data_input_data` VALUES (3,27,'',''); +INSERT INTO `data_input_data` VALUES (4,27,'',''); +INSERT INTO `data_input_data` VALUES (5,27,'',''); +INSERT INTO `data_input_data` VALUES (6,27,'','.1.3.6.1.4.1.9.2.1.58.0'); +INSERT INTO `data_input_data` VALUES (2,59,'',''); +INSERT INTO `data_input_data` VALUES (3,59,'',''); +INSERT INTO `data_input_data` VALUES (4,59,'',''); +INSERT INTO `data_input_data` VALUES (5,59,'',''); +INSERT INTO `data_input_data` VALUES (6,59,'','.1.3.6.1.2.1.25.1.5.0'); +INSERT INTO `data_input_data` VALUES (2,58,'',''); +INSERT INTO `data_input_data` VALUES (3,58,'',''); +INSERT INTO `data_input_data` VALUES (4,58,'',''); +INSERT INTO `data_input_data` VALUES (5,58,'',''); +INSERT INTO `data_input_data` VALUES (6,58,'','.1.3.6.1.2.1.25.1.6.0'); +INSERT INTO `data_input_data` VALUES (2,24,'',''); +INSERT INTO `data_input_data` VALUES (3,24,'',''); +INSERT INTO `data_input_data` VALUES (4,24,'',''); +INSERT INTO `data_input_data` VALUES (5,24,'',''); +INSERT INTO `data_input_data` VALUES (6,24,'','.1.3.6.1.4.1.23.2.28.2.5.0'); +INSERT INTO `data_input_data` VALUES (2,25,'',''); +INSERT INTO `data_input_data` VALUES (3,25,'',''); +INSERT INTO `data_input_data` VALUES (4,25,'',''); +INSERT INTO `data_input_data` VALUES (5,25,'',''); +INSERT INTO `data_input_data` VALUES (6,25,'','.1.3.6.1.4.1.23.2.28.2.6.0'); +INSERT INTO `data_input_data` VALUES (2,22,'',''); +INSERT INTO `data_input_data` VALUES (3,22,'',''); +INSERT INTO `data_input_data` VALUES (4,22,'',''); +INSERT INTO `data_input_data` VALUES (5,22,'',''); +INSERT INTO `data_input_data` VALUES (6,22,'','.1.3.6.1.4.1.23.2.28.2.1.0'); +INSERT INTO `data_input_data` VALUES (2,23,'',''); +INSERT INTO `data_input_data` VALUES (3,23,'',''); +INSERT INTO `data_input_data` VALUES (4,23,'',''); +INSERT INTO `data_input_data` VALUES (5,23,'',''); +INSERT INTO `data_input_data` VALUES (6,23,'','.1.3.6.1.4.1.23.2.28.2.2.0'); +INSERT INTO `data_input_data` VALUES (2,26,'',''); +INSERT INTO `data_input_data` VALUES (3,26,'',''); +INSERT INTO `data_input_data` VALUES (4,26,'',''); +INSERT INTO `data_input_data` VALUES (5,26,'',''); +INSERT INTO `data_input_data` VALUES (6,26,'','.1.3.6.1.4.1.23.2.28.2.7.0'); +INSERT INTO `data_input_data` VALUES (2,20,'',''); +INSERT INTO `data_input_data` VALUES (3,20,'',''); +INSERT INTO `data_input_data` VALUES (4,20,'',''); +INSERT INTO `data_input_data` VALUES (5,20,'',''); +INSERT INTO `data_input_data` VALUES (6,20,'','.1.3.6.1.4.1.23.2.28.3.2.0'); +INSERT INTO `data_input_data` VALUES (3,19,'',''); +INSERT INTO `data_input_data` VALUES (4,19,'',''); +INSERT INTO `data_input_data` VALUES (5,19,'',''); +INSERT INTO `data_input_data` VALUES (6,19,'','.1.3.6.1.4.1.23.2.28.3.1'); +INSERT INTO `data_input_data` VALUES (2,4,'',''); +INSERT INTO `data_input_data` VALUES (3,4,'',''); +INSERT INTO `data_input_data` VALUES (4,4,'',''); +INSERT INTO `data_input_data` VALUES (5,4,'',''); +INSERT INTO `data_input_data` VALUES (6,4,'','.1.3.6.1.4.1.2021.11.52.0'); +INSERT INTO `data_input_data` VALUES (2,5,'',''); +INSERT INTO `data_input_data` VALUES (3,5,'',''); +INSERT INTO `data_input_data` VALUES (4,5,'',''); +INSERT INTO `data_input_data` VALUES (5,5,'',''); +INSERT INTO `data_input_data` VALUES (6,5,'','.1.3.6.1.4.1.2021.11.50.0'); +INSERT INTO `data_input_data` VALUES (2,30,'',''); +INSERT INTO `data_input_data` VALUES (3,30,'',''); +INSERT INTO `data_input_data` VALUES (4,30,'',''); +INSERT INTO `data_input_data` VALUES (5,30,'',''); +INSERT INTO `data_input_data` VALUES (6,30,'','.1.3.6.1.4.1.2021.10.1.3.1'); +INSERT INTO `data_input_data` VALUES (2,32,'',''); +INSERT INTO `data_input_data` VALUES (3,32,'',''); +INSERT INTO `data_input_data` VALUES (4,32,'',''); +INSERT INTO `data_input_data` VALUES (5,32,'',''); +INSERT INTO `data_input_data` VALUES (6,32,'','.1.3.6.1.4.1.2021.10.1.3.3'); +INSERT INTO `data_input_data` VALUES (2,31,'',''); +INSERT INTO `data_input_data` VALUES (3,31,'',''); +INSERT INTO `data_input_data` VALUES (4,31,'',''); +INSERT INTO `data_input_data` VALUES (5,31,'',''); +INSERT INTO `data_input_data` VALUES (6,31,'','.1.3.6.1.4.1.2021.10.1.3.2'); +INSERT INTO `data_input_data` VALUES (2,33,'',''); +INSERT INTO `data_input_data` VALUES (3,33,'',''); +INSERT INTO `data_input_data` VALUES (4,33,'',''); +INSERT INTO `data_input_data` VALUES (5,33,'',''); +INSERT INTO `data_input_data` VALUES (6,33,'','.1.3.6.1.4.1.2021.4.14.0'); +INSERT INTO `data_input_data` VALUES (3,68,'',''); +INSERT INTO `data_input_data` VALUES (4,68,'',''); +INSERT INTO `data_input_data` VALUES (5,68,'',''); +INSERT INTO `data_input_data` VALUES (6,68,'','.1.3.6.1.4.1.2021.4.15.0'); +INSERT INTO `data_input_data` VALUES (2,34,'',''); +INSERT INTO `data_input_data` VALUES (3,34,'',''); +INSERT INTO `data_input_data` VALUES (4,34,'',''); +INSERT INTO `data_input_data` VALUES (5,34,'',''); +INSERT INTO `data_input_data` VALUES (6,34,'','.1.3.6.1.4.1.2021.4.6.0'); +INSERT INTO `data_input_data` VALUES (20,17,'',''); +INSERT INTO `data_input_data` VALUES (20,65,NULL,''); +INSERT INTO `data_input_data` VALUES (1,70,NULL,'172.16.42.100'); +INSERT INTO `data_input_data` VALUES (2,70,NULL,'public'); +INSERT INTO `data_input_data` VALUES (3,70,NULL,''); +INSERT INTO `data_input_data` VALUES (4,70,NULL,''); +INSERT INTO `data_input_data` VALUES (5,70,NULL,'2'); +INSERT INTO `data_input_data` VALUES (6,70,'','.1.3.6.1.4.1.9.2.1.58.0'); +INSERT INTO `data_input_data` VALUES (14,71,'','14'); +INSERT INTO `data_input_data` VALUES (13,71,'','FastEthernet0/1'); +INSERT INTO `data_input_data` VALUES (12,71,'','ifDescr'); +INSERT INTO `data_input_data` VALUES (14,72,'','14'); +INSERT INTO `data_input_data` VALUES (13,72,'','FastEthernet0/2'); +INSERT INTO `data_input_data` VALUES (12,72,'','ifDescr'); +INSERT INTO `data_input_data` VALUES (14,73,'','14'); +INSERT INTO `data_input_data` VALUES (13,73,'','FastEthernet0/3'); +INSERT INTO `data_input_data` VALUES (12,73,'','ifDescr'); +INSERT INTO `data_input_data` VALUES (14,74,'','14'); +INSERT INTO `data_input_data` VALUES (13,74,'','FastEthernet0/4'); +INSERT INTO `data_input_data` VALUES (12,74,'','ifDescr'); +INSERT INTO `data_input_data` VALUES (14,75,'','14'); +INSERT INTO `data_input_data` VALUES (13,75,'','FastEthernet0/5'); +INSERT INTO `data_input_data` VALUES (12,75,'','ifDescr'); +INSERT INTO `data_input_data` VALUES (14,76,'','14'); +INSERT INTO `data_input_data` VALUES (13,76,'','FastEthernet0/6'); +INSERT INTO `data_input_data` VALUES (12,76,'','ifDescr'); +INSERT INTO `data_input_data` VALUES (14,77,'','14'); +INSERT INTO `data_input_data` VALUES (13,77,'','FastEthernet0/7'); +INSERT INTO `data_input_data` VALUES (12,77,'','ifDescr'); +INSERT INTO `data_input_data` VALUES (14,78,'','14'); +INSERT INTO `data_input_data` VALUES (13,78,'','FastEthernet0/8'); +INSERT INTO `data_input_data` VALUES (12,78,'','ifDescr'); +INSERT INTO `data_input_data` VALUES (14,79,'','14'); +INSERT INTO `data_input_data` VALUES (13,79,'','FastEthernet0/9'); +INSERT INTO `data_input_data` VALUES (12,79,'','ifDescr'); +INSERT INTO `data_input_data` VALUES (14,80,'','14'); +INSERT INTO `data_input_data` VALUES (13,80,'','FastEthernet0/10'); +INSERT INTO `data_input_data` VALUES (12,80,'','ifDescr'); +INSERT INTO `data_input_data` VALUES (14,81,'','14'); +INSERT INTO `data_input_data` VALUES (13,81,'','FastEthernet0/11'); +INSERT INTO `data_input_data` VALUES (12,81,'','ifDescr'); +INSERT INTO `data_input_data` VALUES (14,82,'','14'); +INSERT INTO `data_input_data` VALUES (13,82,'','FastEthernet0/12'); +INSERT INTO `data_input_data` VALUES (12,82,'','ifDescr'); +INSERT INTO `data_input_data` VALUES (14,83,'','14'); +INSERT INTO `data_input_data` VALUES (13,83,'','FastEthernet0/13'); +INSERT INTO `data_input_data` VALUES (12,83,'','ifDescr'); +INSERT INTO `data_input_data` VALUES (14,84,'','14'); +INSERT INTO `data_input_data` VALUES (13,84,'','FastEthernet0/14'); +INSERT INTO `data_input_data` VALUES (12,84,'','ifDescr'); +INSERT INTO `data_input_data` VALUES (14,85,'','14'); +INSERT INTO `data_input_data` VALUES (13,85,'','FastEthernet0/15'); +INSERT INTO `data_input_data` VALUES (12,85,'','ifDescr'); +INSERT INTO `data_input_data` VALUES (14,86,'','14'); +INSERT INTO `data_input_data` VALUES (13,86,'','FastEthernet0/16'); +INSERT INTO `data_input_data` VALUES (12,86,'','ifDescr'); +INSERT INTO `data_input_data` VALUES (14,87,'','14'); +INSERT INTO `data_input_data` VALUES (13,87,'','FastEthernet0/17'); +INSERT INTO `data_input_data` VALUES (12,87,'','ifDescr'); +INSERT INTO `data_input_data` VALUES (14,88,'','14'); +INSERT INTO `data_input_data` VALUES (13,88,'','FastEthernet0/18'); +INSERT INTO `data_input_data` VALUES (12,88,'','ifDescr'); +INSERT INTO `data_input_data` VALUES (14,89,'','14'); +INSERT INTO `data_input_data` VALUES (13,89,'','FastEthernet0/19'); +INSERT INTO `data_input_data` VALUES (12,89,'','ifDescr'); +INSERT INTO `data_input_data` VALUES (14,90,'','14'); +INSERT INTO `data_input_data` VALUES (13,90,'','FastEthernet0/20'); +INSERT INTO `data_input_data` VALUES (12,90,'','ifDescr'); +INSERT INTO `data_input_data` VALUES (14,91,'','14'); +INSERT INTO `data_input_data` VALUES (13,91,'','FastEthernet0/21'); +INSERT INTO `data_input_data` VALUES (12,91,'','ifDescr'); +INSERT INTO `data_input_data` VALUES (14,92,'','14'); +INSERT INTO `data_input_data` VALUES (13,92,'','FastEthernet0/22'); +INSERT INTO `data_input_data` VALUES (12,92,'','ifDescr'); +INSERT INTO `data_input_data` VALUES (14,93,'','14'); +INSERT INTO `data_input_data` VALUES (13,93,'','FastEthernet0/23'); +INSERT INTO `data_input_data` VALUES (12,93,'','ifDescr'); +INSERT INTO `data_input_data` VALUES (14,94,'','14'); +INSERT INTO `data_input_data` VALUES (13,94,'','FastEthernet0/24'); +INSERT INTO `data_input_data` VALUES (12,94,'','ifDescr'); +INSERT INTO `data_input_data` VALUES (14,95,'','14'); +INSERT INTO `data_input_data` VALUES (13,95,'','GigabitEthernet0/1'); +INSERT INTO `data_input_data` VALUES (12,95,'','ifDescr'); +INSERT INTO `data_input_data` VALUES (14,96,'','14'); +INSERT INTO `data_input_data` VALUES (13,96,'','GigabitEthernet0/2'); +INSERT INTO `data_input_data` VALUES (12,96,'','ifDescr'); +INSERT INTO `data_input_data` VALUES (14,97,'','14'); +INSERT INTO `data_input_data` VALUES (13,97,'','Null0'); +INSERT INTO `data_input_data` VALUES (12,97,'','ifDescr'); +INSERT INTO `data_input_data` VALUES (14,98,'','14'); +INSERT INTO `data_input_data` VALUES (13,98,'','Vlan1'); +INSERT INTO `data_input_data` VALUES (12,98,'','ifDescr'); +INSERT INTO `data_input_data` VALUES (14,99,'','14'); +INSERT INTO `data_input_data` VALUES (13,99,'','Vlan42'); +INSERT INTO `data_input_data` VALUES (12,99,'','ifDescr'); +INSERT INTO `data_input_data` VALUES (7,71,NULL,'172.16.42.100'); +INSERT INTO `data_input_data` VALUES (8,71,NULL,'public'); +INSERT INTO `data_input_data` VALUES (9,71,NULL,''); +INSERT INTO `data_input_data` VALUES (10,71,NULL,''); +INSERT INTO `data_input_data` VALUES (11,71,NULL,'2'); +INSERT INTO `data_input_data` VALUES (7,72,NULL,'172.16.42.100'); +INSERT INTO `data_input_data` VALUES (8,72,NULL,'public'); +INSERT INTO `data_input_data` VALUES (9,72,NULL,''); +INSERT INTO `data_input_data` VALUES (10,72,NULL,''); +INSERT INTO `data_input_data` VALUES (11,72,NULL,'2'); +INSERT INTO `data_input_data` VALUES (7,73,NULL,'172.16.42.100'); +INSERT INTO `data_input_data` VALUES (8,73,NULL,'public'); +INSERT INTO `data_input_data` VALUES (9,73,NULL,''); +INSERT INTO `data_input_data` VALUES (10,73,NULL,''); +INSERT INTO `data_input_data` VALUES (11,73,NULL,'2'); +INSERT INTO `data_input_data` VALUES (7,74,NULL,'172.16.42.100'); +INSERT INTO `data_input_data` VALUES (8,74,NULL,'public'); +INSERT INTO `data_input_data` VALUES (9,74,NULL,''); +INSERT INTO `data_input_data` VALUES (10,74,NULL,''); +INSERT INTO `data_input_data` VALUES (11,74,NULL,'2'); +INSERT INTO `data_input_data` VALUES (7,75,NULL,'172.16.42.100'); +INSERT INTO `data_input_data` VALUES (8,75,NULL,'public'); +INSERT INTO `data_input_data` VALUES (9,75,NULL,''); +INSERT INTO `data_input_data` VALUES (10,75,NULL,''); +INSERT INTO `data_input_data` VALUES (11,75,NULL,'2'); +INSERT INTO `data_input_data` VALUES (7,76,NULL,'172.16.42.100'); +INSERT INTO `data_input_data` VALUES (8,76,NULL,'public'); +INSERT INTO `data_input_data` VALUES (9,76,NULL,''); +INSERT INTO `data_input_data` VALUES (10,76,NULL,''); +INSERT INTO `data_input_data` VALUES (11,76,NULL,'2'); +INSERT INTO `data_input_data` VALUES (7,77,NULL,'172.16.42.100'); +INSERT INTO `data_input_data` VALUES (8,77,NULL,'public'); +INSERT INTO `data_input_data` VALUES (9,77,NULL,''); +INSERT INTO `data_input_data` VALUES (10,77,NULL,''); +INSERT INTO `data_input_data` VALUES (11,77,NULL,'2'); +INSERT INTO `data_input_data` VALUES (7,78,NULL,'172.16.42.100'); +INSERT INTO `data_input_data` VALUES (8,78,NULL,'public'); +INSERT INTO `data_input_data` VALUES (9,78,NULL,''); +INSERT INTO `data_input_data` VALUES (10,78,NULL,''); +INSERT INTO `data_input_data` VALUES (11,78,NULL,'2'); +INSERT INTO `data_input_data` VALUES (7,79,NULL,'172.16.42.100'); +INSERT INTO `data_input_data` VALUES (8,79,NULL,'public'); +INSERT INTO `data_input_data` VALUES (9,79,NULL,''); +INSERT INTO `data_input_data` VALUES (10,79,NULL,''); +INSERT INTO `data_input_data` VALUES (11,79,NULL,'2'); +INSERT INTO `data_input_data` VALUES (7,80,NULL,'172.16.42.100'); +INSERT INTO `data_input_data` VALUES (8,80,NULL,'public'); +INSERT INTO `data_input_data` VALUES (9,80,NULL,''); +INSERT INTO `data_input_data` VALUES (10,80,NULL,''); +INSERT INTO `data_input_data` VALUES (11,80,NULL,'2'); +INSERT INTO `data_input_data` VALUES (7,81,NULL,'172.16.42.100'); +INSERT INTO `data_input_data` VALUES (8,81,NULL,'public'); +INSERT INTO `data_input_data` VALUES (9,81,NULL,''); +INSERT INTO `data_input_data` VALUES (10,81,NULL,''); +INSERT INTO `data_input_data` VALUES (11,81,NULL,'2'); +INSERT INTO `data_input_data` VALUES (7,82,NULL,'172.16.42.100'); +INSERT INTO `data_input_data` VALUES (8,82,NULL,'public'); +INSERT INTO `data_input_data` VALUES (9,82,NULL,''); +INSERT INTO `data_input_data` VALUES (10,82,NULL,''); +INSERT INTO `data_input_data` VALUES (11,82,NULL,'2'); +INSERT INTO `data_input_data` VALUES (7,83,NULL,'172.16.42.100'); +INSERT INTO `data_input_data` VALUES (8,83,NULL,'public'); +INSERT INTO `data_input_data` VALUES (9,83,NULL,''); +INSERT INTO `data_input_data` VALUES (10,83,NULL,''); +INSERT INTO `data_input_data` VALUES (11,83,NULL,'2'); +INSERT INTO `data_input_data` VALUES (7,84,NULL,'172.16.42.100'); +INSERT INTO `data_input_data` VALUES (8,84,NULL,'public'); +INSERT INTO `data_input_data` VALUES (9,84,NULL,''); +INSERT INTO `data_input_data` VALUES (10,84,NULL,''); +INSERT INTO `data_input_data` VALUES (11,84,NULL,'2'); +INSERT INTO `data_input_data` VALUES (7,85,NULL,'172.16.42.100'); +INSERT INTO `data_input_data` VALUES (8,85,NULL,'public'); +INSERT INTO `data_input_data` VALUES (9,85,NULL,''); +INSERT INTO `data_input_data` VALUES (10,85,NULL,''); +INSERT INTO `data_input_data` VALUES (11,85,NULL,'2'); +INSERT INTO `data_input_data` VALUES (7,86,NULL,'172.16.42.100'); +INSERT INTO `data_input_data` VALUES (8,86,NULL,'public'); +INSERT INTO `data_input_data` VALUES (9,86,NULL,''); +INSERT INTO `data_input_data` VALUES (10,86,NULL,''); +INSERT INTO `data_input_data` VALUES (11,86,NULL,'2'); +INSERT INTO `data_input_data` VALUES (7,87,NULL,'172.16.42.100'); +INSERT INTO `data_input_data` VALUES (8,87,NULL,'public'); +INSERT INTO `data_input_data` VALUES (9,87,NULL,''); +INSERT INTO `data_input_data` VALUES (10,87,NULL,''); +INSERT INTO `data_input_data` VALUES (11,87,NULL,'2'); +INSERT INTO `data_input_data` VALUES (7,88,NULL,'172.16.42.100'); +INSERT INTO `data_input_data` VALUES (8,88,NULL,'public'); +INSERT INTO `data_input_data` VALUES (9,88,NULL,''); +INSERT INTO `data_input_data` VALUES (10,88,NULL,''); +INSERT INTO `data_input_data` VALUES (11,88,NULL,'2'); +INSERT INTO `data_input_data` VALUES (7,89,NULL,'172.16.42.100'); +INSERT INTO `data_input_data` VALUES (8,89,NULL,'public'); +INSERT INTO `data_input_data` VALUES (9,89,NULL,''); +INSERT INTO `data_input_data` VALUES (10,89,NULL,''); +INSERT INTO `data_input_data` VALUES (11,89,NULL,'2'); +INSERT INTO `data_input_data` VALUES (7,90,NULL,'172.16.42.100'); +INSERT INTO `data_input_data` VALUES (8,90,NULL,'public'); +INSERT INTO `data_input_data` VALUES (9,90,NULL,''); +INSERT INTO `data_input_data` VALUES (10,90,NULL,''); +INSERT INTO `data_input_data` VALUES (11,90,NULL,'2'); +INSERT INTO `data_input_data` VALUES (7,91,NULL,'172.16.42.100'); +INSERT INTO `data_input_data` VALUES (8,91,NULL,'public'); +INSERT INTO `data_input_data` VALUES (9,91,NULL,''); +INSERT INTO `data_input_data` VALUES (10,91,NULL,''); +INSERT INTO `data_input_data` VALUES (11,91,NULL,'2'); +INSERT INTO `data_input_data` VALUES (7,92,NULL,'172.16.42.100'); +INSERT INTO `data_input_data` VALUES (8,92,NULL,'public'); +INSERT INTO `data_input_data` VALUES (9,92,NULL,''); +INSERT INTO `data_input_data` VALUES (10,92,NULL,''); +INSERT INTO `data_input_data` VALUES (11,92,NULL,'2'); +INSERT INTO `data_input_data` VALUES (7,93,NULL,'172.16.42.100'); +INSERT INTO `data_input_data` VALUES (8,93,NULL,'public'); +INSERT INTO `data_input_data` VALUES (9,93,NULL,''); +INSERT INTO `data_input_data` VALUES (10,93,NULL,''); +INSERT INTO `data_input_data` VALUES (11,93,NULL,'2'); +INSERT INTO `data_input_data` VALUES (7,94,NULL,'172.16.42.100'); +INSERT INTO `data_input_data` VALUES (8,94,NULL,'public'); +INSERT INTO `data_input_data` VALUES (9,94,NULL,''); +INSERT INTO `data_input_data` VALUES (10,94,NULL,''); +INSERT INTO `data_input_data` VALUES (11,94,NULL,'2'); +INSERT INTO `data_input_data` VALUES (7,95,NULL,'172.16.42.100'); +INSERT INTO `data_input_data` VALUES (8,95,NULL,'public'); +INSERT INTO `data_input_data` VALUES (9,95,NULL,''); +INSERT INTO `data_input_data` VALUES (10,95,NULL,''); +INSERT INTO `data_input_data` VALUES (11,95,NULL,'2'); +INSERT INTO `data_input_data` VALUES (7,96,NULL,'172.16.42.100'); +INSERT INTO `data_input_data` VALUES (8,96,NULL,'public'); +INSERT INTO `data_input_data` VALUES (9,96,NULL,''); +INSERT INTO `data_input_data` VALUES (10,96,NULL,''); +INSERT INTO `data_input_data` VALUES (11,96,NULL,'2'); +INSERT INTO `data_input_data` VALUES (7,97,NULL,'172.16.42.100'); +INSERT INTO `data_input_data` VALUES (8,97,NULL,'public'); +INSERT INTO `data_input_data` VALUES (9,97,NULL,''); +INSERT INTO `data_input_data` VALUES (10,97,NULL,''); +INSERT INTO `data_input_data` VALUES (11,97,NULL,'2'); +INSERT INTO `data_input_data` VALUES (7,98,NULL,'172.16.42.100'); +INSERT INTO `data_input_data` VALUES (8,98,NULL,'public'); +INSERT INTO `data_input_data` VALUES (9,98,NULL,''); +INSERT INTO `data_input_data` VALUES (10,98,NULL,''); +INSERT INTO `data_input_data` VALUES (11,98,NULL,'2'); +INSERT INTO `data_input_data` VALUES (7,99,NULL,'172.16.42.100'); +INSERT INTO `data_input_data` VALUES (8,99,NULL,'public'); +INSERT INTO `data_input_data` VALUES (9,99,NULL,''); +INSERT INTO `data_input_data` VALUES (10,99,NULL,''); +INSERT INTO `data_input_data` VALUES (11,99,NULL,'2'); +INSERT INTO `data_input_data` VALUES (1,100,NULL,'172.16.42.101'); +INSERT INTO `data_input_data` VALUES (2,100,NULL,'public'); +INSERT INTO `data_input_data` VALUES (3,100,NULL,''); +INSERT INTO `data_input_data` VALUES (4,100,NULL,''); +INSERT INTO `data_input_data` VALUES (5,100,NULL,'2'); +INSERT INTO `data_input_data` VALUES (6,100,'','.1.3.6.1.4.1.9.2.1.58.0'); +INSERT INTO `data_input_data` VALUES (14,101,'','14'); +INSERT INTO `data_input_data` VALUES (13,101,'','FastEthernet0/1'); +INSERT INTO `data_input_data` VALUES (12,101,'','ifDescr'); +INSERT INTO `data_input_data` VALUES (14,102,'','14'); +INSERT INTO `data_input_data` VALUES (13,102,'','FastEthernet0/2'); +INSERT INTO `data_input_data` VALUES (12,102,'','ifDescr'); +INSERT INTO `data_input_data` VALUES (14,103,'','14'); +INSERT INTO `data_input_data` VALUES (13,103,'','FastEthernet0/3'); +INSERT INTO `data_input_data` VALUES (12,103,'','ifDescr'); +INSERT INTO `data_input_data` VALUES (14,104,'','14'); +INSERT INTO `data_input_data` VALUES (13,104,'','FastEthernet0/4'); +INSERT INTO `data_input_data` VALUES (12,104,'','ifDescr'); +INSERT INTO `data_input_data` VALUES (14,105,'','14'); +INSERT INTO `data_input_data` VALUES (13,105,'','FastEthernet0/5'); +INSERT INTO `data_input_data` VALUES (12,105,'','ifDescr'); +INSERT INTO `data_input_data` VALUES (14,106,'','14'); +INSERT INTO `data_input_data` VALUES (13,106,'','FastEthernet0/6'); +INSERT INTO `data_input_data` VALUES (12,106,'','ifDescr'); +INSERT INTO `data_input_data` VALUES (14,107,'','14'); +INSERT INTO `data_input_data` VALUES (13,107,'','FastEthernet0/7'); +INSERT INTO `data_input_data` VALUES (12,107,'','ifDescr'); +INSERT INTO `data_input_data` VALUES (14,108,'','14'); +INSERT INTO `data_input_data` VALUES (13,108,'','FastEthernet0/8'); +INSERT INTO `data_input_data` VALUES (12,108,'','ifDescr'); +INSERT INTO `data_input_data` VALUES (14,109,'','14'); +INSERT INTO `data_input_data` VALUES (13,109,'','FastEthernet0/9'); +INSERT INTO `data_input_data` VALUES (12,109,'','ifDescr'); +INSERT INTO `data_input_data` VALUES (14,110,'','14'); +INSERT INTO `data_input_data` VALUES (13,110,'','FastEthernet0/10'); +INSERT INTO `data_input_data` VALUES (12,110,'','ifDescr'); +INSERT INTO `data_input_data` VALUES (14,111,'','14'); +INSERT INTO `data_input_data` VALUES (13,111,'','FastEthernet0/11'); +INSERT INTO `data_input_data` VALUES (12,111,'','ifDescr'); +INSERT INTO `data_input_data` VALUES (14,112,'','14'); +INSERT INTO `data_input_data` VALUES (13,112,'','FastEthernet0/12'); +INSERT INTO `data_input_data` VALUES (12,112,'','ifDescr'); +INSERT INTO `data_input_data` VALUES (14,113,'','14'); +INSERT INTO `data_input_data` VALUES (13,113,'','FastEthernet0/13'); +INSERT INTO `data_input_data` VALUES (12,113,'','ifDescr'); +INSERT INTO `data_input_data` VALUES (14,114,'','14'); +INSERT INTO `data_input_data` VALUES (13,114,'','FastEthernet0/14'); +INSERT INTO `data_input_data` VALUES (12,114,'','ifDescr'); +INSERT INTO `data_input_data` VALUES (14,115,'','14'); +INSERT INTO `data_input_data` VALUES (13,115,'','FastEthernet0/15'); +INSERT INTO `data_input_data` VALUES (12,115,'','ifDescr'); +INSERT INTO `data_input_data` VALUES (14,116,'','14'); +INSERT INTO `data_input_data` VALUES (13,116,'','FastEthernet0/16'); +INSERT INTO `data_input_data` VALUES (12,116,'','ifDescr'); +INSERT INTO `data_input_data` VALUES (14,117,'','14'); +INSERT INTO `data_input_data` VALUES (13,117,'','FastEthernet0/17'); +INSERT INTO `data_input_data` VALUES (12,117,'','ifDescr'); +INSERT INTO `data_input_data` VALUES (14,118,'','14'); +INSERT INTO `data_input_data` VALUES (13,118,'','FastEthernet0/18'); +INSERT INTO `data_input_data` VALUES (12,118,'','ifDescr'); +INSERT INTO `data_input_data` VALUES (14,119,'','14'); +INSERT INTO `data_input_data` VALUES (13,119,'','FastEthernet0/19'); +INSERT INTO `data_input_data` VALUES (12,119,'','ifDescr'); +INSERT INTO `data_input_data` VALUES (14,120,'','14'); +INSERT INTO `data_input_data` VALUES (13,120,'','FastEthernet0/20'); +INSERT INTO `data_input_data` VALUES (12,120,'','ifDescr'); +INSERT INTO `data_input_data` VALUES (14,121,'','14'); +INSERT INTO `data_input_data` VALUES (13,121,'','FastEthernet0/21'); +INSERT INTO `data_input_data` VALUES (12,121,'','ifDescr'); +INSERT INTO `data_input_data` VALUES (14,122,'','14'); +INSERT INTO `data_input_data` VALUES (13,122,'','FastEthernet0/22'); +INSERT INTO `data_input_data` VALUES (12,122,'','ifDescr'); +INSERT INTO `data_input_data` VALUES (14,123,'','14'); +INSERT INTO `data_input_data` VALUES (13,123,'','FastEthernet0/23'); +INSERT INTO `data_input_data` VALUES (12,123,'','ifDescr'); +INSERT INTO `data_input_data` VALUES (14,124,'','14'); +INSERT INTO `data_input_data` VALUES (13,124,'','FastEthernet0/24'); +INSERT INTO `data_input_data` VALUES (12,124,'','ifDescr'); +INSERT INTO `data_input_data` VALUES (14,125,'','14'); +INSERT INTO `data_input_data` VALUES (13,125,'','GigabitEthernet0/1'); +INSERT INTO `data_input_data` VALUES (12,125,'','ifDescr'); +INSERT INTO `data_input_data` VALUES (14,126,'','14'); +INSERT INTO `data_input_data` VALUES (13,126,'','GigabitEthernet0/2'); +INSERT INTO `data_input_data` VALUES (12,126,'','ifDescr'); +INSERT INTO `data_input_data` VALUES (14,127,'','14'); +INSERT INTO `data_input_data` VALUES (13,127,'','Null0'); +INSERT INTO `data_input_data` VALUES (12,127,'','ifDescr'); +INSERT INTO `data_input_data` VALUES (14,128,'','14'); +INSERT INTO `data_input_data` VALUES (13,128,'','Vlan1'); +INSERT INTO `data_input_data` VALUES (12,128,'','ifDescr'); +INSERT INTO `data_input_data` VALUES (14,129,'','14'); +INSERT INTO `data_input_data` VALUES (13,129,'','Vlan42'); +INSERT INTO `data_input_data` VALUES (12,129,'','ifDescr'); +INSERT INTO `data_input_data` VALUES (7,101,NULL,'172.16.42.101'); +INSERT INTO `data_input_data` VALUES (8,101,NULL,'public'); +INSERT INTO `data_input_data` VALUES (9,101,NULL,''); +INSERT INTO `data_input_data` VALUES (10,101,NULL,''); +INSERT INTO `data_input_data` VALUES (11,101,NULL,'2'); +INSERT INTO `data_input_data` VALUES (7,102,NULL,'172.16.42.101'); +INSERT INTO `data_input_data` VALUES (8,102,NULL,'public'); +INSERT INTO `data_input_data` VALUES (9,102,NULL,''); +INSERT INTO `data_input_data` VALUES (10,102,NULL,''); +INSERT INTO `data_input_data` VALUES (11,102,NULL,'2'); +INSERT INTO `data_input_data` VALUES (7,103,NULL,'172.16.42.101'); +INSERT INTO `data_input_data` VALUES (8,103,NULL,'public'); +INSERT INTO `data_input_data` VALUES (9,103,NULL,''); +INSERT INTO `data_input_data` VALUES (10,103,NULL,''); +INSERT INTO `data_input_data` VALUES (11,103,NULL,'2'); +INSERT INTO `data_input_data` VALUES (7,104,NULL,'172.16.42.101'); +INSERT INTO `data_input_data` VALUES (8,104,NULL,'public'); +INSERT INTO `data_input_data` VALUES (9,104,NULL,''); +INSERT INTO `data_input_data` VALUES (10,104,NULL,''); +INSERT INTO `data_input_data` VALUES (11,104,NULL,'2'); +INSERT INTO `data_input_data` VALUES (7,105,NULL,'172.16.42.101'); +INSERT INTO `data_input_data` VALUES (8,105,NULL,'public'); +INSERT INTO `data_input_data` VALUES (9,105,NULL,''); +INSERT INTO `data_input_data` VALUES (10,105,NULL,''); +INSERT INTO `data_input_data` VALUES (11,105,NULL,'2'); +INSERT INTO `data_input_data` VALUES (7,106,NULL,'172.16.42.101'); +INSERT INTO `data_input_data` VALUES (8,106,NULL,'public'); +INSERT INTO `data_input_data` VALUES (9,106,NULL,''); +INSERT INTO `data_input_data` VALUES (10,106,NULL,''); +INSERT INTO `data_input_data` VALUES (11,106,NULL,'2'); +INSERT INTO `data_input_data` VALUES (7,107,NULL,'172.16.42.101'); +INSERT INTO `data_input_data` VALUES (8,107,NULL,'public'); +INSERT INTO `data_input_data` VALUES (9,107,NULL,''); +INSERT INTO `data_input_data` VALUES (10,107,NULL,''); +INSERT INTO `data_input_data` VALUES (11,107,NULL,'2'); +INSERT INTO `data_input_data` VALUES (7,108,NULL,'172.16.42.101'); +INSERT INTO `data_input_data` VALUES (8,108,NULL,'public'); +INSERT INTO `data_input_data` VALUES (9,108,NULL,''); +INSERT INTO `data_input_data` VALUES (10,108,NULL,''); +INSERT INTO `data_input_data` VALUES (11,108,NULL,'2'); +INSERT INTO `data_input_data` VALUES (7,109,NULL,'172.16.42.101'); +INSERT INTO `data_input_data` VALUES (8,109,NULL,'public'); +INSERT INTO `data_input_data` VALUES (9,109,NULL,''); +INSERT INTO `data_input_data` VALUES (10,109,NULL,''); +INSERT INTO `data_input_data` VALUES (11,109,NULL,'2'); +INSERT INTO `data_input_data` VALUES (7,110,NULL,'172.16.42.101'); +INSERT INTO `data_input_data` VALUES (8,110,NULL,'public'); +INSERT INTO `data_input_data` VALUES (9,110,NULL,''); +INSERT INTO `data_input_data` VALUES (10,110,NULL,''); +INSERT INTO `data_input_data` VALUES (11,110,NULL,'2'); +INSERT INTO `data_input_data` VALUES (7,111,NULL,'172.16.42.101'); +INSERT INTO `data_input_data` VALUES (8,111,NULL,'public'); +INSERT INTO `data_input_data` VALUES (9,111,NULL,''); +INSERT INTO `data_input_data` VALUES (10,111,NULL,''); +INSERT INTO `data_input_data` VALUES (11,111,NULL,'2'); +INSERT INTO `data_input_data` VALUES (7,112,NULL,'172.16.42.101'); +INSERT INTO `data_input_data` VALUES (8,112,NULL,'public'); +INSERT INTO `data_input_data` VALUES (9,112,NULL,''); +INSERT INTO `data_input_data` VALUES (10,112,NULL,''); +INSERT INTO `data_input_data` VALUES (11,112,NULL,'2'); +INSERT INTO `data_input_data` VALUES (7,113,NULL,'172.16.42.101'); +INSERT INTO `data_input_data` VALUES (8,113,NULL,'public'); +INSERT INTO `data_input_data` VALUES (9,113,NULL,''); +INSERT INTO `data_input_data` VALUES (10,113,NULL,''); +INSERT INTO `data_input_data` VALUES (11,113,NULL,'2'); +INSERT INTO `data_input_data` VALUES (7,114,NULL,'172.16.42.101'); +INSERT INTO `data_input_data` VALUES (8,114,NULL,'public'); +INSERT INTO `data_input_data` VALUES (9,114,NULL,''); +INSERT INTO `data_input_data` VALUES (10,114,NULL,''); +INSERT INTO `data_input_data` VALUES (11,114,NULL,'2'); +INSERT INTO `data_input_data` VALUES (7,115,NULL,'172.16.42.101'); +INSERT INTO `data_input_data` VALUES (8,115,NULL,'public'); +INSERT INTO `data_input_data` VALUES (9,115,NULL,''); +INSERT INTO `data_input_data` VALUES (10,115,NULL,''); +INSERT INTO `data_input_data` VALUES (11,115,NULL,'2'); +INSERT INTO `data_input_data` VALUES (7,116,NULL,'172.16.42.101'); +INSERT INTO `data_input_data` VALUES (8,116,NULL,'public'); +INSERT INTO `data_input_data` VALUES (9,116,NULL,''); +INSERT INTO `data_input_data` VALUES (10,116,NULL,''); +INSERT INTO `data_input_data` VALUES (11,116,NULL,'2'); +INSERT INTO `data_input_data` VALUES (7,117,NULL,'172.16.42.101'); +INSERT INTO `data_input_data` VALUES (8,117,NULL,'public'); +INSERT INTO `data_input_data` VALUES (9,117,NULL,''); +INSERT INTO `data_input_data` VALUES (10,117,NULL,''); +INSERT INTO `data_input_data` VALUES (11,117,NULL,'2'); +INSERT INTO `data_input_data` VALUES (7,118,NULL,'172.16.42.101'); +INSERT INTO `data_input_data` VALUES (8,118,NULL,'public'); +INSERT INTO `data_input_data` VALUES (9,118,NULL,''); +INSERT INTO `data_input_data` VALUES (10,118,NULL,''); +INSERT INTO `data_input_data` VALUES (11,118,NULL,'2'); +INSERT INTO `data_input_data` VALUES (7,119,NULL,'172.16.42.101'); +INSERT INTO `data_input_data` VALUES (8,119,NULL,'public'); +INSERT INTO `data_input_data` VALUES (9,119,NULL,''); +INSERT INTO `data_input_data` VALUES (10,119,NULL,''); +INSERT INTO `data_input_data` VALUES (11,119,NULL,'2'); +INSERT INTO `data_input_data` VALUES (7,120,NULL,'172.16.42.101'); +INSERT INTO `data_input_data` VALUES (8,120,NULL,'public'); +INSERT INTO `data_input_data` VALUES (9,120,NULL,''); +INSERT INTO `data_input_data` VALUES (10,120,NULL,''); +INSERT INTO `data_input_data` VALUES (11,120,NULL,'2'); +INSERT INTO `data_input_data` VALUES (7,121,NULL,'172.16.42.101'); +INSERT INTO `data_input_data` VALUES (8,121,NULL,'public'); +INSERT INTO `data_input_data` VALUES (9,121,NULL,''); +INSERT INTO `data_input_data` VALUES (10,121,NULL,''); +INSERT INTO `data_input_data` VALUES (11,121,NULL,'2'); +INSERT INTO `data_input_data` VALUES (7,122,NULL,'172.16.42.101'); +INSERT INTO `data_input_data` VALUES (8,122,NULL,'public'); +INSERT INTO `data_input_data` VALUES (9,122,NULL,''); +INSERT INTO `data_input_data` VALUES (10,122,NULL,''); +INSERT INTO `data_input_data` VALUES (11,122,NULL,'2'); +INSERT INTO `data_input_data` VALUES (7,123,NULL,'172.16.42.101'); +INSERT INTO `data_input_data` VALUES (8,123,NULL,'public'); +INSERT INTO `data_input_data` VALUES (9,123,NULL,''); +INSERT INTO `data_input_data` VALUES (10,123,NULL,''); +INSERT INTO `data_input_data` VALUES (11,123,NULL,'2'); +INSERT INTO `data_input_data` VALUES (7,124,NULL,'172.16.42.101'); +INSERT INTO `data_input_data` VALUES (8,124,NULL,'public'); +INSERT INTO `data_input_data` VALUES (9,124,NULL,''); +INSERT INTO `data_input_data` VALUES (10,124,NULL,''); +INSERT INTO `data_input_data` VALUES (11,124,NULL,'2'); +INSERT INTO `data_input_data` VALUES (7,125,NULL,'172.16.42.101'); +INSERT INTO `data_input_data` VALUES (8,125,NULL,'public'); +INSERT INTO `data_input_data` VALUES (9,125,NULL,''); +INSERT INTO `data_input_data` VALUES (10,125,NULL,''); +INSERT INTO `data_input_data` VALUES (11,125,NULL,'2'); +INSERT INTO `data_input_data` VALUES (7,126,NULL,'172.16.42.101'); +INSERT INTO `data_input_data` VALUES (8,126,NULL,'public'); +INSERT INTO `data_input_data` VALUES (9,126,NULL,''); +INSERT INTO `data_input_data` VALUES (10,126,NULL,''); +INSERT INTO `data_input_data` VALUES (11,126,NULL,'2'); +INSERT INTO `data_input_data` VALUES (7,127,NULL,'172.16.42.101'); +INSERT INTO `data_input_data` VALUES (8,127,NULL,'public'); +INSERT INTO `data_input_data` VALUES (9,127,NULL,''); +INSERT INTO `data_input_data` VALUES (10,127,NULL,''); +INSERT INTO `data_input_data` VALUES (11,127,NULL,'2'); +INSERT INTO `data_input_data` VALUES (7,128,NULL,'172.16.42.101'); +INSERT INTO `data_input_data` VALUES (8,128,NULL,'public'); +INSERT INTO `data_input_data` VALUES (9,128,NULL,''); +INSERT INTO `data_input_data` VALUES (10,128,NULL,''); +INSERT INTO `data_input_data` VALUES (11,128,NULL,'2'); +INSERT INTO `data_input_data` VALUES (7,129,NULL,'172.16.42.101'); +INSERT INTO `data_input_data` VALUES (8,129,NULL,'public'); +INSERT INTO `data_input_data` VALUES (9,129,NULL,''); +INSERT INTO `data_input_data` VALUES (10,129,NULL,''); +INSERT INTO `data_input_data` VALUES (11,129,NULL,'2'); +INSERT INTO `data_input_data` VALUES (1,130,NULL,'172.16.42.102'); +INSERT INTO `data_input_data` VALUES (2,130,NULL,'public'); +INSERT INTO `data_input_data` VALUES (3,130,NULL,''); +INSERT INTO `data_input_data` VALUES (4,130,NULL,''); +INSERT INTO `data_input_data` VALUES (5,130,NULL,'2'); +INSERT INTO `data_input_data` VALUES (6,130,'','.1.3.6.1.4.1.9.2.1.58.0'); +INSERT INTO `data_input_data` VALUES (14,131,'','14'); +INSERT INTO `data_input_data` VALUES (13,131,'','FastEthernet0/1'); +INSERT INTO `data_input_data` VALUES (12,131,'','ifDescr'); +INSERT INTO `data_input_data` VALUES (14,132,'','14'); +INSERT INTO `data_input_data` VALUES (13,132,'','FastEthernet0/2'); +INSERT INTO `data_input_data` VALUES (12,132,'','ifDescr'); +INSERT INTO `data_input_data` VALUES (14,133,'','14'); +INSERT INTO `data_input_data` VALUES (13,133,'','FastEthernet0/3'); +INSERT INTO `data_input_data` VALUES (12,133,'','ifDescr'); +INSERT INTO `data_input_data` VALUES (14,134,'','14'); +INSERT INTO `data_input_data` VALUES (13,134,'','FastEthernet0/4'); +INSERT INTO `data_input_data` VALUES (12,134,'','ifDescr'); +INSERT INTO `data_input_data` VALUES (14,135,'','14'); +INSERT INTO `data_input_data` VALUES (13,135,'','FastEthernet0/5'); +INSERT INTO `data_input_data` VALUES (12,135,'','ifDescr'); +INSERT INTO `data_input_data` VALUES (14,136,'','14'); +INSERT INTO `data_input_data` VALUES (13,136,'','FastEthernet0/6'); +INSERT INTO `data_input_data` VALUES (12,136,'','ifDescr'); +INSERT INTO `data_input_data` VALUES (14,137,'','14'); +INSERT INTO `data_input_data` VALUES (13,137,'','FastEthernet0/7'); +INSERT INTO `data_input_data` VALUES (12,137,'','ifDescr'); +INSERT INTO `data_input_data` VALUES (14,138,'','14'); +INSERT INTO `data_input_data` VALUES (13,138,'','FastEthernet0/8'); +INSERT INTO `data_input_data` VALUES (12,138,'','ifDescr'); +INSERT INTO `data_input_data` VALUES (14,139,'','14'); +INSERT INTO `data_input_data` VALUES (13,139,'','FastEthernet0/9'); +INSERT INTO `data_input_data` VALUES (12,139,'','ifDescr'); +INSERT INTO `data_input_data` VALUES (14,140,'','14'); +INSERT INTO `data_input_data` VALUES (13,140,'','FastEthernet0/10'); +INSERT INTO `data_input_data` VALUES (12,140,'','ifDescr'); +INSERT INTO `data_input_data` VALUES (14,141,'','14'); +INSERT INTO `data_input_data` VALUES (13,141,'','FastEthernet0/11'); +INSERT INTO `data_input_data` VALUES (12,141,'','ifDescr'); +INSERT INTO `data_input_data` VALUES (14,142,'','14'); +INSERT INTO `data_input_data` VALUES (13,142,'','FastEthernet0/12'); +INSERT INTO `data_input_data` VALUES (12,142,'','ifDescr'); +INSERT INTO `data_input_data` VALUES (14,143,'','14'); +INSERT INTO `data_input_data` VALUES (13,143,'','FastEthernet0/13'); +INSERT INTO `data_input_data` VALUES (12,143,'','ifDescr'); +INSERT INTO `data_input_data` VALUES (14,144,'','14'); +INSERT INTO `data_input_data` VALUES (13,144,'','FastEthernet0/14'); +INSERT INTO `data_input_data` VALUES (12,144,'','ifDescr'); +INSERT INTO `data_input_data` VALUES (14,145,'','14'); +INSERT INTO `data_input_data` VALUES (13,145,'','FastEthernet0/15'); +INSERT INTO `data_input_data` VALUES (12,145,'','ifDescr'); +INSERT INTO `data_input_data` VALUES (14,146,'','14'); +INSERT INTO `data_input_data` VALUES (13,146,'','FastEthernet0/16'); +INSERT INTO `data_input_data` VALUES (12,146,'','ifDescr'); +INSERT INTO `data_input_data` VALUES (14,147,'','14'); +INSERT INTO `data_input_data` VALUES (13,147,'','FastEthernet0/17'); +INSERT INTO `data_input_data` VALUES (12,147,'','ifDescr'); +INSERT INTO `data_input_data` VALUES (14,148,'','14'); +INSERT INTO `data_input_data` VALUES (13,148,'','FastEthernet0/18'); +INSERT INTO `data_input_data` VALUES (12,148,'','ifDescr'); +INSERT INTO `data_input_data` VALUES (14,149,'','14'); +INSERT INTO `data_input_data` VALUES (13,149,'','FastEthernet0/19'); +INSERT INTO `data_input_data` VALUES (12,149,'','ifDescr'); +INSERT INTO `data_input_data` VALUES (14,150,'','14'); +INSERT INTO `data_input_data` VALUES (13,150,'','FastEthernet0/20'); +INSERT INTO `data_input_data` VALUES (12,150,'','ifDescr'); +INSERT INTO `data_input_data` VALUES (14,151,'','14'); +INSERT INTO `data_input_data` VALUES (13,151,'','FastEthernet0/21'); +INSERT INTO `data_input_data` VALUES (12,151,'','ifDescr'); +INSERT INTO `data_input_data` VALUES (14,152,'','14'); +INSERT INTO `data_input_data` VALUES (13,152,'','FastEthernet0/22'); +INSERT INTO `data_input_data` VALUES (12,152,'','ifDescr'); +INSERT INTO `data_input_data` VALUES (14,153,'','14'); +INSERT INTO `data_input_data` VALUES (13,153,'','FastEthernet0/23'); +INSERT INTO `data_input_data` VALUES (12,153,'','ifDescr'); +INSERT INTO `data_input_data` VALUES (14,154,'','14'); +INSERT INTO `data_input_data` VALUES (13,154,'','FastEthernet0/24'); +INSERT INTO `data_input_data` VALUES (12,154,'','ifDescr'); +INSERT INTO `data_input_data` VALUES (14,155,'','14'); +INSERT INTO `data_input_data` VALUES (13,155,'','GigabitEthernet0/1'); +INSERT INTO `data_input_data` VALUES (12,155,'','ifDescr'); +INSERT INTO `data_input_data` VALUES (14,156,'','14'); +INSERT INTO `data_input_data` VALUES (13,156,'','GigabitEthernet0/2'); +INSERT INTO `data_input_data` VALUES (12,156,'','ifDescr'); +INSERT INTO `data_input_data` VALUES (14,157,'','14'); +INSERT INTO `data_input_data` VALUES (13,157,'','Null0'); +INSERT INTO `data_input_data` VALUES (12,157,'','ifDescr'); +INSERT INTO `data_input_data` VALUES (14,158,'','14'); +INSERT INTO `data_input_data` VALUES (13,158,'','Vlan1'); +INSERT INTO `data_input_data` VALUES (12,158,'','ifDescr'); +INSERT INTO `data_input_data` VALUES (14,159,'','14'); +INSERT INTO `data_input_data` VALUES (13,159,'','Vlan42'); +INSERT INTO `data_input_data` VALUES (12,159,'','ifDescr'); +INSERT INTO `data_input_data` VALUES (7,131,NULL,'172.16.42.102'); +INSERT INTO `data_input_data` VALUES (8,131,NULL,'public'); +INSERT INTO `data_input_data` VALUES (9,131,NULL,''); +INSERT INTO `data_input_data` VALUES (10,131,NULL,''); +INSERT INTO `data_input_data` VALUES (11,131,NULL,'2'); +INSERT INTO `data_input_data` VALUES (7,132,NULL,'172.16.42.102'); +INSERT INTO `data_input_data` VALUES (8,132,NULL,'public'); +INSERT INTO `data_input_data` VALUES (9,132,NULL,''); +INSERT INTO `data_input_data` VALUES (10,132,NULL,''); +INSERT INTO `data_input_data` VALUES (11,132,NULL,'2'); +INSERT INTO `data_input_data` VALUES (7,133,NULL,'172.16.42.102'); +INSERT INTO `data_input_data` VALUES (8,133,NULL,'public'); +INSERT INTO `data_input_data` VALUES (9,133,NULL,''); +INSERT INTO `data_input_data` VALUES (10,133,NULL,''); +INSERT INTO `data_input_data` VALUES (11,133,NULL,'2'); +INSERT INTO `data_input_data` VALUES (7,134,NULL,'172.16.42.102'); +INSERT INTO `data_input_data` VALUES (8,134,NULL,'public'); +INSERT INTO `data_input_data` VALUES (9,134,NULL,''); +INSERT INTO `data_input_data` VALUES (10,134,NULL,''); +INSERT INTO `data_input_data` VALUES (11,134,NULL,'2'); +INSERT INTO `data_input_data` VALUES (7,135,NULL,'172.16.42.102'); +INSERT INTO `data_input_data` VALUES (8,135,NULL,'public'); +INSERT INTO `data_input_data` VALUES (9,135,NULL,''); +INSERT INTO `data_input_data` VALUES (10,135,NULL,''); +INSERT INTO `data_input_data` VALUES (11,135,NULL,'2'); +INSERT INTO `data_input_data` VALUES (7,136,NULL,'172.16.42.102'); +INSERT INTO `data_input_data` VALUES (8,136,NULL,'public'); +INSERT INTO `data_input_data` VALUES (9,136,NULL,''); +INSERT INTO `data_input_data` VALUES (10,136,NULL,''); +INSERT INTO `data_input_data` VALUES (11,136,NULL,'2'); +INSERT INTO `data_input_data` VALUES (7,137,NULL,'172.16.42.102'); +INSERT INTO `data_input_data` VALUES (8,137,NULL,'public'); +INSERT INTO `data_input_data` VALUES (9,137,NULL,''); +INSERT INTO `data_input_data` VALUES (10,137,NULL,''); +INSERT INTO `data_input_data` VALUES (11,137,NULL,'2'); +INSERT INTO `data_input_data` VALUES (7,138,NULL,'172.16.42.102'); +INSERT INTO `data_input_data` VALUES (8,138,NULL,'public'); +INSERT INTO `data_input_data` VALUES (9,138,NULL,''); +INSERT INTO `data_input_data` VALUES (10,138,NULL,''); +INSERT INTO `data_input_data` VALUES (11,138,NULL,'2'); +INSERT INTO `data_input_data` VALUES (7,139,NULL,'172.16.42.102'); +INSERT INTO `data_input_data` VALUES (8,139,NULL,'public'); +INSERT INTO `data_input_data` VALUES (9,139,NULL,''); +INSERT INTO `data_input_data` VALUES (10,139,NULL,''); +INSERT INTO `data_input_data` VALUES (11,139,NULL,'2'); +INSERT INTO `data_input_data` VALUES (7,140,NULL,'172.16.42.102'); +INSERT INTO `data_input_data` VALUES (8,140,NULL,'public'); +INSERT INTO `data_input_data` VALUES (9,140,NULL,''); +INSERT INTO `data_input_data` VALUES (10,140,NULL,''); +INSERT INTO `data_input_data` VALUES (11,140,NULL,'2'); +INSERT INTO `data_input_data` VALUES (7,141,NULL,'172.16.42.102'); +INSERT INTO `data_input_data` VALUES (8,141,NULL,'public'); +INSERT INTO `data_input_data` VALUES (9,141,NULL,''); +INSERT INTO `data_input_data` VALUES (10,141,NULL,''); +INSERT INTO `data_input_data` VALUES (11,141,NULL,'2'); +INSERT INTO `data_input_data` VALUES (7,142,NULL,'172.16.42.102'); +INSERT INTO `data_input_data` VALUES (8,142,NULL,'public'); +INSERT INTO `data_input_data` VALUES (9,142,NULL,''); +INSERT INTO `data_input_data` VALUES (10,142,NULL,''); +INSERT INTO `data_input_data` VALUES (11,142,NULL,'2'); +INSERT INTO `data_input_data` VALUES (7,143,NULL,'172.16.42.102'); +INSERT INTO `data_input_data` VALUES (8,143,NULL,'public'); +INSERT INTO `data_input_data` VALUES (9,143,NULL,''); +INSERT INTO `data_input_data` VALUES (10,143,NULL,''); +INSERT INTO `data_input_data` VALUES (11,143,NULL,'2'); +INSERT INTO `data_input_data` VALUES (7,144,NULL,'172.16.42.102'); +INSERT INTO `data_input_data` VALUES (8,144,NULL,'public'); +INSERT INTO `data_input_data` VALUES (9,144,NULL,''); +INSERT INTO `data_input_data` VALUES (10,144,NULL,''); +INSERT INTO `data_input_data` VALUES (11,144,NULL,'2'); +INSERT INTO `data_input_data` VALUES (7,145,NULL,'172.16.42.102'); +INSERT INTO `data_input_data` VALUES (8,145,NULL,'public'); +INSERT INTO `data_input_data` VALUES (9,145,NULL,''); +INSERT INTO `data_input_data` VALUES (10,145,NULL,''); +INSERT INTO `data_input_data` VALUES (11,145,NULL,'2'); +INSERT INTO `data_input_data` VALUES (7,146,NULL,'172.16.42.102'); +INSERT INTO `data_input_data` VALUES (8,146,NULL,'public'); +INSERT INTO `data_input_data` VALUES (9,146,NULL,''); +INSERT INTO `data_input_data` VALUES (10,146,NULL,''); +INSERT INTO `data_input_data` VALUES (11,146,NULL,'2'); +INSERT INTO `data_input_data` VALUES (7,147,NULL,'172.16.42.102'); +INSERT INTO `data_input_data` VALUES (8,147,NULL,'public'); +INSERT INTO `data_input_data` VALUES (9,147,NULL,''); +INSERT INTO `data_input_data` VALUES (10,147,NULL,''); +INSERT INTO `data_input_data` VALUES (11,147,NULL,'2'); +INSERT INTO `data_input_data` VALUES (7,148,NULL,'172.16.42.102'); +INSERT INTO `data_input_data` VALUES (8,148,NULL,'public'); +INSERT INTO `data_input_data` VALUES (9,148,NULL,''); +INSERT INTO `data_input_data` VALUES (10,148,NULL,''); +INSERT INTO `data_input_data` VALUES (11,148,NULL,'2'); +INSERT INTO `data_input_data` VALUES (7,149,NULL,'172.16.42.102'); +INSERT INTO `data_input_data` VALUES (8,149,NULL,'public'); +INSERT INTO `data_input_data` VALUES (9,149,NULL,''); +INSERT INTO `data_input_data` VALUES (10,149,NULL,''); +INSERT INTO `data_input_data` VALUES (11,149,NULL,'2'); +INSERT INTO `data_input_data` VALUES (7,150,NULL,'172.16.42.102'); +INSERT INTO `data_input_data` VALUES (8,150,NULL,'public'); +INSERT INTO `data_input_data` VALUES (9,150,NULL,''); +INSERT INTO `data_input_data` VALUES (10,150,NULL,''); +INSERT INTO `data_input_data` VALUES (11,150,NULL,'2'); +INSERT INTO `data_input_data` VALUES (7,151,NULL,'172.16.42.102'); +INSERT INTO `data_input_data` VALUES (8,151,NULL,'public'); +INSERT INTO `data_input_data` VALUES (9,151,NULL,''); +INSERT INTO `data_input_data` VALUES (10,151,NULL,''); +INSERT INTO `data_input_data` VALUES (11,151,NULL,'2'); +INSERT INTO `data_input_data` VALUES (7,152,NULL,'172.16.42.102'); +INSERT INTO `data_input_data` VALUES (8,152,NULL,'public'); +INSERT INTO `data_input_data` VALUES (9,152,NULL,''); +INSERT INTO `data_input_data` VALUES (10,152,NULL,''); +INSERT INTO `data_input_data` VALUES (11,152,NULL,'2'); +INSERT INTO `data_input_data` VALUES (7,153,NULL,'172.16.42.102'); +INSERT INTO `data_input_data` VALUES (8,153,NULL,'public'); +INSERT INTO `data_input_data` VALUES (9,153,NULL,''); +INSERT INTO `data_input_data` VALUES (10,153,NULL,''); +INSERT INTO `data_input_data` VALUES (11,153,NULL,'2'); +INSERT INTO `data_input_data` VALUES (7,154,NULL,'172.16.42.102'); +INSERT INTO `data_input_data` VALUES (8,154,NULL,'public'); +INSERT INTO `data_input_data` VALUES (9,154,NULL,''); +INSERT INTO `data_input_data` VALUES (10,154,NULL,''); +INSERT INTO `data_input_data` VALUES (11,154,NULL,'2'); +INSERT INTO `data_input_data` VALUES (7,155,NULL,'172.16.42.102'); +INSERT INTO `data_input_data` VALUES (8,155,NULL,'public'); +INSERT INTO `data_input_data` VALUES (9,155,NULL,''); +INSERT INTO `data_input_data` VALUES (10,155,NULL,''); +INSERT INTO `data_input_data` VALUES (11,155,NULL,'2'); +INSERT INTO `data_input_data` VALUES (7,156,NULL,'172.16.42.102'); +INSERT INTO `data_input_data` VALUES (8,156,NULL,'public'); +INSERT INTO `data_input_data` VALUES (9,156,NULL,''); +INSERT INTO `data_input_data` VALUES (10,156,NULL,''); +INSERT INTO `data_input_data` VALUES (11,156,NULL,'2'); +INSERT INTO `data_input_data` VALUES (7,157,NULL,'172.16.42.102'); +INSERT INTO `data_input_data` VALUES (8,157,NULL,'public'); +INSERT INTO `data_input_data` VALUES (9,157,NULL,''); +INSERT INTO `data_input_data` VALUES (10,157,NULL,''); +INSERT INTO `data_input_data` VALUES (11,157,NULL,'2'); +INSERT INTO `data_input_data` VALUES (7,158,NULL,'172.16.42.102'); +INSERT INTO `data_input_data` VALUES (8,158,NULL,'public'); +INSERT INTO `data_input_data` VALUES (9,158,NULL,''); +INSERT INTO `data_input_data` VALUES (10,158,NULL,''); +INSERT INTO `data_input_data` VALUES (11,158,NULL,'2'); +INSERT INTO `data_input_data` VALUES (7,159,NULL,'172.16.42.102'); +INSERT INTO `data_input_data` VALUES (8,159,NULL,'public'); +INSERT INTO `data_input_data` VALUES (9,159,NULL,''); +INSERT INTO `data_input_data` VALUES (10,159,NULL,''); +INSERT INTO `data_input_data` VALUES (11,159,NULL,'2'); +INSERT INTO `data_input_data` VALUES (1,160,NULL,'172.16.42.103'); +INSERT INTO `data_input_data` VALUES (2,160,NULL,'public'); +INSERT INTO `data_input_data` VALUES (3,160,NULL,''); +INSERT INTO `data_input_data` VALUES (4,160,NULL,''); +INSERT INTO `data_input_data` VALUES (5,160,NULL,'2'); +INSERT INTO `data_input_data` VALUES (6,160,'','.1.3.6.1.4.1.9.2.1.58.0'); +INSERT INTO `data_input_data` VALUES (14,161,'','14'); +INSERT INTO `data_input_data` VALUES (13,161,'','FastEthernet0/1'); +INSERT INTO `data_input_data` VALUES (12,161,'','ifDescr'); +INSERT INTO `data_input_data` VALUES (14,162,'','14'); +INSERT INTO `data_input_data` VALUES (13,162,'','FastEthernet0/2'); +INSERT INTO `data_input_data` VALUES (12,162,'','ifDescr'); +INSERT INTO `data_input_data` VALUES (14,163,'','14'); +INSERT INTO `data_input_data` VALUES (13,163,'','FastEthernet0/3'); +INSERT INTO `data_input_data` VALUES (12,163,'','ifDescr'); +INSERT INTO `data_input_data` VALUES (14,164,'','14'); +INSERT INTO `data_input_data` VALUES (13,164,'','FastEthernet0/4'); +INSERT INTO `data_input_data` VALUES (12,164,'','ifDescr'); +INSERT INTO `data_input_data` VALUES (14,165,'','14'); +INSERT INTO `data_input_data` VALUES (13,165,'','FastEthernet0/5'); +INSERT INTO `data_input_data` VALUES (12,165,'','ifDescr'); +INSERT INTO `data_input_data` VALUES (14,166,'','14'); +INSERT INTO `data_input_data` VALUES (13,166,'','FastEthernet0/6'); +INSERT INTO `data_input_data` VALUES (12,166,'','ifDescr'); +INSERT INTO `data_input_data` VALUES (14,167,'','14'); +INSERT INTO `data_input_data` VALUES (13,167,'','FastEthernet0/7'); +INSERT INTO `data_input_data` VALUES (12,167,'','ifDescr'); +INSERT INTO `data_input_data` VALUES (14,168,'','14'); +INSERT INTO `data_input_data` VALUES (13,168,'','FastEthernet0/8'); +INSERT INTO `data_input_data` VALUES (12,168,'','ifDescr'); +INSERT INTO `data_input_data` VALUES (14,169,'','14'); +INSERT INTO `data_input_data` VALUES (13,169,'','FastEthernet0/9'); +INSERT INTO `data_input_data` VALUES (12,169,'','ifDescr'); +INSERT INTO `data_input_data` VALUES (14,170,'','14'); +INSERT INTO `data_input_data` VALUES (13,170,'','FastEthernet0/10'); +INSERT INTO `data_input_data` VALUES (12,170,'','ifDescr'); +INSERT INTO `data_input_data` VALUES (14,171,'','14'); +INSERT INTO `data_input_data` VALUES (13,171,'','FastEthernet0/11'); +INSERT INTO `data_input_data` VALUES (12,171,'','ifDescr'); +INSERT INTO `data_input_data` VALUES (14,172,'','14'); +INSERT INTO `data_input_data` VALUES (13,172,'','FastEthernet0/12'); +INSERT INTO `data_input_data` VALUES (12,172,'','ifDescr'); +INSERT INTO `data_input_data` VALUES (14,173,'','14'); +INSERT INTO `data_input_data` VALUES (13,173,'','FastEthernet0/13'); +INSERT INTO `data_input_data` VALUES (12,173,'','ifDescr'); +INSERT INTO `data_input_data` VALUES (14,174,'','14'); +INSERT INTO `data_input_data` VALUES (13,174,'','FastEthernet0/14'); +INSERT INTO `data_input_data` VALUES (12,174,'','ifDescr'); +INSERT INTO `data_input_data` VALUES (14,175,'','14'); +INSERT INTO `data_input_data` VALUES (13,175,'','FastEthernet0/15'); +INSERT INTO `data_input_data` VALUES (12,175,'','ifDescr'); +INSERT INTO `data_input_data` VALUES (14,176,'','14'); +INSERT INTO `data_input_data` VALUES (13,176,'','FastEthernet0/16'); +INSERT INTO `data_input_data` VALUES (12,176,'','ifDescr'); +INSERT INTO `data_input_data` VALUES (14,177,'','14'); +INSERT INTO `data_input_data` VALUES (13,177,'','FastEthernet0/17'); +INSERT INTO `data_input_data` VALUES (12,177,'','ifDescr'); +INSERT INTO `data_input_data` VALUES (14,178,'','14'); +INSERT INTO `data_input_data` VALUES (13,178,'','FastEthernet0/18'); +INSERT INTO `data_input_data` VALUES (12,178,'','ifDescr'); +INSERT INTO `data_input_data` VALUES (14,179,'','14'); +INSERT INTO `data_input_data` VALUES (13,179,'','FastEthernet0/19'); +INSERT INTO `data_input_data` VALUES (12,179,'','ifDescr'); +INSERT INTO `data_input_data` VALUES (14,180,'','14'); +INSERT INTO `data_input_data` VALUES (13,180,'','FastEthernet0/20'); +INSERT INTO `data_input_data` VALUES (12,180,'','ifDescr'); +INSERT INTO `data_input_data` VALUES (14,181,'','14'); +INSERT INTO `data_input_data` VALUES (13,181,'','FastEthernet0/21'); +INSERT INTO `data_input_data` VALUES (12,181,'','ifDescr'); +INSERT INTO `data_input_data` VALUES (14,182,'','14'); +INSERT INTO `data_input_data` VALUES (13,182,'','FastEthernet0/22'); +INSERT INTO `data_input_data` VALUES (12,182,'','ifDescr'); +INSERT INTO `data_input_data` VALUES (14,183,'','14'); +INSERT INTO `data_input_data` VALUES (13,183,'','FastEthernet0/23'); +INSERT INTO `data_input_data` VALUES (12,183,'','ifDescr'); +INSERT INTO `data_input_data` VALUES (14,184,'','14'); +INSERT INTO `data_input_data` VALUES (13,184,'','FastEthernet0/24'); +INSERT INTO `data_input_data` VALUES (12,184,'','ifDescr'); +INSERT INTO `data_input_data` VALUES (14,185,'','14'); +INSERT INTO `data_input_data` VALUES (13,185,'','GigabitEthernet0/1'); +INSERT INTO `data_input_data` VALUES (12,185,'','ifDescr'); +INSERT INTO `data_input_data` VALUES (14,186,'','14'); +INSERT INTO `data_input_data` VALUES (13,186,'','GigabitEthernet0/2'); +INSERT INTO `data_input_data` VALUES (12,186,'','ifDescr'); +INSERT INTO `data_input_data` VALUES (14,187,'','14'); +INSERT INTO `data_input_data` VALUES (13,187,'','Null0'); +INSERT INTO `data_input_data` VALUES (12,187,'','ifDescr'); +INSERT INTO `data_input_data` VALUES (14,188,'','14'); +INSERT INTO `data_input_data` VALUES (13,188,'','Vlan1'); +INSERT INTO `data_input_data` VALUES (12,188,'','ifDescr'); +INSERT INTO `data_input_data` VALUES (14,189,'','14'); +INSERT INTO `data_input_data` VALUES (13,189,'','Vlan42'); +INSERT INTO `data_input_data` VALUES (12,189,'','ifDescr'); +INSERT INTO `data_input_data` VALUES (7,161,NULL,'172.16.42.103'); +INSERT INTO `data_input_data` VALUES (8,161,NULL,'public'); +INSERT INTO `data_input_data` VALUES (9,161,NULL,''); +INSERT INTO `data_input_data` VALUES (10,161,NULL,''); +INSERT INTO `data_input_data` VALUES (11,161,NULL,'2'); +INSERT INTO `data_input_data` VALUES (7,162,NULL,'172.16.42.103'); +INSERT INTO `data_input_data` VALUES (8,162,NULL,'public'); +INSERT INTO `data_input_data` VALUES (9,162,NULL,''); +INSERT INTO `data_input_data` VALUES (10,162,NULL,''); +INSERT INTO `data_input_data` VALUES (11,162,NULL,'2'); +INSERT INTO `data_input_data` VALUES (7,163,NULL,'172.16.42.103'); +INSERT INTO `data_input_data` VALUES (8,163,NULL,'public'); +INSERT INTO `data_input_data` VALUES (9,163,NULL,''); +INSERT INTO `data_input_data` VALUES (10,163,NULL,''); +INSERT INTO `data_input_data` VALUES (11,163,NULL,'2'); +INSERT INTO `data_input_data` VALUES (7,164,NULL,'172.16.42.103'); +INSERT INTO `data_input_data` VALUES (8,164,NULL,'public'); +INSERT INTO `data_input_data` VALUES (9,164,NULL,''); +INSERT INTO `data_input_data` VALUES (10,164,NULL,''); +INSERT INTO `data_input_data` VALUES (11,164,NULL,'2'); +INSERT INTO `data_input_data` VALUES (7,165,NULL,'172.16.42.103'); +INSERT INTO `data_input_data` VALUES (8,165,NULL,'public'); +INSERT INTO `data_input_data` VALUES (9,165,NULL,''); +INSERT INTO `data_input_data` VALUES (10,165,NULL,''); +INSERT INTO `data_input_data` VALUES (11,165,NULL,'2'); +INSERT INTO `data_input_data` VALUES (7,166,NULL,'172.16.42.103'); +INSERT INTO `data_input_data` VALUES (8,166,NULL,'public'); +INSERT INTO `data_input_data` VALUES (9,166,NULL,''); +INSERT INTO `data_input_data` VALUES (10,166,NULL,''); +INSERT INTO `data_input_data` VALUES (11,166,NULL,'2'); +INSERT INTO `data_input_data` VALUES (7,167,NULL,'172.16.42.103'); +INSERT INTO `data_input_data` VALUES (8,167,NULL,'public'); +INSERT INTO `data_input_data` VALUES (9,167,NULL,''); +INSERT INTO `data_input_data` VALUES (10,167,NULL,''); +INSERT INTO `data_input_data` VALUES (11,167,NULL,'2'); +INSERT INTO `data_input_data` VALUES (7,168,NULL,'172.16.42.103'); +INSERT INTO `data_input_data` VALUES (8,168,NULL,'public'); +INSERT INTO `data_input_data` VALUES (9,168,NULL,''); +INSERT INTO `data_input_data` VALUES (10,168,NULL,''); +INSERT INTO `data_input_data` VALUES (11,168,NULL,'2'); +INSERT INTO `data_input_data` VALUES (7,169,NULL,'172.16.42.103'); +INSERT INTO `data_input_data` VALUES (8,169,NULL,'public'); +INSERT INTO `data_input_data` VALUES (9,169,NULL,''); +INSERT INTO `data_input_data` VALUES (10,169,NULL,''); +INSERT INTO `data_input_data` VALUES (11,169,NULL,'2'); +INSERT INTO `data_input_data` VALUES (7,170,NULL,'172.16.42.103'); +INSERT INTO `data_input_data` VALUES (8,170,NULL,'public'); +INSERT INTO `data_input_data` VALUES (9,170,NULL,''); +INSERT INTO `data_input_data` VALUES (10,170,NULL,''); +INSERT INTO `data_input_data` VALUES (11,170,NULL,'2'); +INSERT INTO `data_input_data` VALUES (7,171,NULL,'172.16.42.103'); +INSERT INTO `data_input_data` VALUES (8,171,NULL,'public'); +INSERT INTO `data_input_data` VALUES (9,171,NULL,''); +INSERT INTO `data_input_data` VALUES (10,171,NULL,''); +INSERT INTO `data_input_data` VALUES (11,171,NULL,'2'); +INSERT INTO `data_input_data` VALUES (7,172,NULL,'172.16.42.103'); +INSERT INTO `data_input_data` VALUES (8,172,NULL,'public'); +INSERT INTO `data_input_data` VALUES (9,172,NULL,''); +INSERT INTO `data_input_data` VALUES (10,172,NULL,''); +INSERT INTO `data_input_data` VALUES (11,172,NULL,'2'); +INSERT INTO `data_input_data` VALUES (7,173,NULL,'172.16.42.103'); +INSERT INTO `data_input_data` VALUES (8,173,NULL,'public'); +INSERT INTO `data_input_data` VALUES (9,173,NULL,''); +INSERT INTO `data_input_data` VALUES (10,173,NULL,''); +INSERT INTO `data_input_data` VALUES (11,173,NULL,'2'); +INSERT INTO `data_input_data` VALUES (7,174,NULL,'172.16.42.103'); +INSERT INTO `data_input_data` VALUES (8,174,NULL,'public'); +INSERT INTO `data_input_data` VALUES (9,174,NULL,''); +INSERT INTO `data_input_data` VALUES (10,174,NULL,''); +INSERT INTO `data_input_data` VALUES (11,174,NULL,'2'); +INSERT INTO `data_input_data` VALUES (7,175,NULL,'172.16.42.103'); +INSERT INTO `data_input_data` VALUES (8,175,NULL,'public'); +INSERT INTO `data_input_data` VALUES (9,175,NULL,''); +INSERT INTO `data_input_data` VALUES (10,175,NULL,''); +INSERT INTO `data_input_data` VALUES (11,175,NULL,'2'); +INSERT INTO `data_input_data` VALUES (7,176,NULL,'172.16.42.103'); +INSERT INTO `data_input_data` VALUES (8,176,NULL,'public'); +INSERT INTO `data_input_data` VALUES (9,176,NULL,''); +INSERT INTO `data_input_data` VALUES (10,176,NULL,''); +INSERT INTO `data_input_data` VALUES (11,176,NULL,'2'); +INSERT INTO `data_input_data` VALUES (7,177,NULL,'172.16.42.103'); +INSERT INTO `data_input_data` VALUES (8,177,NULL,'public'); +INSERT INTO `data_input_data` VALUES (9,177,NULL,''); +INSERT INTO `data_input_data` VALUES (10,177,NULL,''); +INSERT INTO `data_input_data` VALUES (11,177,NULL,'2'); +INSERT INTO `data_input_data` VALUES (7,178,NULL,'172.16.42.103'); +INSERT INTO `data_input_data` VALUES (8,178,NULL,'public'); +INSERT INTO `data_input_data` VALUES (9,178,NULL,''); +INSERT INTO `data_input_data` VALUES (10,178,NULL,''); +INSERT INTO `data_input_data` VALUES (11,178,NULL,'2'); +INSERT INTO `data_input_data` VALUES (7,179,NULL,'172.16.42.103'); +INSERT INTO `data_input_data` VALUES (8,179,NULL,'public'); +INSERT INTO `data_input_data` VALUES (9,179,NULL,''); +INSERT INTO `data_input_data` VALUES (10,179,NULL,''); +INSERT INTO `data_input_data` VALUES (11,179,NULL,'2'); +INSERT INTO `data_input_data` VALUES (7,180,NULL,'172.16.42.103'); +INSERT INTO `data_input_data` VALUES (8,180,NULL,'public'); +INSERT INTO `data_input_data` VALUES (9,180,NULL,''); +INSERT INTO `data_input_data` VALUES (10,180,NULL,''); +INSERT INTO `data_input_data` VALUES (11,180,NULL,'2'); +INSERT INTO `data_input_data` VALUES (7,181,NULL,'172.16.42.103'); +INSERT INTO `data_input_data` VALUES (8,181,NULL,'public'); +INSERT INTO `data_input_data` VALUES (9,181,NULL,''); +INSERT INTO `data_input_data` VALUES (10,181,NULL,''); +INSERT INTO `data_input_data` VALUES (11,181,NULL,'2'); +INSERT INTO `data_input_data` VALUES (7,182,NULL,'172.16.42.103'); +INSERT INTO `data_input_data` VALUES (8,182,NULL,'public'); +INSERT INTO `data_input_data` VALUES (9,182,NULL,''); +INSERT INTO `data_input_data` VALUES (10,182,NULL,''); +INSERT INTO `data_input_data` VALUES (11,182,NULL,'2'); +INSERT INTO `data_input_data` VALUES (7,183,NULL,'172.16.42.103'); +INSERT INTO `data_input_data` VALUES (8,183,NULL,'public'); +INSERT INTO `data_input_data` VALUES (9,183,NULL,''); +INSERT INTO `data_input_data` VALUES (10,183,NULL,''); +INSERT INTO `data_input_data` VALUES (11,183,NULL,'2'); +INSERT INTO `data_input_data` VALUES (7,184,NULL,'172.16.42.103'); +INSERT INTO `data_input_data` VALUES (8,184,NULL,'public'); +INSERT INTO `data_input_data` VALUES (9,184,NULL,''); +INSERT INTO `data_input_data` VALUES (10,184,NULL,''); +INSERT INTO `data_input_data` VALUES (11,184,NULL,'2'); +INSERT INTO `data_input_data` VALUES (7,185,NULL,'172.16.42.103'); +INSERT INTO `data_input_data` VALUES (8,185,NULL,'public'); +INSERT INTO `data_input_data` VALUES (9,185,NULL,''); +INSERT INTO `data_input_data` VALUES (10,185,NULL,''); +INSERT INTO `data_input_data` VALUES (11,185,NULL,'2'); +INSERT INTO `data_input_data` VALUES (7,186,NULL,'172.16.42.103'); +INSERT INTO `data_input_data` VALUES (8,186,NULL,'public'); +INSERT INTO `data_input_data` VALUES (9,186,NULL,''); +INSERT INTO `data_input_data` VALUES (10,186,NULL,''); +INSERT INTO `data_input_data` VALUES (11,186,NULL,'2'); +INSERT INTO `data_input_data` VALUES (7,187,NULL,'172.16.42.103'); +INSERT INTO `data_input_data` VALUES (8,187,NULL,'public'); +INSERT INTO `data_input_data` VALUES (9,187,NULL,''); +INSERT INTO `data_input_data` VALUES (10,187,NULL,''); +INSERT INTO `data_input_data` VALUES (11,187,NULL,'2'); +INSERT INTO `data_input_data` VALUES (7,188,NULL,'172.16.42.103'); +INSERT INTO `data_input_data` VALUES (8,188,NULL,'public'); +INSERT INTO `data_input_data` VALUES (9,188,NULL,''); +INSERT INTO `data_input_data` VALUES (10,188,NULL,''); +INSERT INTO `data_input_data` VALUES (11,188,NULL,'2'); +INSERT INTO `data_input_data` VALUES (7,189,NULL,'172.16.42.103'); +INSERT INTO `data_input_data` VALUES (8,189,NULL,'public'); +INSERT INTO `data_input_data` VALUES (9,189,NULL,''); +INSERT INTO `data_input_data` VALUES (10,189,NULL,''); +INSERT INTO `data_input_data` VALUES (11,189,NULL,'2'); +INSERT INTO `data_input_data` VALUES (14,312,'','13'); +INSERT INTO `data_input_data` VALUES (6,311,'','.1.3.6.1.4.1.2021.4.6.0'); +INSERT INTO `data_input_data` VALUES (8,319,NULL,'public'); +INSERT INTO `data_input_data` VALUES (7,319,NULL,'172.16.42.1'); +INSERT INTO `data_input_data` VALUES (11,318,NULL,'2'); +INSERT INTO `data_input_data` VALUES (10,318,NULL,''); +INSERT INTO `data_input_data` VALUES (7,318,NULL,'172.16.42.1'); +INSERT INTO `data_input_data` VALUES (12,319,'','ifDescr'); +INSERT INTO `data_input_data` VALUES (14,319,'','13'); +INSERT INTO `data_input_data` VALUES (12,318,'','ifDescr'); +INSERT INTO `data_input_data` VALUES (13,318,'','vlan23'); +INSERT INTO `data_input_data` VALUES (14,318,'','13'); +INSERT INTO `data_input_data` VALUES (14,317,'','13'); +INSERT INTO `data_input_data` VALUES (13,316,'','vlan25'); +INSERT INTO `data_input_data` VALUES (14,316,'','13'); +INSERT INTO `data_input_data` VALUES (12,315,'','ifDescr'); +INSERT INTO `data_input_data` VALUES (14,315,'','13'); +INSERT INTO `data_input_data` VALUES (12,314,'','ifDescr'); +INSERT INTO `data_input_data` VALUES (13,314,'','vlan22'); +INSERT INTO `data_input_data` VALUES (14,314,'','13'); +INSERT INTO `data_input_data` VALUES (12,313,'','ifDescr'); +INSERT INTO `data_input_data` VALUES (14,313,'','13'); +INSERT INTO `data_input_data` VALUES (12,312,'','ifDescr'); +INSERT INTO `data_input_data` VALUES (13,312,'','bond0'); +INSERT INTO `data_input_data` VALUES (5,311,NULL,'2'); +INSERT INTO `data_input_data` VALUES (4,311,NULL,''); +INSERT INTO `data_input_data` VALUES (3,311,NULL,''); +INSERT INTO `data_input_data` VALUES (2,311,NULL,'public'); +INSERT INTO `data_input_data` VALUES (4,310,NULL,''); +INSERT INTO `data_input_data` VALUES (3,310,NULL,''); +INSERT INTO `data_input_data` VALUES (2,310,NULL,'public'); +INSERT INTO `data_input_data` VALUES (1,310,NULL,'172.16.42.1'); +INSERT INTO `data_input_data` VALUES (4,308,NULL,''); +INSERT INTO `data_input_data` VALUES (3,308,NULL,''); +INSERT INTO `data_input_data` VALUES (2,308,NULL,'public'); +INSERT INTO `data_input_data` VALUES (1,308,NULL,'172.16.42.1'); +INSERT INTO `data_input_data` VALUES (3,304,NULL,''); +INSERT INTO `data_input_data` VALUES (2,304,NULL,'public'); +INSERT INTO `data_input_data` VALUES (1,304,NULL,'172.16.42.1'); +INSERT INTO `data_input_data` VALUES (6,303,'','.1.3.6.1.4.1.2021.11.51.0'); +INSERT INTO `data_input_data` VALUES (2,309,NULL,'public'); +INSERT INTO `data_input_data` VALUES (1,309,NULL,'172.16.42.1'); +INSERT INTO `data_input_data` VALUES (5,306,NULL,'2'); +INSERT INTO `data_input_data` VALUES (4,306,NULL,''); +INSERT INTO `data_input_data` VALUES (3,306,NULL,''); +INSERT INTO `data_input_data` VALUES (2,306,NULL,'public'); +INSERT INTO `data_input_data` VALUES (5,305,NULL,'2'); +INSERT INTO `data_input_data` VALUES (4,305,NULL,''); +INSERT INTO `data_input_data` VALUES (3,305,NULL,''); +INSERT INTO `data_input_data` VALUES (1,305,NULL,'172.16.42.1'); +INSERT INTO `data_input_data` VALUES (2,305,NULL,'public'); +INSERT INTO `data_input_data` VALUES (3,307,NULL,''); +INSERT INTO `data_input_data` VALUES (1,307,NULL,'172.16.42.1'); +INSERT INTO `data_input_data` VALUES (2,307,NULL,'public'); +INSERT INTO `data_input_data` VALUES (13,317,'','ppp0'); +INSERT INTO `data_input_data` VALUES (12,317,'','ifDescr'); +INSERT INTO `data_input_data` VALUES (9,318,NULL,''); +INSERT INTO `data_input_data` VALUES (8,318,NULL,'public'); +INSERT INTO `data_input_data` VALUES (13,319,'','chaos_vpn'); +INSERT INTO `data_input_data` VALUES (12,316,'','ifDescr'); +INSERT INTO `data_input_data` VALUES (13,315,'','vlan42'); +INSERT INTO `data_input_data` VALUES (13,313,'','vlan24'); +INSERT INTO `data_input_data` VALUES (1,311,NULL,'172.16.42.1'); +INSERT INTO `data_input_data` VALUES (6,310,'','.1.3.6.1.4.1.2021.4.15.0'); +INSERT INTO `data_input_data` VALUES (5,310,NULL,'2'); +INSERT INTO `data_input_data` VALUES (6,309,'','.1.3.6.1.4.1.2021.4.14.0'); +INSERT INTO `data_input_data` VALUES (5,309,NULL,'2'); +INSERT INTO `data_input_data` VALUES (4,309,NULL,''); +INSERT INTO `data_input_data` VALUES (3,309,NULL,''); +INSERT INTO `data_input_data` VALUES (6,307,'','.1.3.6.1.4.1.2021.10.1.3.3'); +INSERT INTO `data_input_data` VALUES (5,307,NULL,'2'); +INSERT INTO `data_input_data` VALUES (4,307,NULL,''); +INSERT INTO `data_input_data` VALUES (2,303,NULL,'public'); +INSERT INTO `data_input_data` VALUES (3,303,NULL,''); +INSERT INTO `data_input_data` VALUES (4,303,NULL,''); +INSERT INTO `data_input_data` VALUES (5,303,NULL,'2'); +INSERT INTO `data_input_data` VALUES (1,303,NULL,'172.16.42.1'); +INSERT INTO `data_input_data` VALUES (6,308,'','.1.3.6.1.4.1.2021.10.1.3.2'); +INSERT INTO `data_input_data` VALUES (5,308,NULL,'2'); +INSERT INTO `data_input_data` VALUES (1,306,NULL,'172.16.42.1'); +INSERT INTO `data_input_data` VALUES (6,305,'','.1.3.6.1.4.1.2021.11.50.0'); +INSERT INTO `data_input_data` VALUES (6,304,'','.1.3.6.1.4.1.2021.11.52.0'); +INSERT INTO `data_input_data` VALUES (5,304,NULL,'2'); +INSERT INTO `data_input_data` VALUES (4,304,NULL,''); +INSERT INTO `data_input_data` VALUES (6,306,'','.1.3.6.1.4.1.2021.10.1.3.1'); +INSERT INTO `data_input_data` VALUES (1,207,NULL,'172.16.42.104'); +INSERT INTO `data_input_data` VALUES (2,207,NULL,'public'); +INSERT INTO `data_input_data` VALUES (3,207,NULL,''); +INSERT INTO `data_input_data` VALUES (4,207,NULL,''); +INSERT INTO `data_input_data` VALUES (5,207,NULL,'2'); +INSERT INTO `data_input_data` VALUES (6,207,'','.1.3.6.1.4.1.9.2.1.58.0'); +INSERT INTO `data_input_data` VALUES (14,208,'','14'); +INSERT INTO `data_input_data` VALUES (13,208,'','FastEthernet0/1'); +INSERT INTO `data_input_data` VALUES (12,208,'','ifDescr'); +INSERT INTO `data_input_data` VALUES (14,209,'','14'); +INSERT INTO `data_input_data` VALUES (13,209,'','FastEthernet0/2'); +INSERT INTO `data_input_data` VALUES (12,209,'','ifDescr'); +INSERT INTO `data_input_data` VALUES (14,210,'','14'); +INSERT INTO `data_input_data` VALUES (13,210,'','FastEthernet0/3'); +INSERT INTO `data_input_data` VALUES (12,210,'','ifDescr'); +INSERT INTO `data_input_data` VALUES (14,211,'','14'); +INSERT INTO `data_input_data` VALUES (13,211,'','FastEthernet0/4'); +INSERT INTO `data_input_data` VALUES (12,211,'','ifDescr'); +INSERT INTO `data_input_data` VALUES (14,212,'','14'); +INSERT INTO `data_input_data` VALUES (13,212,'','FastEthernet0/5'); +INSERT INTO `data_input_data` VALUES (12,212,'','ifDescr'); +INSERT INTO `data_input_data` VALUES (14,213,'','14'); +INSERT INTO `data_input_data` VALUES (13,213,'','FastEthernet0/6'); +INSERT INTO `data_input_data` VALUES (12,213,'','ifDescr'); +INSERT INTO `data_input_data` VALUES (14,214,'','14'); +INSERT INTO `data_input_data` VALUES (13,214,'','FastEthernet0/7'); +INSERT INTO `data_input_data` VALUES (12,214,'','ifDescr'); +INSERT INTO `data_input_data` VALUES (14,215,'','14'); +INSERT INTO `data_input_data` VALUES (13,215,'','FastEthernet0/8'); +INSERT INTO `data_input_data` VALUES (12,215,'','ifDescr'); +INSERT INTO `data_input_data` VALUES (14,216,'','14'); +INSERT INTO `data_input_data` VALUES (13,216,'','FastEthernet0/9'); +INSERT INTO `data_input_data` VALUES (12,216,'','ifDescr'); +INSERT INTO `data_input_data` VALUES (14,217,'','14'); +INSERT INTO `data_input_data` VALUES (13,217,'','FastEthernet0/10'); +INSERT INTO `data_input_data` VALUES (12,217,'','ifDescr'); +INSERT INTO `data_input_data` VALUES (14,218,'','14'); +INSERT INTO `data_input_data` VALUES (13,218,'','FastEthernet0/11'); +INSERT INTO `data_input_data` VALUES (12,218,'','ifDescr'); +INSERT INTO `data_input_data` VALUES (14,219,'','14'); +INSERT INTO `data_input_data` VALUES (13,219,'','FastEthernet0/12'); +INSERT INTO `data_input_data` VALUES (12,219,'','ifDescr'); +INSERT INTO `data_input_data` VALUES (14,220,'','14'); +INSERT INTO `data_input_data` VALUES (13,220,'','FastEthernet0/13'); +INSERT INTO `data_input_data` VALUES (12,220,'','ifDescr'); +INSERT INTO `data_input_data` VALUES (14,221,'','14'); +INSERT INTO `data_input_data` VALUES (13,221,'','FastEthernet0/14'); +INSERT INTO `data_input_data` VALUES (12,221,'','ifDescr'); +INSERT INTO `data_input_data` VALUES (14,222,'','14'); +INSERT INTO `data_input_data` VALUES (13,222,'','FastEthernet0/15'); +INSERT INTO `data_input_data` VALUES (12,222,'','ifDescr'); +INSERT INTO `data_input_data` VALUES (14,223,'','14'); +INSERT INTO `data_input_data` VALUES (13,223,'','FastEthernet0/16'); +INSERT INTO `data_input_data` VALUES (12,223,'','ifDescr'); +INSERT INTO `data_input_data` VALUES (14,224,'','14'); +INSERT INTO `data_input_data` VALUES (13,224,'','FastEthernet0/17'); +INSERT INTO `data_input_data` VALUES (12,224,'','ifDescr'); +INSERT INTO `data_input_data` VALUES (14,225,'','14'); +INSERT INTO `data_input_data` VALUES (13,225,'','FastEthernet0/18'); +INSERT INTO `data_input_data` VALUES (12,225,'','ifDescr'); +INSERT INTO `data_input_data` VALUES (14,226,'','14'); +INSERT INTO `data_input_data` VALUES (13,226,'','FastEthernet0/19'); +INSERT INTO `data_input_data` VALUES (12,226,'','ifDescr'); +INSERT INTO `data_input_data` VALUES (14,227,'','14'); +INSERT INTO `data_input_data` VALUES (13,227,'','FastEthernet0/20'); +INSERT INTO `data_input_data` VALUES (12,227,'','ifDescr'); +INSERT INTO `data_input_data` VALUES (14,228,'','14'); +INSERT INTO `data_input_data` VALUES (13,228,'','FastEthernet0/21'); +INSERT INTO `data_input_data` VALUES (12,228,'','ifDescr'); +INSERT INTO `data_input_data` VALUES (14,229,'','14'); +INSERT INTO `data_input_data` VALUES (13,229,'','FastEthernet0/22'); +INSERT INTO `data_input_data` VALUES (12,229,'','ifDescr'); +INSERT INTO `data_input_data` VALUES (14,230,'','14'); +INSERT INTO `data_input_data` VALUES (13,230,'','FastEthernet0/23'); +INSERT INTO `data_input_data` VALUES (12,230,'','ifDescr'); +INSERT INTO `data_input_data` VALUES (14,231,'','14'); +INSERT INTO `data_input_data` VALUES (13,231,'','FastEthernet0/24'); +INSERT INTO `data_input_data` VALUES (12,231,'','ifDescr'); +INSERT INTO `data_input_data` VALUES (14,232,'','14'); +INSERT INTO `data_input_data` VALUES (13,232,'','GigabitEthernet0/1'); +INSERT INTO `data_input_data` VALUES (12,232,'','ifDescr'); +INSERT INTO `data_input_data` VALUES (14,233,'','14'); +INSERT INTO `data_input_data` VALUES (13,233,'','GigabitEthernet0/2'); +INSERT INTO `data_input_data` VALUES (12,233,'','ifDescr'); +INSERT INTO `data_input_data` VALUES (14,234,'','14'); +INSERT INTO `data_input_data` VALUES (13,234,'','Null0'); +INSERT INTO `data_input_data` VALUES (12,234,'','ifDescr'); +INSERT INTO `data_input_data` VALUES (14,235,'','14'); +INSERT INTO `data_input_data` VALUES (13,235,'','Vlan1'); +INSERT INTO `data_input_data` VALUES (12,235,'','ifDescr'); +INSERT INTO `data_input_data` VALUES (14,236,'','14'); +INSERT INTO `data_input_data` VALUES (13,236,'','Vlan42'); +INSERT INTO `data_input_data` VALUES (12,236,'','ifDescr'); +INSERT INTO `data_input_data` VALUES (7,208,NULL,'172.16.42.104'); +INSERT INTO `data_input_data` VALUES (8,208,NULL,'public'); +INSERT INTO `data_input_data` VALUES (9,208,NULL,''); +INSERT INTO `data_input_data` VALUES (10,208,NULL,''); +INSERT INTO `data_input_data` VALUES (11,208,NULL,'2'); +INSERT INTO `data_input_data` VALUES (7,209,NULL,'172.16.42.104'); +INSERT INTO `data_input_data` VALUES (8,209,NULL,'public'); +INSERT INTO `data_input_data` VALUES (9,209,NULL,''); +INSERT INTO `data_input_data` VALUES (10,209,NULL,''); +INSERT INTO `data_input_data` VALUES (11,209,NULL,'2'); +INSERT INTO `data_input_data` VALUES (7,210,NULL,'172.16.42.104'); +INSERT INTO `data_input_data` VALUES (8,210,NULL,'public'); +INSERT INTO `data_input_data` VALUES (9,210,NULL,''); +INSERT INTO `data_input_data` VALUES (10,210,NULL,''); +INSERT INTO `data_input_data` VALUES (11,210,NULL,'2'); +INSERT INTO `data_input_data` VALUES (7,211,NULL,'172.16.42.104'); +INSERT INTO `data_input_data` VALUES (8,211,NULL,'public'); +INSERT INTO `data_input_data` VALUES (9,211,NULL,''); +INSERT INTO `data_input_data` VALUES (10,211,NULL,''); +INSERT INTO `data_input_data` VALUES (11,211,NULL,'2'); +INSERT INTO `data_input_data` VALUES (7,212,NULL,'172.16.42.104'); +INSERT INTO `data_input_data` VALUES (8,212,NULL,'public'); +INSERT INTO `data_input_data` VALUES (9,212,NULL,''); +INSERT INTO `data_input_data` VALUES (10,212,NULL,''); +INSERT INTO `data_input_data` VALUES (11,212,NULL,'2'); +INSERT INTO `data_input_data` VALUES (7,213,NULL,'172.16.42.104'); +INSERT INTO `data_input_data` VALUES (8,213,NULL,'public'); +INSERT INTO `data_input_data` VALUES (9,213,NULL,''); +INSERT INTO `data_input_data` VALUES (10,213,NULL,''); +INSERT INTO `data_input_data` VALUES (11,213,NULL,'2'); +INSERT INTO `data_input_data` VALUES (7,214,NULL,'172.16.42.104'); +INSERT INTO `data_input_data` VALUES (8,214,NULL,'public'); +INSERT INTO `data_input_data` VALUES (9,214,NULL,''); +INSERT INTO `data_input_data` VALUES (10,214,NULL,''); +INSERT INTO `data_input_data` VALUES (11,214,NULL,'2'); +INSERT INTO `data_input_data` VALUES (7,215,NULL,'172.16.42.104'); +INSERT INTO `data_input_data` VALUES (8,215,NULL,'public'); +INSERT INTO `data_input_data` VALUES (9,215,NULL,''); +INSERT INTO `data_input_data` VALUES (10,215,NULL,''); +INSERT INTO `data_input_data` VALUES (11,215,NULL,'2'); +INSERT INTO `data_input_data` VALUES (7,216,NULL,'172.16.42.104'); +INSERT INTO `data_input_data` VALUES (8,216,NULL,'public'); +INSERT INTO `data_input_data` VALUES (9,216,NULL,''); +INSERT INTO `data_input_data` VALUES (10,216,NULL,''); +INSERT INTO `data_input_data` VALUES (11,216,NULL,'2'); +INSERT INTO `data_input_data` VALUES (7,217,NULL,'172.16.42.104'); +INSERT INTO `data_input_data` VALUES (8,217,NULL,'public'); +INSERT INTO `data_input_data` VALUES (9,217,NULL,''); +INSERT INTO `data_input_data` VALUES (10,217,NULL,''); +INSERT INTO `data_input_data` VALUES (11,217,NULL,'2'); +INSERT INTO `data_input_data` VALUES (7,218,NULL,'172.16.42.104'); +INSERT INTO `data_input_data` VALUES (8,218,NULL,'public'); +INSERT INTO `data_input_data` VALUES (9,218,NULL,''); +INSERT INTO `data_input_data` VALUES (10,218,NULL,''); +INSERT INTO `data_input_data` VALUES (11,218,NULL,'2'); +INSERT INTO `data_input_data` VALUES (7,219,NULL,'172.16.42.104'); +INSERT INTO `data_input_data` VALUES (8,219,NULL,'public'); +INSERT INTO `data_input_data` VALUES (9,219,NULL,''); +INSERT INTO `data_input_data` VALUES (10,219,NULL,''); +INSERT INTO `data_input_data` VALUES (11,219,NULL,'2'); +INSERT INTO `data_input_data` VALUES (7,220,NULL,'172.16.42.104'); +INSERT INTO `data_input_data` VALUES (8,220,NULL,'public'); +INSERT INTO `data_input_data` VALUES (9,220,NULL,''); +INSERT INTO `data_input_data` VALUES (10,220,NULL,''); +INSERT INTO `data_input_data` VALUES (11,220,NULL,'2'); +INSERT INTO `data_input_data` VALUES (7,221,NULL,'172.16.42.104'); +INSERT INTO `data_input_data` VALUES (8,221,NULL,'public'); +INSERT INTO `data_input_data` VALUES (9,221,NULL,''); +INSERT INTO `data_input_data` VALUES (10,221,NULL,''); +INSERT INTO `data_input_data` VALUES (11,221,NULL,'2'); +INSERT INTO `data_input_data` VALUES (7,222,NULL,'172.16.42.104'); +INSERT INTO `data_input_data` VALUES (8,222,NULL,'public'); +INSERT INTO `data_input_data` VALUES (9,222,NULL,''); +INSERT INTO `data_input_data` VALUES (10,222,NULL,''); +INSERT INTO `data_input_data` VALUES (11,222,NULL,'2'); +INSERT INTO `data_input_data` VALUES (7,223,NULL,'172.16.42.104'); +INSERT INTO `data_input_data` VALUES (8,223,NULL,'public'); +INSERT INTO `data_input_data` VALUES (9,223,NULL,''); +INSERT INTO `data_input_data` VALUES (10,223,NULL,''); +INSERT INTO `data_input_data` VALUES (11,223,NULL,'2'); +INSERT INTO `data_input_data` VALUES (7,224,NULL,'172.16.42.104'); +INSERT INTO `data_input_data` VALUES (8,224,NULL,'public'); +INSERT INTO `data_input_data` VALUES (9,224,NULL,''); +INSERT INTO `data_input_data` VALUES (10,224,NULL,''); +INSERT INTO `data_input_data` VALUES (11,224,NULL,'2'); +INSERT INTO `data_input_data` VALUES (7,225,NULL,'172.16.42.104'); +INSERT INTO `data_input_data` VALUES (8,225,NULL,'public'); +INSERT INTO `data_input_data` VALUES (9,225,NULL,''); +INSERT INTO `data_input_data` VALUES (10,225,NULL,''); +INSERT INTO `data_input_data` VALUES (11,225,NULL,'2'); +INSERT INTO `data_input_data` VALUES (7,226,NULL,'172.16.42.104'); +INSERT INTO `data_input_data` VALUES (8,226,NULL,'public'); +INSERT INTO `data_input_data` VALUES (9,226,NULL,''); +INSERT INTO `data_input_data` VALUES (10,226,NULL,''); +INSERT INTO `data_input_data` VALUES (11,226,NULL,'2'); +INSERT INTO `data_input_data` VALUES (7,227,NULL,'172.16.42.104'); +INSERT INTO `data_input_data` VALUES (8,227,NULL,'public'); +INSERT INTO `data_input_data` VALUES (9,227,NULL,''); +INSERT INTO `data_input_data` VALUES (10,227,NULL,''); +INSERT INTO `data_input_data` VALUES (11,227,NULL,'2'); +INSERT INTO `data_input_data` VALUES (7,228,NULL,'172.16.42.104'); +INSERT INTO `data_input_data` VALUES (8,228,NULL,'public'); +INSERT INTO `data_input_data` VALUES (9,228,NULL,''); +INSERT INTO `data_input_data` VALUES (10,228,NULL,''); +INSERT INTO `data_input_data` VALUES (11,228,NULL,'2'); +INSERT INTO `data_input_data` VALUES (7,229,NULL,'172.16.42.104'); +INSERT INTO `data_input_data` VALUES (8,229,NULL,'public'); +INSERT INTO `data_input_data` VALUES (9,229,NULL,''); +INSERT INTO `data_input_data` VALUES (10,229,NULL,''); +INSERT INTO `data_input_data` VALUES (11,229,NULL,'2'); +INSERT INTO `data_input_data` VALUES (7,230,NULL,'172.16.42.104'); +INSERT INTO `data_input_data` VALUES (8,230,NULL,'public'); +INSERT INTO `data_input_data` VALUES (9,230,NULL,''); +INSERT INTO `data_input_data` VALUES (10,230,NULL,''); +INSERT INTO `data_input_data` VALUES (11,230,NULL,'2'); +INSERT INTO `data_input_data` VALUES (7,231,NULL,'172.16.42.104'); +INSERT INTO `data_input_data` VALUES (8,231,NULL,'public'); +INSERT INTO `data_input_data` VALUES (9,231,NULL,''); +INSERT INTO `data_input_data` VALUES (10,231,NULL,''); +INSERT INTO `data_input_data` VALUES (11,231,NULL,'2'); +INSERT INTO `data_input_data` VALUES (7,232,NULL,'172.16.42.104'); +INSERT INTO `data_input_data` VALUES (8,232,NULL,'public'); +INSERT INTO `data_input_data` VALUES (9,232,NULL,''); +INSERT INTO `data_input_data` VALUES (10,232,NULL,''); +INSERT INTO `data_input_data` VALUES (11,232,NULL,'2'); +INSERT INTO `data_input_data` VALUES (7,233,NULL,'172.16.42.104'); +INSERT INTO `data_input_data` VALUES (8,233,NULL,'public'); +INSERT INTO `data_input_data` VALUES (9,233,NULL,''); +INSERT INTO `data_input_data` VALUES (10,233,NULL,''); +INSERT INTO `data_input_data` VALUES (11,233,NULL,'2'); +INSERT INTO `data_input_data` VALUES (7,234,NULL,'172.16.42.104'); +INSERT INTO `data_input_data` VALUES (8,234,NULL,'public'); +INSERT INTO `data_input_data` VALUES (9,234,NULL,''); +INSERT INTO `data_input_data` VALUES (10,234,NULL,''); +INSERT INTO `data_input_data` VALUES (11,234,NULL,'2'); +INSERT INTO `data_input_data` VALUES (7,235,NULL,'172.16.42.104'); +INSERT INTO `data_input_data` VALUES (8,235,NULL,'public'); +INSERT INTO `data_input_data` VALUES (9,235,NULL,''); +INSERT INTO `data_input_data` VALUES (10,235,NULL,''); +INSERT INTO `data_input_data` VALUES (11,235,NULL,'2'); +INSERT INTO `data_input_data` VALUES (7,236,NULL,'172.16.42.104'); +INSERT INTO `data_input_data` VALUES (8,236,NULL,'public'); +INSERT INTO `data_input_data` VALUES (9,236,NULL,''); +INSERT INTO `data_input_data` VALUES (10,236,NULL,''); +INSERT INTO `data_input_data` VALUES (11,236,NULL,'2'); +INSERT INTO `data_input_data` VALUES (1,237,NULL,'172.16.42.142'); +INSERT INTO `data_input_data` VALUES (2,237,NULL,'public'); +INSERT INTO `data_input_data` VALUES (3,237,NULL,''); +INSERT INTO `data_input_data` VALUES (4,237,NULL,''); +INSERT INTO `data_input_data` VALUES (5,237,NULL,'2'); +INSERT INTO `data_input_data` VALUES (6,237,'','.1.3.6.1.4.1.9.2.1.58.0'); +INSERT INTO `data_input_data` VALUES (14,238,'','14'); +INSERT INTO `data_input_data` VALUES (13,238,'','sc0'); +INSERT INTO `data_input_data` VALUES (12,238,'','ifName'); +INSERT INTO `data_input_data` VALUES (14,239,'','14'); +INSERT INTO `data_input_data` VALUES (13,239,'','sl0'); +INSERT INTO `data_input_data` VALUES (12,239,'','ifName'); +INSERT INTO `data_input_data` VALUES (14,240,'','14'); +INSERT INTO `data_input_data` VALUES (13,240,'','me1'); +INSERT INTO `data_input_data` VALUES (12,240,'','ifName'); +INSERT INTO `data_input_data` VALUES (14,241,'','14'); +INSERT INTO `data_input_data` VALUES (13,241,'','VLAN-1'); +INSERT INTO `data_input_data` VALUES (12,241,'','ifName'); +INSERT INTO `data_input_data` VALUES (14,242,'','14'); +INSERT INTO `data_input_data` VALUES (13,242,'','VLAN-1002'); +INSERT INTO `data_input_data` VALUES (12,242,'','ifName'); +INSERT INTO `data_input_data` VALUES (14,243,'','14'); +INSERT INTO `data_input_data` VALUES (13,243,'','VLAN-1004'); +INSERT INTO `data_input_data` VALUES (12,243,'','ifName'); +INSERT INTO `data_input_data` VALUES (14,244,'','14'); +INSERT INTO `data_input_data` VALUES (13,244,'','VLAN-1005'); +INSERT INTO `data_input_data` VALUES (12,244,'','ifName'); +INSERT INTO `data_input_data` VALUES (14,245,'','14'); +INSERT INTO `data_input_data` VALUES (13,245,'','VLAN-1003'); +INSERT INTO `data_input_data` VALUES (12,245,'','ifName'); +INSERT INTO `data_input_data` VALUES (14,246,'','14'); +INSERT INTO `data_input_data` VALUES (13,246,'','2/1'); +INSERT INTO `data_input_data` VALUES (12,246,'','ifName'); +INSERT INTO `data_input_data` VALUES (14,247,'','14'); +INSERT INTO `data_input_data` VALUES (13,247,'','2/2'); +INSERT INTO `data_input_data` VALUES (12,247,'','ifName'); +INSERT INTO `data_input_data` VALUES (14,248,'','14'); +INSERT INTO `data_input_data` VALUES (13,248,'','2/3'); +INSERT INTO `data_input_data` VALUES (12,248,'','ifName'); +INSERT INTO `data_input_data` VALUES (14,249,'','14'); +INSERT INTO `data_input_data` VALUES (13,249,'','2/4'); +INSERT INTO `data_input_data` VALUES (12,249,'','ifName'); +INSERT INTO `data_input_data` VALUES (14,250,'','14'); +INSERT INTO `data_input_data` VALUES (13,250,'','2/5'); +INSERT INTO `data_input_data` VALUES (12,250,'','ifName'); +INSERT INTO `data_input_data` VALUES (14,251,'','14'); +INSERT INTO `data_input_data` VALUES (13,251,'','2/6'); +INSERT INTO `data_input_data` VALUES (12,251,'','ifName'); +INSERT INTO `data_input_data` VALUES (14,252,'','14'); +INSERT INTO `data_input_data` VALUES (13,252,'','2/7'); +INSERT INTO `data_input_data` VALUES (12,252,'','ifName'); +INSERT INTO `data_input_data` VALUES (14,253,'','14'); +INSERT INTO `data_input_data` VALUES (13,253,'','2/8'); +INSERT INTO `data_input_data` VALUES (12,253,'','ifName'); +INSERT INTO `data_input_data` VALUES (14,254,'','14'); +INSERT INTO `data_input_data` VALUES (13,254,'','2/9'); +INSERT INTO `data_input_data` VALUES (12,254,'','ifName'); +INSERT INTO `data_input_data` VALUES (14,255,'','14'); +INSERT INTO `data_input_data` VALUES (13,255,'','2/10'); +INSERT INTO `data_input_data` VALUES (12,255,'','ifName'); +INSERT INTO `data_input_data` VALUES (14,256,'','14'); +INSERT INTO `data_input_data` VALUES (13,256,'','2/11'); +INSERT INTO `data_input_data` VALUES (12,256,'','ifName'); +INSERT INTO `data_input_data` VALUES (14,257,'','14'); +INSERT INTO `data_input_data` VALUES (13,257,'','2/12'); +INSERT INTO `data_input_data` VALUES (12,257,'','ifName'); +INSERT INTO `data_input_data` VALUES (14,258,'','14'); +INSERT INTO `data_input_data` VALUES (13,258,'','2/13'); +INSERT INTO `data_input_data` VALUES (12,258,'','ifName'); +INSERT INTO `data_input_data` VALUES (14,259,'','14'); +INSERT INTO `data_input_data` VALUES (13,259,'','2/14'); +INSERT INTO `data_input_data` VALUES (12,259,'','ifName'); +INSERT INTO `data_input_data` VALUES (14,260,'','14'); +INSERT INTO `data_input_data` VALUES (13,260,'','2/15'); +INSERT INTO `data_input_data` VALUES (12,260,'','ifName'); +INSERT INTO `data_input_data` VALUES (14,261,'','14'); +INSERT INTO `data_input_data` VALUES (13,261,'','2/16'); +INSERT INTO `data_input_data` VALUES (12,261,'','ifName'); +INSERT INTO `data_input_data` VALUES (14,262,'','14'); +INSERT INTO `data_input_data` VALUES (13,262,'','2/17'); +INSERT INTO `data_input_data` VALUES (12,262,'','ifName'); +INSERT INTO `data_input_data` VALUES (14,263,'','14'); +INSERT INTO `data_input_data` VALUES (13,263,'','2/18'); +INSERT INTO `data_input_data` VALUES (12,263,'','ifName'); +INSERT INTO `data_input_data` VALUES (14,264,'','14'); +INSERT INTO `data_input_data` VALUES (13,264,'','2/19'); +INSERT INTO `data_input_data` VALUES (12,264,'','ifName'); +INSERT INTO `data_input_data` VALUES (14,265,'','14'); +INSERT INTO `data_input_data` VALUES (13,265,'','2/20'); +INSERT INTO `data_input_data` VALUES (12,265,'','ifName'); +INSERT INTO `data_input_data` VALUES (14,266,'','14'); +INSERT INTO `data_input_data` VALUES (13,266,'','2/21'); +INSERT INTO `data_input_data` VALUES (12,266,'','ifName'); +INSERT INTO `data_input_data` VALUES (14,267,'','14'); +INSERT INTO `data_input_data` VALUES (13,267,'','2/22'); +INSERT INTO `data_input_data` VALUES (12,267,'','ifName'); +INSERT INTO `data_input_data` VALUES (14,268,'','14'); +INSERT INTO `data_input_data` VALUES (13,268,'','2/23'); +INSERT INTO `data_input_data` VALUES (12,268,'','ifName'); +INSERT INTO `data_input_data` VALUES (14,269,'','14'); +INSERT INTO `data_input_data` VALUES (13,269,'','2/24'); +INSERT INTO `data_input_data` VALUES (12,269,'','ifName'); +INSERT INTO `data_input_data` VALUES (14,270,'','14'); +INSERT INTO `data_input_data` VALUES (13,270,'','2/25'); +INSERT INTO `data_input_data` VALUES (12,270,'','ifName'); +INSERT INTO `data_input_data` VALUES (14,271,'','14'); +INSERT INTO `data_input_data` VALUES (13,271,'','2/26'); +INSERT INTO `data_input_data` VALUES (12,271,'','ifName'); +INSERT INTO `data_input_data` VALUES (14,272,'','14'); +INSERT INTO `data_input_data` VALUES (13,272,'','2/27'); +INSERT INTO `data_input_data` VALUES (12,272,'','ifName'); +INSERT INTO `data_input_data` VALUES (14,273,'','14'); +INSERT INTO `data_input_data` VALUES (13,273,'','2/28'); +INSERT INTO `data_input_data` VALUES (12,273,'','ifName'); +INSERT INTO `data_input_data` VALUES (14,274,'','14'); +INSERT INTO `data_input_data` VALUES (13,274,'','2/29'); +INSERT INTO `data_input_data` VALUES (12,274,'','ifName'); +INSERT INTO `data_input_data` VALUES (14,275,'','14'); +INSERT INTO `data_input_data` VALUES (13,275,'','2/30'); +INSERT INTO `data_input_data` VALUES (12,275,'','ifName'); +INSERT INTO `data_input_data` VALUES (14,276,'','14'); +INSERT INTO `data_input_data` VALUES (13,276,'','2/31'); +INSERT INTO `data_input_data` VALUES (12,276,'','ifName'); +INSERT INTO `data_input_data` VALUES (14,277,'','14'); +INSERT INTO `data_input_data` VALUES (13,277,'','2/32'); +INSERT INTO `data_input_data` VALUES (12,277,'','ifName'); +INSERT INTO `data_input_data` VALUES (14,278,'','14'); +INSERT INTO `data_input_data` VALUES (13,278,'','2/33'); +INSERT INTO `data_input_data` VALUES (12,278,'','ifName'); +INSERT INTO `data_input_data` VALUES (14,279,'','14'); +INSERT INTO `data_input_data` VALUES (13,279,'','2/34'); +INSERT INTO `data_input_data` VALUES (12,279,'','ifName'); +INSERT INTO `data_input_data` VALUES (14,280,'','14'); +INSERT INTO `data_input_data` VALUES (13,280,'','2/35'); +INSERT INTO `data_input_data` VALUES (12,280,'','ifName'); +INSERT INTO `data_input_data` VALUES (14,281,'','14'); +INSERT INTO `data_input_data` VALUES (13,281,'','2/36'); +INSERT INTO `data_input_data` VALUES (12,281,'','ifName'); +INSERT INTO `data_input_data` VALUES (14,282,'','14'); +INSERT INTO `data_input_data` VALUES (13,282,'','2/37'); +INSERT INTO `data_input_data` VALUES (12,282,'','ifName'); +INSERT INTO `data_input_data` VALUES (14,283,'','14'); +INSERT INTO `data_input_data` VALUES (13,283,'','2/38'); +INSERT INTO `data_input_data` VALUES (12,283,'','ifName'); +INSERT INTO `data_input_data` VALUES (14,284,'','14'); +INSERT INTO `data_input_data` VALUES (13,284,'','2/39'); +INSERT INTO `data_input_data` VALUES (12,284,'','ifName'); +INSERT INTO `data_input_data` VALUES (14,285,'','14'); +INSERT INTO `data_input_data` VALUES (13,285,'','2/40'); +INSERT INTO `data_input_data` VALUES (12,285,'','ifName'); +INSERT INTO `data_input_data` VALUES (14,286,'','14'); +INSERT INTO `data_input_data` VALUES (13,286,'','2/41'); +INSERT INTO `data_input_data` VALUES (12,286,'','ifName'); +INSERT INTO `data_input_data` VALUES (14,287,'','14'); +INSERT INTO `data_input_data` VALUES (13,287,'','2/42'); +INSERT INTO `data_input_data` VALUES (12,287,'','ifName'); +INSERT INTO `data_input_data` VALUES (14,288,'','14'); +INSERT INTO `data_input_data` VALUES (13,288,'','2/43'); +INSERT INTO `data_input_data` VALUES (12,288,'','ifName'); +INSERT INTO `data_input_data` VALUES (14,289,'','14'); +INSERT INTO `data_input_data` VALUES (13,289,'','2/44'); +INSERT INTO `data_input_data` VALUES (12,289,'','ifName'); +INSERT INTO `data_input_data` VALUES (14,290,'','14'); +INSERT INTO `data_input_data` VALUES (13,290,'','2/45'); +INSERT INTO `data_input_data` VALUES (12,290,'','ifName'); +INSERT INTO `data_input_data` VALUES (14,291,'','14'); +INSERT INTO `data_input_data` VALUES (13,291,'','2/46'); +INSERT INTO `data_input_data` VALUES (12,291,'','ifName'); +INSERT INTO `data_input_data` VALUES (14,292,'','14'); +INSERT INTO `data_input_data` VALUES (13,292,'','2/47'); +INSERT INTO `data_input_data` VALUES (12,292,'','ifName'); +INSERT INTO `data_input_data` VALUES (14,293,'','14'); +INSERT INTO `data_input_data` VALUES (13,293,'','2/48'); +INSERT INTO `data_input_data` VALUES (12,293,'','ifName'); +INSERT INTO `data_input_data` VALUES (14,294,'','14'); +INSERT INTO `data_input_data` VALUES (13,294,'','2/49'); +INSERT INTO `data_input_data` VALUES (12,294,'','ifName'); +INSERT INTO `data_input_data` VALUES (14,295,'','14'); +INSERT INTO `data_input_data` VALUES (13,295,'','2/50'); +INSERT INTO `data_input_data` VALUES (12,295,'','ifName'); +INSERT INTO `data_input_data` VALUES (14,296,'','14'); +INSERT INTO `data_input_data` VALUES (13,296,'','VLAN-42'); +INSERT INTO `data_input_data` VALUES (12,296,'','ifName'); +INSERT INTO `data_input_data` VALUES (14,297,'','14'); +INSERT INTO `data_input_data` VALUES (13,297,'','VLAN-23'); +INSERT INTO `data_input_data` VALUES (12,297,'','ifName'); +INSERT INTO `data_input_data` VALUES (14,298,'','14'); +INSERT INTO `data_input_data` VALUES (13,298,'','VLAN-22'); +INSERT INTO `data_input_data` VALUES (12,298,'','ifName'); +INSERT INTO `data_input_data` VALUES (14,299,'','14'); +INSERT INTO `data_input_data` VALUES (13,299,'','VLAN-24'); +INSERT INTO `data_input_data` VALUES (12,299,'','ifName'); +INSERT INTO `data_input_data` VALUES (14,300,'','14'); +INSERT INTO `data_input_data` VALUES (13,300,'','VLAN-25'); +INSERT INTO `data_input_data` VALUES (12,300,'','ifName'); +INSERT INTO `data_input_data` VALUES (14,301,'','14'); +INSERT INTO `data_input_data` VALUES (13,301,'','VLAN-16'); +INSERT INTO `data_input_data` VALUES (12,301,'','ifName'); +INSERT INTO `data_input_data` VALUES (14,302,'','14'); +INSERT INTO `data_input_data` VALUES (13,302,'','FEC-2/13-14'); +INSERT INTO `data_input_data` VALUES (12,302,'','ifName'); +INSERT INTO `data_input_data` VALUES (7,238,NULL,'172.16.42.142'); +INSERT INTO `data_input_data` VALUES (8,238,NULL,'public'); +INSERT INTO `data_input_data` VALUES (9,238,NULL,''); +INSERT INTO `data_input_data` VALUES (10,238,NULL,''); +INSERT INTO `data_input_data` VALUES (11,238,NULL,'2'); +INSERT INTO `data_input_data` VALUES (7,239,NULL,'172.16.42.142'); +INSERT INTO `data_input_data` VALUES (8,239,NULL,'public'); +INSERT INTO `data_input_data` VALUES (9,239,NULL,''); +INSERT INTO `data_input_data` VALUES (10,239,NULL,''); +INSERT INTO `data_input_data` VALUES (11,239,NULL,'2'); +INSERT INTO `data_input_data` VALUES (7,240,NULL,'172.16.42.142'); +INSERT INTO `data_input_data` VALUES (8,240,NULL,'public'); +INSERT INTO `data_input_data` VALUES (9,240,NULL,''); +INSERT INTO `data_input_data` VALUES (10,240,NULL,''); +INSERT INTO `data_input_data` VALUES (11,240,NULL,'2'); +INSERT INTO `data_input_data` VALUES (7,241,NULL,'172.16.42.142'); +INSERT INTO `data_input_data` VALUES (8,241,NULL,'public'); +INSERT INTO `data_input_data` VALUES (9,241,NULL,''); +INSERT INTO `data_input_data` VALUES (10,241,NULL,''); +INSERT INTO `data_input_data` VALUES (11,241,NULL,'2'); +INSERT INTO `data_input_data` VALUES (7,242,NULL,'172.16.42.142'); +INSERT INTO `data_input_data` VALUES (8,242,NULL,'public'); +INSERT INTO `data_input_data` VALUES (9,242,NULL,''); +INSERT INTO `data_input_data` VALUES (10,242,NULL,''); +INSERT INTO `data_input_data` VALUES (11,242,NULL,'2'); +INSERT INTO `data_input_data` VALUES (7,243,NULL,'172.16.42.142'); +INSERT INTO `data_input_data` VALUES (8,243,NULL,'public'); +INSERT INTO `data_input_data` VALUES (9,243,NULL,''); +INSERT INTO `data_input_data` VALUES (10,243,NULL,''); +INSERT INTO `data_input_data` VALUES (11,243,NULL,'2'); +INSERT INTO `data_input_data` VALUES (7,244,NULL,'172.16.42.142'); +INSERT INTO `data_input_data` VALUES (8,244,NULL,'public'); +INSERT INTO `data_input_data` VALUES (9,244,NULL,''); +INSERT INTO `data_input_data` VALUES (10,244,NULL,''); +INSERT INTO `data_input_data` VALUES (11,244,NULL,'2'); +INSERT INTO `data_input_data` VALUES (7,245,NULL,'172.16.42.142'); +INSERT INTO `data_input_data` VALUES (8,245,NULL,'public'); +INSERT INTO `data_input_data` VALUES (9,245,NULL,''); +INSERT INTO `data_input_data` VALUES (10,245,NULL,''); +INSERT INTO `data_input_data` VALUES (11,245,NULL,'2'); +INSERT INTO `data_input_data` VALUES (7,246,NULL,'172.16.42.142'); +INSERT INTO `data_input_data` VALUES (8,246,NULL,'public'); +INSERT INTO `data_input_data` VALUES (9,246,NULL,''); +INSERT INTO `data_input_data` VALUES (10,246,NULL,''); +INSERT INTO `data_input_data` VALUES (11,246,NULL,'2'); +INSERT INTO `data_input_data` VALUES (7,247,NULL,'172.16.42.142'); +INSERT INTO `data_input_data` VALUES (8,247,NULL,'public'); +INSERT INTO `data_input_data` VALUES (9,247,NULL,''); +INSERT INTO `data_input_data` VALUES (10,247,NULL,''); +INSERT INTO `data_input_data` VALUES (11,247,NULL,'2'); +INSERT INTO `data_input_data` VALUES (7,248,NULL,'172.16.42.142'); +INSERT INTO `data_input_data` VALUES (8,248,NULL,'public'); +INSERT INTO `data_input_data` VALUES (9,248,NULL,''); +INSERT INTO `data_input_data` VALUES (10,248,NULL,''); +INSERT INTO `data_input_data` VALUES (11,248,NULL,'2'); +INSERT INTO `data_input_data` VALUES (7,249,NULL,'172.16.42.142'); +INSERT INTO `data_input_data` VALUES (8,249,NULL,'public'); +INSERT INTO `data_input_data` VALUES (9,249,NULL,''); +INSERT INTO `data_input_data` VALUES (10,249,NULL,''); +INSERT INTO `data_input_data` VALUES (11,249,NULL,'2'); +INSERT INTO `data_input_data` VALUES (7,250,NULL,'172.16.42.142'); +INSERT INTO `data_input_data` VALUES (8,250,NULL,'public'); +INSERT INTO `data_input_data` VALUES (9,250,NULL,''); +INSERT INTO `data_input_data` VALUES (10,250,NULL,''); +INSERT INTO `data_input_data` VALUES (11,250,NULL,'2'); +INSERT INTO `data_input_data` VALUES (7,251,NULL,'172.16.42.142'); +INSERT INTO `data_input_data` VALUES (8,251,NULL,'public'); +INSERT INTO `data_input_data` VALUES (9,251,NULL,''); +INSERT INTO `data_input_data` VALUES (10,251,NULL,''); +INSERT INTO `data_input_data` VALUES (11,251,NULL,'2'); +INSERT INTO `data_input_data` VALUES (7,252,NULL,'172.16.42.142'); +INSERT INTO `data_input_data` VALUES (8,252,NULL,'public'); +INSERT INTO `data_input_data` VALUES (9,252,NULL,''); +INSERT INTO `data_input_data` VALUES (10,252,NULL,''); +INSERT INTO `data_input_data` VALUES (11,252,NULL,'2'); +INSERT INTO `data_input_data` VALUES (7,253,NULL,'172.16.42.142'); +INSERT INTO `data_input_data` VALUES (8,253,NULL,'public'); +INSERT INTO `data_input_data` VALUES (9,253,NULL,''); +INSERT INTO `data_input_data` VALUES (10,253,NULL,''); +INSERT INTO `data_input_data` VALUES (11,253,NULL,'2'); +INSERT INTO `data_input_data` VALUES (7,254,NULL,'172.16.42.142'); +INSERT INTO `data_input_data` VALUES (8,254,NULL,'public'); +INSERT INTO `data_input_data` VALUES (9,254,NULL,''); +INSERT INTO `data_input_data` VALUES (10,254,NULL,''); +INSERT INTO `data_input_data` VALUES (11,254,NULL,'2'); +INSERT INTO `data_input_data` VALUES (7,255,NULL,'172.16.42.142'); +INSERT INTO `data_input_data` VALUES (8,255,NULL,'public'); +INSERT INTO `data_input_data` VALUES (9,255,NULL,''); +INSERT INTO `data_input_data` VALUES (10,255,NULL,''); +INSERT INTO `data_input_data` VALUES (11,255,NULL,'2'); +INSERT INTO `data_input_data` VALUES (7,256,NULL,'172.16.42.142'); +INSERT INTO `data_input_data` VALUES (8,256,NULL,'public'); +INSERT INTO `data_input_data` VALUES (9,256,NULL,''); +INSERT INTO `data_input_data` VALUES (10,256,NULL,''); +INSERT INTO `data_input_data` VALUES (11,256,NULL,'2'); +INSERT INTO `data_input_data` VALUES (7,257,NULL,'172.16.42.142'); +INSERT INTO `data_input_data` VALUES (8,257,NULL,'public'); +INSERT INTO `data_input_data` VALUES (9,257,NULL,''); +INSERT INTO `data_input_data` VALUES (10,257,NULL,''); +INSERT INTO `data_input_data` VALUES (11,257,NULL,'2'); +INSERT INTO `data_input_data` VALUES (7,258,NULL,'172.16.42.142'); +INSERT INTO `data_input_data` VALUES (8,258,NULL,'public'); +INSERT INTO `data_input_data` VALUES (9,258,NULL,''); +INSERT INTO `data_input_data` VALUES (10,258,NULL,''); +INSERT INTO `data_input_data` VALUES (11,258,NULL,'2'); +INSERT INTO `data_input_data` VALUES (7,259,NULL,'172.16.42.142'); +INSERT INTO `data_input_data` VALUES (8,259,NULL,'public'); +INSERT INTO `data_input_data` VALUES (9,259,NULL,''); +INSERT INTO `data_input_data` VALUES (10,259,NULL,''); +INSERT INTO `data_input_data` VALUES (11,259,NULL,'2'); +INSERT INTO `data_input_data` VALUES (7,260,NULL,'172.16.42.142'); +INSERT INTO `data_input_data` VALUES (8,260,NULL,'public'); +INSERT INTO `data_input_data` VALUES (9,260,NULL,''); +INSERT INTO `data_input_data` VALUES (10,260,NULL,''); +INSERT INTO `data_input_data` VALUES (11,260,NULL,'2'); +INSERT INTO `data_input_data` VALUES (7,261,NULL,'172.16.42.142'); +INSERT INTO `data_input_data` VALUES (8,261,NULL,'public'); +INSERT INTO `data_input_data` VALUES (9,261,NULL,''); +INSERT INTO `data_input_data` VALUES (10,261,NULL,''); +INSERT INTO `data_input_data` VALUES (11,261,NULL,'2'); +INSERT INTO `data_input_data` VALUES (7,262,NULL,'172.16.42.142'); +INSERT INTO `data_input_data` VALUES (8,262,NULL,'public'); +INSERT INTO `data_input_data` VALUES (9,262,NULL,''); +INSERT INTO `data_input_data` VALUES (10,262,NULL,''); +INSERT INTO `data_input_data` VALUES (11,262,NULL,'2'); +INSERT INTO `data_input_data` VALUES (7,263,NULL,'172.16.42.142'); +INSERT INTO `data_input_data` VALUES (8,263,NULL,'public'); +INSERT INTO `data_input_data` VALUES (9,263,NULL,''); +INSERT INTO `data_input_data` VALUES (10,263,NULL,''); +INSERT INTO `data_input_data` VALUES (11,263,NULL,'2'); +INSERT INTO `data_input_data` VALUES (7,264,NULL,'172.16.42.142'); +INSERT INTO `data_input_data` VALUES (8,264,NULL,'public'); +INSERT INTO `data_input_data` VALUES (9,264,NULL,''); +INSERT INTO `data_input_data` VALUES (10,264,NULL,''); +INSERT INTO `data_input_data` VALUES (11,264,NULL,'2'); +INSERT INTO `data_input_data` VALUES (7,265,NULL,'172.16.42.142'); +INSERT INTO `data_input_data` VALUES (8,265,NULL,'public'); +INSERT INTO `data_input_data` VALUES (9,265,NULL,''); +INSERT INTO `data_input_data` VALUES (10,265,NULL,''); +INSERT INTO `data_input_data` VALUES (11,265,NULL,'2'); +INSERT INTO `data_input_data` VALUES (7,266,NULL,'172.16.42.142'); +INSERT INTO `data_input_data` VALUES (8,266,NULL,'public'); +INSERT INTO `data_input_data` VALUES (9,266,NULL,''); +INSERT INTO `data_input_data` VALUES (10,266,NULL,''); +INSERT INTO `data_input_data` VALUES (11,266,NULL,'2'); +INSERT INTO `data_input_data` VALUES (7,267,NULL,'172.16.42.142'); +INSERT INTO `data_input_data` VALUES (8,267,NULL,'public'); +INSERT INTO `data_input_data` VALUES (9,267,NULL,''); +INSERT INTO `data_input_data` VALUES (10,267,NULL,''); +INSERT INTO `data_input_data` VALUES (11,267,NULL,'2'); +INSERT INTO `data_input_data` VALUES (7,268,NULL,'172.16.42.142'); +INSERT INTO `data_input_data` VALUES (8,268,NULL,'public'); +INSERT INTO `data_input_data` VALUES (9,268,NULL,''); +INSERT INTO `data_input_data` VALUES (10,268,NULL,''); +INSERT INTO `data_input_data` VALUES (11,268,NULL,'2'); +INSERT INTO `data_input_data` VALUES (7,269,NULL,'172.16.42.142'); +INSERT INTO `data_input_data` VALUES (8,269,NULL,'public'); +INSERT INTO `data_input_data` VALUES (9,269,NULL,''); +INSERT INTO `data_input_data` VALUES (10,269,NULL,''); +INSERT INTO `data_input_data` VALUES (11,269,NULL,'2'); +INSERT INTO `data_input_data` VALUES (7,270,NULL,'172.16.42.142'); +INSERT INTO `data_input_data` VALUES (8,270,NULL,'public'); +INSERT INTO `data_input_data` VALUES (9,270,NULL,''); +INSERT INTO `data_input_data` VALUES (10,270,NULL,''); +INSERT INTO `data_input_data` VALUES (11,270,NULL,'2'); +INSERT INTO `data_input_data` VALUES (7,271,NULL,'172.16.42.142'); +INSERT INTO `data_input_data` VALUES (8,271,NULL,'public'); +INSERT INTO `data_input_data` VALUES (9,271,NULL,''); +INSERT INTO `data_input_data` VALUES (10,271,NULL,''); +INSERT INTO `data_input_data` VALUES (11,271,NULL,'2'); +INSERT INTO `data_input_data` VALUES (7,272,NULL,'172.16.42.142'); +INSERT INTO `data_input_data` VALUES (8,272,NULL,'public'); +INSERT INTO `data_input_data` VALUES (9,272,NULL,''); +INSERT INTO `data_input_data` VALUES (10,272,NULL,''); +INSERT INTO `data_input_data` VALUES (11,272,NULL,'2'); +INSERT INTO `data_input_data` VALUES (7,273,NULL,'172.16.42.142'); +INSERT INTO `data_input_data` VALUES (8,273,NULL,'public'); +INSERT INTO `data_input_data` VALUES (9,273,NULL,''); +INSERT INTO `data_input_data` VALUES (10,273,NULL,''); +INSERT INTO `data_input_data` VALUES (11,273,NULL,'2'); +INSERT INTO `data_input_data` VALUES (7,274,NULL,'172.16.42.142'); +INSERT INTO `data_input_data` VALUES (8,274,NULL,'public'); +INSERT INTO `data_input_data` VALUES (9,274,NULL,''); +INSERT INTO `data_input_data` VALUES (10,274,NULL,''); +INSERT INTO `data_input_data` VALUES (11,274,NULL,'2'); +INSERT INTO `data_input_data` VALUES (7,275,NULL,'172.16.42.142'); +INSERT INTO `data_input_data` VALUES (8,275,NULL,'public'); +INSERT INTO `data_input_data` VALUES (9,275,NULL,''); +INSERT INTO `data_input_data` VALUES (10,275,NULL,''); +INSERT INTO `data_input_data` VALUES (11,275,NULL,'2'); +INSERT INTO `data_input_data` VALUES (7,276,NULL,'172.16.42.142'); +INSERT INTO `data_input_data` VALUES (8,276,NULL,'public'); +INSERT INTO `data_input_data` VALUES (9,276,NULL,''); +INSERT INTO `data_input_data` VALUES (10,276,NULL,''); +INSERT INTO `data_input_data` VALUES (11,276,NULL,'2'); +INSERT INTO `data_input_data` VALUES (7,277,NULL,'172.16.42.142'); +INSERT INTO `data_input_data` VALUES (8,277,NULL,'public'); +INSERT INTO `data_input_data` VALUES (9,277,NULL,''); +INSERT INTO `data_input_data` VALUES (10,277,NULL,''); +INSERT INTO `data_input_data` VALUES (11,277,NULL,'2'); +INSERT INTO `data_input_data` VALUES (7,278,NULL,'172.16.42.142'); +INSERT INTO `data_input_data` VALUES (8,278,NULL,'public'); +INSERT INTO `data_input_data` VALUES (9,278,NULL,''); +INSERT INTO `data_input_data` VALUES (10,278,NULL,''); +INSERT INTO `data_input_data` VALUES (11,278,NULL,'2'); +INSERT INTO `data_input_data` VALUES (7,279,NULL,'172.16.42.142'); +INSERT INTO `data_input_data` VALUES (8,279,NULL,'public'); +INSERT INTO `data_input_data` VALUES (9,279,NULL,''); +INSERT INTO `data_input_data` VALUES (10,279,NULL,''); +INSERT INTO `data_input_data` VALUES (11,279,NULL,'2'); +INSERT INTO `data_input_data` VALUES (7,280,NULL,'172.16.42.142'); +INSERT INTO `data_input_data` VALUES (8,280,NULL,'public'); +INSERT INTO `data_input_data` VALUES (9,280,NULL,''); +INSERT INTO `data_input_data` VALUES (10,280,NULL,''); +INSERT INTO `data_input_data` VALUES (11,280,NULL,'2'); +INSERT INTO `data_input_data` VALUES (7,281,NULL,'172.16.42.142'); +INSERT INTO `data_input_data` VALUES (8,281,NULL,'public'); +INSERT INTO `data_input_data` VALUES (9,281,NULL,''); +INSERT INTO `data_input_data` VALUES (10,281,NULL,''); +INSERT INTO `data_input_data` VALUES (11,281,NULL,'2'); +INSERT INTO `data_input_data` VALUES (7,282,NULL,'172.16.42.142'); +INSERT INTO `data_input_data` VALUES (8,282,NULL,'public'); +INSERT INTO `data_input_data` VALUES (9,282,NULL,''); +INSERT INTO `data_input_data` VALUES (10,282,NULL,''); +INSERT INTO `data_input_data` VALUES (11,282,NULL,'2'); +INSERT INTO `data_input_data` VALUES (7,283,NULL,'172.16.42.142'); +INSERT INTO `data_input_data` VALUES (8,283,NULL,'public'); +INSERT INTO `data_input_data` VALUES (9,283,NULL,''); +INSERT INTO `data_input_data` VALUES (10,283,NULL,''); +INSERT INTO `data_input_data` VALUES (11,283,NULL,'2'); +INSERT INTO `data_input_data` VALUES (7,284,NULL,'172.16.42.142'); +INSERT INTO `data_input_data` VALUES (8,284,NULL,'public'); +INSERT INTO `data_input_data` VALUES (9,284,NULL,''); +INSERT INTO `data_input_data` VALUES (10,284,NULL,''); +INSERT INTO `data_input_data` VALUES (11,284,NULL,'2'); +INSERT INTO `data_input_data` VALUES (7,285,NULL,'172.16.42.142'); +INSERT INTO `data_input_data` VALUES (8,285,NULL,'public'); +INSERT INTO `data_input_data` VALUES (9,285,NULL,''); +INSERT INTO `data_input_data` VALUES (10,285,NULL,''); +INSERT INTO `data_input_data` VALUES (11,285,NULL,'2'); +INSERT INTO `data_input_data` VALUES (7,286,NULL,'172.16.42.142'); +INSERT INTO `data_input_data` VALUES (8,286,NULL,'public'); +INSERT INTO `data_input_data` VALUES (9,286,NULL,''); +INSERT INTO `data_input_data` VALUES (10,286,NULL,''); +INSERT INTO `data_input_data` VALUES (11,286,NULL,'2'); +INSERT INTO `data_input_data` VALUES (7,287,NULL,'172.16.42.142'); +INSERT INTO `data_input_data` VALUES (8,287,NULL,'public'); +INSERT INTO `data_input_data` VALUES (9,287,NULL,''); +INSERT INTO `data_input_data` VALUES (10,287,NULL,''); +INSERT INTO `data_input_data` VALUES (11,287,NULL,'2'); +INSERT INTO `data_input_data` VALUES (7,288,NULL,'172.16.42.142'); +INSERT INTO `data_input_data` VALUES (8,288,NULL,'public'); +INSERT INTO `data_input_data` VALUES (9,288,NULL,''); +INSERT INTO `data_input_data` VALUES (10,288,NULL,''); +INSERT INTO `data_input_data` VALUES (11,288,NULL,'2'); +INSERT INTO `data_input_data` VALUES (7,289,NULL,'172.16.42.142'); +INSERT INTO `data_input_data` VALUES (8,289,NULL,'public'); +INSERT INTO `data_input_data` VALUES (9,289,NULL,''); +INSERT INTO `data_input_data` VALUES (10,289,NULL,''); +INSERT INTO `data_input_data` VALUES (11,289,NULL,'2'); +INSERT INTO `data_input_data` VALUES (7,290,NULL,'172.16.42.142'); +INSERT INTO `data_input_data` VALUES (8,290,NULL,'public'); +INSERT INTO `data_input_data` VALUES (9,290,NULL,''); +INSERT INTO `data_input_data` VALUES (10,290,NULL,''); +INSERT INTO `data_input_data` VALUES (11,290,NULL,'2'); +INSERT INTO `data_input_data` VALUES (7,291,NULL,'172.16.42.142'); +INSERT INTO `data_input_data` VALUES (8,291,NULL,'public'); +INSERT INTO `data_input_data` VALUES (9,291,NULL,''); +INSERT INTO `data_input_data` VALUES (10,291,NULL,''); +INSERT INTO `data_input_data` VALUES (11,291,NULL,'2'); +INSERT INTO `data_input_data` VALUES (7,292,NULL,'172.16.42.142'); +INSERT INTO `data_input_data` VALUES (8,292,NULL,'public'); +INSERT INTO `data_input_data` VALUES (9,292,NULL,''); +INSERT INTO `data_input_data` VALUES (10,292,NULL,''); +INSERT INTO `data_input_data` VALUES (11,292,NULL,'2'); +INSERT INTO `data_input_data` VALUES (7,293,NULL,'172.16.42.142'); +INSERT INTO `data_input_data` VALUES (8,293,NULL,'public'); +INSERT INTO `data_input_data` VALUES (9,293,NULL,''); +INSERT INTO `data_input_data` VALUES (10,293,NULL,''); +INSERT INTO `data_input_data` VALUES (11,293,NULL,'2'); +INSERT INTO `data_input_data` VALUES (7,294,NULL,'172.16.42.142'); +INSERT INTO `data_input_data` VALUES (8,294,NULL,'public'); +INSERT INTO `data_input_data` VALUES (9,294,NULL,''); +INSERT INTO `data_input_data` VALUES (10,294,NULL,''); +INSERT INTO `data_input_data` VALUES (11,294,NULL,'2'); +INSERT INTO `data_input_data` VALUES (7,295,NULL,'172.16.42.142'); +INSERT INTO `data_input_data` VALUES (8,295,NULL,'public'); +INSERT INTO `data_input_data` VALUES (9,295,NULL,''); +INSERT INTO `data_input_data` VALUES (10,295,NULL,''); +INSERT INTO `data_input_data` VALUES (11,295,NULL,'2'); +INSERT INTO `data_input_data` VALUES (7,296,NULL,'172.16.42.142'); +INSERT INTO `data_input_data` VALUES (8,296,NULL,'public'); +INSERT INTO `data_input_data` VALUES (9,296,NULL,''); +INSERT INTO `data_input_data` VALUES (10,296,NULL,''); +INSERT INTO `data_input_data` VALUES (11,296,NULL,'2'); +INSERT INTO `data_input_data` VALUES (7,297,NULL,'172.16.42.142'); +INSERT INTO `data_input_data` VALUES (8,297,NULL,'public'); +INSERT INTO `data_input_data` VALUES (9,297,NULL,''); +INSERT INTO `data_input_data` VALUES (10,297,NULL,''); +INSERT INTO `data_input_data` VALUES (11,297,NULL,'2'); +INSERT INTO `data_input_data` VALUES (7,298,NULL,'172.16.42.142'); +INSERT INTO `data_input_data` VALUES (8,298,NULL,'public'); +INSERT INTO `data_input_data` VALUES (9,298,NULL,''); +INSERT INTO `data_input_data` VALUES (10,298,NULL,''); +INSERT INTO `data_input_data` VALUES (11,298,NULL,'2'); +INSERT INTO `data_input_data` VALUES (7,299,NULL,'172.16.42.142'); +INSERT INTO `data_input_data` VALUES (8,299,NULL,'public'); +INSERT INTO `data_input_data` VALUES (9,299,NULL,''); +INSERT INTO `data_input_data` VALUES (10,299,NULL,''); +INSERT INTO `data_input_data` VALUES (11,299,NULL,'2'); +INSERT INTO `data_input_data` VALUES (7,300,NULL,'172.16.42.142'); +INSERT INTO `data_input_data` VALUES (8,300,NULL,'public'); +INSERT INTO `data_input_data` VALUES (9,300,NULL,''); +INSERT INTO `data_input_data` VALUES (10,300,NULL,''); +INSERT INTO `data_input_data` VALUES (11,300,NULL,'2'); +INSERT INTO `data_input_data` VALUES (7,301,NULL,'172.16.42.142'); +INSERT INTO `data_input_data` VALUES (8,301,NULL,'public'); +INSERT INTO `data_input_data` VALUES (9,301,NULL,''); +INSERT INTO `data_input_data` VALUES (10,301,NULL,''); +INSERT INTO `data_input_data` VALUES (11,301,NULL,'2'); +INSERT INTO `data_input_data` VALUES (7,302,NULL,'172.16.42.142'); +INSERT INTO `data_input_data` VALUES (8,302,NULL,'public'); +INSERT INTO `data_input_data` VALUES (9,302,NULL,''); +INSERT INTO `data_input_data` VALUES (10,302,NULL,''); +INSERT INTO `data_input_data` VALUES (11,302,NULL,'2'); +INSERT INTO `data_input_data` VALUES (9,319,NULL,''); +INSERT INTO `data_input_data` VALUES (10,319,NULL,''); +INSERT INTO `data_input_data` VALUES (11,319,NULL,'2'); +INSERT INTO `data_input_data` VALUES (7,317,NULL,'172.16.42.1'); +INSERT INTO `data_input_data` VALUES (8,317,NULL,'public'); +INSERT INTO `data_input_data` VALUES (9,317,NULL,''); +INSERT INTO `data_input_data` VALUES (10,317,NULL,''); +INSERT INTO `data_input_data` VALUES (11,317,NULL,'2'); +INSERT INTO `data_input_data` VALUES (7,316,NULL,'172.16.42.1'); +INSERT INTO `data_input_data` VALUES (8,316,NULL,'public'); +INSERT INTO `data_input_data` VALUES (9,316,NULL,''); +INSERT INTO `data_input_data` VALUES (10,316,NULL,''); +INSERT INTO `data_input_data` VALUES (11,316,NULL,'2'); +INSERT INTO `data_input_data` VALUES (7,312,NULL,'172.16.42.1'); +INSERT INTO `data_input_data` VALUES (8,312,NULL,'public'); +INSERT INTO `data_input_data` VALUES (9,312,NULL,''); +INSERT INTO `data_input_data` VALUES (10,312,NULL,''); +INSERT INTO `data_input_data` VALUES (11,312,NULL,'2'); +INSERT INTO `data_input_data` VALUES (7,313,NULL,'172.16.42.1'); +INSERT INTO `data_input_data` VALUES (8,313,NULL,'public'); +INSERT INTO `data_input_data` VALUES (9,313,NULL,''); +INSERT INTO `data_input_data` VALUES (10,313,NULL,''); +INSERT INTO `data_input_data` VALUES (11,313,NULL,'2'); +INSERT INTO `data_input_data` VALUES (7,314,NULL,'172.16.42.1'); +INSERT INTO `data_input_data` VALUES (8,314,NULL,'public'); +INSERT INTO `data_input_data` VALUES (9,314,NULL,''); +INSERT INTO `data_input_data` VALUES (10,314,NULL,''); +INSERT INTO `data_input_data` VALUES (11,314,NULL,'2'); +INSERT INTO `data_input_data` VALUES (7,315,NULL,'172.16.42.1'); +INSERT INTO `data_input_data` VALUES (8,315,NULL,'public'); +INSERT INTO `data_input_data` VALUES (9,315,NULL,''); +INSERT INTO `data_input_data` VALUES (10,315,NULL,''); +INSERT INTO `data_input_data` VALUES (11,315,NULL,'2'); +INSERT INTO `data_input_data` VALUES (14,320,'','13'); +INSERT INTO `data_input_data` VALUES (13,320,'','VLAN1'); +INSERT INTO `data_input_data` VALUES (12,320,'','ifDescr'); +INSERT INTO `data_input_data` VALUES (14,321,'','13'); +INSERT INTO `data_input_data` VALUES (13,321,'','FastEthernet0/1'); +INSERT INTO `data_input_data` VALUES (12,321,'','ifDescr'); +INSERT INTO `data_input_data` VALUES (14,322,'','13'); +INSERT INTO `data_input_data` VALUES (13,322,'','FastEthernet0/2'); +INSERT INTO `data_input_data` VALUES (12,322,'','ifDescr'); +INSERT INTO `data_input_data` VALUES (14,323,'','13'); +INSERT INTO `data_input_data` VALUES (13,323,'','FastEthernet0/3'); +INSERT INTO `data_input_data` VALUES (12,323,'','ifDescr'); +INSERT INTO `data_input_data` VALUES (14,324,'','13'); +INSERT INTO `data_input_data` VALUES (13,324,'','FastEthernet0/4'); +INSERT INTO `data_input_data` VALUES (12,324,'','ifDescr'); +INSERT INTO `data_input_data` VALUES (14,325,'','13'); +INSERT INTO `data_input_data` VALUES (13,325,'','FastEthernet0/5'); +INSERT INTO `data_input_data` VALUES (12,325,'','ifDescr'); +INSERT INTO `data_input_data` VALUES (14,326,'','13'); +INSERT INTO `data_input_data` VALUES (13,326,'','FastEthernet0/6'); +INSERT INTO `data_input_data` VALUES (12,326,'','ifDescr'); +INSERT INTO `data_input_data` VALUES (14,327,'','13'); +INSERT INTO `data_input_data` VALUES (13,327,'','FastEthernet0/7'); +INSERT INTO `data_input_data` VALUES (12,327,'','ifDescr'); +INSERT INTO `data_input_data` VALUES (14,328,'','13'); +INSERT INTO `data_input_data` VALUES (13,328,'','FastEthernet0/8'); +INSERT INTO `data_input_data` VALUES (12,328,'','ifDescr'); +INSERT INTO `data_input_data` VALUES (14,329,'','13'); +INSERT INTO `data_input_data` VALUES (13,329,'','FastEthernet0/9'); +INSERT INTO `data_input_data` VALUES (12,329,'','ifDescr'); +INSERT INTO `data_input_data` VALUES (14,330,'','13'); +INSERT INTO `data_input_data` VALUES (13,330,'','FastEthernet0/10'); +INSERT INTO `data_input_data` VALUES (12,330,'','ifDescr'); +INSERT INTO `data_input_data` VALUES (14,331,'','13'); +INSERT INTO `data_input_data` VALUES (13,331,'','FastEthernet0/11'); +INSERT INTO `data_input_data` VALUES (12,331,'','ifDescr'); +INSERT INTO `data_input_data` VALUES (14,332,'','13'); +INSERT INTO `data_input_data` VALUES (13,332,'','FastEthernet0/12'); +INSERT INTO `data_input_data` VALUES (12,332,'','ifDescr'); +INSERT INTO `data_input_data` VALUES (14,333,'','13'); +INSERT INTO `data_input_data` VALUES (13,333,'','FastEthernet0/13'); +INSERT INTO `data_input_data` VALUES (12,333,'','ifDescr'); +INSERT INTO `data_input_data` VALUES (14,334,'','13'); +INSERT INTO `data_input_data` VALUES (13,334,'','FastEthernet0/14'); +INSERT INTO `data_input_data` VALUES (12,334,'','ifDescr'); +INSERT INTO `data_input_data` VALUES (14,335,'','13'); +INSERT INTO `data_input_data` VALUES (13,335,'','FastEthernet0/15'); +INSERT INTO `data_input_data` VALUES (12,335,'','ifDescr'); +INSERT INTO `data_input_data` VALUES (14,336,'','13'); +INSERT INTO `data_input_data` VALUES (13,336,'','FastEthernet0/16'); +INSERT INTO `data_input_data` VALUES (12,336,'','ifDescr'); +INSERT INTO `data_input_data` VALUES (14,337,'','13'); +INSERT INTO `data_input_data` VALUES (13,337,'','FastEthernet0/17'); +INSERT INTO `data_input_data` VALUES (12,337,'','ifDescr'); +INSERT INTO `data_input_data` VALUES (14,338,'','13'); +INSERT INTO `data_input_data` VALUES (13,338,'','FastEthernet0/18'); +INSERT INTO `data_input_data` VALUES (12,338,'','ifDescr'); +INSERT INTO `data_input_data` VALUES (14,339,'','13'); +INSERT INTO `data_input_data` VALUES (13,339,'','FastEthernet0/19'); +INSERT INTO `data_input_data` VALUES (12,339,'','ifDescr'); +INSERT INTO `data_input_data` VALUES (14,340,'','13'); +INSERT INTO `data_input_data` VALUES (13,340,'','FastEthernet0/20'); +INSERT INTO `data_input_data` VALUES (12,340,'','ifDescr'); +INSERT INTO `data_input_data` VALUES (14,341,'','13'); +INSERT INTO `data_input_data` VALUES (13,341,'','FastEthernet0/21'); +INSERT INTO `data_input_data` VALUES (12,341,'','ifDescr'); +INSERT INTO `data_input_data` VALUES (14,342,'','13'); +INSERT INTO `data_input_data` VALUES (13,342,'','FastEthernet0/22'); +INSERT INTO `data_input_data` VALUES (12,342,'','ifDescr'); +INSERT INTO `data_input_data` VALUES (14,343,'','13'); +INSERT INTO `data_input_data` VALUES (13,343,'','FastEthernet0/23'); +INSERT INTO `data_input_data` VALUES (12,343,'','ifDescr'); +INSERT INTO `data_input_data` VALUES (14,344,'','13'); +INSERT INTO `data_input_data` VALUES (13,344,'','FastEthernet0/24'); +INSERT INTO `data_input_data` VALUES (12,344,'','ifDescr'); +INSERT INTO `data_input_data` VALUES (7,320,NULL,'172.16.42.105'); +INSERT INTO `data_input_data` VALUES (8,320,NULL,'public'); +INSERT INTO `data_input_data` VALUES (9,320,NULL,''); +INSERT INTO `data_input_data` VALUES (10,320,NULL,''); +INSERT INTO `data_input_data` VALUES (11,320,NULL,'2'); +INSERT INTO `data_input_data` VALUES (7,321,NULL,'172.16.42.105'); +INSERT INTO `data_input_data` VALUES (8,321,NULL,'public'); +INSERT INTO `data_input_data` VALUES (9,321,NULL,''); +INSERT INTO `data_input_data` VALUES (10,321,NULL,''); +INSERT INTO `data_input_data` VALUES (11,321,NULL,'2'); +INSERT INTO `data_input_data` VALUES (7,322,NULL,'172.16.42.105'); +INSERT INTO `data_input_data` VALUES (8,322,NULL,'public'); +INSERT INTO `data_input_data` VALUES (9,322,NULL,''); +INSERT INTO `data_input_data` VALUES (10,322,NULL,''); +INSERT INTO `data_input_data` VALUES (11,322,NULL,'2'); +INSERT INTO `data_input_data` VALUES (7,323,NULL,'172.16.42.105'); +INSERT INTO `data_input_data` VALUES (8,323,NULL,'public'); +INSERT INTO `data_input_data` VALUES (9,323,NULL,''); +INSERT INTO `data_input_data` VALUES (10,323,NULL,''); +INSERT INTO `data_input_data` VALUES (11,323,NULL,'2'); +INSERT INTO `data_input_data` VALUES (7,324,NULL,'172.16.42.105'); +INSERT INTO `data_input_data` VALUES (8,324,NULL,'public'); +INSERT INTO `data_input_data` VALUES (9,324,NULL,''); +INSERT INTO `data_input_data` VALUES (10,324,NULL,''); +INSERT INTO `data_input_data` VALUES (11,324,NULL,'2'); +INSERT INTO `data_input_data` VALUES (7,325,NULL,'172.16.42.105'); +INSERT INTO `data_input_data` VALUES (8,325,NULL,'public'); +INSERT INTO `data_input_data` VALUES (9,325,NULL,''); +INSERT INTO `data_input_data` VALUES (10,325,NULL,''); +INSERT INTO `data_input_data` VALUES (11,325,NULL,'2'); +INSERT INTO `data_input_data` VALUES (7,326,NULL,'172.16.42.105'); +INSERT INTO `data_input_data` VALUES (8,326,NULL,'public'); +INSERT INTO `data_input_data` VALUES (9,326,NULL,''); +INSERT INTO `data_input_data` VALUES (10,326,NULL,''); +INSERT INTO `data_input_data` VALUES (11,326,NULL,'2'); +INSERT INTO `data_input_data` VALUES (7,327,NULL,'172.16.42.105'); +INSERT INTO `data_input_data` VALUES (8,327,NULL,'public'); +INSERT INTO `data_input_data` VALUES (9,327,NULL,''); +INSERT INTO `data_input_data` VALUES (10,327,NULL,''); +INSERT INTO `data_input_data` VALUES (11,327,NULL,'2'); +INSERT INTO `data_input_data` VALUES (7,328,NULL,'172.16.42.105'); +INSERT INTO `data_input_data` VALUES (8,328,NULL,'public'); +INSERT INTO `data_input_data` VALUES (9,328,NULL,''); +INSERT INTO `data_input_data` VALUES (10,328,NULL,''); +INSERT INTO `data_input_data` VALUES (11,328,NULL,'2'); +INSERT INTO `data_input_data` VALUES (7,329,NULL,'172.16.42.105'); +INSERT INTO `data_input_data` VALUES (8,329,NULL,'public'); +INSERT INTO `data_input_data` VALUES (9,329,NULL,''); +INSERT INTO `data_input_data` VALUES (10,329,NULL,''); +INSERT INTO `data_input_data` VALUES (11,329,NULL,'2'); +INSERT INTO `data_input_data` VALUES (7,330,NULL,'172.16.42.105'); +INSERT INTO `data_input_data` VALUES (8,330,NULL,'public'); +INSERT INTO `data_input_data` VALUES (9,330,NULL,''); +INSERT INTO `data_input_data` VALUES (10,330,NULL,''); +INSERT INTO `data_input_data` VALUES (11,330,NULL,'2'); +INSERT INTO `data_input_data` VALUES (7,331,NULL,'172.16.42.105'); +INSERT INTO `data_input_data` VALUES (8,331,NULL,'public'); +INSERT INTO `data_input_data` VALUES (9,331,NULL,''); +INSERT INTO `data_input_data` VALUES (10,331,NULL,''); +INSERT INTO `data_input_data` VALUES (11,331,NULL,'2'); +INSERT INTO `data_input_data` VALUES (7,332,NULL,'172.16.42.105'); +INSERT INTO `data_input_data` VALUES (8,332,NULL,'public'); +INSERT INTO `data_input_data` VALUES (9,332,NULL,''); +INSERT INTO `data_input_data` VALUES (10,332,NULL,''); +INSERT INTO `data_input_data` VALUES (11,332,NULL,'2'); +INSERT INTO `data_input_data` VALUES (7,333,NULL,'172.16.42.105'); +INSERT INTO `data_input_data` VALUES (8,333,NULL,'public'); +INSERT INTO `data_input_data` VALUES (9,333,NULL,''); +INSERT INTO `data_input_data` VALUES (10,333,NULL,''); +INSERT INTO `data_input_data` VALUES (11,333,NULL,'2'); +INSERT INTO `data_input_data` VALUES (7,334,NULL,'172.16.42.105'); +INSERT INTO `data_input_data` VALUES (8,334,NULL,'public'); +INSERT INTO `data_input_data` VALUES (9,334,NULL,''); +INSERT INTO `data_input_data` VALUES (10,334,NULL,''); +INSERT INTO `data_input_data` VALUES (11,334,NULL,'2'); +INSERT INTO `data_input_data` VALUES (7,335,NULL,'172.16.42.105'); +INSERT INTO `data_input_data` VALUES (8,335,NULL,'public'); +INSERT INTO `data_input_data` VALUES (9,335,NULL,''); +INSERT INTO `data_input_data` VALUES (10,335,NULL,''); +INSERT INTO `data_input_data` VALUES (11,335,NULL,'2'); +INSERT INTO `data_input_data` VALUES (7,336,NULL,'172.16.42.105'); +INSERT INTO `data_input_data` VALUES (8,336,NULL,'public'); +INSERT INTO `data_input_data` VALUES (9,336,NULL,''); +INSERT INTO `data_input_data` VALUES (10,336,NULL,''); +INSERT INTO `data_input_data` VALUES (11,336,NULL,'2'); +INSERT INTO `data_input_data` VALUES (7,337,NULL,'172.16.42.105'); +INSERT INTO `data_input_data` VALUES (8,337,NULL,'public'); +INSERT INTO `data_input_data` VALUES (9,337,NULL,''); +INSERT INTO `data_input_data` VALUES (10,337,NULL,''); +INSERT INTO `data_input_data` VALUES (11,337,NULL,'2'); +INSERT INTO `data_input_data` VALUES (7,338,NULL,'172.16.42.105'); +INSERT INTO `data_input_data` VALUES (8,338,NULL,'public'); +INSERT INTO `data_input_data` VALUES (9,338,NULL,''); +INSERT INTO `data_input_data` VALUES (10,338,NULL,''); +INSERT INTO `data_input_data` VALUES (11,338,NULL,'2'); +INSERT INTO `data_input_data` VALUES (7,339,NULL,'172.16.42.105'); +INSERT INTO `data_input_data` VALUES (8,339,NULL,'public'); +INSERT INTO `data_input_data` VALUES (9,339,NULL,''); +INSERT INTO `data_input_data` VALUES (10,339,NULL,''); +INSERT INTO `data_input_data` VALUES (11,339,NULL,'2'); +INSERT INTO `data_input_data` VALUES (7,340,NULL,'172.16.42.105'); +INSERT INTO `data_input_data` VALUES (8,340,NULL,'public'); +INSERT INTO `data_input_data` VALUES (9,340,NULL,''); +INSERT INTO `data_input_data` VALUES (10,340,NULL,''); +INSERT INTO `data_input_data` VALUES (11,340,NULL,'2'); +INSERT INTO `data_input_data` VALUES (7,341,NULL,'172.16.42.105'); +INSERT INTO `data_input_data` VALUES (8,341,NULL,'public'); +INSERT INTO `data_input_data` VALUES (9,341,NULL,''); +INSERT INTO `data_input_data` VALUES (10,341,NULL,''); +INSERT INTO `data_input_data` VALUES (11,341,NULL,'2'); +INSERT INTO `data_input_data` VALUES (7,342,NULL,'172.16.42.105'); +INSERT INTO `data_input_data` VALUES (8,342,NULL,'public'); +INSERT INTO `data_input_data` VALUES (9,342,NULL,''); +INSERT INTO `data_input_data` VALUES (10,342,NULL,''); +INSERT INTO `data_input_data` VALUES (11,342,NULL,'2'); +INSERT INTO `data_input_data` VALUES (7,343,NULL,'172.16.42.105'); +INSERT INTO `data_input_data` VALUES (8,343,NULL,'public'); +INSERT INTO `data_input_data` VALUES (9,343,NULL,''); +INSERT INTO `data_input_data` VALUES (10,343,NULL,''); +INSERT INTO `data_input_data` VALUES (11,343,NULL,'2'); +INSERT INTO `data_input_data` VALUES (7,344,NULL,'172.16.42.105'); +INSERT INTO `data_input_data` VALUES (8,344,NULL,'public'); +INSERT INTO `data_input_data` VALUES (9,344,NULL,''); +INSERT INTO `data_input_data` VALUES (10,344,NULL,''); +INSERT INTO `data_input_data` VALUES (11,344,NULL,'2'); +INSERT INTO `data_input_data` VALUES (1,345,NULL,'172.16.42.1'); +INSERT INTO `data_input_data` VALUES (5,345,NULL,'2'); +INSERT INTO `data_input_data` VALUES (4,345,NULL,''); +INSERT INTO `data_input_data` VALUES (3,345,NULL,''); +INSERT INTO `data_input_data` VALUES (2,345,NULL,'public'); +INSERT INTO `data_input_data` VALUES (6,345,'','.1.3.6.1.4.1.2021.11.51.0'); +INSERT INTO `data_input_data` VALUES (1,346,NULL,'172.16.42.1'); +INSERT INTO `data_input_data` VALUES (2,346,NULL,'public'); +INSERT INTO `data_input_data` VALUES (3,346,NULL,''); +INSERT INTO `data_input_data` VALUES (4,346,NULL,''); +INSERT INTO `data_input_data` VALUES (5,346,NULL,'2'); +INSERT INTO `data_input_data` VALUES (6,346,'','.1.3.6.1.4.1.2021.11.52.0'); +INSERT INTO `data_input_data` VALUES (1,347,NULL,'172.16.42.1'); +INSERT INTO `data_input_data` VALUES (2,347,NULL,'public'); +INSERT INTO `data_input_data` VALUES (3,347,NULL,''); +INSERT INTO `data_input_data` VALUES (4,347,NULL,''); +INSERT INTO `data_input_data` VALUES (5,347,NULL,'2'); +INSERT INTO `data_input_data` VALUES (6,347,'','.1.3.6.1.4.1.2021.11.50.0'); +INSERT INTO `data_input_data` VALUES (1,348,NULL,'172.16.42.1'); +INSERT INTO `data_input_data` VALUES (2,348,NULL,'public'); +INSERT INTO `data_input_data` VALUES (3,348,NULL,''); +INSERT INTO `data_input_data` VALUES (4,348,NULL,''); +INSERT INTO `data_input_data` VALUES (5,348,NULL,'2'); +INSERT INTO `data_input_data` VALUES (6,348,'','.1.3.6.1.4.1.2021.10.1.3.1'); +INSERT INTO `data_input_data` VALUES (1,349,NULL,'172.16.42.1'); +INSERT INTO `data_input_data` VALUES (2,349,NULL,'public'); +INSERT INTO `data_input_data` VALUES (3,349,NULL,''); +INSERT INTO `data_input_data` VALUES (4,349,NULL,''); +INSERT INTO `data_input_data` VALUES (5,349,NULL,'2'); +INSERT INTO `data_input_data` VALUES (6,349,'','.1.3.6.1.4.1.2021.10.1.3.3'); +INSERT INTO `data_input_data` VALUES (1,350,NULL,'172.16.42.1'); +INSERT INTO `data_input_data` VALUES (2,350,NULL,'public'); +INSERT INTO `data_input_data` VALUES (3,350,NULL,''); +INSERT INTO `data_input_data` VALUES (4,350,NULL,''); +INSERT INTO `data_input_data` VALUES (5,350,NULL,'2'); +INSERT INTO `data_input_data` VALUES (6,350,'','.1.3.6.1.4.1.2021.10.1.3.2'); +INSERT INTO `data_input_data` VALUES (1,351,NULL,'172.16.42.1'); +INSERT INTO `data_input_data` VALUES (2,351,NULL,'public'); +INSERT INTO `data_input_data` VALUES (3,351,NULL,''); +INSERT INTO `data_input_data` VALUES (4,351,NULL,''); +INSERT INTO `data_input_data` VALUES (5,351,NULL,'2'); +INSERT INTO `data_input_data` VALUES (6,351,'','.1.3.6.1.4.1.2021.4.14.0'); +INSERT INTO `data_input_data` VALUES (1,352,NULL,'172.16.42.1'); +INSERT INTO `data_input_data` VALUES (2,352,NULL,'public'); +INSERT INTO `data_input_data` VALUES (3,352,NULL,''); +INSERT INTO `data_input_data` VALUES (4,352,NULL,''); +INSERT INTO `data_input_data` VALUES (5,352,NULL,'2'); +INSERT INTO `data_input_data` VALUES (6,352,'','.1.3.6.1.4.1.2021.4.15.0'); +INSERT INTO `data_input_data` VALUES (1,353,NULL,'172.16.42.1'); +INSERT INTO `data_input_data` VALUES (2,353,NULL,'public'); +INSERT INTO `data_input_data` VALUES (3,353,NULL,''); +INSERT INTO `data_input_data` VALUES (4,353,NULL,''); +INSERT INTO `data_input_data` VALUES (5,353,NULL,'2'); +INSERT INTO `data_input_data` VALUES (6,353,'','.1.3.6.1.4.1.2021.4.6.0'); +INSERT INTO `data_input_data` VALUES (14,354,'','4'); +INSERT INTO `data_input_data` VALUES (13,354,'','lo'); +INSERT INTO `data_input_data` VALUES (12,354,'','ifDescr'); +INSERT INTO `data_input_data` VALUES (14,355,'','4'); +INSERT INTO `data_input_data` VALUES (13,355,'','dummy0'); +INSERT INTO `data_input_data` VALUES (12,355,'','ifDescr'); +INSERT INTO `data_input_data` VALUES (14,356,'','4'); +INSERT INTO `data_input_data` VALUES (13,356,'','eth0'); +INSERT INTO `data_input_data` VALUES (12,356,'','ifDescr'); +INSERT INTO `data_input_data` VALUES (14,357,'','4'); +INSERT INTO `data_input_data` VALUES (13,357,'','eth1'); +INSERT INTO `data_input_data` VALUES (12,357,'','ifDescr'); +INSERT INTO `data_input_data` VALUES (14,358,'','4'); +INSERT INTO `data_input_data` VALUES (13,358,'','bond0'); +INSERT INTO `data_input_data` VALUES (12,358,'','ifDescr'); +INSERT INTO `data_input_data` VALUES (14,359,'','4'); +INSERT INTO `data_input_data` VALUES (13,359,'','vlan24'); +INSERT INTO `data_input_data` VALUES (12,359,'','ifDescr'); +INSERT INTO `data_input_data` VALUES (14,360,'','4'); +INSERT INTO `data_input_data` VALUES (13,360,'','vlan22'); +INSERT INTO `data_input_data` VALUES (12,360,'','ifDescr'); +INSERT INTO `data_input_data` VALUES (14,361,'','4'); +INSERT INTO `data_input_data` VALUES (13,361,'','vlan42'); +INSERT INTO `data_input_data` VALUES (12,361,'','ifDescr'); +INSERT INTO `data_input_data` VALUES (14,362,'','4'); +INSERT INTO `data_input_data` VALUES (13,362,'','vlan25'); +INSERT INTO `data_input_data` VALUES (12,362,'','ifDescr'); +INSERT INTO `data_input_data` VALUES (14,363,'','4'); +INSERT INTO `data_input_data` VALUES (13,363,'','sit0'); +INSERT INTO `data_input_data` VALUES (12,363,'','ifDescr'); +INSERT INTO `data_input_data` VALUES (14,364,'','4'); +INSERT INTO `data_input_data` VALUES (13,364,'','ppp0'); +INSERT INTO `data_input_data` VALUES (12,364,'','ifDescr'); +INSERT INTO `data_input_data` VALUES (14,365,'','4'); +INSERT INTO `data_input_data` VALUES (13,365,'','vlan23'); +INSERT INTO `data_input_data` VALUES (12,365,'','ifDescr'); +INSERT INTO `data_input_data` VALUES (14,366,'','4'); +INSERT INTO `data_input_data` VALUES (13,366,'','chaos_vpn'); +INSERT INTO `data_input_data` VALUES (12,366,'','ifDescr'); +INSERT INTO `data_input_data` VALUES (14,367,'','4'); +INSERT INTO `data_input_data` VALUES (13,367,'',''); +INSERT INTO `data_input_data` VALUES (12,367,'','ifDescr'); +INSERT INTO `data_input_data` VALUES (7,354,NULL,'172.16.42.1'); +INSERT INTO `data_input_data` VALUES (8,354,NULL,'public'); +INSERT INTO `data_input_data` VALUES (9,354,NULL,''); +INSERT INTO `data_input_data` VALUES (10,354,NULL,''); +INSERT INTO `data_input_data` VALUES (11,354,NULL,'2'); +INSERT INTO `data_input_data` VALUES (7,355,NULL,'172.16.42.1'); +INSERT INTO `data_input_data` VALUES (8,355,NULL,'public'); +INSERT INTO `data_input_data` VALUES (9,355,NULL,''); +INSERT INTO `data_input_data` VALUES (10,355,NULL,''); +INSERT INTO `data_input_data` VALUES (11,355,NULL,'2'); +INSERT INTO `data_input_data` VALUES (7,356,NULL,'172.16.42.1'); +INSERT INTO `data_input_data` VALUES (8,356,NULL,'public'); +INSERT INTO `data_input_data` VALUES (9,356,NULL,''); +INSERT INTO `data_input_data` VALUES (10,356,NULL,''); +INSERT INTO `data_input_data` VALUES (11,356,NULL,'2'); +INSERT INTO `data_input_data` VALUES (7,357,NULL,'172.16.42.1'); +INSERT INTO `data_input_data` VALUES (8,357,NULL,'public'); +INSERT INTO `data_input_data` VALUES (9,357,NULL,''); +INSERT INTO `data_input_data` VALUES (10,357,NULL,''); +INSERT INTO `data_input_data` VALUES (11,357,NULL,'2'); +INSERT INTO `data_input_data` VALUES (7,358,NULL,'172.16.42.1'); +INSERT INTO `data_input_data` VALUES (8,358,NULL,'public'); +INSERT INTO `data_input_data` VALUES (9,358,NULL,''); +INSERT INTO `data_input_data` VALUES (10,358,NULL,''); +INSERT INTO `data_input_data` VALUES (11,358,NULL,'2'); +INSERT INTO `data_input_data` VALUES (7,359,NULL,'172.16.42.1'); +INSERT INTO `data_input_data` VALUES (8,359,NULL,'public'); +INSERT INTO `data_input_data` VALUES (9,359,NULL,''); +INSERT INTO `data_input_data` VALUES (10,359,NULL,''); +INSERT INTO `data_input_data` VALUES (11,359,NULL,'2'); +INSERT INTO `data_input_data` VALUES (7,360,NULL,'172.16.42.1'); +INSERT INTO `data_input_data` VALUES (8,360,NULL,'public'); +INSERT INTO `data_input_data` VALUES (9,360,NULL,''); +INSERT INTO `data_input_data` VALUES (10,360,NULL,''); +INSERT INTO `data_input_data` VALUES (11,360,NULL,'2'); +INSERT INTO `data_input_data` VALUES (7,361,NULL,'172.16.42.1'); +INSERT INTO `data_input_data` VALUES (8,361,NULL,'public'); +INSERT INTO `data_input_data` VALUES (9,361,NULL,''); +INSERT INTO `data_input_data` VALUES (10,361,NULL,''); +INSERT INTO `data_input_data` VALUES (11,361,NULL,'2'); +INSERT INTO `data_input_data` VALUES (7,362,NULL,'172.16.42.1'); +INSERT INTO `data_input_data` VALUES (8,362,NULL,'public'); +INSERT INTO `data_input_data` VALUES (9,362,NULL,''); +INSERT INTO `data_input_data` VALUES (10,362,NULL,''); +INSERT INTO `data_input_data` VALUES (11,362,NULL,'2'); +INSERT INTO `data_input_data` VALUES (7,363,NULL,'172.16.42.1'); +INSERT INTO `data_input_data` VALUES (8,363,NULL,'public'); +INSERT INTO `data_input_data` VALUES (9,363,NULL,''); +INSERT INTO `data_input_data` VALUES (10,363,NULL,''); +INSERT INTO `data_input_data` VALUES (11,363,NULL,'2'); +INSERT INTO `data_input_data` VALUES (7,364,NULL,'172.16.42.1'); +INSERT INTO `data_input_data` VALUES (8,364,NULL,'public'); +INSERT INTO `data_input_data` VALUES (9,364,NULL,''); +INSERT INTO `data_input_data` VALUES (10,364,NULL,''); +INSERT INTO `data_input_data` VALUES (11,364,NULL,'2'); +INSERT INTO `data_input_data` VALUES (7,365,NULL,'172.16.42.1'); +INSERT INTO `data_input_data` VALUES (8,365,NULL,'public'); +INSERT INTO `data_input_data` VALUES (9,365,NULL,''); +INSERT INTO `data_input_data` VALUES (10,365,NULL,''); +INSERT INTO `data_input_data` VALUES (11,365,NULL,'2'); +INSERT INTO `data_input_data` VALUES (7,366,NULL,'172.16.42.1'); +INSERT INTO `data_input_data` VALUES (8,366,NULL,'public'); +INSERT INTO `data_input_data` VALUES (9,366,NULL,''); +INSERT INTO `data_input_data` VALUES (10,366,NULL,''); +INSERT INTO `data_input_data` VALUES (11,366,NULL,'2'); +INSERT INTO `data_input_data` VALUES (7,367,NULL,'172.16.42.1'); +INSERT INTO `data_input_data` VALUES (8,367,NULL,'public'); +INSERT INTO `data_input_data` VALUES (9,367,NULL,''); +INSERT INTO `data_input_data` VALUES (10,367,NULL,''); +INSERT INTO `data_input_data` VALUES (11,367,NULL,'2'); +INSERT INTO `data_input_data` VALUES (14,368,'','13'); +INSERT INTO `data_input_data` VALUES (13,368,'','14'); +INSERT INTO `data_input_data` VALUES (12,368,'','ifIndex'); +INSERT INTO `data_input_data` VALUES (7,368,NULL,'172.16.42.1'); +INSERT INTO `data_input_data` VALUES (8,368,NULL,'public'); +INSERT INTO `data_input_data` VALUES (9,368,NULL,''); +INSERT INTO `data_input_data` VALUES (10,368,NULL,''); +INSERT INTO `data_input_data` VALUES (11,368,NULL,'2'); +INSERT INTO `data_input_data` VALUES (1,369,NULL,'127.0.0.1'); +INSERT INTO `data_input_data` VALUES (5,369,NULL,'1'); +INSERT INTO `data_input_data` VALUES (4,369,NULL,''); +INSERT INTO `data_input_data` VALUES (3,369,NULL,''); +INSERT INTO `data_input_data` VALUES (2,369,NULL,'public'); +INSERT INTO `data_input_data` VALUES (6,369,'','.1.3.6.1.4.1.2021.11.51.0'); +INSERT INTO `data_input_data` VALUES (1,370,NULL,'127.0.0.1'); +INSERT INTO `data_input_data` VALUES (2,370,NULL,'public'); +INSERT INTO `data_input_data` VALUES (3,370,NULL,''); +INSERT INTO `data_input_data` VALUES (4,370,NULL,''); +INSERT INTO `data_input_data` VALUES (5,370,NULL,'1'); +INSERT INTO `data_input_data` VALUES (6,370,'','.1.3.6.1.4.1.2021.11.52.0'); +INSERT INTO `data_input_data` VALUES (1,371,NULL,'127.0.0.1'); +INSERT INTO `data_input_data` VALUES (2,371,NULL,'public'); +INSERT INTO `data_input_data` VALUES (3,371,NULL,''); +INSERT INTO `data_input_data` VALUES (4,371,NULL,''); +INSERT INTO `data_input_data` VALUES (5,371,NULL,'1'); +INSERT INTO `data_input_data` VALUES (6,371,'','.1.3.6.1.4.1.2021.11.50.0'); +INSERT INTO `data_input_data` VALUES (1,372,NULL,'127.0.0.1'); +INSERT INTO `data_input_data` VALUES (2,372,NULL,'public'); +INSERT INTO `data_input_data` VALUES (3,372,NULL,''); +INSERT INTO `data_input_data` VALUES (4,372,NULL,''); +INSERT INTO `data_input_data` VALUES (5,372,NULL,'1'); +INSERT INTO `data_input_data` VALUES (6,372,'','.1.3.6.1.4.1.2021.4.14.0'); +INSERT INTO `data_input_data` VALUES (1,373,NULL,'127.0.0.1'); +INSERT INTO `data_input_data` VALUES (2,373,NULL,'public'); +INSERT INTO `data_input_data` VALUES (3,373,NULL,''); +INSERT INTO `data_input_data` VALUES (4,373,NULL,''); +INSERT INTO `data_input_data` VALUES (5,373,NULL,'1'); +INSERT INTO `data_input_data` VALUES (6,373,'','.1.3.6.1.4.1.2021.4.15.0'); +INSERT INTO `data_input_data` VALUES (1,374,NULL,'127.0.0.1'); +INSERT INTO `data_input_data` VALUES (2,374,NULL,'public'); +INSERT INTO `data_input_data` VALUES (3,374,NULL,''); +INSERT INTO `data_input_data` VALUES (4,374,NULL,''); +INSERT INTO `data_input_data` VALUES (5,374,NULL,'1'); +INSERT INTO `data_input_data` VALUES (6,374,'','.1.3.6.1.4.1.2021.4.6.0'); +INSERT INTO `data_input_data` VALUES (14,375,'','13'); +INSERT INTO `data_input_data` VALUES (13,375,'','eth0'); +INSERT INTO `data_input_data` VALUES (12,375,'','ifDescr'); +INSERT INTO `data_input_data` VALUES (33,376,'','15'); +INSERT INTO `data_input_data` VALUES (32,376,'','/dev/hda1'); +INSERT INTO `data_input_data` VALUES (31,376,'','dskDevice'); +INSERT INTO `data_input_data` VALUES (7,375,NULL,'127.0.0.1'); +INSERT INTO `data_input_data` VALUES (8,375,NULL,'public'); +INSERT INTO `data_input_data` VALUES (9,375,NULL,''); +INSERT INTO `data_input_data` VALUES (10,375,NULL,''); +INSERT INTO `data_input_data` VALUES (11,375,NULL,'1'); + +-- +-- Table structure for table `data_input_fields` +-- + +CREATE TABLE `data_input_fields` ( + `id` mediumint(8) unsigned NOT NULL auto_increment, + `hash` varchar(32) NOT NULL default '', + `data_input_id` mediumint(8) unsigned NOT NULL default '0', + `name` varchar(200) NOT NULL default '', + `data_name` varchar(50) NOT NULL default '', + `input_output` char(3) NOT NULL default '', + `update_rra` char(2) default '0', + `sequence` smallint(5) NOT NULL default '0', + `type_code` varchar(40) default NULL, + `regexp_match` varchar(200) default NULL, + `allow_nulls` char(2) default NULL, + PRIMARY KEY (`id`), + UNIQUE KEY `ID` (`id`), + KEY `id_2` (`id`), + KEY `data_input_id` (`data_input_id`) +) TYPE=MyISAM; + +-- +-- Dumping data for table `data_input_fields` +-- + +INSERT INTO `data_input_fields` VALUES (1,'92f5906c8dc0f964b41f4253df582c38',1,'SNMP IP Address','management_ip','in','',0,'hostname','',''); +INSERT INTO `data_input_fields` VALUES (2,'32285d5bf16e56c478f5e83f32cda9ef',1,'SNMP Community','snmp_community','in','',0,'snmp_community','',''); +INSERT INTO `data_input_fields` VALUES (3,'ad14ac90641aed388139f6ba86a2e48b',1,'SNMP Username','snmp_username','in','',0,'snmp_username','','on'); +INSERT INTO `data_input_fields` VALUES (4,'9c55a74bd571b4f00a96fd4b793278c6',1,'SNMP Password','snmp_password','in','',0,'snmp_password','','on'); +INSERT INTO `data_input_fields` VALUES (5,'012ccb1d3687d3edb29c002ea66e72da',1,'SNMP Version (1, 2, or 3)','snmp_version','in','',0,'snmp_version','','on'); +INSERT INTO `data_input_fields` VALUES (6,'4276a5ec6e3fe33995129041b1909762',1,'OID','oid','in','',0,'snmp_oid','',''); +INSERT INTO `data_input_fields` VALUES (7,'617cdc8a230615e59f06f361ef6e7728',2,'SNMP IP Address','management_ip','in','',0,'hostname','',''); +INSERT INTO `data_input_fields` VALUES (8,'acb449d1451e8a2a655c2c99d31142c7',2,'SNMP Community','snmp_community','in','',0,'snmp_community','',''); +INSERT INTO `data_input_fields` VALUES (9,'f4facc5e2ca7ebee621f09bc6d9fc792',2,'SNMP Username (v3)','snmp_username','in','',0,'snmp_username','','on'); +INSERT INTO `data_input_fields` VALUES (10,'1cc1493a6781af2c478fa4de971531cf',2,'SNMP Password (v3)','snmp_password','in','',0,'snmp_password','','on'); +INSERT INTO `data_input_fields` VALUES (11,'b5c23f246559df38662c255f4aa21d6b',2,'SNMP Version (1, 2, or 3)','snmp_version','in','',0,'snmp_version','',''); +INSERT INTO `data_input_fields` VALUES (12,'6027a919c7c7731fbe095b6f53ab127b',2,'Index Type','index_type','in','',0,'index_type','',''); +INSERT INTO `data_input_fields` VALUES (13,'cbbe5c1ddfb264a6e5d509ce1c78c95f',2,'Index Value','index_value','in','',0,'index_value','',''); +INSERT INTO `data_input_fields` VALUES (14,'e6deda7be0f391399c5130e7c4a48b28',2,'Output Type ID','output_type','in','',0,'output_type','',''); +INSERT INTO `data_input_fields` VALUES (15,'edfd72783ad02df128ff82fc9324b4b9',3,'Disk Partition','partition','in','',1,'','',''); +INSERT INTO `data_input_fields` VALUES (16,'8b75fb61d288f0b5fc0bd3056af3689b',3,'Kilobytes Free','kilobytes','out','on',0,'','',''); +INSERT INTO `data_input_fields` VALUES (17,'363588d49b263d30aecb683c52774f39',4,'1 Minute Average','1min','out','on',0,'','',''); +INSERT INTO `data_input_fields` VALUES (18,'ad139a9e1d69881da36fca07889abf58',4,'5 Minute Average','5min','out','on',0,'','',''); +INSERT INTO `data_input_fields` VALUES (19,'5db9fee64824c08258c7ff6f8bc53337',4,'10 Minute Average','10min','out','on',0,'','',''); +INSERT INTO `data_input_fields` VALUES (20,'c0cfd0beae5e79927c5a360076706820',5,'Username (Optional)','username','in','',1,'','','on'); +INSERT INTO `data_input_fields` VALUES (21,'52c58ad414d9a2a83b00a7a51be75a53',5,'Logged In Users','users','out','on',0,'','',''); +INSERT INTO `data_input_fields` VALUES (22,'05eb5d710f0814871b8515845521f8d7',6,'Grep String','grepstr','in','',1,'','',''); +INSERT INTO `data_input_fields` VALUES (23,'86cb1cbfde66279dbc7f1144f43a3219',6,'Result (in Kilobytes)','kilobytes','out','on',0,'','',''); +INSERT INTO `data_input_fields` VALUES (24,'d5a8dd5fbe6a5af11667c0039af41386',7,'Number of Processes','proc','out','on',0,'','',''); +INSERT INTO `data_input_fields` VALUES (25,'8848cdcae831595951a3f6af04eec93b',8,'Grep String','grepstr','in','',1,'','','on'); +INSERT INTO `data_input_fields` VALUES (26,'3d1288d33008430ce354e8b9c162f7ff',8,'Connections','connections','out','on',0,'','',''); +INSERT INTO `data_input_fields` VALUES (27,'c6af570bb2ed9c84abf32033702e2860',9,'(Optional) Log Path','log_path','in','',1,'','','on'); +INSERT INTO `data_input_fields` VALUES (28,'f9389860f5c5340c9b27fca0b4ee5e71',9,'Web Hits','webhits','out','on',0,'','',''); +INSERT INTO `data_input_fields` VALUES (29,'5fbadb91ad66f203463c1187fe7bd9d5',10,'IP Address','ip','in','',1,'hostname','',''); +INSERT INTO `data_input_fields` VALUES (30,'6ac4330d123c69067d36a933d105e89a',10,'Milliseconds','out_ms','out','on',0,'','',''); +INSERT INTO `data_input_fields` VALUES (31,'d39556ecad6166701bfb0e28c5a11108',11,'Index Type','index_type','in','',0,'index_type','',''); +INSERT INTO `data_input_fields` VALUES (32,'3b7caa46eb809fc238de6ef18b6e10d5',11,'Index Value','index_value','in','',0,'index_value','',''); +INSERT INTO `data_input_fields` VALUES (33,'74af2e42dc12956c4817c2ef5d9983f9',11,'Output Type ID','output_type','in','',0,'output_type','',''); +INSERT INTO `data_input_fields` VALUES (34,'8ae57f09f787656bf4ac541e8bd12537',11,'Output Value','output','out','on',0,'','',''); +INSERT INTO `data_input_fields` VALUES (35,'172b4b0eacee4948c6479f587b62e512',12,'Index Type','index_type','in','',0,'index_type','',''); +INSERT INTO `data_input_fields` VALUES (36,'30fb5d5bcf3d66bb5abe88596f357c26',12,'Index Value','index_value','in','',0,'index_value','',''); +INSERT INTO `data_input_fields` VALUES (37,'31112c85ae4ff821d3b288336288818c',12,'Output Type ID','output_type','in','',0,'output_type','',''); +INSERT INTO `data_input_fields` VALUES (38,'5be8fa85472d89c621790b43510b5043',12,'Output Value','output','out','on',0,'','',''); + +-- +-- Table structure for table `data_local` +-- + +CREATE TABLE `data_local` ( + `id` mediumint(8) unsigned NOT NULL auto_increment, + `data_template_id` mediumint(8) unsigned NOT NULL default '0', + `host_id` mediumint(8) unsigned NOT NULL default '0', + `snmp_query_id` mediumint(8) NOT NULL default '0', + `snmp_index` varchar(60) NOT NULL default '', + PRIMARY KEY (`id`), + UNIQUE KEY `id` (`id`), + KEY `id_2` (`id`) +) TYPE=MyISAM; + +-- +-- Dumping data for table `data_local` +-- + +INSERT INTO `data_local` VALUES (3,13,1,0,''); +INSERT INTO `data_local` VALUES (4,15,1,0,''); +INSERT INTO `data_local` VALUES (5,11,1,0,''); +INSERT INTO `data_local` VALUES (6,17,1,0,''); +INSERT INTO `data_local` VALUES (7,16,1,0,''); +INSERT INTO `data_local` VALUES (8,27,2,0,''); +INSERT INTO `data_local` VALUES (9,41,2,1,'1'); +INSERT INTO `data_local` VALUES (10,41,2,1,'2'); +INSERT INTO `data_local` VALUES (11,41,2,1,'3'); +INSERT INTO `data_local` VALUES (12,41,2,1,'4'); +INSERT INTO `data_local` VALUES (13,41,2,1,'5'); +INSERT INTO `data_local` VALUES (14,41,2,1,'6'); +INSERT INTO `data_local` VALUES (15,41,2,1,'7'); +INSERT INTO `data_local` VALUES (16,41,2,1,'8'); +INSERT INTO `data_local` VALUES (17,41,2,1,'9'); +INSERT INTO `data_local` VALUES (18,41,2,1,'10'); +INSERT INTO `data_local` VALUES (19,41,2,1,'11'); +INSERT INTO `data_local` VALUES (20,41,2,1,'12'); +INSERT INTO `data_local` VALUES (21,41,2,1,'13'); +INSERT INTO `data_local` VALUES (22,41,2,1,'14'); +INSERT INTO `data_local` VALUES (23,41,2,1,'15'); +INSERT INTO `data_local` VALUES (24,41,2,1,'16'); +INSERT INTO `data_local` VALUES (25,41,2,1,'17'); +INSERT INTO `data_local` VALUES (26,41,2,1,'18'); +INSERT INTO `data_local` VALUES (27,41,2,1,'19'); +INSERT INTO `data_local` VALUES (28,41,2,1,'20'); +INSERT INTO `data_local` VALUES (29,41,2,1,'21'); +INSERT INTO `data_local` VALUES (30,41,2,1,'22'); +INSERT INTO `data_local` VALUES (31,41,2,1,'23'); +INSERT INTO `data_local` VALUES (32,41,2,1,'24'); +INSERT INTO `data_local` VALUES (33,41,2,1,'25'); +INSERT INTO `data_local` VALUES (34,41,2,1,'26'); +INSERT INTO `data_local` VALUES (35,41,2,1,'27'); +INSERT INTO `data_local` VALUES (36,41,2,1,'28'); +INSERT INTO `data_local` VALUES (37,41,2,1,'29'); +INSERT INTO `data_local` VALUES (38,27,3,0,''); +INSERT INTO `data_local` VALUES (39,41,3,1,'1'); +INSERT INTO `data_local` VALUES (40,41,3,1,'2'); +INSERT INTO `data_local` VALUES (41,41,3,1,'3'); +INSERT INTO `data_local` VALUES (42,41,3,1,'4'); +INSERT INTO `data_local` VALUES (43,41,3,1,'5'); +INSERT INTO `data_local` VALUES (44,41,3,1,'6'); +INSERT INTO `data_local` VALUES (45,41,3,1,'7'); +INSERT INTO `data_local` VALUES (46,41,3,1,'8'); +INSERT INTO `data_local` VALUES (47,41,3,1,'9'); +INSERT INTO `data_local` VALUES (48,41,3,1,'10'); +INSERT INTO `data_local` VALUES (49,41,3,1,'11'); +INSERT INTO `data_local` VALUES (50,41,3,1,'12'); +INSERT INTO `data_local` VALUES (51,41,3,1,'13'); +INSERT INTO `data_local` VALUES (52,41,3,1,'14'); +INSERT INTO `data_local` VALUES (53,41,3,1,'15'); +INSERT INTO `data_local` VALUES (54,41,3,1,'16'); +INSERT INTO `data_local` VALUES (55,41,3,1,'17'); +INSERT INTO `data_local` VALUES (56,41,3,1,'18'); +INSERT INTO `data_local` VALUES (57,41,3,1,'19'); +INSERT INTO `data_local` VALUES (58,41,3,1,'20'); +INSERT INTO `data_local` VALUES (59,41,3,1,'21'); +INSERT INTO `data_local` VALUES (60,41,3,1,'22'); +INSERT INTO `data_local` VALUES (61,41,3,1,'23'); +INSERT INTO `data_local` VALUES (62,41,3,1,'24'); +INSERT INTO `data_local` VALUES (63,41,3,1,'25'); +INSERT INTO `data_local` VALUES (64,41,3,1,'26'); +INSERT INTO `data_local` VALUES (65,41,3,1,'27'); +INSERT INTO `data_local` VALUES (66,41,3,1,'28'); +INSERT INTO `data_local` VALUES (67,41,3,1,'29'); +INSERT INTO `data_local` VALUES (68,27,4,0,''); +INSERT INTO `data_local` VALUES (69,41,4,1,'1'); +INSERT INTO `data_local` VALUES (70,41,4,1,'2'); +INSERT INTO `data_local` VALUES (71,41,4,1,'3'); +INSERT INTO `data_local` VALUES (72,41,4,1,'4'); +INSERT INTO `data_local` VALUES (73,41,4,1,'5'); +INSERT INTO `data_local` VALUES (74,41,4,1,'6'); +INSERT INTO `data_local` VALUES (75,41,4,1,'7'); +INSERT INTO `data_local` VALUES (76,41,4,1,'8'); +INSERT INTO `data_local` VALUES (77,41,4,1,'9'); +INSERT INTO `data_local` VALUES (78,41,4,1,'10'); +INSERT INTO `data_local` VALUES (79,41,4,1,'11'); +INSERT INTO `data_local` VALUES (80,41,4,1,'12'); +INSERT INTO `data_local` VALUES (81,41,4,1,'13'); +INSERT INTO `data_local` VALUES (82,41,4,1,'14'); +INSERT INTO `data_local` VALUES (83,41,4,1,'15'); +INSERT INTO `data_local` VALUES (84,41,4,1,'16'); +INSERT INTO `data_local` VALUES (85,41,4,1,'17'); +INSERT INTO `data_local` VALUES (86,41,4,1,'18'); +INSERT INTO `data_local` VALUES (87,41,4,1,'19'); +INSERT INTO `data_local` VALUES (88,41,4,1,'20'); +INSERT INTO `data_local` VALUES (89,41,4,1,'21'); +INSERT INTO `data_local` VALUES (90,41,4,1,'22'); +INSERT INTO `data_local` VALUES (91,41,4,1,'23'); +INSERT INTO `data_local` VALUES (92,41,4,1,'24'); +INSERT INTO `data_local` VALUES (93,41,4,1,'25'); +INSERT INTO `data_local` VALUES (94,41,4,1,'26'); +INSERT INTO `data_local` VALUES (95,41,4,1,'27'); +INSERT INTO `data_local` VALUES (96,41,4,1,'28'); +INSERT INTO `data_local` VALUES (97,41,4,1,'29'); +INSERT INTO `data_local` VALUES (98,27,6,0,''); +INSERT INTO `data_local` VALUES (99,41,6,1,'1'); +INSERT INTO `data_local` VALUES (100,41,6,1,'2'); +INSERT INTO `data_local` VALUES (101,41,6,1,'3'); +INSERT INTO `data_local` VALUES (102,41,6,1,'4'); +INSERT INTO `data_local` VALUES (103,41,6,1,'5'); +INSERT INTO `data_local` VALUES (104,41,6,1,'6'); +INSERT INTO `data_local` VALUES (105,41,6,1,'7'); +INSERT INTO `data_local` VALUES (106,41,6,1,'8'); +INSERT INTO `data_local` VALUES (107,41,6,1,'9'); +INSERT INTO `data_local` VALUES (108,41,6,1,'10'); +INSERT INTO `data_local` VALUES (109,41,6,1,'11'); +INSERT INTO `data_local` VALUES (110,41,6,1,'12'); +INSERT INTO `data_local` VALUES (111,41,6,1,'13'); +INSERT INTO `data_local` VALUES (112,41,6,1,'14'); +INSERT INTO `data_local` VALUES (113,41,6,1,'15'); +INSERT INTO `data_local` VALUES (114,41,6,1,'16'); +INSERT INTO `data_local` VALUES (115,41,6,1,'17'); +INSERT INTO `data_local` VALUES (116,41,6,1,'18'); +INSERT INTO `data_local` VALUES (117,41,6,1,'19'); +INSERT INTO `data_local` VALUES (118,41,6,1,'20'); +INSERT INTO `data_local` VALUES (119,41,6,1,'21'); +INSERT INTO `data_local` VALUES (120,41,6,1,'22'); +INSERT INTO `data_local` VALUES (121,41,6,1,'23'); +INSERT INTO `data_local` VALUES (122,41,6,1,'24'); +INSERT INTO `data_local` VALUES (123,41,6,1,'25'); +INSERT INTO `data_local` VALUES (124,41,6,1,'26'); +INSERT INTO `data_local` VALUES (125,41,6,1,'27'); +INSERT INTO `data_local` VALUES (126,41,6,1,'28'); +INSERT INTO `data_local` VALUES (127,41,6,1,'29'); +INSERT INTO `data_local` VALUES (249,34,5,0,''); +INSERT INTO `data_local` VALUES (248,47,5,0,''); +INSERT INTO `data_local` VALUES (254,41,5,1,'13'); +INSERT INTO `data_local` VALUES (253,41,5,1,'10'); +INSERT INTO `data_local` VALUES (252,41,5,1,'8'); +INSERT INTO `data_local` VALUES (251,41,5,1,'7'); +INSERT INTO `data_local` VALUES (250,41,5,1,'6'); +INSERT INTO `data_local` VALUES (247,33,5,0,''); +INSERT INTO `data_local` VALUES (246,31,5,0,''); +INSERT INTO `data_local` VALUES (245,32,5,0,''); +INSERT INTO `data_local` VALUES (241,6,5,0,''); +INSERT INTO `data_local` VALUES (244,30,5,0,''); +INSERT INTO `data_local` VALUES (242,4,5,0,''); +INSERT INTO `data_local` VALUES (243,5,5,0,''); +INSERT INTO `data_local` VALUES (145,27,7,0,''); +INSERT INTO `data_local` VALUES (146,41,7,1,'1'); +INSERT INTO `data_local` VALUES (147,41,7,1,'2'); +INSERT INTO `data_local` VALUES (148,41,7,1,'3'); +INSERT INTO `data_local` VALUES (149,41,7,1,'4'); +INSERT INTO `data_local` VALUES (150,41,7,1,'5'); +INSERT INTO `data_local` VALUES (151,41,7,1,'6'); +INSERT INTO `data_local` VALUES (152,41,7,1,'7'); +INSERT INTO `data_local` VALUES (153,41,7,1,'8'); +INSERT INTO `data_local` VALUES (154,41,7,1,'9'); +INSERT INTO `data_local` VALUES (155,41,7,1,'10'); +INSERT INTO `data_local` VALUES (156,41,7,1,'11'); +INSERT INTO `data_local` VALUES (157,41,7,1,'12'); +INSERT INTO `data_local` VALUES (158,41,7,1,'13'); +INSERT INTO `data_local` VALUES (159,41,7,1,'14'); +INSERT INTO `data_local` VALUES (160,41,7,1,'15'); +INSERT INTO `data_local` VALUES (161,41,7,1,'16'); +INSERT INTO `data_local` VALUES (162,41,7,1,'17'); +INSERT INTO `data_local` VALUES (163,41,7,1,'18'); +INSERT INTO `data_local` VALUES (164,41,7,1,'19'); +INSERT INTO `data_local` VALUES (165,41,7,1,'20'); +INSERT INTO `data_local` VALUES (166,41,7,1,'21'); +INSERT INTO `data_local` VALUES (167,41,7,1,'22'); +INSERT INTO `data_local` VALUES (168,41,7,1,'23'); +INSERT INTO `data_local` VALUES (169,41,7,1,'24'); +INSERT INTO `data_local` VALUES (170,41,7,1,'25'); +INSERT INTO `data_local` VALUES (171,41,7,1,'26'); +INSERT INTO `data_local` VALUES (172,41,7,1,'27'); +INSERT INTO `data_local` VALUES (173,41,7,1,'28'); +INSERT INTO `data_local` VALUES (174,41,7,1,'29'); +INSERT INTO `data_local` VALUES (175,27,8,0,''); +INSERT INTO `data_local` VALUES (176,41,8,1,'1'); +INSERT INTO `data_local` VALUES (177,41,8,1,'2'); +INSERT INTO `data_local` VALUES (178,41,8,1,'3'); +INSERT INTO `data_local` VALUES (179,41,8,1,'4'); +INSERT INTO `data_local` VALUES (180,41,8,1,'5'); +INSERT INTO `data_local` VALUES (181,41,8,1,'6'); +INSERT INTO `data_local` VALUES (182,41,8,1,'7'); +INSERT INTO `data_local` VALUES (183,41,8,1,'8'); +INSERT INTO `data_local` VALUES (184,41,8,1,'9'); +INSERT INTO `data_local` VALUES (185,41,8,1,'10'); +INSERT INTO `data_local` VALUES (186,41,8,1,'11'); +INSERT INTO `data_local` VALUES (187,41,8,1,'12'); +INSERT INTO `data_local` VALUES (188,41,8,1,'13'); +INSERT INTO `data_local` VALUES (189,41,8,1,'14'); +INSERT INTO `data_local` VALUES (190,41,8,1,'15'); +INSERT INTO `data_local` VALUES (191,41,8,1,'16'); +INSERT INTO `data_local` VALUES (192,41,8,1,'17'); +INSERT INTO `data_local` VALUES (193,41,8,1,'18'); +INSERT INTO `data_local` VALUES (194,41,8,1,'19'); +INSERT INTO `data_local` VALUES (195,41,8,1,'20'); +INSERT INTO `data_local` VALUES (196,41,8,1,'21'); +INSERT INTO `data_local` VALUES (197,41,8,1,'22'); +INSERT INTO `data_local` VALUES (198,41,8,1,'23'); +INSERT INTO `data_local` VALUES (199,41,8,1,'24'); +INSERT INTO `data_local` VALUES (200,41,8,1,'25'); +INSERT INTO `data_local` VALUES (201,41,8,1,'26'); +INSERT INTO `data_local` VALUES (202,41,8,1,'27'); +INSERT INTO `data_local` VALUES (203,41,8,1,'28'); +INSERT INTO `data_local` VALUES (204,41,8,1,'29'); +INSERT INTO `data_local` VALUES (205,41,8,1,'30'); +INSERT INTO `data_local` VALUES (206,41,8,1,'31'); +INSERT INTO `data_local` VALUES (207,41,8,1,'32'); +INSERT INTO `data_local` VALUES (208,41,8,1,'33'); +INSERT INTO `data_local` VALUES (209,41,8,1,'34'); +INSERT INTO `data_local` VALUES (210,41,8,1,'35'); +INSERT INTO `data_local` VALUES (211,41,8,1,'36'); +INSERT INTO `data_local` VALUES (212,41,8,1,'37'); +INSERT INTO `data_local` VALUES (213,41,8,1,'38'); +INSERT INTO `data_local` VALUES (214,41,8,1,'39'); +INSERT INTO `data_local` VALUES (215,41,8,1,'40'); +INSERT INTO `data_local` VALUES (216,41,8,1,'41'); +INSERT INTO `data_local` VALUES (217,41,8,1,'42'); +INSERT INTO `data_local` VALUES (218,41,8,1,'43'); +INSERT INTO `data_local` VALUES (219,41,8,1,'44'); +INSERT INTO `data_local` VALUES (220,41,8,1,'45'); +INSERT INTO `data_local` VALUES (221,41,8,1,'46'); +INSERT INTO `data_local` VALUES (222,41,8,1,'47'); +INSERT INTO `data_local` VALUES (223,41,8,1,'48'); +INSERT INTO `data_local` VALUES (224,41,8,1,'49'); +INSERT INTO `data_local` VALUES (225,41,8,1,'50'); +INSERT INTO `data_local` VALUES (226,41,8,1,'51'); +INSERT INTO `data_local` VALUES (227,41,8,1,'52'); +INSERT INTO `data_local` VALUES (228,41,8,1,'53'); +INSERT INTO `data_local` VALUES (229,41,8,1,'54'); +INSERT INTO `data_local` VALUES (230,41,8,1,'55'); +INSERT INTO `data_local` VALUES (231,41,8,1,'56'); +INSERT INTO `data_local` VALUES (232,41,8,1,'57'); +INSERT INTO `data_local` VALUES (233,41,8,1,'58'); +INSERT INTO `data_local` VALUES (234,41,8,1,'59'); +INSERT INTO `data_local` VALUES (235,41,8,1,'60'); +INSERT INTO `data_local` VALUES (236,41,8,1,'61'); +INSERT INTO `data_local` VALUES (237,41,8,1,'62'); +INSERT INTO `data_local` VALUES (238,41,8,1,'63'); +INSERT INTO `data_local` VALUES (239,41,8,1,'64'); +INSERT INTO `data_local` VALUES (240,41,8,1,'67'); +INSERT INTO `data_local` VALUES (255,41,5,1,'15'); +INSERT INTO `data_local` VALUES (256,41,5,1,'9'); +INSERT INTO `data_local` VALUES (257,41,5,1,'13'); +INSERT INTO `data_local` VALUES (258,41,11,1,'1'); +INSERT INTO `data_local` VALUES (259,41,11,1,'2'); +INSERT INTO `data_local` VALUES (260,41,11,1,'3'); +INSERT INTO `data_local` VALUES (261,41,11,1,'4'); +INSERT INTO `data_local` VALUES (262,41,11,1,'5'); +INSERT INTO `data_local` VALUES (263,41,11,1,'6'); +INSERT INTO `data_local` VALUES (264,41,11,1,'7'); +INSERT INTO `data_local` VALUES (265,41,11,1,'8'); +INSERT INTO `data_local` VALUES (266,41,11,1,'9'); +INSERT INTO `data_local` VALUES (267,41,11,1,'10'); +INSERT INTO `data_local` VALUES (268,41,11,1,'11'); +INSERT INTO `data_local` VALUES (269,41,11,1,'12'); +INSERT INTO `data_local` VALUES (270,41,11,1,'13'); +INSERT INTO `data_local` VALUES (271,41,11,1,'14'); +INSERT INTO `data_local` VALUES (272,41,11,1,'15'); +INSERT INTO `data_local` VALUES (273,41,11,1,'16'); +INSERT INTO `data_local` VALUES (274,41,11,1,'17'); +INSERT INTO `data_local` VALUES (275,41,11,1,'18'); +INSERT INTO `data_local` VALUES (276,41,11,1,'19'); +INSERT INTO `data_local` VALUES (277,41,11,1,'20'); +INSERT INTO `data_local` VALUES (278,41,11,1,'21'); +INSERT INTO `data_local` VALUES (279,41,11,1,'22'); +INSERT INTO `data_local` VALUES (280,41,11,1,'23'); +INSERT INTO `data_local` VALUES (281,41,11,1,'24'); +INSERT INTO `data_local` VALUES (282,41,11,1,'25'); +INSERT INTO `data_local` VALUES (283,6,12,0,''); +INSERT INTO `data_local` VALUES (284,4,12,0,''); +INSERT INTO `data_local` VALUES (285,5,12,0,''); +INSERT INTO `data_local` VALUES (286,30,12,0,''); +INSERT INTO `data_local` VALUES (287,32,12,0,''); +INSERT INTO `data_local` VALUES (288,31,12,0,''); +INSERT INTO `data_local` VALUES (289,33,12,0,''); +INSERT INTO `data_local` VALUES (290,47,12,0,''); +INSERT INTO `data_local` VALUES (291,34,12,0,''); +INSERT INTO `data_local` VALUES (292,39,12,1,'1'); +INSERT INTO `data_local` VALUES (293,39,12,1,'2'); +INSERT INTO `data_local` VALUES (294,39,12,1,'4'); +INSERT INTO `data_local` VALUES (295,39,12,1,'5'); +INSERT INTO `data_local` VALUES (296,39,12,1,'6'); +INSERT INTO `data_local` VALUES (297,39,12,1,'7'); +INSERT INTO `data_local` VALUES (298,39,12,1,'8'); +INSERT INTO `data_local` VALUES (299,39,12,1,'10'); +INSERT INTO `data_local` VALUES (300,39,12,1,'13'); +INSERT INTO `data_local` VALUES (301,39,12,1,'3'); +INSERT INTO `data_local` VALUES (302,39,12,1,'15'); +INSERT INTO `data_local` VALUES (303,39,12,1,'9'); +INSERT INTO `data_local` VALUES (304,39,12,1,'13'); +INSERT INTO `data_local` VALUES (305,39,12,0,''); +INSERT INTO `data_local` VALUES (306,41,5,1,'14'); +INSERT INTO `data_local` VALUES (307,6,13,0,''); +INSERT INTO `data_local` VALUES (308,4,13,0,''); +INSERT INTO `data_local` VALUES (309,5,13,0,''); +INSERT INTO `data_local` VALUES (310,33,13,0,''); +INSERT INTO `data_local` VALUES (311,47,13,0,''); +INSERT INTO `data_local` VALUES (312,34,13,0,''); +INSERT INTO `data_local` VALUES (313,41,13,1,'2'); +INSERT INTO `data_local` VALUES (314,37,13,6,'/dev/hda1'); + +-- +-- Table structure for table `data_template` +-- + +CREATE TABLE `data_template` ( + `id` mediumint(8) unsigned NOT NULL auto_increment, + `hash` varchar(32) NOT NULL default '', + `name` varchar(150) NOT NULL default '', + PRIMARY KEY (`id`), + UNIQUE KEY `id` (`id`), + KEY `id_2` (`id`) +) TYPE=MyISAM; + +-- +-- Dumping data for table `data_template` +-- + +INSERT INTO `data_template` VALUES (3,'c8a8f50f5f4a465368222594c5709ede','ucd/net - Hard Drive Space'); +INSERT INTO `data_template` VALUES (4,'cdfed2d401723d2f41fc239d4ce249c7','ucd/net - CPU Usage - System'); +INSERT INTO `data_template` VALUES (5,'a27e816377d2ac6434a87c494559c726','ucd/net - CPU Usage - User'); +INSERT INTO `data_template` VALUES (6,'c06c3d20eccb9598939dc597701ff574','ucd/net - CPU Usage - Nice'); +INSERT INTO `data_template` VALUES (7,'a14f2d6f233b05e64263ff03a5b0b386','Karlnet - Noise Level'); +INSERT INTO `data_template` VALUES (8,'def1a9019d888ed2ad2e106aa9595ede','Karlnet - Signal Level'); +INSERT INTO `data_template` VALUES (9,'513a99ae3c9c4413609c1534ffc36eab','Karlnet - Wireless Transmits'); +INSERT INTO `data_template` VALUES (10,'77404ae93c9cc410f1c2c717e7117378','Karlnet - Wireless Re-Transmits'); +INSERT INTO `data_template` VALUES (11,'9e72511e127de200733eb502eb818e1d','Unix - Load Average'); +INSERT INTO `data_template` VALUES (13,'dc33aa9a8e71fb7c61ec0e7a6da074aa','Linux - Memory - Free'); +INSERT INTO `data_template` VALUES (15,'41f55087d067142d702dd3c73c98f020','Linux - Memory - Free Swap'); +INSERT INTO `data_template` VALUES (16,'9b8c92d3c32703900ff7dd653bfc9cd8','Unix - Processes'); +INSERT INTO `data_template` VALUES (17,'c221c2164c585b6da378013a7a6a2c13','Unix - Logged in Users'); +INSERT INTO `data_template` VALUES (18,'a30a81cb1de65b52b7da542c8df3f188','Unix - Ping Host'); +INSERT INTO `data_template` VALUES (19,'0de466a1b81dfe581d44ac014b86553a','Netware - Total Users'); +INSERT INTO `data_template` VALUES (20,'bbe2da0708103029fbf949817d3a4537','Netware - Total Logins'); +INSERT INTO `data_template` VALUES (45,'f383db441d1c246cff8482f15e184e5f','Host MIB - Processes'); +INSERT INTO `data_template` VALUES (22,'e4ac5d5fe73e3c773671c6d0498a8d9d','Netware - File System Reads'); +INSERT INTO `data_template` VALUES (23,'f29f8c998425eedd249be1e7caf90ceb','Netware - File System Writes'); +INSERT INTO `data_template` VALUES (24,'7a6216a113e19881e35565312db8a371','Netware - Cache Checks'); +INSERT INTO `data_template` VALUES (25,'1dbd1251c8e94b334c0e6aeae5ca4b8d','Netware - Cache Hits'); +INSERT INTO `data_template` VALUES (26,'1a4c5264eb27b5e57acd3160af770a61','Netware - Open Files'); +INSERT INTO `data_template` VALUES (27,'e9def3a0e409f517cb804dfeba4ccd90','Cisco Router - 5 Minute CPU'); +INSERT INTO `data_template` VALUES (35,'6ce4ab04378f9f3b03ee0623abb6479f','Netware - Volumes'); +INSERT INTO `data_template` VALUES (30,'9b82d44eb563027659683765f92c9757','ucd/net - Load Average - 1 Minute'); +INSERT INTO `data_template` VALUES (31,'87847714d19f405ff3c74f3341b3f940','ucd/net - Load Average - 5 Minute'); +INSERT INTO `data_template` VALUES (32,'308ac157f24e2763f8cd828a80b3e5ff','ucd/net - Load Average - 15 Minute'); +INSERT INTO `data_template` VALUES (33,'797a3e92b0039841b52e441a2823a6fb','ucd/net - Memory - Buffers'); +INSERT INTO `data_template` VALUES (34,'fa15932d3cab0da2ab94c69b1a9f5ca7','ucd/net - Memory - Free'); +INSERT INTO `data_template` VALUES (36,'03060555fab086b8412bbf9951179cd9','Netware - Directory Entries'); +INSERT INTO `data_template` VALUES (37,'e4ac6919d4f6f21ec5b281a1d6ac4d4e','Unix - Hard Drive Space'); +INSERT INTO `data_template` VALUES (38,'36335cd98633963a575b70639cd2fdad','Interface - Errors/Discards'); +INSERT INTO `data_template` VALUES (39,'2f654f7d69ac71a5d56b1db8543ccad3','Interface - Unicast Packets'); +INSERT INTO `data_template` VALUES (40,'c84e511401a747409053c90ba910d0fe','Interface - Non-Unicast Packets'); +INSERT INTO `data_template` VALUES (41,'6632e1e0b58a565c135d7ff90440c335','Interface - Traffic'); +INSERT INTO `data_template` VALUES (42,'1d17325f416b262921a0b55fe5f7e31d','Netware - CPU Utilization'); +INSERT INTO `data_template` VALUES (43,'d814fa3b79bd0f8933b6e0834d3f16d0','Host MIB - Hard Drive Space'); +INSERT INTO `data_template` VALUES (44,'f6e7d21c19434666bbdac00ccef9932f','Host MIB - CPU Utilization'); +INSERT INTO `data_template` VALUES (46,'2ef027cc76d75720ee5f7a528f0f1fda','Host MIB - Logged in Users'); +INSERT INTO `data_template` VALUES (48,'d429e4a6019c91e6e84562593c1968ca','SNMP - Generic OID Template'); +INSERT INTO `data_template` VALUES (47,'a274deec1f78654dca6c446ba75ebca4','ucd/net - Memory - Cache'); + +-- +-- Table structure for table `data_template_data` +-- + +CREATE TABLE `data_template_data` ( + `id` mediumint(8) unsigned NOT NULL auto_increment, + `local_data_template_data_id` mediumint(8) unsigned NOT NULL default '0', + `local_data_id` mediumint(8) unsigned NOT NULL default '0', + `data_template_id` mediumint(8) unsigned NOT NULL default '0', + `data_input_id` mediumint(8) unsigned NOT NULL default '0', + `t_name` char(2) default NULL, + `name` varchar(250) NOT NULL default '', + `name_cache` varchar(255) NOT NULL default '', + `data_source_path` varchar(255) default NULL, + `t_active` char(2) default NULL, + `active` char(2) default NULL, + `t_rrd_step` char(2) default NULL, + `rrd_step` mediumint(8) unsigned NOT NULL default '0', + `t_rra_id` char(2) default NULL, + PRIMARY KEY (`id`), + UNIQUE KEY `id` (`id`), + KEY `id_2` (`id`), + KEY `local_data_id` (`local_data_id`), + KEY `data_template_id` (`data_template_id`) +) TYPE=MyISAM; + +-- +-- Dumping data for table `data_template_data` +-- + +INSERT INTO `data_template_data` VALUES (3,0,0,3,2,'on','|host_description| - Hard Drive Space','',NULL,'','on','',300,''); +INSERT INTO `data_template_data` VALUES (4,0,0,4,1,'','|host_description| - CPU Usage - System','',NULL,'','on','',300,''); +INSERT INTO `data_template_data` VALUES (5,0,0,5,1,'','|host_description| - CPU Usage - User','',NULL,'','on','',300,''); +INSERT INTO `data_template_data` VALUES (6,0,0,6,1,'','|host_description| - CPU Usage - Nice','',NULL,'','on','',300,''); +INSERT INTO `data_template_data` VALUES (7,0,0,7,2,'on','|host_description| - Noise Level','',NULL,'','on','',300,''); +INSERT INTO `data_template_data` VALUES (8,0,0,8,2,'on','|host_description| - Signal Level','',NULL,'','on','',300,''); +INSERT INTO `data_template_data` VALUES (9,0,0,9,2,'on','|host_description| - Wireless Transmits','',NULL,'','on','',300,''); +INSERT INTO `data_template_data` VALUES (10,0,0,10,2,'on','|host_description| - Wireless Re-Transmits','',NULL,'','on','',300,''); +INSERT INTO `data_template_data` VALUES (11,0,0,11,4,'','|host_description| - Load Average','',NULL,'','on','',300,''); +INSERT INTO `data_template_data` VALUES (13,0,0,13,6,'','|host_description| - Memory - Free','',NULL,'','on','',300,''); +INSERT INTO `data_template_data` VALUES (15,0,0,15,6,'','|host_description| - Memory - Free Swap','',NULL,'','on','',300,''); +INSERT INTO `data_template_data` VALUES (16,0,0,16,7,'','|host_description| - Processes','',NULL,'','on','',300,''); +INSERT INTO `data_template_data` VALUES (17,0,0,17,5,'','|host_description| - Logged in Users','',NULL,'','on','',300,''); +INSERT INTO `data_template_data` VALUES (18,0,0,18,10,'','|host_description| - Ping Host','',NULL,'','on','',300,''); +INSERT INTO `data_template_data` VALUES (19,0,0,19,1,'','|host_description| - Total Users','',NULL,'','on','',300,''); +INSERT INTO `data_template_data` VALUES (20,0,0,20,1,'','|host_description| - Total Logins','',NULL,'','on','',300,''); +INSERT INTO `data_template_data` VALUES (58,0,0,45,1,'','|host_description| - Processes','',NULL,'','on','',300,''); +INSERT INTO `data_template_data` VALUES (22,0,0,22,1,'','|host_description| - File System Reads','',NULL,'','on','',300,''); +INSERT INTO `data_template_data` VALUES (23,0,0,23,1,'','|host_description| - File System Writes','',NULL,'','on','',300,''); +INSERT INTO `data_template_data` VALUES (24,0,0,24,1,'','|host_description| - Cache Checks','',NULL,'','on','',300,''); +INSERT INTO `data_template_data` VALUES (25,0,0,25,1,'','|host_description| - Cache Hits','',NULL,'','on','',300,''); +INSERT INTO `data_template_data` VALUES (26,0,0,26,1,'','|host_description| - Open Files','',NULL,'','on','',300,''); +INSERT INTO `data_template_data` VALUES (27,0,0,27,1,'','|host_description| - 5 Minute CPU','',NULL,'','on','',300,''); +INSERT INTO `data_template_data` VALUES (69,0,0,48,1,'on','|host_description| -','',NULL,'','on','',300,''); +INSERT INTO `data_template_data` VALUES (68,0,0,47,1,'','|host_description| - Memory - Cache','',NULL,'','on','',300,''); +INSERT INTO `data_template_data` VALUES (30,0,0,30,1,'','|host_description| - Load Average - 1 Minute','',NULL,'','on','',300,''); +INSERT INTO `data_template_data` VALUES (31,0,0,31,1,'','|host_description| - Load Average - 5 Minute','',NULL,'','on','',300,''); +INSERT INTO `data_template_data` VALUES (32,0,0,32,1,'','|host_description| - Load Average - 15 Minute','',NULL,'','on','',300,''); +INSERT INTO `data_template_data` VALUES (33,0,0,33,1,'','|host_description| - Memory - Buffers','',NULL,'','on','',300,''); +INSERT INTO `data_template_data` VALUES (34,0,0,34,1,'','|host_description| - Memory - Free','',NULL,'','on','',300,''); +INSERT INTO `data_template_data` VALUES (35,0,0,35,2,'on','|host_description| - Volumes','',NULL,'','on','',300,''); +INSERT INTO `data_template_data` VALUES (36,0,0,36,2,'on','|host_description| - Directory Entries','',NULL,'','on','',300,''); +INSERT INTO `data_template_data` VALUES (37,0,0,37,11,'on','|host_description| - Hard Drive Space','',NULL,'','on','',300,''); +INSERT INTO `data_template_data` VALUES (38,0,0,38,2,'on','|host_description| - Errors/Discards','',NULL,'','on','',300,''); +INSERT INTO `data_template_data` VALUES (39,0,0,39,2,'on','|host_description| - Unicast Packets','',NULL,'','on','',300,''); +INSERT INTO `data_template_data` VALUES (40,0,0,40,2,'on','|host_description| - Non-Unicast Packets','',NULL,'','on','',300,''); +INSERT INTO `data_template_data` VALUES (41,0,0,41,2,'on','|host_description| - Traffic','',NULL,'','on','',300,''); +INSERT INTO `data_template_data` VALUES (55,0,0,42,2,'','|host_description| - CPU Utilization','',NULL,'','on','',300,''); +INSERT INTO `data_template_data` VALUES (56,0,0,43,12,'','|host_description| - Hard Drive Space','',NULL,'','on','',300,''); +INSERT INTO `data_template_data` VALUES (57,0,0,44,12,'','|host_description| - CPU Utilization','',NULL,'','on','',300,''); +INSERT INTO `data_template_data` VALUES (59,0,0,46,1,'','|host_description| - Logged in Users','',NULL,'','on','',300,''); +INSERT INTO `data_template_data` VALUES (62,13,3,13,6,NULL,'|host_description| - Memory - Free','Localhost - Memory - Free','/localhost_mem_buffers_3.rrd',NULL,'on',NULL,300,NULL); +INSERT INTO `data_template_data` VALUES (63,15,4,15,6,NULL,'|host_description| - Memory - Free Swap','Localhost - Memory - Free Swap','/localhost_mem_swap_4.rrd',NULL,'on',NULL,300,NULL); +INSERT INTO `data_template_data` VALUES (64,11,5,11,4,NULL,'|host_description| - Load Average','Localhost - Load Average','/localhost_load_1min_5.rrd',NULL,'on',NULL,300,NULL); +INSERT INTO `data_template_data` VALUES (65,17,6,17,5,NULL,'|host_description| - Logged in Users','Localhost - Logged in Users','/localhost_users_6.rrd',NULL,'on',NULL,300,NULL); +INSERT INTO `data_template_data` VALUES (66,16,7,16,7,NULL,'|host_description| - Processes','Localhost - Processes','/localhost_proc_7.rrd',NULL,'on',NULL,300,NULL); +INSERT INTO `data_template_data` VALUES (70,27,8,27,1,NULL,'|host_description| - 5 Minute CPU','172.16.42.100 - 5 Minute CPU','/172_16_42_100_5min_cpu_8.rrd',NULL,'on',NULL,300,NULL); +INSERT INTO `data_template_data` VALUES (71,41,9,41,2,NULL,'|host_description| - Traffic - |query_ifName|','172.16.42.100 - Traffic - Fa0/1','/172_16_42_100_traffic_in_9.rrd',NULL,'on',NULL,300,NULL); +INSERT INTO `data_template_data` VALUES (72,41,10,41,2,NULL,'|host_description| - Traffic - |query_ifName|','172.16.42.100 - Traffic - Fa0/2','/172_16_42_100_traffic_in_10.rrd',NULL,'on',NULL,300,NULL); +INSERT INTO `data_template_data` VALUES (73,41,11,41,2,NULL,'|host_description| - Traffic - |query_ifName|','172.16.42.100 - Traffic - Fa0/3','/172_16_42_100_traffic_in_11.rrd',NULL,'on',NULL,300,NULL); +INSERT INTO `data_template_data` VALUES (74,41,12,41,2,NULL,'|host_description| - Traffic - |query_ifName|','172.16.42.100 - Traffic - Fa0/4','/172_16_42_100_traffic_in_12.rrd',NULL,'on',NULL,300,NULL); +INSERT INTO `data_template_data` VALUES (75,41,13,41,2,NULL,'|host_description| - Traffic - |query_ifName|','172.16.42.100 - Traffic - Fa0/5','/172_16_42_100_traffic_in_13.rrd',NULL,'on',NULL,300,NULL); +INSERT INTO `data_template_data` VALUES (76,41,14,41,2,NULL,'|host_description| - Traffic - |query_ifName|','172.16.42.100 - Traffic - Fa0/6','/172_16_42_100_traffic_in_14.rrd',NULL,'on',NULL,300,NULL); +INSERT INTO `data_template_data` VALUES (77,41,15,41,2,NULL,'|host_description| - Traffic - |query_ifName|','172.16.42.100 - Traffic - Fa0/7','/172_16_42_100_traffic_in_15.rrd',NULL,'on',NULL,300,NULL); +INSERT INTO `data_template_data` VALUES (78,41,16,41,2,NULL,'|host_description| - Traffic - |query_ifName|','172.16.42.100 - Traffic - Fa0/8','/172_16_42_100_traffic_in_16.rrd',NULL,'on',NULL,300,NULL); +INSERT INTO `data_template_data` VALUES (79,41,17,41,2,NULL,'|host_description| - Traffic - |query_ifName|','172.16.42.100 - Traffic - Fa0/9','/172_16_42_100_traffic_in_17.rrd',NULL,'on',NULL,300,NULL); +INSERT INTO `data_template_data` VALUES (80,41,18,41,2,NULL,'|host_description| - Traffic - |query_ifName|','172.16.42.100 - Traffic - Fa0/10','/172_16_42_100_traffic_in_18.rrd',NULL,'on',NULL,300,NULL); +INSERT INTO `data_template_data` VALUES (81,41,19,41,2,NULL,'|host_description| - Traffic - |query_ifName|','172.16.42.100 - Traffic - Fa0/11','/172_16_42_100_traffic_in_19.rrd',NULL,'on',NULL,300,NULL); +INSERT INTO `data_template_data` VALUES (82,41,20,41,2,NULL,'|host_description| - Traffic - |query_ifName|','172.16.42.100 - Traffic - Fa0/12','/172_16_42_100_traffic_in_20.rrd',NULL,'on',NULL,300,NULL); +INSERT INTO `data_template_data` VALUES (83,41,21,41,2,NULL,'|host_description| - Traffic - |query_ifName|','172.16.42.100 - Traffic - Fa0/13','/172_16_42_100_traffic_in_21.rrd',NULL,'on',NULL,300,NULL); +INSERT INTO `data_template_data` VALUES (84,41,22,41,2,NULL,'|host_description| - Traffic - |query_ifName|','172.16.42.100 - Traffic - Fa0/14','/172_16_42_100_traffic_in_22.rrd',NULL,'on',NULL,300,NULL); +INSERT INTO `data_template_data` VALUES (85,41,23,41,2,NULL,'|host_description| - Traffic - |query_ifName|','172.16.42.100 - Traffic - Fa0/15','/172_16_42_100_traffic_in_23.rrd',NULL,'on',NULL,300,NULL); +INSERT INTO `data_template_data` VALUES (86,41,24,41,2,NULL,'|host_description| - Traffic - |query_ifName|','172.16.42.100 - Traffic - Fa0/16','/172_16_42_100_traffic_in_24.rrd',NULL,'on',NULL,300,NULL); +INSERT INTO `data_template_data` VALUES (87,41,25,41,2,NULL,'|host_description| - Traffic - |query_ifName|','172.16.42.100 - Traffic - Fa0/17','/172_16_42_100_traffic_in_25.rrd',NULL,'on',NULL,300,NULL); +INSERT INTO `data_template_data` VALUES (88,41,26,41,2,NULL,'|host_description| - Traffic - |query_ifName|','172.16.42.100 - Traffic - Fa0/18','/172_16_42_100_traffic_in_26.rrd',NULL,'on',NULL,300,NULL); +INSERT INTO `data_template_data` VALUES (89,41,27,41,2,NULL,'|host_description| - Traffic - |query_ifName|','172.16.42.100 - Traffic - Fa0/19','/172_16_42_100_traffic_in_27.rrd',NULL,'on',NULL,300,NULL); +INSERT INTO `data_template_data` VALUES (90,41,28,41,2,NULL,'|host_description| - Traffic - |query_ifName|','172.16.42.100 - Traffic - Fa0/20','/172_16_42_100_traffic_in_28.rrd',NULL,'on',NULL,300,NULL); +INSERT INTO `data_template_data` VALUES (91,41,29,41,2,NULL,'|host_description| - Traffic - |query_ifName|','172.16.42.100 - Traffic - Fa0/21','/172_16_42_100_traffic_in_29.rrd',NULL,'on',NULL,300,NULL); +INSERT INTO `data_template_data` VALUES (92,41,30,41,2,NULL,'|host_description| - Traffic - |query_ifName|','172.16.42.100 - Traffic - Fa0/22','/172_16_42_100_traffic_in_30.rrd',NULL,'on',NULL,300,NULL); +INSERT INTO `data_template_data` VALUES (93,41,31,41,2,NULL,'|host_description| - Traffic - |query_ifName|','172.16.42.100 - Traffic - Fa0/23','/172_16_42_100_traffic_in_31.rrd',NULL,'on',NULL,300,NULL); +INSERT INTO `data_template_data` VALUES (94,41,32,41,2,NULL,'|host_description| - Traffic - |query_ifName|','172.16.42.100 - Traffic - Fa0/24','/172_16_42_100_traffic_in_32.rrd',NULL,'on',NULL,300,NULL); +INSERT INTO `data_template_data` VALUES (95,41,33,41,2,NULL,'|host_description| - Traffic - |query_ifName|','172.16.42.100 - Traffic - Gi0/1','/172_16_42_100_traffic_in_33.rrd',NULL,'on',NULL,300,NULL); +INSERT INTO `data_template_data` VALUES (96,41,34,41,2,NULL,'|host_description| - Traffic - |query_ifName|','172.16.42.100 - Traffic - Gi0/2','/172_16_42_100_traffic_in_34.rrd',NULL,'on',NULL,300,NULL); +INSERT INTO `data_template_data` VALUES (97,41,35,41,2,NULL,'|host_description| - Traffic - |query_ifName|','172.16.42.100 - Traffic - Nu0','/172_16_42_100_traffic_in_35.rrd',NULL,'on',NULL,300,NULL); +INSERT INTO `data_template_data` VALUES (98,41,36,41,2,NULL,'|host_description| - Traffic - |query_ifName|','172.16.42.100 - Traffic - Vl1','/172_16_42_100_traffic_in_36.rrd',NULL,'on',NULL,300,NULL); +INSERT INTO `data_template_data` VALUES (99,41,37,41,2,NULL,'|host_description| - Traffic - |query_ifIP| - |query_ifName|','172.16.42.100 - Traffic - 172.16.42.100 - Vl42','/172_16_42_100_traffic_in_37.rrd',NULL,'on',NULL,300,NULL); +INSERT INTO `data_template_data` VALUES (100,27,38,27,1,NULL,'|host_description| - 5 Minute CPU','172.16.42.101 - 5 Minute CPU','/172_16_42_101_5min_cpu_38.rrd',NULL,'on',NULL,300,NULL); +INSERT INTO `data_template_data` VALUES (101,41,39,41,2,NULL,'|host_description| - Traffic - |query_ifName|','172.16.42.101 - Traffic - Fa0/1','/172_16_42_101_traffic_in_39.rrd',NULL,'on',NULL,300,NULL); +INSERT INTO `data_template_data` VALUES (102,41,40,41,2,NULL,'|host_description| - Traffic - |query_ifName|','172.16.42.101 - Traffic - Fa0/2','/172_16_42_101_traffic_in_40.rrd',NULL,'on',NULL,300,NULL); +INSERT INTO `data_template_data` VALUES (103,41,41,41,2,NULL,'|host_description| - Traffic - |query_ifName|','172.16.42.101 - Traffic - Fa0/3','/172_16_42_101_traffic_in_41.rrd',NULL,'on',NULL,300,NULL); +INSERT INTO `data_template_data` VALUES (104,41,42,41,2,NULL,'|host_description| - Traffic - |query_ifName|','172.16.42.101 - Traffic - Fa0/4','/172_16_42_101_traffic_in_42.rrd',NULL,'on',NULL,300,NULL); +INSERT INTO `data_template_data` VALUES (105,41,43,41,2,NULL,'|host_description| - Traffic - |query_ifName|','172.16.42.101 - Traffic - Fa0/5','/172_16_42_101_traffic_in_43.rrd',NULL,'on',NULL,300,NULL); +INSERT INTO `data_template_data` VALUES (106,41,44,41,2,NULL,'|host_description| - Traffic - |query_ifName|','172.16.42.101 - Traffic - Fa0/6','/172_16_42_101_traffic_in_44.rrd',NULL,'on',NULL,300,NULL); +INSERT INTO `data_template_data` VALUES (107,41,45,41,2,NULL,'|host_description| - Traffic - |query_ifName|','172.16.42.101 - Traffic - Fa0/7','/172_16_42_101_traffic_in_45.rrd',NULL,'on',NULL,300,NULL); +INSERT INTO `data_template_data` VALUES (108,41,46,41,2,NULL,'|host_description| - Traffic - |query_ifName|','172.16.42.101 - Traffic - Fa0/8','/172_16_42_101_traffic_in_46.rrd',NULL,'on',NULL,300,NULL); +INSERT INTO `data_template_data` VALUES (109,41,47,41,2,NULL,'|host_description| - Traffic - |query_ifName|','172.16.42.101 - Traffic - Fa0/9','/172_16_42_101_traffic_in_47.rrd',NULL,'on',NULL,300,NULL); +INSERT INTO `data_template_data` VALUES (110,41,48,41,2,NULL,'|host_description| - Traffic - |query_ifName|','172.16.42.101 - Traffic - Fa0/10','/172_16_42_101_traffic_in_48.rrd',NULL,'on',NULL,300,NULL); +INSERT INTO `data_template_data` VALUES (111,41,49,41,2,NULL,'|host_description| - Traffic - |query_ifName|','172.16.42.101 - Traffic - Fa0/11','/172_16_42_101_traffic_in_49.rrd',NULL,'on',NULL,300,NULL); +INSERT INTO `data_template_data` VALUES (112,41,50,41,2,NULL,'|host_description| - Traffic - |query_ifName|','172.16.42.101 - Traffic - Fa0/12','/172_16_42_101_traffic_in_50.rrd',NULL,'on',NULL,300,NULL); +INSERT INTO `data_template_data` VALUES (113,41,51,41,2,NULL,'|host_description| - Traffic - |query_ifName|','172.16.42.101 - Traffic - Fa0/13','/172_16_42_101_traffic_in_51.rrd',NULL,'on',NULL,300,NULL); +INSERT INTO `data_template_data` VALUES (114,41,52,41,2,NULL,'|host_description| - Traffic - |query_ifName|','172.16.42.101 - Traffic - Fa0/14','/172_16_42_101_traffic_in_52.rrd',NULL,'on',NULL,300,NULL); +INSERT INTO `data_template_data` VALUES (115,41,53,41,2,NULL,'|host_description| - Traffic - |query_ifName|','172.16.42.101 - Traffic - Fa0/15','/172_16_42_101_traffic_in_53.rrd',NULL,'on',NULL,300,NULL); +INSERT INTO `data_template_data` VALUES (116,41,54,41,2,NULL,'|host_description| - Traffic - |query_ifName|','172.16.42.101 - Traffic - Fa0/16','/172_16_42_101_traffic_in_54.rrd',NULL,'on',NULL,300,NULL); +INSERT INTO `data_template_data` VALUES (117,41,55,41,2,NULL,'|host_description| - Traffic - |query_ifName|','172.16.42.101 - Traffic - Fa0/17','/172_16_42_101_traffic_in_55.rrd',NULL,'on',NULL,300,NULL); +INSERT INTO `data_template_data` VALUES (118,41,56,41,2,NULL,'|host_description| - Traffic - |query_ifName|','172.16.42.101 - Traffic - Fa0/18','/172_16_42_101_traffic_in_56.rrd',NULL,'on',NULL,300,NULL); +INSERT INTO `data_template_data` VALUES (119,41,57,41,2,NULL,'|host_description| - Traffic - |query_ifName|','172.16.42.101 - Traffic - Fa0/19','/172_16_42_101_traffic_in_57.rrd',NULL,'on',NULL,300,NULL); +INSERT INTO `data_template_data` VALUES (120,41,58,41,2,NULL,'|host_description| - Traffic - |query_ifName|','172.16.42.101 - Traffic - Fa0/20','/172_16_42_101_traffic_in_58.rrd',NULL,'on',NULL,300,NULL); +INSERT INTO `data_template_data` VALUES (121,41,59,41,2,NULL,'|host_description| - Traffic - |query_ifName|','172.16.42.101 - Traffic - Fa0/21','/172_16_42_101_traffic_in_59.rrd',NULL,'on',NULL,300,NULL); +INSERT INTO `data_template_data` VALUES (122,41,60,41,2,NULL,'|host_description| - Traffic - |query_ifName|','172.16.42.101 - Traffic - Fa0/22','/172_16_42_101_traffic_in_60.rrd',NULL,'on',NULL,300,NULL); +INSERT INTO `data_template_data` VALUES (123,41,61,41,2,NULL,'|host_description| - Traffic - |query_ifName|','172.16.42.101 - Traffic - Fa0/23','/172_16_42_101_traffic_in_61.rrd',NULL,'on',NULL,300,NULL); +INSERT INTO `data_template_data` VALUES (124,41,62,41,2,NULL,'|host_description| - Traffic - |query_ifName|','172.16.42.101 - Traffic - Fa0/24','/172_16_42_101_traffic_in_62.rrd',NULL,'on',NULL,300,NULL); +INSERT INTO `data_template_data` VALUES (125,41,63,41,2,NULL,'|host_description| - Traffic - |query_ifName|','172.16.42.101 - Traffic - Gi0/1','/172_16_42_101_traffic_in_63.rrd',NULL,'on',NULL,300,NULL); +INSERT INTO `data_template_data` VALUES (126,41,64,41,2,NULL,'|host_description| - Traffic - |query_ifName|','172.16.42.101 - Traffic - Gi0/2','/172_16_42_101_traffic_in_64.rrd',NULL,'on',NULL,300,NULL); +INSERT INTO `data_template_data` VALUES (127,41,65,41,2,NULL,'|host_description| - Traffic - |query_ifName|','172.16.42.101 - Traffic - Nu0','/172_16_42_101_traffic_in_65.rrd',NULL,'on',NULL,300,NULL); +INSERT INTO `data_template_data` VALUES (128,41,66,41,2,NULL,'|host_description| - Traffic - |query_ifName|','172.16.42.101 - Traffic - Vl1','/172_16_42_101_traffic_in_66.rrd',NULL,'on',NULL,300,NULL); +INSERT INTO `data_template_data` VALUES (129,41,67,41,2,NULL,'|host_description| - Traffic - |query_ifIP| - |query_ifName|','172.16.42.101 - Traffic - 172.16.42.101 - Vl42','/172_16_42_101_traffic_in_67.rrd',NULL,'on',NULL,300,NULL); +INSERT INTO `data_template_data` VALUES (130,27,68,27,1,NULL,'|host_description| - 5 Minute CPU','172.16.42.102 - 5 Minute CPU','/172_16_42_102_5min_cpu_68.rrd',NULL,'on',NULL,300,NULL); +INSERT INTO `data_template_data` VALUES (131,41,69,41,2,NULL,'|host_description| - Traffic - |query_ifName|','172.16.42.102 - Traffic - Fa0/1','/172_16_42_102_traffic_in_69.rrd',NULL,'on',NULL,300,NULL); +INSERT INTO `data_template_data` VALUES (132,41,70,41,2,NULL,'|host_description| - Traffic - |query_ifName|','172.16.42.102 - Traffic - Fa0/2','/172_16_42_102_traffic_in_70.rrd',NULL,'on',NULL,300,NULL); +INSERT INTO `data_template_data` VALUES (133,41,71,41,2,NULL,'|host_description| - Traffic - |query_ifName|','172.16.42.102 - Traffic - Fa0/3','/172_16_42_102_traffic_in_71.rrd',NULL,'on',NULL,300,NULL); +INSERT INTO `data_template_data` VALUES (134,41,72,41,2,NULL,'|host_description| - Traffic - |query_ifName|','172.16.42.102 - Traffic - Fa0/4','/172_16_42_102_traffic_in_72.rrd',NULL,'on',NULL,300,NULL); +INSERT INTO `data_template_data` VALUES (135,41,73,41,2,NULL,'|host_description| - Traffic - |query_ifName|','172.16.42.102 - Traffic - Fa0/5','/172_16_42_102_traffic_in_73.rrd',NULL,'on',NULL,300,NULL); +INSERT INTO `data_template_data` VALUES (136,41,74,41,2,NULL,'|host_description| - Traffic - |query_ifName|','172.16.42.102 - Traffic - Fa0/6','/172_16_42_102_traffic_in_74.rrd',NULL,'on',NULL,300,NULL); +INSERT INTO `data_template_data` VALUES (137,41,75,41,2,NULL,'|host_description| - Traffic - |query_ifName|','172.16.42.102 - Traffic - Fa0/7','/172_16_42_102_traffic_in_75.rrd',NULL,'on',NULL,300,NULL); +INSERT INTO `data_template_data` VALUES (138,41,76,41,2,NULL,'|host_description| - Traffic - |query_ifName|','172.16.42.102 - Traffic - Fa0/8','/172_16_42_102_traffic_in_76.rrd',NULL,'on',NULL,300,NULL); +INSERT INTO `data_template_data` VALUES (139,41,77,41,2,NULL,'|host_description| - Traffic - |query_ifName|','172.16.42.102 - Traffic - Fa0/9','/172_16_42_102_traffic_in_77.rrd',NULL,'on',NULL,300,NULL); +INSERT INTO `data_template_data` VALUES (140,41,78,41,2,NULL,'|host_description| - Traffic - |query_ifName|','172.16.42.102 - Traffic - Fa0/10','/172_16_42_102_traffic_in_78.rrd',NULL,'on',NULL,300,NULL); +INSERT INTO `data_template_data` VALUES (141,41,79,41,2,NULL,'|host_description| - Traffic - |query_ifName|','172.16.42.102 - Traffic - Fa0/11','/172_16_42_102_traffic_in_79.rrd',NULL,'on',NULL,300,NULL); +INSERT INTO `data_template_data` VALUES (142,41,80,41,2,NULL,'|host_description| - Traffic - |query_ifName|','172.16.42.102 - Traffic - Fa0/12','/172_16_42_102_traffic_in_80.rrd',NULL,'on',NULL,300,NULL); +INSERT INTO `data_template_data` VALUES (143,41,81,41,2,NULL,'|host_description| - Traffic - |query_ifName|','172.16.42.102 - Traffic - Fa0/13','/172_16_42_102_traffic_in_81.rrd',NULL,'on',NULL,300,NULL); +INSERT INTO `data_template_data` VALUES (144,41,82,41,2,NULL,'|host_description| - Traffic - |query_ifName|','172.16.42.102 - Traffic - Fa0/14','/172_16_42_102_traffic_in_82.rrd',NULL,'on',NULL,300,NULL); +INSERT INTO `data_template_data` VALUES (145,41,83,41,2,NULL,'|host_description| - Traffic - |query_ifName|','172.16.42.102 - Traffic - Fa0/15','/172_16_42_102_traffic_in_83.rrd',NULL,'on',NULL,300,NULL); +INSERT INTO `data_template_data` VALUES (146,41,84,41,2,NULL,'|host_description| - Traffic - |query_ifName|','172.16.42.102 - Traffic - Fa0/16','/172_16_42_102_traffic_in_84.rrd',NULL,'on',NULL,300,NULL); +INSERT INTO `data_template_data` VALUES (147,41,85,41,2,NULL,'|host_description| - Traffic - |query_ifName|','172.16.42.102 - Traffic - Fa0/17','/172_16_42_102_traffic_in_85.rrd',NULL,'on',NULL,300,NULL); +INSERT INTO `data_template_data` VALUES (148,41,86,41,2,NULL,'|host_description| - Traffic - |query_ifName|','172.16.42.102 - Traffic - Fa0/18','/172_16_42_102_traffic_in_86.rrd',NULL,'on',NULL,300,NULL); +INSERT INTO `data_template_data` VALUES (149,41,87,41,2,NULL,'|host_description| - Traffic - |query_ifName|','172.16.42.102 - Traffic - Fa0/19','/172_16_42_102_traffic_in_87.rrd',NULL,'on',NULL,300,NULL); +INSERT INTO `data_template_data` VALUES (150,41,88,41,2,NULL,'|host_description| - Traffic - |query_ifName|','172.16.42.102 - Traffic - Fa0/20','/172_16_42_102_traffic_in_88.rrd',NULL,'on',NULL,300,NULL); +INSERT INTO `data_template_data` VALUES (151,41,89,41,2,NULL,'|host_description| - Traffic - |query_ifName|','172.16.42.102 - Traffic - Fa0/21','/172_16_42_102_traffic_in_89.rrd',NULL,'on',NULL,300,NULL); +INSERT INTO `data_template_data` VALUES (152,41,90,41,2,NULL,'|host_description| - Traffic - |query_ifName|','172.16.42.102 - Traffic - Fa0/22','/172_16_42_102_traffic_in_90.rrd',NULL,'on',NULL,300,NULL); +INSERT INTO `data_template_data` VALUES (153,41,91,41,2,NULL,'|host_description| - Traffic - |query_ifName|','172.16.42.102 - Traffic - Fa0/23','/172_16_42_102_traffic_in_91.rrd',NULL,'on',NULL,300,NULL); +INSERT INTO `data_template_data` VALUES (154,41,92,41,2,NULL,'|host_description| - Traffic - |query_ifName|','172.16.42.102 - Traffic - Fa0/24','/172_16_42_102_traffic_in_92.rrd',NULL,'on',NULL,300,NULL); +INSERT INTO `data_template_data` VALUES (155,41,93,41,2,NULL,'|host_description| - Traffic - |query_ifName|','172.16.42.102 - Traffic - Gi0/1','/172_16_42_102_traffic_in_93.rrd',NULL,'on',NULL,300,NULL); +INSERT INTO `data_template_data` VALUES (156,41,94,41,2,NULL,'|host_description| - Traffic - |query_ifName|','172.16.42.102 - Traffic - Gi0/2','/172_16_42_102_traffic_in_94.rrd',NULL,'on',NULL,300,NULL); +INSERT INTO `data_template_data` VALUES (157,41,95,41,2,NULL,'|host_description| - Traffic - |query_ifName|','172.16.42.102 - Traffic - Nu0','/172_16_42_102_traffic_in_95.rrd',NULL,'on',NULL,300,NULL); +INSERT INTO `data_template_data` VALUES (158,41,96,41,2,NULL,'|host_description| - Traffic - |query_ifName|','172.16.42.102 - Traffic - Vl1','/172_16_42_102_traffic_in_96.rrd',NULL,'on',NULL,300,NULL); +INSERT INTO `data_template_data` VALUES (159,41,97,41,2,NULL,'|host_description| - Traffic - |query_ifIP| - |query_ifName|','172.16.42.102 - Traffic - 172.16.42.102 - Vl42','/172_16_42_102_traffic_in_97.rrd',NULL,'on',NULL,300,NULL); +INSERT INTO `data_template_data` VALUES (160,27,98,27,1,NULL,'|host_description| - 5 Minute CPU','172.16.42.103 - 5 Minute CPU','/172_16_42_103_5min_cpu_98.rrd',NULL,'on',NULL,300,NULL); +INSERT INTO `data_template_data` VALUES (161,41,99,41,2,NULL,'|host_description| - Traffic - |query_ifName|','172.16.42.103 - Traffic - Fa0/1','/172_16_42_103_traffic_in_99.rrd',NULL,'on',NULL,300,NULL); +INSERT INTO `data_template_data` VALUES (162,41,100,41,2,NULL,'|host_description| - Traffic - |query_ifName|','172.16.42.103 - Traffic - Fa0/2','/172_16_42_103_traffic_in_100.rrd',NULL,'on',NULL,300,NULL); +INSERT INTO `data_template_data` VALUES (163,41,101,41,2,NULL,'|host_description| - Traffic - |query_ifName|','172.16.42.103 - Traffic - Fa0/3','/172_16_42_103_traffic_in_101.rrd',NULL,'on',NULL,300,NULL); +INSERT INTO `data_template_data` VALUES (164,41,102,41,2,NULL,'|host_description| - Traffic - |query_ifName|','172.16.42.103 - Traffic - Fa0/4','/172_16_42_103_traffic_in_102.rrd',NULL,'on',NULL,300,NULL); +INSERT INTO `data_template_data` VALUES (165,41,103,41,2,NULL,'|host_description| - Traffic - |query_ifName|','172.16.42.103 - Traffic - Fa0/5','/172_16_42_103_traffic_in_103.rrd',NULL,'on',NULL,300,NULL); +INSERT INTO `data_template_data` VALUES (166,41,104,41,2,NULL,'|host_description| - Traffic - |query_ifName|','172.16.42.103 - Traffic - Fa0/6','/172_16_42_103_traffic_in_104.rrd',NULL,'on',NULL,300,NULL); +INSERT INTO `data_template_data` VALUES (167,41,105,41,2,NULL,'|host_description| - Traffic - |query_ifName|','172.16.42.103 - Traffic - Fa0/7','/172_16_42_103_traffic_in_105.rrd',NULL,'on',NULL,300,NULL); +INSERT INTO `data_template_data` VALUES (168,41,106,41,2,NULL,'|host_description| - Traffic - |query_ifName|','172.16.42.103 - Traffic - Fa0/8','/172_16_42_103_traffic_in_106.rrd',NULL,'on',NULL,300,NULL); +INSERT INTO `data_template_data` VALUES (169,41,107,41,2,NULL,'|host_description| - Traffic - |query_ifName|','172.16.42.103 - Traffic - Fa0/9','/172_16_42_103_traffic_in_107.rrd',NULL,'on',NULL,300,NULL); +INSERT INTO `data_template_data` VALUES (170,41,108,41,2,NULL,'|host_description| - Traffic - |query_ifName|','172.16.42.103 - Traffic - Fa0/10','/172_16_42_103_traffic_in_108.rrd',NULL,'on',NULL,300,NULL); +INSERT INTO `data_template_data` VALUES (171,41,109,41,2,NULL,'|host_description| - Traffic - |query_ifName|','172.16.42.103 - Traffic - Fa0/11','/172_16_42_103_traffic_in_109.rrd',NULL,'on',NULL,300,NULL); +INSERT INTO `data_template_data` VALUES (172,41,110,41,2,NULL,'|host_description| - Traffic - |query_ifName|','172.16.42.103 - Traffic - Fa0/12','/172_16_42_103_traffic_in_110.rrd',NULL,'on',NULL,300,NULL); +INSERT INTO `data_template_data` VALUES (173,41,111,41,2,NULL,'|host_description| - Traffic - |query_ifName|','172.16.42.103 - Traffic - Fa0/13','/172_16_42_103_traffic_in_111.rrd',NULL,'on',NULL,300,NULL); +INSERT INTO `data_template_data` VALUES (174,41,112,41,2,NULL,'|host_description| - Traffic - |query_ifName|','172.16.42.103 - Traffic - Fa0/14','/172_16_42_103_traffic_in_112.rrd',NULL,'on',NULL,300,NULL); +INSERT INTO `data_template_data` VALUES (175,41,113,41,2,NULL,'|host_description| - Traffic - |query_ifName|','172.16.42.103 - Traffic - Fa0/15','/172_16_42_103_traffic_in_113.rrd',NULL,'on',NULL,300,NULL); +INSERT INTO `data_template_data` VALUES (176,41,114,41,2,NULL,'|host_description| - Traffic - |query_ifName|','172.16.42.103 - Traffic - Fa0/16','/172_16_42_103_traffic_in_114.rrd',NULL,'on',NULL,300,NULL); +INSERT INTO `data_template_data` VALUES (177,41,115,41,2,NULL,'|host_description| - Traffic - |query_ifName|','172.16.42.103 - Traffic - Fa0/17','/172_16_42_103_traffic_in_115.rrd',NULL,'on',NULL,300,NULL); +INSERT INTO `data_template_data` VALUES (178,41,116,41,2,NULL,'|host_description| - Traffic - |query_ifName|','172.16.42.103 - Traffic - Fa0/18','/172_16_42_103_traffic_in_116.rrd',NULL,'on',NULL,300,NULL); +INSERT INTO `data_template_data` VALUES (179,41,117,41,2,NULL,'|host_description| - Traffic - |query_ifName|','172.16.42.103 - Traffic - Fa0/19','/172_16_42_103_traffic_in_117.rrd',NULL,'on',NULL,300,NULL); +INSERT INTO `data_template_data` VALUES (180,41,118,41,2,NULL,'|host_description| - Traffic - |query_ifName|','172.16.42.103 - Traffic - Fa0/20','/172_16_42_103_traffic_in_118.rrd',NULL,'on',NULL,300,NULL); +INSERT INTO `data_template_data` VALUES (181,41,119,41,2,NULL,'|host_description| - Traffic - |query_ifName|','172.16.42.103 - Traffic - Fa0/21','/172_16_42_103_traffic_in_119.rrd',NULL,'on',NULL,300,NULL); +INSERT INTO `data_template_data` VALUES (182,41,120,41,2,NULL,'|host_description| - Traffic - |query_ifName|','172.16.42.103 - Traffic - Fa0/22','/172_16_42_103_traffic_in_120.rrd',NULL,'on',NULL,300,NULL); +INSERT INTO `data_template_data` VALUES (183,41,121,41,2,NULL,'|host_description| - Traffic - |query_ifName|','172.16.42.103 - Traffic - Fa0/23','/172_16_42_103_traffic_in_121.rrd',NULL,'on',NULL,300,NULL); +INSERT INTO `data_template_data` VALUES (184,41,122,41,2,NULL,'|host_description| - Traffic - |query_ifName|','172.16.42.103 - Traffic - Fa0/24','/172_16_42_103_traffic_in_122.rrd',NULL,'on',NULL,300,NULL); +INSERT INTO `data_template_data` VALUES (185,41,123,41,2,NULL,'|host_description| - Traffic - |query_ifName|','172.16.42.103 - Traffic - Gi0/1','/172_16_42_103_traffic_in_123.rrd',NULL,'on',NULL,300,NULL); +INSERT INTO `data_template_data` VALUES (186,41,124,41,2,NULL,'|host_description| - Traffic - |query_ifName|','172.16.42.103 - Traffic - Gi0/2','/172_16_42_103_traffic_in_124.rrd',NULL,'on',NULL,300,NULL); +INSERT INTO `data_template_data` VALUES (187,41,125,41,2,NULL,'|host_description| - Traffic - |query_ifName|','172.16.42.103 - Traffic - Nu0','/172_16_42_103_traffic_in_125.rrd',NULL,'on',NULL,300,NULL); +INSERT INTO `data_template_data` VALUES (188,41,126,41,2,NULL,'|host_description| - Traffic - |query_ifName|','172.16.42.103 - Traffic - Vl1','/172_16_42_103_traffic_in_126.rrd',NULL,'on',NULL,300,NULL); +INSERT INTO `data_template_data` VALUES (189,41,127,41,2,NULL,'|host_description| - Traffic - |query_ifIP| - |query_ifName|','172.16.42.103 - Traffic - 172.16.42.103 - Vl42','/172_16_42_103_traffic_in_127.rrd',NULL,'on',NULL,300,NULL); +INSERT INTO `data_template_data` VALUES (318,41,256,41,2,NULL,'|host_description| - Traffic - |query_ifDescr|','sinabox - Traffic - vlan23','/sinabox_traffic_in_256.rrd',NULL,'on',NULL,300,NULL); +INSERT INTO `data_template_data` VALUES (319,41,257,41,2,NULL,'|host_description| - Traffic - |query_ifIP|/|query_ifDescr|','sinabox - Traffic - 80.171.54.23/chaos_vpn','/sinabox_traffic_in_257.rrd',NULL,'on',NULL,300,NULL); +INSERT INTO `data_template_data` VALUES (317,41,255,41,2,NULL,'|host_description| - Traffic - |query_ifDescr|','sinabox - Traffic - ppp0','/sinabox_traffic_in_255.rrd',NULL,'on',NULL,300,NULL); +INSERT INTO `data_template_data` VALUES (316,41,254,41,2,NULL,'|host_description| - Traffic - |query_ifIP|/|query_ifDescr|','sinabox - Traffic - 172.16.25.1/vlan25','/sinabox_traffic_in_254.rrd',NULL,'on',NULL,300,NULL); +INSERT INTO `data_template_data` VALUES (306,30,244,30,1,NULL,'|host_description| - Load Average - 1 Minute','sinabox - Load Average - 1 Minute','/sinabox_load_1min_244.rrd',NULL,'on',NULL,300,NULL); +INSERT INTO `data_template_data` VALUES (307,32,245,32,1,NULL,'|host_description| - Load Average - 15 Minute','sinabox - Load Average - 15 Minute','/sinabox_load_15min_245.rrd',NULL,'on',NULL,300,NULL); +INSERT INTO `data_template_data` VALUES (308,31,246,31,1,NULL,'|host_description| - Load Average - 5 Minute','sinabox - Load Average - 5 Minute','/sinabox_load_5min_246.rrd',NULL,'on',NULL,300,NULL); +INSERT INTO `data_template_data` VALUES (309,33,247,33,1,NULL,'|host_description| - Memory - Buffers','sinabox - Memory - Buffers','/sinabox_mem_buffers_247.rrd',NULL,'on',NULL,300,NULL); +INSERT INTO `data_template_data` VALUES (310,68,248,47,1,NULL,'|host_description| - Memory - Cache','sinabox - Memory - Cache','/sinabox_mem_cache_248.rrd',NULL,'on',NULL,300,NULL); +INSERT INTO `data_template_data` VALUES (311,34,249,34,1,NULL,'|host_description| - Memory - Free','sinabox - Memory - Free','/sinabox_mem_free_249.rrd',NULL,'on',NULL,300,NULL); +INSERT INTO `data_template_data` VALUES (312,41,250,41,2,NULL,'|host_description| - Traffic - |query_ifIP|/|query_ifDescr|','sinabox - Traffic - 172.16.0.1/bond0','/sinabox_traffic_in_250.rrd',NULL,'on',NULL,300,NULL); +INSERT INTO `data_template_data` VALUES (313,41,251,41,2,NULL,'|host_description| - Traffic - |query_ifIP|/|query_ifDescr|','sinabox - Traffic - 172.16.4.1/vlan24','/sinabox_traffic_in_251.rrd',NULL,'on',NULL,300,NULL); +INSERT INTO `data_template_data` VALUES (314,41,252,41,2,NULL,'|host_description| - Traffic - |query_ifIP|/|query_ifDescr|','sinabox - Traffic - 192.168.178.2/vlan22','/sinabox_traffic_in_252.rrd',NULL,'on',NULL,300,NULL); +INSERT INTO `data_template_data` VALUES (315,41,253,41,2,NULL,'|host_description| - Traffic - |query_ifDescr|','sinabox - Traffic - vlan42','/sinabox_traffic_in_253.rrd',NULL,'on',NULL,300,NULL); +INSERT INTO `data_template_data` VALUES (303,6,241,6,1,NULL,'|host_description| - CPU Usage - Nice','sinabox - CPU Usage - Nice','/sinabox_cpu_nice_241.rrd',NULL,'on',NULL,300,NULL); +INSERT INTO `data_template_data` VALUES (304,4,242,4,1,NULL,'|host_description| - CPU Usage - System','sinabox - CPU Usage - System','/sinabox_cpu_system_242.rrd',NULL,'on',NULL,300,NULL); +INSERT INTO `data_template_data` VALUES (305,5,243,5,1,NULL,'|host_description| - CPU Usage - User','sinabox - CPU Usage - User','/sinabox_cpu_user_243.rrd',NULL,'on',NULL,300,NULL); +INSERT INTO `data_template_data` VALUES (207,27,145,27,1,NULL,'|host_description| - 5 Minute CPU','172.16.42.104 - 5 Minute CPU','/172_16_42_104_5min_cpu_145.rrd',NULL,'on',NULL,300,NULL); +INSERT INTO `data_template_data` VALUES (208,41,146,41,2,NULL,'|host_description| - Traffic - |query_ifName|','172.16.42.104 - Traffic - Fa0/1','/172_16_42_104_traffic_in_146.rrd',NULL,'on',NULL,300,NULL); +INSERT INTO `data_template_data` VALUES (209,41,147,41,2,NULL,'|host_description| - Traffic - |query_ifName|','172.16.42.104 - Traffic - Fa0/2','/172_16_42_104_traffic_in_147.rrd',NULL,'on',NULL,300,NULL); +INSERT INTO `data_template_data` VALUES (210,41,148,41,2,NULL,'|host_description| - Traffic - |query_ifName|','172.16.42.104 - Traffic - Fa0/3','/172_16_42_104_traffic_in_148.rrd',NULL,'on',NULL,300,NULL); +INSERT INTO `data_template_data` VALUES (211,41,149,41,2,NULL,'|host_description| - Traffic - |query_ifName|','172.16.42.104 - Traffic - Fa0/4','/172_16_42_104_traffic_in_149.rrd',NULL,'on',NULL,300,NULL); +INSERT INTO `data_template_data` VALUES (212,41,150,41,2,NULL,'|host_description| - Traffic - |query_ifName|','172.16.42.104 - Traffic - Fa0/5','/172_16_42_104_traffic_in_150.rrd',NULL,'on',NULL,300,NULL); +INSERT INTO `data_template_data` VALUES (213,41,151,41,2,NULL,'|host_description| - Traffic - |query_ifName|','172.16.42.104 - Traffic - Fa0/6','/172_16_42_104_traffic_in_151.rrd',NULL,'on',NULL,300,NULL); +INSERT INTO `data_template_data` VALUES (214,41,152,41,2,NULL,'|host_description| - Traffic - |query_ifName|','172.16.42.104 - Traffic - Fa0/7','/172_16_42_104_traffic_in_152.rrd',NULL,'on',NULL,300,NULL); +INSERT INTO `data_template_data` VALUES (215,41,153,41,2,NULL,'|host_description| - Traffic - |query_ifName|','172.16.42.104 - Traffic - Fa0/8','/172_16_42_104_traffic_in_153.rrd',NULL,'on',NULL,300,NULL); +INSERT INTO `data_template_data` VALUES (216,41,154,41,2,NULL,'|host_description| - Traffic - |query_ifName|','172.16.42.104 - Traffic - Fa0/9','/172_16_42_104_traffic_in_154.rrd',NULL,'on',NULL,300,NULL); +INSERT INTO `data_template_data` VALUES (217,41,155,41,2,NULL,'|host_description| - Traffic - |query_ifName|','172.16.42.104 - Traffic - Fa0/10','/172_16_42_104_traffic_in_155.rrd',NULL,'on',NULL,300,NULL); +INSERT INTO `data_template_data` VALUES (218,41,156,41,2,NULL,'|host_description| - Traffic - |query_ifName|','172.16.42.104 - Traffic - Fa0/11','/172_16_42_104_traffic_in_156.rrd',NULL,'on',NULL,300,NULL); +INSERT INTO `data_template_data` VALUES (219,41,157,41,2,NULL,'|host_description| - Traffic - |query_ifName|','172.16.42.104 - Traffic - Fa0/12','/172_16_42_104_traffic_in_157.rrd',NULL,'on',NULL,300,NULL); +INSERT INTO `data_template_data` VALUES (220,41,158,41,2,NULL,'|host_description| - Traffic - |query_ifName|','172.16.42.104 - Traffic - Fa0/13','/172_16_42_104_traffic_in_158.rrd',NULL,'on',NULL,300,NULL); +INSERT INTO `data_template_data` VALUES (221,41,159,41,2,NULL,'|host_description| - Traffic - |query_ifName|','172.16.42.104 - Traffic - Fa0/14','/172_16_42_104_traffic_in_159.rrd',NULL,'on',NULL,300,NULL); +INSERT INTO `data_template_data` VALUES (222,41,160,41,2,NULL,'|host_description| - Traffic - |query_ifName|','172.16.42.104 - Traffic - Fa0/15','/172_16_42_104_traffic_in_160.rrd',NULL,'on',NULL,300,NULL); +INSERT INTO `data_template_data` VALUES (223,41,161,41,2,NULL,'|host_description| - Traffic - |query_ifName|','172.16.42.104 - Traffic - Fa0/16','/172_16_42_104_traffic_in_161.rrd',NULL,'on',NULL,300,NULL); +INSERT INTO `data_template_data` VALUES (224,41,162,41,2,NULL,'|host_description| - Traffic - |query_ifName|','172.16.42.104 - Traffic - Fa0/17','/172_16_42_104_traffic_in_162.rrd',NULL,'on',NULL,300,NULL); +INSERT INTO `data_template_data` VALUES (225,41,163,41,2,NULL,'|host_description| - Traffic - |query_ifName|','172.16.42.104 - Traffic - Fa0/18','/172_16_42_104_traffic_in_163.rrd',NULL,'on',NULL,300,NULL); +INSERT INTO `data_template_data` VALUES (226,41,164,41,2,NULL,'|host_description| - Traffic - |query_ifName|','172.16.42.104 - Traffic - Fa0/19','/172_16_42_104_traffic_in_164.rrd',NULL,'on',NULL,300,NULL); +INSERT INTO `data_template_data` VALUES (227,41,165,41,2,NULL,'|host_description| - Traffic - |query_ifName|','172.16.42.104 - Traffic - Fa0/20','/172_16_42_104_traffic_in_165.rrd',NULL,'on',NULL,300,NULL); +INSERT INTO `data_template_data` VALUES (228,41,166,41,2,NULL,'|host_description| - Traffic - |query_ifName|','172.16.42.104 - Traffic - Fa0/21','/172_16_42_104_traffic_in_166.rrd',NULL,'on',NULL,300,NULL); +INSERT INTO `data_template_data` VALUES (229,41,167,41,2,NULL,'|host_description| - Traffic - |query_ifName|','172.16.42.104 - Traffic - Fa0/22','/172_16_42_104_traffic_in_167.rrd',NULL,'on',NULL,300,NULL); +INSERT INTO `data_template_data` VALUES (230,41,168,41,2,NULL,'|host_description| - Traffic - |query_ifName|','172.16.42.104 - Traffic - Fa0/23','/172_16_42_104_traffic_in_168.rrd',NULL,'on',NULL,300,NULL); +INSERT INTO `data_template_data` VALUES (231,41,169,41,2,NULL,'|host_description| - Traffic - |query_ifName|','172.16.42.104 - Traffic - Fa0/24','/172_16_42_104_traffic_in_169.rrd',NULL,'on',NULL,300,NULL); +INSERT INTO `data_template_data` VALUES (232,41,170,41,2,NULL,'|host_description| - Traffic - |query_ifName|','172.16.42.104 - Traffic - Gi0/1','/172_16_42_104_traffic_in_170.rrd',NULL,'on',NULL,300,NULL); +INSERT INTO `data_template_data` VALUES (233,41,171,41,2,NULL,'|host_description| - Traffic - |query_ifName|','172.16.42.104 - Traffic - Gi0/2','/172_16_42_104_traffic_in_171.rrd',NULL,'on',NULL,300,NULL); +INSERT INTO `data_template_data` VALUES (234,41,172,41,2,NULL,'|host_description| - Traffic - |query_ifName|','172.16.42.104 - Traffic - Nu0','/172_16_42_104_traffic_in_172.rrd',NULL,'on',NULL,300,NULL); +INSERT INTO `data_template_data` VALUES (235,41,173,41,2,NULL,'|host_description| - Traffic - |query_ifName|','172.16.42.104 - Traffic - Vl1','/172_16_42_104_traffic_in_173.rrd',NULL,'on',NULL,300,NULL); +INSERT INTO `data_template_data` VALUES (236,41,174,41,2,NULL,'|host_description| - Traffic - |query_ifIP| - |query_ifName|','172.16.42.104 - Traffic - 172.16.42.104 - Vl42','/172_16_42_104_traffic_in_174.rrd',NULL,'on',NULL,300,NULL); +INSERT INTO `data_template_data` VALUES (237,27,175,27,1,NULL,'|host_description| - 5 Minute CPU','172.16.42.142 - 5 Minute CPU','/172_16_42_142_5min_cpu_175.rrd',NULL,'on',NULL,300,NULL); +INSERT INTO `data_template_data` VALUES (238,41,176,41,2,NULL,'|host_description| - Traffic - |query_ifIP| - |query_ifName|','172.16.42.142 - Traffic - 172.16.42.142 - sc0','/172_16_42_142_traffic_in_176.rrd',NULL,'on',NULL,300,NULL); +INSERT INTO `data_template_data` VALUES (239,41,177,41,2,NULL,'|host_description| - Traffic - |query_ifName|','172.16.42.142 - Traffic - sl0','/172_16_42_142_traffic_in_177.rrd',NULL,'on',NULL,300,NULL); +INSERT INTO `data_template_data` VALUES (240,41,178,41,2,NULL,'|host_description| - Traffic - |query_ifIP| - |query_ifName|','172.16.42.142 - Traffic - 192.168.0.2 - me1','/172_16_42_142_traffic_in_178.rrd',NULL,'on',NULL,300,NULL); +INSERT INTO `data_template_data` VALUES (241,41,179,41,2,NULL,'|host_description| - Traffic - |query_ifName|','172.16.42.142 - Traffic - VLAN-1','/172_16_42_142_traffic_in_179.rrd',NULL,'on',NULL,300,NULL); +INSERT INTO `data_template_data` VALUES (242,41,180,41,2,NULL,'|host_description| - Traffic - |query_ifName|','172.16.42.142 - Traffic - VLAN-1002','/172_16_42_142_traffic_in_180.rrd',NULL,'on',NULL,300,NULL); +INSERT INTO `data_template_data` VALUES (243,41,181,41,2,NULL,'|host_description| - Traffic - |query_ifName|','172.16.42.142 - Traffic - VLAN-1004','/172_16_42_142_traffic_in_181.rrd',NULL,'on',NULL,300,NULL); +INSERT INTO `data_template_data` VALUES (244,41,182,41,2,NULL,'|host_description| - Traffic - |query_ifName|','172.16.42.142 - Traffic - VLAN-1005','/172_16_42_142_traffic_in_182.rrd',NULL,'on',NULL,300,NULL); +INSERT INTO `data_template_data` VALUES (245,41,183,41,2,NULL,'|host_description| - Traffic - |query_ifName|','172.16.42.142 - Traffic - VLAN-1003','/172_16_42_142_traffic_in_183.rrd',NULL,'on',NULL,300,NULL); +INSERT INTO `data_template_data` VALUES (246,41,184,41,2,NULL,'|host_description| - Traffic - |query_ifName|','172.16.42.142 - Traffic - 2/1','/172_16_42_142_traffic_in_184.rrd',NULL,'on',NULL,300,NULL); +INSERT INTO `data_template_data` VALUES (247,41,185,41,2,NULL,'|host_description| - Traffic - |query_ifName|','172.16.42.142 - Traffic - 2/2','/172_16_42_142_traffic_in_185.rrd',NULL,'on',NULL,300,NULL); +INSERT INTO `data_template_data` VALUES (248,41,186,41,2,NULL,'|host_description| - Traffic - |query_ifName|','172.16.42.142 - Traffic - 2/3','/172_16_42_142_traffic_in_186.rrd',NULL,'on',NULL,300,NULL); +INSERT INTO `data_template_data` VALUES (249,41,187,41,2,NULL,'|host_description| - Traffic - |query_ifName|','172.16.42.142 - Traffic - 2/4','/172_16_42_142_traffic_in_187.rrd',NULL,'on',NULL,300,NULL); +INSERT INTO `data_template_data` VALUES (250,41,188,41,2,NULL,'|host_description| - Traffic - |query_ifName|','172.16.42.142 - Traffic - 2/5','/172_16_42_142_traffic_in_188.rrd',NULL,'on',NULL,300,NULL); +INSERT INTO `data_template_data` VALUES (251,41,189,41,2,NULL,'|host_description| - Traffic - |query_ifName|','172.16.42.142 - Traffic - 2/6','/172_16_42_142_traffic_in_189.rrd',NULL,'on',NULL,300,NULL); +INSERT INTO `data_template_data` VALUES (252,41,190,41,2,NULL,'|host_description| - Traffic - |query_ifName|','172.16.42.142 - Traffic - 2/7','/172_16_42_142_traffic_in_190.rrd',NULL,'on',NULL,300,NULL); +INSERT INTO `data_template_data` VALUES (253,41,191,41,2,NULL,'|host_description| - Traffic - |query_ifName|','172.16.42.142 - Traffic - 2/8','/172_16_42_142_traffic_in_191.rrd',NULL,'on',NULL,300,NULL); +INSERT INTO `data_template_data` VALUES (254,41,192,41,2,NULL,'|host_description| - Traffic - |query_ifName|','172.16.42.142 - Traffic - 2/9','/172_16_42_142_traffic_in_192.rrd',NULL,'on',NULL,300,NULL); +INSERT INTO `data_template_data` VALUES (255,41,193,41,2,NULL,'|host_description| - Traffic - |query_ifName|','172.16.42.142 - Traffic - 2/10','/172_16_42_142_traffic_in_193.rrd',NULL,'on',NULL,300,NULL); +INSERT INTO `data_template_data` VALUES (256,41,194,41,2,NULL,'|host_description| - Traffic - |query_ifName|','172.16.42.142 - Traffic - 2/11','/172_16_42_142_traffic_in_194.rrd',NULL,'on',NULL,300,NULL); +INSERT INTO `data_template_data` VALUES (257,41,195,41,2,NULL,'|host_description| - Traffic - |query_ifName|','172.16.42.142 - Traffic - 2/12','/172_16_42_142_traffic_in_195.rrd',NULL,'on',NULL,300,NULL); +INSERT INTO `data_template_data` VALUES (258,41,196,41,2,NULL,'|host_description| - Traffic - |query_ifName|','172.16.42.142 - Traffic - 2/13','/172_16_42_142_traffic_in_196.rrd',NULL,'on',NULL,300,NULL); +INSERT INTO `data_template_data` VALUES (259,41,197,41,2,NULL,'|host_description| - Traffic - |query_ifName|','172.16.42.142 - Traffic - 2/14','/172_16_42_142_traffic_in_197.rrd',NULL,'on',NULL,300,NULL); +INSERT INTO `data_template_data` VALUES (260,41,198,41,2,NULL,'|host_description| - Traffic - |query_ifName|','172.16.42.142 - Traffic - 2/15','/172_16_42_142_traffic_in_198.rrd',NULL,'on',NULL,300,NULL); +INSERT INTO `data_template_data` VALUES (261,41,199,41,2,NULL,'|host_description| - Traffic - |query_ifName|','172.16.42.142 - Traffic - 2/16','/172_16_42_142_traffic_in_199.rrd',NULL,'on',NULL,300,NULL); +INSERT INTO `data_template_data` VALUES (262,41,200,41,2,NULL,'|host_description| - Traffic - |query_ifName|','172.16.42.142 - Traffic - 2/17','/172_16_42_142_traffic_in_200.rrd',NULL,'on',NULL,300,NULL); +INSERT INTO `data_template_data` VALUES (263,41,201,41,2,NULL,'|host_description| - Traffic - |query_ifName|','172.16.42.142 - Traffic - 2/18','/172_16_42_142_traffic_in_201.rrd',NULL,'on',NULL,300,NULL); +INSERT INTO `data_template_data` VALUES (264,41,202,41,2,NULL,'|host_description| - Traffic - |query_ifName|','172.16.42.142 - Traffic - 2/19','/172_16_42_142_traffic_in_202.rrd',NULL,'on',NULL,300,NULL); +INSERT INTO `data_template_data` VALUES (265,41,203,41,2,NULL,'|host_description| - Traffic - |query_ifName|','172.16.42.142 - Traffic - 2/20','/172_16_42_142_traffic_in_203.rrd',NULL,'on',NULL,300,NULL); +INSERT INTO `data_template_data` VALUES (266,41,204,41,2,NULL,'|host_description| - Traffic - |query_ifName|','172.16.42.142 - Traffic - 2/21','/172_16_42_142_traffic_in_204.rrd',NULL,'on',NULL,300,NULL); +INSERT INTO `data_template_data` VALUES (267,41,205,41,2,NULL,'|host_description| - Traffic - |query_ifName|','172.16.42.142 - Traffic - 2/22','/172_16_42_142_traffic_in_205.rrd',NULL,'on',NULL,300,NULL); +INSERT INTO `data_template_data` VALUES (268,41,206,41,2,NULL,'|host_description| - Traffic - |query_ifName|','172.16.42.142 - Traffic - 2/23','/172_16_42_142_traffic_in_206.rrd',NULL,'on',NULL,300,NULL); +INSERT INTO `data_template_data` VALUES (269,41,207,41,2,NULL,'|host_description| - Traffic - |query_ifName|','172.16.42.142 - Traffic - 2/24','/172_16_42_142_traffic_in_207.rrd',NULL,'on',NULL,300,NULL); +INSERT INTO `data_template_data` VALUES (270,41,208,41,2,NULL,'|host_description| - Traffic - |query_ifName|','172.16.42.142 - Traffic - 2/25','/172_16_42_142_traffic_in_208.rrd',NULL,'on',NULL,300,NULL); +INSERT INTO `data_template_data` VALUES (271,41,209,41,2,NULL,'|host_description| - Traffic - |query_ifName|','172.16.42.142 - Traffic - 2/26','/172_16_42_142_traffic_in_209.rrd',NULL,'on',NULL,300,NULL); +INSERT INTO `data_template_data` VALUES (272,41,210,41,2,NULL,'|host_description| - Traffic - |query_ifName|','172.16.42.142 - Traffic - 2/27','/172_16_42_142_traffic_in_210.rrd',NULL,'on',NULL,300,NULL); +INSERT INTO `data_template_data` VALUES (273,41,211,41,2,NULL,'|host_description| - Traffic - |query_ifName|','172.16.42.142 - Traffic - 2/28','/172_16_42_142_traffic_in_211.rrd',NULL,'on',NULL,300,NULL); +INSERT INTO `data_template_data` VALUES (274,41,212,41,2,NULL,'|host_description| - Traffic - |query_ifName|','172.16.42.142 - Traffic - 2/29','/172_16_42_142_traffic_in_212.rrd',NULL,'on',NULL,300,NULL); +INSERT INTO `data_template_data` VALUES (275,41,213,41,2,NULL,'|host_description| - Traffic - |query_ifName|','172.16.42.142 - Traffic - 2/30','/172_16_42_142_traffic_in_213.rrd',NULL,'on',NULL,300,NULL); +INSERT INTO `data_template_data` VALUES (276,41,214,41,2,NULL,'|host_description| - Traffic - |query_ifName|','172.16.42.142 - Traffic - 2/31','/172_16_42_142_traffic_in_214.rrd',NULL,'on',NULL,300,NULL); +INSERT INTO `data_template_data` VALUES (277,41,215,41,2,NULL,'|host_description| - Traffic - |query_ifName|','172.16.42.142 - Traffic - 2/32','/172_16_42_142_traffic_in_215.rrd',NULL,'on',NULL,300,NULL); +INSERT INTO `data_template_data` VALUES (278,41,216,41,2,NULL,'|host_description| - Traffic - |query_ifName|','172.16.42.142 - Traffic - 2/33','/172_16_42_142_traffic_in_216.rrd',NULL,'on',NULL,300,NULL); +INSERT INTO `data_template_data` VALUES (279,41,217,41,2,NULL,'|host_description| - Traffic - |query_ifName|','172.16.42.142 - Traffic - 2/34','/172_16_42_142_traffic_in_217.rrd',NULL,'on',NULL,300,NULL); +INSERT INTO `data_template_data` VALUES (280,41,218,41,2,NULL,'|host_description| - Traffic - |query_ifName|','172.16.42.142 - Traffic - 2/35','/172_16_42_142_traffic_in_218.rrd',NULL,'on',NULL,300,NULL); +INSERT INTO `data_template_data` VALUES (281,41,219,41,2,NULL,'|host_description| - Traffic - |query_ifName|','172.16.42.142 - Traffic - 2/36','/172_16_42_142_traffic_in_219.rrd',NULL,'on',NULL,300,NULL); +INSERT INTO `data_template_data` VALUES (282,41,220,41,2,NULL,'|host_description| - Traffic - |query_ifName|','172.16.42.142 - Traffic - 2/37','/172_16_42_142_traffic_in_220.rrd',NULL,'on',NULL,300,NULL); +INSERT INTO `data_template_data` VALUES (283,41,221,41,2,NULL,'|host_description| - Traffic - |query_ifName|','172.16.42.142 - Traffic - 2/38','/172_16_42_142_traffic_in_221.rrd',NULL,'on',NULL,300,NULL); +INSERT INTO `data_template_data` VALUES (284,41,222,41,2,NULL,'|host_description| - Traffic - |query_ifName|','172.16.42.142 - Traffic - 2/39','/172_16_42_142_traffic_in_222.rrd',NULL,'on',NULL,300,NULL); +INSERT INTO `data_template_data` VALUES (285,41,223,41,2,NULL,'|host_description| - Traffic - |query_ifName|','172.16.42.142 - Traffic - 2/40','/172_16_42_142_traffic_in_223.rrd',NULL,'on',NULL,300,NULL); +INSERT INTO `data_template_data` VALUES (286,41,224,41,2,NULL,'|host_description| - Traffic - |query_ifName|','172.16.42.142 - Traffic - 2/41','/172_16_42_142_traffic_in_224.rrd',NULL,'on',NULL,300,NULL); +INSERT INTO `data_template_data` VALUES (287,41,225,41,2,NULL,'|host_description| - Traffic - |query_ifName|','172.16.42.142 - Traffic - 2/42','/172_16_42_142_traffic_in_225.rrd',NULL,'on',NULL,300,NULL); +INSERT INTO `data_template_data` VALUES (288,41,226,41,2,NULL,'|host_description| - Traffic - |query_ifName|','172.16.42.142 - Traffic - 2/43','/172_16_42_142_traffic_in_226.rrd',NULL,'on',NULL,300,NULL); +INSERT INTO `data_template_data` VALUES (289,41,227,41,2,NULL,'|host_description| - Traffic - |query_ifName|','172.16.42.142 - Traffic - 2/44','/172_16_42_142_traffic_in_227.rrd',NULL,'on',NULL,300,NULL); +INSERT INTO `data_template_data` VALUES (290,41,228,41,2,NULL,'|host_description| - Traffic - |query_ifName|','172.16.42.142 - Traffic - 2/45','/172_16_42_142_traffic_in_228.rrd',NULL,'on',NULL,300,NULL); +INSERT INTO `data_template_data` VALUES (291,41,229,41,2,NULL,'|host_description| - Traffic - |query_ifName|','172.16.42.142 - Traffic - 2/46','/172_16_42_142_traffic_in_229.rrd',NULL,'on',NULL,300,NULL); +INSERT INTO `data_template_data` VALUES (292,41,230,41,2,NULL,'|host_description| - Traffic - |query_ifName|','172.16.42.142 - Traffic - 2/47','/172_16_42_142_traffic_in_230.rrd',NULL,'on',NULL,300,NULL); +INSERT INTO `data_template_data` VALUES (293,41,231,41,2,NULL,'|host_description| - Traffic - |query_ifName|','172.16.42.142 - Traffic - 2/48','/172_16_42_142_traffic_in_231.rrd',NULL,'on',NULL,300,NULL); +INSERT INTO `data_template_data` VALUES (294,41,232,41,2,NULL,'|host_description| - Traffic - |query_ifName|','172.16.42.142 - Traffic - 2/49','/172_16_42_142_traffic_in_232.rrd',NULL,'on',NULL,300,NULL); +INSERT INTO `data_template_data` VALUES (295,41,233,41,2,NULL,'|host_description| - Traffic - |query_ifName|','172.16.42.142 - Traffic - 2/50','/172_16_42_142_traffic_in_233.rrd',NULL,'on',NULL,300,NULL); +INSERT INTO `data_template_data` VALUES (296,41,234,41,2,NULL,'|host_description| - Traffic - |query_ifName|','172.16.42.142 - Traffic - VLAN-42','/172_16_42_142_traffic_in_234.rrd',NULL,'on',NULL,300,NULL); +INSERT INTO `data_template_data` VALUES (297,41,235,41,2,NULL,'|host_description| - Traffic - |query_ifName|','172.16.42.142 - Traffic - VLAN-23','/172_16_42_142_traffic_in_235.rrd',NULL,'on',NULL,300,NULL); +INSERT INTO `data_template_data` VALUES (298,41,236,41,2,NULL,'|host_description| - Traffic - |query_ifName|','172.16.42.142 - Traffic - VLAN-22','/172_16_42_142_traffic_in_236.rrd',NULL,'on',NULL,300,NULL); +INSERT INTO `data_template_data` VALUES (299,41,237,41,2,NULL,'|host_description| - Traffic - |query_ifName|','172.16.42.142 - Traffic - VLAN-24','/172_16_42_142_traffic_in_237.rrd',NULL,'on',NULL,300,NULL); +INSERT INTO `data_template_data` VALUES (300,41,238,41,2,NULL,'|host_description| - Traffic - |query_ifName|','172.16.42.142 - Traffic - VLAN-25','/172_16_42_142_traffic_in_238.rrd',NULL,'on',NULL,300,NULL); +INSERT INTO `data_template_data` VALUES (301,41,239,41,2,NULL,'|host_description| - Traffic - |query_ifName|','172.16.42.142 - Traffic - VLAN-16','/172_16_42_142_traffic_in_239.rrd',NULL,'on',NULL,300,NULL); +INSERT INTO `data_template_data` VALUES (302,41,240,41,2,NULL,'|host_description| - Traffic - |query_ifName|','172.16.42.142 - Traffic - FEC-2/13-14','/172_16_42_142_traffic_in_240.rrd',NULL,'on',NULL,300,NULL); +INSERT INTO `data_template_data` VALUES (320,41,258,41,2,NULL,'|host_description| - Traffic - |query_ifName|','172.16.42.105 - Traffic - VL1','/172_16_42_105_traffic_in_258.rrd',NULL,'on',NULL,300,NULL); +INSERT INTO `data_template_data` VALUES (321,41,259,41,2,NULL,'|host_description| - Traffic - |query_ifName|','172.16.42.105 - Traffic - Fa0/1','/172_16_42_105_traffic_in_259.rrd',NULL,'on',NULL,300,NULL); +INSERT INTO `data_template_data` VALUES (322,41,260,41,2,NULL,'|host_description| - Traffic - |query_ifName|','172.16.42.105 - Traffic - Fa0/2','/172_16_42_105_traffic_in_260.rrd',NULL,'on',NULL,300,NULL); +INSERT INTO `data_template_data` VALUES (323,41,261,41,2,NULL,'|host_description| - Traffic - |query_ifName|','172.16.42.105 - Traffic - Fa0/3','/172_16_42_105_traffic_in_261.rrd',NULL,'on',NULL,300,NULL); +INSERT INTO `data_template_data` VALUES (324,41,262,41,2,NULL,'|host_description| - Traffic - |query_ifName|','172.16.42.105 - Traffic - Fa0/4','/172_16_42_105_traffic_in_262.rrd',NULL,'on',NULL,300,NULL); +INSERT INTO `data_template_data` VALUES (325,41,263,41,2,NULL,'|host_description| - Traffic - |query_ifName|','172.16.42.105 - Traffic - Fa0/5','/172_16_42_105_traffic_in_263.rrd',NULL,'on',NULL,300,NULL); +INSERT INTO `data_template_data` VALUES (326,41,264,41,2,NULL,'|host_description| - Traffic - |query_ifName|','172.16.42.105 - Traffic - Fa0/6','/172_16_42_105_traffic_in_264.rrd',NULL,'on',NULL,300,NULL); +INSERT INTO `data_template_data` VALUES (327,41,265,41,2,NULL,'|host_description| - Traffic - |query_ifName|','172.16.42.105 - Traffic - Fa0/7','/172_16_42_105_traffic_in_265.rrd',NULL,'on',NULL,300,NULL); +INSERT INTO `data_template_data` VALUES (328,41,266,41,2,NULL,'|host_description| - Traffic - |query_ifName|','172.16.42.105 - Traffic - Fa0/8','/172_16_42_105_traffic_in_266.rrd',NULL,'on',NULL,300,NULL); +INSERT INTO `data_template_data` VALUES (329,41,267,41,2,NULL,'|host_description| - Traffic - |query_ifName|','172.16.42.105 - Traffic - Fa0/9','/172_16_42_105_traffic_in_267.rrd',NULL,'on',NULL,300,NULL); +INSERT INTO `data_template_data` VALUES (330,41,268,41,2,NULL,'|host_description| - Traffic - |query_ifName|','172.16.42.105 - Traffic - Fa0/10','/172_16_42_105_traffic_in_268.rrd',NULL,'on',NULL,300,NULL); +INSERT INTO `data_template_data` VALUES (331,41,269,41,2,NULL,'|host_description| - Traffic - |query_ifName|','172.16.42.105 - Traffic - Fa0/11','/172_16_42_105_traffic_in_269.rrd',NULL,'on',NULL,300,NULL); +INSERT INTO `data_template_data` VALUES (332,41,270,41,2,NULL,'|host_description| - Traffic - |query_ifName|','172.16.42.105 - Traffic - Fa0/12','/172_16_42_105_traffic_in_270.rrd',NULL,'on',NULL,300,NULL); +INSERT INTO `data_template_data` VALUES (333,41,271,41,2,NULL,'|host_description| - Traffic - |query_ifName|','172.16.42.105 - Traffic - Fa0/13','/172_16_42_105_traffic_in_271.rrd',NULL,'on',NULL,300,NULL); +INSERT INTO `data_template_data` VALUES (334,41,272,41,2,NULL,'|host_description| - Traffic - |query_ifName|','172.16.42.105 - Traffic - Fa0/14','/172_16_42_105_traffic_in_272.rrd',NULL,'on',NULL,300,NULL); +INSERT INTO `data_template_data` VALUES (335,41,273,41,2,NULL,'|host_description| - Traffic - |query_ifName|','172.16.42.105 - Traffic - Fa0/15','/172_16_42_105_traffic_in_273.rrd',NULL,'on',NULL,300,NULL); +INSERT INTO `data_template_data` VALUES (336,41,274,41,2,NULL,'|host_description| - Traffic - |query_ifName|','172.16.42.105 - Traffic - Fa0/16','/172_16_42_105_traffic_in_274.rrd',NULL,'on',NULL,300,NULL); +INSERT INTO `data_template_data` VALUES (337,41,275,41,2,NULL,'|host_description| - Traffic - |query_ifName|','172.16.42.105 - Traffic - Fa0/17','/172_16_42_105_traffic_in_275.rrd',NULL,'on',NULL,300,NULL); +INSERT INTO `data_template_data` VALUES (338,41,276,41,2,NULL,'|host_description| - Traffic - |query_ifName|','172.16.42.105 - Traffic - Fa0/18','/172_16_42_105_traffic_in_276.rrd',NULL,'on',NULL,300,NULL); +INSERT INTO `data_template_data` VALUES (339,41,277,41,2,NULL,'|host_description| - Traffic - |query_ifName|','172.16.42.105 - Traffic - Fa0/19','/172_16_42_105_traffic_in_277.rrd',NULL,'on',NULL,300,NULL); +INSERT INTO `data_template_data` VALUES (340,41,278,41,2,NULL,'|host_description| - Traffic - |query_ifName|','172.16.42.105 - Traffic - Fa0/20','/172_16_42_105_traffic_in_278.rrd',NULL,'on',NULL,300,NULL); +INSERT INTO `data_template_data` VALUES (341,41,279,41,2,NULL,'|host_description| - Traffic - |query_ifName|','172.16.42.105 - Traffic - Fa0/21','/172_16_42_105_traffic_in_279.rrd',NULL,'on',NULL,300,NULL); +INSERT INTO `data_template_data` VALUES (342,41,280,41,2,NULL,'|host_description| - Traffic - |query_ifName|','172.16.42.105 - Traffic - Fa0/22','/172_16_42_105_traffic_in_280.rrd',NULL,'on',NULL,300,NULL); +INSERT INTO `data_template_data` VALUES (343,41,281,41,2,NULL,'|host_description| - Traffic - |query_ifName|','172.16.42.105 - Traffic - Fa0/23','/172_16_42_105_traffic_in_281.rrd',NULL,'on',NULL,300,NULL); +INSERT INTO `data_template_data` VALUES (344,41,282,41,2,NULL,'|host_description| - Traffic - |query_ifName|','172.16.42.105 - Traffic - Fa0/24','/172_16_42_105_traffic_in_282.rrd',NULL,'on',NULL,300,NULL); +INSERT INTO `data_template_data` VALUES (345,6,283,6,1,NULL,'|host_description| - CPU Usage - Nice','sinabox packets/s - CPU Usage - Nice','/sinabox_cpu_nice_283.rrd',NULL,'on',NULL,300,NULL); +INSERT INTO `data_template_data` VALUES (346,4,284,4,1,NULL,'|host_description| - CPU Usage - System','sinabox packets/s - CPU Usage - System','/sinabox_cpu_system_284.rrd',NULL,'on',NULL,300,NULL); +INSERT INTO `data_template_data` VALUES (347,5,285,5,1,NULL,'|host_description| - CPU Usage - User','sinabox packets/s - CPU Usage - User','/sinabox_cpu_user_285.rrd',NULL,'on',NULL,300,NULL); +INSERT INTO `data_template_data` VALUES (348,30,286,30,1,NULL,'|host_description| - Load Average - 1 Minute','sinabox packets/s - Load Average - 1 Minute','/sinabox_load_1min_286.rrd',NULL,'on',NULL,300,NULL); +INSERT INTO `data_template_data` VALUES (349,32,287,32,1,NULL,'|host_description| - Load Average - 15 Minute','sinabox packets/s - Load Average - 15 Minute','/sinabox_load_15min_287.rrd',NULL,'on',NULL,300,NULL); +INSERT INTO `data_template_data` VALUES (350,31,288,31,1,NULL,'|host_description| - Load Average - 5 Minute','sinabox packets/s - Load Average - 5 Minute','/sinabox_load_5min_288.rrd',NULL,'on',NULL,300,NULL); +INSERT INTO `data_template_data` VALUES (351,33,289,33,1,NULL,'|host_description| - Memory - Buffers','sinabox packets/s - Memory - Buffers','/sinabox_mem_buffers_289.rrd',NULL,'on',NULL,300,NULL); +INSERT INTO `data_template_data` VALUES (352,68,290,47,1,NULL,'|host_description| - Memory - Cache','sinabox packets/s - Memory - Cache','/sinabox_mem_cache_290.rrd',NULL,'on',NULL,300,NULL); +INSERT INTO `data_template_data` VALUES (353,34,291,34,1,NULL,'|host_description| - Memory - Free','sinabox packets/s - Memory - Free','/sinabox_mem_free_291.rrd',NULL,'on',NULL,300,NULL); +INSERT INTO `data_template_data` VALUES (354,39,292,39,2,NULL,'|host_description| - Unicast Packets - |query_ifIP|/|query_ifDescr|','sinabox packets/s - Unicast Packets - 127.0.0.1/lo','/sinabox_unicast_in_292.rrd',NULL,'on',NULL,300,NULL); +INSERT INTO `data_template_data` VALUES (355,39,293,39,2,NULL,'|host_description| - Unicast Packets - |query_ifDescr|','sinabox packets/s - Unicast Packets - dummy0','/sinabox_unicast_in_293.rrd',NULL,'on',NULL,300,NULL); +INSERT INTO `data_template_data` VALUES (356,39,294,39,2,NULL,'|host_description| - Unicast Packets - |query_ifDescr|','sinabox packets/s - Unicast Packets - eth0','/sinabox_unicast_in_294.rrd',NULL,'on',NULL,300,NULL); +INSERT INTO `data_template_data` VALUES (357,39,295,39,2,NULL,'|host_description| - Unicast Packets - |query_ifDescr|','sinabox packets/s - Unicast Packets - eth1','/sinabox_unicast_in_295.rrd',NULL,'on',NULL,300,NULL); +INSERT INTO `data_template_data` VALUES (358,39,296,39,2,NULL,'|host_description| - Unicast Packets - |query_ifIP|/|query_ifDescr|','sinabox packets/s - Unicast Packets - 172.16.0.1/bond0','/sinabox_unicast_in_296.rrd',NULL,'on',NULL,300,NULL); +INSERT INTO `data_template_data` VALUES (359,39,297,39,2,NULL,'|host_description| - Unicast Packets - |query_ifIP|/|query_ifDescr|','sinabox packets/s - Unicast Packets - 172.16.4.1/vlan24','/sinabox_unicast_in_297.rrd',NULL,'on',NULL,300,NULL); +INSERT INTO `data_template_data` VALUES (360,39,298,39,2,NULL,'|host_description| - Unicast Packets - |query_ifIP|/|query_ifDescr|','sinabox packets/s - Unicast Packets - 192.168.178.2/vlan22','/sinabox_unicast_in_298.rrd',NULL,'on',NULL,300,NULL); +INSERT INTO `data_template_data` VALUES (361,39,299,39,2,NULL,'|host_description| - Unicast Packets - |query_ifDescr|','sinabox packets/s - Unicast Packets - vlan42','/sinabox_unicast_in_299.rrd',NULL,'on',NULL,300,NULL); +INSERT INTO `data_template_data` VALUES (362,39,300,39,2,NULL,'|host_description| - Unicast Packets - |query_ifIP|/|query_ifDescr|','sinabox packets/s - Unicast Packets - 172.16.25.1/vlan25','/sinabox_unicast_in_300.rrd',NULL,'on',NULL,300,NULL); +INSERT INTO `data_template_data` VALUES (363,39,301,39,2,NULL,'|host_description| - Unicast Packets - |query_ifIP|/|query_ifDescr|','sinabox packets/s - Unicast Packets - |query_ifIP|/sit0','/sinabox_unicast_in_301.rrd',NULL,'on',NULL,300,NULL); +INSERT INTO `data_template_data` VALUES (364,39,302,39,2,NULL,'|host_description| - Unicast Packets - |query_ifDescr|','sinabox packets/s - Unicast Packets - ppp0','/sinabox_unicast_in_302.rrd',NULL,'on',NULL,300,NULL); +INSERT INTO `data_template_data` VALUES (365,39,303,39,2,NULL,'|host_description| - Unicast Packets - |query_ifDescr|','sinabox packets/s - Unicast Packets - vlan23','/sinabox_unicast_in_303.rrd',NULL,'on',NULL,300,NULL); +INSERT INTO `data_template_data` VALUES (366,39,304,39,2,NULL,'|host_description| - Unicast Packets - |query_ifIP|/|query_ifDescr|','sinabox packets/s - Unicast Packets - 80.171.54.23/chaos_vpn','/sinabox_unicast_in_304.rrd',NULL,'on',NULL,300,NULL); +INSERT INTO `data_template_data` VALUES (367,39,305,39,2,NULL,'|host_description| - Unicast Packets','sinabox packets/s - Unicast Packets','/sinabox_unicast_in_305.rrd',NULL,'on',NULL,300,NULL); +INSERT INTO `data_template_data` VALUES (368,41,306,41,2,NULL,'|host_description| - Traffic - |query_ifDescr|','sinabox - Traffic - tap0','/sinabox_traffic_in_306.rrd',NULL,'on',NULL,300,NULL); +INSERT INTO `data_template_data` VALUES (369,6,307,6,1,NULL,'|host_description| - CPU Usage - Nice','monitor.easterhegg.de - CPU Usage - Nice','/monitor_easterhegg_de_cpu_nice_307.rrd',NULL,'on',NULL,300,NULL); +INSERT INTO `data_template_data` VALUES (370,4,308,4,1,NULL,'|host_description| - CPU Usage - System','monitor.easterhegg.de - CPU Usage - System','/monitor_easterhegg_de_cpu_system_308.rrd',NULL,'on',NULL,300,NULL); +INSERT INTO `data_template_data` VALUES (371,5,309,5,1,NULL,'|host_description| - CPU Usage - User','monitor.easterhegg.de - CPU Usage - User','/monitor_easterhegg_de_cpu_user_309.rrd',NULL,'on',NULL,300,NULL); +INSERT INTO `data_template_data` VALUES (372,33,310,33,1,NULL,'|host_description| - Memory - Buffers','monitor.easterhegg.de - Memory - Buffers','/monitor_easterhegg_de_mem_buffers_310.rrd',NULL,'on',NULL,300,NULL); +INSERT INTO `data_template_data` VALUES (373,68,311,47,1,NULL,'|host_description| - Memory - Cache','monitor.easterhegg.de - Memory - Cache','/monitor_easterhegg_de_mem_cache_311.rrd',NULL,'on',NULL,300,NULL); +INSERT INTO `data_template_data` VALUES (374,34,312,34,1,NULL,'|host_description| - Memory - Free','monitor.easterhegg.de - Memory - Free','/monitor_easterhegg_de_mem_free_312.rrd',NULL,'on',NULL,300,NULL); +INSERT INTO `data_template_data` VALUES (375,41,313,41,2,NULL,'|host_description| - Traffic - |query_ifIP|/|query_ifDescr|','monitor.easterhegg.de - Traffic - 10.10.10.196/eth0','/monitor_easterhegg_de_traffic_in_313.rrd',NULL,'on',NULL,300,NULL); +INSERT INTO `data_template_data` VALUES (376,37,314,37,11,NULL,'|host_description| - Free Space - |query_dskDevice|','monitor.easterhegg.de - Free Space - /dev/hda1','/monitor_easterhegg_de_hdd_free_314.rrd',NULL,'on',NULL,300,NULL); + +-- +-- Table structure for table `data_template_data_rra` +-- + +CREATE TABLE `data_template_data_rra` ( + `data_template_data_id` mediumint(8) unsigned NOT NULL default '0', + `rra_id` mediumint(8) unsigned NOT NULL default '0', + PRIMARY KEY (`data_template_data_id`,`rra_id`), + KEY `data_template_data_id` (`data_template_data_id`) +) TYPE=MyISAM; + +-- +-- Dumping data for table `data_template_data_rra` +-- + +INSERT INTO `data_template_data_rra` VALUES (3,1); +INSERT INTO `data_template_data_rra` VALUES (3,2); +INSERT INTO `data_template_data_rra` VALUES (3,3); +INSERT INTO `data_template_data_rra` VALUES (3,4); +INSERT INTO `data_template_data_rra` VALUES (4,1); +INSERT INTO `data_template_data_rra` VALUES (4,2); +INSERT INTO `data_template_data_rra` VALUES (4,3); +INSERT INTO `data_template_data_rra` VALUES (4,4); +INSERT INTO `data_template_data_rra` VALUES (5,1); +INSERT INTO `data_template_data_rra` VALUES (5,2); +INSERT INTO `data_template_data_rra` VALUES (5,3); +INSERT INTO `data_template_data_rra` VALUES (5,4); +INSERT INTO `data_template_data_rra` VALUES (6,1); +INSERT INTO `data_template_data_rra` VALUES (6,2); +INSERT INTO `data_template_data_rra` VALUES (6,3); +INSERT INTO `data_template_data_rra` VALUES (6,4); +INSERT INTO `data_template_data_rra` VALUES (7,1); +INSERT INTO `data_template_data_rra` VALUES (7,2); +INSERT INTO `data_template_data_rra` VALUES (7,3); +INSERT INTO `data_template_data_rra` VALUES (7,4); +INSERT INTO `data_template_data_rra` VALUES (8,1); +INSERT INTO `data_template_data_rra` VALUES (8,2); +INSERT INTO `data_template_data_rra` VALUES (8,3); +INSERT INTO `data_template_data_rra` VALUES (8,4); +INSERT INTO `data_template_data_rra` VALUES (9,1); +INSERT INTO `data_template_data_rra` VALUES (9,2); +INSERT INTO `data_template_data_rra` VALUES (9,3); +INSERT INTO `data_template_data_rra` VALUES (9,4); +INSERT INTO `data_template_data_rra` VALUES (10,1); +INSERT INTO `data_template_data_rra` VALUES (10,2); +INSERT INTO `data_template_data_rra` VALUES (10,3); +INSERT INTO `data_template_data_rra` VALUES (10,4); +INSERT INTO `data_template_data_rra` VALUES (11,1); +INSERT INTO `data_template_data_rra` VALUES (11,2); +INSERT INTO `data_template_data_rra` VALUES (11,3); +INSERT INTO `data_template_data_rra` VALUES (11,4); +INSERT INTO `data_template_data_rra` VALUES (13,1); +INSERT INTO `data_template_data_rra` VALUES (13,2); +INSERT INTO `data_template_data_rra` VALUES (13,3); +INSERT INTO `data_template_data_rra` VALUES (13,4); +INSERT INTO `data_template_data_rra` VALUES (15,1); +INSERT INTO `data_template_data_rra` VALUES (15,2); +INSERT INTO `data_template_data_rra` VALUES (15,3); +INSERT INTO `data_template_data_rra` VALUES (15,4); +INSERT INTO `data_template_data_rra` VALUES (16,1); +INSERT INTO `data_template_data_rra` VALUES (16,2); +INSERT INTO `data_template_data_rra` VALUES (16,3); +INSERT INTO `data_template_data_rra` VALUES (16,4); +INSERT INTO `data_template_data_rra` VALUES (17,1); +INSERT INTO `data_template_data_rra` VALUES (17,2); +INSERT INTO `data_template_data_rra` VALUES (17,3); +INSERT INTO `data_template_data_rra` VALUES (17,4); +INSERT INTO `data_template_data_rra` VALUES (18,1); +INSERT INTO `data_template_data_rra` VALUES (18,2); +INSERT INTO `data_template_data_rra` VALUES (18,3); +INSERT INTO `data_template_data_rra` VALUES (18,4); +INSERT INTO `data_template_data_rra` VALUES (19,1); +INSERT INTO `data_template_data_rra` VALUES (19,2); +INSERT INTO `data_template_data_rra` VALUES (19,3); +INSERT INTO `data_template_data_rra` VALUES (19,4); +INSERT INTO `data_template_data_rra` VALUES (20,1); +INSERT INTO `data_template_data_rra` VALUES (20,2); +INSERT INTO `data_template_data_rra` VALUES (20,3); +INSERT INTO `data_template_data_rra` VALUES (20,4); +INSERT INTO `data_template_data_rra` VALUES (22,1); +INSERT INTO `data_template_data_rra` VALUES (22,2); +INSERT INTO `data_template_data_rra` VALUES (22,3); +INSERT INTO `data_template_data_rra` VALUES (22,4); +INSERT INTO `data_template_data_rra` VALUES (23,1); +INSERT INTO `data_template_data_rra` VALUES (23,2); +INSERT INTO `data_template_data_rra` VALUES (23,3); +INSERT INTO `data_template_data_rra` VALUES (23,4); +INSERT INTO `data_template_data_rra` VALUES (24,1); +INSERT INTO `data_template_data_rra` VALUES (24,2); +INSERT INTO `data_template_data_rra` VALUES (24,3); +INSERT INTO `data_template_data_rra` VALUES (24,4); +INSERT INTO `data_template_data_rra` VALUES (25,1); +INSERT INTO `data_template_data_rra` VALUES (25,2); +INSERT INTO `data_template_data_rra` VALUES (25,3); +INSERT INTO `data_template_data_rra` VALUES (25,4); +INSERT INTO `data_template_data_rra` VALUES (26,1); +INSERT INTO `data_template_data_rra` VALUES (26,2); +INSERT INTO `data_template_data_rra` VALUES (26,3); +INSERT INTO `data_template_data_rra` VALUES (26,4); +INSERT INTO `data_template_data_rra` VALUES (27,1); +INSERT INTO `data_template_data_rra` VALUES (27,2); +INSERT INTO `data_template_data_rra` VALUES (27,3); +INSERT INTO `data_template_data_rra` VALUES (27,4); +INSERT INTO `data_template_data_rra` VALUES (30,1); +INSERT INTO `data_template_data_rra` VALUES (30,2); +INSERT INTO `data_template_data_rra` VALUES (30,3); +INSERT INTO `data_template_data_rra` VALUES (30,4); +INSERT INTO `data_template_data_rra` VALUES (31,1); +INSERT INTO `data_template_data_rra` VALUES (31,2); +INSERT INTO `data_template_data_rra` VALUES (31,3); +INSERT INTO `data_template_data_rra` VALUES (31,4); +INSERT INTO `data_template_data_rra` VALUES (32,1); +INSERT INTO `data_template_data_rra` VALUES (32,2); +INSERT INTO `data_template_data_rra` VALUES (32,3); +INSERT INTO `data_template_data_rra` VALUES (32,4); +INSERT INTO `data_template_data_rra` VALUES (33,1); +INSERT INTO `data_template_data_rra` VALUES (33,2); +INSERT INTO `data_template_data_rra` VALUES (33,3); +INSERT INTO `data_template_data_rra` VALUES (33,4); +INSERT INTO `data_template_data_rra` VALUES (34,1); +INSERT INTO `data_template_data_rra` VALUES (34,2); +INSERT INTO `data_template_data_rra` VALUES (34,3); +INSERT INTO `data_template_data_rra` VALUES (34,4); +INSERT INTO `data_template_data_rra` VALUES (35,1); +INSERT INTO `data_template_data_rra` VALUES (35,2); +INSERT INTO `data_template_data_rra` VALUES (35,3); +INSERT INTO `data_template_data_rra` VALUES (35,4); +INSERT INTO `data_template_data_rra` VALUES (36,1); +INSERT INTO `data_template_data_rra` VALUES (36,2); +INSERT INTO `data_template_data_rra` VALUES (36,3); +INSERT INTO `data_template_data_rra` VALUES (36,4); +INSERT INTO `data_template_data_rra` VALUES (37,1); +INSERT INTO `data_template_data_rra` VALUES (37,2); +INSERT INTO `data_template_data_rra` VALUES (37,3); +INSERT INTO `data_template_data_rra` VALUES (37,4); +INSERT INTO `data_template_data_rra` VALUES (38,1); +INSERT INTO `data_template_data_rra` VALUES (38,2); +INSERT INTO `data_template_data_rra` VALUES (38,3); +INSERT INTO `data_template_data_rra` VALUES (38,4); +INSERT INTO `data_template_data_rra` VALUES (39,1); +INSERT INTO `data_template_data_rra` VALUES (39,2); +INSERT INTO `data_template_data_rra` VALUES (39,3); +INSERT INTO `data_template_data_rra` VALUES (39,4); +INSERT INTO `data_template_data_rra` VALUES (40,1); +INSERT INTO `data_template_data_rra` VALUES (40,2); +INSERT INTO `data_template_data_rra` VALUES (40,3); +INSERT INTO `data_template_data_rra` VALUES (40,4); +INSERT INTO `data_template_data_rra` VALUES (41,1); +INSERT INTO `data_template_data_rra` VALUES (41,2); +INSERT INTO `data_template_data_rra` VALUES (41,3); +INSERT INTO `data_template_data_rra` VALUES (41,4); +INSERT INTO `data_template_data_rra` VALUES (55,1); +INSERT INTO `data_template_data_rra` VALUES (55,2); +INSERT INTO `data_template_data_rra` VALUES (55,3); +INSERT INTO `data_template_data_rra` VALUES (55,4); +INSERT INTO `data_template_data_rra` VALUES (56,1); +INSERT INTO `data_template_data_rra` VALUES (56,2); +INSERT INTO `data_template_data_rra` VALUES (56,3); +INSERT INTO `data_template_data_rra` VALUES (56,4); +INSERT INTO `data_template_data_rra` VALUES (57,1); +INSERT INTO `data_template_data_rra` VALUES (57,2); +INSERT INTO `data_template_data_rra` VALUES (57,3); +INSERT INTO `data_template_data_rra` VALUES (57,4); +INSERT INTO `data_template_data_rra` VALUES (58,1); +INSERT INTO `data_template_data_rra` VALUES (58,2); +INSERT INTO `data_template_data_rra` VALUES (58,3); +INSERT INTO `data_template_data_rra` VALUES (58,4); +INSERT INTO `data_template_data_rra` VALUES (59,1); +INSERT INTO `data_template_data_rra` VALUES (59,2); +INSERT INTO `data_template_data_rra` VALUES (59,3); +INSERT INTO `data_template_data_rra` VALUES (59,4); +INSERT INTO `data_template_data_rra` VALUES (62,1); +INSERT INTO `data_template_data_rra` VALUES (62,2); +INSERT INTO `data_template_data_rra` VALUES (62,3); +INSERT INTO `data_template_data_rra` VALUES (62,4); +INSERT INTO `data_template_data_rra` VALUES (63,1); +INSERT INTO `data_template_data_rra` VALUES (63,2); +INSERT INTO `data_template_data_rra` VALUES (63,3); +INSERT INTO `data_template_data_rra` VALUES (63,4); +INSERT INTO `data_template_data_rra` VALUES (64,1); +INSERT INTO `data_template_data_rra` VALUES (64,2); +INSERT INTO `data_template_data_rra` VALUES (64,3); +INSERT INTO `data_template_data_rra` VALUES (64,4); +INSERT INTO `data_template_data_rra` VALUES (65,1); +INSERT INTO `data_template_data_rra` VALUES (65,2); +INSERT INTO `data_template_data_rra` VALUES (65,3); +INSERT INTO `data_template_data_rra` VALUES (65,4); +INSERT INTO `data_template_data_rra` VALUES (66,1); +INSERT INTO `data_template_data_rra` VALUES (66,2); +INSERT INTO `data_template_data_rra` VALUES (66,3); +INSERT INTO `data_template_data_rra` VALUES (66,4); +INSERT INTO `data_template_data_rra` VALUES (68,1); +INSERT INTO `data_template_data_rra` VALUES (68,2); +INSERT INTO `data_template_data_rra` VALUES (68,3); +INSERT INTO `data_template_data_rra` VALUES (68,4); +INSERT INTO `data_template_data_rra` VALUES (69,1); +INSERT INTO `data_template_data_rra` VALUES (69,2); +INSERT INTO `data_template_data_rra` VALUES (69,3); +INSERT INTO `data_template_data_rra` VALUES (69,4); +INSERT INTO `data_template_data_rra` VALUES (70,1); +INSERT INTO `data_template_data_rra` VALUES (70,2); +INSERT INTO `data_template_data_rra` VALUES (70,3); +INSERT INTO `data_template_data_rra` VALUES (70,4); +INSERT INTO `data_template_data_rra` VALUES (71,1); +INSERT INTO `data_template_data_rra` VALUES (71,2); +INSERT INTO `data_template_data_rra` VALUES (71,3); +INSERT INTO `data_template_data_rra` VALUES (71,4); +INSERT INTO `data_template_data_rra` VALUES (72,1); +INSERT INTO `data_template_data_rra` VALUES (72,2); +INSERT INTO `data_template_data_rra` VALUES (72,3); +INSERT INTO `data_template_data_rra` VALUES (72,4); +INSERT INTO `data_template_data_rra` VALUES (73,1); +INSERT INTO `data_template_data_rra` VALUES (73,2); +INSERT INTO `data_template_data_rra` VALUES (73,3); +INSERT INTO `data_template_data_rra` VALUES (73,4); +INSERT INTO `data_template_data_rra` VALUES (74,1); +INSERT INTO `data_template_data_rra` VALUES (74,2); +INSERT INTO `data_template_data_rra` VALUES (74,3); +INSERT INTO `data_template_data_rra` VALUES (74,4); +INSERT INTO `data_template_data_rra` VALUES (75,1); +INSERT INTO `data_template_data_rra` VALUES (75,2); +INSERT INTO `data_template_data_rra` VALUES (75,3); +INSERT INTO `data_template_data_rra` VALUES (75,4); +INSERT INTO `data_template_data_rra` VALUES (76,1); +INSERT INTO `data_template_data_rra` VALUES (76,2); +INSERT INTO `data_template_data_rra` VALUES (76,3); +INSERT INTO `data_template_data_rra` VALUES (76,4); +INSERT INTO `data_template_data_rra` VALUES (77,1); +INSERT INTO `data_template_data_rra` VALUES (77,2); +INSERT INTO `data_template_data_rra` VALUES (77,3); +INSERT INTO `data_template_data_rra` VALUES (77,4); +INSERT INTO `data_template_data_rra` VALUES (78,1); +INSERT INTO `data_template_data_rra` VALUES (78,2); +INSERT INTO `data_template_data_rra` VALUES (78,3); +INSERT INTO `data_template_data_rra` VALUES (78,4); +INSERT INTO `data_template_data_rra` VALUES (79,1); +INSERT INTO `data_template_data_rra` VALUES (79,2); +INSERT INTO `data_template_data_rra` VALUES (79,3); +INSERT INTO `data_template_data_rra` VALUES (79,4); +INSERT INTO `data_template_data_rra` VALUES (80,1); +INSERT INTO `data_template_data_rra` VALUES (80,2); +INSERT INTO `data_template_data_rra` VALUES (80,3); +INSERT INTO `data_template_data_rra` VALUES (80,4); +INSERT INTO `data_template_data_rra` VALUES (81,1); +INSERT INTO `data_template_data_rra` VALUES (81,2); +INSERT INTO `data_template_data_rra` VALUES (81,3); +INSERT INTO `data_template_data_rra` VALUES (81,4); +INSERT INTO `data_template_data_rra` VALUES (82,1); +INSERT INTO `data_template_data_rra` VALUES (82,2); +INSERT INTO `data_template_data_rra` VALUES (82,3); +INSERT INTO `data_template_data_rra` VALUES (82,4); +INSERT INTO `data_template_data_rra` VALUES (83,1); +INSERT INTO `data_template_data_rra` VALUES (83,2); +INSERT INTO `data_template_data_rra` VALUES (83,3); +INSERT INTO `data_template_data_rra` VALUES (83,4); +INSERT INTO `data_template_data_rra` VALUES (84,1); +INSERT INTO `data_template_data_rra` VALUES (84,2); +INSERT INTO `data_template_data_rra` VALUES (84,3); +INSERT INTO `data_template_data_rra` VALUES (84,4); +INSERT INTO `data_template_data_rra` VALUES (85,1); +INSERT INTO `data_template_data_rra` VALUES (85,2); +INSERT INTO `data_template_data_rra` VALUES (85,3); +INSERT INTO `data_template_data_rra` VALUES (85,4); +INSERT INTO `data_template_data_rra` VALUES (86,1); +INSERT INTO `data_template_data_rra` VALUES (86,2); +INSERT INTO `data_template_data_rra` VALUES (86,3); +INSERT INTO `data_template_data_rra` VALUES (86,4); +INSERT INTO `data_template_data_rra` VALUES (87,1); +INSERT INTO `data_template_data_rra` VALUES (87,2); +INSERT INTO `data_template_data_rra` VALUES (87,3); +INSERT INTO `data_template_data_rra` VALUES (87,4); +INSERT INTO `data_template_data_rra` VALUES (88,1); +INSERT INTO `data_template_data_rra` VALUES (88,2); +INSERT INTO `data_template_data_rra` VALUES (88,3); +INSERT INTO `data_template_data_rra` VALUES (88,4); +INSERT INTO `data_template_data_rra` VALUES (89,1); +INSERT INTO `data_template_data_rra` VALUES (89,2); +INSERT INTO `data_template_data_rra` VALUES (89,3); +INSERT INTO `data_template_data_rra` VALUES (89,4); +INSERT INTO `data_template_data_rra` VALUES (90,1); +INSERT INTO `data_template_data_rra` VALUES (90,2); +INSERT INTO `data_template_data_rra` VALUES (90,3); +INSERT INTO `data_template_data_rra` VALUES (90,4); +INSERT INTO `data_template_data_rra` VALUES (91,1); +INSERT INTO `data_template_data_rra` VALUES (91,2); +INSERT INTO `data_template_data_rra` VALUES (91,3); +INSERT INTO `data_template_data_rra` VALUES (91,4); +INSERT INTO `data_template_data_rra` VALUES (92,1); +INSERT INTO `data_template_data_rra` VALUES (92,2); +INSERT INTO `data_template_data_rra` VALUES (92,3); +INSERT INTO `data_template_data_rra` VALUES (92,4); +INSERT INTO `data_template_data_rra` VALUES (93,1); +INSERT INTO `data_template_data_rra` VALUES (93,2); +INSERT INTO `data_template_data_rra` VALUES (93,3); +INSERT INTO `data_template_data_rra` VALUES (93,4); +INSERT INTO `data_template_data_rra` VALUES (94,1); +INSERT INTO `data_template_data_rra` VALUES (94,2); +INSERT INTO `data_template_data_rra` VALUES (94,3); +INSERT INTO `data_template_data_rra` VALUES (94,4); +INSERT INTO `data_template_data_rra` VALUES (95,1); +INSERT INTO `data_template_data_rra` VALUES (95,2); +INSERT INTO `data_template_data_rra` VALUES (95,3); +INSERT INTO `data_template_data_rra` VALUES (95,4); +INSERT INTO `data_template_data_rra` VALUES (96,1); +INSERT INTO `data_template_data_rra` VALUES (96,2); +INSERT INTO `data_template_data_rra` VALUES (96,3); +INSERT INTO `data_template_data_rra` VALUES (96,4); +INSERT INTO `data_template_data_rra` VALUES (97,1); +INSERT INTO `data_template_data_rra` VALUES (97,2); +INSERT INTO `data_template_data_rra` VALUES (97,3); +INSERT INTO `data_template_data_rra` VALUES (97,4); +INSERT INTO `data_template_data_rra` VALUES (98,1); +INSERT INTO `data_template_data_rra` VALUES (98,2); +INSERT INTO `data_template_data_rra` VALUES (98,3); +INSERT INTO `data_template_data_rra` VALUES (98,4); +INSERT INTO `data_template_data_rra` VALUES (99,1); +INSERT INTO `data_template_data_rra` VALUES (99,2); +INSERT INTO `data_template_data_rra` VALUES (99,3); +INSERT INTO `data_template_data_rra` VALUES (99,4); +INSERT INTO `data_template_data_rra` VALUES (100,1); +INSERT INTO `data_template_data_rra` VALUES (100,2); +INSERT INTO `data_template_data_rra` VALUES (100,3); +INSERT INTO `data_template_data_rra` VALUES (100,4); +INSERT INTO `data_template_data_rra` VALUES (101,1); +INSERT INTO `data_template_data_rra` VALUES (101,2); +INSERT INTO `data_template_data_rra` VALUES (101,3); +INSERT INTO `data_template_data_rra` VALUES (101,4); +INSERT INTO `data_template_data_rra` VALUES (102,1); +INSERT INTO `data_template_data_rra` VALUES (102,2); +INSERT INTO `data_template_data_rra` VALUES (102,3); +INSERT INTO `data_template_data_rra` VALUES (102,4); +INSERT INTO `data_template_data_rra` VALUES (103,1); +INSERT INTO `data_template_data_rra` VALUES (103,2); +INSERT INTO `data_template_data_rra` VALUES (103,3); +INSERT INTO `data_template_data_rra` VALUES (103,4); +INSERT INTO `data_template_data_rra` VALUES (104,1); +INSERT INTO `data_template_data_rra` VALUES (104,2); +INSERT INTO `data_template_data_rra` VALUES (104,3); +INSERT INTO `data_template_data_rra` VALUES (104,4); +INSERT INTO `data_template_data_rra` VALUES (105,1); +INSERT INTO `data_template_data_rra` VALUES (105,2); +INSERT INTO `data_template_data_rra` VALUES (105,3); +INSERT INTO `data_template_data_rra` VALUES (105,4); +INSERT INTO `data_template_data_rra` VALUES (106,1); +INSERT INTO `data_template_data_rra` VALUES (106,2); +INSERT INTO `data_template_data_rra` VALUES (106,3); +INSERT INTO `data_template_data_rra` VALUES (106,4); +INSERT INTO `data_template_data_rra` VALUES (107,1); +INSERT INTO `data_template_data_rra` VALUES (107,2); +INSERT INTO `data_template_data_rra` VALUES (107,3); +INSERT INTO `data_template_data_rra` VALUES (107,4); +INSERT INTO `data_template_data_rra` VALUES (108,1); +INSERT INTO `data_template_data_rra` VALUES (108,2); +INSERT INTO `data_template_data_rra` VALUES (108,3); +INSERT INTO `data_template_data_rra` VALUES (108,4); +INSERT INTO `data_template_data_rra` VALUES (109,1); +INSERT INTO `data_template_data_rra` VALUES (109,2); +INSERT INTO `data_template_data_rra` VALUES (109,3); +INSERT INTO `data_template_data_rra` VALUES (109,4); +INSERT INTO `data_template_data_rra` VALUES (110,1); +INSERT INTO `data_template_data_rra` VALUES (110,2); +INSERT INTO `data_template_data_rra` VALUES (110,3); +INSERT INTO `data_template_data_rra` VALUES (110,4); +INSERT INTO `data_template_data_rra` VALUES (111,1); +INSERT INTO `data_template_data_rra` VALUES (111,2); +INSERT INTO `data_template_data_rra` VALUES (111,3); +INSERT INTO `data_template_data_rra` VALUES (111,4); +INSERT INTO `data_template_data_rra` VALUES (112,1); +INSERT INTO `data_template_data_rra` VALUES (112,2); +INSERT INTO `data_template_data_rra` VALUES (112,3); +INSERT INTO `data_template_data_rra` VALUES (112,4); +INSERT INTO `data_template_data_rra` VALUES (113,1); +INSERT INTO `data_template_data_rra` VALUES (113,2); +INSERT INTO `data_template_data_rra` VALUES (113,3); +INSERT INTO `data_template_data_rra` VALUES (113,4); +INSERT INTO `data_template_data_rra` VALUES (114,1); +INSERT INTO `data_template_data_rra` VALUES (114,2); +INSERT INTO `data_template_data_rra` VALUES (114,3); +INSERT INTO `data_template_data_rra` VALUES (114,4); +INSERT INTO `data_template_data_rra` VALUES (115,1); +INSERT INTO `data_template_data_rra` VALUES (115,2); +INSERT INTO `data_template_data_rra` VALUES (115,3); +INSERT INTO `data_template_data_rra` VALUES (115,4); +INSERT INTO `data_template_data_rra` VALUES (116,1); +INSERT INTO `data_template_data_rra` VALUES (116,2); +INSERT INTO `data_template_data_rra` VALUES (116,3); +INSERT INTO `data_template_data_rra` VALUES (116,4); +INSERT INTO `data_template_data_rra` VALUES (117,1); +INSERT INTO `data_template_data_rra` VALUES (117,2); +INSERT INTO `data_template_data_rra` VALUES (117,3); +INSERT INTO `data_template_data_rra` VALUES (117,4); +INSERT INTO `data_template_data_rra` VALUES (118,1); +INSERT INTO `data_template_data_rra` VALUES (118,2); +INSERT INTO `data_template_data_rra` VALUES (118,3); +INSERT INTO `data_template_data_rra` VALUES (118,4); +INSERT INTO `data_template_data_rra` VALUES (119,1); +INSERT INTO `data_template_data_rra` VALUES (119,2); +INSERT INTO `data_template_data_rra` VALUES (119,3); +INSERT INTO `data_template_data_rra` VALUES (119,4); +INSERT INTO `data_template_data_rra` VALUES (120,1); +INSERT INTO `data_template_data_rra` VALUES (120,2); +INSERT INTO `data_template_data_rra` VALUES (120,3); +INSERT INTO `data_template_data_rra` VALUES (120,4); +INSERT INTO `data_template_data_rra` VALUES (121,1); +INSERT INTO `data_template_data_rra` VALUES (121,2); +INSERT INTO `data_template_data_rra` VALUES (121,3); +INSERT INTO `data_template_data_rra` VALUES (121,4); +INSERT INTO `data_template_data_rra` VALUES (122,1); +INSERT INTO `data_template_data_rra` VALUES (122,2); +INSERT INTO `data_template_data_rra` VALUES (122,3); +INSERT INTO `data_template_data_rra` VALUES (122,4); +INSERT INTO `data_template_data_rra` VALUES (123,1); +INSERT INTO `data_template_data_rra` VALUES (123,2); +INSERT INTO `data_template_data_rra` VALUES (123,3); +INSERT INTO `data_template_data_rra` VALUES (123,4); +INSERT INTO `data_template_data_rra` VALUES (124,1); +INSERT INTO `data_template_data_rra` VALUES (124,2); +INSERT INTO `data_template_data_rra` VALUES (124,3); +INSERT INTO `data_template_data_rra` VALUES (124,4); +INSERT INTO `data_template_data_rra` VALUES (125,1); +INSERT INTO `data_template_data_rra` VALUES (125,2); +INSERT INTO `data_template_data_rra` VALUES (125,3); +INSERT INTO `data_template_data_rra` VALUES (125,4); +INSERT INTO `data_template_data_rra` VALUES (126,1); +INSERT INTO `data_template_data_rra` VALUES (126,2); +INSERT INTO `data_template_data_rra` VALUES (126,3); +INSERT INTO `data_template_data_rra` VALUES (126,4); +INSERT INTO `data_template_data_rra` VALUES (127,1); +INSERT INTO `data_template_data_rra` VALUES (127,2); +INSERT INTO `data_template_data_rra` VALUES (127,3); +INSERT INTO `data_template_data_rra` VALUES (127,4); +INSERT INTO `data_template_data_rra` VALUES (128,1); +INSERT INTO `data_template_data_rra` VALUES (128,2); +INSERT INTO `data_template_data_rra` VALUES (128,3); +INSERT INTO `data_template_data_rra` VALUES (128,4); +INSERT INTO `data_template_data_rra` VALUES (129,1); +INSERT INTO `data_template_data_rra` VALUES (129,2); +INSERT INTO `data_template_data_rra` VALUES (129,3); +INSERT INTO `data_template_data_rra` VALUES (129,4); +INSERT INTO `data_template_data_rra` VALUES (130,1); +INSERT INTO `data_template_data_rra` VALUES (130,2); +INSERT INTO `data_template_data_rra` VALUES (130,3); +INSERT INTO `data_template_data_rra` VALUES (130,4); +INSERT INTO `data_template_data_rra` VALUES (131,1); +INSERT INTO `data_template_data_rra` VALUES (131,2); +INSERT INTO `data_template_data_rra` VALUES (131,3); +INSERT INTO `data_template_data_rra` VALUES (131,4); +INSERT INTO `data_template_data_rra` VALUES (132,1); +INSERT INTO `data_template_data_rra` VALUES (132,2); +INSERT INTO `data_template_data_rra` VALUES (132,3); +INSERT INTO `data_template_data_rra` VALUES (132,4); +INSERT INTO `data_template_data_rra` VALUES (133,1); +INSERT INTO `data_template_data_rra` VALUES (133,2); +INSERT INTO `data_template_data_rra` VALUES (133,3); +INSERT INTO `data_template_data_rra` VALUES (133,4); +INSERT INTO `data_template_data_rra` VALUES (134,1); +INSERT INTO `data_template_data_rra` VALUES (134,2); +INSERT INTO `data_template_data_rra` VALUES (134,3); +INSERT INTO `data_template_data_rra` VALUES (134,4); +INSERT INTO `data_template_data_rra` VALUES (135,1); +INSERT INTO `data_template_data_rra` VALUES (135,2); +INSERT INTO `data_template_data_rra` VALUES (135,3); +INSERT INTO `data_template_data_rra` VALUES (135,4); +INSERT INTO `data_template_data_rra` VALUES (136,1); +INSERT INTO `data_template_data_rra` VALUES (136,2); +INSERT INTO `data_template_data_rra` VALUES (136,3); +INSERT INTO `data_template_data_rra` VALUES (136,4); +INSERT INTO `data_template_data_rra` VALUES (137,1); +INSERT INTO `data_template_data_rra` VALUES (137,2); +INSERT INTO `data_template_data_rra` VALUES (137,3); +INSERT INTO `data_template_data_rra` VALUES (137,4); +INSERT INTO `data_template_data_rra` VALUES (138,1); +INSERT INTO `data_template_data_rra` VALUES (138,2); +INSERT INTO `data_template_data_rra` VALUES (138,3); +INSERT INTO `data_template_data_rra` VALUES (138,4); +INSERT INTO `data_template_data_rra` VALUES (139,1); +INSERT INTO `data_template_data_rra` VALUES (139,2); +INSERT INTO `data_template_data_rra` VALUES (139,3); +INSERT INTO `data_template_data_rra` VALUES (139,4); +INSERT INTO `data_template_data_rra` VALUES (140,1); +INSERT INTO `data_template_data_rra` VALUES (140,2); +INSERT INTO `data_template_data_rra` VALUES (140,3); +INSERT INTO `data_template_data_rra` VALUES (140,4); +INSERT INTO `data_template_data_rra` VALUES (141,1); +INSERT INTO `data_template_data_rra` VALUES (141,2); +INSERT INTO `data_template_data_rra` VALUES (141,3); +INSERT INTO `data_template_data_rra` VALUES (141,4); +INSERT INTO `data_template_data_rra` VALUES (142,1); +INSERT INTO `data_template_data_rra` VALUES (142,2); +INSERT INTO `data_template_data_rra` VALUES (142,3); +INSERT INTO `data_template_data_rra` VALUES (142,4); +INSERT INTO `data_template_data_rra` VALUES (143,1); +INSERT INTO `data_template_data_rra` VALUES (143,2); +INSERT INTO `data_template_data_rra` VALUES (143,3); +INSERT INTO `data_template_data_rra` VALUES (143,4); +INSERT INTO `data_template_data_rra` VALUES (144,1); +INSERT INTO `data_template_data_rra` VALUES (144,2); +INSERT INTO `data_template_data_rra` VALUES (144,3); +INSERT INTO `data_template_data_rra` VALUES (144,4); +INSERT INTO `data_template_data_rra` VALUES (145,1); +INSERT INTO `data_template_data_rra` VALUES (145,2); +INSERT INTO `data_template_data_rra` VALUES (145,3); +INSERT INTO `data_template_data_rra` VALUES (145,4); +INSERT INTO `data_template_data_rra` VALUES (146,1); +INSERT INTO `data_template_data_rra` VALUES (146,2); +INSERT INTO `data_template_data_rra` VALUES (146,3); +INSERT INTO `data_template_data_rra` VALUES (146,4); +INSERT INTO `data_template_data_rra` VALUES (147,1); +INSERT INTO `data_template_data_rra` VALUES (147,2); +INSERT INTO `data_template_data_rra` VALUES (147,3); +INSERT INTO `data_template_data_rra` VALUES (147,4); +INSERT INTO `data_template_data_rra` VALUES (148,1); +INSERT INTO `data_template_data_rra` VALUES (148,2); +INSERT INTO `data_template_data_rra` VALUES (148,3); +INSERT INTO `data_template_data_rra` VALUES (148,4); +INSERT INTO `data_template_data_rra` VALUES (149,1); +INSERT INTO `data_template_data_rra` VALUES (149,2); +INSERT INTO `data_template_data_rra` VALUES (149,3); +INSERT INTO `data_template_data_rra` VALUES (149,4); +INSERT INTO `data_template_data_rra` VALUES (150,1); +INSERT INTO `data_template_data_rra` VALUES (150,2); +INSERT INTO `data_template_data_rra` VALUES (150,3); +INSERT INTO `data_template_data_rra` VALUES (150,4); +INSERT INTO `data_template_data_rra` VALUES (151,1); +INSERT INTO `data_template_data_rra` VALUES (151,2); +INSERT INTO `data_template_data_rra` VALUES (151,3); +INSERT INTO `data_template_data_rra` VALUES (151,4); +INSERT INTO `data_template_data_rra` VALUES (152,1); +INSERT INTO `data_template_data_rra` VALUES (152,2); +INSERT INTO `data_template_data_rra` VALUES (152,3); +INSERT INTO `data_template_data_rra` VALUES (152,4); +INSERT INTO `data_template_data_rra` VALUES (153,1); +INSERT INTO `data_template_data_rra` VALUES (153,2); +INSERT INTO `data_template_data_rra` VALUES (153,3); +INSERT INTO `data_template_data_rra` VALUES (153,4); +INSERT INTO `data_template_data_rra` VALUES (154,1); +INSERT INTO `data_template_data_rra` VALUES (154,2); +INSERT INTO `data_template_data_rra` VALUES (154,3); +INSERT INTO `data_template_data_rra` VALUES (154,4); +INSERT INTO `data_template_data_rra` VALUES (155,1); +INSERT INTO `data_template_data_rra` VALUES (155,2); +INSERT INTO `data_template_data_rra` VALUES (155,3); +INSERT INTO `data_template_data_rra` VALUES (155,4); +INSERT INTO `data_template_data_rra` VALUES (156,1); +INSERT INTO `data_template_data_rra` VALUES (156,2); +INSERT INTO `data_template_data_rra` VALUES (156,3); +INSERT INTO `data_template_data_rra` VALUES (156,4); +INSERT INTO `data_template_data_rra` VALUES (157,1); +INSERT INTO `data_template_data_rra` VALUES (157,2); +INSERT INTO `data_template_data_rra` VALUES (157,3); +INSERT INTO `data_template_data_rra` VALUES (157,4); +INSERT INTO `data_template_data_rra` VALUES (158,1); +INSERT INTO `data_template_data_rra` VALUES (158,2); +INSERT INTO `data_template_data_rra` VALUES (158,3); +INSERT INTO `data_template_data_rra` VALUES (158,4); +INSERT INTO `data_template_data_rra` VALUES (159,1); +INSERT INTO `data_template_data_rra` VALUES (159,2); +INSERT INTO `data_template_data_rra` VALUES (159,3); +INSERT INTO `data_template_data_rra` VALUES (159,4); +INSERT INTO `data_template_data_rra` VALUES (160,1); +INSERT INTO `data_template_data_rra` VALUES (160,2); +INSERT INTO `data_template_data_rra` VALUES (160,3); +INSERT INTO `data_template_data_rra` VALUES (160,4); +INSERT INTO `data_template_data_rra` VALUES (161,1); +INSERT INTO `data_template_data_rra` VALUES (161,2); +INSERT INTO `data_template_data_rra` VALUES (161,3); +INSERT INTO `data_template_data_rra` VALUES (161,4); +INSERT INTO `data_template_data_rra` VALUES (162,1); +INSERT INTO `data_template_data_rra` VALUES (162,2); +INSERT INTO `data_template_data_rra` VALUES (162,3); +INSERT INTO `data_template_data_rra` VALUES (162,4); +INSERT INTO `data_template_data_rra` VALUES (163,1); +INSERT INTO `data_template_data_rra` VALUES (163,2); +INSERT INTO `data_template_data_rra` VALUES (163,3); +INSERT INTO `data_template_data_rra` VALUES (163,4); +INSERT INTO `data_template_data_rra` VALUES (164,1); +INSERT INTO `data_template_data_rra` VALUES (164,2); +INSERT INTO `data_template_data_rra` VALUES (164,3); +INSERT INTO `data_template_data_rra` VALUES (164,4); +INSERT INTO `data_template_data_rra` VALUES (165,1); +INSERT INTO `data_template_data_rra` VALUES (165,2); +INSERT INTO `data_template_data_rra` VALUES (165,3); +INSERT INTO `data_template_data_rra` VALUES (165,4); +INSERT INTO `data_template_data_rra` VALUES (166,1); +INSERT INTO `data_template_data_rra` VALUES (166,2); +INSERT INTO `data_template_data_rra` VALUES (166,3); +INSERT INTO `data_template_data_rra` VALUES (166,4); +INSERT INTO `data_template_data_rra` VALUES (167,1); +INSERT INTO `data_template_data_rra` VALUES (167,2); +INSERT INTO `data_template_data_rra` VALUES (167,3); +INSERT INTO `data_template_data_rra` VALUES (167,4); +INSERT INTO `data_template_data_rra` VALUES (168,1); +INSERT INTO `data_template_data_rra` VALUES (168,2); +INSERT INTO `data_template_data_rra` VALUES (168,3); +INSERT INTO `data_template_data_rra` VALUES (168,4); +INSERT INTO `data_template_data_rra` VALUES (169,1); +INSERT INTO `data_template_data_rra` VALUES (169,2); +INSERT INTO `data_template_data_rra` VALUES (169,3); +INSERT INTO `data_template_data_rra` VALUES (169,4); +INSERT INTO `data_template_data_rra` VALUES (170,1); +INSERT INTO `data_template_data_rra` VALUES (170,2); +INSERT INTO `data_template_data_rra` VALUES (170,3); +INSERT INTO `data_template_data_rra` VALUES (170,4); +INSERT INTO `data_template_data_rra` VALUES (171,1); +INSERT INTO `data_template_data_rra` VALUES (171,2); +INSERT INTO `data_template_data_rra` VALUES (171,3); +INSERT INTO `data_template_data_rra` VALUES (171,4); +INSERT INTO `data_template_data_rra` VALUES (172,1); +INSERT INTO `data_template_data_rra` VALUES (172,2); +INSERT INTO `data_template_data_rra` VALUES (172,3); +INSERT INTO `data_template_data_rra` VALUES (172,4); +INSERT INTO `data_template_data_rra` VALUES (173,1); +INSERT INTO `data_template_data_rra` VALUES (173,2); +INSERT INTO `data_template_data_rra` VALUES (173,3); +INSERT INTO `data_template_data_rra` VALUES (173,4); +INSERT INTO `data_template_data_rra` VALUES (174,1); +INSERT INTO `data_template_data_rra` VALUES (174,2); +INSERT INTO `data_template_data_rra` VALUES (174,3); +INSERT INTO `data_template_data_rra` VALUES (174,4); +INSERT INTO `data_template_data_rra` VALUES (175,1); +INSERT INTO `data_template_data_rra` VALUES (175,2); +INSERT INTO `data_template_data_rra` VALUES (175,3); +INSERT INTO `data_template_data_rra` VALUES (175,4); +INSERT INTO `data_template_data_rra` VALUES (176,1); +INSERT INTO `data_template_data_rra` VALUES (176,2); +INSERT INTO `data_template_data_rra` VALUES (176,3); +INSERT INTO `data_template_data_rra` VALUES (176,4); +INSERT INTO `data_template_data_rra` VALUES (177,1); +INSERT INTO `data_template_data_rra` VALUES (177,2); +INSERT INTO `data_template_data_rra` VALUES (177,3); +INSERT INTO `data_template_data_rra` VALUES (177,4); +INSERT INTO `data_template_data_rra` VALUES (178,1); +INSERT INTO `data_template_data_rra` VALUES (178,2); +INSERT INTO `data_template_data_rra` VALUES (178,3); +INSERT INTO `data_template_data_rra` VALUES (178,4); +INSERT INTO `data_template_data_rra` VALUES (179,1); +INSERT INTO `data_template_data_rra` VALUES (179,2); +INSERT INTO `data_template_data_rra` VALUES (179,3); +INSERT INTO `data_template_data_rra` VALUES (179,4); +INSERT INTO `data_template_data_rra` VALUES (180,1); +INSERT INTO `data_template_data_rra` VALUES (180,2); +INSERT INTO `data_template_data_rra` VALUES (180,3); +INSERT INTO `data_template_data_rra` VALUES (180,4); +INSERT INTO `data_template_data_rra` VALUES (181,1); +INSERT INTO `data_template_data_rra` VALUES (181,2); +INSERT INTO `data_template_data_rra` VALUES (181,3); +INSERT INTO `data_template_data_rra` VALUES (181,4); +INSERT INTO `data_template_data_rra` VALUES (182,1); +INSERT INTO `data_template_data_rra` VALUES (182,2); +INSERT INTO `data_template_data_rra` VALUES (182,3); +INSERT INTO `data_template_data_rra` VALUES (182,4); +INSERT INTO `data_template_data_rra` VALUES (183,1); +INSERT INTO `data_template_data_rra` VALUES (183,2); +INSERT INTO `data_template_data_rra` VALUES (183,3); +INSERT INTO `data_template_data_rra` VALUES (183,4); +INSERT INTO `data_template_data_rra` VALUES (184,1); +INSERT INTO `data_template_data_rra` VALUES (184,2); +INSERT INTO `data_template_data_rra` VALUES (184,3); +INSERT INTO `data_template_data_rra` VALUES (184,4); +INSERT INTO `data_template_data_rra` VALUES (185,1); +INSERT INTO `data_template_data_rra` VALUES (185,2); +INSERT INTO `data_template_data_rra` VALUES (185,3); +INSERT INTO `data_template_data_rra` VALUES (185,4); +INSERT INTO `data_template_data_rra` VALUES (186,1); +INSERT INTO `data_template_data_rra` VALUES (186,2); +INSERT INTO `data_template_data_rra` VALUES (186,3); +INSERT INTO `data_template_data_rra` VALUES (186,4); +INSERT INTO `data_template_data_rra` VALUES (187,1); +INSERT INTO `data_template_data_rra` VALUES (187,2); +INSERT INTO `data_template_data_rra` VALUES (187,3); +INSERT INTO `data_template_data_rra` VALUES (187,4); +INSERT INTO `data_template_data_rra` VALUES (188,1); +INSERT INTO `data_template_data_rra` VALUES (188,2); +INSERT INTO `data_template_data_rra` VALUES (188,3); +INSERT INTO `data_template_data_rra` VALUES (188,4); +INSERT INTO `data_template_data_rra` VALUES (189,1); +INSERT INTO `data_template_data_rra` VALUES (189,2); +INSERT INTO `data_template_data_rra` VALUES (189,3); +INSERT INTO `data_template_data_rra` VALUES (189,4); +INSERT INTO `data_template_data_rra` VALUES (207,1); +INSERT INTO `data_template_data_rra` VALUES (207,2); +INSERT INTO `data_template_data_rra` VALUES (207,3); +INSERT INTO `data_template_data_rra` VALUES (207,4); +INSERT INTO `data_template_data_rra` VALUES (208,1); +INSERT INTO `data_template_data_rra` VALUES (208,2); +INSERT INTO `data_template_data_rra` VALUES (208,3); +INSERT INTO `data_template_data_rra` VALUES (208,4); +INSERT INTO `data_template_data_rra` VALUES (209,1); +INSERT INTO `data_template_data_rra` VALUES (209,2); +INSERT INTO `data_template_data_rra` VALUES (209,3); +INSERT INTO `data_template_data_rra` VALUES (209,4); +INSERT INTO `data_template_data_rra` VALUES (210,1); +INSERT INTO `data_template_data_rra` VALUES (210,2); +INSERT INTO `data_template_data_rra` VALUES (210,3); +INSERT INTO `data_template_data_rra` VALUES (210,4); +INSERT INTO `data_template_data_rra` VALUES (211,1); +INSERT INTO `data_template_data_rra` VALUES (211,2); +INSERT INTO `data_template_data_rra` VALUES (211,3); +INSERT INTO `data_template_data_rra` VALUES (211,4); +INSERT INTO `data_template_data_rra` VALUES (212,1); +INSERT INTO `data_template_data_rra` VALUES (212,2); +INSERT INTO `data_template_data_rra` VALUES (212,3); +INSERT INTO `data_template_data_rra` VALUES (212,4); +INSERT INTO `data_template_data_rra` VALUES (213,1); +INSERT INTO `data_template_data_rra` VALUES (213,2); +INSERT INTO `data_template_data_rra` VALUES (213,3); +INSERT INTO `data_template_data_rra` VALUES (213,4); +INSERT INTO `data_template_data_rra` VALUES (214,1); +INSERT INTO `data_template_data_rra` VALUES (214,2); +INSERT INTO `data_template_data_rra` VALUES (214,3); +INSERT INTO `data_template_data_rra` VALUES (214,4); +INSERT INTO `data_template_data_rra` VALUES (215,1); +INSERT INTO `data_template_data_rra` VALUES (215,2); +INSERT INTO `data_template_data_rra` VALUES (215,3); +INSERT INTO `data_template_data_rra` VALUES (215,4); +INSERT INTO `data_template_data_rra` VALUES (216,1); +INSERT INTO `data_template_data_rra` VALUES (216,2); +INSERT INTO `data_template_data_rra` VALUES (216,3); +INSERT INTO `data_template_data_rra` VALUES (216,4); +INSERT INTO `data_template_data_rra` VALUES (217,1); +INSERT INTO `data_template_data_rra` VALUES (217,2); +INSERT INTO `data_template_data_rra` VALUES (217,3); +INSERT INTO `data_template_data_rra` VALUES (217,4); +INSERT INTO `data_template_data_rra` VALUES (218,1); +INSERT INTO `data_template_data_rra` VALUES (218,2); +INSERT INTO `data_template_data_rra` VALUES (218,3); +INSERT INTO `data_template_data_rra` VALUES (218,4); +INSERT INTO `data_template_data_rra` VALUES (219,1); +INSERT INTO `data_template_data_rra` VALUES (219,2); +INSERT INTO `data_template_data_rra` VALUES (219,3); +INSERT INTO `data_template_data_rra` VALUES (219,4); +INSERT INTO `data_template_data_rra` VALUES (220,1); +INSERT INTO `data_template_data_rra` VALUES (220,2); +INSERT INTO `data_template_data_rra` VALUES (220,3); +INSERT INTO `data_template_data_rra` VALUES (220,4); +INSERT INTO `data_template_data_rra` VALUES (221,1); +INSERT INTO `data_template_data_rra` VALUES (221,2); +INSERT INTO `data_template_data_rra` VALUES (221,3); +INSERT INTO `data_template_data_rra` VALUES (221,4); +INSERT INTO `data_template_data_rra` VALUES (222,1); +INSERT INTO `data_template_data_rra` VALUES (222,2); +INSERT INTO `data_template_data_rra` VALUES (222,3); +INSERT INTO `data_template_data_rra` VALUES (222,4); +INSERT INTO `data_template_data_rra` VALUES (223,1); +INSERT INTO `data_template_data_rra` VALUES (223,2); +INSERT INTO `data_template_data_rra` VALUES (223,3); +INSERT INTO `data_template_data_rra` VALUES (223,4); +INSERT INTO `data_template_data_rra` VALUES (224,1); +INSERT INTO `data_template_data_rra` VALUES (224,2); +INSERT INTO `data_template_data_rra` VALUES (224,3); +INSERT INTO `data_template_data_rra` VALUES (224,4); +INSERT INTO `data_template_data_rra` VALUES (225,1); +INSERT INTO `data_template_data_rra` VALUES (225,2); +INSERT INTO `data_template_data_rra` VALUES (225,3); +INSERT INTO `data_template_data_rra` VALUES (225,4); +INSERT INTO `data_template_data_rra` VALUES (226,1); +INSERT INTO `data_template_data_rra` VALUES (226,2); +INSERT INTO `data_template_data_rra` VALUES (226,3); +INSERT INTO `data_template_data_rra` VALUES (226,4); +INSERT INTO `data_template_data_rra` VALUES (227,1); +INSERT INTO `data_template_data_rra` VALUES (227,2); +INSERT INTO `data_template_data_rra` VALUES (227,3); +INSERT INTO `data_template_data_rra` VALUES (227,4); +INSERT INTO `data_template_data_rra` VALUES (228,1); +INSERT INTO `data_template_data_rra` VALUES (228,2); +INSERT INTO `data_template_data_rra` VALUES (228,3); +INSERT INTO `data_template_data_rra` VALUES (228,4); +INSERT INTO `data_template_data_rra` VALUES (229,1); +INSERT INTO `data_template_data_rra` VALUES (229,2); +INSERT INTO `data_template_data_rra` VALUES (229,3); +INSERT INTO `data_template_data_rra` VALUES (229,4); +INSERT INTO `data_template_data_rra` VALUES (230,1); +INSERT INTO `data_template_data_rra` VALUES (230,2); +INSERT INTO `data_template_data_rra` VALUES (230,3); +INSERT INTO `data_template_data_rra` VALUES (230,4); +INSERT INTO `data_template_data_rra` VALUES (231,1); +INSERT INTO `data_template_data_rra` VALUES (231,2); +INSERT INTO `data_template_data_rra` VALUES (231,3); +INSERT INTO `data_template_data_rra` VALUES (231,4); +INSERT INTO `data_template_data_rra` VALUES (232,1); +INSERT INTO `data_template_data_rra` VALUES (232,2); +INSERT INTO `data_template_data_rra` VALUES (232,3); +INSERT INTO `data_template_data_rra` VALUES (232,4); +INSERT INTO `data_template_data_rra` VALUES (233,1); +INSERT INTO `data_template_data_rra` VALUES (233,2); +INSERT INTO `data_template_data_rra` VALUES (233,3); +INSERT INTO `data_template_data_rra` VALUES (233,4); +INSERT INTO `data_template_data_rra` VALUES (234,1); +INSERT INTO `data_template_data_rra` VALUES (234,2); +INSERT INTO `data_template_data_rra` VALUES (234,3); +INSERT INTO `data_template_data_rra` VALUES (234,4); +INSERT INTO `data_template_data_rra` VALUES (235,1); +INSERT INTO `data_template_data_rra` VALUES (235,2); +INSERT INTO `data_template_data_rra` VALUES (235,3); +INSERT INTO `data_template_data_rra` VALUES (235,4); +INSERT INTO `data_template_data_rra` VALUES (236,1); +INSERT INTO `data_template_data_rra` VALUES (236,2); +INSERT INTO `data_template_data_rra` VALUES (236,3); +INSERT INTO `data_template_data_rra` VALUES (236,4); +INSERT INTO `data_template_data_rra` VALUES (237,1); +INSERT INTO `data_template_data_rra` VALUES (237,2); +INSERT INTO `data_template_data_rra` VALUES (237,3); +INSERT INTO `data_template_data_rra` VALUES (237,4); +INSERT INTO `data_template_data_rra` VALUES (238,1); +INSERT INTO `data_template_data_rra` VALUES (238,2); +INSERT INTO `data_template_data_rra` VALUES (238,3); +INSERT INTO `data_template_data_rra` VALUES (238,4); +INSERT INTO `data_template_data_rra` VALUES (239,1); +INSERT INTO `data_template_data_rra` VALUES (239,2); +INSERT INTO `data_template_data_rra` VALUES (239,3); +INSERT INTO `data_template_data_rra` VALUES (239,4); +INSERT INTO `data_template_data_rra` VALUES (240,1); +INSERT INTO `data_template_data_rra` VALUES (240,2); +INSERT INTO `data_template_data_rra` VALUES (240,3); +INSERT INTO `data_template_data_rra` VALUES (240,4); +INSERT INTO `data_template_data_rra` VALUES (241,1); +INSERT INTO `data_template_data_rra` VALUES (241,2); +INSERT INTO `data_template_data_rra` VALUES (241,3); +INSERT INTO `data_template_data_rra` VALUES (241,4); +INSERT INTO `data_template_data_rra` VALUES (242,1); +INSERT INTO `data_template_data_rra` VALUES (242,2); +INSERT INTO `data_template_data_rra` VALUES (242,3); +INSERT INTO `data_template_data_rra` VALUES (242,4); +INSERT INTO `data_template_data_rra` VALUES (243,1); +INSERT INTO `data_template_data_rra` VALUES (243,2); +INSERT INTO `data_template_data_rra` VALUES (243,3); +INSERT INTO `data_template_data_rra` VALUES (243,4); +INSERT INTO `data_template_data_rra` VALUES (244,1); +INSERT INTO `data_template_data_rra` VALUES (244,2); +INSERT INTO `data_template_data_rra` VALUES (244,3); +INSERT INTO `data_template_data_rra` VALUES (244,4); +INSERT INTO `data_template_data_rra` VALUES (245,1); +INSERT INTO `data_template_data_rra` VALUES (245,2); +INSERT INTO `data_template_data_rra` VALUES (245,3); +INSERT INTO `data_template_data_rra` VALUES (245,4); +INSERT INTO `data_template_data_rra` VALUES (246,1); +INSERT INTO `data_template_data_rra` VALUES (246,2); +INSERT INTO `data_template_data_rra` VALUES (246,3); +INSERT INTO `data_template_data_rra` VALUES (246,4); +INSERT INTO `data_template_data_rra` VALUES (247,1); +INSERT INTO `data_template_data_rra` VALUES (247,2); +INSERT INTO `data_template_data_rra` VALUES (247,3); +INSERT INTO `data_template_data_rra` VALUES (247,4); +INSERT INTO `data_template_data_rra` VALUES (248,1); +INSERT INTO `data_template_data_rra` VALUES (248,2); +INSERT INTO `data_template_data_rra` VALUES (248,3); +INSERT INTO `data_template_data_rra` VALUES (248,4); +INSERT INTO `data_template_data_rra` VALUES (249,1); +INSERT INTO `data_template_data_rra` VALUES (249,2); +INSERT INTO `data_template_data_rra` VALUES (249,3); +INSERT INTO `data_template_data_rra` VALUES (249,4); +INSERT INTO `data_template_data_rra` VALUES (250,1); +INSERT INTO `data_template_data_rra` VALUES (250,2); +INSERT INTO `data_template_data_rra` VALUES (250,3); +INSERT INTO `data_template_data_rra` VALUES (250,4); +INSERT INTO `data_template_data_rra` VALUES (251,1); +INSERT INTO `data_template_data_rra` VALUES (251,2); +INSERT INTO `data_template_data_rra` VALUES (251,3); +INSERT INTO `data_template_data_rra` VALUES (251,4); +INSERT INTO `data_template_data_rra` VALUES (252,1); +INSERT INTO `data_template_data_rra` VALUES (252,2); +INSERT INTO `data_template_data_rra` VALUES (252,3); +INSERT INTO `data_template_data_rra` VALUES (252,4); +INSERT INTO `data_template_data_rra` VALUES (253,1); +INSERT INTO `data_template_data_rra` VALUES (253,2); +INSERT INTO `data_template_data_rra` VALUES (253,3); +INSERT INTO `data_template_data_rra` VALUES (253,4); +INSERT INTO `data_template_data_rra` VALUES (254,1); +INSERT INTO `data_template_data_rra` VALUES (254,2); +INSERT INTO `data_template_data_rra` VALUES (254,3); +INSERT INTO `data_template_data_rra` VALUES (254,4); +INSERT INTO `data_template_data_rra` VALUES (255,1); +INSERT INTO `data_template_data_rra` VALUES (255,2); +INSERT INTO `data_template_data_rra` VALUES (255,3); +INSERT INTO `data_template_data_rra` VALUES (255,4); +INSERT INTO `data_template_data_rra` VALUES (256,1); +INSERT INTO `data_template_data_rra` VALUES (256,2); +INSERT INTO `data_template_data_rra` VALUES (256,3); +INSERT INTO `data_template_data_rra` VALUES (256,4); +INSERT INTO `data_template_data_rra` VALUES (257,1); +INSERT INTO `data_template_data_rra` VALUES (257,2); +INSERT INTO `data_template_data_rra` VALUES (257,3); +INSERT INTO `data_template_data_rra` VALUES (257,4); +INSERT INTO `data_template_data_rra` VALUES (258,1); +INSERT INTO `data_template_data_rra` VALUES (258,2); +INSERT INTO `data_template_data_rra` VALUES (258,3); +INSERT INTO `data_template_data_rra` VALUES (258,4); +INSERT INTO `data_template_data_rra` VALUES (259,1); +INSERT INTO `data_template_data_rra` VALUES (259,2); +INSERT INTO `data_template_data_rra` VALUES (259,3); +INSERT INTO `data_template_data_rra` VALUES (259,4); +INSERT INTO `data_template_data_rra` VALUES (260,1); +INSERT INTO `data_template_data_rra` VALUES (260,2); +INSERT INTO `data_template_data_rra` VALUES (260,3); +INSERT INTO `data_template_data_rra` VALUES (260,4); +INSERT INTO `data_template_data_rra` VALUES (261,1); +INSERT INTO `data_template_data_rra` VALUES (261,2); +INSERT INTO `data_template_data_rra` VALUES (261,3); +INSERT INTO `data_template_data_rra` VALUES (261,4); +INSERT INTO `data_template_data_rra` VALUES (262,1); +INSERT INTO `data_template_data_rra` VALUES (262,2); +INSERT INTO `data_template_data_rra` VALUES (262,3); +INSERT INTO `data_template_data_rra` VALUES (262,4); +INSERT INTO `data_template_data_rra` VALUES (263,1); +INSERT INTO `data_template_data_rra` VALUES (263,2); +INSERT INTO `data_template_data_rra` VALUES (263,3); +INSERT INTO `data_template_data_rra` VALUES (263,4); +INSERT INTO `data_template_data_rra` VALUES (264,1); +INSERT INTO `data_template_data_rra` VALUES (264,2); +INSERT INTO `data_template_data_rra` VALUES (264,3); +INSERT INTO `data_template_data_rra` VALUES (264,4); +INSERT INTO `data_template_data_rra` VALUES (265,1); +INSERT INTO `data_template_data_rra` VALUES (265,2); +INSERT INTO `data_template_data_rra` VALUES (265,3); +INSERT INTO `data_template_data_rra` VALUES (265,4); +INSERT INTO `data_template_data_rra` VALUES (266,1); +INSERT INTO `data_template_data_rra` VALUES (266,2); +INSERT INTO `data_template_data_rra` VALUES (266,3); +INSERT INTO `data_template_data_rra` VALUES (266,4); +INSERT INTO `data_template_data_rra` VALUES (267,1); +INSERT INTO `data_template_data_rra` VALUES (267,2); +INSERT INTO `data_template_data_rra` VALUES (267,3); +INSERT INTO `data_template_data_rra` VALUES (267,4); +INSERT INTO `data_template_data_rra` VALUES (268,1); +INSERT INTO `data_template_data_rra` VALUES (268,2); +INSERT INTO `data_template_data_rra` VALUES (268,3); +INSERT INTO `data_template_data_rra` VALUES (268,4); +INSERT INTO `data_template_data_rra` VALUES (269,1); +INSERT INTO `data_template_data_rra` VALUES (269,2); +INSERT INTO `data_template_data_rra` VALUES (269,3); +INSERT INTO `data_template_data_rra` VALUES (269,4); +INSERT INTO `data_template_data_rra` VALUES (270,1); +INSERT INTO `data_template_data_rra` VALUES (270,2); +INSERT INTO `data_template_data_rra` VALUES (270,3); +INSERT INTO `data_template_data_rra` VALUES (270,4); +INSERT INTO `data_template_data_rra` VALUES (271,1); +INSERT INTO `data_template_data_rra` VALUES (271,2); +INSERT INTO `data_template_data_rra` VALUES (271,3); +INSERT INTO `data_template_data_rra` VALUES (271,4); +INSERT INTO `data_template_data_rra` VALUES (272,1); +INSERT INTO `data_template_data_rra` VALUES (272,2); +INSERT INTO `data_template_data_rra` VALUES (272,3); +INSERT INTO `data_template_data_rra` VALUES (272,4); +INSERT INTO `data_template_data_rra` VALUES (273,1); +INSERT INTO `data_template_data_rra` VALUES (273,2); +INSERT INTO `data_template_data_rra` VALUES (273,3); +INSERT INTO `data_template_data_rra` VALUES (273,4); +INSERT INTO `data_template_data_rra` VALUES (274,1); +INSERT INTO `data_template_data_rra` VALUES (274,2); +INSERT INTO `data_template_data_rra` VALUES (274,3); +INSERT INTO `data_template_data_rra` VALUES (274,4); +INSERT INTO `data_template_data_rra` VALUES (275,1); +INSERT INTO `data_template_data_rra` VALUES (275,2); +INSERT INTO `data_template_data_rra` VALUES (275,3); +INSERT INTO `data_template_data_rra` VALUES (275,4); +INSERT INTO `data_template_data_rra` VALUES (276,1); +INSERT INTO `data_template_data_rra` VALUES (276,2); +INSERT INTO `data_template_data_rra` VALUES (276,3); +INSERT INTO `data_template_data_rra` VALUES (276,4); +INSERT INTO `data_template_data_rra` VALUES (277,1); +INSERT INTO `data_template_data_rra` VALUES (277,2); +INSERT INTO `data_template_data_rra` VALUES (277,3); +INSERT INTO `data_template_data_rra` VALUES (277,4); +INSERT INTO `data_template_data_rra` VALUES (278,1); +INSERT INTO `data_template_data_rra` VALUES (278,2); +INSERT INTO `data_template_data_rra` VALUES (278,3); +INSERT INTO `data_template_data_rra` VALUES (278,4); +INSERT INTO `data_template_data_rra` VALUES (279,1); +INSERT INTO `data_template_data_rra` VALUES (279,2); +INSERT INTO `data_template_data_rra` VALUES (279,3); +INSERT INTO `data_template_data_rra` VALUES (279,4); +INSERT INTO `data_template_data_rra` VALUES (280,1); +INSERT INTO `data_template_data_rra` VALUES (280,2); +INSERT INTO `data_template_data_rra` VALUES (280,3); +INSERT INTO `data_template_data_rra` VALUES (280,4); +INSERT INTO `data_template_data_rra` VALUES (281,1); +INSERT INTO `data_template_data_rra` VALUES (281,2); +INSERT INTO `data_template_data_rra` VALUES (281,3); +INSERT INTO `data_template_data_rra` VALUES (281,4); +INSERT INTO `data_template_data_rra` VALUES (282,1); +INSERT INTO `data_template_data_rra` VALUES (282,2); +INSERT INTO `data_template_data_rra` VALUES (282,3); +INSERT INTO `data_template_data_rra` VALUES (282,4); +INSERT INTO `data_template_data_rra` VALUES (283,1); +INSERT INTO `data_template_data_rra` VALUES (283,2); +INSERT INTO `data_template_data_rra` VALUES (283,3); +INSERT INTO `data_template_data_rra` VALUES (283,4); +INSERT INTO `data_template_data_rra` VALUES (284,1); +INSERT INTO `data_template_data_rra` VALUES (284,2); +INSERT INTO `data_template_data_rra` VALUES (284,3); +INSERT INTO `data_template_data_rra` VALUES (284,4); +INSERT INTO `data_template_data_rra` VALUES (285,1); +INSERT INTO `data_template_data_rra` VALUES (285,2); +INSERT INTO `data_template_data_rra` VALUES (285,3); +INSERT INTO `data_template_data_rra` VALUES (285,4); +INSERT INTO `data_template_data_rra` VALUES (286,1); +INSERT INTO `data_template_data_rra` VALUES (286,2); +INSERT INTO `data_template_data_rra` VALUES (286,3); +INSERT INTO `data_template_data_rra` VALUES (286,4); +INSERT INTO `data_template_data_rra` VALUES (287,1); +INSERT INTO `data_template_data_rra` VALUES (287,2); +INSERT INTO `data_template_data_rra` VALUES (287,3); +INSERT INTO `data_template_data_rra` VALUES (287,4); +INSERT INTO `data_template_data_rra` VALUES (288,1); +INSERT INTO `data_template_data_rra` VALUES (288,2); +INSERT INTO `data_template_data_rra` VALUES (288,3); +INSERT INTO `data_template_data_rra` VALUES (288,4); +INSERT INTO `data_template_data_rra` VALUES (289,1); +INSERT INTO `data_template_data_rra` VALUES (289,2); +INSERT INTO `data_template_data_rra` VALUES (289,3); +INSERT INTO `data_template_data_rra` VALUES (289,4); +INSERT INTO `data_template_data_rra` VALUES (290,1); +INSERT INTO `data_template_data_rra` VALUES (290,2); +INSERT INTO `data_template_data_rra` VALUES (290,3); +INSERT INTO `data_template_data_rra` VALUES (290,4); +INSERT INTO `data_template_data_rra` VALUES (291,1); +INSERT INTO `data_template_data_rra` VALUES (291,2); +INSERT INTO `data_template_data_rra` VALUES (291,3); +INSERT INTO `data_template_data_rra` VALUES (291,4); +INSERT INTO `data_template_data_rra` VALUES (292,1); +INSERT INTO `data_template_data_rra` VALUES (292,2); +INSERT INTO `data_template_data_rra` VALUES (292,3); +INSERT INTO `data_template_data_rra` VALUES (292,4); +INSERT INTO `data_template_data_rra` VALUES (293,1); +INSERT INTO `data_template_data_rra` VALUES (293,2); +INSERT INTO `data_template_data_rra` VALUES (293,3); +INSERT INTO `data_template_data_rra` VALUES (293,4); +INSERT INTO `data_template_data_rra` VALUES (294,1); +INSERT INTO `data_template_data_rra` VALUES (294,2); +INSERT INTO `data_template_data_rra` VALUES (294,3); +INSERT INTO `data_template_data_rra` VALUES (294,4); +INSERT INTO `data_template_data_rra` VALUES (295,1); +INSERT INTO `data_template_data_rra` VALUES (295,2); +INSERT INTO `data_template_data_rra` VALUES (295,3); +INSERT INTO `data_template_data_rra` VALUES (295,4); +INSERT INTO `data_template_data_rra` VALUES (296,1); +INSERT INTO `data_template_data_rra` VALUES (296,2); +INSERT INTO `data_template_data_rra` VALUES (296,3); +INSERT INTO `data_template_data_rra` VALUES (296,4); +INSERT INTO `data_template_data_rra` VALUES (297,1); +INSERT INTO `data_template_data_rra` VALUES (297,2); +INSERT INTO `data_template_data_rra` VALUES (297,3); +INSERT INTO `data_template_data_rra` VALUES (297,4); +INSERT INTO `data_template_data_rra` VALUES (298,1); +INSERT INTO `data_template_data_rra` VALUES (298,2); +INSERT INTO `data_template_data_rra` VALUES (298,3); +INSERT INTO `data_template_data_rra` VALUES (298,4); +INSERT INTO `data_template_data_rra` VALUES (299,1); +INSERT INTO `data_template_data_rra` VALUES (299,2); +INSERT INTO `data_template_data_rra` VALUES (299,3); +INSERT INTO `data_template_data_rra` VALUES (299,4); +INSERT INTO `data_template_data_rra` VALUES (300,1); +INSERT INTO `data_template_data_rra` VALUES (300,2); +INSERT INTO `data_template_data_rra` VALUES (300,3); +INSERT INTO `data_template_data_rra` VALUES (300,4); +INSERT INTO `data_template_data_rra` VALUES (301,1); +INSERT INTO `data_template_data_rra` VALUES (301,2); +INSERT INTO `data_template_data_rra` VALUES (301,3); +INSERT INTO `data_template_data_rra` VALUES (301,4); +INSERT INTO `data_template_data_rra` VALUES (302,1); +INSERT INTO `data_template_data_rra` VALUES (302,2); +INSERT INTO `data_template_data_rra` VALUES (302,3); +INSERT INTO `data_template_data_rra` VALUES (302,4); +INSERT INTO `data_template_data_rra` VALUES (303,1); +INSERT INTO `data_template_data_rra` VALUES (303,2); +INSERT INTO `data_template_data_rra` VALUES (303,3); +INSERT INTO `data_template_data_rra` VALUES (303,4); +INSERT INTO `data_template_data_rra` VALUES (304,1); +INSERT INTO `data_template_data_rra` VALUES (304,2); +INSERT INTO `data_template_data_rra` VALUES (304,3); +INSERT INTO `data_template_data_rra` VALUES (304,4); +INSERT INTO `data_template_data_rra` VALUES (305,1); +INSERT INTO `data_template_data_rra` VALUES (305,2); +INSERT INTO `data_template_data_rra` VALUES (305,3); +INSERT INTO `data_template_data_rra` VALUES (305,4); +INSERT INTO `data_template_data_rra` VALUES (306,1); +INSERT INTO `data_template_data_rra` VALUES (306,2); +INSERT INTO `data_template_data_rra` VALUES (306,3); +INSERT INTO `data_template_data_rra` VALUES (306,4); +INSERT INTO `data_template_data_rra` VALUES (307,1); +INSERT INTO `data_template_data_rra` VALUES (307,2); +INSERT INTO `data_template_data_rra` VALUES (307,3); +INSERT INTO `data_template_data_rra` VALUES (307,4); +INSERT INTO `data_template_data_rra` VALUES (308,1); +INSERT INTO `data_template_data_rra` VALUES (308,2); +INSERT INTO `data_template_data_rra` VALUES (308,3); +INSERT INTO `data_template_data_rra` VALUES (308,4); +INSERT INTO `data_template_data_rra` VALUES (309,1); +INSERT INTO `data_template_data_rra` VALUES (309,2); +INSERT INTO `data_template_data_rra` VALUES (309,3); +INSERT INTO `data_template_data_rra` VALUES (309,4); +INSERT INTO `data_template_data_rra` VALUES (310,1); +INSERT INTO `data_template_data_rra` VALUES (310,2); +INSERT INTO `data_template_data_rra` VALUES (310,3); +INSERT INTO `data_template_data_rra` VALUES (310,4); +INSERT INTO `data_template_data_rra` VALUES (311,1); +INSERT INTO `data_template_data_rra` VALUES (311,2); +INSERT INTO `data_template_data_rra` VALUES (311,3); +INSERT INTO `data_template_data_rra` VALUES (311,4); +INSERT INTO `data_template_data_rra` VALUES (312,1); +INSERT INTO `data_template_data_rra` VALUES (312,2); +INSERT INTO `data_template_data_rra` VALUES (312,3); +INSERT INTO `data_template_data_rra` VALUES (312,4); +INSERT INTO `data_template_data_rra` VALUES (313,1); +INSERT INTO `data_template_data_rra` VALUES (313,2); +INSERT INTO `data_template_data_rra` VALUES (313,3); +INSERT INTO `data_template_data_rra` VALUES (313,4); +INSERT INTO `data_template_data_rra` VALUES (314,1); +INSERT INTO `data_template_data_rra` VALUES (314,2); +INSERT INTO `data_template_data_rra` VALUES (314,3); +INSERT INTO `data_template_data_rra` VALUES (314,4); +INSERT INTO `data_template_data_rra` VALUES (315,1); +INSERT INTO `data_template_data_rra` VALUES (315,2); +INSERT INTO `data_template_data_rra` VALUES (315,3); +INSERT INTO `data_template_data_rra` VALUES (315,4); +INSERT INTO `data_template_data_rra` VALUES (316,1); +INSERT INTO `data_template_data_rra` VALUES (316,2); +INSERT INTO `data_template_data_rra` VALUES (316,3); +INSERT INTO `data_template_data_rra` VALUES (316,4); +INSERT INTO `data_template_data_rra` VALUES (317,1); +INSERT INTO `data_template_data_rra` VALUES (317,2); +INSERT INTO `data_template_data_rra` VALUES (317,3); +INSERT INTO `data_template_data_rra` VALUES (317,4); +INSERT INTO `data_template_data_rra` VALUES (318,1); +INSERT INTO `data_template_data_rra` VALUES (318,2); +INSERT INTO `data_template_data_rra` VALUES (318,3); +INSERT INTO `data_template_data_rra` VALUES (318,4); +INSERT INTO `data_template_data_rra` VALUES (319,1); +INSERT INTO `data_template_data_rra` VALUES (319,2); +INSERT INTO `data_template_data_rra` VALUES (319,3); +INSERT INTO `data_template_data_rra` VALUES (319,4); +INSERT INTO `data_template_data_rra` VALUES (320,1); +INSERT INTO `data_template_data_rra` VALUES (320,2); +INSERT INTO `data_template_data_rra` VALUES (320,3); +INSERT INTO `data_template_data_rra` VALUES (320,4); +INSERT INTO `data_template_data_rra` VALUES (321,1); +INSERT INTO `data_template_data_rra` VALUES (321,2); +INSERT INTO `data_template_data_rra` VALUES (321,3); +INSERT INTO `data_template_data_rra` VALUES (321,4); +INSERT INTO `data_template_data_rra` VALUES (322,1); +INSERT INTO `data_template_data_rra` VALUES (322,2); +INSERT INTO `data_template_data_rra` VALUES (322,3); +INSERT INTO `data_template_data_rra` VALUES (322,4); +INSERT INTO `data_template_data_rra` VALUES (323,1); +INSERT INTO `data_template_data_rra` VALUES (323,2); +INSERT INTO `data_template_data_rra` VALUES (323,3); +INSERT INTO `data_template_data_rra` VALUES (323,4); +INSERT INTO `data_template_data_rra` VALUES (324,1); +INSERT INTO `data_template_data_rra` VALUES (324,2); +INSERT INTO `data_template_data_rra` VALUES (324,3); +INSERT INTO `data_template_data_rra` VALUES (324,4); +INSERT INTO `data_template_data_rra` VALUES (325,1); +INSERT INTO `data_template_data_rra` VALUES (325,2); +INSERT INTO `data_template_data_rra` VALUES (325,3); +INSERT INTO `data_template_data_rra` VALUES (325,4); +INSERT INTO `data_template_data_rra` VALUES (326,1); +INSERT INTO `data_template_data_rra` VALUES (326,2); +INSERT INTO `data_template_data_rra` VALUES (326,3); +INSERT INTO `data_template_data_rra` VALUES (326,4); +INSERT INTO `data_template_data_rra` VALUES (327,1); +INSERT INTO `data_template_data_rra` VALUES (327,2); +INSERT INTO `data_template_data_rra` VALUES (327,3); +INSERT INTO `data_template_data_rra` VALUES (327,4); +INSERT INTO `data_template_data_rra` VALUES (328,1); +INSERT INTO `data_template_data_rra` VALUES (328,2); +INSERT INTO `data_template_data_rra` VALUES (328,3); +INSERT INTO `data_template_data_rra` VALUES (328,4); +INSERT INTO `data_template_data_rra` VALUES (329,1); +INSERT INTO `data_template_data_rra` VALUES (329,2); +INSERT INTO `data_template_data_rra` VALUES (329,3); +INSERT INTO `data_template_data_rra` VALUES (329,4); +INSERT INTO `data_template_data_rra` VALUES (330,1); +INSERT INTO `data_template_data_rra` VALUES (330,2); +INSERT INTO `data_template_data_rra` VALUES (330,3); +INSERT INTO `data_template_data_rra` VALUES (330,4); +INSERT INTO `data_template_data_rra` VALUES (331,1); +INSERT INTO `data_template_data_rra` VALUES (331,2); +INSERT INTO `data_template_data_rra` VALUES (331,3); +INSERT INTO `data_template_data_rra` VALUES (331,4); +INSERT INTO `data_template_data_rra` VALUES (332,1); +INSERT INTO `data_template_data_rra` VALUES (332,2); +INSERT INTO `data_template_data_rra` VALUES (332,3); +INSERT INTO `data_template_data_rra` VALUES (332,4); +INSERT INTO `data_template_data_rra` VALUES (333,1); +INSERT INTO `data_template_data_rra` VALUES (333,2); +INSERT INTO `data_template_data_rra` VALUES (333,3); +INSERT INTO `data_template_data_rra` VALUES (333,4); +INSERT INTO `data_template_data_rra` VALUES (334,1); +INSERT INTO `data_template_data_rra` VALUES (334,2); +INSERT INTO `data_template_data_rra` VALUES (334,3); +INSERT INTO `data_template_data_rra` VALUES (334,4); +INSERT INTO `data_template_data_rra` VALUES (335,1); +INSERT INTO `data_template_data_rra` VALUES (335,2); +INSERT INTO `data_template_data_rra` VALUES (335,3); +INSERT INTO `data_template_data_rra` VALUES (335,4); +INSERT INTO `data_template_data_rra` VALUES (336,1); +INSERT INTO `data_template_data_rra` VALUES (336,2); +INSERT INTO `data_template_data_rra` VALUES (336,3); +INSERT INTO `data_template_data_rra` VALUES (336,4); +INSERT INTO `data_template_data_rra` VALUES (337,1); +INSERT INTO `data_template_data_rra` VALUES (337,2); +INSERT INTO `data_template_data_rra` VALUES (337,3); +INSERT INTO `data_template_data_rra` VALUES (337,4); +INSERT INTO `data_template_data_rra` VALUES (338,1); +INSERT INTO `data_template_data_rra` VALUES (338,2); +INSERT INTO `data_template_data_rra` VALUES (338,3); +INSERT INTO `data_template_data_rra` VALUES (338,4); +INSERT INTO `data_template_data_rra` VALUES (339,1); +INSERT INTO `data_template_data_rra` VALUES (339,2); +INSERT INTO `data_template_data_rra` VALUES (339,3); +INSERT INTO `data_template_data_rra` VALUES (339,4); +INSERT INTO `data_template_data_rra` VALUES (340,1); +INSERT INTO `data_template_data_rra` VALUES (340,2); +INSERT INTO `data_template_data_rra` VALUES (340,3); +INSERT INTO `data_template_data_rra` VALUES (340,4); +INSERT INTO `data_template_data_rra` VALUES (341,1); +INSERT INTO `data_template_data_rra` VALUES (341,2); +INSERT INTO `data_template_data_rra` VALUES (341,3); +INSERT INTO `data_template_data_rra` VALUES (341,4); +INSERT INTO `data_template_data_rra` VALUES (342,1); +INSERT INTO `data_template_data_rra` VALUES (342,2); +INSERT INTO `data_template_data_rra` VALUES (342,3); +INSERT INTO `data_template_data_rra` VALUES (342,4); +INSERT INTO `data_template_data_rra` VALUES (343,1); +INSERT INTO `data_template_data_rra` VALUES (343,2); +INSERT INTO `data_template_data_rra` VALUES (343,3); +INSERT INTO `data_template_data_rra` VALUES (343,4); +INSERT INTO `data_template_data_rra` VALUES (344,1); +INSERT INTO `data_template_data_rra` VALUES (344,2); +INSERT INTO `data_template_data_rra` VALUES (344,3); +INSERT INTO `data_template_data_rra` VALUES (344,4); +INSERT INTO `data_template_data_rra` VALUES (345,1); +INSERT INTO `data_template_data_rra` VALUES (345,2); +INSERT INTO `data_template_data_rra` VALUES (345,3); +INSERT INTO `data_template_data_rra` VALUES (345,4); +INSERT INTO `data_template_data_rra` VALUES (346,1); +INSERT INTO `data_template_data_rra` VALUES (346,2); +INSERT INTO `data_template_data_rra` VALUES (346,3); +INSERT INTO `data_template_data_rra` VALUES (346,4); +INSERT INTO `data_template_data_rra` VALUES (347,1); +INSERT INTO `data_template_data_rra` VALUES (347,2); +INSERT INTO `data_template_data_rra` VALUES (347,3); +INSERT INTO `data_template_data_rra` VALUES (347,4); +INSERT INTO `data_template_data_rra` VALUES (348,1); +INSERT INTO `data_template_data_rra` VALUES (348,2); +INSERT INTO `data_template_data_rra` VALUES (348,3); +INSERT INTO `data_template_data_rra` VALUES (348,4); +INSERT INTO `data_template_data_rra` VALUES (349,1); +INSERT INTO `data_template_data_rra` VALUES (349,2); +INSERT INTO `data_template_data_rra` VALUES (349,3); +INSERT INTO `data_template_data_rra` VALUES (349,4); +INSERT INTO `data_template_data_rra` VALUES (350,1); +INSERT INTO `data_template_data_rra` VALUES (350,2); +INSERT INTO `data_template_data_rra` VALUES (350,3); +INSERT INTO `data_template_data_rra` VALUES (350,4); +INSERT INTO `data_template_data_rra` VALUES (351,1); +INSERT INTO `data_template_data_rra` VALUES (351,2); +INSERT INTO `data_template_data_rra` VALUES (351,3); +INSERT INTO `data_template_data_rra` VALUES (351,4); +INSERT INTO `data_template_data_rra` VALUES (352,1); +INSERT INTO `data_template_data_rra` VALUES (352,2); +INSERT INTO `data_template_data_rra` VALUES (352,3); +INSERT INTO `data_template_data_rra` VALUES (352,4); +INSERT INTO `data_template_data_rra` VALUES (353,1); +INSERT INTO `data_template_data_rra` VALUES (353,2); +INSERT INTO `data_template_data_rra` VALUES (353,3); +INSERT INTO `data_template_data_rra` VALUES (353,4); +INSERT INTO `data_template_data_rra` VALUES (354,1); +INSERT INTO `data_template_data_rra` VALUES (354,2); +INSERT INTO `data_template_data_rra` VALUES (354,3); +INSERT INTO `data_template_data_rra` VALUES (354,4); +INSERT INTO `data_template_data_rra` VALUES (355,1); +INSERT INTO `data_template_data_rra` VALUES (355,2); +INSERT INTO `data_template_data_rra` VALUES (355,3); +INSERT INTO `data_template_data_rra` VALUES (355,4); +INSERT INTO `data_template_data_rra` VALUES (356,1); +INSERT INTO `data_template_data_rra` VALUES (356,2); +INSERT INTO `data_template_data_rra` VALUES (356,3); +INSERT INTO `data_template_data_rra` VALUES (356,4); +INSERT INTO `data_template_data_rra` VALUES (357,1); +INSERT INTO `data_template_data_rra` VALUES (357,2); +INSERT INTO `data_template_data_rra` VALUES (357,3); +INSERT INTO `data_template_data_rra` VALUES (357,4); +INSERT INTO `data_template_data_rra` VALUES (358,1); +INSERT INTO `data_template_data_rra` VALUES (358,2); +INSERT INTO `data_template_data_rra` VALUES (358,3); +INSERT INTO `data_template_data_rra` VALUES (358,4); +INSERT INTO `data_template_data_rra` VALUES (359,1); +INSERT INTO `data_template_data_rra` VALUES (359,2); +INSERT INTO `data_template_data_rra` VALUES (359,3); +INSERT INTO `data_template_data_rra` VALUES (359,4); +INSERT INTO `data_template_data_rra` VALUES (360,1); +INSERT INTO `data_template_data_rra` VALUES (360,2); +INSERT INTO `data_template_data_rra` VALUES (360,3); +INSERT INTO `data_template_data_rra` VALUES (360,4); +INSERT INTO `data_template_data_rra` VALUES (361,1); +INSERT INTO `data_template_data_rra` VALUES (361,2); +INSERT INTO `data_template_data_rra` VALUES (361,3); +INSERT INTO `data_template_data_rra` VALUES (361,4); +INSERT INTO `data_template_data_rra` VALUES (362,1); +INSERT INTO `data_template_data_rra` VALUES (362,2); +INSERT INTO `data_template_data_rra` VALUES (362,3); +INSERT INTO `data_template_data_rra` VALUES (362,4); +INSERT INTO `data_template_data_rra` VALUES (363,1); +INSERT INTO `data_template_data_rra` VALUES (363,2); +INSERT INTO `data_template_data_rra` VALUES (363,3); +INSERT INTO `data_template_data_rra` VALUES (363,4); +INSERT INTO `data_template_data_rra` VALUES (364,1); +INSERT INTO `data_template_data_rra` VALUES (364,2); +INSERT INTO `data_template_data_rra` VALUES (364,3); +INSERT INTO `data_template_data_rra` VALUES (364,4); +INSERT INTO `data_template_data_rra` VALUES (365,1); +INSERT INTO `data_template_data_rra` VALUES (365,2); +INSERT INTO `data_template_data_rra` VALUES (365,3); +INSERT INTO `data_template_data_rra` VALUES (365,4); +INSERT INTO `data_template_data_rra` VALUES (366,1); +INSERT INTO `data_template_data_rra` VALUES (366,2); +INSERT INTO `data_template_data_rra` VALUES (366,3); +INSERT INTO `data_template_data_rra` VALUES (366,4); +INSERT INTO `data_template_data_rra` VALUES (367,1); +INSERT INTO `data_template_data_rra` VALUES (367,2); +INSERT INTO `data_template_data_rra` VALUES (367,3); +INSERT INTO `data_template_data_rra` VALUES (367,4); +INSERT INTO `data_template_data_rra` VALUES (368,1); +INSERT INTO `data_template_data_rra` VALUES (368,2); +INSERT INTO `data_template_data_rra` VALUES (368,3); +INSERT INTO `data_template_data_rra` VALUES (368,4); +INSERT INTO `data_template_data_rra` VALUES (369,1); +INSERT INTO `data_template_data_rra` VALUES (369,2); +INSERT INTO `data_template_data_rra` VALUES (369,3); +INSERT INTO `data_template_data_rra` VALUES (369,4); +INSERT INTO `data_template_data_rra` VALUES (370,1); +INSERT INTO `data_template_data_rra` VALUES (370,2); +INSERT INTO `data_template_data_rra` VALUES (370,3); +INSERT INTO `data_template_data_rra` VALUES (370,4); +INSERT INTO `data_template_data_rra` VALUES (371,1); +INSERT INTO `data_template_data_rra` VALUES (371,2); +INSERT INTO `data_template_data_rra` VALUES (371,3); +INSERT INTO `data_template_data_rra` VALUES (371,4); +INSERT INTO `data_template_data_rra` VALUES (372,1); +INSERT INTO `data_template_data_rra` VALUES (372,2); +INSERT INTO `data_template_data_rra` VALUES (372,3); +INSERT INTO `data_template_data_rra` VALUES (372,4); +INSERT INTO `data_template_data_rra` VALUES (373,1); +INSERT INTO `data_template_data_rra` VALUES (373,2); +INSERT INTO `data_template_data_rra` VALUES (373,3); +INSERT INTO `data_template_data_rra` VALUES (373,4); +INSERT INTO `data_template_data_rra` VALUES (374,1); +INSERT INTO `data_template_data_rra` VALUES (374,2); +INSERT INTO `data_template_data_rra` VALUES (374,3); +INSERT INTO `data_template_data_rra` VALUES (374,4); +INSERT INTO `data_template_data_rra` VALUES (375,1); +INSERT INTO `data_template_data_rra` VALUES (375,2); +INSERT INTO `data_template_data_rra` VALUES (375,3); +INSERT INTO `data_template_data_rra` VALUES (375,4); +INSERT INTO `data_template_data_rra` VALUES (376,1); +INSERT INTO `data_template_data_rra` VALUES (376,2); +INSERT INTO `data_template_data_rra` VALUES (376,3); +INSERT INTO `data_template_data_rra` VALUES (376,4); + +-- +-- Table structure for table `data_template_rrd` +-- + +CREATE TABLE `data_template_rrd` ( + `id` mediumint(8) unsigned NOT NULL auto_increment, + `hash` varchar(32) NOT NULL default '', + `local_data_template_rrd_id` mediumint(8) unsigned NOT NULL default '0', + `local_data_id` mediumint(8) unsigned NOT NULL default '0', + `data_template_id` mediumint(8) unsigned NOT NULL default '0', + `t_rrd_maximum` char(2) default NULL, + `rrd_maximum` bigint(20) NOT NULL default '0', + `t_rrd_minimum` char(2) default NULL, + `rrd_minimum` bigint(20) NOT NULL default '0', + `t_rrd_heartbeat` char(2) default NULL, + `rrd_heartbeat` mediumint(6) NOT NULL default '0', + `t_data_source_type_id` char(2) default NULL, + `data_source_type_id` smallint(5) NOT NULL default '0', + `t_data_source_name` char(2) default NULL, + `data_source_name` varchar(19) NOT NULL default '', + `t_data_input_field_id` char(2) default NULL, + `data_input_field_id` mediumint(8) unsigned NOT NULL default '0', + PRIMARY KEY (`id`), + UNIQUE KEY `id` (`id`), + KEY `id_2` (`id`), + KEY `local_data_id` (`local_data_id`), + KEY `data_template_id` (`data_template_id`) +) TYPE=MyISAM; + +-- +-- Dumping data for table `data_template_rrd` +-- + +INSERT INTO `data_template_rrd` VALUES (3,'2d53f9c76767a2ae8909f4152fd473a4',0,0,3,'',0,'',0,'',600,'',1,'','hdd_free','',0); +INSERT INTO `data_template_rrd` VALUES (4,'93d91aa7a3cc5473e7b195d5d6e6e675',0,0,3,'',0,'',0,'',600,'',1,'','hdd_used','',0); +INSERT INTO `data_template_rrd` VALUES (5,'7bee7987bbf30a3bc429d2a67c6b2595',0,0,4,'',100,'',0,'',600,'',2,'','cpu_system','',0); +INSERT INTO `data_template_rrd` VALUES (6,'ddccd7fbdece499da0235b4098b87f9e',0,0,5,'',100,'',0,'',600,'',2,'','cpu_user','',0); +INSERT INTO `data_template_rrd` VALUES (7,'122ab2097f8c6403b7b90cde7b9e2bc2',0,0,6,'',100,'',0,'',600,'',2,'','cpu_nice','',0); +INSERT INTO `data_template_rrd` VALUES (8,'34f50c820092ea0fecba25b4b94a7946',0,0,7,'',100,'',0,'',600,'',1,'','wrls_noise','',0); +INSERT INTO `data_template_rrd` VALUES (9,'830b811d1834e5ba0e2af93bd92db057',0,0,8,'',100,'',0,'',600,'',1,'','wrls_signal','',0); +INSERT INTO `data_template_rrd` VALUES (10,'2f1b016a2465eef3f7369f6313cd4a94',0,0,9,'',1000000,'',0,'',600,'',2,'','wrls_transmits','',0); +INSERT INTO `data_template_rrd` VALUES (11,'28ffcecaf8b50e49f676f2d4a822685d',0,0,10,'',1000000,'',0,'',600,'',2,'','wrls_retransmits','',0); +INSERT INTO `data_template_rrd` VALUES (12,'8175ca431c8fe50efff5a1d3ae51b55d',0,0,11,'',500,'',0,'',600,'',1,'','load_1min','',17); +INSERT INTO `data_template_rrd` VALUES (13,'a2eeb8acd6ea01cd0e3ac852965c0eb6',0,0,11,'',500,'',0,'',600,'',1,'','load_5min','',18); +INSERT INTO `data_template_rrd` VALUES (14,'9f951b7fb3b19285a411aebb5254a831',0,0,11,'',500,'',0,'',600,'',1,'','load_15min','',19); +INSERT INTO `data_template_rrd` VALUES (16,'a4df3de5238d3beabee1a2fe140d3d80',0,0,13,'',0,'',0,'',600,'',1,'','mem_buffers','',23); +INSERT INTO `data_template_rrd` VALUES (18,'7fea6acc9b1a19484b4cb4cef2b6c5da',0,0,15,'',0,'',0,'',600,'',1,'','mem_swap','',23); +INSERT INTO `data_template_rrd` VALUES (19,'f1ba3a5b17b95825021241398bb0f277',0,0,16,'',1000,'',0,'',600,'',1,'','proc','',24); +INSERT INTO `data_template_rrd` VALUES (20,'46a5afe8e6c0419172c76421dc9e304a',0,0,17,'',500,'',0,'',600,'',1,'','users','',21); +INSERT INTO `data_template_rrd` VALUES (21,'962fd1994fe9cae87fb36436bdb8a742',0,0,18,'',5000,'',0,'',600,'',1,'','ping','',30); +INSERT INTO `data_template_rrd` VALUES (22,'7a8dd1111a8624369906bf2cd6ea9ca9',0,0,19,'',100000,'',0,'',600,'',1,'','total_users','',0); +INSERT INTO `data_template_rrd` VALUES (23,'ddb6e74d34d2f1969ce85f809dbac23d',0,0,20,'',100000,'',0,'',600,'',1,'','total_logins','',0); +INSERT INTO `data_template_rrd` VALUES (80,'50ccbe193c6c7fc29fb9f726cd6c48ee',0,0,45,'',1000,'',0,'',600,'',1,'','proc','',0); +INSERT INTO `data_template_rrd` VALUES (25,'289311d10336941d33d9a1c48a7b11ee',0,0,22,'',10000000,'',0,'',600,'',2,'','fs_reads','',0); +INSERT INTO `data_template_rrd` VALUES (26,'02216f036cca04655ee2f67fedb6f4f0',0,0,23,'',10000000,'',0,'',600,'',2,'','fs_writes','',0); +INSERT INTO `data_template_rrd` VALUES (27,'9e402c0f29131ef7139c20bd500b4e8a',0,0,24,'',10000000,'',0,'',600,'',2,'','cache_checks','',0); +INSERT INTO `data_template_rrd` VALUES (28,'46717dfe3c8c030d8b5ec0874f9dbdca',0,0,25,'',1000000,'',0,'',600,'',2,'','cache_hits','',0); +INSERT INTO `data_template_rrd` VALUES (29,'7a88a60729af62561812c43bde61dfc1',0,0,26,'',100000,'',0,'',600,'',1,'','open_files','',0); +INSERT INTO `data_template_rrd` VALUES (30,'3c0fd1a188b64a662dfbfa985648397b',0,0,27,'',100,'',0,'',600,'',1,'','5min_cpu','',0); +INSERT INTO `data_template_rrd` VALUES (33,'ed44c2438ef7e46e2aeed2b6c580815c',0,0,30,'',500,'',0,'',600,'',1,'','load_1min','',0); +INSERT INTO `data_template_rrd` VALUES (34,'9b3a00c9e3530d9e58895ac38271361e',0,0,31,'',500,'',0,'',600,'',1,'','load_5min','',0); +INSERT INTO `data_template_rrd` VALUES (35,'6746c2ed836ecc68a71bbddf06b0e5d9',0,0,32,'',500,'',0,'',600,'',1,'','load_15min','',0); +INSERT INTO `data_template_rrd` VALUES (36,'9835d9e1a8c78aa2475d752e8fa74812',0,0,33,'',10000000,'',0,'',600,'',1,'','mem_buffers','',0); +INSERT INTO `data_template_rrd` VALUES (37,'9c78dc1981bcea841b8c827c6dc0d26c',0,0,34,'',10000000,'',0,'',600,'',1,'','mem_free','',0); +INSERT INTO `data_template_rrd` VALUES (38,'62a56dc76fe4cd8566a31b5df0274cc3',0,0,35,'',0,'',0,'',600,'',1,'','vol_total','',0); +INSERT INTO `data_template_rrd` VALUES (39,'2e366ab49d0e0238fb4e3141ea5a88c3',0,0,35,'',0,'',0,'',600,'',1,'','vol_free','',0); +INSERT INTO `data_template_rrd` VALUES (40,'dceedc84718dd93a5affe4b190bca810',0,0,35,'',0,'',0,'',600,'',1,'','vol_freeable','',0); +INSERT INTO `data_template_rrd` VALUES (42,'93330503f1cf67db00d8fe636035e545',0,0,36,'',100000000000,'',0,'',600,'',1,'','dir_total','',0); +INSERT INTO `data_template_rrd` VALUES (43,'6b0fe4aa6aaf22ef9cfbbe96d87fa0d7',0,0,36,'',100000000000,'',0,'',600,'',1,'','dir_used','',0); +INSERT INTO `data_template_rrd` VALUES (44,'4c82df790325d789d304e6ee5cd4ab7d',0,0,37,'',0,'',0,'',600,'',1,'','hdd_free','',0); +INSERT INTO `data_template_rrd` VALUES (54,'2df25c57022b0c7e7d0be4c035ada1a0',0,0,41,'on',100000000,'',0,'',600,'',2,'','traffic_in','',0); +INSERT INTO `data_template_rrd` VALUES (46,'c802e2fd77f5b0a4c4298951bf65957c',0,0,38,'',10000000,'',0,'',600,'',2,'','errors_in','',0); +INSERT INTO `data_template_rrd` VALUES (47,'4e2a72240955380dc8ffacfcc8c09874',0,0,38,'',10000000,'',0,'',600,'',2,'','discards_in','',0); +INSERT INTO `data_template_rrd` VALUES (48,'636672962b5bb2f31d86985e2ab4bdfe',0,0,39,'',1000000000,'',0,'',600,'',2,'','unicast_in','',0); +INSERT INTO `data_template_rrd` VALUES (49,'18ce92c125a236a190ee9dd948f56268',0,0,39,'',1000000000,'',0,'',600,'',2,'','unicast_out','',0); +INSERT INTO `data_template_rrd` VALUES (50,'13ebb33f9cbccfcba828db1075a8167c',0,0,38,'',10000000,'',0,'',600,'',2,'','discards_out','',0); +INSERT INTO `data_template_rrd` VALUES (51,'31399c3725bee7e09ec04049e3d5cd17',0,0,38,'',10000000,'',0,'',600,'',2,'','errors_out','',0); +INSERT INTO `data_template_rrd` VALUES (52,'7be68cbc4ee0b2973eb9785f8c7a35c7',0,0,40,'',1000000000,'',0,'',600,'',2,'','nonunicast_out','',0); +INSERT INTO `data_template_rrd` VALUES (53,'93e2b6f59b10b13f2ddf2da3ae98b89a',0,0,40,'',1000000000,'',0,'',600,'',2,'','nonunicast_in','',0); +INSERT INTO `data_template_rrd` VALUES (55,'721c0794526d1ac1c359f27dc56faa49',0,0,41,'on',100000000,'',0,'',600,'',2,'','traffic_out','',0); +INSERT INTO `data_template_rrd` VALUES (56,'07175541991def89bd02d28a215f6fcc',0,0,37,'',0,'',0,'',600,'',1,'','hdd_used','',0); +INSERT INTO `data_template_rrd` VALUES (76,'07492e5cace6d74e7db3cb1fc005a3f3',0,0,42,'',100,'',0,'',600,'',1,'','cpu','',0); +INSERT INTO `data_template_rrd` VALUES (92,'165a0da5f461561c85d092dfe96b9551',0,0,43,'',0,'',0,'',600,'',1,'','hdd_total','',0); +INSERT INTO `data_template_rrd` VALUES (78,'0ee6bb54957f6795a5369a29f818d860',0,0,43,'',0,'',0,'',600,'',1,'','hdd_used','',0); +INSERT INTO `data_template_rrd` VALUES (79,'9825aaf7c0bdf1554c5b4b86680ac2c0',0,0,44,'',100,'',0,'',600,'',1,'','cpu','',0); +INSERT INTO `data_template_rrd` VALUES (81,'9464c91bcff47f23085ae5adae6ab987',0,0,46,'',5000,'',0,'',600,'',1,'','users','',0); +INSERT INTO `data_template_rrd` VALUES (84,'',16,3,13,NULL,0,NULL,0,NULL,600,NULL,1,NULL,'mem_buffers',NULL,23); +INSERT INTO `data_template_rrd` VALUES (85,'',18,4,15,NULL,0,NULL,0,NULL,600,NULL,1,NULL,'mem_swap',NULL,23); +INSERT INTO `data_template_rrd` VALUES (86,'',12,5,11,NULL,500,NULL,0,NULL,600,NULL,1,NULL,'load_1min',NULL,17); +INSERT INTO `data_template_rrd` VALUES (87,'',13,5,11,NULL,500,NULL,0,NULL,600,NULL,1,NULL,'load_5min',NULL,18); +INSERT INTO `data_template_rrd` VALUES (88,'',14,5,11,NULL,500,NULL,0,NULL,600,NULL,1,NULL,'load_15min',NULL,19); +INSERT INTO `data_template_rrd` VALUES (89,'',20,6,17,NULL,500,NULL,0,NULL,600,NULL,1,NULL,'users',NULL,21); +INSERT INTO `data_template_rrd` VALUES (90,'',19,7,16,NULL,1000,NULL,0,NULL,600,NULL,1,NULL,'proc',NULL,24); +INSERT INTO `data_template_rrd` VALUES (96,'224b83ea73f55f8a861bcf4c9bea0472',0,0,48,'on',100,'',0,'',600,'on',1,'','snmp_oid','',0); +INSERT INTO `data_template_rrd` VALUES (95,'7a6ca455bbeff99ca891371bc77d5cf9',0,0,47,'',10000000,'',0,'',600,'',1,'','mem_cache','',0); +INSERT INTO `data_template_rrd` VALUES (97,'',30,8,27,NULL,100,NULL,0,NULL,600,NULL,1,NULL,'5min_cpu',NULL,0); +INSERT INTO `data_template_rrd` VALUES (98,'',54,9,41,NULL,100000000,NULL,0,NULL,600,NULL,2,NULL,'traffic_in',NULL,0); +INSERT INTO `data_template_rrd` VALUES (99,'',55,9,41,NULL,100000000,NULL,0,NULL,600,NULL,2,NULL,'traffic_out',NULL,0); +INSERT INTO `data_template_rrd` VALUES (100,'',54,10,41,NULL,100000000,NULL,0,NULL,600,NULL,2,NULL,'traffic_in',NULL,0); +INSERT INTO `data_template_rrd` VALUES (101,'',55,10,41,NULL,100000000,NULL,0,NULL,600,NULL,2,NULL,'traffic_out',NULL,0); +INSERT INTO `data_template_rrd` VALUES (102,'',54,11,41,NULL,100000000,NULL,0,NULL,600,NULL,2,NULL,'traffic_in',NULL,0); +INSERT INTO `data_template_rrd` VALUES (103,'',55,11,41,NULL,100000000,NULL,0,NULL,600,NULL,2,NULL,'traffic_out',NULL,0); +INSERT INTO `data_template_rrd` VALUES (104,'',54,12,41,NULL,100000000,NULL,0,NULL,600,NULL,2,NULL,'traffic_in',NULL,0); +INSERT INTO `data_template_rrd` VALUES (105,'',55,12,41,NULL,100000000,NULL,0,NULL,600,NULL,2,NULL,'traffic_out',NULL,0); +INSERT INTO `data_template_rrd` VALUES (106,'',54,13,41,NULL,100000000,NULL,0,NULL,600,NULL,2,NULL,'traffic_in',NULL,0); +INSERT INTO `data_template_rrd` VALUES (107,'',55,13,41,NULL,100000000,NULL,0,NULL,600,NULL,2,NULL,'traffic_out',NULL,0); +INSERT INTO `data_template_rrd` VALUES (108,'',54,14,41,NULL,100000000,NULL,0,NULL,600,NULL,2,NULL,'traffic_in',NULL,0); +INSERT INTO `data_template_rrd` VALUES (109,'',55,14,41,NULL,100000000,NULL,0,NULL,600,NULL,2,NULL,'traffic_out',NULL,0); +INSERT INTO `data_template_rrd` VALUES (110,'',54,15,41,NULL,100000000,NULL,0,NULL,600,NULL,2,NULL,'traffic_in',NULL,0); +INSERT INTO `data_template_rrd` VALUES (111,'',55,15,41,NULL,100000000,NULL,0,NULL,600,NULL,2,NULL,'traffic_out',NULL,0); +INSERT INTO `data_template_rrd` VALUES (112,'',54,16,41,NULL,100000000,NULL,0,NULL,600,NULL,2,NULL,'traffic_in',NULL,0); +INSERT INTO `data_template_rrd` VALUES (113,'',55,16,41,NULL,100000000,NULL,0,NULL,600,NULL,2,NULL,'traffic_out',NULL,0); +INSERT INTO `data_template_rrd` VALUES (114,'',54,17,41,NULL,100000000,NULL,0,NULL,600,NULL,2,NULL,'traffic_in',NULL,0); +INSERT INTO `data_template_rrd` VALUES (115,'',55,17,41,NULL,100000000,NULL,0,NULL,600,NULL,2,NULL,'traffic_out',NULL,0); +INSERT INTO `data_template_rrd` VALUES (116,'',54,18,41,NULL,100000000,NULL,0,NULL,600,NULL,2,NULL,'traffic_in',NULL,0); +INSERT INTO `data_template_rrd` VALUES (117,'',55,18,41,NULL,100000000,NULL,0,NULL,600,NULL,2,NULL,'traffic_out',NULL,0); +INSERT INTO `data_template_rrd` VALUES (118,'',54,19,41,NULL,100000000,NULL,0,NULL,600,NULL,2,NULL,'traffic_in',NULL,0); +INSERT INTO `data_template_rrd` VALUES (119,'',55,19,41,NULL,100000000,NULL,0,NULL,600,NULL,2,NULL,'traffic_out',NULL,0); +INSERT INTO `data_template_rrd` VALUES (120,'',54,20,41,NULL,100000000,NULL,0,NULL,600,NULL,2,NULL,'traffic_in',NULL,0); +INSERT INTO `data_template_rrd` VALUES (121,'',55,20,41,NULL,100000000,NULL,0,NULL,600,NULL,2,NULL,'traffic_out',NULL,0); +INSERT INTO `data_template_rrd` VALUES (122,'',54,21,41,NULL,100000000,NULL,0,NULL,600,NULL,2,NULL,'traffic_in',NULL,0); +INSERT INTO `data_template_rrd` VALUES (123,'',55,21,41,NULL,100000000,NULL,0,NULL,600,NULL,2,NULL,'traffic_out',NULL,0); +INSERT INTO `data_template_rrd` VALUES (124,'',54,22,41,NULL,100000000,NULL,0,NULL,600,NULL,2,NULL,'traffic_in',NULL,0); +INSERT INTO `data_template_rrd` VALUES (125,'',55,22,41,NULL,100000000,NULL,0,NULL,600,NULL,2,NULL,'traffic_out',NULL,0); +INSERT INTO `data_template_rrd` VALUES (126,'',54,23,41,NULL,100000000,NULL,0,NULL,600,NULL,2,NULL,'traffic_in',NULL,0); +INSERT INTO `data_template_rrd` VALUES (127,'',55,23,41,NULL,100000000,NULL,0,NULL,600,NULL,2,NULL,'traffic_out',NULL,0); +INSERT INTO `data_template_rrd` VALUES (128,'',54,24,41,NULL,100000000,NULL,0,NULL,600,NULL,2,NULL,'traffic_in',NULL,0); +INSERT INTO `data_template_rrd` VALUES (129,'',55,24,41,NULL,100000000,NULL,0,NULL,600,NULL,2,NULL,'traffic_out',NULL,0); +INSERT INTO `data_template_rrd` VALUES (130,'',54,25,41,NULL,100000000,NULL,0,NULL,600,NULL,2,NULL,'traffic_in',NULL,0); +INSERT INTO `data_template_rrd` VALUES (131,'',55,25,41,NULL,100000000,NULL,0,NULL,600,NULL,2,NULL,'traffic_out',NULL,0); +INSERT INTO `data_template_rrd` VALUES (132,'',54,26,41,NULL,100000000,NULL,0,NULL,600,NULL,2,NULL,'traffic_in',NULL,0); +INSERT INTO `data_template_rrd` VALUES (133,'',55,26,41,NULL,100000000,NULL,0,NULL,600,NULL,2,NULL,'traffic_out',NULL,0); +INSERT INTO `data_template_rrd` VALUES (134,'',54,27,41,NULL,100000000,NULL,0,NULL,600,NULL,2,NULL,'traffic_in',NULL,0); +INSERT INTO `data_template_rrd` VALUES (135,'',55,27,41,NULL,100000000,NULL,0,NULL,600,NULL,2,NULL,'traffic_out',NULL,0); +INSERT INTO `data_template_rrd` VALUES (136,'',54,28,41,NULL,100000000,NULL,0,NULL,600,NULL,2,NULL,'traffic_in',NULL,0); +INSERT INTO `data_template_rrd` VALUES (137,'',55,28,41,NULL,100000000,NULL,0,NULL,600,NULL,2,NULL,'traffic_out',NULL,0); +INSERT INTO `data_template_rrd` VALUES (138,'',54,29,41,NULL,100000000,NULL,0,NULL,600,NULL,2,NULL,'traffic_in',NULL,0); +INSERT INTO `data_template_rrd` VALUES (139,'',55,29,41,NULL,100000000,NULL,0,NULL,600,NULL,2,NULL,'traffic_out',NULL,0); +INSERT INTO `data_template_rrd` VALUES (140,'',54,30,41,NULL,100000000,NULL,0,NULL,600,NULL,2,NULL,'traffic_in',NULL,0); +INSERT INTO `data_template_rrd` VALUES (141,'',55,30,41,NULL,100000000,NULL,0,NULL,600,NULL,2,NULL,'traffic_out',NULL,0); +INSERT INTO `data_template_rrd` VALUES (142,'',54,31,41,NULL,100000000,NULL,0,NULL,600,NULL,2,NULL,'traffic_in',NULL,0); +INSERT INTO `data_template_rrd` VALUES (143,'',55,31,41,NULL,100000000,NULL,0,NULL,600,NULL,2,NULL,'traffic_out',NULL,0); +INSERT INTO `data_template_rrd` VALUES (144,'',54,32,41,NULL,100000000,NULL,0,NULL,600,NULL,2,NULL,'traffic_in',NULL,0); +INSERT INTO `data_template_rrd` VALUES (145,'',55,32,41,NULL,100000000,NULL,0,NULL,600,NULL,2,NULL,'traffic_out',NULL,0); +INSERT INTO `data_template_rrd` VALUES (146,'',54,33,41,NULL,100000000,NULL,0,NULL,600,NULL,2,NULL,'traffic_in',NULL,0); +INSERT INTO `data_template_rrd` VALUES (147,'',55,33,41,NULL,100000000,NULL,0,NULL,600,NULL,2,NULL,'traffic_out',NULL,0); +INSERT INTO `data_template_rrd` VALUES (148,'',54,34,41,NULL,100000000,NULL,0,NULL,600,NULL,2,NULL,'traffic_in',NULL,0); +INSERT INTO `data_template_rrd` VALUES (149,'',55,34,41,NULL,100000000,NULL,0,NULL,600,NULL,2,NULL,'traffic_out',NULL,0); +INSERT INTO `data_template_rrd` VALUES (150,'',54,35,41,NULL,100000000,NULL,0,NULL,600,NULL,2,NULL,'traffic_in',NULL,0); +INSERT INTO `data_template_rrd` VALUES (151,'',55,35,41,NULL,100000000,NULL,0,NULL,600,NULL,2,NULL,'traffic_out',NULL,0); +INSERT INTO `data_template_rrd` VALUES (152,'',54,36,41,NULL,100000000,NULL,0,NULL,600,NULL,2,NULL,'traffic_in',NULL,0); +INSERT INTO `data_template_rrd` VALUES (153,'',55,36,41,NULL,100000000,NULL,0,NULL,600,NULL,2,NULL,'traffic_out',NULL,0); +INSERT INTO `data_template_rrd` VALUES (154,'',54,37,41,NULL,100000000,NULL,0,NULL,600,NULL,2,NULL,'traffic_in',NULL,0); +INSERT INTO `data_template_rrd` VALUES (155,'',55,37,41,NULL,100000000,NULL,0,NULL,600,NULL,2,NULL,'traffic_out',NULL,0); +INSERT INTO `data_template_rrd` VALUES (156,'',30,38,27,NULL,100,NULL,0,NULL,600,NULL,1,NULL,'5min_cpu',NULL,0); +INSERT INTO `data_template_rrd` VALUES (157,'',54,39,41,NULL,100000000,NULL,0,NULL,600,NULL,2,NULL,'traffic_in',NULL,0); +INSERT INTO `data_template_rrd` VALUES (158,'',55,39,41,NULL,100000000,NULL,0,NULL,600,NULL,2,NULL,'traffic_out',NULL,0); +INSERT INTO `data_template_rrd` VALUES (159,'',54,40,41,NULL,100000000,NULL,0,NULL,600,NULL,2,NULL,'traffic_in',NULL,0); +INSERT INTO `data_template_rrd` VALUES (160,'',55,40,41,NULL,100000000,NULL,0,NULL,600,NULL,2,NULL,'traffic_out',NULL,0); +INSERT INTO `data_template_rrd` VALUES (161,'',54,41,41,NULL,100000000,NULL,0,NULL,600,NULL,2,NULL,'traffic_in',NULL,0); +INSERT INTO `data_template_rrd` VALUES (162,'',55,41,41,NULL,100000000,NULL,0,NULL,600,NULL,2,NULL,'traffic_out',NULL,0); +INSERT INTO `data_template_rrd` VALUES (163,'',54,42,41,NULL,100000000,NULL,0,NULL,600,NULL,2,NULL,'traffic_in',NULL,0); +INSERT INTO `data_template_rrd` VALUES (164,'',55,42,41,NULL,100000000,NULL,0,NULL,600,NULL,2,NULL,'traffic_out',NULL,0); +INSERT INTO `data_template_rrd` VALUES (165,'',54,43,41,NULL,100000000,NULL,0,NULL,600,NULL,2,NULL,'traffic_in',NULL,0); +INSERT INTO `data_template_rrd` VALUES (166,'',55,43,41,NULL,100000000,NULL,0,NULL,600,NULL,2,NULL,'traffic_out',NULL,0); +INSERT INTO `data_template_rrd` VALUES (167,'',54,44,41,NULL,100000000,NULL,0,NULL,600,NULL,2,NULL,'traffic_in',NULL,0); +INSERT INTO `data_template_rrd` VALUES (168,'',55,44,41,NULL,100000000,NULL,0,NULL,600,NULL,2,NULL,'traffic_out',NULL,0); +INSERT INTO `data_template_rrd` VALUES (169,'',54,45,41,NULL,100000000,NULL,0,NULL,600,NULL,2,NULL,'traffic_in',NULL,0); +INSERT INTO `data_template_rrd` VALUES (170,'',55,45,41,NULL,100000000,NULL,0,NULL,600,NULL,2,NULL,'traffic_out',NULL,0); +INSERT INTO `data_template_rrd` VALUES (171,'',54,46,41,NULL,100000000,NULL,0,NULL,600,NULL,2,NULL,'traffic_in',NULL,0); +INSERT INTO `data_template_rrd` VALUES (172,'',55,46,41,NULL,100000000,NULL,0,NULL,600,NULL,2,NULL,'traffic_out',NULL,0); +INSERT INTO `data_template_rrd` VALUES (173,'',54,47,41,NULL,100000000,NULL,0,NULL,600,NULL,2,NULL,'traffic_in',NULL,0); +INSERT INTO `data_template_rrd` VALUES (174,'',55,47,41,NULL,100000000,NULL,0,NULL,600,NULL,2,NULL,'traffic_out',NULL,0); +INSERT INTO `data_template_rrd` VALUES (175,'',54,48,41,NULL,100000000,NULL,0,NULL,600,NULL,2,NULL,'traffic_in',NULL,0); +INSERT INTO `data_template_rrd` VALUES (176,'',55,48,41,NULL,100000000,NULL,0,NULL,600,NULL,2,NULL,'traffic_out',NULL,0); +INSERT INTO `data_template_rrd` VALUES (177,'',54,49,41,NULL,100000000,NULL,0,NULL,600,NULL,2,NULL,'traffic_in',NULL,0); +INSERT INTO `data_template_rrd` VALUES (178,'',55,49,41,NULL,100000000,NULL,0,NULL,600,NULL,2,NULL,'traffic_out',NULL,0); +INSERT INTO `data_template_rrd` VALUES (179,'',54,50,41,NULL,100000000,NULL,0,NULL,600,NULL,2,NULL,'traffic_in',NULL,0); +INSERT INTO `data_template_rrd` VALUES (180,'',55,50,41,NULL,100000000,NULL,0,NULL,600,NULL,2,NULL,'traffic_out',NULL,0); +INSERT INTO `data_template_rrd` VALUES (181,'',54,51,41,NULL,100000000,NULL,0,NULL,600,NULL,2,NULL,'traffic_in',NULL,0); +INSERT INTO `data_template_rrd` VALUES (182,'',55,51,41,NULL,100000000,NULL,0,NULL,600,NULL,2,NULL,'traffic_out',NULL,0); +INSERT INTO `data_template_rrd` VALUES (183,'',54,52,41,NULL,100000000,NULL,0,NULL,600,NULL,2,NULL,'traffic_in',NULL,0); +INSERT INTO `data_template_rrd` VALUES (184,'',55,52,41,NULL,100000000,NULL,0,NULL,600,NULL,2,NULL,'traffic_out',NULL,0); +INSERT INTO `data_template_rrd` VALUES (185,'',54,53,41,NULL,100000000,NULL,0,NULL,600,NULL,2,NULL,'traffic_in',NULL,0); +INSERT INTO `data_template_rrd` VALUES (186,'',55,53,41,NULL,100000000,NULL,0,NULL,600,NULL,2,NULL,'traffic_out',NULL,0); +INSERT INTO `data_template_rrd` VALUES (187,'',54,54,41,NULL,100000000,NULL,0,NULL,600,NULL,2,NULL,'traffic_in',NULL,0); +INSERT INTO `data_template_rrd` VALUES (188,'',55,54,41,NULL,100000000,NULL,0,NULL,600,NULL,2,NULL,'traffic_out',NULL,0); +INSERT INTO `data_template_rrd` VALUES (189,'',54,55,41,NULL,100000000,NULL,0,NULL,600,NULL,2,NULL,'traffic_in',NULL,0); +INSERT INTO `data_template_rrd` VALUES (190,'',55,55,41,NULL,100000000,NULL,0,NULL,600,NULL,2,NULL,'traffic_out',NULL,0); +INSERT INTO `data_template_rrd` VALUES (191,'',54,56,41,NULL,100000000,NULL,0,NULL,600,NULL,2,NULL,'traffic_in',NULL,0); +INSERT INTO `data_template_rrd` VALUES (192,'',55,56,41,NULL,100000000,NULL,0,NULL,600,NULL,2,NULL,'traffic_out',NULL,0); +INSERT INTO `data_template_rrd` VALUES (193,'',54,57,41,NULL,100000000,NULL,0,NULL,600,NULL,2,NULL,'traffic_in',NULL,0); +INSERT INTO `data_template_rrd` VALUES (194,'',55,57,41,NULL,100000000,NULL,0,NULL,600,NULL,2,NULL,'traffic_out',NULL,0); +INSERT INTO `data_template_rrd` VALUES (195,'',54,58,41,NULL,100000000,NULL,0,NULL,600,NULL,2,NULL,'traffic_in',NULL,0); +INSERT INTO `data_template_rrd` VALUES (196,'',55,58,41,NULL,100000000,NULL,0,NULL,600,NULL,2,NULL,'traffic_out',NULL,0); +INSERT INTO `data_template_rrd` VALUES (197,'',54,59,41,NULL,100000000,NULL,0,NULL,600,NULL,2,NULL,'traffic_in',NULL,0); +INSERT INTO `data_template_rrd` VALUES (198,'',55,59,41,NULL,100000000,NULL,0,NULL,600,NULL,2,NULL,'traffic_out',NULL,0); +INSERT INTO `data_template_rrd` VALUES (199,'',54,60,41,NULL,100000000,NULL,0,NULL,600,NULL,2,NULL,'traffic_in',NULL,0); +INSERT INTO `data_template_rrd` VALUES (200,'',55,60,41,NULL,100000000,NULL,0,NULL,600,NULL,2,NULL,'traffic_out',NULL,0); +INSERT INTO `data_template_rrd` VALUES (201,'',54,61,41,NULL,100000000,NULL,0,NULL,600,NULL,2,NULL,'traffic_in',NULL,0); +INSERT INTO `data_template_rrd` VALUES (202,'',55,61,41,NULL,100000000,NULL,0,NULL,600,NULL,2,NULL,'traffic_out',NULL,0); +INSERT INTO `data_template_rrd` VALUES (203,'',54,62,41,NULL,100000000,NULL,0,NULL,600,NULL,2,NULL,'traffic_in',NULL,0); +INSERT INTO `data_template_rrd` VALUES (204,'',55,62,41,NULL,100000000,NULL,0,NULL,600,NULL,2,NULL,'traffic_out',NULL,0); +INSERT INTO `data_template_rrd` VALUES (205,'',54,63,41,NULL,100000000,NULL,0,NULL,600,NULL,2,NULL,'traffic_in',NULL,0); +INSERT INTO `data_template_rrd` VALUES (206,'',55,63,41,NULL,100000000,NULL,0,NULL,600,NULL,2,NULL,'traffic_out',NULL,0); +INSERT INTO `data_template_rrd` VALUES (207,'',54,64,41,NULL,100000000,NULL,0,NULL,600,NULL,2,NULL,'traffic_in',NULL,0); +INSERT INTO `data_template_rrd` VALUES (208,'',55,64,41,NULL,100000000,NULL,0,NULL,600,NULL,2,NULL,'traffic_out',NULL,0); +INSERT INTO `data_template_rrd` VALUES (209,'',54,65,41,NULL,100000000,NULL,0,NULL,600,NULL,2,NULL,'traffic_in',NULL,0); +INSERT INTO `data_template_rrd` VALUES (210,'',55,65,41,NULL,100000000,NULL,0,NULL,600,NULL,2,NULL,'traffic_out',NULL,0); +INSERT INTO `data_template_rrd` VALUES (211,'',54,66,41,NULL,100000000,NULL,0,NULL,600,NULL,2,NULL,'traffic_in',NULL,0); +INSERT INTO `data_template_rrd` VALUES (212,'',55,66,41,NULL,100000000,NULL,0,NULL,600,NULL,2,NULL,'traffic_out',NULL,0); +INSERT INTO `data_template_rrd` VALUES (213,'',54,67,41,NULL,100000000,NULL,0,NULL,600,NULL,2,NULL,'traffic_in',NULL,0); +INSERT INTO `data_template_rrd` VALUES (214,'',55,67,41,NULL,100000000,NULL,0,NULL,600,NULL,2,NULL,'traffic_out',NULL,0); +INSERT INTO `data_template_rrd` VALUES (215,'',30,68,27,NULL,100,NULL,0,NULL,600,NULL,1,NULL,'5min_cpu',NULL,0); +INSERT INTO `data_template_rrd` VALUES (216,'',54,69,41,NULL,100000000,NULL,0,NULL,600,NULL,2,NULL,'traffic_in',NULL,0); +INSERT INTO `data_template_rrd` VALUES (217,'',55,69,41,NULL,100000000,NULL,0,NULL,600,NULL,2,NULL,'traffic_out',NULL,0); +INSERT INTO `data_template_rrd` VALUES (218,'',54,70,41,NULL,100000000,NULL,0,NULL,600,NULL,2,NULL,'traffic_in',NULL,0); +INSERT INTO `data_template_rrd` VALUES (219,'',55,70,41,NULL,100000000,NULL,0,NULL,600,NULL,2,NULL,'traffic_out',NULL,0); +INSERT INTO `data_template_rrd` VALUES (220,'',54,71,41,NULL,100000000,NULL,0,NULL,600,NULL,2,NULL,'traffic_in',NULL,0); +INSERT INTO `data_template_rrd` VALUES (221,'',55,71,41,NULL,100000000,NULL,0,NULL,600,NULL,2,NULL,'traffic_out',NULL,0); +INSERT INTO `data_template_rrd` VALUES (222,'',54,72,41,NULL,100000000,NULL,0,NULL,600,NULL,2,NULL,'traffic_in',NULL,0); +INSERT INTO `data_template_rrd` VALUES (223,'',55,72,41,NULL,100000000,NULL,0,NULL,600,NULL,2,NULL,'traffic_out',NULL,0); +INSERT INTO `data_template_rrd` VALUES (224,'',54,73,41,NULL,100000000,NULL,0,NULL,600,NULL,2,NULL,'traffic_in',NULL,0); +INSERT INTO `data_template_rrd` VALUES (225,'',55,73,41,NULL,100000000,NULL,0,NULL,600,NULL,2,NULL,'traffic_out',NULL,0); +INSERT INTO `data_template_rrd` VALUES (226,'',54,74,41,NULL,100000000,NULL,0,NULL,600,NULL,2,NULL,'traffic_in',NULL,0); +INSERT INTO `data_template_rrd` VALUES (227,'',55,74,41,NULL,100000000,NULL,0,NULL,600,NULL,2,NULL,'traffic_out',NULL,0); +INSERT INTO `data_template_rrd` VALUES (228,'',54,75,41,NULL,100000000,NULL,0,NULL,600,NULL,2,NULL,'traffic_in',NULL,0); +INSERT INTO `data_template_rrd` VALUES (229,'',55,75,41,NULL,100000000,NULL,0,NULL,600,NULL,2,NULL,'traffic_out',NULL,0); +INSERT INTO `data_template_rrd` VALUES (230,'',54,76,41,NULL,100000000,NULL,0,NULL,600,NULL,2,NULL,'traffic_in',NULL,0); +INSERT INTO `data_template_rrd` VALUES (231,'',55,76,41,NULL,100000000,NULL,0,NULL,600,NULL,2,NULL,'traffic_out',NULL,0); +INSERT INTO `data_template_rrd` VALUES (232,'',54,77,41,NULL,100000000,NULL,0,NULL,600,NULL,2,NULL,'traffic_in',NULL,0); +INSERT INTO `data_template_rrd` VALUES (233,'',55,77,41,NULL,100000000,NULL,0,NULL,600,NULL,2,NULL,'traffic_out',NULL,0); +INSERT INTO `data_template_rrd` VALUES (234,'',54,78,41,NULL,100000000,NULL,0,NULL,600,NULL,2,NULL,'traffic_in',NULL,0); +INSERT INTO `data_template_rrd` VALUES (235,'',55,78,41,NULL,100000000,NULL,0,NULL,600,NULL,2,NULL,'traffic_out',NULL,0); +INSERT INTO `data_template_rrd` VALUES (236,'',54,79,41,NULL,100000000,NULL,0,NULL,600,NULL,2,NULL,'traffic_in',NULL,0); +INSERT INTO `data_template_rrd` VALUES (237,'',55,79,41,NULL,100000000,NULL,0,NULL,600,NULL,2,NULL,'traffic_out',NULL,0); +INSERT INTO `data_template_rrd` VALUES (238,'',54,80,41,NULL,100000000,NULL,0,NULL,600,NULL,2,NULL,'traffic_in',NULL,0); +INSERT INTO `data_template_rrd` VALUES (239,'',55,80,41,NULL,100000000,NULL,0,NULL,600,NULL,2,NULL,'traffic_out',NULL,0); +INSERT INTO `data_template_rrd` VALUES (240,'',54,81,41,NULL,100000000,NULL,0,NULL,600,NULL,2,NULL,'traffic_in',NULL,0); +INSERT INTO `data_template_rrd` VALUES (241,'',55,81,41,NULL,100000000,NULL,0,NULL,600,NULL,2,NULL,'traffic_out',NULL,0); +INSERT INTO `data_template_rrd` VALUES (242,'',54,82,41,NULL,100000000,NULL,0,NULL,600,NULL,2,NULL,'traffic_in',NULL,0); +INSERT INTO `data_template_rrd` VALUES (243,'',55,82,41,NULL,100000000,NULL,0,NULL,600,NULL,2,NULL,'traffic_out',NULL,0); +INSERT INTO `data_template_rrd` VALUES (244,'',54,83,41,NULL,100000000,NULL,0,NULL,600,NULL,2,NULL,'traffic_in',NULL,0); +INSERT INTO `data_template_rrd` VALUES (245,'',55,83,41,NULL,100000000,NULL,0,NULL,600,NULL,2,NULL,'traffic_out',NULL,0); +INSERT INTO `data_template_rrd` VALUES (246,'',54,84,41,NULL,100000000,NULL,0,NULL,600,NULL,2,NULL,'traffic_in',NULL,0); +INSERT INTO `data_template_rrd` VALUES (247,'',55,84,41,NULL,100000000,NULL,0,NULL,600,NULL,2,NULL,'traffic_out',NULL,0); +INSERT INTO `data_template_rrd` VALUES (248,'',54,85,41,NULL,100000000,NULL,0,NULL,600,NULL,2,NULL,'traffic_in',NULL,0); +INSERT INTO `data_template_rrd` VALUES (249,'',55,85,41,NULL,100000000,NULL,0,NULL,600,NULL,2,NULL,'traffic_out',NULL,0); +INSERT INTO `data_template_rrd` VALUES (250,'',54,86,41,NULL,100000000,NULL,0,NULL,600,NULL,2,NULL,'traffic_in',NULL,0); +INSERT INTO `data_template_rrd` VALUES (251,'',55,86,41,NULL,100000000,NULL,0,NULL,600,NULL,2,NULL,'traffic_out',NULL,0); +INSERT INTO `data_template_rrd` VALUES (252,'',54,87,41,NULL,100000000,NULL,0,NULL,600,NULL,2,NULL,'traffic_in',NULL,0); +INSERT INTO `data_template_rrd` VALUES (253,'',55,87,41,NULL,100000000,NULL,0,NULL,600,NULL,2,NULL,'traffic_out',NULL,0); +INSERT INTO `data_template_rrd` VALUES (254,'',54,88,41,NULL,100000000,NULL,0,NULL,600,NULL,2,NULL,'traffic_in',NULL,0); +INSERT INTO `data_template_rrd` VALUES (255,'',55,88,41,NULL,100000000,NULL,0,NULL,600,NULL,2,NULL,'traffic_out',NULL,0); +INSERT INTO `data_template_rrd` VALUES (256,'',54,89,41,NULL,100000000,NULL,0,NULL,600,NULL,2,NULL,'traffic_in',NULL,0); +INSERT INTO `data_template_rrd` VALUES (257,'',55,89,41,NULL,100000000,NULL,0,NULL,600,NULL,2,NULL,'traffic_out',NULL,0); +INSERT INTO `data_template_rrd` VALUES (258,'',54,90,41,NULL,100000000,NULL,0,NULL,600,NULL,2,NULL,'traffic_in',NULL,0); +INSERT INTO `data_template_rrd` VALUES (259,'',55,90,41,NULL,100000000,NULL,0,NULL,600,NULL,2,NULL,'traffic_out',NULL,0); +INSERT INTO `data_template_rrd` VALUES (260,'',54,91,41,NULL,100000000,NULL,0,NULL,600,NULL,2,NULL,'traffic_in',NULL,0); +INSERT INTO `data_template_rrd` VALUES (261,'',55,91,41,NULL,100000000,NULL,0,NULL,600,NULL,2,NULL,'traffic_out',NULL,0); +INSERT INTO `data_template_rrd` VALUES (262,'',54,92,41,NULL,100000000,NULL,0,NULL,600,NULL,2,NULL,'traffic_in',NULL,0); +INSERT INTO `data_template_rrd` VALUES (263,'',55,92,41,NULL,100000000,NULL,0,NULL,600,NULL,2,NULL,'traffic_out',NULL,0); +INSERT INTO `data_template_rrd` VALUES (264,'',54,93,41,NULL,100000000,NULL,0,NULL,600,NULL,2,NULL,'traffic_in',NULL,0); +INSERT INTO `data_template_rrd` VALUES (265,'',55,93,41,NULL,100000000,NULL,0,NULL,600,NULL,2,NULL,'traffic_out',NULL,0); +INSERT INTO `data_template_rrd` VALUES (266,'',54,94,41,NULL,100000000,NULL,0,NULL,600,NULL,2,NULL,'traffic_in',NULL,0); +INSERT INTO `data_template_rrd` VALUES (267,'',55,94,41,NULL,100000000,NULL,0,NULL,600,NULL,2,NULL,'traffic_out',NULL,0); +INSERT INTO `data_template_rrd` VALUES (268,'',54,95,41,NULL,100000000,NULL,0,NULL,600,NULL,2,NULL,'traffic_in',NULL,0); +INSERT INTO `data_template_rrd` VALUES (269,'',55,95,41,NULL,100000000,NULL,0,NULL,600,NULL,2,NULL,'traffic_out',NULL,0); +INSERT INTO `data_template_rrd` VALUES (270,'',54,96,41,NULL,100000000,NULL,0,NULL,600,NULL,2,NULL,'traffic_in',NULL,0); +INSERT INTO `data_template_rrd` VALUES (271,'',55,96,41,NULL,100000000,NULL,0,NULL,600,NULL,2,NULL,'traffic_out',NULL,0); +INSERT INTO `data_template_rrd` VALUES (272,'',54,97,41,NULL,100000000,NULL,0,NULL,600,NULL,2,NULL,'traffic_in',NULL,0); +INSERT INTO `data_template_rrd` VALUES (273,'',55,97,41,NULL,100000000,NULL,0,NULL,600,NULL,2,NULL,'traffic_out',NULL,0); +INSERT INTO `data_template_rrd` VALUES (274,'',30,98,27,NULL,100,NULL,0,NULL,600,NULL,1,NULL,'5min_cpu',NULL,0); +INSERT INTO `data_template_rrd` VALUES (275,'',54,99,41,NULL,100000000,NULL,0,NULL,600,NULL,2,NULL,'traffic_in',NULL,0); +INSERT INTO `data_template_rrd` VALUES (276,'',55,99,41,NULL,100000000,NULL,0,NULL,600,NULL,2,NULL,'traffic_out',NULL,0); +INSERT INTO `data_template_rrd` VALUES (277,'',54,100,41,NULL,100000000,NULL,0,NULL,600,NULL,2,NULL,'traffic_in',NULL,0); +INSERT INTO `data_template_rrd` VALUES (278,'',55,100,41,NULL,100000000,NULL,0,NULL,600,NULL,2,NULL,'traffic_out',NULL,0); +INSERT INTO `data_template_rrd` VALUES (279,'',54,101,41,NULL,100000000,NULL,0,NULL,600,NULL,2,NULL,'traffic_in',NULL,0); +INSERT INTO `data_template_rrd` VALUES (280,'',55,101,41,NULL,100000000,NULL,0,NULL,600,NULL,2,NULL,'traffic_out',NULL,0); +INSERT INTO `data_template_rrd` VALUES (281,'',54,102,41,NULL,100000000,NULL,0,NULL,600,NULL,2,NULL,'traffic_in',NULL,0); +INSERT INTO `data_template_rrd` VALUES (282,'',55,102,41,NULL,100000000,NULL,0,NULL,600,NULL,2,NULL,'traffic_out',NULL,0); +INSERT INTO `data_template_rrd` VALUES (283,'',54,103,41,NULL,100000000,NULL,0,NULL,600,NULL,2,NULL,'traffic_in',NULL,0); +INSERT INTO `data_template_rrd` VALUES (284,'',55,103,41,NULL,100000000,NULL,0,NULL,600,NULL,2,NULL,'traffic_out',NULL,0); +INSERT INTO `data_template_rrd` VALUES (285,'',54,104,41,NULL,100000000,NULL,0,NULL,600,NULL,2,NULL,'traffic_in',NULL,0); +INSERT INTO `data_template_rrd` VALUES (286,'',55,104,41,NULL,100000000,NULL,0,NULL,600,NULL,2,NULL,'traffic_out',NULL,0); +INSERT INTO `data_template_rrd` VALUES (287,'',54,105,41,NULL,100000000,NULL,0,NULL,600,NULL,2,NULL,'traffic_in',NULL,0); +INSERT INTO `data_template_rrd` VALUES (288,'',55,105,41,NULL,100000000,NULL,0,NULL,600,NULL,2,NULL,'traffic_out',NULL,0); +INSERT INTO `data_template_rrd` VALUES (289,'',54,106,41,NULL,100000000,NULL,0,NULL,600,NULL,2,NULL,'traffic_in',NULL,0); +INSERT INTO `data_template_rrd` VALUES (290,'',55,106,41,NULL,100000000,NULL,0,NULL,600,NULL,2,NULL,'traffic_out',NULL,0); +INSERT INTO `data_template_rrd` VALUES (291,'',54,107,41,NULL,100000000,NULL,0,NULL,600,NULL,2,NULL,'traffic_in',NULL,0); +INSERT INTO `data_template_rrd` VALUES (292,'',55,107,41,NULL,100000000,NULL,0,NULL,600,NULL,2,NULL,'traffic_out',NULL,0); +INSERT INTO `data_template_rrd` VALUES (293,'',54,108,41,NULL,100000000,NULL,0,NULL,600,NULL,2,NULL,'traffic_in',NULL,0); +INSERT INTO `data_template_rrd` VALUES (294,'',55,108,41,NULL,100000000,NULL,0,NULL,600,NULL,2,NULL,'traffic_out',NULL,0); +INSERT INTO `data_template_rrd` VALUES (295,'',54,109,41,NULL,100000000,NULL,0,NULL,600,NULL,2,NULL,'traffic_in',NULL,0); +INSERT INTO `data_template_rrd` VALUES (296,'',55,109,41,NULL,100000000,NULL,0,NULL,600,NULL,2,NULL,'traffic_out',NULL,0); +INSERT INTO `data_template_rrd` VALUES (297,'',54,110,41,NULL,100000000,NULL,0,NULL,600,NULL,2,NULL,'traffic_in',NULL,0); +INSERT INTO `data_template_rrd` VALUES (298,'',55,110,41,NULL,100000000,NULL,0,NULL,600,NULL,2,NULL,'traffic_out',NULL,0); +INSERT INTO `data_template_rrd` VALUES (299,'',54,111,41,NULL,100000000,NULL,0,NULL,600,NULL,2,NULL,'traffic_in',NULL,0); +INSERT INTO `data_template_rrd` VALUES (300,'',55,111,41,NULL,100000000,NULL,0,NULL,600,NULL,2,NULL,'traffic_out',NULL,0); +INSERT INTO `data_template_rrd` VALUES (301,'',54,112,41,NULL,100000000,NULL,0,NULL,600,NULL,2,NULL,'traffic_in',NULL,0); +INSERT INTO `data_template_rrd` VALUES (302,'',55,112,41,NULL,100000000,NULL,0,NULL,600,NULL,2,NULL,'traffic_out',NULL,0); +INSERT INTO `data_template_rrd` VALUES (303,'',54,113,41,NULL,100000000,NULL,0,NULL,600,NULL,2,NULL,'traffic_in',NULL,0); +INSERT INTO `data_template_rrd` VALUES (304,'',55,113,41,NULL,100000000,NULL,0,NULL,600,NULL,2,NULL,'traffic_out',NULL,0); +INSERT INTO `data_template_rrd` VALUES (305,'',54,114,41,NULL,100000000,NULL,0,NULL,600,NULL,2,NULL,'traffic_in',NULL,0); +INSERT INTO `data_template_rrd` VALUES (306,'',55,114,41,NULL,100000000,NULL,0,NULL,600,NULL,2,NULL,'traffic_out',NULL,0); +INSERT INTO `data_template_rrd` VALUES (307,'',54,115,41,NULL,100000000,NULL,0,NULL,600,NULL,2,NULL,'traffic_in',NULL,0); +INSERT INTO `data_template_rrd` VALUES (308,'',55,115,41,NULL,100000000,NULL,0,NULL,600,NULL,2,NULL,'traffic_out',NULL,0); +INSERT INTO `data_template_rrd` VALUES (309,'',54,116,41,NULL,100000000,NULL,0,NULL,600,NULL,2,NULL,'traffic_in',NULL,0); +INSERT INTO `data_template_rrd` VALUES (310,'',55,116,41,NULL,100000000,NULL,0,NULL,600,NULL,2,NULL,'traffic_out',NULL,0); +INSERT INTO `data_template_rrd` VALUES (311,'',54,117,41,NULL,100000000,NULL,0,NULL,600,NULL,2,NULL,'traffic_in',NULL,0); +INSERT INTO `data_template_rrd` VALUES (312,'',55,117,41,NULL,100000000,NULL,0,NULL,600,NULL,2,NULL,'traffic_out',NULL,0); +INSERT INTO `data_template_rrd` VALUES (313,'',54,118,41,NULL,100000000,NULL,0,NULL,600,NULL,2,NULL,'traffic_in',NULL,0); +INSERT INTO `data_template_rrd` VALUES (314,'',55,118,41,NULL,100000000,NULL,0,NULL,600,NULL,2,NULL,'traffic_out',NULL,0); +INSERT INTO `data_template_rrd` VALUES (315,'',54,119,41,NULL,100000000,NULL,0,NULL,600,NULL,2,NULL,'traffic_in',NULL,0); +INSERT INTO `data_template_rrd` VALUES (316,'',55,119,41,NULL,100000000,NULL,0,NULL,600,NULL,2,NULL,'traffic_out',NULL,0); +INSERT INTO `data_template_rrd` VALUES (317,'',54,120,41,NULL,100000000,NULL,0,NULL,600,NULL,2,NULL,'traffic_in',NULL,0); +INSERT INTO `data_template_rrd` VALUES (318,'',55,120,41,NULL,100000000,NULL,0,NULL,600,NULL,2,NULL,'traffic_out',NULL,0); +INSERT INTO `data_template_rrd` VALUES (319,'',54,121,41,NULL,100000000,NULL,0,NULL,600,NULL,2,NULL,'traffic_in',NULL,0); +INSERT INTO `data_template_rrd` VALUES (320,'',55,121,41,NULL,100000000,NULL,0,NULL,600,NULL,2,NULL,'traffic_out',NULL,0); +INSERT INTO `data_template_rrd` VALUES (321,'',54,122,41,NULL,100000000,NULL,0,NULL,600,NULL,2,NULL,'traffic_in',NULL,0); +INSERT INTO `data_template_rrd` VALUES (322,'',55,122,41,NULL,100000000,NULL,0,NULL,600,NULL,2,NULL,'traffic_out',NULL,0); +INSERT INTO `data_template_rrd` VALUES (323,'',54,123,41,NULL,100000000,NULL,0,NULL,600,NULL,2,NULL,'traffic_in',NULL,0); +INSERT INTO `data_template_rrd` VALUES (324,'',55,123,41,NULL,100000000,NULL,0,NULL,600,NULL,2,NULL,'traffic_out',NULL,0); +INSERT INTO `data_template_rrd` VALUES (325,'',54,124,41,NULL,100000000,NULL,0,NULL,600,NULL,2,NULL,'traffic_in',NULL,0); +INSERT INTO `data_template_rrd` VALUES (326,'',55,124,41,NULL,100000000,NULL,0,NULL,600,NULL,2,NULL,'traffic_out',NULL,0); +INSERT INTO `data_template_rrd` VALUES (327,'',54,125,41,NULL,100000000,NULL,0,NULL,600,NULL,2,NULL,'traffic_in',NULL,0); +INSERT INTO `data_template_rrd` VALUES (328,'',55,125,41,NULL,100000000,NULL,0,NULL,600,NULL,2,NULL,'traffic_out',NULL,0); +INSERT INTO `data_template_rrd` VALUES (329,'',54,126,41,NULL,100000000,NULL,0,NULL,600,NULL,2,NULL,'traffic_in',NULL,0); +INSERT INTO `data_template_rrd` VALUES (330,'',55,126,41,NULL,100000000,NULL,0,NULL,600,NULL,2,NULL,'traffic_out',NULL,0); +INSERT INTO `data_template_rrd` VALUES (331,'',54,127,41,NULL,100000000,NULL,0,NULL,600,NULL,2,NULL,'traffic_in',NULL,0); +INSERT INTO `data_template_rrd` VALUES (332,'',55,127,41,NULL,100000000,NULL,0,NULL,600,NULL,2,NULL,'traffic_out',NULL,0); +INSERT INTO `data_template_rrd` VALUES (567,'',55,254,41,NULL,100000000,NULL,0,NULL,600,NULL,2,NULL,'traffic_out',NULL,0); +INSERT INTO `data_template_rrd` VALUES (565,'',55,253,41,NULL,100000000,NULL,0,NULL,600,NULL,2,NULL,'traffic_out',NULL,0); +INSERT INTO `data_template_rrd` VALUES (566,'',54,254,41,NULL,100000000,NULL,0,NULL,600,NULL,2,NULL,'traffic_in',NULL,0); +INSERT INTO `data_template_rrd` VALUES (570,'',54,256,41,NULL,100000000,NULL,0,NULL,600,NULL,2,NULL,'traffic_in',NULL,0); +INSERT INTO `data_template_rrd` VALUES (569,'',55,255,41,NULL,100000000,NULL,0,NULL,600,NULL,2,NULL,'traffic_out',NULL,0); +INSERT INTO `data_template_rrd` VALUES (568,'',54,255,41,NULL,100000000,NULL,0,NULL,600,NULL,2,NULL,'traffic_in',NULL,0); +INSERT INTO `data_template_rrd` VALUES (564,'',54,253,41,NULL,100000000,NULL,0,NULL,600,NULL,2,NULL,'traffic_in',NULL,0); +INSERT INTO `data_template_rrd` VALUES (563,'',55,252,41,NULL,100000000,NULL,0,NULL,600,NULL,2,NULL,'traffic_out',NULL,0); +INSERT INTO `data_template_rrd` VALUES (562,'',54,252,41,NULL,100000000,NULL,0,NULL,600,NULL,2,NULL,'traffic_in',NULL,0); +INSERT INTO `data_template_rrd` VALUES (561,'',55,251,41,NULL,100000000,NULL,0,NULL,600,NULL,2,NULL,'traffic_out',NULL,0); +INSERT INTO `data_template_rrd` VALUES (560,'',54,251,41,NULL,100000000,NULL,0,NULL,600,NULL,2,NULL,'traffic_in',NULL,0); +INSERT INTO `data_template_rrd` VALUES (559,'',55,250,41,NULL,100000000,NULL,0,NULL,600,NULL,2,NULL,'traffic_out',NULL,0); +INSERT INTO `data_template_rrd` VALUES (551,'',6,243,5,NULL,100,NULL,0,NULL,600,NULL,2,NULL,'cpu_user',NULL,0); +INSERT INTO `data_template_rrd` VALUES (549,'',7,241,6,NULL,100,NULL,0,NULL,600,NULL,2,NULL,'cpu_nice',NULL,0); +INSERT INTO `data_template_rrd` VALUES (550,'',5,242,4,NULL,100,NULL,0,NULL,600,NULL,2,NULL,'cpu_system',NULL,0); +INSERT INTO `data_template_rrd` VALUES (558,'',54,250,41,NULL,100000000,NULL,0,NULL,600,NULL,2,NULL,'traffic_in',NULL,0); +INSERT INTO `data_template_rrd` VALUES (557,'',37,249,34,NULL,10000000,NULL,0,NULL,600,NULL,1,NULL,'mem_free',NULL,0); +INSERT INTO `data_template_rrd` VALUES (556,'',95,248,47,NULL,10000000,NULL,0,NULL,600,NULL,1,NULL,'mem_cache',NULL,0); +INSERT INTO `data_template_rrd` VALUES (552,'',33,244,30,NULL,500,NULL,0,NULL,600,NULL,1,NULL,'load_1min',NULL,0); +INSERT INTO `data_template_rrd` VALUES (553,'',35,245,32,NULL,500,NULL,0,NULL,600,NULL,1,NULL,'load_15min',NULL,0); +INSERT INTO `data_template_rrd` VALUES (554,'',34,246,31,NULL,500,NULL,0,NULL,600,NULL,1,NULL,'load_5min',NULL,0); +INSERT INTO `data_template_rrd` VALUES (555,'',36,247,33,NULL,10000000,NULL,0,NULL,600,NULL,1,NULL,'mem_buffers',NULL,0); +INSERT INTO `data_template_rrd` VALUES (359,'',30,145,27,NULL,100,NULL,0,NULL,600,NULL,1,NULL,'5min_cpu',NULL,0); +INSERT INTO `data_template_rrd` VALUES (360,'',54,146,41,NULL,100000000,NULL,0,NULL,600,NULL,2,NULL,'traffic_in',NULL,0); +INSERT INTO `data_template_rrd` VALUES (361,'',55,146,41,NULL,100000000,NULL,0,NULL,600,NULL,2,NULL,'traffic_out',NULL,0); +INSERT INTO `data_template_rrd` VALUES (362,'',54,147,41,NULL,100000000,NULL,0,NULL,600,NULL,2,NULL,'traffic_in',NULL,0); +INSERT INTO `data_template_rrd` VALUES (363,'',55,147,41,NULL,100000000,NULL,0,NULL,600,NULL,2,NULL,'traffic_out',NULL,0); +INSERT INTO `data_template_rrd` VALUES (364,'',54,148,41,NULL,100000000,NULL,0,NULL,600,NULL,2,NULL,'traffic_in',NULL,0); +INSERT INTO `data_template_rrd` VALUES (365,'',55,148,41,NULL,100000000,NULL,0,NULL,600,NULL,2,NULL,'traffic_out',NULL,0); +INSERT INTO `data_template_rrd` VALUES (366,'',54,149,41,NULL,100000000,NULL,0,NULL,600,NULL,2,NULL,'traffic_in',NULL,0); +INSERT INTO `data_template_rrd` VALUES (367,'',55,149,41,NULL,100000000,NULL,0,NULL,600,NULL,2,NULL,'traffic_out',NULL,0); +INSERT INTO `data_template_rrd` VALUES (368,'',54,150,41,NULL,100000000,NULL,0,NULL,600,NULL,2,NULL,'traffic_in',NULL,0); +INSERT INTO `data_template_rrd` VALUES (369,'',55,150,41,NULL,100000000,NULL,0,NULL,600,NULL,2,NULL,'traffic_out',NULL,0); +INSERT INTO `data_template_rrd` VALUES (370,'',54,151,41,NULL,100000000,NULL,0,NULL,600,NULL,2,NULL,'traffic_in',NULL,0); +INSERT INTO `data_template_rrd` VALUES (371,'',55,151,41,NULL,100000000,NULL,0,NULL,600,NULL,2,NULL,'traffic_out',NULL,0); +INSERT INTO `data_template_rrd` VALUES (372,'',54,152,41,NULL,100000000,NULL,0,NULL,600,NULL,2,NULL,'traffic_in',NULL,0); +INSERT INTO `data_template_rrd` VALUES (373,'',55,152,41,NULL,100000000,NULL,0,NULL,600,NULL,2,NULL,'traffic_out',NULL,0); +INSERT INTO `data_template_rrd` VALUES (374,'',54,153,41,NULL,100000000,NULL,0,NULL,600,NULL,2,NULL,'traffic_in',NULL,0); +INSERT INTO `data_template_rrd` VALUES (375,'',55,153,41,NULL,100000000,NULL,0,NULL,600,NULL,2,NULL,'traffic_out',NULL,0); +INSERT INTO `data_template_rrd` VALUES (376,'',54,154,41,NULL,100000000,NULL,0,NULL,600,NULL,2,NULL,'traffic_in',NULL,0); +INSERT INTO `data_template_rrd` VALUES (377,'',55,154,41,NULL,100000000,NULL,0,NULL,600,NULL,2,NULL,'traffic_out',NULL,0); +INSERT INTO `data_template_rrd` VALUES (378,'',54,155,41,NULL,100000000,NULL,0,NULL,600,NULL,2,NULL,'traffic_in',NULL,0); +INSERT INTO `data_template_rrd` VALUES (379,'',55,155,41,NULL,100000000,NULL,0,NULL,600,NULL,2,NULL,'traffic_out',NULL,0); +INSERT INTO `data_template_rrd` VALUES (380,'',54,156,41,NULL,100000000,NULL,0,NULL,600,NULL,2,NULL,'traffic_in',NULL,0); +INSERT INTO `data_template_rrd` VALUES (381,'',55,156,41,NULL,100000000,NULL,0,NULL,600,NULL,2,NULL,'traffic_out',NULL,0); +INSERT INTO `data_template_rrd` VALUES (382,'',54,157,41,NULL,100000000,NULL,0,NULL,600,NULL,2,NULL,'traffic_in',NULL,0); +INSERT INTO `data_template_rrd` VALUES (383,'',55,157,41,NULL,100000000,NULL,0,NULL,600,NULL,2,NULL,'traffic_out',NULL,0); +INSERT INTO `data_template_rrd` VALUES (384,'',54,158,41,NULL,100000000,NULL,0,NULL,600,NULL,2,NULL,'traffic_in',NULL,0); +INSERT INTO `data_template_rrd` VALUES (385,'',55,158,41,NULL,100000000,NULL,0,NULL,600,NULL,2,NULL,'traffic_out',NULL,0); +INSERT INTO `data_template_rrd` VALUES (386,'',54,159,41,NULL,100000000,NULL,0,NULL,600,NULL,2,NULL,'traffic_in',NULL,0); +INSERT INTO `data_template_rrd` VALUES (387,'',55,159,41,NULL,100000000,NULL,0,NULL,600,NULL,2,NULL,'traffic_out',NULL,0); +INSERT INTO `data_template_rrd` VALUES (388,'',54,160,41,NULL,100000000,NULL,0,NULL,600,NULL,2,NULL,'traffic_in',NULL,0); +INSERT INTO `data_template_rrd` VALUES (389,'',55,160,41,NULL,100000000,NULL,0,NULL,600,NULL,2,NULL,'traffic_out',NULL,0); +INSERT INTO `data_template_rrd` VALUES (390,'',54,161,41,NULL,100000000,NULL,0,NULL,600,NULL,2,NULL,'traffic_in',NULL,0); +INSERT INTO `data_template_rrd` VALUES (391,'',55,161,41,NULL,100000000,NULL,0,NULL,600,NULL,2,NULL,'traffic_out',NULL,0); +INSERT INTO `data_template_rrd` VALUES (392,'',54,162,41,NULL,100000000,NULL,0,NULL,600,NULL,2,NULL,'traffic_in',NULL,0); +INSERT INTO `data_template_rrd` VALUES (393,'',55,162,41,NULL,100000000,NULL,0,NULL,600,NULL,2,NULL,'traffic_out',NULL,0); +INSERT INTO `data_template_rrd` VALUES (394,'',54,163,41,NULL,100000000,NULL,0,NULL,600,NULL,2,NULL,'traffic_in',NULL,0); +INSERT INTO `data_template_rrd` VALUES (395,'',55,163,41,NULL,100000000,NULL,0,NULL,600,NULL,2,NULL,'traffic_out',NULL,0); +INSERT INTO `data_template_rrd` VALUES (396,'',54,164,41,NULL,100000000,NULL,0,NULL,600,NULL,2,NULL,'traffic_in',NULL,0); +INSERT INTO `data_template_rrd` VALUES (397,'',55,164,41,NULL,100000000,NULL,0,NULL,600,NULL,2,NULL,'traffic_out',NULL,0); +INSERT INTO `data_template_rrd` VALUES (398,'',54,165,41,NULL,100000000,NULL,0,NULL,600,NULL,2,NULL,'traffic_in',NULL,0); +INSERT INTO `data_template_rrd` VALUES (399,'',55,165,41,NULL,100000000,NULL,0,NULL,600,NULL,2,NULL,'traffic_out',NULL,0); +INSERT INTO `data_template_rrd` VALUES (400,'',54,166,41,NULL,100000000,NULL,0,NULL,600,NULL,2,NULL,'traffic_in',NULL,0); +INSERT INTO `data_template_rrd` VALUES (401,'',55,166,41,NULL,100000000,NULL,0,NULL,600,NULL,2,NULL,'traffic_out',NULL,0); +INSERT INTO `data_template_rrd` VALUES (402,'',54,167,41,NULL,100000000,NULL,0,NULL,600,NULL,2,NULL,'traffic_in',NULL,0); +INSERT INTO `data_template_rrd` VALUES (403,'',55,167,41,NULL,100000000,NULL,0,NULL,600,NULL,2,NULL,'traffic_out',NULL,0); +INSERT INTO `data_template_rrd` VALUES (404,'',54,168,41,NULL,100000000,NULL,0,NULL,600,NULL,2,NULL,'traffic_in',NULL,0); +INSERT INTO `data_template_rrd` VALUES (405,'',55,168,41,NULL,100000000,NULL,0,NULL,600,NULL,2,NULL,'traffic_out',NULL,0); +INSERT INTO `data_template_rrd` VALUES (406,'',54,169,41,NULL,100000000,NULL,0,NULL,600,NULL,2,NULL,'traffic_in',NULL,0); +INSERT INTO `data_template_rrd` VALUES (407,'',55,169,41,NULL,100000000,NULL,0,NULL,600,NULL,2,NULL,'traffic_out',NULL,0); +INSERT INTO `data_template_rrd` VALUES (408,'',54,170,41,NULL,100000000,NULL,0,NULL,600,NULL,2,NULL,'traffic_in',NULL,0); +INSERT INTO `data_template_rrd` VALUES (409,'',55,170,41,NULL,100000000,NULL,0,NULL,600,NULL,2,NULL,'traffic_out',NULL,0); +INSERT INTO `data_template_rrd` VALUES (410,'',54,171,41,NULL,100000000,NULL,0,NULL,600,NULL,2,NULL,'traffic_in',NULL,0); +INSERT INTO `data_template_rrd` VALUES (411,'',55,171,41,NULL,100000000,NULL,0,NULL,600,NULL,2,NULL,'traffic_out',NULL,0); +INSERT INTO `data_template_rrd` VALUES (412,'',54,172,41,NULL,100000000,NULL,0,NULL,600,NULL,2,NULL,'traffic_in',NULL,0); +INSERT INTO `data_template_rrd` VALUES (413,'',55,172,41,NULL,100000000,NULL,0,NULL,600,NULL,2,NULL,'traffic_out',NULL,0); +INSERT INTO `data_template_rrd` VALUES (414,'',54,173,41,NULL,100000000,NULL,0,NULL,600,NULL,2,NULL,'traffic_in',NULL,0); +INSERT INTO `data_template_rrd` VALUES (415,'',55,173,41,NULL,100000000,NULL,0,NULL,600,NULL,2,NULL,'traffic_out',NULL,0); +INSERT INTO `data_template_rrd` VALUES (416,'',54,174,41,NULL,100000000,NULL,0,NULL,600,NULL,2,NULL,'traffic_in',NULL,0); +INSERT INTO `data_template_rrd` VALUES (417,'',55,174,41,NULL,100000000,NULL,0,NULL,600,NULL,2,NULL,'traffic_out',NULL,0); +INSERT INTO `data_template_rrd` VALUES (418,'',30,175,27,NULL,100,NULL,0,NULL,600,NULL,1,NULL,'5min_cpu',NULL,0); +INSERT INTO `data_template_rrd` VALUES (419,'',54,176,41,NULL,100000000,NULL,0,NULL,600,NULL,2,NULL,'traffic_in',NULL,0); +INSERT INTO `data_template_rrd` VALUES (420,'',55,176,41,NULL,100000000,NULL,0,NULL,600,NULL,2,NULL,'traffic_out',NULL,0); +INSERT INTO `data_template_rrd` VALUES (421,'',54,177,41,NULL,100000000,NULL,0,NULL,600,NULL,2,NULL,'traffic_in',NULL,0); +INSERT INTO `data_template_rrd` VALUES (422,'',55,177,41,NULL,100000000,NULL,0,NULL,600,NULL,2,NULL,'traffic_out',NULL,0); +INSERT INTO `data_template_rrd` VALUES (423,'',54,178,41,NULL,100000000,NULL,0,NULL,600,NULL,2,NULL,'traffic_in',NULL,0); +INSERT INTO `data_template_rrd` VALUES (424,'',55,178,41,NULL,100000000,NULL,0,NULL,600,NULL,2,NULL,'traffic_out',NULL,0); +INSERT INTO `data_template_rrd` VALUES (425,'',54,179,41,NULL,100000000,NULL,0,NULL,600,NULL,2,NULL,'traffic_in',NULL,0); +INSERT INTO `data_template_rrd` VALUES (426,'',55,179,41,NULL,100000000,NULL,0,NULL,600,NULL,2,NULL,'traffic_out',NULL,0); +INSERT INTO `data_template_rrd` VALUES (427,'',54,180,41,NULL,100000000,NULL,0,NULL,600,NULL,2,NULL,'traffic_in',NULL,0); +INSERT INTO `data_template_rrd` VALUES (428,'',55,180,41,NULL,100000000,NULL,0,NULL,600,NULL,2,NULL,'traffic_out',NULL,0); +INSERT INTO `data_template_rrd` VALUES (429,'',54,181,41,NULL,100000000,NULL,0,NULL,600,NULL,2,NULL,'traffic_in',NULL,0); +INSERT INTO `data_template_rrd` VALUES (430,'',55,181,41,NULL,100000000,NULL,0,NULL,600,NULL,2,NULL,'traffic_out',NULL,0); +INSERT INTO `data_template_rrd` VALUES (431,'',54,182,41,NULL,100000000,NULL,0,NULL,600,NULL,2,NULL,'traffic_in',NULL,0); +INSERT INTO `data_template_rrd` VALUES (432,'',55,182,41,NULL,100000000,NULL,0,NULL,600,NULL,2,NULL,'traffic_out',NULL,0); +INSERT INTO `data_template_rrd` VALUES (433,'',54,183,41,NULL,100000000,NULL,0,NULL,600,NULL,2,NULL,'traffic_in',NULL,0); +INSERT INTO `data_template_rrd` VALUES (434,'',55,183,41,NULL,100000000,NULL,0,NULL,600,NULL,2,NULL,'traffic_out',NULL,0); +INSERT INTO `data_template_rrd` VALUES (435,'',54,184,41,NULL,100000000,NULL,0,NULL,600,NULL,2,NULL,'traffic_in',NULL,0); +INSERT INTO `data_template_rrd` VALUES (436,'',55,184,41,NULL,100000000,NULL,0,NULL,600,NULL,2,NULL,'traffic_out',NULL,0); +INSERT INTO `data_template_rrd` VALUES (437,'',54,185,41,NULL,100000000,NULL,0,NULL,600,NULL,2,NULL,'traffic_in',NULL,0); +INSERT INTO `data_template_rrd` VALUES (438,'',55,185,41,NULL,100000000,NULL,0,NULL,600,NULL,2,NULL,'traffic_out',NULL,0); +INSERT INTO `data_template_rrd` VALUES (439,'',54,186,41,NULL,100000000,NULL,0,NULL,600,NULL,2,NULL,'traffic_in',NULL,0); +INSERT INTO `data_template_rrd` VALUES (440,'',55,186,41,NULL,100000000,NULL,0,NULL,600,NULL,2,NULL,'traffic_out',NULL,0); +INSERT INTO `data_template_rrd` VALUES (441,'',54,187,41,NULL,100000000,NULL,0,NULL,600,NULL,2,NULL,'traffic_in',NULL,0); +INSERT INTO `data_template_rrd` VALUES (442,'',55,187,41,NULL,100000000,NULL,0,NULL,600,NULL,2,NULL,'traffic_out',NULL,0); +INSERT INTO `data_template_rrd` VALUES (443,'',54,188,41,NULL,100000000,NULL,0,NULL,600,NULL,2,NULL,'traffic_in',NULL,0); +INSERT INTO `data_template_rrd` VALUES (444,'',55,188,41,NULL,100000000,NULL,0,NULL,600,NULL,2,NULL,'traffic_out',NULL,0); +INSERT INTO `data_template_rrd` VALUES (445,'',54,189,41,NULL,100000000,NULL,0,NULL,600,NULL,2,NULL,'traffic_in',NULL,0); +INSERT INTO `data_template_rrd` VALUES (446,'',55,189,41,NULL,100000000,NULL,0,NULL,600,NULL,2,NULL,'traffic_out',NULL,0); +INSERT INTO `data_template_rrd` VALUES (447,'',54,190,41,NULL,100000000,NULL,0,NULL,600,NULL,2,NULL,'traffic_in',NULL,0); +INSERT INTO `data_template_rrd` VALUES (448,'',55,190,41,NULL,100000000,NULL,0,NULL,600,NULL,2,NULL,'traffic_out',NULL,0); +INSERT INTO `data_template_rrd` VALUES (449,'',54,191,41,NULL,100000000,NULL,0,NULL,600,NULL,2,NULL,'traffic_in',NULL,0); +INSERT INTO `data_template_rrd` VALUES (450,'',55,191,41,NULL,100000000,NULL,0,NULL,600,NULL,2,NULL,'traffic_out',NULL,0); +INSERT INTO `data_template_rrd` VALUES (451,'',54,192,41,NULL,100000000,NULL,0,NULL,600,NULL,2,NULL,'traffic_in',NULL,0); +INSERT INTO `data_template_rrd` VALUES (452,'',55,192,41,NULL,100000000,NULL,0,NULL,600,NULL,2,NULL,'traffic_out',NULL,0); +INSERT INTO `data_template_rrd` VALUES (453,'',54,193,41,NULL,100000000,NULL,0,NULL,600,NULL,2,NULL,'traffic_in',NULL,0); +INSERT INTO `data_template_rrd` VALUES (454,'',55,193,41,NULL,100000000,NULL,0,NULL,600,NULL,2,NULL,'traffic_out',NULL,0); +INSERT INTO `data_template_rrd` VALUES (455,'',54,194,41,NULL,100000000,NULL,0,NULL,600,NULL,2,NULL,'traffic_in',NULL,0); +INSERT INTO `data_template_rrd` VALUES (456,'',55,194,41,NULL,100000000,NULL,0,NULL,600,NULL,2,NULL,'traffic_out',NULL,0); +INSERT INTO `data_template_rrd` VALUES (457,'',54,195,41,NULL,100000000,NULL,0,NULL,600,NULL,2,NULL,'traffic_in',NULL,0); +INSERT INTO `data_template_rrd` VALUES (458,'',55,195,41,NULL,100000000,NULL,0,NULL,600,NULL,2,NULL,'traffic_out',NULL,0); +INSERT INTO `data_template_rrd` VALUES (459,'',54,196,41,NULL,100000000,NULL,0,NULL,600,NULL,2,NULL,'traffic_in',NULL,0); +INSERT INTO `data_template_rrd` VALUES (460,'',55,196,41,NULL,100000000,NULL,0,NULL,600,NULL,2,NULL,'traffic_out',NULL,0); +INSERT INTO `data_template_rrd` VALUES (461,'',54,197,41,NULL,100000000,NULL,0,NULL,600,NULL,2,NULL,'traffic_in',NULL,0); +INSERT INTO `data_template_rrd` VALUES (462,'',55,197,41,NULL,100000000,NULL,0,NULL,600,NULL,2,NULL,'traffic_out',NULL,0); +INSERT INTO `data_template_rrd` VALUES (463,'',54,198,41,NULL,100000000,NULL,0,NULL,600,NULL,2,NULL,'traffic_in',NULL,0); +INSERT INTO `data_template_rrd` VALUES (464,'',55,198,41,NULL,100000000,NULL,0,NULL,600,NULL,2,NULL,'traffic_out',NULL,0); +INSERT INTO `data_template_rrd` VALUES (465,'',54,199,41,NULL,100000000,NULL,0,NULL,600,NULL,2,NULL,'traffic_in',NULL,0); +INSERT INTO `data_template_rrd` VALUES (466,'',55,199,41,NULL,100000000,NULL,0,NULL,600,NULL,2,NULL,'traffic_out',NULL,0); +INSERT INTO `data_template_rrd` VALUES (467,'',54,200,41,NULL,100000000,NULL,0,NULL,600,NULL,2,NULL,'traffic_in',NULL,0); +INSERT INTO `data_template_rrd` VALUES (468,'',55,200,41,NULL,100000000,NULL,0,NULL,600,NULL,2,NULL,'traffic_out',NULL,0); +INSERT INTO `data_template_rrd` VALUES (469,'',54,201,41,NULL,100000000,NULL,0,NULL,600,NULL,2,NULL,'traffic_in',NULL,0); +INSERT INTO `data_template_rrd` VALUES (470,'',55,201,41,NULL,100000000,NULL,0,NULL,600,NULL,2,NULL,'traffic_out',NULL,0); +INSERT INTO `data_template_rrd` VALUES (471,'',54,202,41,NULL,100000000,NULL,0,NULL,600,NULL,2,NULL,'traffic_in',NULL,0); +INSERT INTO `data_template_rrd` VALUES (472,'',55,202,41,NULL,100000000,NULL,0,NULL,600,NULL,2,NULL,'traffic_out',NULL,0); +INSERT INTO `data_template_rrd` VALUES (473,'',54,203,41,NULL,100000000,NULL,0,NULL,600,NULL,2,NULL,'traffic_in',NULL,0); +INSERT INTO `data_template_rrd` VALUES (474,'',55,203,41,NULL,100000000,NULL,0,NULL,600,NULL,2,NULL,'traffic_out',NULL,0); +INSERT INTO `data_template_rrd` VALUES (475,'',54,204,41,NULL,100000000,NULL,0,NULL,600,NULL,2,NULL,'traffic_in',NULL,0); +INSERT INTO `data_template_rrd` VALUES (476,'',55,204,41,NULL,100000000,NULL,0,NULL,600,NULL,2,NULL,'traffic_out',NULL,0); +INSERT INTO `data_template_rrd` VALUES (477,'',54,205,41,NULL,100000000,NULL,0,NULL,600,NULL,2,NULL,'traffic_in',NULL,0); +INSERT INTO `data_template_rrd` VALUES (478,'',55,205,41,NULL,100000000,NULL,0,NULL,600,NULL,2,NULL,'traffic_out',NULL,0); +INSERT INTO `data_template_rrd` VALUES (479,'',54,206,41,NULL,100000000,NULL,0,NULL,600,NULL,2,NULL,'traffic_in',NULL,0); +INSERT INTO `data_template_rrd` VALUES (480,'',55,206,41,NULL,100000000,NULL,0,NULL,600,NULL,2,NULL,'traffic_out',NULL,0); +INSERT INTO `data_template_rrd` VALUES (481,'',54,207,41,NULL,100000000,NULL,0,NULL,600,NULL,2,NULL,'traffic_in',NULL,0); +INSERT INTO `data_template_rrd` VALUES (482,'',55,207,41,NULL,100000000,NULL,0,NULL,600,NULL,2,NULL,'traffic_out',NULL,0); +INSERT INTO `data_template_rrd` VALUES (483,'',54,208,41,NULL,100000000,NULL,0,NULL,600,NULL,2,NULL,'traffic_in',NULL,0); +INSERT INTO `data_template_rrd` VALUES (484,'',55,208,41,NULL,100000000,NULL,0,NULL,600,NULL,2,NULL,'traffic_out',NULL,0); +INSERT INTO `data_template_rrd` VALUES (485,'',54,209,41,NULL,100000000,NULL,0,NULL,600,NULL,2,NULL,'traffic_in',NULL,0); +INSERT INTO `data_template_rrd` VALUES (486,'',55,209,41,NULL,100000000,NULL,0,NULL,600,NULL,2,NULL,'traffic_out',NULL,0); +INSERT INTO `data_template_rrd` VALUES (487,'',54,210,41,NULL,100000000,NULL,0,NULL,600,NULL,2,NULL,'traffic_in',NULL,0); +INSERT INTO `data_template_rrd` VALUES (488,'',55,210,41,NULL,100000000,NULL,0,NULL,600,NULL,2,NULL,'traffic_out',NULL,0); +INSERT INTO `data_template_rrd` VALUES (489,'',54,211,41,NULL,100000000,NULL,0,NULL,600,NULL,2,NULL,'traffic_in',NULL,0); +INSERT INTO `data_template_rrd` VALUES (490,'',55,211,41,NULL,100000000,NULL,0,NULL,600,NULL,2,NULL,'traffic_out',NULL,0); +INSERT INTO `data_template_rrd` VALUES (491,'',54,212,41,NULL,100000000,NULL,0,NULL,600,NULL,2,NULL,'traffic_in',NULL,0); +INSERT INTO `data_template_rrd` VALUES (492,'',55,212,41,NULL,100000000,NULL,0,NULL,600,NULL,2,NULL,'traffic_out',NULL,0); +INSERT INTO `data_template_rrd` VALUES (493,'',54,213,41,NULL,100000000,NULL,0,NULL,600,NULL,2,NULL,'traffic_in',NULL,0); +INSERT INTO `data_template_rrd` VALUES (494,'',55,213,41,NULL,100000000,NULL,0,NULL,600,NULL,2,NULL,'traffic_out',NULL,0); +INSERT INTO `data_template_rrd` VALUES (495,'',54,214,41,NULL,100000000,NULL,0,NULL,600,NULL,2,NULL,'traffic_in',NULL,0); +INSERT INTO `data_template_rrd` VALUES (496,'',55,214,41,NULL,100000000,NULL,0,NULL,600,NULL,2,NULL,'traffic_out',NULL,0); +INSERT INTO `data_template_rrd` VALUES (497,'',54,215,41,NULL,100000000,NULL,0,NULL,600,NULL,2,NULL,'traffic_in',NULL,0); +INSERT INTO `data_template_rrd` VALUES (498,'',55,215,41,NULL,100000000,NULL,0,NULL,600,NULL,2,NULL,'traffic_out',NULL,0); +INSERT INTO `data_template_rrd` VALUES (499,'',54,216,41,NULL,100000000,NULL,0,NULL,600,NULL,2,NULL,'traffic_in',NULL,0); +INSERT INTO `data_template_rrd` VALUES (500,'',55,216,41,NULL,100000000,NULL,0,NULL,600,NULL,2,NULL,'traffic_out',NULL,0); +INSERT INTO `data_template_rrd` VALUES (501,'',54,217,41,NULL,100000000,NULL,0,NULL,600,NULL,2,NULL,'traffic_in',NULL,0); +INSERT INTO `data_template_rrd` VALUES (502,'',55,217,41,NULL,100000000,NULL,0,NULL,600,NULL,2,NULL,'traffic_out',NULL,0); +INSERT INTO `data_template_rrd` VALUES (503,'',54,218,41,NULL,100000000,NULL,0,NULL,600,NULL,2,NULL,'traffic_in',NULL,0); +INSERT INTO `data_template_rrd` VALUES (504,'',55,218,41,NULL,100000000,NULL,0,NULL,600,NULL,2,NULL,'traffic_out',NULL,0); +INSERT INTO `data_template_rrd` VALUES (505,'',54,219,41,NULL,100000000,NULL,0,NULL,600,NULL,2,NULL,'traffic_in',NULL,0); +INSERT INTO `data_template_rrd` VALUES (506,'',55,219,41,NULL,100000000,NULL,0,NULL,600,NULL,2,NULL,'traffic_out',NULL,0); +INSERT INTO `data_template_rrd` VALUES (507,'',54,220,41,NULL,100000000,NULL,0,NULL,600,NULL,2,NULL,'traffic_in',NULL,0); +INSERT INTO `data_template_rrd` VALUES (508,'',55,220,41,NULL,100000000,NULL,0,NULL,600,NULL,2,NULL,'traffic_out',NULL,0); +INSERT INTO `data_template_rrd` VALUES (509,'',54,221,41,NULL,100000000,NULL,0,NULL,600,NULL,2,NULL,'traffic_in',NULL,0); +INSERT INTO `data_template_rrd` VALUES (510,'',55,221,41,NULL,100000000,NULL,0,NULL,600,NULL,2,NULL,'traffic_out',NULL,0); +INSERT INTO `data_template_rrd` VALUES (511,'',54,222,41,NULL,100000000,NULL,0,NULL,600,NULL,2,NULL,'traffic_in',NULL,0); +INSERT INTO `data_template_rrd` VALUES (512,'',55,222,41,NULL,100000000,NULL,0,NULL,600,NULL,2,NULL,'traffic_out',NULL,0); +INSERT INTO `data_template_rrd` VALUES (513,'',54,223,41,NULL,100000000,NULL,0,NULL,600,NULL,2,NULL,'traffic_in',NULL,0); +INSERT INTO `data_template_rrd` VALUES (514,'',55,223,41,NULL,100000000,NULL,0,NULL,600,NULL,2,NULL,'traffic_out',NULL,0); +INSERT INTO `data_template_rrd` VALUES (515,'',54,224,41,NULL,100000000,NULL,0,NULL,600,NULL,2,NULL,'traffic_in',NULL,0); +INSERT INTO `data_template_rrd` VALUES (516,'',55,224,41,NULL,100000000,NULL,0,NULL,600,NULL,2,NULL,'traffic_out',NULL,0); +INSERT INTO `data_template_rrd` VALUES (517,'',54,225,41,NULL,100000000,NULL,0,NULL,600,NULL,2,NULL,'traffic_in',NULL,0); +INSERT INTO `data_template_rrd` VALUES (518,'',55,225,41,NULL,100000000,NULL,0,NULL,600,NULL,2,NULL,'traffic_out',NULL,0); +INSERT INTO `data_template_rrd` VALUES (519,'',54,226,41,NULL,100000000,NULL,0,NULL,600,NULL,2,NULL,'traffic_in',NULL,0); +INSERT INTO `data_template_rrd` VALUES (520,'',55,226,41,NULL,100000000,NULL,0,NULL,600,NULL,2,NULL,'traffic_out',NULL,0); +INSERT INTO `data_template_rrd` VALUES (521,'',54,227,41,NULL,100000000,NULL,0,NULL,600,NULL,2,NULL,'traffic_in',NULL,0); +INSERT INTO `data_template_rrd` VALUES (522,'',55,227,41,NULL,100000000,NULL,0,NULL,600,NULL,2,NULL,'traffic_out',NULL,0); +INSERT INTO `data_template_rrd` VALUES (523,'',54,228,41,NULL,100000000,NULL,0,NULL,600,NULL,2,NULL,'traffic_in',NULL,0); +INSERT INTO `data_template_rrd` VALUES (524,'',55,228,41,NULL,100000000,NULL,0,NULL,600,NULL,2,NULL,'traffic_out',NULL,0); +INSERT INTO `data_template_rrd` VALUES (525,'',54,229,41,NULL,100000000,NULL,0,NULL,600,NULL,2,NULL,'traffic_in',NULL,0); +INSERT INTO `data_template_rrd` VALUES (526,'',55,229,41,NULL,100000000,NULL,0,NULL,600,NULL,2,NULL,'traffic_out',NULL,0); +INSERT INTO `data_template_rrd` VALUES (527,'',54,230,41,NULL,100000000,NULL,0,NULL,600,NULL,2,NULL,'traffic_in',NULL,0); +INSERT INTO `data_template_rrd` VALUES (528,'',55,230,41,NULL,100000000,NULL,0,NULL,600,NULL,2,NULL,'traffic_out',NULL,0); +INSERT INTO `data_template_rrd` VALUES (529,'',54,231,41,NULL,100000000,NULL,0,NULL,600,NULL,2,NULL,'traffic_in',NULL,0); +INSERT INTO `data_template_rrd` VALUES (530,'',55,231,41,NULL,100000000,NULL,0,NULL,600,NULL,2,NULL,'traffic_out',NULL,0); +INSERT INTO `data_template_rrd` VALUES (531,'',54,232,41,NULL,100000000,NULL,0,NULL,600,NULL,2,NULL,'traffic_in',NULL,0); +INSERT INTO `data_template_rrd` VALUES (532,'',55,232,41,NULL,100000000,NULL,0,NULL,600,NULL,2,NULL,'traffic_out',NULL,0); +INSERT INTO `data_template_rrd` VALUES (533,'',54,233,41,NULL,100000000,NULL,0,NULL,600,NULL,2,NULL,'traffic_in',NULL,0); +INSERT INTO `data_template_rrd` VALUES (534,'',55,233,41,NULL,100000000,NULL,0,NULL,600,NULL,2,NULL,'traffic_out',NULL,0); +INSERT INTO `data_template_rrd` VALUES (535,'',54,234,41,NULL,100000000,NULL,0,NULL,600,NULL,2,NULL,'traffic_in',NULL,0); +INSERT INTO `data_template_rrd` VALUES (536,'',55,234,41,NULL,100000000,NULL,0,NULL,600,NULL,2,NULL,'traffic_out',NULL,0); +INSERT INTO `data_template_rrd` VALUES (537,'',54,235,41,NULL,100000000,NULL,0,NULL,600,NULL,2,NULL,'traffic_in',NULL,0); +INSERT INTO `data_template_rrd` VALUES (538,'',55,235,41,NULL,100000000,NULL,0,NULL,600,NULL,2,NULL,'traffic_out',NULL,0); +INSERT INTO `data_template_rrd` VALUES (539,'',54,236,41,NULL,100000000,NULL,0,NULL,600,NULL,2,NULL,'traffic_in',NULL,0); +INSERT INTO `data_template_rrd` VALUES (540,'',55,236,41,NULL,100000000,NULL,0,NULL,600,NULL,2,NULL,'traffic_out',NULL,0); +INSERT INTO `data_template_rrd` VALUES (541,'',54,237,41,NULL,100000000,NULL,0,NULL,600,NULL,2,NULL,'traffic_in',NULL,0); +INSERT INTO `data_template_rrd` VALUES (542,'',55,237,41,NULL,100000000,NULL,0,NULL,600,NULL,2,NULL,'traffic_out',NULL,0); +INSERT INTO `data_template_rrd` VALUES (543,'',54,238,41,NULL,100000000,NULL,0,NULL,600,NULL,2,NULL,'traffic_in',NULL,0); +INSERT INTO `data_template_rrd` VALUES (544,'',55,238,41,NULL,100000000,NULL,0,NULL,600,NULL,2,NULL,'traffic_out',NULL,0); +INSERT INTO `data_template_rrd` VALUES (545,'',54,239,41,NULL,100000000,NULL,0,NULL,600,NULL,2,NULL,'traffic_in',NULL,0); +INSERT INTO `data_template_rrd` VALUES (546,'',55,239,41,NULL,100000000,NULL,0,NULL,600,NULL,2,NULL,'traffic_out',NULL,0); +INSERT INTO `data_template_rrd` VALUES (547,'',54,240,41,NULL,100000000,NULL,0,NULL,600,NULL,2,NULL,'traffic_in',NULL,0); +INSERT INTO `data_template_rrd` VALUES (548,'',55,240,41,NULL,100000000,NULL,0,NULL,600,NULL,2,NULL,'traffic_out',NULL,0); +INSERT INTO `data_template_rrd` VALUES (571,'',55,256,41,NULL,100000000,NULL,0,NULL,600,NULL,2,NULL,'traffic_out',NULL,0); +INSERT INTO `data_template_rrd` VALUES (572,'',54,257,41,NULL,100000000,NULL,0,NULL,600,NULL,2,NULL,'traffic_in',NULL,0); +INSERT INTO `data_template_rrd` VALUES (573,'',55,257,41,NULL,100000000,NULL,0,NULL,600,NULL,2,NULL,'traffic_out',NULL,0); +INSERT INTO `data_template_rrd` VALUES (574,'',54,258,41,NULL,100000000,NULL,0,NULL,600,NULL,2,NULL,'traffic_in',NULL,0); +INSERT INTO `data_template_rrd` VALUES (575,'',55,258,41,NULL,100000000,NULL,0,NULL,600,NULL,2,NULL,'traffic_out',NULL,0); +INSERT INTO `data_template_rrd` VALUES (576,'',54,259,41,NULL,100000000,NULL,0,NULL,600,NULL,2,NULL,'traffic_in',NULL,0); +INSERT INTO `data_template_rrd` VALUES (577,'',55,259,41,NULL,100000000,NULL,0,NULL,600,NULL,2,NULL,'traffic_out',NULL,0); +INSERT INTO `data_template_rrd` VALUES (578,'',54,260,41,NULL,100000000,NULL,0,NULL,600,NULL,2,NULL,'traffic_in',NULL,0); +INSERT INTO `data_template_rrd` VALUES (579,'',55,260,41,NULL,100000000,NULL,0,NULL,600,NULL,2,NULL,'traffic_out',NULL,0); +INSERT INTO `data_template_rrd` VALUES (580,'',54,261,41,NULL,100000000,NULL,0,NULL,600,NULL,2,NULL,'traffic_in',NULL,0); +INSERT INTO `data_template_rrd` VALUES (581,'',55,261,41,NULL,100000000,NULL,0,NULL,600,NULL,2,NULL,'traffic_out',NULL,0); +INSERT INTO `data_template_rrd` VALUES (582,'',54,262,41,NULL,100000000,NULL,0,NULL,600,NULL,2,NULL,'traffic_in',NULL,0); +INSERT INTO `data_template_rrd` VALUES (583,'',55,262,41,NULL,100000000,NULL,0,NULL,600,NULL,2,NULL,'traffic_out',NULL,0); +INSERT INTO `data_template_rrd` VALUES (584,'',54,263,41,NULL,100000000,NULL,0,NULL,600,NULL,2,NULL,'traffic_in',NULL,0); +INSERT INTO `data_template_rrd` VALUES (585,'',55,263,41,NULL,100000000,NULL,0,NULL,600,NULL,2,NULL,'traffic_out',NULL,0); +INSERT INTO `data_template_rrd` VALUES (586,'',54,264,41,NULL,100000000,NULL,0,NULL,600,NULL,2,NULL,'traffic_in',NULL,0); +INSERT INTO `data_template_rrd` VALUES (587,'',55,264,41,NULL,100000000,NULL,0,NULL,600,NULL,2,NULL,'traffic_out',NULL,0); +INSERT INTO `data_template_rrd` VALUES (588,'',54,265,41,NULL,100000000,NULL,0,NULL,600,NULL,2,NULL,'traffic_in',NULL,0); +INSERT INTO `data_template_rrd` VALUES (589,'',55,265,41,NULL,100000000,NULL,0,NULL,600,NULL,2,NULL,'traffic_out',NULL,0); +INSERT INTO `data_template_rrd` VALUES (590,'',54,266,41,NULL,100000000,NULL,0,NULL,600,NULL,2,NULL,'traffic_in',NULL,0); +INSERT INTO `data_template_rrd` VALUES (591,'',55,266,41,NULL,100000000,NULL,0,NULL,600,NULL,2,NULL,'traffic_out',NULL,0); +INSERT INTO `data_template_rrd` VALUES (592,'',54,267,41,NULL,100000000,NULL,0,NULL,600,NULL,2,NULL,'traffic_in',NULL,0); +INSERT INTO `data_template_rrd` VALUES (593,'',55,267,41,NULL,100000000,NULL,0,NULL,600,NULL,2,NULL,'traffic_out',NULL,0); +INSERT INTO `data_template_rrd` VALUES (594,'',54,268,41,NULL,100000000,NULL,0,NULL,600,NULL,2,NULL,'traffic_in',NULL,0); +INSERT INTO `data_template_rrd` VALUES (595,'',55,268,41,NULL,100000000,NULL,0,NULL,600,NULL,2,NULL,'traffic_out',NULL,0); +INSERT INTO `data_template_rrd` VALUES (596,'',54,269,41,NULL,100000000,NULL,0,NULL,600,NULL,2,NULL,'traffic_in',NULL,0); +INSERT INTO `data_template_rrd` VALUES (597,'',55,269,41,NULL,100000000,NULL,0,NULL,600,NULL,2,NULL,'traffic_out',NULL,0); +INSERT INTO `data_template_rrd` VALUES (598,'',54,270,41,NULL,100000000,NULL,0,NULL,600,NULL,2,NULL,'traffic_in',NULL,0); +INSERT INTO `data_template_rrd` VALUES (599,'',55,270,41,NULL,100000000,NULL,0,NULL,600,NULL,2,NULL,'traffic_out',NULL,0); +INSERT INTO `data_template_rrd` VALUES (600,'',54,271,41,NULL,100000000,NULL,0,NULL,600,NULL,2,NULL,'traffic_in',NULL,0); +INSERT INTO `data_template_rrd` VALUES (601,'',55,271,41,NULL,100000000,NULL,0,NULL,600,NULL,2,NULL,'traffic_out',NULL,0); +INSERT INTO `data_template_rrd` VALUES (602,'',54,272,41,NULL,100000000,NULL,0,NULL,600,NULL,2,NULL,'traffic_in',NULL,0); +INSERT INTO `data_template_rrd` VALUES (603,'',55,272,41,NULL,100000000,NULL,0,NULL,600,NULL,2,NULL,'traffic_out',NULL,0); +INSERT INTO `data_template_rrd` VALUES (604,'',54,273,41,NULL,100000000,NULL,0,NULL,600,NULL,2,NULL,'traffic_in',NULL,0); +INSERT INTO `data_template_rrd` VALUES (605,'',55,273,41,NULL,100000000,NULL,0,NULL,600,NULL,2,NULL,'traffic_out',NULL,0); +INSERT INTO `data_template_rrd` VALUES (606,'',54,274,41,NULL,100000000,NULL,0,NULL,600,NULL,2,NULL,'traffic_in',NULL,0); +INSERT INTO `data_template_rrd` VALUES (607,'',55,274,41,NULL,100000000,NULL,0,NULL,600,NULL,2,NULL,'traffic_out',NULL,0); +INSERT INTO `data_template_rrd` VALUES (608,'',54,275,41,NULL,100000000,NULL,0,NULL,600,NULL,2,NULL,'traffic_in',NULL,0); +INSERT INTO `data_template_rrd` VALUES (609,'',55,275,41,NULL,100000000,NULL,0,NULL,600,NULL,2,NULL,'traffic_out',NULL,0); +INSERT INTO `data_template_rrd` VALUES (610,'',54,276,41,NULL,100000000,NULL,0,NULL,600,NULL,2,NULL,'traffic_in',NULL,0); +INSERT INTO `data_template_rrd` VALUES (611,'',55,276,41,NULL,100000000,NULL,0,NULL,600,NULL,2,NULL,'traffic_out',NULL,0); +INSERT INTO `data_template_rrd` VALUES (612,'',54,277,41,NULL,100000000,NULL,0,NULL,600,NULL,2,NULL,'traffic_in',NULL,0); +INSERT INTO `data_template_rrd` VALUES (613,'',55,277,41,NULL,100000000,NULL,0,NULL,600,NULL,2,NULL,'traffic_out',NULL,0); +INSERT INTO `data_template_rrd` VALUES (614,'',54,278,41,NULL,100000000,NULL,0,NULL,600,NULL,2,NULL,'traffic_in',NULL,0); +INSERT INTO `data_template_rrd` VALUES (615,'',55,278,41,NULL,100000000,NULL,0,NULL,600,NULL,2,NULL,'traffic_out',NULL,0); +INSERT INTO `data_template_rrd` VALUES (616,'',54,279,41,NULL,100000000,NULL,0,NULL,600,NULL,2,NULL,'traffic_in',NULL,0); +INSERT INTO `data_template_rrd` VALUES (617,'',55,279,41,NULL,100000000,NULL,0,NULL,600,NULL,2,NULL,'traffic_out',NULL,0); +INSERT INTO `data_template_rrd` VALUES (618,'',54,280,41,NULL,100000000,NULL,0,NULL,600,NULL,2,NULL,'traffic_in',NULL,0); +INSERT INTO `data_template_rrd` VALUES (619,'',55,280,41,NULL,100000000,NULL,0,NULL,600,NULL,2,NULL,'traffic_out',NULL,0); +INSERT INTO `data_template_rrd` VALUES (620,'',54,281,41,NULL,100000000,NULL,0,NULL,600,NULL,2,NULL,'traffic_in',NULL,0); +INSERT INTO `data_template_rrd` VALUES (621,'',55,281,41,NULL,100000000,NULL,0,NULL,600,NULL,2,NULL,'traffic_out',NULL,0); +INSERT INTO `data_template_rrd` VALUES (622,'',54,282,41,NULL,100000000,NULL,0,NULL,600,NULL,2,NULL,'traffic_in',NULL,0); +INSERT INTO `data_template_rrd` VALUES (623,'',55,282,41,NULL,100000000,NULL,0,NULL,600,NULL,2,NULL,'traffic_out',NULL,0); +INSERT INTO `data_template_rrd` VALUES (624,'',7,283,6,NULL,100,NULL,0,NULL,600,NULL,2,NULL,'cpu_nice',NULL,0); +INSERT INTO `data_template_rrd` VALUES (625,'',5,284,4,NULL,100,NULL,0,NULL,600,NULL,2,NULL,'cpu_system',NULL,0); +INSERT INTO `data_template_rrd` VALUES (626,'',6,285,5,NULL,100,NULL,0,NULL,600,NULL,2,NULL,'cpu_user',NULL,0); +INSERT INTO `data_template_rrd` VALUES (627,'',33,286,30,NULL,500,NULL,0,NULL,600,NULL,1,NULL,'load_1min',NULL,0); +INSERT INTO `data_template_rrd` VALUES (628,'',35,287,32,NULL,500,NULL,0,NULL,600,NULL,1,NULL,'load_15min',NULL,0); +INSERT INTO `data_template_rrd` VALUES (629,'',34,288,31,NULL,500,NULL,0,NULL,600,NULL,1,NULL,'load_5min',NULL,0); +INSERT INTO `data_template_rrd` VALUES (630,'',36,289,33,NULL,10000000,NULL,0,NULL,600,NULL,1,NULL,'mem_buffers',NULL,0); +INSERT INTO `data_template_rrd` VALUES (631,'',95,290,47,NULL,10000000,NULL,0,NULL,600,NULL,1,NULL,'mem_cache',NULL,0); +INSERT INTO `data_template_rrd` VALUES (632,'',37,291,34,NULL,10000000,NULL,0,NULL,600,NULL,1,NULL,'mem_free',NULL,0); +INSERT INTO `data_template_rrd` VALUES (633,'',48,292,39,NULL,1000000000,NULL,0,NULL,600,NULL,2,NULL,'unicast_in',NULL,0); +INSERT INTO `data_template_rrd` VALUES (634,'',49,292,39,NULL,1000000000,NULL,0,NULL,600,NULL,2,NULL,'unicast_out',NULL,0); +INSERT INTO `data_template_rrd` VALUES (635,'',48,293,39,NULL,1000000000,NULL,0,NULL,600,NULL,2,NULL,'unicast_in',NULL,0); +INSERT INTO `data_template_rrd` VALUES (636,'',49,293,39,NULL,1000000000,NULL,0,NULL,600,NULL,2,NULL,'unicast_out',NULL,0); +INSERT INTO `data_template_rrd` VALUES (637,'',48,294,39,NULL,1000000000,NULL,0,NULL,600,NULL,2,NULL,'unicast_in',NULL,0); +INSERT INTO `data_template_rrd` VALUES (638,'',49,294,39,NULL,1000000000,NULL,0,NULL,600,NULL,2,NULL,'unicast_out',NULL,0); +INSERT INTO `data_template_rrd` VALUES (639,'',48,295,39,NULL,1000000000,NULL,0,NULL,600,NULL,2,NULL,'unicast_in',NULL,0); +INSERT INTO `data_template_rrd` VALUES (640,'',49,295,39,NULL,1000000000,NULL,0,NULL,600,NULL,2,NULL,'unicast_out',NULL,0); +INSERT INTO `data_template_rrd` VALUES (641,'',48,296,39,NULL,1000000000,NULL,0,NULL,600,NULL,2,NULL,'unicast_in',NULL,0); +INSERT INTO `data_template_rrd` VALUES (642,'',49,296,39,NULL,1000000000,NULL,0,NULL,600,NULL,2,NULL,'unicast_out',NULL,0); +INSERT INTO `data_template_rrd` VALUES (643,'',48,297,39,NULL,1000000000,NULL,0,NULL,600,NULL,2,NULL,'unicast_in',NULL,0); +INSERT INTO `data_template_rrd` VALUES (644,'',49,297,39,NULL,1000000000,NULL,0,NULL,600,NULL,2,NULL,'unicast_out',NULL,0); +INSERT INTO `data_template_rrd` VALUES (645,'',48,298,39,NULL,1000000000,NULL,0,NULL,600,NULL,2,NULL,'unicast_in',NULL,0); +INSERT INTO `data_template_rrd` VALUES (646,'',49,298,39,NULL,1000000000,NULL,0,NULL,600,NULL,2,NULL,'unicast_out',NULL,0); +INSERT INTO `data_template_rrd` VALUES (647,'',48,299,39,NULL,1000000000,NULL,0,NULL,600,NULL,2,NULL,'unicast_in',NULL,0); +INSERT INTO `data_template_rrd` VALUES (648,'',49,299,39,NULL,1000000000,NULL,0,NULL,600,NULL,2,NULL,'unicast_out',NULL,0); +INSERT INTO `data_template_rrd` VALUES (649,'',48,300,39,NULL,1000000000,NULL,0,NULL,600,NULL,2,NULL,'unicast_in',NULL,0); +INSERT INTO `data_template_rrd` VALUES (650,'',49,300,39,NULL,1000000000,NULL,0,NULL,600,NULL,2,NULL,'unicast_out',NULL,0); +INSERT INTO `data_template_rrd` VALUES (651,'',48,301,39,NULL,1000000000,NULL,0,NULL,600,NULL,2,NULL,'unicast_in',NULL,0); +INSERT INTO `data_template_rrd` VALUES (652,'',49,301,39,NULL,1000000000,NULL,0,NULL,600,NULL,2,NULL,'unicast_out',NULL,0); +INSERT INTO `data_template_rrd` VALUES (653,'',48,302,39,NULL,1000000000,NULL,0,NULL,600,NULL,2,NULL,'unicast_in',NULL,0); +INSERT INTO `data_template_rrd` VALUES (654,'',49,302,39,NULL,1000000000,NULL,0,NULL,600,NULL,2,NULL,'unicast_out',NULL,0); +INSERT INTO `data_template_rrd` VALUES (655,'',48,303,39,NULL,1000000000,NULL,0,NULL,600,NULL,2,NULL,'unicast_in',NULL,0); +INSERT INTO `data_template_rrd` VALUES (656,'',49,303,39,NULL,1000000000,NULL,0,NULL,600,NULL,2,NULL,'unicast_out',NULL,0); +INSERT INTO `data_template_rrd` VALUES (657,'',48,304,39,NULL,1000000000,NULL,0,NULL,600,NULL,2,NULL,'unicast_in',NULL,0); +INSERT INTO `data_template_rrd` VALUES (658,'',49,304,39,NULL,1000000000,NULL,0,NULL,600,NULL,2,NULL,'unicast_out',NULL,0); +INSERT INTO `data_template_rrd` VALUES (659,'',48,305,39,NULL,1000000000,NULL,0,NULL,600,NULL,2,NULL,'unicast_in',NULL,0); +INSERT INTO `data_template_rrd` VALUES (660,'',49,305,39,NULL,1000000000,NULL,0,NULL,600,NULL,2,NULL,'unicast_out',NULL,0); +INSERT INTO `data_template_rrd` VALUES (661,'',54,306,41,NULL,100000000,NULL,0,NULL,600,NULL,2,NULL,'traffic_in',NULL,0); +INSERT INTO `data_template_rrd` VALUES (662,'',55,306,41,NULL,100000000,NULL,0,NULL,600,NULL,2,NULL,'traffic_out',NULL,0); +INSERT INTO `data_template_rrd` VALUES (663,'',7,307,6,NULL,100,NULL,0,NULL,600,NULL,2,NULL,'cpu_nice',NULL,0); +INSERT INTO `data_template_rrd` VALUES (664,'',5,308,4,NULL,100,NULL,0,NULL,600,NULL,2,NULL,'cpu_system',NULL,0); +INSERT INTO `data_template_rrd` VALUES (665,'',6,309,5,NULL,100,NULL,0,NULL,600,NULL,2,NULL,'cpu_user',NULL,0); +INSERT INTO `data_template_rrd` VALUES (666,'',36,310,33,NULL,10000000,NULL,0,NULL,600,NULL,1,NULL,'mem_buffers',NULL,0); +INSERT INTO `data_template_rrd` VALUES (667,'',95,311,47,NULL,10000000,NULL,0,NULL,600,NULL,1,NULL,'mem_cache',NULL,0); +INSERT INTO `data_template_rrd` VALUES (668,'',37,312,34,NULL,10000000,NULL,0,NULL,600,NULL,1,NULL,'mem_free',NULL,0); +INSERT INTO `data_template_rrd` VALUES (669,'',54,313,41,NULL,100000000,NULL,0,NULL,600,NULL,2,NULL,'traffic_in',NULL,0); +INSERT INTO `data_template_rrd` VALUES (670,'',55,313,41,NULL,100000000,NULL,0,NULL,600,NULL,2,NULL,'traffic_out',NULL,0); +INSERT INTO `data_template_rrd` VALUES (671,'',44,314,37,NULL,0,NULL,0,NULL,600,NULL,1,NULL,'hdd_free',NULL,0); +INSERT INTO `data_template_rrd` VALUES (672,'',56,314,37,NULL,0,NULL,0,NULL,600,NULL,1,NULL,'hdd_used',NULL,0); + +-- +-- Table structure for table `graph_local` +-- + +CREATE TABLE `graph_local` ( + `id` mediumint(8) unsigned NOT NULL auto_increment, + `graph_template_id` mediumint(8) unsigned NOT NULL default '0', + `host_id` mediumint(8) unsigned NOT NULL default '0', + `snmp_query_id` mediumint(8) NOT NULL default '0', + `snmp_index` varchar(60) NOT NULL default '', + PRIMARY KEY (`id`), + UNIQUE KEY `id` (`id`), + KEY `id_2` (`id`) +) TYPE=MyISAM COMMENT='Creates a relationship for each item in a custom graph.'; + +-- +-- Dumping data for table `graph_local` +-- + +INSERT INTO `graph_local` VALUES (1,12,1,0,''); +INSERT INTO `graph_local` VALUES (2,9,1,0,''); +INSERT INTO `graph_local` VALUES (3,10,1,0,''); +INSERT INTO `graph_local` VALUES (4,8,1,0,''); +INSERT INTO `graph_local` VALUES (5,18,2,0,''); +INSERT INTO `graph_local` VALUES (6,2,2,1,'1'); +INSERT INTO `graph_local` VALUES (7,2,2,1,'2'); +INSERT INTO `graph_local` VALUES (8,2,2,1,'3'); +INSERT INTO `graph_local` VALUES (9,2,2,1,'4'); +INSERT INTO `graph_local` VALUES (10,2,2,1,'5'); +INSERT INTO `graph_local` VALUES (11,2,2,1,'6'); +INSERT INTO `graph_local` VALUES (12,2,2,1,'7'); +INSERT INTO `graph_local` VALUES (13,2,2,1,'8'); +INSERT INTO `graph_local` VALUES (14,2,2,1,'9'); +INSERT INTO `graph_local` VALUES (15,2,2,1,'10'); +INSERT INTO `graph_local` VALUES (16,2,2,1,'11'); +INSERT INTO `graph_local` VALUES (17,2,2,1,'12'); +INSERT INTO `graph_local` VALUES (18,2,2,1,'13'); +INSERT INTO `graph_local` VALUES (19,2,2,1,'14'); +INSERT INTO `graph_local` VALUES (20,2,2,1,'15'); +INSERT INTO `graph_local` VALUES (21,2,2,1,'16'); +INSERT INTO `graph_local` VALUES (22,2,2,1,'17'); +INSERT INTO `graph_local` VALUES (23,2,2,1,'18'); +INSERT INTO `graph_local` VALUES (24,2,2,1,'19'); +INSERT INTO `graph_local` VALUES (25,2,2,1,'20'); +INSERT INTO `graph_local` VALUES (26,2,2,1,'21'); +INSERT INTO `graph_local` VALUES (27,2,2,1,'22'); +INSERT INTO `graph_local` VALUES (28,2,2,1,'23'); +INSERT INTO `graph_local` VALUES (29,2,2,1,'24'); +INSERT INTO `graph_local` VALUES (30,2,2,1,'25'); +INSERT INTO `graph_local` VALUES (31,2,2,1,'26'); +INSERT INTO `graph_local` VALUES (32,2,2,1,'27'); +INSERT INTO `graph_local` VALUES (33,2,2,1,'28'); +INSERT INTO `graph_local` VALUES (34,2,2,1,'29'); +INSERT INTO `graph_local` VALUES (35,18,3,0,''); +INSERT INTO `graph_local` VALUES (36,2,3,1,'1'); +INSERT INTO `graph_local` VALUES (37,2,3,1,'2'); +INSERT INTO `graph_local` VALUES (38,2,3,1,'3'); +INSERT INTO `graph_local` VALUES (39,2,3,1,'4'); +INSERT INTO `graph_local` VALUES (40,2,3,1,'5'); +INSERT INTO `graph_local` VALUES (41,2,3,1,'6'); +INSERT INTO `graph_local` VALUES (42,2,3,1,'7'); +INSERT INTO `graph_local` VALUES (43,2,3,1,'8'); +INSERT INTO `graph_local` VALUES (44,2,3,1,'9'); +INSERT INTO `graph_local` VALUES (45,2,3,1,'10'); +INSERT INTO `graph_local` VALUES (46,2,3,1,'11'); +INSERT INTO `graph_local` VALUES (47,2,3,1,'12'); +INSERT INTO `graph_local` VALUES (48,2,3,1,'13'); +INSERT INTO `graph_local` VALUES (49,2,3,1,'14'); +INSERT INTO `graph_local` VALUES (50,2,3,1,'15'); +INSERT INTO `graph_local` VALUES (51,2,3,1,'16'); +INSERT INTO `graph_local` VALUES (52,2,3,1,'17'); +INSERT INTO `graph_local` VALUES (53,2,3,1,'18'); +INSERT INTO `graph_local` VALUES (54,2,3,1,'19'); +INSERT INTO `graph_local` VALUES (55,2,3,1,'20'); +INSERT INTO `graph_local` VALUES (56,2,3,1,'21'); +INSERT INTO `graph_local` VALUES (57,2,3,1,'22'); +INSERT INTO `graph_local` VALUES (58,2,3,1,'23'); +INSERT INTO `graph_local` VALUES (59,2,3,1,'24'); +INSERT INTO `graph_local` VALUES (60,2,3,1,'25'); +INSERT INTO `graph_local` VALUES (61,2,3,1,'26'); +INSERT INTO `graph_local` VALUES (62,2,3,1,'27'); +INSERT INTO `graph_local` VALUES (63,2,3,1,'28'); +INSERT INTO `graph_local` VALUES (64,2,3,1,'29'); +INSERT INTO `graph_local` VALUES (65,18,4,0,''); +INSERT INTO `graph_local` VALUES (66,2,4,1,'1'); +INSERT INTO `graph_local` VALUES (67,2,4,1,'2'); +INSERT INTO `graph_local` VALUES (68,2,4,1,'3'); +INSERT INTO `graph_local` VALUES (69,2,4,1,'4'); +INSERT INTO `graph_local` VALUES (70,2,4,1,'5'); +INSERT INTO `graph_local` VALUES (71,2,4,1,'6'); +INSERT INTO `graph_local` VALUES (72,2,4,1,'7'); +INSERT INTO `graph_local` VALUES (73,2,4,1,'8'); +INSERT INTO `graph_local` VALUES (74,2,4,1,'9'); +INSERT INTO `graph_local` VALUES (75,2,4,1,'10'); +INSERT INTO `graph_local` VALUES (76,2,4,1,'11'); +INSERT INTO `graph_local` VALUES (77,2,4,1,'12'); +INSERT INTO `graph_local` VALUES (78,2,4,1,'13'); +INSERT INTO `graph_local` VALUES (79,2,4,1,'14'); +INSERT INTO `graph_local` VALUES (80,2,4,1,'15'); +INSERT INTO `graph_local` VALUES (81,2,4,1,'16'); +INSERT INTO `graph_local` VALUES (82,2,4,1,'17'); +INSERT INTO `graph_local` VALUES (83,2,4,1,'18'); +INSERT INTO `graph_local` VALUES (84,2,4,1,'19'); +INSERT INTO `graph_local` VALUES (85,2,4,1,'20'); +INSERT INTO `graph_local` VALUES (86,2,4,1,'21'); +INSERT INTO `graph_local` VALUES (87,2,4,1,'22'); +INSERT INTO `graph_local` VALUES (88,2,4,1,'23'); +INSERT INTO `graph_local` VALUES (89,2,4,1,'24'); +INSERT INTO `graph_local` VALUES (90,2,4,1,'25'); +INSERT INTO `graph_local` VALUES (91,2,4,1,'26'); +INSERT INTO `graph_local` VALUES (92,2,4,1,'27'); +INSERT INTO `graph_local` VALUES (93,2,4,1,'28'); +INSERT INTO `graph_local` VALUES (94,2,4,1,'29'); +INSERT INTO `graph_local` VALUES (95,18,6,0,''); +INSERT INTO `graph_local` VALUES (96,2,6,1,'1'); +INSERT INTO `graph_local` VALUES (97,2,6,1,'2'); +INSERT INTO `graph_local` VALUES (98,2,6,1,'3'); +INSERT INTO `graph_local` VALUES (99,2,6,1,'4'); +INSERT INTO `graph_local` VALUES (100,2,6,1,'5'); +INSERT INTO `graph_local` VALUES (101,2,6,1,'6'); +INSERT INTO `graph_local` VALUES (102,2,6,1,'7'); +INSERT INTO `graph_local` VALUES (103,2,6,1,'8'); +INSERT INTO `graph_local` VALUES (104,2,6,1,'9'); +INSERT INTO `graph_local` VALUES (105,2,6,1,'10'); +INSERT INTO `graph_local` VALUES (106,2,6,1,'11'); +INSERT INTO `graph_local` VALUES (107,2,6,1,'12'); +INSERT INTO `graph_local` VALUES (108,2,6,1,'13'); +INSERT INTO `graph_local` VALUES (109,2,6,1,'14'); +INSERT INTO `graph_local` VALUES (110,2,6,1,'15'); +INSERT INTO `graph_local` VALUES (111,2,6,1,'16'); +INSERT INTO `graph_local` VALUES (112,2,6,1,'17'); +INSERT INTO `graph_local` VALUES (113,2,6,1,'18'); +INSERT INTO `graph_local` VALUES (114,2,6,1,'19'); +INSERT INTO `graph_local` VALUES (115,2,6,1,'20'); +INSERT INTO `graph_local` VALUES (116,2,6,1,'21'); +INSERT INTO `graph_local` VALUES (117,2,6,1,'22'); +INSERT INTO `graph_local` VALUES (118,2,6,1,'23'); +INSERT INTO `graph_local` VALUES (119,2,6,1,'24'); +INSERT INTO `graph_local` VALUES (120,2,6,1,'25'); +INSERT INTO `graph_local` VALUES (121,2,6,1,'26'); +INSERT INTO `graph_local` VALUES (122,2,6,1,'27'); +INSERT INTO `graph_local` VALUES (123,2,6,1,'28'); +INSERT INTO `graph_local` VALUES (124,2,6,1,'29'); +INSERT INTO `graph_local` VALUES (244,2,11,1,'1'); +INSERT INTO `graph_local` VALUES (243,2,5,1,'13'); +INSERT INTO `graph_local` VALUES (242,2,5,1,'9'); +INSERT INTO `graph_local` VALUES (241,2,5,1,'15'); +INSERT INTO `graph_local` VALUES (240,2,5,1,'13'); +INSERT INTO `graph_local` VALUES (239,2,5,1,'10'); +INSERT INTO `graph_local` VALUES (238,2,5,1,'8'); +INSERT INTO `graph_local` VALUES (237,2,5,1,'7'); +INSERT INTO `graph_local` VALUES (236,2,5,1,'6'); +INSERT INTO `graph_local` VALUES (235,13,5,0,''); +INSERT INTO `graph_local` VALUES (234,11,5,0,''); +INSERT INTO `graph_local` VALUES (233,4,5,0,''); +INSERT INTO `graph_local` VALUES (137,18,7,0,''); +INSERT INTO `graph_local` VALUES (138,2,7,1,'1'); +INSERT INTO `graph_local` VALUES (139,2,7,1,'2'); +INSERT INTO `graph_local` VALUES (140,2,7,1,'3'); +INSERT INTO `graph_local` VALUES (141,2,7,1,'4'); +INSERT INTO `graph_local` VALUES (142,2,7,1,'5'); +INSERT INTO `graph_local` VALUES (143,2,7,1,'6'); +INSERT INTO `graph_local` VALUES (144,2,7,1,'7'); +INSERT INTO `graph_local` VALUES (145,2,7,1,'8'); +INSERT INTO `graph_local` VALUES (146,2,7,1,'9'); +INSERT INTO `graph_local` VALUES (147,2,7,1,'10'); +INSERT INTO `graph_local` VALUES (148,2,7,1,'11'); +INSERT INTO `graph_local` VALUES (149,2,7,1,'12'); +INSERT INTO `graph_local` VALUES (150,2,7,1,'13'); +INSERT INTO `graph_local` VALUES (151,2,7,1,'14'); +INSERT INTO `graph_local` VALUES (152,2,7,1,'15'); +INSERT INTO `graph_local` VALUES (153,2,7,1,'16'); +INSERT INTO `graph_local` VALUES (154,2,7,1,'17'); +INSERT INTO `graph_local` VALUES (155,2,7,1,'18'); +INSERT INTO `graph_local` VALUES (156,2,7,1,'19'); +INSERT INTO `graph_local` VALUES (157,2,7,1,'20'); +INSERT INTO `graph_local` VALUES (158,2,7,1,'21'); +INSERT INTO `graph_local` VALUES (159,2,7,1,'22'); +INSERT INTO `graph_local` VALUES (160,2,7,1,'23'); +INSERT INTO `graph_local` VALUES (161,2,7,1,'24'); +INSERT INTO `graph_local` VALUES (162,2,7,1,'25'); +INSERT INTO `graph_local` VALUES (163,2,7,1,'26'); +INSERT INTO `graph_local` VALUES (164,2,7,1,'27'); +INSERT INTO `graph_local` VALUES (165,2,7,1,'28'); +INSERT INTO `graph_local` VALUES (166,2,7,1,'29'); +INSERT INTO `graph_local` VALUES (167,18,8,0,''); +INSERT INTO `graph_local` VALUES (168,2,8,1,'1'); +INSERT INTO `graph_local` VALUES (169,2,8,1,'2'); +INSERT INTO `graph_local` VALUES (170,2,8,1,'3'); +INSERT INTO `graph_local` VALUES (171,2,8,1,'4'); +INSERT INTO `graph_local` VALUES (172,2,8,1,'5'); +INSERT INTO `graph_local` VALUES (173,2,8,1,'6'); +INSERT INTO `graph_local` VALUES (174,2,8,1,'7'); +INSERT INTO `graph_local` VALUES (175,2,8,1,'8'); +INSERT INTO `graph_local` VALUES (176,2,8,1,'9'); +INSERT INTO `graph_local` VALUES (177,2,8,1,'10'); +INSERT INTO `graph_local` VALUES (178,2,8,1,'11'); +INSERT INTO `graph_local` VALUES (179,2,8,1,'12'); +INSERT INTO `graph_local` VALUES (180,2,8,1,'13'); +INSERT INTO `graph_local` VALUES (181,2,8,1,'14'); +INSERT INTO `graph_local` VALUES (182,2,8,1,'15'); +INSERT INTO `graph_local` VALUES (183,2,8,1,'16'); +INSERT INTO `graph_local` VALUES (184,2,8,1,'17'); +INSERT INTO `graph_local` VALUES (185,2,8,1,'18'); +INSERT INTO `graph_local` VALUES (186,2,8,1,'19'); +INSERT INTO `graph_local` VALUES (187,2,8,1,'20'); +INSERT INTO `graph_local` VALUES (188,2,8,1,'21'); +INSERT INTO `graph_local` VALUES (189,2,8,1,'22'); +INSERT INTO `graph_local` VALUES (190,2,8,1,'23'); +INSERT INTO `graph_local` VALUES (191,2,8,1,'24'); +INSERT INTO `graph_local` VALUES (192,2,8,1,'25'); +INSERT INTO `graph_local` VALUES (193,2,8,1,'26'); +INSERT INTO `graph_local` VALUES (194,2,8,1,'27'); +INSERT INTO `graph_local` VALUES (195,2,8,1,'28'); +INSERT INTO `graph_local` VALUES (196,2,8,1,'29'); +INSERT INTO `graph_local` VALUES (197,2,8,1,'30'); +INSERT INTO `graph_local` VALUES (198,2,8,1,'31'); +INSERT INTO `graph_local` VALUES (199,2,8,1,'32'); +INSERT INTO `graph_local` VALUES (200,2,8,1,'33'); +INSERT INTO `graph_local` VALUES (201,2,8,1,'34'); +INSERT INTO `graph_local` VALUES (202,2,8,1,'35'); +INSERT INTO `graph_local` VALUES (203,2,8,1,'36'); +INSERT INTO `graph_local` VALUES (204,2,8,1,'37'); +INSERT INTO `graph_local` VALUES (205,2,8,1,'38'); +INSERT INTO `graph_local` VALUES (206,2,8,1,'39'); +INSERT INTO `graph_local` VALUES (207,2,8,1,'40'); +INSERT INTO `graph_local` VALUES (208,2,8,1,'41'); +INSERT INTO `graph_local` VALUES (209,2,8,1,'42'); +INSERT INTO `graph_local` VALUES (210,2,8,1,'43'); +INSERT INTO `graph_local` VALUES (211,2,8,1,'44'); +INSERT INTO `graph_local` VALUES (212,2,8,1,'45'); +INSERT INTO `graph_local` VALUES (213,2,8,1,'46'); +INSERT INTO `graph_local` VALUES (214,2,8,1,'47'); +INSERT INTO `graph_local` VALUES (215,2,8,1,'48'); +INSERT INTO `graph_local` VALUES (216,2,8,1,'49'); +INSERT INTO `graph_local` VALUES (217,2,8,1,'50'); +INSERT INTO `graph_local` VALUES (218,2,8,1,'51'); +INSERT INTO `graph_local` VALUES (219,2,8,1,'52'); +INSERT INTO `graph_local` VALUES (220,2,8,1,'53'); +INSERT INTO `graph_local` VALUES (221,2,8,1,'54'); +INSERT INTO `graph_local` VALUES (222,2,8,1,'55'); +INSERT INTO `graph_local` VALUES (223,2,8,1,'56'); +INSERT INTO `graph_local` VALUES (224,2,8,1,'57'); +INSERT INTO `graph_local` VALUES (225,2,8,1,'58'); +INSERT INTO `graph_local` VALUES (226,2,8,1,'59'); +INSERT INTO `graph_local` VALUES (227,2,8,1,'60'); +INSERT INTO `graph_local` VALUES (228,2,8,1,'61'); +INSERT INTO `graph_local` VALUES (229,2,8,1,'62'); +INSERT INTO `graph_local` VALUES (230,2,8,1,'63'); +INSERT INTO `graph_local` VALUES (231,2,8,1,'64'); +INSERT INTO `graph_local` VALUES (232,2,8,1,'67'); +INSERT INTO `graph_local` VALUES (245,2,11,1,'2'); +INSERT INTO `graph_local` VALUES (246,2,11,1,'3'); +INSERT INTO `graph_local` VALUES (247,2,11,1,'4'); +INSERT INTO `graph_local` VALUES (248,2,11,1,'5'); +INSERT INTO `graph_local` VALUES (249,2,11,1,'6'); +INSERT INTO `graph_local` VALUES (250,2,11,1,'7'); +INSERT INTO `graph_local` VALUES (251,2,11,1,'8'); +INSERT INTO `graph_local` VALUES (252,2,11,1,'9'); +INSERT INTO `graph_local` VALUES (253,2,11,1,'10'); +INSERT INTO `graph_local` VALUES (254,2,11,1,'11'); +INSERT INTO `graph_local` VALUES (255,2,11,1,'12'); +INSERT INTO `graph_local` VALUES (256,2,11,1,'13'); +INSERT INTO `graph_local` VALUES (257,2,11,1,'14'); +INSERT INTO `graph_local` VALUES (258,2,11,1,'15'); +INSERT INTO `graph_local` VALUES (259,2,11,1,'16'); +INSERT INTO `graph_local` VALUES (260,2,11,1,'17'); +INSERT INTO `graph_local` VALUES (261,2,11,1,'18'); +INSERT INTO `graph_local` VALUES (262,2,11,1,'19'); +INSERT INTO `graph_local` VALUES (263,2,11,1,'20'); +INSERT INTO `graph_local` VALUES (264,2,11,1,'21'); +INSERT INTO `graph_local` VALUES (265,2,11,1,'22'); +INSERT INTO `graph_local` VALUES (266,2,11,1,'23'); +INSERT INTO `graph_local` VALUES (267,2,11,1,'24'); +INSERT INTO `graph_local` VALUES (268,2,11,1,'25'); +INSERT INTO `graph_local` VALUES (269,4,12,0,''); +INSERT INTO `graph_local` VALUES (270,11,12,0,''); +INSERT INTO `graph_local` VALUES (271,13,12,0,''); +INSERT INTO `graph_local` VALUES (272,23,12,1,'1'); +INSERT INTO `graph_local` VALUES (273,23,12,1,'2'); +INSERT INTO `graph_local` VALUES (274,23,12,1,'4'); +INSERT INTO `graph_local` VALUES (275,23,12,1,'5'); +INSERT INTO `graph_local` VALUES (276,23,12,1,'6'); +INSERT INTO `graph_local` VALUES (277,23,12,1,'7'); +INSERT INTO `graph_local` VALUES (278,23,12,1,'8'); +INSERT INTO `graph_local` VALUES (279,23,12,1,'10'); +INSERT INTO `graph_local` VALUES (280,23,12,1,'13'); +INSERT INTO `graph_local` VALUES (281,23,12,1,'3'); +INSERT INTO `graph_local` VALUES (282,23,12,1,'15'); +INSERT INTO `graph_local` VALUES (283,23,12,1,'9'); +INSERT INTO `graph_local` VALUES (284,23,12,1,'13'); +INSERT INTO `graph_local` VALUES (285,23,12,0,''); +INSERT INTO `graph_local` VALUES (286,2,5,1,'14'); +INSERT INTO `graph_local` VALUES (287,4,13,0,''); +INSERT INTO `graph_local` VALUES (288,13,13,0,''); +INSERT INTO `graph_local` VALUES (289,2,13,1,'2'); +INSERT INTO `graph_local` VALUES (290,21,13,6,'/dev/hda1'); + +-- +-- Table structure for table `graph_template_input` +-- + +CREATE TABLE `graph_template_input` ( + `id` mediumint(8) unsigned NOT NULL auto_increment, + `hash` varchar(32) NOT NULL default '', + `graph_template_id` mediumint(8) unsigned NOT NULL default '0', + `name` varchar(255) NOT NULL default '', + `description` text, + `column_name` varchar(50) NOT NULL default '', + PRIMARY KEY (`id`), + UNIQUE KEY `id` (`id`), + KEY `id_2` (`id`), + KEY `id_3` (`id`) +) TYPE=MyISAM COMMENT='Stores the names for graph item input groups.'; + +-- +-- Dumping data for table `graph_template_input` +-- + +INSERT INTO `graph_template_input` VALUES (3,'e9d4191277fdfd7d54171f153da57fb0',2,'Inbound Data Source','','task_item_id'); +INSERT INTO `graph_template_input` VALUES (4,'7b361722a11a03238ee8ab7ce44a1037',2,'Outbound Data Source','','task_item_id'); +INSERT INTO `graph_template_input` VALUES (5,'b33eb27833614056e06ee5952c3e0724',3,'Available Disk Space Data Source','','task_item_id'); +INSERT INTO `graph_template_input` VALUES (6,'ef8799e63ee00e8904bcc4228015784a',3,'Used Disk Space Data Source','','task_item_id'); +INSERT INTO `graph_template_input` VALUES (7,'2662ef4fbb0bf92317ffd42c7515af37',5,'Signal Level Data Source','','task_item_id'); +INSERT INTO `graph_template_input` VALUES (8,'a6edef6624c796d3a6055305e2e3d4bf',5,'Noise Level Data Source','','task_item_id'); +INSERT INTO `graph_template_input` VALUES (9,'b0e902db1875e392a9d7d69bfbb13515',5,'Signal Level Color','','color_id'); +INSERT INTO `graph_template_input` VALUES (10,'24632b1d4a561e937225d0a5fbe65e41',5,'Noise Level Color','','color_id'); +INSERT INTO `graph_template_input` VALUES (11,'6d078f1d58b70ad154a89eb80fe6ab75',6,'Transmissions Data Source','','task_item_id'); +INSERT INTO `graph_template_input` VALUES (12,'878241872dd81c68d78e6ff94871d97d',6,'Re-Transmissions Data Source','','task_item_id'); +INSERT INTO `graph_template_input` VALUES (13,'f8fcdc3a3f0e8ead33bd9751895a3462',6,'Transmissions Color','','color_id'); +INSERT INTO `graph_template_input` VALUES (14,'394ab4713a34198dddb5175aa40a2b4a',6,'Re-Transmissions Color','','color_id'); +INSERT INTO `graph_template_input` VALUES (15,'433f328369f9569446ddc59555a63eb8',7,'Ping Host Data Source','','task_item_id'); +INSERT INTO `graph_template_input` VALUES (16,'a1a91c1514c65152d8cb73522ea9d4e6',7,'Legend Color','','color_id'); +INSERT INTO `graph_template_input` VALUES (17,'2fb4deb1448379b27ddc64e30e70dc42',7,'Legend Text','','text_format'); +INSERT INTO `graph_template_input` VALUES (18,'592cedd465877bc61ab549df688b0b2a',8,'Processes Data Source','','task_item_id'); +INSERT INTO `graph_template_input` VALUES (19,'1d51dbabb200fcea5c4b157129a75410',8,'Legend Color','','color_id'); +INSERT INTO `graph_template_input` VALUES (20,'8cb8ed3378abec21a1819ea52dfee6a3',9,'1 Minute Data Source','','task_item_id'); +INSERT INTO `graph_template_input` VALUES (21,'5dfcaf9fd771deb8c5430bce1562e371',9,'5 Minute Data Source','','task_item_id'); +INSERT INTO `graph_template_input` VALUES (22,'6f3cc610315ee58bc8e0b1f272466324',9,'15 Minute Data Source','','task_item_id'); +INSERT INTO `graph_template_input` VALUES (23,'b457a982bf46c6760e6ef5f5d06d41fb',10,'Logged in Users Data Source','','task_item_id'); +INSERT INTO `graph_template_input` VALUES (24,'bd4a57adf93c884815b25a8036b67f98',10,'Legend Color','','color_id'); +INSERT INTO `graph_template_input` VALUES (25,'d7cdb63500c576e0f9f354de42c6cf3a',11,'1 Minute Data Source','','task_item_id'); +INSERT INTO `graph_template_input` VALUES (26,'a23152f5ec02e7762ca27608c0d89f6c',11,'5 Minute Data Source','','task_item_id'); +INSERT INTO `graph_template_input` VALUES (27,'2cc5d1818da577fba15115aa18f64d85',11,'15 Minute Data Source','','task_item_id'); +INSERT INTO `graph_template_input` VALUES (77,'f28013abf8e5813870df0f4111a5e695',32,'Outbound Data Source','','task_item_id'); +INSERT INTO `graph_template_input` VALUES (76,'69a23877302e7d142f254b208c58b596',32,'Inbound Data Source','','task_item_id'); +INSERT INTO `graph_template_input` VALUES (30,'6273c71cdb7ed4ac525cdbcf6180918c',12,'Free Data Source','','task_item_id'); +INSERT INTO `graph_template_input` VALUES (31,'5e62dbea1db699f1bda04c5863e7864d',12,'Swap Data Source','','task_item_id'); +INSERT INTO `graph_template_input` VALUES (32,'4d52e112a836d4c9d451f56602682606',4,'System CPU Data Source','','task_item_id'); +INSERT INTO `graph_template_input` VALUES (33,'f0310b066cc919d2f898b8d1ebf3b518',4,'User CPU Data Source','','task_item_id'); +INSERT INTO `graph_template_input` VALUES (34,'d9eb6b9eb3d7dd44fd14fdefb4096b54',4,'Nice CPU Data Source','','task_item_id'); +INSERT INTO `graph_template_input` VALUES (35,'f45def7cad112b450667aa67262258cb',13,'Memory Free Data Source','','task_item_id'); +INSERT INTO `graph_template_input` VALUES (36,'f8c361a8c8b7ad80e8be03ba7ea5d0d6',13,'Memory Buffers Data Source','','task_item_id'); +INSERT INTO `graph_template_input` VALUES (37,'03d11dce695963be30bd744bd6cbac69',14,'Cache Hits Data Source','','task_item_id'); +INSERT INTO `graph_template_input` VALUES (38,'9cbc515234779af4bf6cdf71a81c556a',14,'Cache Checks Data Source','','task_item_id'); +INSERT INTO `graph_template_input` VALUES (39,'2c4d561ee8132a8dda6de1104336a6ec',15,'CPU Utilization Data Source','','task_item_id'); +INSERT INTO `graph_template_input` VALUES (40,'6e1cf7addc0cc419aa903552e3eedbea',16,'File System Reads Data Source','','task_item_id'); +INSERT INTO `graph_template_input` VALUES (41,'7ea2aa0656f7064d25a36135dd0e9082',16,'File System Writes Data Source','','task_item_id'); +INSERT INTO `graph_template_input` VALUES (42,'63480bca78a38435f24a5b5d5ed050d7',17,'Current Logins Data Source','','task_item_id'); +INSERT INTO `graph_template_input` VALUES (73,'69ad68fc53af03565aef501ed5f04744',30,'Open Files Data Source','','task_item_id'); +INSERT INTO `graph_template_input` VALUES (44,'31fed1f9e139d4897d0460b10fb7be94',15,'Legend Color','','color_id'); +INSERT INTO `graph_template_input` VALUES (45,'bb9d83a02261583bc1f92d9e66ea705d',18,'CPU Usage Data Source','','task_item_id'); +INSERT INTO `graph_template_input` VALUES (46,'51196222ed37b44236d9958116028980',18,'Legend Color','','color_id'); +INSERT INTO `graph_template_input` VALUES (47,'fd26b0f437b75715d6dff983e7efa710',19,'Free Space Data Source','','task_item_id'); +INSERT INTO `graph_template_input` VALUES (48,'a463dd46862605c90ea60ccad74188db',19,'Total Space Data Source','','task_item_id'); +INSERT INTO `graph_template_input` VALUES (49,'9977dd7a41bcf0f0c02872b442c7492e',19,'Freeable Space Data Source','','task_item_id'); +INSERT INTO `graph_template_input` VALUES (53,'940beb0f0344e37f4c6cdfc17d2060bc',21,'Available Disk Space Data Source','','task_item_id'); +INSERT INTO `graph_template_input` VALUES (51,'a7a69bbdf6890d6e6eaa7de16e815ec6',20,'Used Directory Entries Data Source','','task_item_id'); +INSERT INTO `graph_template_input` VALUES (52,'0072b613a33f1fae5ce3e5903dec8fdb',20,'Available Directory Entries Data Source','','task_item_id'); +INSERT INTO `graph_template_input` VALUES (54,'7b0674dd447a9badf0d11bec688028a8',21,'Used Disk Space Data Source','','task_item_id'); +INSERT INTO `graph_template_input` VALUES (55,'fa83cd3a3b4271b644cb6459ea8c35dc',22,'Discards In Data Source','','task_item_id'); +INSERT INTO `graph_template_input` VALUES (56,'7946e8ee1e38a65462b85e31a15e35e5',22,'Errors In Data Source','','task_item_id'); +INSERT INTO `graph_template_input` VALUES (57,'00ae916640272f5aca54d73ae34c326b',23,'Unicast Packets Out Data Source','','task_item_id'); +INSERT INTO `graph_template_input` VALUES (58,'1bc1652f82488ebfb7242c65d2ffa9c7',23,'Unicast Packets In Data Source','','task_item_id'); +INSERT INTO `graph_template_input` VALUES (59,'e3177d0e56278de320db203f32fb803d',24,'Non-Unicast Packets In Data Source','','task_item_id'); +INSERT INTO `graph_template_input` VALUES (60,'4f20fba2839764707f1c3373648c5fef',24,'Non-Unicast Packets Out Data Source','','task_item_id'); +INSERT INTO `graph_template_input` VALUES (61,'e5acdd5368137c408d56ecf55b0e077c',22,'Discards Out Data Source','','task_item_id'); +INSERT INTO `graph_template_input` VALUES (62,'a028e586e5fae667127c655fe0ac67f0',22,'Errors Out Data Source','','task_item_id'); +INSERT INTO `graph_template_input` VALUES (63,'2764a4f142ba9fd95872106a1b43541e',25,'Inbound Data Source','','task_item_id'); +INSERT INTO `graph_template_input` VALUES (64,'f73f7ddc1f4349356908122093dbfca2',25,'Outbound Data Source','','task_item_id'); +INSERT INTO `graph_template_input` VALUES (65,'86bd8819d830a81d64267761e1fd8ec4',26,'Total Disk Space Data Source','','task_item_id'); +INSERT INTO `graph_template_input` VALUES (66,'6c8967850102202de166951e4411d426',26,'Used Disk Space Data Source','','task_item_id'); +INSERT INTO `graph_template_input` VALUES (67,'bdad718851a52b82eca0a310b0238450',27,'CPU Utilization Data Source','','task_item_id'); +INSERT INTO `graph_template_input` VALUES (68,'e7b578e12eb8a82627557b955fd6ebd4',27,'Legend Color','','color_id'); +INSERT INTO `graph_template_input` VALUES (69,'37d09fb7ce88ecec914728bdb20027f3',28,'Logged in Users Data Source','','task_item_id'); +INSERT INTO `graph_template_input` VALUES (70,'699bd7eff7ba0c3520db3692103a053d',28,'Legend Color','','color_id'); +INSERT INTO `graph_template_input` VALUES (71,'df905e159d13a5abed8a8a7710468831',29,'Processes Data Source','','task_item_id'); +INSERT INTO `graph_template_input` VALUES (72,'8ca9e3c65c080dbf74a59338d64b0c14',29,'Legend Color','','color_id'); +INSERT INTO `graph_template_input` VALUES (74,'562726cccdb67d5c6941e9e826ef4ef5',31,'Inbound Data Source','','task_item_id'); +INSERT INTO `graph_template_input` VALUES (75,'82426afec226f8189c8928e7f083f80f',31,'Outbound Data Source','','task_item_id'); +INSERT INTO `graph_template_input` VALUES (78,'8644b933b6a09dde6c32ff24655eeb9a',33,'Outbound Data Source','','task_item_id'); +INSERT INTO `graph_template_input` VALUES (79,'49c4b4800f3e638a6f6bb681919aea80',33,'Inbound Data Source','','task_item_id'); +INSERT INTO `graph_template_input` VALUES (80,'e0b395be8db4f7b938d16df7ae70065f',13,'Cache Memory Data Source','','task_item_id'); +INSERT INTO `graph_template_input` VALUES (81,'2dca37011521501b9c2b705d080db750',34,'Data Source [snmp_oid]',NULL,'task_item_id'); +INSERT INTO `graph_template_input` VALUES (82,'b8d8ade5f5f3dd7b12f8cc56bbb4083e',34,'Legend Color','','color_id'); +INSERT INTO `graph_template_input` VALUES (83,'ac2355b4895c37e14df827f969f31c12',34,'Legend Text','','text_format'); + +-- +-- Table structure for table `graph_template_input_defs` +-- + +CREATE TABLE `graph_template_input_defs` ( + `graph_template_input_id` mediumint(8) unsigned NOT NULL default '0', + `graph_template_item_id` int(12) unsigned NOT NULL default '0', + PRIMARY KEY (`graph_template_input_id`,`graph_template_item_id`), + KEY `graph_template_input_id` (`graph_template_input_id`) +) TYPE=MyISAM COMMENT='Stores the relationship for what graph iitems are associated'; + +-- +-- Dumping data for table `graph_template_input_defs` +-- + +INSERT INTO `graph_template_input_defs` VALUES (3,9); +INSERT INTO `graph_template_input_defs` VALUES (3,10); +INSERT INTO `graph_template_input_defs` VALUES (3,11); +INSERT INTO `graph_template_input_defs` VALUES (3,12); +INSERT INTO `graph_template_input_defs` VALUES (4,13); +INSERT INTO `graph_template_input_defs` VALUES (4,14); +INSERT INTO `graph_template_input_defs` VALUES (4,15); +INSERT INTO `graph_template_input_defs` VALUES (4,16); +INSERT INTO `graph_template_input_defs` VALUES (5,21); +INSERT INTO `graph_template_input_defs` VALUES (5,22); +INSERT INTO `graph_template_input_defs` VALUES (5,23); +INSERT INTO `graph_template_input_defs` VALUES (5,24); +INSERT INTO `graph_template_input_defs` VALUES (6,17); +INSERT INTO `graph_template_input_defs` VALUES (6,18); +INSERT INTO `graph_template_input_defs` VALUES (6,19); +INSERT INTO `graph_template_input_defs` VALUES (6,20); +INSERT INTO `graph_template_input_defs` VALUES (7,45); +INSERT INTO `graph_template_input_defs` VALUES (7,46); +INSERT INTO `graph_template_input_defs` VALUES (7,47); +INSERT INTO `graph_template_input_defs` VALUES (7,48); +INSERT INTO `graph_template_input_defs` VALUES (8,49); +INSERT INTO `graph_template_input_defs` VALUES (8,50); +INSERT INTO `graph_template_input_defs` VALUES (8,51); +INSERT INTO `graph_template_input_defs` VALUES (8,52); +INSERT INTO `graph_template_input_defs` VALUES (9,45); +INSERT INTO `graph_template_input_defs` VALUES (10,49); +INSERT INTO `graph_template_input_defs` VALUES (11,53); +INSERT INTO `graph_template_input_defs` VALUES (11,54); +INSERT INTO `graph_template_input_defs` VALUES (11,55); +INSERT INTO `graph_template_input_defs` VALUES (11,56); +INSERT INTO `graph_template_input_defs` VALUES (12,57); +INSERT INTO `graph_template_input_defs` VALUES (12,58); +INSERT INTO `graph_template_input_defs` VALUES (12,59); +INSERT INTO `graph_template_input_defs` VALUES (12,60); +INSERT INTO `graph_template_input_defs` VALUES (13,53); +INSERT INTO `graph_template_input_defs` VALUES (14,57); +INSERT INTO `graph_template_input_defs` VALUES (15,61); +INSERT INTO `graph_template_input_defs` VALUES (15,62); +INSERT INTO `graph_template_input_defs` VALUES (15,63); +INSERT INTO `graph_template_input_defs` VALUES (15,64); +INSERT INTO `graph_template_input_defs` VALUES (16,61); +INSERT INTO `graph_template_input_defs` VALUES (17,61); +INSERT INTO `graph_template_input_defs` VALUES (18,65); +INSERT INTO `graph_template_input_defs` VALUES (18,66); +INSERT INTO `graph_template_input_defs` VALUES (18,67); +INSERT INTO `graph_template_input_defs` VALUES (18,68); +INSERT INTO `graph_template_input_defs` VALUES (19,65); +INSERT INTO `graph_template_input_defs` VALUES (20,69); +INSERT INTO `graph_template_input_defs` VALUES (20,70); +INSERT INTO `graph_template_input_defs` VALUES (21,71); +INSERT INTO `graph_template_input_defs` VALUES (21,72); +INSERT INTO `graph_template_input_defs` VALUES (22,73); +INSERT INTO `graph_template_input_defs` VALUES (22,74); +INSERT INTO `graph_template_input_defs` VALUES (23,76); +INSERT INTO `graph_template_input_defs` VALUES (23,77); +INSERT INTO `graph_template_input_defs` VALUES (23,78); +INSERT INTO `graph_template_input_defs` VALUES (23,79); +INSERT INTO `graph_template_input_defs` VALUES (24,76); +INSERT INTO `graph_template_input_defs` VALUES (25,80); +INSERT INTO `graph_template_input_defs` VALUES (25,81); +INSERT INTO `graph_template_input_defs` VALUES (26,82); +INSERT INTO `graph_template_input_defs` VALUES (26,83); +INSERT INTO `graph_template_input_defs` VALUES (27,84); +INSERT INTO `graph_template_input_defs` VALUES (27,85); +INSERT INTO `graph_template_input_defs` VALUES (30,95); +INSERT INTO `graph_template_input_defs` VALUES (30,96); +INSERT INTO `graph_template_input_defs` VALUES (30,97); +INSERT INTO `graph_template_input_defs` VALUES (30,98); +INSERT INTO `graph_template_input_defs` VALUES (31,99); +INSERT INTO `graph_template_input_defs` VALUES (31,100); +INSERT INTO `graph_template_input_defs` VALUES (31,101); +INSERT INTO `graph_template_input_defs` VALUES (31,102); +INSERT INTO `graph_template_input_defs` VALUES (32,29); +INSERT INTO `graph_template_input_defs` VALUES (32,30); +INSERT INTO `graph_template_input_defs` VALUES (32,31); +INSERT INTO `graph_template_input_defs` VALUES (32,32); +INSERT INTO `graph_template_input_defs` VALUES (33,33); +INSERT INTO `graph_template_input_defs` VALUES (33,34); +INSERT INTO `graph_template_input_defs` VALUES (33,35); +INSERT INTO `graph_template_input_defs` VALUES (33,36); +INSERT INTO `graph_template_input_defs` VALUES (34,37); +INSERT INTO `graph_template_input_defs` VALUES (34,38); +INSERT INTO `graph_template_input_defs` VALUES (34,39); +INSERT INTO `graph_template_input_defs` VALUES (34,40); +INSERT INTO `graph_template_input_defs` VALUES (35,103); +INSERT INTO `graph_template_input_defs` VALUES (35,104); +INSERT INTO `graph_template_input_defs` VALUES (35,105); +INSERT INTO `graph_template_input_defs` VALUES (35,106); +INSERT INTO `graph_template_input_defs` VALUES (36,107); +INSERT INTO `graph_template_input_defs` VALUES (36,108); +INSERT INTO `graph_template_input_defs` VALUES (36,109); +INSERT INTO `graph_template_input_defs` VALUES (36,110); +INSERT INTO `graph_template_input_defs` VALUES (37,111); +INSERT INTO `graph_template_input_defs` VALUES (37,112); +INSERT INTO `graph_template_input_defs` VALUES (37,113); +INSERT INTO `graph_template_input_defs` VALUES (37,114); +INSERT INTO `graph_template_input_defs` VALUES (38,115); +INSERT INTO `graph_template_input_defs` VALUES (38,116); +INSERT INTO `graph_template_input_defs` VALUES (38,117); +INSERT INTO `graph_template_input_defs` VALUES (38,118); +INSERT INTO `graph_template_input_defs` VALUES (39,119); +INSERT INTO `graph_template_input_defs` VALUES (39,120); +INSERT INTO `graph_template_input_defs` VALUES (39,121); +INSERT INTO `graph_template_input_defs` VALUES (39,122); +INSERT INTO `graph_template_input_defs` VALUES (40,123); +INSERT INTO `graph_template_input_defs` VALUES (40,124); +INSERT INTO `graph_template_input_defs` VALUES (40,125); +INSERT INTO `graph_template_input_defs` VALUES (40,126); +INSERT INTO `graph_template_input_defs` VALUES (41,127); +INSERT INTO `graph_template_input_defs` VALUES (41,128); +INSERT INTO `graph_template_input_defs` VALUES (41,129); +INSERT INTO `graph_template_input_defs` VALUES (41,130); +INSERT INTO `graph_template_input_defs` VALUES (42,131); +INSERT INTO `graph_template_input_defs` VALUES (42,132); +INSERT INTO `graph_template_input_defs` VALUES (42,133); +INSERT INTO `graph_template_input_defs` VALUES (42,134); +INSERT INTO `graph_template_input_defs` VALUES (44,119); +INSERT INTO `graph_template_input_defs` VALUES (45,139); +INSERT INTO `graph_template_input_defs` VALUES (45,140); +INSERT INTO `graph_template_input_defs` VALUES (45,141); +INSERT INTO `graph_template_input_defs` VALUES (45,142); +INSERT INTO `graph_template_input_defs` VALUES (46,139); +INSERT INTO `graph_template_input_defs` VALUES (47,143); +INSERT INTO `graph_template_input_defs` VALUES (47,144); +INSERT INTO `graph_template_input_defs` VALUES (47,145); +INSERT INTO `graph_template_input_defs` VALUES (47,146); +INSERT INTO `graph_template_input_defs` VALUES (48,147); +INSERT INTO `graph_template_input_defs` VALUES (48,148); +INSERT INTO `graph_template_input_defs` VALUES (48,149); +INSERT INTO `graph_template_input_defs` VALUES (48,150); +INSERT INTO `graph_template_input_defs` VALUES (49,151); +INSERT INTO `graph_template_input_defs` VALUES (49,152); +INSERT INTO `graph_template_input_defs` VALUES (49,153); +INSERT INTO `graph_template_input_defs` VALUES (49,154); +INSERT INTO `graph_template_input_defs` VALUES (51,159); +INSERT INTO `graph_template_input_defs` VALUES (51,160); +INSERT INTO `graph_template_input_defs` VALUES (51,161); +INSERT INTO `graph_template_input_defs` VALUES (51,162); +INSERT INTO `graph_template_input_defs` VALUES (52,163); +INSERT INTO `graph_template_input_defs` VALUES (52,164); +INSERT INTO `graph_template_input_defs` VALUES (52,165); +INSERT INTO `graph_template_input_defs` VALUES (52,166); +INSERT INTO `graph_template_input_defs` VALUES (53,172); +INSERT INTO `graph_template_input_defs` VALUES (53,173); +INSERT INTO `graph_template_input_defs` VALUES (53,174); +INSERT INTO `graph_template_input_defs` VALUES (53,175); +INSERT INTO `graph_template_input_defs` VALUES (54,167); +INSERT INTO `graph_template_input_defs` VALUES (54,169); +INSERT INTO `graph_template_input_defs` VALUES (54,170); +INSERT INTO `graph_template_input_defs` VALUES (54,171); +INSERT INTO `graph_template_input_defs` VALUES (55,180); +INSERT INTO `graph_template_input_defs` VALUES (55,181); +INSERT INTO `graph_template_input_defs` VALUES (55,182); +INSERT INTO `graph_template_input_defs` VALUES (55,183); +INSERT INTO `graph_template_input_defs` VALUES (56,184); +INSERT INTO `graph_template_input_defs` VALUES (56,185); +INSERT INTO `graph_template_input_defs` VALUES (56,186); +INSERT INTO `graph_template_input_defs` VALUES (56,187); +INSERT INTO `graph_template_input_defs` VALUES (57,188); +INSERT INTO `graph_template_input_defs` VALUES (57,189); +INSERT INTO `graph_template_input_defs` VALUES (57,190); +INSERT INTO `graph_template_input_defs` VALUES (57,191); +INSERT INTO `graph_template_input_defs` VALUES (58,192); +INSERT INTO `graph_template_input_defs` VALUES (58,193); +INSERT INTO `graph_template_input_defs` VALUES (58,194); +INSERT INTO `graph_template_input_defs` VALUES (58,195); +INSERT INTO `graph_template_input_defs` VALUES (59,196); +INSERT INTO `graph_template_input_defs` VALUES (59,197); +INSERT INTO `graph_template_input_defs` VALUES (59,198); +INSERT INTO `graph_template_input_defs` VALUES (59,199); +INSERT INTO `graph_template_input_defs` VALUES (60,200); +INSERT INTO `graph_template_input_defs` VALUES (60,201); +INSERT INTO `graph_template_input_defs` VALUES (60,202); +INSERT INTO `graph_template_input_defs` VALUES (60,203); +INSERT INTO `graph_template_input_defs` VALUES (61,204); +INSERT INTO `graph_template_input_defs` VALUES (61,205); +INSERT INTO `graph_template_input_defs` VALUES (61,206); +INSERT INTO `graph_template_input_defs` VALUES (61,207); +INSERT INTO `graph_template_input_defs` VALUES (62,208); +INSERT INTO `graph_template_input_defs` VALUES (62,209); +INSERT INTO `graph_template_input_defs` VALUES (62,210); +INSERT INTO `graph_template_input_defs` VALUES (62,211); +INSERT INTO `graph_template_input_defs` VALUES (63,212); +INSERT INTO `graph_template_input_defs` VALUES (63,213); +INSERT INTO `graph_template_input_defs` VALUES (63,214); +INSERT INTO `graph_template_input_defs` VALUES (63,215); +INSERT INTO `graph_template_input_defs` VALUES (64,216); +INSERT INTO `graph_template_input_defs` VALUES (64,217); +INSERT INTO `graph_template_input_defs` VALUES (64,218); +INSERT INTO `graph_template_input_defs` VALUES (64,219); +INSERT INTO `graph_template_input_defs` VALUES (65,307); +INSERT INTO `graph_template_input_defs` VALUES (65,308); +INSERT INTO `graph_template_input_defs` VALUES (65,309); +INSERT INTO `graph_template_input_defs` VALUES (65,310); +INSERT INTO `graph_template_input_defs` VALUES (66,303); +INSERT INTO `graph_template_input_defs` VALUES (66,304); +INSERT INTO `graph_template_input_defs` VALUES (66,305); +INSERT INTO `graph_template_input_defs` VALUES (66,306); +INSERT INTO `graph_template_input_defs` VALUES (67,315); +INSERT INTO `graph_template_input_defs` VALUES (67,316); +INSERT INTO `graph_template_input_defs` VALUES (67,317); +INSERT INTO `graph_template_input_defs` VALUES (67,318); +INSERT INTO `graph_template_input_defs` VALUES (68,315); +INSERT INTO `graph_template_input_defs` VALUES (69,319); +INSERT INTO `graph_template_input_defs` VALUES (69,320); +INSERT INTO `graph_template_input_defs` VALUES (69,321); +INSERT INTO `graph_template_input_defs` VALUES (69,322); +INSERT INTO `graph_template_input_defs` VALUES (70,319); +INSERT INTO `graph_template_input_defs` VALUES (71,323); +INSERT INTO `graph_template_input_defs` VALUES (71,324); +INSERT INTO `graph_template_input_defs` VALUES (71,325); +INSERT INTO `graph_template_input_defs` VALUES (71,326); +INSERT INTO `graph_template_input_defs` VALUES (72,323); +INSERT INTO `graph_template_input_defs` VALUES (73,358); +INSERT INTO `graph_template_input_defs` VALUES (73,359); +INSERT INTO `graph_template_input_defs` VALUES (73,360); +INSERT INTO `graph_template_input_defs` VALUES (73,361); +INSERT INTO `graph_template_input_defs` VALUES (74,362); +INSERT INTO `graph_template_input_defs` VALUES (74,363); +INSERT INTO `graph_template_input_defs` VALUES (74,364); +INSERT INTO `graph_template_input_defs` VALUES (74,365); +INSERT INTO `graph_template_input_defs` VALUES (75,366); +INSERT INTO `graph_template_input_defs` VALUES (75,367); +INSERT INTO `graph_template_input_defs` VALUES (75,368); +INSERT INTO `graph_template_input_defs` VALUES (75,369); +INSERT INTO `graph_template_input_defs` VALUES (75,371); +INSERT INTO `graph_template_input_defs` VALUES (75,372); +INSERT INTO `graph_template_input_defs` VALUES (76,373); +INSERT INTO `graph_template_input_defs` VALUES (76,374); +INSERT INTO `graph_template_input_defs` VALUES (76,375); +INSERT INTO `graph_template_input_defs` VALUES (76,376); +INSERT INTO `graph_template_input_defs` VALUES (76,383); +INSERT INTO `graph_template_input_defs` VALUES (77,377); +INSERT INTO `graph_template_input_defs` VALUES (77,378); +INSERT INTO `graph_template_input_defs` VALUES (77,379); +INSERT INTO `graph_template_input_defs` VALUES (77,380); +INSERT INTO `graph_template_input_defs` VALUES (77,384); +INSERT INTO `graph_template_input_defs` VALUES (78,385); +INSERT INTO `graph_template_input_defs` VALUES (78,386); +INSERT INTO `graph_template_input_defs` VALUES (78,387); +INSERT INTO `graph_template_input_defs` VALUES (78,388); +INSERT INTO `graph_template_input_defs` VALUES (78,393); +INSERT INTO `graph_template_input_defs` VALUES (79,389); +INSERT INTO `graph_template_input_defs` VALUES (79,390); +INSERT INTO `graph_template_input_defs` VALUES (79,391); +INSERT INTO `graph_template_input_defs` VALUES (79,392); +INSERT INTO `graph_template_input_defs` VALUES (79,394); +INSERT INTO `graph_template_input_defs` VALUES (80,403); +INSERT INTO `graph_template_input_defs` VALUES (80,404); +INSERT INTO `graph_template_input_defs` VALUES (80,405); +INSERT INTO `graph_template_input_defs` VALUES (80,406); +INSERT INTO `graph_template_input_defs` VALUES (81,407); +INSERT INTO `graph_template_input_defs` VALUES (81,408); +INSERT INTO `graph_template_input_defs` VALUES (81,409); +INSERT INTO `graph_template_input_defs` VALUES (81,410); +INSERT INTO `graph_template_input_defs` VALUES (82,407); +INSERT INTO `graph_template_input_defs` VALUES (83,407); + +-- +-- Table structure for table `graph_templates` +-- + +CREATE TABLE `graph_templates` ( + `id` mediumint(8) unsigned NOT NULL auto_increment, + `hash` char(32) NOT NULL default '', + `name` char(255) NOT NULL default '', + PRIMARY KEY (`id`), + UNIQUE KEY `id` (`id`), + KEY `id_2` (`id`) +) TYPE=MyISAM COMMENT='Contains each graph template name.'; + +-- +-- Dumping data for table `graph_templates` +-- + +INSERT INTO `graph_templates` VALUES (34,'010b90500e1fc6a05abfd542940584d0','SNMP - Generic OID Template'); +INSERT INTO `graph_templates` VALUES (2,'5deb0d66c81262843dce5f3861be9966','Interface - Traffic (bits/sec)'); +INSERT INTO `graph_templates` VALUES (3,'abb5e813c9f1e8cd6fc1e393092ef8cb','ucd/net - Available Disk Space'); +INSERT INTO `graph_templates` VALUES (4,'e334bdcf821cd27270a4cc945e80915e','ucd/net - CPU Usage'); +INSERT INTO `graph_templates` VALUES (5,'280e38336d77acde4672879a7db823f3','Karlnet - Wireless Levels'); +INSERT INTO `graph_templates` VALUES (6,'3109d88e6806d2ce50c025541b542499','Karlnet - Wireless Transmissions'); +INSERT INTO `graph_templates` VALUES (7,'cf96dfb22b58e08bf101ca825377fa4b','Unix - Ping Latency'); +INSERT INTO `graph_templates` VALUES (8,'9fe8b4da353689d376b99b2ea526cc6b','Unix - Processes'); +INSERT INTO `graph_templates` VALUES (9,'fe5edd777a76d48fc48c11aded5211ef','Unix - Load Average'); +INSERT INTO `graph_templates` VALUES (10,'63610139d44d52b195cc375636653ebd','Unix - Logged in Users'); +INSERT INTO `graph_templates` VALUES (11,'5107ec0206562e77d965ce6b852ef9d4','ucd/net - Load Average'); +INSERT INTO `graph_templates` VALUES (12,'6992ed4df4b44f3d5595386b8298f0ec','Linux - Memory Usage'); +INSERT INTO `graph_templates` VALUES (13,'be275639d5680e94c72c0ebb4e19056d','ucd/net - Memory Usage'); +INSERT INTO `graph_templates` VALUES (14,'f17e4a77b8496725dc924b8c35b60036','Netware - File System Cache'); +INSERT INTO `graph_templates` VALUES (15,'46bb77f4c0c69671980e3c60d3f22fa9','Netware - CPU Utilization'); +INSERT INTO `graph_templates` VALUES (16,'8e77a3036312fd0fda32eaea2b5f141b','Netware - File System Activity'); +INSERT INTO `graph_templates` VALUES (17,'5892c822b1bb2d38589b6c27934b9936','Netware - Logged In Users'); +INSERT INTO `graph_templates` VALUES (18,'9a5e6d7781cc1bd6cf24f64dd6ffb423','Cisco - CPU Usage'); +INSERT INTO `graph_templates` VALUES (19,'0dd0438d5e6cad6776f79ecaa96fb708','Netware - Volume Information'); +INSERT INTO `graph_templates` VALUES (20,'b18a3742ebea48c6198412b392d757fc','Netware - Directory Information'); +INSERT INTO `graph_templates` VALUES (21,'8e7c8a511652fe4a8e65c69f3d34779d','Unix - Available Disk Space'); +INSERT INTO `graph_templates` VALUES (22,'06621cd4a9289417cadcb8f9b5cfba80','Interface - Errors/Discards'); +INSERT INTO `graph_templates` VALUES (23,'e0d1625a1f4776a5294583659d5cee15','Interface - Unicast Packets'); +INSERT INTO `graph_templates` VALUES (24,'10ca5530554da7b73dc69d291bf55d38','Interface - Non-Unicast Packets'); +INSERT INTO `graph_templates` VALUES (25,'df244b337547b434b486662c3c5c7472','Interface - Traffic (bytes/sec)'); +INSERT INTO `graph_templates` VALUES (26,'7489e44466abee8a7d8636cb2cb14a1a','Host MIB - Available Disk Space'); +INSERT INTO `graph_templates` VALUES (27,'c6bb62bedec4ab97f9db9fd780bd85a6','Host MIB - CPU Utilization'); +INSERT INTO `graph_templates` VALUES (28,'e8462bbe094e4e9e814d4e681671ea82','Host MIB - Logged in Users'); +INSERT INTO `graph_templates` VALUES (29,'62205afbd4066e5c4700338841e3901e','Host MIB - Processes'); +INSERT INTO `graph_templates` VALUES (30,'e3780a13b0f7a3f85a44b70cd4d2fd36','Netware - Open Files'); +INSERT INTO `graph_templates` VALUES (31,'1742b2066384637022d178cc5072905a','Interface - Traffic (bits/sec, 95th Percentile)'); +INSERT INTO `graph_templates` VALUES (32,'13b47e10b2d5db45707d61851f69c52b','Interface - Traffic (bits/sec, Total Bandwidth)'); +INSERT INTO `graph_templates` VALUES (33,'8ad6790c22b693680e041f21d62537ac','Interface - Traffic (bytes/sec, Total Bandwidth)'); + +-- +-- Table structure for table `graph_templates_gprint` +-- + +CREATE TABLE `graph_templates_gprint` ( + `id` mediumint(8) unsigned NOT NULL auto_increment, + `hash` varchar(32) NOT NULL default '', + `name` varchar(100) NOT NULL default '', + `gprint_text` varchar(255) default NULL, + PRIMARY KEY (`id`), + UNIQUE KEY `id` (`id`), + KEY `id_2` (`id`) +) TYPE=MyISAM; + +-- +-- Dumping data for table `graph_templates_gprint` +-- + +INSERT INTO `graph_templates_gprint` VALUES (2,'e9c43831e54eca8069317a2ce8c6f751','Normal','%8.2lf %s'); +INSERT INTO `graph_templates_gprint` VALUES (3,'19414480d6897c8731c7dc6c5310653e','Exact Numbers','%8.0lf'); +INSERT INTO `graph_templates_gprint` VALUES (4,'304a778405392f878a6db435afffc1e9','Load Average','%8.2lf'); + +-- +-- Table structure for table `graph_templates_graph` +-- + +CREATE TABLE `graph_templates_graph` ( + `id` mediumint(8) unsigned NOT NULL auto_increment, + `local_graph_template_graph_id` mediumint(8) unsigned NOT NULL default '0', + `local_graph_id` mediumint(8) unsigned NOT NULL default '0', + `graph_template_id` mediumint(8) unsigned NOT NULL default '0', + `t_image_format_id` char(2) default '0', + `image_format_id` tinyint(1) NOT NULL default '0', + `t_title` char(2) default '0', + `title` varchar(255) NOT NULL default '', + `title_cache` varchar(255) NOT NULL default '', + `t_height` char(2) default '0', + `height` mediumint(8) NOT NULL default '0', + `t_width` char(2) default '0', + `width` mediumint(8) NOT NULL default '0', + `t_upper_limit` char(2) default '0', + `upper_limit` bigint(12) NOT NULL default '0', + `t_lower_limit` char(2) default '0', + `lower_limit` bigint(12) NOT NULL default '0', + `t_vertical_label` char(2) default '0', + `vertical_label` varchar(200) default NULL, + `t_auto_scale` char(2) default '0', + `auto_scale` char(2) default NULL, + `t_auto_scale_opts` char(2) default '0', + `auto_scale_opts` tinyint(1) NOT NULL default '0', + `t_auto_scale_log` char(2) default '0', + `auto_scale_log` char(2) default NULL, + `t_auto_scale_rigid` char(2) default '0', + `auto_scale_rigid` char(2) default NULL, + `t_auto_padding` char(2) default '0', + `auto_padding` char(2) default NULL, + `t_base_value` char(2) default '0', + `base_value` mediumint(8) NOT NULL default '0', + `t_grouping` char(2) default '0', + `grouping` char(2) NOT NULL default '', + `t_export` char(2) default '0', + `export` char(2) default NULL, + `t_unit_value` char(2) default '0', + `unit_value` varchar(20) default NULL, + `t_unit_exponent_value` char(2) default '0', + `unit_exponent_value` varchar(5) NOT NULL default '', + PRIMARY KEY (`id`), + UNIQUE KEY `id` (`id`), + KEY `local_graph_id` (`local_graph_id`), + KEY `id_2` (`id`), + KEY `graph_template_id` (`graph_template_id`) +) TYPE=MyISAM COMMENT='Stores the actual graph data.'; + +-- +-- Dumping data for table `graph_templates_graph` +-- + +INSERT INTO `graph_templates_graph` VALUES (2,0,0,2,'',1,'on','|host_description| - Traffic','','',120,'',500,'',100,'',0,'','bits per second','','on','',2,'','','','on','','on','',1000,'0','','','on','','','',''); +INSERT INTO `graph_templates_graph` VALUES (3,0,0,3,'',1,'on','|host_description| - Hard Drive Space','','',120,'',500,'',100,'',0,'','bytes','','on','',2,'','','','on','','on','',1024,'0','','','on','','','',''); +INSERT INTO `graph_templates_graph` VALUES (4,0,0,4,'',1,'','|host_description| - CPU Usage','','',120,'',500,'',100,'',0,'','percent','','on','',2,'','','','on','','on','',1000,'0','','','on','','','',''); +INSERT INTO `graph_templates_graph` VALUES (5,0,0,5,'',1,'on','|host_description| - Wireless Levels','','',120,'',500,'',100,'',0,'','percent','','','',2,'','','','on','','on','',1000,'0','','','on','','','',''); +INSERT INTO `graph_templates_graph` VALUES (6,0,0,6,'',1,'on','|host_description| - Wireless Transmissions','','',120,'',500,'',100,'',0,'','transmissions','','on','',2,'','','','on','','on','',1000,'0','','','on','','','',''); +INSERT INTO `graph_templates_graph` VALUES (7,0,0,7,'',1,'','|host_description| - Ping Latency','','',120,'',500,'',100,'',0,'','milliseconds','','on','',2,'','','','','','on','',1000,'0','','','on','','','',''); +INSERT INTO `graph_templates_graph` VALUES (8,0,0,8,'',1,'','|host_description| - Processes','','',120,'',500,'',100,'',0,'','processes','','on','',2,'','','','','','on','',1000,'0','','','on','','','',''); +INSERT INTO `graph_templates_graph` VALUES (9,0,0,9,'',1,'','|host_description| - Load Average','','',120,'',500,'',100,'',0,'','processes in the run queue','','on','',2,'','','','on','','on','',1000,'0','','','on','','','','0'); +INSERT INTO `graph_templates_graph` VALUES (10,0,0,10,'',1,'','|host_description| - Logged in Users','','',120,'',500,'',100,'',0,'','users','','on','',2,'','','','on','','on','',1000,'0','','','on','','','',''); +INSERT INTO `graph_templates_graph` VALUES (11,0,0,11,'',1,'','|host_description| - Load Average','','',120,'',500,'',100,'',0,'','processes in the run queue','','on','',2,'','','','on','','on','',1000,'0','','','on','','','','0'); +INSERT INTO `graph_templates_graph` VALUES (12,0,0,12,'',1,'','|host_description| - Memory Usage','','',120,'',500,'',100,'',0,'','kilobytes','','on','',2,'','','','on','','on','',1000,'0','','','on','','','',''); +INSERT INTO `graph_templates_graph` VALUES (13,0,0,13,'',1,'','|host_description| - Memory Usage','','',120,'',500,'',100,'',0,'','bytes','','on','',2,'','','','on','','on','',1000,'0','','','on','','','',''); +INSERT INTO `graph_templates_graph` VALUES (14,0,0,14,'',1,'','|host_description| - File System Cache','','',120,'',500,'',100,'',0,'','cache checks/hits','','on','',2,'','','','on','','on','',1000,'0','','','on','','','',''); +INSERT INTO `graph_templates_graph` VALUES (15,0,0,15,'',1,'','|host_description| - CPU Utilization','','',120,'',500,'',100,'',0,'','percent','','on','',2,'','','','on','','on','',1000,'0','','','on','','','',''); +INSERT INTO `graph_templates_graph` VALUES (16,0,0,16,'',1,'','|host_description| - File System Activity','','',120,'',500,'',100,'',0,'','reads/writes per sec','','on','',2,'','','','on','','on','',1000,'0','','','on','','','',''); +INSERT INTO `graph_templates_graph` VALUES (17,0,0,17,'',1,'','|host_description| - Logged In Users','','',120,'',500,'',100,'',0,'','users','','on','',2,'','','','on','','on','',1000,'0','','','on','','','',''); +INSERT INTO `graph_templates_graph` VALUES (18,0,0,18,'',1,'','|host_description| - CPU Usage','','',120,'',500,'',100,'',0,'','percent','','on','',2,'','','','on','','on','',1000,'0','','','on','','','',''); +INSERT INTO `graph_templates_graph` VALUES (19,0,0,19,'',1,'on','|host_description| - Volume Information','','',120,'',500,'',100,'',0,'','bytes','','on','',2,'','','','on','','on','',1000,'0','','','on','','','',''); +INSERT INTO `graph_templates_graph` VALUES (20,0,0,20,'',1,'','|host_description| - Directory Information','','',120,'',500,'',100,'',0,'','directory entries','','on','',2,'','','','on','','on','',1000,'0','','','on','','','',''); +INSERT INTO `graph_templates_graph` VALUES (21,0,0,21,'',1,'on','|host_description| - Available Disk Space','','',120,'',500,'',100,'',0,'','bytes','','on','',2,'','','','on','','on','',1024,'0','','','on','','','',''); +INSERT INTO `graph_templates_graph` VALUES (22,0,0,22,'',1,'on','|host_description| - Errors/Discards','','',120,'',500,'',100,'',0,'','errors/sec','','on','',2,'','','','on','','on','',1000,'0','','','on','','','',''); +INSERT INTO `graph_templates_graph` VALUES (23,0,0,23,'',1,'on','|host_description| - Unicast Packets','','',120,'',500,'',100,'',0,'','packets/sec','','on','',2,'','','','on','','on','',1000,'0','','','on','','','',''); +INSERT INTO `graph_templates_graph` VALUES (24,0,0,24,'',1,'on','|host_description| - Non-Unicast Packets','','',120,'',500,'',100,'',0,'','packets/sec','','on','',2,'','','','on','','on','',1000,'0','','','on','','','',''); +INSERT INTO `graph_templates_graph` VALUES (25,0,0,25,'',1,'on','|host_description| - Traffic','','',120,'',500,'',100,'',0,'','bytes per second','','on','',2,'','','','on','','on','',1000,'0','','','on','','','',''); +INSERT INTO `graph_templates_graph` VALUES (34,0,0,26,'',1,'on','|host_description| - Available Disk Space','','',120,'',500,'',100,'',0,'','bytes','','on','',2,'','','','on','','on','',1024,'0','','','on','','','',''); +INSERT INTO `graph_templates_graph` VALUES (35,0,0,27,'',1,'on','|host_description| - CPU Utilization','','',120,'',500,'',100,'',0,'','percent','','on','',2,'','','','on','','on','',1000,'0','','','on','','','',''); +INSERT INTO `graph_templates_graph` VALUES (36,0,0,28,'',1,'','|host_description| - Logged in Users','','',120,'',500,'',100,'',0,'','users','','on','',2,'','','','on','','on','',1000,'0','','','on','','','',''); +INSERT INTO `graph_templates_graph` VALUES (37,0,0,29,'',1,'','|host_description| - Processes','','',120,'',500,'',100,'',0,'','processes','','on','',2,'','','','','','on','',1000,'0','','','on','','','',''); +INSERT INTO `graph_templates_graph` VALUES (38,12,1,12,'0',1,'0','|host_description| - Memory Usage','Localhost - Memory Usage','0',120,'0',500,'0',100,'0',0,'0','kilobytes','0','on','0',2,'0','','0','on','0','on','0',1000,'0','','0','on','0','','0',''); +INSERT INTO `graph_templates_graph` VALUES (39,9,2,9,'0',1,'0','|host_description| - Load Average','Localhost - Load Average','0',120,'0',500,'0',100,'0',0,'0','processes in the run queue','0','on','0',2,'0','','0','on','0','on','0',1000,'0','','0','on','0','','0','0'); +INSERT INTO `graph_templates_graph` VALUES (40,10,3,10,'0',1,'0','|host_description| - Logged in Users','Localhost - Logged in Users','0',120,'0',500,'0',100,'0',0,'0','users','0','on','0',2,'0','','0','on','0','on','0',1000,'0','','0','on','0','','0',''); +INSERT INTO `graph_templates_graph` VALUES (41,8,4,8,'0',1,'0','|host_description| - Processes','Localhost - Processes','0',120,'0',500,'0',100,'0',0,'0','processes','0','on','0',2,'0','','0','','0','on','0',1000,'0','','0','on','0','','0',''); +INSERT INTO `graph_templates_graph` VALUES (42,0,0,30,'',1,'','|host_description| - Open Files','','',120,'',500,'',100,'',0,'','files','','on','',2,'','','','','','on','',1000,'0','','','on','','','',''); +INSERT INTO `graph_templates_graph` VALUES (43,0,0,31,'',1,'on','|host_description| - Traffic','','',120,'',500,'',100,'',0,'','bits per second','','on','',2,'','','','on','','on','',1000,'0','','','on','','','',''); +INSERT INTO `graph_templates_graph` VALUES (44,0,0,32,'',1,'on','|host_description| - Traffic','','',120,'',500,'',100,'',0,'','bits per second','','on','',2,'','','','on','','on','',1000,'0','','','on','','','',''); +INSERT INTO `graph_templates_graph` VALUES (45,0,0,33,'',1,'on','|host_description| - Traffic','','',120,'',500,'',100,'',0,'','bytes per second','','on','',2,'','','','on','','on','',1000,'0','','','on','','','',''); +INSERT INTO `graph_templates_graph` VALUES (47,0,0,34,'',1,'on','|host_description| -','','',120,'',500,'',100,'',0,'on','','','on','',2,'','','','','','on','',1000,'0','','','on','','','',''); +INSERT INTO `graph_templates_graph` VALUES (48,18,5,18,'0',1,'0','|host_description| - CPU Usage','172.16.42.100 - CPU Usage','0',120,'0',500,'0',100,'0',0,'0','percent','0','on','0',2,'0','','0','on','0','on','0',1000,'0','','0','on','0','','0',''); +INSERT INTO `graph_templates_graph` VALUES (49,2,6,2,'0',1,'0','|host_description| - Traffic - |query_ifName|','172.16.42.100 - Traffic - Fa0/1','0',120,'0',500,'0',100,'0',0,'0','bits per second','0','on','0',2,'0','','0','on','0','on','0',1000,'0','','0','on','0','','0',''); +INSERT INTO `graph_templates_graph` VALUES (50,2,7,2,'0',1,'0','|host_description| - Traffic - |query_ifName|','172.16.42.100 - Traffic - Fa0/2','0',120,'0',500,'0',100,'0',0,'0','bits per second','0','on','0',2,'0','','0','on','0','on','0',1000,'0','','0','on','0','','0',''); +INSERT INTO `graph_templates_graph` VALUES (51,2,8,2,'0',1,'0','|host_description| - Traffic - |query_ifName|','172.16.42.100 - Traffic - Fa0/3','0',120,'0',500,'0',100,'0',0,'0','bits per second','0','on','0',2,'0','','0','on','0','on','0',1000,'0','','0','on','0','','0',''); +INSERT INTO `graph_templates_graph` VALUES (52,2,9,2,'0',1,'0','|host_description| - Traffic - |query_ifName|','172.16.42.100 - Traffic - Fa0/4','0',120,'0',500,'0',100,'0',0,'0','bits per second','0','on','0',2,'0','','0','on','0','on','0',1000,'0','','0','on','0','','0',''); +INSERT INTO `graph_templates_graph` VALUES (53,2,10,2,'0',1,'0','|host_description| - Traffic - |query_ifName|','172.16.42.100 - Traffic - Fa0/5','0',120,'0',500,'0',100,'0',0,'0','bits per second','0','on','0',2,'0','','0','on','0','on','0',1000,'0','','0','on','0','','0',''); +INSERT INTO `graph_templates_graph` VALUES (54,2,11,2,'0',1,'0','|host_description| - Traffic - |query_ifName|','172.16.42.100 - Traffic - Fa0/6','0',120,'0',500,'0',100,'0',0,'0','bits per second','0','on','0',2,'0','','0','on','0','on','0',1000,'0','','0','on','0','','0',''); +INSERT INTO `graph_templates_graph` VALUES (55,2,12,2,'0',1,'0','|host_description| - Traffic - |query_ifName|','172.16.42.100 - Traffic - Fa0/7','0',120,'0',500,'0',100,'0',0,'0','bits per second','0','on','0',2,'0','','0','on','0','on','0',1000,'0','','0','on','0','','0',''); +INSERT INTO `graph_templates_graph` VALUES (56,2,13,2,'0',1,'0','|host_description| - Traffic - |query_ifName|','172.16.42.100 - Traffic - Fa0/8','0',120,'0',500,'0',100,'0',0,'0','bits per second','0','on','0',2,'0','','0','on','0','on','0',1000,'0','','0','on','0','','0',''); +INSERT INTO `graph_templates_graph` VALUES (57,2,14,2,'0',1,'0','|host_description| - Traffic - |query_ifName|','172.16.42.100 - Traffic - Fa0/9','0',120,'0',500,'0',100,'0',0,'0','bits per second','0','on','0',2,'0','','0','on','0','on','0',1000,'0','','0','on','0','','0',''); +INSERT INTO `graph_templates_graph` VALUES (58,2,15,2,'0',1,'0','|host_description| - Traffic - |query_ifName|','172.16.42.100 - Traffic - Fa0/10','0',120,'0',500,'0',100,'0',0,'0','bits per second','0','on','0',2,'0','','0','on','0','on','0',1000,'0','','0','on','0','','0',''); +INSERT INTO `graph_templates_graph` VALUES (59,2,16,2,'0',1,'0','|host_description| - Traffic - |query_ifName|','172.16.42.100 - Traffic - Fa0/11','0',120,'0',500,'0',100,'0',0,'0','bits per second','0','on','0',2,'0','','0','on','0','on','0',1000,'0','','0','on','0','','0',''); +INSERT INTO `graph_templates_graph` VALUES (60,2,17,2,'0',1,'0','|host_description| - Traffic - |query_ifName|','172.16.42.100 - Traffic - Fa0/12','0',120,'0',500,'0',100,'0',0,'0','bits per second','0','on','0',2,'0','','0','on','0','on','0',1000,'0','','0','on','0','','0',''); +INSERT INTO `graph_templates_graph` VALUES (61,2,18,2,'0',1,'0','|host_description| - Traffic - |query_ifName|','172.16.42.100 - Traffic - Fa0/13','0',120,'0',500,'0',100,'0',0,'0','bits per second','0','on','0',2,'0','','0','on','0','on','0',1000,'0','','0','on','0','','0',''); +INSERT INTO `graph_templates_graph` VALUES (62,2,19,2,'0',1,'0','|host_description| - Traffic - |query_ifName|','172.16.42.100 - Traffic - Fa0/14','0',120,'0',500,'0',100,'0',0,'0','bits per second','0','on','0',2,'0','','0','on','0','on','0',1000,'0','','0','on','0','','0',''); +INSERT INTO `graph_templates_graph` VALUES (63,2,20,2,'0',1,'0','|host_description| - Traffic - |query_ifName|','172.16.42.100 - Traffic - Fa0/15','0',120,'0',500,'0',100,'0',0,'0','bits per second','0','on','0',2,'0','','0','on','0','on','0',1000,'0','','0','on','0','','0',''); +INSERT INTO `graph_templates_graph` VALUES (64,2,21,2,'0',1,'0','|host_description| - Traffic - |query_ifName|','172.16.42.100 - Traffic - Fa0/16','0',120,'0',500,'0',100,'0',0,'0','bits per second','0','on','0',2,'0','','0','on','0','on','0',1000,'0','','0','on','0','','0',''); +INSERT INTO `graph_templates_graph` VALUES (65,2,22,2,'0',1,'0','|host_description| - Traffic - |query_ifName|','172.16.42.100 - Traffic - Fa0/17','0',120,'0',500,'0',100,'0',0,'0','bits per second','0','on','0',2,'0','','0','on','0','on','0',1000,'0','','0','on','0','','0',''); +INSERT INTO `graph_templates_graph` VALUES (66,2,23,2,'0',1,'0','|host_description| - Traffic - |query_ifName|','172.16.42.100 - Traffic - Fa0/18','0',120,'0',500,'0',100,'0',0,'0','bits per second','0','on','0',2,'0','','0','on','0','on','0',1000,'0','','0','on','0','','0',''); +INSERT INTO `graph_templates_graph` VALUES (67,2,24,2,'0',1,'0','|host_description| - Traffic - |query_ifName|','172.16.42.100 - Traffic - Fa0/19','0',120,'0',500,'0',100,'0',0,'0','bits per second','0','on','0',2,'0','','0','on','0','on','0',1000,'0','','0','on','0','','0',''); +INSERT INTO `graph_templates_graph` VALUES (68,2,25,2,'0',1,'0','|host_description| - Traffic - |query_ifName|','172.16.42.100 - Traffic - Fa0/20','0',120,'0',500,'0',100,'0',0,'0','bits per second','0','on','0',2,'0','','0','on','0','on','0',1000,'0','','0','on','0','','0',''); +INSERT INTO `graph_templates_graph` VALUES (69,2,26,2,'0',1,'0','|host_description| - Traffic - |query_ifName|','172.16.42.100 - Traffic - Fa0/21','0',120,'0',500,'0',100,'0',0,'0','bits per second','0','on','0',2,'0','','0','on','0','on','0',1000,'0','','0','on','0','','0',''); +INSERT INTO `graph_templates_graph` VALUES (70,2,27,2,'0',1,'0','|host_description| - Traffic - |query_ifName|','172.16.42.100 - Traffic - Fa0/22','0',120,'0',500,'0',100,'0',0,'0','bits per second','0','on','0',2,'0','','0','on','0','on','0',1000,'0','','0','on','0','','0',''); +INSERT INTO `graph_templates_graph` VALUES (71,2,28,2,'0',1,'0','|host_description| - Traffic - |query_ifName|','172.16.42.100 - Traffic - Fa0/23','0',120,'0',500,'0',100,'0',0,'0','bits per second','0','on','0',2,'0','','0','on','0','on','0',1000,'0','','0','on','0','','0',''); +INSERT INTO `graph_templates_graph` VALUES (72,2,29,2,'0',1,'0','|host_description| - Traffic - |query_ifName|','172.16.42.100 - Traffic - Fa0/24','0',120,'0',500,'0',100,'0',0,'0','bits per second','0','on','0',2,'0','','0','on','0','on','0',1000,'0','','0','on','0','','0',''); +INSERT INTO `graph_templates_graph` VALUES (73,2,30,2,'0',1,'0','|host_description| - Traffic - |query_ifName|','172.16.42.100 - Traffic - Gi0/1','0',120,'0',500,'0',100,'0',0,'0','bits per second','0','on','0',2,'0','','0','on','0','on','0',1000,'0','','0','on','0','','0',''); +INSERT INTO `graph_templates_graph` VALUES (74,2,31,2,'0',1,'0','|host_description| - Traffic - |query_ifName|','172.16.42.100 - Traffic - Gi0/2','0',120,'0',500,'0',100,'0',0,'0','bits per second','0','on','0',2,'0','','0','on','0','on','0',1000,'0','','0','on','0','','0',''); +INSERT INTO `graph_templates_graph` VALUES (75,2,32,2,'0',1,'0','|host_description| - Traffic - |query_ifName|','172.16.42.100 - Traffic - Nu0','0',120,'0',500,'0',100,'0',0,'0','bits per second','0','on','0',2,'0','','0','on','0','on','0',1000,'0','','0','on','0','','0',''); +INSERT INTO `graph_templates_graph` VALUES (76,2,33,2,'0',1,'0','|host_description| - Traffic - |query_ifName|','172.16.42.100 - Traffic - Vl1','0',120,'0',500,'0',100,'0',0,'0','bits per second','0','on','0',2,'0','','0','on','0','on','0',1000,'0','','0','on','0','','0',''); +INSERT INTO `graph_templates_graph` VALUES (77,2,34,2,'0',1,'0','|host_description| - Traffic - |query_ifName|','172.16.42.100 - Traffic - Vl42','0',120,'0',500,'0',100,'0',0,'0','bits per second','0','on','0',2,'0','','0','on','0','on','0',1000,'0','','0','on','0','','0',''); +INSERT INTO `graph_templates_graph` VALUES (78,18,35,18,'0',1,'0','|host_description| - CPU Usage','172.16.42.101 - CPU Usage','0',120,'0',500,'0',100,'0',0,'0','percent','0','on','0',2,'0','','0','on','0','on','0',1000,'0','','0','on','0','','0',''); +INSERT INTO `graph_templates_graph` VALUES (79,2,36,2,'0',1,'0','|host_description| - Traffic - |query_ifName|','172.16.42.101 - Traffic - Fa0/1','0',120,'0',500,'0',100,'0',0,'0','bits per second','0','on','0',2,'0','','0','on','0','on','0',1000,'0','','0','on','0','','0',''); +INSERT INTO `graph_templates_graph` VALUES (80,2,37,2,'0',1,'0','|host_description| - Traffic - |query_ifName|','172.16.42.101 - Traffic - Fa0/2','0',120,'0',500,'0',100,'0',0,'0','bits per second','0','on','0',2,'0','','0','on','0','on','0',1000,'0','','0','on','0','','0',''); +INSERT INTO `graph_templates_graph` VALUES (81,2,38,2,'0',1,'0','|host_description| - Traffic - |query_ifName|','172.16.42.101 - Traffic - Fa0/3','0',120,'0',500,'0',100,'0',0,'0','bits per second','0','on','0',2,'0','','0','on','0','on','0',1000,'0','','0','on','0','','0',''); +INSERT INTO `graph_templates_graph` VALUES (82,2,39,2,'0',1,'0','|host_description| - Traffic - |query_ifName|','172.16.42.101 - Traffic - Fa0/4','0',120,'0',500,'0',100,'0',0,'0','bits per second','0','on','0',2,'0','','0','on','0','on','0',1000,'0','','0','on','0','','0',''); +INSERT INTO `graph_templates_graph` VALUES (83,2,40,2,'0',1,'0','|host_description| - Traffic - |query_ifName|','172.16.42.101 - Traffic - Fa0/5','0',120,'0',500,'0',100,'0',0,'0','bits per second','0','on','0',2,'0','','0','on','0','on','0',1000,'0','','0','on','0','','0',''); +INSERT INTO `graph_templates_graph` VALUES (84,2,41,2,'0',1,'0','|host_description| - Traffic - |query_ifName|','172.16.42.101 - Traffic - Fa0/6','0',120,'0',500,'0',100,'0',0,'0','bits per second','0','on','0',2,'0','','0','on','0','on','0',1000,'0','','0','on','0','','0',''); +INSERT INTO `graph_templates_graph` VALUES (85,2,42,2,'0',1,'0','|host_description| - Traffic - |query_ifName|','172.16.42.101 - Traffic - Fa0/7','0',120,'0',500,'0',100,'0',0,'0','bits per second','0','on','0',2,'0','','0','on','0','on','0',1000,'0','','0','on','0','','0',''); +INSERT INTO `graph_templates_graph` VALUES (86,2,43,2,'0',1,'0','|host_description| - Traffic - |query_ifName|','172.16.42.101 - Traffic - Fa0/8','0',120,'0',500,'0',100,'0',0,'0','bits per second','0','on','0',2,'0','','0','on','0','on','0',1000,'0','','0','on','0','','0',''); +INSERT INTO `graph_templates_graph` VALUES (87,2,44,2,'0',1,'0','|host_description| - Traffic - |query_ifName|','172.16.42.101 - Traffic - Fa0/9','0',120,'0',500,'0',100,'0',0,'0','bits per second','0','on','0',2,'0','','0','on','0','on','0',1000,'0','','0','on','0','','0',''); +INSERT INTO `graph_templates_graph` VALUES (88,2,45,2,'0',1,'0','|host_description| - Traffic - |query_ifName|','172.16.42.101 - Traffic - Fa0/10','0',120,'0',500,'0',100,'0',0,'0','bits per second','0','on','0',2,'0','','0','on','0','on','0',1000,'0','','0','on','0','','0',''); +INSERT INTO `graph_templates_graph` VALUES (89,2,46,2,'0',1,'0','|host_description| - Traffic - |query_ifName|','172.16.42.101 - Traffic - Fa0/11','0',120,'0',500,'0',100,'0',0,'0','bits per second','0','on','0',2,'0','','0','on','0','on','0',1000,'0','','0','on','0','','0',''); +INSERT INTO `graph_templates_graph` VALUES (90,2,47,2,'0',1,'0','|host_description| - Traffic - |query_ifName|','172.16.42.101 - Traffic - Fa0/12','0',120,'0',500,'0',100,'0',0,'0','bits per second','0','on','0',2,'0','','0','on','0','on','0',1000,'0','','0','on','0','','0',''); +INSERT INTO `graph_templates_graph` VALUES (91,2,48,2,'0',1,'0','|host_description| - Traffic - |query_ifName|','172.16.42.101 - Traffic - Fa0/13','0',120,'0',500,'0',100,'0',0,'0','bits per second','0','on','0',2,'0','','0','on','0','on','0',1000,'0','','0','on','0','','0',''); +INSERT INTO `graph_templates_graph` VALUES (92,2,49,2,'0',1,'0','|host_description| - Traffic - |query_ifName|','172.16.42.101 - Traffic - Fa0/14','0',120,'0',500,'0',100,'0',0,'0','bits per second','0','on','0',2,'0','','0','on','0','on','0',1000,'0','','0','on','0','','0',''); +INSERT INTO `graph_templates_graph` VALUES (93,2,50,2,'0',1,'0','|host_description| - Traffic - |query_ifName|','172.16.42.101 - Traffic - Fa0/15','0',120,'0',500,'0',100,'0',0,'0','bits per second','0','on','0',2,'0','','0','on','0','on','0',1000,'0','','0','on','0','','0',''); +INSERT INTO `graph_templates_graph` VALUES (94,2,51,2,'0',1,'0','|host_description| - Traffic - |query_ifName|','172.16.42.101 - Traffic - Fa0/16','0',120,'0',500,'0',100,'0',0,'0','bits per second','0','on','0',2,'0','','0','on','0','on','0',1000,'0','','0','on','0','','0',''); +INSERT INTO `graph_templates_graph` VALUES (95,2,52,2,'0',1,'0','|host_description| - Traffic - |query_ifName|','172.16.42.101 - Traffic - Fa0/17','0',120,'0',500,'0',100,'0',0,'0','bits per second','0','on','0',2,'0','','0','on','0','on','0',1000,'0','','0','on','0','','0',''); +INSERT INTO `graph_templates_graph` VALUES (96,2,53,2,'0',1,'0','|host_description| - Traffic - |query_ifName|','172.16.42.101 - Traffic - Fa0/18','0',120,'0',500,'0',100,'0',0,'0','bits per second','0','on','0',2,'0','','0','on','0','on','0',1000,'0','','0','on','0','','0',''); +INSERT INTO `graph_templates_graph` VALUES (97,2,54,2,'0',1,'0','|host_description| - Traffic - |query_ifName|','172.16.42.101 - Traffic - Fa0/19','0',120,'0',500,'0',100,'0',0,'0','bits per second','0','on','0',2,'0','','0','on','0','on','0',1000,'0','','0','on','0','','0',''); +INSERT INTO `graph_templates_graph` VALUES (98,2,55,2,'0',1,'0','|host_description| - Traffic - |query_ifName|','172.16.42.101 - Traffic - Fa0/20','0',120,'0',500,'0',100,'0',0,'0','bits per second','0','on','0',2,'0','','0','on','0','on','0',1000,'0','','0','on','0','','0',''); +INSERT INTO `graph_templates_graph` VALUES (99,2,56,2,'0',1,'0','|host_description| - Traffic - |query_ifName|','172.16.42.101 - Traffic - Fa0/21','0',120,'0',500,'0',100,'0',0,'0','bits per second','0','on','0',2,'0','','0','on','0','on','0',1000,'0','','0','on','0','','0',''); +INSERT INTO `graph_templates_graph` VALUES (100,2,57,2,'0',1,'0','|host_description| - Traffic - |query_ifName|','172.16.42.101 - Traffic - Fa0/22','0',120,'0',500,'0',100,'0',0,'0','bits per second','0','on','0',2,'0','','0','on','0','on','0',1000,'0','','0','on','0','','0',''); +INSERT INTO `graph_templates_graph` VALUES (101,2,58,2,'0',1,'0','|host_description| - Traffic - |query_ifName|','172.16.42.101 - Traffic - Fa0/23','0',120,'0',500,'0',100,'0',0,'0','bits per second','0','on','0',2,'0','','0','on','0','on','0',1000,'0','','0','on','0','','0',''); +INSERT INTO `graph_templates_graph` VALUES (102,2,59,2,'0',1,'0','|host_description| - Traffic - |query_ifName|','172.16.42.101 - Traffic - Fa0/24','0',120,'0',500,'0',100,'0',0,'0','bits per second','0','on','0',2,'0','','0','on','0','on','0',1000,'0','','0','on','0','','0',''); +INSERT INTO `graph_templates_graph` VALUES (103,2,60,2,'0',1,'0','|host_description| - Traffic - |query_ifName|','172.16.42.101 - Traffic - Gi0/1','0',120,'0',500,'0',100,'0',0,'0','bits per second','0','on','0',2,'0','','0','on','0','on','0',1000,'0','','0','on','0','','0',''); +INSERT INTO `graph_templates_graph` VALUES (104,2,61,2,'0',1,'0','|host_description| - Traffic - |query_ifName|','172.16.42.101 - Traffic - Gi0/2','0',120,'0',500,'0',100,'0',0,'0','bits per second','0','on','0',2,'0','','0','on','0','on','0',1000,'0','','0','on','0','','0',''); +INSERT INTO `graph_templates_graph` VALUES (105,2,62,2,'0',1,'0','|host_description| - Traffic - |query_ifName|','172.16.42.101 - Traffic - Nu0','0',120,'0',500,'0',100,'0',0,'0','bits per second','0','on','0',2,'0','','0','on','0','on','0',1000,'0','','0','on','0','','0',''); +INSERT INTO `graph_templates_graph` VALUES (106,2,63,2,'0',1,'0','|host_description| - Traffic - |query_ifName|','172.16.42.101 - Traffic - Vl1','0',120,'0',500,'0',100,'0',0,'0','bits per second','0','on','0',2,'0','','0','on','0','on','0',1000,'0','','0','on','0','','0',''); +INSERT INTO `graph_templates_graph` VALUES (107,2,64,2,'0',1,'0','|host_description| - Traffic - |query_ifName|','172.16.42.101 - Traffic - Vl42','0',120,'0',500,'0',100,'0',0,'0','bits per second','0','on','0',2,'0','','0','on','0','on','0',1000,'0','','0','on','0','','0',''); +INSERT INTO `graph_templates_graph` VALUES (108,18,65,18,'0',1,'0','|host_description| - CPU Usage','172.16.42.102 - CPU Usage','0',120,'0',500,'0',100,'0',0,'0','percent','0','on','0',2,'0','','0','on','0','on','0',1000,'0','','0','on','0','','0',''); +INSERT INTO `graph_templates_graph` VALUES (109,2,66,2,'0',1,'0','|host_description| - Traffic - |query_ifName|','172.16.42.102 - Traffic - Fa0/1','0',120,'0',500,'0',100,'0',0,'0','bits per second','0','on','0',2,'0','','0','on','0','on','0',1000,'0','','0','on','0','','0',''); +INSERT INTO `graph_templates_graph` VALUES (110,2,67,2,'0',1,'0','|host_description| - Traffic - |query_ifName|','172.16.42.102 - Traffic - Fa0/2','0',120,'0',500,'0',100,'0',0,'0','bits per second','0','on','0',2,'0','','0','on','0','on','0',1000,'0','','0','on','0','','0',''); +INSERT INTO `graph_templates_graph` VALUES (111,2,68,2,'0',1,'0','|host_description| - Traffic - |query_ifName|','172.16.42.102 - Traffic - Fa0/3','0',120,'0',500,'0',100,'0',0,'0','bits per second','0','on','0',2,'0','','0','on','0','on','0',1000,'0','','0','on','0','','0',''); +INSERT INTO `graph_templates_graph` VALUES (112,2,69,2,'0',1,'0','|host_description| - Traffic - |query_ifName|','172.16.42.102 - Traffic - Fa0/4','0',120,'0',500,'0',100,'0',0,'0','bits per second','0','on','0',2,'0','','0','on','0','on','0',1000,'0','','0','on','0','','0',''); +INSERT INTO `graph_templates_graph` VALUES (113,2,70,2,'0',1,'0','|host_description| - Traffic - |query_ifName|','172.16.42.102 - Traffic - Fa0/5','0',120,'0',500,'0',100,'0',0,'0','bits per second','0','on','0',2,'0','','0','on','0','on','0',1000,'0','','0','on','0','','0',''); +INSERT INTO `graph_templates_graph` VALUES (114,2,71,2,'0',1,'0','|host_description| - Traffic - |query_ifName|','172.16.42.102 - Traffic - Fa0/6','0',120,'0',500,'0',100,'0',0,'0','bits per second','0','on','0',2,'0','','0','on','0','on','0',1000,'0','','0','on','0','','0',''); +INSERT INTO `graph_templates_graph` VALUES (115,2,72,2,'0',1,'0','|host_description| - Traffic - |query_ifName|','172.16.42.102 - Traffic - Fa0/7','0',120,'0',500,'0',100,'0',0,'0','bits per second','0','on','0',2,'0','','0','on','0','on','0',1000,'0','','0','on','0','','0',''); +INSERT INTO `graph_templates_graph` VALUES (116,2,73,2,'0',1,'0','|host_description| - Traffic - |query_ifName|','172.16.42.102 - Traffic - Fa0/8','0',120,'0',500,'0',100,'0',0,'0','bits per second','0','on','0',2,'0','','0','on','0','on','0',1000,'0','','0','on','0','','0',''); +INSERT INTO `graph_templates_graph` VALUES (117,2,74,2,'0',1,'0','|host_description| - Traffic - |query_ifName|','172.16.42.102 - Traffic - Fa0/9','0',120,'0',500,'0',100,'0',0,'0','bits per second','0','on','0',2,'0','','0','on','0','on','0',1000,'0','','0','on','0','','0',''); +INSERT INTO `graph_templates_graph` VALUES (118,2,75,2,'0',1,'0','|host_description| - Traffic - |query_ifName|','172.16.42.102 - Traffic - Fa0/10','0',120,'0',500,'0',100,'0',0,'0','bits per second','0','on','0',2,'0','','0','on','0','on','0',1000,'0','','0','on','0','','0',''); +INSERT INTO `graph_templates_graph` VALUES (119,2,76,2,'0',1,'0','|host_description| - Traffic - |query_ifName|','172.16.42.102 - Traffic - Fa0/11','0',120,'0',500,'0',100,'0',0,'0','bits per second','0','on','0',2,'0','','0','on','0','on','0',1000,'0','','0','on','0','','0',''); +INSERT INTO `graph_templates_graph` VALUES (120,2,77,2,'0',1,'0','|host_description| - Traffic - |query_ifName|','172.16.42.102 - Traffic - Fa0/12','0',120,'0',500,'0',100,'0',0,'0','bits per second','0','on','0',2,'0','','0','on','0','on','0',1000,'0','','0','on','0','','0',''); +INSERT INTO `graph_templates_graph` VALUES (121,2,78,2,'0',1,'0','|host_description| - Traffic - |query_ifName|','172.16.42.102 - Traffic - Fa0/13','0',120,'0',500,'0',100,'0',0,'0','bits per second','0','on','0',2,'0','','0','on','0','on','0',1000,'0','','0','on','0','','0',''); +INSERT INTO `graph_templates_graph` VALUES (122,2,79,2,'0',1,'0','|host_description| - Traffic - |query_ifName|','172.16.42.102 - Traffic - Fa0/14','0',120,'0',500,'0',100,'0',0,'0','bits per second','0','on','0',2,'0','','0','on','0','on','0',1000,'0','','0','on','0','','0',''); +INSERT INTO `graph_templates_graph` VALUES (123,2,80,2,'0',1,'0','|host_description| - Traffic - |query_ifName|','172.16.42.102 - Traffic - Fa0/15','0',120,'0',500,'0',100,'0',0,'0','bits per second','0','on','0',2,'0','','0','on','0','on','0',1000,'0','','0','on','0','','0',''); +INSERT INTO `graph_templates_graph` VALUES (124,2,81,2,'0',1,'0','|host_description| - Traffic - |query_ifName|','172.16.42.102 - Traffic - Fa0/16','0',120,'0',500,'0',100,'0',0,'0','bits per second','0','on','0',2,'0','','0','on','0','on','0',1000,'0','','0','on','0','','0',''); +INSERT INTO `graph_templates_graph` VALUES (125,2,82,2,'0',1,'0','|host_description| - Traffic - |query_ifName|','172.16.42.102 - Traffic - Fa0/17','0',120,'0',500,'0',100,'0',0,'0','bits per second','0','on','0',2,'0','','0','on','0','on','0',1000,'0','','0','on','0','','0',''); +INSERT INTO `graph_templates_graph` VALUES (126,2,83,2,'0',1,'0','|host_description| - Traffic - |query_ifName|','172.16.42.102 - Traffic - Fa0/18','0',120,'0',500,'0',100,'0',0,'0','bits per second','0','on','0',2,'0','','0','on','0','on','0',1000,'0','','0','on','0','','0',''); +INSERT INTO `graph_templates_graph` VALUES (127,2,84,2,'0',1,'0','|host_description| - Traffic - |query_ifName|','172.16.42.102 - Traffic - Fa0/19','0',120,'0',500,'0',100,'0',0,'0','bits per second','0','on','0',2,'0','','0','on','0','on','0',1000,'0','','0','on','0','','0',''); +INSERT INTO `graph_templates_graph` VALUES (128,2,85,2,'0',1,'0','|host_description| - Traffic - |query_ifName|','172.16.42.102 - Traffic - Fa0/20','0',120,'0',500,'0',100,'0',0,'0','bits per second','0','on','0',2,'0','','0','on','0','on','0',1000,'0','','0','on','0','','0',''); +INSERT INTO `graph_templates_graph` VALUES (129,2,86,2,'0',1,'0','|host_description| - Traffic - |query_ifName|','172.16.42.102 - Traffic - Fa0/21','0',120,'0',500,'0',100,'0',0,'0','bits per second','0','on','0',2,'0','','0','on','0','on','0',1000,'0','','0','on','0','','0',''); +INSERT INTO `graph_templates_graph` VALUES (130,2,87,2,'0',1,'0','|host_description| - Traffic - |query_ifName|','172.16.42.102 - Traffic - Fa0/22','0',120,'0',500,'0',100,'0',0,'0','bits per second','0','on','0',2,'0','','0','on','0','on','0',1000,'0','','0','on','0','','0',''); +INSERT INTO `graph_templates_graph` VALUES (131,2,88,2,'0',1,'0','|host_description| - Traffic - |query_ifName|','172.16.42.102 - Traffic - Fa0/23','0',120,'0',500,'0',100,'0',0,'0','bits per second','0','on','0',2,'0','','0','on','0','on','0',1000,'0','','0','on','0','','0',''); +INSERT INTO `graph_templates_graph` VALUES (132,2,89,2,'0',1,'0','|host_description| - Traffic - |query_ifName|','172.16.42.102 - Traffic - Fa0/24','0',120,'0',500,'0',100,'0',0,'0','bits per second','0','on','0',2,'0','','0','on','0','on','0',1000,'0','','0','on','0','','0',''); +INSERT INTO `graph_templates_graph` VALUES (133,2,90,2,'0',1,'0','|host_description| - Traffic - |query_ifName|','172.16.42.102 - Traffic - Gi0/1','0',120,'0',500,'0',100,'0',0,'0','bits per second','0','on','0',2,'0','','0','on','0','on','0',1000,'0','','0','on','0','','0',''); +INSERT INTO `graph_templates_graph` VALUES (134,2,91,2,'0',1,'0','|host_description| - Traffic - |query_ifName|','172.16.42.102 - Traffic - Gi0/2','0',120,'0',500,'0',100,'0',0,'0','bits per second','0','on','0',2,'0','','0','on','0','on','0',1000,'0','','0','on','0','','0',''); +INSERT INTO `graph_templates_graph` VALUES (135,2,92,2,'0',1,'0','|host_description| - Traffic - |query_ifName|','172.16.42.102 - Traffic - Nu0','0',120,'0',500,'0',100,'0',0,'0','bits per second','0','on','0',2,'0','','0','on','0','on','0',1000,'0','','0','on','0','','0',''); +INSERT INTO `graph_templates_graph` VALUES (136,2,93,2,'0',1,'0','|host_description| - Traffic - |query_ifName|','172.16.42.102 - Traffic - Vl1','0',120,'0',500,'0',100,'0',0,'0','bits per second','0','on','0',2,'0','','0','on','0','on','0',1000,'0','','0','on','0','','0',''); +INSERT INTO `graph_templates_graph` VALUES (137,2,94,2,'0',1,'0','|host_description| - Traffic - |query_ifName|','172.16.42.102 - Traffic - Vl42','0',120,'0',500,'0',100,'0',0,'0','bits per second','0','on','0',2,'0','','0','on','0','on','0',1000,'0','','0','on','0','','0',''); +INSERT INTO `graph_templates_graph` VALUES (138,18,95,18,'0',1,'0','|host_description| - CPU Usage','172.16.42.103 - CPU Usage','0',120,'0',500,'0',100,'0',0,'0','percent','0','on','0',2,'0','','0','on','0','on','0',1000,'0','','0','on','0','','0',''); +INSERT INTO `graph_templates_graph` VALUES (139,2,96,2,'0',1,'0','|host_description| - Traffic - |query_ifName|','172.16.42.103 - Traffic - Fa0/1','0',120,'0',500,'0',100,'0',0,'0','bits per second','0','on','0',2,'0','','0','on','0','on','0',1000,'0','','0','on','0','','0',''); +INSERT INTO `graph_templates_graph` VALUES (140,2,97,2,'0',1,'0','|host_description| - Traffic - |query_ifName|','172.16.42.103 - Traffic - Fa0/2','0',120,'0',500,'0',100,'0',0,'0','bits per second','0','on','0',2,'0','','0','on','0','on','0',1000,'0','','0','on','0','','0',''); +INSERT INTO `graph_templates_graph` VALUES (141,2,98,2,'0',1,'0','|host_description| - Traffic - |query_ifName|','172.16.42.103 - Traffic - Fa0/3','0',120,'0',500,'0',100,'0',0,'0','bits per second','0','on','0',2,'0','','0','on','0','on','0',1000,'0','','0','on','0','','0',''); +INSERT INTO `graph_templates_graph` VALUES (142,2,99,2,'0',1,'0','|host_description| - Traffic - |query_ifName|','172.16.42.103 - Traffic - Fa0/4','0',120,'0',500,'0',100,'0',0,'0','bits per second','0','on','0',2,'0','','0','on','0','on','0',1000,'0','','0','on','0','','0',''); +INSERT INTO `graph_templates_graph` VALUES (143,2,100,2,'0',1,'0','|host_description| - Traffic - |query_ifName|','172.16.42.103 - Traffic - Fa0/5','0',120,'0',500,'0',100,'0',0,'0','bits per second','0','on','0',2,'0','','0','on','0','on','0',1000,'0','','0','on','0','','0',''); +INSERT INTO `graph_templates_graph` VALUES (144,2,101,2,'0',1,'0','|host_description| - Traffic - |query_ifName|','172.16.42.103 - Traffic - Fa0/6','0',120,'0',500,'0',100,'0',0,'0','bits per second','0','on','0',2,'0','','0','on','0','on','0',1000,'0','','0','on','0','','0',''); +INSERT INTO `graph_templates_graph` VALUES (145,2,102,2,'0',1,'0','|host_description| - Traffic - |query_ifName|','172.16.42.103 - Traffic - Fa0/7','0',120,'0',500,'0',100,'0',0,'0','bits per second','0','on','0',2,'0','','0','on','0','on','0',1000,'0','','0','on','0','','0',''); +INSERT INTO `graph_templates_graph` VALUES (146,2,103,2,'0',1,'0','|host_description| - Traffic - |query_ifName|','172.16.42.103 - Traffic - Fa0/8','0',120,'0',500,'0',100,'0',0,'0','bits per second','0','on','0',2,'0','','0','on','0','on','0',1000,'0','','0','on','0','','0',''); +INSERT INTO `graph_templates_graph` VALUES (147,2,104,2,'0',1,'0','|host_description| - Traffic - |query_ifName|','172.16.42.103 - Traffic - Fa0/9','0',120,'0',500,'0',100,'0',0,'0','bits per second','0','on','0',2,'0','','0','on','0','on','0',1000,'0','','0','on','0','','0',''); +INSERT INTO `graph_templates_graph` VALUES (148,2,105,2,'0',1,'0','|host_description| - Traffic - |query_ifName|','172.16.42.103 - Traffic - Fa0/10','0',120,'0',500,'0',100,'0',0,'0','bits per second','0','on','0',2,'0','','0','on','0','on','0',1000,'0','','0','on','0','','0',''); +INSERT INTO `graph_templates_graph` VALUES (149,2,106,2,'0',1,'0','|host_description| - Traffic - |query_ifName|','172.16.42.103 - Traffic - Fa0/11','0',120,'0',500,'0',100,'0',0,'0','bits per second','0','on','0',2,'0','','0','on','0','on','0',1000,'0','','0','on','0','','0',''); +INSERT INTO `graph_templates_graph` VALUES (150,2,107,2,'0',1,'0','|host_description| - Traffic - |query_ifName|','172.16.42.103 - Traffic - Fa0/12','0',120,'0',500,'0',100,'0',0,'0','bits per second','0','on','0',2,'0','','0','on','0','on','0',1000,'0','','0','on','0','','0',''); +INSERT INTO `graph_templates_graph` VALUES (151,2,108,2,'0',1,'0','|host_description| - Traffic - |query_ifName|','172.16.42.103 - Traffic - Fa0/13','0',120,'0',500,'0',100,'0',0,'0','bits per second','0','on','0',2,'0','','0','on','0','on','0',1000,'0','','0','on','0','','0',''); +INSERT INTO `graph_templates_graph` VALUES (152,2,109,2,'0',1,'0','|host_description| - Traffic - |query_ifName|','172.16.42.103 - Traffic - Fa0/14','0',120,'0',500,'0',100,'0',0,'0','bits per second','0','on','0',2,'0','','0','on','0','on','0',1000,'0','','0','on','0','','0',''); +INSERT INTO `graph_templates_graph` VALUES (153,2,110,2,'0',1,'0','|host_description| - Traffic - |query_ifName|','172.16.42.103 - Traffic - Fa0/15','0',120,'0',500,'0',100,'0',0,'0','bits per second','0','on','0',2,'0','','0','on','0','on','0',1000,'0','','0','on','0','','0',''); +INSERT INTO `graph_templates_graph` VALUES (154,2,111,2,'0',1,'0','|host_description| - Traffic - |query_ifName|','172.16.42.103 - Traffic - Fa0/16','0',120,'0',500,'0',100,'0',0,'0','bits per second','0','on','0',2,'0','','0','on','0','on','0',1000,'0','','0','on','0','','0',''); +INSERT INTO `graph_templates_graph` VALUES (155,2,112,2,'0',1,'0','|host_description| - Traffic - |query_ifName|','172.16.42.103 - Traffic - Fa0/17','0',120,'0',500,'0',100,'0',0,'0','bits per second','0','on','0',2,'0','','0','on','0','on','0',1000,'0','','0','on','0','','0',''); +INSERT INTO `graph_templates_graph` VALUES (156,2,113,2,'0',1,'0','|host_description| - Traffic - |query_ifName|','172.16.42.103 - Traffic - Fa0/18','0',120,'0',500,'0',100,'0',0,'0','bits per second','0','on','0',2,'0','','0','on','0','on','0',1000,'0','','0','on','0','','0',''); +INSERT INTO `graph_templates_graph` VALUES (157,2,114,2,'0',1,'0','|host_description| - Traffic - |query_ifName|','172.16.42.103 - Traffic - Fa0/19','0',120,'0',500,'0',100,'0',0,'0','bits per second','0','on','0',2,'0','','0','on','0','on','0',1000,'0','','0','on','0','','0',''); +INSERT INTO `graph_templates_graph` VALUES (158,2,115,2,'0',1,'0','|host_description| - Traffic - |query_ifName|','172.16.42.103 - Traffic - Fa0/20','0',120,'0',500,'0',100,'0',0,'0','bits per second','0','on','0',2,'0','','0','on','0','on','0',1000,'0','','0','on','0','','0',''); +INSERT INTO `graph_templates_graph` VALUES (159,2,116,2,'0',1,'0','|host_description| - Traffic - |query_ifName|','172.16.42.103 - Traffic - Fa0/21','0',120,'0',500,'0',100,'0',0,'0','bits per second','0','on','0',2,'0','','0','on','0','on','0',1000,'0','','0','on','0','','0',''); +INSERT INTO `graph_templates_graph` VALUES (160,2,117,2,'0',1,'0','|host_description| - Traffic - |query_ifName|','172.16.42.103 - Traffic - Fa0/22','0',120,'0',500,'0',100,'0',0,'0','bits per second','0','on','0',2,'0','','0','on','0','on','0',1000,'0','','0','on','0','','0',''); +INSERT INTO `graph_templates_graph` VALUES (161,2,118,2,'0',1,'0','|host_description| - Traffic - |query_ifName|','172.16.42.103 - Traffic - Fa0/23','0',120,'0',500,'0',100,'0',0,'0','bits per second','0','on','0',2,'0','','0','on','0','on','0',1000,'0','','0','on','0','','0',''); +INSERT INTO `graph_templates_graph` VALUES (162,2,119,2,'0',1,'0','|host_description| - Traffic - |query_ifName|','172.16.42.103 - Traffic - Fa0/24','0',120,'0',500,'0',100,'0',0,'0','bits per second','0','on','0',2,'0','','0','on','0','on','0',1000,'0','','0','on','0','','0',''); +INSERT INTO `graph_templates_graph` VALUES (163,2,120,2,'0',1,'0','|host_description| - Traffic - |query_ifName|','172.16.42.103 - Traffic - Gi0/1','0',120,'0',500,'0',100,'0',0,'0','bits per second','0','on','0',2,'0','','0','on','0','on','0',1000,'0','','0','on','0','','0',''); +INSERT INTO `graph_templates_graph` VALUES (164,2,121,2,'0',1,'0','|host_description| - Traffic - |query_ifName|','172.16.42.103 - Traffic - Gi0/2','0',120,'0',500,'0',100,'0',0,'0','bits per second','0','on','0',2,'0','','0','on','0','on','0',1000,'0','','0','on','0','','0',''); +INSERT INTO `graph_templates_graph` VALUES (165,2,122,2,'0',1,'0','|host_description| - Traffic - |query_ifName|','172.16.42.103 - Traffic - Nu0','0',120,'0',500,'0',100,'0',0,'0','bits per second','0','on','0',2,'0','','0','on','0','on','0',1000,'0','','0','on','0','','0',''); +INSERT INTO `graph_templates_graph` VALUES (166,2,123,2,'0',1,'0','|host_description| - Traffic - |query_ifName|','172.16.42.103 - Traffic - Vl1','0',120,'0',500,'0',100,'0',0,'0','bits per second','0','on','0',2,'0','','0','on','0','on','0',1000,'0','','0','on','0','','0',''); +INSERT INTO `graph_templates_graph` VALUES (167,2,124,2,'0',1,'0','|host_description| - Traffic - |query_ifName|','172.16.42.103 - Traffic - Vl42','0',120,'0',500,'0',100,'0',0,'0','bits per second','0','on','0',2,'0','','0','on','0','on','0',1000,'0','','0','on','0','','0',''); +INSERT INTO `graph_templates_graph` VALUES (286,2,243,2,'0',1,'0','|host_description| - Traffic - |query_ifIP| (|query_ifDescr|)','sinabox - Traffic - 80.171.54.23 (chaos_vpn)','0',120,'0',500,'0',100,'0',0,'0','bits per second','0','on','0',2,'0','','0','on','0','on','0',1000,'0','','0','on','0','','0',''); +INSERT INTO `graph_templates_graph` VALUES (285,2,242,2,'0',1,'0','|host_description| - Traffic - |query_ifDescr|/|query_ifIndex|','sinabox - Traffic - vlan23/9','0',120,'0',500,'0',100,'0',0,'0','bits per second','0','on','0',2,'0','','0','on','0','on','0',1000,'0','','0','on','0','','0',''); +INSERT INTO `graph_templates_graph` VALUES (284,2,241,2,'0',1,'0','|host_description| - Traffic - |query_ifDescr|/|query_ifIndex|','sinabox - Traffic - ppp0/15','0',120,'0',500,'0',100,'0',0,'0','bits per second','0','on','0',2,'0','','0','on','0','on','0',1000,'0','','0','on','0','','0',''); +INSERT INTO `graph_templates_graph` VALUES (283,2,240,2,'0',1,'0','|host_description| - Traffic - |query_ifIP| (|query_ifDescr|)','sinabox - Traffic - 172.16.25.1 (vlan25)','0',120,'0',500,'0',100,'0',0,'0','bits per second','0','on','0',2,'0','','0','on','0','on','0',1000,'0','','0','on','0','','0',''); +INSERT INTO `graph_templates_graph` VALUES (282,2,239,2,'0',1,'0','|host_description| - Traffic - |query_ifDescr|/|query_ifIndex|','sinabox - Traffic - vlan42/10','0',120,'0',500,'0',100,'0',0,'0','bits per second','0','on','0',2,'0','','0','on','0','on','0',1000,'0','','0','on','0','','0',''); +INSERT INTO `graph_templates_graph` VALUES (281,2,238,2,'0',1,'0','|host_description| - Traffic - |query_ifIP| (|query_ifDescr|)','sinabox - Traffic - 192.168.178.2 (vlan22)','0',120,'0',500,'0',100,'0',0,'0','bits per second','0','on','0',2,'0','','0','on','0','on','0',1000,'0','','0','on','0','','0',''); +INSERT INTO `graph_templates_graph` VALUES (280,2,237,2,'0',1,'0','|host_description| - Traffic - |query_ifIP| (|query_ifDescr|)','sinabox - Traffic - 172.16.4.1 (vlan24)','0',120,'0',500,'0',100,'0',0,'0','bits per second','0','on','0',2,'0','','0','on','0','on','0',1000,'0','','0','on','0','','0',''); +INSERT INTO `graph_templates_graph` VALUES (278,13,235,13,'0',1,'0','|host_description| - Memory Usage','sinabox - Memory Usage','0',120,'0',500,'0',100,'0',0,'0','bytes','0','on','0',2,'0','','0','on','0','on','0',1000,'0','','0','on','0','','0',''); +INSERT INTO `graph_templates_graph` VALUES (279,2,236,2,'0',1,'0','|host_description| - Traffic - |query_ifIP| (|query_ifDescr|)','sinabox - Traffic - 172.16.0.1 (bond0)','0',120,'0',500,'0',100,'0',0,'0','bits per second','0','on','0',2,'0','','0','on','0','on','0',1000,'0','','0','on','0','','0',''); +INSERT INTO `graph_templates_graph` VALUES (277,11,234,11,'0',1,'0','|host_description| - Load Average','sinabox - Load Average','0',120,'0',500,'0',100,'0',0,'0','processes in the run queue','0','on','0',2,'0','','0','on','0','on','0',1000,'0','','0','on','0','','0','0'); +INSERT INTO `graph_templates_graph` VALUES (276,4,233,4,'0',1,'0','|host_description| - CPU Usage','sinabox - CPU Usage','0',120,'0',500,'0',100,'0',0,'0','percent','0','on','0',2,'0','','0','on','0','on','0',1000,'0','','0','on','0','','0',''); +INSERT INTO `graph_templates_graph` VALUES (180,18,137,18,'0',1,'0','|host_description| - CPU Usage','172.16.42.104 - CPU Usage','0',120,'0',500,'0',100,'0',0,'0','percent','0','on','0',2,'0','','0','on','0','on','0',1000,'0','','0','on','0','','0',''); +INSERT INTO `graph_templates_graph` VALUES (181,2,138,2,'0',1,'0','|host_description| - Traffic - |query_ifName|','172.16.42.104 - Traffic - Fa0/1','0',120,'0',500,'0',100,'0',0,'0','bits per second','0','on','0',2,'0','','0','on','0','on','0',1000,'0','','0','on','0','','0',''); +INSERT INTO `graph_templates_graph` VALUES (182,2,139,2,'0',1,'0','|host_description| - Traffic - |query_ifName|','172.16.42.104 - Traffic - Fa0/2','0',120,'0',500,'0',100,'0',0,'0','bits per second','0','on','0',2,'0','','0','on','0','on','0',1000,'0','','0','on','0','','0',''); +INSERT INTO `graph_templates_graph` VALUES (183,2,140,2,'0',1,'0','|host_description| - Traffic - |query_ifName|','172.16.42.104 - Traffic - Fa0/3','0',120,'0',500,'0',100,'0',0,'0','bits per second','0','on','0',2,'0','','0','on','0','on','0',1000,'0','','0','on','0','','0',''); +INSERT INTO `graph_templates_graph` VALUES (184,2,141,2,'0',1,'0','|host_description| - Traffic - |query_ifName|','172.16.42.104 - Traffic - Fa0/4','0',120,'0',500,'0',100,'0',0,'0','bits per second','0','on','0',2,'0','','0','on','0','on','0',1000,'0','','0','on','0','','0',''); +INSERT INTO `graph_templates_graph` VALUES (185,2,142,2,'0',1,'0','|host_description| - Traffic - |query_ifName|','172.16.42.104 - Traffic - Fa0/5','0',120,'0',500,'0',100,'0',0,'0','bits per second','0','on','0',2,'0','','0','on','0','on','0',1000,'0','','0','on','0','','0',''); +INSERT INTO `graph_templates_graph` VALUES (186,2,143,2,'0',1,'0','|host_description| - Traffic - |query_ifName|','172.16.42.104 - Traffic - Fa0/6','0',120,'0',500,'0',100,'0',0,'0','bits per second','0','on','0',2,'0','','0','on','0','on','0',1000,'0','','0','on','0','','0',''); +INSERT INTO `graph_templates_graph` VALUES (187,2,144,2,'0',1,'0','|host_description| - Traffic - |query_ifName|','172.16.42.104 - Traffic - Fa0/7','0',120,'0',500,'0',100,'0',0,'0','bits per second','0','on','0',2,'0','','0','on','0','on','0',1000,'0','','0','on','0','','0',''); +INSERT INTO `graph_templates_graph` VALUES (188,2,145,2,'0',1,'0','|host_description| - Traffic - |query_ifName|','172.16.42.104 - Traffic - Fa0/8','0',120,'0',500,'0',100,'0',0,'0','bits per second','0','on','0',2,'0','','0','on','0','on','0',1000,'0','','0','on','0','','0',''); +INSERT INTO `graph_templates_graph` VALUES (189,2,146,2,'0',1,'0','|host_description| - Traffic - |query_ifName|','172.16.42.104 - Traffic - Fa0/9','0',120,'0',500,'0',100,'0',0,'0','bits per second','0','on','0',2,'0','','0','on','0','on','0',1000,'0','','0','on','0','','0',''); +INSERT INTO `graph_templates_graph` VALUES (190,2,147,2,'0',1,'0','|host_description| - Traffic - |query_ifName|','172.16.42.104 - Traffic - Fa0/10','0',120,'0',500,'0',100,'0',0,'0','bits per second','0','on','0',2,'0','','0','on','0','on','0',1000,'0','','0','on','0','','0',''); +INSERT INTO `graph_templates_graph` VALUES (191,2,148,2,'0',1,'0','|host_description| - Traffic - |query_ifName|','172.16.42.104 - Traffic - Fa0/11','0',120,'0',500,'0',100,'0',0,'0','bits per second','0','on','0',2,'0','','0','on','0','on','0',1000,'0','','0','on','0','','0',''); +INSERT INTO `graph_templates_graph` VALUES (192,2,149,2,'0',1,'0','|host_description| - Traffic - |query_ifName|','172.16.42.104 - Traffic - Fa0/12','0',120,'0',500,'0',100,'0',0,'0','bits per second','0','on','0',2,'0','','0','on','0','on','0',1000,'0','','0','on','0','','0',''); +INSERT INTO `graph_templates_graph` VALUES (193,2,150,2,'0',1,'0','|host_description| - Traffic - |query_ifName|','172.16.42.104 - Traffic - Fa0/13','0',120,'0',500,'0',100,'0',0,'0','bits per second','0','on','0',2,'0','','0','on','0','on','0',1000,'0','','0','on','0','','0',''); +INSERT INTO `graph_templates_graph` VALUES (194,2,151,2,'0',1,'0','|host_description| - Traffic - |query_ifName|','172.16.42.104 - Traffic - Fa0/14','0',120,'0',500,'0',100,'0',0,'0','bits per second','0','on','0',2,'0','','0','on','0','on','0',1000,'0','','0','on','0','','0',''); +INSERT INTO `graph_templates_graph` VALUES (195,2,152,2,'0',1,'0','|host_description| - Traffic - |query_ifName|','172.16.42.104 - Traffic - Fa0/15','0',120,'0',500,'0',100,'0',0,'0','bits per second','0','on','0',2,'0','','0','on','0','on','0',1000,'0','','0','on','0','','0',''); +INSERT INTO `graph_templates_graph` VALUES (196,2,153,2,'0',1,'0','|host_description| - Traffic - |query_ifName|','172.16.42.104 - Traffic - Fa0/16','0',120,'0',500,'0',100,'0',0,'0','bits per second','0','on','0',2,'0','','0','on','0','on','0',1000,'0','','0','on','0','','0',''); +INSERT INTO `graph_templates_graph` VALUES (197,2,154,2,'0',1,'0','|host_description| - Traffic - |query_ifName|','172.16.42.104 - Traffic - Fa0/17','0',120,'0',500,'0',100,'0',0,'0','bits per second','0','on','0',2,'0','','0','on','0','on','0',1000,'0','','0','on','0','','0',''); +INSERT INTO `graph_templates_graph` VALUES (198,2,155,2,'0',1,'0','|host_description| - Traffic - |query_ifName|','172.16.42.104 - Traffic - Fa0/18','0',120,'0',500,'0',100,'0',0,'0','bits per second','0','on','0',2,'0','','0','on','0','on','0',1000,'0','','0','on','0','','0',''); +INSERT INTO `graph_templates_graph` VALUES (199,2,156,2,'0',1,'0','|host_description| - Traffic - |query_ifName|','172.16.42.104 - Traffic - Fa0/19','0',120,'0',500,'0',100,'0',0,'0','bits per second','0','on','0',2,'0','','0','on','0','on','0',1000,'0','','0','on','0','','0',''); +INSERT INTO `graph_templates_graph` VALUES (200,2,157,2,'0',1,'0','|host_description| - Traffic - |query_ifName|','172.16.42.104 - Traffic - Fa0/20','0',120,'0',500,'0',100,'0',0,'0','bits per second','0','on','0',2,'0','','0','on','0','on','0',1000,'0','','0','on','0','','0',''); +INSERT INTO `graph_templates_graph` VALUES (201,2,158,2,'0',1,'0','|host_description| - Traffic - |query_ifName|','172.16.42.104 - Traffic - Fa0/21','0',120,'0',500,'0',100,'0',0,'0','bits per second','0','on','0',2,'0','','0','on','0','on','0',1000,'0','','0','on','0','','0',''); +INSERT INTO `graph_templates_graph` VALUES (202,2,159,2,'0',1,'0','|host_description| - Traffic - |query_ifName|','172.16.42.104 - Traffic - Fa0/22','0',120,'0',500,'0',100,'0',0,'0','bits per second','0','on','0',2,'0','','0','on','0','on','0',1000,'0','','0','on','0','','0',''); +INSERT INTO `graph_templates_graph` VALUES (203,2,160,2,'0',1,'0','|host_description| - Traffic - |query_ifName|','172.16.42.104 - Traffic - Fa0/23','0',120,'0',500,'0',100,'0',0,'0','bits per second','0','on','0',2,'0','','0','on','0','on','0',1000,'0','','0','on','0','','0',''); +INSERT INTO `graph_templates_graph` VALUES (204,2,161,2,'0',1,'0','|host_description| - Traffic - |query_ifName|','172.16.42.104 - Traffic - Fa0/24','0',120,'0',500,'0',100,'0',0,'0','bits per second','0','on','0',2,'0','','0','on','0','on','0',1000,'0','','0','on','0','','0',''); +INSERT INTO `graph_templates_graph` VALUES (205,2,162,2,'0',1,'0','|host_description| - Traffic - |query_ifName|','172.16.42.104 - Traffic - Gi0/1','0',120,'0',500,'0',100,'0',0,'0','bits per second','0','on','0',2,'0','','0','on','0','on','0',1000,'0','','0','on','0','','0',''); +INSERT INTO `graph_templates_graph` VALUES (206,2,163,2,'0',1,'0','|host_description| - Traffic - |query_ifName|','172.16.42.104 - Traffic - Gi0/2','0',120,'0',500,'0',100,'0',0,'0','bits per second','0','on','0',2,'0','','0','on','0','on','0',1000,'0','','0','on','0','','0',''); +INSERT INTO `graph_templates_graph` VALUES (207,2,164,2,'0',1,'0','|host_description| - Traffic - |query_ifName|','172.16.42.104 - Traffic - Nu0','0',120,'0',500,'0',100,'0',0,'0','bits per second','0','on','0',2,'0','','0','on','0','on','0',1000,'0','','0','on','0','','0',''); +INSERT INTO `graph_templates_graph` VALUES (208,2,165,2,'0',1,'0','|host_description| - Traffic - |query_ifName|','172.16.42.104 - Traffic - Vl1','0',120,'0',500,'0',100,'0',0,'0','bits per second','0','on','0',2,'0','','0','on','0','on','0',1000,'0','','0','on','0','','0',''); +INSERT INTO `graph_templates_graph` VALUES (209,2,166,2,'0',1,'0','|host_description| - Traffic - |query_ifName|','172.16.42.104 - Traffic - Vl42','0',120,'0',500,'0',100,'0',0,'0','bits per second','0','on','0',2,'0','','0','on','0','on','0',1000,'0','','0','on','0','','0',''); +INSERT INTO `graph_templates_graph` VALUES (210,18,167,18,'0',1,'0','|host_description| - CPU Usage','172.16.42.142 - CPU Usage','0',120,'0',500,'0',100,'0',0,'0','percent','0','on','0',2,'0','','0','on','0','on','0',1000,'0','','0','on','0','','0',''); +INSERT INTO `graph_templates_graph` VALUES (211,2,168,2,'0',1,'0','|host_description| - Traffic - |query_ifName|','172.16.42.142 - Traffic - sc0','0',120,'0',500,'0',100,'0',0,'0','bits per second','0','on','0',2,'0','','0','on','0','on','0',1000,'0','','0','on','0','','0',''); +INSERT INTO `graph_templates_graph` VALUES (212,2,169,2,'0',1,'0','|host_description| - Traffic - |query_ifName|','172.16.42.142 - Traffic - sl0','0',120,'0',500,'0',100,'0',0,'0','bits per second','0','on','0',2,'0','','0','on','0','on','0',1000,'0','','0','on','0','','0',''); +INSERT INTO `graph_templates_graph` VALUES (213,2,170,2,'0',1,'0','|host_description| - Traffic - |query_ifName|','172.16.42.142 - Traffic - me1','0',120,'0',500,'0',100,'0',0,'0','bits per second','0','on','0',2,'0','','0','on','0','on','0',1000,'0','','0','on','0','','0',''); +INSERT INTO `graph_templates_graph` VALUES (214,2,171,2,'0',1,'0','|host_description| - Traffic - |query_ifName| - Rest(Kabel)','172.16.42.142 - Traffic - VLAN-1 - Rest(Kabel)','0',120,'0',500,'0',100,'0',0,'0','bits per second','0','on','0',2,'0','','0','on','0','on','0',1000,'0','','0','on','0','','0',''); +INSERT INTO `graph_templates_graph` VALUES (215,2,172,2,'0',1,'0','|host_description| - Traffic - |query_ifName|','172.16.42.142 - Traffic - VLAN-1002','0',120,'0',500,'0',100,'0',0,'0','bits per second','0','on','0',2,'0','','0','on','0','on','0',1000,'0','','0','on','0','','0',''); +INSERT INTO `graph_templates_graph` VALUES (216,2,173,2,'0',1,'0','|host_description| - Traffic - |query_ifName|','172.16.42.142 - Traffic - VLAN-1004','0',120,'0',500,'0',100,'0',0,'0','bits per second','0','on','0',2,'0','','0','on','0','on','0',1000,'0','','0','on','0','','0',''); +INSERT INTO `graph_templates_graph` VALUES (217,2,174,2,'0',1,'0','|host_description| - Traffic - |query_ifName|','172.16.42.142 - Traffic - VLAN-1005','0',120,'0',500,'0',100,'0',0,'0','bits per second','0','on','0',2,'0','','0','on','0','on','0',1000,'0','','0','on','0','','0',''); +INSERT INTO `graph_templates_graph` VALUES (218,2,175,2,'0',1,'0','|host_description| - Traffic - |query_ifName|','172.16.42.142 - Traffic - VLAN-1003','0',120,'0',500,'0',100,'0',0,'0','bits per second','0','on','0',2,'0','','0','on','0','on','0',1000,'0','','0','on','0','','0',''); +INSERT INTO `graph_templates_graph` VALUES (219,2,176,2,'0',1,'0','|host_description| - Traffic - |query_ifName| - management','172.16.42.142 - Traffic - 2/1 - management','0',120,'0',500,'0',100,'0',0,'0','bits per second','0','on','0',2,'0','','0','on','0','on','0',1000,'0','','0','on','0','','0',''); +INSERT INTO `graph_templates_graph` VALUES (220,2,177,2,'0',1,'0','|host_description| - Traffic - |query_ifName| - management','172.16.42.142 - Traffic - 2/2 - management','0',120,'0',500,'0',100,'0',0,'0','bits per second','0','on','0',2,'0','','0','on','0','on','0',1000,'0','','0','on','0','','0',''); +INSERT INTO `graph_templates_graph` VALUES (221,2,178,2,'0',1,'0','|host_description| - Traffic - |query_ifName| - management','172.16.42.142 - Traffic - 2/3 - management','0',120,'0',500,'0',100,'0',0,'0','bits per second','0','on','0',2,'0','','0','on','0','on','0',1000,'0','','0','on','0','','0',''); +INSERT INTO `graph_templates_graph` VALUES (222,2,179,2,'0',1,'0','|host_description| - Traffic - |query_ifName| - management','172.16.42.142 - Traffic - 2/4 - management','0',120,'0',500,'0',100,'0',0,'0','bits per second','0','on','0',2,'0','','0','on','0','on','0',1000,'0','','0','on','0','','0',''); +INSERT INTO `graph_templates_graph` VALUES (223,2,180,2,'0',1,'0','|host_description| - Traffic - |query_ifName| - management','172.16.42.142 - Traffic - 2/5 - management','0',120,'0',500,'0',100,'0',0,'0','bits per second','0','on','0',2,'0','','0','on','0','on','0',1000,'0','','0','on','0','','0',''); +INSERT INTO `graph_templates_graph` VALUES (224,2,181,2,'0',1,'0','|host_description| - Traffic - |query_ifName| - management','172.16.42.142 - Traffic - 2/6 - management','0',120,'0',500,'0',100,'0',0,'0','bits per second','0','on','0',2,'0','','0','on','0','on','0',1000,'0','','0','on','0','','0',''); +INSERT INTO `graph_templates_graph` VALUES (225,2,182,2,'0',1,'0','|host_description| - Traffic - |query_ifName| - management','172.16.42.142 - Traffic - 2/7 - management','0',120,'0',500,'0',100,'0',0,'0','bits per second','0','on','0',2,'0','','0','on','0','on','0',1000,'0','','0','on','0','','0',''); +INSERT INTO `graph_templates_graph` VALUES (226,2,183,2,'0',1,'0','|host_description| - Traffic - |query_ifName| - management','172.16.42.142 - Traffic - 2/8 - management','0',120,'0',500,'0',100,'0',0,'0','bits per second','0','on','0',2,'0','','0','on','0','on','0',1000,'0','','0','on','0','','0',''); +INSERT INTO `graph_templates_graph` VALUES (227,2,184,2,'0',1,'0','|host_description| - Traffic - |query_ifName| - management','172.16.42.142 - Traffic - 2/9 - management','0',120,'0',500,'0',100,'0',0,'0','bits per second','0','on','0',2,'0','','0','on','0','on','0',1000,'0','','0','on','0','','0',''); +INSERT INTO `graph_templates_graph` VALUES (228,2,185,2,'0',1,'0','|host_description| - Traffic - |query_ifName| - management','172.16.42.142 - Traffic - 2/10 - management','0',120,'0',500,'0',100,'0',0,'0','bits per second','0','on','0',2,'0','','0','on','0','on','0',1000,'0','','0','on','0','','0',''); +INSERT INTO `graph_templates_graph` VALUES (229,2,186,2,'0',1,'0','|host_description| - Traffic - |query_ifName| - management','172.16.42.142 - Traffic - 2/11 - management','0',120,'0',500,'0',100,'0',0,'0','bits per second','0','on','0',2,'0','','0','on','0','on','0',1000,'0','','0','on','0','','0',''); +INSERT INTO `graph_templates_graph` VALUES (230,2,187,2,'0',1,'0','|host_description| - Traffic - |query_ifName| - PPPoE UPLINK !!!','172.16.42.142 - Traffic - 2/12 - PPPoE UPLINK !!!','0',120,'0',500,'0',100,'0',0,'0','bits per second','0','on','0',2,'0','','0','on','0','on','0',1000,'0','','0','on','0','','0',''); +INSERT INTO `graph_templates_graph` VALUES (231,2,188,2,'0',1,'0','|host_description| - Traffic - |query_ifName| - sinabox bond0','172.16.42.142 - Traffic - 2/13 - sinabox bond0','0',120,'0',500,'0',100,'0',0,'0','bits per second','0','on','0',2,'0','','0','on','0','on','0',1000,'0','','0','on','0','','0',''); +INSERT INTO `graph_templates_graph` VALUES (232,2,189,2,'0',1,'0','|host_description| - Traffic - |query_ifName| - sinabox bond0','172.16.42.142 - Traffic - 2/14 - sinabox bond0','0',120,'0',500,'0',100,'0',0,'0','bits per second','0','on','0',2,'0','','0','on','0','on','0',1000,'0','','0','on','0','','0',''); +INSERT INTO `graph_templates_graph` VALUES (233,2,190,2,'0',1,'0','|host_description| - Traffic - |query_ifName|','172.16.42.142 - Traffic - 2/15','0',120,'0',500,'0',100,'0',0,'0','bits per second','0','on','0',2,'0','','0','on','0','on','0',1000,'0','','0','on','0','','0',''); +INSERT INTO `graph_templates_graph` VALUES (234,2,191,2,'0',1,'0','|host_description| - Traffic - |query_ifName|','172.16.42.142 - Traffic - 2/16','0',120,'0',500,'0',100,'0',0,'0','bits per second','0','on','0',2,'0','','0','on','0','on','0',1000,'0','','0','on','0','','0',''); +INSERT INTO `graph_templates_graph` VALUES (235,2,192,2,'0',1,'0','|host_description| - Traffic - |query_ifName| - Freifunk AP','172.16.42.142 - Traffic - 2/17 - Freifunk AP','0',120,'0',500,'0',100,'0',0,'0','bits per second','0','on','0',2,'0','','0','on','0','on','0',1000,'0','','0','on','0','','0',''); +INSERT INTO `graph_templates_graph` VALUES (236,2,193,2,'0',1,'0','|host_description| - Traffic - |query_ifName| - pylons kiste','172.16.42.142 - Traffic - 2/18 - pylons kiste','0',120,'0',500,'0',100,'0',0,'0','bits per second','0','on','0',2,'0','','0','on','0','on','0',1000,'0','','0','on','0','','0',''); +INSERT INTO `graph_templates_graph` VALUES (237,2,194,2,'0',1,'0','|host_description| - Traffic - |query_ifName|','172.16.42.142 - Traffic - 2/19','0',120,'0',500,'0',100,'0',0,'0','bits per second','0','on','0',2,'0','','0','on','0','on','0',1000,'0','','0','on','0','','0',''); +INSERT INTO `graph_templates_graph` VALUES (238,2,195,2,'0',1,'0','|host_description| - Traffic - |query_ifName|','172.16.42.142 - Traffic - 2/20','0',120,'0',500,'0',100,'0',0,'0','bits per second','0','on','0',2,'0','','0','on','0','on','0',1000,'0','','0','on','0','','0',''); +INSERT INTO `graph_templates_graph` VALUES (239,2,196,2,'0',1,'0','|host_description| - Traffic - |query_ifName|','172.16.42.142 - Traffic - 2/21','0',120,'0',500,'0',100,'0',0,'0','bits per second','0','on','0',2,'0','','0','on','0','on','0',1000,'0','','0','on','0','','0',''); +INSERT INTO `graph_templates_graph` VALUES (240,2,197,2,'0',1,'0','|host_description| - Traffic - |query_ifName|','172.16.42.142 - Traffic - 2/22','0',120,'0',500,'0',100,'0',0,'0','bits per second','0','on','0',2,'0','','0','on','0','on','0',1000,'0','','0','on','0','','0',''); +INSERT INTO `graph_templates_graph` VALUES (241,2,198,2,'0',1,'0','|host_description| - Traffic - |query_ifName|','172.16.42.142 - Traffic - 2/23','0',120,'0',500,'0',100,'0',0,'0','bits per second','0','on','0',2,'0','','0','on','0','on','0',1000,'0','','0','on','0','','0',''); +INSERT INTO `graph_templates_graph` VALUES (242,2,199,2,'0',1,'0','|host_description| - Traffic - |query_ifName|','172.16.42.142 - Traffic - 2/24','0',120,'0',500,'0',100,'0',0,'0','bits per second','0','on','0',2,'0','','0','on','0','on','0',1000,'0','','0','on','0','','0',''); +INSERT INTO `graph_templates_graph` VALUES (243,2,200,2,'0',1,'0','|host_description| - Traffic - |query_ifName| - Cafe','172.16.42.142 - Traffic - 2/25 - Cafe','0',120,'0',500,'0',100,'0',0,'0','bits per second','0','on','0',2,'0','','0','on','0','on','0',1000,'0','','0','on','0','','0',''); +INSERT INTO `graph_templates_graph` VALUES (244,2,201,2,'0',1,'0','|host_description| - Traffic - |query_ifName| - AFU','172.16.42.142 - Traffic - 2/26 - AFU','0',120,'0',500,'0',100,'0',0,'0','bits per second','0','on','0',2,'0','','0','on','0','on','0',1000,'0','','0','on','0','','0',''); +INSERT INTO `graph_templates_graph` VALUES (245,2,202,2,'0',1,'0','|host_description| - Traffic - |query_ifName| - Club','172.16.42.142 - Traffic - 2/27 - Club','0',120,'0',500,'0',100,'0',0,'0','bits per second','0','on','0',2,'0','','0','on','0','on','0',1000,'0','','0','on','0','','0',''); +INSERT INTO `graph_templates_graph` VALUES (246,2,203,2,'0',1,'0','|host_description| - Traffic - |query_ifName| - Saal','172.16.42.142 - Traffic - 2/28 - Saal','0',120,'0',500,'0',100,'0',0,'0','bits per second','0','on','0',2,'0','','0','on','0','on','0',1000,'0','','0','on','0','','0',''); +INSERT INTO `graph_templates_graph` VALUES (247,2,204,2,'0',1,'0','|host_description| - Traffic - |query_ifName| - Workshop1','172.16.42.142 - Traffic - 2/29 - Workshop1','0',120,'0',500,'0',100,'0',0,'0','bits per second','0','on','0',2,'0','','0','on','0','on','0',1000,'0','','0','on','0','','0',''); +INSERT INTO `graph_templates_graph` VALUES (248,2,205,2,'0',1,'0','|host_description| - Traffic - |query_ifName| - Workshop2','172.16.42.142 - Traffic - 2/30 - Workshop2','0',120,'0',500,'0',100,'0',0,'0','bits per second','0','on','0',2,'0','','0','on','0','on','0',1000,'0','','0','on','0','','0',''); +INSERT INTO `graph_templates_graph` VALUES (249,2,206,2,'0',1,'0','|host_description| - Traffic - |query_ifName|','172.16.42.142 - Traffic - 2/31','0',120,'0',500,'0',100,'0',0,'0','bits per second','0','on','0',2,'0','','0','on','0','on','0',1000,'0','','0','on','0','','0',''); +INSERT INTO `graph_templates_graph` VALUES (250,2,207,2,'0',1,'0','|host_description| - Traffic - |query_ifName|','172.16.42.142 - Traffic - 2/32','0',120,'0',500,'0',100,'0',0,'0','bits per second','0','on','0',2,'0','','0','on','0','on','0',1000,'0','','0','on','0','','0',''); +INSERT INTO `graph_templates_graph` VALUES (251,2,208,2,'0',1,'0','|host_description| - Traffic - |query_ifName|','172.16.42.142 - Traffic - 2/33','0',120,'0',500,'0',100,'0',0,'0','bits per second','0','on','0',2,'0','','0','on','0','on','0',1000,'0','','0','on','0','','0',''); +INSERT INTO `graph_templates_graph` VALUES (252,2,209,2,'0',1,'0','|host_description| - Traffic - |query_ifName|','172.16.42.142 - Traffic - 2/34','0',120,'0',500,'0',100,'0',0,'0','bits per second','0','on','0',2,'0','','0','on','0','on','0',1000,'0','','0','on','0','','0',''); +INSERT INTO `graph_templates_graph` VALUES (253,2,210,2,'0',1,'0','|host_description| - Traffic - |query_ifName|','172.16.42.142 - Traffic - 2/35','0',120,'0',500,'0',100,'0',0,'0','bits per second','0','on','0',2,'0','','0','on','0','on','0',1000,'0','','0','on','0','','0',''); +INSERT INTO `graph_templates_graph` VALUES (254,2,211,2,'0',1,'0','|host_description| - Traffic - |query_ifName|','172.16.42.142 - Traffic - 2/36','0',120,'0',500,'0',100,'0',0,'0','bits per second','0','on','0',2,'0','','0','on','0','on','0',1000,'0','','0','on','0','','0',''); +INSERT INTO `graph_templates_graph` VALUES (255,2,212,2,'0',1,'0','|host_description| - Traffic - |query_ifName| - Rainer','172.16.42.142 - Traffic - 2/37 - Rainer','0',120,'0',500,'0',100,'0',0,'0','bits per second','0','on','0',2,'0','','0','on','0','on','0',1000,'0','','0','on','0','','0',''); +INSERT INTO `graph_templates_graph` VALUES (256,2,213,2,'0',1,'0','|host_description| - Traffic - |query_ifName|','172.16.42.142 - Traffic - 2/38','0',120,'0',500,'0',100,'0',0,'0','bits per second','0','on','0',2,'0','','0','on','0','on','0',1000,'0','','0','on','0','','0',''); +INSERT INTO `graph_templates_graph` VALUES (257,2,214,2,'0',1,'0','|host_description| - Traffic - |query_ifName|','172.16.42.142 - Traffic - 2/39','0',120,'0',500,'0',100,'0',0,'0','bits per second','0','on','0',2,'0','','0','on','0','on','0',1000,'0','','0','on','0','','0',''); +INSERT INTO `graph_templates_graph` VALUES (258,2,215,2,'0',1,'0','|host_description| - Traffic - |query_ifName|','172.16.42.142 - Traffic - 2/40','0',120,'0',500,'0',100,'0',0,'0','bits per second','0','on','0',2,'0','','0','on','0','on','0',1000,'0','','0','on','0','','0',''); +INSERT INTO `graph_templates_graph` VALUES (259,2,216,2,'0',1,'0','|host_description| - Traffic - |query_ifName|','172.16.42.142 - Traffic - 2/41','0',120,'0',500,'0',100,'0',0,'0','bits per second','0','on','0',2,'0','','0','on','0','on','0',1000,'0','','0','on','0','','0',''); +INSERT INTO `graph_templates_graph` VALUES (260,2,217,2,'0',1,'0','|host_description| - Traffic - |query_ifName|','172.16.42.142 - Traffic - 2/42','0',120,'0',500,'0',100,'0',0,'0','bits per second','0','on','0',2,'0','','0','on','0','on','0',1000,'0','','0','on','0','','0',''); +INSERT INTO `graph_templates_graph` VALUES (261,2,218,2,'0',1,'0','|host_description| - Traffic - |query_ifName|','172.16.42.142 - Traffic - 2/43','0',120,'0',500,'0',100,'0',0,'0','bits per second','0','on','0',2,'0','','0','on','0','on','0',1000,'0','','0','on','0','','0',''); +INSERT INTO `graph_templates_graph` VALUES (262,2,219,2,'0',1,'0','|host_description| - Traffic - |query_ifName|','172.16.42.142 - Traffic - 2/44','0',120,'0',500,'0',100,'0',0,'0','bits per second','0','on','0',2,'0','','0','on','0','on','0',1000,'0','','0','on','0','','0',''); +INSERT INTO `graph_templates_graph` VALUES (263,2,220,2,'0',1,'0','|host_description| - Traffic - |query_ifName|','172.16.42.142 - Traffic - 2/45','0',120,'0',500,'0',100,'0',0,'0','bits per second','0','on','0',2,'0','','0','on','0','on','0',1000,'0','','0','on','0','','0',''); +INSERT INTO `graph_templates_graph` VALUES (264,2,221,2,'0',1,'0','|host_description| - Traffic - |query_ifName|','172.16.42.142 - Traffic - 2/46','0',120,'0',500,'0',100,'0',0,'0','bits per second','0','on','0',2,'0','','0','on','0','on','0',1000,'0','','0','on','0','','0',''); +INSERT INTO `graph_templates_graph` VALUES (265,2,222,2,'0',1,'0','|host_description| - Traffic - |query_ifName|','172.16.42.142 - Traffic - 2/47','0',120,'0',500,'0',100,'0',0,'0','bits per second','0','on','0',2,'0','','0','on','0','on','0',1000,'0','','0','on','0','','0',''); +INSERT INTO `graph_templates_graph` VALUES (266,2,223,2,'0',1,'0','|host_description| - Traffic - |query_ifName|','172.16.42.142 - Traffic - 2/48','0',120,'0',500,'0',100,'0',0,'0','bits per second','0','on','0',2,'0','','0','on','0','on','0',1000,'0','','0','on','0','','0',''); +INSERT INTO `graph_templates_graph` VALUES (267,2,224,2,'0',1,'0','|host_description| - Traffic - |query_ifName|','172.16.42.142 - Traffic - 2/49','0',120,'0',500,'0',100,'0',0,'0','bits per second','0','on','0',2,'0','','0','on','0','on','0',1000,'0','','0','on','0','','0',''); +INSERT INTO `graph_templates_graph` VALUES (268,2,225,2,'0',1,'0','|host_description| - Traffic - |query_ifName|','172.16.42.142 - Traffic - 2/50','0',120,'0',500,'0',100,'0',0,'0','bits per second','0','on','0',2,'0','','0','on','0','on','0',1000,'0','','0','on','0','','0',''); +INSERT INTO `graph_templates_graph` VALUES (269,2,226,2,'0',1,'0','|host_description| - Traffic - |query_ifName| - NOC','172.16.42.142 - Traffic - VLAN-42 - NOC','0',120,'0',500,'0',100,'0',0,'0','bits per second','0','on','0',2,'0','','0','on','0','on','0',1000,'0','','0','on','0','','0',''); +INSERT INTO `graph_templates_graph` VALUES (270,2,227,2,'0',1,'0','|host_description| - Traffic - |query_ifName| - Freifunk','172.16.42.142 - Traffic - VLAN-23 - Freifunk','0',120,'0',500,'0',100,'0',0,'0','bits per second','0','on','0',2,'0','','0','on','0','on','0',1000,'0','','0','on','0','','0',''); +INSERT INTO `graph_templates_graph` VALUES (271,2,228,2,'0',1,'0','|host_description| - Traffic - |query_ifName| - PPPoE','172.16.42.142 - Traffic - VLAN-22 - PPPoE','0',120,'0',500,'0',100,'0',0,'0','bits per second','0','on','0',2,'0','','0','on','0','on','0',1000,'0','','0','on','0','','0',''); +INSERT INTO `graph_templates_graph` VALUES (272,2,229,2,'0',1,'0','|host_description| - Traffic - |query_ifName| - WLAN','172.16.42.142 - Traffic - VLAN-24 - WLAN','0',120,'0',500,'0',100,'0',0,'0','bits per second','0','on','0',2,'0','','0','on','0','on','0',1000,'0','','0','on','0','','0',''); +INSERT INTO `graph_templates_graph` VALUES (273,2,230,2,'0',1,'0','|host_description| - Traffic - |query_ifName|','172.16.42.142 - Traffic - VLAN-25','0',120,'0',500,'0',100,'0',0,'0','bits per second','0','on','0',2,'0','','0','on','0','on','0',1000,'0','','0','on','0','','0',''); +INSERT INTO `graph_templates_graph` VALUES (274,2,231,2,'0',1,'0','|host_description| - Traffic - |query_ifName|','172.16.42.142 - Traffic - VLAN-16','0',120,'0',500,'0',100,'0',0,'0','bits per second','0','on','0',2,'0','','0','on','0','on','0',1000,'0','','0','on','0','','0',''); +INSERT INTO `graph_templates_graph` VALUES (275,2,232,2,'0',1,'0','|host_description| - Traffic - |query_ifName| - Etherchannel -> sinabox bond0','172.16.42.142 - Traffic - FEC-2/13-14 - Etherchannel -> sinabox bond0','0',120,'0',500,'0',100,'0',0,'0','bits per second','0','on','0',2,'0','','0','on','0','on','0',1000,'0','','0','on','0','','0',''); +INSERT INTO `graph_templates_graph` VALUES (287,2,244,2,'0',1,'0','|host_description| - Traffic - |query_ifName|','172.16.42.105 - Traffic - VL1','0',120,'0',500,'0',100,'0',0,'0','bits per second','0','on','0',2,'0','','0','on','0','on','0',1000,'0','','0','on','0','','0',''); +INSERT INTO `graph_templates_graph` VALUES (288,2,245,2,'0',1,'0','|host_description| - Traffic - |query_ifName|','172.16.42.105 - Traffic - Fa0/1','0',120,'0',500,'0',100,'0',0,'0','bits per second','0','on','0',2,'0','','0','on','0','on','0',1000,'0','','0','on','0','','0',''); +INSERT INTO `graph_templates_graph` VALUES (289,2,246,2,'0',1,'0','|host_description| - Traffic - |query_ifName|','172.16.42.105 - Traffic - Fa0/2','0',120,'0',500,'0',100,'0',0,'0','bits per second','0','on','0',2,'0','','0','on','0','on','0',1000,'0','','0','on','0','','0',''); +INSERT INTO `graph_templates_graph` VALUES (290,2,247,2,'0',1,'0','|host_description| - Traffic - |query_ifName|','172.16.42.105 - Traffic - Fa0/3','0',120,'0',500,'0',100,'0',0,'0','bits per second','0','on','0',2,'0','','0','on','0','on','0',1000,'0','','0','on','0','','0',''); +INSERT INTO `graph_templates_graph` VALUES (291,2,248,2,'0',1,'0','|host_description| - Traffic - |query_ifName|','172.16.42.105 - Traffic - Fa0/4','0',120,'0',500,'0',100,'0',0,'0','bits per second','0','on','0',2,'0','','0','on','0','on','0',1000,'0','','0','on','0','','0',''); +INSERT INTO `graph_templates_graph` VALUES (292,2,249,2,'0',1,'0','|host_description| - Traffic - |query_ifName|','172.16.42.105 - Traffic - Fa0/5','0',120,'0',500,'0',100,'0',0,'0','bits per second','0','on','0',2,'0','','0','on','0','on','0',1000,'0','','0','on','0','','0',''); +INSERT INTO `graph_templates_graph` VALUES (293,2,250,2,'0',1,'0','|host_description| - Traffic - |query_ifName|','172.16.42.105 - Traffic - Fa0/6','0',120,'0',500,'0',100,'0',0,'0','bits per second','0','on','0',2,'0','','0','on','0','on','0',1000,'0','','0','on','0','','0',''); +INSERT INTO `graph_templates_graph` VALUES (294,2,251,2,'0',1,'0','|host_description| - Traffic - |query_ifName|','172.16.42.105 - Traffic - Fa0/7','0',120,'0',500,'0',100,'0',0,'0','bits per second','0','on','0',2,'0','','0','on','0','on','0',1000,'0','','0','on','0','','0',''); +INSERT INTO `graph_templates_graph` VALUES (295,2,252,2,'0',1,'0','|host_description| - Traffic - |query_ifName|','172.16.42.105 - Traffic - Fa0/8','0',120,'0',500,'0',100,'0',0,'0','bits per second','0','on','0',2,'0','','0','on','0','on','0',1000,'0','','0','on','0','','0',''); +INSERT INTO `graph_templates_graph` VALUES (296,2,253,2,'0',1,'0','|host_description| - Traffic - |query_ifName|','172.16.42.105 - Traffic - Fa0/9','0',120,'0',500,'0',100,'0',0,'0','bits per second','0','on','0',2,'0','','0','on','0','on','0',1000,'0','','0','on','0','','0',''); +INSERT INTO `graph_templates_graph` VALUES (297,2,254,2,'0',1,'0','|host_description| - Traffic - |query_ifName|','172.16.42.105 - Traffic - Fa0/10','0',120,'0',500,'0',100,'0',0,'0','bits per second','0','on','0',2,'0','','0','on','0','on','0',1000,'0','','0','on','0','','0',''); +INSERT INTO `graph_templates_graph` VALUES (298,2,255,2,'0',1,'0','|host_description| - Traffic - |query_ifName|','172.16.42.105 - Traffic - Fa0/11','0',120,'0',500,'0',100,'0',0,'0','bits per second','0','on','0',2,'0','','0','on','0','on','0',1000,'0','','0','on','0','','0',''); +INSERT INTO `graph_templates_graph` VALUES (299,2,256,2,'0',1,'0','|host_description| - Traffic - |query_ifName|','172.16.42.105 - Traffic - Fa0/12','0',120,'0',500,'0',100,'0',0,'0','bits per second','0','on','0',2,'0','','0','on','0','on','0',1000,'0','','0','on','0','','0',''); +INSERT INTO `graph_templates_graph` VALUES (300,2,257,2,'0',1,'0','|host_description| - Traffic - |query_ifName|','172.16.42.105 - Traffic - Fa0/13','0',120,'0',500,'0',100,'0',0,'0','bits per second','0','on','0',2,'0','','0','on','0','on','0',1000,'0','','0','on','0','','0',''); +INSERT INTO `graph_templates_graph` VALUES (301,2,258,2,'0',1,'0','|host_description| - Traffic - |query_ifName|','172.16.42.105 - Traffic - Fa0/14','0',120,'0',500,'0',100,'0',0,'0','bits per second','0','on','0',2,'0','','0','on','0','on','0',1000,'0','','0','on','0','','0',''); +INSERT INTO `graph_templates_graph` VALUES (302,2,259,2,'0',1,'0','|host_description| - Traffic - |query_ifName|','172.16.42.105 - Traffic - Fa0/15','0',120,'0',500,'0',100,'0',0,'0','bits per second','0','on','0',2,'0','','0','on','0','on','0',1000,'0','','0','on','0','','0',''); +INSERT INTO `graph_templates_graph` VALUES (303,2,260,2,'0',1,'0','|host_description| - Traffic - |query_ifName|','172.16.42.105 - Traffic - Fa0/16','0',120,'0',500,'0',100,'0',0,'0','bits per second','0','on','0',2,'0','','0','on','0','on','0',1000,'0','','0','on','0','','0',''); +INSERT INTO `graph_templates_graph` VALUES (304,2,261,2,'0',1,'0','|host_description| - Traffic - |query_ifName|','172.16.42.105 - Traffic - Fa0/17','0',120,'0',500,'0',100,'0',0,'0','bits per second','0','on','0',2,'0','','0','on','0','on','0',1000,'0','','0','on','0','','0',''); +INSERT INTO `graph_templates_graph` VALUES (305,2,262,2,'0',1,'0','|host_description| - Traffic - |query_ifName|','172.16.42.105 - Traffic - Fa0/18','0',120,'0',500,'0',100,'0',0,'0','bits per second','0','on','0',2,'0','','0','on','0','on','0',1000,'0','','0','on','0','','0',''); +INSERT INTO `graph_templates_graph` VALUES (306,2,263,2,'0',1,'0','|host_description| - Traffic - |query_ifName|','172.16.42.105 - Traffic - Fa0/19','0',120,'0',500,'0',100,'0',0,'0','bits per second','0','on','0',2,'0','','0','on','0','on','0',1000,'0','','0','on','0','','0',''); +INSERT INTO `graph_templates_graph` VALUES (307,2,264,2,'0',1,'0','|host_description| - Traffic - |query_ifName|','172.16.42.105 - Traffic - Fa0/20','0',120,'0',500,'0',100,'0',0,'0','bits per second','0','on','0',2,'0','','0','on','0','on','0',1000,'0','','0','on','0','','0',''); +INSERT INTO `graph_templates_graph` VALUES (308,2,265,2,'0',1,'0','|host_description| - Traffic - |query_ifName|','172.16.42.105 - Traffic - Fa0/21','0',120,'0',500,'0',100,'0',0,'0','bits per second','0','on','0',2,'0','','0','on','0','on','0',1000,'0','','0','on','0','','0',''); +INSERT INTO `graph_templates_graph` VALUES (309,2,266,2,'0',1,'0','|host_description| - Traffic - |query_ifName|','172.16.42.105 - Traffic - Fa0/22','0',120,'0',500,'0',100,'0',0,'0','bits per second','0','on','0',2,'0','','0','on','0','on','0',1000,'0','','0','on','0','','0',''); +INSERT INTO `graph_templates_graph` VALUES (310,2,267,2,'0',1,'0','|host_description| - Traffic - |query_ifName|','172.16.42.105 - Traffic - Fa0/23','0',120,'0',500,'0',100,'0',0,'0','bits per second','0','on','0',2,'0','','0','on','0','on','0',1000,'0','','0','on','0','','0',''); +INSERT INTO `graph_templates_graph` VALUES (311,2,268,2,'0',1,'0','|host_description| - Traffic - |query_ifName|','172.16.42.105 - Traffic - Fa0/24','0',120,'0',500,'0',100,'0',0,'0','bits per second','0','on','0',2,'0','','0','on','0','on','0',1000,'0','','0','on','0','','0',''); +INSERT INTO `graph_templates_graph` VALUES (312,4,269,4,'0',1,'0','|host_description| - CPU Usage','sinabox packets/s - CPU Usage','0',120,'0',500,'0',100,'0',0,'0','percent','0','on','0',2,'0','','0','on','0','on','0',1000,'0','','0','on','0','','0',''); +INSERT INTO `graph_templates_graph` VALUES (313,11,270,11,'0',1,'0','|host_description| - Load Average','sinabox packets/s - Load Average','0',120,'0',500,'0',100,'0',0,'0','processes in the run queue','0','on','0',2,'0','','0','on','0','on','0',1000,'0','','0','on','0','','0','0'); +INSERT INTO `graph_templates_graph` VALUES (314,13,271,13,'0',1,'0','|host_description| - Memory Usage','sinabox packets/s - Memory Usage','0',120,'0',500,'0',100,'0',0,'0','bytes','0','on','0',2,'0','','0','on','0','on','0',1000,'0','','0','on','0','','0',''); +INSERT INTO `graph_templates_graph` VALUES (315,23,272,23,'0',1,'0','|host_description| - Unicast Packets - |query_ifIP| (|query_ifDescr|)','sinabox packets/s - Unicast Packets - 127.0.0.1 (lo)','0',120,'0',500,'0',100,'0',0,'0','packets/sec','0','on','0',2,'0','','0','on','0','on','0',1000,'0','','0','on','0','','0',''); +INSERT INTO `graph_templates_graph` VALUES (316,23,273,23,'0',1,'0','|host_description| - Unicast Packets - |query_ifDescr|/|query_ifIndex|','sinabox packets/s - Unicast Packets - dummy0/2','0',120,'0',500,'0',100,'0',0,'0','packets/sec','0','on','0',2,'0','','0','on','0','on','0',1000,'0','','0','on','0','','0',''); +INSERT INTO `graph_templates_graph` VALUES (317,23,274,23,'0',1,'0','|host_description| - Unicast Packets - |query_ifDescr|/|query_ifIndex|','sinabox packets/s - Unicast Packets - eth0/4','0',120,'0',500,'0',100,'0',0,'0','packets/sec','0','on','0',2,'0','','0','on','0','on','0',1000,'0','','0','on','0','','0',''); +INSERT INTO `graph_templates_graph` VALUES (318,23,275,23,'0',1,'0','|host_description| - Unicast Packets - |query_ifDescr|/|query_ifIndex|','sinabox packets/s - Unicast Packets - eth1/5','0',120,'0',500,'0',100,'0',0,'0','packets/sec','0','on','0',2,'0','','0','on','0','on','0',1000,'0','','0','on','0','','0',''); +INSERT INTO `graph_templates_graph` VALUES (319,23,276,23,'0',1,'0','|host_description| - Unicast Packets - |query_ifIP| (|query_ifDescr|)','sinabox packets/s - Unicast Packets - 172.16.0.1 (bond0)','0',120,'0',500,'0',100,'0',0,'0','packets/sec','0','on','0',2,'0','','0','on','0','on','0',1000,'0','','0','on','0','','0',''); +INSERT INTO `graph_templates_graph` VALUES (320,23,277,23,'0',1,'0','|host_description| - Unicast Packets - |query_ifIP| (|query_ifDescr|)','sinabox packets/s - Unicast Packets - 172.16.4.1 (vlan24)','0',120,'0',500,'0',100,'0',0,'0','packets/sec','0','on','0',2,'0','','0','on','0','on','0',1000,'0','','0','on','0','','0',''); +INSERT INTO `graph_templates_graph` VALUES (321,23,278,23,'0',1,'0','|host_description| - Unicast Packets - |query_ifIP| (|query_ifDescr|)','sinabox packets/s - Unicast Packets - 192.168.178.2 (vlan22)','0',120,'0',500,'0',100,'0',0,'0','packets/sec','0','on','0',2,'0','','0','on','0','on','0',1000,'0','','0','on','0','','0',''); +INSERT INTO `graph_templates_graph` VALUES (322,23,279,23,'0',1,'0','|host_description| - Unicast Packets - |query_ifDescr|/|query_ifIndex|','sinabox packets/s - Unicast Packets - vlan42/10','0',120,'0',500,'0',100,'0',0,'0','packets/sec','0','on','0',2,'0','','0','on','0','on','0',1000,'0','','0','on','0','','0',''); +INSERT INTO `graph_templates_graph` VALUES (323,23,280,23,'0',1,'0','|host_description| - Unicast Packets - |query_ifIP| (|query_ifDescr|)','sinabox packets/s - Unicast Packets - 172.16.25.1 (vlan25)','0',120,'0',500,'0',100,'0',0,'0','packets/sec','0','on','0',2,'0','','0','on','0','on','0',1000,'0','','0','on','0','','0',''); +INSERT INTO `graph_templates_graph` VALUES (324,23,281,23,'0',1,'0','|host_description| - Unicast Packets - |query_ifIP| (|query_ifDescr|)','sinabox packets/s - Unicast Packets - |query_ifIP| (sit0)','0',120,'0',500,'0',100,'0',0,'0','packets/sec','0','on','0',2,'0','','0','on','0','on','0',1000,'0','','0','on','0','','0',''); +INSERT INTO `graph_templates_graph` VALUES (325,23,282,23,'0',1,'0','|host_description| - Unicast Packets - |query_ifDescr|/|query_ifIndex|','sinabox packets/s - Unicast Packets - ppp0/15','0',120,'0',500,'0',100,'0',0,'0','packets/sec','0','on','0',2,'0','','0','on','0','on','0',1000,'0','','0','on','0','','0',''); +INSERT INTO `graph_templates_graph` VALUES (326,23,283,23,'0',1,'0','|host_description| - Unicast Packets - |query_ifDescr|/|query_ifIndex|','sinabox packets/s - Unicast Packets - vlan23/9','0',120,'0',500,'0',100,'0',0,'0','packets/sec','0','on','0',2,'0','','0','on','0','on','0',1000,'0','','0','on','0','','0',''); +INSERT INTO `graph_templates_graph` VALUES (327,23,284,23,'0',1,'0','|host_description| - Unicast Packets - |query_ifIP| (|query_ifDescr|)','sinabox packets/s - Unicast Packets - 80.171.54.23 (chaos_vpn)','0',120,'0',500,'0',100,'0',0,'0','packets/sec','0','on','0',2,'0','','0','on','0','on','0',1000,'0','','0','on','0','','0',''); +INSERT INTO `graph_templates_graph` VALUES (328,23,285,23,'0',1,'0','|host_description| - Unicast Packets','sinabox packets/s - Unicast Packets','0',120,'0',500,'0',100,'0',0,'0','packets/sec','0','on','0',2,'0','','0','on','0','on','0',1000,'0','','0','on','0','','0',''); +INSERT INTO `graph_templates_graph` VALUES (329,2,286,2,'0',1,'0','|host_description| - Traffic - |query_ifDescr|/|query_ifIndex|','sinabox - Traffic - tap0/14','0',120,'0',500,'0',100,'0',0,'0','bits per second','0','on','0',2,'0','','0','on','0','on','0',1000,'0','','0','on','0','','0',''); +INSERT INTO `graph_templates_graph` VALUES (330,4,287,4,'0',1,'0','|host_description| - CPU Usage','monitor.easterhegg.de - CPU Usage','0',120,'0',500,'0',100,'0',0,'0','percent','0','on','0',2,'0','','0','on','0','on','0',1000,'0','','0','on','0','','0',''); +INSERT INTO `graph_templates_graph` VALUES (331,13,288,13,'0',1,'0','|host_description| - Memory Usage','monitor.easterhegg.de - Memory Usage','0',120,'0',500,'0',100,'0',0,'0','bytes','0','on','0',2,'0','','0','on','0','on','0',1000,'0','','0','on','0','','0',''); +INSERT INTO `graph_templates_graph` VALUES (332,2,289,2,'0',1,'0','|host_description| - Traffic - |query_ifIP| (|query_ifDescr|)','monitor.easterhegg.de - Traffic - 10.10.10.196 (eth0)','0',120,'0',500,'0',100,'0',0,'0','bits per second','0','on','0',2,'0','','0','on','0','on','0',1000,'0','','0','on','0','','0',''); +INSERT INTO `graph_templates_graph` VALUES (333,21,290,21,'0',1,'0','|host_description| - Disk Space - |query_dskDevice|','monitor.easterhegg.de - Disk Space - /dev/hda1','0',120,'0',500,'0',100,'0',0,'0','bytes','0','on','0',2,'0','','0','on','0','on','0',1024,'0','','0','on','0','','0',''); + +-- +-- Table structure for table `graph_templates_item` +-- + +CREATE TABLE `graph_templates_item` ( + `id` int(12) unsigned NOT NULL auto_increment, + `hash` varchar(32) NOT NULL default '', + `local_graph_template_item_id` int(12) unsigned NOT NULL default '0', + `local_graph_id` mediumint(8) unsigned NOT NULL default '0', + `graph_template_id` mediumint(8) unsigned NOT NULL default '0', + `task_item_id` mediumint(8) unsigned NOT NULL default '0', + `color_id` mediumint(8) unsigned NOT NULL default '0', + `graph_type_id` tinyint(3) NOT NULL default '0', + `cdef_id` mediumint(8) unsigned NOT NULL default '0', + `consolidation_function_id` tinyint(2) NOT NULL default '0', + `text_format` varchar(255) default NULL, + `value` varchar(255) default NULL, + `hard_return` char(2) default NULL, + `gprint_id` mediumint(8) unsigned NOT NULL default '0', + `sequence` mediumint(8) unsigned NOT NULL default '0', + PRIMARY KEY (`id`), + UNIQUE KEY `id` (`id`), + KEY `graph_template_id` (`graph_template_id`), + KEY `id_2` (`id`), + KEY `local_graph_id` (`local_graph_id`) +) TYPE=MyISAM COMMENT='Stores the actual graph item data.'; + +-- +-- Dumping data for table `graph_templates_item` +-- + +INSERT INTO `graph_templates_item` VALUES (9,'0470b2427dbfadb6b8346e10a71268fa',0,0,2,54,22,7,2,1,'Inbound','','',2,1); +INSERT INTO `graph_templates_item` VALUES (10,'84a5fe0db518550266309823f994ce9c',0,0,2,54,0,9,2,4,'Current:','','',2,2); +INSERT INTO `graph_templates_item` VALUES (11,'2f222f28084085cd06a1f46e4449c793',0,0,2,54,0,9,2,1,'Average:','','',2,3); +INSERT INTO `graph_templates_item` VALUES (12,'55acbcc33f46ee6d754e8e81d1b54808',0,0,2,54,0,9,2,3,'Maximum:','','on',2,4); +INSERT INTO `graph_templates_item` VALUES (13,'fdaf2321fc890e355711c2bffc07d036',0,0,2,55,20,4,2,1,'Outbound','','',2,5); +INSERT INTO `graph_templates_item` VALUES (14,'768318f42819217ed81196d2179d3e1b',0,0,2,55,0,9,2,4,'Current:','','',2,6); +INSERT INTO `graph_templates_item` VALUES (15,'cb3aa6256dcb3acd50d4517b77a1a5c3',0,0,2,55,0,9,2,1,'Average:','','',2,7); +INSERT INTO `graph_templates_item` VALUES (16,'671e989be7cbf12c623b4e79d91c7bed',0,0,2,55,0,9,2,3,'Maximum:','','',2,8); +INSERT INTO `graph_templates_item` VALUES (17,'b561ed15b3ba66d277e6d7c1640b86f7',0,0,3,4,48,7,14,1,'Used','','',2,1); +INSERT INTO `graph_templates_item` VALUES (18,'99ef051057fa6adfa6834a7632e9d8a2',0,0,3,4,0,9,14,4,'Current:','','',2,2); +INSERT INTO `graph_templates_item` VALUES (19,'3986695132d3f4716872df4c6fbccb65',0,0,3,4,0,9,14,1,'Average:','','',2,3); +INSERT INTO `graph_templates_item` VALUES (20,'0444300017b368e6257f010dca8bbd0d',0,0,3,4,0,9,14,3,'Maximum:','','on',2,4); +INSERT INTO `graph_templates_item` VALUES (21,'4d6a0b9063124ca60e2d1702b3e15e41',0,0,3,3,20,8,14,1,'Available','','',2,5); +INSERT INTO `graph_templates_item` VALUES (22,'181b08325e4d00cd50b8cdc8f8ae8e77',0,0,3,3,0,9,14,4,'Current:','','',2,6); +INSERT INTO `graph_templates_item` VALUES (23,'bba0a9ff1357c990df50429d64314340',0,0,3,3,0,9,14,1,'Average:','','',2,7); +INSERT INTO `graph_templates_item` VALUES (24,'d4a67883d53bc1df8aead21c97c0bc52',0,0,3,3,0,9,14,3,'Maximum:','','on',2,8); +INSERT INTO `graph_templates_item` VALUES (25,'253c9ec2d66905245149c1c2dc8e536e',0,0,3,0,1,5,15,1,'Total','','',2,9); +INSERT INTO `graph_templates_item` VALUES (26,'ea9ea883383f4eb462fec6aa309ba7b5',0,0,3,0,0,9,15,4,'Current:','','',2,10); +INSERT INTO `graph_templates_item` VALUES (27,'83b746bcaba029eeca170a9f77ec4864',0,0,3,0,0,9,15,1,'Average:','','',2,11); +INSERT INTO `graph_templates_item` VALUES (28,'82e01dd92fd37887c0696192efe7af65',0,0,3,0,0,9,15,3,'Maximum:','','',2,12); +INSERT INTO `graph_templates_item` VALUES (29,'ff0a6125acbb029b814ed1f271ad2d38',0,0,4,5,9,7,0,1,'System','','',2,1); +INSERT INTO `graph_templates_item` VALUES (30,'f0776f7d6638bba76c2c27f75a424f0f',0,0,4,5,0,9,0,4,'Current:','','',2,2); +INSERT INTO `graph_templates_item` VALUES (31,'39f4e021aa3fed9207b5f45a82122b21',0,0,4,5,0,9,0,1,'Average:','','',2,3); +INSERT INTO `graph_templates_item` VALUES (32,'800f0b067c06f4ec9c2316711ea83c1e',0,0,4,5,0,9,0,3,'Maximum:','','on',2,4); +INSERT INTO `graph_templates_item` VALUES (33,'9419dd5dbf549ba4c5dc1462da6ee321',0,0,4,6,21,8,0,1,'User','','',2,5); +INSERT INTO `graph_templates_item` VALUES (34,'e461dd263ae47657ea2bf3fd82bec096',0,0,4,6,0,9,0,4,'Current:','','',2,6); +INSERT INTO `graph_templates_item` VALUES (35,'f2d1fbb8078a424ffc8a6c9d44d8caa0',0,0,4,6,0,9,0,1,'Average:','','',2,7); +INSERT INTO `graph_templates_item` VALUES (36,'e70a5de639df5ba1705b5883da7fccfc',0,0,4,6,0,9,0,3,'Maximum:','','on',2,8); +INSERT INTO `graph_templates_item` VALUES (37,'85fefb25ce9fd0317da2706a5463fc42',0,0,4,7,12,8,0,1,'Nice','','',2,9); +INSERT INTO `graph_templates_item` VALUES (38,'a1cb26878776999db16f1de7577b3c2a',0,0,4,7,0,9,0,4,'Current:','','',2,10); +INSERT INTO `graph_templates_item` VALUES (39,'7d0f9bf64a0898a0095f099674754273',0,0,4,7,0,9,0,1,'Average:','','',2,11); +INSERT INTO `graph_templates_item` VALUES (40,'b2879248a522d9679333e1f29e9a87c3',0,0,4,7,0,9,0,3,'Maximum:','','on',2,12); +INSERT INTO `graph_templates_item` VALUES (41,'d800aa59eee45383b3d6d35a11cdc864',0,0,4,0,1,4,12,1,'Total','','',2,13); +INSERT INTO `graph_templates_item` VALUES (42,'cab4ae79a546826288e273ca1411c867',0,0,4,0,0,9,12,4,'Current:','','',2,14); +INSERT INTO `graph_templates_item` VALUES (43,'d44306ae85622fec971507460be63f5c',0,0,4,0,0,9,12,1,'Average:','','',2,15); +INSERT INTO `graph_templates_item` VALUES (44,'aa5c2118035bb83be497d4e099afcc0d',0,0,4,0,0,9,12,3,'Maximum:','','',2,16); +INSERT INTO `graph_templates_item` VALUES (45,'4aa34ea1b7542b770ace48e8bc395a22',0,0,5,9,48,7,0,1,'Signal Level','','',2,1); +INSERT INTO `graph_templates_item` VALUES (46,'22f118a9d81d0a9c8d922efbbc8a9cc1',0,0,5,9,0,9,0,4,'Current:','','',2,2); +INSERT INTO `graph_templates_item` VALUES (47,'229de0c4b490de9d20d8f8d41059f933',0,0,5,9,0,9,0,1,'Average:','','',2,3); +INSERT INTO `graph_templates_item` VALUES (48,'cd17feb30c02fd8f21e4d4dcde04e024',0,0,5,9,0,9,0,3,'Maximum:','','on',2,4); +INSERT INTO `graph_templates_item` VALUES (49,'8723600cfd0f8a7b3f7dc1361981aabd',0,0,5,8,25,5,0,1,'Noise Level','','',2,5); +INSERT INTO `graph_templates_item` VALUES (50,'cb06be2601b5abfb7a42fc07586de1c2',0,0,5,8,0,9,0,4,'Current:','','',2,6); +INSERT INTO `graph_templates_item` VALUES (51,'55a2ee0fd511e5210ed85759171de58f',0,0,5,8,0,9,0,1,'Average:','','',2,7); +INSERT INTO `graph_templates_item` VALUES (52,'704459564c84e42462e106eef20db169',0,0,5,8,0,9,0,3,'Maximum:','','',2,8); +INSERT INTO `graph_templates_item` VALUES (53,'aaebb19ec522497eaaf8c87a631b7919',0,0,6,10,48,7,0,1,'Transmissions','','',2,1); +INSERT INTO `graph_templates_item` VALUES (54,'8b54843ac9d41bce2fcedd023560ed64',0,0,6,10,0,9,0,4,'Current:','','',2,2); +INSERT INTO `graph_templates_item` VALUES (55,'05927dc83e07c7d9cffef387d68f35c9',0,0,6,10,0,9,0,1,'Average:','','',2,3); +INSERT INTO `graph_templates_item` VALUES (56,'d11e62225a7e7a0cdce89242002ca547',0,0,6,10,0,9,0,3,'Maximum:','','on',2,4); +INSERT INTO `graph_templates_item` VALUES (57,'6397b92032486c476b0e13a35b727041',0,0,6,11,25,5,0,1,'Re-Transmissions','','',2,5); +INSERT INTO `graph_templates_item` VALUES (58,'cdfa5f8f82f4c479ff7f6f54160703f6',0,0,6,11,0,9,0,4,'Current:','','',2,6); +INSERT INTO `graph_templates_item` VALUES (59,'ce2a309fb9ef64f83f471895069a6f07',0,0,6,11,0,9,0,1,'Average:','','',2,7); +INSERT INTO `graph_templates_item` VALUES (60,'9cbfbf57ebde435b27887f27c7d3caea',0,0,6,11,0,9,0,3,'Maximum:','','',2,8); +INSERT INTO `graph_templates_item` VALUES (61,'80e0aa956f50c261e5143273da58b8a3',0,0,7,21,25,7,0,1,'','','',2,1); +INSERT INTO `graph_templates_item` VALUES (62,'48fdcae893a7b7496e1a61efc3453599',0,0,7,21,0,9,0,4,'Current:','','',2,2); +INSERT INTO `graph_templates_item` VALUES (63,'22f43e5fa20f2716666ba9ed9a7d1727',0,0,7,21,0,9,0,1,'Average:','','',2,3); +INSERT INTO `graph_templates_item` VALUES (64,'3e86d497bcded7af7ab8408e4908e0d8',0,0,7,21,0,9,0,3,'Maximum:','','',2,4); +INSERT INTO `graph_templates_item` VALUES (65,'ba00ecd28b9774348322ff70a96f2826',0,0,8,19,48,7,0,1,'Running Processes','','',2,1); +INSERT INTO `graph_templates_item` VALUES (66,'8d76de808efd73c51e9a9cbd70579512',0,0,8,19,0,9,0,4,'Current:','','',3,2); +INSERT INTO `graph_templates_item` VALUES (67,'304244ca63d5b09e62a94c8ec6fbda8d',0,0,8,19,0,9,0,1,'Average:','','',3,3); +INSERT INTO `graph_templates_item` VALUES (68,'da1ba71a93d2ed4a2a00d54592b14157',0,0,8,19,0,9,0,3,'Maximum:','','',3,4); +INSERT INTO `graph_templates_item` VALUES (69,'93ad2f2803b5edace85d86896620b9da',0,0,9,12,15,7,0,1,'1 Minute Average','','',2,1); +INSERT INTO `graph_templates_item` VALUES (70,'e28736bf63d3a3bda03ea9f1e6ecb0f1',0,0,9,12,0,9,0,4,'Current:','','on',4,2); +INSERT INTO `graph_templates_item` VALUES (71,'bbdfa13adc00398eed132b1ccb4337d2',0,0,9,13,8,8,0,1,'5 Minute Average','','',2,3); +INSERT INTO `graph_templates_item` VALUES (72,'2c14062c7d67712f16adde06132675d6',0,0,9,13,0,9,0,4,'Current:','','on',4,4); +INSERT INTO `graph_templates_item` VALUES (73,'9cf6ed48a6a54b9644a1de8c9929bd4e',0,0,9,14,9,8,0,1,'15 Minute Average','','',2,5); +INSERT INTO `graph_templates_item` VALUES (74,'c9824064305b797f38feaeed2352e0e5',0,0,9,14,0,9,0,4,'Current:','','on',4,6); +INSERT INTO `graph_templates_item` VALUES (75,'fa1bc4eff128c4da70f5247d55b8a444',0,0,9,0,1,4,12,1,'','','',2,7); +INSERT INTO `graph_templates_item` VALUES (76,'5c94ac24bc0d6d2712cc028fa7d4c7d2',0,0,10,20,67,7,0,1,'Users','','',2,1); +INSERT INTO `graph_templates_item` VALUES (77,'8bc7f905526f62df7d5c2d8c27c143c1',0,0,10,20,0,9,0,4,'Current:','','',3,2); +INSERT INTO `graph_templates_item` VALUES (78,'cd074cd2b920aab70d480c020276d45b',0,0,10,20,0,9,0,1,'Average:','','',3,3); +INSERT INTO `graph_templates_item` VALUES (79,'415630f25f5384ba0c82adbdb05fe98b',0,0,10,20,0,9,0,3,'Maximum:','','',3,4); +INSERT INTO `graph_templates_item` VALUES (80,'d77d2050be357ab067666a9485426e6b',0,0,11,33,15,7,0,1,'1 Minute Average','','',2,1); +INSERT INTO `graph_templates_item` VALUES (81,'13d22f5a0eac6d97bf6c97d7966f0a00',0,0,11,33,0,9,0,4,'Current:','','on',4,2); +INSERT INTO `graph_templates_item` VALUES (82,'8580230d31d2851ec667c296a665cbf9',0,0,11,34,8,8,0,1,'5 Minute Average','','',2,3); +INSERT INTO `graph_templates_item` VALUES (83,'b5b7d9b64e7640aa51dbf58c69b86d15',0,0,11,34,0,9,0,4,'Current:','','on',4,4); +INSERT INTO `graph_templates_item` VALUES (84,'2ec10edf4bfaa866b7efd544d4c3f446',0,0,11,35,9,8,0,1,'15 Minute Average','','',2,5); +INSERT INTO `graph_templates_item` VALUES (85,'b65666f0506c0c70966f493c19607b93',0,0,11,35,0,9,0,4,'Current:','','on',4,6); +INSERT INTO `graph_templates_item` VALUES (86,'6c73575c74506cfc75b89c4276ef3455',0,0,11,0,1,4,12,1,'Total','','',2,7); +INSERT INTO `graph_templates_item` VALUES (380,'0e715933830112c23c15f7e3463f77b6',0,0,32,55,0,9,2,3,'Maximum:','','',2,11); +INSERT INTO `graph_templates_item` VALUES (379,'979fff9d691ca35e3f4b3383d9cae43f',0,0,32,55,0,9,2,1,'Average:','','',2,8); +INSERT INTO `graph_templates_item` VALUES (378,'5bff63207c7bf076d76ff3036b5dad54',0,0,32,55,0,9,2,4,'Current:','','',2,7); +INSERT INTO `graph_templates_item` VALUES (377,'4a381a8e87d4db1ac99cf8d9078266d3',0,0,32,55,20,4,2,1,'Outbound','','',2,6); +INSERT INTO `graph_templates_item` VALUES (376,'88d3094d5dc2164cbf2f974aeb92f051',0,0,32,54,0,9,2,3,'Maximum:','','',2,4); +INSERT INTO `graph_templates_item` VALUES (375,'54782f71929e7d1734ed5ad4b8dda50d',0,0,32,54,0,9,2,1,'Average:','','',2,3); +INSERT INTO `graph_templates_item` VALUES (374,'55083351cd728b82cc4dde68eb935700',0,0,32,54,0,9,2,4,'Current:','','',2,2); +INSERT INTO `graph_templates_item` VALUES (95,'5fa7c2317f19440b757ab2ea1cae6abc',0,0,12,16,41,7,0,1,'Free','','',2,9); +INSERT INTO `graph_templates_item` VALUES (96,'b1d18060bfd3f68e812c508ff4ac94ed',0,0,12,16,0,9,0,4,'Current:','','',2,10); +INSERT INTO `graph_templates_item` VALUES (97,'780b6f0850aaf9431d1c246c55143061',0,0,12,16,0,9,0,1,'Average:','','',2,11); +INSERT INTO `graph_templates_item` VALUES (98,'2d54a7e7bb45e6c52d97a09e24b7fba7',0,0,12,16,0,9,0,3,'Maximum:','','on',2,12); +INSERT INTO `graph_templates_item` VALUES (99,'40206367a3c192b836539f49801a0b15',0,0,12,18,30,8,0,1,'Swap','','',2,13); +INSERT INTO `graph_templates_item` VALUES (100,'7ee72e2bb3722d4f8a7f9c564e0dd0d0',0,0,12,18,0,9,0,4,'Current:','','',2,14); +INSERT INTO `graph_templates_item` VALUES (101,'c8af33b949e8f47133ee25e63c91d4d0',0,0,12,18,0,9,0,1,'Average:','','',2,15); +INSERT INTO `graph_templates_item` VALUES (102,'568128a16723d1195ce6a234d353ce00',0,0,12,18,0,9,0,3,'Maximum:','','',2,16); +INSERT INTO `graph_templates_item` VALUES (103,'7517a40d478e28ed88ba2b2a65e16b57',0,0,13,37,52,7,14,1,'Memory Free','','',2,1); +INSERT INTO `graph_templates_item` VALUES (104,'df0c8b353d26c334cb909dc6243957c5',0,0,13,37,0,9,14,4,'Current:','','',2,2); +INSERT INTO `graph_templates_item` VALUES (105,'c41a4cf6fefaf756a24f0a9510580724',0,0,13,37,0,9,14,1,'Average:','','',2,3); +INSERT INTO `graph_templates_item` VALUES (106,'9efa8f01c6ed11364a21710ff170f422',0,0,13,37,0,9,14,3,'Maximum:','','on',2,4); +INSERT INTO `graph_templates_item` VALUES (107,'95d6e4e5110b456f34324f7941d08318',0,0,13,36,35,8,14,1,'Memory Buffers','','',2,5); +INSERT INTO `graph_templates_item` VALUES (108,'0c631bfc0785a9cca68489ea87a6c3da',0,0,13,36,0,9,14,4,'Current:','','',2,6); +INSERT INTO `graph_templates_item` VALUES (109,'3468579d3b671dfb788696df7dcc1ec9',0,0,13,36,0,9,14,1,'Average:','','',2,7); +INSERT INTO `graph_templates_item` VALUES (110,'c3ddfdaa65449f99b7f1a735307f9abe',0,0,13,36,0,9,14,3,'Maximum:','','on',2,8); +INSERT INTO `graph_templates_item` VALUES (111,'4c64d5c1ce8b5d8b94129c23b46a5fd6',0,0,14,28,41,7,0,1,'Cache Hits','','',2,1); +INSERT INTO `graph_templates_item` VALUES (112,'5c1845c9bd1af684a3c0ad843df69e3e',0,0,14,28,0,9,0,4,'Current:','','',3,2); +INSERT INTO `graph_templates_item` VALUES (113,'e5169563f3f361701902a8da3ac0c77f',0,0,14,28,0,9,0,1,'Average:','','',3,3); +INSERT INTO `graph_templates_item` VALUES (114,'35e87262efa521edbb1fd27f09c036f5',0,0,14,28,0,9,0,3,'Maximum:','','on',3,4); +INSERT INTO `graph_templates_item` VALUES (115,'53069d7dba4c31b338f609bea4cd16f3',0,0,14,27,66,8,0,1,'Cache Checks','','',2,5); +INSERT INTO `graph_templates_item` VALUES (116,'d9c102579839c5575806334d342b50de',0,0,14,27,0,9,0,4,'Current:','','',3,6); +INSERT INTO `graph_templates_item` VALUES (117,'dc1897c3249dbabe269af49cee92f8c0',0,0,14,27,0,9,0,1,'Average:','','',3,7); +INSERT INTO `graph_templates_item` VALUES (118,'ccd21fe0b5a8c24057f1eff4a6b66391',0,0,14,27,0,9,0,3,'Maximum:','','',3,8); +INSERT INTO `graph_templates_item` VALUES (119,'ab09d41c358f6b8a9d0cad4eccc25529',0,0,15,76,9,7,0,1,'CPU Utilization','','',2,1); +INSERT INTO `graph_templates_item` VALUES (120,'5d5b8d8fbe751dc9c86ee86f85d7433b',0,0,15,76,0,9,0,4,'Current:','','',3,2); +INSERT INTO `graph_templates_item` VALUES (121,'4822a98464c6da2afff10c6d12df1831',0,0,15,76,0,9,0,1,'Average:','','',3,3); +INSERT INTO `graph_templates_item` VALUES (122,'fc6fbf2a964bea0b3c88ed0f18616aa7',0,0,15,76,0,9,0,3,'Maximum:','','',3,4); +INSERT INTO `graph_templates_item` VALUES (123,'e4094625d5443b4c87f9a87ba616a469',0,0,16,25,67,7,0,1,'File System Reads','','',2,1); +INSERT INTO `graph_templates_item` VALUES (124,'ae68425cd10e8a6623076b2e6859a6aa',0,0,16,25,0,9,0,4,'Current:','','',3,2); +INSERT INTO `graph_templates_item` VALUES (125,'40b8e14c6568b3f6be6a5d89d6a9f061',0,0,16,25,0,9,0,1,'Average:','','',3,3); +INSERT INTO `graph_templates_item` VALUES (126,'4afbdc3851c03e206672930746b1a5e2',0,0,16,25,0,9,0,3,'Maximum:','','on',3,4); +INSERT INTO `graph_templates_item` VALUES (127,'ea47d2b5516e334bc5f6ce1698a3ae76',0,0,16,26,93,8,0,1,'File System Writes','','',2,5); +INSERT INTO `graph_templates_item` VALUES (128,'899c48a2f79ea3ad4629aff130d0f371',0,0,16,26,0,9,0,4,'Current:','','',3,6); +INSERT INTO `graph_templates_item` VALUES (129,'ab474d7da77e9ec1f6a1d45c602580cd',0,0,16,26,0,9,0,1,'Average:','','',3,7); +INSERT INTO `graph_templates_item` VALUES (130,'e143f8b4c6d4eeb6a28b052e6b8ce5a9',0,0,16,26,0,9,0,3,'Maximum:','','',3,8); +INSERT INTO `graph_templates_item` VALUES (131,'facfeeb6fc2255ba2985b2d2f695d78a',0,0,17,23,30,7,0,1,'Current Logins','','',2,1); +INSERT INTO `graph_templates_item` VALUES (132,'2470e43034a5560260d79084432ed14f',0,0,17,23,0,9,0,4,'Current:','','',3,2); +INSERT INTO `graph_templates_item` VALUES (133,'e9e645f07bde92b52d93a7a1f65efb30',0,0,17,23,0,9,0,1,'Average:','','',3,3); +INSERT INTO `graph_templates_item` VALUES (134,'bdfe0d66103211cfdaa267a44a98b092',0,0,17,23,0,9,0,3,'Maximum:','','on',3,4); +INSERT INTO `graph_templates_item` VALUES (360,'5258970186e4407ed31cca2782650c45',0,0,30,29,0,9,0,1,'Average:','','',3,3); +INSERT INTO `graph_templates_item` VALUES (359,'da26dd92666cb840f8a70e2ec5e90c07',0,0,30,29,0,9,0,4,'Current:','','',3,2); +INSERT INTO `graph_templates_item` VALUES (358,'803b96bcaec33148901b4b562d9d2344',0,0,30,29,89,7,0,1,'Open Files','','',2,1); +INSERT INTO `graph_templates_item` VALUES (139,'098b10c13a5701ddb7d4d1d2e2b0fdb7',0,0,18,30,9,7,0,1,'CPU Usage','','',2,1); +INSERT INTO `graph_templates_item` VALUES (140,'1dbda412a9926b0ee5c025aa08f3b230',0,0,18,30,0,9,0,4,'Current:','','',3,2); +INSERT INTO `graph_templates_item` VALUES (141,'725c45917146807b6a4257fc351f2bae',0,0,18,30,0,9,0,1,'Average:','','',3,3); +INSERT INTO `graph_templates_item` VALUES (142,'4e336fdfeb84ce65f81ded0e0159a5e0',0,0,18,30,0,9,0,3,'Maximum:','','',3,4); +INSERT INTO `graph_templates_item` VALUES (143,'7dab7a3ceae2addd1cebddee6c483e7c',0,0,19,39,25,7,14,1,'Free Space','','',2,5); +INSERT INTO `graph_templates_item` VALUES (144,'aea239f3ceea8c63d02e453e536190b8',0,0,19,39,0,9,14,4,'Current:','','',2,6); +INSERT INTO `graph_templates_item` VALUES (145,'a0efae92968a6d4ae099b676e0f1430e',0,0,19,39,0,9,14,1,'Average:','','',2,7); +INSERT INTO `graph_templates_item` VALUES (146,'4fd5ba88be16e3d513c9231b78ccf0e1',0,0,19,39,0,9,14,3,'Maximum:','','on',2,8); +INSERT INTO `graph_templates_item` VALUES (147,'d2e98e51189e1d9be8888c3d5c5a4029',0,0,19,38,69,7,14,1,'Total Space','','',2,1); +INSERT INTO `graph_templates_item` VALUES (148,'12829294ee3958f4a31a58a61228e027',0,0,19,38,0,9,14,4,'Current:','','',2,2); +INSERT INTO `graph_templates_item` VALUES (149,'4b7e8755b0f2253723c1e9fb21fd37b1',0,0,19,38,0,9,14,1,'Average:','','',2,3); +INSERT INTO `graph_templates_item` VALUES (150,'cbb19ffd7a0ead2bf61512e86d51ee8e',0,0,19,38,0,9,14,3,'Maximum:','','on',2,4); +INSERT INTO `graph_templates_item` VALUES (151,'37b4cbed68f9b77e49149343069843b4',0,0,19,40,95,5,14,1,'Freeable Space','','',2,9); +INSERT INTO `graph_templates_item` VALUES (152,'5eb7532200f2b5cc93e13743a7db027c',0,0,19,40,0,9,14,4,'Current:','','',2,10); +INSERT INTO `graph_templates_item` VALUES (153,'b0f9f602fbeaaff090ea3f930b46c1c7',0,0,19,40,0,9,14,1,'Average:','','',2,11); +INSERT INTO `graph_templates_item` VALUES (154,'06477f7ea46c63272cee7253e7cd8760',0,0,19,40,0,9,14,3,'Maximum:','','on',2,12); +INSERT INTO `graph_templates_item` VALUES (171,'a751838f87068e073b95be9555c57bde',0,0,21,56,0,9,14,3,'Maximum:','','on',2,4); +INSERT INTO `graph_templates_item` VALUES (170,'3b13eb2e542fe006c9bf86947a6854fa',0,0,21,56,0,9,14,1,'Average:','','',2,3); +INSERT INTO `graph_templates_item` VALUES (169,'8ef3e7fb7ce962183f489725939ea40f',0,0,21,56,0,9,14,4,'Current:','','',2,2); +INSERT INTO `graph_templates_item` VALUES (167,'6ca2161c37b0118786dbdb46ad767e5d',0,0,21,56,48,7,14,1,'Used','','',2,1); +INSERT INTO `graph_templates_item` VALUES (159,'6877a2a5362a9390565758b08b9b37f7',0,0,20,43,77,7,0,1,'Used Directory Entries','','',2,1); +INSERT INTO `graph_templates_item` VALUES (160,'a978834f3d02d833d3d2def243503bf2',0,0,20,43,0,9,0,4,'Current:','','',3,2); +INSERT INTO `graph_templates_item` VALUES (161,'7422d87bc82de20a4333bd2f6460b2d4',0,0,20,43,0,9,0,1,'Average:','','',3,3); +INSERT INTO `graph_templates_item` VALUES (162,'4d52762859a3fec297ebda0e7fd760d9',0,0,20,43,0,9,0,3,'Maximum:','','on',3,4); +INSERT INTO `graph_templates_item` VALUES (163,'999d4ed1128ff03edf8ea47e56d361dd',0,0,20,42,1,5,0,1,'Available Directory Entries','','',2,5); +INSERT INTO `graph_templates_item` VALUES (164,'3dfcd7f8c7a760ac89d34398af79b979',0,0,20,42,0,9,0,4,'Current:','','',3,6); +INSERT INTO `graph_templates_item` VALUES (165,'217be75e28505c8f8148dec6b71b9b63',0,0,20,42,0,9,0,1,'Average:','','',3,7); +INSERT INTO `graph_templates_item` VALUES (166,'69b89e1c5d6fc6182c93285b967f970a',0,0,20,42,0,9,0,3,'Maximum:','','',3,8); +INSERT INTO `graph_templates_item` VALUES (172,'5d6dff9c14c71dc1ebf83e87f1c25695',0,0,21,44,20,8,14,1,'Available','','',2,5); +INSERT INTO `graph_templates_item` VALUES (173,'b27cb9a158187d29d17abddc6fdf0f15',0,0,21,44,0,9,14,4,'Current:','','',2,6); +INSERT INTO `graph_templates_item` VALUES (174,'6c0555013bb9b964e51d22f108dae9b0',0,0,21,44,0,9,14,1,'Average:','','',2,7); +INSERT INTO `graph_templates_item` VALUES (175,'42ce58ec17ef5199145fbf9c6ee39869',0,0,21,44,0,9,14,3,'Maximum:','','on',2,8); +INSERT INTO `graph_templates_item` VALUES (176,'9bdff98f2394f666deea028cbca685f3',0,0,21,0,1,5,15,1,'Total','','',2,9); +INSERT INTO `graph_templates_item` VALUES (177,'fb831fefcf602bc31d9d24e8e456c2e6',0,0,21,0,0,9,15,4,'Current:','','',2,10); +INSERT INTO `graph_templates_item` VALUES (178,'5a958d56785a606c08200ef8dbf8deef',0,0,21,0,0,9,15,1,'Average:','','',2,11); +INSERT INTO `graph_templates_item` VALUES (179,'5ce67a658cec37f526dc84ac9e08d6e7',0,0,21,0,0,9,15,3,'Maximum:','','on',2,12); +INSERT INTO `graph_templates_item` VALUES (180,'7e04a041721df1f8828381a9ea2f2154',0,0,22,47,31,4,0,1,'Discards In','','',2,1); +INSERT INTO `graph_templates_item` VALUES (181,'afc8bca6b1b3030a6d71818272336c6c',0,0,22,47,0,9,0,4,'Current:','','',2,2); +INSERT INTO `graph_templates_item` VALUES (182,'6ac169785f5aeaf1cc5cdfd38dfcfb6c',0,0,22,47,0,9,0,1,'Average:','','',2,3); +INSERT INTO `graph_templates_item` VALUES (183,'178c0a0ce001d36a663ff6f213c07505',0,0,22,47,0,9,0,3,'Maximum:','','on',2,4); +INSERT INTO `graph_templates_item` VALUES (184,'8e3268c0abde7550616bff719f10ee2f',0,0,22,46,48,4,0,1,'Errors In','','',2,5); +INSERT INTO `graph_templates_item` VALUES (185,'18891392b149de63b62c4258a68d75f8',0,0,22,46,0,9,0,4,'Current:','','',2,6); +INSERT INTO `graph_templates_item` VALUES (186,'dfc9d23de0182c9967ae3dabdfa55a16',0,0,22,46,0,9,0,1,'Average:','','',2,7); +INSERT INTO `graph_templates_item` VALUES (187,'c47ba64e2e5ea8bf84aceec644513176',0,0,22,46,0,9,0,3,'Maximum:','','on',2,8); +INSERT INTO `graph_templates_item` VALUES (188,'9d052e7d632c479737fbfaced0821f79',0,0,23,49,71,4,0,1,'Unicast Packets Out','','',2,5); +INSERT INTO `graph_templates_item` VALUES (189,'9b9fa6268571b6a04fa4411d8e08c730',0,0,23,49,0,9,0,4,'Current:','','',2,6); +INSERT INTO `graph_templates_item` VALUES (190,'8e8f2fbeb624029cbda1d2a6ddd991ba',0,0,23,49,0,9,0,1,'Average:','','',2,7); +INSERT INTO `graph_templates_item` VALUES (191,'c76495beb1ed01f0799838eb8a893124',0,0,23,49,0,9,0,3,'Maximum:','','on',2,8); +INSERT INTO `graph_templates_item` VALUES (192,'d4e5f253f01c3ea77182c5a46418fc44',0,0,23,48,25,7,0,1,'Unicast Packets In','','',2,1); +INSERT INTO `graph_templates_item` VALUES (193,'526a96add143da021c5f00d8764a6c12',0,0,23,48,0,9,0,4,'Current:','','',2,2); +INSERT INTO `graph_templates_item` VALUES (194,'81eeb46f451212f00fd7caee42a81c0b',0,0,23,48,0,9,0,1,'Average:','','',2,3); +INSERT INTO `graph_templates_item` VALUES (195,'089e4d1c3faeb00fd5dcc9622b06d656',0,0,23,48,0,9,0,3,'Maximum:','','on',2,4); +INSERT INTO `graph_templates_item` VALUES (196,'fe66cb973966d22250de073405664200',0,0,24,53,25,7,0,1,'Non-Unicast Packets In','','',2,1); +INSERT INTO `graph_templates_item` VALUES (197,'1ba3fc3466ad32fdd2669cac6cad6faa',0,0,24,53,0,9,0,4,'Current:','','',2,2); +INSERT INTO `graph_templates_item` VALUES (198,'f810154d3a934c723c21659e66199cdf',0,0,24,53,0,9,0,1,'Average:','','',2,3); +INSERT INTO `graph_templates_item` VALUES (199,'98a161df359b01304346657ff1a9d787',0,0,24,53,0,9,0,3,'Maximum:','','on',2,4); +INSERT INTO `graph_templates_item` VALUES (200,'d5e55eaf617ad1f0516f6343b3f07c5e',0,0,24,52,71,4,0,1,'Non-Unicast Packets Out','','',2,5); +INSERT INTO `graph_templates_item` VALUES (201,'9fde6b8c84089b9f9044e681162e7567',0,0,24,52,0,9,0,4,'Current:','','',2,6); +INSERT INTO `graph_templates_item` VALUES (202,'9a3510727c3d9fa7e2e7a015783a99b3',0,0,24,52,0,9,0,1,'Average:','','',2,7); +INSERT INTO `graph_templates_item` VALUES (203,'451afd23f2cb59ab9b975fd6e2735815',0,0,24,52,0,9,0,3,'Maximum:','','on',2,8); +INSERT INTO `graph_templates_item` VALUES (204,'617d10dff9bbc3edd9d733d9c254da76',0,0,22,50,18,4,0,1,'Discards Out','','',2,9); +INSERT INTO `graph_templates_item` VALUES (205,'9269a66502c34d00ac3c8b1fcc329ac6',0,0,22,50,0,9,0,4,'Current:','','',2,10); +INSERT INTO `graph_templates_item` VALUES (206,'d45deed7e1ad8350f3b46b537ae0a933',0,0,22,50,0,9,0,1,'Average:','','',2,11); +INSERT INTO `graph_templates_item` VALUES (207,'2f64cf47dc156e8c800ae03c3b893e3c',0,0,22,50,0,9,0,3,'Maximum:','','on',2,12); +INSERT INTO `graph_templates_item` VALUES (208,'57434bef8cb21283c1a73f055b0ada19',0,0,22,51,89,4,0,1,'Errors Out','','',2,13); +INSERT INTO `graph_templates_item` VALUES (209,'660a1b9365ccbba356fd142faaec9f04',0,0,22,51,0,9,0,4,'Current:','','',2,14); +INSERT INTO `graph_templates_item` VALUES (210,'28c5297bdaedcca29acf245ef4bbed9e',0,0,22,51,0,9,0,1,'Average:','','',2,15); +INSERT INTO `graph_templates_item` VALUES (211,'99098604fd0c78fd7dabac8f40f1fb29',0,0,22,51,0,9,0,3,'Maximum:','','on',2,16); +INSERT INTO `graph_templates_item` VALUES (212,'de3eefd6d6c58afabdabcaf6c0168378',0,0,25,54,22,7,0,1,'Inbound','','',2,1); +INSERT INTO `graph_templates_item` VALUES (213,'1a80fa108f5c46eecb03090c65bc9a12',0,0,25,54,0,9,0,4,'Current:','','',2,2); +INSERT INTO `graph_templates_item` VALUES (214,'fe458892e7faa9d232e343d911e845f3',0,0,25,54,0,9,0,1,'Average:','','',2,3); +INSERT INTO `graph_templates_item` VALUES (215,'175c0a68689bebc38aad2fbc271047b3',0,0,25,54,0,9,0,3,'Maximum:','','on',2,4); +INSERT INTO `graph_templates_item` VALUES (216,'1bf2283106510491ddf3b9c1376c0b31',0,0,25,55,20,4,0,1,'Outbound','','',2,5); +INSERT INTO `graph_templates_item` VALUES (217,'c5202f1690ffe45600c0d31a4a804f67',0,0,25,55,0,9,0,4,'Current:','','',2,6); +INSERT INTO `graph_templates_item` VALUES (218,'eb9794e3fdafc2b74f0819269569ed40',0,0,25,55,0,9,0,1,'Average:','','',2,7); +INSERT INTO `graph_templates_item` VALUES (219,'6bcedd61e3ccf7518ca431940c93c439',0,0,25,55,0,9,0,3,'Maximum:','','',2,8); +INSERT INTO `graph_templates_item` VALUES (303,'b7b381d47972f836785d338a3bef6661',0,0,26,78,0,9,0,3,'Maximum:','','on',2,8); +INSERT INTO `graph_templates_item` VALUES (304,'36fa8063df3b07cece878d54443db727',0,0,26,78,0,9,0,1,'Average:','','',2,7); +INSERT INTO `graph_templates_item` VALUES (305,'2c35b5cae64c5f146a55fcb416dd14b5',0,0,26,78,0,9,0,4,'Current:','','',2,6); +INSERT INTO `graph_templates_item` VALUES (306,'16d6a9a7f608762ad65b0841e5ef4e9c',0,0,26,78,48,7,0,1,'Used','','',2,5); +INSERT INTO `graph_templates_item` VALUES (307,'d80e4a4901ab86ee39c9cc613e13532f',0,0,26,92,20,7,0,1,'Total','','',2,1); +INSERT INTO `graph_templates_item` VALUES (308,'567c2214ee4753aa712c3d101ea49a5d',0,0,26,92,0,9,0,4,'Current:','','',2,2); +INSERT INTO `graph_templates_item` VALUES (309,'ba0b6a9e316ef9be66abba68b80f7587',0,0,26,92,0,9,0,1,'Average:','','',2,3); +INSERT INTO `graph_templates_item` VALUES (310,'4b8e4a6bf2757f04c3e3a088338a2f7a',0,0,26,92,0,9,0,3,'Maximum:','','on',2,4); +INSERT INTO `graph_templates_item` VALUES (317,'8536e034ab5268a61473f1ff2f6bd88f',0,0,27,79,0,9,0,1,'Average:','','',3,3); +INSERT INTO `graph_templates_item` VALUES (316,'d478a76de1df9edf896c9ce51506c483',0,0,27,79,0,9,0,4,'Current:','','',3,2); +INSERT INTO `graph_templates_item` VALUES (315,'42537599b5fb8ea852240b58a58633de',0,0,27,79,9,7,0,1,'CPU Utilization','','',2,1); +INSERT INTO `graph_templates_item` VALUES (318,'87e10f9942b625aa323a0f39b60058e7',0,0,27,79,0,9,0,3,'Maximum:','','',3,4); +INSERT INTO `graph_templates_item` VALUES (319,'38f6891b0db92aa8950b4ce7ae902741',0,0,28,81,67,7,0,1,'Users','','',2,1); +INSERT INTO `graph_templates_item` VALUES (320,'af13152956a20aa894ef4a4067b88f63',0,0,28,81,0,9,0,4,'Current:','','',3,2); +INSERT INTO `graph_templates_item` VALUES (321,'1b2388bbede4459930c57dc93645284e',0,0,28,81,0,9,0,1,'Average:','','',3,3); +INSERT INTO `graph_templates_item` VALUES (322,'6407dc226db1d03be9730f4d6f3eeccf',0,0,28,81,0,9,0,3,'Maximum:','','',3,4); +INSERT INTO `graph_templates_item` VALUES (323,'fca6a530c8f37476b9004a90b42ee988',0,0,29,80,48,7,0,1,'Running Processes','','',2,1); +INSERT INTO `graph_templates_item` VALUES (324,'5acebbde3dc65e02f8fda03955852fbe',0,0,29,80,0,9,0,4,'Current:','','',3,2); +INSERT INTO `graph_templates_item` VALUES (325,'311079ffffac75efaab2837df8123122',0,0,29,80,0,9,0,1,'Average:','','',3,3); +INSERT INTO `graph_templates_item` VALUES (326,'724d27007ebf31016cfa5530fee1b867',0,0,29,80,0,9,0,3,'Maximum:','','',3,4); +INSERT INTO `graph_templates_item` VALUES (373,'1995d8c23e7d8e1efa2b2c55daf3c5a7',0,0,32,54,22,7,2,1,'Inbound','','',2,1); +INSERT INTO `graph_templates_item` VALUES (335,'',95,1,12,84,41,7,0,1,'Free','','',2,9); +INSERT INTO `graph_templates_item` VALUES (336,'',96,1,12,84,0,9,0,4,'Current:','','',2,10); +INSERT INTO `graph_templates_item` VALUES (337,'',97,1,12,84,0,9,0,1,'Average:','','',2,11); +INSERT INTO `graph_templates_item` VALUES (338,'',98,1,12,84,0,9,0,3,'Maximum:','','on',2,12); +INSERT INTO `graph_templates_item` VALUES (339,'',99,1,12,85,30,8,0,1,'Swap','','',2,13); +INSERT INTO `graph_templates_item` VALUES (340,'',100,1,12,85,0,9,0,4,'Current:','','',2,14); +INSERT INTO `graph_templates_item` VALUES (341,'',101,1,12,85,0,9,0,1,'Average:','','',2,15); +INSERT INTO `graph_templates_item` VALUES (342,'',102,1,12,85,0,9,0,3,'Maximum:','','',2,16); +INSERT INTO `graph_templates_item` VALUES (343,'',69,2,9,86,15,7,0,1,'1 Minute Average','','',2,1); +INSERT INTO `graph_templates_item` VALUES (344,'',70,2,9,86,0,9,0,4,'Current:','','on',4,2); +INSERT INTO `graph_templates_item` VALUES (345,'',71,2,9,87,8,8,0,1,'5 Minute Average','','',2,3); +INSERT INTO `graph_templates_item` VALUES (346,'',72,2,9,87,0,9,0,4,'Current:','','on',4,4); +INSERT INTO `graph_templates_item` VALUES (347,'',73,2,9,88,9,8,0,1,'15 Minute Average','','',2,5); +INSERT INTO `graph_templates_item` VALUES (348,'',74,2,9,88,0,9,0,4,'Current:','','on',4,6); +INSERT INTO `graph_templates_item` VALUES (349,'',75,2,9,0,1,4,12,1,'','','',2,7); +INSERT INTO `graph_templates_item` VALUES (350,'',76,3,10,89,67,7,0,1,'Users','','',2,1); +INSERT INTO `graph_templates_item` VALUES (351,'',77,3,10,89,0,9,0,4,'Current:','','',3,2); +INSERT INTO `graph_templates_item` VALUES (352,'',78,3,10,89,0,9,0,1,'Average:','','',3,3); +INSERT INTO `graph_templates_item` VALUES (353,'',79,3,10,89,0,9,0,3,'Maximum:','','',3,4); +INSERT INTO `graph_templates_item` VALUES (354,'',65,4,8,90,48,7,0,1,'Running Processes','','',2,1); +INSERT INTO `graph_templates_item` VALUES (355,'',66,4,8,90,0,9,0,4,'Current:','','',3,2); +INSERT INTO `graph_templates_item` VALUES (356,'',67,4,8,90,0,9,0,1,'Average:','','',3,3); +INSERT INTO `graph_templates_item` VALUES (357,'',68,4,8,90,0,9,0,3,'Maximum:','','',3,4); +INSERT INTO `graph_templates_item` VALUES (361,'7d08b996bde9cdc7efa650c7031137b4',0,0,30,29,0,9,0,3,'Maximum:','','on',3,4); +INSERT INTO `graph_templates_item` VALUES (362,'918e6e7d41bb4bae0ea2937b461742a4',0,0,31,54,22,7,2,1,'Inbound','','',2,1); +INSERT INTO `graph_templates_item` VALUES (363,'f19fbd06c989ea85acd6b4f926e4a456',0,0,31,54,0,9,2,4,'Current:','','',2,2); +INSERT INTO `graph_templates_item` VALUES (364,'fc150a15e20c57e11e8d05feca557ef9',0,0,31,54,0,9,2,1,'Average:','','',2,3); +INSERT INTO `graph_templates_item` VALUES (365,'ccbd86e03ccf07483b4d29e63612fb18',0,0,31,54,0,9,2,3,'Maximum:','','on',2,4); +INSERT INTO `graph_templates_item` VALUES (366,'964c5c30cd05eaf5a49c0377d173de86',0,0,31,55,20,4,2,1,'Outbound','','',2,5); +INSERT INTO `graph_templates_item` VALUES (367,'b1a6fb775cf62e79e1c4bc4933c7e4ce',0,0,31,55,0,9,2,4,'Current:','','',2,6); +INSERT INTO `graph_templates_item` VALUES (368,'721038182a872ab266b5cf1bf7f7755c',0,0,31,55,0,9,2,1,'Average:','','',2,7); +INSERT INTO `graph_templates_item` VALUES (369,'2302f80c2c70b897d12182a1fc11ecd6',0,0,31,55,0,9,2,3,'Maximum:','','on',2,8); +INSERT INTO `graph_templates_item` VALUES (370,'4ffc7af8533d103748316752b70f8e3c',0,0,31,0,0,1,0,1,'','','on',2,9); +INSERT INTO `graph_templates_item` VALUES (371,'64527c4b6eeeaf627acc5117ff2180fd',0,0,31,55,9,2,0,1,'95th Percentile','|95:bits:0:max:2|','',2,10); +INSERT INTO `graph_templates_item` VALUES (372,'d5bbcbdbf83ae858862611ac6de8fc62',0,0,31,55,0,1,0,1,'(|95:bits:6:max:2| mbit in+out)','','',2,11); +INSERT INTO `graph_templates_item` VALUES (384,'db7c15d253ca666601b3296f2574edc9',0,0,32,55,0,1,0,1,'Total Out: |sum:auto:current:2:auto|','','',2,12); +INSERT INTO `graph_templates_item` VALUES (383,'5b43e4102600ad75379c5afd235099c4',0,0,32,54,0,1,0,1,'Total In: |sum:auto:current:2:auto|','','on',2,5); +INSERT INTO `graph_templates_item` VALUES (385,'fdaec5b9227522c758ad55882c483a83',0,0,33,55,0,9,0,3,'Maximum:','','',2,11); +INSERT INTO `graph_templates_item` VALUES (386,'6824d29c3f13fe1e849f1dbb8377d3f1',0,0,33,55,0,9,0,1,'Average:','','',2,8); +INSERT INTO `graph_templates_item` VALUES (387,'54e3971b3dd751dd2509f62721c12b41',0,0,33,55,0,9,0,4,'Current:','','',2,7); +INSERT INTO `graph_templates_item` VALUES (388,'cf8c9f69878f0f595d583eac109a9be1',0,0,33,55,20,4,0,1,'Outbound','','',2,6); +INSERT INTO `graph_templates_item` VALUES (389,'de265acbbfa99eb4b3e9f7e90c7feeda',0,0,33,54,0,9,0,3,'Maximum:','','',2,4); +INSERT INTO `graph_templates_item` VALUES (390,'777aa88fb0a79b60d081e0e3759f1cf7',0,0,33,54,0,9,0,1,'Average:','','',2,3); +INSERT INTO `graph_templates_item` VALUES (391,'66bfdb701c8eeadffe55e926d6e77e71',0,0,33,54,0,9,0,4,'Current:','','',2,2); +INSERT INTO `graph_templates_item` VALUES (392,'3ff8dba1ca6279692b3fcabed0bc2631',0,0,33,54,22,7,0,1,'Inbound','','',2,1); +INSERT INTO `graph_templates_item` VALUES (393,'d6041d14f9c8fb9b7ddcf3556f763c03',0,0,33,55,0,1,0,1,'Total Out: |sum:auto:current:2:auto|','','',2,12); +INSERT INTO `graph_templates_item` VALUES (394,'76ae747365553a02313a2d8a0dd55c8a',0,0,33,54,0,1,0,1,'Total In: |sum:auto:current:2:auto|','','on',2,5); +INSERT INTO `graph_templates_item` VALUES (403,'8a1b44ab97d3b56207d0e9e77a035d25',0,0,13,95,30,8,14,1,'Cache Memory','','',2,9); +INSERT INTO `graph_templates_item` VALUES (404,'6db3f439e9764941ff43fbaae348f5dc',0,0,13,95,0,9,14,4,'Current:','','',2,10); +INSERT INTO `graph_templates_item` VALUES (405,'cc9b2fe7acf0820caa61c1519193f65e',0,0,13,95,0,9,14,1,'Average:','','',2,11); +INSERT INTO `graph_templates_item` VALUES (406,'9eea140bdfeaa40d50c5cdcd1f23f72d',0,0,13,95,0,9,14,3,'Maximum:','','on',2,12); +INSERT INTO `graph_templates_item` VALUES (407,'41316670b1a36171de2bda91a0cc2364',0,0,34,96,98,7,0,1,'','','',2,1); +INSERT INTO `graph_templates_item` VALUES (408,'c9e8cbdca0215b434c902e68755903ea',0,0,34,96,0,9,0,4,'Current:','','',2,2); +INSERT INTO `graph_templates_item` VALUES (409,'dab91d7093e720841393feea5bdcba85',0,0,34,96,0,9,0,1,'Average:','','',2,3); +INSERT INTO `graph_templates_item` VALUES (410,'03e5bd2151fea3c90843eb1130b84458',0,0,34,96,0,9,0,3,'Maximum:','','on',2,4); +INSERT INTO `graph_templates_item` VALUES (411,'',139,5,18,97,9,7,0,1,'CPU Usage','','',2,1); +INSERT INTO `graph_templates_item` VALUES (412,'',140,5,18,97,0,9,0,4,'Current:','','',3,2); +INSERT INTO `graph_templates_item` VALUES (413,'',141,5,18,97,0,9,0,1,'Average:','','',3,3); +INSERT INTO `graph_templates_item` VALUES (414,'',142,5,18,97,0,9,0,3,'Maximum:','','',3,4); +INSERT INTO `graph_templates_item` VALUES (415,'',9,6,2,98,22,7,2,1,'Inbound','','',2,1); +INSERT INTO `graph_templates_item` VALUES (416,'',10,6,2,98,0,9,2,4,'Current:','','',2,2); +INSERT INTO `graph_templates_item` VALUES (417,'',11,6,2,98,0,9,2,1,'Average:','','',2,3); +INSERT INTO `graph_templates_item` VALUES (418,'',12,6,2,98,0,9,2,3,'Maximum:','','on',2,4); +INSERT INTO `graph_templates_item` VALUES (419,'',13,6,2,99,20,4,2,1,'Outbound','','',2,5); +INSERT INTO `graph_templates_item` VALUES (420,'',14,6,2,99,0,9,2,4,'Current:','','',2,6); +INSERT INTO `graph_templates_item` VALUES (421,'',15,6,2,99,0,9,2,1,'Average:','','',2,7); +INSERT INTO `graph_templates_item` VALUES (422,'',16,6,2,99,0,9,2,3,'Maximum:','','',2,8); +INSERT INTO `graph_templates_item` VALUES (423,'',9,7,2,100,22,7,2,1,'Inbound','','',2,1); +INSERT INTO `graph_templates_item` VALUES (424,'',10,7,2,100,0,9,2,4,'Current:','','',2,2); +INSERT INTO `graph_templates_item` VALUES (425,'',11,7,2,100,0,9,2,1,'Average:','','',2,3); +INSERT INTO `graph_templates_item` VALUES (426,'',12,7,2,100,0,9,2,3,'Maximum:','','on',2,4); +INSERT INTO `graph_templates_item` VALUES (427,'',13,7,2,101,20,4,2,1,'Outbound','','',2,5); +INSERT INTO `graph_templates_item` VALUES (428,'',14,7,2,101,0,9,2,4,'Current:','','',2,6); +INSERT INTO `graph_templates_item` VALUES (429,'',15,7,2,101,0,9,2,1,'Average:','','',2,7); +INSERT INTO `graph_templates_item` VALUES (430,'',16,7,2,101,0,9,2,3,'Maximum:','','',2,8); +INSERT INTO `graph_templates_item` VALUES (431,'',9,8,2,102,22,7,2,1,'Inbound','','',2,1); +INSERT INTO `graph_templates_item` VALUES (432,'',10,8,2,102,0,9,2,4,'Current:','','',2,2); +INSERT INTO `graph_templates_item` VALUES (433,'',11,8,2,102,0,9,2,1,'Average:','','',2,3); +INSERT INTO `graph_templates_item` VALUES (434,'',12,8,2,102,0,9,2,3,'Maximum:','','on',2,4); +INSERT INTO `graph_templates_item` VALUES (435,'',13,8,2,103,20,4,2,1,'Outbound','','',2,5); +INSERT INTO `graph_templates_item` VALUES (436,'',14,8,2,103,0,9,2,4,'Current:','','',2,6); +INSERT INTO `graph_templates_item` VALUES (437,'',15,8,2,103,0,9,2,1,'Average:','','',2,7); +INSERT INTO `graph_templates_item` VALUES (438,'',16,8,2,103,0,9,2,3,'Maximum:','','',2,8); +INSERT INTO `graph_templates_item` VALUES (439,'',9,9,2,104,22,7,2,1,'Inbound','','',2,1); +INSERT INTO `graph_templates_item` VALUES (440,'',10,9,2,104,0,9,2,4,'Current:','','',2,2); +INSERT INTO `graph_templates_item` VALUES (441,'',11,9,2,104,0,9,2,1,'Average:','','',2,3); +INSERT INTO `graph_templates_item` VALUES (442,'',12,9,2,104,0,9,2,3,'Maximum:','','on',2,4); +INSERT INTO `graph_templates_item` VALUES (443,'',13,9,2,105,20,4,2,1,'Outbound','','',2,5); +INSERT INTO `graph_templates_item` VALUES (444,'',14,9,2,105,0,9,2,4,'Current:','','',2,6); +INSERT INTO `graph_templates_item` VALUES (445,'',15,9,2,105,0,9,2,1,'Average:','','',2,7); +INSERT INTO `graph_templates_item` VALUES (446,'',16,9,2,105,0,9,2,3,'Maximum:','','',2,8); +INSERT INTO `graph_templates_item` VALUES (447,'',9,10,2,106,22,7,2,1,'Inbound','','',2,1); +INSERT INTO `graph_templates_item` VALUES (448,'',10,10,2,106,0,9,2,4,'Current:','','',2,2); +INSERT INTO `graph_templates_item` VALUES (449,'',11,10,2,106,0,9,2,1,'Average:','','',2,3); +INSERT INTO `graph_templates_item` VALUES (450,'',12,10,2,106,0,9,2,3,'Maximum:','','on',2,4); +INSERT INTO `graph_templates_item` VALUES (451,'',13,10,2,107,20,4,2,1,'Outbound','','',2,5); +INSERT INTO `graph_templates_item` VALUES (452,'',14,10,2,107,0,9,2,4,'Current:','','',2,6); +INSERT INTO `graph_templates_item` VALUES (453,'',15,10,2,107,0,9,2,1,'Average:','','',2,7); +INSERT INTO `graph_templates_item` VALUES (454,'',16,10,2,107,0,9,2,3,'Maximum:','','',2,8); +INSERT INTO `graph_templates_item` VALUES (455,'',9,11,2,108,22,7,2,1,'Inbound','','',2,1); +INSERT INTO `graph_templates_item` VALUES (456,'',10,11,2,108,0,9,2,4,'Current:','','',2,2); +INSERT INTO `graph_templates_item` VALUES (457,'',11,11,2,108,0,9,2,1,'Average:','','',2,3); +INSERT INTO `graph_templates_item` VALUES (458,'',12,11,2,108,0,9,2,3,'Maximum:','','on',2,4); +INSERT INTO `graph_templates_item` VALUES (459,'',13,11,2,109,20,4,2,1,'Outbound','','',2,5); +INSERT INTO `graph_templates_item` VALUES (460,'',14,11,2,109,0,9,2,4,'Current:','','',2,6); +INSERT INTO `graph_templates_item` VALUES (461,'',15,11,2,109,0,9,2,1,'Average:','','',2,7); +INSERT INTO `graph_templates_item` VALUES (462,'',16,11,2,109,0,9,2,3,'Maximum:','','',2,8); +INSERT INTO `graph_templates_item` VALUES (463,'',9,12,2,110,22,7,2,1,'Inbound','','',2,1); +INSERT INTO `graph_templates_item` VALUES (464,'',10,12,2,110,0,9,2,4,'Current:','','',2,2); +INSERT INTO `graph_templates_item` VALUES (465,'',11,12,2,110,0,9,2,1,'Average:','','',2,3); +INSERT INTO `graph_templates_item` VALUES (466,'',12,12,2,110,0,9,2,3,'Maximum:','','on',2,4); +INSERT INTO `graph_templates_item` VALUES (467,'',13,12,2,111,20,4,2,1,'Outbound','','',2,5); +INSERT INTO `graph_templates_item` VALUES (468,'',14,12,2,111,0,9,2,4,'Current:','','',2,6); +INSERT INTO `graph_templates_item` VALUES (469,'',15,12,2,111,0,9,2,1,'Average:','','',2,7); +INSERT INTO `graph_templates_item` VALUES (470,'',16,12,2,111,0,9,2,3,'Maximum:','','',2,8); +INSERT INTO `graph_templates_item` VALUES (471,'',9,13,2,112,22,7,2,1,'Inbound','','',2,1); +INSERT INTO `graph_templates_item` VALUES (472,'',10,13,2,112,0,9,2,4,'Current:','','',2,2); +INSERT INTO `graph_templates_item` VALUES (473,'',11,13,2,112,0,9,2,1,'Average:','','',2,3); +INSERT INTO `graph_templates_item` VALUES (474,'',12,13,2,112,0,9,2,3,'Maximum:','','on',2,4); +INSERT INTO `graph_templates_item` VALUES (475,'',13,13,2,113,20,4,2,1,'Outbound','','',2,5); +INSERT INTO `graph_templates_item` VALUES (476,'',14,13,2,113,0,9,2,4,'Current:','','',2,6); +INSERT INTO `graph_templates_item` VALUES (477,'',15,13,2,113,0,9,2,1,'Average:','','',2,7); +INSERT INTO `graph_templates_item` VALUES (478,'',16,13,2,113,0,9,2,3,'Maximum:','','',2,8); +INSERT INTO `graph_templates_item` VALUES (479,'',9,14,2,114,22,7,2,1,'Inbound','','',2,1); +INSERT INTO `graph_templates_item` VALUES (480,'',10,14,2,114,0,9,2,4,'Current:','','',2,2); +INSERT INTO `graph_templates_item` VALUES (481,'',11,14,2,114,0,9,2,1,'Average:','','',2,3); +INSERT INTO `graph_templates_item` VALUES (482,'',12,14,2,114,0,9,2,3,'Maximum:','','on',2,4); +INSERT INTO `graph_templates_item` VALUES (483,'',13,14,2,115,20,4,2,1,'Outbound','','',2,5); +INSERT INTO `graph_templates_item` VALUES (484,'',14,14,2,115,0,9,2,4,'Current:','','',2,6); +INSERT INTO `graph_templates_item` VALUES (485,'',15,14,2,115,0,9,2,1,'Average:','','',2,7); +INSERT INTO `graph_templates_item` VALUES (486,'',16,14,2,115,0,9,2,3,'Maximum:','','',2,8); +INSERT INTO `graph_templates_item` VALUES (487,'',9,15,2,116,22,7,2,1,'Inbound','','',2,1); +INSERT INTO `graph_templates_item` VALUES (488,'',10,15,2,116,0,9,2,4,'Current:','','',2,2); +INSERT INTO `graph_templates_item` VALUES (489,'',11,15,2,116,0,9,2,1,'Average:','','',2,3); +INSERT INTO `graph_templates_item` VALUES (490,'',12,15,2,116,0,9,2,3,'Maximum:','','on',2,4); +INSERT INTO `graph_templates_item` VALUES (491,'',13,15,2,117,20,4,2,1,'Outbound','','',2,5); +INSERT INTO `graph_templates_item` VALUES (492,'',14,15,2,117,0,9,2,4,'Current:','','',2,6); +INSERT INTO `graph_templates_item` VALUES (493,'',15,15,2,117,0,9,2,1,'Average:','','',2,7); +INSERT INTO `graph_templates_item` VALUES (494,'',16,15,2,117,0,9,2,3,'Maximum:','','',2,8); +INSERT INTO `graph_templates_item` VALUES (495,'',9,16,2,118,22,7,2,1,'Inbound','','',2,1); +INSERT INTO `graph_templates_item` VALUES (496,'',10,16,2,118,0,9,2,4,'Current:','','',2,2); +INSERT INTO `graph_templates_item` VALUES (497,'',11,16,2,118,0,9,2,1,'Average:','','',2,3); +INSERT INTO `graph_templates_item` VALUES (498,'',12,16,2,118,0,9,2,3,'Maximum:','','on',2,4); +INSERT INTO `graph_templates_item` VALUES (499,'',13,16,2,119,20,4,2,1,'Outbound','','',2,5); +INSERT INTO `graph_templates_item` VALUES (500,'',14,16,2,119,0,9,2,4,'Current:','','',2,6); +INSERT INTO `graph_templates_item` VALUES (501,'',15,16,2,119,0,9,2,1,'Average:','','',2,7); +INSERT INTO `graph_templates_item` VALUES (502,'',16,16,2,119,0,9,2,3,'Maximum:','','',2,8); +INSERT INTO `graph_templates_item` VALUES (503,'',9,17,2,120,22,7,2,1,'Inbound','','',2,1); +INSERT INTO `graph_templates_item` VALUES (504,'',10,17,2,120,0,9,2,4,'Current:','','',2,2); +INSERT INTO `graph_templates_item` VALUES (505,'',11,17,2,120,0,9,2,1,'Average:','','',2,3); +INSERT INTO `graph_templates_item` VALUES (506,'',12,17,2,120,0,9,2,3,'Maximum:','','on',2,4); +INSERT INTO `graph_templates_item` VALUES (507,'',13,17,2,121,20,4,2,1,'Outbound','','',2,5); +INSERT INTO `graph_templates_item` VALUES (508,'',14,17,2,121,0,9,2,4,'Current:','','',2,6); +INSERT INTO `graph_templates_item` VALUES (509,'',15,17,2,121,0,9,2,1,'Average:','','',2,7); +INSERT INTO `graph_templates_item` VALUES (510,'',16,17,2,121,0,9,2,3,'Maximum:','','',2,8); +INSERT INTO `graph_templates_item` VALUES (511,'',9,18,2,122,22,7,2,1,'Inbound','','',2,1); +INSERT INTO `graph_templates_item` VALUES (512,'',10,18,2,122,0,9,2,4,'Current:','','',2,2); +INSERT INTO `graph_templates_item` VALUES (513,'',11,18,2,122,0,9,2,1,'Average:','','',2,3); +INSERT INTO `graph_templates_item` VALUES (514,'',12,18,2,122,0,9,2,3,'Maximum:','','on',2,4); +INSERT INTO `graph_templates_item` VALUES (515,'',13,18,2,123,20,4,2,1,'Outbound','','',2,5); +INSERT INTO `graph_templates_item` VALUES (516,'',14,18,2,123,0,9,2,4,'Current:','','',2,6); +INSERT INTO `graph_templates_item` VALUES (517,'',15,18,2,123,0,9,2,1,'Average:','','',2,7); +INSERT INTO `graph_templates_item` VALUES (518,'',16,18,2,123,0,9,2,3,'Maximum:','','',2,8); +INSERT INTO `graph_templates_item` VALUES (519,'',9,19,2,124,22,7,2,1,'Inbound','','',2,1); +INSERT INTO `graph_templates_item` VALUES (520,'',10,19,2,124,0,9,2,4,'Current:','','',2,2); +INSERT INTO `graph_templates_item` VALUES (521,'',11,19,2,124,0,9,2,1,'Average:','','',2,3); +INSERT INTO `graph_templates_item` VALUES (522,'',12,19,2,124,0,9,2,3,'Maximum:','','on',2,4); +INSERT INTO `graph_templates_item` VALUES (523,'',13,19,2,125,20,4,2,1,'Outbound','','',2,5); +INSERT INTO `graph_templates_item` VALUES (524,'',14,19,2,125,0,9,2,4,'Current:','','',2,6); +INSERT INTO `graph_templates_item` VALUES (525,'',15,19,2,125,0,9,2,1,'Average:','','',2,7); +INSERT INTO `graph_templates_item` VALUES (526,'',16,19,2,125,0,9,2,3,'Maximum:','','',2,8); +INSERT INTO `graph_templates_item` VALUES (527,'',9,20,2,126,22,7,2,1,'Inbound','','',2,1); +INSERT INTO `graph_templates_item` VALUES (528,'',10,20,2,126,0,9,2,4,'Current:','','',2,2); +INSERT INTO `graph_templates_item` VALUES (529,'',11,20,2,126,0,9,2,1,'Average:','','',2,3); +INSERT INTO `graph_templates_item` VALUES (530,'',12,20,2,126,0,9,2,3,'Maximum:','','on',2,4); +INSERT INTO `graph_templates_item` VALUES (531,'',13,20,2,127,20,4,2,1,'Outbound','','',2,5); +INSERT INTO `graph_templates_item` VALUES (532,'',14,20,2,127,0,9,2,4,'Current:','','',2,6); +INSERT INTO `graph_templates_item` VALUES (533,'',15,20,2,127,0,9,2,1,'Average:','','',2,7); +INSERT INTO `graph_templates_item` VALUES (534,'',16,20,2,127,0,9,2,3,'Maximum:','','',2,8); +INSERT INTO `graph_templates_item` VALUES (535,'',9,21,2,128,22,7,2,1,'Inbound','','',2,1); +INSERT INTO `graph_templates_item` VALUES (536,'',10,21,2,128,0,9,2,4,'Current:','','',2,2); +INSERT INTO `graph_templates_item` VALUES (537,'',11,21,2,128,0,9,2,1,'Average:','','',2,3); +INSERT INTO `graph_templates_item` VALUES (538,'',12,21,2,128,0,9,2,3,'Maximum:','','on',2,4); +INSERT INTO `graph_templates_item` VALUES (539,'',13,21,2,129,20,4,2,1,'Outbound','','',2,5); +INSERT INTO `graph_templates_item` VALUES (540,'',14,21,2,129,0,9,2,4,'Current:','','',2,6); +INSERT INTO `graph_templates_item` VALUES (541,'',15,21,2,129,0,9,2,1,'Average:','','',2,7); +INSERT INTO `graph_templates_item` VALUES (542,'',16,21,2,129,0,9,2,3,'Maximum:','','',2,8); +INSERT INTO `graph_templates_item` VALUES (543,'',9,22,2,130,22,7,2,1,'Inbound','','',2,1); +INSERT INTO `graph_templates_item` VALUES (544,'',10,22,2,130,0,9,2,4,'Current:','','',2,2); +INSERT INTO `graph_templates_item` VALUES (545,'',11,22,2,130,0,9,2,1,'Average:','','',2,3); +INSERT INTO `graph_templates_item` VALUES (546,'',12,22,2,130,0,9,2,3,'Maximum:','','on',2,4); +INSERT INTO `graph_templates_item` VALUES (547,'',13,22,2,131,20,4,2,1,'Outbound','','',2,5); +INSERT INTO `graph_templates_item` VALUES (548,'',14,22,2,131,0,9,2,4,'Current:','','',2,6); +INSERT INTO `graph_templates_item` VALUES (549,'',15,22,2,131,0,9,2,1,'Average:','','',2,7); +INSERT INTO `graph_templates_item` VALUES (550,'',16,22,2,131,0,9,2,3,'Maximum:','','',2,8); +INSERT INTO `graph_templates_item` VALUES (551,'',9,23,2,132,22,7,2,1,'Inbound','','',2,1); +INSERT INTO `graph_templates_item` VALUES (552,'',10,23,2,132,0,9,2,4,'Current:','','',2,2); +INSERT INTO `graph_templates_item` VALUES (553,'',11,23,2,132,0,9,2,1,'Average:','','',2,3); +INSERT INTO `graph_templates_item` VALUES (554,'',12,23,2,132,0,9,2,3,'Maximum:','','on',2,4); +INSERT INTO `graph_templates_item` VALUES (555,'',13,23,2,133,20,4,2,1,'Outbound','','',2,5); +INSERT INTO `graph_templates_item` VALUES (556,'',14,23,2,133,0,9,2,4,'Current:','','',2,6); +INSERT INTO `graph_templates_item` VALUES (557,'',15,23,2,133,0,9,2,1,'Average:','','',2,7); +INSERT INTO `graph_templates_item` VALUES (558,'',16,23,2,133,0,9,2,3,'Maximum:','','',2,8); +INSERT INTO `graph_templates_item` VALUES (559,'',9,24,2,134,22,7,2,1,'Inbound','','',2,1); +INSERT INTO `graph_templates_item` VALUES (560,'',10,24,2,134,0,9,2,4,'Current:','','',2,2); +INSERT INTO `graph_templates_item` VALUES (561,'',11,24,2,134,0,9,2,1,'Average:','','',2,3); +INSERT INTO `graph_templates_item` VALUES (562,'',12,24,2,134,0,9,2,3,'Maximum:','','on',2,4); +INSERT INTO `graph_templates_item` VALUES (563,'',13,24,2,135,20,4,2,1,'Outbound','','',2,5); +INSERT INTO `graph_templates_item` VALUES (564,'',14,24,2,135,0,9,2,4,'Current:','','',2,6); +INSERT INTO `graph_templates_item` VALUES (565,'',15,24,2,135,0,9,2,1,'Average:','','',2,7); +INSERT INTO `graph_templates_item` VALUES (566,'',16,24,2,135,0,9,2,3,'Maximum:','','',2,8); +INSERT INTO `graph_templates_item` VALUES (567,'',9,25,2,136,22,7,2,1,'Inbound','','',2,1); +INSERT INTO `graph_templates_item` VALUES (568,'',10,25,2,136,0,9,2,4,'Current:','','',2,2); +INSERT INTO `graph_templates_item` VALUES (569,'',11,25,2,136,0,9,2,1,'Average:','','',2,3); +INSERT INTO `graph_templates_item` VALUES (570,'',12,25,2,136,0,9,2,3,'Maximum:','','on',2,4); +INSERT INTO `graph_templates_item` VALUES (571,'',13,25,2,137,20,4,2,1,'Outbound','','',2,5); +INSERT INTO `graph_templates_item` VALUES (572,'',14,25,2,137,0,9,2,4,'Current:','','',2,6); +INSERT INTO `graph_templates_item` VALUES (573,'',15,25,2,137,0,9,2,1,'Average:','','',2,7); +INSERT INTO `graph_templates_item` VALUES (574,'',16,25,2,137,0,9,2,3,'Maximum:','','',2,8); +INSERT INTO `graph_templates_item` VALUES (575,'',9,26,2,138,22,7,2,1,'Inbound','','',2,1); +INSERT INTO `graph_templates_item` VALUES (576,'',10,26,2,138,0,9,2,4,'Current:','','',2,2); +INSERT INTO `graph_templates_item` VALUES (577,'',11,26,2,138,0,9,2,1,'Average:','','',2,3); +INSERT INTO `graph_templates_item` VALUES (578,'',12,26,2,138,0,9,2,3,'Maximum:','','on',2,4); +INSERT INTO `graph_templates_item` VALUES (579,'',13,26,2,139,20,4,2,1,'Outbound','','',2,5); +INSERT INTO `graph_templates_item` VALUES (580,'',14,26,2,139,0,9,2,4,'Current:','','',2,6); +INSERT INTO `graph_templates_item` VALUES (581,'',15,26,2,139,0,9,2,1,'Average:','','',2,7); +INSERT INTO `graph_templates_item` VALUES (582,'',16,26,2,139,0,9,2,3,'Maximum:','','',2,8); +INSERT INTO `graph_templates_item` VALUES (583,'',9,27,2,140,22,7,2,1,'Inbound','','',2,1); +INSERT INTO `graph_templates_item` VALUES (584,'',10,27,2,140,0,9,2,4,'Current:','','',2,2); +INSERT INTO `graph_templates_item` VALUES (585,'',11,27,2,140,0,9,2,1,'Average:','','',2,3); +INSERT INTO `graph_templates_item` VALUES (586,'',12,27,2,140,0,9,2,3,'Maximum:','','on',2,4); +INSERT INTO `graph_templates_item` VALUES (587,'',13,27,2,141,20,4,2,1,'Outbound','','',2,5); +INSERT INTO `graph_templates_item` VALUES (588,'',14,27,2,141,0,9,2,4,'Current:','','',2,6); +INSERT INTO `graph_templates_item` VALUES (589,'',15,27,2,141,0,9,2,1,'Average:','','',2,7); +INSERT INTO `graph_templates_item` VALUES (590,'',16,27,2,141,0,9,2,3,'Maximum:','','',2,8); +INSERT INTO `graph_templates_item` VALUES (591,'',9,28,2,142,22,7,2,1,'Inbound','','',2,1); +INSERT INTO `graph_templates_item` VALUES (592,'',10,28,2,142,0,9,2,4,'Current:','','',2,2); +INSERT INTO `graph_templates_item` VALUES (593,'',11,28,2,142,0,9,2,1,'Average:','','',2,3); +INSERT INTO `graph_templates_item` VALUES (594,'',12,28,2,142,0,9,2,3,'Maximum:','','on',2,4); +INSERT INTO `graph_templates_item` VALUES (595,'',13,28,2,143,20,4,2,1,'Outbound','','',2,5); +INSERT INTO `graph_templates_item` VALUES (596,'',14,28,2,143,0,9,2,4,'Current:','','',2,6); +INSERT INTO `graph_templates_item` VALUES (597,'',15,28,2,143,0,9,2,1,'Average:','','',2,7); +INSERT INTO `graph_templates_item` VALUES (598,'',16,28,2,143,0,9,2,3,'Maximum:','','',2,8); +INSERT INTO `graph_templates_item` VALUES (599,'',9,29,2,144,22,7,2,1,'Inbound','','',2,1); +INSERT INTO `graph_templates_item` VALUES (600,'',10,29,2,144,0,9,2,4,'Current:','','',2,2); +INSERT INTO `graph_templates_item` VALUES (601,'',11,29,2,144,0,9,2,1,'Average:','','',2,3); +INSERT INTO `graph_templates_item` VALUES (602,'',12,29,2,144,0,9,2,3,'Maximum:','','on',2,4); +INSERT INTO `graph_templates_item` VALUES (603,'',13,29,2,145,20,4,2,1,'Outbound','','',2,5); +INSERT INTO `graph_templates_item` VALUES (604,'',14,29,2,145,0,9,2,4,'Current:','','',2,6); +INSERT INTO `graph_templates_item` VALUES (605,'',15,29,2,145,0,9,2,1,'Average:','','',2,7); +INSERT INTO `graph_templates_item` VALUES (606,'',16,29,2,145,0,9,2,3,'Maximum:','','',2,8); +INSERT INTO `graph_templates_item` VALUES (607,'',9,30,2,146,22,7,2,1,'Inbound','','',2,1); +INSERT INTO `graph_templates_item` VALUES (608,'',10,30,2,146,0,9,2,4,'Current:','','',2,2); +INSERT INTO `graph_templates_item` VALUES (609,'',11,30,2,146,0,9,2,1,'Average:','','',2,3); +INSERT INTO `graph_templates_item` VALUES (610,'',12,30,2,146,0,9,2,3,'Maximum:','','on',2,4); +INSERT INTO `graph_templates_item` VALUES (611,'',13,30,2,147,20,4,2,1,'Outbound','','',2,5); +INSERT INTO `graph_templates_item` VALUES (612,'',14,30,2,147,0,9,2,4,'Current:','','',2,6); +INSERT INTO `graph_templates_item` VALUES (613,'',15,30,2,147,0,9,2,1,'Average:','','',2,7); +INSERT INTO `graph_templates_item` VALUES (614,'',16,30,2,147,0,9,2,3,'Maximum:','','',2,8); +INSERT INTO `graph_templates_item` VALUES (615,'',9,31,2,148,22,7,2,1,'Inbound','','',2,1); +INSERT INTO `graph_templates_item` VALUES (616,'',10,31,2,148,0,9,2,4,'Current:','','',2,2); +INSERT INTO `graph_templates_item` VALUES (617,'',11,31,2,148,0,9,2,1,'Average:','','',2,3); +INSERT INTO `graph_templates_item` VALUES (618,'',12,31,2,148,0,9,2,3,'Maximum:','','on',2,4); +INSERT INTO `graph_templates_item` VALUES (619,'',13,31,2,149,20,4,2,1,'Outbound','','',2,5); +INSERT INTO `graph_templates_item` VALUES (620,'',14,31,2,149,0,9,2,4,'Current:','','',2,6); +INSERT INTO `graph_templates_item` VALUES (621,'',15,31,2,149,0,9,2,1,'Average:','','',2,7); +INSERT INTO `graph_templates_item` VALUES (622,'',16,31,2,149,0,9,2,3,'Maximum:','','',2,8); +INSERT INTO `graph_templates_item` VALUES (623,'',9,32,2,150,22,7,2,1,'Inbound','','',2,1); +INSERT INTO `graph_templates_item` VALUES (624,'',10,32,2,150,0,9,2,4,'Current:','','',2,2); +INSERT INTO `graph_templates_item` VALUES (625,'',11,32,2,150,0,9,2,1,'Average:','','',2,3); +INSERT INTO `graph_templates_item` VALUES (626,'',12,32,2,150,0,9,2,3,'Maximum:','','on',2,4); +INSERT INTO `graph_templates_item` VALUES (627,'',13,32,2,151,20,4,2,1,'Outbound','','',2,5); +INSERT INTO `graph_templates_item` VALUES (628,'',14,32,2,151,0,9,2,4,'Current:','','',2,6); +INSERT INTO `graph_templates_item` VALUES (629,'',15,32,2,151,0,9,2,1,'Average:','','',2,7); +INSERT INTO `graph_templates_item` VALUES (630,'',16,32,2,151,0,9,2,3,'Maximum:','','',2,8); +INSERT INTO `graph_templates_item` VALUES (631,'',9,33,2,152,22,7,2,1,'Inbound','','',2,1); +INSERT INTO `graph_templates_item` VALUES (632,'',10,33,2,152,0,9,2,4,'Current:','','',2,2); +INSERT INTO `graph_templates_item` VALUES (633,'',11,33,2,152,0,9,2,1,'Average:','','',2,3); +INSERT INTO `graph_templates_item` VALUES (634,'',12,33,2,152,0,9,2,3,'Maximum:','','on',2,4); +INSERT INTO `graph_templates_item` VALUES (635,'',13,33,2,153,20,4,2,1,'Outbound','','',2,5); +INSERT INTO `graph_templates_item` VALUES (636,'',14,33,2,153,0,9,2,4,'Current:','','',2,6); +INSERT INTO `graph_templates_item` VALUES (637,'',15,33,2,153,0,9,2,1,'Average:','','',2,7); +INSERT INTO `graph_templates_item` VALUES (638,'',16,33,2,153,0,9,2,3,'Maximum:','','',2,8); +INSERT INTO `graph_templates_item` VALUES (639,'',9,34,2,154,22,7,2,1,'Inbound','','',2,1); +INSERT INTO `graph_templates_item` VALUES (640,'',10,34,2,154,0,9,2,4,'Current:','','',2,2); +INSERT INTO `graph_templates_item` VALUES (641,'',11,34,2,154,0,9,2,1,'Average:','','',2,3); +INSERT INTO `graph_templates_item` VALUES (642,'',12,34,2,154,0,9,2,3,'Maximum:','','on',2,4); +INSERT INTO `graph_templates_item` VALUES (643,'',13,34,2,155,20,4,2,1,'Outbound','','',2,5); +INSERT INTO `graph_templates_item` VALUES (644,'',14,34,2,155,0,9,2,4,'Current:','','',2,6); +INSERT INTO `graph_templates_item` VALUES (645,'',15,34,2,155,0,9,2,1,'Average:','','',2,7); +INSERT INTO `graph_templates_item` VALUES (646,'',16,34,2,155,0,9,2,3,'Maximum:','','',2,8); +INSERT INTO `graph_templates_item` VALUES (647,'',139,35,18,156,9,7,0,1,'CPU Usage','','',2,1); +INSERT INTO `graph_templates_item` VALUES (648,'',140,35,18,156,0,9,0,4,'Current:','','',3,2); +INSERT INTO `graph_templates_item` VALUES (649,'',141,35,18,156,0,9,0,1,'Average:','','',3,3); +INSERT INTO `graph_templates_item` VALUES (650,'',142,35,18,156,0,9,0,3,'Maximum:','','',3,4); +INSERT INTO `graph_templates_item` VALUES (651,'',9,36,2,157,22,7,2,1,'Inbound','','',2,1); +INSERT INTO `graph_templates_item` VALUES (652,'',10,36,2,157,0,9,2,4,'Current:','','',2,2); +INSERT INTO `graph_templates_item` VALUES (653,'',11,36,2,157,0,9,2,1,'Average:','','',2,3); +INSERT INTO `graph_templates_item` VALUES (654,'',12,36,2,157,0,9,2,3,'Maximum:','','on',2,4); +INSERT INTO `graph_templates_item` VALUES (655,'',13,36,2,158,20,4,2,1,'Outbound','','',2,5); +INSERT INTO `graph_templates_item` VALUES (656,'',14,36,2,158,0,9,2,4,'Current:','','',2,6); +INSERT INTO `graph_templates_item` VALUES (657,'',15,36,2,158,0,9,2,1,'Average:','','',2,7); +INSERT INTO `graph_templates_item` VALUES (658,'',16,36,2,158,0,9,2,3,'Maximum:','','',2,8); +INSERT INTO `graph_templates_item` VALUES (659,'',9,37,2,159,22,7,2,1,'Inbound','','',2,1); +INSERT INTO `graph_templates_item` VALUES (660,'',10,37,2,159,0,9,2,4,'Current:','','',2,2); +INSERT INTO `graph_templates_item` VALUES (661,'',11,37,2,159,0,9,2,1,'Average:','','',2,3); +INSERT INTO `graph_templates_item` VALUES (662,'',12,37,2,159,0,9,2,3,'Maximum:','','on',2,4); +INSERT INTO `graph_templates_item` VALUES (663,'',13,37,2,160,20,4,2,1,'Outbound','','',2,5); +INSERT INTO `graph_templates_item` VALUES (664,'',14,37,2,160,0,9,2,4,'Current:','','',2,6); +INSERT INTO `graph_templates_item` VALUES (665,'',15,37,2,160,0,9,2,1,'Average:','','',2,7); +INSERT INTO `graph_templates_item` VALUES (666,'',16,37,2,160,0,9,2,3,'Maximum:','','',2,8); +INSERT INTO `graph_templates_item` VALUES (667,'',9,38,2,161,22,7,2,1,'Inbound','','',2,1); +INSERT INTO `graph_templates_item` VALUES (668,'',10,38,2,161,0,9,2,4,'Current:','','',2,2); +INSERT INTO `graph_templates_item` VALUES (669,'',11,38,2,161,0,9,2,1,'Average:','','',2,3); +INSERT INTO `graph_templates_item` VALUES (670,'',12,38,2,161,0,9,2,3,'Maximum:','','on',2,4); +INSERT INTO `graph_templates_item` VALUES (671,'',13,38,2,162,20,4,2,1,'Outbound','','',2,5); +INSERT INTO `graph_templates_item` VALUES (672,'',14,38,2,162,0,9,2,4,'Current:','','',2,6); +INSERT INTO `graph_templates_item` VALUES (673,'',15,38,2,162,0,9,2,1,'Average:','','',2,7); +INSERT INTO `graph_templates_item` VALUES (674,'',16,38,2,162,0,9,2,3,'Maximum:','','',2,8); +INSERT INTO `graph_templates_item` VALUES (675,'',9,39,2,163,22,7,2,1,'Inbound','','',2,1); +INSERT INTO `graph_templates_item` VALUES (676,'',10,39,2,163,0,9,2,4,'Current:','','',2,2); +INSERT INTO `graph_templates_item` VALUES (677,'',11,39,2,163,0,9,2,1,'Average:','','',2,3); +INSERT INTO `graph_templates_item` VALUES (678,'',12,39,2,163,0,9,2,3,'Maximum:','','on',2,4); +INSERT INTO `graph_templates_item` VALUES (679,'',13,39,2,164,20,4,2,1,'Outbound','','',2,5); +INSERT INTO `graph_templates_item` VALUES (680,'',14,39,2,164,0,9,2,4,'Current:','','',2,6); +INSERT INTO `graph_templates_item` VALUES (681,'',15,39,2,164,0,9,2,1,'Average:','','',2,7); +INSERT INTO `graph_templates_item` VALUES (682,'',16,39,2,164,0,9,2,3,'Maximum:','','',2,8); +INSERT INTO `graph_templates_item` VALUES (683,'',9,40,2,165,22,7,2,1,'Inbound','','',2,1); +INSERT INTO `graph_templates_item` VALUES (684,'',10,40,2,165,0,9,2,4,'Current:','','',2,2); +INSERT INTO `graph_templates_item` VALUES (685,'',11,40,2,165,0,9,2,1,'Average:','','',2,3); +INSERT INTO `graph_templates_item` VALUES (686,'',12,40,2,165,0,9,2,3,'Maximum:','','on',2,4); +INSERT INTO `graph_templates_item` VALUES (687,'',13,40,2,166,20,4,2,1,'Outbound','','',2,5); +INSERT INTO `graph_templates_item` VALUES (688,'',14,40,2,166,0,9,2,4,'Current:','','',2,6); +INSERT INTO `graph_templates_item` VALUES (689,'',15,40,2,166,0,9,2,1,'Average:','','',2,7); +INSERT INTO `graph_templates_item` VALUES (690,'',16,40,2,166,0,9,2,3,'Maximum:','','',2,8); +INSERT INTO `graph_templates_item` VALUES (691,'',9,41,2,167,22,7,2,1,'Inbound','','',2,1); +INSERT INTO `graph_templates_item` VALUES (692,'',10,41,2,167,0,9,2,4,'Current:','','',2,2); +INSERT INTO `graph_templates_item` VALUES (693,'',11,41,2,167,0,9,2,1,'Average:','','',2,3); +INSERT INTO `graph_templates_item` VALUES (694,'',12,41,2,167,0,9,2,3,'Maximum:','','on',2,4); +INSERT INTO `graph_templates_item` VALUES (695,'',13,41,2,168,20,4,2,1,'Outbound','','',2,5); +INSERT INTO `graph_templates_item` VALUES (696,'',14,41,2,168,0,9,2,4,'Current:','','',2,6); +INSERT INTO `graph_templates_item` VALUES (697,'',15,41,2,168,0,9,2,1,'Average:','','',2,7); +INSERT INTO `graph_templates_item` VALUES (698,'',16,41,2,168,0,9,2,3,'Maximum:','','',2,8); +INSERT INTO `graph_templates_item` VALUES (699,'',9,42,2,169,22,7,2,1,'Inbound','','',2,1); +INSERT INTO `graph_templates_item` VALUES (700,'',10,42,2,169,0,9,2,4,'Current:','','',2,2); +INSERT INTO `graph_templates_item` VALUES (701,'',11,42,2,169,0,9,2,1,'Average:','','',2,3); +INSERT INTO `graph_templates_item` VALUES (702,'',12,42,2,169,0,9,2,3,'Maximum:','','on',2,4); +INSERT INTO `graph_templates_item` VALUES (703,'',13,42,2,170,20,4,2,1,'Outbound','','',2,5); +INSERT INTO `graph_templates_item` VALUES (704,'',14,42,2,170,0,9,2,4,'Current:','','',2,6); +INSERT INTO `graph_templates_item` VALUES (705,'',15,42,2,170,0,9,2,1,'Average:','','',2,7); +INSERT INTO `graph_templates_item` VALUES (706,'',16,42,2,170,0,9,2,3,'Maximum:','','',2,8); +INSERT INTO `graph_templates_item` VALUES (707,'',9,43,2,171,22,7,2,1,'Inbound','','',2,1); +INSERT INTO `graph_templates_item` VALUES (708,'',10,43,2,171,0,9,2,4,'Current:','','',2,2); +INSERT INTO `graph_templates_item` VALUES (709,'',11,43,2,171,0,9,2,1,'Average:','','',2,3); +INSERT INTO `graph_templates_item` VALUES (710,'',12,43,2,171,0,9,2,3,'Maximum:','','on',2,4); +INSERT INTO `graph_templates_item` VALUES (711,'',13,43,2,172,20,4,2,1,'Outbound','','',2,5); +INSERT INTO `graph_templates_item` VALUES (712,'',14,43,2,172,0,9,2,4,'Current:','','',2,6); +INSERT INTO `graph_templates_item` VALUES (713,'',15,43,2,172,0,9,2,1,'Average:','','',2,7); +INSERT INTO `graph_templates_item` VALUES (714,'',16,43,2,172,0,9,2,3,'Maximum:','','',2,8); +INSERT INTO `graph_templates_item` VALUES (715,'',9,44,2,173,22,7,2,1,'Inbound','','',2,1); +INSERT INTO `graph_templates_item` VALUES (716,'',10,44,2,173,0,9,2,4,'Current:','','',2,2); +INSERT INTO `graph_templates_item` VALUES (717,'',11,44,2,173,0,9,2,1,'Average:','','',2,3); +INSERT INTO `graph_templates_item` VALUES (718,'',12,44,2,173,0,9,2,3,'Maximum:','','on',2,4); +INSERT INTO `graph_templates_item` VALUES (719,'',13,44,2,174,20,4,2,1,'Outbound','','',2,5); +INSERT INTO `graph_templates_item` VALUES (720,'',14,44,2,174,0,9,2,4,'Current:','','',2,6); +INSERT INTO `graph_templates_item` VALUES (721,'',15,44,2,174,0,9,2,1,'Average:','','',2,7); +INSERT INTO `graph_templates_item` VALUES (722,'',16,44,2,174,0,9,2,3,'Maximum:','','',2,8); +INSERT INTO `graph_templates_item` VALUES (723,'',9,45,2,175,22,7,2,1,'Inbound','','',2,1); +INSERT INTO `graph_templates_item` VALUES (724,'',10,45,2,175,0,9,2,4,'Current:','','',2,2); +INSERT INTO `graph_templates_item` VALUES (725,'',11,45,2,175,0,9,2,1,'Average:','','',2,3); +INSERT INTO `graph_templates_item` VALUES (726,'',12,45,2,175,0,9,2,3,'Maximum:','','on',2,4); +INSERT INTO `graph_templates_item` VALUES (727,'',13,45,2,176,20,4,2,1,'Outbound','','',2,5); +INSERT INTO `graph_templates_item` VALUES (728,'',14,45,2,176,0,9,2,4,'Current:','','',2,6); +INSERT INTO `graph_templates_item` VALUES (729,'',15,45,2,176,0,9,2,1,'Average:','','',2,7); +INSERT INTO `graph_templates_item` VALUES (730,'',16,45,2,176,0,9,2,3,'Maximum:','','',2,8); +INSERT INTO `graph_templates_item` VALUES (731,'',9,46,2,177,22,7,2,1,'Inbound','','',2,1); +INSERT INTO `graph_templates_item` VALUES (732,'',10,46,2,177,0,9,2,4,'Current:','','',2,2); +INSERT INTO `graph_templates_item` VALUES (733,'',11,46,2,177,0,9,2,1,'Average:','','',2,3); +INSERT INTO `graph_templates_item` VALUES (734,'',12,46,2,177,0,9,2,3,'Maximum:','','on',2,4); +INSERT INTO `graph_templates_item` VALUES (735,'',13,46,2,178,20,4,2,1,'Outbound','','',2,5); +INSERT INTO `graph_templates_item` VALUES (736,'',14,46,2,178,0,9,2,4,'Current:','','',2,6); +INSERT INTO `graph_templates_item` VALUES (737,'',15,46,2,178,0,9,2,1,'Average:','','',2,7); +INSERT INTO `graph_templates_item` VALUES (738,'',16,46,2,178,0,9,2,3,'Maximum:','','',2,8); +INSERT INTO `graph_templates_item` VALUES (739,'',9,47,2,179,22,7,2,1,'Inbound','','',2,1); +INSERT INTO `graph_templates_item` VALUES (740,'',10,47,2,179,0,9,2,4,'Current:','','',2,2); +INSERT INTO `graph_templates_item` VALUES (741,'',11,47,2,179,0,9,2,1,'Average:','','',2,3); +INSERT INTO `graph_templates_item` VALUES (742,'',12,47,2,179,0,9,2,3,'Maximum:','','on',2,4); +INSERT INTO `graph_templates_item` VALUES (743,'',13,47,2,180,20,4,2,1,'Outbound','','',2,5); +INSERT INTO `graph_templates_item` VALUES (744,'',14,47,2,180,0,9,2,4,'Current:','','',2,6); +INSERT INTO `graph_templates_item` VALUES (745,'',15,47,2,180,0,9,2,1,'Average:','','',2,7); +INSERT INTO `graph_templates_item` VALUES (746,'',16,47,2,180,0,9,2,3,'Maximum:','','',2,8); +INSERT INTO `graph_templates_item` VALUES (747,'',9,48,2,181,22,7,2,1,'Inbound','','',2,1); +INSERT INTO `graph_templates_item` VALUES (748,'',10,48,2,181,0,9,2,4,'Current:','','',2,2); +INSERT INTO `graph_templates_item` VALUES (749,'',11,48,2,181,0,9,2,1,'Average:','','',2,3); +INSERT INTO `graph_templates_item` VALUES (750,'',12,48,2,181,0,9,2,3,'Maximum:','','on',2,4); +INSERT INTO `graph_templates_item` VALUES (751,'',13,48,2,182,20,4,2,1,'Outbound','','',2,5); +INSERT INTO `graph_templates_item` VALUES (752,'',14,48,2,182,0,9,2,4,'Current:','','',2,6); +INSERT INTO `graph_templates_item` VALUES (753,'',15,48,2,182,0,9,2,1,'Average:','','',2,7); +INSERT INTO `graph_templates_item` VALUES (754,'',16,48,2,182,0,9,2,3,'Maximum:','','',2,8); +INSERT INTO `graph_templates_item` VALUES (755,'',9,49,2,183,22,7,2,1,'Inbound','','',2,1); +INSERT INTO `graph_templates_item` VALUES (756,'',10,49,2,183,0,9,2,4,'Current:','','',2,2); +INSERT INTO `graph_templates_item` VALUES (757,'',11,49,2,183,0,9,2,1,'Average:','','',2,3); +INSERT INTO `graph_templates_item` VALUES (758,'',12,49,2,183,0,9,2,3,'Maximum:','','on',2,4); +INSERT INTO `graph_templates_item` VALUES (759,'',13,49,2,184,20,4,2,1,'Outbound','','',2,5); +INSERT INTO `graph_templates_item` VALUES (760,'',14,49,2,184,0,9,2,4,'Current:','','',2,6); +INSERT INTO `graph_templates_item` VALUES (761,'',15,49,2,184,0,9,2,1,'Average:','','',2,7); +INSERT INTO `graph_templates_item` VALUES (762,'',16,49,2,184,0,9,2,3,'Maximum:','','',2,8); +INSERT INTO `graph_templates_item` VALUES (763,'',9,50,2,185,22,7,2,1,'Inbound','','',2,1); +INSERT INTO `graph_templates_item` VALUES (764,'',10,50,2,185,0,9,2,4,'Current:','','',2,2); +INSERT INTO `graph_templates_item` VALUES (765,'',11,50,2,185,0,9,2,1,'Average:','','',2,3); +INSERT INTO `graph_templates_item` VALUES (766,'',12,50,2,185,0,9,2,3,'Maximum:','','on',2,4); +INSERT INTO `graph_templates_item` VALUES (767,'',13,50,2,186,20,4,2,1,'Outbound','','',2,5); +INSERT INTO `graph_templates_item` VALUES (768,'',14,50,2,186,0,9,2,4,'Current:','','',2,6); +INSERT INTO `graph_templates_item` VALUES (769,'',15,50,2,186,0,9,2,1,'Average:','','',2,7); +INSERT INTO `graph_templates_item` VALUES (770,'',16,50,2,186,0,9,2,3,'Maximum:','','',2,8); +INSERT INTO `graph_templates_item` VALUES (771,'',9,51,2,187,22,7,2,1,'Inbound','','',2,1); +INSERT INTO `graph_templates_item` VALUES (772,'',10,51,2,187,0,9,2,4,'Current:','','',2,2); +INSERT INTO `graph_templates_item` VALUES (773,'',11,51,2,187,0,9,2,1,'Average:','','',2,3); +INSERT INTO `graph_templates_item` VALUES (774,'',12,51,2,187,0,9,2,3,'Maximum:','','on',2,4); +INSERT INTO `graph_templates_item` VALUES (775,'',13,51,2,188,20,4,2,1,'Outbound','','',2,5); +INSERT INTO `graph_templates_item` VALUES (776,'',14,51,2,188,0,9,2,4,'Current:','','',2,6); +INSERT INTO `graph_templates_item` VALUES (777,'',15,51,2,188,0,9,2,1,'Average:','','',2,7); +INSERT INTO `graph_templates_item` VALUES (778,'',16,51,2,188,0,9,2,3,'Maximum:','','',2,8); +INSERT INTO `graph_templates_item` VALUES (779,'',9,52,2,189,22,7,2,1,'Inbound','','',2,1); +INSERT INTO `graph_templates_item` VALUES (780,'',10,52,2,189,0,9,2,4,'Current:','','',2,2); +INSERT INTO `graph_templates_item` VALUES (781,'',11,52,2,189,0,9,2,1,'Average:','','',2,3); +INSERT INTO `graph_templates_item` VALUES (782,'',12,52,2,189,0,9,2,3,'Maximum:','','on',2,4); +INSERT INTO `graph_templates_item` VALUES (783,'',13,52,2,190,20,4,2,1,'Outbound','','',2,5); +INSERT INTO `graph_templates_item` VALUES (784,'',14,52,2,190,0,9,2,4,'Current:','','',2,6); +INSERT INTO `graph_templates_item` VALUES (785,'',15,52,2,190,0,9,2,1,'Average:','','',2,7); +INSERT INTO `graph_templates_item` VALUES (786,'',16,52,2,190,0,9,2,3,'Maximum:','','',2,8); +INSERT INTO `graph_templates_item` VALUES (787,'',9,53,2,191,22,7,2,1,'Inbound','','',2,1); +INSERT INTO `graph_templates_item` VALUES (788,'',10,53,2,191,0,9,2,4,'Current:','','',2,2); +INSERT INTO `graph_templates_item` VALUES (789,'',11,53,2,191,0,9,2,1,'Average:','','',2,3); +INSERT INTO `graph_templates_item` VALUES (790,'',12,53,2,191,0,9,2,3,'Maximum:','','on',2,4); +INSERT INTO `graph_templates_item` VALUES (791,'',13,53,2,192,20,4,2,1,'Outbound','','',2,5); +INSERT INTO `graph_templates_item` VALUES (792,'',14,53,2,192,0,9,2,4,'Current:','','',2,6); +INSERT INTO `graph_templates_item` VALUES (793,'',15,53,2,192,0,9,2,1,'Average:','','',2,7); +INSERT INTO `graph_templates_item` VALUES (794,'',16,53,2,192,0,9,2,3,'Maximum:','','',2,8); +INSERT INTO `graph_templates_item` VALUES (795,'',9,54,2,193,22,7,2,1,'Inbound','','',2,1); +INSERT INTO `graph_templates_item` VALUES (796,'',10,54,2,193,0,9,2,4,'Current:','','',2,2); +INSERT INTO `graph_templates_item` VALUES (797,'',11,54,2,193,0,9,2,1,'Average:','','',2,3); +INSERT INTO `graph_templates_item` VALUES (798,'',12,54,2,193,0,9,2,3,'Maximum:','','on',2,4); +INSERT INTO `graph_templates_item` VALUES (799,'',13,54,2,194,20,4,2,1,'Outbound','','',2,5); +INSERT INTO `graph_templates_item` VALUES (800,'',14,54,2,194,0,9,2,4,'Current:','','',2,6); +INSERT INTO `graph_templates_item` VALUES (801,'',15,54,2,194,0,9,2,1,'Average:','','',2,7); +INSERT INTO `graph_templates_item` VALUES (802,'',16,54,2,194,0,9,2,3,'Maximum:','','',2,8); +INSERT INTO `graph_templates_item` VALUES (803,'',9,55,2,195,22,7,2,1,'Inbound','','',2,1); +INSERT INTO `graph_templates_item` VALUES (804,'',10,55,2,195,0,9,2,4,'Current:','','',2,2); +INSERT INTO `graph_templates_item` VALUES (805,'',11,55,2,195,0,9,2,1,'Average:','','',2,3); +INSERT INTO `graph_templates_item` VALUES (806,'',12,55,2,195,0,9,2,3,'Maximum:','','on',2,4); +INSERT INTO `graph_templates_item` VALUES (807,'',13,55,2,196,20,4,2,1,'Outbound','','',2,5); +INSERT INTO `graph_templates_item` VALUES (808,'',14,55,2,196,0,9,2,4,'Current:','','',2,6); +INSERT INTO `graph_templates_item` VALUES (809,'',15,55,2,196,0,9,2,1,'Average:','','',2,7); +INSERT INTO `graph_templates_item` VALUES (810,'',16,55,2,196,0,9,2,3,'Maximum:','','',2,8); +INSERT INTO `graph_templates_item` VALUES (811,'',9,56,2,197,22,7,2,1,'Inbound','','',2,1); +INSERT INTO `graph_templates_item` VALUES (812,'',10,56,2,197,0,9,2,4,'Current:','','',2,2); +INSERT INTO `graph_templates_item` VALUES (813,'',11,56,2,197,0,9,2,1,'Average:','','',2,3); +INSERT INTO `graph_templates_item` VALUES (814,'',12,56,2,197,0,9,2,3,'Maximum:','','on',2,4); +INSERT INTO `graph_templates_item` VALUES (815,'',13,56,2,198,20,4,2,1,'Outbound','','',2,5); +INSERT INTO `graph_templates_item` VALUES (816,'',14,56,2,198,0,9,2,4,'Current:','','',2,6); +INSERT INTO `graph_templates_item` VALUES (817,'',15,56,2,198,0,9,2,1,'Average:','','',2,7); +INSERT INTO `graph_templates_item` VALUES (818,'',16,56,2,198,0,9,2,3,'Maximum:','','',2,8); +INSERT INTO `graph_templates_item` VALUES (819,'',9,57,2,199,22,7,2,1,'Inbound','','',2,1); +INSERT INTO `graph_templates_item` VALUES (820,'',10,57,2,199,0,9,2,4,'Current:','','',2,2); +INSERT INTO `graph_templates_item` VALUES (821,'',11,57,2,199,0,9,2,1,'Average:','','',2,3); +INSERT INTO `graph_templates_item` VALUES (822,'',12,57,2,199,0,9,2,3,'Maximum:','','on',2,4); +INSERT INTO `graph_templates_item` VALUES (823,'',13,57,2,200,20,4,2,1,'Outbound','','',2,5); +INSERT INTO `graph_templates_item` VALUES (824,'',14,57,2,200,0,9,2,4,'Current:','','',2,6); +INSERT INTO `graph_templates_item` VALUES (825,'',15,57,2,200,0,9,2,1,'Average:','','',2,7); +INSERT INTO `graph_templates_item` VALUES (826,'',16,57,2,200,0,9,2,3,'Maximum:','','',2,8); +INSERT INTO `graph_templates_item` VALUES (827,'',9,58,2,201,22,7,2,1,'Inbound','','',2,1); +INSERT INTO `graph_templates_item` VALUES (828,'',10,58,2,201,0,9,2,4,'Current:','','',2,2); +INSERT INTO `graph_templates_item` VALUES (829,'',11,58,2,201,0,9,2,1,'Average:','','',2,3); +INSERT INTO `graph_templates_item` VALUES (830,'',12,58,2,201,0,9,2,3,'Maximum:','','on',2,4); +INSERT INTO `graph_templates_item` VALUES (831,'',13,58,2,202,20,4,2,1,'Outbound','','',2,5); +INSERT INTO `graph_templates_item` VALUES (832,'',14,58,2,202,0,9,2,4,'Current:','','',2,6); +INSERT INTO `graph_templates_item` VALUES (833,'',15,58,2,202,0,9,2,1,'Average:','','',2,7); +INSERT INTO `graph_templates_item` VALUES (834,'',16,58,2,202,0,9,2,3,'Maximum:','','',2,8); +INSERT INTO `graph_templates_item` VALUES (835,'',9,59,2,203,22,7,2,1,'Inbound','','',2,1); +INSERT INTO `graph_templates_item` VALUES (836,'',10,59,2,203,0,9,2,4,'Current:','','',2,2); +INSERT INTO `graph_templates_item` VALUES (837,'',11,59,2,203,0,9,2,1,'Average:','','',2,3); +INSERT INTO `graph_templates_item` VALUES (838,'',12,59,2,203,0,9,2,3,'Maximum:','','on',2,4); +INSERT INTO `graph_templates_item` VALUES (839,'',13,59,2,204,20,4,2,1,'Outbound','','',2,5); +INSERT INTO `graph_templates_item` VALUES (840,'',14,59,2,204,0,9,2,4,'Current:','','',2,6); +INSERT INTO `graph_templates_item` VALUES (841,'',15,59,2,204,0,9,2,1,'Average:','','',2,7); +INSERT INTO `graph_templates_item` VALUES (842,'',16,59,2,204,0,9,2,3,'Maximum:','','',2,8); +INSERT INTO `graph_templates_item` VALUES (843,'',9,60,2,205,22,7,2,1,'Inbound','','',2,1); +INSERT INTO `graph_templates_item` VALUES (844,'',10,60,2,205,0,9,2,4,'Current:','','',2,2); +INSERT INTO `graph_templates_item` VALUES (845,'',11,60,2,205,0,9,2,1,'Average:','','',2,3); +INSERT INTO `graph_templates_item` VALUES (846,'',12,60,2,205,0,9,2,3,'Maximum:','','on',2,4); +INSERT INTO `graph_templates_item` VALUES (847,'',13,60,2,206,20,4,2,1,'Outbound','','',2,5); +INSERT INTO `graph_templates_item` VALUES (848,'',14,60,2,206,0,9,2,4,'Current:','','',2,6); +INSERT INTO `graph_templates_item` VALUES (849,'',15,60,2,206,0,9,2,1,'Average:','','',2,7); +INSERT INTO `graph_templates_item` VALUES (850,'',16,60,2,206,0,9,2,3,'Maximum:','','',2,8); +INSERT INTO `graph_templates_item` VALUES (851,'',9,61,2,207,22,7,2,1,'Inbound','','',2,1); +INSERT INTO `graph_templates_item` VALUES (852,'',10,61,2,207,0,9,2,4,'Current:','','',2,2); +INSERT INTO `graph_templates_item` VALUES (853,'',11,61,2,207,0,9,2,1,'Average:','','',2,3); +INSERT INTO `graph_templates_item` VALUES (854,'',12,61,2,207,0,9,2,3,'Maximum:','','on',2,4); +INSERT INTO `graph_templates_item` VALUES (855,'',13,61,2,208,20,4,2,1,'Outbound','','',2,5); +INSERT INTO `graph_templates_item` VALUES (856,'',14,61,2,208,0,9,2,4,'Current:','','',2,6); +INSERT INTO `graph_templates_item` VALUES (857,'',15,61,2,208,0,9,2,1,'Average:','','',2,7); +INSERT INTO `graph_templates_item` VALUES (858,'',16,61,2,208,0,9,2,3,'Maximum:','','',2,8); +INSERT INTO `graph_templates_item` VALUES (859,'',9,62,2,209,22,7,2,1,'Inbound','','',2,1); +INSERT INTO `graph_templates_item` VALUES (860,'',10,62,2,209,0,9,2,4,'Current:','','',2,2); +INSERT INTO `graph_templates_item` VALUES (861,'',11,62,2,209,0,9,2,1,'Average:','','',2,3); +INSERT INTO `graph_templates_item` VALUES (862,'',12,62,2,209,0,9,2,3,'Maximum:','','on',2,4); +INSERT INTO `graph_templates_item` VALUES (863,'',13,62,2,210,20,4,2,1,'Outbound','','',2,5); +INSERT INTO `graph_templates_item` VALUES (864,'',14,62,2,210,0,9,2,4,'Current:','','',2,6); +INSERT INTO `graph_templates_item` VALUES (865,'',15,62,2,210,0,9,2,1,'Average:','','',2,7); +INSERT INTO `graph_templates_item` VALUES (866,'',16,62,2,210,0,9,2,3,'Maximum:','','',2,8); +INSERT INTO `graph_templates_item` VALUES (867,'',9,63,2,211,22,7,2,1,'Inbound','','',2,1); +INSERT INTO `graph_templates_item` VALUES (868,'',10,63,2,211,0,9,2,4,'Current:','','',2,2); +INSERT INTO `graph_templates_item` VALUES (869,'',11,63,2,211,0,9,2,1,'Average:','','',2,3); +INSERT INTO `graph_templates_item` VALUES (870,'',12,63,2,211,0,9,2,3,'Maximum:','','on',2,4); +INSERT INTO `graph_templates_item` VALUES (871,'',13,63,2,212,20,4,2,1,'Outbound','','',2,5); +INSERT INTO `graph_templates_item` VALUES (872,'',14,63,2,212,0,9,2,4,'Current:','','',2,6); +INSERT INTO `graph_templates_item` VALUES (873,'',15,63,2,212,0,9,2,1,'Average:','','',2,7); +INSERT INTO `graph_templates_item` VALUES (874,'',16,63,2,212,0,9,2,3,'Maximum:','','',2,8); +INSERT INTO `graph_templates_item` VALUES (875,'',9,64,2,213,22,7,2,1,'Inbound','','',2,1); +INSERT INTO `graph_templates_item` VALUES (876,'',10,64,2,213,0,9,2,4,'Current:','','',2,2); +INSERT INTO `graph_templates_item` VALUES (877,'',11,64,2,213,0,9,2,1,'Average:','','',2,3); +INSERT INTO `graph_templates_item` VALUES (878,'',12,64,2,213,0,9,2,3,'Maximum:','','on',2,4); +INSERT INTO `graph_templates_item` VALUES (879,'',13,64,2,214,20,4,2,1,'Outbound','','',2,5); +INSERT INTO `graph_templates_item` VALUES (880,'',14,64,2,214,0,9,2,4,'Current:','','',2,6); +INSERT INTO `graph_templates_item` VALUES (881,'',15,64,2,214,0,9,2,1,'Average:','','',2,7); +INSERT INTO `graph_templates_item` VALUES (882,'',16,64,2,214,0,9,2,3,'Maximum:','','',2,8); +INSERT INTO `graph_templates_item` VALUES (883,'',139,65,18,215,9,7,0,1,'CPU Usage','','',2,1); +INSERT INTO `graph_templates_item` VALUES (884,'',140,65,18,215,0,9,0,4,'Current:','','',3,2); +INSERT INTO `graph_templates_item` VALUES (885,'',141,65,18,215,0,9,0,1,'Average:','','',3,3); +INSERT INTO `graph_templates_item` VALUES (886,'',142,65,18,215,0,9,0,3,'Maximum:','','',3,4); +INSERT INTO `graph_templates_item` VALUES (887,'',9,66,2,216,22,7,2,1,'Inbound','','',2,1); +INSERT INTO `graph_templates_item` VALUES (888,'',10,66,2,216,0,9,2,4,'Current:','','',2,2); +INSERT INTO `graph_templates_item` VALUES (889,'',11,66,2,216,0,9,2,1,'Average:','','',2,3); +INSERT INTO `graph_templates_item` VALUES (890,'',12,66,2,216,0,9,2,3,'Maximum:','','on',2,4); +INSERT INTO `graph_templates_item` VALUES (891,'',13,66,2,217,20,4,2,1,'Outbound','','',2,5); +INSERT INTO `graph_templates_item` VALUES (892,'',14,66,2,217,0,9,2,4,'Current:','','',2,6); +INSERT INTO `graph_templates_item` VALUES (893,'',15,66,2,217,0,9,2,1,'Average:','','',2,7); +INSERT INTO `graph_templates_item` VALUES (894,'',16,66,2,217,0,9,2,3,'Maximum:','','',2,8); +INSERT INTO `graph_templates_item` VALUES (895,'',9,67,2,218,22,7,2,1,'Inbound','','',2,1); +INSERT INTO `graph_templates_item` VALUES (896,'',10,67,2,218,0,9,2,4,'Current:','','',2,2); +INSERT INTO `graph_templates_item` VALUES (897,'',11,67,2,218,0,9,2,1,'Average:','','',2,3); +INSERT INTO `graph_templates_item` VALUES (898,'',12,67,2,218,0,9,2,3,'Maximum:','','on',2,4); +INSERT INTO `graph_templates_item` VALUES (899,'',13,67,2,219,20,4,2,1,'Outbound','','',2,5); +INSERT INTO `graph_templates_item` VALUES (900,'',14,67,2,219,0,9,2,4,'Current:','','',2,6); +INSERT INTO `graph_templates_item` VALUES (901,'',15,67,2,219,0,9,2,1,'Average:','','',2,7); +INSERT INTO `graph_templates_item` VALUES (902,'',16,67,2,219,0,9,2,3,'Maximum:','','',2,8); +INSERT INTO `graph_templates_item` VALUES (903,'',9,68,2,220,22,7,2,1,'Inbound','','',2,1); +INSERT INTO `graph_templates_item` VALUES (904,'',10,68,2,220,0,9,2,4,'Current:','','',2,2); +INSERT INTO `graph_templates_item` VALUES (905,'',11,68,2,220,0,9,2,1,'Average:','','',2,3); +INSERT INTO `graph_templates_item` VALUES (906,'',12,68,2,220,0,9,2,3,'Maximum:','','on',2,4); +INSERT INTO `graph_templates_item` VALUES (907,'',13,68,2,221,20,4,2,1,'Outbound','','',2,5); +INSERT INTO `graph_templates_item` VALUES (908,'',14,68,2,221,0,9,2,4,'Current:','','',2,6); +INSERT INTO `graph_templates_item` VALUES (909,'',15,68,2,221,0,9,2,1,'Average:','','',2,7); +INSERT INTO `graph_templates_item` VALUES (910,'',16,68,2,221,0,9,2,3,'Maximum:','','',2,8); +INSERT INTO `graph_templates_item` VALUES (911,'',9,69,2,222,22,7,2,1,'Inbound','','',2,1); +INSERT INTO `graph_templates_item` VALUES (912,'',10,69,2,222,0,9,2,4,'Current:','','',2,2); +INSERT INTO `graph_templates_item` VALUES (913,'',11,69,2,222,0,9,2,1,'Average:','','',2,3); +INSERT INTO `graph_templates_item` VALUES (914,'',12,69,2,222,0,9,2,3,'Maximum:','','on',2,4); +INSERT INTO `graph_templates_item` VALUES (915,'',13,69,2,223,20,4,2,1,'Outbound','','',2,5); +INSERT INTO `graph_templates_item` VALUES (916,'',14,69,2,223,0,9,2,4,'Current:','','',2,6); +INSERT INTO `graph_templates_item` VALUES (917,'',15,69,2,223,0,9,2,1,'Average:','','',2,7); +INSERT INTO `graph_templates_item` VALUES (918,'',16,69,2,223,0,9,2,3,'Maximum:','','',2,8); +INSERT INTO `graph_templates_item` VALUES (919,'',9,70,2,224,22,7,2,1,'Inbound','','',2,1); +INSERT INTO `graph_templates_item` VALUES (920,'',10,70,2,224,0,9,2,4,'Current:','','',2,2); +INSERT INTO `graph_templates_item` VALUES (921,'',11,70,2,224,0,9,2,1,'Average:','','',2,3); +INSERT INTO `graph_templates_item` VALUES (922,'',12,70,2,224,0,9,2,3,'Maximum:','','on',2,4); +INSERT INTO `graph_templates_item` VALUES (923,'',13,70,2,225,20,4,2,1,'Outbound','','',2,5); +INSERT INTO `graph_templates_item` VALUES (924,'',14,70,2,225,0,9,2,4,'Current:','','',2,6); +INSERT INTO `graph_templates_item` VALUES (925,'',15,70,2,225,0,9,2,1,'Average:','','',2,7); +INSERT INTO `graph_templates_item` VALUES (926,'',16,70,2,225,0,9,2,3,'Maximum:','','',2,8); +INSERT INTO `graph_templates_item` VALUES (927,'',9,71,2,226,22,7,2,1,'Inbound','','',2,1); +INSERT INTO `graph_templates_item` VALUES (928,'',10,71,2,226,0,9,2,4,'Current:','','',2,2); +INSERT INTO `graph_templates_item` VALUES (929,'',11,71,2,226,0,9,2,1,'Average:','','',2,3); +INSERT INTO `graph_templates_item` VALUES (930,'',12,71,2,226,0,9,2,3,'Maximum:','','on',2,4); +INSERT INTO `graph_templates_item` VALUES (931,'',13,71,2,227,20,4,2,1,'Outbound','','',2,5); +INSERT INTO `graph_templates_item` VALUES (932,'',14,71,2,227,0,9,2,4,'Current:','','',2,6); +INSERT INTO `graph_templates_item` VALUES (933,'',15,71,2,227,0,9,2,1,'Average:','','',2,7); +INSERT INTO `graph_templates_item` VALUES (934,'',16,71,2,227,0,9,2,3,'Maximum:','','',2,8); +INSERT INTO `graph_templates_item` VALUES (935,'',9,72,2,228,22,7,2,1,'Inbound','','',2,1); +INSERT INTO `graph_templates_item` VALUES (936,'',10,72,2,228,0,9,2,4,'Current:','','',2,2); +INSERT INTO `graph_templates_item` VALUES (937,'',11,72,2,228,0,9,2,1,'Average:','','',2,3); +INSERT INTO `graph_templates_item` VALUES (938,'',12,72,2,228,0,9,2,3,'Maximum:','','on',2,4); +INSERT INTO `graph_templates_item` VALUES (939,'',13,72,2,229,20,4,2,1,'Outbound','','',2,5); +INSERT INTO `graph_templates_item` VALUES (940,'',14,72,2,229,0,9,2,4,'Current:','','',2,6); +INSERT INTO `graph_templates_item` VALUES (941,'',15,72,2,229,0,9,2,1,'Average:','','',2,7); +INSERT INTO `graph_templates_item` VALUES (942,'',16,72,2,229,0,9,2,3,'Maximum:','','',2,8); +INSERT INTO `graph_templates_item` VALUES (943,'',9,73,2,230,22,7,2,1,'Inbound','','',2,1); +INSERT INTO `graph_templates_item` VALUES (944,'',10,73,2,230,0,9,2,4,'Current:','','',2,2); +INSERT INTO `graph_templates_item` VALUES (945,'',11,73,2,230,0,9,2,1,'Average:','','',2,3); +INSERT INTO `graph_templates_item` VALUES (946,'',12,73,2,230,0,9,2,3,'Maximum:','','on',2,4); +INSERT INTO `graph_templates_item` VALUES (947,'',13,73,2,231,20,4,2,1,'Outbound','','',2,5); +INSERT INTO `graph_templates_item` VALUES (948,'',14,73,2,231,0,9,2,4,'Current:','','',2,6); +INSERT INTO `graph_templates_item` VALUES (949,'',15,73,2,231,0,9,2,1,'Average:','','',2,7); +INSERT INTO `graph_templates_item` VALUES (950,'',16,73,2,231,0,9,2,3,'Maximum:','','',2,8); +INSERT INTO `graph_templates_item` VALUES (951,'',9,74,2,232,22,7,2,1,'Inbound','','',2,1); +INSERT INTO `graph_templates_item` VALUES (952,'',10,74,2,232,0,9,2,4,'Current:','','',2,2); +INSERT INTO `graph_templates_item` VALUES (953,'',11,74,2,232,0,9,2,1,'Average:','','',2,3); +INSERT INTO `graph_templates_item` VALUES (954,'',12,74,2,232,0,9,2,3,'Maximum:','','on',2,4); +INSERT INTO `graph_templates_item` VALUES (955,'',13,74,2,233,20,4,2,1,'Outbound','','',2,5); +INSERT INTO `graph_templates_item` VALUES (956,'',14,74,2,233,0,9,2,4,'Current:','','',2,6); +INSERT INTO `graph_templates_item` VALUES (957,'',15,74,2,233,0,9,2,1,'Average:','','',2,7); +INSERT INTO `graph_templates_item` VALUES (958,'',16,74,2,233,0,9,2,3,'Maximum:','','',2,8); +INSERT INTO `graph_templates_item` VALUES (959,'',9,75,2,234,22,7,2,1,'Inbound','','',2,1); +INSERT INTO `graph_templates_item` VALUES (960,'',10,75,2,234,0,9,2,4,'Current:','','',2,2); +INSERT INTO `graph_templates_item` VALUES (961,'',11,75,2,234,0,9,2,1,'Average:','','',2,3); +INSERT INTO `graph_templates_item` VALUES (962,'',12,75,2,234,0,9,2,3,'Maximum:','','on',2,4); +INSERT INTO `graph_templates_item` VALUES (963,'',13,75,2,235,20,4,2,1,'Outbound','','',2,5); +INSERT INTO `graph_templates_item` VALUES (964,'',14,75,2,235,0,9,2,4,'Current:','','',2,6); +INSERT INTO `graph_templates_item` VALUES (965,'',15,75,2,235,0,9,2,1,'Average:','','',2,7); +INSERT INTO `graph_templates_item` VALUES (966,'',16,75,2,235,0,9,2,3,'Maximum:','','',2,8); +INSERT INTO `graph_templates_item` VALUES (967,'',9,76,2,236,22,7,2,1,'Inbound','','',2,1); +INSERT INTO `graph_templates_item` VALUES (968,'',10,76,2,236,0,9,2,4,'Current:','','',2,2); +INSERT INTO `graph_templates_item` VALUES (969,'',11,76,2,236,0,9,2,1,'Average:','','',2,3); +INSERT INTO `graph_templates_item` VALUES (970,'',12,76,2,236,0,9,2,3,'Maximum:','','on',2,4); +INSERT INTO `graph_templates_item` VALUES (971,'',13,76,2,237,20,4,2,1,'Outbound','','',2,5); +INSERT INTO `graph_templates_item` VALUES (972,'',14,76,2,237,0,9,2,4,'Current:','','',2,6); +INSERT INTO `graph_templates_item` VALUES (973,'',15,76,2,237,0,9,2,1,'Average:','','',2,7); +INSERT INTO `graph_templates_item` VALUES (974,'',16,76,2,237,0,9,2,3,'Maximum:','','',2,8); +INSERT INTO `graph_templates_item` VALUES (975,'',9,77,2,238,22,7,2,1,'Inbound','','',2,1); +INSERT INTO `graph_templates_item` VALUES (976,'',10,77,2,238,0,9,2,4,'Current:','','',2,2); +INSERT INTO `graph_templates_item` VALUES (977,'',11,77,2,238,0,9,2,1,'Average:','','',2,3); +INSERT INTO `graph_templates_item` VALUES (978,'',12,77,2,238,0,9,2,3,'Maximum:','','on',2,4); +INSERT INTO `graph_templates_item` VALUES (979,'',13,77,2,239,20,4,2,1,'Outbound','','',2,5); +INSERT INTO `graph_templates_item` VALUES (980,'',14,77,2,239,0,9,2,4,'Current:','','',2,6); +INSERT INTO `graph_templates_item` VALUES (981,'',15,77,2,239,0,9,2,1,'Average:','','',2,7); +INSERT INTO `graph_templates_item` VALUES (982,'',16,77,2,239,0,9,2,3,'Maximum:','','',2,8); +INSERT INTO `graph_templates_item` VALUES (983,'',9,78,2,240,22,7,2,1,'Inbound','','',2,1); +INSERT INTO `graph_templates_item` VALUES (984,'',10,78,2,240,0,9,2,4,'Current:','','',2,2); +INSERT INTO `graph_templates_item` VALUES (985,'',11,78,2,240,0,9,2,1,'Average:','','',2,3); +INSERT INTO `graph_templates_item` VALUES (986,'',12,78,2,240,0,9,2,3,'Maximum:','','on',2,4); +INSERT INTO `graph_templates_item` VALUES (987,'',13,78,2,241,20,4,2,1,'Outbound','','',2,5); +INSERT INTO `graph_templates_item` VALUES (988,'',14,78,2,241,0,9,2,4,'Current:','','',2,6); +INSERT INTO `graph_templates_item` VALUES (989,'',15,78,2,241,0,9,2,1,'Average:','','',2,7); +INSERT INTO `graph_templates_item` VALUES (990,'',16,78,2,241,0,9,2,3,'Maximum:','','',2,8); +INSERT INTO `graph_templates_item` VALUES (991,'',9,79,2,242,22,7,2,1,'Inbound','','',2,1); +INSERT INTO `graph_templates_item` VALUES (992,'',10,79,2,242,0,9,2,4,'Current:','','',2,2); +INSERT INTO `graph_templates_item` VALUES (993,'',11,79,2,242,0,9,2,1,'Average:','','',2,3); +INSERT INTO `graph_templates_item` VALUES (994,'',12,79,2,242,0,9,2,3,'Maximum:','','on',2,4); +INSERT INTO `graph_templates_item` VALUES (995,'',13,79,2,243,20,4,2,1,'Outbound','','',2,5); +INSERT INTO `graph_templates_item` VALUES (996,'',14,79,2,243,0,9,2,4,'Current:','','',2,6); +INSERT INTO `graph_templates_item` VALUES (997,'',15,79,2,243,0,9,2,1,'Average:','','',2,7); +INSERT INTO `graph_templates_item` VALUES (998,'',16,79,2,243,0,9,2,3,'Maximum:','','',2,8); +INSERT INTO `graph_templates_item` VALUES (999,'',9,80,2,244,22,7,2,1,'Inbound','','',2,1); +INSERT INTO `graph_templates_item` VALUES (1000,'',10,80,2,244,0,9,2,4,'Current:','','',2,2); +INSERT INTO `graph_templates_item` VALUES (1001,'',11,80,2,244,0,9,2,1,'Average:','','',2,3); +INSERT INTO `graph_templates_item` VALUES (1002,'',12,80,2,244,0,9,2,3,'Maximum:','','on',2,4); +INSERT INTO `graph_templates_item` VALUES (1003,'',13,80,2,245,20,4,2,1,'Outbound','','',2,5); +INSERT INTO `graph_templates_item` VALUES (1004,'',14,80,2,245,0,9,2,4,'Current:','','',2,6); +INSERT INTO `graph_templates_item` VALUES (1005,'',15,80,2,245,0,9,2,1,'Average:','','',2,7); +INSERT INTO `graph_templates_item` VALUES (1006,'',16,80,2,245,0,9,2,3,'Maximum:','','',2,8); +INSERT INTO `graph_templates_item` VALUES (1007,'',9,81,2,246,22,7,2,1,'Inbound','','',2,1); +INSERT INTO `graph_templates_item` VALUES (1008,'',10,81,2,246,0,9,2,4,'Current:','','',2,2); +INSERT INTO `graph_templates_item` VALUES (1009,'',11,81,2,246,0,9,2,1,'Average:','','',2,3); +INSERT INTO `graph_templates_item` VALUES (1010,'',12,81,2,246,0,9,2,3,'Maximum:','','on',2,4); +INSERT INTO `graph_templates_item` VALUES (1011,'',13,81,2,247,20,4,2,1,'Outbound','','',2,5); +INSERT INTO `graph_templates_item` VALUES (1012,'',14,81,2,247,0,9,2,4,'Current:','','',2,6); +INSERT INTO `graph_templates_item` VALUES (1013,'',15,81,2,247,0,9,2,1,'Average:','','',2,7); +INSERT INTO `graph_templates_item` VALUES (1014,'',16,81,2,247,0,9,2,3,'Maximum:','','',2,8); +INSERT INTO `graph_templates_item` VALUES (1015,'',9,82,2,248,22,7,2,1,'Inbound','','',2,1); +INSERT INTO `graph_templates_item` VALUES (1016,'',10,82,2,248,0,9,2,4,'Current:','','',2,2); +INSERT INTO `graph_templates_item` VALUES (1017,'',11,82,2,248,0,9,2,1,'Average:','','',2,3); +INSERT INTO `graph_templates_item` VALUES (1018,'',12,82,2,248,0,9,2,3,'Maximum:','','on',2,4); +INSERT INTO `graph_templates_item` VALUES (1019,'',13,82,2,249,20,4,2,1,'Outbound','','',2,5); +INSERT INTO `graph_templates_item` VALUES (1020,'',14,82,2,249,0,9,2,4,'Current:','','',2,6); +INSERT INTO `graph_templates_item` VALUES (1021,'',15,82,2,249,0,9,2,1,'Average:','','',2,7); +INSERT INTO `graph_templates_item` VALUES (1022,'',16,82,2,249,0,9,2,3,'Maximum:','','',2,8); +INSERT INTO `graph_templates_item` VALUES (1023,'',9,83,2,250,22,7,2,1,'Inbound','','',2,1); +INSERT INTO `graph_templates_item` VALUES (1024,'',10,83,2,250,0,9,2,4,'Current:','','',2,2); +INSERT INTO `graph_templates_item` VALUES (1025,'',11,83,2,250,0,9,2,1,'Average:','','',2,3); +INSERT INTO `graph_templates_item` VALUES (1026,'',12,83,2,250,0,9,2,3,'Maximum:','','on',2,4); +INSERT INTO `graph_templates_item` VALUES (1027,'',13,83,2,251,20,4,2,1,'Outbound','','',2,5); +INSERT INTO `graph_templates_item` VALUES (1028,'',14,83,2,251,0,9,2,4,'Current:','','',2,6); +INSERT INTO `graph_templates_item` VALUES (1029,'',15,83,2,251,0,9,2,1,'Average:','','',2,7); +INSERT INTO `graph_templates_item` VALUES (1030,'',16,83,2,251,0,9,2,3,'Maximum:','','',2,8); +INSERT INTO `graph_templates_item` VALUES (1031,'',9,84,2,252,22,7,2,1,'Inbound','','',2,1); +INSERT INTO `graph_templates_item` VALUES (1032,'',10,84,2,252,0,9,2,4,'Current:','','',2,2); +INSERT INTO `graph_templates_item` VALUES (1033,'',11,84,2,252,0,9,2,1,'Average:','','',2,3); +INSERT INTO `graph_templates_item` VALUES (1034,'',12,84,2,252,0,9,2,3,'Maximum:','','on',2,4); +INSERT INTO `graph_templates_item` VALUES (1035,'',13,84,2,253,20,4,2,1,'Outbound','','',2,5); +INSERT INTO `graph_templates_item` VALUES (1036,'',14,84,2,253,0,9,2,4,'Current:','','',2,6); +INSERT INTO `graph_templates_item` VALUES (1037,'',15,84,2,253,0,9,2,1,'Average:','','',2,7); +INSERT INTO `graph_templates_item` VALUES (1038,'',16,84,2,253,0,9,2,3,'Maximum:','','',2,8); +INSERT INTO `graph_templates_item` VALUES (1039,'',9,85,2,254,22,7,2,1,'Inbound','','',2,1); +INSERT INTO `graph_templates_item` VALUES (1040,'',10,85,2,254,0,9,2,4,'Current:','','',2,2); +INSERT INTO `graph_templates_item` VALUES (1041,'',11,85,2,254,0,9,2,1,'Average:','','',2,3); +INSERT INTO `graph_templates_item` VALUES (1042,'',12,85,2,254,0,9,2,3,'Maximum:','','on',2,4); +INSERT INTO `graph_templates_item` VALUES (1043,'',13,85,2,255,20,4,2,1,'Outbound','','',2,5); +INSERT INTO `graph_templates_item` VALUES (1044,'',14,85,2,255,0,9,2,4,'Current:','','',2,6); +INSERT INTO `graph_templates_item` VALUES (1045,'',15,85,2,255,0,9,2,1,'Average:','','',2,7); +INSERT INTO `graph_templates_item` VALUES (1046,'',16,85,2,255,0,9,2,3,'Maximum:','','',2,8); +INSERT INTO `graph_templates_item` VALUES (1047,'',9,86,2,256,22,7,2,1,'Inbound','','',2,1); +INSERT INTO `graph_templates_item` VALUES (1048,'',10,86,2,256,0,9,2,4,'Current:','','',2,2); +INSERT INTO `graph_templates_item` VALUES (1049,'',11,86,2,256,0,9,2,1,'Average:','','',2,3); +INSERT INTO `graph_templates_item` VALUES (1050,'',12,86,2,256,0,9,2,3,'Maximum:','','on',2,4); +INSERT INTO `graph_templates_item` VALUES (1051,'',13,86,2,257,20,4,2,1,'Outbound','','',2,5); +INSERT INTO `graph_templates_item` VALUES (1052,'',14,86,2,257,0,9,2,4,'Current:','','',2,6); +INSERT INTO `graph_templates_item` VALUES (1053,'',15,86,2,257,0,9,2,1,'Average:','','',2,7); +INSERT INTO `graph_templates_item` VALUES (1054,'',16,86,2,257,0,9,2,3,'Maximum:','','',2,8); +INSERT INTO `graph_templates_item` VALUES (1055,'',9,87,2,258,22,7,2,1,'Inbound','','',2,1); +INSERT INTO `graph_templates_item` VALUES (1056,'',10,87,2,258,0,9,2,4,'Current:','','',2,2); +INSERT INTO `graph_templates_item` VALUES (1057,'',11,87,2,258,0,9,2,1,'Average:','','',2,3); +INSERT INTO `graph_templates_item` VALUES (1058,'',12,87,2,258,0,9,2,3,'Maximum:','','on',2,4); +INSERT INTO `graph_templates_item` VALUES (1059,'',13,87,2,259,20,4,2,1,'Outbound','','',2,5); +INSERT INTO `graph_templates_item` VALUES (1060,'',14,87,2,259,0,9,2,4,'Current:','','',2,6); +INSERT INTO `graph_templates_item` VALUES (1061,'',15,87,2,259,0,9,2,1,'Average:','','',2,7); +INSERT INTO `graph_templates_item` VALUES (1062,'',16,87,2,259,0,9,2,3,'Maximum:','','',2,8); +INSERT INTO `graph_templates_item` VALUES (1063,'',9,88,2,260,22,7,2,1,'Inbound','','',2,1); +INSERT INTO `graph_templates_item` VALUES (1064,'',10,88,2,260,0,9,2,4,'Current:','','',2,2); +INSERT INTO `graph_templates_item` VALUES (1065,'',11,88,2,260,0,9,2,1,'Average:','','',2,3); +INSERT INTO `graph_templates_item` VALUES (1066,'',12,88,2,260,0,9,2,3,'Maximum:','','on',2,4); +INSERT INTO `graph_templates_item` VALUES (1067,'',13,88,2,261,20,4,2,1,'Outbound','','',2,5); +INSERT INTO `graph_templates_item` VALUES (1068,'',14,88,2,261,0,9,2,4,'Current:','','',2,6); +INSERT INTO `graph_templates_item` VALUES (1069,'',15,88,2,261,0,9,2,1,'Average:','','',2,7); +INSERT INTO `graph_templates_item` VALUES (1070,'',16,88,2,261,0,9,2,3,'Maximum:','','',2,8); +INSERT INTO `graph_templates_item` VALUES (1071,'',9,89,2,262,22,7,2,1,'Inbound','','',2,1); +INSERT INTO `graph_templates_item` VALUES (1072,'',10,89,2,262,0,9,2,4,'Current:','','',2,2); +INSERT INTO `graph_templates_item` VALUES (1073,'',11,89,2,262,0,9,2,1,'Average:','','',2,3); +INSERT INTO `graph_templates_item` VALUES (1074,'',12,89,2,262,0,9,2,3,'Maximum:','','on',2,4); +INSERT INTO `graph_templates_item` VALUES (1075,'',13,89,2,263,20,4,2,1,'Outbound','','',2,5); +INSERT INTO `graph_templates_item` VALUES (1076,'',14,89,2,263,0,9,2,4,'Current:','','',2,6); +INSERT INTO `graph_templates_item` VALUES (1077,'',15,89,2,263,0,9,2,1,'Average:','','',2,7); +INSERT INTO `graph_templates_item` VALUES (1078,'',16,89,2,263,0,9,2,3,'Maximum:','','',2,8); +INSERT INTO `graph_templates_item` VALUES (1079,'',9,90,2,264,22,7,2,1,'Inbound','','',2,1); +INSERT INTO `graph_templates_item` VALUES (1080,'',10,90,2,264,0,9,2,4,'Current:','','',2,2); +INSERT INTO `graph_templates_item` VALUES (1081,'',11,90,2,264,0,9,2,1,'Average:','','',2,3); +INSERT INTO `graph_templates_item` VALUES (1082,'',12,90,2,264,0,9,2,3,'Maximum:','','on',2,4); +INSERT INTO `graph_templates_item` VALUES (1083,'',13,90,2,265,20,4,2,1,'Outbound','','',2,5); +INSERT INTO `graph_templates_item` VALUES (1084,'',14,90,2,265,0,9,2,4,'Current:','','',2,6); +INSERT INTO `graph_templates_item` VALUES (1085,'',15,90,2,265,0,9,2,1,'Average:','','',2,7); +INSERT INTO `graph_templates_item` VALUES (1086,'',16,90,2,265,0,9,2,3,'Maximum:','','',2,8); +INSERT INTO `graph_templates_item` VALUES (1087,'',9,91,2,266,22,7,2,1,'Inbound','','',2,1); +INSERT INTO `graph_templates_item` VALUES (1088,'',10,91,2,266,0,9,2,4,'Current:','','',2,2); +INSERT INTO `graph_templates_item` VALUES (1089,'',11,91,2,266,0,9,2,1,'Average:','','',2,3); +INSERT INTO `graph_templates_item` VALUES (1090,'',12,91,2,266,0,9,2,3,'Maximum:','','on',2,4); +INSERT INTO `graph_templates_item` VALUES (1091,'',13,91,2,267,20,4,2,1,'Outbound','','',2,5); +INSERT INTO `graph_templates_item` VALUES (1092,'',14,91,2,267,0,9,2,4,'Current:','','',2,6); +INSERT INTO `graph_templates_item` VALUES (1093,'',15,91,2,267,0,9,2,1,'Average:','','',2,7); +INSERT INTO `graph_templates_item` VALUES (1094,'',16,91,2,267,0,9,2,3,'Maximum:','','',2,8); +INSERT INTO `graph_templates_item` VALUES (1095,'',9,92,2,268,22,7,2,1,'Inbound','','',2,1); +INSERT INTO `graph_templates_item` VALUES (1096,'',10,92,2,268,0,9,2,4,'Current:','','',2,2); +INSERT INTO `graph_templates_item` VALUES (1097,'',11,92,2,268,0,9,2,1,'Average:','','',2,3); +INSERT INTO `graph_templates_item` VALUES (1098,'',12,92,2,268,0,9,2,3,'Maximum:','','on',2,4); +INSERT INTO `graph_templates_item` VALUES (1099,'',13,92,2,269,20,4,2,1,'Outbound','','',2,5); +INSERT INTO `graph_templates_item` VALUES (1100,'',14,92,2,269,0,9,2,4,'Current:','','',2,6); +INSERT INTO `graph_templates_item` VALUES (1101,'',15,92,2,269,0,9,2,1,'Average:','','',2,7); +INSERT INTO `graph_templates_item` VALUES (1102,'',16,92,2,269,0,9,2,3,'Maximum:','','',2,8); +INSERT INTO `graph_templates_item` VALUES (1103,'',9,93,2,270,22,7,2,1,'Inbound','','',2,1); +INSERT INTO `graph_templates_item` VALUES (1104,'',10,93,2,270,0,9,2,4,'Current:','','',2,2); +INSERT INTO `graph_templates_item` VALUES (1105,'',11,93,2,270,0,9,2,1,'Average:','','',2,3); +INSERT INTO `graph_templates_item` VALUES (1106,'',12,93,2,270,0,9,2,3,'Maximum:','','on',2,4); +INSERT INTO `graph_templates_item` VALUES (1107,'',13,93,2,271,20,4,2,1,'Outbound','','',2,5); +INSERT INTO `graph_templates_item` VALUES (1108,'',14,93,2,271,0,9,2,4,'Current:','','',2,6); +INSERT INTO `graph_templates_item` VALUES (1109,'',15,93,2,271,0,9,2,1,'Average:','','',2,7); +INSERT INTO `graph_templates_item` VALUES (1110,'',16,93,2,271,0,9,2,3,'Maximum:','','',2,8); +INSERT INTO `graph_templates_item` VALUES (1111,'',9,94,2,272,22,7,2,1,'Inbound','','',2,1); +INSERT INTO `graph_templates_item` VALUES (1112,'',10,94,2,272,0,9,2,4,'Current:','','',2,2); +INSERT INTO `graph_templates_item` VALUES (1113,'',11,94,2,272,0,9,2,1,'Average:','','',2,3); +INSERT INTO `graph_templates_item` VALUES (1114,'',12,94,2,272,0,9,2,3,'Maximum:','','on',2,4); +INSERT INTO `graph_templates_item` VALUES (1115,'',13,94,2,273,20,4,2,1,'Outbound','','',2,5); +INSERT INTO `graph_templates_item` VALUES (1116,'',14,94,2,273,0,9,2,4,'Current:','','',2,6); +INSERT INTO `graph_templates_item` VALUES (1117,'',15,94,2,273,0,9,2,1,'Average:','','',2,7); +INSERT INTO `graph_templates_item` VALUES (1118,'',16,94,2,273,0,9,2,3,'Maximum:','','',2,8); +INSERT INTO `graph_templates_item` VALUES (1119,'',139,95,18,274,9,7,0,1,'CPU Usage','','',2,1); +INSERT INTO `graph_templates_item` VALUES (1120,'',140,95,18,274,0,9,0,4,'Current:','','',3,2); +INSERT INTO `graph_templates_item` VALUES (1121,'',141,95,18,274,0,9,0,1,'Average:','','',3,3); +INSERT INTO `graph_templates_item` VALUES (1122,'',142,95,18,274,0,9,0,3,'Maximum:','','',3,4); +INSERT INTO `graph_templates_item` VALUES (1123,'',9,96,2,275,22,7,2,1,'Inbound','','',2,1); +INSERT INTO `graph_templates_item` VALUES (1124,'',10,96,2,275,0,9,2,4,'Current:','','',2,2); +INSERT INTO `graph_templates_item` VALUES (1125,'',11,96,2,275,0,9,2,1,'Average:','','',2,3); +INSERT INTO `graph_templates_item` VALUES (1126,'',12,96,2,275,0,9,2,3,'Maximum:','','on',2,4); +INSERT INTO `graph_templates_item` VALUES (1127,'',13,96,2,276,20,4,2,1,'Outbound','','',2,5); +INSERT INTO `graph_templates_item` VALUES (1128,'',14,96,2,276,0,9,2,4,'Current:','','',2,6); +INSERT INTO `graph_templates_item` VALUES (1129,'',15,96,2,276,0,9,2,1,'Average:','','',2,7); +INSERT INTO `graph_templates_item` VALUES (1130,'',16,96,2,276,0,9,2,3,'Maximum:','','',2,8); +INSERT INTO `graph_templates_item` VALUES (1131,'',9,97,2,277,22,7,2,1,'Inbound','','',2,1); +INSERT INTO `graph_templates_item` VALUES (1132,'',10,97,2,277,0,9,2,4,'Current:','','',2,2); +INSERT INTO `graph_templates_item` VALUES (1133,'',11,97,2,277,0,9,2,1,'Average:','','',2,3); +INSERT INTO `graph_templates_item` VALUES (1134,'',12,97,2,277,0,9,2,3,'Maximum:','','on',2,4); +INSERT INTO `graph_templates_item` VALUES (1135,'',13,97,2,278,20,4,2,1,'Outbound','','',2,5); +INSERT INTO `graph_templates_item` VALUES (1136,'',14,97,2,278,0,9,2,4,'Current:','','',2,6); +INSERT INTO `graph_templates_item` VALUES (1137,'',15,97,2,278,0,9,2,1,'Average:','','',2,7); +INSERT INTO `graph_templates_item` VALUES (1138,'',16,97,2,278,0,9,2,3,'Maximum:','','',2,8); +INSERT INTO `graph_templates_item` VALUES (1139,'',9,98,2,279,22,7,2,1,'Inbound','','',2,1); +INSERT INTO `graph_templates_item` VALUES (1140,'',10,98,2,279,0,9,2,4,'Current:','','',2,2); +INSERT INTO `graph_templates_item` VALUES (1141,'',11,98,2,279,0,9,2,1,'Average:','','',2,3); +INSERT INTO `graph_templates_item` VALUES (1142,'',12,98,2,279,0,9,2,3,'Maximum:','','on',2,4); +INSERT INTO `graph_templates_item` VALUES (1143,'',13,98,2,280,20,4,2,1,'Outbound','','',2,5); +INSERT INTO `graph_templates_item` VALUES (1144,'',14,98,2,280,0,9,2,4,'Current:','','',2,6); +INSERT INTO `graph_templates_item` VALUES (1145,'',15,98,2,280,0,9,2,1,'Average:','','',2,7); +INSERT INTO `graph_templates_item` VALUES (1146,'',16,98,2,280,0,9,2,3,'Maximum:','','',2,8); +INSERT INTO `graph_templates_item` VALUES (1147,'',9,99,2,281,22,7,2,1,'Inbound','','',2,1); +INSERT INTO `graph_templates_item` VALUES (1148,'',10,99,2,281,0,9,2,4,'Current:','','',2,2); +INSERT INTO `graph_templates_item` VALUES (1149,'',11,99,2,281,0,9,2,1,'Average:','','',2,3); +INSERT INTO `graph_templates_item` VALUES (1150,'',12,99,2,281,0,9,2,3,'Maximum:','','on',2,4); +INSERT INTO `graph_templates_item` VALUES (1151,'',13,99,2,282,20,4,2,1,'Outbound','','',2,5); +INSERT INTO `graph_templates_item` VALUES (1152,'',14,99,2,282,0,9,2,4,'Current:','','',2,6); +INSERT INTO `graph_templates_item` VALUES (1153,'',15,99,2,282,0,9,2,1,'Average:','','',2,7); +INSERT INTO `graph_templates_item` VALUES (1154,'',16,99,2,282,0,9,2,3,'Maximum:','','',2,8); +INSERT INTO `graph_templates_item` VALUES (1155,'',9,100,2,283,22,7,2,1,'Inbound','','',2,1); +INSERT INTO `graph_templates_item` VALUES (1156,'',10,100,2,283,0,9,2,4,'Current:','','',2,2); +INSERT INTO `graph_templates_item` VALUES (1157,'',11,100,2,283,0,9,2,1,'Average:','','',2,3); +INSERT INTO `graph_templates_item` VALUES (1158,'',12,100,2,283,0,9,2,3,'Maximum:','','on',2,4); +INSERT INTO `graph_templates_item` VALUES (1159,'',13,100,2,284,20,4,2,1,'Outbound','','',2,5); +INSERT INTO `graph_templates_item` VALUES (1160,'',14,100,2,284,0,9,2,4,'Current:','','',2,6); +INSERT INTO `graph_templates_item` VALUES (1161,'',15,100,2,284,0,9,2,1,'Average:','','',2,7); +INSERT INTO `graph_templates_item` VALUES (1162,'',16,100,2,284,0,9,2,3,'Maximum:','','',2,8); +INSERT INTO `graph_templates_item` VALUES (1163,'',9,101,2,285,22,7,2,1,'Inbound','','',2,1); +INSERT INTO `graph_templates_item` VALUES (1164,'',10,101,2,285,0,9,2,4,'Current:','','',2,2); +INSERT INTO `graph_templates_item` VALUES (1165,'',11,101,2,285,0,9,2,1,'Average:','','',2,3); +INSERT INTO `graph_templates_item` VALUES (1166,'',12,101,2,285,0,9,2,3,'Maximum:','','on',2,4); +INSERT INTO `graph_templates_item` VALUES (1167,'',13,101,2,286,20,4,2,1,'Outbound','','',2,5); +INSERT INTO `graph_templates_item` VALUES (1168,'',14,101,2,286,0,9,2,4,'Current:','','',2,6); +INSERT INTO `graph_templates_item` VALUES (1169,'',15,101,2,286,0,9,2,1,'Average:','','',2,7); +INSERT INTO `graph_templates_item` VALUES (1170,'',16,101,2,286,0,9,2,3,'Maximum:','','',2,8); +INSERT INTO `graph_templates_item` VALUES (1171,'',9,102,2,287,22,7,2,1,'Inbound','','',2,1); +INSERT INTO `graph_templates_item` VALUES (1172,'',10,102,2,287,0,9,2,4,'Current:','','',2,2); +INSERT INTO `graph_templates_item` VALUES (1173,'',11,102,2,287,0,9,2,1,'Average:','','',2,3); +INSERT INTO `graph_templates_item` VALUES (1174,'',12,102,2,287,0,9,2,3,'Maximum:','','on',2,4); +INSERT INTO `graph_templates_item` VALUES (1175,'',13,102,2,288,20,4,2,1,'Outbound','','',2,5); +INSERT INTO `graph_templates_item` VALUES (1176,'',14,102,2,288,0,9,2,4,'Current:','','',2,6); +INSERT INTO `graph_templates_item` VALUES (1177,'',15,102,2,288,0,9,2,1,'Average:','','',2,7); +INSERT INTO `graph_templates_item` VALUES (1178,'',16,102,2,288,0,9,2,3,'Maximum:','','',2,8); +INSERT INTO `graph_templates_item` VALUES (1179,'',9,103,2,289,22,7,2,1,'Inbound','','',2,1); +INSERT INTO `graph_templates_item` VALUES (1180,'',10,103,2,289,0,9,2,4,'Current:','','',2,2); +INSERT INTO `graph_templates_item` VALUES (1181,'',11,103,2,289,0,9,2,1,'Average:','','',2,3); +INSERT INTO `graph_templates_item` VALUES (1182,'',12,103,2,289,0,9,2,3,'Maximum:','','on',2,4); +INSERT INTO `graph_templates_item` VALUES (1183,'',13,103,2,290,20,4,2,1,'Outbound','','',2,5); +INSERT INTO `graph_templates_item` VALUES (1184,'',14,103,2,290,0,9,2,4,'Current:','','',2,6); +INSERT INTO `graph_templates_item` VALUES (1185,'',15,103,2,290,0,9,2,1,'Average:','','',2,7); +INSERT INTO `graph_templates_item` VALUES (1186,'',16,103,2,290,0,9,2,3,'Maximum:','','',2,8); +INSERT INTO `graph_templates_item` VALUES (1187,'',9,104,2,291,22,7,2,1,'Inbound','','',2,1); +INSERT INTO `graph_templates_item` VALUES (1188,'',10,104,2,291,0,9,2,4,'Current:','','',2,2); +INSERT INTO `graph_templates_item` VALUES (1189,'',11,104,2,291,0,9,2,1,'Average:','','',2,3); +INSERT INTO `graph_templates_item` VALUES (1190,'',12,104,2,291,0,9,2,3,'Maximum:','','on',2,4); +INSERT INTO `graph_templates_item` VALUES (1191,'',13,104,2,292,20,4,2,1,'Outbound','','',2,5); +INSERT INTO `graph_templates_item` VALUES (1192,'',14,104,2,292,0,9,2,4,'Current:','','',2,6); +INSERT INTO `graph_templates_item` VALUES (1193,'',15,104,2,292,0,9,2,1,'Average:','','',2,7); +INSERT INTO `graph_templates_item` VALUES (1194,'',16,104,2,292,0,9,2,3,'Maximum:','','',2,8); +INSERT INTO `graph_templates_item` VALUES (1195,'',9,105,2,293,22,7,2,1,'Inbound','','',2,1); +INSERT INTO `graph_templates_item` VALUES (1196,'',10,105,2,293,0,9,2,4,'Current:','','',2,2); +INSERT INTO `graph_templates_item` VALUES (1197,'',11,105,2,293,0,9,2,1,'Average:','','',2,3); +INSERT INTO `graph_templates_item` VALUES (1198,'',12,105,2,293,0,9,2,3,'Maximum:','','on',2,4); +INSERT INTO `graph_templates_item` VALUES (1199,'',13,105,2,294,20,4,2,1,'Outbound','','',2,5); +INSERT INTO `graph_templates_item` VALUES (1200,'',14,105,2,294,0,9,2,4,'Current:','','',2,6); +INSERT INTO `graph_templates_item` VALUES (1201,'',15,105,2,294,0,9,2,1,'Average:','','',2,7); +INSERT INTO `graph_templates_item` VALUES (1202,'',16,105,2,294,0,9,2,3,'Maximum:','','',2,8); +INSERT INTO `graph_templates_item` VALUES (1203,'',9,106,2,295,22,7,2,1,'Inbound','','',2,1); +INSERT INTO `graph_templates_item` VALUES (1204,'',10,106,2,295,0,9,2,4,'Current:','','',2,2); +INSERT INTO `graph_templates_item` VALUES (1205,'',11,106,2,295,0,9,2,1,'Average:','','',2,3); +INSERT INTO `graph_templates_item` VALUES (1206,'',12,106,2,295,0,9,2,3,'Maximum:','','on',2,4); +INSERT INTO `graph_templates_item` VALUES (1207,'',13,106,2,296,20,4,2,1,'Outbound','','',2,5); +INSERT INTO `graph_templates_item` VALUES (1208,'',14,106,2,296,0,9,2,4,'Current:','','',2,6); +INSERT INTO `graph_templates_item` VALUES (1209,'',15,106,2,296,0,9,2,1,'Average:','','',2,7); +INSERT INTO `graph_templates_item` VALUES (1210,'',16,106,2,296,0,9,2,3,'Maximum:','','',2,8); +INSERT INTO `graph_templates_item` VALUES (1211,'',9,107,2,297,22,7,2,1,'Inbound','','',2,1); +INSERT INTO `graph_templates_item` VALUES (1212,'',10,107,2,297,0,9,2,4,'Current:','','',2,2); +INSERT INTO `graph_templates_item` VALUES (1213,'',11,107,2,297,0,9,2,1,'Average:','','',2,3); +INSERT INTO `graph_templates_item` VALUES (1214,'',12,107,2,297,0,9,2,3,'Maximum:','','on',2,4); +INSERT INTO `graph_templates_item` VALUES (1215,'',13,107,2,298,20,4,2,1,'Outbound','','',2,5); +INSERT INTO `graph_templates_item` VALUES (1216,'',14,107,2,298,0,9,2,4,'Current:','','',2,6); +INSERT INTO `graph_templates_item` VALUES (1217,'',15,107,2,298,0,9,2,1,'Average:','','',2,7); +INSERT INTO `graph_templates_item` VALUES (1218,'',16,107,2,298,0,9,2,3,'Maximum:','','',2,8); +INSERT INTO `graph_templates_item` VALUES (1219,'',9,108,2,299,22,7,2,1,'Inbound','','',2,1); +INSERT INTO `graph_templates_item` VALUES (1220,'',10,108,2,299,0,9,2,4,'Current:','','',2,2); +INSERT INTO `graph_templates_item` VALUES (1221,'',11,108,2,299,0,9,2,1,'Average:','','',2,3); +INSERT INTO `graph_templates_item` VALUES (1222,'',12,108,2,299,0,9,2,3,'Maximum:','','on',2,4); +INSERT INTO `graph_templates_item` VALUES (1223,'',13,108,2,300,20,4,2,1,'Outbound','','',2,5); +INSERT INTO `graph_templates_item` VALUES (1224,'',14,108,2,300,0,9,2,4,'Current:','','',2,6); +INSERT INTO `graph_templates_item` VALUES (1225,'',15,108,2,300,0,9,2,1,'Average:','','',2,7); +INSERT INTO `graph_templates_item` VALUES (1226,'',16,108,2,300,0,9,2,3,'Maximum:','','',2,8); +INSERT INTO `graph_templates_item` VALUES (1227,'',9,109,2,301,22,7,2,1,'Inbound','','',2,1); +INSERT INTO `graph_templates_item` VALUES (1228,'',10,109,2,301,0,9,2,4,'Current:','','',2,2); +INSERT INTO `graph_templates_item` VALUES (1229,'',11,109,2,301,0,9,2,1,'Average:','','',2,3); +INSERT INTO `graph_templates_item` VALUES (1230,'',12,109,2,301,0,9,2,3,'Maximum:','','on',2,4); +INSERT INTO `graph_templates_item` VALUES (1231,'',13,109,2,302,20,4,2,1,'Outbound','','',2,5); +INSERT INTO `graph_templates_item` VALUES (1232,'',14,109,2,302,0,9,2,4,'Current:','','',2,6); +INSERT INTO `graph_templates_item` VALUES (1233,'',15,109,2,302,0,9,2,1,'Average:','','',2,7); +INSERT INTO `graph_templates_item` VALUES (1234,'',16,109,2,302,0,9,2,3,'Maximum:','','',2,8); +INSERT INTO `graph_templates_item` VALUES (1235,'',9,110,2,303,22,7,2,1,'Inbound','','',2,1); +INSERT INTO `graph_templates_item` VALUES (1236,'',10,110,2,303,0,9,2,4,'Current:','','',2,2); +INSERT INTO `graph_templates_item` VALUES (1237,'',11,110,2,303,0,9,2,1,'Average:','','',2,3); +INSERT INTO `graph_templates_item` VALUES (1238,'',12,110,2,303,0,9,2,3,'Maximum:','','on',2,4); +INSERT INTO `graph_templates_item` VALUES (1239,'',13,110,2,304,20,4,2,1,'Outbound','','',2,5); +INSERT INTO `graph_templates_item` VALUES (1240,'',14,110,2,304,0,9,2,4,'Current:','','',2,6); +INSERT INTO `graph_templates_item` VALUES (1241,'',15,110,2,304,0,9,2,1,'Average:','','',2,7); +INSERT INTO `graph_templates_item` VALUES (1242,'',16,110,2,304,0,9,2,3,'Maximum:','','',2,8); +INSERT INTO `graph_templates_item` VALUES (1243,'',9,111,2,305,22,7,2,1,'Inbound','','',2,1); +INSERT INTO `graph_templates_item` VALUES (1244,'',10,111,2,305,0,9,2,4,'Current:','','',2,2); +INSERT INTO `graph_templates_item` VALUES (1245,'',11,111,2,305,0,9,2,1,'Average:','','',2,3); +INSERT INTO `graph_templates_item` VALUES (1246,'',12,111,2,305,0,9,2,3,'Maximum:','','on',2,4); +INSERT INTO `graph_templates_item` VALUES (1247,'',13,111,2,306,20,4,2,1,'Outbound','','',2,5); +INSERT INTO `graph_templates_item` VALUES (1248,'',14,111,2,306,0,9,2,4,'Current:','','',2,6); +INSERT INTO `graph_templates_item` VALUES (1249,'',15,111,2,306,0,9,2,1,'Average:','','',2,7); +INSERT INTO `graph_templates_item` VALUES (1250,'',16,111,2,306,0,9,2,3,'Maximum:','','',2,8); +INSERT INTO `graph_templates_item` VALUES (1251,'',9,112,2,307,22,7,2,1,'Inbound','','',2,1); +INSERT INTO `graph_templates_item` VALUES (1252,'',10,112,2,307,0,9,2,4,'Current:','','',2,2); +INSERT INTO `graph_templates_item` VALUES (1253,'',11,112,2,307,0,9,2,1,'Average:','','',2,3); +INSERT INTO `graph_templates_item` VALUES (1254,'',12,112,2,307,0,9,2,3,'Maximum:','','on',2,4); +INSERT INTO `graph_templates_item` VALUES (1255,'',13,112,2,308,20,4,2,1,'Outbound','','',2,5); +INSERT INTO `graph_templates_item` VALUES (1256,'',14,112,2,308,0,9,2,4,'Current:','','',2,6); +INSERT INTO `graph_templates_item` VALUES (1257,'',15,112,2,308,0,9,2,1,'Average:','','',2,7); +INSERT INTO `graph_templates_item` VALUES (1258,'',16,112,2,308,0,9,2,3,'Maximum:','','',2,8); +INSERT INTO `graph_templates_item` VALUES (1259,'',9,113,2,309,22,7,2,1,'Inbound','','',2,1); +INSERT INTO `graph_templates_item` VALUES (1260,'',10,113,2,309,0,9,2,4,'Current:','','',2,2); +INSERT INTO `graph_templates_item` VALUES (1261,'',11,113,2,309,0,9,2,1,'Average:','','',2,3); +INSERT INTO `graph_templates_item` VALUES (1262,'',12,113,2,309,0,9,2,3,'Maximum:','','on',2,4); +INSERT INTO `graph_templates_item` VALUES (1263,'',13,113,2,310,20,4,2,1,'Outbound','','',2,5); +INSERT INTO `graph_templates_item` VALUES (1264,'',14,113,2,310,0,9,2,4,'Current:','','',2,6); +INSERT INTO `graph_templates_item` VALUES (1265,'',15,113,2,310,0,9,2,1,'Average:','','',2,7); +INSERT INTO `graph_templates_item` VALUES (1266,'',16,113,2,310,0,9,2,3,'Maximum:','','',2,8); +INSERT INTO `graph_templates_item` VALUES (1267,'',9,114,2,311,22,7,2,1,'Inbound','','',2,1); +INSERT INTO `graph_templates_item` VALUES (1268,'',10,114,2,311,0,9,2,4,'Current:','','',2,2); +INSERT INTO `graph_templates_item` VALUES (1269,'',11,114,2,311,0,9,2,1,'Average:','','',2,3); +INSERT INTO `graph_templates_item` VALUES (1270,'',12,114,2,311,0,9,2,3,'Maximum:','','on',2,4); +INSERT INTO `graph_templates_item` VALUES (1271,'',13,114,2,312,20,4,2,1,'Outbound','','',2,5); +INSERT INTO `graph_templates_item` VALUES (1272,'',14,114,2,312,0,9,2,4,'Current:','','',2,6); +INSERT INTO `graph_templates_item` VALUES (1273,'',15,114,2,312,0,9,2,1,'Average:','','',2,7); +INSERT INTO `graph_templates_item` VALUES (1274,'',16,114,2,312,0,9,2,3,'Maximum:','','',2,8); +INSERT INTO `graph_templates_item` VALUES (1275,'',9,115,2,313,22,7,2,1,'Inbound','','',2,1); +INSERT INTO `graph_templates_item` VALUES (1276,'',10,115,2,313,0,9,2,4,'Current:','','',2,2); +INSERT INTO `graph_templates_item` VALUES (1277,'',11,115,2,313,0,9,2,1,'Average:','','',2,3); +INSERT INTO `graph_templates_item` VALUES (1278,'',12,115,2,313,0,9,2,3,'Maximum:','','on',2,4); +INSERT INTO `graph_templates_item` VALUES (1279,'',13,115,2,314,20,4,2,1,'Outbound','','',2,5); +INSERT INTO `graph_templates_item` VALUES (1280,'',14,115,2,314,0,9,2,4,'Current:','','',2,6); +INSERT INTO `graph_templates_item` VALUES (1281,'',15,115,2,314,0,9,2,1,'Average:','','',2,7); +INSERT INTO `graph_templates_item` VALUES (1282,'',16,115,2,314,0,9,2,3,'Maximum:','','',2,8); +INSERT INTO `graph_templates_item` VALUES (1283,'',9,116,2,315,22,7,2,1,'Inbound','','',2,1); +INSERT INTO `graph_templates_item` VALUES (1284,'',10,116,2,315,0,9,2,4,'Current:','','',2,2); +INSERT INTO `graph_templates_item` VALUES (1285,'',11,116,2,315,0,9,2,1,'Average:','','',2,3); +INSERT INTO `graph_templates_item` VALUES (1286,'',12,116,2,315,0,9,2,3,'Maximum:','','on',2,4); +INSERT INTO `graph_templates_item` VALUES (1287,'',13,116,2,316,20,4,2,1,'Outbound','','',2,5); +INSERT INTO `graph_templates_item` VALUES (1288,'',14,116,2,316,0,9,2,4,'Current:','','',2,6); +INSERT INTO `graph_templates_item` VALUES (1289,'',15,116,2,316,0,9,2,1,'Average:','','',2,7); +INSERT INTO `graph_templates_item` VALUES (1290,'',16,116,2,316,0,9,2,3,'Maximum:','','',2,8); +INSERT INTO `graph_templates_item` VALUES (1291,'',9,117,2,317,22,7,2,1,'Inbound','','',2,1); +INSERT INTO `graph_templates_item` VALUES (1292,'',10,117,2,317,0,9,2,4,'Current:','','',2,2); +INSERT INTO `graph_templates_item` VALUES (1293,'',11,117,2,317,0,9,2,1,'Average:','','',2,3); +INSERT INTO `graph_templates_item` VALUES (1294,'',12,117,2,317,0,9,2,3,'Maximum:','','on',2,4); +INSERT INTO `graph_templates_item` VALUES (1295,'',13,117,2,318,20,4,2,1,'Outbound','','',2,5); +INSERT INTO `graph_templates_item` VALUES (1296,'',14,117,2,318,0,9,2,4,'Current:','','',2,6); +INSERT INTO `graph_templates_item` VALUES (1297,'',15,117,2,318,0,9,2,1,'Average:','','',2,7); +INSERT INTO `graph_templates_item` VALUES (1298,'',16,117,2,318,0,9,2,3,'Maximum:','','',2,8); +INSERT INTO `graph_templates_item` VALUES (1299,'',9,118,2,319,22,7,2,1,'Inbound','','',2,1); +INSERT INTO `graph_templates_item` VALUES (1300,'',10,118,2,319,0,9,2,4,'Current:','','',2,2); +INSERT INTO `graph_templates_item` VALUES (1301,'',11,118,2,319,0,9,2,1,'Average:','','',2,3); +INSERT INTO `graph_templates_item` VALUES (1302,'',12,118,2,319,0,9,2,3,'Maximum:','','on',2,4); +INSERT INTO `graph_templates_item` VALUES (1303,'',13,118,2,320,20,4,2,1,'Outbound','','',2,5); +INSERT INTO `graph_templates_item` VALUES (1304,'',14,118,2,320,0,9,2,4,'Current:','','',2,6); +INSERT INTO `graph_templates_item` VALUES (1305,'',15,118,2,320,0,9,2,1,'Average:','','',2,7); +INSERT INTO `graph_templates_item` VALUES (1306,'',16,118,2,320,0,9,2,3,'Maximum:','','',2,8); +INSERT INTO `graph_templates_item` VALUES (1307,'',9,119,2,321,22,7,2,1,'Inbound','','',2,1); +INSERT INTO `graph_templates_item` VALUES (1308,'',10,119,2,321,0,9,2,4,'Current:','','',2,2); +INSERT INTO `graph_templates_item` VALUES (1309,'',11,119,2,321,0,9,2,1,'Average:','','',2,3); +INSERT INTO `graph_templates_item` VALUES (1310,'',12,119,2,321,0,9,2,3,'Maximum:','','on',2,4); +INSERT INTO `graph_templates_item` VALUES (1311,'',13,119,2,322,20,4,2,1,'Outbound','','',2,5); +INSERT INTO `graph_templates_item` VALUES (1312,'',14,119,2,322,0,9,2,4,'Current:','','',2,6); +INSERT INTO `graph_templates_item` VALUES (1313,'',15,119,2,322,0,9,2,1,'Average:','','',2,7); +INSERT INTO `graph_templates_item` VALUES (1314,'',16,119,2,322,0,9,2,3,'Maximum:','','',2,8); +INSERT INTO `graph_templates_item` VALUES (1315,'',9,120,2,323,22,7,2,1,'Inbound','','',2,1); +INSERT INTO `graph_templates_item` VALUES (1316,'',10,120,2,323,0,9,2,4,'Current:','','',2,2); +INSERT INTO `graph_templates_item` VALUES (1317,'',11,120,2,323,0,9,2,1,'Average:','','',2,3); +INSERT INTO `graph_templates_item` VALUES (1318,'',12,120,2,323,0,9,2,3,'Maximum:','','on',2,4); +INSERT INTO `graph_templates_item` VALUES (1319,'',13,120,2,324,20,4,2,1,'Outbound','','',2,5); +INSERT INTO `graph_templates_item` VALUES (1320,'',14,120,2,324,0,9,2,4,'Current:','','',2,6); +INSERT INTO `graph_templates_item` VALUES (1321,'',15,120,2,324,0,9,2,1,'Average:','','',2,7); +INSERT INTO `graph_templates_item` VALUES (1322,'',16,120,2,324,0,9,2,3,'Maximum:','','',2,8); +INSERT INTO `graph_templates_item` VALUES (1323,'',9,121,2,325,22,7,2,1,'Inbound','','',2,1); +INSERT INTO `graph_templates_item` VALUES (1324,'',10,121,2,325,0,9,2,4,'Current:','','',2,2); +INSERT INTO `graph_templates_item` VALUES (1325,'',11,121,2,325,0,9,2,1,'Average:','','',2,3); +INSERT INTO `graph_templates_item` VALUES (1326,'',12,121,2,325,0,9,2,3,'Maximum:','','on',2,4); +INSERT INTO `graph_templates_item` VALUES (1327,'',13,121,2,326,20,4,2,1,'Outbound','','',2,5); +INSERT INTO `graph_templates_item` VALUES (1328,'',14,121,2,326,0,9,2,4,'Current:','','',2,6); +INSERT INTO `graph_templates_item` VALUES (1329,'',15,121,2,326,0,9,2,1,'Average:','','',2,7); +INSERT INTO `graph_templates_item` VALUES (1330,'',16,121,2,326,0,9,2,3,'Maximum:','','',2,8); +INSERT INTO `graph_templates_item` VALUES (1331,'',9,122,2,327,22,7,2,1,'Inbound','','',2,1); +INSERT INTO `graph_templates_item` VALUES (1332,'',10,122,2,327,0,9,2,4,'Current:','','',2,2); +INSERT INTO `graph_templates_item` VALUES (1333,'',11,122,2,327,0,9,2,1,'Average:','','',2,3); +INSERT INTO `graph_templates_item` VALUES (1334,'',12,122,2,327,0,9,2,3,'Maximum:','','on',2,4); +INSERT INTO `graph_templates_item` VALUES (1335,'',13,122,2,328,20,4,2,1,'Outbound','','',2,5); +INSERT INTO `graph_templates_item` VALUES (1336,'',14,122,2,328,0,9,2,4,'Current:','','',2,6); +INSERT INTO `graph_templates_item` VALUES (1337,'',15,122,2,328,0,9,2,1,'Average:','','',2,7); +INSERT INTO `graph_templates_item` VALUES (1338,'',16,122,2,328,0,9,2,3,'Maximum:','','',2,8); +INSERT INTO `graph_templates_item` VALUES (1339,'',9,123,2,329,22,7,2,1,'Inbound','','',2,1); +INSERT INTO `graph_templates_item` VALUES (1340,'',10,123,2,329,0,9,2,4,'Current:','','',2,2); +INSERT INTO `graph_templates_item` VALUES (1341,'',11,123,2,329,0,9,2,1,'Average:','','',2,3); +INSERT INTO `graph_templates_item` VALUES (1342,'',12,123,2,329,0,9,2,3,'Maximum:','','on',2,4); +INSERT INTO `graph_templates_item` VALUES (1343,'',13,123,2,330,20,4,2,1,'Outbound','','',2,5); +INSERT INTO `graph_templates_item` VALUES (1344,'',14,123,2,330,0,9,2,4,'Current:','','',2,6); +INSERT INTO `graph_templates_item` VALUES (1345,'',15,123,2,330,0,9,2,1,'Average:','','',2,7); +INSERT INTO `graph_templates_item` VALUES (1346,'',16,123,2,330,0,9,2,3,'Maximum:','','',2,8); +INSERT INTO `graph_templates_item` VALUES (1347,'',9,124,2,331,22,7,2,1,'Inbound','','',2,1); +INSERT INTO `graph_templates_item` VALUES (1348,'',10,124,2,331,0,9,2,4,'Current:','','',2,2); +INSERT INTO `graph_templates_item` VALUES (1349,'',11,124,2,331,0,9,2,1,'Average:','','',2,3); +INSERT INTO `graph_templates_item` VALUES (1350,'',12,124,2,331,0,9,2,3,'Maximum:','','on',2,4); +INSERT INTO `graph_templates_item` VALUES (1351,'',13,124,2,332,20,4,2,1,'Outbound','','',2,5); +INSERT INTO `graph_templates_item` VALUES (1352,'',14,124,2,332,0,9,2,4,'Current:','','',2,6); +INSERT INTO `graph_templates_item` VALUES (1353,'',15,124,2,332,0,9,2,1,'Average:','','',2,7); +INSERT INTO `graph_templates_item` VALUES (1354,'',16,124,2,332,0,9,2,3,'Maximum:','','',2,8); +INSERT INTO `graph_templates_item` VALUES (2305,'',9,242,2,570,22,7,2,1,'Inbound','','',2,1); +INSERT INTO `graph_templates_item` VALUES (2304,'',16,241,2,569,0,9,2,3,'Maximum:','','',2,8); +INSERT INTO `graph_templates_item` VALUES (2303,'',15,241,2,569,0,9,2,1,'Average:','','',2,7); +INSERT INTO `graph_templates_item` VALUES (2302,'',14,241,2,569,0,9,2,4,'Current:','','',2,6); +INSERT INTO `graph_templates_item` VALUES (2301,'',13,241,2,569,20,4,2,1,'Outbound','','',2,5); +INSERT INTO `graph_templates_item` VALUES (2300,'',12,241,2,568,0,9,2,3,'Maximum:','','on',2,4); +INSERT INTO `graph_templates_item` VALUES (2299,'',11,241,2,568,0,9,2,1,'Average:','','',2,3); +INSERT INTO `graph_templates_item` VALUES (2298,'',10,241,2,568,0,9,2,4,'Current:','','',2,2); +INSERT INTO `graph_templates_item` VALUES (2297,'',9,241,2,568,22,7,2,1,'Inbound','','',2,1); +INSERT INTO `graph_templates_item` VALUES (2296,'',16,240,2,567,0,9,2,3,'Maximum:','','',2,8); +INSERT INTO `graph_templates_item` VALUES (2295,'',15,240,2,567,0,9,2,1,'Average:','','',2,7); +INSERT INTO `graph_templates_item` VALUES (2294,'',14,240,2,567,0,9,2,4,'Current:','','',2,6); +INSERT INTO `graph_templates_item` VALUES (2293,'',13,240,2,567,20,4,2,1,'Outbound','','',2,5); +INSERT INTO `graph_templates_item` VALUES (2292,'',12,240,2,566,0,9,2,3,'Maximum:','','on',2,4); +INSERT INTO `graph_templates_item` VALUES (2291,'',11,240,2,566,0,9,2,1,'Average:','','',2,3); +INSERT INTO `graph_templates_item` VALUES (2290,'',10,240,2,566,0,9,2,4,'Current:','','',2,2); +INSERT INTO `graph_templates_item` VALUES (2289,'',9,240,2,566,22,7,2,1,'Inbound','','',2,1); +INSERT INTO `graph_templates_item` VALUES (2288,'',16,239,2,565,0,9,2,3,'Maximum:','','',2,8); +INSERT INTO `graph_templates_item` VALUES (2287,'',15,239,2,565,0,9,2,1,'Average:','','',2,7); +INSERT INTO `graph_templates_item` VALUES (2286,'',14,239,2,565,0,9,2,4,'Current:','','',2,6); +INSERT INTO `graph_templates_item` VALUES (2285,'',13,239,2,565,20,4,2,1,'Outbound','','',2,5); +INSERT INTO `graph_templates_item` VALUES (2284,'',12,239,2,564,0,9,2,3,'Maximum:','','on',2,4); +INSERT INTO `graph_templates_item` VALUES (2283,'',11,239,2,564,0,9,2,1,'Average:','','',2,3); +INSERT INTO `graph_templates_item` VALUES (2282,'',10,239,2,564,0,9,2,4,'Current:','','',2,2); +INSERT INTO `graph_templates_item` VALUES (2281,'',9,239,2,564,22,7,2,1,'Inbound','','',2,1); +INSERT INTO `graph_templates_item` VALUES (2280,'',16,238,2,563,0,9,2,3,'Maximum:','','',2,8); +INSERT INTO `graph_templates_item` VALUES (2279,'',15,238,2,563,0,9,2,1,'Average:','','',2,7); +INSERT INTO `graph_templates_item` VALUES (2278,'',14,238,2,563,0,9,2,4,'Current:','','',2,6); +INSERT INTO `graph_templates_item` VALUES (2277,'',13,238,2,563,20,4,2,1,'Outbound','','',2,5); +INSERT INTO `graph_templates_item` VALUES (2276,'',12,238,2,562,0,9,2,3,'Maximum:','','on',2,4); +INSERT INTO `graph_templates_item` VALUES (2275,'',11,238,2,562,0,9,2,1,'Average:','','',2,3); +INSERT INTO `graph_templates_item` VALUES (2274,'',10,238,2,562,0,9,2,4,'Current:','','',2,2); +INSERT INTO `graph_templates_item` VALUES (2273,'',9,238,2,562,22,7,2,1,'Inbound','','',2,1); +INSERT INTO `graph_templates_item` VALUES (2272,'',16,237,2,561,0,9,2,3,'Maximum:','','',2,8); +INSERT INTO `graph_templates_item` VALUES (2271,'',15,237,2,561,0,9,2,1,'Average:','','',2,7); +INSERT INTO `graph_templates_item` VALUES (2270,'',14,237,2,561,0,9,2,4,'Current:','','',2,6); +INSERT INTO `graph_templates_item` VALUES (2269,'',13,237,2,561,20,4,2,1,'Outbound','','',2,5); +INSERT INTO `graph_templates_item` VALUES (2268,'',12,237,2,560,0,9,2,3,'Maximum:','','on',2,4); +INSERT INTO `graph_templates_item` VALUES (2267,'',11,237,2,560,0,9,2,1,'Average:','','',2,3); +INSERT INTO `graph_templates_item` VALUES (2266,'',10,237,2,560,0,9,2,4,'Current:','','',2,2); +INSERT INTO `graph_templates_item` VALUES (2265,'',9,237,2,560,22,7,2,1,'Inbound','','',2,1); +INSERT INTO `graph_templates_item` VALUES (2264,'',16,236,2,559,0,9,2,3,'Maximum:','','',2,8); +INSERT INTO `graph_templates_item` VALUES (2263,'',15,236,2,559,0,9,2,1,'Average:','','',2,7); +INSERT INTO `graph_templates_item` VALUES (2262,'',14,236,2,559,0,9,2,4,'Current:','','',2,6); +INSERT INTO `graph_templates_item` VALUES (2261,'',13,236,2,559,20,4,2,1,'Outbound','','',2,5); +INSERT INTO `graph_templates_item` VALUES (2260,'',12,236,2,558,0,9,2,3,'Maximum:','','on',2,4); +INSERT INTO `graph_templates_item` VALUES (2259,'',11,236,2,558,0,9,2,1,'Average:','','',2,3); +INSERT INTO `graph_templates_item` VALUES (2258,'',10,236,2,558,0,9,2,4,'Current:','','',2,2); +INSERT INTO `graph_templates_item` VALUES (2257,'',9,236,2,558,22,7,2,1,'Inbound','','',2,1); +INSERT INTO `graph_templates_item` VALUES (2256,'',406,235,13,556,0,9,14,3,'Maximum:','','on',2,12); +INSERT INTO `graph_templates_item` VALUES (2255,'',405,235,13,556,0,9,14,1,'Average:','','',2,11); +INSERT INTO `graph_templates_item` VALUES (2254,'',404,235,13,556,0,9,14,4,'Current:','','',2,10); +INSERT INTO `graph_templates_item` VALUES (2253,'',403,235,13,556,30,8,14,1,'Cache Memory','','',2,9); +INSERT INTO `graph_templates_item` VALUES (2252,'',110,235,13,555,0,9,14,3,'Maximum:','','on',2,8); +INSERT INTO `graph_templates_item` VALUES (2251,'',109,235,13,555,0,9,14,1,'Average:','','',2,7); +INSERT INTO `graph_templates_item` VALUES (2250,'',108,235,13,555,0,9,14,4,'Current:','','',2,6); +INSERT INTO `graph_templates_item` VALUES (2249,'',107,235,13,555,35,8,14,1,'Memory Buffers','','',2,5); +INSERT INTO `graph_templates_item` VALUES (2248,'',106,235,13,557,0,9,14,3,'Maximum:','','on',2,4); +INSERT INTO `graph_templates_item` VALUES (2247,'',105,235,13,557,0,9,14,1,'Average:','','',2,3); +INSERT INTO `graph_templates_item` VALUES (2246,'',104,235,13,557,0,9,14,4,'Current:','','',2,2); +INSERT INTO `graph_templates_item` VALUES (2245,'',103,235,13,557,52,7,14,1,'Memory Free','','',2,1); +INSERT INTO `graph_templates_item` VALUES (2244,'',86,234,11,0,1,4,12,1,'Total','','',2,7); +INSERT INTO `graph_templates_item` VALUES (2243,'',85,234,11,553,0,9,0,4,'Current:','','on',4,6); +INSERT INTO `graph_templates_item` VALUES (2242,'',84,234,11,553,9,8,0,1,'15 Minute Average','','',2,5); +INSERT INTO `graph_templates_item` VALUES (2241,'',83,234,11,554,0,9,0,4,'Current:','','on',4,4); +INSERT INTO `graph_templates_item` VALUES (2240,'',82,234,11,554,8,8,0,1,'5 Minute Average','','',2,3); +INSERT INTO `graph_templates_item` VALUES (2239,'',81,234,11,552,0,9,0,4,'Current:','','on',4,2); +INSERT INTO `graph_templates_item` VALUES (2238,'',80,234,11,552,15,7,0,1,'1 Minute Average','','',2,1); +INSERT INTO `graph_templates_item` VALUES (2237,'',44,233,4,0,0,9,12,3,'Maximum:','','',2,16); +INSERT INTO `graph_templates_item` VALUES (2236,'',43,233,4,0,0,9,12,1,'Average:','','',2,15); +INSERT INTO `graph_templates_item` VALUES (2235,'',42,233,4,0,0,9,12,4,'Current:','','',2,14); +INSERT INTO `graph_templates_item` VALUES (2234,'',41,233,4,0,1,4,12,1,'Total','','',2,13); +INSERT INTO `graph_templates_item` VALUES (2233,'',40,233,4,549,0,9,0,3,'Maximum:','','on',2,12); +INSERT INTO `graph_templates_item` VALUES (2232,'',39,233,4,549,0,9,0,1,'Average:','','',2,11); +INSERT INTO `graph_templates_item` VALUES (2231,'',38,233,4,549,0,9,0,4,'Current:','','',2,10); +INSERT INTO `graph_templates_item` VALUES (2230,'',37,233,4,549,12,8,0,1,'Nice','','',2,9); +INSERT INTO `graph_templates_item` VALUES (2229,'',36,233,4,551,0,9,0,3,'Maximum:','','on',2,8); +INSERT INTO `graph_templates_item` VALUES (2228,'',35,233,4,551,0,9,0,1,'Average:','','',2,7); +INSERT INTO `graph_templates_item` VALUES (2227,'',34,233,4,551,0,9,0,4,'Current:','','',2,6); +INSERT INTO `graph_templates_item` VALUES (2226,'',33,233,4,551,21,8,0,1,'User','','',2,5); +INSERT INTO `graph_templates_item` VALUES (2225,'',32,233,4,550,0,9,0,3,'Maximum:','','on',2,4); +INSERT INTO `graph_templates_item` VALUES (2224,'',31,233,4,550,0,9,0,1,'Average:','','',2,3); +INSERT INTO `graph_templates_item` VALUES (2223,'',30,233,4,550,0,9,0,4,'Current:','','',2,2); +INSERT INTO `graph_templates_item` VALUES (2222,'',29,233,4,550,9,7,0,1,'System','','',2,1); +INSERT INTO `graph_templates_item` VALUES (1462,'',139,137,18,359,9,7,0,1,'CPU Usage','','',2,1); +INSERT INTO `graph_templates_item` VALUES (1463,'',140,137,18,359,0,9,0,4,'Current:','','',3,2); +INSERT INTO `graph_templates_item` VALUES (1464,'',141,137,18,359,0,9,0,1,'Average:','','',3,3); +INSERT INTO `graph_templates_item` VALUES (1465,'',142,137,18,359,0,9,0,3,'Maximum:','','',3,4); +INSERT INTO `graph_templates_item` VALUES (1466,'',9,138,2,360,22,7,2,1,'Inbound','','',2,1); +INSERT INTO `graph_templates_item` VALUES (1467,'',10,138,2,360,0,9,2,4,'Current:','','',2,2); +INSERT INTO `graph_templates_item` VALUES (1468,'',11,138,2,360,0,9,2,1,'Average:','','',2,3); +INSERT INTO `graph_templates_item` VALUES (1469,'',12,138,2,360,0,9,2,3,'Maximum:','','on',2,4); +INSERT INTO `graph_templates_item` VALUES (1470,'',13,138,2,361,20,4,2,1,'Outbound','','',2,5); +INSERT INTO `graph_templates_item` VALUES (1471,'',14,138,2,361,0,9,2,4,'Current:','','',2,6); +INSERT INTO `graph_templates_item` VALUES (1472,'',15,138,2,361,0,9,2,1,'Average:','','',2,7); +INSERT INTO `graph_templates_item` VALUES (1473,'',16,138,2,361,0,9,2,3,'Maximum:','','',2,8); +INSERT INTO `graph_templates_item` VALUES (1474,'',9,139,2,362,22,7,2,1,'Inbound','','',2,1); +INSERT INTO `graph_templates_item` VALUES (1475,'',10,139,2,362,0,9,2,4,'Current:','','',2,2); +INSERT INTO `graph_templates_item` VALUES (1476,'',11,139,2,362,0,9,2,1,'Average:','','',2,3); +INSERT INTO `graph_templates_item` VALUES (1477,'',12,139,2,362,0,9,2,3,'Maximum:','','on',2,4); +INSERT INTO `graph_templates_item` VALUES (1478,'',13,139,2,363,20,4,2,1,'Outbound','','',2,5); +INSERT INTO `graph_templates_item` VALUES (1479,'',14,139,2,363,0,9,2,4,'Current:','','',2,6); +INSERT INTO `graph_templates_item` VALUES (1480,'',15,139,2,363,0,9,2,1,'Average:','','',2,7); +INSERT INTO `graph_templates_item` VALUES (1481,'',16,139,2,363,0,9,2,3,'Maximum:','','',2,8); +INSERT INTO `graph_templates_item` VALUES (1482,'',9,140,2,364,22,7,2,1,'Inbound','','',2,1); +INSERT INTO `graph_templates_item` VALUES (1483,'',10,140,2,364,0,9,2,4,'Current:','','',2,2); +INSERT INTO `graph_templates_item` VALUES (1484,'',11,140,2,364,0,9,2,1,'Average:','','',2,3); +INSERT INTO `graph_templates_item` VALUES (1485,'',12,140,2,364,0,9,2,3,'Maximum:','','on',2,4); +INSERT INTO `graph_templates_item` VALUES (1486,'',13,140,2,365,20,4,2,1,'Outbound','','',2,5); +INSERT INTO `graph_templates_item` VALUES (1487,'',14,140,2,365,0,9,2,4,'Current:','','',2,6); +INSERT INTO `graph_templates_item` VALUES (1488,'',15,140,2,365,0,9,2,1,'Average:','','',2,7); +INSERT INTO `graph_templates_item` VALUES (1489,'',16,140,2,365,0,9,2,3,'Maximum:','','',2,8); +INSERT INTO `graph_templates_item` VALUES (1490,'',9,141,2,366,22,7,2,1,'Inbound','','',2,1); +INSERT INTO `graph_templates_item` VALUES (1491,'',10,141,2,366,0,9,2,4,'Current:','','',2,2); +INSERT INTO `graph_templates_item` VALUES (1492,'',11,141,2,366,0,9,2,1,'Average:','','',2,3); +INSERT INTO `graph_templates_item` VALUES (1493,'',12,141,2,366,0,9,2,3,'Maximum:','','on',2,4); +INSERT INTO `graph_templates_item` VALUES (1494,'',13,141,2,367,20,4,2,1,'Outbound','','',2,5); +INSERT INTO `graph_templates_item` VALUES (1495,'',14,141,2,367,0,9,2,4,'Current:','','',2,6); +INSERT INTO `graph_templates_item` VALUES (1496,'',15,141,2,367,0,9,2,1,'Average:','','',2,7); +INSERT INTO `graph_templates_item` VALUES (1497,'',16,141,2,367,0,9,2,3,'Maximum:','','',2,8); +INSERT INTO `graph_templates_item` VALUES (1498,'',9,142,2,368,22,7,2,1,'Inbound','','',2,1); +INSERT INTO `graph_templates_item` VALUES (1499,'',10,142,2,368,0,9,2,4,'Current:','','',2,2); +INSERT INTO `graph_templates_item` VALUES (1500,'',11,142,2,368,0,9,2,1,'Average:','','',2,3); +INSERT INTO `graph_templates_item` VALUES (1501,'',12,142,2,368,0,9,2,3,'Maximum:','','on',2,4); +INSERT INTO `graph_templates_item` VALUES (1502,'',13,142,2,369,20,4,2,1,'Outbound','','',2,5); +INSERT INTO `graph_templates_item` VALUES (1503,'',14,142,2,369,0,9,2,4,'Current:','','',2,6); +INSERT INTO `graph_templates_item` VALUES (1504,'',15,142,2,369,0,9,2,1,'Average:','','',2,7); +INSERT INTO `graph_templates_item` VALUES (1505,'',16,142,2,369,0,9,2,3,'Maximum:','','',2,8); +INSERT INTO `graph_templates_item` VALUES (1506,'',9,143,2,370,22,7,2,1,'Inbound','','',2,1); +INSERT INTO `graph_templates_item` VALUES (1507,'',10,143,2,370,0,9,2,4,'Current:','','',2,2); +INSERT INTO `graph_templates_item` VALUES (1508,'',11,143,2,370,0,9,2,1,'Average:','','',2,3); +INSERT INTO `graph_templates_item` VALUES (1509,'',12,143,2,370,0,9,2,3,'Maximum:','','on',2,4); +INSERT INTO `graph_templates_item` VALUES (1510,'',13,143,2,371,20,4,2,1,'Outbound','','',2,5); +INSERT INTO `graph_templates_item` VALUES (1511,'',14,143,2,371,0,9,2,4,'Current:','','',2,6); +INSERT INTO `graph_templates_item` VALUES (1512,'',15,143,2,371,0,9,2,1,'Average:','','',2,7); +INSERT INTO `graph_templates_item` VALUES (1513,'',16,143,2,371,0,9,2,3,'Maximum:','','',2,8); +INSERT INTO `graph_templates_item` VALUES (1514,'',9,144,2,372,22,7,2,1,'Inbound','','',2,1); +INSERT INTO `graph_templates_item` VALUES (1515,'',10,144,2,372,0,9,2,4,'Current:','','',2,2); +INSERT INTO `graph_templates_item` VALUES (1516,'',11,144,2,372,0,9,2,1,'Average:','','',2,3); +INSERT INTO `graph_templates_item` VALUES (1517,'',12,144,2,372,0,9,2,3,'Maximum:','','on',2,4); +INSERT INTO `graph_templates_item` VALUES (1518,'',13,144,2,373,20,4,2,1,'Outbound','','',2,5); +INSERT INTO `graph_templates_item` VALUES (1519,'',14,144,2,373,0,9,2,4,'Current:','','',2,6); +INSERT INTO `graph_templates_item` VALUES (1520,'',15,144,2,373,0,9,2,1,'Average:','','',2,7); +INSERT INTO `graph_templates_item` VALUES (1521,'',16,144,2,373,0,9,2,3,'Maximum:','','',2,8); +INSERT INTO `graph_templates_item` VALUES (1522,'',9,145,2,374,22,7,2,1,'Inbound','','',2,1); +INSERT INTO `graph_templates_item` VALUES (1523,'',10,145,2,374,0,9,2,4,'Current:','','',2,2); +INSERT INTO `graph_templates_item` VALUES (1524,'',11,145,2,374,0,9,2,1,'Average:','','',2,3); +INSERT INTO `graph_templates_item` VALUES (1525,'',12,145,2,374,0,9,2,3,'Maximum:','','on',2,4); +INSERT INTO `graph_templates_item` VALUES (1526,'',13,145,2,375,20,4,2,1,'Outbound','','',2,5); +INSERT INTO `graph_templates_item` VALUES (1527,'',14,145,2,375,0,9,2,4,'Current:','','',2,6); +INSERT INTO `graph_templates_item` VALUES (1528,'',15,145,2,375,0,9,2,1,'Average:','','',2,7); +INSERT INTO `graph_templates_item` VALUES (1529,'',16,145,2,375,0,9,2,3,'Maximum:','','',2,8); +INSERT INTO `graph_templates_item` VALUES (1530,'',9,146,2,376,22,7,2,1,'Inbound','','',2,1); +INSERT INTO `graph_templates_item` VALUES (1531,'',10,146,2,376,0,9,2,4,'Current:','','',2,2); +INSERT INTO `graph_templates_item` VALUES (1532,'',11,146,2,376,0,9,2,1,'Average:','','',2,3); +INSERT INTO `graph_templates_item` VALUES (1533,'',12,146,2,376,0,9,2,3,'Maximum:','','on',2,4); +INSERT INTO `graph_templates_item` VALUES (1534,'',13,146,2,377,20,4,2,1,'Outbound','','',2,5); +INSERT INTO `graph_templates_item` VALUES (1535,'',14,146,2,377,0,9,2,4,'Current:','','',2,6); +INSERT INTO `graph_templates_item` VALUES (1536,'',15,146,2,377,0,9,2,1,'Average:','','',2,7); +INSERT INTO `graph_templates_item` VALUES (1537,'',16,146,2,377,0,9,2,3,'Maximum:','','',2,8); +INSERT INTO `graph_templates_item` VALUES (1538,'',9,147,2,378,22,7,2,1,'Inbound','','',2,1); +INSERT INTO `graph_templates_item` VALUES (1539,'',10,147,2,378,0,9,2,4,'Current:','','',2,2); +INSERT INTO `graph_templates_item` VALUES (1540,'',11,147,2,378,0,9,2,1,'Average:','','',2,3); +INSERT INTO `graph_templates_item` VALUES (1541,'',12,147,2,378,0,9,2,3,'Maximum:','','on',2,4); +INSERT INTO `graph_templates_item` VALUES (1542,'',13,147,2,379,20,4,2,1,'Outbound','','',2,5); +INSERT INTO `graph_templates_item` VALUES (1543,'',14,147,2,379,0,9,2,4,'Current:','','',2,6); +INSERT INTO `graph_templates_item` VALUES (1544,'',15,147,2,379,0,9,2,1,'Average:','','',2,7); +INSERT INTO `graph_templates_item` VALUES (1545,'',16,147,2,379,0,9,2,3,'Maximum:','','',2,8); +INSERT INTO `graph_templates_item` VALUES (1546,'',9,148,2,380,22,7,2,1,'Inbound','','',2,1); +INSERT INTO `graph_templates_item` VALUES (1547,'',10,148,2,380,0,9,2,4,'Current:','','',2,2); +INSERT INTO `graph_templates_item` VALUES (1548,'',11,148,2,380,0,9,2,1,'Average:','','',2,3); +INSERT INTO `graph_templates_item` VALUES (1549,'',12,148,2,380,0,9,2,3,'Maximum:','','on',2,4); +INSERT INTO `graph_templates_item` VALUES (1550,'',13,148,2,381,20,4,2,1,'Outbound','','',2,5); +INSERT INTO `graph_templates_item` VALUES (1551,'',14,148,2,381,0,9,2,4,'Current:','','',2,6); +INSERT INTO `graph_templates_item` VALUES (1552,'',15,148,2,381,0,9,2,1,'Average:','','',2,7); +INSERT INTO `graph_templates_item` VALUES (1553,'',16,148,2,381,0,9,2,3,'Maximum:','','',2,8); +INSERT INTO `graph_templates_item` VALUES (1554,'',9,149,2,382,22,7,2,1,'Inbound','','',2,1); +INSERT INTO `graph_templates_item` VALUES (1555,'',10,149,2,382,0,9,2,4,'Current:','','',2,2); +INSERT INTO `graph_templates_item` VALUES (1556,'',11,149,2,382,0,9,2,1,'Average:','','',2,3); +INSERT INTO `graph_templates_item` VALUES (1557,'',12,149,2,382,0,9,2,3,'Maximum:','','on',2,4); +INSERT INTO `graph_templates_item` VALUES (1558,'',13,149,2,383,20,4,2,1,'Outbound','','',2,5); +INSERT INTO `graph_templates_item` VALUES (1559,'',14,149,2,383,0,9,2,4,'Current:','','',2,6); +INSERT INTO `graph_templates_item` VALUES (1560,'',15,149,2,383,0,9,2,1,'Average:','','',2,7); +INSERT INTO `graph_templates_item` VALUES (1561,'',16,149,2,383,0,9,2,3,'Maximum:','','',2,8); +INSERT INTO `graph_templates_item` VALUES (1562,'',9,150,2,384,22,7,2,1,'Inbound','','',2,1); +INSERT INTO `graph_templates_item` VALUES (1563,'',10,150,2,384,0,9,2,4,'Current:','','',2,2); +INSERT INTO `graph_templates_item` VALUES (1564,'',11,150,2,384,0,9,2,1,'Average:','','',2,3); +INSERT INTO `graph_templates_item` VALUES (1565,'',12,150,2,384,0,9,2,3,'Maximum:','','on',2,4); +INSERT INTO `graph_templates_item` VALUES (1566,'',13,150,2,385,20,4,2,1,'Outbound','','',2,5); +INSERT INTO `graph_templates_item` VALUES (1567,'',14,150,2,385,0,9,2,4,'Current:','','',2,6); +INSERT INTO `graph_templates_item` VALUES (1568,'',15,150,2,385,0,9,2,1,'Average:','','',2,7); +INSERT INTO `graph_templates_item` VALUES (1569,'',16,150,2,385,0,9,2,3,'Maximum:','','',2,8); +INSERT INTO `graph_templates_item` VALUES (1570,'',9,151,2,386,22,7,2,1,'Inbound','','',2,1); +INSERT INTO `graph_templates_item` VALUES (1571,'',10,151,2,386,0,9,2,4,'Current:','','',2,2); +INSERT INTO `graph_templates_item` VALUES (1572,'',11,151,2,386,0,9,2,1,'Average:','','',2,3); +INSERT INTO `graph_templates_item` VALUES (1573,'',12,151,2,386,0,9,2,3,'Maximum:','','on',2,4); +INSERT INTO `graph_templates_item` VALUES (1574,'',13,151,2,387,20,4,2,1,'Outbound','','',2,5); +INSERT INTO `graph_templates_item` VALUES (1575,'',14,151,2,387,0,9,2,4,'Current:','','',2,6); +INSERT INTO `graph_templates_item` VALUES (1576,'',15,151,2,387,0,9,2,1,'Average:','','',2,7); +INSERT INTO `graph_templates_item` VALUES (1577,'',16,151,2,387,0,9,2,3,'Maximum:','','',2,8); +INSERT INTO `graph_templates_item` VALUES (1578,'',9,152,2,388,22,7,2,1,'Inbound','','',2,1); +INSERT INTO `graph_templates_item` VALUES (1579,'',10,152,2,388,0,9,2,4,'Current:','','',2,2); +INSERT INTO `graph_templates_item` VALUES (1580,'',11,152,2,388,0,9,2,1,'Average:','','',2,3); +INSERT INTO `graph_templates_item` VALUES (1581,'',12,152,2,388,0,9,2,3,'Maximum:','','on',2,4); +INSERT INTO `graph_templates_item` VALUES (1582,'',13,152,2,389,20,4,2,1,'Outbound','','',2,5); +INSERT INTO `graph_templates_item` VALUES (1583,'',14,152,2,389,0,9,2,4,'Current:','','',2,6); +INSERT INTO `graph_templates_item` VALUES (1584,'',15,152,2,389,0,9,2,1,'Average:','','',2,7); +INSERT INTO `graph_templates_item` VALUES (1585,'',16,152,2,389,0,9,2,3,'Maximum:','','',2,8); +INSERT INTO `graph_templates_item` VALUES (1586,'',9,153,2,390,22,7,2,1,'Inbound','','',2,1); +INSERT INTO `graph_templates_item` VALUES (1587,'',10,153,2,390,0,9,2,4,'Current:','','',2,2); +INSERT INTO `graph_templates_item` VALUES (1588,'',11,153,2,390,0,9,2,1,'Average:','','',2,3); +INSERT INTO `graph_templates_item` VALUES (1589,'',12,153,2,390,0,9,2,3,'Maximum:','','on',2,4); +INSERT INTO `graph_templates_item` VALUES (1590,'',13,153,2,391,20,4,2,1,'Outbound','','',2,5); +INSERT INTO `graph_templates_item` VALUES (1591,'',14,153,2,391,0,9,2,4,'Current:','','',2,6); +INSERT INTO `graph_templates_item` VALUES (1592,'',15,153,2,391,0,9,2,1,'Average:','','',2,7); +INSERT INTO `graph_templates_item` VALUES (1593,'',16,153,2,391,0,9,2,3,'Maximum:','','',2,8); +INSERT INTO `graph_templates_item` VALUES (1594,'',9,154,2,392,22,7,2,1,'Inbound','','',2,1); +INSERT INTO `graph_templates_item` VALUES (1595,'',10,154,2,392,0,9,2,4,'Current:','','',2,2); +INSERT INTO `graph_templates_item` VALUES (1596,'',11,154,2,392,0,9,2,1,'Average:','','',2,3); +INSERT INTO `graph_templates_item` VALUES (1597,'',12,154,2,392,0,9,2,3,'Maximum:','','on',2,4); +INSERT INTO `graph_templates_item` VALUES (1598,'',13,154,2,393,20,4,2,1,'Outbound','','',2,5); +INSERT INTO `graph_templates_item` VALUES (1599,'',14,154,2,393,0,9,2,4,'Current:','','',2,6); +INSERT INTO `graph_templates_item` VALUES (1600,'',15,154,2,393,0,9,2,1,'Average:','','',2,7); +INSERT INTO `graph_templates_item` VALUES (1601,'',16,154,2,393,0,9,2,3,'Maximum:','','',2,8); +INSERT INTO `graph_templates_item` VALUES (1602,'',9,155,2,394,22,7,2,1,'Inbound','','',2,1); +INSERT INTO `graph_templates_item` VALUES (1603,'',10,155,2,394,0,9,2,4,'Current:','','',2,2); +INSERT INTO `graph_templates_item` VALUES (1604,'',11,155,2,394,0,9,2,1,'Average:','','',2,3); +INSERT INTO `graph_templates_item` VALUES (1605,'',12,155,2,394,0,9,2,3,'Maximum:','','on',2,4); +INSERT INTO `graph_templates_item` VALUES (1606,'',13,155,2,395,20,4,2,1,'Outbound','','',2,5); +INSERT INTO `graph_templates_item` VALUES (1607,'',14,155,2,395,0,9,2,4,'Current:','','',2,6); +INSERT INTO `graph_templates_item` VALUES (1608,'',15,155,2,395,0,9,2,1,'Average:','','',2,7); +INSERT INTO `graph_templates_item` VALUES (1609,'',16,155,2,395,0,9,2,3,'Maximum:','','',2,8); +INSERT INTO `graph_templates_item` VALUES (1610,'',9,156,2,396,22,7,2,1,'Inbound','','',2,1); +INSERT INTO `graph_templates_item` VALUES (1611,'',10,156,2,396,0,9,2,4,'Current:','','',2,2); +INSERT INTO `graph_templates_item` VALUES (1612,'',11,156,2,396,0,9,2,1,'Average:','','',2,3); +INSERT INTO `graph_templates_item` VALUES (1613,'',12,156,2,396,0,9,2,3,'Maximum:','','on',2,4); +INSERT INTO `graph_templates_item` VALUES (1614,'',13,156,2,397,20,4,2,1,'Outbound','','',2,5); +INSERT INTO `graph_templates_item` VALUES (1615,'',14,156,2,397,0,9,2,4,'Current:','','',2,6); +INSERT INTO `graph_templates_item` VALUES (1616,'',15,156,2,397,0,9,2,1,'Average:','','',2,7); +INSERT INTO `graph_templates_item` VALUES (1617,'',16,156,2,397,0,9,2,3,'Maximum:','','',2,8); +INSERT INTO `graph_templates_item` VALUES (1618,'',9,157,2,398,22,7,2,1,'Inbound','','',2,1); +INSERT INTO `graph_templates_item` VALUES (1619,'',10,157,2,398,0,9,2,4,'Current:','','',2,2); +INSERT INTO `graph_templates_item` VALUES (1620,'',11,157,2,398,0,9,2,1,'Average:','','',2,3); +INSERT INTO `graph_templates_item` VALUES (1621,'',12,157,2,398,0,9,2,3,'Maximum:','','on',2,4); +INSERT INTO `graph_templates_item` VALUES (1622,'',13,157,2,399,20,4,2,1,'Outbound','','',2,5); +INSERT INTO `graph_templates_item` VALUES (1623,'',14,157,2,399,0,9,2,4,'Current:','','',2,6); +INSERT INTO `graph_templates_item` VALUES (1624,'',15,157,2,399,0,9,2,1,'Average:','','',2,7); +INSERT INTO `graph_templates_item` VALUES (1625,'',16,157,2,399,0,9,2,3,'Maximum:','','',2,8); +INSERT INTO `graph_templates_item` VALUES (1626,'',9,158,2,400,22,7,2,1,'Inbound','','',2,1); +INSERT INTO `graph_templates_item` VALUES (1627,'',10,158,2,400,0,9,2,4,'Current:','','',2,2); +INSERT INTO `graph_templates_item` VALUES (1628,'',11,158,2,400,0,9,2,1,'Average:','','',2,3); +INSERT INTO `graph_templates_item` VALUES (1629,'',12,158,2,400,0,9,2,3,'Maximum:','','on',2,4); +INSERT INTO `graph_templates_item` VALUES (1630,'',13,158,2,401,20,4,2,1,'Outbound','','',2,5); +INSERT INTO `graph_templates_item` VALUES (1631,'',14,158,2,401,0,9,2,4,'Current:','','',2,6); +INSERT INTO `graph_templates_item` VALUES (1632,'',15,158,2,401,0,9,2,1,'Average:','','',2,7); +INSERT INTO `graph_templates_item` VALUES (1633,'',16,158,2,401,0,9,2,3,'Maximum:','','',2,8); +INSERT INTO `graph_templates_item` VALUES (1634,'',9,159,2,402,22,7,2,1,'Inbound','','',2,1); +INSERT INTO `graph_templates_item` VALUES (1635,'',10,159,2,402,0,9,2,4,'Current:','','',2,2); +INSERT INTO `graph_templates_item` VALUES (1636,'',11,159,2,402,0,9,2,1,'Average:','','',2,3); +INSERT INTO `graph_templates_item` VALUES (1637,'',12,159,2,402,0,9,2,3,'Maximum:','','on',2,4); +INSERT INTO `graph_templates_item` VALUES (1638,'',13,159,2,403,20,4,2,1,'Outbound','','',2,5); +INSERT INTO `graph_templates_item` VALUES (1639,'',14,159,2,403,0,9,2,4,'Current:','','',2,6); +INSERT INTO `graph_templates_item` VALUES (1640,'',15,159,2,403,0,9,2,1,'Average:','','',2,7); +INSERT INTO `graph_templates_item` VALUES (1641,'',16,159,2,403,0,9,2,3,'Maximum:','','',2,8); +INSERT INTO `graph_templates_item` VALUES (1642,'',9,160,2,404,22,7,2,1,'Inbound','','',2,1); +INSERT INTO `graph_templates_item` VALUES (1643,'',10,160,2,404,0,9,2,4,'Current:','','',2,2); +INSERT INTO `graph_templates_item` VALUES (1644,'',11,160,2,404,0,9,2,1,'Average:','','',2,3); +INSERT INTO `graph_templates_item` VALUES (1645,'',12,160,2,404,0,9,2,3,'Maximum:','','on',2,4); +INSERT INTO `graph_templates_item` VALUES (1646,'',13,160,2,405,20,4,2,1,'Outbound','','',2,5); +INSERT INTO `graph_templates_item` VALUES (1647,'',14,160,2,405,0,9,2,4,'Current:','','',2,6); +INSERT INTO `graph_templates_item` VALUES (1648,'',15,160,2,405,0,9,2,1,'Average:','','',2,7); +INSERT INTO `graph_templates_item` VALUES (1649,'',16,160,2,405,0,9,2,3,'Maximum:','','',2,8); +INSERT INTO `graph_templates_item` VALUES (1650,'',9,161,2,406,22,7,2,1,'Inbound','','',2,1); +INSERT INTO `graph_templates_item` VALUES (1651,'',10,161,2,406,0,9,2,4,'Current:','','',2,2); +INSERT INTO `graph_templates_item` VALUES (1652,'',11,161,2,406,0,9,2,1,'Average:','','',2,3); +INSERT INTO `graph_templates_item` VALUES (1653,'',12,161,2,406,0,9,2,3,'Maximum:','','on',2,4); +INSERT INTO `graph_templates_item` VALUES (1654,'',13,161,2,407,20,4,2,1,'Outbound','','',2,5); +INSERT INTO `graph_templates_item` VALUES (1655,'',14,161,2,407,0,9,2,4,'Current:','','',2,6); +INSERT INTO `graph_templates_item` VALUES (1656,'',15,161,2,407,0,9,2,1,'Average:','','',2,7); +INSERT INTO `graph_templates_item` VALUES (1657,'',16,161,2,407,0,9,2,3,'Maximum:','','',2,8); +INSERT INTO `graph_templates_item` VALUES (1658,'',9,162,2,408,22,7,2,1,'Inbound','','',2,1); +INSERT INTO `graph_templates_item` VALUES (1659,'',10,162,2,408,0,9,2,4,'Current:','','',2,2); +INSERT INTO `graph_templates_item` VALUES (1660,'',11,162,2,408,0,9,2,1,'Average:','','',2,3); +INSERT INTO `graph_templates_item` VALUES (1661,'',12,162,2,408,0,9,2,3,'Maximum:','','on',2,4); +INSERT INTO `graph_templates_item` VALUES (1662,'',13,162,2,409,20,4,2,1,'Outbound','','',2,5); +INSERT INTO `graph_templates_item` VALUES (1663,'',14,162,2,409,0,9,2,4,'Current:','','',2,6); +INSERT INTO `graph_templates_item` VALUES (1664,'',15,162,2,409,0,9,2,1,'Average:','','',2,7); +INSERT INTO `graph_templates_item` VALUES (1665,'',16,162,2,409,0,9,2,3,'Maximum:','','',2,8); +INSERT INTO `graph_templates_item` VALUES (1666,'',9,163,2,410,22,7,2,1,'Inbound','','',2,1); +INSERT INTO `graph_templates_item` VALUES (1667,'',10,163,2,410,0,9,2,4,'Current:','','',2,2); +INSERT INTO `graph_templates_item` VALUES (1668,'',11,163,2,410,0,9,2,1,'Average:','','',2,3); +INSERT INTO `graph_templates_item` VALUES (1669,'',12,163,2,410,0,9,2,3,'Maximum:','','on',2,4); +INSERT INTO `graph_templates_item` VALUES (1670,'',13,163,2,411,20,4,2,1,'Outbound','','',2,5); +INSERT INTO `graph_templates_item` VALUES (1671,'',14,163,2,411,0,9,2,4,'Current:','','',2,6); +INSERT INTO `graph_templates_item` VALUES (1672,'',15,163,2,411,0,9,2,1,'Average:','','',2,7); +INSERT INTO `graph_templates_item` VALUES (1673,'',16,163,2,411,0,9,2,3,'Maximum:','','',2,8); +INSERT INTO `graph_templates_item` VALUES (1674,'',9,164,2,412,22,7,2,1,'Inbound','','',2,1); +INSERT INTO `graph_templates_item` VALUES (1675,'',10,164,2,412,0,9,2,4,'Current:','','',2,2); +INSERT INTO `graph_templates_item` VALUES (1676,'',11,164,2,412,0,9,2,1,'Average:','','',2,3); +INSERT INTO `graph_templates_item` VALUES (1677,'',12,164,2,412,0,9,2,3,'Maximum:','','on',2,4); +INSERT INTO `graph_templates_item` VALUES (1678,'',13,164,2,413,20,4,2,1,'Outbound','','',2,5); +INSERT INTO `graph_templates_item` VALUES (1679,'',14,164,2,413,0,9,2,4,'Current:','','',2,6); +INSERT INTO `graph_templates_item` VALUES (1680,'',15,164,2,413,0,9,2,1,'Average:','','',2,7); +INSERT INTO `graph_templates_item` VALUES (1681,'',16,164,2,413,0,9,2,3,'Maximum:','','',2,8); +INSERT INTO `graph_templates_item` VALUES (1682,'',9,165,2,414,22,7,2,1,'Inbound','','',2,1); +INSERT INTO `graph_templates_item` VALUES (1683,'',10,165,2,414,0,9,2,4,'Current:','','',2,2); +INSERT INTO `graph_templates_item` VALUES (1684,'',11,165,2,414,0,9,2,1,'Average:','','',2,3); +INSERT INTO `graph_templates_item` VALUES (1685,'',12,165,2,414,0,9,2,3,'Maximum:','','on',2,4); +INSERT INTO `graph_templates_item` VALUES (1686,'',13,165,2,415,20,4,2,1,'Outbound','','',2,5); +INSERT INTO `graph_templates_item` VALUES (1687,'',14,165,2,415,0,9,2,4,'Current:','','',2,6); +INSERT INTO `graph_templates_item` VALUES (1688,'',15,165,2,415,0,9,2,1,'Average:','','',2,7); +INSERT INTO `graph_templates_item` VALUES (1689,'',16,165,2,415,0,9,2,3,'Maximum:','','',2,8); +INSERT INTO `graph_templates_item` VALUES (1690,'',9,166,2,416,22,7,2,1,'Inbound','','',2,1); +INSERT INTO `graph_templates_item` VALUES (1691,'',10,166,2,416,0,9,2,4,'Current:','','',2,2); +INSERT INTO `graph_templates_item` VALUES (1692,'',11,166,2,416,0,9,2,1,'Average:','','',2,3); +INSERT INTO `graph_templates_item` VALUES (1693,'',12,166,2,416,0,9,2,3,'Maximum:','','on',2,4); +INSERT INTO `graph_templates_item` VALUES (1694,'',13,166,2,417,20,4,2,1,'Outbound','','',2,5); +INSERT INTO `graph_templates_item` VALUES (1695,'',14,166,2,417,0,9,2,4,'Current:','','',2,6); +INSERT INTO `graph_templates_item` VALUES (1696,'',15,166,2,417,0,9,2,1,'Average:','','',2,7); +INSERT INTO `graph_templates_item` VALUES (1697,'',16,166,2,417,0,9,2,3,'Maximum:','','',2,8); +INSERT INTO `graph_templates_item` VALUES (1698,'',139,167,18,418,9,7,0,1,'CPU Usage','','',2,1); +INSERT INTO `graph_templates_item` VALUES (1699,'',140,167,18,418,0,9,0,4,'Current:','','',3,2); +INSERT INTO `graph_templates_item` VALUES (1700,'',141,167,18,418,0,9,0,1,'Average:','','',3,3); +INSERT INTO `graph_templates_item` VALUES (1701,'',142,167,18,418,0,9,0,3,'Maximum:','','',3,4); +INSERT INTO `graph_templates_item` VALUES (1702,'',9,168,2,419,22,7,2,1,'Inbound','','',2,1); +INSERT INTO `graph_templates_item` VALUES (1703,'',10,168,2,419,0,9,2,4,'Current:','','',2,2); +INSERT INTO `graph_templates_item` VALUES (1704,'',11,168,2,419,0,9,2,1,'Average:','','',2,3); +INSERT INTO `graph_templates_item` VALUES (1705,'',12,168,2,419,0,9,2,3,'Maximum:','','on',2,4); +INSERT INTO `graph_templates_item` VALUES (1706,'',13,168,2,420,20,4,2,1,'Outbound','','',2,5); +INSERT INTO `graph_templates_item` VALUES (1707,'',14,168,2,420,0,9,2,4,'Current:','','',2,6); +INSERT INTO `graph_templates_item` VALUES (1708,'',15,168,2,420,0,9,2,1,'Average:','','',2,7); +INSERT INTO `graph_templates_item` VALUES (1709,'',16,168,2,420,0,9,2,3,'Maximum:','','',2,8); +INSERT INTO `graph_templates_item` VALUES (1710,'',9,169,2,421,22,7,2,1,'Inbound','','',2,1); +INSERT INTO `graph_templates_item` VALUES (1711,'',10,169,2,421,0,9,2,4,'Current:','','',2,2); +INSERT INTO `graph_templates_item` VALUES (1712,'',11,169,2,421,0,9,2,1,'Average:','','',2,3); +INSERT INTO `graph_templates_item` VALUES (1713,'',12,169,2,421,0,9,2,3,'Maximum:','','on',2,4); +INSERT INTO `graph_templates_item` VALUES (1714,'',13,169,2,422,20,4,2,1,'Outbound','','',2,5); +INSERT INTO `graph_templates_item` VALUES (1715,'',14,169,2,422,0,9,2,4,'Current:','','',2,6); +INSERT INTO `graph_templates_item` VALUES (1716,'',15,169,2,422,0,9,2,1,'Average:','','',2,7); +INSERT INTO `graph_templates_item` VALUES (1717,'',16,169,2,422,0,9,2,3,'Maximum:','','',2,8); +INSERT INTO `graph_templates_item` VALUES (1718,'',9,170,2,423,22,7,2,1,'Inbound','','',2,1); +INSERT INTO `graph_templates_item` VALUES (1719,'',10,170,2,423,0,9,2,4,'Current:','','',2,2); +INSERT INTO `graph_templates_item` VALUES (1720,'',11,170,2,423,0,9,2,1,'Average:','','',2,3); +INSERT INTO `graph_templates_item` VALUES (1721,'',12,170,2,423,0,9,2,3,'Maximum:','','on',2,4); +INSERT INTO `graph_templates_item` VALUES (1722,'',13,170,2,424,20,4,2,1,'Outbound','','',2,5); +INSERT INTO `graph_templates_item` VALUES (1723,'',14,170,2,424,0,9,2,4,'Current:','','',2,6); +INSERT INTO `graph_templates_item` VALUES (1724,'',15,170,2,424,0,9,2,1,'Average:','','',2,7); +INSERT INTO `graph_templates_item` VALUES (1725,'',16,170,2,424,0,9,2,3,'Maximum:','','',2,8); +INSERT INTO `graph_templates_item` VALUES (1726,'',9,171,2,425,22,7,2,1,'Inbound','','',2,1); +INSERT INTO `graph_templates_item` VALUES (1727,'',10,171,2,425,0,9,2,4,'Current:','','',2,2); +INSERT INTO `graph_templates_item` VALUES (1728,'',11,171,2,425,0,9,2,1,'Average:','','',2,3); +INSERT INTO `graph_templates_item` VALUES (1729,'',12,171,2,425,0,9,2,3,'Maximum:','','on',2,4); +INSERT INTO `graph_templates_item` VALUES (1730,'',13,171,2,426,20,4,2,1,'Outbound','','',2,5); +INSERT INTO `graph_templates_item` VALUES (1731,'',14,171,2,426,0,9,2,4,'Current:','','',2,6); +INSERT INTO `graph_templates_item` VALUES (1732,'',15,171,2,426,0,9,2,1,'Average:','','',2,7); +INSERT INTO `graph_templates_item` VALUES (1733,'',16,171,2,426,0,9,2,3,'Maximum:','','',2,8); +INSERT INTO `graph_templates_item` VALUES (1734,'',9,172,2,427,22,7,2,1,'Inbound','','',2,1); +INSERT INTO `graph_templates_item` VALUES (1735,'',10,172,2,427,0,9,2,4,'Current:','','',2,2); +INSERT INTO `graph_templates_item` VALUES (1736,'',11,172,2,427,0,9,2,1,'Average:','','',2,3); +INSERT INTO `graph_templates_item` VALUES (1737,'',12,172,2,427,0,9,2,3,'Maximum:','','on',2,4); +INSERT INTO `graph_templates_item` VALUES (1738,'',13,172,2,428,20,4,2,1,'Outbound','','',2,5); +INSERT INTO `graph_templates_item` VALUES (1739,'',14,172,2,428,0,9,2,4,'Current:','','',2,6); +INSERT INTO `graph_templates_item` VALUES (1740,'',15,172,2,428,0,9,2,1,'Average:','','',2,7); +INSERT INTO `graph_templates_item` VALUES (1741,'',16,172,2,428,0,9,2,3,'Maximum:','','',2,8); +INSERT INTO `graph_templates_item` VALUES (1742,'',9,173,2,429,22,7,2,1,'Inbound','','',2,1); +INSERT INTO `graph_templates_item` VALUES (1743,'',10,173,2,429,0,9,2,4,'Current:','','',2,2); +INSERT INTO `graph_templates_item` VALUES (1744,'',11,173,2,429,0,9,2,1,'Average:','','',2,3); +INSERT INTO `graph_templates_item` VALUES (1745,'',12,173,2,429,0,9,2,3,'Maximum:','','on',2,4); +INSERT INTO `graph_templates_item` VALUES (1746,'',13,173,2,430,20,4,2,1,'Outbound','','',2,5); +INSERT INTO `graph_templates_item` VALUES (1747,'',14,173,2,430,0,9,2,4,'Current:','','',2,6); +INSERT INTO `graph_templates_item` VALUES (1748,'',15,173,2,430,0,9,2,1,'Average:','','',2,7); +INSERT INTO `graph_templates_item` VALUES (1749,'',16,173,2,430,0,9,2,3,'Maximum:','','',2,8); +INSERT INTO `graph_templates_item` VALUES (1750,'',9,174,2,431,22,7,2,1,'Inbound','','',2,1); +INSERT INTO `graph_templates_item` VALUES (1751,'',10,174,2,431,0,9,2,4,'Current:','','',2,2); +INSERT INTO `graph_templates_item` VALUES (1752,'',11,174,2,431,0,9,2,1,'Average:','','',2,3); +INSERT INTO `graph_templates_item` VALUES (1753,'',12,174,2,431,0,9,2,3,'Maximum:','','on',2,4); +INSERT INTO `graph_templates_item` VALUES (1754,'',13,174,2,432,20,4,2,1,'Outbound','','',2,5); +INSERT INTO `graph_templates_item` VALUES (1755,'',14,174,2,432,0,9,2,4,'Current:','','',2,6); +INSERT INTO `graph_templates_item` VALUES (1756,'',15,174,2,432,0,9,2,1,'Average:','','',2,7); +INSERT INTO `graph_templates_item` VALUES (1757,'',16,174,2,432,0,9,2,3,'Maximum:','','',2,8); +INSERT INTO `graph_templates_item` VALUES (1758,'',9,175,2,433,22,7,2,1,'Inbound','','',2,1); +INSERT INTO `graph_templates_item` VALUES (1759,'',10,175,2,433,0,9,2,4,'Current:','','',2,2); +INSERT INTO `graph_templates_item` VALUES (1760,'',11,175,2,433,0,9,2,1,'Average:','','',2,3); +INSERT INTO `graph_templates_item` VALUES (1761,'',12,175,2,433,0,9,2,3,'Maximum:','','on',2,4); +INSERT INTO `graph_templates_item` VALUES (1762,'',13,175,2,434,20,4,2,1,'Outbound','','',2,5); +INSERT INTO `graph_templates_item` VALUES (1763,'',14,175,2,434,0,9,2,4,'Current:','','',2,6); +INSERT INTO `graph_templates_item` VALUES (1764,'',15,175,2,434,0,9,2,1,'Average:','','',2,7); +INSERT INTO `graph_templates_item` VALUES (1765,'',16,175,2,434,0,9,2,3,'Maximum:','','',2,8); +INSERT INTO `graph_templates_item` VALUES (1766,'',9,176,2,435,22,7,2,1,'Inbound','','',2,1); +INSERT INTO `graph_templates_item` VALUES (1767,'',10,176,2,435,0,9,2,4,'Current:','','',2,2); +INSERT INTO `graph_templates_item` VALUES (1768,'',11,176,2,435,0,9,2,1,'Average:','','',2,3); +INSERT INTO `graph_templates_item` VALUES (1769,'',12,176,2,435,0,9,2,3,'Maximum:','','on',2,4); +INSERT INTO `graph_templates_item` VALUES (1770,'',13,176,2,436,20,4,2,1,'Outbound','','',2,5); +INSERT INTO `graph_templates_item` VALUES (1771,'',14,176,2,436,0,9,2,4,'Current:','','',2,6); +INSERT INTO `graph_templates_item` VALUES (1772,'',15,176,2,436,0,9,2,1,'Average:','','',2,7); +INSERT INTO `graph_templates_item` VALUES (1773,'',16,176,2,436,0,9,2,3,'Maximum:','','',2,8); +INSERT INTO `graph_templates_item` VALUES (1774,'',9,177,2,437,22,7,2,1,'Inbound','','',2,1); +INSERT INTO `graph_templates_item` VALUES (1775,'',10,177,2,437,0,9,2,4,'Current:','','',2,2); +INSERT INTO `graph_templates_item` VALUES (1776,'',11,177,2,437,0,9,2,1,'Average:','','',2,3); +INSERT INTO `graph_templates_item` VALUES (1777,'',12,177,2,437,0,9,2,3,'Maximum:','','on',2,4); +INSERT INTO `graph_templates_item` VALUES (1778,'',13,177,2,438,20,4,2,1,'Outbound','','',2,5); +INSERT INTO `graph_templates_item` VALUES (1779,'',14,177,2,438,0,9,2,4,'Current:','','',2,6); +INSERT INTO `graph_templates_item` VALUES (1780,'',15,177,2,438,0,9,2,1,'Average:','','',2,7); +INSERT INTO `graph_templates_item` VALUES (1781,'',16,177,2,438,0,9,2,3,'Maximum:','','',2,8); +INSERT INTO `graph_templates_item` VALUES (1782,'',9,178,2,439,22,7,2,1,'Inbound','','',2,1); +INSERT INTO `graph_templates_item` VALUES (1783,'',10,178,2,439,0,9,2,4,'Current:','','',2,2); +INSERT INTO `graph_templates_item` VALUES (1784,'',11,178,2,439,0,9,2,1,'Average:','','',2,3); +INSERT INTO `graph_templates_item` VALUES (1785,'',12,178,2,439,0,9,2,3,'Maximum:','','on',2,4); +INSERT INTO `graph_templates_item` VALUES (1786,'',13,178,2,440,20,4,2,1,'Outbound','','',2,5); +INSERT INTO `graph_templates_item` VALUES (1787,'',14,178,2,440,0,9,2,4,'Current:','','',2,6); +INSERT INTO `graph_templates_item` VALUES (1788,'',15,178,2,440,0,9,2,1,'Average:','','',2,7); +INSERT INTO `graph_templates_item` VALUES (1789,'',16,178,2,440,0,9,2,3,'Maximum:','','',2,8); +INSERT INTO `graph_templates_item` VALUES (1790,'',9,179,2,441,22,7,2,1,'Inbound','','',2,1); +INSERT INTO `graph_templates_item` VALUES (1791,'',10,179,2,441,0,9,2,4,'Current:','','',2,2); +INSERT INTO `graph_templates_item` VALUES (1792,'',11,179,2,441,0,9,2,1,'Average:','','',2,3); +INSERT INTO `graph_templates_item` VALUES (1793,'',12,179,2,441,0,9,2,3,'Maximum:','','on',2,4); +INSERT INTO `graph_templates_item` VALUES (1794,'',13,179,2,442,20,4,2,1,'Outbound','','',2,5); +INSERT INTO `graph_templates_item` VALUES (1795,'',14,179,2,442,0,9,2,4,'Current:','','',2,6); +INSERT INTO `graph_templates_item` VALUES (1796,'',15,179,2,442,0,9,2,1,'Average:','','',2,7); +INSERT INTO `graph_templates_item` VALUES (1797,'',16,179,2,442,0,9,2,3,'Maximum:','','',2,8); +INSERT INTO `graph_templates_item` VALUES (1798,'',9,180,2,443,22,7,2,1,'Inbound','','',2,1); +INSERT INTO `graph_templates_item` VALUES (1799,'',10,180,2,443,0,9,2,4,'Current:','','',2,2); +INSERT INTO `graph_templates_item` VALUES (1800,'',11,180,2,443,0,9,2,1,'Average:','','',2,3); +INSERT INTO `graph_templates_item` VALUES (1801,'',12,180,2,443,0,9,2,3,'Maximum:','','on',2,4); +INSERT INTO `graph_templates_item` VALUES (1802,'',13,180,2,444,20,4,2,1,'Outbound','','',2,5); +INSERT INTO `graph_templates_item` VALUES (1803,'',14,180,2,444,0,9,2,4,'Current:','','',2,6); +INSERT INTO `graph_templates_item` VALUES (1804,'',15,180,2,444,0,9,2,1,'Average:','','',2,7); +INSERT INTO `graph_templates_item` VALUES (1805,'',16,180,2,444,0,9,2,3,'Maximum:','','',2,8); +INSERT INTO `graph_templates_item` VALUES (1806,'',9,181,2,445,22,7,2,1,'Inbound','','',2,1); +INSERT INTO `graph_templates_item` VALUES (1807,'',10,181,2,445,0,9,2,4,'Current:','','',2,2); +INSERT INTO `graph_templates_item` VALUES (1808,'',11,181,2,445,0,9,2,1,'Average:','','',2,3); +INSERT INTO `graph_templates_item` VALUES (1809,'',12,181,2,445,0,9,2,3,'Maximum:','','on',2,4); +INSERT INTO `graph_templates_item` VALUES (1810,'',13,181,2,446,20,4,2,1,'Outbound','','',2,5); +INSERT INTO `graph_templates_item` VALUES (1811,'',14,181,2,446,0,9,2,4,'Current:','','',2,6); +INSERT INTO `graph_templates_item` VALUES (1812,'',15,181,2,446,0,9,2,1,'Average:','','',2,7); +INSERT INTO `graph_templates_item` VALUES (1813,'',16,181,2,446,0,9,2,3,'Maximum:','','',2,8); +INSERT INTO `graph_templates_item` VALUES (1814,'',9,182,2,447,22,7,2,1,'Inbound','','',2,1); +INSERT INTO `graph_templates_item` VALUES (1815,'',10,182,2,447,0,9,2,4,'Current:','','',2,2); +INSERT INTO `graph_templates_item` VALUES (1816,'',11,182,2,447,0,9,2,1,'Average:','','',2,3); +INSERT INTO `graph_templates_item` VALUES (1817,'',12,182,2,447,0,9,2,3,'Maximum:','','on',2,4); +INSERT INTO `graph_templates_item` VALUES (1818,'',13,182,2,448,20,4,2,1,'Outbound','','',2,5); +INSERT INTO `graph_templates_item` VALUES (1819,'',14,182,2,448,0,9,2,4,'Current:','','',2,6); +INSERT INTO `graph_templates_item` VALUES (1820,'',15,182,2,448,0,9,2,1,'Average:','','',2,7); +INSERT INTO `graph_templates_item` VALUES (1821,'',16,182,2,448,0,9,2,3,'Maximum:','','',2,8); +INSERT INTO `graph_templates_item` VALUES (1822,'',9,183,2,449,22,7,2,1,'Inbound','','',2,1); +INSERT INTO `graph_templates_item` VALUES (1823,'',10,183,2,449,0,9,2,4,'Current:','','',2,2); +INSERT INTO `graph_templates_item` VALUES (1824,'',11,183,2,449,0,9,2,1,'Average:','','',2,3); +INSERT INTO `graph_templates_item` VALUES (1825,'',12,183,2,449,0,9,2,3,'Maximum:','','on',2,4); +INSERT INTO `graph_templates_item` VALUES (1826,'',13,183,2,450,20,4,2,1,'Outbound','','',2,5); +INSERT INTO `graph_templates_item` VALUES (1827,'',14,183,2,450,0,9,2,4,'Current:','','',2,6); +INSERT INTO `graph_templates_item` VALUES (1828,'',15,183,2,450,0,9,2,1,'Average:','','',2,7); +INSERT INTO `graph_templates_item` VALUES (1829,'',16,183,2,450,0,9,2,3,'Maximum:','','',2,8); +INSERT INTO `graph_templates_item` VALUES (1830,'',9,184,2,451,22,7,2,1,'Inbound','','',2,1); +INSERT INTO `graph_templates_item` VALUES (1831,'',10,184,2,451,0,9,2,4,'Current:','','',2,2); +INSERT INTO `graph_templates_item` VALUES (1832,'',11,184,2,451,0,9,2,1,'Average:','','',2,3); +INSERT INTO `graph_templates_item` VALUES (1833,'',12,184,2,451,0,9,2,3,'Maximum:','','on',2,4); +INSERT INTO `graph_templates_item` VALUES (1834,'',13,184,2,452,20,4,2,1,'Outbound','','',2,5); +INSERT INTO `graph_templates_item` VALUES (1835,'',14,184,2,452,0,9,2,4,'Current:','','',2,6); +INSERT INTO `graph_templates_item` VALUES (1836,'',15,184,2,452,0,9,2,1,'Average:','','',2,7); +INSERT INTO `graph_templates_item` VALUES (1837,'',16,184,2,452,0,9,2,3,'Maximum:','','',2,8); +INSERT INTO `graph_templates_item` VALUES (1838,'',9,185,2,453,22,7,2,1,'Inbound','','',2,1); +INSERT INTO `graph_templates_item` VALUES (1839,'',10,185,2,453,0,9,2,4,'Current:','','',2,2); +INSERT INTO `graph_templates_item` VALUES (1840,'',11,185,2,453,0,9,2,1,'Average:','','',2,3); +INSERT INTO `graph_templates_item` VALUES (1841,'',12,185,2,453,0,9,2,3,'Maximum:','','on',2,4); +INSERT INTO `graph_templates_item` VALUES (1842,'',13,185,2,454,20,4,2,1,'Outbound','','',2,5); +INSERT INTO `graph_templates_item` VALUES (1843,'',14,185,2,454,0,9,2,4,'Current:','','',2,6); +INSERT INTO `graph_templates_item` VALUES (1844,'',15,185,2,454,0,9,2,1,'Average:','','',2,7); +INSERT INTO `graph_templates_item` VALUES (1845,'',16,185,2,454,0,9,2,3,'Maximum:','','',2,8); +INSERT INTO `graph_templates_item` VALUES (1846,'',9,186,2,455,22,7,2,1,'Inbound','','',2,1); +INSERT INTO `graph_templates_item` VALUES (1847,'',10,186,2,455,0,9,2,4,'Current:','','',2,2); +INSERT INTO `graph_templates_item` VALUES (1848,'',11,186,2,455,0,9,2,1,'Average:','','',2,3); +INSERT INTO `graph_templates_item` VALUES (1849,'',12,186,2,455,0,9,2,3,'Maximum:','','on',2,4); +INSERT INTO `graph_templates_item` VALUES (1850,'',13,186,2,456,20,4,2,1,'Outbound','','',2,5); +INSERT INTO `graph_templates_item` VALUES (1851,'',14,186,2,456,0,9,2,4,'Current:','','',2,6); +INSERT INTO `graph_templates_item` VALUES (1852,'',15,186,2,456,0,9,2,1,'Average:','','',2,7); +INSERT INTO `graph_templates_item` VALUES (1853,'',16,186,2,456,0,9,2,3,'Maximum:','','',2,8); +INSERT INTO `graph_templates_item` VALUES (1854,'',9,187,2,457,22,7,2,1,'Inbound','','',2,1); +INSERT INTO `graph_templates_item` VALUES (1855,'',10,187,2,457,0,9,2,4,'Current:','','',2,2); +INSERT INTO `graph_templates_item` VALUES (1856,'',11,187,2,457,0,9,2,1,'Average:','','',2,3); +INSERT INTO `graph_templates_item` VALUES (1857,'',12,187,2,457,0,9,2,3,'Maximum:','','on',2,4); +INSERT INTO `graph_templates_item` VALUES (1858,'',13,187,2,458,20,4,2,1,'Outbound','','',2,5); +INSERT INTO `graph_templates_item` VALUES (1859,'',14,187,2,458,0,9,2,4,'Current:','','',2,6); +INSERT INTO `graph_templates_item` VALUES (1860,'',15,187,2,458,0,9,2,1,'Average:','','',2,7); +INSERT INTO `graph_templates_item` VALUES (1861,'',16,187,2,458,0,9,2,3,'Maximum:','','',2,8); +INSERT INTO `graph_templates_item` VALUES (1862,'',9,188,2,459,22,7,2,1,'Inbound','','',2,1); +INSERT INTO `graph_templates_item` VALUES (1863,'',10,188,2,459,0,9,2,4,'Current:','','',2,2); +INSERT INTO `graph_templates_item` VALUES (1864,'',11,188,2,459,0,9,2,1,'Average:','','',2,3); +INSERT INTO `graph_templates_item` VALUES (1865,'',12,188,2,459,0,9,2,3,'Maximum:','','on',2,4); +INSERT INTO `graph_templates_item` VALUES (1866,'',13,188,2,460,20,4,2,1,'Outbound','','',2,5); +INSERT INTO `graph_templates_item` VALUES (1867,'',14,188,2,460,0,9,2,4,'Current:','','',2,6); +INSERT INTO `graph_templates_item` VALUES (1868,'',15,188,2,460,0,9,2,1,'Average:','','',2,7); +INSERT INTO `graph_templates_item` VALUES (1869,'',16,188,2,460,0,9,2,3,'Maximum:','','',2,8); +INSERT INTO `graph_templates_item` VALUES (1870,'',9,189,2,461,22,7,2,1,'Inbound','','',2,1); +INSERT INTO `graph_templates_item` VALUES (1871,'',10,189,2,461,0,9,2,4,'Current:','','',2,2); +INSERT INTO `graph_templates_item` VALUES (1872,'',11,189,2,461,0,9,2,1,'Average:','','',2,3); +INSERT INTO `graph_templates_item` VALUES (1873,'',12,189,2,461,0,9,2,3,'Maximum:','','on',2,4); +INSERT INTO `graph_templates_item` VALUES (1874,'',13,189,2,462,20,4,2,1,'Outbound','','',2,5); +INSERT INTO `graph_templates_item` VALUES (1875,'',14,189,2,462,0,9,2,4,'Current:','','',2,6); +INSERT INTO `graph_templates_item` VALUES (1876,'',15,189,2,462,0,9,2,1,'Average:','','',2,7); +INSERT INTO `graph_templates_item` VALUES (1877,'',16,189,2,462,0,9,2,3,'Maximum:','','',2,8); +INSERT INTO `graph_templates_item` VALUES (1878,'',9,190,2,463,22,7,2,1,'Inbound','','',2,1); +INSERT INTO `graph_templates_item` VALUES (1879,'',10,190,2,463,0,9,2,4,'Current:','','',2,2); +INSERT INTO `graph_templates_item` VALUES (1880,'',11,190,2,463,0,9,2,1,'Average:','','',2,3); +INSERT INTO `graph_templates_item` VALUES (1881,'',12,190,2,463,0,9,2,3,'Maximum:','','on',2,4); +INSERT INTO `graph_templates_item` VALUES (1882,'',13,190,2,464,20,4,2,1,'Outbound','','',2,5); +INSERT INTO `graph_templates_item` VALUES (1883,'',14,190,2,464,0,9,2,4,'Current:','','',2,6); +INSERT INTO `graph_templates_item` VALUES (1884,'',15,190,2,464,0,9,2,1,'Average:','','',2,7); +INSERT INTO `graph_templates_item` VALUES (1885,'',16,190,2,464,0,9,2,3,'Maximum:','','',2,8); +INSERT INTO `graph_templates_item` VALUES (1886,'',9,191,2,465,22,7,2,1,'Inbound','','',2,1); +INSERT INTO `graph_templates_item` VALUES (1887,'',10,191,2,465,0,9,2,4,'Current:','','',2,2); +INSERT INTO `graph_templates_item` VALUES (1888,'',11,191,2,465,0,9,2,1,'Average:','','',2,3); +INSERT INTO `graph_templates_item` VALUES (1889,'',12,191,2,465,0,9,2,3,'Maximum:','','on',2,4); +INSERT INTO `graph_templates_item` VALUES (1890,'',13,191,2,466,20,4,2,1,'Outbound','','',2,5); +INSERT INTO `graph_templates_item` VALUES (1891,'',14,191,2,466,0,9,2,4,'Current:','','',2,6); +INSERT INTO `graph_templates_item` VALUES (1892,'',15,191,2,466,0,9,2,1,'Average:','','',2,7); +INSERT INTO `graph_templates_item` VALUES (1893,'',16,191,2,466,0,9,2,3,'Maximum:','','',2,8); +INSERT INTO `graph_templates_item` VALUES (1894,'',9,192,2,467,22,7,2,1,'Inbound','','',2,1); +INSERT INTO `graph_templates_item` VALUES (1895,'',10,192,2,467,0,9,2,4,'Current:','','',2,2); +INSERT INTO `graph_templates_item` VALUES (1896,'',11,192,2,467,0,9,2,1,'Average:','','',2,3); +INSERT INTO `graph_templates_item` VALUES (1897,'',12,192,2,467,0,9,2,3,'Maximum:','','on',2,4); +INSERT INTO `graph_templates_item` VALUES (1898,'',13,192,2,468,20,4,2,1,'Outbound','','',2,5); +INSERT INTO `graph_templates_item` VALUES (1899,'',14,192,2,468,0,9,2,4,'Current:','','',2,6); +INSERT INTO `graph_templates_item` VALUES (1900,'',15,192,2,468,0,9,2,1,'Average:','','',2,7); +INSERT INTO `graph_templates_item` VALUES (1901,'',16,192,2,468,0,9,2,3,'Maximum:','','',2,8); +INSERT INTO `graph_templates_item` VALUES (1902,'',9,193,2,469,22,7,2,1,'Inbound','','',2,1); +INSERT INTO `graph_templates_item` VALUES (1903,'',10,193,2,469,0,9,2,4,'Current:','','',2,2); +INSERT INTO `graph_templates_item` VALUES (1904,'',11,193,2,469,0,9,2,1,'Average:','','',2,3); +INSERT INTO `graph_templates_item` VALUES (1905,'',12,193,2,469,0,9,2,3,'Maximum:','','on',2,4); +INSERT INTO `graph_templates_item` VALUES (1906,'',13,193,2,470,20,4,2,1,'Outbound','','',2,5); +INSERT INTO `graph_templates_item` VALUES (1907,'',14,193,2,470,0,9,2,4,'Current:','','',2,6); +INSERT INTO `graph_templates_item` VALUES (1908,'',15,193,2,470,0,9,2,1,'Average:','','',2,7); +INSERT INTO `graph_templates_item` VALUES (1909,'',16,193,2,470,0,9,2,3,'Maximum:','','',2,8); +INSERT INTO `graph_templates_item` VALUES (1910,'',9,194,2,471,22,7,2,1,'Inbound','','',2,1); +INSERT INTO `graph_templates_item` VALUES (1911,'',10,194,2,471,0,9,2,4,'Current:','','',2,2); +INSERT INTO `graph_templates_item` VALUES (1912,'',11,194,2,471,0,9,2,1,'Average:','','',2,3); +INSERT INTO `graph_templates_item` VALUES (1913,'',12,194,2,471,0,9,2,3,'Maximum:','','on',2,4); +INSERT INTO `graph_templates_item` VALUES (1914,'',13,194,2,472,20,4,2,1,'Outbound','','',2,5); +INSERT INTO `graph_templates_item` VALUES (1915,'',14,194,2,472,0,9,2,4,'Current:','','',2,6); +INSERT INTO `graph_templates_item` VALUES (1916,'',15,194,2,472,0,9,2,1,'Average:','','',2,7); +INSERT INTO `graph_templates_item` VALUES (1917,'',16,194,2,472,0,9,2,3,'Maximum:','','',2,8); +INSERT INTO `graph_templates_item` VALUES (1918,'',9,195,2,473,22,7,2,1,'Inbound','','',2,1); +INSERT INTO `graph_templates_item` VALUES (1919,'',10,195,2,473,0,9,2,4,'Current:','','',2,2); +INSERT INTO `graph_templates_item` VALUES (1920,'',11,195,2,473,0,9,2,1,'Average:','','',2,3); +INSERT INTO `graph_templates_item` VALUES (1921,'',12,195,2,473,0,9,2,3,'Maximum:','','on',2,4); +INSERT INTO `graph_templates_item` VALUES (1922,'',13,195,2,474,20,4,2,1,'Outbound','','',2,5); +INSERT INTO `graph_templates_item` VALUES (1923,'',14,195,2,474,0,9,2,4,'Current:','','',2,6); +INSERT INTO `graph_templates_item` VALUES (1924,'',15,195,2,474,0,9,2,1,'Average:','','',2,7); +INSERT INTO `graph_templates_item` VALUES (1925,'',16,195,2,474,0,9,2,3,'Maximum:','','',2,8); +INSERT INTO `graph_templates_item` VALUES (1926,'',9,196,2,475,22,7,2,1,'Inbound','','',2,1); +INSERT INTO `graph_templates_item` VALUES (1927,'',10,196,2,475,0,9,2,4,'Current:','','',2,2); +INSERT INTO `graph_templates_item` VALUES (1928,'',11,196,2,475,0,9,2,1,'Average:','','',2,3); +INSERT INTO `graph_templates_item` VALUES (1929,'',12,196,2,475,0,9,2,3,'Maximum:','','on',2,4); +INSERT INTO `graph_templates_item` VALUES (1930,'',13,196,2,476,20,4,2,1,'Outbound','','',2,5); +INSERT INTO `graph_templates_item` VALUES (1931,'',14,196,2,476,0,9,2,4,'Current:','','',2,6); +INSERT INTO `graph_templates_item` VALUES (1932,'',15,196,2,476,0,9,2,1,'Average:','','',2,7); +INSERT INTO `graph_templates_item` VALUES (1933,'',16,196,2,476,0,9,2,3,'Maximum:','','',2,8); +INSERT INTO `graph_templates_item` VALUES (1934,'',9,197,2,477,22,7,2,1,'Inbound','','',2,1); +INSERT INTO `graph_templates_item` VALUES (1935,'',10,197,2,477,0,9,2,4,'Current:','','',2,2); +INSERT INTO `graph_templates_item` VALUES (1936,'',11,197,2,477,0,9,2,1,'Average:','','',2,3); +INSERT INTO `graph_templates_item` VALUES (1937,'',12,197,2,477,0,9,2,3,'Maximum:','','on',2,4); +INSERT INTO `graph_templates_item` VALUES (1938,'',13,197,2,478,20,4,2,1,'Outbound','','',2,5); +INSERT INTO `graph_templates_item` VALUES (1939,'',14,197,2,478,0,9,2,4,'Current:','','',2,6); +INSERT INTO `graph_templates_item` VALUES (1940,'',15,197,2,478,0,9,2,1,'Average:','','',2,7); +INSERT INTO `graph_templates_item` VALUES (1941,'',16,197,2,478,0,9,2,3,'Maximum:','','',2,8); +INSERT INTO `graph_templates_item` VALUES (1942,'',9,198,2,479,22,7,2,1,'Inbound','','',2,1); +INSERT INTO `graph_templates_item` VALUES (1943,'',10,198,2,479,0,9,2,4,'Current:','','',2,2); +INSERT INTO `graph_templates_item` VALUES (1944,'',11,198,2,479,0,9,2,1,'Average:','','',2,3); +INSERT INTO `graph_templates_item` VALUES (1945,'',12,198,2,479,0,9,2,3,'Maximum:','','on',2,4); +INSERT INTO `graph_templates_item` VALUES (1946,'',13,198,2,480,20,4,2,1,'Outbound','','',2,5); +INSERT INTO `graph_templates_item` VALUES (1947,'',14,198,2,480,0,9,2,4,'Current:','','',2,6); +INSERT INTO `graph_templates_item` VALUES (1948,'',15,198,2,480,0,9,2,1,'Average:','','',2,7); +INSERT INTO `graph_templates_item` VALUES (1949,'',16,198,2,480,0,9,2,3,'Maximum:','','',2,8); +INSERT INTO `graph_templates_item` VALUES (1950,'',9,199,2,481,22,7,2,1,'Inbound','','',2,1); +INSERT INTO `graph_templates_item` VALUES (1951,'',10,199,2,481,0,9,2,4,'Current:','','',2,2); +INSERT INTO `graph_templates_item` VALUES (1952,'',11,199,2,481,0,9,2,1,'Average:','','',2,3); +INSERT INTO `graph_templates_item` VALUES (1953,'',12,199,2,481,0,9,2,3,'Maximum:','','on',2,4); +INSERT INTO `graph_templates_item` VALUES (1954,'',13,199,2,482,20,4,2,1,'Outbound','','',2,5); +INSERT INTO `graph_templates_item` VALUES (1955,'',14,199,2,482,0,9,2,4,'Current:','','',2,6); +INSERT INTO `graph_templates_item` VALUES (1956,'',15,199,2,482,0,9,2,1,'Average:','','',2,7); +INSERT INTO `graph_templates_item` VALUES (1957,'',16,199,2,482,0,9,2,3,'Maximum:','','',2,8); +INSERT INTO `graph_templates_item` VALUES (1958,'',9,200,2,483,22,7,2,1,'Inbound','','',2,1); +INSERT INTO `graph_templates_item` VALUES (1959,'',10,200,2,483,0,9,2,4,'Current:','','',2,2); +INSERT INTO `graph_templates_item` VALUES (1960,'',11,200,2,483,0,9,2,1,'Average:','','',2,3); +INSERT INTO `graph_templates_item` VALUES (1961,'',12,200,2,483,0,9,2,3,'Maximum:','','on',2,4); +INSERT INTO `graph_templates_item` VALUES (1962,'',13,200,2,484,20,4,2,1,'Outbound','','',2,5); +INSERT INTO `graph_templates_item` VALUES (1963,'',14,200,2,484,0,9,2,4,'Current:','','',2,6); +INSERT INTO `graph_templates_item` VALUES (1964,'',15,200,2,484,0,9,2,1,'Average:','','',2,7); +INSERT INTO `graph_templates_item` VALUES (1965,'',16,200,2,484,0,9,2,3,'Maximum:','','',2,8); +INSERT INTO `graph_templates_item` VALUES (1966,'',9,201,2,485,22,7,2,1,'Inbound','','',2,1); +INSERT INTO `graph_templates_item` VALUES (1967,'',10,201,2,485,0,9,2,4,'Current:','','',2,2); +INSERT INTO `graph_templates_item` VALUES (1968,'',11,201,2,485,0,9,2,1,'Average:','','',2,3); +INSERT INTO `graph_templates_item` VALUES (1969,'',12,201,2,485,0,9,2,3,'Maximum:','','on',2,4); +INSERT INTO `graph_templates_item` VALUES (1970,'',13,201,2,486,20,4,2,1,'Outbound','','',2,5); +INSERT INTO `graph_templates_item` VALUES (1971,'',14,201,2,486,0,9,2,4,'Current:','','',2,6); +INSERT INTO `graph_templates_item` VALUES (1972,'',15,201,2,486,0,9,2,1,'Average:','','',2,7); +INSERT INTO `graph_templates_item` VALUES (1973,'',16,201,2,486,0,9,2,3,'Maximum:','','',2,8); +INSERT INTO `graph_templates_item` VALUES (1974,'',9,202,2,487,22,7,2,1,'Inbound','','',2,1); +INSERT INTO `graph_templates_item` VALUES (1975,'',10,202,2,487,0,9,2,4,'Current:','','',2,2); +INSERT INTO `graph_templates_item` VALUES (1976,'',11,202,2,487,0,9,2,1,'Average:','','',2,3); +INSERT INTO `graph_templates_item` VALUES (1977,'',12,202,2,487,0,9,2,3,'Maximum:','','on',2,4); +INSERT INTO `graph_templates_item` VALUES (1978,'',13,202,2,488,20,4,2,1,'Outbound','','',2,5); +INSERT INTO `graph_templates_item` VALUES (1979,'',14,202,2,488,0,9,2,4,'Current:','','',2,6); +INSERT INTO `graph_templates_item` VALUES (1980,'',15,202,2,488,0,9,2,1,'Average:','','',2,7); +INSERT INTO `graph_templates_item` VALUES (1981,'',16,202,2,488,0,9,2,3,'Maximum:','','',2,8); +INSERT INTO `graph_templates_item` VALUES (1982,'',9,203,2,489,22,7,2,1,'Inbound','','',2,1); +INSERT INTO `graph_templates_item` VALUES (1983,'',10,203,2,489,0,9,2,4,'Current:','','',2,2); +INSERT INTO `graph_templates_item` VALUES (1984,'',11,203,2,489,0,9,2,1,'Average:','','',2,3); +INSERT INTO `graph_templates_item` VALUES (1985,'',12,203,2,489,0,9,2,3,'Maximum:','','on',2,4); +INSERT INTO `graph_templates_item` VALUES (1986,'',13,203,2,490,20,4,2,1,'Outbound','','',2,5); +INSERT INTO `graph_templates_item` VALUES (1987,'',14,203,2,490,0,9,2,4,'Current:','','',2,6); +INSERT INTO `graph_templates_item` VALUES (1988,'',15,203,2,490,0,9,2,1,'Average:','','',2,7); +INSERT INTO `graph_templates_item` VALUES (1989,'',16,203,2,490,0,9,2,3,'Maximum:','','',2,8); +INSERT INTO `graph_templates_item` VALUES (1990,'',9,204,2,491,22,7,2,1,'Inbound','','',2,1); +INSERT INTO `graph_templates_item` VALUES (1991,'',10,204,2,491,0,9,2,4,'Current:','','',2,2); +INSERT INTO `graph_templates_item` VALUES (1992,'',11,204,2,491,0,9,2,1,'Average:','','',2,3); +INSERT INTO `graph_templates_item` VALUES (1993,'',12,204,2,491,0,9,2,3,'Maximum:','','on',2,4); +INSERT INTO `graph_templates_item` VALUES (1994,'',13,204,2,492,20,4,2,1,'Outbound','','',2,5); +INSERT INTO `graph_templates_item` VALUES (1995,'',14,204,2,492,0,9,2,4,'Current:','','',2,6); +INSERT INTO `graph_templates_item` VALUES (1996,'',15,204,2,492,0,9,2,1,'Average:','','',2,7); +INSERT INTO `graph_templates_item` VALUES (1997,'',16,204,2,492,0,9,2,3,'Maximum:','','',2,8); +INSERT INTO `graph_templates_item` VALUES (1998,'',9,205,2,493,22,7,2,1,'Inbound','','',2,1); +INSERT INTO `graph_templates_item` VALUES (1999,'',10,205,2,493,0,9,2,4,'Current:','','',2,2); +INSERT INTO `graph_templates_item` VALUES (2000,'',11,205,2,493,0,9,2,1,'Average:','','',2,3); +INSERT INTO `graph_templates_item` VALUES (2001,'',12,205,2,493,0,9,2,3,'Maximum:','','on',2,4); +INSERT INTO `graph_templates_item` VALUES (2002,'',13,205,2,494,20,4,2,1,'Outbound','','',2,5); +INSERT INTO `graph_templates_item` VALUES (2003,'',14,205,2,494,0,9,2,4,'Current:','','',2,6); +INSERT INTO `graph_templates_item` VALUES (2004,'',15,205,2,494,0,9,2,1,'Average:','','',2,7); +INSERT INTO `graph_templates_item` VALUES (2005,'',16,205,2,494,0,9,2,3,'Maximum:','','',2,8); +INSERT INTO `graph_templates_item` VALUES (2006,'',9,206,2,495,22,7,2,1,'Inbound','','',2,1); +INSERT INTO `graph_templates_item` VALUES (2007,'',10,206,2,495,0,9,2,4,'Current:','','',2,2); +INSERT INTO `graph_templates_item` VALUES (2008,'',11,206,2,495,0,9,2,1,'Average:','','',2,3); +INSERT INTO `graph_templates_item` VALUES (2009,'',12,206,2,495,0,9,2,3,'Maximum:','','on',2,4); +INSERT INTO `graph_templates_item` VALUES (2010,'',13,206,2,496,20,4,2,1,'Outbound','','',2,5); +INSERT INTO `graph_templates_item` VALUES (2011,'',14,206,2,496,0,9,2,4,'Current:','','',2,6); +INSERT INTO `graph_templates_item` VALUES (2012,'',15,206,2,496,0,9,2,1,'Average:','','',2,7); +INSERT INTO `graph_templates_item` VALUES (2013,'',16,206,2,496,0,9,2,3,'Maximum:','','',2,8); +INSERT INTO `graph_templates_item` VALUES (2014,'',9,207,2,497,22,7,2,1,'Inbound','','',2,1); +INSERT INTO `graph_templates_item` VALUES (2015,'',10,207,2,497,0,9,2,4,'Current:','','',2,2); +INSERT INTO `graph_templates_item` VALUES (2016,'',11,207,2,497,0,9,2,1,'Average:','','',2,3); +INSERT INTO `graph_templates_item` VALUES (2017,'',12,207,2,497,0,9,2,3,'Maximum:','','on',2,4); +INSERT INTO `graph_templates_item` VALUES (2018,'',13,207,2,498,20,4,2,1,'Outbound','','',2,5); +INSERT INTO `graph_templates_item` VALUES (2019,'',14,207,2,498,0,9,2,4,'Current:','','',2,6); +INSERT INTO `graph_templates_item` VALUES (2020,'',15,207,2,498,0,9,2,1,'Average:','','',2,7); +INSERT INTO `graph_templates_item` VALUES (2021,'',16,207,2,498,0,9,2,3,'Maximum:','','',2,8); +INSERT INTO `graph_templates_item` VALUES (2022,'',9,208,2,499,22,7,2,1,'Inbound','','',2,1); +INSERT INTO `graph_templates_item` VALUES (2023,'',10,208,2,499,0,9,2,4,'Current:','','',2,2); +INSERT INTO `graph_templates_item` VALUES (2024,'',11,208,2,499,0,9,2,1,'Average:','','',2,3); +INSERT INTO `graph_templates_item` VALUES (2025,'',12,208,2,499,0,9,2,3,'Maximum:','','on',2,4); +INSERT INTO `graph_templates_item` VALUES (2026,'',13,208,2,500,20,4,2,1,'Outbound','','',2,5); +INSERT INTO `graph_templates_item` VALUES (2027,'',14,208,2,500,0,9,2,4,'Current:','','',2,6); +INSERT INTO `graph_templates_item` VALUES (2028,'',15,208,2,500,0,9,2,1,'Average:','','',2,7); +INSERT INTO `graph_templates_item` VALUES (2029,'',16,208,2,500,0,9,2,3,'Maximum:','','',2,8); +INSERT INTO `graph_templates_item` VALUES (2030,'',9,209,2,501,22,7,2,1,'Inbound','','',2,1); +INSERT INTO `graph_templates_item` VALUES (2031,'',10,209,2,501,0,9,2,4,'Current:','','',2,2); +INSERT INTO `graph_templates_item` VALUES (2032,'',11,209,2,501,0,9,2,1,'Average:','','',2,3); +INSERT INTO `graph_templates_item` VALUES (2033,'',12,209,2,501,0,9,2,3,'Maximum:','','on',2,4); +INSERT INTO `graph_templates_item` VALUES (2034,'',13,209,2,502,20,4,2,1,'Outbound','','',2,5); +INSERT INTO `graph_templates_item` VALUES (2035,'',14,209,2,502,0,9,2,4,'Current:','','',2,6); +INSERT INTO `graph_templates_item` VALUES (2036,'',15,209,2,502,0,9,2,1,'Average:','','',2,7); +INSERT INTO `graph_templates_item` VALUES (2037,'',16,209,2,502,0,9,2,3,'Maximum:','','',2,8); +INSERT INTO `graph_templates_item` VALUES (2038,'',9,210,2,503,22,7,2,1,'Inbound','','',2,1); +INSERT INTO `graph_templates_item` VALUES (2039,'',10,210,2,503,0,9,2,4,'Current:','','',2,2); +INSERT INTO `graph_templates_item` VALUES (2040,'',11,210,2,503,0,9,2,1,'Average:','','',2,3); +INSERT INTO `graph_templates_item` VALUES (2041,'',12,210,2,503,0,9,2,3,'Maximum:','','on',2,4); +INSERT INTO `graph_templates_item` VALUES (2042,'',13,210,2,504,20,4,2,1,'Outbound','','',2,5); +INSERT INTO `graph_templates_item` VALUES (2043,'',14,210,2,504,0,9,2,4,'Current:','','',2,6); +INSERT INTO `graph_templates_item` VALUES (2044,'',15,210,2,504,0,9,2,1,'Average:','','',2,7); +INSERT INTO `graph_templates_item` VALUES (2045,'',16,210,2,504,0,9,2,3,'Maximum:','','',2,8); +INSERT INTO `graph_templates_item` VALUES (2046,'',9,211,2,505,22,7,2,1,'Inbound','','',2,1); +INSERT INTO `graph_templates_item` VALUES (2047,'',10,211,2,505,0,9,2,4,'Current:','','',2,2); +INSERT INTO `graph_templates_item` VALUES (2048,'',11,211,2,505,0,9,2,1,'Average:','','',2,3); +INSERT INTO `graph_templates_item` VALUES (2049,'',12,211,2,505,0,9,2,3,'Maximum:','','on',2,4); +INSERT INTO `graph_templates_item` VALUES (2050,'',13,211,2,506,20,4,2,1,'Outbound','','',2,5); +INSERT INTO `graph_templates_item` VALUES (2051,'',14,211,2,506,0,9,2,4,'Current:','','',2,6); +INSERT INTO `graph_templates_item` VALUES (2052,'',15,211,2,506,0,9,2,1,'Average:','','',2,7); +INSERT INTO `graph_templates_item` VALUES (2053,'',16,211,2,506,0,9,2,3,'Maximum:','','',2,8); +INSERT INTO `graph_templates_item` VALUES (2054,'',9,212,2,507,22,7,2,1,'Inbound','','',2,1); +INSERT INTO `graph_templates_item` VALUES (2055,'',10,212,2,507,0,9,2,4,'Current:','','',2,2); +INSERT INTO `graph_templates_item` VALUES (2056,'',11,212,2,507,0,9,2,1,'Average:','','',2,3); +INSERT INTO `graph_templates_item` VALUES (2057,'',12,212,2,507,0,9,2,3,'Maximum:','','on',2,4); +INSERT INTO `graph_templates_item` VALUES (2058,'',13,212,2,508,20,4,2,1,'Outbound','','',2,5); +INSERT INTO `graph_templates_item` VALUES (2059,'',14,212,2,508,0,9,2,4,'Current:','','',2,6); +INSERT INTO `graph_templates_item` VALUES (2060,'',15,212,2,508,0,9,2,1,'Average:','','',2,7); +INSERT INTO `graph_templates_item` VALUES (2061,'',16,212,2,508,0,9,2,3,'Maximum:','','',2,8); +INSERT INTO `graph_templates_item` VALUES (2062,'',9,213,2,509,22,7,2,1,'Inbound','','',2,1); +INSERT INTO `graph_templates_item` VALUES (2063,'',10,213,2,509,0,9,2,4,'Current:','','',2,2); +INSERT INTO `graph_templates_item` VALUES (2064,'',11,213,2,509,0,9,2,1,'Average:','','',2,3); +INSERT INTO `graph_templates_item` VALUES (2065,'',12,213,2,509,0,9,2,3,'Maximum:','','on',2,4); +INSERT INTO `graph_templates_item` VALUES (2066,'',13,213,2,510,20,4,2,1,'Outbound','','',2,5); +INSERT INTO `graph_templates_item` VALUES (2067,'',14,213,2,510,0,9,2,4,'Current:','','',2,6); +INSERT INTO `graph_templates_item` VALUES (2068,'',15,213,2,510,0,9,2,1,'Average:','','',2,7); +INSERT INTO `graph_templates_item` VALUES (2069,'',16,213,2,510,0,9,2,3,'Maximum:','','',2,8); +INSERT INTO `graph_templates_item` VALUES (2070,'',9,214,2,511,22,7,2,1,'Inbound','','',2,1); +INSERT INTO `graph_templates_item` VALUES (2071,'',10,214,2,511,0,9,2,4,'Current:','','',2,2); +INSERT INTO `graph_templates_item` VALUES (2072,'',11,214,2,511,0,9,2,1,'Average:','','',2,3); +INSERT INTO `graph_templates_item` VALUES (2073,'',12,214,2,511,0,9,2,3,'Maximum:','','on',2,4); +INSERT INTO `graph_templates_item` VALUES (2074,'',13,214,2,512,20,4,2,1,'Outbound','','',2,5); +INSERT INTO `graph_templates_item` VALUES (2075,'',14,214,2,512,0,9,2,4,'Current:','','',2,6); +INSERT INTO `graph_templates_item` VALUES (2076,'',15,214,2,512,0,9,2,1,'Average:','','',2,7); +INSERT INTO `graph_templates_item` VALUES (2077,'',16,214,2,512,0,9,2,3,'Maximum:','','',2,8); +INSERT INTO `graph_templates_item` VALUES (2078,'',9,215,2,513,22,7,2,1,'Inbound','','',2,1); +INSERT INTO `graph_templates_item` VALUES (2079,'',10,215,2,513,0,9,2,4,'Current:','','',2,2); +INSERT INTO `graph_templates_item` VALUES (2080,'',11,215,2,513,0,9,2,1,'Average:','','',2,3); +INSERT INTO `graph_templates_item` VALUES (2081,'',12,215,2,513,0,9,2,3,'Maximum:','','on',2,4); +INSERT INTO `graph_templates_item` VALUES (2082,'',13,215,2,514,20,4,2,1,'Outbound','','',2,5); +INSERT INTO `graph_templates_item` VALUES (2083,'',14,215,2,514,0,9,2,4,'Current:','','',2,6); +INSERT INTO `graph_templates_item` VALUES (2084,'',15,215,2,514,0,9,2,1,'Average:','','',2,7); +INSERT INTO `graph_templates_item` VALUES (2085,'',16,215,2,514,0,9,2,3,'Maximum:','','',2,8); +INSERT INTO `graph_templates_item` VALUES (2086,'',9,216,2,515,22,7,2,1,'Inbound','','',2,1); +INSERT INTO `graph_templates_item` VALUES (2087,'',10,216,2,515,0,9,2,4,'Current:','','',2,2); +INSERT INTO `graph_templates_item` VALUES (2088,'',11,216,2,515,0,9,2,1,'Average:','','',2,3); +INSERT INTO `graph_templates_item` VALUES (2089,'',12,216,2,515,0,9,2,3,'Maximum:','','on',2,4); +INSERT INTO `graph_templates_item` VALUES (2090,'',13,216,2,516,20,4,2,1,'Outbound','','',2,5); +INSERT INTO `graph_templates_item` VALUES (2091,'',14,216,2,516,0,9,2,4,'Current:','','',2,6); +INSERT INTO `graph_templates_item` VALUES (2092,'',15,216,2,516,0,9,2,1,'Average:','','',2,7); +INSERT INTO `graph_templates_item` VALUES (2093,'',16,216,2,516,0,9,2,3,'Maximum:','','',2,8); +INSERT INTO `graph_templates_item` VALUES (2094,'',9,217,2,517,22,7,2,1,'Inbound','','',2,1); +INSERT INTO `graph_templates_item` VALUES (2095,'',10,217,2,517,0,9,2,4,'Current:','','',2,2); +INSERT INTO `graph_templates_item` VALUES (2096,'',11,217,2,517,0,9,2,1,'Average:','','',2,3); +INSERT INTO `graph_templates_item` VALUES (2097,'',12,217,2,517,0,9,2,3,'Maximum:','','on',2,4); +INSERT INTO `graph_templates_item` VALUES (2098,'',13,217,2,518,20,4,2,1,'Outbound','','',2,5); +INSERT INTO `graph_templates_item` VALUES (2099,'',14,217,2,518,0,9,2,4,'Current:','','',2,6); +INSERT INTO `graph_templates_item` VALUES (2100,'',15,217,2,518,0,9,2,1,'Average:','','',2,7); +INSERT INTO `graph_templates_item` VALUES (2101,'',16,217,2,518,0,9,2,3,'Maximum:','','',2,8); +INSERT INTO `graph_templates_item` VALUES (2102,'',9,218,2,519,22,7,2,1,'Inbound','','',2,1); +INSERT INTO `graph_templates_item` VALUES (2103,'',10,218,2,519,0,9,2,4,'Current:','','',2,2); +INSERT INTO `graph_templates_item` VALUES (2104,'',11,218,2,519,0,9,2,1,'Average:','','',2,3); +INSERT INTO `graph_templates_item` VALUES (2105,'',12,218,2,519,0,9,2,3,'Maximum:','','on',2,4); +INSERT INTO `graph_templates_item` VALUES (2106,'',13,218,2,520,20,4,2,1,'Outbound','','',2,5); +INSERT INTO `graph_templates_item` VALUES (2107,'',14,218,2,520,0,9,2,4,'Current:','','',2,6); +INSERT INTO `graph_templates_item` VALUES (2108,'',15,218,2,520,0,9,2,1,'Average:','','',2,7); +INSERT INTO `graph_templates_item` VALUES (2109,'',16,218,2,520,0,9,2,3,'Maximum:','','',2,8); +INSERT INTO `graph_templates_item` VALUES (2110,'',9,219,2,521,22,7,2,1,'Inbound','','',2,1); +INSERT INTO `graph_templates_item` VALUES (2111,'',10,219,2,521,0,9,2,4,'Current:','','',2,2); +INSERT INTO `graph_templates_item` VALUES (2112,'',11,219,2,521,0,9,2,1,'Average:','','',2,3); +INSERT INTO `graph_templates_item` VALUES (2113,'',12,219,2,521,0,9,2,3,'Maximum:','','on',2,4); +INSERT INTO `graph_templates_item` VALUES (2114,'',13,219,2,522,20,4,2,1,'Outbound','','',2,5); +INSERT INTO `graph_templates_item` VALUES (2115,'',14,219,2,522,0,9,2,4,'Current:','','',2,6); +INSERT INTO `graph_templates_item` VALUES (2116,'',15,219,2,522,0,9,2,1,'Average:','','',2,7); +INSERT INTO `graph_templates_item` VALUES (2117,'',16,219,2,522,0,9,2,3,'Maximum:','','',2,8); +INSERT INTO `graph_templates_item` VALUES (2118,'',9,220,2,523,22,7,2,1,'Inbound','','',2,1); +INSERT INTO `graph_templates_item` VALUES (2119,'',10,220,2,523,0,9,2,4,'Current:','','',2,2); +INSERT INTO `graph_templates_item` VALUES (2120,'',11,220,2,523,0,9,2,1,'Average:','','',2,3); +INSERT INTO `graph_templates_item` VALUES (2121,'',12,220,2,523,0,9,2,3,'Maximum:','','on',2,4); +INSERT INTO `graph_templates_item` VALUES (2122,'',13,220,2,524,20,4,2,1,'Outbound','','',2,5); +INSERT INTO `graph_templates_item` VALUES (2123,'',14,220,2,524,0,9,2,4,'Current:','','',2,6); +INSERT INTO `graph_templates_item` VALUES (2124,'',15,220,2,524,0,9,2,1,'Average:','','',2,7); +INSERT INTO `graph_templates_item` VALUES (2125,'',16,220,2,524,0,9,2,3,'Maximum:','','',2,8); +INSERT INTO `graph_templates_item` VALUES (2126,'',9,221,2,525,22,7,2,1,'Inbound','','',2,1); +INSERT INTO `graph_templates_item` VALUES (2127,'',10,221,2,525,0,9,2,4,'Current:','','',2,2); +INSERT INTO `graph_templates_item` VALUES (2128,'',11,221,2,525,0,9,2,1,'Average:','','',2,3); +INSERT INTO `graph_templates_item` VALUES (2129,'',12,221,2,525,0,9,2,3,'Maximum:','','on',2,4); +INSERT INTO `graph_templates_item` VALUES (2130,'',13,221,2,526,20,4,2,1,'Outbound','','',2,5); +INSERT INTO `graph_templates_item` VALUES (2131,'',14,221,2,526,0,9,2,4,'Current:','','',2,6); +INSERT INTO `graph_templates_item` VALUES (2132,'',15,221,2,526,0,9,2,1,'Average:','','',2,7); +INSERT INTO `graph_templates_item` VALUES (2133,'',16,221,2,526,0,9,2,3,'Maximum:','','',2,8); +INSERT INTO `graph_templates_item` VALUES (2134,'',9,222,2,527,22,7,2,1,'Inbound','','',2,1); +INSERT INTO `graph_templates_item` VALUES (2135,'',10,222,2,527,0,9,2,4,'Current:','','',2,2); +INSERT INTO `graph_templates_item` VALUES (2136,'',11,222,2,527,0,9,2,1,'Average:','','',2,3); +INSERT INTO `graph_templates_item` VALUES (2137,'',12,222,2,527,0,9,2,3,'Maximum:','','on',2,4); +INSERT INTO `graph_templates_item` VALUES (2138,'',13,222,2,528,20,4,2,1,'Outbound','','',2,5); +INSERT INTO `graph_templates_item` VALUES (2139,'',14,222,2,528,0,9,2,4,'Current:','','',2,6); +INSERT INTO `graph_templates_item` VALUES (2140,'',15,222,2,528,0,9,2,1,'Average:','','',2,7); +INSERT INTO `graph_templates_item` VALUES (2141,'',16,222,2,528,0,9,2,3,'Maximum:','','',2,8); +INSERT INTO `graph_templates_item` VALUES (2142,'',9,223,2,529,22,7,2,1,'Inbound','','',2,1); +INSERT INTO `graph_templates_item` VALUES (2143,'',10,223,2,529,0,9,2,4,'Current:','','',2,2); +INSERT INTO `graph_templates_item` VALUES (2144,'',11,223,2,529,0,9,2,1,'Average:','','',2,3); +INSERT INTO `graph_templates_item` VALUES (2145,'',12,223,2,529,0,9,2,3,'Maximum:','','on',2,4); +INSERT INTO `graph_templates_item` VALUES (2146,'',13,223,2,530,20,4,2,1,'Outbound','','',2,5); +INSERT INTO `graph_templates_item` VALUES (2147,'',14,223,2,530,0,9,2,4,'Current:','','',2,6); +INSERT INTO `graph_templates_item` VALUES (2148,'',15,223,2,530,0,9,2,1,'Average:','','',2,7); +INSERT INTO `graph_templates_item` VALUES (2149,'',16,223,2,530,0,9,2,3,'Maximum:','','',2,8); +INSERT INTO `graph_templates_item` VALUES (2150,'',9,224,2,531,22,7,2,1,'Inbound','','',2,1); +INSERT INTO `graph_templates_item` VALUES (2151,'',10,224,2,531,0,9,2,4,'Current:','','',2,2); +INSERT INTO `graph_templates_item` VALUES (2152,'',11,224,2,531,0,9,2,1,'Average:','','',2,3); +INSERT INTO `graph_templates_item` VALUES (2153,'',12,224,2,531,0,9,2,3,'Maximum:','','on',2,4); +INSERT INTO `graph_templates_item` VALUES (2154,'',13,224,2,532,20,4,2,1,'Outbound','','',2,5); +INSERT INTO `graph_templates_item` VALUES (2155,'',14,224,2,532,0,9,2,4,'Current:','','',2,6); +INSERT INTO `graph_templates_item` VALUES (2156,'',15,224,2,532,0,9,2,1,'Average:','','',2,7); +INSERT INTO `graph_templates_item` VALUES (2157,'',16,224,2,532,0,9,2,3,'Maximum:','','',2,8); +INSERT INTO `graph_templates_item` VALUES (2158,'',9,225,2,533,22,7,2,1,'Inbound','','',2,1); +INSERT INTO `graph_templates_item` VALUES (2159,'',10,225,2,533,0,9,2,4,'Current:','','',2,2); +INSERT INTO `graph_templates_item` VALUES (2160,'',11,225,2,533,0,9,2,1,'Average:','','',2,3); +INSERT INTO `graph_templates_item` VALUES (2161,'',12,225,2,533,0,9,2,3,'Maximum:','','on',2,4); +INSERT INTO `graph_templates_item` VALUES (2162,'',13,225,2,534,20,4,2,1,'Outbound','','',2,5); +INSERT INTO `graph_templates_item` VALUES (2163,'',14,225,2,534,0,9,2,4,'Current:','','',2,6); +INSERT INTO `graph_templates_item` VALUES (2164,'',15,225,2,534,0,9,2,1,'Average:','','',2,7); +INSERT INTO `graph_templates_item` VALUES (2165,'',16,225,2,534,0,9,2,3,'Maximum:','','',2,8); +INSERT INTO `graph_templates_item` VALUES (2166,'',9,226,2,535,22,7,2,1,'Inbound','','',2,1); +INSERT INTO `graph_templates_item` VALUES (2167,'',10,226,2,535,0,9,2,4,'Current:','','',2,2); +INSERT INTO `graph_templates_item` VALUES (2168,'',11,226,2,535,0,9,2,1,'Average:','','',2,3); +INSERT INTO `graph_templates_item` VALUES (2169,'',12,226,2,535,0,9,2,3,'Maximum:','','on',2,4); +INSERT INTO `graph_templates_item` VALUES (2170,'',13,226,2,536,20,4,2,1,'Outbound','','',2,5); +INSERT INTO `graph_templates_item` VALUES (2171,'',14,226,2,536,0,9,2,4,'Current:','','',2,6); +INSERT INTO `graph_templates_item` VALUES (2172,'',15,226,2,536,0,9,2,1,'Average:','','',2,7); +INSERT INTO `graph_templates_item` VALUES (2173,'',16,226,2,536,0,9,2,3,'Maximum:','','',2,8); +INSERT INTO `graph_templates_item` VALUES (2174,'',9,227,2,537,22,7,2,1,'Inbound','','',2,1); +INSERT INTO `graph_templates_item` VALUES (2175,'',10,227,2,537,0,9,2,4,'Current:','','',2,2); +INSERT INTO `graph_templates_item` VALUES (2176,'',11,227,2,537,0,9,2,1,'Average:','','',2,3); +INSERT INTO `graph_templates_item` VALUES (2177,'',12,227,2,537,0,9,2,3,'Maximum:','','on',2,4); +INSERT INTO `graph_templates_item` VALUES (2178,'',13,227,2,538,20,4,2,1,'Outbound','','',2,5); +INSERT INTO `graph_templates_item` VALUES (2179,'',14,227,2,538,0,9,2,4,'Current:','','',2,6); +INSERT INTO `graph_templates_item` VALUES (2180,'',15,227,2,538,0,9,2,1,'Average:','','',2,7); +INSERT INTO `graph_templates_item` VALUES (2181,'',16,227,2,538,0,9,2,3,'Maximum:','','',2,8); +INSERT INTO `graph_templates_item` VALUES (2182,'',9,228,2,539,22,7,2,1,'Inbound','','',2,1); +INSERT INTO `graph_templates_item` VALUES (2183,'',10,228,2,539,0,9,2,4,'Current:','','',2,2); +INSERT INTO `graph_templates_item` VALUES (2184,'',11,228,2,539,0,9,2,1,'Average:','','',2,3); +INSERT INTO `graph_templates_item` VALUES (2185,'',12,228,2,539,0,9,2,3,'Maximum:','','on',2,4); +INSERT INTO `graph_templates_item` VALUES (2186,'',13,228,2,540,20,4,2,1,'Outbound','','',2,5); +INSERT INTO `graph_templates_item` VALUES (2187,'',14,228,2,540,0,9,2,4,'Current:','','',2,6); +INSERT INTO `graph_templates_item` VALUES (2188,'',15,228,2,540,0,9,2,1,'Average:','','',2,7); +INSERT INTO `graph_templates_item` VALUES (2189,'',16,228,2,540,0,9,2,3,'Maximum:','','',2,8); +INSERT INTO `graph_templates_item` VALUES (2190,'',9,229,2,541,22,7,2,1,'Inbound','','',2,1); +INSERT INTO `graph_templates_item` VALUES (2191,'',10,229,2,541,0,9,2,4,'Current:','','',2,2); +INSERT INTO `graph_templates_item` VALUES (2192,'',11,229,2,541,0,9,2,1,'Average:','','',2,3); +INSERT INTO `graph_templates_item` VALUES (2193,'',12,229,2,541,0,9,2,3,'Maximum:','','on',2,4); +INSERT INTO `graph_templates_item` VALUES (2194,'',13,229,2,542,20,4,2,1,'Outbound','','',2,5); +INSERT INTO `graph_templates_item` VALUES (2195,'',14,229,2,542,0,9,2,4,'Current:','','',2,6); +INSERT INTO `graph_templates_item` VALUES (2196,'',15,229,2,542,0,9,2,1,'Average:','','',2,7); +INSERT INTO `graph_templates_item` VALUES (2197,'',16,229,2,542,0,9,2,3,'Maximum:','','',2,8); +INSERT INTO `graph_templates_item` VALUES (2198,'',9,230,2,543,22,7,2,1,'Inbound','','',2,1); +INSERT INTO `graph_templates_item` VALUES (2199,'',10,230,2,543,0,9,2,4,'Current:','','',2,2); +INSERT INTO `graph_templates_item` VALUES (2200,'',11,230,2,543,0,9,2,1,'Average:','','',2,3); +INSERT INTO `graph_templates_item` VALUES (2201,'',12,230,2,543,0,9,2,3,'Maximum:','','on',2,4); +INSERT INTO `graph_templates_item` VALUES (2202,'',13,230,2,544,20,4,2,1,'Outbound','','',2,5); +INSERT INTO `graph_templates_item` VALUES (2203,'',14,230,2,544,0,9,2,4,'Current:','','',2,6); +INSERT INTO `graph_templates_item` VALUES (2204,'',15,230,2,544,0,9,2,1,'Average:','','',2,7); +INSERT INTO `graph_templates_item` VALUES (2205,'',16,230,2,544,0,9,2,3,'Maximum:','','',2,8); +INSERT INTO `graph_templates_item` VALUES (2206,'',9,231,2,545,22,7,2,1,'Inbound','','',2,1); +INSERT INTO `graph_templates_item` VALUES (2207,'',10,231,2,545,0,9,2,4,'Current:','','',2,2); +INSERT INTO `graph_templates_item` VALUES (2208,'',11,231,2,545,0,9,2,1,'Average:','','',2,3); +INSERT INTO `graph_templates_item` VALUES (2209,'',12,231,2,545,0,9,2,3,'Maximum:','','on',2,4); +INSERT INTO `graph_templates_item` VALUES (2210,'',13,231,2,546,20,4,2,1,'Outbound','','',2,5); +INSERT INTO `graph_templates_item` VALUES (2211,'',14,231,2,546,0,9,2,4,'Current:','','',2,6); +INSERT INTO `graph_templates_item` VALUES (2212,'',15,231,2,546,0,9,2,1,'Average:','','',2,7); +INSERT INTO `graph_templates_item` VALUES (2213,'',16,231,2,546,0,9,2,3,'Maximum:','','',2,8); +INSERT INTO `graph_templates_item` VALUES (2214,'',9,232,2,547,22,7,2,1,'Inbound','','',2,1); +INSERT INTO `graph_templates_item` VALUES (2215,'',10,232,2,547,0,9,2,4,'Current:','','',2,2); +INSERT INTO `graph_templates_item` VALUES (2216,'',11,232,2,547,0,9,2,1,'Average:','','',2,3); +INSERT INTO `graph_templates_item` VALUES (2217,'',12,232,2,547,0,9,2,3,'Maximum:','','on',2,4); +INSERT INTO `graph_templates_item` VALUES (2218,'',13,232,2,548,20,4,2,1,'Outbound','','',2,5); +INSERT INTO `graph_templates_item` VALUES (2219,'',14,232,2,548,0,9,2,4,'Current:','','',2,6); +INSERT INTO `graph_templates_item` VALUES (2220,'',15,232,2,548,0,9,2,1,'Average:','','',2,7); +INSERT INTO `graph_templates_item` VALUES (2221,'',16,232,2,548,0,9,2,3,'Maximum:','','',2,8); +INSERT INTO `graph_templates_item` VALUES (2306,'',10,242,2,570,0,9,2,4,'Current:','','',2,2); +INSERT INTO `graph_templates_item` VALUES (2307,'',11,242,2,570,0,9,2,1,'Average:','','',2,3); +INSERT INTO `graph_templates_item` VALUES (2308,'',12,242,2,570,0,9,2,3,'Maximum:','','on',2,4); +INSERT INTO `graph_templates_item` VALUES (2309,'',13,242,2,571,20,4,2,1,'Outbound','','',2,5); +INSERT INTO `graph_templates_item` VALUES (2310,'',14,242,2,571,0,9,2,4,'Current:','','',2,6); +INSERT INTO `graph_templates_item` VALUES (2311,'',15,242,2,571,0,9,2,1,'Average:','','',2,7); +INSERT INTO `graph_templates_item` VALUES (2312,'',16,242,2,571,0,9,2,3,'Maximum:','','',2,8); +INSERT INTO `graph_templates_item` VALUES (2313,'',9,243,2,572,22,7,2,1,'Inbound','','',2,1); +INSERT INTO `graph_templates_item` VALUES (2314,'',10,243,2,572,0,9,2,4,'Current:','','',2,2); +INSERT INTO `graph_templates_item` VALUES (2315,'',11,243,2,572,0,9,2,1,'Average:','','',2,3); +INSERT INTO `graph_templates_item` VALUES (2316,'',12,243,2,572,0,9,2,3,'Maximum:','','on',2,4); +INSERT INTO `graph_templates_item` VALUES (2317,'',13,243,2,573,20,4,2,1,'Outbound','','',2,5); +INSERT INTO `graph_templates_item` VALUES (2318,'',14,243,2,573,0,9,2,4,'Current:','','',2,6); +INSERT INTO `graph_templates_item` VALUES (2319,'',15,243,2,573,0,9,2,1,'Average:','','',2,7); +INSERT INTO `graph_templates_item` VALUES (2320,'',16,243,2,573,0,9,2,3,'Maximum:','','',2,8); +INSERT INTO `graph_templates_item` VALUES (2321,'',9,244,2,574,22,7,2,1,'Inbound','','',2,1); +INSERT INTO `graph_templates_item` VALUES (2322,'',10,244,2,574,0,9,2,4,'Current:','','',2,2); +INSERT INTO `graph_templates_item` VALUES (2323,'',11,244,2,574,0,9,2,1,'Average:','','',2,3); +INSERT INTO `graph_templates_item` VALUES (2324,'',12,244,2,574,0,9,2,3,'Maximum:','','on',2,4); +INSERT INTO `graph_templates_item` VALUES (2325,'',13,244,2,575,20,4,2,1,'Outbound','','',2,5); +INSERT INTO `graph_templates_item` VALUES (2326,'',14,244,2,575,0,9,2,4,'Current:','','',2,6); +INSERT INTO `graph_templates_item` VALUES (2327,'',15,244,2,575,0,9,2,1,'Average:','','',2,7); +INSERT INTO `graph_templates_item` VALUES (2328,'',16,244,2,575,0,9,2,3,'Maximum:','','',2,8); +INSERT INTO `graph_templates_item` VALUES (2329,'',9,245,2,576,22,7,2,1,'Inbound','','',2,1); +INSERT INTO `graph_templates_item` VALUES (2330,'',10,245,2,576,0,9,2,4,'Current:','','',2,2); +INSERT INTO `graph_templates_item` VALUES (2331,'',11,245,2,576,0,9,2,1,'Average:','','',2,3); +INSERT INTO `graph_templates_item` VALUES (2332,'',12,245,2,576,0,9,2,3,'Maximum:','','on',2,4); +INSERT INTO `graph_templates_item` VALUES (2333,'',13,245,2,577,20,4,2,1,'Outbound','','',2,5); +INSERT INTO `graph_templates_item` VALUES (2334,'',14,245,2,577,0,9,2,4,'Current:','','',2,6); +INSERT INTO `graph_templates_item` VALUES (2335,'',15,245,2,577,0,9,2,1,'Average:','','',2,7); +INSERT INTO `graph_templates_item` VALUES (2336,'',16,245,2,577,0,9,2,3,'Maximum:','','',2,8); +INSERT INTO `graph_templates_item` VALUES (2337,'',9,246,2,578,22,7,2,1,'Inbound','','',2,1); +INSERT INTO `graph_templates_item` VALUES (2338,'',10,246,2,578,0,9,2,4,'Current:','','',2,2); +INSERT INTO `graph_templates_item` VALUES (2339,'',11,246,2,578,0,9,2,1,'Average:','','',2,3); +INSERT INTO `graph_templates_item` VALUES (2340,'',12,246,2,578,0,9,2,3,'Maximum:','','on',2,4); +INSERT INTO `graph_templates_item` VALUES (2341,'',13,246,2,579,20,4,2,1,'Outbound','','',2,5); +INSERT INTO `graph_templates_item` VALUES (2342,'',14,246,2,579,0,9,2,4,'Current:','','',2,6); +INSERT INTO `graph_templates_item` VALUES (2343,'',15,246,2,579,0,9,2,1,'Average:','','',2,7); +INSERT INTO `graph_templates_item` VALUES (2344,'',16,246,2,579,0,9,2,3,'Maximum:','','',2,8); +INSERT INTO `graph_templates_item` VALUES (2345,'',9,247,2,580,22,7,2,1,'Inbound','','',2,1); +INSERT INTO `graph_templates_item` VALUES (2346,'',10,247,2,580,0,9,2,4,'Current:','','',2,2); +INSERT INTO `graph_templates_item` VALUES (2347,'',11,247,2,580,0,9,2,1,'Average:','','',2,3); +INSERT INTO `graph_templates_item` VALUES (2348,'',12,247,2,580,0,9,2,3,'Maximum:','','on',2,4); +INSERT INTO `graph_templates_item` VALUES (2349,'',13,247,2,581,20,4,2,1,'Outbound','','',2,5); +INSERT INTO `graph_templates_item` VALUES (2350,'',14,247,2,581,0,9,2,4,'Current:','','',2,6); +INSERT INTO `graph_templates_item` VALUES (2351,'',15,247,2,581,0,9,2,1,'Average:','','',2,7); +INSERT INTO `graph_templates_item` VALUES (2352,'',16,247,2,581,0,9,2,3,'Maximum:','','',2,8); +INSERT INTO `graph_templates_item` VALUES (2353,'',9,248,2,582,22,7,2,1,'Inbound','','',2,1); +INSERT INTO `graph_templates_item` VALUES (2354,'',10,248,2,582,0,9,2,4,'Current:','','',2,2); +INSERT INTO `graph_templates_item` VALUES (2355,'',11,248,2,582,0,9,2,1,'Average:','','',2,3); +INSERT INTO `graph_templates_item` VALUES (2356,'',12,248,2,582,0,9,2,3,'Maximum:','','on',2,4); +INSERT INTO `graph_templates_item` VALUES (2357,'',13,248,2,583,20,4,2,1,'Outbound','','',2,5); +INSERT INTO `graph_templates_item` VALUES (2358,'',14,248,2,583,0,9,2,4,'Current:','','',2,6); +INSERT INTO `graph_templates_item` VALUES (2359,'',15,248,2,583,0,9,2,1,'Average:','','',2,7); +INSERT INTO `graph_templates_item` VALUES (2360,'',16,248,2,583,0,9,2,3,'Maximum:','','',2,8); +INSERT INTO `graph_templates_item` VALUES (2361,'',9,249,2,584,22,7,2,1,'Inbound','','',2,1); +INSERT INTO `graph_templates_item` VALUES (2362,'',10,249,2,584,0,9,2,4,'Current:','','',2,2); +INSERT INTO `graph_templates_item` VALUES (2363,'',11,249,2,584,0,9,2,1,'Average:','','',2,3); +INSERT INTO `graph_templates_item` VALUES (2364,'',12,249,2,584,0,9,2,3,'Maximum:','','on',2,4); +INSERT INTO `graph_templates_item` VALUES (2365,'',13,249,2,585,20,4,2,1,'Outbound','','',2,5); +INSERT INTO `graph_templates_item` VALUES (2366,'',14,249,2,585,0,9,2,4,'Current:','','',2,6); +INSERT INTO `graph_templates_item` VALUES (2367,'',15,249,2,585,0,9,2,1,'Average:','','',2,7); +INSERT INTO `graph_templates_item` VALUES (2368,'',16,249,2,585,0,9,2,3,'Maximum:','','',2,8); +INSERT INTO `graph_templates_item` VALUES (2369,'',9,250,2,586,22,7,2,1,'Inbound','','',2,1); +INSERT INTO `graph_templates_item` VALUES (2370,'',10,250,2,586,0,9,2,4,'Current:','','',2,2); +INSERT INTO `graph_templates_item` VALUES (2371,'',11,250,2,586,0,9,2,1,'Average:','','',2,3); +INSERT INTO `graph_templates_item` VALUES (2372,'',12,250,2,586,0,9,2,3,'Maximum:','','on',2,4); +INSERT INTO `graph_templates_item` VALUES (2373,'',13,250,2,587,20,4,2,1,'Outbound','','',2,5); +INSERT INTO `graph_templates_item` VALUES (2374,'',14,250,2,587,0,9,2,4,'Current:','','',2,6); +INSERT INTO `graph_templates_item` VALUES (2375,'',15,250,2,587,0,9,2,1,'Average:','','',2,7); +INSERT INTO `graph_templates_item` VALUES (2376,'',16,250,2,587,0,9,2,3,'Maximum:','','',2,8); +INSERT INTO `graph_templates_item` VALUES (2377,'',9,251,2,588,22,7,2,1,'Inbound','','',2,1); +INSERT INTO `graph_templates_item` VALUES (2378,'',10,251,2,588,0,9,2,4,'Current:','','',2,2); +INSERT INTO `graph_templates_item` VALUES (2379,'',11,251,2,588,0,9,2,1,'Average:','','',2,3); +INSERT INTO `graph_templates_item` VALUES (2380,'',12,251,2,588,0,9,2,3,'Maximum:','','on',2,4); +INSERT INTO `graph_templates_item` VALUES (2381,'',13,251,2,589,20,4,2,1,'Outbound','','',2,5); +INSERT INTO `graph_templates_item` VALUES (2382,'',14,251,2,589,0,9,2,4,'Current:','','',2,6); +INSERT INTO `graph_templates_item` VALUES (2383,'',15,251,2,589,0,9,2,1,'Average:','','',2,7); +INSERT INTO `graph_templates_item` VALUES (2384,'',16,251,2,589,0,9,2,3,'Maximum:','','',2,8); +INSERT INTO `graph_templates_item` VALUES (2385,'',9,252,2,590,22,7,2,1,'Inbound','','',2,1); +INSERT INTO `graph_templates_item` VALUES (2386,'',10,252,2,590,0,9,2,4,'Current:','','',2,2); +INSERT INTO `graph_templates_item` VALUES (2387,'',11,252,2,590,0,9,2,1,'Average:','','',2,3); +INSERT INTO `graph_templates_item` VALUES (2388,'',12,252,2,590,0,9,2,3,'Maximum:','','on',2,4); +INSERT INTO `graph_templates_item` VALUES (2389,'',13,252,2,591,20,4,2,1,'Outbound','','',2,5); +INSERT INTO `graph_templates_item` VALUES (2390,'',14,252,2,591,0,9,2,4,'Current:','','',2,6); +INSERT INTO `graph_templates_item` VALUES (2391,'',15,252,2,591,0,9,2,1,'Average:','','',2,7); +INSERT INTO `graph_templates_item` VALUES (2392,'',16,252,2,591,0,9,2,3,'Maximum:','','',2,8); +INSERT INTO `graph_templates_item` VALUES (2393,'',9,253,2,592,22,7,2,1,'Inbound','','',2,1); +INSERT INTO `graph_templates_item` VALUES (2394,'',10,253,2,592,0,9,2,4,'Current:','','',2,2); +INSERT INTO `graph_templates_item` VALUES (2395,'',11,253,2,592,0,9,2,1,'Average:','','',2,3); +INSERT INTO `graph_templates_item` VALUES (2396,'',12,253,2,592,0,9,2,3,'Maximum:','','on',2,4); +INSERT INTO `graph_templates_item` VALUES (2397,'',13,253,2,593,20,4,2,1,'Outbound','','',2,5); +INSERT INTO `graph_templates_item` VALUES (2398,'',14,253,2,593,0,9,2,4,'Current:','','',2,6); +INSERT INTO `graph_templates_item` VALUES (2399,'',15,253,2,593,0,9,2,1,'Average:','','',2,7); +INSERT INTO `graph_templates_item` VALUES (2400,'',16,253,2,593,0,9,2,3,'Maximum:','','',2,8); +INSERT INTO `graph_templates_item` VALUES (2401,'',9,254,2,594,22,7,2,1,'Inbound','','',2,1); +INSERT INTO `graph_templates_item` VALUES (2402,'',10,254,2,594,0,9,2,4,'Current:','','',2,2); +INSERT INTO `graph_templates_item` VALUES (2403,'',11,254,2,594,0,9,2,1,'Average:','','',2,3); +INSERT INTO `graph_templates_item` VALUES (2404,'',12,254,2,594,0,9,2,3,'Maximum:','','on',2,4); +INSERT INTO `graph_templates_item` VALUES (2405,'',13,254,2,595,20,4,2,1,'Outbound','','',2,5); +INSERT INTO `graph_templates_item` VALUES (2406,'',14,254,2,595,0,9,2,4,'Current:','','',2,6); +INSERT INTO `graph_templates_item` VALUES (2407,'',15,254,2,595,0,9,2,1,'Average:','','',2,7); +INSERT INTO `graph_templates_item` VALUES (2408,'',16,254,2,595,0,9,2,3,'Maximum:','','',2,8); +INSERT INTO `graph_templates_item` VALUES (2409,'',9,255,2,596,22,7,2,1,'Inbound','','',2,1); +INSERT INTO `graph_templates_item` VALUES (2410,'',10,255,2,596,0,9,2,4,'Current:','','',2,2); +INSERT INTO `graph_templates_item` VALUES (2411,'',11,255,2,596,0,9,2,1,'Average:','','',2,3); +INSERT INTO `graph_templates_item` VALUES (2412,'',12,255,2,596,0,9,2,3,'Maximum:','','on',2,4); +INSERT INTO `graph_templates_item` VALUES (2413,'',13,255,2,597,20,4,2,1,'Outbound','','',2,5); +INSERT INTO `graph_templates_item` VALUES (2414,'',14,255,2,597,0,9,2,4,'Current:','','',2,6); +INSERT INTO `graph_templates_item` VALUES (2415,'',15,255,2,597,0,9,2,1,'Average:','','',2,7); +INSERT INTO `graph_templates_item` VALUES (2416,'',16,255,2,597,0,9,2,3,'Maximum:','','',2,8); +INSERT INTO `graph_templates_item` VALUES (2417,'',9,256,2,598,22,7,2,1,'Inbound','','',2,1); +INSERT INTO `graph_templates_item` VALUES (2418,'',10,256,2,598,0,9,2,4,'Current:','','',2,2); +INSERT INTO `graph_templates_item` VALUES (2419,'',11,256,2,598,0,9,2,1,'Average:','','',2,3); +INSERT INTO `graph_templates_item` VALUES (2420,'',12,256,2,598,0,9,2,3,'Maximum:','','on',2,4); +INSERT INTO `graph_templates_item` VALUES (2421,'',13,256,2,599,20,4,2,1,'Outbound','','',2,5); +INSERT INTO `graph_templates_item` VALUES (2422,'',14,256,2,599,0,9,2,4,'Current:','','',2,6); +INSERT INTO `graph_templates_item` VALUES (2423,'',15,256,2,599,0,9,2,1,'Average:','','',2,7); +INSERT INTO `graph_templates_item` VALUES (2424,'',16,256,2,599,0,9,2,3,'Maximum:','','',2,8); +INSERT INTO `graph_templates_item` VALUES (2425,'',9,257,2,600,22,7,2,1,'Inbound','','',2,1); +INSERT INTO `graph_templates_item` VALUES (2426,'',10,257,2,600,0,9,2,4,'Current:','','',2,2); +INSERT INTO `graph_templates_item` VALUES (2427,'',11,257,2,600,0,9,2,1,'Average:','','',2,3); +INSERT INTO `graph_templates_item` VALUES (2428,'',12,257,2,600,0,9,2,3,'Maximum:','','on',2,4); +INSERT INTO `graph_templates_item` VALUES (2429,'',13,257,2,601,20,4,2,1,'Outbound','','',2,5); +INSERT INTO `graph_templates_item` VALUES (2430,'',14,257,2,601,0,9,2,4,'Current:','','',2,6); +INSERT INTO `graph_templates_item` VALUES (2431,'',15,257,2,601,0,9,2,1,'Average:','','',2,7); +INSERT INTO `graph_templates_item` VALUES (2432,'',16,257,2,601,0,9,2,3,'Maximum:','','',2,8); +INSERT INTO `graph_templates_item` VALUES (2433,'',9,258,2,602,22,7,2,1,'Inbound','','',2,1); +INSERT INTO `graph_templates_item` VALUES (2434,'',10,258,2,602,0,9,2,4,'Current:','','',2,2); +INSERT INTO `graph_templates_item` VALUES (2435,'',11,258,2,602,0,9,2,1,'Average:','','',2,3); +INSERT INTO `graph_templates_item` VALUES (2436,'',12,258,2,602,0,9,2,3,'Maximum:','','on',2,4); +INSERT INTO `graph_templates_item` VALUES (2437,'',13,258,2,603,20,4,2,1,'Outbound','','',2,5); +INSERT INTO `graph_templates_item` VALUES (2438,'',14,258,2,603,0,9,2,4,'Current:','','',2,6); +INSERT INTO `graph_templates_item` VALUES (2439,'',15,258,2,603,0,9,2,1,'Average:','','',2,7); +INSERT INTO `graph_templates_item` VALUES (2440,'',16,258,2,603,0,9,2,3,'Maximum:','','',2,8); +INSERT INTO `graph_templates_item` VALUES (2441,'',9,259,2,604,22,7,2,1,'Inbound','','',2,1); +INSERT INTO `graph_templates_item` VALUES (2442,'',10,259,2,604,0,9,2,4,'Current:','','',2,2); +INSERT INTO `graph_templates_item` VALUES (2443,'',11,259,2,604,0,9,2,1,'Average:','','',2,3); +INSERT INTO `graph_templates_item` VALUES (2444,'',12,259,2,604,0,9,2,3,'Maximum:','','on',2,4); +INSERT INTO `graph_templates_item` VALUES (2445,'',13,259,2,605,20,4,2,1,'Outbound','','',2,5); +INSERT INTO `graph_templates_item` VALUES (2446,'',14,259,2,605,0,9,2,4,'Current:','','',2,6); +INSERT INTO `graph_templates_item` VALUES (2447,'',15,259,2,605,0,9,2,1,'Average:','','',2,7); +INSERT INTO `graph_templates_item` VALUES (2448,'',16,259,2,605,0,9,2,3,'Maximum:','','',2,8); +INSERT INTO `graph_templates_item` VALUES (2449,'',9,260,2,606,22,7,2,1,'Inbound','','',2,1); +INSERT INTO `graph_templates_item` VALUES (2450,'',10,260,2,606,0,9,2,4,'Current:','','',2,2); +INSERT INTO `graph_templates_item` VALUES (2451,'',11,260,2,606,0,9,2,1,'Average:','','',2,3); +INSERT INTO `graph_templates_item` VALUES (2452,'',12,260,2,606,0,9,2,3,'Maximum:','','on',2,4); +INSERT INTO `graph_templates_item` VALUES (2453,'',13,260,2,607,20,4,2,1,'Outbound','','',2,5); +INSERT INTO `graph_templates_item` VALUES (2454,'',14,260,2,607,0,9,2,4,'Current:','','',2,6); +INSERT INTO `graph_templates_item` VALUES (2455,'',15,260,2,607,0,9,2,1,'Average:','','',2,7); +INSERT INTO `graph_templates_item` VALUES (2456,'',16,260,2,607,0,9,2,3,'Maximum:','','',2,8); +INSERT INTO `graph_templates_item` VALUES (2457,'',9,261,2,608,22,7,2,1,'Inbound','','',2,1); +INSERT INTO `graph_templates_item` VALUES (2458,'',10,261,2,608,0,9,2,4,'Current:','','',2,2); +INSERT INTO `graph_templates_item` VALUES (2459,'',11,261,2,608,0,9,2,1,'Average:','','',2,3); +INSERT INTO `graph_templates_item` VALUES (2460,'',12,261,2,608,0,9,2,3,'Maximum:','','on',2,4); +INSERT INTO `graph_templates_item` VALUES (2461,'',13,261,2,609,20,4,2,1,'Outbound','','',2,5); +INSERT INTO `graph_templates_item` VALUES (2462,'',14,261,2,609,0,9,2,4,'Current:','','',2,6); +INSERT INTO `graph_templates_item` VALUES (2463,'',15,261,2,609,0,9,2,1,'Average:','','',2,7); +INSERT INTO `graph_templates_item` VALUES (2464,'',16,261,2,609,0,9,2,3,'Maximum:','','',2,8); +INSERT INTO `graph_templates_item` VALUES (2465,'',9,262,2,610,22,7,2,1,'Inbound','','',2,1); +INSERT INTO `graph_templates_item` VALUES (2466,'',10,262,2,610,0,9,2,4,'Current:','','',2,2); +INSERT INTO `graph_templates_item` VALUES (2467,'',11,262,2,610,0,9,2,1,'Average:','','',2,3); +INSERT INTO `graph_templates_item` VALUES (2468,'',12,262,2,610,0,9,2,3,'Maximum:','','on',2,4); +INSERT INTO `graph_templates_item` VALUES (2469,'',13,262,2,611,20,4,2,1,'Outbound','','',2,5); +INSERT INTO `graph_templates_item` VALUES (2470,'',14,262,2,611,0,9,2,4,'Current:','','',2,6); +INSERT INTO `graph_templates_item` VALUES (2471,'',15,262,2,611,0,9,2,1,'Average:','','',2,7); +INSERT INTO `graph_templates_item` VALUES (2472,'',16,262,2,611,0,9,2,3,'Maximum:','','',2,8); +INSERT INTO `graph_templates_item` VALUES (2473,'',9,263,2,612,22,7,2,1,'Inbound','','',2,1); +INSERT INTO `graph_templates_item` VALUES (2474,'',10,263,2,612,0,9,2,4,'Current:','','',2,2); +INSERT INTO `graph_templates_item` VALUES (2475,'',11,263,2,612,0,9,2,1,'Average:','','',2,3); +INSERT INTO `graph_templates_item` VALUES (2476,'',12,263,2,612,0,9,2,3,'Maximum:','','on',2,4); +INSERT INTO `graph_templates_item` VALUES (2477,'',13,263,2,613,20,4,2,1,'Outbound','','',2,5); +INSERT INTO `graph_templates_item` VALUES (2478,'',14,263,2,613,0,9,2,4,'Current:','','',2,6); +INSERT INTO `graph_templates_item` VALUES (2479,'',15,263,2,613,0,9,2,1,'Average:','','',2,7); +INSERT INTO `graph_templates_item` VALUES (2480,'',16,263,2,613,0,9,2,3,'Maximum:','','',2,8); +INSERT INTO `graph_templates_item` VALUES (2481,'',9,264,2,614,22,7,2,1,'Inbound','','',2,1); +INSERT INTO `graph_templates_item` VALUES (2482,'',10,264,2,614,0,9,2,4,'Current:','','',2,2); +INSERT INTO `graph_templates_item` VALUES (2483,'',11,264,2,614,0,9,2,1,'Average:','','',2,3); +INSERT INTO `graph_templates_item` VALUES (2484,'',12,264,2,614,0,9,2,3,'Maximum:','','on',2,4); +INSERT INTO `graph_templates_item` VALUES (2485,'',13,264,2,615,20,4,2,1,'Outbound','','',2,5); +INSERT INTO `graph_templates_item` VALUES (2486,'',14,264,2,615,0,9,2,4,'Current:','','',2,6); +INSERT INTO `graph_templates_item` VALUES (2487,'',15,264,2,615,0,9,2,1,'Average:','','',2,7); +INSERT INTO `graph_templates_item` VALUES (2488,'',16,264,2,615,0,9,2,3,'Maximum:','','',2,8); +INSERT INTO `graph_templates_item` VALUES (2489,'',9,265,2,616,22,7,2,1,'Inbound','','',2,1); +INSERT INTO `graph_templates_item` VALUES (2490,'',10,265,2,616,0,9,2,4,'Current:','','',2,2); +INSERT INTO `graph_templates_item` VALUES (2491,'',11,265,2,616,0,9,2,1,'Average:','','',2,3); +INSERT INTO `graph_templates_item` VALUES (2492,'',12,265,2,616,0,9,2,3,'Maximum:','','on',2,4); +INSERT INTO `graph_templates_item` VALUES (2493,'',13,265,2,617,20,4,2,1,'Outbound','','',2,5); +INSERT INTO `graph_templates_item` VALUES (2494,'',14,265,2,617,0,9,2,4,'Current:','','',2,6); +INSERT INTO `graph_templates_item` VALUES (2495,'',15,265,2,617,0,9,2,1,'Average:','','',2,7); +INSERT INTO `graph_templates_item` VALUES (2496,'',16,265,2,617,0,9,2,3,'Maximum:','','',2,8); +INSERT INTO `graph_templates_item` VALUES (2497,'',9,266,2,618,22,7,2,1,'Inbound','','',2,1); +INSERT INTO `graph_templates_item` VALUES (2498,'',10,266,2,618,0,9,2,4,'Current:','','',2,2); +INSERT INTO `graph_templates_item` VALUES (2499,'',11,266,2,618,0,9,2,1,'Average:','','',2,3); +INSERT INTO `graph_templates_item` VALUES (2500,'',12,266,2,618,0,9,2,3,'Maximum:','','on',2,4); +INSERT INTO `graph_templates_item` VALUES (2501,'',13,266,2,619,20,4,2,1,'Outbound','','',2,5); +INSERT INTO `graph_templates_item` VALUES (2502,'',14,266,2,619,0,9,2,4,'Current:','','',2,6); +INSERT INTO `graph_templates_item` VALUES (2503,'',15,266,2,619,0,9,2,1,'Average:','','',2,7); +INSERT INTO `graph_templates_item` VALUES (2504,'',16,266,2,619,0,9,2,3,'Maximum:','','',2,8); +INSERT INTO `graph_templates_item` VALUES (2505,'',9,267,2,620,22,7,2,1,'Inbound','','',2,1); +INSERT INTO `graph_templates_item` VALUES (2506,'',10,267,2,620,0,9,2,4,'Current:','','',2,2); +INSERT INTO `graph_templates_item` VALUES (2507,'',11,267,2,620,0,9,2,1,'Average:','','',2,3); +INSERT INTO `graph_templates_item` VALUES (2508,'',12,267,2,620,0,9,2,3,'Maximum:','','on',2,4); +INSERT INTO `graph_templates_item` VALUES (2509,'',13,267,2,621,20,4,2,1,'Outbound','','',2,5); +INSERT INTO `graph_templates_item` VALUES (2510,'',14,267,2,621,0,9,2,4,'Current:','','',2,6); +INSERT INTO `graph_templates_item` VALUES (2511,'',15,267,2,621,0,9,2,1,'Average:','','',2,7); +INSERT INTO `graph_templates_item` VALUES (2512,'',16,267,2,621,0,9,2,3,'Maximum:','','',2,8); +INSERT INTO `graph_templates_item` VALUES (2513,'',9,268,2,622,22,7,2,1,'Inbound','','',2,1); +INSERT INTO `graph_templates_item` VALUES (2514,'',10,268,2,622,0,9,2,4,'Current:','','',2,2); +INSERT INTO `graph_templates_item` VALUES (2515,'',11,268,2,622,0,9,2,1,'Average:','','',2,3); +INSERT INTO `graph_templates_item` VALUES (2516,'',12,268,2,622,0,9,2,3,'Maximum:','','on',2,4); +INSERT INTO `graph_templates_item` VALUES (2517,'',13,268,2,623,20,4,2,1,'Outbound','','',2,5); +INSERT INTO `graph_templates_item` VALUES (2518,'',14,268,2,623,0,9,2,4,'Current:','','',2,6); +INSERT INTO `graph_templates_item` VALUES (2519,'',15,268,2,623,0,9,2,1,'Average:','','',2,7); +INSERT INTO `graph_templates_item` VALUES (2520,'',16,268,2,623,0,9,2,3,'Maximum:','','',2,8); +INSERT INTO `graph_templates_item` VALUES (2521,'',29,269,4,625,9,7,0,1,'System','','',2,1); +INSERT INTO `graph_templates_item` VALUES (2522,'',30,269,4,625,0,9,0,4,'Current:','','',2,2); +INSERT INTO `graph_templates_item` VALUES (2523,'',31,269,4,625,0,9,0,1,'Average:','','',2,3); +INSERT INTO `graph_templates_item` VALUES (2524,'',32,269,4,625,0,9,0,3,'Maximum:','','on',2,4); +INSERT INTO `graph_templates_item` VALUES (2525,'',33,269,4,626,21,8,0,1,'User','','',2,5); +INSERT INTO `graph_templates_item` VALUES (2526,'',34,269,4,626,0,9,0,4,'Current:','','',2,6); +INSERT INTO `graph_templates_item` VALUES (2527,'',35,269,4,626,0,9,0,1,'Average:','','',2,7); +INSERT INTO `graph_templates_item` VALUES (2528,'',36,269,4,626,0,9,0,3,'Maximum:','','on',2,8); +INSERT INTO `graph_templates_item` VALUES (2529,'',37,269,4,624,12,8,0,1,'Nice','','',2,9); +INSERT INTO `graph_templates_item` VALUES (2530,'',38,269,4,624,0,9,0,4,'Current:','','',2,10); +INSERT INTO `graph_templates_item` VALUES (2531,'',39,269,4,624,0,9,0,1,'Average:','','',2,11); +INSERT INTO `graph_templates_item` VALUES (2532,'',40,269,4,624,0,9,0,3,'Maximum:','','on',2,12); +INSERT INTO `graph_templates_item` VALUES (2533,'',41,269,4,0,1,4,12,1,'Total','','',2,13); +INSERT INTO `graph_templates_item` VALUES (2534,'',42,269,4,0,0,9,12,4,'Current:','','',2,14); +INSERT INTO `graph_templates_item` VALUES (2535,'',43,269,4,0,0,9,12,1,'Average:','','',2,15); +INSERT INTO `graph_templates_item` VALUES (2536,'',44,269,4,0,0,9,12,3,'Maximum:','','',2,16); +INSERT INTO `graph_templates_item` VALUES (2537,'',80,270,11,627,15,7,0,1,'1 Minute Average','','',2,1); +INSERT INTO `graph_templates_item` VALUES (2538,'',81,270,11,627,0,9,0,4,'Current:','','on',4,2); +INSERT INTO `graph_templates_item` VALUES (2539,'',82,270,11,629,8,8,0,1,'5 Minute Average','','',2,3); +INSERT INTO `graph_templates_item` VALUES (2540,'',83,270,11,629,0,9,0,4,'Current:','','on',4,4); +INSERT INTO `graph_templates_item` VALUES (2541,'',84,270,11,628,9,8,0,1,'15 Minute Average','','',2,5); +INSERT INTO `graph_templates_item` VALUES (2542,'',85,270,11,628,0,9,0,4,'Current:','','on',4,6); +INSERT INTO `graph_templates_item` VALUES (2543,'',86,270,11,0,1,4,12,1,'Total','','',2,7); +INSERT INTO `graph_templates_item` VALUES (2544,'',103,271,13,632,52,7,14,1,'Memory Free','','',2,1); +INSERT INTO `graph_templates_item` VALUES (2545,'',104,271,13,632,0,9,14,4,'Current:','','',2,2); +INSERT INTO `graph_templates_item` VALUES (2546,'',105,271,13,632,0,9,14,1,'Average:','','',2,3); +INSERT INTO `graph_templates_item` VALUES (2547,'',106,271,13,632,0,9,14,3,'Maximum:','','on',2,4); +INSERT INTO `graph_templates_item` VALUES (2548,'',107,271,13,630,35,8,14,1,'Memory Buffers','','',2,5); +INSERT INTO `graph_templates_item` VALUES (2549,'',108,271,13,630,0,9,14,4,'Current:','','',2,6); +INSERT INTO `graph_templates_item` VALUES (2550,'',109,271,13,630,0,9,14,1,'Average:','','',2,7); +INSERT INTO `graph_templates_item` VALUES (2551,'',110,271,13,630,0,9,14,3,'Maximum:','','on',2,8); +INSERT INTO `graph_templates_item` VALUES (2552,'',403,271,13,631,30,8,14,1,'Cache Memory','','',2,9); +INSERT INTO `graph_templates_item` VALUES (2553,'',404,271,13,631,0,9,14,4,'Current:','','',2,10); +INSERT INTO `graph_templates_item` VALUES (2554,'',405,271,13,631,0,9,14,1,'Average:','','',2,11); +INSERT INTO `graph_templates_item` VALUES (2555,'',406,271,13,631,0,9,14,3,'Maximum:','','on',2,12); +INSERT INTO `graph_templates_item` VALUES (2556,'',192,272,23,633,25,7,0,1,'Unicast Packets In','','',2,1); +INSERT INTO `graph_templates_item` VALUES (2557,'',193,272,23,633,0,9,0,4,'Current:','','',2,2); +INSERT INTO `graph_templates_item` VALUES (2558,'',194,272,23,633,0,9,0,1,'Average:','','',2,3); +INSERT INTO `graph_templates_item` VALUES (2559,'',195,272,23,633,0,9,0,3,'Maximum:','','on',2,4); +INSERT INTO `graph_templates_item` VALUES (2560,'',188,272,23,634,71,4,0,1,'Unicast Packets Out','','',2,5); +INSERT INTO `graph_templates_item` VALUES (2561,'',189,272,23,634,0,9,0,4,'Current:','','',2,6); +INSERT INTO `graph_templates_item` VALUES (2562,'',190,272,23,634,0,9,0,1,'Average:','','',2,7); +INSERT INTO `graph_templates_item` VALUES (2563,'',191,272,23,634,0,9,0,3,'Maximum:','','on',2,8); +INSERT INTO `graph_templates_item` VALUES (2564,'',192,273,23,635,25,7,0,1,'Unicast Packets In','','',2,1); +INSERT INTO `graph_templates_item` VALUES (2565,'',193,273,23,635,0,9,0,4,'Current:','','',2,2); +INSERT INTO `graph_templates_item` VALUES (2566,'',194,273,23,635,0,9,0,1,'Average:','','',2,3); +INSERT INTO `graph_templates_item` VALUES (2567,'',195,273,23,635,0,9,0,3,'Maximum:','','on',2,4); +INSERT INTO `graph_templates_item` VALUES (2568,'',188,273,23,636,71,4,0,1,'Unicast Packets Out','','',2,5); +INSERT INTO `graph_templates_item` VALUES (2569,'',189,273,23,636,0,9,0,4,'Current:','','',2,6); +INSERT INTO `graph_templates_item` VALUES (2570,'',190,273,23,636,0,9,0,1,'Average:','','',2,7); +INSERT INTO `graph_templates_item` VALUES (2571,'',191,273,23,636,0,9,0,3,'Maximum:','','on',2,8); +INSERT INTO `graph_templates_item` VALUES (2572,'',192,274,23,637,25,7,0,1,'Unicast Packets In','','',2,1); +INSERT INTO `graph_templates_item` VALUES (2573,'',193,274,23,637,0,9,0,4,'Current:','','',2,2); +INSERT INTO `graph_templates_item` VALUES (2574,'',194,274,23,637,0,9,0,1,'Average:','','',2,3); +INSERT INTO `graph_templates_item` VALUES (2575,'',195,274,23,637,0,9,0,3,'Maximum:','','on',2,4); +INSERT INTO `graph_templates_item` VALUES (2576,'',188,274,23,638,71,4,0,1,'Unicast Packets Out','','',2,5); +INSERT INTO `graph_templates_item` VALUES (2577,'',189,274,23,638,0,9,0,4,'Current:','','',2,6); +INSERT INTO `graph_templates_item` VALUES (2578,'',190,274,23,638,0,9,0,1,'Average:','','',2,7); +INSERT INTO `graph_templates_item` VALUES (2579,'',191,274,23,638,0,9,0,3,'Maximum:','','on',2,8); +INSERT INTO `graph_templates_item` VALUES (2580,'',192,275,23,639,25,7,0,1,'Unicast Packets In','','',2,1); +INSERT INTO `graph_templates_item` VALUES (2581,'',193,275,23,639,0,9,0,4,'Current:','','',2,2); +INSERT INTO `graph_templates_item` VALUES (2582,'',194,275,23,639,0,9,0,1,'Average:','','',2,3); +INSERT INTO `graph_templates_item` VALUES (2583,'',195,275,23,639,0,9,0,3,'Maximum:','','on',2,4); +INSERT INTO `graph_templates_item` VALUES (2584,'',188,275,23,640,71,4,0,1,'Unicast Packets Out','','',2,5); +INSERT INTO `graph_templates_item` VALUES (2585,'',189,275,23,640,0,9,0,4,'Current:','','',2,6); +INSERT INTO `graph_templates_item` VALUES (2586,'',190,275,23,640,0,9,0,1,'Average:','','',2,7); +INSERT INTO `graph_templates_item` VALUES (2587,'',191,275,23,640,0,9,0,3,'Maximum:','','on',2,8); +INSERT INTO `graph_templates_item` VALUES (2588,'',192,276,23,641,25,7,0,1,'Unicast Packets In','','',2,1); +INSERT INTO `graph_templates_item` VALUES (2589,'',193,276,23,641,0,9,0,4,'Current:','','',2,2); +INSERT INTO `graph_templates_item` VALUES (2590,'',194,276,23,641,0,9,0,1,'Average:','','',2,3); +INSERT INTO `graph_templates_item` VALUES (2591,'',195,276,23,641,0,9,0,3,'Maximum:','','on',2,4); +INSERT INTO `graph_templates_item` VALUES (2592,'',188,276,23,642,71,4,0,1,'Unicast Packets Out','','',2,5); +INSERT INTO `graph_templates_item` VALUES (2593,'',189,276,23,642,0,9,0,4,'Current:','','',2,6); +INSERT INTO `graph_templates_item` VALUES (2594,'',190,276,23,642,0,9,0,1,'Average:','','',2,7); +INSERT INTO `graph_templates_item` VALUES (2595,'',191,276,23,642,0,9,0,3,'Maximum:','','on',2,8); +INSERT INTO `graph_templates_item` VALUES (2596,'',192,277,23,643,25,7,0,1,'Unicast Packets In','','',2,1); +INSERT INTO `graph_templates_item` VALUES (2597,'',193,277,23,643,0,9,0,4,'Current:','','',2,2); +INSERT INTO `graph_templates_item` VALUES (2598,'',194,277,23,643,0,9,0,1,'Average:','','',2,3); +INSERT INTO `graph_templates_item` VALUES (2599,'',195,277,23,643,0,9,0,3,'Maximum:','','on',2,4); +INSERT INTO `graph_templates_item` VALUES (2600,'',188,277,23,644,71,4,0,1,'Unicast Packets Out','','',2,5); +INSERT INTO `graph_templates_item` VALUES (2601,'',189,277,23,644,0,9,0,4,'Current:','','',2,6); +INSERT INTO `graph_templates_item` VALUES (2602,'',190,277,23,644,0,9,0,1,'Average:','','',2,7); +INSERT INTO `graph_templates_item` VALUES (2603,'',191,277,23,644,0,9,0,3,'Maximum:','','on',2,8); +INSERT INTO `graph_templates_item` VALUES (2604,'',192,278,23,645,25,7,0,1,'Unicast Packets In','','',2,1); +INSERT INTO `graph_templates_item` VALUES (2605,'',193,278,23,645,0,9,0,4,'Current:','','',2,2); +INSERT INTO `graph_templates_item` VALUES (2606,'',194,278,23,645,0,9,0,1,'Average:','','',2,3); +INSERT INTO `graph_templates_item` VALUES (2607,'',195,278,23,645,0,9,0,3,'Maximum:','','on',2,4); +INSERT INTO `graph_templates_item` VALUES (2608,'',188,278,23,646,71,4,0,1,'Unicast Packets Out','','',2,5); +INSERT INTO `graph_templates_item` VALUES (2609,'',189,278,23,646,0,9,0,4,'Current:','','',2,6); +INSERT INTO `graph_templates_item` VALUES (2610,'',190,278,23,646,0,9,0,1,'Average:','','',2,7); +INSERT INTO `graph_templates_item` VALUES (2611,'',191,278,23,646,0,9,0,3,'Maximum:','','on',2,8); +INSERT INTO `graph_templates_item` VALUES (2612,'',192,279,23,647,25,7,0,1,'Unicast Packets In','','',2,1); +INSERT INTO `graph_templates_item` VALUES (2613,'',193,279,23,647,0,9,0,4,'Current:','','',2,2); +INSERT INTO `graph_templates_item` VALUES (2614,'',194,279,23,647,0,9,0,1,'Average:','','',2,3); +INSERT INTO `graph_templates_item` VALUES (2615,'',195,279,23,647,0,9,0,3,'Maximum:','','on',2,4); +INSERT INTO `graph_templates_item` VALUES (2616,'',188,279,23,648,71,4,0,1,'Unicast Packets Out','','',2,5); +INSERT INTO `graph_templates_item` VALUES (2617,'',189,279,23,648,0,9,0,4,'Current:','','',2,6); +INSERT INTO `graph_templates_item` VALUES (2618,'',190,279,23,648,0,9,0,1,'Average:','','',2,7); +INSERT INTO `graph_templates_item` VALUES (2619,'',191,279,23,648,0,9,0,3,'Maximum:','','on',2,8); +INSERT INTO `graph_templates_item` VALUES (2620,'',192,280,23,649,25,7,0,1,'Unicast Packets In','','',2,1); +INSERT INTO `graph_templates_item` VALUES (2621,'',193,280,23,649,0,9,0,4,'Current:','','',2,2); +INSERT INTO `graph_templates_item` VALUES (2622,'',194,280,23,649,0,9,0,1,'Average:','','',2,3); +INSERT INTO `graph_templates_item` VALUES (2623,'',195,280,23,649,0,9,0,3,'Maximum:','','on',2,4); +INSERT INTO `graph_templates_item` VALUES (2624,'',188,280,23,650,71,4,0,1,'Unicast Packets Out','','',2,5); +INSERT INTO `graph_templates_item` VALUES (2625,'',189,280,23,650,0,9,0,4,'Current:','','',2,6); +INSERT INTO `graph_templates_item` VALUES (2626,'',190,280,23,650,0,9,0,1,'Average:','','',2,7); +INSERT INTO `graph_templates_item` VALUES (2627,'',191,280,23,650,0,9,0,3,'Maximum:','','on',2,8); +INSERT INTO `graph_templates_item` VALUES (2628,'',192,281,23,651,25,7,0,1,'Unicast Packets In','','',2,1); +INSERT INTO `graph_templates_item` VALUES (2629,'',193,281,23,651,0,9,0,4,'Current:','','',2,2); +INSERT INTO `graph_templates_item` VALUES (2630,'',194,281,23,651,0,9,0,1,'Average:','','',2,3); +INSERT INTO `graph_templates_item` VALUES (2631,'',195,281,23,651,0,9,0,3,'Maximum:','','on',2,4); +INSERT INTO `graph_templates_item` VALUES (2632,'',188,281,23,652,71,4,0,1,'Unicast Packets Out','','',2,5); +INSERT INTO `graph_templates_item` VALUES (2633,'',189,281,23,652,0,9,0,4,'Current:','','',2,6); +INSERT INTO `graph_templates_item` VALUES (2634,'',190,281,23,652,0,9,0,1,'Average:','','',2,7); +INSERT INTO `graph_templates_item` VALUES (2635,'',191,281,23,652,0,9,0,3,'Maximum:','','on',2,8); +INSERT INTO `graph_templates_item` VALUES (2636,'',192,282,23,653,25,7,0,1,'Unicast Packets In','','',2,1); +INSERT INTO `graph_templates_item` VALUES (2637,'',193,282,23,653,0,9,0,4,'Current:','','',2,2); +INSERT INTO `graph_templates_item` VALUES (2638,'',194,282,23,653,0,9,0,1,'Average:','','',2,3); +INSERT INTO `graph_templates_item` VALUES (2639,'',195,282,23,653,0,9,0,3,'Maximum:','','on',2,4); +INSERT INTO `graph_templates_item` VALUES (2640,'',188,282,23,654,71,4,0,1,'Unicast Packets Out','','',2,5); +INSERT INTO `graph_templates_item` VALUES (2641,'',189,282,23,654,0,9,0,4,'Current:','','',2,6); +INSERT INTO `graph_templates_item` VALUES (2642,'',190,282,23,654,0,9,0,1,'Average:','','',2,7); +INSERT INTO `graph_templates_item` VALUES (2643,'',191,282,23,654,0,9,0,3,'Maximum:','','on',2,8); +INSERT INTO `graph_templates_item` VALUES (2644,'',192,283,23,655,25,7,0,1,'Unicast Packets In','','',2,1); +INSERT INTO `graph_templates_item` VALUES (2645,'',193,283,23,655,0,9,0,4,'Current:','','',2,2); +INSERT INTO `graph_templates_item` VALUES (2646,'',194,283,23,655,0,9,0,1,'Average:','','',2,3); +INSERT INTO `graph_templates_item` VALUES (2647,'',195,283,23,655,0,9,0,3,'Maximum:','','on',2,4); +INSERT INTO `graph_templates_item` VALUES (2648,'',188,283,23,656,71,4,0,1,'Unicast Packets Out','','',2,5); +INSERT INTO `graph_templates_item` VALUES (2649,'',189,283,23,656,0,9,0,4,'Current:','','',2,6); +INSERT INTO `graph_templates_item` VALUES (2650,'',190,283,23,656,0,9,0,1,'Average:','','',2,7); +INSERT INTO `graph_templates_item` VALUES (2651,'',191,283,23,656,0,9,0,3,'Maximum:','','on',2,8); +INSERT INTO `graph_templates_item` VALUES (2652,'',192,284,23,657,25,7,0,1,'Unicast Packets In','','',2,1); +INSERT INTO `graph_templates_item` VALUES (2653,'',193,284,23,657,0,9,0,4,'Current:','','',2,2); +INSERT INTO `graph_templates_item` VALUES (2654,'',194,284,23,657,0,9,0,1,'Average:','','',2,3); +INSERT INTO `graph_templates_item` VALUES (2655,'',195,284,23,657,0,9,0,3,'Maximum:','','on',2,4); +INSERT INTO `graph_templates_item` VALUES (2656,'',188,284,23,658,71,4,0,1,'Unicast Packets Out','','',2,5); +INSERT INTO `graph_templates_item` VALUES (2657,'',189,284,23,658,0,9,0,4,'Current:','','',2,6); +INSERT INTO `graph_templates_item` VALUES (2658,'',190,284,23,658,0,9,0,1,'Average:','','',2,7); +INSERT INTO `graph_templates_item` VALUES (2659,'',191,284,23,658,0,9,0,3,'Maximum:','','on',2,8); +INSERT INTO `graph_templates_item` VALUES (2660,'',192,285,23,659,25,7,0,1,'Unicast Packets In','','',2,1); +INSERT INTO `graph_templates_item` VALUES (2661,'',193,285,23,659,0,9,0,4,'Current:','','',2,2); +INSERT INTO `graph_templates_item` VALUES (2662,'',194,285,23,659,0,9,0,1,'Average:','','',2,3); +INSERT INTO `graph_templates_item` VALUES (2663,'',195,285,23,659,0,9,0,3,'Maximum:','','on',2,4); +INSERT INTO `graph_templates_item` VALUES (2664,'',188,285,23,660,71,4,0,1,'Unicast Packets Out','','',2,5); +INSERT INTO `graph_templates_item` VALUES (2665,'',189,285,23,660,0,9,0,4,'Current:','','',2,6); +INSERT INTO `graph_templates_item` VALUES (2666,'',190,285,23,660,0,9,0,1,'Average:','','',2,7); +INSERT INTO `graph_templates_item` VALUES (2667,'',191,285,23,660,0,9,0,3,'Maximum:','','on',2,8); +INSERT INTO `graph_templates_item` VALUES (2668,'',9,286,2,661,22,7,2,1,'Inbound','','',2,1); +INSERT INTO `graph_templates_item` VALUES (2669,'',10,286,2,661,0,9,2,4,'Current:','','',2,2); +INSERT INTO `graph_templates_item` VALUES (2670,'',11,286,2,661,0,9,2,1,'Average:','','',2,3); +INSERT INTO `graph_templates_item` VALUES (2671,'',12,286,2,661,0,9,2,3,'Maximum:','','on',2,4); +INSERT INTO `graph_templates_item` VALUES (2672,'',13,286,2,662,20,4,2,1,'Outbound','','',2,5); +INSERT INTO `graph_templates_item` VALUES (2673,'',14,286,2,662,0,9,2,4,'Current:','','',2,6); +INSERT INTO `graph_templates_item` VALUES (2674,'',15,286,2,662,0,9,2,1,'Average:','','',2,7); +INSERT INTO `graph_templates_item` VALUES (2675,'',16,286,2,662,0,9,2,3,'Maximum:','','',2,8); +INSERT INTO `graph_templates_item` VALUES (2676,'',29,287,4,664,9,7,0,1,'System','','',2,1); +INSERT INTO `graph_templates_item` VALUES (2677,'',30,287,4,664,0,9,0,4,'Current:','','',2,2); +INSERT INTO `graph_templates_item` VALUES (2678,'',31,287,4,664,0,9,0,1,'Average:','','',2,3); +INSERT INTO `graph_templates_item` VALUES (2679,'',32,287,4,664,0,9,0,3,'Maximum:','','on',2,4); +INSERT INTO `graph_templates_item` VALUES (2680,'',33,287,4,665,21,8,0,1,'User','','',2,5); +INSERT INTO `graph_templates_item` VALUES (2681,'',34,287,4,665,0,9,0,4,'Current:','','',2,6); +INSERT INTO `graph_templates_item` VALUES (2682,'',35,287,4,665,0,9,0,1,'Average:','','',2,7); +INSERT INTO `graph_templates_item` VALUES (2683,'',36,287,4,665,0,9,0,3,'Maximum:','','on',2,8); +INSERT INTO `graph_templates_item` VALUES (2684,'',37,287,4,663,12,8,0,1,'Nice','','',2,9); +INSERT INTO `graph_templates_item` VALUES (2685,'',38,287,4,663,0,9,0,4,'Current:','','',2,10); +INSERT INTO `graph_templates_item` VALUES (2686,'',39,287,4,663,0,9,0,1,'Average:','','',2,11); +INSERT INTO `graph_templates_item` VALUES (2687,'',40,287,4,663,0,9,0,3,'Maximum:','','on',2,12); +INSERT INTO `graph_templates_item` VALUES (2688,'',41,287,4,0,1,4,12,1,'Total','','',2,13); +INSERT INTO `graph_templates_item` VALUES (2689,'',42,287,4,0,0,9,12,4,'Current:','','',2,14); +INSERT INTO `graph_templates_item` VALUES (2690,'',43,287,4,0,0,9,12,1,'Average:','','',2,15); +INSERT INTO `graph_templates_item` VALUES (2691,'',44,287,4,0,0,9,12,3,'Maximum:','','',2,16); +INSERT INTO `graph_templates_item` VALUES (2692,'',103,288,13,668,52,7,14,1,'Memory Free','','',2,1); +INSERT INTO `graph_templates_item` VALUES (2693,'',104,288,13,668,0,9,14,4,'Current:','','',2,2); +INSERT INTO `graph_templates_item` VALUES (2694,'',105,288,13,668,0,9,14,1,'Average:','','',2,3); +INSERT INTO `graph_templates_item` VALUES (2695,'',106,288,13,668,0,9,14,3,'Maximum:','','on',2,4); +INSERT INTO `graph_templates_item` VALUES (2696,'',107,288,13,666,35,8,14,1,'Memory Buffers','','',2,5); +INSERT INTO `graph_templates_item` VALUES (2697,'',108,288,13,666,0,9,14,4,'Current:','','',2,6); +INSERT INTO `graph_templates_item` VALUES (2698,'',109,288,13,666,0,9,14,1,'Average:','','',2,7); +INSERT INTO `graph_templates_item` VALUES (2699,'',110,288,13,666,0,9,14,3,'Maximum:','','on',2,8); +INSERT INTO `graph_templates_item` VALUES (2700,'',403,288,13,667,30,8,14,1,'Cache Memory','','',2,9); +INSERT INTO `graph_templates_item` VALUES (2701,'',404,288,13,667,0,9,14,4,'Current:','','',2,10); +INSERT INTO `graph_templates_item` VALUES (2702,'',405,288,13,667,0,9,14,1,'Average:','','',2,11); +INSERT INTO `graph_templates_item` VALUES (2703,'',406,288,13,667,0,9,14,3,'Maximum:','','on',2,12); +INSERT INTO `graph_templates_item` VALUES (2704,'',9,289,2,669,22,7,2,1,'Inbound','','',2,1); +INSERT INTO `graph_templates_item` VALUES (2705,'',10,289,2,669,0,9,2,4,'Current:','','',2,2); +INSERT INTO `graph_templates_item` VALUES (2706,'',11,289,2,669,0,9,2,1,'Average:','','',2,3); +INSERT INTO `graph_templates_item` VALUES (2707,'',12,289,2,669,0,9,2,3,'Maximum:','','on',2,4); +INSERT INTO `graph_templates_item` VALUES (2708,'',13,289,2,670,20,4,2,1,'Outbound','','',2,5); +INSERT INTO `graph_templates_item` VALUES (2709,'',14,289,2,670,0,9,2,4,'Current:','','',2,6); +INSERT INTO `graph_templates_item` VALUES (2710,'',15,289,2,670,0,9,2,1,'Average:','','',2,7); +INSERT INTO `graph_templates_item` VALUES (2711,'',16,289,2,670,0,9,2,3,'Maximum:','','',2,8); +INSERT INTO `graph_templates_item` VALUES (2712,'',167,290,21,672,48,7,14,1,'Used','','',2,1); +INSERT INTO `graph_templates_item` VALUES (2713,'',169,290,21,672,0,9,14,4,'Current:','','',2,2); +INSERT INTO `graph_templates_item` VALUES (2714,'',170,290,21,672,0,9,14,1,'Average:','','',2,3); +INSERT INTO `graph_templates_item` VALUES (2715,'',171,290,21,672,0,9,14,3,'Maximum:','','on',2,4); +INSERT INTO `graph_templates_item` VALUES (2716,'',172,290,21,671,20,8,14,1,'Available','','',2,5); +INSERT INTO `graph_templates_item` VALUES (2717,'',173,290,21,671,0,9,14,4,'Current:','','',2,6); +INSERT INTO `graph_templates_item` VALUES (2718,'',174,290,21,671,0,9,14,1,'Average:','','',2,7); +INSERT INTO `graph_templates_item` VALUES (2719,'',175,290,21,671,0,9,14,3,'Maximum:','','on',2,8); +INSERT INTO `graph_templates_item` VALUES (2720,'',176,290,21,0,1,5,15,1,'Total','','',2,9); +INSERT INTO `graph_templates_item` VALUES (2721,'',177,290,21,0,0,9,15,4,'Current:','','',2,10); +INSERT INTO `graph_templates_item` VALUES (2722,'',178,290,21,0,0,9,15,1,'Average:','','',2,11); +INSERT INTO `graph_templates_item` VALUES (2723,'',179,290,21,0,0,9,15,3,'Maximum:','','on',2,12); + +-- +-- Table structure for table `graph_tree` +-- + +CREATE TABLE `graph_tree` ( + `id` smallint(5) unsigned NOT NULL auto_increment, + `sort_type` tinyint(3) unsigned NOT NULL default '1', + `name` varchar(255) NOT NULL default '', + PRIMARY KEY (`id`), + UNIQUE KEY `ID` (`id`), + KEY `id_2` (`id`) +) TYPE=MyISAM; + +-- +-- Dumping data for table `graph_tree` +-- + +INSERT INTO `graph_tree` VALUES (4,1,'Overview'); +INSERT INTO `graph_tree` VALUES (2,1,'Switches'); +INSERT INTO `graph_tree` VALUES (3,1,'Byxen'); + +-- +-- Table structure for table `graph_tree_items` +-- + +CREATE TABLE `graph_tree_items` ( + `id` smallint(5) unsigned NOT NULL auto_increment, + `graph_tree_id` smallint(5) unsigned NOT NULL default '0', + `local_graph_id` mediumint(8) unsigned NOT NULL default '0', + `rra_id` smallint(8) unsigned NOT NULL default '0', + `title` varchar(255) default NULL, + `host_id` mediumint(8) unsigned NOT NULL default '0', + `order_key` varchar(100) NOT NULL default '0', + `host_grouping_type` tinyint(3) unsigned NOT NULL default '1', + `sort_children_type` tinyint(3) unsigned NOT NULL default '1', + PRIMARY KEY (`id`), + UNIQUE KEY `ID` (`id`), + KEY `id_2` (`id`), + KEY `graph_tree_id` (`graph_tree_id`) +) TYPE=MyISAM; + +-- +-- Dumping data for table `graph_tree_items` +-- + +INSERT INTO `graph_tree_items` VALUES (19,4,187,1,'',0,'004000000000000000000000000000000000000000000000000000000000000000000000000000000000000000',1,1); +INSERT INTO `graph_tree_items` VALUES (8,2,0,0,'',2,'001000000000000000000000000000000000000000000000000000000000000000000000000000000000000000',1,1); +INSERT INTO `graph_tree_items` VALUES (9,2,0,0,'',3,'002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000',1,1); +INSERT INTO `graph_tree_items` VALUES (10,2,0,0,'',4,'003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000',1,1); +INSERT INTO `graph_tree_items` VALUES (11,2,0,0,'',6,'004000000000000000000000000000000000000000000000000000000000000000000000000000000000000000',1,1); +INSERT INTO `graph_tree_items` VALUES (12,2,0,0,'',7,'005000000000000000000000000000000000000000000000000000000000000000000000000000000000000000',1,1); +INSERT INTO `graph_tree_items` VALUES (13,3,0,0,'',5,'001000000000000000000000000000000000000000000000000000000000000000000000000000000000000000',1,1); +INSERT INTO `graph_tree_items` VALUES (15,2,0,0,'',8,'007000000000000000000000000000000000000000000000000000000000000000000000000000000000000000',1,1); +INSERT INTO `graph_tree_items` VALUES (17,2,0,0,'',11,'006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000',1,1); +INSERT INTO `graph_tree_items` VALUES (21,4,286,1,'',0,'005000000000000000000000000000000000000000000000000000000000000000000000000000000000000000',1,1); +INSERT INTO `graph_tree_items` VALUES (22,3,0,0,'',13,'002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000',1,1); + +-- +-- Table structure for table `host` +-- + +CREATE TABLE `host` ( + `id` mediumint(8) unsigned NOT NULL auto_increment, + `host_template_id` mediumint(8) unsigned NOT NULL default '0', + `description` varchar(150) NOT NULL default '', + `hostname` varchar(250) default NULL, + `snmp_community` varchar(100) default NULL, + `snmp_version` tinyint(1) unsigned NOT NULL default '1', + `snmp_username` varchar(50) default NULL, + `snmp_password` varchar(50) default NULL, + `snmp_port` mediumint(5) unsigned NOT NULL default '161', + `snmp_timeout` mediumint(8) unsigned NOT NULL default '500', + `disabled` char(2) default NULL, + `status` tinyint(2) NOT NULL default '0', + `status_event_count` mediumint(8) unsigned NOT NULL default '0', + `status_fail_date` datetime NOT NULL default '0000-00-00 00:00:00', + `status_rec_date` datetime NOT NULL default '0000-00-00 00:00:00', + `status_last_error` varchar(50) default '', + `min_time` decimal(7,5) default '9.99999', + `max_time` decimal(7,5) default '0.00000', + `cur_time` decimal(7,5) default '0.00000', + `avg_time` decimal(7,5) default '0.00000', + `total_polls` int(12) unsigned default '0', + `failed_polls` int(12) unsigned default '0', + `availability` decimal(7,5) NOT NULL default '100.00000', + PRIMARY KEY (`id`), + UNIQUE KEY `id` (`id`), + KEY `id_2` (`id`) +) TYPE=MyISAM; + +-- +-- Dumping data for table `host` +-- + +INSERT INTO `host` VALUES (1,8,'Localhost','127.0.0.1','',1,'','',161,500,'',3,0,'0000-00-00 00:00:00','0000-00-00 00:00:00','','3.78000','999.99999','3.92000','13.50093',251,0,'100.00000'); +INSERT INTO `host` VALUES (2,5,'172.16.42.100','172.16.42.100','public',2,'','',161,500,'',1,12,'2005-03-28 03:05:06','2005-03-28 03:45:03','Host did not respond to SNMP','9.99999','999.99999','109.63000','98.05445',797,21,'97.36511'); +INSERT INTO `host` VALUES (3,5,'172.16.42.101','172.16.42.101','public',2,'','',161,500,'',1,14,'2005-03-28 03:40:10','2005-03-27 01:35:08','Host did not respond to SNMP','9.99999','999.99999','86.22000','86.28536',797,24,'96.98870'); +INSERT INTO `host` VALUES (4,5,'172.16.42.102','172.16.42.102','public',2,'','',161,500,'',1,30,'2005-03-28 02:20:16','2005-03-28 11:45:14','Host did not respond to SNMP','9.99999','999.99999','83.46000','98.33701',797,419,'47.42785'); +INSERT INTO `host` VALUES (5,3,'sinabox','172.16.42.1','public',2,'','',161,500,'',1,8,'2005-03-29 09:35:53','0000-00-00 00:00:00','Host did not respond to SNMP','3.27000','301.11000','76.36000','77.92582',796,10,'98.74371'); +INSERT INTO `host` VALUES (6,5,'172.16.42.103','172.16.42.103','public',2,'','',161,500,'',1,21,'2005-03-28 03:05:22','2005-03-28 11:05:20','Host did not respond to SNMP','9.99999','999.99999','82.38000','107.07937',797,395,'50.43914'); +INSERT INTO `host` VALUES (7,5,'172.16.42.104','172.16.42.104','public',2,'','',161,500,'',1,9,'2005-03-28 04:05:25','2005-03-28 03:45:26','Host did not respond to SNMP','9.99999','999.99999','93.11000','86.66769',796,22,'97.23618'); +INSERT INTO `host` VALUES (8,5,'172.16.42.142','172.16.42.142','public',2,'','',161,500,'',1,8,'2005-03-29 09:35:44','0000-00-00 00:00:00','Host did not respond to SNMP','9.99999','285.95000','98.83000','98.90884',795,8,'98.99371'); +INSERT INTO `host` VALUES (12,3,'sinabox packets/s','172.16.42.1','public',2,'','',161,500,'',1,8,'2005-03-29 09:35:53','0000-00-00 00:00:00','Host did not respond to SNMP','3.27000','301.11000','76.36000','77.92582',796,10,'98.74371'); +INSERT INTO `host` VALUES (11,5,'172.16.42.105','172.16.42.105','public',2,'','',161,500,'',1,763,'2005-03-26 12:10:48','0000-00-00 00:00:00','Host did not respond to SNMP','9.99999','172.12000','92.29000','97.25350',791,763,'3.53982'); +INSERT INTO `host` VALUES (13,3,'monitor.easterhegg.de','127.0.0.1','public',1,'','',161,500,'',3,0,'0000-00-00 00:00:00','0000-00-00 00:00:00','','3.78000','999.99999','3.92000','13.50093',251,0,'100.00000'); + +-- +-- Table structure for table `host_graph` +-- + +CREATE TABLE `host_graph` ( + `host_id` mediumint(8) unsigned NOT NULL default '0', + `graph_template_id` mediumint(8) unsigned NOT NULL default '0', + PRIMARY KEY (`host_id`,`graph_template_id`) +) TYPE=MyISAM; + +-- +-- Dumping data for table `host_graph` +-- + +INSERT INTO `host_graph` VALUES (1,8); +INSERT INTO `host_graph` VALUES (1,9); +INSERT INTO `host_graph` VALUES (1,10); +INSERT INTO `host_graph` VALUES (1,12); +INSERT INTO `host_graph` VALUES (2,18); +INSERT INTO `host_graph` VALUES (3,18); +INSERT INTO `host_graph` VALUES (4,18); +INSERT INTO `host_graph` VALUES (5,4); +INSERT INTO `host_graph` VALUES (5,8); +INSERT INTO `host_graph` VALUES (5,9); +INSERT INTO `host_graph` VALUES (5,10); +INSERT INTO `host_graph` VALUES (5,11); +INSERT INTO `host_graph` VALUES (5,12); +INSERT INTO `host_graph` VALUES (5,13); +INSERT INTO `host_graph` VALUES (5,28); +INSERT INTO `host_graph` VALUES (6,18); +INSERT INTO `host_graph` VALUES (7,18); +INSERT INTO `host_graph` VALUES (8,18); +INSERT INTO `host_graph` VALUES (11,18); +INSERT INTO `host_graph` VALUES (12,4); +INSERT INTO `host_graph` VALUES (12,11); +INSERT INTO `host_graph` VALUES (12,13); +INSERT INTO `host_graph` VALUES (13,4); +INSERT INTO `host_graph` VALUES (13,8); +INSERT INTO `host_graph` VALUES (13,9); +INSERT INTO `host_graph` VALUES (13,10); +INSERT INTO `host_graph` VALUES (13,11); +INSERT INTO `host_graph` VALUES (13,12); +INSERT INTO `host_graph` VALUES (13,13); + +-- +-- Table structure for table `host_snmp_cache` +-- + +CREATE TABLE `host_snmp_cache` ( + `host_id` mediumint(8) unsigned NOT NULL default '0', + `snmp_query_id` mediumint(8) unsigned NOT NULL default '0', + `field_name` varchar(50) NOT NULL default '', + `field_value` varchar(255) default NULL, + `snmp_index` varchar(60) NOT NULL default '', + `oid` varchar(255) NOT NULL default '', + PRIMARY KEY (`host_id`,`snmp_query_id`,`field_name`,`snmp_index`), + KEY `host_id` (`host_id`,`field_name`), + KEY `snmp_index` (`snmp_index`) +) TYPE=MyISAM; + +-- +-- Dumping data for table `host_snmp_cache` +-- + +INSERT INTO `host_snmp_cache` VALUES (2,1,'ifSpeed','10000000','15','.1.3.6.1.2.1.2.2.1.5.15'); +INSERT INTO `host_snmp_cache` VALUES (2,1,'ifSpeed','10000000','14','.1.3.6.1.2.1.2.2.1.5.14'); +INSERT INTO `host_snmp_cache` VALUES (2,1,'ifSpeed','100000000','13','.1.3.6.1.2.1.2.2.1.5.13'); +INSERT INTO `host_snmp_cache` VALUES (2,1,'ifSpeed','10000000','12','.1.3.6.1.2.1.2.2.1.5.12'); +INSERT INTO `host_snmp_cache` VALUES (1,6,'dskMount','/','/dev/hda1',''); +INSERT INTO `host_snmp_cache` VALUES (1,6,'dskDevice','/dev/hda1','/dev/hda1',''); +INSERT INTO `host_snmp_cache` VALUES (2,1,'ifSpeed','10000000','11','.1.3.6.1.2.1.2.2.1.5.11'); +INSERT INTO `host_snmp_cache` VALUES (2,1,'ifSpeed','10000000','10','.1.3.6.1.2.1.2.2.1.5.10'); +INSERT INTO `host_snmp_cache` VALUES (2,1,'ifSpeed','100000000','9','.1.3.6.1.2.1.2.2.1.5.9'); +INSERT INTO `host_snmp_cache` VALUES (2,1,'ifSpeed','10000000','8','.1.3.6.1.2.1.2.2.1.5.8'); +INSERT INTO `host_snmp_cache` VALUES (2,1,'ifSpeed','100000000','7','.1.3.6.1.2.1.2.2.1.5.7'); +INSERT INTO `host_snmp_cache` VALUES (2,1,'ifSpeed','10000000','6','.1.3.6.1.2.1.2.2.1.5.6'); +INSERT INTO `host_snmp_cache` VALUES (2,1,'ifSpeed','100000000','5','.1.3.6.1.2.1.2.2.1.5.5'); +INSERT INTO `host_snmp_cache` VALUES (2,1,'ifSpeed','10000000','4','.1.3.6.1.2.1.2.2.1.5.4'); +INSERT INTO `host_snmp_cache` VALUES (2,1,'ifSpeed','100000000','3','.1.3.6.1.2.1.2.2.1.5.3'); +INSERT INTO `host_snmp_cache` VALUES (2,1,'ifSpeed','100000000','2','.1.3.6.1.2.1.2.2.1.5.2'); +INSERT INTO `host_snmp_cache` VALUES (2,1,'ifSpeed','100000000','1','.1.3.6.1.2.1.2.2.1.5.1'); +INSERT INTO `host_snmp_cache` VALUES (2,1,'ifType','propVirtual(53)','29','.1.3.6.1.2.1.2.2.1.3.29'); +INSERT INTO `host_snmp_cache` VALUES (2,1,'ifType','propVirtual(53)','28','.1.3.6.1.2.1.2.2.1.3.28'); +INSERT INTO `host_snmp_cache` VALUES (2,1,'ifType','other(1)','27','.1.3.6.1.2.1.2.2.1.3.27'); +INSERT INTO `host_snmp_cache` VALUES (2,1,'ifType','ethernetCsmacd(6)','26','.1.3.6.1.2.1.2.2.1.3.26'); +INSERT INTO `host_snmp_cache` VALUES (2,1,'ifType','ethernetCsmacd(6)','25','.1.3.6.1.2.1.2.2.1.3.25'); +INSERT INTO `host_snmp_cache` VALUES (2,1,'ifType','ethernetCsmacd(6)','24','.1.3.6.1.2.1.2.2.1.3.24'); +INSERT INTO `host_snmp_cache` VALUES (2,1,'ifType','ethernetCsmacd(6)','23','.1.3.6.1.2.1.2.2.1.3.23'); +INSERT INTO `host_snmp_cache` VALUES (2,1,'ifType','ethernetCsmacd(6)','22','.1.3.6.1.2.1.2.2.1.3.22'); +INSERT INTO `host_snmp_cache` VALUES (2,1,'ifType','ethernetCsmacd(6)','21','.1.3.6.1.2.1.2.2.1.3.21'); +INSERT INTO `host_snmp_cache` VALUES (2,1,'ifType','ethernetCsmacd(6)','20','.1.3.6.1.2.1.2.2.1.3.20'); +INSERT INTO `host_snmp_cache` VALUES (2,1,'ifType','ethernetCsmacd(6)','19','.1.3.6.1.2.1.2.2.1.3.19'); +INSERT INTO `host_snmp_cache` VALUES (2,1,'ifType','ethernetCsmacd(6)','18','.1.3.6.1.2.1.2.2.1.3.18'); +INSERT INTO `host_snmp_cache` VALUES (2,1,'ifType','ethernetCsmacd(6)','17','.1.3.6.1.2.1.2.2.1.3.17'); +INSERT INTO `host_snmp_cache` VALUES (2,1,'ifType','ethernetCsmacd(6)','16','.1.3.6.1.2.1.2.2.1.3.16'); +INSERT INTO `host_snmp_cache` VALUES (2,1,'ifType','ethernetCsmacd(6)','15','.1.3.6.1.2.1.2.2.1.3.15'); +INSERT INTO `host_snmp_cache` VALUES (2,1,'ifType','ethernetCsmacd(6)','14','.1.3.6.1.2.1.2.2.1.3.14'); +INSERT INTO `host_snmp_cache` VALUES (2,1,'ifType','ethernetCsmacd(6)','13','.1.3.6.1.2.1.2.2.1.3.13'); +INSERT INTO `host_snmp_cache` VALUES (2,1,'ifType','ethernetCsmacd(6)','12','.1.3.6.1.2.1.2.2.1.3.12'); +INSERT INTO `host_snmp_cache` VALUES (2,1,'ifType','ethernetCsmacd(6)','11','.1.3.6.1.2.1.2.2.1.3.11'); +INSERT INTO `host_snmp_cache` VALUES (2,1,'ifType','ethernetCsmacd(6)','10','.1.3.6.1.2.1.2.2.1.3.10'); +INSERT INTO `host_snmp_cache` VALUES (2,1,'ifType','ethernetCsmacd(6)','9','.1.3.6.1.2.1.2.2.1.3.9'); +INSERT INTO `host_snmp_cache` VALUES (2,1,'ifType','ethernetCsmacd(6)','8','.1.3.6.1.2.1.2.2.1.3.8'); +INSERT INTO `host_snmp_cache` VALUES (2,1,'ifType','ethernetCsmacd(6)','7','.1.3.6.1.2.1.2.2.1.3.7'); +INSERT INTO `host_snmp_cache` VALUES (2,1,'ifType','ethernetCsmacd(6)','6','.1.3.6.1.2.1.2.2.1.3.6'); +INSERT INTO `host_snmp_cache` VALUES (2,1,'ifType','ethernetCsmacd(6)','5','.1.3.6.1.2.1.2.2.1.3.5'); +INSERT INTO `host_snmp_cache` VALUES (2,1,'ifType','ethernetCsmacd(6)','4','.1.3.6.1.2.1.2.2.1.3.4'); +INSERT INTO `host_snmp_cache` VALUES (2,1,'ifType','ethernetCsmacd(6)','3','.1.3.6.1.2.1.2.2.1.3.3'); +INSERT INTO `host_snmp_cache` VALUES (2,1,'ifType','ethernetCsmacd(6)','2','.1.3.6.1.2.1.2.2.1.3.2'); +INSERT INTO `host_snmp_cache` VALUES (2,1,'ifType','ethernetCsmacd(6)','1','.1.3.6.1.2.1.2.2.1.3.1'); +INSERT INTO `host_snmp_cache` VALUES (2,1,'ifAlias','','29','.1.3.6.1.2.1.31.1.1.1.18.29'); +INSERT INTO `host_snmp_cache` VALUES (2,1,'ifAlias','','28','.1.3.6.1.2.1.31.1.1.1.18.28'); +INSERT INTO `host_snmp_cache` VALUES (2,1,'ifAlias','','27','.1.3.6.1.2.1.31.1.1.1.18.27'); +INSERT INTO `host_snmp_cache` VALUES (2,1,'ifAlias','','26','.1.3.6.1.2.1.31.1.1.1.18.26'); +INSERT INTO `host_snmp_cache` VALUES (2,1,'ifAlias','','25','.1.3.6.1.2.1.31.1.1.1.18.25'); +INSERT INTO `host_snmp_cache` VALUES (2,1,'ifAlias','','24','.1.3.6.1.2.1.31.1.1.1.18.24'); +INSERT INTO `host_snmp_cache` VALUES (2,1,'ifAlias','','23','.1.3.6.1.2.1.31.1.1.1.18.23'); +INSERT INTO `host_snmp_cache` VALUES (2,1,'ifAlias','','22','.1.3.6.1.2.1.31.1.1.1.18.22'); +INSERT INTO `host_snmp_cache` VALUES (2,1,'ifAlias','','21','.1.3.6.1.2.1.31.1.1.1.18.21'); +INSERT INTO `host_snmp_cache` VALUES (2,1,'ifAlias','','20','.1.3.6.1.2.1.31.1.1.1.18.20'); +INSERT INTO `host_snmp_cache` VALUES (2,1,'ifAlias','','19','.1.3.6.1.2.1.31.1.1.1.18.19'); +INSERT INTO `host_snmp_cache` VALUES (2,1,'ifAlias','','18','.1.3.6.1.2.1.31.1.1.1.18.18'); +INSERT INTO `host_snmp_cache` VALUES (2,1,'ifAlias','','17','.1.3.6.1.2.1.31.1.1.1.18.17'); +INSERT INTO `host_snmp_cache` VALUES (2,1,'ifAlias','','16','.1.3.6.1.2.1.31.1.1.1.18.16'); +INSERT INTO `host_snmp_cache` VALUES (2,1,'ifAlias','','15','.1.3.6.1.2.1.31.1.1.1.18.15'); +INSERT INTO `host_snmp_cache` VALUES (2,1,'ifAlias','','14','.1.3.6.1.2.1.31.1.1.1.18.14'); +INSERT INTO `host_snmp_cache` VALUES (2,1,'ifAlias','','13','.1.3.6.1.2.1.31.1.1.1.18.13'); +INSERT INTO `host_snmp_cache` VALUES (2,1,'ifAlias','','12','.1.3.6.1.2.1.31.1.1.1.18.12'); +INSERT INTO `host_snmp_cache` VALUES (2,1,'ifAlias','','11','.1.3.6.1.2.1.31.1.1.1.18.11'); +INSERT INTO `host_snmp_cache` VALUES (2,1,'ifAlias','','10','.1.3.6.1.2.1.31.1.1.1.18.10'); +INSERT INTO `host_snmp_cache` VALUES (2,1,'ifAlias','','9','.1.3.6.1.2.1.31.1.1.1.18.9'); +INSERT INTO `host_snmp_cache` VALUES (2,1,'ifAlias','','8','.1.3.6.1.2.1.31.1.1.1.18.8'); +INSERT INTO `host_snmp_cache` VALUES (2,1,'ifAlias','','7','.1.3.6.1.2.1.31.1.1.1.18.7'); +INSERT INTO `host_snmp_cache` VALUES (2,1,'ifAlias','','6','.1.3.6.1.2.1.31.1.1.1.18.6'); +INSERT INTO `host_snmp_cache` VALUES (2,1,'ifAlias','','5','.1.3.6.1.2.1.31.1.1.1.18.5'); +INSERT INTO `host_snmp_cache` VALUES (2,1,'ifAlias','','4','.1.3.6.1.2.1.31.1.1.1.18.4'); +INSERT INTO `host_snmp_cache` VALUES (2,1,'ifAlias','','3','.1.3.6.1.2.1.31.1.1.1.18.3'); +INSERT INTO `host_snmp_cache` VALUES (2,1,'ifAlias','','2','.1.3.6.1.2.1.31.1.1.1.18.2'); +INSERT INTO `host_snmp_cache` VALUES (2,1,'ifAlias','','1','.1.3.6.1.2.1.31.1.1.1.18.1'); +INSERT INTO `host_snmp_cache` VALUES (2,1,'ifName','Vl42','29','.1.3.6.1.2.1.31.1.1.1.1.29'); +INSERT INTO `host_snmp_cache` VALUES (2,1,'ifName','Vl1','28','.1.3.6.1.2.1.31.1.1.1.1.28'); +INSERT INTO `host_snmp_cache` VALUES (2,1,'ifName','Nu0','27','.1.3.6.1.2.1.31.1.1.1.1.27'); +INSERT INTO `host_snmp_cache` VALUES (2,1,'ifName','Gi0/2','26','.1.3.6.1.2.1.31.1.1.1.1.26'); +INSERT INTO `host_snmp_cache` VALUES (2,1,'ifName','Gi0/1','25','.1.3.6.1.2.1.31.1.1.1.1.25'); +INSERT INTO `host_snmp_cache` VALUES (2,1,'ifName','Fa0/24','24','.1.3.6.1.2.1.31.1.1.1.1.24'); +INSERT INTO `host_snmp_cache` VALUES (2,1,'ifName','Fa0/23','23','.1.3.6.1.2.1.31.1.1.1.1.23'); +INSERT INTO `host_snmp_cache` VALUES (2,1,'ifName','Fa0/22','22','.1.3.6.1.2.1.31.1.1.1.1.22'); +INSERT INTO `host_snmp_cache` VALUES (2,1,'ifName','Fa0/21','21','.1.3.6.1.2.1.31.1.1.1.1.21'); +INSERT INTO `host_snmp_cache` VALUES (2,1,'ifName','Fa0/20','20','.1.3.6.1.2.1.31.1.1.1.1.20'); +INSERT INTO `host_snmp_cache` VALUES (2,1,'ifName','Fa0/19','19','.1.3.6.1.2.1.31.1.1.1.1.19'); +INSERT INTO `host_snmp_cache` VALUES (2,1,'ifName','Fa0/18','18','.1.3.6.1.2.1.31.1.1.1.1.18'); +INSERT INTO `host_snmp_cache` VALUES (2,1,'ifName','Fa0/17','17','.1.3.6.1.2.1.31.1.1.1.1.17'); +INSERT INTO `host_snmp_cache` VALUES (2,1,'ifName','Fa0/16','16','.1.3.6.1.2.1.31.1.1.1.1.16'); +INSERT INTO `host_snmp_cache` VALUES (2,1,'ifName','Fa0/15','15','.1.3.6.1.2.1.31.1.1.1.1.15'); +INSERT INTO `host_snmp_cache` VALUES (2,1,'ifName','Fa0/14','14','.1.3.6.1.2.1.31.1.1.1.1.14'); +INSERT INTO `host_snmp_cache` VALUES (2,1,'ifName','Fa0/13','13','.1.3.6.1.2.1.31.1.1.1.1.13'); +INSERT INTO `host_snmp_cache` VALUES (2,1,'ifName','Fa0/12','12','.1.3.6.1.2.1.31.1.1.1.1.12'); +INSERT INTO `host_snmp_cache` VALUES (2,1,'ifName','Fa0/11','11','.1.3.6.1.2.1.31.1.1.1.1.11'); +INSERT INTO `host_snmp_cache` VALUES (2,1,'ifName','Fa0/10','10','.1.3.6.1.2.1.31.1.1.1.1.10'); +INSERT INTO `host_snmp_cache` VALUES (2,1,'ifName','Fa0/9','9','.1.3.6.1.2.1.31.1.1.1.1.9'); +INSERT INTO `host_snmp_cache` VALUES (2,1,'ifName','Fa0/8','8','.1.3.6.1.2.1.31.1.1.1.1.8'); +INSERT INTO `host_snmp_cache` VALUES (2,1,'ifName','Fa0/7','7','.1.3.6.1.2.1.31.1.1.1.1.7'); +INSERT INTO `host_snmp_cache` VALUES (2,1,'ifName','Fa0/6','6','.1.3.6.1.2.1.31.1.1.1.1.6'); +INSERT INTO `host_snmp_cache` VALUES (2,1,'ifName','Fa0/5','5','.1.3.6.1.2.1.31.1.1.1.1.5'); +INSERT INTO `host_snmp_cache` VALUES (2,1,'ifName','Fa0/4','4','.1.3.6.1.2.1.31.1.1.1.1.4'); +INSERT INTO `host_snmp_cache` VALUES (2,1,'ifName','Fa0/3','3','.1.3.6.1.2.1.31.1.1.1.1.3'); +INSERT INTO `host_snmp_cache` VALUES (2,1,'ifName','Fa0/2','2','.1.3.6.1.2.1.31.1.1.1.1.2'); +INSERT INTO `host_snmp_cache` VALUES (2,1,'ifName','Fa0/1','1','.1.3.6.1.2.1.31.1.1.1.1.1'); +INSERT INTO `host_snmp_cache` VALUES (2,1,'ifDescr','Vlan42','29','.1.3.6.1.2.1.2.2.1.2.29'); +INSERT INTO `host_snmp_cache` VALUES (2,1,'ifDescr','Vlan1','28','.1.3.6.1.2.1.2.2.1.2.28'); +INSERT INTO `host_snmp_cache` VALUES (2,1,'ifDescr','Null0','27','.1.3.6.1.2.1.2.2.1.2.27'); +INSERT INTO `host_snmp_cache` VALUES (2,1,'ifDescr','GigabitEthernet0/2','26','.1.3.6.1.2.1.2.2.1.2.26'); +INSERT INTO `host_snmp_cache` VALUES (2,1,'ifDescr','GigabitEthernet0/1','25','.1.3.6.1.2.1.2.2.1.2.25'); +INSERT INTO `host_snmp_cache` VALUES (2,1,'ifDescr','FastEthernet0/24','24','.1.3.6.1.2.1.2.2.1.2.24'); +INSERT INTO `host_snmp_cache` VALUES (2,1,'ifDescr','FastEthernet0/23','23','.1.3.6.1.2.1.2.2.1.2.23'); +INSERT INTO `host_snmp_cache` VALUES (2,1,'ifDescr','FastEthernet0/22','22','.1.3.6.1.2.1.2.2.1.2.22'); +INSERT INTO `host_snmp_cache` VALUES (2,1,'ifDescr','FastEthernet0/21','21','.1.3.6.1.2.1.2.2.1.2.21'); +INSERT INTO `host_snmp_cache` VALUES (2,1,'ifDescr','FastEthernet0/20','20','.1.3.6.1.2.1.2.2.1.2.20'); +INSERT INTO `host_snmp_cache` VALUES (2,1,'ifDescr','FastEthernet0/19','19','.1.3.6.1.2.1.2.2.1.2.19'); +INSERT INTO `host_snmp_cache` VALUES (2,1,'ifDescr','FastEthernet0/18','18','.1.3.6.1.2.1.2.2.1.2.18'); +INSERT INTO `host_snmp_cache` VALUES (2,1,'ifDescr','FastEthernet0/17','17','.1.3.6.1.2.1.2.2.1.2.17'); +INSERT INTO `host_snmp_cache` VALUES (2,1,'ifDescr','FastEthernet0/16','16','.1.3.6.1.2.1.2.2.1.2.16'); +INSERT INTO `host_snmp_cache` VALUES (2,1,'ifDescr','FastEthernet0/15','15','.1.3.6.1.2.1.2.2.1.2.15'); +INSERT INTO `host_snmp_cache` VALUES (2,1,'ifDescr','FastEthernet0/14','14','.1.3.6.1.2.1.2.2.1.2.14'); +INSERT INTO `host_snmp_cache` VALUES (2,1,'ifDescr','FastEthernet0/13','13','.1.3.6.1.2.1.2.2.1.2.13'); +INSERT INTO `host_snmp_cache` VALUES (2,1,'ifDescr','FastEthernet0/12','12','.1.3.6.1.2.1.2.2.1.2.12'); +INSERT INTO `host_snmp_cache` VALUES (2,1,'ifDescr','FastEthernet0/11','11','.1.3.6.1.2.1.2.2.1.2.11'); +INSERT INTO `host_snmp_cache` VALUES (2,1,'ifDescr','FastEthernet0/10','10','.1.3.6.1.2.1.2.2.1.2.10'); +INSERT INTO `host_snmp_cache` VALUES (2,1,'ifDescr','FastEthernet0/9','9','.1.3.6.1.2.1.2.2.1.2.9'); +INSERT INTO `host_snmp_cache` VALUES (2,1,'ifDescr','FastEthernet0/8','8','.1.3.6.1.2.1.2.2.1.2.8'); +INSERT INTO `host_snmp_cache` VALUES (2,1,'ifDescr','FastEthernet0/7','7','.1.3.6.1.2.1.2.2.1.2.7'); +INSERT INTO `host_snmp_cache` VALUES (2,1,'ifDescr','FastEthernet0/6','6','.1.3.6.1.2.1.2.2.1.2.6'); +INSERT INTO `host_snmp_cache` VALUES (2,1,'ifDescr','FastEthernet0/5','5','.1.3.6.1.2.1.2.2.1.2.5'); +INSERT INTO `host_snmp_cache` VALUES (2,1,'ifDescr','FastEthernet0/4','4','.1.3.6.1.2.1.2.2.1.2.4'); +INSERT INTO `host_snmp_cache` VALUES (2,1,'ifDescr','FastEthernet0/3','3','.1.3.6.1.2.1.2.2.1.2.3'); +INSERT INTO `host_snmp_cache` VALUES (2,1,'ifDescr','FastEthernet0/2','2','.1.3.6.1.2.1.2.2.1.2.2'); +INSERT INTO `host_snmp_cache` VALUES (2,1,'ifDescr','FastEthernet0/1','1','.1.3.6.1.2.1.2.2.1.2.1'); +INSERT INTO `host_snmp_cache` VALUES (2,1,'ifOperStatus','Up','29','.1.3.6.1.2.1.2.2.1.8.29'); +INSERT INTO `host_snmp_cache` VALUES (2,1,'ifOperStatus','Down','28','.1.3.6.1.2.1.2.2.1.8.28'); +INSERT INTO `host_snmp_cache` VALUES (2,1,'ifOperStatus','Up','27','.1.3.6.1.2.1.2.2.1.8.27'); +INSERT INTO `host_snmp_cache` VALUES (2,1,'ifOperStatus','Down','26','.1.3.6.1.2.1.2.2.1.8.26'); +INSERT INTO `host_snmp_cache` VALUES (2,1,'ifOperStatus','Up','25','.1.3.6.1.2.1.2.2.1.8.25'); +INSERT INTO `host_snmp_cache` VALUES (2,1,'ifOperStatus','Up','24','.1.3.6.1.2.1.2.2.1.8.24'); +INSERT INTO `host_snmp_cache` VALUES (2,1,'ifOperStatus','Down','23','.1.3.6.1.2.1.2.2.1.8.23'); +INSERT INTO `host_snmp_cache` VALUES (2,1,'ifOperStatus','Down','22','.1.3.6.1.2.1.2.2.1.8.22'); +INSERT INTO `host_snmp_cache` VALUES (2,1,'ifOperStatus','Down','21','.1.3.6.1.2.1.2.2.1.8.21'); +INSERT INTO `host_snmp_cache` VALUES (2,1,'ifOperStatus','Down','20','.1.3.6.1.2.1.2.2.1.8.20'); +INSERT INTO `host_snmp_cache` VALUES (2,1,'ifOperStatus','Down','19','.1.3.6.1.2.1.2.2.1.8.19'); +INSERT INTO `host_snmp_cache` VALUES (2,1,'ifOperStatus','Down','18','.1.3.6.1.2.1.2.2.1.8.18'); +INSERT INTO `host_snmp_cache` VALUES (2,1,'ifOperStatus','Down','17','.1.3.6.1.2.1.2.2.1.8.17'); +INSERT INTO `host_snmp_cache` VALUES (2,1,'ifOperStatus','Down','16','.1.3.6.1.2.1.2.2.1.8.16'); +INSERT INTO `host_snmp_cache` VALUES (2,1,'ifOperStatus','Down','15','.1.3.6.1.2.1.2.2.1.8.15'); +INSERT INTO `host_snmp_cache` VALUES (2,1,'ifOperStatus','Down','14','.1.3.6.1.2.1.2.2.1.8.14'); +INSERT INTO `host_snmp_cache` VALUES (2,1,'ifOperStatus','Down','13','.1.3.6.1.2.1.2.2.1.8.13'); +INSERT INTO `host_snmp_cache` VALUES (2,1,'ifOperStatus','Down','12','.1.3.6.1.2.1.2.2.1.8.12'); +INSERT INTO `host_snmp_cache` VALUES (2,1,'ifOperStatus','Down','11','.1.3.6.1.2.1.2.2.1.8.11'); +INSERT INTO `host_snmp_cache` VALUES (2,1,'ifOperStatus','Down','10','.1.3.6.1.2.1.2.2.1.8.10'); +INSERT INTO `host_snmp_cache` VALUES (2,1,'ifOperStatus','Down','9','.1.3.6.1.2.1.2.2.1.8.9'); +INSERT INTO `host_snmp_cache` VALUES (2,1,'ifOperStatus','Down','8','.1.3.6.1.2.1.2.2.1.8.8'); +INSERT INTO `host_snmp_cache` VALUES (2,1,'ifOperStatus','Up','7','.1.3.6.1.2.1.2.2.1.8.7'); +INSERT INTO `host_snmp_cache` VALUES (2,1,'ifOperStatus','Down','6','.1.3.6.1.2.1.2.2.1.8.6'); +INSERT INTO `host_snmp_cache` VALUES (2,1,'ifOperStatus','Down','5','.1.3.6.1.2.1.2.2.1.8.5'); +INSERT INTO `host_snmp_cache` VALUES (2,1,'ifOperStatus','Down','4','.1.3.6.1.2.1.2.2.1.8.4'); +INSERT INTO `host_snmp_cache` VALUES (2,1,'ifOperStatus','Down','3','.1.3.6.1.2.1.2.2.1.8.3'); +INSERT INTO `host_snmp_cache` VALUES (2,1,'ifOperStatus','Down','2','.1.3.6.1.2.1.2.2.1.8.2'); +INSERT INTO `host_snmp_cache` VALUES (2,1,'ifOperStatus','Down','1','.1.3.6.1.2.1.2.2.1.8.1'); +INSERT INTO `host_snmp_cache` VALUES (2,1,'ifIndex','29','29','.1.3.6.1.2.1.2.2.1.1.29'); +INSERT INTO `host_snmp_cache` VALUES (2,1,'ifIndex','28','28','.1.3.6.1.2.1.2.2.1.1.28'); +INSERT INTO `host_snmp_cache` VALUES (2,1,'ifIndex','27','27','.1.3.6.1.2.1.2.2.1.1.27'); +INSERT INTO `host_snmp_cache` VALUES (2,1,'ifIndex','26','26','.1.3.6.1.2.1.2.2.1.1.26'); +INSERT INTO `host_snmp_cache` VALUES (2,1,'ifIndex','25','25','.1.3.6.1.2.1.2.2.1.1.25'); +INSERT INTO `host_snmp_cache` VALUES (2,1,'ifIndex','24','24','.1.3.6.1.2.1.2.2.1.1.24'); +INSERT INTO `host_snmp_cache` VALUES (2,1,'ifIndex','23','23','.1.3.6.1.2.1.2.2.1.1.23'); +INSERT INTO `host_snmp_cache` VALUES (2,1,'ifIndex','22','22','.1.3.6.1.2.1.2.2.1.1.22'); +INSERT INTO `host_snmp_cache` VALUES (2,1,'ifIndex','21','21','.1.3.6.1.2.1.2.2.1.1.21'); +INSERT INTO `host_snmp_cache` VALUES (2,1,'ifIndex','20','20','.1.3.6.1.2.1.2.2.1.1.20'); +INSERT INTO `host_snmp_cache` VALUES (2,1,'ifIndex','19','19','.1.3.6.1.2.1.2.2.1.1.19'); +INSERT INTO `host_snmp_cache` VALUES (2,1,'ifIndex','18','18','.1.3.6.1.2.1.2.2.1.1.18'); +INSERT INTO `host_snmp_cache` VALUES (2,1,'ifIndex','17','17','.1.3.6.1.2.1.2.2.1.1.17'); +INSERT INTO `host_snmp_cache` VALUES (2,1,'ifIndex','16','16','.1.3.6.1.2.1.2.2.1.1.16'); +INSERT INTO `host_snmp_cache` VALUES (2,1,'ifIndex','15','15','.1.3.6.1.2.1.2.2.1.1.15'); +INSERT INTO `host_snmp_cache` VALUES (2,1,'ifIndex','14','14','.1.3.6.1.2.1.2.2.1.1.14'); +INSERT INTO `host_snmp_cache` VALUES (2,1,'ifIndex','13','13','.1.3.6.1.2.1.2.2.1.1.13'); +INSERT INTO `host_snmp_cache` VALUES (2,1,'ifIndex','12','12','.1.3.6.1.2.1.2.2.1.1.12'); +INSERT INTO `host_snmp_cache` VALUES (2,1,'ifIndex','11','11','.1.3.6.1.2.1.2.2.1.1.11'); +INSERT INTO `host_snmp_cache` VALUES (2,1,'ifIndex','10','10','.1.3.6.1.2.1.2.2.1.1.10'); +INSERT INTO `host_snmp_cache` VALUES (2,1,'ifIndex','9','9','.1.3.6.1.2.1.2.2.1.1.9'); +INSERT INTO `host_snmp_cache` VALUES (2,1,'ifIndex','8','8','.1.3.6.1.2.1.2.2.1.1.8'); +INSERT INTO `host_snmp_cache` VALUES (2,1,'ifIndex','7','7','.1.3.6.1.2.1.2.2.1.1.7'); +INSERT INTO `host_snmp_cache` VALUES (2,1,'ifIndex','6','6','.1.3.6.1.2.1.2.2.1.1.6'); +INSERT INTO `host_snmp_cache` VALUES (2,1,'ifIndex','5','5','.1.3.6.1.2.1.2.2.1.1.5'); +INSERT INTO `host_snmp_cache` VALUES (2,1,'ifIndex','4','4','.1.3.6.1.2.1.2.2.1.1.4'); +INSERT INTO `host_snmp_cache` VALUES (2,1,'ifIndex','3','3','.1.3.6.1.2.1.2.2.1.1.3'); +INSERT INTO `host_snmp_cache` VALUES (2,1,'ifIndex','2','2','.1.3.6.1.2.1.2.2.1.1.2'); +INSERT INTO `host_snmp_cache` VALUES (2,1,'ifIndex','1','1','.1.3.6.1.2.1.2.2.1.1.1'); +INSERT INTO `host_snmp_cache` VALUES (2,1,'ifSpeed','10000000','16','.1.3.6.1.2.1.2.2.1.5.16'); +INSERT INTO `host_snmp_cache` VALUES (2,1,'ifSpeed','10000000','17','.1.3.6.1.2.1.2.2.1.5.17'); +INSERT INTO `host_snmp_cache` VALUES (2,1,'ifSpeed','10000000','18','.1.3.6.1.2.1.2.2.1.5.18'); +INSERT INTO `host_snmp_cache` VALUES (2,1,'ifSpeed','10000000','19','.1.3.6.1.2.1.2.2.1.5.19'); +INSERT INTO `host_snmp_cache` VALUES (2,1,'ifSpeed','10000000','20','.1.3.6.1.2.1.2.2.1.5.20'); +INSERT INTO `host_snmp_cache` VALUES (2,1,'ifSpeed','10000000','21','.1.3.6.1.2.1.2.2.1.5.21'); +INSERT INTO `host_snmp_cache` VALUES (2,1,'ifSpeed','10000000','22','.1.3.6.1.2.1.2.2.1.5.22'); +INSERT INTO `host_snmp_cache` VALUES (2,1,'ifSpeed','10000000','23','.1.3.6.1.2.1.2.2.1.5.23'); +INSERT INTO `host_snmp_cache` VALUES (2,1,'ifSpeed','100000000','24','.1.3.6.1.2.1.2.2.1.5.24'); +INSERT INTO `host_snmp_cache` VALUES (2,1,'ifSpeed','100000000','25','.1.3.6.1.2.1.2.2.1.5.25'); +INSERT INTO `host_snmp_cache` VALUES (2,1,'ifSpeed','10000000','26','.1.3.6.1.2.1.2.2.1.5.26'); +INSERT INTO `host_snmp_cache` VALUES (2,1,'ifSpeed','4294967295','27','.1.3.6.1.2.1.2.2.1.5.27'); +INSERT INTO `host_snmp_cache` VALUES (2,1,'ifSpeed','1000000000','28','.1.3.6.1.2.1.2.2.1.5.28'); +INSERT INTO `host_snmp_cache` VALUES (2,1,'ifSpeed','1000000000','29','.1.3.6.1.2.1.2.2.1.5.29'); +INSERT INTO `host_snmp_cache` VALUES (2,1,'ifHwAddr','00:00:0C:30:8F:4D:41','1','.1.3.6.1.2.1.2.2.1.6.1'); +INSERT INTO `host_snmp_cache` VALUES (2,1,'ifHwAddr','00:00:0C:30:8F:4D:42','2','.1.3.6.1.2.1.2.2.1.6.2'); +INSERT INTO `host_snmp_cache` VALUES (2,1,'ifHwAddr','00:00:0C:30:8F:4D:43','3','.1.3.6.1.2.1.2.2.1.6.3'); +INSERT INTO `host_snmp_cache` VALUES (2,1,'ifHwAddr','00:00:0C:30:8F:4D:44','4','.1.3.6.1.2.1.2.2.1.6.4'); +INSERT INTO `host_snmp_cache` VALUES (2,1,'ifHwAddr','00:00:0C:30:8F:4D:45','5','.1.3.6.1.2.1.2.2.1.6.5'); +INSERT INTO `host_snmp_cache` VALUES (2,1,'ifHwAddr','00:00:0C:30:8F:4D:46','6','.1.3.6.1.2.1.2.2.1.6.6'); +INSERT INTO `host_snmp_cache` VALUES (2,1,'ifHwAddr','00:00:0C:30:8F:4D:47','7','.1.3.6.1.2.1.2.2.1.6.7'); +INSERT INTO `host_snmp_cache` VALUES (2,1,'ifHwAddr','00:00:0C:30:8F:4D:48','8','.1.3.6.1.2.1.2.2.1.6.8'); +INSERT INTO `host_snmp_cache` VALUES (2,1,'ifHwAddr','00:00:0C:30:8F:4D:49','9','.1.3.6.1.2.1.2.2.1.6.9'); +INSERT INTO `host_snmp_cache` VALUES (2,1,'ifHwAddr','00:00:0C:30:8F:4D:4A','10','.1.3.6.1.2.1.2.2.1.6.10'); +INSERT INTO `host_snmp_cache` VALUES (2,1,'ifHwAddr','00:00:0C:30:8F:4D:4B','11','.1.3.6.1.2.1.2.2.1.6.11'); +INSERT INTO `host_snmp_cache` VALUES (2,1,'ifHwAddr','00:00:0C:30:8F:4D:4C','12','.1.3.6.1.2.1.2.2.1.6.12'); +INSERT INTO `host_snmp_cache` VALUES (2,1,'ifHwAddr','00:00:0C:30:8F:4D:4D','13','.1.3.6.1.2.1.2.2.1.6.13'); +INSERT INTO `host_snmp_cache` VALUES (2,1,'ifHwAddr','00:00:0C:30:8F:4D:4E','14','.1.3.6.1.2.1.2.2.1.6.14'); +INSERT INTO `host_snmp_cache` VALUES (2,1,'ifHwAddr','00:00:0C:30:8F:4D:4F','15','.1.3.6.1.2.1.2.2.1.6.15'); +INSERT INTO `host_snmp_cache` VALUES (2,1,'ifHwAddr','00:00:0C:30:8F:4D:50','16','.1.3.6.1.2.1.2.2.1.6.16'); +INSERT INTO `host_snmp_cache` VALUES (2,1,'ifHwAddr','00:00:0C:30:8F:4D:51','17','.1.3.6.1.2.1.2.2.1.6.17'); +INSERT INTO `host_snmp_cache` VALUES (2,1,'ifHwAddr','00:00:0C:30:8F:4D:52','18','.1.3.6.1.2.1.2.2.1.6.18'); +INSERT INTO `host_snmp_cache` VALUES (2,1,'ifHwAddr','00:00:0C:30:8F:4D:53','19','.1.3.6.1.2.1.2.2.1.6.19'); +INSERT INTO `host_snmp_cache` VALUES (2,1,'ifHwAddr','00:00:0C:30:8F:4D:54','20','.1.3.6.1.2.1.2.2.1.6.20'); +INSERT INTO `host_snmp_cache` VALUES (2,1,'ifHwAddr','00:00:0C:30:8F:4D:55','21','.1.3.6.1.2.1.2.2.1.6.21'); +INSERT INTO `host_snmp_cache` VALUES (2,1,'ifHwAddr','00:00:0C:30:8F:4D:56','22','.1.3.6.1.2.1.2.2.1.6.22'); +INSERT INTO `host_snmp_cache` VALUES (2,1,'ifHwAddr','00:00:0C:30:8F:4D:57','23','.1.3.6.1.2.1.2.2.1.6.23'); +INSERT INTO `host_snmp_cache` VALUES (2,1,'ifHwAddr','00:00:0C:30:8F:4D:58','24','.1.3.6.1.2.1.2.2.1.6.24'); +INSERT INTO `host_snmp_cache` VALUES (2,1,'ifHwAddr','00:00:0C:30:8F:4D:59','25','.1.3.6.1.2.1.2.2.1.6.25'); +INSERT INTO `host_snmp_cache` VALUES (2,1,'ifHwAddr','00:00:0C:30:8F:4D:5A','26','.1.3.6.1.2.1.2.2.1.6.26'); +INSERT INTO `host_snmp_cache` VALUES (2,1,'ifHwAddr','','27','.1.3.6.1.2.1.2.2.1.6.27'); +INSERT INTO `host_snmp_cache` VALUES (2,1,'ifHwAddr','00:00:0C:30:8F:4D:40','28','.1.3.6.1.2.1.2.2.1.6.28'); +INSERT INTO `host_snmp_cache` VALUES (2,1,'ifHwAddr','00:00:0C:30:8F:4D:40','29','.1.3.6.1.2.1.2.2.1.6.29'); +INSERT INTO `host_snmp_cache` VALUES (2,1,'ifIP','172.16.42.100','29','.1.3.6.1.2.1.4.20.1.2.172.16.42.100'); +INSERT INTO `host_snmp_cache` VALUES (3,1,'ifName','Vl42','29','.1.3.6.1.2.1.31.1.1.1.1.29'); +INSERT INTO `host_snmp_cache` VALUES (3,1,'ifName','Vl1','28','.1.3.6.1.2.1.31.1.1.1.1.28'); +INSERT INTO `host_snmp_cache` VALUES (3,1,'ifName','Nu0','27','.1.3.6.1.2.1.31.1.1.1.1.27'); +INSERT INTO `host_snmp_cache` VALUES (3,1,'ifName','Gi0/2','26','.1.3.6.1.2.1.31.1.1.1.1.26'); +INSERT INTO `host_snmp_cache` VALUES (3,1,'ifName','Gi0/1','25','.1.3.6.1.2.1.31.1.1.1.1.25'); +INSERT INTO `host_snmp_cache` VALUES (3,1,'ifName','Fa0/24','24','.1.3.6.1.2.1.31.1.1.1.1.24'); +INSERT INTO `host_snmp_cache` VALUES (3,1,'ifName','Fa0/23','23','.1.3.6.1.2.1.31.1.1.1.1.23'); +INSERT INTO `host_snmp_cache` VALUES (3,1,'ifName','Fa0/22','22','.1.3.6.1.2.1.31.1.1.1.1.22'); +INSERT INTO `host_snmp_cache` VALUES (3,1,'ifName','Fa0/21','21','.1.3.6.1.2.1.31.1.1.1.1.21'); +INSERT INTO `host_snmp_cache` VALUES (3,1,'ifName','Fa0/20','20','.1.3.6.1.2.1.31.1.1.1.1.20'); +INSERT INTO `host_snmp_cache` VALUES (3,1,'ifName','Fa0/19','19','.1.3.6.1.2.1.31.1.1.1.1.19'); +INSERT INTO `host_snmp_cache` VALUES (3,1,'ifName','Fa0/18','18','.1.3.6.1.2.1.31.1.1.1.1.18'); +INSERT INTO `host_snmp_cache` VALUES (3,1,'ifName','Fa0/17','17','.1.3.6.1.2.1.31.1.1.1.1.17'); +INSERT INTO `host_snmp_cache` VALUES (3,1,'ifName','Fa0/16','16','.1.3.6.1.2.1.31.1.1.1.1.16'); +INSERT INTO `host_snmp_cache` VALUES (3,1,'ifName','Fa0/15','15','.1.3.6.1.2.1.31.1.1.1.1.15'); +INSERT INTO `host_snmp_cache` VALUES (3,1,'ifDescr','FastEthernet0/21','21','.1.3.6.1.2.1.2.2.1.2.21'); +INSERT INTO `host_snmp_cache` VALUES (3,1,'ifDescr','FastEthernet0/20','20','.1.3.6.1.2.1.2.2.1.2.20'); +INSERT INTO `host_snmp_cache` VALUES (3,1,'ifDescr','FastEthernet0/19','19','.1.3.6.1.2.1.2.2.1.2.19'); +INSERT INTO `host_snmp_cache` VALUES (3,1,'ifDescr','FastEthernet0/18','18','.1.3.6.1.2.1.2.2.1.2.18'); +INSERT INTO `host_snmp_cache` VALUES (3,1,'ifDescr','FastEthernet0/17','17','.1.3.6.1.2.1.2.2.1.2.17'); +INSERT INTO `host_snmp_cache` VALUES (3,1,'ifDescr','FastEthernet0/16','16','.1.3.6.1.2.1.2.2.1.2.16'); +INSERT INTO `host_snmp_cache` VALUES (3,1,'ifDescr','FastEthernet0/15','15','.1.3.6.1.2.1.2.2.1.2.15'); +INSERT INTO `host_snmp_cache` VALUES (3,1,'ifDescr','FastEthernet0/14','14','.1.3.6.1.2.1.2.2.1.2.14'); +INSERT INTO `host_snmp_cache` VALUES (3,1,'ifDescr','FastEthernet0/13','13','.1.3.6.1.2.1.2.2.1.2.13'); +INSERT INTO `host_snmp_cache` VALUES (3,1,'ifDescr','FastEthernet0/12','12','.1.3.6.1.2.1.2.2.1.2.12'); +INSERT INTO `host_snmp_cache` VALUES (3,1,'ifDescr','FastEthernet0/11','11','.1.3.6.1.2.1.2.2.1.2.11'); +INSERT INTO `host_snmp_cache` VALUES (3,1,'ifDescr','FastEthernet0/10','10','.1.3.6.1.2.1.2.2.1.2.10'); +INSERT INTO `host_snmp_cache` VALUES (3,1,'ifDescr','FastEthernet0/9','9','.1.3.6.1.2.1.2.2.1.2.9'); +INSERT INTO `host_snmp_cache` VALUES (3,1,'ifDescr','FastEthernet0/8','8','.1.3.6.1.2.1.2.2.1.2.8'); +INSERT INTO `host_snmp_cache` VALUES (3,1,'ifDescr','FastEthernet0/6','6','.1.3.6.1.2.1.2.2.1.2.6'); +INSERT INTO `host_snmp_cache` VALUES (3,1,'ifDescr','FastEthernet0/7','7','.1.3.6.1.2.1.2.2.1.2.7'); +INSERT INTO `host_snmp_cache` VALUES (3,1,'ifType','ethernetCsmacd(6)','11','.1.3.6.1.2.1.2.2.1.3.11'); +INSERT INTO `host_snmp_cache` VALUES (3,1,'ifType','ethernetCsmacd(6)','10','.1.3.6.1.2.1.2.2.1.3.10'); +INSERT INTO `host_snmp_cache` VALUES (3,1,'ifType','ethernetCsmacd(6)','9','.1.3.6.1.2.1.2.2.1.3.9'); +INSERT INTO `host_snmp_cache` VALUES (3,1,'ifType','ethernetCsmacd(6)','8','.1.3.6.1.2.1.2.2.1.3.8'); +INSERT INTO `host_snmp_cache` VALUES (3,1,'ifType','ethernetCsmacd(6)','7','.1.3.6.1.2.1.2.2.1.3.7'); +INSERT INTO `host_snmp_cache` VALUES (3,1,'ifType','ethernetCsmacd(6)','6','.1.3.6.1.2.1.2.2.1.3.6'); +INSERT INTO `host_snmp_cache` VALUES (3,1,'ifType','ethernetCsmacd(6)','5','.1.3.6.1.2.1.2.2.1.3.5'); +INSERT INTO `host_snmp_cache` VALUES (3,1,'ifType','ethernetCsmacd(6)','4','.1.3.6.1.2.1.2.2.1.3.4'); +INSERT INTO `host_snmp_cache` VALUES (3,1,'ifType','ethernetCsmacd(6)','3','.1.3.6.1.2.1.2.2.1.3.3'); +INSERT INTO `host_snmp_cache` VALUES (3,1,'ifType','ethernetCsmacd(6)','2','.1.3.6.1.2.1.2.2.1.3.2'); +INSERT INTO `host_snmp_cache` VALUES (3,1,'ifType','ethernetCsmacd(6)','1','.1.3.6.1.2.1.2.2.1.3.1'); +INSERT INTO `host_snmp_cache` VALUES (3,1,'ifAlias','','29','.1.3.6.1.2.1.31.1.1.1.18.29'); +INSERT INTO `host_snmp_cache` VALUES (3,1,'ifAlias','','28','.1.3.6.1.2.1.31.1.1.1.18.28'); +INSERT INTO `host_snmp_cache` VALUES (3,1,'ifAlias','','27','.1.3.6.1.2.1.31.1.1.1.18.27'); +INSERT INTO `host_snmp_cache` VALUES (3,1,'ifAlias','','26','.1.3.6.1.2.1.31.1.1.1.18.26'); +INSERT INTO `host_snmp_cache` VALUES (3,1,'ifAlias','','25','.1.3.6.1.2.1.31.1.1.1.18.25'); +INSERT INTO `host_snmp_cache` VALUES (3,1,'ifAlias','','24','.1.3.6.1.2.1.31.1.1.1.18.24'); +INSERT INTO `host_snmp_cache` VALUES (3,1,'ifAlias','','23','.1.3.6.1.2.1.31.1.1.1.18.23'); +INSERT INTO `host_snmp_cache` VALUES (3,1,'ifAlias','','22','.1.3.6.1.2.1.31.1.1.1.18.22'); +INSERT INTO `host_snmp_cache` VALUES (3,1,'ifAlias','','21','.1.3.6.1.2.1.31.1.1.1.18.21'); +INSERT INTO `host_snmp_cache` VALUES (3,1,'ifAlias','','20','.1.3.6.1.2.1.31.1.1.1.18.20'); +INSERT INTO `host_snmp_cache` VALUES (3,1,'ifAlias','','19','.1.3.6.1.2.1.31.1.1.1.18.19'); +INSERT INTO `host_snmp_cache` VALUES (3,1,'ifAlias','','18','.1.3.6.1.2.1.31.1.1.1.18.18'); +INSERT INTO `host_snmp_cache` VALUES (3,1,'ifAlias','','17','.1.3.6.1.2.1.31.1.1.1.18.17'); +INSERT INTO `host_snmp_cache` VALUES (3,1,'ifAlias','','16','.1.3.6.1.2.1.31.1.1.1.18.16'); +INSERT INTO `host_snmp_cache` VALUES (3,1,'ifName','Fa0/13','13','.1.3.6.1.2.1.31.1.1.1.1.13'); +INSERT INTO `host_snmp_cache` VALUES (3,1,'ifName','Fa0/12','12','.1.3.6.1.2.1.31.1.1.1.1.12'); +INSERT INTO `host_snmp_cache` VALUES (3,1,'ifName','Fa0/11','11','.1.3.6.1.2.1.31.1.1.1.1.11'); +INSERT INTO `host_snmp_cache` VALUES (3,1,'ifName','Fa0/10','10','.1.3.6.1.2.1.31.1.1.1.1.10'); +INSERT INTO `host_snmp_cache` VALUES (3,1,'ifName','Fa0/9','9','.1.3.6.1.2.1.31.1.1.1.1.9'); +INSERT INTO `host_snmp_cache` VALUES (3,1,'ifName','Fa0/8','8','.1.3.6.1.2.1.31.1.1.1.1.8'); +INSERT INTO `host_snmp_cache` VALUES (3,1,'ifName','Fa0/7','7','.1.3.6.1.2.1.31.1.1.1.1.7'); +INSERT INTO `host_snmp_cache` VALUES (3,1,'ifName','Fa0/6','6','.1.3.6.1.2.1.31.1.1.1.1.6'); +INSERT INTO `host_snmp_cache` VALUES (3,1,'ifName','Fa0/5','5','.1.3.6.1.2.1.31.1.1.1.1.5'); +INSERT INTO `host_snmp_cache` VALUES (3,1,'ifName','Fa0/4','4','.1.3.6.1.2.1.31.1.1.1.1.4'); +INSERT INTO `host_snmp_cache` VALUES (3,1,'ifName','Fa0/3','3','.1.3.6.1.2.1.31.1.1.1.1.3'); +INSERT INTO `host_snmp_cache` VALUES (3,1,'ifName','Fa0/2','2','.1.3.6.1.2.1.31.1.1.1.1.2'); +INSERT INTO `host_snmp_cache` VALUES (3,1,'ifName','Fa0/1','1','.1.3.6.1.2.1.31.1.1.1.1.1'); +INSERT INTO `host_snmp_cache` VALUES (3,1,'ifDescr','Vlan42','29','.1.3.6.1.2.1.2.2.1.2.29'); +INSERT INTO `host_snmp_cache` VALUES (3,1,'ifDescr','Vlan1','28','.1.3.6.1.2.1.2.2.1.2.28'); +INSERT INTO `host_snmp_cache` VALUES (3,1,'ifDescr','Null0','27','.1.3.6.1.2.1.2.2.1.2.27'); +INSERT INTO `host_snmp_cache` VALUES (3,1,'ifDescr','GigabitEthernet0/2','26','.1.3.6.1.2.1.2.2.1.2.26'); +INSERT INTO `host_snmp_cache` VALUES (3,1,'ifDescr','GigabitEthernet0/1','25','.1.3.6.1.2.1.2.2.1.2.25'); +INSERT INTO `host_snmp_cache` VALUES (3,1,'ifDescr','FastEthernet0/24','24','.1.3.6.1.2.1.2.2.1.2.24'); +INSERT INTO `host_snmp_cache` VALUES (3,1,'ifDescr','FastEthernet0/23','23','.1.3.6.1.2.1.2.2.1.2.23'); +INSERT INTO `host_snmp_cache` VALUES (3,1,'ifDescr','FastEthernet0/22','22','.1.3.6.1.2.1.2.2.1.2.22'); +INSERT INTO `host_snmp_cache` VALUES (3,1,'ifType','ethernetCsmacd(6)','25','.1.3.6.1.2.1.2.2.1.3.25'); +INSERT INTO `host_snmp_cache` VALUES (3,1,'ifType','ethernetCsmacd(6)','24','.1.3.6.1.2.1.2.2.1.3.24'); +INSERT INTO `host_snmp_cache` VALUES (3,1,'ifType','ethernetCsmacd(6)','23','.1.3.6.1.2.1.2.2.1.3.23'); +INSERT INTO `host_snmp_cache` VALUES (3,1,'ifType','ethernetCsmacd(6)','22','.1.3.6.1.2.1.2.2.1.3.22'); +INSERT INTO `host_snmp_cache` VALUES (3,1,'ifType','ethernetCsmacd(6)','21','.1.3.6.1.2.1.2.2.1.3.21'); +INSERT INTO `host_snmp_cache` VALUES (3,1,'ifType','ethernetCsmacd(6)','20','.1.3.6.1.2.1.2.2.1.3.20'); +INSERT INTO `host_snmp_cache` VALUES (3,1,'ifType','ethernetCsmacd(6)','19','.1.3.6.1.2.1.2.2.1.3.19'); +INSERT INTO `host_snmp_cache` VALUES (3,1,'ifType','ethernetCsmacd(6)','18','.1.3.6.1.2.1.2.2.1.3.18'); +INSERT INTO `host_snmp_cache` VALUES (3,1,'ifType','ethernetCsmacd(6)','17','.1.3.6.1.2.1.2.2.1.3.17'); +INSERT INTO `host_snmp_cache` VALUES (3,1,'ifType','ethernetCsmacd(6)','16','.1.3.6.1.2.1.2.2.1.3.16'); +INSERT INTO `host_snmp_cache` VALUES (3,1,'ifType','ethernetCsmacd(6)','15','.1.3.6.1.2.1.2.2.1.3.15'); +INSERT INTO `host_snmp_cache` VALUES (3,1,'ifType','ethernetCsmacd(6)','14','.1.3.6.1.2.1.2.2.1.3.14'); +INSERT INTO `host_snmp_cache` VALUES (3,1,'ifType','ethernetCsmacd(6)','13','.1.3.6.1.2.1.2.2.1.3.13'); +INSERT INTO `host_snmp_cache` VALUES (3,1,'ifType','ethernetCsmacd(6)','12','.1.3.6.1.2.1.2.2.1.3.12'); +INSERT INTO `host_snmp_cache` VALUES (3,1,'ifOperStatus','Down','8','.1.3.6.1.2.1.2.2.1.8.8'); +INSERT INTO `host_snmp_cache` VALUES (3,1,'ifOperStatus','Down','7','.1.3.6.1.2.1.2.2.1.8.7'); +INSERT INTO `host_snmp_cache` VALUES (3,1,'ifOperStatus','Down','6','.1.3.6.1.2.1.2.2.1.8.6'); +INSERT INTO `host_snmp_cache` VALUES (3,1,'ifOperStatus','Down','5','.1.3.6.1.2.1.2.2.1.8.5'); +INSERT INTO `host_snmp_cache` VALUES (3,1,'ifOperStatus','Down','4','.1.3.6.1.2.1.2.2.1.8.4'); +INSERT INTO `host_snmp_cache` VALUES (3,1,'ifOperStatus','Down','3','.1.3.6.1.2.1.2.2.1.8.3'); +INSERT INTO `host_snmp_cache` VALUES (3,1,'ifOperStatus','Down','2','.1.3.6.1.2.1.2.2.1.8.2'); +INSERT INTO `host_snmp_cache` VALUES (3,1,'ifOperStatus','Up','1','.1.3.6.1.2.1.2.2.1.8.1'); +INSERT INTO `host_snmp_cache` VALUES (3,1,'ifIndex','29','29','.1.3.6.1.2.1.2.2.1.1.29'); +INSERT INTO `host_snmp_cache` VALUES (3,1,'ifIndex','28','28','.1.3.6.1.2.1.2.2.1.1.28'); +INSERT INTO `host_snmp_cache` VALUES (3,1,'ifIndex','27','27','.1.3.6.1.2.1.2.2.1.1.27'); +INSERT INTO `host_snmp_cache` VALUES (3,1,'ifIndex','26','26','.1.3.6.1.2.1.2.2.1.1.26'); +INSERT INTO `host_snmp_cache` VALUES (3,1,'ifIndex','25','25','.1.3.6.1.2.1.2.2.1.1.25'); +INSERT INTO `host_snmp_cache` VALUES (3,1,'ifIndex','24','24','.1.3.6.1.2.1.2.2.1.1.24'); +INSERT INTO `host_snmp_cache` VALUES (3,1,'ifIndex','23','23','.1.3.6.1.2.1.2.2.1.1.23'); +INSERT INTO `host_snmp_cache` VALUES (3,1,'ifIndex','22','22','.1.3.6.1.2.1.2.2.1.1.22'); +INSERT INTO `host_snmp_cache` VALUES (3,1,'ifIndex','21','21','.1.3.6.1.2.1.2.2.1.1.21'); +INSERT INTO `host_snmp_cache` VALUES (3,1,'ifIndex','20','20','.1.3.6.1.2.1.2.2.1.1.20'); +INSERT INTO `host_snmp_cache` VALUES (3,1,'ifIndex','19','19','.1.3.6.1.2.1.2.2.1.1.19'); +INSERT INTO `host_snmp_cache` VALUES (3,1,'ifIndex','18','18','.1.3.6.1.2.1.2.2.1.1.18'); +INSERT INTO `host_snmp_cache` VALUES (3,1,'ifIndex','17','17','.1.3.6.1.2.1.2.2.1.1.17'); +INSERT INTO `host_snmp_cache` VALUES (3,1,'ifIndex','16','16','.1.3.6.1.2.1.2.2.1.1.16'); +INSERT INTO `host_snmp_cache` VALUES (3,1,'ifIndex','15','15','.1.3.6.1.2.1.2.2.1.1.15'); +INSERT INTO `host_snmp_cache` VALUES (3,1,'ifIndex','14','14','.1.3.6.1.2.1.2.2.1.1.14'); +INSERT INTO `host_snmp_cache` VALUES (3,1,'ifIndex','13','13','.1.3.6.1.2.1.2.2.1.1.13'); +INSERT INTO `host_snmp_cache` VALUES (3,1,'ifIndex','12','12','.1.3.6.1.2.1.2.2.1.1.12'); +INSERT INTO `host_snmp_cache` VALUES (3,1,'ifIndex','11','11','.1.3.6.1.2.1.2.2.1.1.11'); +INSERT INTO `host_snmp_cache` VALUES (3,1,'ifIndex','10','10','.1.3.6.1.2.1.2.2.1.1.10'); +INSERT INTO `host_snmp_cache` VALUES (3,1,'ifIndex','1','1','.1.3.6.1.2.1.2.2.1.1.1'); +INSERT INTO `host_snmp_cache` VALUES (3,1,'ifIndex','2','2','.1.3.6.1.2.1.2.2.1.1.2'); +INSERT INTO `host_snmp_cache` VALUES (3,1,'ifIndex','3','3','.1.3.6.1.2.1.2.2.1.1.3'); +INSERT INTO `host_snmp_cache` VALUES (3,1,'ifIndex','4','4','.1.3.6.1.2.1.2.2.1.1.4'); +INSERT INTO `host_snmp_cache` VALUES (3,1,'ifIndex','5','5','.1.3.6.1.2.1.2.2.1.1.5'); +INSERT INTO `host_snmp_cache` VALUES (3,1,'ifIndex','6','6','.1.3.6.1.2.1.2.2.1.1.6'); +INSERT INTO `host_snmp_cache` VALUES (3,1,'ifIndex','7','7','.1.3.6.1.2.1.2.2.1.1.7'); +INSERT INTO `host_snmp_cache` VALUES (3,1,'ifIndex','8','8','.1.3.6.1.2.1.2.2.1.1.8'); +INSERT INTO `host_snmp_cache` VALUES (3,1,'ifIndex','9','9','.1.3.6.1.2.1.2.2.1.1.9'); +INSERT INTO `host_snmp_cache` VALUES (3,1,'ifDescr','FastEthernet0/5','5','.1.3.6.1.2.1.2.2.1.2.5'); +INSERT INTO `host_snmp_cache` VALUES (3,1,'ifDescr','FastEthernet0/4','4','.1.3.6.1.2.1.2.2.1.2.4'); +INSERT INTO `host_snmp_cache` VALUES (3,1,'ifDescr','FastEthernet0/3','3','.1.3.6.1.2.1.2.2.1.2.3'); +INSERT INTO `host_snmp_cache` VALUES (3,1,'ifDescr','FastEthernet0/2','2','.1.3.6.1.2.1.2.2.1.2.2'); +INSERT INTO `host_snmp_cache` VALUES (3,1,'ifDescr','FastEthernet0/1','1','.1.3.6.1.2.1.2.2.1.2.1'); +INSERT INTO `host_snmp_cache` VALUES (3,1,'ifOperStatus','Up','29','.1.3.6.1.2.1.2.2.1.8.29'); +INSERT INTO `host_snmp_cache` VALUES (3,1,'ifOperStatus','Down','28','.1.3.6.1.2.1.2.2.1.8.28'); +INSERT INTO `host_snmp_cache` VALUES (3,1,'ifOperStatus','Up','27','.1.3.6.1.2.1.2.2.1.8.27'); +INSERT INTO `host_snmp_cache` VALUES (3,1,'ifOperStatus','Up','26','.1.3.6.1.2.1.2.2.1.8.26'); +INSERT INTO `host_snmp_cache` VALUES (3,1,'ifOperStatus','Up','25','.1.3.6.1.2.1.2.2.1.8.25'); +INSERT INTO `host_snmp_cache` VALUES (3,1,'ifOperStatus','Down','24','.1.3.6.1.2.1.2.2.1.8.24'); +INSERT INTO `host_snmp_cache` VALUES (3,1,'ifOperStatus','Up','23','.1.3.6.1.2.1.2.2.1.8.23'); +INSERT INTO `host_snmp_cache` VALUES (3,1,'ifOperStatus','Down','22','.1.3.6.1.2.1.2.2.1.8.22'); +INSERT INTO `host_snmp_cache` VALUES (3,1,'ifOperStatus','Down','21','.1.3.6.1.2.1.2.2.1.8.21'); +INSERT INTO `host_snmp_cache` VALUES (3,1,'ifOperStatus','Up','9','.1.3.6.1.2.1.2.2.1.8.9'); +INSERT INTO `host_snmp_cache` VALUES (3,1,'ifOperStatus','Up','10','.1.3.6.1.2.1.2.2.1.8.10'); +INSERT INTO `host_snmp_cache` VALUES (3,1,'ifOperStatus','Down','11','.1.3.6.1.2.1.2.2.1.8.11'); +INSERT INTO `host_snmp_cache` VALUES (3,1,'ifOperStatus','Down','12','.1.3.6.1.2.1.2.2.1.8.12'); +INSERT INTO `host_snmp_cache` VALUES (3,1,'ifOperStatus','Down','13','.1.3.6.1.2.1.2.2.1.8.13'); +INSERT INTO `host_snmp_cache` VALUES (3,1,'ifOperStatus','Down','14','.1.3.6.1.2.1.2.2.1.8.14'); +INSERT INTO `host_snmp_cache` VALUES (3,1,'ifOperStatus','Up','15','.1.3.6.1.2.1.2.2.1.8.15'); +INSERT INTO `host_snmp_cache` VALUES (3,1,'ifOperStatus','Up','16','.1.3.6.1.2.1.2.2.1.8.16'); +INSERT INTO `host_snmp_cache` VALUES (3,1,'ifOperStatus','Down','17','.1.3.6.1.2.1.2.2.1.8.17'); +INSERT INTO `host_snmp_cache` VALUES (3,1,'ifOperStatus','Down','18','.1.3.6.1.2.1.2.2.1.8.18'); +INSERT INTO `host_snmp_cache` VALUES (3,1,'ifOperStatus','Down','19','.1.3.6.1.2.1.2.2.1.8.19'); +INSERT INTO `host_snmp_cache` VALUES (3,1,'ifOperStatus','Down','20','.1.3.6.1.2.1.2.2.1.8.20'); +INSERT INTO `host_snmp_cache` VALUES (3,1,'ifAlias','','15','.1.3.6.1.2.1.31.1.1.1.18.15'); +INSERT INTO `host_snmp_cache` VALUES (3,1,'ifAlias','','14','.1.3.6.1.2.1.31.1.1.1.18.14'); +INSERT INTO `host_snmp_cache` VALUES (3,1,'ifAlias','','13','.1.3.6.1.2.1.31.1.1.1.18.13'); +INSERT INTO `host_snmp_cache` VALUES (3,1,'ifAlias','','12','.1.3.6.1.2.1.31.1.1.1.18.12'); +INSERT INTO `host_snmp_cache` VALUES (3,1,'ifAlias','','11','.1.3.6.1.2.1.31.1.1.1.18.11'); +INSERT INTO `host_snmp_cache` VALUES (3,1,'ifAlias','','10','.1.3.6.1.2.1.31.1.1.1.18.10'); +INSERT INTO `host_snmp_cache` VALUES (3,1,'ifAlias','','9','.1.3.6.1.2.1.31.1.1.1.18.9'); +INSERT INTO `host_snmp_cache` VALUES (3,1,'ifAlias','','8','.1.3.6.1.2.1.31.1.1.1.18.8'); +INSERT INTO `host_snmp_cache` VALUES (3,1,'ifAlias','','7','.1.3.6.1.2.1.31.1.1.1.18.7'); +INSERT INTO `host_snmp_cache` VALUES (3,1,'ifAlias','','6','.1.3.6.1.2.1.31.1.1.1.18.6'); +INSERT INTO `host_snmp_cache` VALUES (3,1,'ifAlias','','5','.1.3.6.1.2.1.31.1.1.1.18.5'); +INSERT INTO `host_snmp_cache` VALUES (3,1,'ifAlias','','4','.1.3.6.1.2.1.31.1.1.1.18.4'); +INSERT INTO `host_snmp_cache` VALUES (3,1,'ifAlias','','3','.1.3.6.1.2.1.31.1.1.1.18.3'); +INSERT INTO `host_snmp_cache` VALUES (3,1,'ifAlias','','2','.1.3.6.1.2.1.31.1.1.1.18.2'); +INSERT INTO `host_snmp_cache` VALUES (3,1,'ifAlias','','1','.1.3.6.1.2.1.31.1.1.1.18.1'); +INSERT INTO `host_snmp_cache` VALUES (3,1,'ifName','Fa0/14','14','.1.3.6.1.2.1.31.1.1.1.1.14'); +INSERT INTO `host_snmp_cache` VALUES (4,1,'ifHwAddr','00:00:0D:29:A9:64:98','24','.1.3.6.1.2.1.2.2.1.6.24'); +INSERT INTO `host_snmp_cache` VALUES (4,1,'ifHwAddr','00:00:0D:29:A9:64:87','7','.1.3.6.1.2.1.2.2.1.6.7'); +INSERT INTO `host_snmp_cache` VALUES (4,1,'ifHwAddr','00:00:0D:29:A9:64:88','8','.1.3.6.1.2.1.2.2.1.6.8'); +INSERT INTO `host_snmp_cache` VALUES (4,1,'ifHwAddr','00:00:0D:29:A9:64:89','9','.1.3.6.1.2.1.2.2.1.6.9'); +INSERT INTO `host_snmp_cache` VALUES (4,1,'ifHwAddr','00:00:0D:29:A9:64:8A','10','.1.3.6.1.2.1.2.2.1.6.10'); +INSERT INTO `host_snmp_cache` VALUES (4,1,'ifHwAddr','00:00:0D:29:A9:64:8B','11','.1.3.6.1.2.1.2.2.1.6.11'); +INSERT INTO `host_snmp_cache` VALUES (4,1,'ifHwAddr','00:00:0D:29:A9:64:8C','12','.1.3.6.1.2.1.2.2.1.6.12'); +INSERT INTO `host_snmp_cache` VALUES (4,1,'ifHwAddr','00:00:0D:29:A9:64:8D','13','.1.3.6.1.2.1.2.2.1.6.13'); +INSERT INTO `host_snmp_cache` VALUES (4,1,'ifHwAddr','00:00:0D:29:A9:64:8E','14','.1.3.6.1.2.1.2.2.1.6.14'); +INSERT INTO `host_snmp_cache` VALUES (4,1,'ifHwAddr','00:00:0D:29:A9:64:8F','15','.1.3.6.1.2.1.2.2.1.6.15'); +INSERT INTO `host_snmp_cache` VALUES (4,1,'ifHwAddr','00:00:0D:29:A9:64:90','16','.1.3.6.1.2.1.2.2.1.6.16'); +INSERT INTO `host_snmp_cache` VALUES (4,1,'ifHwAddr','00:00:0D:29:A9:64:91','17','.1.3.6.1.2.1.2.2.1.6.17'); +INSERT INTO `host_snmp_cache` VALUES (4,1,'ifHwAddr','00:00:0D:29:A9:64:92','18','.1.3.6.1.2.1.2.2.1.6.18'); +INSERT INTO `host_snmp_cache` VALUES (4,1,'ifHwAddr','00:00:0D:29:A9:64:93','19','.1.3.6.1.2.1.2.2.1.6.19'); +INSERT INTO `host_snmp_cache` VALUES (4,1,'ifHwAddr','00:00:0D:29:A9:64:94','20','.1.3.6.1.2.1.2.2.1.6.20'); +INSERT INTO `host_snmp_cache` VALUES (4,1,'ifHwAddr','00:00:0D:29:A9:64:95','21','.1.3.6.1.2.1.2.2.1.6.21'); +INSERT INTO `host_snmp_cache` VALUES (4,1,'ifHwAddr','00:00:0D:29:A9:64:96','22','.1.3.6.1.2.1.2.2.1.6.22'); +INSERT INTO `host_snmp_cache` VALUES (4,1,'ifHwAddr','00:00:0D:29:A9:64:97','23','.1.3.6.1.2.1.2.2.1.6.23'); +INSERT INTO `host_snmp_cache` VALUES (4,1,'ifDescr','FastEthernet0/23','23','.1.3.6.1.2.1.2.2.1.2.23'); +INSERT INTO `host_snmp_cache` VALUES (4,1,'ifDescr','FastEthernet0/22','22','.1.3.6.1.2.1.2.2.1.2.22'); +INSERT INTO `host_snmp_cache` VALUES (4,1,'ifDescr','FastEthernet0/21','21','.1.3.6.1.2.1.2.2.1.2.21'); +INSERT INTO `host_snmp_cache` VALUES (4,1,'ifDescr','FastEthernet0/20','20','.1.3.6.1.2.1.2.2.1.2.20'); +INSERT INTO `host_snmp_cache` VALUES (4,1,'ifDescr','FastEthernet0/19','19','.1.3.6.1.2.1.2.2.1.2.19'); +INSERT INTO `host_snmp_cache` VALUES (4,1,'ifDescr','FastEthernet0/18','18','.1.3.6.1.2.1.2.2.1.2.18'); +INSERT INTO `host_snmp_cache` VALUES (4,1,'ifDescr','FastEthernet0/17','17','.1.3.6.1.2.1.2.2.1.2.17'); +INSERT INTO `host_snmp_cache` VALUES (4,1,'ifDescr','FastEthernet0/16','16','.1.3.6.1.2.1.2.2.1.2.16'); +INSERT INTO `host_snmp_cache` VALUES (4,1,'ifDescr','FastEthernet0/15','15','.1.3.6.1.2.1.2.2.1.2.15'); +INSERT INTO `host_snmp_cache` VALUES (4,1,'ifDescr','FastEthernet0/14','14','.1.3.6.1.2.1.2.2.1.2.14'); +INSERT INTO `host_snmp_cache` VALUES (4,1,'ifOperStatus','Down','22','.1.3.6.1.2.1.2.2.1.8.22'); +INSERT INTO `host_snmp_cache` VALUES (4,1,'ifOperStatus','Down','23','.1.3.6.1.2.1.2.2.1.8.23'); +INSERT INTO `host_snmp_cache` VALUES (4,1,'ifOperStatus','Down','24','.1.3.6.1.2.1.2.2.1.8.24'); +INSERT INTO `host_snmp_cache` VALUES (4,1,'ifOperStatus','Up','25','.1.3.6.1.2.1.2.2.1.8.25'); +INSERT INTO `host_snmp_cache` VALUES (4,1,'ifOperStatus','Down','26','.1.3.6.1.2.1.2.2.1.8.26'); +INSERT INTO `host_snmp_cache` VALUES (4,1,'ifOperStatus','Up','27','.1.3.6.1.2.1.2.2.1.8.27'); +INSERT INTO `host_snmp_cache` VALUES (4,1,'ifOperStatus','Down','28','.1.3.6.1.2.1.2.2.1.8.28'); +INSERT INTO `host_snmp_cache` VALUES (4,1,'ifOperStatus','Up','29','.1.3.6.1.2.1.2.2.1.8.29'); +INSERT INTO `host_snmp_cache` VALUES (4,1,'ifDescr','FastEthernet0/1','1','.1.3.6.1.2.1.2.2.1.2.1'); +INSERT INTO `host_snmp_cache` VALUES (4,1,'ifDescr','FastEthernet0/2','2','.1.3.6.1.2.1.2.2.1.2.2'); +INSERT INTO `host_snmp_cache` VALUES (4,1,'ifDescr','FastEthernet0/3','3','.1.3.6.1.2.1.2.2.1.2.3'); +INSERT INTO `host_snmp_cache` VALUES (4,1,'ifDescr','FastEthernet0/4','4','.1.3.6.1.2.1.2.2.1.2.4'); +INSERT INTO `host_snmp_cache` VALUES (4,1,'ifDescr','FastEthernet0/5','5','.1.3.6.1.2.1.2.2.1.2.5'); +INSERT INTO `host_snmp_cache` VALUES (4,1,'ifDescr','FastEthernet0/6','6','.1.3.6.1.2.1.2.2.1.2.6'); +INSERT INTO `host_snmp_cache` VALUES (4,1,'ifDescr','FastEthernet0/7','7','.1.3.6.1.2.1.2.2.1.2.7'); +INSERT INTO `host_snmp_cache` VALUES (4,1,'ifDescr','FastEthernet0/8','8','.1.3.6.1.2.1.2.2.1.2.8'); +INSERT INTO `host_snmp_cache` VALUES (4,1,'ifDescr','FastEthernet0/9','9','.1.3.6.1.2.1.2.2.1.2.9'); +INSERT INTO `host_snmp_cache` VALUES (4,1,'ifDescr','FastEthernet0/10','10','.1.3.6.1.2.1.2.2.1.2.10'); +INSERT INTO `host_snmp_cache` VALUES (4,1,'ifDescr','FastEthernet0/11','11','.1.3.6.1.2.1.2.2.1.2.11'); +INSERT INTO `host_snmp_cache` VALUES (4,1,'ifDescr','FastEthernet0/12','12','.1.3.6.1.2.1.2.2.1.2.12'); +INSERT INTO `host_snmp_cache` VALUES (4,1,'ifDescr','FastEthernet0/13','13','.1.3.6.1.2.1.2.2.1.2.13'); +INSERT INTO `host_snmp_cache` VALUES (13,1,'ifIP','10.10.10.196','2','.1.3.6.1.2.1.4.20.1.2.10.10.10.196'); +INSERT INTO `host_snmp_cache` VALUES (13,1,'ifHwAddr','00:00:00:00:00:80:85','3','.1.3.6.1.2.1.2.2.1.6.3'); +INSERT INTO `host_snmp_cache` VALUES (13,1,'ifHwAddr','00:00:06:1B:D0:80:85','2','.1.3.6.1.2.1.2.2.1.6.2'); +INSERT INTO `host_snmp_cache` VALUES (4,1,'ifIP','172.16.42.102','29','.1.3.6.1.2.1.4.20.1.2.172.16.42.102'); +INSERT INTO `host_snmp_cache` VALUES (4,1,'ifHwAddr','00:00:0D:29:A9:64:80','29','.1.3.6.1.2.1.2.2.1.6.29'); +INSERT INTO `host_snmp_cache` VALUES (4,1,'ifHwAddr','00:00:0D:29:A9:64:80','28','.1.3.6.1.2.1.2.2.1.6.28'); +INSERT INTO `host_snmp_cache` VALUES (4,1,'ifHwAddr','','27','.1.3.6.1.2.1.2.2.1.6.27'); +INSERT INTO `host_snmp_cache` VALUES (4,1,'ifHwAddr','00:00:0D:29:A9:64:9A','26','.1.3.6.1.2.1.2.2.1.6.26'); +INSERT INTO `host_snmp_cache` VALUES (4,1,'ifHwAddr','00:00:0D:29:A9:64:99','25','.1.3.6.1.2.1.2.2.1.6.25'); +INSERT INTO `host_snmp_cache` VALUES (4,1,'ifOperStatus','Down','21','.1.3.6.1.2.1.2.2.1.8.21'); +INSERT INTO `host_snmp_cache` VALUES (4,1,'ifOperStatus','Down','20','.1.3.6.1.2.1.2.2.1.8.20'); +INSERT INTO `host_snmp_cache` VALUES (4,1,'ifOperStatus','Down','19','.1.3.6.1.2.1.2.2.1.8.19'); +INSERT INTO `host_snmp_cache` VALUES (4,1,'ifHwAddr','00:00:0D:29:A9:64:83','3','.1.3.6.1.2.1.2.2.1.6.3'); +INSERT INTO `host_snmp_cache` VALUES (4,1,'ifHwAddr','00:00:0D:29:A9:64:82','2','.1.3.6.1.2.1.2.2.1.6.2'); +INSERT INTO `host_snmp_cache` VALUES (4,1,'ifHwAddr','00:00:0D:29:A9:64:81','1','.1.3.6.1.2.1.2.2.1.6.1'); +INSERT INTO `host_snmp_cache` VALUES (4,1,'ifSpeed','1000000000','29','.1.3.6.1.2.1.2.2.1.5.29'); +INSERT INTO `host_snmp_cache` VALUES (4,1,'ifSpeed','1000000000','28','.1.3.6.1.2.1.2.2.1.5.28'); +INSERT INTO `host_snmp_cache` VALUES (4,1,'ifSpeed','4294967295','27','.1.3.6.1.2.1.2.2.1.5.27'); +INSERT INTO `host_snmp_cache` VALUES (4,1,'ifSpeed','10000000','26','.1.3.6.1.2.1.2.2.1.5.26'); +INSERT INTO `host_snmp_cache` VALUES (4,1,'ifSpeed','100000000','25','.1.3.6.1.2.1.2.2.1.5.25'); +INSERT INTO `host_snmp_cache` VALUES (4,1,'ifSpeed','100000000','24','.1.3.6.1.2.1.2.2.1.5.24'); +INSERT INTO `host_snmp_cache` VALUES (4,1,'ifSpeed','10000000','23','.1.3.6.1.2.1.2.2.1.5.23'); +INSERT INTO `host_snmp_cache` VALUES (4,1,'ifSpeed','10000000','22','.1.3.6.1.2.1.2.2.1.5.22'); +INSERT INTO `host_snmp_cache` VALUES (4,1,'ifSpeed','10000000','21','.1.3.6.1.2.1.2.2.1.5.21'); +INSERT INTO `host_snmp_cache` VALUES (4,1,'ifSpeed','10000000','20','.1.3.6.1.2.1.2.2.1.5.20'); +INSERT INTO `host_snmp_cache` VALUES (4,1,'ifSpeed','10000000','19','.1.3.6.1.2.1.2.2.1.5.19'); +INSERT INTO `host_snmp_cache` VALUES (4,1,'ifSpeed','10000000','18','.1.3.6.1.2.1.2.2.1.5.18'); +INSERT INTO `host_snmp_cache` VALUES (4,1,'ifSpeed','10000000','17','.1.3.6.1.2.1.2.2.1.5.17'); +INSERT INTO `host_snmp_cache` VALUES (4,1,'ifSpeed','10000000','16','.1.3.6.1.2.1.2.2.1.5.16'); +INSERT INTO `host_snmp_cache` VALUES (4,1,'ifSpeed','10000000','15','.1.3.6.1.2.1.2.2.1.5.15'); +INSERT INTO `host_snmp_cache` VALUES (4,1,'ifSpeed','10000000','14','.1.3.6.1.2.1.2.2.1.5.14'); +INSERT INTO `host_snmp_cache` VALUES (4,1,'ifSpeed','10000000','13','.1.3.6.1.2.1.2.2.1.5.13'); +INSERT INTO `host_snmp_cache` VALUES (4,1,'ifSpeed','10000000','12','.1.3.6.1.2.1.2.2.1.5.12'); +INSERT INTO `host_snmp_cache` VALUES (4,1,'ifSpeed','10000000','11','.1.3.6.1.2.1.2.2.1.5.11'); +INSERT INTO `host_snmp_cache` VALUES (4,1,'ifSpeed','10000000','10','.1.3.6.1.2.1.2.2.1.5.10'); +INSERT INTO `host_snmp_cache` VALUES (4,1,'ifSpeed','10000000','9','.1.3.6.1.2.1.2.2.1.5.9'); +INSERT INTO `host_snmp_cache` VALUES (4,1,'ifSpeed','10000000','8','.1.3.6.1.2.1.2.2.1.5.8'); +INSERT INTO `host_snmp_cache` VALUES (4,1,'ifSpeed','10000000','7','.1.3.6.1.2.1.2.2.1.5.7'); +INSERT INTO `host_snmp_cache` VALUES (4,1,'ifSpeed','10000000','5','.1.3.6.1.2.1.2.2.1.5.5'); +INSERT INTO `host_snmp_cache` VALUES (4,1,'ifSpeed','10000000','4','.1.3.6.1.2.1.2.2.1.5.4'); +INSERT INTO `host_snmp_cache` VALUES (4,1,'ifSpeed','10000000','3','.1.3.6.1.2.1.2.2.1.5.3'); +INSERT INTO `host_snmp_cache` VALUES (4,1,'ifSpeed','10000000','2','.1.3.6.1.2.1.2.2.1.5.2'); +INSERT INTO `host_snmp_cache` VALUES (4,1,'ifSpeed','100000000','1','.1.3.6.1.2.1.2.2.1.5.1'); +INSERT INTO `host_snmp_cache` VALUES (4,1,'ifType','propVirtual(53)','29','.1.3.6.1.2.1.2.2.1.3.29'); +INSERT INTO `host_snmp_cache` VALUES (4,1,'ifType','propVirtual(53)','28','.1.3.6.1.2.1.2.2.1.3.28'); +INSERT INTO `host_snmp_cache` VALUES (4,1,'ifType','other(1)','27','.1.3.6.1.2.1.2.2.1.3.27'); +INSERT INTO `host_snmp_cache` VALUES (4,1,'ifType','ethernetCsmacd(6)','26','.1.3.6.1.2.1.2.2.1.3.26'); +INSERT INTO `host_snmp_cache` VALUES (4,1,'ifType','ethernetCsmacd(6)','25','.1.3.6.1.2.1.2.2.1.3.25'); +INSERT INTO `host_snmp_cache` VALUES (4,1,'ifType','ethernetCsmacd(6)','24','.1.3.6.1.2.1.2.2.1.3.24'); +INSERT INTO `host_snmp_cache` VALUES (4,1,'ifType','ethernetCsmacd(6)','23','.1.3.6.1.2.1.2.2.1.3.23'); +INSERT INTO `host_snmp_cache` VALUES (4,1,'ifType','ethernetCsmacd(6)','22','.1.3.6.1.2.1.2.2.1.3.22'); +INSERT INTO `host_snmp_cache` VALUES (4,1,'ifType','ethernetCsmacd(6)','21','.1.3.6.1.2.1.2.2.1.3.21'); +INSERT INTO `host_snmp_cache` VALUES (4,1,'ifType','ethernetCsmacd(6)','20','.1.3.6.1.2.1.2.2.1.3.20'); +INSERT INTO `host_snmp_cache` VALUES (4,1,'ifType','ethernetCsmacd(6)','19','.1.3.6.1.2.1.2.2.1.3.19'); +INSERT INTO `host_snmp_cache` VALUES (4,1,'ifType','ethernetCsmacd(6)','18','.1.3.6.1.2.1.2.2.1.3.18'); +INSERT INTO `host_snmp_cache` VALUES (4,1,'ifType','ethernetCsmacd(6)','17','.1.3.6.1.2.1.2.2.1.3.17'); +INSERT INTO `host_snmp_cache` VALUES (4,1,'ifType','ethernetCsmacd(6)','16','.1.3.6.1.2.1.2.2.1.3.16'); +INSERT INTO `host_snmp_cache` VALUES (4,1,'ifType','ethernetCsmacd(6)','15','.1.3.6.1.2.1.2.2.1.3.15'); +INSERT INTO `host_snmp_cache` VALUES (4,1,'ifType','ethernetCsmacd(6)','14','.1.3.6.1.2.1.2.2.1.3.14'); +INSERT INTO `host_snmp_cache` VALUES (4,1,'ifType','ethernetCsmacd(6)','13','.1.3.6.1.2.1.2.2.1.3.13'); +INSERT INTO `host_snmp_cache` VALUES (4,1,'ifType','ethernetCsmacd(6)','12','.1.3.6.1.2.1.2.2.1.3.12'); +INSERT INTO `host_snmp_cache` VALUES (4,1,'ifType','ethernetCsmacd(6)','11','.1.3.6.1.2.1.2.2.1.3.11'); +INSERT INTO `host_snmp_cache` VALUES (4,1,'ifType','ethernetCsmacd(6)','10','.1.3.6.1.2.1.2.2.1.3.10'); +INSERT INTO `host_snmp_cache` VALUES (4,1,'ifType','ethernetCsmacd(6)','9','.1.3.6.1.2.1.2.2.1.3.9'); +INSERT INTO `host_snmp_cache` VALUES (4,1,'ifType','ethernetCsmacd(6)','8','.1.3.6.1.2.1.2.2.1.3.8'); +INSERT INTO `host_snmp_cache` VALUES (4,1,'ifDescr','FastEthernet0/24','24','.1.3.6.1.2.1.2.2.1.2.24'); +INSERT INTO `host_snmp_cache` VALUES (4,1,'ifDescr','GigabitEthernet0/1','25','.1.3.6.1.2.1.2.2.1.2.25'); +INSERT INTO `host_snmp_cache` VALUES (4,1,'ifDescr','GigabitEthernet0/2','26','.1.3.6.1.2.1.2.2.1.2.26'); +INSERT INTO `host_snmp_cache` VALUES (4,1,'ifDescr','Null0','27','.1.3.6.1.2.1.2.2.1.2.27'); +INSERT INTO `host_snmp_cache` VALUES (4,1,'ifDescr','Vlan1','28','.1.3.6.1.2.1.2.2.1.2.28'); +INSERT INTO `host_snmp_cache` VALUES (4,1,'ifDescr','Vlan42','29','.1.3.6.1.2.1.2.2.1.2.29'); +INSERT INTO `host_snmp_cache` VALUES (4,1,'ifName','Fa0/1','1','.1.3.6.1.2.1.31.1.1.1.1.1'); +INSERT INTO `host_snmp_cache` VALUES (4,1,'ifName','Fa0/2','2','.1.3.6.1.2.1.31.1.1.1.1.2'); +INSERT INTO `host_snmp_cache` VALUES (4,1,'ifName','Fa0/3','3','.1.3.6.1.2.1.31.1.1.1.1.3'); +INSERT INTO `host_snmp_cache` VALUES (4,1,'ifName','Fa0/4','4','.1.3.6.1.2.1.31.1.1.1.1.4'); +INSERT INTO `host_snmp_cache` VALUES (4,1,'ifName','Fa0/5','5','.1.3.6.1.2.1.31.1.1.1.1.5'); +INSERT INTO `host_snmp_cache` VALUES (4,1,'ifName','Fa0/6','6','.1.3.6.1.2.1.31.1.1.1.1.6'); +INSERT INTO `host_snmp_cache` VALUES (4,1,'ifName','Fa0/7','7','.1.3.6.1.2.1.31.1.1.1.1.7'); +INSERT INTO `host_snmp_cache` VALUES (4,1,'ifName','Fa0/8','8','.1.3.6.1.2.1.31.1.1.1.1.8'); +INSERT INTO `host_snmp_cache` VALUES (4,1,'ifName','Fa0/9','9','.1.3.6.1.2.1.31.1.1.1.1.9'); +INSERT INTO `host_snmp_cache` VALUES (4,1,'ifName','Fa0/10','10','.1.3.6.1.2.1.31.1.1.1.1.10'); +INSERT INTO `host_snmp_cache` VALUES (4,1,'ifName','Fa0/11','11','.1.3.6.1.2.1.31.1.1.1.1.11'); +INSERT INTO `host_snmp_cache` VALUES (4,1,'ifName','Fa0/12','12','.1.3.6.1.2.1.31.1.1.1.1.12'); +INSERT INTO `host_snmp_cache` VALUES (4,1,'ifName','Fa0/13','13','.1.3.6.1.2.1.31.1.1.1.1.13'); +INSERT INTO `host_snmp_cache` VALUES (4,1,'ifName','Fa0/14','14','.1.3.6.1.2.1.31.1.1.1.1.14'); +INSERT INTO `host_snmp_cache` VALUES (4,1,'ifName','Fa0/15','15','.1.3.6.1.2.1.31.1.1.1.1.15'); +INSERT INTO `host_snmp_cache` VALUES (4,1,'ifName','Fa0/16','16','.1.3.6.1.2.1.31.1.1.1.1.16'); +INSERT INTO `host_snmp_cache` VALUES (4,1,'ifName','Fa0/17','17','.1.3.6.1.2.1.31.1.1.1.1.17'); +INSERT INTO `host_snmp_cache` VALUES (4,1,'ifName','Fa0/18','18','.1.3.6.1.2.1.31.1.1.1.1.18'); +INSERT INTO `host_snmp_cache` VALUES (4,1,'ifName','Fa0/19','19','.1.3.6.1.2.1.31.1.1.1.1.19'); +INSERT INTO `host_snmp_cache` VALUES (4,1,'ifName','Fa0/20','20','.1.3.6.1.2.1.31.1.1.1.1.20'); +INSERT INTO `host_snmp_cache` VALUES (4,1,'ifName','Fa0/21','21','.1.3.6.1.2.1.31.1.1.1.1.21'); +INSERT INTO `host_snmp_cache` VALUES (4,1,'ifName','Fa0/22','22','.1.3.6.1.2.1.31.1.1.1.1.22'); +INSERT INTO `host_snmp_cache` VALUES (4,1,'ifName','Fa0/23','23','.1.3.6.1.2.1.31.1.1.1.1.23'); +INSERT INTO `host_snmp_cache` VALUES (4,1,'ifName','Fa0/24','24','.1.3.6.1.2.1.31.1.1.1.1.24'); +INSERT INTO `host_snmp_cache` VALUES (4,1,'ifName','Gi0/1','25','.1.3.6.1.2.1.31.1.1.1.1.25'); +INSERT INTO `host_snmp_cache` VALUES (4,1,'ifName','Gi0/2','26','.1.3.6.1.2.1.31.1.1.1.1.26'); +INSERT INTO `host_snmp_cache` VALUES (4,1,'ifName','Nu0','27','.1.3.6.1.2.1.31.1.1.1.1.27'); +INSERT INTO `host_snmp_cache` VALUES (4,1,'ifName','Vl1','28','.1.3.6.1.2.1.31.1.1.1.1.28'); +INSERT INTO `host_snmp_cache` VALUES (4,1,'ifName','Vl42','29','.1.3.6.1.2.1.31.1.1.1.1.29'); +INSERT INTO `host_snmp_cache` VALUES (4,1,'ifAlias','','1','.1.3.6.1.2.1.31.1.1.1.18.1'); +INSERT INTO `host_snmp_cache` VALUES (4,1,'ifAlias','','2','.1.3.6.1.2.1.31.1.1.1.18.2'); +INSERT INTO `host_snmp_cache` VALUES (4,1,'ifAlias','','3','.1.3.6.1.2.1.31.1.1.1.18.3'); +INSERT INTO `host_snmp_cache` VALUES (4,1,'ifAlias','','4','.1.3.6.1.2.1.31.1.1.1.18.4'); +INSERT INTO `host_snmp_cache` VALUES (4,1,'ifAlias','','5','.1.3.6.1.2.1.31.1.1.1.18.5'); +INSERT INTO `host_snmp_cache` VALUES (4,1,'ifAlias','','6','.1.3.6.1.2.1.31.1.1.1.18.6'); +INSERT INTO `host_snmp_cache` VALUES (4,1,'ifAlias','','7','.1.3.6.1.2.1.31.1.1.1.18.7'); +INSERT INTO `host_snmp_cache` VALUES (4,1,'ifAlias','','8','.1.3.6.1.2.1.31.1.1.1.18.8'); +INSERT INTO `host_snmp_cache` VALUES (4,1,'ifAlias','','9','.1.3.6.1.2.1.31.1.1.1.18.9'); +INSERT INTO `host_snmp_cache` VALUES (4,1,'ifAlias','','10','.1.3.6.1.2.1.31.1.1.1.18.10'); +INSERT INTO `host_snmp_cache` VALUES (4,1,'ifAlias','','11','.1.3.6.1.2.1.31.1.1.1.18.11'); +INSERT INTO `host_snmp_cache` VALUES (4,1,'ifAlias','','12','.1.3.6.1.2.1.31.1.1.1.18.12'); +INSERT INTO `host_snmp_cache` VALUES (4,1,'ifAlias','','13','.1.3.6.1.2.1.31.1.1.1.18.13'); +INSERT INTO `host_snmp_cache` VALUES (4,1,'ifAlias','','14','.1.3.6.1.2.1.31.1.1.1.18.14'); +INSERT INTO `host_snmp_cache` VALUES (4,1,'ifAlias','','15','.1.3.6.1.2.1.31.1.1.1.18.15'); +INSERT INTO `host_snmp_cache` VALUES (4,1,'ifAlias','','16','.1.3.6.1.2.1.31.1.1.1.18.16'); +INSERT INTO `host_snmp_cache` VALUES (4,1,'ifAlias','','17','.1.3.6.1.2.1.31.1.1.1.18.17'); +INSERT INTO `host_snmp_cache` VALUES (4,1,'ifAlias','','18','.1.3.6.1.2.1.31.1.1.1.18.18'); +INSERT INTO `host_snmp_cache` VALUES (4,1,'ifAlias','','19','.1.3.6.1.2.1.31.1.1.1.18.19'); +INSERT INTO `host_snmp_cache` VALUES (4,1,'ifAlias','','20','.1.3.6.1.2.1.31.1.1.1.18.20'); +INSERT INTO `host_snmp_cache` VALUES (4,1,'ifAlias','','21','.1.3.6.1.2.1.31.1.1.1.18.21'); +INSERT INTO `host_snmp_cache` VALUES (4,1,'ifAlias','','22','.1.3.6.1.2.1.31.1.1.1.18.22'); +INSERT INTO `host_snmp_cache` VALUES (4,1,'ifAlias','','23','.1.3.6.1.2.1.31.1.1.1.18.23'); +INSERT INTO `host_snmp_cache` VALUES (4,1,'ifAlias','','24','.1.3.6.1.2.1.31.1.1.1.18.24'); +INSERT INTO `host_snmp_cache` VALUES (4,1,'ifAlias','','25','.1.3.6.1.2.1.31.1.1.1.18.25'); +INSERT INTO `host_snmp_cache` VALUES (4,1,'ifAlias','','26','.1.3.6.1.2.1.31.1.1.1.18.26'); +INSERT INTO `host_snmp_cache` VALUES (4,1,'ifAlias','','27','.1.3.6.1.2.1.31.1.1.1.18.27'); +INSERT INTO `host_snmp_cache` VALUES (4,1,'ifAlias','','28','.1.3.6.1.2.1.31.1.1.1.18.28'); +INSERT INTO `host_snmp_cache` VALUES (4,1,'ifAlias','','29','.1.3.6.1.2.1.31.1.1.1.18.29'); +INSERT INTO `host_snmp_cache` VALUES (4,1,'ifType','ethernetCsmacd(6)','1','.1.3.6.1.2.1.2.2.1.3.1'); +INSERT INTO `host_snmp_cache` VALUES (4,1,'ifType','ethernetCsmacd(6)','2','.1.3.6.1.2.1.2.2.1.3.2'); +INSERT INTO `host_snmp_cache` VALUES (4,1,'ifType','ethernetCsmacd(6)','3','.1.3.6.1.2.1.2.2.1.3.3'); +INSERT INTO `host_snmp_cache` VALUES (4,1,'ifType','ethernetCsmacd(6)','4','.1.3.6.1.2.1.2.2.1.3.4'); +INSERT INTO `host_snmp_cache` VALUES (4,1,'ifType','ethernetCsmacd(6)','5','.1.3.6.1.2.1.2.2.1.3.5'); +INSERT INTO `host_snmp_cache` VALUES (4,1,'ifType','ethernetCsmacd(6)','6','.1.3.6.1.2.1.2.2.1.3.6'); +INSERT INTO `host_snmp_cache` VALUES (4,1,'ifType','ethernetCsmacd(6)','7','.1.3.6.1.2.1.2.2.1.3.7'); +INSERT INTO `host_snmp_cache` VALUES (12,1,'ifHwAddr','00:00:20:ED:53:17:35','13','.1.3.6.1.2.1.2.2.1.6.13'); +INSERT INTO `host_snmp_cache` VALUES (5,1,'ifIP','85.176.10.157','17','.1.3.6.1.2.1.4.20.1.2.85.176.10.157'); +INSERT INTO `host_snmp_cache` VALUES (5,1,'ifSpeed','100000000','5','.1.3.6.1.2.1.2.2.1.5.5'); +INSERT INTO `host_snmp_cache` VALUES (5,1,'ifSpeed','10000000','6','.1.3.6.1.2.1.2.2.1.5.6'); +INSERT INTO `host_snmp_cache` VALUES (5,1,'ifSpeed','10000000','7','.1.3.6.1.2.1.2.2.1.5.7'); +INSERT INTO `host_snmp_cache` VALUES (5,1,'ifSpeed','0','3','.1.3.6.1.2.1.2.2.1.5.3'); +INSERT INTO `host_snmp_cache` VALUES (5,1,'ifSpeed','100000000','4','.1.3.6.1.2.1.2.2.1.5.4'); +INSERT INTO `host_snmp_cache` VALUES (5,1,'ifSpeed','10000000','2','.1.3.6.1.2.1.2.2.1.5.2'); +INSERT INTO `host_snmp_cache` VALUES (5,1,'ifSpeed','10000000','1','.1.3.6.1.2.1.2.2.1.5.1'); +INSERT INTO `host_snmp_cache` VALUES (5,1,'ifType','ppp(23)','15','.1.3.6.1.2.1.2.2.1.3.15'); +INSERT INTO `host_snmp_cache` VALUES (5,1,'ifIndex','10','10','.1.3.6.1.2.1.2.2.1.1.10'); +INSERT INTO `host_snmp_cache` VALUES (5,1,'ifIndex','11','11','.1.3.6.1.2.1.2.2.1.1.11'); +INSERT INTO `host_snmp_cache` VALUES (5,1,'ifIndex','12','12','.1.3.6.1.2.1.2.2.1.1.12'); +INSERT INTO `host_snmp_cache` VALUES (5,1,'ifIndex','13','13','.1.3.6.1.2.1.2.2.1.1.13'); +INSERT INTO `host_snmp_cache` VALUES (5,1,'ifIndex','14','14','.1.3.6.1.2.1.2.2.1.1.14'); +INSERT INTO `host_snmp_cache` VALUES (5,1,'ifIndex','15','15','.1.3.6.1.2.1.2.2.1.1.15'); +INSERT INTO `host_snmp_cache` VALUES (5,1,'ifOperStatus','Up','1','.1.3.6.1.2.1.2.2.1.8.1'); +INSERT INTO `host_snmp_cache` VALUES (5,1,'ifOperStatus','Down','2','.1.3.6.1.2.1.2.2.1.8.2'); +INSERT INTO `host_snmp_cache` VALUES (5,1,'ifOperStatus','Down','3','.1.3.6.1.2.1.2.2.1.8.3'); +INSERT INTO `host_snmp_cache` VALUES (5,1,'ifOperStatus','Up','4','.1.3.6.1.2.1.2.2.1.8.4'); +INSERT INTO `host_snmp_cache` VALUES (5,1,'ifOperStatus','Up','5','.1.3.6.1.2.1.2.2.1.8.5'); +INSERT INTO `host_snmp_cache` VALUES (5,1,'ifOperStatus','Up','6','.1.3.6.1.2.1.2.2.1.8.6'); +INSERT INTO `host_snmp_cache` VALUES (5,1,'ifOperStatus','Up','7','.1.3.6.1.2.1.2.2.1.8.7'); +INSERT INTO `host_snmp_cache` VALUES (5,1,'ifOperStatus','Up','8','.1.3.6.1.2.1.2.2.1.8.8'); +INSERT INTO `host_snmp_cache` VALUES (5,1,'ifOperStatus','Up','9','.1.3.6.1.2.1.2.2.1.8.9'); +INSERT INTO `host_snmp_cache` VALUES (5,1,'ifOperStatus','Up','10','.1.3.6.1.2.1.2.2.1.8.10'); +INSERT INTO `host_snmp_cache` VALUES (5,1,'ifOperStatus','Down','11','.1.3.6.1.2.1.2.2.1.8.11'); +INSERT INTO `host_snmp_cache` VALUES (5,1,'ifOperStatus','Down','12','.1.3.6.1.2.1.2.2.1.8.12'); +INSERT INTO `host_snmp_cache` VALUES (5,1,'ifOperStatus','Up','13','.1.3.6.1.2.1.2.2.1.8.13'); +INSERT INTO `host_snmp_cache` VALUES (5,1,'ifOperStatus','Up','14','.1.3.6.1.2.1.2.2.1.8.14'); +INSERT INTO `host_snmp_cache` VALUES (5,1,'ifOperStatus','Down','15','.1.3.6.1.2.1.2.2.1.8.15'); +INSERT INTO `host_snmp_cache` VALUES (5,1,'ifDescr','lo','1','.1.3.6.1.2.1.2.2.1.2.1'); +INSERT INTO `host_snmp_cache` VALUES (5,1,'ifDescr','dummy0','2','.1.3.6.1.2.1.2.2.1.2.2'); +INSERT INTO `host_snmp_cache` VALUES (5,1,'ifDescr','sit0','3','.1.3.6.1.2.1.2.2.1.2.3'); +INSERT INTO `host_snmp_cache` VALUES (5,1,'ifDescr','eth0','4','.1.3.6.1.2.1.2.2.1.2.4'); +INSERT INTO `host_snmp_cache` VALUES (5,1,'ifDescr','eth1','5','.1.3.6.1.2.1.2.2.1.2.5'); +INSERT INTO `host_snmp_cache` VALUES (5,1,'ifDescr','bond0','6','.1.3.6.1.2.1.2.2.1.2.6'); +INSERT INTO `host_snmp_cache` VALUES (5,1,'ifDescr','vlan24','7','.1.3.6.1.2.1.2.2.1.2.7'); +INSERT INTO `host_snmp_cache` VALUES (5,1,'ifDescr','vlan22','8','.1.3.6.1.2.1.2.2.1.2.8'); +INSERT INTO `host_snmp_cache` VALUES (5,1,'ifDescr','vlan23','9','.1.3.6.1.2.1.2.2.1.2.9'); +INSERT INTO `host_snmp_cache` VALUES (5,1,'ifDescr','vlan42','10','.1.3.6.1.2.1.2.2.1.2.10'); +INSERT INTO `host_snmp_cache` VALUES (5,1,'ifDescr','imq0','11','.1.3.6.1.2.1.2.2.1.2.11'); +INSERT INTO `host_snmp_cache` VALUES (5,1,'ifDescr','imq1','12','.1.3.6.1.2.1.2.2.1.2.12'); +INSERT INTO `host_snmp_cache` VALUES (5,1,'ifDescr','vlan25','13','.1.3.6.1.2.1.2.2.1.2.13'); +INSERT INTO `host_snmp_cache` VALUES (5,1,'ifDescr','tap0','14','.1.3.6.1.2.1.2.2.1.2.14'); +INSERT INTO `host_snmp_cache` VALUES (5,1,'ifDescr','ppp0','15','.1.3.6.1.2.1.2.2.1.2.15'); +INSERT INTO `host_snmp_cache` VALUES (5,1,'ifType','softwareLoopback(24)','1','.1.3.6.1.2.1.2.2.1.3.1'); +INSERT INTO `host_snmp_cache` VALUES (5,1,'ifType','ethernetCsmacd(6)','2','.1.3.6.1.2.1.2.2.1.3.2'); +INSERT INTO `host_snmp_cache` VALUES (5,1,'ifType','tunnel(131)','3','.1.3.6.1.2.1.2.2.1.3.3'); +INSERT INTO `host_snmp_cache` VALUES (5,1,'ifType','ethernetCsmacd(6)','4','.1.3.6.1.2.1.2.2.1.3.4'); +INSERT INTO `host_snmp_cache` VALUES (5,1,'ifType','ethernetCsmacd(6)','5','.1.3.6.1.2.1.2.2.1.3.5'); +INSERT INTO `host_snmp_cache` VALUES (5,1,'ifType','ethernetCsmacd(6)','6','.1.3.6.1.2.1.2.2.1.3.6'); +INSERT INTO `host_snmp_cache` VALUES (5,1,'ifType','ethernetCsmacd(6)','7','.1.3.6.1.2.1.2.2.1.3.7'); +INSERT INTO `host_snmp_cache` VALUES (5,1,'ifType','ethernetCsmacd(6)','8','.1.3.6.1.2.1.2.2.1.3.8'); +INSERT INTO `host_snmp_cache` VALUES (5,1,'ifType','ethernetCsmacd(6)','9','.1.3.6.1.2.1.2.2.1.3.9'); +INSERT INTO `host_snmp_cache` VALUES (5,1,'ifType','ethernetCsmacd(6)','10','.1.3.6.1.2.1.2.2.1.3.10'); +INSERT INTO `host_snmp_cache` VALUES (5,1,'ifType','other(1)','11','.1.3.6.1.2.1.2.2.1.3.11'); +INSERT INTO `host_snmp_cache` VALUES (5,1,'ifType','other(1)','12','.1.3.6.1.2.1.2.2.1.3.12'); +INSERT INTO `host_snmp_cache` VALUES (5,1,'ifType','ethernetCsmacd(6)','13','.1.3.6.1.2.1.2.2.1.3.13'); +INSERT INTO `host_snmp_cache` VALUES (5,1,'ifType','ethernetCsmacd(6)','14','.1.3.6.1.2.1.2.2.1.3.14'); +INSERT INTO `host_snmp_cache` VALUES (5,1,'ifIndex','9','9','.1.3.6.1.2.1.2.2.1.1.9'); +INSERT INTO `host_snmp_cache` VALUES (5,1,'ifIndex','8','8','.1.3.6.1.2.1.2.2.1.1.8'); +INSERT INTO `host_snmp_cache` VALUES (5,1,'ifIndex','7','7','.1.3.6.1.2.1.2.2.1.1.7'); +INSERT INTO `host_snmp_cache` VALUES (5,1,'ifIndex','6','6','.1.3.6.1.2.1.2.2.1.1.6'); +INSERT INTO `host_snmp_cache` VALUES (5,1,'ifIndex','5','5','.1.3.6.1.2.1.2.2.1.1.5'); +INSERT INTO `host_snmp_cache` VALUES (5,1,'ifIndex','4','4','.1.3.6.1.2.1.2.2.1.1.4'); +INSERT INTO `host_snmp_cache` VALUES (5,1,'ifIndex','1','1','.1.3.6.1.2.1.2.2.1.1.1'); +INSERT INTO `host_snmp_cache` VALUES (5,1,'ifIndex','2','2','.1.3.6.1.2.1.2.2.1.1.2'); +INSERT INTO `host_snmp_cache` VALUES (5,1,'ifIndex','3','3','.1.3.6.1.2.1.2.2.1.1.3'); +INSERT INTO `host_snmp_cache` VALUES (12,1,'ifIP','172.16.25.1','13','.1.3.6.1.2.1.4.20.1.2.172.16.25.1'); +INSERT INTO `host_snmp_cache` VALUES (6,1,'ifHwAddr','00:00:0D:29:97:D8:41','1','.1.3.6.1.2.1.2.2.1.6.1'); +INSERT INTO `host_snmp_cache` VALUES (6,1,'ifHwAddr','00:00:0D:29:97:D8:42','2','.1.3.6.1.2.1.2.2.1.6.2'); +INSERT INTO `host_snmp_cache` VALUES (6,1,'ifHwAddr','00:00:0D:29:97:D8:43','3','.1.3.6.1.2.1.2.2.1.6.3'); +INSERT INTO `host_snmp_cache` VALUES (6,1,'ifHwAddr','00:00:0D:29:97:D8:44','4','.1.3.6.1.2.1.2.2.1.6.4'); +INSERT INTO `host_snmp_cache` VALUES (6,1,'ifHwAddr','00:00:0D:29:97:D8:45','5','.1.3.6.1.2.1.2.2.1.6.5'); +INSERT INTO `host_snmp_cache` VALUES (6,1,'ifHwAddr','00:00:0D:29:97:D8:46','6','.1.3.6.1.2.1.2.2.1.6.6'); +INSERT INTO `host_snmp_cache` VALUES (6,1,'ifHwAddr','00:00:0D:29:97:D8:47','7','.1.3.6.1.2.1.2.2.1.6.7'); +INSERT INTO `host_snmp_cache` VALUES (6,1,'ifHwAddr','00:00:0D:29:97:D8:48','8','.1.3.6.1.2.1.2.2.1.6.8'); +INSERT INTO `host_snmp_cache` VALUES (6,1,'ifSpeed','1000000000','29','.1.3.6.1.2.1.2.2.1.5.29'); +INSERT INTO `host_snmp_cache` VALUES (6,1,'ifSpeed','1000000000','28','.1.3.6.1.2.1.2.2.1.5.28'); +INSERT INTO `host_snmp_cache` VALUES (6,1,'ifSpeed','4294967295','27','.1.3.6.1.2.1.2.2.1.5.27'); +INSERT INTO `host_snmp_cache` VALUES (6,1,'ifSpeed','10000000','26','.1.3.6.1.2.1.2.2.1.5.26'); +INSERT INTO `host_snmp_cache` VALUES (6,1,'ifSpeed','100000000','25','.1.3.6.1.2.1.2.2.1.5.25'); +INSERT INTO `host_snmp_cache` VALUES (6,1,'ifSpeed','10000000','24','.1.3.6.1.2.1.2.2.1.5.24'); +INSERT INTO `host_snmp_cache` VALUES (6,1,'ifSpeed','10000000','23','.1.3.6.1.2.1.2.2.1.5.23'); +INSERT INTO `host_snmp_cache` VALUES (6,1,'ifSpeed','10000000','22','.1.3.6.1.2.1.2.2.1.5.22'); +INSERT INTO `host_snmp_cache` VALUES (6,1,'ifSpeed','10000000','21','.1.3.6.1.2.1.2.2.1.5.21'); +INSERT INTO `host_snmp_cache` VALUES (6,1,'ifSpeed','10000000','20','.1.3.6.1.2.1.2.2.1.5.20'); +INSERT INTO `host_snmp_cache` VALUES (6,1,'ifType','ethernetCsmacd(6)','5','.1.3.6.1.2.1.2.2.1.3.5'); +INSERT INTO `host_snmp_cache` VALUES (6,1,'ifType','ethernetCsmacd(6)','6','.1.3.6.1.2.1.2.2.1.3.6'); +INSERT INTO `host_snmp_cache` VALUES (6,1,'ifType','ethernetCsmacd(6)','7','.1.3.6.1.2.1.2.2.1.3.7'); +INSERT INTO `host_snmp_cache` VALUES (6,1,'ifType','ethernetCsmacd(6)','8','.1.3.6.1.2.1.2.2.1.3.8'); +INSERT INTO `host_snmp_cache` VALUES (6,1,'ifType','ethernetCsmacd(6)','9','.1.3.6.1.2.1.2.2.1.3.9'); +INSERT INTO `host_snmp_cache` VALUES (6,1,'ifType','ethernetCsmacd(6)','10','.1.3.6.1.2.1.2.2.1.3.10'); +INSERT INTO `host_snmp_cache` VALUES (6,1,'ifType','ethernetCsmacd(6)','11','.1.3.6.1.2.1.2.2.1.3.11'); +INSERT INTO `host_snmp_cache` VALUES (6,1,'ifType','ethernetCsmacd(6)','12','.1.3.6.1.2.1.2.2.1.3.12'); +INSERT INTO `host_snmp_cache` VALUES (6,1,'ifType','ethernetCsmacd(6)','13','.1.3.6.1.2.1.2.2.1.3.13'); +INSERT INTO `host_snmp_cache` VALUES (6,1,'ifType','ethernetCsmacd(6)','14','.1.3.6.1.2.1.2.2.1.3.14'); +INSERT INTO `host_snmp_cache` VALUES (6,1,'ifType','ethernetCsmacd(6)','15','.1.3.6.1.2.1.2.2.1.3.15'); +INSERT INTO `host_snmp_cache` VALUES (6,1,'ifType','ethernetCsmacd(6)','16','.1.3.6.1.2.1.2.2.1.3.16'); +INSERT INTO `host_snmp_cache` VALUES (6,1,'ifType','ethernetCsmacd(6)','17','.1.3.6.1.2.1.2.2.1.3.17'); +INSERT INTO `host_snmp_cache` VALUES (6,1,'ifType','ethernetCsmacd(6)','18','.1.3.6.1.2.1.2.2.1.3.18'); +INSERT INTO `host_snmp_cache` VALUES (6,1,'ifType','ethernetCsmacd(6)','19','.1.3.6.1.2.1.2.2.1.3.19'); +INSERT INTO `host_snmp_cache` VALUES (6,1,'ifType','ethernetCsmacd(6)','20','.1.3.6.1.2.1.2.2.1.3.20'); +INSERT INTO `host_snmp_cache` VALUES (6,1,'ifType','ethernetCsmacd(6)','21','.1.3.6.1.2.1.2.2.1.3.21'); +INSERT INTO `host_snmp_cache` VALUES (6,1,'ifType','ethernetCsmacd(6)','22','.1.3.6.1.2.1.2.2.1.3.22'); +INSERT INTO `host_snmp_cache` VALUES (6,1,'ifType','ethernetCsmacd(6)','23','.1.3.6.1.2.1.2.2.1.3.23'); +INSERT INTO `host_snmp_cache` VALUES (6,1,'ifType','ethernetCsmacd(6)','24','.1.3.6.1.2.1.2.2.1.3.24'); +INSERT INTO `host_snmp_cache` VALUES (6,1,'ifType','ethernetCsmacd(6)','25','.1.3.6.1.2.1.2.2.1.3.25'); +INSERT INTO `host_snmp_cache` VALUES (6,1,'ifType','ethernetCsmacd(6)','26','.1.3.6.1.2.1.2.2.1.3.26'); +INSERT INTO `host_snmp_cache` VALUES (6,1,'ifType','other(1)','27','.1.3.6.1.2.1.2.2.1.3.27'); +INSERT INTO `host_snmp_cache` VALUES (6,1,'ifType','propVirtual(53)','28','.1.3.6.1.2.1.2.2.1.3.28'); +INSERT INTO `host_snmp_cache` VALUES (6,1,'ifType','propVirtual(53)','29','.1.3.6.1.2.1.2.2.1.3.29'); +INSERT INTO `host_snmp_cache` VALUES (6,1,'ifSpeed','10000000','1','.1.3.6.1.2.1.2.2.1.5.1'); +INSERT INTO `host_snmp_cache` VALUES (6,1,'ifSpeed','10000000','2','.1.3.6.1.2.1.2.2.1.5.2'); +INSERT INTO `host_snmp_cache` VALUES (6,1,'ifSpeed','10000000','3','.1.3.6.1.2.1.2.2.1.5.3'); +INSERT INTO `host_snmp_cache` VALUES (6,1,'ifSpeed','10000000','4','.1.3.6.1.2.1.2.2.1.5.4'); +INSERT INTO `host_snmp_cache` VALUES (6,1,'ifSpeed','10000000','5','.1.3.6.1.2.1.2.2.1.5.5'); +INSERT INTO `host_snmp_cache` VALUES (6,1,'ifSpeed','10000000','6','.1.3.6.1.2.1.2.2.1.5.6'); +INSERT INTO `host_snmp_cache` VALUES (6,1,'ifSpeed','10000000','7','.1.3.6.1.2.1.2.2.1.5.7'); +INSERT INTO `host_snmp_cache` VALUES (6,1,'ifSpeed','10000000','8','.1.3.6.1.2.1.2.2.1.5.8'); +INSERT INTO `host_snmp_cache` VALUES (6,1,'ifSpeed','10000000','9','.1.3.6.1.2.1.2.2.1.5.9'); +INSERT INTO `host_snmp_cache` VALUES (6,1,'ifSpeed','10000000','10','.1.3.6.1.2.1.2.2.1.5.10'); +INSERT INTO `host_snmp_cache` VALUES (6,1,'ifSpeed','10000000','11','.1.3.6.1.2.1.2.2.1.5.11'); +INSERT INTO `host_snmp_cache` VALUES (6,1,'ifAlias','','16','.1.3.6.1.2.1.31.1.1.1.18.16'); +INSERT INTO `host_snmp_cache` VALUES (6,1,'ifAlias','','15','.1.3.6.1.2.1.31.1.1.1.18.15'); +INSERT INTO `host_snmp_cache` VALUES (6,1,'ifAlias','','14','.1.3.6.1.2.1.31.1.1.1.18.14'); +INSERT INTO `host_snmp_cache` VALUES (6,1,'ifAlias','','13','.1.3.6.1.2.1.31.1.1.1.18.13'); +INSERT INTO `host_snmp_cache` VALUES (6,1,'ifAlias','','12','.1.3.6.1.2.1.31.1.1.1.18.12'); +INSERT INTO `host_snmp_cache` VALUES (6,1,'ifIndex','1','1','.1.3.6.1.2.1.2.2.1.1.1'); +INSERT INTO `host_snmp_cache` VALUES (6,1,'ifIndex','2','2','.1.3.6.1.2.1.2.2.1.1.2'); +INSERT INTO `host_snmp_cache` VALUES (6,1,'ifIndex','3','3','.1.3.6.1.2.1.2.2.1.1.3'); +INSERT INTO `host_snmp_cache` VALUES (6,1,'ifIndex','4','4','.1.3.6.1.2.1.2.2.1.1.4'); +INSERT INTO `host_snmp_cache` VALUES (6,1,'ifIndex','5','5','.1.3.6.1.2.1.2.2.1.1.5'); +INSERT INTO `host_snmp_cache` VALUES (6,1,'ifIndex','6','6','.1.3.6.1.2.1.2.2.1.1.6'); +INSERT INTO `host_snmp_cache` VALUES (6,1,'ifIndex','7','7','.1.3.6.1.2.1.2.2.1.1.7'); +INSERT INTO `host_snmp_cache` VALUES (6,1,'ifIndex','8','8','.1.3.6.1.2.1.2.2.1.1.8'); +INSERT INTO `host_snmp_cache` VALUES (6,1,'ifIndex','9','9','.1.3.6.1.2.1.2.2.1.1.9'); +INSERT INTO `host_snmp_cache` VALUES (6,1,'ifIndex','10','10','.1.3.6.1.2.1.2.2.1.1.10'); +INSERT INTO `host_snmp_cache` VALUES (6,1,'ifIndex','11','11','.1.3.6.1.2.1.2.2.1.1.11'); +INSERT INTO `host_snmp_cache` VALUES (6,1,'ifIndex','12','12','.1.3.6.1.2.1.2.2.1.1.12'); +INSERT INTO `host_snmp_cache` VALUES (6,1,'ifIndex','13','13','.1.3.6.1.2.1.2.2.1.1.13'); +INSERT INTO `host_snmp_cache` VALUES (6,1,'ifIndex','14','14','.1.3.6.1.2.1.2.2.1.1.14'); +INSERT INTO `host_snmp_cache` VALUES (6,1,'ifIndex','15','15','.1.3.6.1.2.1.2.2.1.1.15'); +INSERT INTO `host_snmp_cache` VALUES (6,1,'ifIndex','16','16','.1.3.6.1.2.1.2.2.1.1.16'); +INSERT INTO `host_snmp_cache` VALUES (6,1,'ifIndex','17','17','.1.3.6.1.2.1.2.2.1.1.17'); +INSERT INTO `host_snmp_cache` VALUES (6,1,'ifIndex','18','18','.1.3.6.1.2.1.2.2.1.1.18'); +INSERT INTO `host_snmp_cache` VALUES (6,1,'ifIndex','19','19','.1.3.6.1.2.1.2.2.1.1.19'); +INSERT INTO `host_snmp_cache` VALUES (6,1,'ifIndex','20','20','.1.3.6.1.2.1.2.2.1.1.20'); +INSERT INTO `host_snmp_cache` VALUES (6,1,'ifIndex','21','21','.1.3.6.1.2.1.2.2.1.1.21'); +INSERT INTO `host_snmp_cache` VALUES (6,1,'ifIndex','22','22','.1.3.6.1.2.1.2.2.1.1.22'); +INSERT INTO `host_snmp_cache` VALUES (6,1,'ifIndex','23','23','.1.3.6.1.2.1.2.2.1.1.23'); +INSERT INTO `host_snmp_cache` VALUES (6,1,'ifIndex','24','24','.1.3.6.1.2.1.2.2.1.1.24'); +INSERT INTO `host_snmp_cache` VALUES (6,1,'ifIndex','25','25','.1.3.6.1.2.1.2.2.1.1.25'); +INSERT INTO `host_snmp_cache` VALUES (6,1,'ifIndex','26','26','.1.3.6.1.2.1.2.2.1.1.26'); +INSERT INTO `host_snmp_cache` VALUES (6,1,'ifIndex','27','27','.1.3.6.1.2.1.2.2.1.1.27'); +INSERT INTO `host_snmp_cache` VALUES (6,1,'ifIndex','28','28','.1.3.6.1.2.1.2.2.1.1.28'); +INSERT INTO `host_snmp_cache` VALUES (6,1,'ifIndex','29','29','.1.3.6.1.2.1.2.2.1.1.29'); +INSERT INTO `host_snmp_cache` VALUES (6,1,'ifOperStatus','Down','1','.1.3.6.1.2.1.2.2.1.8.1'); +INSERT INTO `host_snmp_cache` VALUES (6,1,'ifOperStatus','Down','2','.1.3.6.1.2.1.2.2.1.8.2'); +INSERT INTO `host_snmp_cache` VALUES (6,1,'ifOperStatus','Down','3','.1.3.6.1.2.1.2.2.1.8.3'); +INSERT INTO `host_snmp_cache` VALUES (6,1,'ifOperStatus','Down','4','.1.3.6.1.2.1.2.2.1.8.4'); +INSERT INTO `host_snmp_cache` VALUES (6,1,'ifOperStatus','Down','5','.1.3.6.1.2.1.2.2.1.8.5'); +INSERT INTO `host_snmp_cache` VALUES (6,1,'ifOperStatus','Down','6','.1.3.6.1.2.1.2.2.1.8.6'); +INSERT INTO `host_snmp_cache` VALUES (6,1,'ifOperStatus','Down','7','.1.3.6.1.2.1.2.2.1.8.7'); +INSERT INTO `host_snmp_cache` VALUES (6,1,'ifOperStatus','Down','8','.1.3.6.1.2.1.2.2.1.8.8'); +INSERT INTO `host_snmp_cache` VALUES (6,1,'ifOperStatus','Down','9','.1.3.6.1.2.1.2.2.1.8.9'); +INSERT INTO `host_snmp_cache` VALUES (6,1,'ifOperStatus','Down','10','.1.3.6.1.2.1.2.2.1.8.10'); +INSERT INTO `host_snmp_cache` VALUES (6,1,'ifOperStatus','Down','11','.1.3.6.1.2.1.2.2.1.8.11'); +INSERT INTO `host_snmp_cache` VALUES (6,1,'ifOperStatus','Down','12','.1.3.6.1.2.1.2.2.1.8.12'); +INSERT INTO `host_snmp_cache` VALUES (6,1,'ifOperStatus','Down','13','.1.3.6.1.2.1.2.2.1.8.13'); +INSERT INTO `host_snmp_cache` VALUES (6,1,'ifOperStatus','Down','14','.1.3.6.1.2.1.2.2.1.8.14'); +INSERT INTO `host_snmp_cache` VALUES (6,1,'ifOperStatus','Down','15','.1.3.6.1.2.1.2.2.1.8.15'); +INSERT INTO `host_snmp_cache` VALUES (6,1,'ifOperStatus','Down','16','.1.3.6.1.2.1.2.2.1.8.16'); +INSERT INTO `host_snmp_cache` VALUES (6,1,'ifOperStatus','Down','17','.1.3.6.1.2.1.2.2.1.8.17'); +INSERT INTO `host_snmp_cache` VALUES (6,1,'ifOperStatus','Down','18','.1.3.6.1.2.1.2.2.1.8.18'); +INSERT INTO `host_snmp_cache` VALUES (6,1,'ifOperStatus','Down','19','.1.3.6.1.2.1.2.2.1.8.19'); +INSERT INTO `host_snmp_cache` VALUES (6,1,'ifOperStatus','Down','20','.1.3.6.1.2.1.2.2.1.8.20'); +INSERT INTO `host_snmp_cache` VALUES (6,1,'ifOperStatus','Down','21','.1.3.6.1.2.1.2.2.1.8.21'); +INSERT INTO `host_snmp_cache` VALUES (6,1,'ifOperStatus','Down','22','.1.3.6.1.2.1.2.2.1.8.22'); +INSERT INTO `host_snmp_cache` VALUES (6,1,'ifOperStatus','Down','23','.1.3.6.1.2.1.2.2.1.8.23'); +INSERT INTO `host_snmp_cache` VALUES (6,1,'ifOperStatus','Down','24','.1.3.6.1.2.1.2.2.1.8.24'); +INSERT INTO `host_snmp_cache` VALUES (6,1,'ifOperStatus','Up','25','.1.3.6.1.2.1.2.2.1.8.25'); +INSERT INTO `host_snmp_cache` VALUES (6,1,'ifOperStatus','Down','26','.1.3.6.1.2.1.2.2.1.8.26'); +INSERT INTO `host_snmp_cache` VALUES (6,1,'ifOperStatus','Up','27','.1.3.6.1.2.1.2.2.1.8.27'); +INSERT INTO `host_snmp_cache` VALUES (6,1,'ifOperStatus','Down','28','.1.3.6.1.2.1.2.2.1.8.28'); +INSERT INTO `host_snmp_cache` VALUES (6,1,'ifOperStatus','Up','29','.1.3.6.1.2.1.2.2.1.8.29'); +INSERT INTO `host_snmp_cache` VALUES (6,1,'ifDescr','FastEthernet0/1','1','.1.3.6.1.2.1.2.2.1.2.1'); +INSERT INTO `host_snmp_cache` VALUES (6,1,'ifDescr','FastEthernet0/2','2','.1.3.6.1.2.1.2.2.1.2.2'); +INSERT INTO `host_snmp_cache` VALUES (6,1,'ifDescr','FastEthernet0/3','3','.1.3.6.1.2.1.2.2.1.2.3'); +INSERT INTO `host_snmp_cache` VALUES (6,1,'ifDescr','FastEthernet0/4','4','.1.3.6.1.2.1.2.2.1.2.4'); +INSERT INTO `host_snmp_cache` VALUES (6,1,'ifDescr','FastEthernet0/5','5','.1.3.6.1.2.1.2.2.1.2.5'); +INSERT INTO `host_snmp_cache` VALUES (6,1,'ifDescr','FastEthernet0/6','6','.1.3.6.1.2.1.2.2.1.2.6'); +INSERT INTO `host_snmp_cache` VALUES (6,1,'ifDescr','FastEthernet0/7','7','.1.3.6.1.2.1.2.2.1.2.7'); +INSERT INTO `host_snmp_cache` VALUES (6,1,'ifDescr','FastEthernet0/8','8','.1.3.6.1.2.1.2.2.1.2.8'); +INSERT INTO `host_snmp_cache` VALUES (6,1,'ifDescr','FastEthernet0/9','9','.1.3.6.1.2.1.2.2.1.2.9'); +INSERT INTO `host_snmp_cache` VALUES (6,1,'ifDescr','FastEthernet0/10','10','.1.3.6.1.2.1.2.2.1.2.10'); +INSERT INTO `host_snmp_cache` VALUES (6,1,'ifDescr','FastEthernet0/11','11','.1.3.6.1.2.1.2.2.1.2.11'); +INSERT INTO `host_snmp_cache` VALUES (6,1,'ifDescr','FastEthernet0/12','12','.1.3.6.1.2.1.2.2.1.2.12'); +INSERT INTO `host_snmp_cache` VALUES (6,1,'ifDescr','FastEthernet0/13','13','.1.3.6.1.2.1.2.2.1.2.13'); +INSERT INTO `host_snmp_cache` VALUES (6,1,'ifDescr','FastEthernet0/14','14','.1.3.6.1.2.1.2.2.1.2.14'); +INSERT INTO `host_snmp_cache` VALUES (6,1,'ifDescr','FastEthernet0/15','15','.1.3.6.1.2.1.2.2.1.2.15'); +INSERT INTO `host_snmp_cache` VALUES (6,1,'ifDescr','FastEthernet0/16','16','.1.3.6.1.2.1.2.2.1.2.16'); +INSERT INTO `host_snmp_cache` VALUES (6,1,'ifDescr','FastEthernet0/17','17','.1.3.6.1.2.1.2.2.1.2.17'); +INSERT INTO `host_snmp_cache` VALUES (6,1,'ifDescr','FastEthernet0/18','18','.1.3.6.1.2.1.2.2.1.2.18'); +INSERT INTO `host_snmp_cache` VALUES (6,1,'ifDescr','FastEthernet0/19','19','.1.3.6.1.2.1.2.2.1.2.19'); +INSERT INTO `host_snmp_cache` VALUES (6,1,'ifDescr','FastEthernet0/20','20','.1.3.6.1.2.1.2.2.1.2.20'); +INSERT INTO `host_snmp_cache` VALUES (6,1,'ifDescr','FastEthernet0/21','21','.1.3.6.1.2.1.2.2.1.2.21'); +INSERT INTO `host_snmp_cache` VALUES (6,1,'ifDescr','FastEthernet0/22','22','.1.3.6.1.2.1.2.2.1.2.22'); +INSERT INTO `host_snmp_cache` VALUES (6,1,'ifDescr','FastEthernet0/23','23','.1.3.6.1.2.1.2.2.1.2.23'); +INSERT INTO `host_snmp_cache` VALUES (6,1,'ifDescr','FastEthernet0/24','24','.1.3.6.1.2.1.2.2.1.2.24'); +INSERT INTO `host_snmp_cache` VALUES (6,1,'ifDescr','GigabitEthernet0/1','25','.1.3.6.1.2.1.2.2.1.2.25'); +INSERT INTO `host_snmp_cache` VALUES (6,1,'ifDescr','GigabitEthernet0/2','26','.1.3.6.1.2.1.2.2.1.2.26'); +INSERT INTO `host_snmp_cache` VALUES (6,1,'ifDescr','Null0','27','.1.3.6.1.2.1.2.2.1.2.27'); +INSERT INTO `host_snmp_cache` VALUES (6,1,'ifDescr','Vlan1','28','.1.3.6.1.2.1.2.2.1.2.28'); +INSERT INTO `host_snmp_cache` VALUES (6,1,'ifDescr','Vlan42','29','.1.3.6.1.2.1.2.2.1.2.29'); +INSERT INTO `host_snmp_cache` VALUES (6,1,'ifName','Fa0/1','1','.1.3.6.1.2.1.31.1.1.1.1.1'); +INSERT INTO `host_snmp_cache` VALUES (6,1,'ifName','Fa0/2','2','.1.3.6.1.2.1.31.1.1.1.1.2'); +INSERT INTO `host_snmp_cache` VALUES (6,1,'ifName','Fa0/3','3','.1.3.6.1.2.1.31.1.1.1.1.3'); +INSERT INTO `host_snmp_cache` VALUES (6,1,'ifName','Fa0/4','4','.1.3.6.1.2.1.31.1.1.1.1.4'); +INSERT INTO `host_snmp_cache` VALUES (6,1,'ifName','Fa0/5','5','.1.3.6.1.2.1.31.1.1.1.1.5'); +INSERT INTO `host_snmp_cache` VALUES (6,1,'ifName','Fa0/6','6','.1.3.6.1.2.1.31.1.1.1.1.6'); +INSERT INTO `host_snmp_cache` VALUES (6,1,'ifName','Fa0/7','7','.1.3.6.1.2.1.31.1.1.1.1.7'); +INSERT INTO `host_snmp_cache` VALUES (6,1,'ifName','Fa0/8','8','.1.3.6.1.2.1.31.1.1.1.1.8'); +INSERT INTO `host_snmp_cache` VALUES (6,1,'ifName','Fa0/9','9','.1.3.6.1.2.1.31.1.1.1.1.9'); +INSERT INTO `host_snmp_cache` VALUES (6,1,'ifName','Fa0/10','10','.1.3.6.1.2.1.31.1.1.1.1.10'); +INSERT INTO `host_snmp_cache` VALUES (6,1,'ifName','Fa0/11','11','.1.3.6.1.2.1.31.1.1.1.1.11'); +INSERT INTO `host_snmp_cache` VALUES (6,1,'ifName','Fa0/12','12','.1.3.6.1.2.1.31.1.1.1.1.12'); +INSERT INTO `host_snmp_cache` VALUES (6,1,'ifName','Fa0/13','13','.1.3.6.1.2.1.31.1.1.1.1.13'); +INSERT INTO `host_snmp_cache` VALUES (6,1,'ifName','Fa0/14','14','.1.3.6.1.2.1.31.1.1.1.1.14'); +INSERT INTO `host_snmp_cache` VALUES (6,1,'ifName','Fa0/15','15','.1.3.6.1.2.1.31.1.1.1.1.15'); +INSERT INTO `host_snmp_cache` VALUES (6,1,'ifName','Fa0/16','16','.1.3.6.1.2.1.31.1.1.1.1.16'); +INSERT INTO `host_snmp_cache` VALUES (6,1,'ifName','Fa0/17','17','.1.3.6.1.2.1.31.1.1.1.1.17'); +INSERT INTO `host_snmp_cache` VALUES (6,1,'ifName','Fa0/18','18','.1.3.6.1.2.1.31.1.1.1.1.18'); +INSERT INTO `host_snmp_cache` VALUES (6,1,'ifName','Fa0/19','19','.1.3.6.1.2.1.31.1.1.1.1.19'); +INSERT INTO `host_snmp_cache` VALUES (6,1,'ifName','Fa0/20','20','.1.3.6.1.2.1.31.1.1.1.1.20'); +INSERT INTO `host_snmp_cache` VALUES (6,1,'ifName','Fa0/21','21','.1.3.6.1.2.1.31.1.1.1.1.21'); +INSERT INTO `host_snmp_cache` VALUES (6,1,'ifName','Fa0/22','22','.1.3.6.1.2.1.31.1.1.1.1.22'); +INSERT INTO `host_snmp_cache` VALUES (6,1,'ifName','Fa0/23','23','.1.3.6.1.2.1.31.1.1.1.1.23'); +INSERT INTO `host_snmp_cache` VALUES (6,1,'ifName','Fa0/24','24','.1.3.6.1.2.1.31.1.1.1.1.24'); +INSERT INTO `host_snmp_cache` VALUES (6,1,'ifName','Gi0/1','25','.1.3.6.1.2.1.31.1.1.1.1.25'); +INSERT INTO `host_snmp_cache` VALUES (6,1,'ifName','Gi0/2','26','.1.3.6.1.2.1.31.1.1.1.1.26'); +INSERT INTO `host_snmp_cache` VALUES (6,1,'ifName','Nu0','27','.1.3.6.1.2.1.31.1.1.1.1.27'); +INSERT INTO `host_snmp_cache` VALUES (6,1,'ifName','Vl1','28','.1.3.6.1.2.1.31.1.1.1.1.28'); +INSERT INTO `host_snmp_cache` VALUES (6,1,'ifName','Vl42','29','.1.3.6.1.2.1.31.1.1.1.1.29'); +INSERT INTO `host_snmp_cache` VALUES (6,1,'ifAlias','','1','.1.3.6.1.2.1.31.1.1.1.18.1'); +INSERT INTO `host_snmp_cache` VALUES (6,1,'ifAlias','','2','.1.3.6.1.2.1.31.1.1.1.18.2'); +INSERT INTO `host_snmp_cache` VALUES (6,1,'ifAlias','','3','.1.3.6.1.2.1.31.1.1.1.18.3'); +INSERT INTO `host_snmp_cache` VALUES (6,1,'ifAlias','','4','.1.3.6.1.2.1.31.1.1.1.18.4'); +INSERT INTO `host_snmp_cache` VALUES (6,1,'ifAlias','','5','.1.3.6.1.2.1.31.1.1.1.18.5'); +INSERT INTO `host_snmp_cache` VALUES (6,1,'ifAlias','','6','.1.3.6.1.2.1.31.1.1.1.18.6'); +INSERT INTO `host_snmp_cache` VALUES (6,1,'ifAlias','','7','.1.3.6.1.2.1.31.1.1.1.18.7'); +INSERT INTO `host_snmp_cache` VALUES (6,1,'ifAlias','','8','.1.3.6.1.2.1.31.1.1.1.18.8'); +INSERT INTO `host_snmp_cache` VALUES (6,1,'ifAlias','','9','.1.3.6.1.2.1.31.1.1.1.18.9'); +INSERT INTO `host_snmp_cache` VALUES (6,1,'ifAlias','','10','.1.3.6.1.2.1.31.1.1.1.18.10'); +INSERT INTO `host_snmp_cache` VALUES (6,1,'ifAlias','','11','.1.3.6.1.2.1.31.1.1.1.18.11'); +INSERT INTO `host_snmp_cache` VALUES (5,6,'dskMount','/','/dev/hda1',''); +INSERT INTO `host_snmp_cache` VALUES (5,6,'dskDevice','/dev/hda1','/dev/hda1',''); +INSERT INTO `host_snmp_cache` VALUES (7,1,'ifAlias','','24','.1.3.6.1.2.1.31.1.1.1.18.24'); +INSERT INTO `host_snmp_cache` VALUES (7,1,'ifAlias','','19','.1.3.6.1.2.1.31.1.1.1.18.19'); +INSERT INTO `host_snmp_cache` VALUES (7,1,'ifAlias','','8','.1.3.6.1.2.1.31.1.1.1.18.8'); +INSERT INTO `host_snmp_cache` VALUES (7,1,'ifAlias','','7','.1.3.6.1.2.1.31.1.1.1.18.7'); +INSERT INTO `host_snmp_cache` VALUES (7,1,'ifAlias','','6','.1.3.6.1.2.1.31.1.1.1.18.6'); +INSERT INTO `host_snmp_cache` VALUES (7,1,'ifAlias','','2','.1.3.6.1.2.1.31.1.1.1.18.2'); +INSERT INTO `host_snmp_cache` VALUES (7,1,'ifAlias','','3','.1.3.6.1.2.1.31.1.1.1.18.3'); +INSERT INTO `host_snmp_cache` VALUES (7,1,'ifAlias','','4','.1.3.6.1.2.1.31.1.1.1.18.4'); +INSERT INTO `host_snmp_cache` VALUES (7,1,'ifAlias','','5','.1.3.6.1.2.1.31.1.1.1.18.5'); +INSERT INTO `host_snmp_cache` VALUES (7,1,'ifAlias','','23','.1.3.6.1.2.1.31.1.1.1.18.23'); +INSERT INTO `host_snmp_cache` VALUES (7,1,'ifAlias','','22','.1.3.6.1.2.1.31.1.1.1.18.22'); +INSERT INTO `host_snmp_cache` VALUES (7,1,'ifAlias','','21','.1.3.6.1.2.1.31.1.1.1.18.21'); +INSERT INTO `host_snmp_cache` VALUES (7,1,'ifAlias','','20','.1.3.6.1.2.1.31.1.1.1.18.20'); +INSERT INTO `host_snmp_cache` VALUES (7,1,'ifAlias','','18','.1.3.6.1.2.1.31.1.1.1.18.18'); +INSERT INTO `host_snmp_cache` VALUES (7,1,'ifAlias','','17','.1.3.6.1.2.1.31.1.1.1.18.17'); +INSERT INTO `host_snmp_cache` VALUES (7,1,'ifAlias','','16','.1.3.6.1.2.1.31.1.1.1.18.16'); +INSERT INTO `host_snmp_cache` VALUES (7,1,'ifAlias','','15','.1.3.6.1.2.1.31.1.1.1.18.15'); +INSERT INTO `host_snmp_cache` VALUES (7,1,'ifAlias','','14','.1.3.6.1.2.1.31.1.1.1.18.14'); +INSERT INTO `host_snmp_cache` VALUES (7,1,'ifAlias','','13','.1.3.6.1.2.1.31.1.1.1.18.13'); +INSERT INTO `host_snmp_cache` VALUES (7,1,'ifAlias','','12','.1.3.6.1.2.1.31.1.1.1.18.12'); +INSERT INTO `host_snmp_cache` VALUES (7,1,'ifAlias','','11','.1.3.6.1.2.1.31.1.1.1.18.11'); +INSERT INTO `host_snmp_cache` VALUES (7,1,'ifAlias','','10','.1.3.6.1.2.1.31.1.1.1.18.10'); +INSERT INTO `host_snmp_cache` VALUES (7,1,'ifAlias','','9','.1.3.6.1.2.1.31.1.1.1.18.9'); +INSERT INTO `host_snmp_cache` VALUES (7,1,'ifName','Fa0/3','3','.1.3.6.1.2.1.31.1.1.1.1.3'); +INSERT INTO `host_snmp_cache` VALUES (7,1,'ifDescr','FastEthernet0/17','17','.1.3.6.1.2.1.2.2.1.2.17'); +INSERT INTO `host_snmp_cache` VALUES (7,1,'ifDescr','FastEthernet0/16','16','.1.3.6.1.2.1.2.2.1.2.16'); +INSERT INTO `host_snmp_cache` VALUES (7,1,'ifDescr','FastEthernet0/15','15','.1.3.6.1.2.1.2.2.1.2.15'); +INSERT INTO `host_snmp_cache` VALUES (7,1,'ifDescr','FastEthernet0/14','14','.1.3.6.1.2.1.2.2.1.2.14'); +INSERT INTO `host_snmp_cache` VALUES (7,1,'ifName','Fa0/2','2','.1.3.6.1.2.1.31.1.1.1.1.2'); +INSERT INTO `host_snmp_cache` VALUES (7,1,'ifName','Fa0/1','1','.1.3.6.1.2.1.31.1.1.1.1.1'); +INSERT INTO `host_snmp_cache` VALUES (7,1,'ifDescr','Vlan42','29','.1.3.6.1.2.1.2.2.1.2.29'); +INSERT INTO `host_snmp_cache` VALUES (7,1,'ifDescr','Vlan1','28','.1.3.6.1.2.1.2.2.1.2.28'); +INSERT INTO `host_snmp_cache` VALUES (7,1,'ifDescr','Null0','27','.1.3.6.1.2.1.2.2.1.2.27'); +INSERT INTO `host_snmp_cache` VALUES (7,1,'ifDescr','GigabitEthernet0/2','26','.1.3.6.1.2.1.2.2.1.2.26'); +INSERT INTO `host_snmp_cache` VALUES (7,1,'ifDescr','GigabitEthernet0/1','25','.1.3.6.1.2.1.2.2.1.2.25'); +INSERT INTO `host_snmp_cache` VALUES (7,1,'ifDescr','FastEthernet0/24','24','.1.3.6.1.2.1.2.2.1.2.24'); +INSERT INTO `host_snmp_cache` VALUES (7,1,'ifDescr','FastEthernet0/23','23','.1.3.6.1.2.1.2.2.1.2.23'); +INSERT INTO `host_snmp_cache` VALUES (7,1,'ifDescr','FastEthernet0/22','22','.1.3.6.1.2.1.2.2.1.2.22'); +INSERT INTO `host_snmp_cache` VALUES (7,1,'ifDescr','FastEthernet0/21','21','.1.3.6.1.2.1.2.2.1.2.21'); +INSERT INTO `host_snmp_cache` VALUES (7,1,'ifDescr','FastEthernet0/20','20','.1.3.6.1.2.1.2.2.1.2.20'); +INSERT INTO `host_snmp_cache` VALUES (7,1,'ifDescr','FastEthernet0/18','18','.1.3.6.1.2.1.2.2.1.2.18'); +INSERT INTO `host_snmp_cache` VALUES (7,1,'ifDescr','FastEthernet0/19','19','.1.3.6.1.2.1.2.2.1.2.19'); +INSERT INTO `host_snmp_cache` VALUES (7,1,'ifType','ethernetCsmacd(6)','7','.1.3.6.1.2.1.2.2.1.3.7'); +INSERT INTO `host_snmp_cache` VALUES (7,1,'ifType','ethernetCsmacd(6)','6','.1.3.6.1.2.1.2.2.1.3.6'); +INSERT INTO `host_snmp_cache` VALUES (7,1,'ifType','ethernetCsmacd(6)','5','.1.3.6.1.2.1.2.2.1.3.5'); +INSERT INTO `host_snmp_cache` VALUES (7,1,'ifType','ethernetCsmacd(6)','4','.1.3.6.1.2.1.2.2.1.3.4'); +INSERT INTO `host_snmp_cache` VALUES (7,1,'ifType','ethernetCsmacd(6)','1','.1.3.6.1.2.1.2.2.1.3.1'); +INSERT INTO `host_snmp_cache` VALUES (7,1,'ifType','ethernetCsmacd(6)','2','.1.3.6.1.2.1.2.2.1.3.2'); +INSERT INTO `host_snmp_cache` VALUES (7,1,'ifType','ethernetCsmacd(6)','3','.1.3.6.1.2.1.2.2.1.3.3'); +INSERT INTO `host_snmp_cache` VALUES (7,1,'ifType','ethernetCsmacd(6)','22','.1.3.6.1.2.1.2.2.1.3.22'); +INSERT INTO `host_snmp_cache` VALUES (7,1,'ifType','ethernetCsmacd(6)','21','.1.3.6.1.2.1.2.2.1.3.21'); +INSERT INTO `host_snmp_cache` VALUES (7,1,'ifType','ethernetCsmacd(6)','20','.1.3.6.1.2.1.2.2.1.3.20'); +INSERT INTO `host_snmp_cache` VALUES (7,1,'ifType','ethernetCsmacd(6)','19','.1.3.6.1.2.1.2.2.1.3.19'); +INSERT INTO `host_snmp_cache` VALUES (7,1,'ifType','ethernetCsmacd(6)','18','.1.3.6.1.2.1.2.2.1.3.18'); +INSERT INTO `host_snmp_cache` VALUES (7,1,'ifType','ethernetCsmacd(6)','17','.1.3.6.1.2.1.2.2.1.3.17'); +INSERT INTO `host_snmp_cache` VALUES (7,1,'ifType','ethernetCsmacd(6)','16','.1.3.6.1.2.1.2.2.1.3.16'); +INSERT INTO `host_snmp_cache` VALUES (7,1,'ifType','ethernetCsmacd(6)','15','.1.3.6.1.2.1.2.2.1.3.15'); +INSERT INTO `host_snmp_cache` VALUES (7,1,'ifType','ethernetCsmacd(6)','14','.1.3.6.1.2.1.2.2.1.3.14'); +INSERT INTO `host_snmp_cache` VALUES (7,1,'ifType','ethernetCsmacd(6)','13','.1.3.6.1.2.1.2.2.1.3.13'); +INSERT INTO `host_snmp_cache` VALUES (7,1,'ifType','ethernetCsmacd(6)','12','.1.3.6.1.2.1.2.2.1.3.12'); +INSERT INTO `host_snmp_cache` VALUES (7,1,'ifType','ethernetCsmacd(6)','11','.1.3.6.1.2.1.2.2.1.3.11'); +INSERT INTO `host_snmp_cache` VALUES (7,1,'ifType','ethernetCsmacd(6)','10','.1.3.6.1.2.1.2.2.1.3.10'); +INSERT INTO `host_snmp_cache` VALUES (7,1,'ifType','ethernetCsmacd(6)','9','.1.3.6.1.2.1.2.2.1.3.9'); +INSERT INTO `host_snmp_cache` VALUES (7,1,'ifType','ethernetCsmacd(6)','8','.1.3.6.1.2.1.2.2.1.3.8'); +INSERT INTO `host_snmp_cache` VALUES (7,1,'ifName','Vl42','29','.1.3.6.1.2.1.31.1.1.1.1.29'); +INSERT INTO `host_snmp_cache` VALUES (7,1,'ifName','Fa0/21','21','.1.3.6.1.2.1.31.1.1.1.1.21'); +INSERT INTO `host_snmp_cache` VALUES (7,1,'ifName','Fa0/10','10','.1.3.6.1.2.1.31.1.1.1.1.10'); +INSERT INTO `host_snmp_cache` VALUES (7,1,'ifName','Fa0/9','9','.1.3.6.1.2.1.31.1.1.1.1.9'); +INSERT INTO `host_snmp_cache` VALUES (7,1,'ifName','Fa0/8','8','.1.3.6.1.2.1.31.1.1.1.1.8'); +INSERT INTO `host_snmp_cache` VALUES (7,1,'ifName','Fa0/7','7','.1.3.6.1.2.1.31.1.1.1.1.7'); +INSERT INTO `host_snmp_cache` VALUES (7,1,'ifName','Fa0/6','6','.1.3.6.1.2.1.31.1.1.1.1.6'); +INSERT INTO `host_snmp_cache` VALUES (7,1,'ifName','Fa0/4','4','.1.3.6.1.2.1.31.1.1.1.1.4'); +INSERT INTO `host_snmp_cache` VALUES (7,1,'ifName','Fa0/5','5','.1.3.6.1.2.1.31.1.1.1.1.5'); +INSERT INTO `host_snmp_cache` VALUES (7,1,'ifName','Vl1','28','.1.3.6.1.2.1.31.1.1.1.1.28'); +INSERT INTO `host_snmp_cache` VALUES (7,1,'ifName','Nu0','27','.1.3.6.1.2.1.31.1.1.1.1.27'); +INSERT INTO `host_snmp_cache` VALUES (7,1,'ifName','Gi0/2','26','.1.3.6.1.2.1.31.1.1.1.1.26'); +INSERT INTO `host_snmp_cache` VALUES (7,1,'ifName','Gi0/1','25','.1.3.6.1.2.1.31.1.1.1.1.25'); +INSERT INTO `host_snmp_cache` VALUES (7,1,'ifName','Fa0/24','24','.1.3.6.1.2.1.31.1.1.1.1.24'); +INSERT INTO `host_snmp_cache` VALUES (7,1,'ifName','Fa0/23','23','.1.3.6.1.2.1.31.1.1.1.1.23'); +INSERT INTO `host_snmp_cache` VALUES (7,1,'ifName','Fa0/22','22','.1.3.6.1.2.1.31.1.1.1.1.22'); +INSERT INTO `host_snmp_cache` VALUES (7,1,'ifName','Fa0/20','20','.1.3.6.1.2.1.31.1.1.1.1.20'); +INSERT INTO `host_snmp_cache` VALUES (7,1,'ifName','Fa0/19','19','.1.3.6.1.2.1.31.1.1.1.1.19'); +INSERT INTO `host_snmp_cache` VALUES (7,1,'ifName','Fa0/18','18','.1.3.6.1.2.1.31.1.1.1.1.18'); +INSERT INTO `host_snmp_cache` VALUES (7,1,'ifName','Fa0/17','17','.1.3.6.1.2.1.31.1.1.1.1.17'); +INSERT INTO `host_snmp_cache` VALUES (7,1,'ifName','Fa0/16','16','.1.3.6.1.2.1.31.1.1.1.1.16'); +INSERT INTO `host_snmp_cache` VALUES (7,1,'ifName','Fa0/15','15','.1.3.6.1.2.1.31.1.1.1.1.15'); +INSERT INTO `host_snmp_cache` VALUES (7,1,'ifName','Fa0/14','14','.1.3.6.1.2.1.31.1.1.1.1.14'); +INSERT INTO `host_snmp_cache` VALUES (7,1,'ifName','Fa0/13','13','.1.3.6.1.2.1.31.1.1.1.1.13'); +INSERT INTO `host_snmp_cache` VALUES (7,1,'ifName','Fa0/11','11','.1.3.6.1.2.1.31.1.1.1.1.11'); +INSERT INTO `host_snmp_cache` VALUES (7,1,'ifName','Fa0/12','12','.1.3.6.1.2.1.31.1.1.1.1.12'); +INSERT INTO `host_snmp_cache` VALUES (7,1,'ifType','ethernetCsmacd(6)','26','.1.3.6.1.2.1.2.2.1.3.26'); +INSERT INTO `host_snmp_cache` VALUES (7,1,'ifType','ethernetCsmacd(6)','25','.1.3.6.1.2.1.2.2.1.3.25'); +INSERT INTO `host_snmp_cache` VALUES (7,1,'ifType','ethernetCsmacd(6)','24','.1.3.6.1.2.1.2.2.1.3.24'); +INSERT INTO `host_snmp_cache` VALUES (7,1,'ifType','ethernetCsmacd(6)','23','.1.3.6.1.2.1.2.2.1.3.23'); +INSERT INTO `host_snmp_cache` VALUES (7,1,'ifSpeed','10000000','7','.1.3.6.1.2.1.2.2.1.5.7'); +INSERT INTO `host_snmp_cache` VALUES (7,1,'ifSpeed','10000000','6','.1.3.6.1.2.1.2.2.1.5.6'); +INSERT INTO `host_snmp_cache` VALUES (7,1,'ifSpeed','10000000','5','.1.3.6.1.2.1.2.2.1.5.5'); +INSERT INTO `host_snmp_cache` VALUES (7,1,'ifSpeed','10000000','4','.1.3.6.1.2.1.2.2.1.5.4'); +INSERT INTO `host_snmp_cache` VALUES (7,1,'ifSpeed','10000000','3','.1.3.6.1.2.1.2.2.1.5.3'); +INSERT INTO `host_snmp_cache` VALUES (7,1,'ifSpeed','10000000','2','.1.3.6.1.2.1.2.2.1.5.2'); +INSERT INTO `host_snmp_cache` VALUES (7,1,'ifSpeed','100000000','1','.1.3.6.1.2.1.2.2.1.5.1'); +INSERT INTO `host_snmp_cache` VALUES (7,1,'ifType','propVirtual(53)','29','.1.3.6.1.2.1.2.2.1.3.29'); +INSERT INTO `host_snmp_cache` VALUES (7,1,'ifType','propVirtual(53)','28','.1.3.6.1.2.1.2.2.1.3.28'); +INSERT INTO `host_snmp_cache` VALUES (7,1,'ifType','other(1)','27','.1.3.6.1.2.1.2.2.1.3.27'); +INSERT INTO `host_snmp_cache` VALUES (7,1,'ifOperStatus','Down','17','.1.3.6.1.2.1.2.2.1.8.17'); +INSERT INTO `host_snmp_cache` VALUES (7,1,'ifOperStatus','Down','16','.1.3.6.1.2.1.2.2.1.8.16'); +INSERT INTO `host_snmp_cache` VALUES (7,1,'ifOperStatus','Down','15','.1.3.6.1.2.1.2.2.1.8.15'); +INSERT INTO `host_snmp_cache` VALUES (7,1,'ifOperStatus','Down','14','.1.3.6.1.2.1.2.2.1.8.14'); +INSERT INTO `host_snmp_cache` VALUES (7,1,'ifOperStatus','Up','13','.1.3.6.1.2.1.2.2.1.8.13'); +INSERT INTO `host_snmp_cache` VALUES (7,1,'ifOperStatus','Down','12','.1.3.6.1.2.1.2.2.1.8.12'); +INSERT INTO `host_snmp_cache` VALUES (7,1,'ifOperStatus','Down','11','.1.3.6.1.2.1.2.2.1.8.11'); +INSERT INTO `host_snmp_cache` VALUES (7,1,'ifOperStatus','Down','10','.1.3.6.1.2.1.2.2.1.8.10'); +INSERT INTO `host_snmp_cache` VALUES (7,1,'ifIndex','1','1','.1.3.6.1.2.1.2.2.1.1.1'); +INSERT INTO `host_snmp_cache` VALUES (7,1,'ifIndex','2','2','.1.3.6.1.2.1.2.2.1.1.2'); +INSERT INTO `host_snmp_cache` VALUES (7,1,'ifIndex','3','3','.1.3.6.1.2.1.2.2.1.1.3'); +INSERT INTO `host_snmp_cache` VALUES (7,1,'ifIndex','4','4','.1.3.6.1.2.1.2.2.1.1.4'); +INSERT INTO `host_snmp_cache` VALUES (7,1,'ifIndex','5','5','.1.3.6.1.2.1.2.2.1.1.5'); +INSERT INTO `host_snmp_cache` VALUES (7,1,'ifIndex','6','6','.1.3.6.1.2.1.2.2.1.1.6'); +INSERT INTO `host_snmp_cache` VALUES (7,1,'ifIndex','7','7','.1.3.6.1.2.1.2.2.1.1.7'); +INSERT INTO `host_snmp_cache` VALUES (7,1,'ifIndex','8','8','.1.3.6.1.2.1.2.2.1.1.8'); +INSERT INTO `host_snmp_cache` VALUES (7,1,'ifIndex','9','9','.1.3.6.1.2.1.2.2.1.1.9'); +INSERT INTO `host_snmp_cache` VALUES (7,1,'ifIndex','10','10','.1.3.6.1.2.1.2.2.1.1.10'); +INSERT INTO `host_snmp_cache` VALUES (7,1,'ifIndex','11','11','.1.3.6.1.2.1.2.2.1.1.11'); +INSERT INTO `host_snmp_cache` VALUES (7,1,'ifIndex','12','12','.1.3.6.1.2.1.2.2.1.1.12'); +INSERT INTO `host_snmp_cache` VALUES (7,1,'ifIndex','13','13','.1.3.6.1.2.1.2.2.1.1.13'); +INSERT INTO `host_snmp_cache` VALUES (7,1,'ifIndex','14','14','.1.3.6.1.2.1.2.2.1.1.14'); +INSERT INTO `host_snmp_cache` VALUES (7,1,'ifIndex','15','15','.1.3.6.1.2.1.2.2.1.1.15'); +INSERT INTO `host_snmp_cache` VALUES (7,1,'ifIndex','16','16','.1.3.6.1.2.1.2.2.1.1.16'); +INSERT INTO `host_snmp_cache` VALUES (7,1,'ifIndex','17','17','.1.3.6.1.2.1.2.2.1.1.17'); +INSERT INTO `host_snmp_cache` VALUES (7,1,'ifIndex','18','18','.1.3.6.1.2.1.2.2.1.1.18'); +INSERT INTO `host_snmp_cache` VALUES (7,1,'ifIndex','19','19','.1.3.6.1.2.1.2.2.1.1.19'); +INSERT INTO `host_snmp_cache` VALUES (7,1,'ifIndex','20','20','.1.3.6.1.2.1.2.2.1.1.20'); +INSERT INTO `host_snmp_cache` VALUES (7,1,'ifIndex','21','21','.1.3.6.1.2.1.2.2.1.1.21'); +INSERT INTO `host_snmp_cache` VALUES (7,1,'ifIndex','22','22','.1.3.6.1.2.1.2.2.1.1.22'); +INSERT INTO `host_snmp_cache` VALUES (7,1,'ifIndex','23','23','.1.3.6.1.2.1.2.2.1.1.23'); +INSERT INTO `host_snmp_cache` VALUES (7,1,'ifIndex','24','24','.1.3.6.1.2.1.2.2.1.1.24'); +INSERT INTO `host_snmp_cache` VALUES (7,1,'ifIndex','25','25','.1.3.6.1.2.1.2.2.1.1.25'); +INSERT INTO `host_snmp_cache` VALUES (7,1,'ifIndex','26','26','.1.3.6.1.2.1.2.2.1.1.26'); +INSERT INTO `host_snmp_cache` VALUES (7,1,'ifIndex','27','27','.1.3.6.1.2.1.2.2.1.1.27'); +INSERT INTO `host_snmp_cache` VALUES (7,1,'ifIndex','28','28','.1.3.6.1.2.1.2.2.1.1.28'); +INSERT INTO `host_snmp_cache` VALUES (7,1,'ifIndex','29','29','.1.3.6.1.2.1.2.2.1.1.29'); +INSERT INTO `host_snmp_cache` VALUES (7,1,'ifOperStatus','Down','1','.1.3.6.1.2.1.2.2.1.8.1'); +INSERT INTO `host_snmp_cache` VALUES (7,1,'ifOperStatus','Down','2','.1.3.6.1.2.1.2.2.1.8.2'); +INSERT INTO `host_snmp_cache` VALUES (7,1,'ifOperStatus','Down','3','.1.3.6.1.2.1.2.2.1.8.3'); +INSERT INTO `host_snmp_cache` VALUES (7,1,'ifOperStatus','Down','4','.1.3.6.1.2.1.2.2.1.8.4'); +INSERT INTO `host_snmp_cache` VALUES (7,1,'ifOperStatus','Down','5','.1.3.6.1.2.1.2.2.1.8.5'); +INSERT INTO `host_snmp_cache` VALUES (7,1,'ifOperStatus','Down','6','.1.3.6.1.2.1.2.2.1.8.6'); +INSERT INTO `host_snmp_cache` VALUES (7,1,'ifOperStatus','Down','7','.1.3.6.1.2.1.2.2.1.8.7'); +INSERT INTO `host_snmp_cache` VALUES (7,1,'ifOperStatus','Down','8','.1.3.6.1.2.1.2.2.1.8.8'); +INSERT INTO `host_snmp_cache` VALUES (7,1,'ifOperStatus','Up','9','.1.3.6.1.2.1.2.2.1.8.9'); +INSERT INTO `host_snmp_cache` VALUES (7,1,'ifDescr','FastEthernet0/13','13','.1.3.6.1.2.1.2.2.1.2.13'); +INSERT INTO `host_snmp_cache` VALUES (7,1,'ifDescr','FastEthernet0/12','12','.1.3.6.1.2.1.2.2.1.2.12'); +INSERT INTO `host_snmp_cache` VALUES (7,1,'ifDescr','FastEthernet0/11','11','.1.3.6.1.2.1.2.2.1.2.11'); +INSERT INTO `host_snmp_cache` VALUES (7,1,'ifDescr','FastEthernet0/10','10','.1.3.6.1.2.1.2.2.1.2.10'); +INSERT INTO `host_snmp_cache` VALUES (7,1,'ifOperStatus','Down','18','.1.3.6.1.2.1.2.2.1.8.18'); +INSERT INTO `host_snmp_cache` VALUES (7,1,'ifOperStatus','Down','19','.1.3.6.1.2.1.2.2.1.8.19'); +INSERT INTO `host_snmp_cache` VALUES (7,1,'ifOperStatus','Down','20','.1.3.6.1.2.1.2.2.1.8.20'); +INSERT INTO `host_snmp_cache` VALUES (7,1,'ifOperStatus','Down','21','.1.3.6.1.2.1.2.2.1.8.21'); +INSERT INTO `host_snmp_cache` VALUES (7,1,'ifOperStatus','Down','22','.1.3.6.1.2.1.2.2.1.8.22'); +INSERT INTO `host_snmp_cache` VALUES (7,1,'ifOperStatus','Down','23','.1.3.6.1.2.1.2.2.1.8.23'); +INSERT INTO `host_snmp_cache` VALUES (7,1,'ifOperStatus','Up','24','.1.3.6.1.2.1.2.2.1.8.24'); +INSERT INTO `host_snmp_cache` VALUES (7,1,'ifOperStatus','Up','25','.1.3.6.1.2.1.2.2.1.8.25'); +INSERT INTO `host_snmp_cache` VALUES (7,1,'ifOperStatus','Down','26','.1.3.6.1.2.1.2.2.1.8.26'); +INSERT INTO `host_snmp_cache` VALUES (7,1,'ifOperStatus','Up','27','.1.3.6.1.2.1.2.2.1.8.27'); +INSERT INTO `host_snmp_cache` VALUES (7,1,'ifOperStatus','Down','28','.1.3.6.1.2.1.2.2.1.8.28'); +INSERT INTO `host_snmp_cache` VALUES (7,1,'ifOperStatus','Up','29','.1.3.6.1.2.1.2.2.1.8.29'); +INSERT INTO `host_snmp_cache` VALUES (7,1,'ifDescr','FastEthernet0/1','1','.1.3.6.1.2.1.2.2.1.2.1'); +INSERT INTO `host_snmp_cache` VALUES (7,1,'ifDescr','FastEthernet0/2','2','.1.3.6.1.2.1.2.2.1.2.2'); +INSERT INTO `host_snmp_cache` VALUES (7,1,'ifDescr','FastEthernet0/3','3','.1.3.6.1.2.1.2.2.1.2.3'); +INSERT INTO `host_snmp_cache` VALUES (7,1,'ifDescr','FastEthernet0/4','4','.1.3.6.1.2.1.2.2.1.2.4'); +INSERT INTO `host_snmp_cache` VALUES (7,1,'ifDescr','FastEthernet0/5','5','.1.3.6.1.2.1.2.2.1.2.5'); +INSERT INTO `host_snmp_cache` VALUES (7,1,'ifDescr','FastEthernet0/6','6','.1.3.6.1.2.1.2.2.1.2.6'); +INSERT INTO `host_snmp_cache` VALUES (7,1,'ifDescr','FastEthernet0/7','7','.1.3.6.1.2.1.2.2.1.2.7'); +INSERT INTO `host_snmp_cache` VALUES (7,1,'ifDescr','FastEthernet0/8','8','.1.3.6.1.2.1.2.2.1.2.8'); +INSERT INTO `host_snmp_cache` VALUES (7,1,'ifDescr','FastEthernet0/9','9','.1.3.6.1.2.1.2.2.1.2.9'); +INSERT INTO `host_snmp_cache` VALUES (7,1,'ifAlias','','29','.1.3.6.1.2.1.31.1.1.1.18.29'); +INSERT INTO `host_snmp_cache` VALUES (7,1,'ifAlias','','28','.1.3.6.1.2.1.31.1.1.1.18.28'); +INSERT INTO `host_snmp_cache` VALUES (7,1,'ifAlias','','27','.1.3.6.1.2.1.31.1.1.1.18.27'); +INSERT INTO `host_snmp_cache` VALUES (7,1,'ifAlias','','26','.1.3.6.1.2.1.31.1.1.1.18.26'); +INSERT INTO `host_snmp_cache` VALUES (7,1,'ifAlias','','25','.1.3.6.1.2.1.31.1.1.1.18.25'); +INSERT INTO `host_snmp_cache` VALUES (7,1,'ifAlias','','1','.1.3.6.1.2.1.31.1.1.1.18.1'); +INSERT INTO `host_snmp_cache` VALUES (8,1,'ifIndex','1','1','.1.3.6.1.2.1.2.2.1.1.1'); +INSERT INTO `host_snmp_cache` VALUES (8,1,'ifIndex','2','2','.1.3.6.1.2.1.2.2.1.1.2'); +INSERT INTO `host_snmp_cache` VALUES (8,1,'ifIndex','3','3','.1.3.6.1.2.1.2.2.1.1.3'); +INSERT INTO `host_snmp_cache` VALUES (8,1,'ifIndex','4','4','.1.3.6.1.2.1.2.2.1.1.4'); +INSERT INTO `host_snmp_cache` VALUES (8,1,'ifIndex','5','5','.1.3.6.1.2.1.2.2.1.1.5'); +INSERT INTO `host_snmp_cache` VALUES (8,1,'ifIndex','6','6','.1.3.6.1.2.1.2.2.1.1.6'); +INSERT INTO `host_snmp_cache` VALUES (8,1,'ifIndex','7','7','.1.3.6.1.2.1.2.2.1.1.7'); +INSERT INTO `host_snmp_cache` VALUES (8,1,'ifIndex','8','8','.1.3.6.1.2.1.2.2.1.1.8'); +INSERT INTO `host_snmp_cache` VALUES (8,1,'ifIndex','9','9','.1.3.6.1.2.1.2.2.1.1.9'); +INSERT INTO `host_snmp_cache` VALUES (8,1,'ifIndex','10','10','.1.3.6.1.2.1.2.2.1.1.10'); +INSERT INTO `host_snmp_cache` VALUES (8,1,'ifIndex','11','11','.1.3.6.1.2.1.2.2.1.1.11'); +INSERT INTO `host_snmp_cache` VALUES (8,1,'ifIndex','12','12','.1.3.6.1.2.1.2.2.1.1.12'); +INSERT INTO `host_snmp_cache` VALUES (8,1,'ifIndex','13','13','.1.3.6.1.2.1.2.2.1.1.13'); +INSERT INTO `host_snmp_cache` VALUES (8,1,'ifIndex','14','14','.1.3.6.1.2.1.2.2.1.1.14'); +INSERT INTO `host_snmp_cache` VALUES (8,1,'ifIndex','15','15','.1.3.6.1.2.1.2.2.1.1.15'); +INSERT INTO `host_snmp_cache` VALUES (8,1,'ifIndex','16','16','.1.3.6.1.2.1.2.2.1.1.16'); +INSERT INTO `host_snmp_cache` VALUES (8,1,'ifIndex','17','17','.1.3.6.1.2.1.2.2.1.1.17'); +INSERT INTO `host_snmp_cache` VALUES (8,1,'ifIndex','18','18','.1.3.6.1.2.1.2.2.1.1.18'); +INSERT INTO `host_snmp_cache` VALUES (8,1,'ifIndex','19','19','.1.3.6.1.2.1.2.2.1.1.19'); +INSERT INTO `host_snmp_cache` VALUES (8,1,'ifIndex','20','20','.1.3.6.1.2.1.2.2.1.1.20'); +INSERT INTO `host_snmp_cache` VALUES (8,1,'ifIndex','21','21','.1.3.6.1.2.1.2.2.1.1.21'); +INSERT INTO `host_snmp_cache` VALUES (8,1,'ifIndex','22','22','.1.3.6.1.2.1.2.2.1.1.22'); +INSERT INTO `host_snmp_cache` VALUES (8,1,'ifIndex','23','23','.1.3.6.1.2.1.2.2.1.1.23'); +INSERT INTO `host_snmp_cache` VALUES (8,1,'ifIndex','24','24','.1.3.6.1.2.1.2.2.1.1.24'); +INSERT INTO `host_snmp_cache` VALUES (8,1,'ifIndex','25','25','.1.3.6.1.2.1.2.2.1.1.25'); +INSERT INTO `host_snmp_cache` VALUES (8,1,'ifIndex','26','26','.1.3.6.1.2.1.2.2.1.1.26'); +INSERT INTO `host_snmp_cache` VALUES (8,1,'ifIndex','27','27','.1.3.6.1.2.1.2.2.1.1.27'); +INSERT INTO `host_snmp_cache` VALUES (8,1,'ifIndex','28','28','.1.3.6.1.2.1.2.2.1.1.28'); +INSERT INTO `host_snmp_cache` VALUES (8,1,'ifIndex','29','29','.1.3.6.1.2.1.2.2.1.1.29'); +INSERT INTO `host_snmp_cache` VALUES (8,1,'ifIndex','30','30','.1.3.6.1.2.1.2.2.1.1.30'); +INSERT INTO `host_snmp_cache` VALUES (8,1,'ifIndex','31','31','.1.3.6.1.2.1.2.2.1.1.31'); +INSERT INTO `host_snmp_cache` VALUES (8,1,'ifIndex','32','32','.1.3.6.1.2.1.2.2.1.1.32'); +INSERT INTO `host_snmp_cache` VALUES (8,1,'ifIndex','33','33','.1.3.6.1.2.1.2.2.1.1.33'); +INSERT INTO `host_snmp_cache` VALUES (8,1,'ifIndex','34','34','.1.3.6.1.2.1.2.2.1.1.34'); +INSERT INTO `host_snmp_cache` VALUES (8,1,'ifIndex','35','35','.1.3.6.1.2.1.2.2.1.1.35'); +INSERT INTO `host_snmp_cache` VALUES (8,1,'ifIndex','36','36','.1.3.6.1.2.1.2.2.1.1.36'); +INSERT INTO `host_snmp_cache` VALUES (8,1,'ifIndex','37','37','.1.3.6.1.2.1.2.2.1.1.37'); +INSERT INTO `host_snmp_cache` VALUES (8,1,'ifIndex','38','38','.1.3.6.1.2.1.2.2.1.1.38'); +INSERT INTO `host_snmp_cache` VALUES (8,1,'ifIndex','39','39','.1.3.6.1.2.1.2.2.1.1.39'); +INSERT INTO `host_snmp_cache` VALUES (8,1,'ifIndex','40','40','.1.3.6.1.2.1.2.2.1.1.40'); +INSERT INTO `host_snmp_cache` VALUES (8,1,'ifIndex','41','41','.1.3.6.1.2.1.2.2.1.1.41'); +INSERT INTO `host_snmp_cache` VALUES (8,1,'ifIndex','42','42','.1.3.6.1.2.1.2.2.1.1.42'); +INSERT INTO `host_snmp_cache` VALUES (8,1,'ifIndex','43','43','.1.3.6.1.2.1.2.2.1.1.43'); +INSERT INTO `host_snmp_cache` VALUES (8,1,'ifIndex','44','44','.1.3.6.1.2.1.2.2.1.1.44'); +INSERT INTO `host_snmp_cache` VALUES (8,1,'ifIndex','45','45','.1.3.6.1.2.1.2.2.1.1.45'); +INSERT INTO `host_snmp_cache` VALUES (8,1,'ifIndex','46','46','.1.3.6.1.2.1.2.2.1.1.46'); +INSERT INTO `host_snmp_cache` VALUES (8,1,'ifIndex','47','47','.1.3.6.1.2.1.2.2.1.1.47'); +INSERT INTO `host_snmp_cache` VALUES (8,1,'ifIndex','48','48','.1.3.6.1.2.1.2.2.1.1.48'); +INSERT INTO `host_snmp_cache` VALUES (8,1,'ifIndex','49','49','.1.3.6.1.2.1.2.2.1.1.49'); +INSERT INTO `host_snmp_cache` VALUES (8,1,'ifIndex','50','50','.1.3.6.1.2.1.2.2.1.1.50'); +INSERT INTO `host_snmp_cache` VALUES (8,1,'ifIndex','51','51','.1.3.6.1.2.1.2.2.1.1.51'); +INSERT INTO `host_snmp_cache` VALUES (8,1,'ifIndex','52','52','.1.3.6.1.2.1.2.2.1.1.52'); +INSERT INTO `host_snmp_cache` VALUES (8,1,'ifIndex','53','53','.1.3.6.1.2.1.2.2.1.1.53'); +INSERT INTO `host_snmp_cache` VALUES (8,1,'ifIndex','54','54','.1.3.6.1.2.1.2.2.1.1.54'); +INSERT INTO `host_snmp_cache` VALUES (8,1,'ifIndex','55','55','.1.3.6.1.2.1.2.2.1.1.55'); +INSERT INTO `host_snmp_cache` VALUES (8,1,'ifIndex','56','56','.1.3.6.1.2.1.2.2.1.1.56'); +INSERT INTO `host_snmp_cache` VALUES (8,1,'ifIndex','57','57','.1.3.6.1.2.1.2.2.1.1.57'); +INSERT INTO `host_snmp_cache` VALUES (8,1,'ifIndex','58','58','.1.3.6.1.2.1.2.2.1.1.58'); +INSERT INTO `host_snmp_cache` VALUES (8,1,'ifIndex','59','59','.1.3.6.1.2.1.2.2.1.1.59'); +INSERT INTO `host_snmp_cache` VALUES (8,1,'ifIndex','60','60','.1.3.6.1.2.1.2.2.1.1.60'); +INSERT INTO `host_snmp_cache` VALUES (8,1,'ifIndex','61','61','.1.3.6.1.2.1.2.2.1.1.61'); +INSERT INTO `host_snmp_cache` VALUES (8,1,'ifIndex','62','62','.1.3.6.1.2.1.2.2.1.1.62'); +INSERT INTO `host_snmp_cache` VALUES (8,1,'ifIndex','63','63','.1.3.6.1.2.1.2.2.1.1.63'); +INSERT INTO `host_snmp_cache` VALUES (8,1,'ifIndex','64','64','.1.3.6.1.2.1.2.2.1.1.64'); +INSERT INTO `host_snmp_cache` VALUES (8,1,'ifIndex','67','67','.1.3.6.1.2.1.2.2.1.1.67'); +INSERT INTO `host_snmp_cache` VALUES (8,1,'ifOperStatus','Up','1','.1.3.6.1.2.1.2.2.1.8.1'); +INSERT INTO `host_snmp_cache` VALUES (8,1,'ifOperStatus','Down','2','.1.3.6.1.2.1.2.2.1.8.2'); +INSERT INTO `host_snmp_cache` VALUES (8,1,'ifOperStatus','Up','3','.1.3.6.1.2.1.2.2.1.8.3'); +INSERT INTO `host_snmp_cache` VALUES (8,1,'ifOperStatus','Up','4','.1.3.6.1.2.1.2.2.1.8.4'); +INSERT INTO `host_snmp_cache` VALUES (8,1,'ifOperStatus','Up','5','.1.3.6.1.2.1.2.2.1.8.5'); +INSERT INTO `host_snmp_cache` VALUES (8,1,'ifOperStatus','Up','6','.1.3.6.1.2.1.2.2.1.8.6'); +INSERT INTO `host_snmp_cache` VALUES (8,1,'ifOperStatus','Up','7','.1.3.6.1.2.1.2.2.1.8.7'); +INSERT INTO `host_snmp_cache` VALUES (8,1,'ifOperStatus','Up','8','.1.3.6.1.2.1.2.2.1.8.8'); +INSERT INTO `host_snmp_cache` VALUES (8,1,'ifOperStatus','Up','9','.1.3.6.1.2.1.2.2.1.8.9'); +INSERT INTO `host_snmp_cache` VALUES (8,1,'ifOperStatus','Up','10','.1.3.6.1.2.1.2.2.1.8.10'); +INSERT INTO `host_snmp_cache` VALUES (8,1,'ifOperStatus','Up','11','.1.3.6.1.2.1.2.2.1.8.11'); +INSERT INTO `host_snmp_cache` VALUES (8,1,'ifOperStatus','Up','12','.1.3.6.1.2.1.2.2.1.8.12'); +INSERT INTO `host_snmp_cache` VALUES (8,1,'ifOperStatus','Up','13','.1.3.6.1.2.1.2.2.1.8.13'); +INSERT INTO `host_snmp_cache` VALUES (8,1,'ifOperStatus','Down','14','.1.3.6.1.2.1.2.2.1.8.14'); +INSERT INTO `host_snmp_cache` VALUES (8,1,'ifOperStatus','Up','15','.1.3.6.1.2.1.2.2.1.8.15'); +INSERT INTO `host_snmp_cache` VALUES (8,1,'ifOperStatus','Up','16','.1.3.6.1.2.1.2.2.1.8.16'); +INSERT INTO `host_snmp_cache` VALUES (8,1,'ifOperStatus','Up','17','.1.3.6.1.2.1.2.2.1.8.17'); +INSERT INTO `host_snmp_cache` VALUES (8,1,'ifOperStatus','Up','18','.1.3.6.1.2.1.2.2.1.8.18'); +INSERT INTO `host_snmp_cache` VALUES (8,1,'ifOperStatus','Down','19','.1.3.6.1.2.1.2.2.1.8.19'); +INSERT INTO `host_snmp_cache` VALUES (8,1,'ifOperStatus','Up','20','.1.3.6.1.2.1.2.2.1.8.20'); +INSERT INTO `host_snmp_cache` VALUES (8,1,'ifOperStatus','Up','21','.1.3.6.1.2.1.2.2.1.8.21'); +INSERT INTO `host_snmp_cache` VALUES (8,1,'ifOperStatus','Up','22','.1.3.6.1.2.1.2.2.1.8.22'); +INSERT INTO `host_snmp_cache` VALUES (8,1,'ifOperStatus','Down','23','.1.3.6.1.2.1.2.2.1.8.23'); +INSERT INTO `host_snmp_cache` VALUES (8,1,'ifOperStatus','Down','24','.1.3.6.1.2.1.2.2.1.8.24'); +INSERT INTO `host_snmp_cache` VALUES (8,1,'ifOperStatus','Up','25','.1.3.6.1.2.1.2.2.1.8.25'); +INSERT INTO `host_snmp_cache` VALUES (8,1,'ifOperStatus','Up','26','.1.3.6.1.2.1.2.2.1.8.26'); +INSERT INTO `host_snmp_cache` VALUES (8,1,'ifOperStatus','Down','27','.1.3.6.1.2.1.2.2.1.8.27'); +INSERT INTO `host_snmp_cache` VALUES (8,1,'ifOperStatus','Down','28','.1.3.6.1.2.1.2.2.1.8.28'); +INSERT INTO `host_snmp_cache` VALUES (8,1,'ifOperStatus','Down','29','.1.3.6.1.2.1.2.2.1.8.29'); +INSERT INTO `host_snmp_cache` VALUES (8,1,'ifOperStatus','Down','30','.1.3.6.1.2.1.2.2.1.8.30'); +INSERT INTO `host_snmp_cache` VALUES (8,1,'ifOperStatus','Down','31','.1.3.6.1.2.1.2.2.1.8.31'); +INSERT INTO `host_snmp_cache` VALUES (8,1,'ifOperStatus','Down','32','.1.3.6.1.2.1.2.2.1.8.32'); +INSERT INTO `host_snmp_cache` VALUES (8,1,'ifOperStatus','Down','33','.1.3.6.1.2.1.2.2.1.8.33'); +INSERT INTO `host_snmp_cache` VALUES (8,1,'ifOperStatus','Up','34','.1.3.6.1.2.1.2.2.1.8.34'); +INSERT INTO `host_snmp_cache` VALUES (8,1,'ifOperStatus','Up','35','.1.3.6.1.2.1.2.2.1.8.35'); +INSERT INTO `host_snmp_cache` VALUES (8,1,'ifOperStatus','Up','36','.1.3.6.1.2.1.2.2.1.8.36'); +INSERT INTO `host_snmp_cache` VALUES (8,1,'ifOperStatus','Up','37','.1.3.6.1.2.1.2.2.1.8.37'); +INSERT INTO `host_snmp_cache` VALUES (8,1,'ifOperStatus','Up','38','.1.3.6.1.2.1.2.2.1.8.38'); +INSERT INTO `host_snmp_cache` VALUES (8,1,'ifOperStatus','Down','39','.1.3.6.1.2.1.2.2.1.8.39'); +INSERT INTO `host_snmp_cache` VALUES (8,1,'ifOperStatus','Down','40','.1.3.6.1.2.1.2.2.1.8.40'); +INSERT INTO `host_snmp_cache` VALUES (8,1,'ifOperStatus','Down','41','.1.3.6.1.2.1.2.2.1.8.41'); +INSERT INTO `host_snmp_cache` VALUES (8,1,'ifOperStatus','Down','42','.1.3.6.1.2.1.2.2.1.8.42'); +INSERT INTO `host_snmp_cache` VALUES (8,1,'ifOperStatus','Down','43','.1.3.6.1.2.1.2.2.1.8.43'); +INSERT INTO `host_snmp_cache` VALUES (8,1,'ifOperStatus','Down','44','.1.3.6.1.2.1.2.2.1.8.44'); +INSERT INTO `host_snmp_cache` VALUES (8,1,'ifOperStatus','Up','45','.1.3.6.1.2.1.2.2.1.8.45'); +INSERT INTO `host_snmp_cache` VALUES (8,1,'ifOperStatus','Down','46','.1.3.6.1.2.1.2.2.1.8.46'); +INSERT INTO `host_snmp_cache` VALUES (8,1,'ifOperStatus','Down','47','.1.3.6.1.2.1.2.2.1.8.47'); +INSERT INTO `host_snmp_cache` VALUES (8,1,'ifOperStatus','Down','48','.1.3.6.1.2.1.2.2.1.8.48'); +INSERT INTO `host_snmp_cache` VALUES (8,1,'ifOperStatus','Down','49','.1.3.6.1.2.1.2.2.1.8.49'); +INSERT INTO `host_snmp_cache` VALUES (8,1,'ifOperStatus','Down','50','.1.3.6.1.2.1.2.2.1.8.50'); +INSERT INTO `host_snmp_cache` VALUES (8,1,'ifOperStatus','Down','51','.1.3.6.1.2.1.2.2.1.8.51'); +INSERT INTO `host_snmp_cache` VALUES (8,1,'ifOperStatus','Down','52','.1.3.6.1.2.1.2.2.1.8.52'); +INSERT INTO `host_snmp_cache` VALUES (8,1,'ifOperStatus','Down','53','.1.3.6.1.2.1.2.2.1.8.53'); +INSERT INTO `host_snmp_cache` VALUES (8,1,'ifOperStatus','Down','54','.1.3.6.1.2.1.2.2.1.8.54'); +INSERT INTO `host_snmp_cache` VALUES (8,1,'ifOperStatus','Down','55','.1.3.6.1.2.1.2.2.1.8.55'); +INSERT INTO `host_snmp_cache` VALUES (8,1,'ifOperStatus','Down','56','.1.3.6.1.2.1.2.2.1.8.56'); +INSERT INTO `host_snmp_cache` VALUES (8,1,'ifOperStatus','Down','57','.1.3.6.1.2.1.2.2.1.8.57'); +INSERT INTO `host_snmp_cache` VALUES (8,1,'ifOperStatus','Down','58','.1.3.6.1.2.1.2.2.1.8.58'); +INSERT INTO `host_snmp_cache` VALUES (8,1,'ifOperStatus','Up','59','.1.3.6.1.2.1.2.2.1.8.59'); +INSERT INTO `host_snmp_cache` VALUES (8,1,'ifOperStatus','Up','60','.1.3.6.1.2.1.2.2.1.8.60'); +INSERT INTO `host_snmp_cache` VALUES (8,1,'ifOperStatus','Up','61','.1.3.6.1.2.1.2.2.1.8.61'); +INSERT INTO `host_snmp_cache` VALUES (8,1,'ifOperStatus','Up','62','.1.3.6.1.2.1.2.2.1.8.62'); +INSERT INTO `host_snmp_cache` VALUES (8,1,'ifOperStatus','Up','63','.1.3.6.1.2.1.2.2.1.8.63'); +INSERT INTO `host_snmp_cache` VALUES (8,1,'ifOperStatus','Up','64','.1.3.6.1.2.1.2.2.1.8.64'); +INSERT INTO `host_snmp_cache` VALUES (8,1,'ifOperStatus','Up','67','.1.3.6.1.2.1.2.2.1.8.67'); +INSERT INTO `host_snmp_cache` VALUES (8,1,'ifDescr','sc0','1','.1.3.6.1.2.1.2.2.1.2.1'); +INSERT INTO `host_snmp_cache` VALUES (8,1,'ifDescr','sl0','2','.1.3.6.1.2.1.2.2.1.2.2'); +INSERT INTO `host_snmp_cache` VALUES (8,1,'ifDescr','me1','3','.1.3.6.1.2.1.2.2.1.2.3'); +INSERT INTO `host_snmp_cache` VALUES (8,1,'ifDescr','VLAN 1','4','.1.3.6.1.2.1.2.2.1.2.4'); +INSERT INTO `host_snmp_cache` VALUES (8,1,'ifDescr','VLAN 1002','5','.1.3.6.1.2.1.2.2.1.2.5'); +INSERT INTO `host_snmp_cache` VALUES (8,1,'ifDescr','VLAN 1004','6','.1.3.6.1.2.1.2.2.1.2.6'); +INSERT INTO `host_snmp_cache` VALUES (8,1,'ifDescr','VLAN 1005','7','.1.3.6.1.2.1.2.2.1.2.7'); +INSERT INTO `host_snmp_cache` VALUES (8,1,'ifDescr','VLAN 1003','8','.1.3.6.1.2.1.2.2.1.2.8'); +INSERT INTO `host_snmp_cache` VALUES (8,1,'ifDescr','10/100 utp ethernet (cat 3/5)','9','.1.3.6.1.2.1.2.2.1.2.9'); +INSERT INTO `host_snmp_cache` VALUES (8,1,'ifDescr','10/100 utp ethernet (cat 3/5)','10','.1.3.6.1.2.1.2.2.1.2.10'); +INSERT INTO `host_snmp_cache` VALUES (8,1,'ifDescr','10/100 utp ethernet (cat 3/5)','11','.1.3.6.1.2.1.2.2.1.2.11'); +INSERT INTO `host_snmp_cache` VALUES (8,1,'ifDescr','10/100 utp ethernet (cat 3/5)','12','.1.3.6.1.2.1.2.2.1.2.12'); +INSERT INTO `host_snmp_cache` VALUES (8,1,'ifDescr','10/100 utp ethernet (cat 3/5)','13','.1.3.6.1.2.1.2.2.1.2.13'); +INSERT INTO `host_snmp_cache` VALUES (8,1,'ifDescr','10/100 utp ethernet (cat 3/5)','14','.1.3.6.1.2.1.2.2.1.2.14'); +INSERT INTO `host_snmp_cache` VALUES (8,1,'ifDescr','10/100 utp ethernet (cat 3/5)','15','.1.3.6.1.2.1.2.2.1.2.15'); +INSERT INTO `host_snmp_cache` VALUES (8,1,'ifDescr','10/100 utp ethernet (cat 3/5)','16','.1.3.6.1.2.1.2.2.1.2.16'); +INSERT INTO `host_snmp_cache` VALUES (8,1,'ifDescr','10/100 utp ethernet (cat 3/5)','17','.1.3.6.1.2.1.2.2.1.2.17'); +INSERT INTO `host_snmp_cache` VALUES (8,1,'ifDescr','10/100 utp ethernet (cat 3/5)','18','.1.3.6.1.2.1.2.2.1.2.18'); +INSERT INTO `host_snmp_cache` VALUES (8,1,'ifDescr','10/100 utp ethernet (cat 3/5)','19','.1.3.6.1.2.1.2.2.1.2.19'); +INSERT INTO `host_snmp_cache` VALUES (8,1,'ifDescr','10/100 utp ethernet (cat 3/5)','20','.1.3.6.1.2.1.2.2.1.2.20'); +INSERT INTO `host_snmp_cache` VALUES (8,1,'ifDescr','10/100 utp ethernet (cat 3/5)','21','.1.3.6.1.2.1.2.2.1.2.21'); +INSERT INTO `host_snmp_cache` VALUES (8,1,'ifDescr','10/100 utp ethernet (cat 3/5)','22','.1.3.6.1.2.1.2.2.1.2.22'); +INSERT INTO `host_snmp_cache` VALUES (8,1,'ifDescr','10/100 utp ethernet (cat 3/5)','23','.1.3.6.1.2.1.2.2.1.2.23'); +INSERT INTO `host_snmp_cache` VALUES (8,1,'ifDescr','10/100 utp ethernet (cat 3/5)','24','.1.3.6.1.2.1.2.2.1.2.24'); +INSERT INTO `host_snmp_cache` VALUES (8,1,'ifDescr','10/100 utp ethernet (cat 3/5)','25','.1.3.6.1.2.1.2.2.1.2.25'); +INSERT INTO `host_snmp_cache` VALUES (8,1,'ifDescr','10/100 utp ethernet (cat 3/5)','26','.1.3.6.1.2.1.2.2.1.2.26'); +INSERT INTO `host_snmp_cache` VALUES (8,1,'ifDescr','10/100 utp ethernet (cat 3/5)','27','.1.3.6.1.2.1.2.2.1.2.27'); +INSERT INTO `host_snmp_cache` VALUES (8,1,'ifDescr','10/100 utp ethernet (cat 3/5)','28','.1.3.6.1.2.1.2.2.1.2.28'); +INSERT INTO `host_snmp_cache` VALUES (8,1,'ifDescr','10/100 utp ethernet (cat 3/5)','29','.1.3.6.1.2.1.2.2.1.2.29'); +INSERT INTO `host_snmp_cache` VALUES (8,1,'ifDescr','10/100 utp ethernet (cat 3/5)','30','.1.3.6.1.2.1.2.2.1.2.30'); +INSERT INTO `host_snmp_cache` VALUES (8,1,'ifDescr','10/100 utp ethernet (cat 3/5)','31','.1.3.6.1.2.1.2.2.1.2.31'); +INSERT INTO `host_snmp_cache` VALUES (8,1,'ifDescr','10/100 utp ethernet (cat 3/5)','32','.1.3.6.1.2.1.2.2.1.2.32'); +INSERT INTO `host_snmp_cache` VALUES (8,1,'ifDescr','10/100 utp ethernet (cat 3/5)','33','.1.3.6.1.2.1.2.2.1.2.33'); +INSERT INTO `host_snmp_cache` VALUES (8,1,'ifDescr','10/100 utp ethernet (cat 3/5)','34','.1.3.6.1.2.1.2.2.1.2.34'); +INSERT INTO `host_snmp_cache` VALUES (8,1,'ifDescr','10/100 utp ethernet (cat 3/5)','35','.1.3.6.1.2.1.2.2.1.2.35'); +INSERT INTO `host_snmp_cache` VALUES (8,1,'ifDescr','10/100 utp ethernet (cat 3/5)','36','.1.3.6.1.2.1.2.2.1.2.36'); +INSERT INTO `host_snmp_cache` VALUES (8,1,'ifDescr','10/100 utp ethernet (cat 3/5)','37','.1.3.6.1.2.1.2.2.1.2.37'); +INSERT INTO `host_snmp_cache` VALUES (8,1,'ifDescr','10/100 utp ethernet (cat 3/5)','38','.1.3.6.1.2.1.2.2.1.2.38'); +INSERT INTO `host_snmp_cache` VALUES (8,1,'ifDescr','10/100 utp ethernet (cat 3/5)','39','.1.3.6.1.2.1.2.2.1.2.39'); +INSERT INTO `host_snmp_cache` VALUES (8,1,'ifDescr','10/100 utp ethernet (cat 3/5)','40','.1.3.6.1.2.1.2.2.1.2.40'); +INSERT INTO `host_snmp_cache` VALUES (8,1,'ifDescr','10/100 utp ethernet (cat 3/5)','41','.1.3.6.1.2.1.2.2.1.2.41'); +INSERT INTO `host_snmp_cache` VALUES (8,1,'ifDescr','10/100 utp ethernet (cat 3/5)','42','.1.3.6.1.2.1.2.2.1.2.42'); +INSERT INTO `host_snmp_cache` VALUES (8,1,'ifDescr','10/100 utp ethernet (cat 3/5)','43','.1.3.6.1.2.1.2.2.1.2.43'); +INSERT INTO `host_snmp_cache` VALUES (8,1,'ifDescr','10/100 utp ethernet (cat 3/5)','44','.1.3.6.1.2.1.2.2.1.2.44'); +INSERT INTO `host_snmp_cache` VALUES (8,1,'ifDescr','10/100 utp ethernet (cat 3/5)','45','.1.3.6.1.2.1.2.2.1.2.45'); +INSERT INTO `host_snmp_cache` VALUES (8,1,'ifDescr','10/100 utp ethernet (cat 3/5)','46','.1.3.6.1.2.1.2.2.1.2.46'); +INSERT INTO `host_snmp_cache` VALUES (8,1,'ifDescr','10/100 utp ethernet (cat 3/5)','47','.1.3.6.1.2.1.2.2.1.2.47'); +INSERT INTO `host_snmp_cache` VALUES (8,1,'ifDescr','10/100 utp ethernet (cat 3/5)','48','.1.3.6.1.2.1.2.2.1.2.48'); +INSERT INTO `host_snmp_cache` VALUES (8,1,'ifDescr','10/100 utp ethernet (cat 3/5)','49','.1.3.6.1.2.1.2.2.1.2.49'); +INSERT INTO `host_snmp_cache` VALUES (8,1,'ifDescr','10/100 utp ethernet (cat 3/5)','50','.1.3.6.1.2.1.2.2.1.2.50'); +INSERT INTO `host_snmp_cache` VALUES (8,1,'ifDescr','10/100 utp ethernet (cat 3/5)','51','.1.3.6.1.2.1.2.2.1.2.51'); +INSERT INTO `host_snmp_cache` VALUES (8,1,'ifDescr','10/100 utp ethernet (cat 3/5)','52','.1.3.6.1.2.1.2.2.1.2.52'); +INSERT INTO `host_snmp_cache` VALUES (8,1,'ifDescr','10/100 utp ethernet (cat 3/5)','53','.1.3.6.1.2.1.2.2.1.2.53'); +INSERT INTO `host_snmp_cache` VALUES (8,1,'ifDescr','10/100 utp ethernet (cat 3/5)','54','.1.3.6.1.2.1.2.2.1.2.54'); +INSERT INTO `host_snmp_cache` VALUES (8,1,'ifDescr','10/100 utp ethernet (cat 3/5)','55','.1.3.6.1.2.1.2.2.1.2.55'); +INSERT INTO `host_snmp_cache` VALUES (8,1,'ifDescr','10/100 utp ethernet (cat 3/5)','56','.1.3.6.1.2.1.2.2.1.2.56'); +INSERT INTO `host_snmp_cache` VALUES (8,1,'ifDescr','gigabit ethernet without GBIC installed','57','.1.3.6.1.2.1.2.2.1.2.57'); +INSERT INTO `host_snmp_cache` VALUES (8,1,'ifDescr','gigabit ethernet without GBIC installed','58','.1.3.6.1.2.1.2.2.1.2.58'); +INSERT INTO `host_snmp_cache` VALUES (8,1,'ifDescr','VLAN 42','59','.1.3.6.1.2.1.2.2.1.2.59'); +INSERT INTO `host_snmp_cache` VALUES (8,1,'ifDescr','VLAN 23','60','.1.3.6.1.2.1.2.2.1.2.60'); +INSERT INTO `host_snmp_cache` VALUES (8,1,'ifDescr','VLAN 22','61','.1.3.6.1.2.1.2.2.1.2.61'); +INSERT INTO `host_snmp_cache` VALUES (8,1,'ifDescr','VLAN 24','62','.1.3.6.1.2.1.2.2.1.2.62'); +INSERT INTO `host_snmp_cache` VALUES (8,1,'ifDescr','VLAN 25','63','.1.3.6.1.2.1.2.2.1.2.63'); +INSERT INTO `host_snmp_cache` VALUES (8,1,'ifDescr','VLAN 16','64','.1.3.6.1.2.1.2.2.1.2.64'); +INSERT INTO `host_snmp_cache` VALUES (8,1,'ifDescr','aggregated interface','67','.1.3.6.1.2.1.2.2.1.2.67'); +INSERT INTO `host_snmp_cache` VALUES (8,1,'ifName','sc0','1','.1.3.6.1.2.1.31.1.1.1.1.1'); +INSERT INTO `host_snmp_cache` VALUES (8,1,'ifName','sl0','2','.1.3.6.1.2.1.31.1.1.1.1.2'); +INSERT INTO `host_snmp_cache` VALUES (8,1,'ifName','me1','3','.1.3.6.1.2.1.31.1.1.1.1.3'); +INSERT INTO `host_snmp_cache` VALUES (8,1,'ifName','VLAN-1','4','.1.3.6.1.2.1.31.1.1.1.1.4'); +INSERT INTO `host_snmp_cache` VALUES (8,1,'ifName','VLAN-1002','5','.1.3.6.1.2.1.31.1.1.1.1.5'); +INSERT INTO `host_snmp_cache` VALUES (8,1,'ifName','VLAN-1004','6','.1.3.6.1.2.1.31.1.1.1.1.6'); +INSERT INTO `host_snmp_cache` VALUES (8,1,'ifName','VLAN-1005','7','.1.3.6.1.2.1.31.1.1.1.1.7'); +INSERT INTO `host_snmp_cache` VALUES (8,1,'ifName','VLAN-1003','8','.1.3.6.1.2.1.31.1.1.1.1.8'); +INSERT INTO `host_snmp_cache` VALUES (8,1,'ifName','2/1','9','.1.3.6.1.2.1.31.1.1.1.1.9'); +INSERT INTO `host_snmp_cache` VALUES (8,1,'ifName','2/2','10','.1.3.6.1.2.1.31.1.1.1.1.10'); +INSERT INTO `host_snmp_cache` VALUES (8,1,'ifName','2/3','11','.1.3.6.1.2.1.31.1.1.1.1.11'); +INSERT INTO `host_snmp_cache` VALUES (8,1,'ifName','2/4','12','.1.3.6.1.2.1.31.1.1.1.1.12'); +INSERT INTO `host_snmp_cache` VALUES (8,1,'ifName','2/5','13','.1.3.6.1.2.1.31.1.1.1.1.13'); +INSERT INTO `host_snmp_cache` VALUES (8,1,'ifName','2/6','14','.1.3.6.1.2.1.31.1.1.1.1.14'); +INSERT INTO `host_snmp_cache` VALUES (8,1,'ifName','2/7','15','.1.3.6.1.2.1.31.1.1.1.1.15'); +INSERT INTO `host_snmp_cache` VALUES (8,1,'ifName','2/8','16','.1.3.6.1.2.1.31.1.1.1.1.16'); +INSERT INTO `host_snmp_cache` VALUES (8,1,'ifName','2/9','17','.1.3.6.1.2.1.31.1.1.1.1.17'); +INSERT INTO `host_snmp_cache` VALUES (8,1,'ifName','2/10','18','.1.3.6.1.2.1.31.1.1.1.1.18'); +INSERT INTO `host_snmp_cache` VALUES (8,1,'ifName','2/11','19','.1.3.6.1.2.1.31.1.1.1.1.19'); +INSERT INTO `host_snmp_cache` VALUES (8,1,'ifName','2/12','20','.1.3.6.1.2.1.31.1.1.1.1.20'); +INSERT INTO `host_snmp_cache` VALUES (8,1,'ifName','2/13','21','.1.3.6.1.2.1.31.1.1.1.1.21'); +INSERT INTO `host_snmp_cache` VALUES (8,1,'ifName','2/14','22','.1.3.6.1.2.1.31.1.1.1.1.22'); +INSERT INTO `host_snmp_cache` VALUES (8,1,'ifName','2/15','23','.1.3.6.1.2.1.31.1.1.1.1.23'); +INSERT INTO `host_snmp_cache` VALUES (8,1,'ifName','2/16','24','.1.3.6.1.2.1.31.1.1.1.1.24'); +INSERT INTO `host_snmp_cache` VALUES (8,1,'ifName','2/17','25','.1.3.6.1.2.1.31.1.1.1.1.25'); +INSERT INTO `host_snmp_cache` VALUES (8,1,'ifName','2/18','26','.1.3.6.1.2.1.31.1.1.1.1.26'); +INSERT INTO `host_snmp_cache` VALUES (8,1,'ifName','2/19','27','.1.3.6.1.2.1.31.1.1.1.1.27'); +INSERT INTO `host_snmp_cache` VALUES (8,1,'ifName','2/20','28','.1.3.6.1.2.1.31.1.1.1.1.28'); +INSERT INTO `host_snmp_cache` VALUES (8,1,'ifName','2/21','29','.1.3.6.1.2.1.31.1.1.1.1.29'); +INSERT INTO `host_snmp_cache` VALUES (8,1,'ifName','2/22','30','.1.3.6.1.2.1.31.1.1.1.1.30'); +INSERT INTO `host_snmp_cache` VALUES (8,1,'ifName','2/23','31','.1.3.6.1.2.1.31.1.1.1.1.31'); +INSERT INTO `host_snmp_cache` VALUES (8,1,'ifName','2/24','32','.1.3.6.1.2.1.31.1.1.1.1.32'); +INSERT INTO `host_snmp_cache` VALUES (8,1,'ifName','2/25','33','.1.3.6.1.2.1.31.1.1.1.1.33'); +INSERT INTO `host_snmp_cache` VALUES (8,1,'ifName','2/26','34','.1.3.6.1.2.1.31.1.1.1.1.34'); +INSERT INTO `host_snmp_cache` VALUES (8,1,'ifName','2/27','35','.1.3.6.1.2.1.31.1.1.1.1.35'); +INSERT INTO `host_snmp_cache` VALUES (8,1,'ifName','2/28','36','.1.3.6.1.2.1.31.1.1.1.1.36'); +INSERT INTO `host_snmp_cache` VALUES (8,1,'ifName','2/29','37','.1.3.6.1.2.1.31.1.1.1.1.37'); +INSERT INTO `host_snmp_cache` VALUES (8,1,'ifName','2/30','38','.1.3.6.1.2.1.31.1.1.1.1.38'); +INSERT INTO `host_snmp_cache` VALUES (8,1,'ifName','2/31','39','.1.3.6.1.2.1.31.1.1.1.1.39'); +INSERT INTO `host_snmp_cache` VALUES (8,1,'ifName','2/32','40','.1.3.6.1.2.1.31.1.1.1.1.40'); +INSERT INTO `host_snmp_cache` VALUES (8,1,'ifName','2/33','41','.1.3.6.1.2.1.31.1.1.1.1.41'); +INSERT INTO `host_snmp_cache` VALUES (8,1,'ifName','2/34','42','.1.3.6.1.2.1.31.1.1.1.1.42'); +INSERT INTO `host_snmp_cache` VALUES (8,1,'ifName','2/35','43','.1.3.6.1.2.1.31.1.1.1.1.43'); +INSERT INTO `host_snmp_cache` VALUES (8,1,'ifName','2/36','44','.1.3.6.1.2.1.31.1.1.1.1.44'); +INSERT INTO `host_snmp_cache` VALUES (8,1,'ifName','2/37','45','.1.3.6.1.2.1.31.1.1.1.1.45'); +INSERT INTO `host_snmp_cache` VALUES (8,1,'ifName','2/38','46','.1.3.6.1.2.1.31.1.1.1.1.46'); +INSERT INTO `host_snmp_cache` VALUES (8,1,'ifName','2/39','47','.1.3.6.1.2.1.31.1.1.1.1.47'); +INSERT INTO `host_snmp_cache` VALUES (8,1,'ifName','2/40','48','.1.3.6.1.2.1.31.1.1.1.1.48'); +INSERT INTO `host_snmp_cache` VALUES (8,1,'ifName','2/41','49','.1.3.6.1.2.1.31.1.1.1.1.49'); +INSERT INTO `host_snmp_cache` VALUES (8,1,'ifName','2/42','50','.1.3.6.1.2.1.31.1.1.1.1.50'); +INSERT INTO `host_snmp_cache` VALUES (8,1,'ifName','2/43','51','.1.3.6.1.2.1.31.1.1.1.1.51'); +INSERT INTO `host_snmp_cache` VALUES (8,1,'ifName','2/44','52','.1.3.6.1.2.1.31.1.1.1.1.52'); +INSERT INTO `host_snmp_cache` VALUES (8,1,'ifName','2/45','53','.1.3.6.1.2.1.31.1.1.1.1.53'); +INSERT INTO `host_snmp_cache` VALUES (8,1,'ifName','2/46','54','.1.3.6.1.2.1.31.1.1.1.1.54'); +INSERT INTO `host_snmp_cache` VALUES (8,1,'ifName','2/47','55','.1.3.6.1.2.1.31.1.1.1.1.55'); +INSERT INTO `host_snmp_cache` VALUES (8,1,'ifName','2/48','56','.1.3.6.1.2.1.31.1.1.1.1.56'); +INSERT INTO `host_snmp_cache` VALUES (8,1,'ifName','2/49','57','.1.3.6.1.2.1.31.1.1.1.1.57'); +INSERT INTO `host_snmp_cache` VALUES (8,1,'ifName','2/50','58','.1.3.6.1.2.1.31.1.1.1.1.58'); +INSERT INTO `host_snmp_cache` VALUES (8,1,'ifName','VLAN-42','59','.1.3.6.1.2.1.31.1.1.1.1.59'); +INSERT INTO `host_snmp_cache` VALUES (8,1,'ifName','VLAN-23','60','.1.3.6.1.2.1.31.1.1.1.1.60'); +INSERT INTO `host_snmp_cache` VALUES (8,1,'ifName','VLAN-22','61','.1.3.6.1.2.1.31.1.1.1.1.61'); +INSERT INTO `host_snmp_cache` VALUES (8,1,'ifName','VLAN-24','62','.1.3.6.1.2.1.31.1.1.1.1.62'); +INSERT INTO `host_snmp_cache` VALUES (8,1,'ifName','VLAN-25','63','.1.3.6.1.2.1.31.1.1.1.1.63'); +INSERT INTO `host_snmp_cache` VALUES (8,1,'ifName','VLAN-16','64','.1.3.6.1.2.1.31.1.1.1.1.64'); +INSERT INTO `host_snmp_cache` VALUES (8,1,'ifName','FEC-2/13-14','67','.1.3.6.1.2.1.31.1.1.1.1.67'); +INSERT INTO `host_snmp_cache` VALUES (8,1,'ifAlias','','1','.1.3.6.1.2.1.31.1.1.1.18.1'); +INSERT INTO `host_snmp_cache` VALUES (8,1,'ifAlias','','2','.1.3.6.1.2.1.31.1.1.1.18.2'); +INSERT INTO `host_snmp_cache` VALUES (8,1,'ifAlias','','3','.1.3.6.1.2.1.31.1.1.1.18.3'); +INSERT INTO `host_snmp_cache` VALUES (8,1,'ifAlias','','4','.1.3.6.1.2.1.31.1.1.1.18.4'); +INSERT INTO `host_snmp_cache` VALUES (8,1,'ifAlias','','5','.1.3.6.1.2.1.31.1.1.1.18.5'); +INSERT INTO `host_snmp_cache` VALUES (8,1,'ifAlias','','6','.1.3.6.1.2.1.31.1.1.1.18.6'); +INSERT INTO `host_snmp_cache` VALUES (8,1,'ifAlias','','7','.1.3.6.1.2.1.31.1.1.1.18.7'); +INSERT INTO `host_snmp_cache` VALUES (8,1,'ifAlias','','8','.1.3.6.1.2.1.31.1.1.1.18.8'); +INSERT INTO `host_snmp_cache` VALUES (8,1,'ifAlias','','9','.1.3.6.1.2.1.31.1.1.1.18.9'); +INSERT INTO `host_snmp_cache` VALUES (8,1,'ifAlias','','10','.1.3.6.1.2.1.31.1.1.1.18.10'); +INSERT INTO `host_snmp_cache` VALUES (8,1,'ifAlias','','11','.1.3.6.1.2.1.31.1.1.1.18.11'); +INSERT INTO `host_snmp_cache` VALUES (8,1,'ifAlias','','12','.1.3.6.1.2.1.31.1.1.1.18.12'); +INSERT INTO `host_snmp_cache` VALUES (8,1,'ifAlias','','13','.1.3.6.1.2.1.31.1.1.1.18.13'); +INSERT INTO `host_snmp_cache` VALUES (8,1,'ifAlias','','14','.1.3.6.1.2.1.31.1.1.1.18.14'); +INSERT INTO `host_snmp_cache` VALUES (8,1,'ifAlias','','15','.1.3.6.1.2.1.31.1.1.1.18.15'); +INSERT INTO `host_snmp_cache` VALUES (8,1,'ifAlias','','16','.1.3.6.1.2.1.31.1.1.1.18.16'); +INSERT INTO `host_snmp_cache` VALUES (8,1,'ifAlias','','17','.1.3.6.1.2.1.31.1.1.1.18.17'); +INSERT INTO `host_snmp_cache` VALUES (8,1,'ifAlias','','18','.1.3.6.1.2.1.31.1.1.1.18.18'); +INSERT INTO `host_snmp_cache` VALUES (8,1,'ifAlias','','19','.1.3.6.1.2.1.31.1.1.1.18.19'); +INSERT INTO `host_snmp_cache` VALUES (8,1,'ifAlias','','20','.1.3.6.1.2.1.31.1.1.1.18.20'); +INSERT INTO `host_snmp_cache` VALUES (8,1,'ifAlias','','21','.1.3.6.1.2.1.31.1.1.1.18.21'); +INSERT INTO `host_snmp_cache` VALUES (8,1,'ifAlias','','22','.1.3.6.1.2.1.31.1.1.1.18.22'); +INSERT INTO `host_snmp_cache` VALUES (8,1,'ifAlias','','23','.1.3.6.1.2.1.31.1.1.1.18.23'); +INSERT INTO `host_snmp_cache` VALUES (8,1,'ifAlias','','24','.1.3.6.1.2.1.31.1.1.1.18.24'); +INSERT INTO `host_snmp_cache` VALUES (8,1,'ifAlias','','25','.1.3.6.1.2.1.31.1.1.1.18.25'); +INSERT INTO `host_snmp_cache` VALUES (8,1,'ifAlias','','26','.1.3.6.1.2.1.31.1.1.1.18.26'); +INSERT INTO `host_snmp_cache` VALUES (8,1,'ifAlias','','27','.1.3.6.1.2.1.31.1.1.1.18.27'); +INSERT INTO `host_snmp_cache` VALUES (8,1,'ifAlias','','28','.1.3.6.1.2.1.31.1.1.1.18.28'); +INSERT INTO `host_snmp_cache` VALUES (8,1,'ifAlias','','29','.1.3.6.1.2.1.31.1.1.1.18.29'); +INSERT INTO `host_snmp_cache` VALUES (8,1,'ifAlias','','30','.1.3.6.1.2.1.31.1.1.1.18.30'); +INSERT INTO `host_snmp_cache` VALUES (8,1,'ifAlias','','31','.1.3.6.1.2.1.31.1.1.1.18.31'); +INSERT INTO `host_snmp_cache` VALUES (8,1,'ifAlias','','32','.1.3.6.1.2.1.31.1.1.1.18.32'); +INSERT INTO `host_snmp_cache` VALUES (8,1,'ifAlias','','33','.1.3.6.1.2.1.31.1.1.1.18.33'); +INSERT INTO `host_snmp_cache` VALUES (8,1,'ifAlias','','34','.1.3.6.1.2.1.31.1.1.1.18.34'); +INSERT INTO `host_snmp_cache` VALUES (8,1,'ifAlias','','35','.1.3.6.1.2.1.31.1.1.1.18.35'); +INSERT INTO `host_snmp_cache` VALUES (8,1,'ifAlias','','36','.1.3.6.1.2.1.31.1.1.1.18.36'); +INSERT INTO `host_snmp_cache` VALUES (8,1,'ifAlias','','37','.1.3.6.1.2.1.31.1.1.1.18.37'); +INSERT INTO `host_snmp_cache` VALUES (8,1,'ifAlias','','38','.1.3.6.1.2.1.31.1.1.1.18.38'); +INSERT INTO `host_snmp_cache` VALUES (8,1,'ifAlias','','39','.1.3.6.1.2.1.31.1.1.1.18.39'); +INSERT INTO `host_snmp_cache` VALUES (8,1,'ifAlias','','40','.1.3.6.1.2.1.31.1.1.1.18.40'); +INSERT INTO `host_snmp_cache` VALUES (8,1,'ifAlias','','41','.1.3.6.1.2.1.31.1.1.1.18.41'); +INSERT INTO `host_snmp_cache` VALUES (8,1,'ifAlias','','42','.1.3.6.1.2.1.31.1.1.1.18.42'); +INSERT INTO `host_snmp_cache` VALUES (8,1,'ifAlias','','43','.1.3.6.1.2.1.31.1.1.1.18.43'); +INSERT INTO `host_snmp_cache` VALUES (8,1,'ifAlias','','44','.1.3.6.1.2.1.31.1.1.1.18.44'); +INSERT INTO `host_snmp_cache` VALUES (8,1,'ifAlias','','45','.1.3.6.1.2.1.31.1.1.1.18.45'); +INSERT INTO `host_snmp_cache` VALUES (8,1,'ifAlias','','46','.1.3.6.1.2.1.31.1.1.1.18.46'); +INSERT INTO `host_snmp_cache` VALUES (8,1,'ifAlias','','47','.1.3.6.1.2.1.31.1.1.1.18.47'); +INSERT INTO `host_snmp_cache` VALUES (8,1,'ifAlias','','48','.1.3.6.1.2.1.31.1.1.1.18.48'); +INSERT INTO `host_snmp_cache` VALUES (8,1,'ifAlias','','49','.1.3.6.1.2.1.31.1.1.1.18.49'); +INSERT INTO `host_snmp_cache` VALUES (8,1,'ifAlias','','50','.1.3.6.1.2.1.31.1.1.1.18.50'); +INSERT INTO `host_snmp_cache` VALUES (8,1,'ifAlias','','51','.1.3.6.1.2.1.31.1.1.1.18.51'); +INSERT INTO `host_snmp_cache` VALUES (8,1,'ifAlias','','52','.1.3.6.1.2.1.31.1.1.1.18.52'); +INSERT INTO `host_snmp_cache` VALUES (8,1,'ifAlias','','53','.1.3.6.1.2.1.31.1.1.1.18.53'); +INSERT INTO `host_snmp_cache` VALUES (8,1,'ifAlias','','54','.1.3.6.1.2.1.31.1.1.1.18.54'); +INSERT INTO `host_snmp_cache` VALUES (8,1,'ifAlias','','55','.1.3.6.1.2.1.31.1.1.1.18.55'); +INSERT INTO `host_snmp_cache` VALUES (8,1,'ifAlias','','56','.1.3.6.1.2.1.31.1.1.1.18.56'); +INSERT INTO `host_snmp_cache` VALUES (8,1,'ifAlias','','57','.1.3.6.1.2.1.31.1.1.1.18.57'); +INSERT INTO `host_snmp_cache` VALUES (8,1,'ifAlias','','58','.1.3.6.1.2.1.31.1.1.1.18.58'); +INSERT INTO `host_snmp_cache` VALUES (8,1,'ifAlias','','59','.1.3.6.1.2.1.31.1.1.1.18.59'); +INSERT INTO `host_snmp_cache` VALUES (8,1,'ifAlias','','60','.1.3.6.1.2.1.31.1.1.1.18.60'); +INSERT INTO `host_snmp_cache` VALUES (8,1,'ifAlias','','61','.1.3.6.1.2.1.31.1.1.1.18.61'); +INSERT INTO `host_snmp_cache` VALUES (8,1,'ifAlias','','62','.1.3.6.1.2.1.31.1.1.1.18.62'); +INSERT INTO `host_snmp_cache` VALUES (8,1,'ifAlias','','63','.1.3.6.1.2.1.31.1.1.1.18.63'); +INSERT INTO `host_snmp_cache` VALUES (8,1,'ifAlias','','64','.1.3.6.1.2.1.31.1.1.1.18.64'); +INSERT INTO `host_snmp_cache` VALUES (8,1,'ifAlias','','67','.1.3.6.1.2.1.31.1.1.1.18.67'); +INSERT INTO `host_snmp_cache` VALUES (8,1,'ifType','propVirtual(53)','1','.1.3.6.1.2.1.2.2.1.3.1'); +INSERT INTO `host_snmp_cache` VALUES (8,1,'ifType','slip(28)','2','.1.3.6.1.2.1.2.2.1.3.2'); +INSERT INTO `host_snmp_cache` VALUES (8,1,'ifType','ethernetCsmacd(6)','3','.1.3.6.1.2.1.2.2.1.3.3'); +INSERT INTO `host_snmp_cache` VALUES (8,1,'ifType','propVirtual(53)','4','.1.3.6.1.2.1.2.2.1.3.4'); +INSERT INTO `host_snmp_cache` VALUES (8,1,'ifType','propVirtual(53)','5','.1.3.6.1.2.1.2.2.1.3.5'); +INSERT INTO `host_snmp_cache` VALUES (8,1,'ifType','propVirtual(53)','6','.1.3.6.1.2.1.2.2.1.3.6'); +INSERT INTO `host_snmp_cache` VALUES (8,1,'ifType','propVirtual(53)','7','.1.3.6.1.2.1.2.2.1.3.7'); +INSERT INTO `host_snmp_cache` VALUES (8,1,'ifType','propVirtual(53)','8','.1.3.6.1.2.1.2.2.1.3.8'); +INSERT INTO `host_snmp_cache` VALUES (8,1,'ifType','ethernetCsmacd(6)','9','.1.3.6.1.2.1.2.2.1.3.9'); +INSERT INTO `host_snmp_cache` VALUES (8,1,'ifType','ethernetCsmacd(6)','10','.1.3.6.1.2.1.2.2.1.3.10'); +INSERT INTO `host_snmp_cache` VALUES (8,1,'ifType','ethernetCsmacd(6)','11','.1.3.6.1.2.1.2.2.1.3.11'); +INSERT INTO `host_snmp_cache` VALUES (8,1,'ifType','ethernetCsmacd(6)','12','.1.3.6.1.2.1.2.2.1.3.12'); +INSERT INTO `host_snmp_cache` VALUES (8,1,'ifType','ethernetCsmacd(6)','13','.1.3.6.1.2.1.2.2.1.3.13'); +INSERT INTO `host_snmp_cache` VALUES (8,1,'ifType','ethernetCsmacd(6)','14','.1.3.6.1.2.1.2.2.1.3.14'); +INSERT INTO `host_snmp_cache` VALUES (8,1,'ifType','ethernetCsmacd(6)','15','.1.3.6.1.2.1.2.2.1.3.15'); +INSERT INTO `host_snmp_cache` VALUES (8,1,'ifType','ethernetCsmacd(6)','16','.1.3.6.1.2.1.2.2.1.3.16'); +INSERT INTO `host_snmp_cache` VALUES (8,1,'ifType','ethernetCsmacd(6)','17','.1.3.6.1.2.1.2.2.1.3.17'); +INSERT INTO `host_snmp_cache` VALUES (8,1,'ifType','ethernetCsmacd(6)','18','.1.3.6.1.2.1.2.2.1.3.18'); +INSERT INTO `host_snmp_cache` VALUES (8,1,'ifType','ethernetCsmacd(6)','19','.1.3.6.1.2.1.2.2.1.3.19'); +INSERT INTO `host_snmp_cache` VALUES (8,1,'ifType','ethernetCsmacd(6)','20','.1.3.6.1.2.1.2.2.1.3.20'); +INSERT INTO `host_snmp_cache` VALUES (8,1,'ifType','ethernetCsmacd(6)','21','.1.3.6.1.2.1.2.2.1.3.21'); +INSERT INTO `host_snmp_cache` VALUES (8,1,'ifType','ethernetCsmacd(6)','22','.1.3.6.1.2.1.2.2.1.3.22'); +INSERT INTO `host_snmp_cache` VALUES (8,1,'ifType','ethernetCsmacd(6)','23','.1.3.6.1.2.1.2.2.1.3.23'); +INSERT INTO `host_snmp_cache` VALUES (8,1,'ifType','ethernetCsmacd(6)','24','.1.3.6.1.2.1.2.2.1.3.24'); +INSERT INTO `host_snmp_cache` VALUES (8,1,'ifType','ethernetCsmacd(6)','25','.1.3.6.1.2.1.2.2.1.3.25'); +INSERT INTO `host_snmp_cache` VALUES (8,1,'ifType','ethernetCsmacd(6)','26','.1.3.6.1.2.1.2.2.1.3.26'); +INSERT INTO `host_snmp_cache` VALUES (8,1,'ifType','ethernetCsmacd(6)','27','.1.3.6.1.2.1.2.2.1.3.27'); +INSERT INTO `host_snmp_cache` VALUES (8,1,'ifType','ethernetCsmacd(6)','28','.1.3.6.1.2.1.2.2.1.3.28'); +INSERT INTO `host_snmp_cache` VALUES (8,1,'ifType','ethernetCsmacd(6)','29','.1.3.6.1.2.1.2.2.1.3.29'); +INSERT INTO `host_snmp_cache` VALUES (8,1,'ifType','ethernetCsmacd(6)','30','.1.3.6.1.2.1.2.2.1.3.30'); +INSERT INTO `host_snmp_cache` VALUES (8,1,'ifType','ethernetCsmacd(6)','31','.1.3.6.1.2.1.2.2.1.3.31'); +INSERT INTO `host_snmp_cache` VALUES (8,1,'ifType','ethernetCsmacd(6)','32','.1.3.6.1.2.1.2.2.1.3.32'); +INSERT INTO `host_snmp_cache` VALUES (8,1,'ifType','ethernetCsmacd(6)','33','.1.3.6.1.2.1.2.2.1.3.33'); +INSERT INTO `host_snmp_cache` VALUES (8,1,'ifType','ethernetCsmacd(6)','34','.1.3.6.1.2.1.2.2.1.3.34'); +INSERT INTO `host_snmp_cache` VALUES (8,1,'ifType','ethernetCsmacd(6)','35','.1.3.6.1.2.1.2.2.1.3.35'); +INSERT INTO `host_snmp_cache` VALUES (8,1,'ifType','ethernetCsmacd(6)','36','.1.3.6.1.2.1.2.2.1.3.36'); +INSERT INTO `host_snmp_cache` VALUES (8,1,'ifType','ethernetCsmacd(6)','37','.1.3.6.1.2.1.2.2.1.3.37'); +INSERT INTO `host_snmp_cache` VALUES (8,1,'ifType','ethernetCsmacd(6)','38','.1.3.6.1.2.1.2.2.1.3.38'); +INSERT INTO `host_snmp_cache` VALUES (8,1,'ifType','ethernetCsmacd(6)','39','.1.3.6.1.2.1.2.2.1.3.39'); +INSERT INTO `host_snmp_cache` VALUES (8,1,'ifType','ethernetCsmacd(6)','40','.1.3.6.1.2.1.2.2.1.3.40'); +INSERT INTO `host_snmp_cache` VALUES (8,1,'ifType','ethernetCsmacd(6)','41','.1.3.6.1.2.1.2.2.1.3.41'); +INSERT INTO `host_snmp_cache` VALUES (8,1,'ifType','ethernetCsmacd(6)','42','.1.3.6.1.2.1.2.2.1.3.42'); +INSERT INTO `host_snmp_cache` VALUES (8,1,'ifType','ethernetCsmacd(6)','43','.1.3.6.1.2.1.2.2.1.3.43'); +INSERT INTO `host_snmp_cache` VALUES (8,1,'ifType','ethernetCsmacd(6)','44','.1.3.6.1.2.1.2.2.1.3.44'); +INSERT INTO `host_snmp_cache` VALUES (8,1,'ifType','ethernetCsmacd(6)','45','.1.3.6.1.2.1.2.2.1.3.45'); +INSERT INTO `host_snmp_cache` VALUES (8,1,'ifType','ethernetCsmacd(6)','46','.1.3.6.1.2.1.2.2.1.3.46'); +INSERT INTO `host_snmp_cache` VALUES (8,1,'ifType','ethernetCsmacd(6)','47','.1.3.6.1.2.1.2.2.1.3.47'); +INSERT INTO `host_snmp_cache` VALUES (8,1,'ifType','ethernetCsmacd(6)','48','.1.3.6.1.2.1.2.2.1.3.48'); +INSERT INTO `host_snmp_cache` VALUES (8,1,'ifType','ethernetCsmacd(6)','49','.1.3.6.1.2.1.2.2.1.3.49'); +INSERT INTO `host_snmp_cache` VALUES (8,1,'ifType','ethernetCsmacd(6)','50','.1.3.6.1.2.1.2.2.1.3.50'); +INSERT INTO `host_snmp_cache` VALUES (8,1,'ifType','ethernetCsmacd(6)','51','.1.3.6.1.2.1.2.2.1.3.51'); +INSERT INTO `host_snmp_cache` VALUES (8,1,'ifType','ethernetCsmacd(6)','52','.1.3.6.1.2.1.2.2.1.3.52'); +INSERT INTO `host_snmp_cache` VALUES (8,1,'ifType','ethernetCsmacd(6)','53','.1.3.6.1.2.1.2.2.1.3.53'); +INSERT INTO `host_snmp_cache` VALUES (8,1,'ifType','ethernetCsmacd(6)','54','.1.3.6.1.2.1.2.2.1.3.54'); +INSERT INTO `host_snmp_cache` VALUES (8,1,'ifType','ethernetCsmacd(6)','55','.1.3.6.1.2.1.2.2.1.3.55'); +INSERT INTO `host_snmp_cache` VALUES (8,1,'ifType','ethernetCsmacd(6)','56','.1.3.6.1.2.1.2.2.1.3.56'); +INSERT INTO `host_snmp_cache` VALUES (8,1,'ifType','ethernetCsmacd(6)','57','.1.3.6.1.2.1.2.2.1.3.57'); +INSERT INTO `host_snmp_cache` VALUES (8,1,'ifType','ethernetCsmacd(6)','58','.1.3.6.1.2.1.2.2.1.3.58'); +INSERT INTO `host_snmp_cache` VALUES (8,1,'ifType','propVirtual(53)','59','.1.3.6.1.2.1.2.2.1.3.59'); +INSERT INTO `host_snmp_cache` VALUES (8,1,'ifType','propVirtual(53)','60','.1.3.6.1.2.1.2.2.1.3.60'); +INSERT INTO `host_snmp_cache` VALUES (8,1,'ifType','propVirtual(53)','61','.1.3.6.1.2.1.2.2.1.3.61'); +INSERT INTO `host_snmp_cache` VALUES (8,1,'ifType','propVirtual(53)','62','.1.3.6.1.2.1.2.2.1.3.62'); +INSERT INTO `host_snmp_cache` VALUES (8,1,'ifType','propVirtual(53)','63','.1.3.6.1.2.1.2.2.1.3.63'); +INSERT INTO `host_snmp_cache` VALUES (8,1,'ifType','propVirtual(53)','64','.1.3.6.1.2.1.2.2.1.3.64'); +INSERT INTO `host_snmp_cache` VALUES (8,1,'ifType','ieee8023adLag(161)','67','.1.3.6.1.2.1.2.2.1.3.67'); +INSERT INTO `host_snmp_cache` VALUES (8,1,'ifSpeed','10000000','1','.1.3.6.1.2.1.2.2.1.5.1'); +INSERT INTO `host_snmp_cache` VALUES (8,1,'ifSpeed','9600','2','.1.3.6.1.2.1.2.2.1.5.2'); +INSERT INTO `host_snmp_cache` VALUES (8,1,'ifSpeed','10000000','3','.1.3.6.1.2.1.2.2.1.5.3'); +INSERT INTO `host_snmp_cache` VALUES (8,1,'ifSpeed','0','4','.1.3.6.1.2.1.2.2.1.5.4'); +INSERT INTO `host_snmp_cache` VALUES (8,1,'ifSpeed','0','5','.1.3.6.1.2.1.2.2.1.5.5'); +INSERT INTO `host_snmp_cache` VALUES (8,1,'ifSpeed','0','6','.1.3.6.1.2.1.2.2.1.5.6'); +INSERT INTO `host_snmp_cache` VALUES (8,1,'ifSpeed','0','7','.1.3.6.1.2.1.2.2.1.5.7'); +INSERT INTO `host_snmp_cache` VALUES (8,1,'ifSpeed','0','8','.1.3.6.1.2.1.2.2.1.5.8'); +INSERT INTO `host_snmp_cache` VALUES (8,1,'ifSpeed','100000000','9','.1.3.6.1.2.1.2.2.1.5.9'); +INSERT INTO `host_snmp_cache` VALUES (8,1,'ifSpeed','100000000','10','.1.3.6.1.2.1.2.2.1.5.10'); +INSERT INTO `host_snmp_cache` VALUES (8,1,'ifSpeed','100000000','11','.1.3.6.1.2.1.2.2.1.5.11'); +INSERT INTO `host_snmp_cache` VALUES (8,1,'ifSpeed','100000000','12','.1.3.6.1.2.1.2.2.1.5.12'); +INSERT INTO `host_snmp_cache` VALUES (8,1,'ifSpeed','100000000','13','.1.3.6.1.2.1.2.2.1.5.13'); +INSERT INTO `host_snmp_cache` VALUES (8,1,'ifSpeed','10000000','14','.1.3.6.1.2.1.2.2.1.5.14'); +INSERT INTO `host_snmp_cache` VALUES (8,1,'ifSpeed','100000000','15','.1.3.6.1.2.1.2.2.1.5.15'); +INSERT INTO `host_snmp_cache` VALUES (8,1,'ifSpeed','100000000','16','.1.3.6.1.2.1.2.2.1.5.16'); +INSERT INTO `host_snmp_cache` VALUES (8,1,'ifSpeed','100000000','17','.1.3.6.1.2.1.2.2.1.5.17'); +INSERT INTO `host_snmp_cache` VALUES (8,1,'ifSpeed','100000000','18','.1.3.6.1.2.1.2.2.1.5.18'); +INSERT INTO `host_snmp_cache` VALUES (8,1,'ifSpeed','10000000','19','.1.3.6.1.2.1.2.2.1.5.19'); +INSERT INTO `host_snmp_cache` VALUES (8,1,'ifSpeed','100000000','20','.1.3.6.1.2.1.2.2.1.5.20'); +INSERT INTO `host_snmp_cache` VALUES (8,1,'ifSpeed','100000000','21','.1.3.6.1.2.1.2.2.1.5.21'); +INSERT INTO `host_snmp_cache` VALUES (8,1,'ifSpeed','100000000','22','.1.3.6.1.2.1.2.2.1.5.22'); +INSERT INTO `host_snmp_cache` VALUES (8,1,'ifSpeed','10000000','23','.1.3.6.1.2.1.2.2.1.5.23'); +INSERT INTO `host_snmp_cache` VALUES (8,1,'ifSpeed','10000000','24','.1.3.6.1.2.1.2.2.1.5.24'); +INSERT INTO `host_snmp_cache` VALUES (8,1,'ifSpeed','100000000','25','.1.3.6.1.2.1.2.2.1.5.25'); +INSERT INTO `host_snmp_cache` VALUES (8,1,'ifSpeed','100000000','26','.1.3.6.1.2.1.2.2.1.5.26'); +INSERT INTO `host_snmp_cache` VALUES (8,1,'ifSpeed','10000000','27','.1.3.6.1.2.1.2.2.1.5.27'); +INSERT INTO `host_snmp_cache` VALUES (8,1,'ifSpeed','10000000','28','.1.3.6.1.2.1.2.2.1.5.28'); +INSERT INTO `host_snmp_cache` VALUES (8,1,'ifSpeed','10000000','29','.1.3.6.1.2.1.2.2.1.5.29'); +INSERT INTO `host_snmp_cache` VALUES (8,1,'ifSpeed','10000000','30','.1.3.6.1.2.1.2.2.1.5.30'); +INSERT INTO `host_snmp_cache` VALUES (8,1,'ifSpeed','10000000','31','.1.3.6.1.2.1.2.2.1.5.31'); +INSERT INTO `host_snmp_cache` VALUES (8,1,'ifSpeed','10000000','32','.1.3.6.1.2.1.2.2.1.5.32'); +INSERT INTO `host_snmp_cache` VALUES (8,1,'ifSpeed','10000000','33','.1.3.6.1.2.1.2.2.1.5.33'); +INSERT INTO `host_snmp_cache` VALUES (8,1,'ifSpeed','100000000','34','.1.3.6.1.2.1.2.2.1.5.34'); +INSERT INTO `host_snmp_cache` VALUES (8,1,'ifSpeed','100000000','35','.1.3.6.1.2.1.2.2.1.5.35'); +INSERT INTO `host_snmp_cache` VALUES (8,1,'ifSpeed','100000000','36','.1.3.6.1.2.1.2.2.1.5.36'); +INSERT INTO `host_snmp_cache` VALUES (8,1,'ifSpeed','100000000','37','.1.3.6.1.2.1.2.2.1.5.37'); +INSERT INTO `host_snmp_cache` VALUES (8,1,'ifSpeed','100000000','38','.1.3.6.1.2.1.2.2.1.5.38'); +INSERT INTO `host_snmp_cache` VALUES (8,1,'ifSpeed','10000000','39','.1.3.6.1.2.1.2.2.1.5.39'); +INSERT INTO `host_snmp_cache` VALUES (8,1,'ifSpeed','10000000','40','.1.3.6.1.2.1.2.2.1.5.40'); +INSERT INTO `host_snmp_cache` VALUES (8,1,'ifSpeed','10000000','41','.1.3.6.1.2.1.2.2.1.5.41'); +INSERT INTO `host_snmp_cache` VALUES (8,1,'ifSpeed','10000000','42','.1.3.6.1.2.1.2.2.1.5.42'); +INSERT INTO `host_snmp_cache` VALUES (8,1,'ifSpeed','10000000','43','.1.3.6.1.2.1.2.2.1.5.43'); +INSERT INTO `host_snmp_cache` VALUES (8,1,'ifSpeed','10000000','44','.1.3.6.1.2.1.2.2.1.5.44'); +INSERT INTO `host_snmp_cache` VALUES (8,1,'ifSpeed','100000000','45','.1.3.6.1.2.1.2.2.1.5.45'); +INSERT INTO `host_snmp_cache` VALUES (8,1,'ifSpeed','10000000','46','.1.3.6.1.2.1.2.2.1.5.46'); +INSERT INTO `host_snmp_cache` VALUES (8,1,'ifSpeed','10000000','47','.1.3.6.1.2.1.2.2.1.5.47'); +INSERT INTO `host_snmp_cache` VALUES (8,1,'ifSpeed','10000000','48','.1.3.6.1.2.1.2.2.1.5.48'); +INSERT INTO `host_snmp_cache` VALUES (8,1,'ifSpeed','10000000','49','.1.3.6.1.2.1.2.2.1.5.49'); +INSERT INTO `host_snmp_cache` VALUES (8,1,'ifSpeed','10000000','50','.1.3.6.1.2.1.2.2.1.5.50'); +INSERT INTO `host_snmp_cache` VALUES (8,1,'ifSpeed','10000000','51','.1.3.6.1.2.1.2.2.1.5.51'); +INSERT INTO `host_snmp_cache` VALUES (8,1,'ifSpeed','10000000','52','.1.3.6.1.2.1.2.2.1.5.52'); +INSERT INTO `host_snmp_cache` VALUES (8,1,'ifSpeed','10000000','53','.1.3.6.1.2.1.2.2.1.5.53'); +INSERT INTO `host_snmp_cache` VALUES (8,1,'ifSpeed','10000000','54','.1.3.6.1.2.1.2.2.1.5.54'); +INSERT INTO `host_snmp_cache` VALUES (8,1,'ifSpeed','10000000','55','.1.3.6.1.2.1.2.2.1.5.55'); +INSERT INTO `host_snmp_cache` VALUES (8,1,'ifSpeed','10000000','56','.1.3.6.1.2.1.2.2.1.5.56'); +INSERT INTO `host_snmp_cache` VALUES (8,1,'ifSpeed','1000000000','57','.1.3.6.1.2.1.2.2.1.5.57'); +INSERT INTO `host_snmp_cache` VALUES (8,1,'ifSpeed','1000000000','58','.1.3.6.1.2.1.2.2.1.5.58'); +INSERT INTO `host_snmp_cache` VALUES (8,1,'ifSpeed','0','59','.1.3.6.1.2.1.2.2.1.5.59'); +INSERT INTO `host_snmp_cache` VALUES (8,1,'ifSpeed','0','60','.1.3.6.1.2.1.2.2.1.5.60'); +INSERT INTO `host_snmp_cache` VALUES (8,1,'ifSpeed','0','61','.1.3.6.1.2.1.2.2.1.5.61'); +INSERT INTO `host_snmp_cache` VALUES (8,1,'ifSpeed','0','62','.1.3.6.1.2.1.2.2.1.5.62'); +INSERT INTO `host_snmp_cache` VALUES (8,1,'ifSpeed','0','63','.1.3.6.1.2.1.2.2.1.5.63'); +INSERT INTO `host_snmp_cache` VALUES (8,1,'ifSpeed','0','64','.1.3.6.1.2.1.2.2.1.5.64'); +INSERT INTO `host_snmp_cache` VALUES (8,1,'ifSpeed','200000000','67','.1.3.6.1.2.1.2.2.1.5.67'); +INSERT INTO `host_snmp_cache` VALUES (8,1,'ifHwAddr','00:00:07:84:8C:57:FF','1','.1.3.6.1.2.1.2.2.1.6.1'); +INSERT INTO `host_snmp_cache` VALUES (8,1,'ifHwAddr','00:00:00:00:00:00:00','2','.1.3.6.1.2.1.2.2.1.6.2'); +INSERT INTO `host_snmp_cache` VALUES (8,1,'ifHwAddr','00:00:07:84:8C:57:FE','3','.1.3.6.1.2.1.2.2.1.6.3'); +INSERT INTO `host_snmp_cache` VALUES (8,1,'ifHwAddr','00:00:07:84:8C:54:00','4','.1.3.6.1.2.1.2.2.1.6.4'); +INSERT INTO `host_snmp_cache` VALUES (8,1,'ifHwAddr','00:00:07:84:8C:57:E9','5','.1.3.6.1.2.1.2.2.1.6.5'); +INSERT INTO `host_snmp_cache` VALUES (8,1,'ifHwAddr','00:00:07:84:8C:57:EB','6','.1.3.6.1.2.1.2.2.1.6.6'); +INSERT INTO `host_snmp_cache` VALUES (8,1,'ifHwAddr','00:00:07:84:8C:57:EC','7','.1.3.6.1.2.1.2.2.1.6.7'); +INSERT INTO `host_snmp_cache` VALUES (8,1,'ifHwAddr','00:00:07:84:8C:57:EA','8','.1.3.6.1.2.1.2.2.1.6.8'); +INSERT INTO `host_snmp_cache` VALUES (8,1,'ifHwAddr','00:00:07:84:8C:57:9E','9','.1.3.6.1.2.1.2.2.1.6.9'); +INSERT INTO `host_snmp_cache` VALUES (8,1,'ifHwAddr','00:00:07:84:8C:57:9F','10','.1.3.6.1.2.1.2.2.1.6.10'); +INSERT INTO `host_snmp_cache` VALUES (8,1,'ifHwAddr','00:00:07:84:8C:57:A0','11','.1.3.6.1.2.1.2.2.1.6.11'); +INSERT INTO `host_snmp_cache` VALUES (8,1,'ifHwAddr','00:00:07:84:8C:57:A1','12','.1.3.6.1.2.1.2.2.1.6.12'); +INSERT INTO `host_snmp_cache` VALUES (8,1,'ifHwAddr','00:00:07:84:8C:57:A2','13','.1.3.6.1.2.1.2.2.1.6.13'); +INSERT INTO `host_snmp_cache` VALUES (8,1,'ifHwAddr','00:00:07:84:8C:57:A3','14','.1.3.6.1.2.1.2.2.1.6.14'); +INSERT INTO `host_snmp_cache` VALUES (8,1,'ifHwAddr','00:00:07:84:8C:57:A4','15','.1.3.6.1.2.1.2.2.1.6.15'); +INSERT INTO `host_snmp_cache` VALUES (8,1,'ifHwAddr','00:00:07:84:8C:57:A5','16','.1.3.6.1.2.1.2.2.1.6.16'); +INSERT INTO `host_snmp_cache` VALUES (8,1,'ifHwAddr','00:00:07:84:8C:57:A6','17','.1.3.6.1.2.1.2.2.1.6.17'); +INSERT INTO `host_snmp_cache` VALUES (8,1,'ifHwAddr','00:00:07:84:8C:57:A7','18','.1.3.6.1.2.1.2.2.1.6.18'); +INSERT INTO `host_snmp_cache` VALUES (8,1,'ifHwAddr','00:00:07:84:8C:57:A8','19','.1.3.6.1.2.1.2.2.1.6.19'); +INSERT INTO `host_snmp_cache` VALUES (8,1,'ifHwAddr','00:00:07:84:8C:57:A9','20','.1.3.6.1.2.1.2.2.1.6.20'); +INSERT INTO `host_snmp_cache` VALUES (8,1,'ifHwAddr','00:00:07:84:8C:57:AA','21','.1.3.6.1.2.1.2.2.1.6.21'); +INSERT INTO `host_snmp_cache` VALUES (8,1,'ifHwAddr','00:00:07:84:8C:57:AB','22','.1.3.6.1.2.1.2.2.1.6.22'); +INSERT INTO `host_snmp_cache` VALUES (8,1,'ifHwAddr','00:00:07:84:8C:57:AC','23','.1.3.6.1.2.1.2.2.1.6.23'); +INSERT INTO `host_snmp_cache` VALUES (8,1,'ifHwAddr','00:00:07:84:8C:57:AD','24','.1.3.6.1.2.1.2.2.1.6.24'); +INSERT INTO `host_snmp_cache` VALUES (8,1,'ifHwAddr','00:00:07:84:8C:57:AE','25','.1.3.6.1.2.1.2.2.1.6.25'); +INSERT INTO `host_snmp_cache` VALUES (8,1,'ifHwAddr','00:00:07:84:8C:57:AF','26','.1.3.6.1.2.1.2.2.1.6.26'); +INSERT INTO `host_snmp_cache` VALUES (8,1,'ifHwAddr','00:00:07:84:8C:57:B0','27','.1.3.6.1.2.1.2.2.1.6.27'); +INSERT INTO `host_snmp_cache` VALUES (8,1,'ifHwAddr','00:00:07:84:8C:57:B1','28','.1.3.6.1.2.1.2.2.1.6.28'); +INSERT INTO `host_snmp_cache` VALUES (8,1,'ifHwAddr','00:00:07:84:8C:57:B2','29','.1.3.6.1.2.1.2.2.1.6.29'); +INSERT INTO `host_snmp_cache` VALUES (8,1,'ifHwAddr','00:00:07:84:8C:57:B3','30','.1.3.6.1.2.1.2.2.1.6.30'); +INSERT INTO `host_snmp_cache` VALUES (8,1,'ifHwAddr','00:00:07:84:8C:57:B4','31','.1.3.6.1.2.1.2.2.1.6.31'); +INSERT INTO `host_snmp_cache` VALUES (8,1,'ifHwAddr','00:00:07:84:8C:57:B5','32','.1.3.6.1.2.1.2.2.1.6.32'); +INSERT INTO `host_snmp_cache` VALUES (8,1,'ifHwAddr','00:00:07:84:8C:57:B6','33','.1.3.6.1.2.1.2.2.1.6.33'); +INSERT INTO `host_snmp_cache` VALUES (8,1,'ifHwAddr','00:00:07:84:8C:57:B7','34','.1.3.6.1.2.1.2.2.1.6.34'); +INSERT INTO `host_snmp_cache` VALUES (8,1,'ifHwAddr','00:00:07:84:8C:57:B8','35','.1.3.6.1.2.1.2.2.1.6.35'); +INSERT INTO `host_snmp_cache` VALUES (8,1,'ifHwAddr','00:00:07:84:8C:57:B9','36','.1.3.6.1.2.1.2.2.1.6.36'); +INSERT INTO `host_snmp_cache` VALUES (8,1,'ifHwAddr','00:00:07:84:8C:57:BA','37','.1.3.6.1.2.1.2.2.1.6.37'); +INSERT INTO `host_snmp_cache` VALUES (8,1,'ifHwAddr','00:00:07:84:8C:57:BB','38','.1.3.6.1.2.1.2.2.1.6.38'); +INSERT INTO `host_snmp_cache` VALUES (8,1,'ifHwAddr','00:00:07:84:8C:57:BC','39','.1.3.6.1.2.1.2.2.1.6.39'); +INSERT INTO `host_snmp_cache` VALUES (8,1,'ifHwAddr','00:00:07:84:8C:57:BD','40','.1.3.6.1.2.1.2.2.1.6.40'); +INSERT INTO `host_snmp_cache` VALUES (8,1,'ifHwAddr','00:00:07:84:8C:57:BE','41','.1.3.6.1.2.1.2.2.1.6.41'); +INSERT INTO `host_snmp_cache` VALUES (8,1,'ifHwAddr','00:00:07:84:8C:57:BF','42','.1.3.6.1.2.1.2.2.1.6.42'); +INSERT INTO `host_snmp_cache` VALUES (8,1,'ifHwAddr','00:00:07:84:8C:57:C0','43','.1.3.6.1.2.1.2.2.1.6.43'); +INSERT INTO `host_snmp_cache` VALUES (8,1,'ifHwAddr','00:00:07:84:8C:57:C1','44','.1.3.6.1.2.1.2.2.1.6.44'); +INSERT INTO `host_snmp_cache` VALUES (8,1,'ifHwAddr','00:00:07:84:8C:57:C2','45','.1.3.6.1.2.1.2.2.1.6.45'); +INSERT INTO `host_snmp_cache` VALUES (8,1,'ifHwAddr','00:00:07:84:8C:57:C3','46','.1.3.6.1.2.1.2.2.1.6.46'); +INSERT INTO `host_snmp_cache` VALUES (8,1,'ifHwAddr','00:00:07:84:8C:57:C4','47','.1.3.6.1.2.1.2.2.1.6.47'); +INSERT INTO `host_snmp_cache` VALUES (8,1,'ifHwAddr','00:00:07:84:8C:57:C5','48','.1.3.6.1.2.1.2.2.1.6.48'); +INSERT INTO `host_snmp_cache` VALUES (8,1,'ifHwAddr','00:00:07:84:8C:57:C6','49','.1.3.6.1.2.1.2.2.1.6.49'); +INSERT INTO `host_snmp_cache` VALUES (8,1,'ifHwAddr','00:00:07:84:8C:57:C7','50','.1.3.6.1.2.1.2.2.1.6.50'); +INSERT INTO `host_snmp_cache` VALUES (8,1,'ifHwAddr','00:00:07:84:8C:57:C8','51','.1.3.6.1.2.1.2.2.1.6.51'); +INSERT INTO `host_snmp_cache` VALUES (8,1,'ifHwAddr','00:00:07:84:8C:57:C9','52','.1.3.6.1.2.1.2.2.1.6.52'); +INSERT INTO `host_snmp_cache` VALUES (8,1,'ifHwAddr','00:00:07:84:8C:57:CA','53','.1.3.6.1.2.1.2.2.1.6.53'); +INSERT INTO `host_snmp_cache` VALUES (8,1,'ifHwAddr','00:00:07:84:8C:57:CB','54','.1.3.6.1.2.1.2.2.1.6.54'); +INSERT INTO `host_snmp_cache` VALUES (8,1,'ifHwAddr','00:00:07:84:8C:57:CC','55','.1.3.6.1.2.1.2.2.1.6.55'); +INSERT INTO `host_snmp_cache` VALUES (8,1,'ifHwAddr','00:00:07:84:8C:57:CD','56','.1.3.6.1.2.1.2.2.1.6.56'); +INSERT INTO `host_snmp_cache` VALUES (8,1,'ifHwAddr','00:00:07:84:8C:57:CE','57','.1.3.6.1.2.1.2.2.1.6.57'); +INSERT INTO `host_snmp_cache` VALUES (8,1,'ifHwAddr','00:00:07:84:8C:57:CF','58','.1.3.6.1.2.1.2.2.1.6.58'); +INSERT INTO `host_snmp_cache` VALUES (8,1,'ifHwAddr','00:00:07:84:8C:54:29','59','.1.3.6.1.2.1.2.2.1.6.59'); +INSERT INTO `host_snmp_cache` VALUES (8,1,'ifHwAddr','00:00:07:84:8C:54:16','60','.1.3.6.1.2.1.2.2.1.6.60'); +INSERT INTO `host_snmp_cache` VALUES (8,1,'ifHwAddr','00:00:07:84:8C:54:15','61','.1.3.6.1.2.1.2.2.1.6.61'); +INSERT INTO `host_snmp_cache` VALUES (8,1,'ifHwAddr','00:00:07:84:8C:54:17','62','.1.3.6.1.2.1.2.2.1.6.62'); +INSERT INTO `host_snmp_cache` VALUES (8,1,'ifHwAddr','00:00:07:84:8C:54:18','63','.1.3.6.1.2.1.2.2.1.6.63'); +INSERT INTO `host_snmp_cache` VALUES (8,1,'ifHwAddr','00:00:07:84:8C:54:0F','64','.1.3.6.1.2.1.2.2.1.6.64'); +INSERT INTO `host_snmp_cache` VALUES (8,1,'ifHwAddr','00:00:00:00:00:00:00','67','.1.3.6.1.2.1.2.2.1.6.67'); +INSERT INTO `host_snmp_cache` VALUES (8,1,'ifIP','172.16.42.142','1','.1.3.6.1.2.1.4.20.1.2.172.16.42.142'); +INSERT INTO `host_snmp_cache` VALUES (8,1,'ifIP','192.168.0.2','3','.1.3.6.1.2.1.4.20.1.2.192.168.0.2'); +INSERT INTO `host_snmp_cache` VALUES (12,1,'ifIP','172.16.0.1','6','.1.3.6.1.2.1.4.20.1.2.172.16.0.1'); +INSERT INTO `host_snmp_cache` VALUES (12,1,'ifIP','127.0.0.1','1','.1.3.6.1.2.1.4.20.1.2.127.0.0.1'); +INSERT INTO `host_snmp_cache` VALUES (5,1,'ifHwAddr','00:00:20:ED:53:17:35','8','.1.3.6.1.2.1.2.2.1.6.8'); +INSERT INTO `host_snmp_cache` VALUES (12,1,'ifHwAddr','00:00:20:ED:53:17:35','10','.1.3.6.1.2.1.2.2.1.6.10'); +INSERT INTO `host_snmp_cache` VALUES (12,1,'ifHwAddr','','11','.1.3.6.1.2.1.2.2.1.6.11'); +INSERT INTO `host_snmp_cache` VALUES (12,1,'ifHwAddr','','12','.1.3.6.1.2.1.2.2.1.6.12'); +INSERT INTO `host_snmp_cache` VALUES (5,1,'ifIP','10.112.23.1','9','.1.3.6.1.2.1.4.20.1.2.10.112.23.1'); +INSERT INTO `host_snmp_cache` VALUES (5,1,'ifSpeed','10000000','14','.1.3.6.1.2.1.2.2.1.5.14'); +INSERT INTO `host_snmp_cache` VALUES (5,1,'ifSpeed','10000000','13','.1.3.6.1.2.1.2.2.1.5.13'); +INSERT INTO `host_snmp_cache` VALUES (5,1,'ifSpeed','10000000','10','.1.3.6.1.2.1.2.2.1.5.10'); +INSERT INTO `host_snmp_cache` VALUES (5,1,'ifSpeed','0','11','.1.3.6.1.2.1.2.2.1.5.11'); +INSERT INTO `host_snmp_cache` VALUES (5,1,'ifSpeed','0','12','.1.3.6.1.2.1.2.2.1.5.12'); +INSERT INTO `host_snmp_cache` VALUES (11,1,'ifSpeed','100000000','24','.1.3.6.1.2.1.2.2.1.5.24'); +INSERT INTO `host_snmp_cache` VALUES (11,1,'ifSpeed','100000000','25','.1.3.6.1.2.1.2.2.1.5.25'); +INSERT INTO `host_snmp_cache` VALUES (11,1,'ifSpeed','4294967295','26','.1.3.6.1.2.1.2.2.1.5.26'); +INSERT INTO `host_snmp_cache` VALUES (11,1,'ifSpeed','10000000','27','.1.3.6.1.2.1.2.2.1.5.27'); +INSERT INTO `host_snmp_cache` VALUES (11,1,'ifHwAddr','00:00:04:28:C7:91:80','1','.1.3.6.1.2.1.2.2.1.6.1'); +INSERT INTO `host_snmp_cache` VALUES (11,1,'ifHwAddr','00:00:04:28:C7:91:81','2','.1.3.6.1.2.1.2.2.1.6.2'); +INSERT INTO `host_snmp_cache` VALUES (11,1,'ifHwAddr','00:00:04:28:C7:91:82','3','.1.3.6.1.2.1.2.2.1.6.3'); +INSERT INTO `host_snmp_cache` VALUES (11,1,'ifHwAddr','00:00:04:28:C7:91:83','4','.1.3.6.1.2.1.2.2.1.6.4'); +INSERT INTO `host_snmp_cache` VALUES (11,1,'ifHwAddr','00:00:04:28:C7:91:84','5','.1.3.6.1.2.1.2.2.1.6.5'); +INSERT INTO `host_snmp_cache` VALUES (11,1,'ifHwAddr','00:00:04:28:C7:91:85','6','.1.3.6.1.2.1.2.2.1.6.6'); +INSERT INTO `host_snmp_cache` VALUES (11,1,'ifHwAddr','00:00:04:28:C7:91:86','7','.1.3.6.1.2.1.2.2.1.6.7'); +INSERT INTO `host_snmp_cache` VALUES (11,1,'ifHwAddr','00:00:04:28:C7:91:87','8','.1.3.6.1.2.1.2.2.1.6.8'); +INSERT INTO `host_snmp_cache` VALUES (11,1,'ifHwAddr','00:00:04:28:C7:91:88','9','.1.3.6.1.2.1.2.2.1.6.9'); +INSERT INTO `host_snmp_cache` VALUES (11,1,'ifHwAddr','00:00:04:28:C7:91:89','10','.1.3.6.1.2.1.2.2.1.6.10'); +INSERT INTO `host_snmp_cache` VALUES (11,1,'ifHwAddr','00:00:04:28:C7:91:8A','11','.1.3.6.1.2.1.2.2.1.6.11'); +INSERT INTO `host_snmp_cache` VALUES (11,1,'ifHwAddr','00:00:04:28:C7:91:8B','12','.1.3.6.1.2.1.2.2.1.6.12'); +INSERT INTO `host_snmp_cache` VALUES (11,1,'ifHwAddr','00:00:04:28:C7:91:8C','13','.1.3.6.1.2.1.2.2.1.6.13'); +INSERT INTO `host_snmp_cache` VALUES (11,1,'ifHwAddr','00:00:04:28:C7:91:8D','14','.1.3.6.1.2.1.2.2.1.6.14'); +INSERT INTO `host_snmp_cache` VALUES (11,1,'ifHwAddr','00:00:04:28:C7:91:8E','15','.1.3.6.1.2.1.2.2.1.6.15'); +INSERT INTO `host_snmp_cache` VALUES (11,1,'ifHwAddr','00:00:04:28:C7:91:8F','16','.1.3.6.1.2.1.2.2.1.6.16'); +INSERT INTO `host_snmp_cache` VALUES (11,1,'ifHwAddr','00:00:04:28:C7:91:90','17','.1.3.6.1.2.1.2.2.1.6.17'); +INSERT INTO `host_snmp_cache` VALUES (11,1,'ifHwAddr','00:00:04:28:C7:91:91','18','.1.3.6.1.2.1.2.2.1.6.18'); +INSERT INTO `host_snmp_cache` VALUES (11,1,'ifHwAddr','00:00:04:28:C7:91:92','19','.1.3.6.1.2.1.2.2.1.6.19'); +INSERT INTO `host_snmp_cache` VALUES (11,1,'ifHwAddr','00:00:04:28:C7:91:93','20','.1.3.6.1.2.1.2.2.1.6.20'); +INSERT INTO `host_snmp_cache` VALUES (11,1,'ifHwAddr','00:00:04:28:C7:91:94','21','.1.3.6.1.2.1.2.2.1.6.21'); +INSERT INTO `host_snmp_cache` VALUES (11,1,'ifHwAddr','00:00:04:28:C7:91:95','22','.1.3.6.1.2.1.2.2.1.6.22'); +INSERT INTO `host_snmp_cache` VALUES (11,1,'ifHwAddr','00:00:04:28:C7:91:96','23','.1.3.6.1.2.1.2.2.1.6.23'); +INSERT INTO `host_snmp_cache` VALUES (11,1,'ifHwAddr','00:00:04:28:C7:91:97','24','.1.3.6.1.2.1.2.2.1.6.24'); +INSERT INTO `host_snmp_cache` VALUES (11,1,'ifHwAddr','00:00:04:28:C7:91:98','25','.1.3.6.1.2.1.2.2.1.6.25'); +INSERT INTO `host_snmp_cache` VALUES (11,1,'ifHwAddr','','26','.1.3.6.1.2.1.2.2.1.6.26'); +INSERT INTO `host_snmp_cache` VALUES (11,1,'ifHwAddr','00:00:04:28:C7:91:80','27','.1.3.6.1.2.1.2.2.1.6.27'); +INSERT INTO `host_snmp_cache` VALUES (11,1,'ifIP','172.16.42.105','27','.1.3.6.1.2.1.4.20.1.2.172.16.42.105'); +INSERT INTO `host_snmp_cache` VALUES (5,1,'ifSpeed','10000000','9','.1.3.6.1.2.1.2.2.1.5.9'); +INSERT INTO `host_snmp_cache` VALUES (5,1,'ifSpeed','10000000','8','.1.3.6.1.2.1.2.2.1.5.8'); +INSERT INTO `host_snmp_cache` VALUES (12,1,'ifIP','85.176.10.157','17','.1.3.6.1.2.1.4.20.1.2.85.176.10.157'); +INSERT INTO `host_snmp_cache` VALUES (12,1,'ifIP','10.112.23.1','9','.1.3.6.1.2.1.4.20.1.2.10.112.23.1'); +INSERT INTO `host_snmp_cache` VALUES (11,1,'ifSpeed','100000000','21','.1.3.6.1.2.1.2.2.1.5.21'); +INSERT INTO `host_snmp_cache` VALUES (11,1,'ifSpeed','100000000','22','.1.3.6.1.2.1.2.2.1.5.22'); +INSERT INTO `host_snmp_cache` VALUES (11,1,'ifSpeed','100000000','23','.1.3.6.1.2.1.2.2.1.5.23'); +INSERT INTO `host_snmp_cache` VALUES (11,1,'ifIndex','1','1','.1.3.6.1.2.1.2.2.1.1.1'); +INSERT INTO `host_snmp_cache` VALUES (11,1,'ifIndex','2','2','.1.3.6.1.2.1.2.2.1.1.2'); +INSERT INTO `host_snmp_cache` VALUES (11,1,'ifIndex','3','3','.1.3.6.1.2.1.2.2.1.1.3'); +INSERT INTO `host_snmp_cache` VALUES (11,1,'ifIndex','4','4','.1.3.6.1.2.1.2.2.1.1.4'); +INSERT INTO `host_snmp_cache` VALUES (11,1,'ifIndex','5','5','.1.3.6.1.2.1.2.2.1.1.5'); +INSERT INTO `host_snmp_cache` VALUES (11,1,'ifIndex','6','6','.1.3.6.1.2.1.2.2.1.1.6'); +INSERT INTO `host_snmp_cache` VALUES (11,1,'ifIndex','7','7','.1.3.6.1.2.1.2.2.1.1.7'); +INSERT INTO `host_snmp_cache` VALUES (11,1,'ifIndex','8','8','.1.3.6.1.2.1.2.2.1.1.8'); +INSERT INTO `host_snmp_cache` VALUES (11,1,'ifIndex','9','9','.1.3.6.1.2.1.2.2.1.1.9'); +INSERT INTO `host_snmp_cache` VALUES (11,1,'ifIndex','10','10','.1.3.6.1.2.1.2.2.1.1.10'); +INSERT INTO `host_snmp_cache` VALUES (11,1,'ifIndex','11','11','.1.3.6.1.2.1.2.2.1.1.11'); +INSERT INTO `host_snmp_cache` VALUES (11,1,'ifIndex','12','12','.1.3.6.1.2.1.2.2.1.1.12'); +INSERT INTO `host_snmp_cache` VALUES (11,1,'ifIndex','13','13','.1.3.6.1.2.1.2.2.1.1.13'); +INSERT INTO `host_snmp_cache` VALUES (11,1,'ifIndex','14','14','.1.3.6.1.2.1.2.2.1.1.14'); +INSERT INTO `host_snmp_cache` VALUES (11,1,'ifIndex','15','15','.1.3.6.1.2.1.2.2.1.1.15'); +INSERT INTO `host_snmp_cache` VALUES (11,1,'ifIndex','16','16','.1.3.6.1.2.1.2.2.1.1.16'); +INSERT INTO `host_snmp_cache` VALUES (11,1,'ifIndex','17','17','.1.3.6.1.2.1.2.2.1.1.17'); +INSERT INTO `host_snmp_cache` VALUES (11,1,'ifIndex','18','18','.1.3.6.1.2.1.2.2.1.1.18'); +INSERT INTO `host_snmp_cache` VALUES (11,1,'ifIndex','19','19','.1.3.6.1.2.1.2.2.1.1.19'); +INSERT INTO `host_snmp_cache` VALUES (11,1,'ifIndex','20','20','.1.3.6.1.2.1.2.2.1.1.20'); +INSERT INTO `host_snmp_cache` VALUES (11,1,'ifIndex','21','21','.1.3.6.1.2.1.2.2.1.1.21'); +INSERT INTO `host_snmp_cache` VALUES (11,1,'ifIndex','22','22','.1.3.6.1.2.1.2.2.1.1.22'); +INSERT INTO `host_snmp_cache` VALUES (11,1,'ifIndex','23','23','.1.3.6.1.2.1.2.2.1.1.23'); +INSERT INTO `host_snmp_cache` VALUES (11,1,'ifIndex','24','24','.1.3.6.1.2.1.2.2.1.1.24'); +INSERT INTO `host_snmp_cache` VALUES (11,1,'ifIndex','25','25','.1.3.6.1.2.1.2.2.1.1.25'); +INSERT INTO `host_snmp_cache` VALUES (11,1,'ifIndex','26','26','.1.3.6.1.2.1.2.2.1.1.26'); +INSERT INTO `host_snmp_cache` VALUES (11,1,'ifIndex','27','27','.1.3.6.1.2.1.2.2.1.1.27'); +INSERT INTO `host_snmp_cache` VALUES (11,1,'ifOperStatus','Up','1','.1.3.6.1.2.1.2.2.1.8.1'); +INSERT INTO `host_snmp_cache` VALUES (11,1,'ifOperStatus','Up','2','.1.3.6.1.2.1.2.2.1.8.2'); +INSERT INTO `host_snmp_cache` VALUES (11,1,'ifOperStatus','Down','3','.1.3.6.1.2.1.2.2.1.8.3'); +INSERT INTO `host_snmp_cache` VALUES (11,1,'ifOperStatus','Down','4','.1.3.6.1.2.1.2.2.1.8.4'); +INSERT INTO `host_snmp_cache` VALUES (11,1,'ifOperStatus','Down','5','.1.3.6.1.2.1.2.2.1.8.5'); +INSERT INTO `host_snmp_cache` VALUES (11,1,'ifOperStatus','Down','6','.1.3.6.1.2.1.2.2.1.8.6'); +INSERT INTO `host_snmp_cache` VALUES (11,1,'ifOperStatus','Down','7','.1.3.6.1.2.1.2.2.1.8.7'); +INSERT INTO `host_snmp_cache` VALUES (11,1,'ifOperStatus','Down','8','.1.3.6.1.2.1.2.2.1.8.8'); +INSERT INTO `host_snmp_cache` VALUES (11,1,'ifOperStatus','Down','9','.1.3.6.1.2.1.2.2.1.8.9'); +INSERT INTO `host_snmp_cache` VALUES (11,1,'ifOperStatus','Down','10','.1.3.6.1.2.1.2.2.1.8.10'); +INSERT INTO `host_snmp_cache` VALUES (11,1,'ifOperStatus','Up','11','.1.3.6.1.2.1.2.2.1.8.11'); +INSERT INTO `host_snmp_cache` VALUES (11,1,'ifOperStatus','Down','12','.1.3.6.1.2.1.2.2.1.8.12'); +INSERT INTO `host_snmp_cache` VALUES (11,1,'ifOperStatus','Down','13','.1.3.6.1.2.1.2.2.1.8.13'); +INSERT INTO `host_snmp_cache` VALUES (11,1,'ifOperStatus','Down','14','.1.3.6.1.2.1.2.2.1.8.14'); +INSERT INTO `host_snmp_cache` VALUES (11,1,'ifOperStatus','Down','15','.1.3.6.1.2.1.2.2.1.8.15'); +INSERT INTO `host_snmp_cache` VALUES (11,1,'ifOperStatus','Down','16','.1.3.6.1.2.1.2.2.1.8.16'); +INSERT INTO `host_snmp_cache` VALUES (11,1,'ifOperStatus','Down','17','.1.3.6.1.2.1.2.2.1.8.17'); +INSERT INTO `host_snmp_cache` VALUES (11,1,'ifOperStatus','Up','18','.1.3.6.1.2.1.2.2.1.8.18'); +INSERT INTO `host_snmp_cache` VALUES (11,1,'ifOperStatus','Down','19','.1.3.6.1.2.1.2.2.1.8.19'); +INSERT INTO `host_snmp_cache` VALUES (11,1,'ifOperStatus','Up','20','.1.3.6.1.2.1.2.2.1.8.20'); +INSERT INTO `host_snmp_cache` VALUES (11,1,'ifOperStatus','Up','21','.1.3.6.1.2.1.2.2.1.8.21'); +INSERT INTO `host_snmp_cache` VALUES (11,1,'ifOperStatus','Up','22','.1.3.6.1.2.1.2.2.1.8.22'); +INSERT INTO `host_snmp_cache` VALUES (11,1,'ifOperStatus','Down','23','.1.3.6.1.2.1.2.2.1.8.23'); +INSERT INTO `host_snmp_cache` VALUES (11,1,'ifOperStatus','Down','24','.1.3.6.1.2.1.2.2.1.8.24'); +INSERT INTO `host_snmp_cache` VALUES (11,1,'ifOperStatus','Up','25','.1.3.6.1.2.1.2.2.1.8.25'); +INSERT INTO `host_snmp_cache` VALUES (11,1,'ifOperStatus','Up','26','.1.3.6.1.2.1.2.2.1.8.26'); +INSERT INTO `host_snmp_cache` VALUES (11,1,'ifOperStatus','Up','27','.1.3.6.1.2.1.2.2.1.8.27'); +INSERT INTO `host_snmp_cache` VALUES (11,1,'ifDescr','VLAN1','1','.1.3.6.1.2.1.2.2.1.2.1'); +INSERT INTO `host_snmp_cache` VALUES (11,1,'ifDescr','FastEthernet0/1','2','.1.3.6.1.2.1.2.2.1.2.2'); +INSERT INTO `host_snmp_cache` VALUES (11,1,'ifDescr','FastEthernet0/2','3','.1.3.6.1.2.1.2.2.1.2.3'); +INSERT INTO `host_snmp_cache` VALUES (11,1,'ifDescr','FastEthernet0/3','4','.1.3.6.1.2.1.2.2.1.2.4'); +INSERT INTO `host_snmp_cache` VALUES (11,1,'ifDescr','FastEthernet0/4','5','.1.3.6.1.2.1.2.2.1.2.5'); +INSERT INTO `host_snmp_cache` VALUES (11,1,'ifDescr','FastEthernet0/5','6','.1.3.6.1.2.1.2.2.1.2.6'); +INSERT INTO `host_snmp_cache` VALUES (11,1,'ifDescr','FastEthernet0/6','7','.1.3.6.1.2.1.2.2.1.2.7'); +INSERT INTO `host_snmp_cache` VALUES (11,1,'ifDescr','FastEthernet0/7','8','.1.3.6.1.2.1.2.2.1.2.8'); +INSERT INTO `host_snmp_cache` VALUES (11,1,'ifDescr','FastEthernet0/8','9','.1.3.6.1.2.1.2.2.1.2.9'); +INSERT INTO `host_snmp_cache` VALUES (11,1,'ifDescr','FastEthernet0/9','10','.1.3.6.1.2.1.2.2.1.2.10'); +INSERT INTO `host_snmp_cache` VALUES (11,1,'ifDescr','FastEthernet0/10','11','.1.3.6.1.2.1.2.2.1.2.11'); +INSERT INTO `host_snmp_cache` VALUES (11,1,'ifDescr','FastEthernet0/11','12','.1.3.6.1.2.1.2.2.1.2.12'); +INSERT INTO `host_snmp_cache` VALUES (11,1,'ifDescr','FastEthernet0/12','13','.1.3.6.1.2.1.2.2.1.2.13'); +INSERT INTO `host_snmp_cache` VALUES (11,1,'ifDescr','FastEthernet0/13','14','.1.3.6.1.2.1.2.2.1.2.14'); +INSERT INTO `host_snmp_cache` VALUES (11,1,'ifDescr','FastEthernet0/14','15','.1.3.6.1.2.1.2.2.1.2.15'); +INSERT INTO `host_snmp_cache` VALUES (11,1,'ifDescr','FastEthernet0/15','16','.1.3.6.1.2.1.2.2.1.2.16'); +INSERT INTO `host_snmp_cache` VALUES (11,1,'ifDescr','FastEthernet0/16','17','.1.3.6.1.2.1.2.2.1.2.17'); +INSERT INTO `host_snmp_cache` VALUES (11,1,'ifDescr','FastEthernet0/17','18','.1.3.6.1.2.1.2.2.1.2.18'); +INSERT INTO `host_snmp_cache` VALUES (11,1,'ifDescr','FastEthernet0/18','19','.1.3.6.1.2.1.2.2.1.2.19'); +INSERT INTO `host_snmp_cache` VALUES (11,1,'ifDescr','FastEthernet0/19','20','.1.3.6.1.2.1.2.2.1.2.20'); +INSERT INTO `host_snmp_cache` VALUES (11,1,'ifDescr','FastEthernet0/20','21','.1.3.6.1.2.1.2.2.1.2.21'); +INSERT INTO `host_snmp_cache` VALUES (11,1,'ifDescr','FastEthernet0/21','22','.1.3.6.1.2.1.2.2.1.2.22'); +INSERT INTO `host_snmp_cache` VALUES (11,1,'ifDescr','FastEthernet0/22','23','.1.3.6.1.2.1.2.2.1.2.23'); +INSERT INTO `host_snmp_cache` VALUES (11,1,'ifDescr','FastEthernet0/23','24','.1.3.6.1.2.1.2.2.1.2.24'); +INSERT INTO `host_snmp_cache` VALUES (11,1,'ifDescr','FastEthernet0/24','25','.1.3.6.1.2.1.2.2.1.2.25'); +INSERT INTO `host_snmp_cache` VALUES (11,1,'ifDescr','Null0','26','.1.3.6.1.2.1.2.2.1.2.26'); +INSERT INTO `host_snmp_cache` VALUES (11,1,'ifDescr','VLAN42','27','.1.3.6.1.2.1.2.2.1.2.27'); +INSERT INTO `host_snmp_cache` VALUES (11,1,'ifName','VL1','1','.1.3.6.1.2.1.31.1.1.1.1.1'); +INSERT INTO `host_snmp_cache` VALUES (11,1,'ifName','Fa0/1','2','.1.3.6.1.2.1.31.1.1.1.1.2'); +INSERT INTO `host_snmp_cache` VALUES (11,1,'ifName','Fa0/2','3','.1.3.6.1.2.1.31.1.1.1.1.3'); +INSERT INTO `host_snmp_cache` VALUES (11,1,'ifName','Fa0/3','4','.1.3.6.1.2.1.31.1.1.1.1.4'); +INSERT INTO `host_snmp_cache` VALUES (11,1,'ifName','Fa0/4','5','.1.3.6.1.2.1.31.1.1.1.1.5'); +INSERT INTO `host_snmp_cache` VALUES (11,1,'ifName','Fa0/5','6','.1.3.6.1.2.1.31.1.1.1.1.6'); +INSERT INTO `host_snmp_cache` VALUES (11,1,'ifName','Fa0/6','7','.1.3.6.1.2.1.31.1.1.1.1.7'); +INSERT INTO `host_snmp_cache` VALUES (11,1,'ifName','Fa0/7','8','.1.3.6.1.2.1.31.1.1.1.1.8'); +INSERT INTO `host_snmp_cache` VALUES (11,1,'ifName','Fa0/8','9','.1.3.6.1.2.1.31.1.1.1.1.9'); +INSERT INTO `host_snmp_cache` VALUES (11,1,'ifName','Fa0/9','10','.1.3.6.1.2.1.31.1.1.1.1.10'); +INSERT INTO `host_snmp_cache` VALUES (11,1,'ifName','Fa0/10','11','.1.3.6.1.2.1.31.1.1.1.1.11'); +INSERT INTO `host_snmp_cache` VALUES (11,1,'ifName','Fa0/11','12','.1.3.6.1.2.1.31.1.1.1.1.12'); +INSERT INTO `host_snmp_cache` VALUES (11,1,'ifName','Fa0/12','13','.1.3.6.1.2.1.31.1.1.1.1.13'); +INSERT INTO `host_snmp_cache` VALUES (11,1,'ifName','Fa0/13','14','.1.3.6.1.2.1.31.1.1.1.1.14'); +INSERT INTO `host_snmp_cache` VALUES (11,1,'ifName','Fa0/14','15','.1.3.6.1.2.1.31.1.1.1.1.15'); +INSERT INTO `host_snmp_cache` VALUES (11,1,'ifName','Fa0/15','16','.1.3.6.1.2.1.31.1.1.1.1.16'); +INSERT INTO `host_snmp_cache` VALUES (11,1,'ifName','Fa0/16','17','.1.3.6.1.2.1.31.1.1.1.1.17'); +INSERT INTO `host_snmp_cache` VALUES (11,1,'ifName','Fa0/17','18','.1.3.6.1.2.1.31.1.1.1.1.18'); +INSERT INTO `host_snmp_cache` VALUES (11,1,'ifName','Fa0/18','19','.1.3.6.1.2.1.31.1.1.1.1.19'); +INSERT INTO `host_snmp_cache` VALUES (11,1,'ifName','Fa0/19','20','.1.3.6.1.2.1.31.1.1.1.1.20'); +INSERT INTO `host_snmp_cache` VALUES (11,1,'ifName','Fa0/20','21','.1.3.6.1.2.1.31.1.1.1.1.21'); +INSERT INTO `host_snmp_cache` VALUES (11,1,'ifName','Fa0/21','22','.1.3.6.1.2.1.31.1.1.1.1.22'); +INSERT INTO `host_snmp_cache` VALUES (11,1,'ifName','Fa0/22','23','.1.3.6.1.2.1.31.1.1.1.1.23'); +INSERT INTO `host_snmp_cache` VALUES (11,1,'ifName','Fa0/23','24','.1.3.6.1.2.1.31.1.1.1.1.24'); +INSERT INTO `host_snmp_cache` VALUES (11,1,'ifName','Fa0/24','25','.1.3.6.1.2.1.31.1.1.1.1.25'); +INSERT INTO `host_snmp_cache` VALUES (11,1,'ifName','Nu0','26','.1.3.6.1.2.1.31.1.1.1.1.26'); +INSERT INTO `host_snmp_cache` VALUES (11,1,'ifName','VL42','27','.1.3.6.1.2.1.31.1.1.1.1.27'); +INSERT INTO `host_snmp_cache` VALUES (11,1,'ifAlias','','1','.1.3.6.1.2.1.31.1.1.1.18.1'); +INSERT INTO `host_snmp_cache` VALUES (11,1,'ifAlias','','2','.1.3.6.1.2.1.31.1.1.1.18.2'); +INSERT INTO `host_snmp_cache` VALUES (11,1,'ifAlias','','3','.1.3.6.1.2.1.31.1.1.1.18.3'); +INSERT INTO `host_snmp_cache` VALUES (11,1,'ifAlias','','4','.1.3.6.1.2.1.31.1.1.1.18.4'); +INSERT INTO `host_snmp_cache` VALUES (11,1,'ifAlias','','5','.1.3.6.1.2.1.31.1.1.1.18.5'); +INSERT INTO `host_snmp_cache` VALUES (11,1,'ifAlias','','6','.1.3.6.1.2.1.31.1.1.1.18.6'); +INSERT INTO `host_snmp_cache` VALUES (11,1,'ifAlias','','7','.1.3.6.1.2.1.31.1.1.1.18.7'); +INSERT INTO `host_snmp_cache` VALUES (11,1,'ifAlias','','8','.1.3.6.1.2.1.31.1.1.1.18.8'); +INSERT INTO `host_snmp_cache` VALUES (11,1,'ifAlias','','9','.1.3.6.1.2.1.31.1.1.1.18.9'); +INSERT INTO `host_snmp_cache` VALUES (11,1,'ifAlias','','10','.1.3.6.1.2.1.31.1.1.1.18.10'); +INSERT INTO `host_snmp_cache` VALUES (11,1,'ifAlias','','11','.1.3.6.1.2.1.31.1.1.1.18.11'); +INSERT INTO `host_snmp_cache` VALUES (11,1,'ifAlias','','12','.1.3.6.1.2.1.31.1.1.1.18.12'); +INSERT INTO `host_snmp_cache` VALUES (11,1,'ifAlias','','13','.1.3.6.1.2.1.31.1.1.1.18.13'); +INSERT INTO `host_snmp_cache` VALUES (11,1,'ifAlias','','14','.1.3.6.1.2.1.31.1.1.1.18.14'); +INSERT INTO `host_snmp_cache` VALUES (11,1,'ifAlias','','15','.1.3.6.1.2.1.31.1.1.1.18.15'); +INSERT INTO `host_snmp_cache` VALUES (11,1,'ifAlias','','16','.1.3.6.1.2.1.31.1.1.1.18.16'); +INSERT INTO `host_snmp_cache` VALUES (11,1,'ifAlias','','17','.1.3.6.1.2.1.31.1.1.1.18.17'); +INSERT INTO `host_snmp_cache` VALUES (11,1,'ifAlias','','18','.1.3.6.1.2.1.31.1.1.1.18.18'); +INSERT INTO `host_snmp_cache` VALUES (11,1,'ifAlias','','19','.1.3.6.1.2.1.31.1.1.1.18.19'); +INSERT INTO `host_snmp_cache` VALUES (11,1,'ifAlias','','20','.1.3.6.1.2.1.31.1.1.1.18.20'); +INSERT INTO `host_snmp_cache` VALUES (11,1,'ifAlias','','21','.1.3.6.1.2.1.31.1.1.1.18.21'); +INSERT INTO `host_snmp_cache` VALUES (11,1,'ifAlias','','22','.1.3.6.1.2.1.31.1.1.1.18.22'); +INSERT INTO `host_snmp_cache` VALUES (11,1,'ifAlias','','23','.1.3.6.1.2.1.31.1.1.1.18.23'); +INSERT INTO `host_snmp_cache` VALUES (11,1,'ifAlias','','24','.1.3.6.1.2.1.31.1.1.1.18.24'); +INSERT INTO `host_snmp_cache` VALUES (11,1,'ifAlias','','25','.1.3.6.1.2.1.31.1.1.1.18.25'); +INSERT INTO `host_snmp_cache` VALUES (11,1,'ifAlias','','26','.1.3.6.1.2.1.31.1.1.1.18.26'); +INSERT INTO `host_snmp_cache` VALUES (11,1,'ifAlias','','27','.1.3.6.1.2.1.31.1.1.1.18.27'); +INSERT INTO `host_snmp_cache` VALUES (11,1,'ifType','ethernetCsmacd(6)','1','.1.3.6.1.2.1.2.2.1.3.1'); +INSERT INTO `host_snmp_cache` VALUES (11,1,'ifType','ethernetCsmacd(6)','2','.1.3.6.1.2.1.2.2.1.3.2'); +INSERT INTO `host_snmp_cache` VALUES (11,1,'ifType','ethernetCsmacd(6)','3','.1.3.6.1.2.1.2.2.1.3.3'); +INSERT INTO `host_snmp_cache` VALUES (11,1,'ifType','ethernetCsmacd(6)','4','.1.3.6.1.2.1.2.2.1.3.4'); +INSERT INTO `host_snmp_cache` VALUES (11,1,'ifType','ethernetCsmacd(6)','5','.1.3.6.1.2.1.2.2.1.3.5'); +INSERT INTO `host_snmp_cache` VALUES (11,1,'ifType','ethernetCsmacd(6)','6','.1.3.6.1.2.1.2.2.1.3.6'); +INSERT INTO `host_snmp_cache` VALUES (11,1,'ifType','ethernetCsmacd(6)','7','.1.3.6.1.2.1.2.2.1.3.7'); +INSERT INTO `host_snmp_cache` VALUES (11,1,'ifType','ethernetCsmacd(6)','8','.1.3.6.1.2.1.2.2.1.3.8'); +INSERT INTO `host_snmp_cache` VALUES (11,1,'ifType','ethernetCsmacd(6)','9','.1.3.6.1.2.1.2.2.1.3.9'); +INSERT INTO `host_snmp_cache` VALUES (11,1,'ifType','ethernetCsmacd(6)','10','.1.3.6.1.2.1.2.2.1.3.10'); +INSERT INTO `host_snmp_cache` VALUES (11,1,'ifType','ethernetCsmacd(6)','11','.1.3.6.1.2.1.2.2.1.3.11'); +INSERT INTO `host_snmp_cache` VALUES (11,1,'ifType','ethernetCsmacd(6)','12','.1.3.6.1.2.1.2.2.1.3.12'); +INSERT INTO `host_snmp_cache` VALUES (11,1,'ifType','ethernetCsmacd(6)','13','.1.3.6.1.2.1.2.2.1.3.13'); +INSERT INTO `host_snmp_cache` VALUES (11,1,'ifType','ethernetCsmacd(6)','14','.1.3.6.1.2.1.2.2.1.3.14'); +INSERT INTO `host_snmp_cache` VALUES (11,1,'ifType','ethernetCsmacd(6)','15','.1.3.6.1.2.1.2.2.1.3.15'); +INSERT INTO `host_snmp_cache` VALUES (11,1,'ifType','ethernetCsmacd(6)','16','.1.3.6.1.2.1.2.2.1.3.16'); +INSERT INTO `host_snmp_cache` VALUES (11,1,'ifType','ethernetCsmacd(6)','17','.1.3.6.1.2.1.2.2.1.3.17'); +INSERT INTO `host_snmp_cache` VALUES (11,1,'ifType','ethernetCsmacd(6)','18','.1.3.6.1.2.1.2.2.1.3.18'); +INSERT INTO `host_snmp_cache` VALUES (11,1,'ifType','ethernetCsmacd(6)','19','.1.3.6.1.2.1.2.2.1.3.19'); +INSERT INTO `host_snmp_cache` VALUES (11,1,'ifType','ethernetCsmacd(6)','20','.1.3.6.1.2.1.2.2.1.3.20'); +INSERT INTO `host_snmp_cache` VALUES (11,1,'ifType','ethernetCsmacd(6)','21','.1.3.6.1.2.1.2.2.1.3.21'); +INSERT INTO `host_snmp_cache` VALUES (11,1,'ifType','ethernetCsmacd(6)','22','.1.3.6.1.2.1.2.2.1.3.22'); +INSERT INTO `host_snmp_cache` VALUES (11,1,'ifType','ethernetCsmacd(6)','23','.1.3.6.1.2.1.2.2.1.3.23'); +INSERT INTO `host_snmp_cache` VALUES (11,1,'ifType','ethernetCsmacd(6)','24','.1.3.6.1.2.1.2.2.1.3.24'); +INSERT INTO `host_snmp_cache` VALUES (11,1,'ifType','ethernetCsmacd(6)','25','.1.3.6.1.2.1.2.2.1.3.25'); +INSERT INTO `host_snmp_cache` VALUES (11,1,'ifType','other(1)','26','.1.3.6.1.2.1.2.2.1.3.26'); +INSERT INTO `host_snmp_cache` VALUES (11,1,'ifType','ethernetCsmacd(6)','27','.1.3.6.1.2.1.2.2.1.3.27'); +INSERT INTO `host_snmp_cache` VALUES (11,1,'ifSpeed','10000000','1','.1.3.6.1.2.1.2.2.1.5.1'); +INSERT INTO `host_snmp_cache` VALUES (11,1,'ifSpeed','100000000','2','.1.3.6.1.2.1.2.2.1.5.2'); +INSERT INTO `host_snmp_cache` VALUES (11,1,'ifSpeed','100000000','3','.1.3.6.1.2.1.2.2.1.5.3'); +INSERT INTO `host_snmp_cache` VALUES (11,1,'ifSpeed','100000000','4','.1.3.6.1.2.1.2.2.1.5.4'); +INSERT INTO `host_snmp_cache` VALUES (11,1,'ifSpeed','100000000','5','.1.3.6.1.2.1.2.2.1.5.5'); +INSERT INTO `host_snmp_cache` VALUES (11,1,'ifSpeed','100000000','6','.1.3.6.1.2.1.2.2.1.5.6'); +INSERT INTO `host_snmp_cache` VALUES (11,1,'ifSpeed','100000000','7','.1.3.6.1.2.1.2.2.1.5.7'); +INSERT INTO `host_snmp_cache` VALUES (11,1,'ifSpeed','100000000','8','.1.3.6.1.2.1.2.2.1.5.8'); +INSERT INTO `host_snmp_cache` VALUES (11,1,'ifSpeed','100000000','9','.1.3.6.1.2.1.2.2.1.5.9'); +INSERT INTO `host_snmp_cache` VALUES (11,1,'ifSpeed','100000000','10','.1.3.6.1.2.1.2.2.1.5.10'); +INSERT INTO `host_snmp_cache` VALUES (11,1,'ifSpeed','10000000','11','.1.3.6.1.2.1.2.2.1.5.11'); +INSERT INTO `host_snmp_cache` VALUES (11,1,'ifSpeed','100000000','12','.1.3.6.1.2.1.2.2.1.5.12'); +INSERT INTO `host_snmp_cache` VALUES (11,1,'ifSpeed','100000000','13','.1.3.6.1.2.1.2.2.1.5.13'); +INSERT INTO `host_snmp_cache` VALUES (11,1,'ifSpeed','100000000','14','.1.3.6.1.2.1.2.2.1.5.14'); +INSERT INTO `host_snmp_cache` VALUES (11,1,'ifSpeed','100000000','15','.1.3.6.1.2.1.2.2.1.5.15'); +INSERT INTO `host_snmp_cache` VALUES (11,1,'ifSpeed','100000000','16','.1.3.6.1.2.1.2.2.1.5.16'); +INSERT INTO `host_snmp_cache` VALUES (11,1,'ifSpeed','100000000','17','.1.3.6.1.2.1.2.2.1.5.17'); +INSERT INTO `host_snmp_cache` VALUES (11,1,'ifSpeed','100000000','18','.1.3.6.1.2.1.2.2.1.5.18'); +INSERT INTO `host_snmp_cache` VALUES (11,1,'ifSpeed','100000000','19','.1.3.6.1.2.1.2.2.1.5.19'); +INSERT INTO `host_snmp_cache` VALUES (11,1,'ifSpeed','100000000','20','.1.3.6.1.2.1.2.2.1.5.20'); +INSERT INTO `host_snmp_cache` VALUES (12,1,'ifIP','10.53.1.6','15','.1.3.6.1.2.1.4.20.1.2.10.53.1.6'); +INSERT INTO `host_snmp_cache` VALUES (12,1,'ifHwAddr','00:5E:87:AD:0F:4E:BE','14','.1.3.6.1.2.1.2.2.1.6.14'); +INSERT INTO `host_snmp_cache` VALUES (12,1,'ifHwAddr','','15','.1.3.6.1.2.1.2.2.1.6.15'); +INSERT INTO `host_snmp_cache` VALUES (12,1,'ifHwAddr','00:00:20:ED:53:17:35','8','.1.3.6.1.2.1.2.2.1.6.8'); +INSERT INTO `host_snmp_cache` VALUES (12,1,'ifHwAddr','00:00:20:ED:53:17:35','9','.1.3.6.1.2.1.2.2.1.6.9'); +INSERT INTO `host_snmp_cache` VALUES (12,1,'ifHwAddr','00:00:20:ED:53:17:35','7','.1.3.6.1.2.1.2.2.1.6.7'); +INSERT INTO `host_snmp_cache` VALUES (12,1,'ifHwAddr','00:00:20:ED:53:17:35','5','.1.3.6.1.2.1.2.2.1.6.5'); +INSERT INTO `host_snmp_cache` VALUES (12,1,'ifHwAddr','00:00:20:ED:53:17:35','4','.1.3.6.1.2.1.2.2.1.6.4'); +INSERT INTO `host_snmp_cache` VALUES (12,1,'ifHwAddr','00:00:00:00:00:8F:AE','3','.1.3.6.1.2.1.2.2.1.6.3'); +INSERT INTO `host_snmp_cache` VALUES (12,1,'ifHwAddr','00:16:DF:F2:41:8F:AE','2','.1.3.6.1.2.1.2.2.1.6.2'); +INSERT INTO `host_snmp_cache` VALUES (12,1,'ifHwAddr','','1','.1.3.6.1.2.1.2.2.1.6.1'); +INSERT INTO `host_snmp_cache` VALUES (12,1,'ifSpeed','0','15','.1.3.6.1.2.1.2.2.1.5.15'); +INSERT INTO `host_snmp_cache` VALUES (12,1,'ifSpeed','10000000','14','.1.3.6.1.2.1.2.2.1.5.14'); +INSERT INTO `host_snmp_cache` VALUES (12,1,'ifSpeed','10000000','13','.1.3.6.1.2.1.2.2.1.5.13'); +INSERT INTO `host_snmp_cache` VALUES (12,1,'ifSpeed','0','12','.1.3.6.1.2.1.2.2.1.5.12'); +INSERT INTO `host_snmp_cache` VALUES (12,1,'ifSpeed','0','11','.1.3.6.1.2.1.2.2.1.5.11'); +INSERT INTO `host_snmp_cache` VALUES (12,1,'ifSpeed','10000000','10','.1.3.6.1.2.1.2.2.1.5.10'); +INSERT INTO `host_snmp_cache` VALUES (12,1,'ifSpeed','10000000','9','.1.3.6.1.2.1.2.2.1.5.9'); +INSERT INTO `host_snmp_cache` VALUES (12,1,'ifSpeed','10000000','8','.1.3.6.1.2.1.2.2.1.5.8'); +INSERT INTO `host_snmp_cache` VALUES (12,1,'ifSpeed','10000000','7','.1.3.6.1.2.1.2.2.1.5.7'); +INSERT INTO `host_snmp_cache` VALUES (12,1,'ifSpeed','10000000','6','.1.3.6.1.2.1.2.2.1.5.6'); +INSERT INTO `host_snmp_cache` VALUES (12,1,'ifSpeed','100000000','5','.1.3.6.1.2.1.2.2.1.5.5'); +INSERT INTO `host_snmp_cache` VALUES (12,1,'ifSpeed','100000000','4','.1.3.6.1.2.1.2.2.1.5.4'); +INSERT INTO `host_snmp_cache` VALUES (12,1,'ifSpeed','0','3','.1.3.6.1.2.1.2.2.1.5.3'); +INSERT INTO `host_snmp_cache` VALUES (12,1,'ifSpeed','10000000','2','.1.3.6.1.2.1.2.2.1.5.2'); +INSERT INTO `host_snmp_cache` VALUES (12,1,'ifSpeed','10000000','1','.1.3.6.1.2.1.2.2.1.5.1'); +INSERT INTO `host_snmp_cache` VALUES (12,1,'ifType','ppp(23)','15','.1.3.6.1.2.1.2.2.1.3.15'); +INSERT INTO `host_snmp_cache` VALUES (12,1,'ifType','ethernetCsmacd(6)','10','.1.3.6.1.2.1.2.2.1.3.10'); +INSERT INTO `host_snmp_cache` VALUES (12,1,'ifType','other(1)','11','.1.3.6.1.2.1.2.2.1.3.11'); +INSERT INTO `host_snmp_cache` VALUES (12,1,'ifType','other(1)','12','.1.3.6.1.2.1.2.2.1.3.12'); +INSERT INTO `host_snmp_cache` VALUES (12,1,'ifType','ethernetCsmacd(6)','13','.1.3.6.1.2.1.2.2.1.3.13'); +INSERT INTO `host_snmp_cache` VALUES (12,1,'ifType','ethernetCsmacd(6)','14','.1.3.6.1.2.1.2.2.1.3.14'); +INSERT INTO `host_snmp_cache` VALUES (12,1,'ifType','ethernetCsmacd(6)','9','.1.3.6.1.2.1.2.2.1.3.9'); +INSERT INTO `host_snmp_cache` VALUES (12,1,'ifType','ethernetCsmacd(6)','8','.1.3.6.1.2.1.2.2.1.3.8'); +INSERT INTO `host_snmp_cache` VALUES (12,1,'ifIndex','1','1','.1.3.6.1.2.1.2.2.1.1.1'); +INSERT INTO `host_snmp_cache` VALUES (12,1,'ifIndex','2','2','.1.3.6.1.2.1.2.2.1.1.2'); +INSERT INTO `host_snmp_cache` VALUES (12,1,'ifIndex','3','3','.1.3.6.1.2.1.2.2.1.1.3'); +INSERT INTO `host_snmp_cache` VALUES (12,1,'ifIndex','4','4','.1.3.6.1.2.1.2.2.1.1.4'); +INSERT INTO `host_snmp_cache` VALUES (12,1,'ifIndex','5','5','.1.3.6.1.2.1.2.2.1.1.5'); +INSERT INTO `host_snmp_cache` VALUES (12,1,'ifIndex','6','6','.1.3.6.1.2.1.2.2.1.1.6'); +INSERT INTO `host_snmp_cache` VALUES (12,1,'ifIndex','7','7','.1.3.6.1.2.1.2.2.1.1.7'); +INSERT INTO `host_snmp_cache` VALUES (12,1,'ifIndex','8','8','.1.3.6.1.2.1.2.2.1.1.8'); +INSERT INTO `host_snmp_cache` VALUES (12,1,'ifIndex','9','9','.1.3.6.1.2.1.2.2.1.1.9'); +INSERT INTO `host_snmp_cache` VALUES (12,1,'ifIndex','10','10','.1.3.6.1.2.1.2.2.1.1.10'); +INSERT INTO `host_snmp_cache` VALUES (12,1,'ifIndex','11','11','.1.3.6.1.2.1.2.2.1.1.11'); +INSERT INTO `host_snmp_cache` VALUES (12,1,'ifIndex','12','12','.1.3.6.1.2.1.2.2.1.1.12'); +INSERT INTO `host_snmp_cache` VALUES (12,1,'ifIndex','13','13','.1.3.6.1.2.1.2.2.1.1.13'); +INSERT INTO `host_snmp_cache` VALUES (12,1,'ifIndex','14','14','.1.3.6.1.2.1.2.2.1.1.14'); +INSERT INTO `host_snmp_cache` VALUES (12,1,'ifIndex','15','15','.1.3.6.1.2.1.2.2.1.1.15'); +INSERT INTO `host_snmp_cache` VALUES (12,1,'ifOperStatus','Up','1','.1.3.6.1.2.1.2.2.1.8.1'); +INSERT INTO `host_snmp_cache` VALUES (12,1,'ifOperStatus','Down','2','.1.3.6.1.2.1.2.2.1.8.2'); +INSERT INTO `host_snmp_cache` VALUES (12,1,'ifOperStatus','Down','3','.1.3.6.1.2.1.2.2.1.8.3'); +INSERT INTO `host_snmp_cache` VALUES (12,1,'ifOperStatus','Up','4','.1.3.6.1.2.1.2.2.1.8.4'); +INSERT INTO `host_snmp_cache` VALUES (12,1,'ifOperStatus','Up','5','.1.3.6.1.2.1.2.2.1.8.5'); +INSERT INTO `host_snmp_cache` VALUES (12,1,'ifOperStatus','Up','6','.1.3.6.1.2.1.2.2.1.8.6'); +INSERT INTO `host_snmp_cache` VALUES (12,1,'ifOperStatus','Up','7','.1.3.6.1.2.1.2.2.1.8.7'); +INSERT INTO `host_snmp_cache` VALUES (12,1,'ifOperStatus','Up','8','.1.3.6.1.2.1.2.2.1.8.8'); +INSERT INTO `host_snmp_cache` VALUES (12,1,'ifOperStatus','Up','9','.1.3.6.1.2.1.2.2.1.8.9'); +INSERT INTO `host_snmp_cache` VALUES (12,1,'ifOperStatus','Up','10','.1.3.6.1.2.1.2.2.1.8.10'); +INSERT INTO `host_snmp_cache` VALUES (12,1,'ifOperStatus','Down','11','.1.3.6.1.2.1.2.2.1.8.11'); +INSERT INTO `host_snmp_cache` VALUES (12,1,'ifOperStatus','Down','12','.1.3.6.1.2.1.2.2.1.8.12'); +INSERT INTO `host_snmp_cache` VALUES (12,1,'ifOperStatus','Up','13','.1.3.6.1.2.1.2.2.1.8.13'); +INSERT INTO `host_snmp_cache` VALUES (12,1,'ifOperStatus','Up','14','.1.3.6.1.2.1.2.2.1.8.14'); +INSERT INTO `host_snmp_cache` VALUES (12,1,'ifOperStatus','Down','15','.1.3.6.1.2.1.2.2.1.8.15'); +INSERT INTO `host_snmp_cache` VALUES (12,1,'ifDescr','lo','1','.1.3.6.1.2.1.2.2.1.2.1'); +INSERT INTO `host_snmp_cache` VALUES (12,1,'ifDescr','dummy0','2','.1.3.6.1.2.1.2.2.1.2.2'); +INSERT INTO `host_snmp_cache` VALUES (12,1,'ifDescr','sit0','3','.1.3.6.1.2.1.2.2.1.2.3'); +INSERT INTO `host_snmp_cache` VALUES (12,1,'ifDescr','eth0','4','.1.3.6.1.2.1.2.2.1.2.4'); +INSERT INTO `host_snmp_cache` VALUES (12,1,'ifDescr','eth1','5','.1.3.6.1.2.1.2.2.1.2.5'); +INSERT INTO `host_snmp_cache` VALUES (12,1,'ifDescr','bond0','6','.1.3.6.1.2.1.2.2.1.2.6'); +INSERT INTO `host_snmp_cache` VALUES (12,1,'ifDescr','vlan24','7','.1.3.6.1.2.1.2.2.1.2.7'); +INSERT INTO `host_snmp_cache` VALUES (12,1,'ifDescr','vlan22','8','.1.3.6.1.2.1.2.2.1.2.8'); +INSERT INTO `host_snmp_cache` VALUES (12,1,'ifDescr','vlan23','9','.1.3.6.1.2.1.2.2.1.2.9'); +INSERT INTO `host_snmp_cache` VALUES (12,1,'ifDescr','vlan42','10','.1.3.6.1.2.1.2.2.1.2.10'); +INSERT INTO `host_snmp_cache` VALUES (12,1,'ifDescr','imq0','11','.1.3.6.1.2.1.2.2.1.2.11'); +INSERT INTO `host_snmp_cache` VALUES (12,1,'ifDescr','imq1','12','.1.3.6.1.2.1.2.2.1.2.12'); +INSERT INTO `host_snmp_cache` VALUES (12,1,'ifDescr','vlan25','13','.1.3.6.1.2.1.2.2.1.2.13'); +INSERT INTO `host_snmp_cache` VALUES (12,1,'ifDescr','tap0','14','.1.3.6.1.2.1.2.2.1.2.14'); +INSERT INTO `host_snmp_cache` VALUES (12,1,'ifDescr','ppp0','15','.1.3.6.1.2.1.2.2.1.2.15'); +INSERT INTO `host_snmp_cache` VALUES (12,1,'ifType','softwareLoopback(24)','1','.1.3.6.1.2.1.2.2.1.3.1'); +INSERT INTO `host_snmp_cache` VALUES (12,1,'ifType','ethernetCsmacd(6)','2','.1.3.6.1.2.1.2.2.1.3.2'); +INSERT INTO `host_snmp_cache` VALUES (12,1,'ifType','tunnel(131)','3','.1.3.6.1.2.1.2.2.1.3.3'); +INSERT INTO `host_snmp_cache` VALUES (12,1,'ifType','ethernetCsmacd(6)','4','.1.3.6.1.2.1.2.2.1.3.4'); +INSERT INTO `host_snmp_cache` VALUES (12,1,'ifType','ethernetCsmacd(6)','5','.1.3.6.1.2.1.2.2.1.3.5'); +INSERT INTO `host_snmp_cache` VALUES (12,1,'ifType','ethernetCsmacd(6)','6','.1.3.6.1.2.1.2.2.1.3.6'); +INSERT INTO `host_snmp_cache` VALUES (12,1,'ifType','ethernetCsmacd(6)','7','.1.3.6.1.2.1.2.2.1.3.7'); +INSERT INTO `host_snmp_cache` VALUES (5,1,'ifIP','127.0.0.1','1','.1.3.6.1.2.1.4.20.1.2.127.0.0.1'); +INSERT INTO `host_snmp_cache` VALUES (5,1,'ifIP','172.16.0.1','6','.1.3.6.1.2.1.4.20.1.2.172.16.0.1'); +INSERT INTO `host_snmp_cache` VALUES (5,1,'ifIP','10.53.1.6','15','.1.3.6.1.2.1.4.20.1.2.10.53.1.6'); +INSERT INTO `host_snmp_cache` VALUES (5,1,'ifHwAddr','','15','.1.3.6.1.2.1.2.2.1.6.15'); +INSERT INTO `host_snmp_cache` VALUES (5,1,'ifHwAddr','00:00:20:ED:53:17:35','10','.1.3.6.1.2.1.2.2.1.6.10'); +INSERT INTO `host_snmp_cache` VALUES (5,1,'ifHwAddr','','11','.1.3.6.1.2.1.2.2.1.6.11'); +INSERT INTO `host_snmp_cache` VALUES (5,1,'ifHwAddr','','12','.1.3.6.1.2.1.2.2.1.6.12'); +INSERT INTO `host_snmp_cache` VALUES (5,1,'ifSpeed','0','15','.1.3.6.1.2.1.2.2.1.5.15'); +INSERT INTO `host_snmp_cache` VALUES (5,1,'ifHwAddr','','1','.1.3.6.1.2.1.2.2.1.6.1'); +INSERT INTO `host_snmp_cache` VALUES (5,1,'ifHwAddr','00:16:DF:F2:41:8F:AE','2','.1.3.6.1.2.1.2.2.1.6.2'); +INSERT INTO `host_snmp_cache` VALUES (5,1,'ifHwAddr','00:00:00:00:00:8F:AE','3','.1.3.6.1.2.1.2.2.1.6.3'); +INSERT INTO `host_snmp_cache` VALUES (5,1,'ifHwAddr','00:00:20:ED:53:17:35','4','.1.3.6.1.2.1.2.2.1.6.4'); +INSERT INTO `host_snmp_cache` VALUES (5,1,'ifHwAddr','00:00:20:ED:53:17:35','5','.1.3.6.1.2.1.2.2.1.6.5'); +INSERT INTO `host_snmp_cache` VALUES (5,1,'ifHwAddr','00:00:20:ED:53:17:35','6','.1.3.6.1.2.1.2.2.1.6.6'); +INSERT INTO `host_snmp_cache` VALUES (5,1,'ifHwAddr','00:00:20:ED:53:17:35','7','.1.3.6.1.2.1.2.2.1.6.7'); +INSERT INTO `host_snmp_cache` VALUES (12,1,'ifHwAddr','00:00:20:ED:53:17:35','6','.1.3.6.1.2.1.2.2.1.6.6'); +INSERT INTO `host_snmp_cache` VALUES (5,1,'ifHwAddr','00:00:20:ED:53:17:35','13','.1.3.6.1.2.1.2.2.1.6.13'); +INSERT INTO `host_snmp_cache` VALUES (5,1,'ifHwAddr','00:5E:87:AD:0F:4E:BE','14','.1.3.6.1.2.1.2.2.1.6.14'); +INSERT INTO `host_snmp_cache` VALUES (5,1,'ifHwAddr','00:00:20:ED:53:17:35','9','.1.3.6.1.2.1.2.2.1.6.9'); +INSERT INTO `host_snmp_cache` VALUES (4,1,'ifOperStatus','Down','18','.1.3.6.1.2.1.2.2.1.8.18'); +INSERT INTO `host_snmp_cache` VALUES (4,1,'ifOperStatus','Down','17','.1.3.6.1.2.1.2.2.1.8.17'); +INSERT INTO `host_snmp_cache` VALUES (4,1,'ifOperStatus','Down','16','.1.3.6.1.2.1.2.2.1.8.16'); +INSERT INTO `host_snmp_cache` VALUES (4,1,'ifOperStatus','Down','15','.1.3.6.1.2.1.2.2.1.8.15'); +INSERT INTO `host_snmp_cache` VALUES (4,1,'ifOperStatus','Down','13','.1.3.6.1.2.1.2.2.1.8.13'); +INSERT INTO `host_snmp_cache` VALUES (4,1,'ifOperStatus','Down','14','.1.3.6.1.2.1.2.2.1.8.14'); +INSERT INTO `host_snmp_cache` VALUES (4,1,'ifOperStatus','Down','12','.1.3.6.1.2.1.2.2.1.8.12'); +INSERT INTO `host_snmp_cache` VALUES (4,1,'ifOperStatus','Down','10','.1.3.6.1.2.1.2.2.1.8.10'); +INSERT INTO `host_snmp_cache` VALUES (4,1,'ifOperStatus','Down','11','.1.3.6.1.2.1.2.2.1.8.11'); +INSERT INTO `host_snmp_cache` VALUES (4,1,'ifOperStatus','Down','9','.1.3.6.1.2.1.2.2.1.8.9'); +INSERT INTO `host_snmp_cache` VALUES (4,1,'ifOperStatus','Down','7','.1.3.6.1.2.1.2.2.1.8.7'); +INSERT INTO `host_snmp_cache` VALUES (4,1,'ifOperStatus','Down','8','.1.3.6.1.2.1.2.2.1.8.8'); +INSERT INTO `host_snmp_cache` VALUES (4,1,'ifOperStatus','Down','6','.1.3.6.1.2.1.2.2.1.8.6'); +INSERT INTO `host_snmp_cache` VALUES (4,1,'ifOperStatus','Down','3','.1.3.6.1.2.1.2.2.1.8.3'); +INSERT INTO `host_snmp_cache` VALUES (4,1,'ifOperStatus','Down','4','.1.3.6.1.2.1.2.2.1.8.4'); +INSERT INTO `host_snmp_cache` VALUES (4,1,'ifOperStatus','Down','5','.1.3.6.1.2.1.2.2.1.8.5'); +INSERT INTO `host_snmp_cache` VALUES (4,1,'ifOperStatus','Down','2','.1.3.6.1.2.1.2.2.1.8.2'); +INSERT INTO `host_snmp_cache` VALUES (4,1,'ifOperStatus','Up','1','.1.3.6.1.2.1.2.2.1.8.1'); +INSERT INTO `host_snmp_cache` VALUES (4,1,'ifIndex','1','1','.1.3.6.1.2.1.2.2.1.1.1'); +INSERT INTO `host_snmp_cache` VALUES (4,1,'ifIndex','2','2','.1.3.6.1.2.1.2.2.1.1.2'); +INSERT INTO `host_snmp_cache` VALUES (4,1,'ifIndex','3','3','.1.3.6.1.2.1.2.2.1.1.3'); +INSERT INTO `host_snmp_cache` VALUES (4,1,'ifIndex','4','4','.1.3.6.1.2.1.2.2.1.1.4'); +INSERT INTO `host_snmp_cache` VALUES (4,1,'ifIndex','5','5','.1.3.6.1.2.1.2.2.1.1.5'); +INSERT INTO `host_snmp_cache` VALUES (4,1,'ifIndex','6','6','.1.3.6.1.2.1.2.2.1.1.6'); +INSERT INTO `host_snmp_cache` VALUES (4,1,'ifIndex','7','7','.1.3.6.1.2.1.2.2.1.1.7'); +INSERT INTO `host_snmp_cache` VALUES (4,1,'ifIndex','8','8','.1.3.6.1.2.1.2.2.1.1.8'); +INSERT INTO `host_snmp_cache` VALUES (4,1,'ifIndex','9','9','.1.3.6.1.2.1.2.2.1.1.9'); +INSERT INTO `host_snmp_cache` VALUES (4,1,'ifIndex','10','10','.1.3.6.1.2.1.2.2.1.1.10'); +INSERT INTO `host_snmp_cache` VALUES (4,1,'ifIndex','11','11','.1.3.6.1.2.1.2.2.1.1.11'); +INSERT INTO `host_snmp_cache` VALUES (4,1,'ifIndex','12','12','.1.3.6.1.2.1.2.2.1.1.12'); +INSERT INTO `host_snmp_cache` VALUES (4,1,'ifIndex','13','13','.1.3.6.1.2.1.2.2.1.1.13'); +INSERT INTO `host_snmp_cache` VALUES (4,1,'ifIndex','14','14','.1.3.6.1.2.1.2.2.1.1.14'); +INSERT INTO `host_snmp_cache` VALUES (4,1,'ifIndex','15','15','.1.3.6.1.2.1.2.2.1.1.15'); +INSERT INTO `host_snmp_cache` VALUES (4,1,'ifIndex','16','16','.1.3.6.1.2.1.2.2.1.1.16'); +INSERT INTO `host_snmp_cache` VALUES (4,1,'ifIndex','17','17','.1.3.6.1.2.1.2.2.1.1.17'); +INSERT INTO `host_snmp_cache` VALUES (4,1,'ifIndex','18','18','.1.3.6.1.2.1.2.2.1.1.18'); +INSERT INTO `host_snmp_cache` VALUES (4,1,'ifIndex','19','19','.1.3.6.1.2.1.2.2.1.1.19'); +INSERT INTO `host_snmp_cache` VALUES (4,1,'ifIndex','20','20','.1.3.6.1.2.1.2.2.1.1.20'); +INSERT INTO `host_snmp_cache` VALUES (4,1,'ifIndex','21','21','.1.3.6.1.2.1.2.2.1.1.21'); +INSERT INTO `host_snmp_cache` VALUES (4,1,'ifIndex','22','22','.1.3.6.1.2.1.2.2.1.1.22'); +INSERT INTO `host_snmp_cache` VALUES (4,1,'ifIndex','23','23','.1.3.6.1.2.1.2.2.1.1.23'); +INSERT INTO `host_snmp_cache` VALUES (4,1,'ifIndex','24','24','.1.3.6.1.2.1.2.2.1.1.24'); +INSERT INTO `host_snmp_cache` VALUES (4,1,'ifIndex','25','25','.1.3.6.1.2.1.2.2.1.1.25'); +INSERT INTO `host_snmp_cache` VALUES (4,1,'ifIndex','26','26','.1.3.6.1.2.1.2.2.1.1.26'); +INSERT INTO `host_snmp_cache` VALUES (4,1,'ifIndex','27','27','.1.3.6.1.2.1.2.2.1.1.27'); +INSERT INTO `host_snmp_cache` VALUES (4,1,'ifIndex','28','28','.1.3.6.1.2.1.2.2.1.1.28'); +INSERT INTO `host_snmp_cache` VALUES (4,1,'ifIndex','29','29','.1.3.6.1.2.1.2.2.1.1.29'); +INSERT INTO `host_snmp_cache` VALUES (7,1,'ifSpeed','10000000','8','.1.3.6.1.2.1.2.2.1.5.8'); +INSERT INTO `host_snmp_cache` VALUES (7,1,'ifSpeed','100000000','9','.1.3.6.1.2.1.2.2.1.5.9'); +INSERT INTO `host_snmp_cache` VALUES (7,1,'ifSpeed','10000000','10','.1.3.6.1.2.1.2.2.1.5.10'); +INSERT INTO `host_snmp_cache` VALUES (7,1,'ifSpeed','10000000','11','.1.3.6.1.2.1.2.2.1.5.11'); +INSERT INTO `host_snmp_cache` VALUES (7,1,'ifSpeed','10000000','12','.1.3.6.1.2.1.2.2.1.5.12'); +INSERT INTO `host_snmp_cache` VALUES (7,1,'ifSpeed','100000000','13','.1.3.6.1.2.1.2.2.1.5.13'); +INSERT INTO `host_snmp_cache` VALUES (7,1,'ifSpeed','10000000','14','.1.3.6.1.2.1.2.2.1.5.14'); +INSERT INTO `host_snmp_cache` VALUES (7,1,'ifSpeed','10000000','15','.1.3.6.1.2.1.2.2.1.5.15'); +INSERT INTO `host_snmp_cache` VALUES (7,1,'ifSpeed','10000000','16','.1.3.6.1.2.1.2.2.1.5.16'); +INSERT INTO `host_snmp_cache` VALUES (7,1,'ifSpeed','10000000','17','.1.3.6.1.2.1.2.2.1.5.17'); +INSERT INTO `host_snmp_cache` VALUES (7,1,'ifSpeed','10000000','18','.1.3.6.1.2.1.2.2.1.5.18'); +INSERT INTO `host_snmp_cache` VALUES (7,1,'ifSpeed','10000000','19','.1.3.6.1.2.1.2.2.1.5.19'); +INSERT INTO `host_snmp_cache` VALUES (7,1,'ifSpeed','10000000','20','.1.3.6.1.2.1.2.2.1.5.20'); +INSERT INTO `host_snmp_cache` VALUES (7,1,'ifSpeed','10000000','21','.1.3.6.1.2.1.2.2.1.5.21'); +INSERT INTO `host_snmp_cache` VALUES (7,1,'ifSpeed','10000000','22','.1.3.6.1.2.1.2.2.1.5.22'); +INSERT INTO `host_snmp_cache` VALUES (7,1,'ifSpeed','10000000','23','.1.3.6.1.2.1.2.2.1.5.23'); +INSERT INTO `host_snmp_cache` VALUES (7,1,'ifSpeed','100000000','24','.1.3.6.1.2.1.2.2.1.5.24'); +INSERT INTO `host_snmp_cache` VALUES (7,1,'ifSpeed','100000000','25','.1.3.6.1.2.1.2.2.1.5.25'); +INSERT INTO `host_snmp_cache` VALUES (7,1,'ifSpeed','10000000','26','.1.3.6.1.2.1.2.2.1.5.26'); +INSERT INTO `host_snmp_cache` VALUES (7,1,'ifSpeed','4294967295','27','.1.3.6.1.2.1.2.2.1.5.27'); +INSERT INTO `host_snmp_cache` VALUES (7,1,'ifSpeed','1000000000','28','.1.3.6.1.2.1.2.2.1.5.28'); +INSERT INTO `host_snmp_cache` VALUES (7,1,'ifSpeed','1000000000','29','.1.3.6.1.2.1.2.2.1.5.29'); +INSERT INTO `host_snmp_cache` VALUES (7,1,'ifHwAddr','00:00:0C:30:BD:32:41','1','.1.3.6.1.2.1.2.2.1.6.1'); +INSERT INTO `host_snmp_cache` VALUES (7,1,'ifHwAddr','00:00:0C:30:BD:32:42','2','.1.3.6.1.2.1.2.2.1.6.2'); +INSERT INTO `host_snmp_cache` VALUES (7,1,'ifHwAddr','00:00:0C:30:BD:32:43','3','.1.3.6.1.2.1.2.2.1.6.3'); +INSERT INTO `host_snmp_cache` VALUES (7,1,'ifHwAddr','00:00:0C:30:BD:32:44','4','.1.3.6.1.2.1.2.2.1.6.4'); +INSERT INTO `host_snmp_cache` VALUES (7,1,'ifHwAddr','00:00:0C:30:BD:32:45','5','.1.3.6.1.2.1.2.2.1.6.5'); +INSERT INTO `host_snmp_cache` VALUES (7,1,'ifHwAddr','00:00:0C:30:BD:32:46','6','.1.3.6.1.2.1.2.2.1.6.6'); +INSERT INTO `host_snmp_cache` VALUES (7,1,'ifHwAddr','00:00:0C:30:BD:32:47','7','.1.3.6.1.2.1.2.2.1.6.7'); +INSERT INTO `host_snmp_cache` VALUES (7,1,'ifHwAddr','00:00:0C:30:BD:32:48','8','.1.3.6.1.2.1.2.2.1.6.8'); +INSERT INTO `host_snmp_cache` VALUES (7,1,'ifHwAddr','00:00:0C:30:BD:32:49','9','.1.3.6.1.2.1.2.2.1.6.9'); +INSERT INTO `host_snmp_cache` VALUES (7,1,'ifHwAddr','00:00:0C:30:BD:32:4A','10','.1.3.6.1.2.1.2.2.1.6.10'); +INSERT INTO `host_snmp_cache` VALUES (7,1,'ifHwAddr','00:00:0C:30:BD:32:4B','11','.1.3.6.1.2.1.2.2.1.6.11'); +INSERT INTO `host_snmp_cache` VALUES (7,1,'ifHwAddr','00:00:0C:30:BD:32:4C','12','.1.3.6.1.2.1.2.2.1.6.12'); +INSERT INTO `host_snmp_cache` VALUES (7,1,'ifHwAddr','00:00:0C:30:BD:32:4D','13','.1.3.6.1.2.1.2.2.1.6.13'); +INSERT INTO `host_snmp_cache` VALUES (7,1,'ifHwAddr','00:00:0C:30:BD:32:4E','14','.1.3.6.1.2.1.2.2.1.6.14'); +INSERT INTO `host_snmp_cache` VALUES (7,1,'ifHwAddr','00:00:0C:30:BD:32:4F','15','.1.3.6.1.2.1.2.2.1.6.15'); +INSERT INTO `host_snmp_cache` VALUES (7,1,'ifHwAddr','00:00:0C:30:BD:32:50','16','.1.3.6.1.2.1.2.2.1.6.16'); +INSERT INTO `host_snmp_cache` VALUES (7,1,'ifHwAddr','00:00:0C:30:BD:32:51','17','.1.3.6.1.2.1.2.2.1.6.17'); +INSERT INTO `host_snmp_cache` VALUES (7,1,'ifHwAddr','00:00:0C:30:BD:32:52','18','.1.3.6.1.2.1.2.2.1.6.18'); +INSERT INTO `host_snmp_cache` VALUES (7,1,'ifHwAddr','00:00:0C:30:BD:32:53','19','.1.3.6.1.2.1.2.2.1.6.19'); +INSERT INTO `host_snmp_cache` VALUES (7,1,'ifHwAddr','00:00:0C:30:BD:32:54','20','.1.3.6.1.2.1.2.2.1.6.20'); +INSERT INTO `host_snmp_cache` VALUES (7,1,'ifHwAddr','00:00:0C:30:BD:32:55','21','.1.3.6.1.2.1.2.2.1.6.21'); +INSERT INTO `host_snmp_cache` VALUES (7,1,'ifHwAddr','00:00:0C:30:BD:32:56','22','.1.3.6.1.2.1.2.2.1.6.22'); +INSERT INTO `host_snmp_cache` VALUES (7,1,'ifHwAddr','00:00:0C:30:BD:32:57','23','.1.3.6.1.2.1.2.2.1.6.23'); +INSERT INTO `host_snmp_cache` VALUES (7,1,'ifHwAddr','00:00:0C:30:BD:32:58','24','.1.3.6.1.2.1.2.2.1.6.24'); +INSERT INTO `host_snmp_cache` VALUES (7,1,'ifHwAddr','00:00:0C:30:BD:32:59','25','.1.3.6.1.2.1.2.2.1.6.25'); +INSERT INTO `host_snmp_cache` VALUES (7,1,'ifHwAddr','00:00:0C:30:BD:32:5A','26','.1.3.6.1.2.1.2.2.1.6.26'); +INSERT INTO `host_snmp_cache` VALUES (7,1,'ifHwAddr','','27','.1.3.6.1.2.1.2.2.1.6.27'); +INSERT INTO `host_snmp_cache` VALUES (7,1,'ifHwAddr','00:00:0C:30:BD:32:40','28','.1.3.6.1.2.1.2.2.1.6.28'); +INSERT INTO `host_snmp_cache` VALUES (7,1,'ifHwAddr','00:00:0C:30:BD:32:40','29','.1.3.6.1.2.1.2.2.1.6.29'); +INSERT INTO `host_snmp_cache` VALUES (7,1,'ifIP','172.16.42.104','29','.1.3.6.1.2.1.4.20.1.2.172.16.42.104'); +INSERT INTO `host_snmp_cache` VALUES (6,1,'ifHwAddr','00:00:0D:29:97:D8:57','23','.1.3.6.1.2.1.2.2.1.6.23'); +INSERT INTO `host_snmp_cache` VALUES (6,1,'ifHwAddr','00:00:0D:29:97:D8:49','9','.1.3.6.1.2.1.2.2.1.6.9'); +INSERT INTO `host_snmp_cache` VALUES (6,1,'ifHwAddr','00:00:0D:29:97:D8:4A','10','.1.3.6.1.2.1.2.2.1.6.10'); +INSERT INTO `host_snmp_cache` VALUES (6,1,'ifHwAddr','00:00:0D:29:97:D8:4B','11','.1.3.6.1.2.1.2.2.1.6.11'); +INSERT INTO `host_snmp_cache` VALUES (6,1,'ifHwAddr','00:00:0D:29:97:D8:4C','12','.1.3.6.1.2.1.2.2.1.6.12'); +INSERT INTO `host_snmp_cache` VALUES (6,1,'ifHwAddr','00:00:0D:29:97:D8:4D','13','.1.3.6.1.2.1.2.2.1.6.13'); +INSERT INTO `host_snmp_cache` VALUES (6,1,'ifHwAddr','00:00:0D:29:97:D8:4E','14','.1.3.6.1.2.1.2.2.1.6.14'); +INSERT INTO `host_snmp_cache` VALUES (6,1,'ifHwAddr','00:00:0D:29:97:D8:4F','15','.1.3.6.1.2.1.2.2.1.6.15'); +INSERT INTO `host_snmp_cache` VALUES (6,1,'ifHwAddr','00:00:0D:29:97:D8:50','16','.1.3.6.1.2.1.2.2.1.6.16'); +INSERT INTO `host_snmp_cache` VALUES (6,1,'ifHwAddr','00:00:0D:29:97:D8:51','17','.1.3.6.1.2.1.2.2.1.6.17'); +INSERT INTO `host_snmp_cache` VALUES (6,1,'ifHwAddr','00:00:0D:29:97:D8:52','18','.1.3.6.1.2.1.2.2.1.6.18'); +INSERT INTO `host_snmp_cache` VALUES (6,1,'ifHwAddr','00:00:0D:29:97:D8:53','19','.1.3.6.1.2.1.2.2.1.6.19'); +INSERT INTO `host_snmp_cache` VALUES (6,1,'ifHwAddr','00:00:0D:29:97:D8:54','20','.1.3.6.1.2.1.2.2.1.6.20'); +INSERT INTO `host_snmp_cache` VALUES (6,1,'ifHwAddr','00:00:0D:29:97:D8:55','21','.1.3.6.1.2.1.2.2.1.6.21'); +INSERT INTO `host_snmp_cache` VALUES (6,1,'ifHwAddr','00:00:0D:29:97:D8:56','22','.1.3.6.1.2.1.2.2.1.6.22'); +INSERT INTO `host_snmp_cache` VALUES (6,1,'ifSpeed','10000000','19','.1.3.6.1.2.1.2.2.1.5.19'); +INSERT INTO `host_snmp_cache` VALUES (6,1,'ifType','ethernetCsmacd(6)','4','.1.3.6.1.2.1.2.2.1.3.4'); +INSERT INTO `host_snmp_cache` VALUES (6,1,'ifType','ethernetCsmacd(6)','3','.1.3.6.1.2.1.2.2.1.3.3'); +INSERT INTO `host_snmp_cache` VALUES (6,1,'ifType','ethernetCsmacd(6)','2','.1.3.6.1.2.1.2.2.1.3.2'); +INSERT INTO `host_snmp_cache` VALUES (6,1,'ifAlias','','17','.1.3.6.1.2.1.31.1.1.1.18.17'); +INSERT INTO `host_snmp_cache` VALUES (6,1,'ifAlias','','18','.1.3.6.1.2.1.31.1.1.1.18.18'); +INSERT INTO `host_snmp_cache` VALUES (6,1,'ifAlias','','19','.1.3.6.1.2.1.31.1.1.1.18.19'); +INSERT INTO `host_snmp_cache` VALUES (6,1,'ifAlias','','20','.1.3.6.1.2.1.31.1.1.1.18.20'); +INSERT INTO `host_snmp_cache` VALUES (6,1,'ifAlias','','21','.1.3.6.1.2.1.31.1.1.1.18.21'); +INSERT INTO `host_snmp_cache` VALUES (6,1,'ifAlias','','22','.1.3.6.1.2.1.31.1.1.1.18.22'); +INSERT INTO `host_snmp_cache` VALUES (6,1,'ifAlias','','23','.1.3.6.1.2.1.31.1.1.1.18.23'); +INSERT INTO `host_snmp_cache` VALUES (6,1,'ifAlias','','24','.1.3.6.1.2.1.31.1.1.1.18.24'); +INSERT INTO `host_snmp_cache` VALUES (6,1,'ifAlias','','25','.1.3.6.1.2.1.31.1.1.1.18.25'); +INSERT INTO `host_snmp_cache` VALUES (6,1,'ifAlias','','26','.1.3.6.1.2.1.31.1.1.1.18.26'); +INSERT INTO `host_snmp_cache` VALUES (6,1,'ifAlias','','27','.1.3.6.1.2.1.31.1.1.1.18.27'); +INSERT INTO `host_snmp_cache` VALUES (6,1,'ifAlias','','28','.1.3.6.1.2.1.31.1.1.1.18.28'); +INSERT INTO `host_snmp_cache` VALUES (6,1,'ifAlias','','29','.1.3.6.1.2.1.31.1.1.1.18.29'); +INSERT INTO `host_snmp_cache` VALUES (6,1,'ifType','ethernetCsmacd(6)','1','.1.3.6.1.2.1.2.2.1.3.1'); +INSERT INTO `host_snmp_cache` VALUES (12,1,'ifIP','172.16.4.1','7','.1.3.6.1.2.1.4.20.1.2.172.16.4.1'); +INSERT INTO `host_snmp_cache` VALUES (13,6,'dskMount','/','/dev/hda1',''); +INSERT INTO `host_snmp_cache` VALUES (13,6,'dskDevice','/dev/hda1','/dev/hda1',''); +INSERT INTO `host_snmp_cache` VALUES (13,1,'ifSpeed','100000000','2','.1.3.6.1.2.1.2.2.1.5.2'); +INSERT INTO `host_snmp_cache` VALUES (6,1,'ifHwAddr','00:00:0D:29:97:D8:59','25','.1.3.6.1.2.1.2.2.1.6.25'); +INSERT INTO `host_snmp_cache` VALUES (6,1,'ifHwAddr','00:00:0D:29:97:D8:5A','26','.1.3.6.1.2.1.2.2.1.6.26'); +INSERT INTO `host_snmp_cache` VALUES (6,1,'ifHwAddr','','27','.1.3.6.1.2.1.2.2.1.6.27'); +INSERT INTO `host_snmp_cache` VALUES (6,1,'ifHwAddr','00:00:0D:29:97:D8:40','28','.1.3.6.1.2.1.2.2.1.6.28'); +INSERT INTO `host_snmp_cache` VALUES (6,1,'ifSpeed','10000000','18','.1.3.6.1.2.1.2.2.1.5.18'); +INSERT INTO `host_snmp_cache` VALUES (6,1,'ifSpeed','10000000','17','.1.3.6.1.2.1.2.2.1.5.17'); +INSERT INTO `host_snmp_cache` VALUES (6,1,'ifSpeed','10000000','16','.1.3.6.1.2.1.2.2.1.5.16'); +INSERT INTO `host_snmp_cache` VALUES (6,1,'ifSpeed','10000000','15','.1.3.6.1.2.1.2.2.1.5.15'); +INSERT INTO `host_snmp_cache` VALUES (6,1,'ifSpeed','10000000','12','.1.3.6.1.2.1.2.2.1.5.12'); +INSERT INTO `host_snmp_cache` VALUES (6,1,'ifSpeed','10000000','13','.1.3.6.1.2.1.2.2.1.5.13'); +INSERT INTO `host_snmp_cache` VALUES (6,1,'ifSpeed','10000000','14','.1.3.6.1.2.1.2.2.1.5.14'); +INSERT INTO `host_snmp_cache` VALUES (12,1,'ifIP','172.16.42.1','10','.1.3.6.1.2.1.4.20.1.2.172.16.42.1'); +INSERT INTO `host_snmp_cache` VALUES (12,1,'ifIP','192.168.178.2','8','.1.3.6.1.2.1.4.20.1.2.192.168.178.2'); +INSERT INTO `host_snmp_cache` VALUES (5,1,'ifIP','172.16.4.1','7','.1.3.6.1.2.1.4.20.1.2.172.16.4.1'); +INSERT INTO `host_snmp_cache` VALUES (5,1,'ifIP','172.16.25.1','13','.1.3.6.1.2.1.4.20.1.2.172.16.25.1'); +INSERT INTO `host_snmp_cache` VALUES (5,1,'ifIP','172.16.42.1','10','.1.3.6.1.2.1.4.20.1.2.172.16.42.1'); +INSERT INTO `host_snmp_cache` VALUES (5,1,'ifIP','192.168.178.2','8','.1.3.6.1.2.1.4.20.1.2.192.168.178.2'); +INSERT INTO `host_snmp_cache` VALUES (4,1,'ifHwAddr','00:00:0D:29:A9:64:86','6','.1.3.6.1.2.1.2.2.1.6.6'); +INSERT INTO `host_snmp_cache` VALUES (4,1,'ifHwAddr','00:00:0D:29:A9:64:85','5','.1.3.6.1.2.1.2.2.1.6.5'); +INSERT INTO `host_snmp_cache` VALUES (4,1,'ifHwAddr','00:00:0D:29:A9:64:84','4','.1.3.6.1.2.1.2.2.1.6.4'); +INSERT INTO `host_snmp_cache` VALUES (4,1,'ifSpeed','10000000','6','.1.3.6.1.2.1.2.2.1.5.6'); +INSERT INTO `host_snmp_cache` VALUES (3,1,'ifType','ethernetCsmacd(6)','26','.1.3.6.1.2.1.2.2.1.3.26'); +INSERT INTO `host_snmp_cache` VALUES (3,1,'ifType','other(1)','27','.1.3.6.1.2.1.2.2.1.3.27'); +INSERT INTO `host_snmp_cache` VALUES (3,1,'ifType','propVirtual(53)','28','.1.3.6.1.2.1.2.2.1.3.28'); +INSERT INTO `host_snmp_cache` VALUES (3,1,'ifType','propVirtual(53)','29','.1.3.6.1.2.1.2.2.1.3.29'); +INSERT INTO `host_snmp_cache` VALUES (3,1,'ifSpeed','100000000','1','.1.3.6.1.2.1.2.2.1.5.1'); +INSERT INTO `host_snmp_cache` VALUES (3,1,'ifSpeed','10000000','2','.1.3.6.1.2.1.2.2.1.5.2'); +INSERT INTO `host_snmp_cache` VALUES (3,1,'ifSpeed','10000000','3','.1.3.6.1.2.1.2.2.1.5.3'); +INSERT INTO `host_snmp_cache` VALUES (3,1,'ifSpeed','10000000','4','.1.3.6.1.2.1.2.2.1.5.4'); +INSERT INTO `host_snmp_cache` VALUES (3,1,'ifSpeed','10000000','5','.1.3.6.1.2.1.2.2.1.5.5'); +INSERT INTO `host_snmp_cache` VALUES (3,1,'ifSpeed','10000000','6','.1.3.6.1.2.1.2.2.1.5.6'); +INSERT INTO `host_snmp_cache` VALUES (3,1,'ifSpeed','10000000','7','.1.3.6.1.2.1.2.2.1.5.7'); +INSERT INTO `host_snmp_cache` VALUES (3,1,'ifSpeed','10000000','8','.1.3.6.1.2.1.2.2.1.5.8'); +INSERT INTO `host_snmp_cache` VALUES (3,1,'ifSpeed','100000000','9','.1.3.6.1.2.1.2.2.1.5.9'); +INSERT INTO `host_snmp_cache` VALUES (3,1,'ifSpeed','100000000','10','.1.3.6.1.2.1.2.2.1.5.10'); +INSERT INTO `host_snmp_cache` VALUES (3,1,'ifSpeed','100000000','11','.1.3.6.1.2.1.2.2.1.5.11'); +INSERT INTO `host_snmp_cache` VALUES (3,1,'ifSpeed','10000000','12','.1.3.6.1.2.1.2.2.1.5.12'); +INSERT INTO `host_snmp_cache` VALUES (3,1,'ifSpeed','10000000','13','.1.3.6.1.2.1.2.2.1.5.13'); +INSERT INTO `host_snmp_cache` VALUES (3,1,'ifSpeed','10000000','14','.1.3.6.1.2.1.2.2.1.5.14'); +INSERT INTO `host_snmp_cache` VALUES (3,1,'ifSpeed','100000000','15','.1.3.6.1.2.1.2.2.1.5.15'); +INSERT INTO `host_snmp_cache` VALUES (3,1,'ifSpeed','10000000','16','.1.3.6.1.2.1.2.2.1.5.16'); +INSERT INTO `host_snmp_cache` VALUES (3,1,'ifSpeed','10000000','17','.1.3.6.1.2.1.2.2.1.5.17'); +INSERT INTO `host_snmp_cache` VALUES (3,1,'ifSpeed','10000000','18','.1.3.6.1.2.1.2.2.1.5.18'); +INSERT INTO `host_snmp_cache` VALUES (3,1,'ifSpeed','10000000','19','.1.3.6.1.2.1.2.2.1.5.19'); +INSERT INTO `host_snmp_cache` VALUES (3,1,'ifSpeed','10000000','20','.1.3.6.1.2.1.2.2.1.5.20'); +INSERT INTO `host_snmp_cache` VALUES (3,1,'ifSpeed','10000000','21','.1.3.6.1.2.1.2.2.1.5.21'); +INSERT INTO `host_snmp_cache` VALUES (3,1,'ifSpeed','10000000','22','.1.3.6.1.2.1.2.2.1.5.22'); +INSERT INTO `host_snmp_cache` VALUES (3,1,'ifSpeed','100000000','23','.1.3.6.1.2.1.2.2.1.5.23'); +INSERT INTO `host_snmp_cache` VALUES (3,1,'ifSpeed','10000000','24','.1.3.6.1.2.1.2.2.1.5.24'); +INSERT INTO `host_snmp_cache` VALUES (3,1,'ifSpeed','100000000','25','.1.3.6.1.2.1.2.2.1.5.25'); +INSERT INTO `host_snmp_cache` VALUES (3,1,'ifSpeed','100000000','26','.1.3.6.1.2.1.2.2.1.5.26'); +INSERT INTO `host_snmp_cache` VALUES (3,1,'ifSpeed','4294967295','27','.1.3.6.1.2.1.2.2.1.5.27'); +INSERT INTO `host_snmp_cache` VALUES (3,1,'ifSpeed','1000000000','28','.1.3.6.1.2.1.2.2.1.5.28'); +INSERT INTO `host_snmp_cache` VALUES (3,1,'ifSpeed','1000000000','29','.1.3.6.1.2.1.2.2.1.5.29'); +INSERT INTO `host_snmp_cache` VALUES (3,1,'ifHwAddr','00:00:0C:30:8F:22:41','1','.1.3.6.1.2.1.2.2.1.6.1'); +INSERT INTO `host_snmp_cache` VALUES (3,1,'ifHwAddr','00:00:0C:30:8F:22:42','2','.1.3.6.1.2.1.2.2.1.6.2'); +INSERT INTO `host_snmp_cache` VALUES (3,1,'ifHwAddr','00:00:0C:30:8F:22:43','3','.1.3.6.1.2.1.2.2.1.6.3'); +INSERT INTO `host_snmp_cache` VALUES (3,1,'ifHwAddr','00:00:0C:30:8F:22:44','4','.1.3.6.1.2.1.2.2.1.6.4'); +INSERT INTO `host_snmp_cache` VALUES (3,1,'ifHwAddr','00:00:0C:30:8F:22:45','5','.1.3.6.1.2.1.2.2.1.6.5'); +INSERT INTO `host_snmp_cache` VALUES (3,1,'ifHwAddr','00:00:0C:30:8F:22:46','6','.1.3.6.1.2.1.2.2.1.6.6'); +INSERT INTO `host_snmp_cache` VALUES (3,1,'ifHwAddr','00:00:0C:30:8F:22:47','7','.1.3.6.1.2.1.2.2.1.6.7'); +INSERT INTO `host_snmp_cache` VALUES (3,1,'ifHwAddr','00:00:0C:30:8F:22:48','8','.1.3.6.1.2.1.2.2.1.6.8'); +INSERT INTO `host_snmp_cache` VALUES (3,1,'ifHwAddr','00:00:0C:30:8F:22:49','9','.1.3.6.1.2.1.2.2.1.6.9'); +INSERT INTO `host_snmp_cache` VALUES (3,1,'ifHwAddr','00:00:0C:30:8F:22:4A','10','.1.3.6.1.2.1.2.2.1.6.10'); +INSERT INTO `host_snmp_cache` VALUES (3,1,'ifHwAddr','00:00:0C:30:8F:22:4B','11','.1.3.6.1.2.1.2.2.1.6.11'); +INSERT INTO `host_snmp_cache` VALUES (3,1,'ifHwAddr','00:00:0C:30:8F:22:4C','12','.1.3.6.1.2.1.2.2.1.6.12'); +INSERT INTO `host_snmp_cache` VALUES (3,1,'ifHwAddr','00:00:0C:30:8F:22:4D','13','.1.3.6.1.2.1.2.2.1.6.13'); +INSERT INTO `host_snmp_cache` VALUES (3,1,'ifHwAddr','00:00:0C:30:8F:22:4E','14','.1.3.6.1.2.1.2.2.1.6.14'); +INSERT INTO `host_snmp_cache` VALUES (3,1,'ifHwAddr','00:00:0C:30:8F:22:4F','15','.1.3.6.1.2.1.2.2.1.6.15'); +INSERT INTO `host_snmp_cache` VALUES (3,1,'ifHwAddr','00:00:0C:30:8F:22:50','16','.1.3.6.1.2.1.2.2.1.6.16'); +INSERT INTO `host_snmp_cache` VALUES (3,1,'ifHwAddr','00:00:0C:30:8F:22:51','17','.1.3.6.1.2.1.2.2.1.6.17'); +INSERT INTO `host_snmp_cache` VALUES (3,1,'ifHwAddr','00:00:0C:30:8F:22:52','18','.1.3.6.1.2.1.2.2.1.6.18'); +INSERT INTO `host_snmp_cache` VALUES (3,1,'ifHwAddr','00:00:0C:30:8F:22:53','19','.1.3.6.1.2.1.2.2.1.6.19'); +INSERT INTO `host_snmp_cache` VALUES (3,1,'ifHwAddr','00:00:0C:30:8F:22:54','20','.1.3.6.1.2.1.2.2.1.6.20'); +INSERT INTO `host_snmp_cache` VALUES (3,1,'ifHwAddr','00:00:0C:30:8F:22:55','21','.1.3.6.1.2.1.2.2.1.6.21'); +INSERT INTO `host_snmp_cache` VALUES (3,1,'ifHwAddr','00:00:0C:30:8F:22:56','22','.1.3.6.1.2.1.2.2.1.6.22'); +INSERT INTO `host_snmp_cache` VALUES (3,1,'ifHwAddr','00:00:0C:30:8F:22:57','23','.1.3.6.1.2.1.2.2.1.6.23'); +INSERT INTO `host_snmp_cache` VALUES (3,1,'ifHwAddr','00:00:0C:30:8F:22:58','24','.1.3.6.1.2.1.2.2.1.6.24'); +INSERT INTO `host_snmp_cache` VALUES (3,1,'ifHwAddr','00:00:0C:30:8F:22:59','25','.1.3.6.1.2.1.2.2.1.6.25'); +INSERT INTO `host_snmp_cache` VALUES (3,1,'ifHwAddr','00:00:0C:30:8F:22:5A','26','.1.3.6.1.2.1.2.2.1.6.26'); +INSERT INTO `host_snmp_cache` VALUES (3,1,'ifHwAddr','','27','.1.3.6.1.2.1.2.2.1.6.27'); +INSERT INTO `host_snmp_cache` VALUES (3,1,'ifHwAddr','00:00:0C:30:8F:22:40','28','.1.3.6.1.2.1.2.2.1.6.28'); +INSERT INTO `host_snmp_cache` VALUES (3,1,'ifHwAddr','00:00:0C:30:8F:22:40','29','.1.3.6.1.2.1.2.2.1.6.29'); +INSERT INTO `host_snmp_cache` VALUES (3,1,'ifIP','172.16.42.101','29','.1.3.6.1.2.1.4.20.1.2.172.16.42.101'); +INSERT INTO `host_snmp_cache` VALUES (6,1,'ifHwAddr','00:00:0D:29:97:D8:58','24','.1.3.6.1.2.1.2.2.1.6.24'); +INSERT INTO `host_snmp_cache` VALUES (13,1,'ifSpeed','10000000','1','.1.3.6.1.2.1.2.2.1.5.1'); +INSERT INTO `host_snmp_cache` VALUES (13,1,'ifType','tunnel(131)','3','.1.3.6.1.2.1.2.2.1.3.3'); +INSERT INTO `host_snmp_cache` VALUES (13,1,'ifType','ethernetCsmacd(6)','2','.1.3.6.1.2.1.2.2.1.3.2'); +INSERT INTO `host_snmp_cache` VALUES (13,1,'ifHwAddr','','1','.1.3.6.1.2.1.2.2.1.6.1'); +INSERT INTO `host_snmp_cache` VALUES (13,1,'ifSpeed','0','3','.1.3.6.1.2.1.2.2.1.5.3'); +INSERT INTO `host_snmp_cache` VALUES (13,1,'ifType','softwareLoopback(24)','1','.1.3.6.1.2.1.2.2.1.3.1'); +INSERT INTO `host_snmp_cache` VALUES (13,1,'ifDescr','sit0','3','.1.3.6.1.2.1.2.2.1.2.3'); +INSERT INTO `host_snmp_cache` VALUES (13,1,'ifIndex','1','1','.1.3.6.1.2.1.2.2.1.1.1'); +INSERT INTO `host_snmp_cache` VALUES (13,1,'ifIndex','2','2','.1.3.6.1.2.1.2.2.1.1.2'); +INSERT INTO `host_snmp_cache` VALUES (13,1,'ifIndex','3','3','.1.3.6.1.2.1.2.2.1.1.3'); +INSERT INTO `host_snmp_cache` VALUES (13,1,'ifOperStatus','Up','1','.1.3.6.1.2.1.2.2.1.8.1'); +INSERT INTO `host_snmp_cache` VALUES (13,1,'ifOperStatus','Up','2','.1.3.6.1.2.1.2.2.1.8.2'); +INSERT INTO `host_snmp_cache` VALUES (13,1,'ifOperStatus','Down','3','.1.3.6.1.2.1.2.2.1.8.3'); +INSERT INTO `host_snmp_cache` VALUES (13,1,'ifDescr','lo','1','.1.3.6.1.2.1.2.2.1.2.1'); +INSERT INTO `host_snmp_cache` VALUES (13,1,'ifDescr','eth0','2','.1.3.6.1.2.1.2.2.1.2.2'); +INSERT INTO `host_snmp_cache` VALUES (6,1,'ifHwAddr','00:00:0D:29:97:D8:40','29','.1.3.6.1.2.1.2.2.1.6.29'); +INSERT INTO `host_snmp_cache` VALUES (6,1,'ifIP','172.16.42.103','29','.1.3.6.1.2.1.4.20.1.2.172.16.42.103'); +INSERT INTO `host_snmp_cache` VALUES (13,1,'ifIP','127.0.0.1','1','.1.3.6.1.2.1.4.20.1.2.127.0.0.1'); + +-- +-- Table structure for table `host_snmp_query` +-- + +CREATE TABLE `host_snmp_query` ( + `host_id` mediumint(8) unsigned NOT NULL default '0', + `snmp_query_id` mediumint(8) unsigned NOT NULL default '0', + `sort_field` varchar(50) NOT NULL default '', + `title_format` varchar(50) NOT NULL default '', + `reindex_method` tinyint(3) unsigned NOT NULL default '0', + PRIMARY KEY (`host_id`,`snmp_query_id`), + KEY `host_id` (`host_id`) +) TYPE=MyISAM; + +-- +-- Dumping data for table `host_snmp_query` +-- + +INSERT INTO `host_snmp_query` VALUES (1,6,'dskDevice','|query_dskDevice|',0); +INSERT INTO `host_snmp_query` VALUES (2,1,'ifDescr','|query_ifDescr|',1); +INSERT INTO `host_snmp_query` VALUES (3,1,'ifDescr','|query_ifDescr|',1); +INSERT INTO `host_snmp_query` VALUES (4,1,'ifDescr','|query_ifDescr|',1); +INSERT INTO `host_snmp_query` VALUES (5,1,'ifDescr','|query_ifDescr|',1); +INSERT INTO `host_snmp_query` VALUES (5,2,'','|query_|',1); +INSERT INTO `host_snmp_query` VALUES (6,1,'ifDescr','|query_ifDescr|',1); +INSERT INTO `host_snmp_query` VALUES (5,6,'dskDevice','|query_dskDevice|',1); +INSERT INTO `host_snmp_query` VALUES (7,1,'ifDescr','|query_ifDescr|',1); +INSERT INTO `host_snmp_query` VALUES (8,1,'ifName','|query_ifName|',1); +INSERT INTO `host_snmp_query` VALUES (12,2,'','|query_|',1); +INSERT INTO `host_snmp_query` VALUES (12,1,'ifDescr','|query_ifDescr|',1); +INSERT INTO `host_snmp_query` VALUES (11,1,'ifDescr','|query_ifDescr|',1); +INSERT INTO `host_snmp_query` VALUES (13,6,'dskDevice','|query_dskDevice|',1); +INSERT INTO `host_snmp_query` VALUES (13,1,'ifDescr','|query_ifDescr|',1); +INSERT INTO `host_snmp_query` VALUES (13,2,'','|query_|',1); + +-- +-- Table structure for table `host_template` +-- + +CREATE TABLE `host_template` ( + `id` mediumint(8) unsigned NOT NULL auto_increment, + `hash` varchar(32) NOT NULL default '', + `name` varchar(100) NOT NULL default '', + PRIMARY KEY (`id`), + UNIQUE KEY `id` (`id`), + KEY `id_2` (`id`) +) TYPE=MyISAM; + +-- +-- Dumping data for table `host_template` +-- + +INSERT INTO `host_template` VALUES (1,'4855b0e3e553085ed57219690285f91f','Generic SNMP-enabled Host'); +INSERT INTO `host_template` VALUES (3,'07d3fe6a52915f99e642d22e27d967a4','ucd/net SNMP Host'); +INSERT INTO `host_template` VALUES (4,'4e5dc8dd115264c2e9f3adb725c29413','Karlnet Wireless Bridge'); +INSERT INTO `host_template` VALUES (5,'cae6a879f86edacb2471055783bec6d0','Cisco Router'); +INSERT INTO `host_template` VALUES (6,'9ef418b4251751e09c3c416704b01b01','Netware 4/5 Server'); +INSERT INTO `host_template` VALUES (7,'5b8300be607dce4f030b026a381b91cd','Windows 2000/XP Host'); +INSERT INTO `host_template` VALUES (8,'2d3e47f416738c2d22c87c40218cc55e','Local Linux Machine'); + +-- +-- Table structure for table `host_template_graph` +-- + +CREATE TABLE `host_template_graph` ( + `host_template_id` mediumint(8) unsigned NOT NULL default '0', + `graph_template_id` mediumint(8) unsigned NOT NULL default '0', + PRIMARY KEY (`host_template_id`,`graph_template_id`), + KEY `host_template_id` (`host_template_id`) +) TYPE=MyISAM; + +-- +-- Dumping data for table `host_template_graph` +-- + +INSERT INTO `host_template_graph` VALUES (3,4); +INSERT INTO `host_template_graph` VALUES (3,11); +INSERT INTO `host_template_graph` VALUES (3,13); +INSERT INTO `host_template_graph` VALUES (5,18); +INSERT INTO `host_template_graph` VALUES (6,14); +INSERT INTO `host_template_graph` VALUES (6,16); +INSERT INTO `host_template_graph` VALUES (6,17); +INSERT INTO `host_template_graph` VALUES (6,30); +INSERT INTO `host_template_graph` VALUES (7,28); +INSERT INTO `host_template_graph` VALUES (7,29); +INSERT INTO `host_template_graph` VALUES (8,8); +INSERT INTO `host_template_graph` VALUES (8,9); +INSERT INTO `host_template_graph` VALUES (8,10); +INSERT INTO `host_template_graph` VALUES (8,12); + +-- +-- Table structure for table `host_template_snmp_query` +-- + +CREATE TABLE `host_template_snmp_query` ( + `host_template_id` mediumint(8) unsigned NOT NULL default '0', + `snmp_query_id` mediumint(8) unsigned NOT NULL default '0', + PRIMARY KEY (`host_template_id`,`snmp_query_id`), + KEY `host_template_id` (`host_template_id`) +) TYPE=MyISAM; + +-- +-- Dumping data for table `host_template_snmp_query` +-- + +INSERT INTO `host_template_snmp_query` VALUES (1,1); +INSERT INTO `host_template_snmp_query` VALUES (3,1); +INSERT INTO `host_template_snmp_query` VALUES (3,2); +INSERT INTO `host_template_snmp_query` VALUES (4,1); +INSERT INTO `host_template_snmp_query` VALUES (4,3); +INSERT INTO `host_template_snmp_query` VALUES (5,1); +INSERT INTO `host_template_snmp_query` VALUES (6,1); +INSERT INTO `host_template_snmp_query` VALUES (6,4); +INSERT INTO `host_template_snmp_query` VALUES (6,7); +INSERT INTO `host_template_snmp_query` VALUES (7,1); +INSERT INTO `host_template_snmp_query` VALUES (7,8); +INSERT INTO `host_template_snmp_query` VALUES (7,9); +INSERT INTO `host_template_snmp_query` VALUES (8,6); + +-- +-- Table structure for table `poller` +-- + +CREATE TABLE `poller` ( + `id` smallint(5) unsigned NOT NULL auto_increment, + `hostname` varchar(250) NOT NULL default '', + `ip_address` int(11) unsigned NOT NULL default '0', + `last_update` datetime NOT NULL default '0000-00-00 00:00:00', + PRIMARY KEY (`id`) +) TYPE=MyISAM; + +-- +-- Dumping data for table `poller` +-- + + +-- +-- Table structure for table `poller_command` +-- + +CREATE TABLE `poller_command` ( + `poller_id` smallint(5) unsigned NOT NULL default '0', + `time` datetime NOT NULL default '0000-00-00 00:00:00', + `action` tinyint(3) unsigned NOT NULL default '0', + `command` varchar(200) NOT NULL default '', + PRIMARY KEY (`poller_id`,`action`,`command`) +) TYPE=MyISAM; + +-- +-- Dumping data for table `poller_command` +-- + + +-- +-- Table structure for table `poller_item` +-- + +CREATE TABLE `poller_item` ( + `local_data_id` mediumint(8) unsigned NOT NULL default '0', + `poller_id` smallint(5) unsigned NOT NULL default '0', + `host_id` mediumint(8) NOT NULL default '0', + `action` tinyint(2) unsigned NOT NULL default '1', + `hostname` varchar(250) NOT NULL default '', + `snmp_community` varchar(100) NOT NULL default '', + `snmp_version` tinyint(1) unsigned NOT NULL default '0', + `snmp_username` varchar(50) NOT NULL default '', + `snmp_password` varchar(50) NOT NULL default '', + `snmp_port` mediumint(5) unsigned NOT NULL default '161', + `snmp_timeout` mediumint(8) unsigned NOT NULL default '0', + `rrd_name` varchar(19) NOT NULL default '', + `rrd_path` varchar(255) NOT NULL default '', + `rrd_num` tinyint(2) unsigned NOT NULL default '0', + `arg1` varchar(255) default NULL, + `arg2` varchar(255) default NULL, + `arg3` varchar(255) default NULL, + PRIMARY KEY (`local_data_id`,`rrd_name`), + KEY `local_data_id` (`local_data_id`), + KEY `host_id` (`host_id`) +) TYPE=MyISAM; + +-- +-- Dumping data for table `poller_item` +-- + +INSERT INTO `poller_item` VALUES (3,0,1,1,'127.0.0.1','',1,'','',161,500,'mem_buffers','/usr/share/cacti/site/rra/localhost_mem_buffers_3.rrd',1,'perl /usr/share/cacti/site/scripts/linux_memory.pl MemFree:','',''); +INSERT INTO `poller_item` VALUES (4,0,1,1,'127.0.0.1','',1,'','',161,500,'mem_swap','/usr/share/cacti/site/rra/localhost_mem_swap_4.rrd',1,'perl /usr/share/cacti/site/scripts/linux_memory.pl SwapFree:','',''); +INSERT INTO `poller_item` VALUES (5,0,1,1,'127.0.0.1','',1,'','',161,500,'','/usr/share/cacti/site/rra/localhost_load_1min_5.rrd',1,'perl /usr/share/cacti/site/scripts/loadavg_multi.pl','',''); +INSERT INTO `poller_item` VALUES (6,0,1,1,'127.0.0.1','',1,'','',161,500,'users','/usr/share/cacti/site/rra/localhost_users_6.rrd',1,'perl /usr/share/cacti/site/scripts/unix_users.pl','',''); +INSERT INTO `poller_item` VALUES (7,0,1,1,'127.0.0.1','',1,'','',161,500,'proc','/usr/share/cacti/site/rra/localhost_proc_7.rrd',1,'perl /usr/share/cacti/site/scripts/unix_processes.pl','',''); +INSERT INTO `poller_item` VALUES (8,0,2,0,'172.16.42.100','public',2,'','',161,500,'5min_cpu','/usr/share/cacti/site/rra/172_16_42_100_5min_cpu_8.rrd',1,'.1.3.6.1.4.1.9.2.1.58.0','',''); +INSERT INTO `poller_item` VALUES (9,0,2,0,'172.16.42.100','public',2,'','',161,500,'traffic_in','/usr/share/cacti/site/rra/172_16_42_100_traffic_in_9.rrd',2,'.1.3.6.1.2.1.31.1.1.1.6.1','',''); +INSERT INTO `poller_item` VALUES (9,0,2,0,'172.16.42.100','public',2,'','',161,500,'traffic_out','/usr/share/cacti/site/rra/172_16_42_100_traffic_in_9.rrd',2,'.1.3.6.1.2.1.31.1.1.1.10.1','',''); +INSERT INTO `poller_item` VALUES (10,0,2,0,'172.16.42.100','public',2,'','',161,500,'traffic_in','/usr/share/cacti/site/rra/172_16_42_100_traffic_in_10.rrd',2,'.1.3.6.1.2.1.31.1.1.1.6.2','',''); +INSERT INTO `poller_item` VALUES (10,0,2,0,'172.16.42.100','public',2,'','',161,500,'traffic_out','/usr/share/cacti/site/rra/172_16_42_100_traffic_in_10.rrd',2,'.1.3.6.1.2.1.31.1.1.1.10.2','',''); +INSERT INTO `poller_item` VALUES (11,0,2,0,'172.16.42.100','public',2,'','',161,500,'traffic_in','/usr/share/cacti/site/rra/172_16_42_100_traffic_in_11.rrd',2,'.1.3.6.1.2.1.31.1.1.1.6.3','',''); +INSERT INTO `poller_item` VALUES (11,0,2,0,'172.16.42.100','public',2,'','',161,500,'traffic_out','/usr/share/cacti/site/rra/172_16_42_100_traffic_in_11.rrd',2,'.1.3.6.1.2.1.31.1.1.1.10.3','',''); +INSERT INTO `poller_item` VALUES (12,0,2,0,'172.16.42.100','public',2,'','',161,500,'traffic_in','/usr/share/cacti/site/rra/172_16_42_100_traffic_in_12.rrd',2,'.1.3.6.1.2.1.31.1.1.1.6.4','',''); +INSERT INTO `poller_item` VALUES (12,0,2,0,'172.16.42.100','public',2,'','',161,500,'traffic_out','/usr/share/cacti/site/rra/172_16_42_100_traffic_in_12.rrd',2,'.1.3.6.1.2.1.31.1.1.1.10.4','',''); +INSERT INTO `poller_item` VALUES (13,0,2,0,'172.16.42.100','public',2,'','',161,500,'traffic_in','/usr/share/cacti/site/rra/172_16_42_100_traffic_in_13.rrd',2,'.1.3.6.1.2.1.31.1.1.1.6.5','',''); +INSERT INTO `poller_item` VALUES (13,0,2,0,'172.16.42.100','public',2,'','',161,500,'traffic_out','/usr/share/cacti/site/rra/172_16_42_100_traffic_in_13.rrd',2,'.1.3.6.1.2.1.31.1.1.1.10.5','',''); +INSERT INTO `poller_item` VALUES (14,0,2,0,'172.16.42.100','public',2,'','',161,500,'traffic_in','/usr/share/cacti/site/rra/172_16_42_100_traffic_in_14.rrd',2,'.1.3.6.1.2.1.31.1.1.1.6.6','',''); +INSERT INTO `poller_item` VALUES (14,0,2,0,'172.16.42.100','public',2,'','',161,500,'traffic_out','/usr/share/cacti/site/rra/172_16_42_100_traffic_in_14.rrd',2,'.1.3.6.1.2.1.31.1.1.1.10.6','',''); +INSERT INTO `poller_item` VALUES (15,0,2,0,'172.16.42.100','public',2,'','',161,500,'traffic_in','/usr/share/cacti/site/rra/172_16_42_100_traffic_in_15.rrd',2,'.1.3.6.1.2.1.31.1.1.1.6.7','',''); +INSERT INTO `poller_item` VALUES (15,0,2,0,'172.16.42.100','public',2,'','',161,500,'traffic_out','/usr/share/cacti/site/rra/172_16_42_100_traffic_in_15.rrd',2,'.1.3.6.1.2.1.31.1.1.1.10.7','',''); +INSERT INTO `poller_item` VALUES (16,0,2,0,'172.16.42.100','public',2,'','',161,500,'traffic_in','/usr/share/cacti/site/rra/172_16_42_100_traffic_in_16.rrd',2,'.1.3.6.1.2.1.31.1.1.1.6.8','',''); +INSERT INTO `poller_item` VALUES (16,0,2,0,'172.16.42.100','public',2,'','',161,500,'traffic_out','/usr/share/cacti/site/rra/172_16_42_100_traffic_in_16.rrd',2,'.1.3.6.1.2.1.31.1.1.1.10.8','',''); +INSERT INTO `poller_item` VALUES (17,0,2,0,'172.16.42.100','public',2,'','',161,500,'traffic_in','/usr/share/cacti/site/rra/172_16_42_100_traffic_in_17.rrd',2,'.1.3.6.1.2.1.31.1.1.1.6.9','',''); +INSERT INTO `poller_item` VALUES (17,0,2,0,'172.16.42.100','public',2,'','',161,500,'traffic_out','/usr/share/cacti/site/rra/172_16_42_100_traffic_in_17.rrd',2,'.1.3.6.1.2.1.31.1.1.1.10.9','',''); +INSERT INTO `poller_item` VALUES (18,0,2,0,'172.16.42.100','public',2,'','',161,500,'traffic_in','/usr/share/cacti/site/rra/172_16_42_100_traffic_in_18.rrd',2,'.1.3.6.1.2.1.31.1.1.1.6.10','',''); +INSERT INTO `poller_item` VALUES (18,0,2,0,'172.16.42.100','public',2,'','',161,500,'traffic_out','/usr/share/cacti/site/rra/172_16_42_100_traffic_in_18.rrd',2,'.1.3.6.1.2.1.31.1.1.1.10.10','',''); +INSERT INTO `poller_item` VALUES (19,0,2,0,'172.16.42.100','public',2,'','',161,500,'traffic_in','/usr/share/cacti/site/rra/172_16_42_100_traffic_in_19.rrd',2,'.1.3.6.1.2.1.31.1.1.1.6.11','',''); +INSERT INTO `poller_item` VALUES (19,0,2,0,'172.16.42.100','public',2,'','',161,500,'traffic_out','/usr/share/cacti/site/rra/172_16_42_100_traffic_in_19.rrd',2,'.1.3.6.1.2.1.31.1.1.1.10.11','',''); +INSERT INTO `poller_item` VALUES (20,0,2,0,'172.16.42.100','public',2,'','',161,500,'traffic_in','/usr/share/cacti/site/rra/172_16_42_100_traffic_in_20.rrd',2,'.1.3.6.1.2.1.31.1.1.1.6.12','',''); +INSERT INTO `poller_item` VALUES (20,0,2,0,'172.16.42.100','public',2,'','',161,500,'traffic_out','/usr/share/cacti/site/rra/172_16_42_100_traffic_in_20.rrd',2,'.1.3.6.1.2.1.31.1.1.1.10.12','',''); +INSERT INTO `poller_item` VALUES (21,0,2,0,'172.16.42.100','public',2,'','',161,500,'traffic_in','/usr/share/cacti/site/rra/172_16_42_100_traffic_in_21.rrd',2,'.1.3.6.1.2.1.31.1.1.1.6.13','',''); +INSERT INTO `poller_item` VALUES (21,0,2,0,'172.16.42.100','public',2,'','',161,500,'traffic_out','/usr/share/cacti/site/rra/172_16_42_100_traffic_in_21.rrd',2,'.1.3.6.1.2.1.31.1.1.1.10.13','',''); +INSERT INTO `poller_item` VALUES (22,0,2,0,'172.16.42.100','public',2,'','',161,500,'traffic_in','/usr/share/cacti/site/rra/172_16_42_100_traffic_in_22.rrd',2,'.1.3.6.1.2.1.31.1.1.1.6.14','',''); +INSERT INTO `poller_item` VALUES (22,0,2,0,'172.16.42.100','public',2,'','',161,500,'traffic_out','/usr/share/cacti/site/rra/172_16_42_100_traffic_in_22.rrd',2,'.1.3.6.1.2.1.31.1.1.1.10.14','',''); +INSERT INTO `poller_item` VALUES (23,0,2,0,'172.16.42.100','public',2,'','',161,500,'traffic_in','/usr/share/cacti/site/rra/172_16_42_100_traffic_in_23.rrd',2,'.1.3.6.1.2.1.31.1.1.1.6.15','',''); +INSERT INTO `poller_item` VALUES (23,0,2,0,'172.16.42.100','public',2,'','',161,500,'traffic_out','/usr/share/cacti/site/rra/172_16_42_100_traffic_in_23.rrd',2,'.1.3.6.1.2.1.31.1.1.1.10.15','',''); +INSERT INTO `poller_item` VALUES (24,0,2,0,'172.16.42.100','public',2,'','',161,500,'traffic_in','/usr/share/cacti/site/rra/172_16_42_100_traffic_in_24.rrd',2,'.1.3.6.1.2.1.31.1.1.1.6.16','',''); +INSERT INTO `poller_item` VALUES (24,0,2,0,'172.16.42.100','public',2,'','',161,500,'traffic_out','/usr/share/cacti/site/rra/172_16_42_100_traffic_in_24.rrd',2,'.1.3.6.1.2.1.31.1.1.1.10.16','',''); +INSERT INTO `poller_item` VALUES (25,0,2,0,'172.16.42.100','public',2,'','',161,500,'traffic_in','/usr/share/cacti/site/rra/172_16_42_100_traffic_in_25.rrd',2,'.1.3.6.1.2.1.31.1.1.1.6.17','',''); +INSERT INTO `poller_item` VALUES (25,0,2,0,'172.16.42.100','public',2,'','',161,500,'traffic_out','/usr/share/cacti/site/rra/172_16_42_100_traffic_in_25.rrd',2,'.1.3.6.1.2.1.31.1.1.1.10.17','',''); +INSERT INTO `poller_item` VALUES (26,0,2,0,'172.16.42.100','public',2,'','',161,500,'traffic_in','/usr/share/cacti/site/rra/172_16_42_100_traffic_in_26.rrd',2,'.1.3.6.1.2.1.31.1.1.1.6.18','',''); +INSERT INTO `poller_item` VALUES (26,0,2,0,'172.16.42.100','public',2,'','',161,500,'traffic_out','/usr/share/cacti/site/rra/172_16_42_100_traffic_in_26.rrd',2,'.1.3.6.1.2.1.31.1.1.1.10.18','',''); +INSERT INTO `poller_item` VALUES (27,0,2,0,'172.16.42.100','public',2,'','',161,500,'traffic_in','/usr/share/cacti/site/rra/172_16_42_100_traffic_in_27.rrd',2,'.1.3.6.1.2.1.31.1.1.1.6.19','',''); +INSERT INTO `poller_item` VALUES (27,0,2,0,'172.16.42.100','public',2,'','',161,500,'traffic_out','/usr/share/cacti/site/rra/172_16_42_100_traffic_in_27.rrd',2,'.1.3.6.1.2.1.31.1.1.1.10.19','',''); +INSERT INTO `poller_item` VALUES (28,0,2,0,'172.16.42.100','public',2,'','',161,500,'traffic_in','/usr/share/cacti/site/rra/172_16_42_100_traffic_in_28.rrd',2,'.1.3.6.1.2.1.31.1.1.1.6.20','',''); +INSERT INTO `poller_item` VALUES (28,0,2,0,'172.16.42.100','public',2,'','',161,500,'traffic_out','/usr/share/cacti/site/rra/172_16_42_100_traffic_in_28.rrd',2,'.1.3.6.1.2.1.31.1.1.1.10.20','',''); +INSERT INTO `poller_item` VALUES (29,0,2,0,'172.16.42.100','public',2,'','',161,500,'traffic_in','/usr/share/cacti/site/rra/172_16_42_100_traffic_in_29.rrd',2,'.1.3.6.1.2.1.31.1.1.1.6.21','',''); +INSERT INTO `poller_item` VALUES (29,0,2,0,'172.16.42.100','public',2,'','',161,500,'traffic_out','/usr/share/cacti/site/rra/172_16_42_100_traffic_in_29.rrd',2,'.1.3.6.1.2.1.31.1.1.1.10.21','',''); +INSERT INTO `poller_item` VALUES (30,0,2,0,'172.16.42.100','public',2,'','',161,500,'traffic_in','/usr/share/cacti/site/rra/172_16_42_100_traffic_in_30.rrd',2,'.1.3.6.1.2.1.31.1.1.1.6.22','',''); +INSERT INTO `poller_item` VALUES (30,0,2,0,'172.16.42.100','public',2,'','',161,500,'traffic_out','/usr/share/cacti/site/rra/172_16_42_100_traffic_in_30.rrd',2,'.1.3.6.1.2.1.31.1.1.1.10.22','',''); +INSERT INTO `poller_item` VALUES (31,0,2,0,'172.16.42.100','public',2,'','',161,500,'traffic_in','/usr/share/cacti/site/rra/172_16_42_100_traffic_in_31.rrd',2,'.1.3.6.1.2.1.31.1.1.1.6.23','',''); +INSERT INTO `poller_item` VALUES (31,0,2,0,'172.16.42.100','public',2,'','',161,500,'traffic_out','/usr/share/cacti/site/rra/172_16_42_100_traffic_in_31.rrd',2,'.1.3.6.1.2.1.31.1.1.1.10.23','',''); +INSERT INTO `poller_item` VALUES (32,0,2,0,'172.16.42.100','public',2,'','',161,500,'traffic_in','/usr/share/cacti/site/rra/172_16_42_100_traffic_in_32.rrd',2,'.1.3.6.1.2.1.31.1.1.1.6.24','',''); +INSERT INTO `poller_item` VALUES (32,0,2,0,'172.16.42.100','public',2,'','',161,500,'traffic_out','/usr/share/cacti/site/rra/172_16_42_100_traffic_in_32.rrd',2,'.1.3.6.1.2.1.31.1.1.1.10.24','',''); +INSERT INTO `poller_item` VALUES (33,0,2,0,'172.16.42.100','public',2,'','',161,500,'traffic_in','/usr/share/cacti/site/rra/172_16_42_100_traffic_in_33.rrd',2,'.1.3.6.1.2.1.31.1.1.1.6.25','',''); +INSERT INTO `poller_item` VALUES (33,0,2,0,'172.16.42.100','public',2,'','',161,500,'traffic_out','/usr/share/cacti/site/rra/172_16_42_100_traffic_in_33.rrd',2,'.1.3.6.1.2.1.31.1.1.1.10.25','',''); +INSERT INTO `poller_item` VALUES (34,0,2,0,'172.16.42.100','public',2,'','',161,500,'traffic_in','/usr/share/cacti/site/rra/172_16_42_100_traffic_in_34.rrd',2,'.1.3.6.1.2.1.31.1.1.1.6.26','',''); +INSERT INTO `poller_item` VALUES (34,0,2,0,'172.16.42.100','public',2,'','',161,500,'traffic_out','/usr/share/cacti/site/rra/172_16_42_100_traffic_in_34.rrd',2,'.1.3.6.1.2.1.31.1.1.1.10.26','',''); +INSERT INTO `poller_item` VALUES (35,0,2,0,'172.16.42.100','public',2,'','',161,500,'traffic_in','/usr/share/cacti/site/rra/172_16_42_100_traffic_in_35.rrd',2,'.1.3.6.1.2.1.31.1.1.1.6.27','',''); +INSERT INTO `poller_item` VALUES (35,0,2,0,'172.16.42.100','public',2,'','',161,500,'traffic_out','/usr/share/cacti/site/rra/172_16_42_100_traffic_in_35.rrd',2,'.1.3.6.1.2.1.31.1.1.1.10.27','',''); +INSERT INTO `poller_item` VALUES (36,0,2,0,'172.16.42.100','public',2,'','',161,500,'traffic_in','/usr/share/cacti/site/rra/172_16_42_100_traffic_in_36.rrd',2,'.1.3.6.1.2.1.31.1.1.1.6.28','',''); +INSERT INTO `poller_item` VALUES (36,0,2,0,'172.16.42.100','public',2,'','',161,500,'traffic_out','/usr/share/cacti/site/rra/172_16_42_100_traffic_in_36.rrd',2,'.1.3.6.1.2.1.31.1.1.1.10.28','',''); +INSERT INTO `poller_item` VALUES (37,0,2,0,'172.16.42.100','public',2,'','',161,500,'traffic_in','/usr/share/cacti/site/rra/172_16_42_100_traffic_in_37.rrd',2,'.1.3.6.1.2.1.31.1.1.1.6.29','',''); +INSERT INTO `poller_item` VALUES (37,0,2,0,'172.16.42.100','public',2,'','',161,500,'traffic_out','/usr/share/cacti/site/rra/172_16_42_100_traffic_in_37.rrd',2,'.1.3.6.1.2.1.31.1.1.1.10.29','',''); +INSERT INTO `poller_item` VALUES (38,0,3,0,'172.16.42.101','public',2,'','',161,500,'5min_cpu','/usr/share/cacti/site/rra/172_16_42_101_5min_cpu_38.rrd',1,'.1.3.6.1.4.1.9.2.1.58.0','',''); +INSERT INTO `poller_item` VALUES (39,0,3,0,'172.16.42.101','public',2,'','',161,500,'traffic_out','/usr/share/cacti/site/rra/172_16_42_101_traffic_in_39.rrd',2,'.1.3.6.1.2.1.31.1.1.1.10.1','',''); +INSERT INTO `poller_item` VALUES (39,0,3,0,'172.16.42.101','public',2,'','',161,500,'traffic_in','/usr/share/cacti/site/rra/172_16_42_101_traffic_in_39.rrd',2,'.1.3.6.1.2.1.31.1.1.1.6.1','',''); +INSERT INTO `poller_item` VALUES (40,0,3,0,'172.16.42.101','public',2,'','',161,500,'traffic_out','/usr/share/cacti/site/rra/172_16_42_101_traffic_in_40.rrd',2,'.1.3.6.1.2.1.31.1.1.1.10.2','',''); +INSERT INTO `poller_item` VALUES (40,0,3,0,'172.16.42.101','public',2,'','',161,500,'traffic_in','/usr/share/cacti/site/rra/172_16_42_101_traffic_in_40.rrd',2,'.1.3.6.1.2.1.31.1.1.1.6.2','',''); +INSERT INTO `poller_item` VALUES (41,0,3,0,'172.16.42.101','public',2,'','',161,500,'traffic_out','/usr/share/cacti/site/rra/172_16_42_101_traffic_in_41.rrd',2,'.1.3.6.1.2.1.31.1.1.1.10.3','',''); +INSERT INTO `poller_item` VALUES (41,0,3,0,'172.16.42.101','public',2,'','',161,500,'traffic_in','/usr/share/cacti/site/rra/172_16_42_101_traffic_in_41.rrd',2,'.1.3.6.1.2.1.31.1.1.1.6.3','',''); +INSERT INTO `poller_item` VALUES (42,0,3,0,'172.16.42.101','public',2,'','',161,500,'traffic_out','/usr/share/cacti/site/rra/172_16_42_101_traffic_in_42.rrd',2,'.1.3.6.1.2.1.31.1.1.1.10.4','',''); +INSERT INTO `poller_item` VALUES (42,0,3,0,'172.16.42.101','public',2,'','',161,500,'traffic_in','/usr/share/cacti/site/rra/172_16_42_101_traffic_in_42.rrd',2,'.1.3.6.1.2.1.31.1.1.1.6.4','',''); +INSERT INTO `poller_item` VALUES (43,0,3,0,'172.16.42.101','public',2,'','',161,500,'traffic_out','/usr/share/cacti/site/rra/172_16_42_101_traffic_in_43.rrd',2,'.1.3.6.1.2.1.31.1.1.1.10.5','',''); +INSERT INTO `poller_item` VALUES (43,0,3,0,'172.16.42.101','public',2,'','',161,500,'traffic_in','/usr/share/cacti/site/rra/172_16_42_101_traffic_in_43.rrd',2,'.1.3.6.1.2.1.31.1.1.1.6.5','',''); +INSERT INTO `poller_item` VALUES (44,0,3,0,'172.16.42.101','public',2,'','',161,500,'traffic_out','/usr/share/cacti/site/rra/172_16_42_101_traffic_in_44.rrd',2,'.1.3.6.1.2.1.31.1.1.1.10.6','',''); +INSERT INTO `poller_item` VALUES (44,0,3,0,'172.16.42.101','public',2,'','',161,500,'traffic_in','/usr/share/cacti/site/rra/172_16_42_101_traffic_in_44.rrd',2,'.1.3.6.1.2.1.31.1.1.1.6.6','',''); +INSERT INTO `poller_item` VALUES (45,0,3,0,'172.16.42.101','public',2,'','',161,500,'traffic_out','/usr/share/cacti/site/rra/172_16_42_101_traffic_in_45.rrd',2,'.1.3.6.1.2.1.31.1.1.1.10.7','',''); +INSERT INTO `poller_item` VALUES (45,0,3,0,'172.16.42.101','public',2,'','',161,500,'traffic_in','/usr/share/cacti/site/rra/172_16_42_101_traffic_in_45.rrd',2,'.1.3.6.1.2.1.31.1.1.1.6.7','',''); +INSERT INTO `poller_item` VALUES (46,0,3,0,'172.16.42.101','public',2,'','',161,500,'traffic_out','/usr/share/cacti/site/rra/172_16_42_101_traffic_in_46.rrd',2,'.1.3.6.1.2.1.31.1.1.1.10.8','',''); +INSERT INTO `poller_item` VALUES (46,0,3,0,'172.16.42.101','public',2,'','',161,500,'traffic_in','/usr/share/cacti/site/rra/172_16_42_101_traffic_in_46.rrd',2,'.1.3.6.1.2.1.31.1.1.1.6.8','',''); +INSERT INTO `poller_item` VALUES (47,0,3,0,'172.16.42.101','public',2,'','',161,500,'traffic_out','/usr/share/cacti/site/rra/172_16_42_101_traffic_in_47.rrd',2,'.1.3.6.1.2.1.31.1.1.1.10.9','',''); +INSERT INTO `poller_item` VALUES (47,0,3,0,'172.16.42.101','public',2,'','',161,500,'traffic_in','/usr/share/cacti/site/rra/172_16_42_101_traffic_in_47.rrd',2,'.1.3.6.1.2.1.31.1.1.1.6.9','',''); +INSERT INTO `poller_item` VALUES (48,0,3,0,'172.16.42.101','public',2,'','',161,500,'traffic_out','/usr/share/cacti/site/rra/172_16_42_101_traffic_in_48.rrd',2,'.1.3.6.1.2.1.31.1.1.1.10.10','',''); +INSERT INTO `poller_item` VALUES (48,0,3,0,'172.16.42.101','public',2,'','',161,500,'traffic_in','/usr/share/cacti/site/rra/172_16_42_101_traffic_in_48.rrd',2,'.1.3.6.1.2.1.31.1.1.1.6.10','',''); +INSERT INTO `poller_item` VALUES (49,0,3,0,'172.16.42.101','public',2,'','',161,500,'traffic_out','/usr/share/cacti/site/rra/172_16_42_101_traffic_in_49.rrd',2,'.1.3.6.1.2.1.31.1.1.1.10.11','',''); +INSERT INTO `poller_item` VALUES (49,0,3,0,'172.16.42.101','public',2,'','',161,500,'traffic_in','/usr/share/cacti/site/rra/172_16_42_101_traffic_in_49.rrd',2,'.1.3.6.1.2.1.31.1.1.1.6.11','',''); +INSERT INTO `poller_item` VALUES (50,0,3,0,'172.16.42.101','public',2,'','',161,500,'traffic_out','/usr/share/cacti/site/rra/172_16_42_101_traffic_in_50.rrd',2,'.1.3.6.1.2.1.31.1.1.1.10.12','',''); +INSERT INTO `poller_item` VALUES (50,0,3,0,'172.16.42.101','public',2,'','',161,500,'traffic_in','/usr/share/cacti/site/rra/172_16_42_101_traffic_in_50.rrd',2,'.1.3.6.1.2.1.31.1.1.1.6.12','',''); +INSERT INTO `poller_item` VALUES (51,0,3,0,'172.16.42.101','public',2,'','',161,500,'traffic_out','/usr/share/cacti/site/rra/172_16_42_101_traffic_in_51.rrd',2,'.1.3.6.1.2.1.31.1.1.1.10.13','',''); +INSERT INTO `poller_item` VALUES (51,0,3,0,'172.16.42.101','public',2,'','',161,500,'traffic_in','/usr/share/cacti/site/rra/172_16_42_101_traffic_in_51.rrd',2,'.1.3.6.1.2.1.31.1.1.1.6.13','',''); +INSERT INTO `poller_item` VALUES (52,0,3,0,'172.16.42.101','public',2,'','',161,500,'traffic_out','/usr/share/cacti/site/rra/172_16_42_101_traffic_in_52.rrd',2,'.1.3.6.1.2.1.31.1.1.1.10.14','',''); +INSERT INTO `poller_item` VALUES (52,0,3,0,'172.16.42.101','public',2,'','',161,500,'traffic_in','/usr/share/cacti/site/rra/172_16_42_101_traffic_in_52.rrd',2,'.1.3.6.1.2.1.31.1.1.1.6.14','',''); +INSERT INTO `poller_item` VALUES (53,0,3,0,'172.16.42.101','public',2,'','',161,500,'traffic_out','/usr/share/cacti/site/rra/172_16_42_101_traffic_in_53.rrd',2,'.1.3.6.1.2.1.31.1.1.1.10.15','',''); +INSERT INTO `poller_item` VALUES (53,0,3,0,'172.16.42.101','public',2,'','',161,500,'traffic_in','/usr/share/cacti/site/rra/172_16_42_101_traffic_in_53.rrd',2,'.1.3.6.1.2.1.31.1.1.1.6.15','',''); +INSERT INTO `poller_item` VALUES (54,0,3,0,'172.16.42.101','public',2,'','',161,500,'traffic_out','/usr/share/cacti/site/rra/172_16_42_101_traffic_in_54.rrd',2,'.1.3.6.1.2.1.31.1.1.1.10.16','',''); +INSERT INTO `poller_item` VALUES (54,0,3,0,'172.16.42.101','public',2,'','',161,500,'traffic_in','/usr/share/cacti/site/rra/172_16_42_101_traffic_in_54.rrd',2,'.1.3.6.1.2.1.31.1.1.1.6.16','',''); +INSERT INTO `poller_item` VALUES (55,0,3,0,'172.16.42.101','public',2,'','',161,500,'traffic_out','/usr/share/cacti/site/rra/172_16_42_101_traffic_in_55.rrd',2,'.1.3.6.1.2.1.31.1.1.1.10.17','',''); +INSERT INTO `poller_item` VALUES (55,0,3,0,'172.16.42.101','public',2,'','',161,500,'traffic_in','/usr/share/cacti/site/rra/172_16_42_101_traffic_in_55.rrd',2,'.1.3.6.1.2.1.31.1.1.1.6.17','',''); +INSERT INTO `poller_item` VALUES (56,0,3,0,'172.16.42.101','public',2,'','',161,500,'traffic_out','/usr/share/cacti/site/rra/172_16_42_101_traffic_in_56.rrd',2,'.1.3.6.1.2.1.31.1.1.1.10.18','',''); +INSERT INTO `poller_item` VALUES (56,0,3,0,'172.16.42.101','public',2,'','',161,500,'traffic_in','/usr/share/cacti/site/rra/172_16_42_101_traffic_in_56.rrd',2,'.1.3.6.1.2.1.31.1.1.1.6.18','',''); +INSERT INTO `poller_item` VALUES (57,0,3,0,'172.16.42.101','public',2,'','',161,500,'traffic_out','/usr/share/cacti/site/rra/172_16_42_101_traffic_in_57.rrd',2,'.1.3.6.1.2.1.31.1.1.1.10.19','',''); +INSERT INTO `poller_item` VALUES (57,0,3,0,'172.16.42.101','public',2,'','',161,500,'traffic_in','/usr/share/cacti/site/rra/172_16_42_101_traffic_in_57.rrd',2,'.1.3.6.1.2.1.31.1.1.1.6.19','',''); +INSERT INTO `poller_item` VALUES (58,0,3,0,'172.16.42.101','public',2,'','',161,500,'traffic_out','/usr/share/cacti/site/rra/172_16_42_101_traffic_in_58.rrd',2,'.1.3.6.1.2.1.31.1.1.1.10.20','',''); +INSERT INTO `poller_item` VALUES (58,0,3,0,'172.16.42.101','public',2,'','',161,500,'traffic_in','/usr/share/cacti/site/rra/172_16_42_101_traffic_in_58.rrd',2,'.1.3.6.1.2.1.31.1.1.1.6.20','',''); +INSERT INTO `poller_item` VALUES (59,0,3,0,'172.16.42.101','public',2,'','',161,500,'traffic_out','/usr/share/cacti/site/rra/172_16_42_101_traffic_in_59.rrd',2,'.1.3.6.1.2.1.31.1.1.1.10.21','',''); +INSERT INTO `poller_item` VALUES (59,0,3,0,'172.16.42.101','public',2,'','',161,500,'traffic_in','/usr/share/cacti/site/rra/172_16_42_101_traffic_in_59.rrd',2,'.1.3.6.1.2.1.31.1.1.1.6.21','',''); +INSERT INTO `poller_item` VALUES (60,0,3,0,'172.16.42.101','public',2,'','',161,500,'traffic_out','/usr/share/cacti/site/rra/172_16_42_101_traffic_in_60.rrd',2,'.1.3.6.1.2.1.31.1.1.1.10.22','',''); +INSERT INTO `poller_item` VALUES (60,0,3,0,'172.16.42.101','public',2,'','',161,500,'traffic_in','/usr/share/cacti/site/rra/172_16_42_101_traffic_in_60.rrd',2,'.1.3.6.1.2.1.31.1.1.1.6.22','',''); +INSERT INTO `poller_item` VALUES (61,0,3,0,'172.16.42.101','public',2,'','',161,500,'traffic_out','/usr/share/cacti/site/rra/172_16_42_101_traffic_in_61.rrd',2,'.1.3.6.1.2.1.31.1.1.1.10.23','',''); +INSERT INTO `poller_item` VALUES (61,0,3,0,'172.16.42.101','public',2,'','',161,500,'traffic_in','/usr/share/cacti/site/rra/172_16_42_101_traffic_in_61.rrd',2,'.1.3.6.1.2.1.31.1.1.1.6.23','',''); +INSERT INTO `poller_item` VALUES (62,0,3,0,'172.16.42.101','public',2,'','',161,500,'traffic_out','/usr/share/cacti/site/rra/172_16_42_101_traffic_in_62.rrd',2,'.1.3.6.1.2.1.31.1.1.1.10.24','',''); +INSERT INTO `poller_item` VALUES (62,0,3,0,'172.16.42.101','public',2,'','',161,500,'traffic_in','/usr/share/cacti/site/rra/172_16_42_101_traffic_in_62.rrd',2,'.1.3.6.1.2.1.31.1.1.1.6.24','',''); +INSERT INTO `poller_item` VALUES (63,0,3,0,'172.16.42.101','public',2,'','',161,500,'traffic_out','/usr/share/cacti/site/rra/172_16_42_101_traffic_in_63.rrd',2,'.1.3.6.1.2.1.31.1.1.1.10.25','',''); +INSERT INTO `poller_item` VALUES (63,0,3,0,'172.16.42.101','public',2,'','',161,500,'traffic_in','/usr/share/cacti/site/rra/172_16_42_101_traffic_in_63.rrd',2,'.1.3.6.1.2.1.31.1.1.1.6.25','',''); +INSERT INTO `poller_item` VALUES (64,0,3,0,'172.16.42.101','public',2,'','',161,500,'traffic_out','/usr/share/cacti/site/rra/172_16_42_101_traffic_in_64.rrd',2,'.1.3.6.1.2.1.31.1.1.1.10.26','',''); +INSERT INTO `poller_item` VALUES (64,0,3,0,'172.16.42.101','public',2,'','',161,500,'traffic_in','/usr/share/cacti/site/rra/172_16_42_101_traffic_in_64.rrd',2,'.1.3.6.1.2.1.31.1.1.1.6.26','',''); +INSERT INTO `poller_item` VALUES (65,0,3,0,'172.16.42.101','public',2,'','',161,500,'traffic_out','/usr/share/cacti/site/rra/172_16_42_101_traffic_in_65.rrd',2,'.1.3.6.1.2.1.31.1.1.1.10.27','',''); +INSERT INTO `poller_item` VALUES (65,0,3,0,'172.16.42.101','public',2,'','',161,500,'traffic_in','/usr/share/cacti/site/rra/172_16_42_101_traffic_in_65.rrd',2,'.1.3.6.1.2.1.31.1.1.1.6.27','',''); +INSERT INTO `poller_item` VALUES (66,0,3,0,'172.16.42.101','public',2,'','',161,500,'traffic_out','/usr/share/cacti/site/rra/172_16_42_101_traffic_in_66.rrd',2,'.1.3.6.1.2.1.31.1.1.1.10.28','',''); +INSERT INTO `poller_item` VALUES (66,0,3,0,'172.16.42.101','public',2,'','',161,500,'traffic_in','/usr/share/cacti/site/rra/172_16_42_101_traffic_in_66.rrd',2,'.1.3.6.1.2.1.31.1.1.1.6.28','',''); +INSERT INTO `poller_item` VALUES (67,0,3,0,'172.16.42.101','public',2,'','',161,500,'traffic_out','/usr/share/cacti/site/rra/172_16_42_101_traffic_in_67.rrd',2,'.1.3.6.1.2.1.31.1.1.1.10.29','',''); +INSERT INTO `poller_item` VALUES (67,0,3,0,'172.16.42.101','public',2,'','',161,500,'traffic_in','/usr/share/cacti/site/rra/172_16_42_101_traffic_in_67.rrd',2,'.1.3.6.1.2.1.31.1.1.1.6.29','',''); +INSERT INTO `poller_item` VALUES (68,0,4,0,'172.16.42.102','public',2,'','',161,500,'5min_cpu','/usr/share/cacti/site/rra/172_16_42_102_5min_cpu_68.rrd',1,'.1.3.6.1.4.1.9.2.1.58.0','',''); +INSERT INTO `poller_item` VALUES (69,0,4,0,'172.16.42.102','public',2,'','',161,500,'traffic_out','/usr/share/cacti/site/rra/172_16_42_102_traffic_in_69.rrd',2,'.1.3.6.1.2.1.31.1.1.1.10.1','',''); +INSERT INTO `poller_item` VALUES (70,0,4,0,'172.16.42.102','public',2,'','',161,500,'traffic_in','/usr/share/cacti/site/rra/172_16_42_102_traffic_in_70.rrd',2,'.1.3.6.1.2.1.31.1.1.1.6.2','',''); +INSERT INTO `poller_item` VALUES (70,0,4,0,'172.16.42.102','public',2,'','',161,500,'traffic_out','/usr/share/cacti/site/rra/172_16_42_102_traffic_in_70.rrd',2,'.1.3.6.1.2.1.31.1.1.1.10.2','',''); +INSERT INTO `poller_item` VALUES (71,0,4,0,'172.16.42.102','public',2,'','',161,500,'traffic_out','/usr/share/cacti/site/rra/172_16_42_102_traffic_in_71.rrd',2,'.1.3.6.1.2.1.31.1.1.1.10.3','',''); +INSERT INTO `poller_item` VALUES (72,0,4,0,'172.16.42.102','public',2,'','',161,500,'traffic_in','/usr/share/cacti/site/rra/172_16_42_102_traffic_in_72.rrd',2,'.1.3.6.1.2.1.31.1.1.1.6.4','',''); +INSERT INTO `poller_item` VALUES (72,0,4,0,'172.16.42.102','public',2,'','',161,500,'traffic_out','/usr/share/cacti/site/rra/172_16_42_102_traffic_in_72.rrd',2,'.1.3.6.1.2.1.31.1.1.1.10.4','',''); +INSERT INTO `poller_item` VALUES (73,0,4,0,'172.16.42.102','public',2,'','',161,500,'traffic_in','/usr/share/cacti/site/rra/172_16_42_102_traffic_in_73.rrd',2,'.1.3.6.1.2.1.31.1.1.1.6.5','',''); +INSERT INTO `poller_item` VALUES (73,0,4,0,'172.16.42.102','public',2,'','',161,500,'traffic_out','/usr/share/cacti/site/rra/172_16_42_102_traffic_in_73.rrd',2,'.1.3.6.1.2.1.31.1.1.1.10.5','',''); +INSERT INTO `poller_item` VALUES (74,0,4,0,'172.16.42.102','public',2,'','',161,500,'traffic_in','/usr/share/cacti/site/rra/172_16_42_102_traffic_in_74.rrd',2,'.1.3.6.1.2.1.31.1.1.1.6.6','',''); +INSERT INTO `poller_item` VALUES (74,0,4,0,'172.16.42.102','public',2,'','',161,500,'traffic_out','/usr/share/cacti/site/rra/172_16_42_102_traffic_in_74.rrd',2,'.1.3.6.1.2.1.31.1.1.1.10.6','',''); +INSERT INTO `poller_item` VALUES (75,0,4,0,'172.16.42.102','public',2,'','',161,500,'traffic_in','/usr/share/cacti/site/rra/172_16_42_102_traffic_in_75.rrd',2,'.1.3.6.1.2.1.31.1.1.1.6.7','',''); +INSERT INTO `poller_item` VALUES (75,0,4,0,'172.16.42.102','public',2,'','',161,500,'traffic_out','/usr/share/cacti/site/rra/172_16_42_102_traffic_in_75.rrd',2,'.1.3.6.1.2.1.31.1.1.1.10.7','',''); +INSERT INTO `poller_item` VALUES (76,0,4,0,'172.16.42.102','public',2,'','',161,500,'traffic_in','/usr/share/cacti/site/rra/172_16_42_102_traffic_in_76.rrd',2,'.1.3.6.1.2.1.31.1.1.1.6.8','',''); +INSERT INTO `poller_item` VALUES (76,0,4,0,'172.16.42.102','public',2,'','',161,500,'traffic_out','/usr/share/cacti/site/rra/172_16_42_102_traffic_in_76.rrd',2,'.1.3.6.1.2.1.31.1.1.1.10.8','',''); +INSERT INTO `poller_item` VALUES (77,0,4,0,'172.16.42.102','public',2,'','',161,500,'traffic_out','/usr/share/cacti/site/rra/172_16_42_102_traffic_in_77.rrd',2,'.1.3.6.1.2.1.31.1.1.1.10.9','',''); +INSERT INTO `poller_item` VALUES (78,0,4,0,'172.16.42.102','public',2,'','',161,500,'traffic_out','/usr/share/cacti/site/rra/172_16_42_102_traffic_in_78.rrd',2,'.1.3.6.1.2.1.31.1.1.1.10.10','',''); +INSERT INTO `poller_item` VALUES (79,0,4,0,'172.16.42.102','public',2,'','',161,500,'traffic_out','/usr/share/cacti/site/rra/172_16_42_102_traffic_in_79.rrd',2,'.1.3.6.1.2.1.31.1.1.1.10.11','',''); +INSERT INTO `poller_item` VALUES (80,0,4,0,'172.16.42.102','public',2,'','',161,500,'traffic_out','/usr/share/cacti/site/rra/172_16_42_102_traffic_in_80.rrd',2,'.1.3.6.1.2.1.31.1.1.1.10.12','',''); +INSERT INTO `poller_item` VALUES (81,0,4,0,'172.16.42.102','public',2,'','',161,500,'traffic_out','/usr/share/cacti/site/rra/172_16_42_102_traffic_in_81.rrd',2,'.1.3.6.1.2.1.31.1.1.1.10.13','',''); +INSERT INTO `poller_item` VALUES (82,0,4,0,'172.16.42.102','public',2,'','',161,500,'traffic_in','/usr/share/cacti/site/rra/172_16_42_102_traffic_in_82.rrd',2,'.1.3.6.1.2.1.31.1.1.1.6.14','',''); +INSERT INTO `poller_item` VALUES (82,0,4,0,'172.16.42.102','public',2,'','',161,500,'traffic_out','/usr/share/cacti/site/rra/172_16_42_102_traffic_in_82.rrd',2,'.1.3.6.1.2.1.31.1.1.1.10.14','',''); +INSERT INTO `poller_item` VALUES (83,0,4,0,'172.16.42.102','public',2,'','',161,500,'traffic_out','/usr/share/cacti/site/rra/172_16_42_102_traffic_in_83.rrd',2,'.1.3.6.1.2.1.31.1.1.1.10.15','',''); +INSERT INTO `poller_item` VALUES (84,0,4,0,'172.16.42.102','public',2,'','',161,500,'traffic_out','/usr/share/cacti/site/rra/172_16_42_102_traffic_in_84.rrd',2,'.1.3.6.1.2.1.31.1.1.1.10.16','',''); +INSERT INTO `poller_item` VALUES (85,0,4,0,'172.16.42.102','public',2,'','',161,500,'traffic_out','/usr/share/cacti/site/rra/172_16_42_102_traffic_in_85.rrd',2,'.1.3.6.1.2.1.31.1.1.1.10.17','',''); +INSERT INTO `poller_item` VALUES (86,0,4,0,'172.16.42.102','public',2,'','',161,500,'traffic_out','/usr/share/cacti/site/rra/172_16_42_102_traffic_in_86.rrd',2,'.1.3.6.1.2.1.31.1.1.1.10.18','',''); +INSERT INTO `poller_item` VALUES (87,0,4,0,'172.16.42.102','public',2,'','',161,500,'traffic_in','/usr/share/cacti/site/rra/172_16_42_102_traffic_in_87.rrd',2,'.1.3.6.1.2.1.31.1.1.1.6.19','',''); +INSERT INTO `poller_item` VALUES (87,0,4,0,'172.16.42.102','public',2,'','',161,500,'traffic_out','/usr/share/cacti/site/rra/172_16_42_102_traffic_in_87.rrd',2,'.1.3.6.1.2.1.31.1.1.1.10.19','',''); +INSERT INTO `poller_item` VALUES (88,0,4,0,'172.16.42.102','public',2,'','',161,500,'traffic_out','/usr/share/cacti/site/rra/172_16_42_102_traffic_in_88.rrd',2,'.1.3.6.1.2.1.31.1.1.1.10.20','',''); +INSERT INTO `poller_item` VALUES (89,0,4,0,'172.16.42.102','public',2,'','',161,500,'traffic_out','/usr/share/cacti/site/rra/172_16_42_102_traffic_in_89.rrd',2,'.1.3.6.1.2.1.31.1.1.1.10.21','',''); +INSERT INTO `poller_item` VALUES (90,0,4,0,'172.16.42.102','public',2,'','',161,500,'traffic_out','/usr/share/cacti/site/rra/172_16_42_102_traffic_in_90.rrd',2,'.1.3.6.1.2.1.31.1.1.1.10.22','',''); +INSERT INTO `poller_item` VALUES (91,0,4,0,'172.16.42.102','public',2,'','',161,500,'traffic_in','/usr/share/cacti/site/rra/172_16_42_102_traffic_in_91.rrd',2,'.1.3.6.1.2.1.31.1.1.1.6.23','',''); +INSERT INTO `poller_item` VALUES (91,0,4,0,'172.16.42.102','public',2,'','',161,500,'traffic_out','/usr/share/cacti/site/rra/172_16_42_102_traffic_in_91.rrd',2,'.1.3.6.1.2.1.31.1.1.1.10.23','',''); +INSERT INTO `poller_item` VALUES (92,0,4,0,'172.16.42.102','public',2,'','',161,500,'traffic_out','/usr/share/cacti/site/rra/172_16_42_102_traffic_in_92.rrd',2,'.1.3.6.1.2.1.31.1.1.1.10.24','',''); +INSERT INTO `poller_item` VALUES (93,0,4,0,'172.16.42.102','public',2,'','',161,500,'traffic_out','/usr/share/cacti/site/rra/172_16_42_102_traffic_in_93.rrd',2,'.1.3.6.1.2.1.31.1.1.1.10.25','',''); +INSERT INTO `poller_item` VALUES (94,0,4,0,'172.16.42.102','public',2,'','',161,500,'traffic_out','/usr/share/cacti/site/rra/172_16_42_102_traffic_in_94.rrd',2,'.1.3.6.1.2.1.31.1.1.1.10.26','',''); +INSERT INTO `poller_item` VALUES (95,0,4,0,'172.16.42.102','public',2,'','',161,500,'traffic_out','/usr/share/cacti/site/rra/172_16_42_102_traffic_in_95.rrd',2,'.1.3.6.1.2.1.31.1.1.1.10.27','',''); +INSERT INTO `poller_item` VALUES (96,0,4,0,'172.16.42.102','public',2,'','',161,500,'traffic_in','/usr/share/cacti/site/rra/172_16_42_102_traffic_in_96.rrd',2,'.1.3.6.1.2.1.31.1.1.1.6.28','',''); +INSERT INTO `poller_item` VALUES (96,0,4,0,'172.16.42.102','public',2,'','',161,500,'traffic_out','/usr/share/cacti/site/rra/172_16_42_102_traffic_in_96.rrd',2,'.1.3.6.1.2.1.31.1.1.1.10.28','',''); +INSERT INTO `poller_item` VALUES (97,0,4,0,'172.16.42.102','public',2,'','',161,500,'traffic_out','/usr/share/cacti/site/rra/172_16_42_102_traffic_in_97.rrd',2,'.1.3.6.1.2.1.31.1.1.1.10.29','',''); +INSERT INTO `poller_item` VALUES (98,0,6,0,'172.16.42.103','public',2,'','',161,500,'5min_cpu','/usr/share/cacti/site/rra/172_16_42_103_5min_cpu_98.rrd',1,'.1.3.6.1.4.1.9.2.1.58.0','',''); +INSERT INTO `poller_item` VALUES (99,0,6,0,'172.16.42.103','public',2,'','',161,500,'traffic_out','/usr/share/cacti/site/rra/172_16_42_103_traffic_in_99.rrd',2,'.1.3.6.1.2.1.31.1.1.1.10.1','',''); +INSERT INTO `poller_item` VALUES (99,0,6,0,'172.16.42.103','public',2,'','',161,500,'traffic_in','/usr/share/cacti/site/rra/172_16_42_103_traffic_in_99.rrd',2,'.1.3.6.1.2.1.31.1.1.1.6.1','',''); +INSERT INTO `poller_item` VALUES (100,0,6,0,'172.16.42.103','public',2,'','',161,500,'traffic_out','/usr/share/cacti/site/rra/172_16_42_103_traffic_in_100.rrd',2,'.1.3.6.1.2.1.31.1.1.1.10.2','',''); +INSERT INTO `poller_item` VALUES (101,0,6,0,'172.16.42.103','public',2,'','',161,500,'traffic_in','/usr/share/cacti/site/rra/172_16_42_103_traffic_in_101.rrd',2,'.1.3.6.1.2.1.31.1.1.1.6.3','',''); +INSERT INTO `poller_item` VALUES (101,0,6,0,'172.16.42.103','public',2,'','',161,500,'traffic_out','/usr/share/cacti/site/rra/172_16_42_103_traffic_in_101.rrd',2,'.1.3.6.1.2.1.31.1.1.1.10.3','',''); +INSERT INTO `poller_item` VALUES (102,0,6,0,'172.16.42.103','public',2,'','',161,500,'traffic_in','/usr/share/cacti/site/rra/172_16_42_103_traffic_in_102.rrd',2,'.1.3.6.1.2.1.31.1.1.1.6.4','',''); +INSERT INTO `poller_item` VALUES (102,0,6,0,'172.16.42.103','public',2,'','',161,500,'traffic_out','/usr/share/cacti/site/rra/172_16_42_103_traffic_in_102.rrd',2,'.1.3.6.1.2.1.31.1.1.1.10.4','',''); +INSERT INTO `poller_item` VALUES (103,0,6,0,'172.16.42.103','public',2,'','',161,500,'traffic_in','/usr/share/cacti/site/rra/172_16_42_103_traffic_in_103.rrd',2,'.1.3.6.1.2.1.31.1.1.1.6.5','',''); +INSERT INTO `poller_item` VALUES (103,0,6,0,'172.16.42.103','public',2,'','',161,500,'traffic_out','/usr/share/cacti/site/rra/172_16_42_103_traffic_in_103.rrd',2,'.1.3.6.1.2.1.31.1.1.1.10.5','',''); +INSERT INTO `poller_item` VALUES (104,0,6,0,'172.16.42.103','public',2,'','',161,500,'traffic_in','/usr/share/cacti/site/rra/172_16_42_103_traffic_in_104.rrd',2,'.1.3.6.1.2.1.31.1.1.1.6.6','',''); +INSERT INTO `poller_item` VALUES (104,0,6,0,'172.16.42.103','public',2,'','',161,500,'traffic_out','/usr/share/cacti/site/rra/172_16_42_103_traffic_in_104.rrd',2,'.1.3.6.1.2.1.31.1.1.1.10.6','',''); +INSERT INTO `poller_item` VALUES (105,0,6,0,'172.16.42.103','public',2,'','',161,500,'traffic_out','/usr/share/cacti/site/rra/172_16_42_103_traffic_in_105.rrd',2,'.1.3.6.1.2.1.31.1.1.1.10.7','',''); +INSERT INTO `poller_item` VALUES (105,0,6,0,'172.16.42.103','public',2,'','',161,500,'traffic_in','/usr/share/cacti/site/rra/172_16_42_103_traffic_in_105.rrd',2,'.1.3.6.1.2.1.31.1.1.1.6.7','',''); +INSERT INTO `poller_item` VALUES (106,0,6,0,'172.16.42.103','public',2,'','',161,500,'traffic_in','/usr/share/cacti/site/rra/172_16_42_103_traffic_in_106.rrd',2,'.1.3.6.1.2.1.31.1.1.1.6.8','',''); +INSERT INTO `poller_item` VALUES (106,0,6,0,'172.16.42.103','public',2,'','',161,500,'traffic_out','/usr/share/cacti/site/rra/172_16_42_103_traffic_in_106.rrd',2,'.1.3.6.1.2.1.31.1.1.1.10.8','',''); +INSERT INTO `poller_item` VALUES (107,0,6,0,'172.16.42.103','public',2,'','',161,500,'traffic_in','/usr/share/cacti/site/rra/172_16_42_103_traffic_in_107.rrd',2,'.1.3.6.1.2.1.31.1.1.1.6.9','',''); +INSERT INTO `poller_item` VALUES (107,0,6,0,'172.16.42.103','public',2,'','',161,500,'traffic_out','/usr/share/cacti/site/rra/172_16_42_103_traffic_in_107.rrd',2,'.1.3.6.1.2.1.31.1.1.1.10.9','',''); +INSERT INTO `poller_item` VALUES (108,0,6,0,'172.16.42.103','public',2,'','',161,500,'traffic_in','/usr/share/cacti/site/rra/172_16_42_103_traffic_in_108.rrd',2,'.1.3.6.1.2.1.31.1.1.1.6.10','',''); +INSERT INTO `poller_item` VALUES (108,0,6,0,'172.16.42.103','public',2,'','',161,500,'traffic_out','/usr/share/cacti/site/rra/172_16_42_103_traffic_in_108.rrd',2,'.1.3.6.1.2.1.31.1.1.1.10.10','',''); +INSERT INTO `poller_item` VALUES (109,0,6,0,'172.16.42.103','public',2,'','',161,500,'traffic_in','/usr/share/cacti/site/rra/172_16_42_103_traffic_in_109.rrd',2,'.1.3.6.1.2.1.31.1.1.1.6.11','',''); +INSERT INTO `poller_item` VALUES (109,0,6,0,'172.16.42.103','public',2,'','',161,500,'traffic_out','/usr/share/cacti/site/rra/172_16_42_103_traffic_in_109.rrd',2,'.1.3.6.1.2.1.31.1.1.1.10.11','',''); +INSERT INTO `poller_item` VALUES (110,0,6,0,'172.16.42.103','public',2,'','',161,500,'traffic_out','/usr/share/cacti/site/rra/172_16_42_103_traffic_in_110.rrd',2,'.1.3.6.1.2.1.31.1.1.1.10.12','',''); +INSERT INTO `poller_item` VALUES (110,0,6,0,'172.16.42.103','public',2,'','',161,500,'traffic_in','/usr/share/cacti/site/rra/172_16_42_103_traffic_in_110.rrd',2,'.1.3.6.1.2.1.31.1.1.1.6.12','',''); +INSERT INTO `poller_item` VALUES (111,0,6,0,'172.16.42.103','public',2,'','',161,500,'traffic_out','/usr/share/cacti/site/rra/172_16_42_103_traffic_in_111.rrd',2,'.1.3.6.1.2.1.31.1.1.1.10.13','',''); +INSERT INTO `poller_item` VALUES (112,0,6,0,'172.16.42.103','public',2,'','',161,500,'traffic_in','/usr/share/cacti/site/rra/172_16_42_103_traffic_in_112.rrd',2,'.1.3.6.1.2.1.31.1.1.1.6.14','',''); +INSERT INTO `poller_item` VALUES (112,0,6,0,'172.16.42.103','public',2,'','',161,500,'traffic_out','/usr/share/cacti/site/rra/172_16_42_103_traffic_in_112.rrd',2,'.1.3.6.1.2.1.31.1.1.1.10.14','',''); +INSERT INTO `poller_item` VALUES (113,0,6,0,'172.16.42.103','public',2,'','',161,500,'traffic_in','/usr/share/cacti/site/rra/172_16_42_103_traffic_in_113.rrd',2,'.1.3.6.1.2.1.31.1.1.1.6.15','',''); +INSERT INTO `poller_item` VALUES (113,0,6,0,'172.16.42.103','public',2,'','',161,500,'traffic_out','/usr/share/cacti/site/rra/172_16_42_103_traffic_in_113.rrd',2,'.1.3.6.1.2.1.31.1.1.1.10.15','',''); +INSERT INTO `poller_item` VALUES (114,0,6,0,'172.16.42.103','public',2,'','',161,500,'traffic_in','/usr/share/cacti/site/rra/172_16_42_103_traffic_in_114.rrd',2,'.1.3.6.1.2.1.31.1.1.1.6.16','',''); +INSERT INTO `poller_item` VALUES (114,0,6,0,'172.16.42.103','public',2,'','',161,500,'traffic_out','/usr/share/cacti/site/rra/172_16_42_103_traffic_in_114.rrd',2,'.1.3.6.1.2.1.31.1.1.1.10.16','',''); +INSERT INTO `poller_item` VALUES (115,0,6,0,'172.16.42.103','public',2,'','',161,500,'traffic_out','/usr/share/cacti/site/rra/172_16_42_103_traffic_in_115.rrd',2,'.1.3.6.1.2.1.31.1.1.1.10.17','',''); +INSERT INTO `poller_item` VALUES (115,0,6,0,'172.16.42.103','public',2,'','',161,500,'traffic_in','/usr/share/cacti/site/rra/172_16_42_103_traffic_in_115.rrd',2,'.1.3.6.1.2.1.31.1.1.1.6.17','',''); +INSERT INTO `poller_item` VALUES (116,0,6,0,'172.16.42.103','public',2,'','',161,500,'traffic_out','/usr/share/cacti/site/rra/172_16_42_103_traffic_in_116.rrd',2,'.1.3.6.1.2.1.31.1.1.1.10.18','',''); +INSERT INTO `poller_item` VALUES (117,0,6,0,'172.16.42.103','public',2,'','',161,500,'traffic_in','/usr/share/cacti/site/rra/172_16_42_103_traffic_in_117.rrd',2,'.1.3.6.1.2.1.31.1.1.1.6.19','',''); +INSERT INTO `poller_item` VALUES (117,0,6,0,'172.16.42.103','public',2,'','',161,500,'traffic_out','/usr/share/cacti/site/rra/172_16_42_103_traffic_in_117.rrd',2,'.1.3.6.1.2.1.31.1.1.1.10.19','',''); +INSERT INTO `poller_item` VALUES (118,0,6,0,'172.16.42.103','public',2,'','',161,500,'traffic_in','/usr/share/cacti/site/rra/172_16_42_103_traffic_in_118.rrd',2,'.1.3.6.1.2.1.31.1.1.1.6.20','',''); +INSERT INTO `poller_item` VALUES (118,0,6,0,'172.16.42.103','public',2,'','',161,500,'traffic_out','/usr/share/cacti/site/rra/172_16_42_103_traffic_in_118.rrd',2,'.1.3.6.1.2.1.31.1.1.1.10.20','',''); +INSERT INTO `poller_item` VALUES (119,0,6,0,'172.16.42.103','public',2,'','',161,500,'traffic_in','/usr/share/cacti/site/rra/172_16_42_103_traffic_in_119.rrd',2,'.1.3.6.1.2.1.31.1.1.1.6.21','',''); +INSERT INTO `poller_item` VALUES (119,0,6,0,'172.16.42.103','public',2,'','',161,500,'traffic_out','/usr/share/cacti/site/rra/172_16_42_103_traffic_in_119.rrd',2,'.1.3.6.1.2.1.31.1.1.1.10.21','',''); +INSERT INTO `poller_item` VALUES (120,0,6,0,'172.16.42.103','public',2,'','',161,500,'traffic_in','/usr/share/cacti/site/rra/172_16_42_103_traffic_in_120.rrd',2,'.1.3.6.1.2.1.31.1.1.1.6.22','',''); +INSERT INTO `poller_item` VALUES (120,0,6,0,'172.16.42.103','public',2,'','',161,500,'traffic_out','/usr/share/cacti/site/rra/172_16_42_103_traffic_in_120.rrd',2,'.1.3.6.1.2.1.31.1.1.1.10.22','',''); +INSERT INTO `poller_item` VALUES (121,0,6,0,'172.16.42.103','public',2,'','',161,500,'traffic_out','/usr/share/cacti/site/rra/172_16_42_103_traffic_in_121.rrd',2,'.1.3.6.1.2.1.31.1.1.1.10.23','',''); +INSERT INTO `poller_item` VALUES (122,0,6,0,'172.16.42.103','public',2,'','',161,500,'traffic_in','/usr/share/cacti/site/rra/172_16_42_103_traffic_in_122.rrd',2,'.1.3.6.1.2.1.31.1.1.1.6.24','',''); +INSERT INTO `poller_item` VALUES (122,0,6,0,'172.16.42.103','public',2,'','',161,500,'traffic_out','/usr/share/cacti/site/rra/172_16_42_103_traffic_in_122.rrd',2,'.1.3.6.1.2.1.31.1.1.1.10.24','',''); +INSERT INTO `poller_item` VALUES (123,0,6,0,'172.16.42.103','public',2,'','',161,500,'traffic_in','/usr/share/cacti/site/rra/172_16_42_103_traffic_in_123.rrd',2,'.1.3.6.1.2.1.31.1.1.1.6.25','',''); +INSERT INTO `poller_item` VALUES (123,0,6,0,'172.16.42.103','public',2,'','',161,500,'traffic_out','/usr/share/cacti/site/rra/172_16_42_103_traffic_in_123.rrd',2,'.1.3.6.1.2.1.31.1.1.1.10.25','',''); +INSERT INTO `poller_item` VALUES (124,0,6,0,'172.16.42.103','public',2,'','',161,500,'traffic_out','/usr/share/cacti/site/rra/172_16_42_103_traffic_in_124.rrd',2,'.1.3.6.1.2.1.31.1.1.1.10.26','',''); +INSERT INTO `poller_item` VALUES (124,0,6,0,'172.16.42.103','public',2,'','',161,500,'traffic_in','/usr/share/cacti/site/rra/172_16_42_103_traffic_in_124.rrd',2,'.1.3.6.1.2.1.31.1.1.1.6.26','',''); +INSERT INTO `poller_item` VALUES (125,0,6,0,'172.16.42.103','public',2,'','',161,500,'traffic_in','/usr/share/cacti/site/rra/172_16_42_103_traffic_in_125.rrd',2,'.1.3.6.1.2.1.31.1.1.1.6.27','',''); +INSERT INTO `poller_item` VALUES (125,0,6,0,'172.16.42.103','public',2,'','',161,500,'traffic_out','/usr/share/cacti/site/rra/172_16_42_103_traffic_in_125.rrd',2,'.1.3.6.1.2.1.31.1.1.1.10.27','',''); +INSERT INTO `poller_item` VALUES (126,0,6,0,'172.16.42.103','public',2,'','',161,500,'traffic_out','/usr/share/cacti/site/rra/172_16_42_103_traffic_in_126.rrd',2,'.1.3.6.1.2.1.31.1.1.1.10.28','',''); +INSERT INTO `poller_item` VALUES (126,0,6,0,'172.16.42.103','public',2,'','',161,500,'traffic_in','/usr/share/cacti/site/rra/172_16_42_103_traffic_in_126.rrd',2,'.1.3.6.1.2.1.31.1.1.1.6.28','',''); +INSERT INTO `poller_item` VALUES (127,0,6,0,'172.16.42.103','public',2,'','',161,500,'traffic_out','/usr/share/cacti/site/rra/172_16_42_103_traffic_in_127.rrd',2,'.1.3.6.1.2.1.31.1.1.1.10.29','',''); +INSERT INTO `poller_item` VALUES (243,0,5,0,'172.16.42.1','public',2,'','',161,500,'cpu_user','/usr/share/cacti/site/rra/sinabox_cpu_user_243.rrd',1,'.1.3.6.1.4.1.2021.11.50.0','',''); +INSERT INTO `poller_item` VALUES (251,0,5,0,'172.16.42.1','public',2,'','',161,500,'traffic_in','/usr/share/cacti/site/rra/sinabox_traffic_in_251.rrd',2,'.1.3.6.1.2.1.2.2.1.10.7','',''); +INSERT INTO `poller_item` VALUES (252,0,5,0,'172.16.42.1','public',2,'','',161,500,'traffic_out','/usr/share/cacti/site/rra/sinabox_traffic_in_252.rrd',2,'.1.3.6.1.2.1.2.2.1.16.8','',''); +INSERT INTO `poller_item` VALUES (252,0,5,0,'172.16.42.1','public',2,'','',161,500,'traffic_in','/usr/share/cacti/site/rra/sinabox_traffic_in_252.rrd',2,'.1.3.6.1.2.1.2.2.1.10.8','',''); +INSERT INTO `poller_item` VALUES (253,0,5,0,'172.16.42.1','public',2,'','',161,500,'traffic_out','/usr/share/cacti/site/rra/sinabox_traffic_in_253.rrd',2,'.1.3.6.1.2.1.2.2.1.16.10','',''); +INSERT INTO `poller_item` VALUES (253,0,5,0,'172.16.42.1','public',2,'','',161,500,'traffic_in','/usr/share/cacti/site/rra/sinabox_traffic_in_253.rrd',2,'.1.3.6.1.2.1.2.2.1.10.10','',''); +INSERT INTO `poller_item` VALUES (241,0,5,0,'172.16.42.1','public',2,'','',161,500,'cpu_nice','/usr/share/cacti/site/rra/sinabox_cpu_nice_241.rrd',1,'.1.3.6.1.4.1.2021.11.51.0','',''); +INSERT INTO `poller_item` VALUES (242,0,5,0,'172.16.42.1','public',2,'','',161,500,'cpu_system','/usr/share/cacti/site/rra/sinabox_cpu_system_242.rrd',1,'.1.3.6.1.4.1.2021.11.52.0','',''); +INSERT INTO `poller_item` VALUES (251,0,5,0,'172.16.42.1','public',2,'','',161,500,'traffic_out','/usr/share/cacti/site/rra/sinabox_traffic_in_251.rrd',2,'.1.3.6.1.2.1.2.2.1.16.7','',''); +INSERT INTO `poller_item` VALUES (250,0,5,0,'172.16.42.1','public',2,'','',161,500,'traffic_out','/usr/share/cacti/site/rra/sinabox_traffic_in_250.rrd',2,'.1.3.6.1.2.1.2.2.1.16.6','',''); +INSERT INTO `poller_item` VALUES (250,0,5,0,'172.16.42.1','public',2,'','',161,500,'traffic_in','/usr/share/cacti/site/rra/sinabox_traffic_in_250.rrd',2,'.1.3.6.1.2.1.2.2.1.10.6','',''); +INSERT INTO `poller_item` VALUES (249,0,5,0,'172.16.42.1','public',2,'','',161,500,'mem_free','/usr/share/cacti/site/rra/sinabox_mem_free_249.rrd',1,'.1.3.6.1.4.1.2021.4.6.0','',''); +INSERT INTO `poller_item` VALUES (248,0,5,0,'172.16.42.1','public',2,'','',161,500,'mem_cache','/usr/share/cacti/site/rra/sinabox_mem_cache_248.rrd',1,'.1.3.6.1.4.1.2021.4.15.0','',''); +INSERT INTO `poller_item` VALUES (247,0,5,0,'172.16.42.1','public',2,'','',161,500,'mem_buffers','/usr/share/cacti/site/rra/sinabox_mem_buffers_247.rrd',1,'.1.3.6.1.4.1.2021.4.14.0','',''); +INSERT INTO `poller_item` VALUES (256,0,5,0,'172.16.42.1','public',2,'','',161,500,'traffic_in','/usr/share/cacti/site/rra/sinabox_traffic_in_256.rrd',2,'.1.3.6.1.2.1.2.2.1.10.9','',''); +INSERT INTO `poller_item` VALUES (256,0,5,0,'172.16.42.1','public',2,'','',161,500,'traffic_out','/usr/share/cacti/site/rra/sinabox_traffic_in_256.rrd',2,'.1.3.6.1.2.1.2.2.1.16.9','',''); +INSERT INTO `poller_item` VALUES (257,0,5,0,'172.16.42.1','public',2,'','',161,500,'traffic_in','/usr/share/cacti/site/rra/sinabox_traffic_in_257.rrd',2,'.1.3.6.1.2.1.2.2.1.10.13','',''); +INSERT INTO `poller_item` VALUES (257,0,5,0,'172.16.42.1','public',2,'','',161,500,'traffic_out','/usr/share/cacti/site/rra/sinabox_traffic_in_257.rrd',2,'.1.3.6.1.2.1.2.2.1.16.13','',''); +INSERT INTO `poller_item` VALUES (255,0,5,0,'172.16.42.1','public',2,'','',161,500,'traffic_out','/usr/share/cacti/site/rra/sinabox_traffic_in_255.rrd',2,'.1.3.6.1.2.1.2.2.1.16.15','',''); +INSERT INTO `poller_item` VALUES (255,0,5,0,'172.16.42.1','public',2,'','',161,500,'traffic_in','/usr/share/cacti/site/rra/sinabox_traffic_in_255.rrd',2,'.1.3.6.1.2.1.2.2.1.10.15','',''); +INSERT INTO `poller_item` VALUES (254,0,5,0,'172.16.42.1','public',2,'','',161,500,'traffic_in','/usr/share/cacti/site/rra/sinabox_traffic_in_254.rrd',2,'.1.3.6.1.2.1.2.2.1.10.13','',''); +INSERT INTO `poller_item` VALUES (254,0,5,0,'172.16.42.1','public',2,'','',161,500,'traffic_out','/usr/share/cacti/site/rra/sinabox_traffic_in_254.rrd',2,'.1.3.6.1.2.1.2.2.1.16.13','',''); +INSERT INTO `poller_item` VALUES (244,0,5,0,'172.16.42.1','public',2,'','',161,500,'load_1min','/usr/share/cacti/site/rra/sinabox_load_1min_244.rrd',1,'.1.3.6.1.4.1.2021.10.1.3.1','',''); +INSERT INTO `poller_item` VALUES (245,0,5,0,'172.16.42.1','public',2,'','',161,500,'load_15min','/usr/share/cacti/site/rra/sinabox_load_15min_245.rrd',1,'.1.3.6.1.4.1.2021.10.1.3.3','',''); +INSERT INTO `poller_item` VALUES (246,0,5,0,'172.16.42.1','public',2,'','',161,500,'load_5min','/usr/share/cacti/site/rra/sinabox_load_5min_246.rrd',1,'.1.3.6.1.4.1.2021.10.1.3.2','',''); +INSERT INTO `poller_item` VALUES (145,0,7,0,'172.16.42.104','public',2,'','',161,500,'5min_cpu','/usr/share/cacti/site/rra/172_16_42_104_5min_cpu_145.rrd',1,'.1.3.6.1.4.1.9.2.1.58.0','',''); +INSERT INTO `poller_item` VALUES (146,0,7,0,'172.16.42.104','public',2,'','',161,500,'traffic_out','/usr/share/cacti/site/rra/172_16_42_104_traffic_in_146.rrd',2,'.1.3.6.1.2.1.31.1.1.1.10.1','',''); +INSERT INTO `poller_item` VALUES (146,0,7,0,'172.16.42.104','public',2,'','',161,500,'traffic_in','/usr/share/cacti/site/rra/172_16_42_104_traffic_in_146.rrd',2,'.1.3.6.1.2.1.31.1.1.1.6.1','',''); +INSERT INTO `poller_item` VALUES (147,0,7,0,'172.16.42.104','public',2,'','',161,500,'traffic_out','/usr/share/cacti/site/rra/172_16_42_104_traffic_in_147.rrd',2,'.1.3.6.1.2.1.31.1.1.1.10.2','',''); +INSERT INTO `poller_item` VALUES (147,0,7,0,'172.16.42.104','public',2,'','',161,500,'traffic_in','/usr/share/cacti/site/rra/172_16_42_104_traffic_in_147.rrd',2,'.1.3.6.1.2.1.31.1.1.1.6.2','',''); +INSERT INTO `poller_item` VALUES (148,0,7,0,'172.16.42.104','public',2,'','',161,500,'traffic_out','/usr/share/cacti/site/rra/172_16_42_104_traffic_in_148.rrd',2,'.1.3.6.1.2.1.31.1.1.1.10.3','',''); +INSERT INTO `poller_item` VALUES (148,0,7,0,'172.16.42.104','public',2,'','',161,500,'traffic_in','/usr/share/cacti/site/rra/172_16_42_104_traffic_in_148.rrd',2,'.1.3.6.1.2.1.31.1.1.1.6.3','',''); +INSERT INTO `poller_item` VALUES (149,0,7,0,'172.16.42.104','public',2,'','',161,500,'traffic_out','/usr/share/cacti/site/rra/172_16_42_104_traffic_in_149.rrd',2,'.1.3.6.1.2.1.31.1.1.1.10.4','',''); +INSERT INTO `poller_item` VALUES (149,0,7,0,'172.16.42.104','public',2,'','',161,500,'traffic_in','/usr/share/cacti/site/rra/172_16_42_104_traffic_in_149.rrd',2,'.1.3.6.1.2.1.31.1.1.1.6.4','',''); +INSERT INTO `poller_item` VALUES (150,0,7,0,'172.16.42.104','public',2,'','',161,500,'traffic_out','/usr/share/cacti/site/rra/172_16_42_104_traffic_in_150.rrd',2,'.1.3.6.1.2.1.31.1.1.1.10.5','',''); +INSERT INTO `poller_item` VALUES (150,0,7,0,'172.16.42.104','public',2,'','',161,500,'traffic_in','/usr/share/cacti/site/rra/172_16_42_104_traffic_in_150.rrd',2,'.1.3.6.1.2.1.31.1.1.1.6.5','',''); +INSERT INTO `poller_item` VALUES (151,0,7,0,'172.16.42.104','public',2,'','',161,500,'traffic_out','/usr/share/cacti/site/rra/172_16_42_104_traffic_in_151.rrd',2,'.1.3.6.1.2.1.31.1.1.1.10.6','',''); +INSERT INTO `poller_item` VALUES (151,0,7,0,'172.16.42.104','public',2,'','',161,500,'traffic_in','/usr/share/cacti/site/rra/172_16_42_104_traffic_in_151.rrd',2,'.1.3.6.1.2.1.31.1.1.1.6.6','',''); +INSERT INTO `poller_item` VALUES (152,0,7,0,'172.16.42.104','public',2,'','',161,500,'traffic_out','/usr/share/cacti/site/rra/172_16_42_104_traffic_in_152.rrd',2,'.1.3.6.1.2.1.31.1.1.1.10.7','',''); +INSERT INTO `poller_item` VALUES (152,0,7,0,'172.16.42.104','public',2,'','',161,500,'traffic_in','/usr/share/cacti/site/rra/172_16_42_104_traffic_in_152.rrd',2,'.1.3.6.1.2.1.31.1.1.1.6.7','',''); +INSERT INTO `poller_item` VALUES (153,0,7,0,'172.16.42.104','public',2,'','',161,500,'traffic_out','/usr/share/cacti/site/rra/172_16_42_104_traffic_in_153.rrd',2,'.1.3.6.1.2.1.31.1.1.1.10.8','',''); +INSERT INTO `poller_item` VALUES (153,0,7,0,'172.16.42.104','public',2,'','',161,500,'traffic_in','/usr/share/cacti/site/rra/172_16_42_104_traffic_in_153.rrd',2,'.1.3.6.1.2.1.31.1.1.1.6.8','',''); +INSERT INTO `poller_item` VALUES (154,0,7,0,'172.16.42.104','public',2,'','',161,500,'traffic_out','/usr/share/cacti/site/rra/172_16_42_104_traffic_in_154.rrd',2,'.1.3.6.1.2.1.31.1.1.1.10.9','',''); +INSERT INTO `poller_item` VALUES (154,0,7,0,'172.16.42.104','public',2,'','',161,500,'traffic_in','/usr/share/cacti/site/rra/172_16_42_104_traffic_in_154.rrd',2,'.1.3.6.1.2.1.31.1.1.1.6.9','',''); +INSERT INTO `poller_item` VALUES (155,0,7,0,'172.16.42.104','public',2,'','',161,500,'traffic_out','/usr/share/cacti/site/rra/172_16_42_104_traffic_in_155.rrd',2,'.1.3.6.1.2.1.31.1.1.1.10.10','',''); +INSERT INTO `poller_item` VALUES (155,0,7,0,'172.16.42.104','public',2,'','',161,500,'traffic_in','/usr/share/cacti/site/rra/172_16_42_104_traffic_in_155.rrd',2,'.1.3.6.1.2.1.31.1.1.1.6.10','',''); +INSERT INTO `poller_item` VALUES (156,0,7,0,'172.16.42.104','public',2,'','',161,500,'traffic_out','/usr/share/cacti/site/rra/172_16_42_104_traffic_in_156.rrd',2,'.1.3.6.1.2.1.31.1.1.1.10.11','',''); +INSERT INTO `poller_item` VALUES (156,0,7,0,'172.16.42.104','public',2,'','',161,500,'traffic_in','/usr/share/cacti/site/rra/172_16_42_104_traffic_in_156.rrd',2,'.1.3.6.1.2.1.31.1.1.1.6.11','',''); +INSERT INTO `poller_item` VALUES (157,0,7,0,'172.16.42.104','public',2,'','',161,500,'traffic_out','/usr/share/cacti/site/rra/172_16_42_104_traffic_in_157.rrd',2,'.1.3.6.1.2.1.31.1.1.1.10.12','',''); +INSERT INTO `poller_item` VALUES (157,0,7,0,'172.16.42.104','public',2,'','',161,500,'traffic_in','/usr/share/cacti/site/rra/172_16_42_104_traffic_in_157.rrd',2,'.1.3.6.1.2.1.31.1.1.1.6.12','',''); +INSERT INTO `poller_item` VALUES (158,0,7,0,'172.16.42.104','public',2,'','',161,500,'traffic_out','/usr/share/cacti/site/rra/172_16_42_104_traffic_in_158.rrd',2,'.1.3.6.1.2.1.31.1.1.1.10.13','',''); +INSERT INTO `poller_item` VALUES (158,0,7,0,'172.16.42.104','public',2,'','',161,500,'traffic_in','/usr/share/cacti/site/rra/172_16_42_104_traffic_in_158.rrd',2,'.1.3.6.1.2.1.31.1.1.1.6.13','',''); +INSERT INTO `poller_item` VALUES (159,0,7,0,'172.16.42.104','public',2,'','',161,500,'traffic_out','/usr/share/cacti/site/rra/172_16_42_104_traffic_in_159.rrd',2,'.1.3.6.1.2.1.31.1.1.1.10.14','',''); +INSERT INTO `poller_item` VALUES (159,0,7,0,'172.16.42.104','public',2,'','',161,500,'traffic_in','/usr/share/cacti/site/rra/172_16_42_104_traffic_in_159.rrd',2,'.1.3.6.1.2.1.31.1.1.1.6.14','',''); +INSERT INTO `poller_item` VALUES (160,0,7,0,'172.16.42.104','public',2,'','',161,500,'traffic_out','/usr/share/cacti/site/rra/172_16_42_104_traffic_in_160.rrd',2,'.1.3.6.1.2.1.31.1.1.1.10.15','',''); +INSERT INTO `poller_item` VALUES (160,0,7,0,'172.16.42.104','public',2,'','',161,500,'traffic_in','/usr/share/cacti/site/rra/172_16_42_104_traffic_in_160.rrd',2,'.1.3.6.1.2.1.31.1.1.1.6.15','',''); +INSERT INTO `poller_item` VALUES (161,0,7,0,'172.16.42.104','public',2,'','',161,500,'traffic_out','/usr/share/cacti/site/rra/172_16_42_104_traffic_in_161.rrd',2,'.1.3.6.1.2.1.31.1.1.1.10.16','',''); +INSERT INTO `poller_item` VALUES (161,0,7,0,'172.16.42.104','public',2,'','',161,500,'traffic_in','/usr/share/cacti/site/rra/172_16_42_104_traffic_in_161.rrd',2,'.1.3.6.1.2.1.31.1.1.1.6.16','',''); +INSERT INTO `poller_item` VALUES (162,0,7,0,'172.16.42.104','public',2,'','',161,500,'traffic_out','/usr/share/cacti/site/rra/172_16_42_104_traffic_in_162.rrd',2,'.1.3.6.1.2.1.31.1.1.1.10.17','',''); +INSERT INTO `poller_item` VALUES (162,0,7,0,'172.16.42.104','public',2,'','',161,500,'traffic_in','/usr/share/cacti/site/rra/172_16_42_104_traffic_in_162.rrd',2,'.1.3.6.1.2.1.31.1.1.1.6.17','',''); +INSERT INTO `poller_item` VALUES (163,0,7,0,'172.16.42.104','public',2,'','',161,500,'traffic_out','/usr/share/cacti/site/rra/172_16_42_104_traffic_in_163.rrd',2,'.1.3.6.1.2.1.31.1.1.1.10.18','',''); +INSERT INTO `poller_item` VALUES (163,0,7,0,'172.16.42.104','public',2,'','',161,500,'traffic_in','/usr/share/cacti/site/rra/172_16_42_104_traffic_in_163.rrd',2,'.1.3.6.1.2.1.31.1.1.1.6.18','',''); +INSERT INTO `poller_item` VALUES (164,0,7,0,'172.16.42.104','public',2,'','',161,500,'traffic_out','/usr/share/cacti/site/rra/172_16_42_104_traffic_in_164.rrd',2,'.1.3.6.1.2.1.31.1.1.1.10.19','',''); +INSERT INTO `poller_item` VALUES (164,0,7,0,'172.16.42.104','public',2,'','',161,500,'traffic_in','/usr/share/cacti/site/rra/172_16_42_104_traffic_in_164.rrd',2,'.1.3.6.1.2.1.31.1.1.1.6.19','',''); +INSERT INTO `poller_item` VALUES (165,0,7,0,'172.16.42.104','public',2,'','',161,500,'traffic_out','/usr/share/cacti/site/rra/172_16_42_104_traffic_in_165.rrd',2,'.1.3.6.1.2.1.31.1.1.1.10.20','',''); +INSERT INTO `poller_item` VALUES (165,0,7,0,'172.16.42.104','public',2,'','',161,500,'traffic_in','/usr/share/cacti/site/rra/172_16_42_104_traffic_in_165.rrd',2,'.1.3.6.1.2.1.31.1.1.1.6.20','',''); +INSERT INTO `poller_item` VALUES (166,0,7,0,'172.16.42.104','public',2,'','',161,500,'traffic_out','/usr/share/cacti/site/rra/172_16_42_104_traffic_in_166.rrd',2,'.1.3.6.1.2.1.31.1.1.1.10.21','',''); +INSERT INTO `poller_item` VALUES (166,0,7,0,'172.16.42.104','public',2,'','',161,500,'traffic_in','/usr/share/cacti/site/rra/172_16_42_104_traffic_in_166.rrd',2,'.1.3.6.1.2.1.31.1.1.1.6.21','',''); +INSERT INTO `poller_item` VALUES (167,0,7,0,'172.16.42.104','public',2,'','',161,500,'traffic_out','/usr/share/cacti/site/rra/172_16_42_104_traffic_in_167.rrd',2,'.1.3.6.1.2.1.31.1.1.1.10.22','',''); +INSERT INTO `poller_item` VALUES (167,0,7,0,'172.16.42.104','public',2,'','',161,500,'traffic_in','/usr/share/cacti/site/rra/172_16_42_104_traffic_in_167.rrd',2,'.1.3.6.1.2.1.31.1.1.1.6.22','',''); +INSERT INTO `poller_item` VALUES (168,0,7,0,'172.16.42.104','public',2,'','',161,500,'traffic_out','/usr/share/cacti/site/rra/172_16_42_104_traffic_in_168.rrd',2,'.1.3.6.1.2.1.31.1.1.1.10.23','',''); +INSERT INTO `poller_item` VALUES (168,0,7,0,'172.16.42.104','public',2,'','',161,500,'traffic_in','/usr/share/cacti/site/rra/172_16_42_104_traffic_in_168.rrd',2,'.1.3.6.1.2.1.31.1.1.1.6.23','',''); +INSERT INTO `poller_item` VALUES (169,0,7,0,'172.16.42.104','public',2,'','',161,500,'traffic_out','/usr/share/cacti/site/rra/172_16_42_104_traffic_in_169.rrd',2,'.1.3.6.1.2.1.31.1.1.1.10.24','',''); +INSERT INTO `poller_item` VALUES (169,0,7,0,'172.16.42.104','public',2,'','',161,500,'traffic_in','/usr/share/cacti/site/rra/172_16_42_104_traffic_in_169.rrd',2,'.1.3.6.1.2.1.31.1.1.1.6.24','',''); +INSERT INTO `poller_item` VALUES (170,0,7,0,'172.16.42.104','public',2,'','',161,500,'traffic_out','/usr/share/cacti/site/rra/172_16_42_104_traffic_in_170.rrd',2,'.1.3.6.1.2.1.31.1.1.1.10.25','',''); +INSERT INTO `poller_item` VALUES (170,0,7,0,'172.16.42.104','public',2,'','',161,500,'traffic_in','/usr/share/cacti/site/rra/172_16_42_104_traffic_in_170.rrd',2,'.1.3.6.1.2.1.31.1.1.1.6.25','',''); +INSERT INTO `poller_item` VALUES (171,0,7,0,'172.16.42.104','public',2,'','',161,500,'traffic_out','/usr/share/cacti/site/rra/172_16_42_104_traffic_in_171.rrd',2,'.1.3.6.1.2.1.31.1.1.1.10.26','',''); +INSERT INTO `poller_item` VALUES (171,0,7,0,'172.16.42.104','public',2,'','',161,500,'traffic_in','/usr/share/cacti/site/rra/172_16_42_104_traffic_in_171.rrd',2,'.1.3.6.1.2.1.31.1.1.1.6.26','',''); +INSERT INTO `poller_item` VALUES (172,0,7,0,'172.16.42.104','public',2,'','',161,500,'traffic_out','/usr/share/cacti/site/rra/172_16_42_104_traffic_in_172.rrd',2,'.1.3.6.1.2.1.31.1.1.1.10.27','',''); +INSERT INTO `poller_item` VALUES (172,0,7,0,'172.16.42.104','public',2,'','',161,500,'traffic_in','/usr/share/cacti/site/rra/172_16_42_104_traffic_in_172.rrd',2,'.1.3.6.1.2.1.31.1.1.1.6.27','',''); +INSERT INTO `poller_item` VALUES (173,0,7,0,'172.16.42.104','public',2,'','',161,500,'traffic_out','/usr/share/cacti/site/rra/172_16_42_104_traffic_in_173.rrd',2,'.1.3.6.1.2.1.31.1.1.1.10.28','',''); +INSERT INTO `poller_item` VALUES (173,0,7,0,'172.16.42.104','public',2,'','',161,500,'traffic_in','/usr/share/cacti/site/rra/172_16_42_104_traffic_in_173.rrd',2,'.1.3.6.1.2.1.31.1.1.1.6.28','',''); +INSERT INTO `poller_item` VALUES (174,0,7,0,'172.16.42.104','public',2,'','',161,500,'traffic_out','/usr/share/cacti/site/rra/172_16_42_104_traffic_in_174.rrd',2,'.1.3.6.1.2.1.31.1.1.1.10.29','',''); +INSERT INTO `poller_item` VALUES (174,0,7,0,'172.16.42.104','public',2,'','',161,500,'traffic_in','/usr/share/cacti/site/rra/172_16_42_104_traffic_in_174.rrd',2,'.1.3.6.1.2.1.31.1.1.1.6.29','',''); +INSERT INTO `poller_item` VALUES (175,0,8,0,'172.16.42.142','public',2,'','',161,500,'5min_cpu','/usr/share/cacti/site/rra/172_16_42_142_5min_cpu_175.rrd',1,'.1.3.6.1.4.1.9.2.1.58.0','',''); +INSERT INTO `poller_item` VALUES (176,0,8,0,'172.16.42.142','public',2,'','',161,500,'traffic_in','/usr/share/cacti/site/rra/172_16_42_142_traffic_in_176.rrd',2,'.1.3.6.1.2.1.31.1.1.1.6.1','',''); +INSERT INTO `poller_item` VALUES (176,0,8,0,'172.16.42.142','public',2,'','',161,500,'traffic_out','/usr/share/cacti/site/rra/172_16_42_142_traffic_in_176.rrd',2,'.1.3.6.1.2.1.31.1.1.1.10.1','',''); +INSERT INTO `poller_item` VALUES (177,0,8,0,'172.16.42.142','public',2,'','',161,500,'traffic_in','/usr/share/cacti/site/rra/172_16_42_142_traffic_in_177.rrd',2,'.1.3.6.1.2.1.31.1.1.1.6.2','',''); +INSERT INTO `poller_item` VALUES (177,0,8,0,'172.16.42.142','public',2,'','',161,500,'traffic_out','/usr/share/cacti/site/rra/172_16_42_142_traffic_in_177.rrd',2,'.1.3.6.1.2.1.31.1.1.1.10.2','',''); +INSERT INTO `poller_item` VALUES (178,0,8,0,'172.16.42.142','public',2,'','',161,500,'traffic_in','/usr/share/cacti/site/rra/172_16_42_142_traffic_in_178.rrd',2,'.1.3.6.1.2.1.31.1.1.1.6.3','',''); +INSERT INTO `poller_item` VALUES (178,0,8,0,'172.16.42.142','public',2,'','',161,500,'traffic_out','/usr/share/cacti/site/rra/172_16_42_142_traffic_in_178.rrd',2,'.1.3.6.1.2.1.31.1.1.1.10.3','',''); +INSERT INTO `poller_item` VALUES (179,0,8,0,'172.16.42.142','public',2,'','',161,500,'traffic_in','/usr/share/cacti/site/rra/172_16_42_142_traffic_in_179.rrd',2,'.1.3.6.1.2.1.31.1.1.1.6.4','',''); +INSERT INTO `poller_item` VALUES (179,0,8,0,'172.16.42.142','public',2,'','',161,500,'traffic_out','/usr/share/cacti/site/rra/172_16_42_142_traffic_in_179.rrd',2,'.1.3.6.1.2.1.31.1.1.1.10.4','',''); +INSERT INTO `poller_item` VALUES (180,0,8,0,'172.16.42.142','public',2,'','',161,500,'traffic_in','/usr/share/cacti/site/rra/172_16_42_142_traffic_in_180.rrd',2,'.1.3.6.1.2.1.31.1.1.1.6.5','',''); +INSERT INTO `poller_item` VALUES (180,0,8,0,'172.16.42.142','public',2,'','',161,500,'traffic_out','/usr/share/cacti/site/rra/172_16_42_142_traffic_in_180.rrd',2,'.1.3.6.1.2.1.31.1.1.1.10.5','',''); +INSERT INTO `poller_item` VALUES (181,0,8,0,'172.16.42.142','public',2,'','',161,500,'traffic_in','/usr/share/cacti/site/rra/172_16_42_142_traffic_in_181.rrd',2,'.1.3.6.1.2.1.31.1.1.1.6.6','',''); +INSERT INTO `poller_item` VALUES (181,0,8,0,'172.16.42.142','public',2,'','',161,500,'traffic_out','/usr/share/cacti/site/rra/172_16_42_142_traffic_in_181.rrd',2,'.1.3.6.1.2.1.31.1.1.1.10.6','',''); +INSERT INTO `poller_item` VALUES (182,0,8,0,'172.16.42.142','public',2,'','',161,500,'traffic_in','/usr/share/cacti/site/rra/172_16_42_142_traffic_in_182.rrd',2,'.1.3.6.1.2.1.31.1.1.1.6.7','',''); +INSERT INTO `poller_item` VALUES (182,0,8,0,'172.16.42.142','public',2,'','',161,500,'traffic_out','/usr/share/cacti/site/rra/172_16_42_142_traffic_in_182.rrd',2,'.1.3.6.1.2.1.31.1.1.1.10.7','',''); +INSERT INTO `poller_item` VALUES (183,0,8,0,'172.16.42.142','public',2,'','',161,500,'traffic_in','/usr/share/cacti/site/rra/172_16_42_142_traffic_in_183.rrd',2,'.1.3.6.1.2.1.31.1.1.1.6.8','',''); +INSERT INTO `poller_item` VALUES (183,0,8,0,'172.16.42.142','public',2,'','',161,500,'traffic_out','/usr/share/cacti/site/rra/172_16_42_142_traffic_in_183.rrd',2,'.1.3.6.1.2.1.31.1.1.1.10.8','',''); +INSERT INTO `poller_item` VALUES (184,0,8,0,'172.16.42.142','public',2,'','',161,500,'traffic_in','/usr/share/cacti/site/rra/172_16_42_142_traffic_in_184.rrd',2,'.1.3.6.1.2.1.31.1.1.1.6.9','',''); +INSERT INTO `poller_item` VALUES (184,0,8,0,'172.16.42.142','public',2,'','',161,500,'traffic_out','/usr/share/cacti/site/rra/172_16_42_142_traffic_in_184.rrd',2,'.1.3.6.1.2.1.31.1.1.1.10.9','',''); +INSERT INTO `poller_item` VALUES (185,0,8,0,'172.16.42.142','public',2,'','',161,500,'traffic_in','/usr/share/cacti/site/rra/172_16_42_142_traffic_in_185.rrd',2,'.1.3.6.1.2.1.31.1.1.1.6.10','',''); +INSERT INTO `poller_item` VALUES (185,0,8,0,'172.16.42.142','public',2,'','',161,500,'traffic_out','/usr/share/cacti/site/rra/172_16_42_142_traffic_in_185.rrd',2,'.1.3.6.1.2.1.31.1.1.1.10.10','',''); +INSERT INTO `poller_item` VALUES (186,0,8,0,'172.16.42.142','public',2,'','',161,500,'traffic_in','/usr/share/cacti/site/rra/172_16_42_142_traffic_in_186.rrd',2,'.1.3.6.1.2.1.31.1.1.1.6.11','',''); +INSERT INTO `poller_item` VALUES (186,0,8,0,'172.16.42.142','public',2,'','',161,500,'traffic_out','/usr/share/cacti/site/rra/172_16_42_142_traffic_in_186.rrd',2,'.1.3.6.1.2.1.31.1.1.1.10.11','',''); +INSERT INTO `poller_item` VALUES (187,0,8,0,'172.16.42.142','public',2,'','',161,500,'traffic_in','/usr/share/cacti/site/rra/172_16_42_142_traffic_in_187.rrd',2,'.1.3.6.1.2.1.31.1.1.1.6.12','',''); +INSERT INTO `poller_item` VALUES (187,0,8,0,'172.16.42.142','public',2,'','',161,500,'traffic_out','/usr/share/cacti/site/rra/172_16_42_142_traffic_in_187.rrd',2,'.1.3.6.1.2.1.31.1.1.1.10.12','',''); +INSERT INTO `poller_item` VALUES (188,0,8,0,'172.16.42.142','public',2,'','',161,500,'traffic_in','/usr/share/cacti/site/rra/172_16_42_142_traffic_in_188.rrd',2,'.1.3.6.1.2.1.31.1.1.1.6.13','',''); +INSERT INTO `poller_item` VALUES (188,0,8,0,'172.16.42.142','public',2,'','',161,500,'traffic_out','/usr/share/cacti/site/rra/172_16_42_142_traffic_in_188.rrd',2,'.1.3.6.1.2.1.31.1.1.1.10.13','',''); +INSERT INTO `poller_item` VALUES (189,0,8,0,'172.16.42.142','public',2,'','',161,500,'traffic_in','/usr/share/cacti/site/rra/172_16_42_142_traffic_in_189.rrd',2,'.1.3.6.1.2.1.31.1.1.1.6.14','',''); +INSERT INTO `poller_item` VALUES (189,0,8,0,'172.16.42.142','public',2,'','',161,500,'traffic_out','/usr/share/cacti/site/rra/172_16_42_142_traffic_in_189.rrd',2,'.1.3.6.1.2.1.31.1.1.1.10.14','',''); +INSERT INTO `poller_item` VALUES (190,0,8,0,'172.16.42.142','public',2,'','',161,500,'traffic_in','/usr/share/cacti/site/rra/172_16_42_142_traffic_in_190.rrd',2,'.1.3.6.1.2.1.31.1.1.1.6.15','',''); +INSERT INTO `poller_item` VALUES (190,0,8,0,'172.16.42.142','public',2,'','',161,500,'traffic_out','/usr/share/cacti/site/rra/172_16_42_142_traffic_in_190.rrd',2,'.1.3.6.1.2.1.31.1.1.1.10.15','',''); +INSERT INTO `poller_item` VALUES (191,0,8,0,'172.16.42.142','public',2,'','',161,500,'traffic_in','/usr/share/cacti/site/rra/172_16_42_142_traffic_in_191.rrd',2,'.1.3.6.1.2.1.31.1.1.1.6.16','',''); +INSERT INTO `poller_item` VALUES (191,0,8,0,'172.16.42.142','public',2,'','',161,500,'traffic_out','/usr/share/cacti/site/rra/172_16_42_142_traffic_in_191.rrd',2,'.1.3.6.1.2.1.31.1.1.1.10.16','',''); +INSERT INTO `poller_item` VALUES (192,0,8,0,'172.16.42.142','public',2,'','',161,500,'traffic_in','/usr/share/cacti/site/rra/172_16_42_142_traffic_in_192.rrd',2,'.1.3.6.1.2.1.31.1.1.1.6.17','',''); +INSERT INTO `poller_item` VALUES (192,0,8,0,'172.16.42.142','public',2,'','',161,500,'traffic_out','/usr/share/cacti/site/rra/172_16_42_142_traffic_in_192.rrd',2,'.1.3.6.1.2.1.31.1.1.1.10.17','',''); +INSERT INTO `poller_item` VALUES (193,0,8,0,'172.16.42.142','public',2,'','',161,500,'traffic_in','/usr/share/cacti/site/rra/172_16_42_142_traffic_in_193.rrd',2,'.1.3.6.1.2.1.31.1.1.1.6.18','',''); +INSERT INTO `poller_item` VALUES (193,0,8,0,'172.16.42.142','public',2,'','',161,500,'traffic_out','/usr/share/cacti/site/rra/172_16_42_142_traffic_in_193.rrd',2,'.1.3.6.1.2.1.31.1.1.1.10.18','',''); +INSERT INTO `poller_item` VALUES (194,0,8,0,'172.16.42.142','public',2,'','',161,500,'traffic_in','/usr/share/cacti/site/rra/172_16_42_142_traffic_in_194.rrd',2,'.1.3.6.1.2.1.31.1.1.1.6.19','',''); +INSERT INTO `poller_item` VALUES (194,0,8,0,'172.16.42.142','public',2,'','',161,500,'traffic_out','/usr/share/cacti/site/rra/172_16_42_142_traffic_in_194.rrd',2,'.1.3.6.1.2.1.31.1.1.1.10.19','',''); +INSERT INTO `poller_item` VALUES (195,0,8,0,'172.16.42.142','public',2,'','',161,500,'traffic_in','/usr/share/cacti/site/rra/172_16_42_142_traffic_in_195.rrd',2,'.1.3.6.1.2.1.31.1.1.1.6.20','',''); +INSERT INTO `poller_item` VALUES (195,0,8,0,'172.16.42.142','public',2,'','',161,500,'traffic_out','/usr/share/cacti/site/rra/172_16_42_142_traffic_in_195.rrd',2,'.1.3.6.1.2.1.31.1.1.1.10.20','',''); +INSERT INTO `poller_item` VALUES (196,0,8,0,'172.16.42.142','public',2,'','',161,500,'traffic_in','/usr/share/cacti/site/rra/172_16_42_142_traffic_in_196.rrd',2,'.1.3.6.1.2.1.31.1.1.1.6.21','',''); +INSERT INTO `poller_item` VALUES (196,0,8,0,'172.16.42.142','public',2,'','',161,500,'traffic_out','/usr/share/cacti/site/rra/172_16_42_142_traffic_in_196.rrd',2,'.1.3.6.1.2.1.31.1.1.1.10.21','',''); +INSERT INTO `poller_item` VALUES (197,0,8,0,'172.16.42.142','public',2,'','',161,500,'traffic_in','/usr/share/cacti/site/rra/172_16_42_142_traffic_in_197.rrd',2,'.1.3.6.1.2.1.31.1.1.1.6.22','',''); +INSERT INTO `poller_item` VALUES (197,0,8,0,'172.16.42.142','public',2,'','',161,500,'traffic_out','/usr/share/cacti/site/rra/172_16_42_142_traffic_in_197.rrd',2,'.1.3.6.1.2.1.31.1.1.1.10.22','',''); +INSERT INTO `poller_item` VALUES (198,0,8,0,'172.16.42.142','public',2,'','',161,500,'traffic_in','/usr/share/cacti/site/rra/172_16_42_142_traffic_in_198.rrd',2,'.1.3.6.1.2.1.31.1.1.1.6.23','',''); +INSERT INTO `poller_item` VALUES (198,0,8,0,'172.16.42.142','public',2,'','',161,500,'traffic_out','/usr/share/cacti/site/rra/172_16_42_142_traffic_in_198.rrd',2,'.1.3.6.1.2.1.31.1.1.1.10.23','',''); +INSERT INTO `poller_item` VALUES (199,0,8,0,'172.16.42.142','public',2,'','',161,500,'traffic_in','/usr/share/cacti/site/rra/172_16_42_142_traffic_in_199.rrd',2,'.1.3.6.1.2.1.31.1.1.1.6.24','',''); +INSERT INTO `poller_item` VALUES (199,0,8,0,'172.16.42.142','public',2,'','',161,500,'traffic_out','/usr/share/cacti/site/rra/172_16_42_142_traffic_in_199.rrd',2,'.1.3.6.1.2.1.31.1.1.1.10.24','',''); +INSERT INTO `poller_item` VALUES (200,0,8,0,'172.16.42.142','public',2,'','',161,500,'traffic_in','/usr/share/cacti/site/rra/172_16_42_142_traffic_in_200.rrd',2,'.1.3.6.1.2.1.31.1.1.1.6.25','',''); +INSERT INTO `poller_item` VALUES (200,0,8,0,'172.16.42.142','public',2,'','',161,500,'traffic_out','/usr/share/cacti/site/rra/172_16_42_142_traffic_in_200.rrd',2,'.1.3.6.1.2.1.31.1.1.1.10.25','',''); +INSERT INTO `poller_item` VALUES (201,0,8,0,'172.16.42.142','public',2,'','',161,500,'traffic_in','/usr/share/cacti/site/rra/172_16_42_142_traffic_in_201.rrd',2,'.1.3.6.1.2.1.31.1.1.1.6.26','',''); +INSERT INTO `poller_item` VALUES (201,0,8,0,'172.16.42.142','public',2,'','',161,500,'traffic_out','/usr/share/cacti/site/rra/172_16_42_142_traffic_in_201.rrd',2,'.1.3.6.1.2.1.31.1.1.1.10.26','',''); +INSERT INTO `poller_item` VALUES (202,0,8,0,'172.16.42.142','public',2,'','',161,500,'traffic_in','/usr/share/cacti/site/rra/172_16_42_142_traffic_in_202.rrd',2,'.1.3.6.1.2.1.31.1.1.1.6.27','',''); +INSERT INTO `poller_item` VALUES (202,0,8,0,'172.16.42.142','public',2,'','',161,500,'traffic_out','/usr/share/cacti/site/rra/172_16_42_142_traffic_in_202.rrd',2,'.1.3.6.1.2.1.31.1.1.1.10.27','',''); +INSERT INTO `poller_item` VALUES (203,0,8,0,'172.16.42.142','public',2,'','',161,500,'traffic_in','/usr/share/cacti/site/rra/172_16_42_142_traffic_in_203.rrd',2,'.1.3.6.1.2.1.31.1.1.1.6.28','',''); +INSERT INTO `poller_item` VALUES (203,0,8,0,'172.16.42.142','public',2,'','',161,500,'traffic_out','/usr/share/cacti/site/rra/172_16_42_142_traffic_in_203.rrd',2,'.1.3.6.1.2.1.31.1.1.1.10.28','',''); +INSERT INTO `poller_item` VALUES (204,0,8,0,'172.16.42.142','public',2,'','',161,500,'traffic_in','/usr/share/cacti/site/rra/172_16_42_142_traffic_in_204.rrd',2,'.1.3.6.1.2.1.31.1.1.1.6.29','',''); +INSERT INTO `poller_item` VALUES (204,0,8,0,'172.16.42.142','public',2,'','',161,500,'traffic_out','/usr/share/cacti/site/rra/172_16_42_142_traffic_in_204.rrd',2,'.1.3.6.1.2.1.31.1.1.1.10.29','',''); +INSERT INTO `poller_item` VALUES (205,0,8,0,'172.16.42.142','public',2,'','',161,500,'traffic_in','/usr/share/cacti/site/rra/172_16_42_142_traffic_in_205.rrd',2,'.1.3.6.1.2.1.31.1.1.1.6.30','',''); +INSERT INTO `poller_item` VALUES (205,0,8,0,'172.16.42.142','public',2,'','',161,500,'traffic_out','/usr/share/cacti/site/rra/172_16_42_142_traffic_in_205.rrd',2,'.1.3.6.1.2.1.31.1.1.1.10.30','',''); +INSERT INTO `poller_item` VALUES (206,0,8,0,'172.16.42.142','public',2,'','',161,500,'traffic_in','/usr/share/cacti/site/rra/172_16_42_142_traffic_in_206.rrd',2,'.1.3.6.1.2.1.31.1.1.1.6.31','',''); +INSERT INTO `poller_item` VALUES (206,0,8,0,'172.16.42.142','public',2,'','',161,500,'traffic_out','/usr/share/cacti/site/rra/172_16_42_142_traffic_in_206.rrd',2,'.1.3.6.1.2.1.31.1.1.1.10.31','',''); +INSERT INTO `poller_item` VALUES (207,0,8,0,'172.16.42.142','public',2,'','',161,500,'traffic_in','/usr/share/cacti/site/rra/172_16_42_142_traffic_in_207.rrd',2,'.1.3.6.1.2.1.31.1.1.1.6.32','',''); +INSERT INTO `poller_item` VALUES (207,0,8,0,'172.16.42.142','public',2,'','',161,500,'traffic_out','/usr/share/cacti/site/rra/172_16_42_142_traffic_in_207.rrd',2,'.1.3.6.1.2.1.31.1.1.1.10.32','',''); +INSERT INTO `poller_item` VALUES (208,0,8,0,'172.16.42.142','public',2,'','',161,500,'traffic_in','/usr/share/cacti/site/rra/172_16_42_142_traffic_in_208.rrd',2,'.1.3.6.1.2.1.31.1.1.1.6.33','',''); +INSERT INTO `poller_item` VALUES (208,0,8,0,'172.16.42.142','public',2,'','',161,500,'traffic_out','/usr/share/cacti/site/rra/172_16_42_142_traffic_in_208.rrd',2,'.1.3.6.1.2.1.31.1.1.1.10.33','',''); +INSERT INTO `poller_item` VALUES (209,0,8,0,'172.16.42.142','public',2,'','',161,500,'traffic_in','/usr/share/cacti/site/rra/172_16_42_142_traffic_in_209.rrd',2,'.1.3.6.1.2.1.31.1.1.1.6.34','',''); +INSERT INTO `poller_item` VALUES (209,0,8,0,'172.16.42.142','public',2,'','',161,500,'traffic_out','/usr/share/cacti/site/rra/172_16_42_142_traffic_in_209.rrd',2,'.1.3.6.1.2.1.31.1.1.1.10.34','',''); +INSERT INTO `poller_item` VALUES (210,0,8,0,'172.16.42.142','public',2,'','',161,500,'traffic_in','/usr/share/cacti/site/rra/172_16_42_142_traffic_in_210.rrd',2,'.1.3.6.1.2.1.31.1.1.1.6.35','',''); +INSERT INTO `poller_item` VALUES (210,0,8,0,'172.16.42.142','public',2,'','',161,500,'traffic_out','/usr/share/cacti/site/rra/172_16_42_142_traffic_in_210.rrd',2,'.1.3.6.1.2.1.31.1.1.1.10.35','',''); +INSERT INTO `poller_item` VALUES (211,0,8,0,'172.16.42.142','public',2,'','',161,500,'traffic_in','/usr/share/cacti/site/rra/172_16_42_142_traffic_in_211.rrd',2,'.1.3.6.1.2.1.31.1.1.1.6.36','',''); +INSERT INTO `poller_item` VALUES (211,0,8,0,'172.16.42.142','public',2,'','',161,500,'traffic_out','/usr/share/cacti/site/rra/172_16_42_142_traffic_in_211.rrd',2,'.1.3.6.1.2.1.31.1.1.1.10.36','',''); +INSERT INTO `poller_item` VALUES (212,0,8,0,'172.16.42.142','public',2,'','',161,500,'traffic_in','/usr/share/cacti/site/rra/172_16_42_142_traffic_in_212.rrd',2,'.1.3.6.1.2.1.31.1.1.1.6.37','',''); +INSERT INTO `poller_item` VALUES (212,0,8,0,'172.16.42.142','public',2,'','',161,500,'traffic_out','/usr/share/cacti/site/rra/172_16_42_142_traffic_in_212.rrd',2,'.1.3.6.1.2.1.31.1.1.1.10.37','',''); +INSERT INTO `poller_item` VALUES (213,0,8,0,'172.16.42.142','public',2,'','',161,500,'traffic_in','/usr/share/cacti/site/rra/172_16_42_142_traffic_in_213.rrd',2,'.1.3.6.1.2.1.31.1.1.1.6.38','',''); +INSERT INTO `poller_item` VALUES (213,0,8,0,'172.16.42.142','public',2,'','',161,500,'traffic_out','/usr/share/cacti/site/rra/172_16_42_142_traffic_in_213.rrd',2,'.1.3.6.1.2.1.31.1.1.1.10.38','',''); +INSERT INTO `poller_item` VALUES (214,0,8,0,'172.16.42.142','public',2,'','',161,500,'traffic_in','/usr/share/cacti/site/rra/172_16_42_142_traffic_in_214.rrd',2,'.1.3.6.1.2.1.31.1.1.1.6.39','',''); +INSERT INTO `poller_item` VALUES (214,0,8,0,'172.16.42.142','public',2,'','',161,500,'traffic_out','/usr/share/cacti/site/rra/172_16_42_142_traffic_in_214.rrd',2,'.1.3.6.1.2.1.31.1.1.1.10.39','',''); +INSERT INTO `poller_item` VALUES (215,0,8,0,'172.16.42.142','public',2,'','',161,500,'traffic_in','/usr/share/cacti/site/rra/172_16_42_142_traffic_in_215.rrd',2,'.1.3.6.1.2.1.31.1.1.1.6.40','',''); +INSERT INTO `poller_item` VALUES (215,0,8,0,'172.16.42.142','public',2,'','',161,500,'traffic_out','/usr/share/cacti/site/rra/172_16_42_142_traffic_in_215.rrd',2,'.1.3.6.1.2.1.31.1.1.1.10.40','',''); +INSERT INTO `poller_item` VALUES (216,0,8,0,'172.16.42.142','public',2,'','',161,500,'traffic_in','/usr/share/cacti/site/rra/172_16_42_142_traffic_in_216.rrd',2,'.1.3.6.1.2.1.31.1.1.1.6.41','',''); +INSERT INTO `poller_item` VALUES (216,0,8,0,'172.16.42.142','public',2,'','',161,500,'traffic_out','/usr/share/cacti/site/rra/172_16_42_142_traffic_in_216.rrd',2,'.1.3.6.1.2.1.31.1.1.1.10.41','',''); +INSERT INTO `poller_item` VALUES (217,0,8,0,'172.16.42.142','public',2,'','',161,500,'traffic_in','/usr/share/cacti/site/rra/172_16_42_142_traffic_in_217.rrd',2,'.1.3.6.1.2.1.31.1.1.1.6.42','',''); +INSERT INTO `poller_item` VALUES (217,0,8,0,'172.16.42.142','public',2,'','',161,500,'traffic_out','/usr/share/cacti/site/rra/172_16_42_142_traffic_in_217.rrd',2,'.1.3.6.1.2.1.31.1.1.1.10.42','',''); +INSERT INTO `poller_item` VALUES (218,0,8,0,'172.16.42.142','public',2,'','',161,500,'traffic_in','/usr/share/cacti/site/rra/172_16_42_142_traffic_in_218.rrd',2,'.1.3.6.1.2.1.31.1.1.1.6.43','',''); +INSERT INTO `poller_item` VALUES (218,0,8,0,'172.16.42.142','public',2,'','',161,500,'traffic_out','/usr/share/cacti/site/rra/172_16_42_142_traffic_in_218.rrd',2,'.1.3.6.1.2.1.31.1.1.1.10.43','',''); +INSERT INTO `poller_item` VALUES (219,0,8,0,'172.16.42.142','public',2,'','',161,500,'traffic_in','/usr/share/cacti/site/rra/172_16_42_142_traffic_in_219.rrd',2,'.1.3.6.1.2.1.31.1.1.1.6.44','',''); +INSERT INTO `poller_item` VALUES (219,0,8,0,'172.16.42.142','public',2,'','',161,500,'traffic_out','/usr/share/cacti/site/rra/172_16_42_142_traffic_in_219.rrd',2,'.1.3.6.1.2.1.31.1.1.1.10.44','',''); +INSERT INTO `poller_item` VALUES (220,0,8,0,'172.16.42.142','public',2,'','',161,500,'traffic_in','/usr/share/cacti/site/rra/172_16_42_142_traffic_in_220.rrd',2,'.1.3.6.1.2.1.31.1.1.1.6.45','',''); +INSERT INTO `poller_item` VALUES (220,0,8,0,'172.16.42.142','public',2,'','',161,500,'traffic_out','/usr/share/cacti/site/rra/172_16_42_142_traffic_in_220.rrd',2,'.1.3.6.1.2.1.31.1.1.1.10.45','',''); +INSERT INTO `poller_item` VALUES (221,0,8,0,'172.16.42.142','public',2,'','',161,500,'traffic_in','/usr/share/cacti/site/rra/172_16_42_142_traffic_in_221.rrd',2,'.1.3.6.1.2.1.31.1.1.1.6.46','',''); +INSERT INTO `poller_item` VALUES (221,0,8,0,'172.16.42.142','public',2,'','',161,500,'traffic_out','/usr/share/cacti/site/rra/172_16_42_142_traffic_in_221.rrd',2,'.1.3.6.1.2.1.31.1.1.1.10.46','',''); +INSERT INTO `poller_item` VALUES (222,0,8,0,'172.16.42.142','public',2,'','',161,500,'traffic_in','/usr/share/cacti/site/rra/172_16_42_142_traffic_in_222.rrd',2,'.1.3.6.1.2.1.31.1.1.1.6.47','',''); +INSERT INTO `poller_item` VALUES (222,0,8,0,'172.16.42.142','public',2,'','',161,500,'traffic_out','/usr/share/cacti/site/rra/172_16_42_142_traffic_in_222.rrd',2,'.1.3.6.1.2.1.31.1.1.1.10.47','',''); +INSERT INTO `poller_item` VALUES (223,0,8,0,'172.16.42.142','public',2,'','',161,500,'traffic_in','/usr/share/cacti/site/rra/172_16_42_142_traffic_in_223.rrd',2,'.1.3.6.1.2.1.31.1.1.1.6.48','',''); +INSERT INTO `poller_item` VALUES (223,0,8,0,'172.16.42.142','public',2,'','',161,500,'traffic_out','/usr/share/cacti/site/rra/172_16_42_142_traffic_in_223.rrd',2,'.1.3.6.1.2.1.31.1.1.1.10.48','',''); +INSERT INTO `poller_item` VALUES (224,0,8,0,'172.16.42.142','public',2,'','',161,500,'traffic_in','/usr/share/cacti/site/rra/172_16_42_142_traffic_in_224.rrd',2,'.1.3.6.1.2.1.31.1.1.1.6.49','',''); +INSERT INTO `poller_item` VALUES (224,0,8,0,'172.16.42.142','public',2,'','',161,500,'traffic_out','/usr/share/cacti/site/rra/172_16_42_142_traffic_in_224.rrd',2,'.1.3.6.1.2.1.31.1.1.1.10.49','',''); +INSERT INTO `poller_item` VALUES (225,0,8,0,'172.16.42.142','public',2,'','',161,500,'traffic_in','/usr/share/cacti/site/rra/172_16_42_142_traffic_in_225.rrd',2,'.1.3.6.1.2.1.31.1.1.1.6.50','',''); +INSERT INTO `poller_item` VALUES (225,0,8,0,'172.16.42.142','public',2,'','',161,500,'traffic_out','/usr/share/cacti/site/rra/172_16_42_142_traffic_in_225.rrd',2,'.1.3.6.1.2.1.31.1.1.1.10.50','',''); +INSERT INTO `poller_item` VALUES (226,0,8,0,'172.16.42.142','public',2,'','',161,500,'traffic_in','/usr/share/cacti/site/rra/172_16_42_142_traffic_in_226.rrd',2,'.1.3.6.1.2.1.31.1.1.1.6.51','',''); +INSERT INTO `poller_item` VALUES (226,0,8,0,'172.16.42.142','public',2,'','',161,500,'traffic_out','/usr/share/cacti/site/rra/172_16_42_142_traffic_in_226.rrd',2,'.1.3.6.1.2.1.31.1.1.1.10.51','',''); +INSERT INTO `poller_item` VALUES (227,0,8,0,'172.16.42.142','public',2,'','',161,500,'traffic_in','/usr/share/cacti/site/rra/172_16_42_142_traffic_in_227.rrd',2,'.1.3.6.1.2.1.31.1.1.1.6.52','',''); +INSERT INTO `poller_item` VALUES (227,0,8,0,'172.16.42.142','public',2,'','',161,500,'traffic_out','/usr/share/cacti/site/rra/172_16_42_142_traffic_in_227.rrd',2,'.1.3.6.1.2.1.31.1.1.1.10.52','',''); +INSERT INTO `poller_item` VALUES (228,0,8,0,'172.16.42.142','public',2,'','',161,500,'traffic_in','/usr/share/cacti/site/rra/172_16_42_142_traffic_in_228.rrd',2,'.1.3.6.1.2.1.31.1.1.1.6.53','',''); +INSERT INTO `poller_item` VALUES (228,0,8,0,'172.16.42.142','public',2,'','',161,500,'traffic_out','/usr/share/cacti/site/rra/172_16_42_142_traffic_in_228.rrd',2,'.1.3.6.1.2.1.31.1.1.1.10.53','',''); +INSERT INTO `poller_item` VALUES (229,0,8,0,'172.16.42.142','public',2,'','',161,500,'traffic_in','/usr/share/cacti/site/rra/172_16_42_142_traffic_in_229.rrd',2,'.1.3.6.1.2.1.31.1.1.1.6.54','',''); +INSERT INTO `poller_item` VALUES (229,0,8,0,'172.16.42.142','public',2,'','',161,500,'traffic_out','/usr/share/cacti/site/rra/172_16_42_142_traffic_in_229.rrd',2,'.1.3.6.1.2.1.31.1.1.1.10.54','',''); +INSERT INTO `poller_item` VALUES (230,0,8,0,'172.16.42.142','public',2,'','',161,500,'traffic_in','/usr/share/cacti/site/rra/172_16_42_142_traffic_in_230.rrd',2,'.1.3.6.1.2.1.31.1.1.1.6.55','',''); +INSERT INTO `poller_item` VALUES (230,0,8,0,'172.16.42.142','public',2,'','',161,500,'traffic_out','/usr/share/cacti/site/rra/172_16_42_142_traffic_in_230.rrd',2,'.1.3.6.1.2.1.31.1.1.1.10.55','',''); +INSERT INTO `poller_item` VALUES (231,0,8,0,'172.16.42.142','public',2,'','',161,500,'traffic_in','/usr/share/cacti/site/rra/172_16_42_142_traffic_in_231.rrd',2,'.1.3.6.1.2.1.31.1.1.1.6.56','',''); +INSERT INTO `poller_item` VALUES (231,0,8,0,'172.16.42.142','public',2,'','',161,500,'traffic_out','/usr/share/cacti/site/rra/172_16_42_142_traffic_in_231.rrd',2,'.1.3.6.1.2.1.31.1.1.1.10.56','',''); +INSERT INTO `poller_item` VALUES (232,0,8,0,'172.16.42.142','public',2,'','',161,500,'traffic_in','/usr/share/cacti/site/rra/172_16_42_142_traffic_in_232.rrd',2,'.1.3.6.1.2.1.31.1.1.1.6.57','',''); +INSERT INTO `poller_item` VALUES (232,0,8,0,'172.16.42.142','public',2,'','',161,500,'traffic_out','/usr/share/cacti/site/rra/172_16_42_142_traffic_in_232.rrd',2,'.1.3.6.1.2.1.31.1.1.1.10.57','',''); +INSERT INTO `poller_item` VALUES (233,0,8,0,'172.16.42.142','public',2,'','',161,500,'traffic_in','/usr/share/cacti/site/rra/172_16_42_142_traffic_in_233.rrd',2,'.1.3.6.1.2.1.31.1.1.1.6.58','',''); +INSERT INTO `poller_item` VALUES (233,0,8,0,'172.16.42.142','public',2,'','',161,500,'traffic_out','/usr/share/cacti/site/rra/172_16_42_142_traffic_in_233.rrd',2,'.1.3.6.1.2.1.31.1.1.1.10.58','',''); +INSERT INTO `poller_item` VALUES (234,0,8,0,'172.16.42.142','public',2,'','',161,500,'traffic_in','/usr/share/cacti/site/rra/172_16_42_142_traffic_in_234.rrd',2,'.1.3.6.1.2.1.31.1.1.1.6.59','',''); +INSERT INTO `poller_item` VALUES (234,0,8,0,'172.16.42.142','public',2,'','',161,500,'traffic_out','/usr/share/cacti/site/rra/172_16_42_142_traffic_in_234.rrd',2,'.1.3.6.1.2.1.31.1.1.1.10.59','',''); +INSERT INTO `poller_item` VALUES (235,0,8,0,'172.16.42.142','public',2,'','',161,500,'traffic_in','/usr/share/cacti/site/rra/172_16_42_142_traffic_in_235.rrd',2,'.1.3.6.1.2.1.31.1.1.1.6.60','',''); +INSERT INTO `poller_item` VALUES (235,0,8,0,'172.16.42.142','public',2,'','',161,500,'traffic_out','/usr/share/cacti/site/rra/172_16_42_142_traffic_in_235.rrd',2,'.1.3.6.1.2.1.31.1.1.1.10.60','',''); +INSERT INTO `poller_item` VALUES (236,0,8,0,'172.16.42.142','public',2,'','',161,500,'traffic_in','/usr/share/cacti/site/rra/172_16_42_142_traffic_in_236.rrd',2,'.1.3.6.1.2.1.31.1.1.1.6.61','',''); +INSERT INTO `poller_item` VALUES (236,0,8,0,'172.16.42.142','public',2,'','',161,500,'traffic_out','/usr/share/cacti/site/rra/172_16_42_142_traffic_in_236.rrd',2,'.1.3.6.1.2.1.31.1.1.1.10.61','',''); +INSERT INTO `poller_item` VALUES (237,0,8,0,'172.16.42.142','public',2,'','',161,500,'traffic_in','/usr/share/cacti/site/rra/172_16_42_142_traffic_in_237.rrd',2,'.1.3.6.1.2.1.31.1.1.1.6.62','',''); +INSERT INTO `poller_item` VALUES (237,0,8,0,'172.16.42.142','public',2,'','',161,500,'traffic_out','/usr/share/cacti/site/rra/172_16_42_142_traffic_in_237.rrd',2,'.1.3.6.1.2.1.31.1.1.1.10.62','',''); +INSERT INTO `poller_item` VALUES (238,0,8,0,'172.16.42.142','public',2,'','',161,500,'traffic_in','/usr/share/cacti/site/rra/172_16_42_142_traffic_in_238.rrd',2,'.1.3.6.1.2.1.31.1.1.1.6.63','',''); +INSERT INTO `poller_item` VALUES (238,0,8,0,'172.16.42.142','public',2,'','',161,500,'traffic_out','/usr/share/cacti/site/rra/172_16_42_142_traffic_in_238.rrd',2,'.1.3.6.1.2.1.31.1.1.1.10.63','',''); +INSERT INTO `poller_item` VALUES (239,0,8,0,'172.16.42.142','public',2,'','',161,500,'traffic_in','/usr/share/cacti/site/rra/172_16_42_142_traffic_in_239.rrd',2,'.1.3.6.1.2.1.31.1.1.1.6.64','',''); +INSERT INTO `poller_item` VALUES (239,0,8,0,'172.16.42.142','public',2,'','',161,500,'traffic_out','/usr/share/cacti/site/rra/172_16_42_142_traffic_in_239.rrd',2,'.1.3.6.1.2.1.31.1.1.1.10.64','',''); +INSERT INTO `poller_item` VALUES (240,0,8,0,'172.16.42.142','public',2,'','',161,500,'traffic_in','/usr/share/cacti/site/rra/172_16_42_142_traffic_in_240.rrd',2,'.1.3.6.1.2.1.31.1.1.1.6.67','',''); +INSERT INTO `poller_item` VALUES (240,0,8,0,'172.16.42.142','public',2,'','',161,500,'traffic_out','/usr/share/cacti/site/rra/172_16_42_142_traffic_in_240.rrd',2,'.1.3.6.1.2.1.31.1.1.1.10.67','',''); +INSERT INTO `poller_item` VALUES (258,0,11,0,'172.16.42.105','public',2,'','',161,500,'traffic_in','/usr/share/cacti/site/rra/172_16_42_105_traffic_in_258.rrd',2,'.1.3.6.1.2.1.2.2.1.10.1','',''); +INSERT INTO `poller_item` VALUES (258,0,11,0,'172.16.42.105','public',2,'','',161,500,'traffic_out','/usr/share/cacti/site/rra/172_16_42_105_traffic_in_258.rrd',2,'.1.3.6.1.2.1.2.2.1.16.1','',''); +INSERT INTO `poller_item` VALUES (259,0,11,0,'172.16.42.105','public',2,'','',161,500,'traffic_in','/usr/share/cacti/site/rra/172_16_42_105_traffic_in_259.rrd',2,'.1.3.6.1.2.1.2.2.1.10.2','',''); +INSERT INTO `poller_item` VALUES (259,0,11,0,'172.16.42.105','public',2,'','',161,500,'traffic_out','/usr/share/cacti/site/rra/172_16_42_105_traffic_in_259.rrd',2,'.1.3.6.1.2.1.2.2.1.16.2','',''); +INSERT INTO `poller_item` VALUES (260,0,11,0,'172.16.42.105','public',2,'','',161,500,'traffic_in','/usr/share/cacti/site/rra/172_16_42_105_traffic_in_260.rrd',2,'.1.3.6.1.2.1.2.2.1.10.3','',''); +INSERT INTO `poller_item` VALUES (260,0,11,0,'172.16.42.105','public',2,'','',161,500,'traffic_out','/usr/share/cacti/site/rra/172_16_42_105_traffic_in_260.rrd',2,'.1.3.6.1.2.1.2.2.1.16.3','',''); +INSERT INTO `poller_item` VALUES (261,0,11,0,'172.16.42.105','public',2,'','',161,500,'traffic_in','/usr/share/cacti/site/rra/172_16_42_105_traffic_in_261.rrd',2,'.1.3.6.1.2.1.2.2.1.10.4','',''); +INSERT INTO `poller_item` VALUES (261,0,11,0,'172.16.42.105','public',2,'','',161,500,'traffic_out','/usr/share/cacti/site/rra/172_16_42_105_traffic_in_261.rrd',2,'.1.3.6.1.2.1.2.2.1.16.4','',''); +INSERT INTO `poller_item` VALUES (262,0,11,0,'172.16.42.105','public',2,'','',161,500,'traffic_in','/usr/share/cacti/site/rra/172_16_42_105_traffic_in_262.rrd',2,'.1.3.6.1.2.1.2.2.1.10.5','',''); +INSERT INTO `poller_item` VALUES (262,0,11,0,'172.16.42.105','public',2,'','',161,500,'traffic_out','/usr/share/cacti/site/rra/172_16_42_105_traffic_in_262.rrd',2,'.1.3.6.1.2.1.2.2.1.16.5','',''); +INSERT INTO `poller_item` VALUES (263,0,11,0,'172.16.42.105','public',2,'','',161,500,'traffic_in','/usr/share/cacti/site/rra/172_16_42_105_traffic_in_263.rrd',2,'.1.3.6.1.2.1.2.2.1.10.6','',''); +INSERT INTO `poller_item` VALUES (263,0,11,0,'172.16.42.105','public',2,'','',161,500,'traffic_out','/usr/share/cacti/site/rra/172_16_42_105_traffic_in_263.rrd',2,'.1.3.6.1.2.1.2.2.1.16.6','',''); +INSERT INTO `poller_item` VALUES (264,0,11,0,'172.16.42.105','public',2,'','',161,500,'traffic_in','/usr/share/cacti/site/rra/172_16_42_105_traffic_in_264.rrd',2,'.1.3.6.1.2.1.2.2.1.10.7','',''); +INSERT INTO `poller_item` VALUES (264,0,11,0,'172.16.42.105','public',2,'','',161,500,'traffic_out','/usr/share/cacti/site/rra/172_16_42_105_traffic_in_264.rrd',2,'.1.3.6.1.2.1.2.2.1.16.7','',''); +INSERT INTO `poller_item` VALUES (265,0,11,0,'172.16.42.105','public',2,'','',161,500,'traffic_in','/usr/share/cacti/site/rra/172_16_42_105_traffic_in_265.rrd',2,'.1.3.6.1.2.1.2.2.1.10.8','',''); +INSERT INTO `poller_item` VALUES (265,0,11,0,'172.16.42.105','public',2,'','',161,500,'traffic_out','/usr/share/cacti/site/rra/172_16_42_105_traffic_in_265.rrd',2,'.1.3.6.1.2.1.2.2.1.16.8','',''); +INSERT INTO `poller_item` VALUES (266,0,11,0,'172.16.42.105','public',2,'','',161,500,'traffic_in','/usr/share/cacti/site/rra/172_16_42_105_traffic_in_266.rrd',2,'.1.3.6.1.2.1.2.2.1.10.9','',''); +INSERT INTO `poller_item` VALUES (266,0,11,0,'172.16.42.105','public',2,'','',161,500,'traffic_out','/usr/share/cacti/site/rra/172_16_42_105_traffic_in_266.rrd',2,'.1.3.6.1.2.1.2.2.1.16.9','',''); +INSERT INTO `poller_item` VALUES (267,0,11,0,'172.16.42.105','public',2,'','',161,500,'traffic_in','/usr/share/cacti/site/rra/172_16_42_105_traffic_in_267.rrd',2,'.1.3.6.1.2.1.2.2.1.10.10','',''); +INSERT INTO `poller_item` VALUES (267,0,11,0,'172.16.42.105','public',2,'','',161,500,'traffic_out','/usr/share/cacti/site/rra/172_16_42_105_traffic_in_267.rrd',2,'.1.3.6.1.2.1.2.2.1.16.10','',''); +INSERT INTO `poller_item` VALUES (268,0,11,0,'172.16.42.105','public',2,'','',161,500,'traffic_in','/usr/share/cacti/site/rra/172_16_42_105_traffic_in_268.rrd',2,'.1.3.6.1.2.1.2.2.1.10.11','',''); +INSERT INTO `poller_item` VALUES (268,0,11,0,'172.16.42.105','public',2,'','',161,500,'traffic_out','/usr/share/cacti/site/rra/172_16_42_105_traffic_in_268.rrd',2,'.1.3.6.1.2.1.2.2.1.16.11','',''); +INSERT INTO `poller_item` VALUES (269,0,11,0,'172.16.42.105','public',2,'','',161,500,'traffic_in','/usr/share/cacti/site/rra/172_16_42_105_traffic_in_269.rrd',2,'.1.3.6.1.2.1.2.2.1.10.12','',''); +INSERT INTO `poller_item` VALUES (269,0,11,0,'172.16.42.105','public',2,'','',161,500,'traffic_out','/usr/share/cacti/site/rra/172_16_42_105_traffic_in_269.rrd',2,'.1.3.6.1.2.1.2.2.1.16.12','',''); +INSERT INTO `poller_item` VALUES (270,0,11,0,'172.16.42.105','public',2,'','',161,500,'traffic_in','/usr/share/cacti/site/rra/172_16_42_105_traffic_in_270.rrd',2,'.1.3.6.1.2.1.2.2.1.10.13','',''); +INSERT INTO `poller_item` VALUES (270,0,11,0,'172.16.42.105','public',2,'','',161,500,'traffic_out','/usr/share/cacti/site/rra/172_16_42_105_traffic_in_270.rrd',2,'.1.3.6.1.2.1.2.2.1.16.13','',''); +INSERT INTO `poller_item` VALUES (271,0,11,0,'172.16.42.105','public',2,'','',161,500,'traffic_in','/usr/share/cacti/site/rra/172_16_42_105_traffic_in_271.rrd',2,'.1.3.6.1.2.1.2.2.1.10.14','',''); +INSERT INTO `poller_item` VALUES (271,0,11,0,'172.16.42.105','public',2,'','',161,500,'traffic_out','/usr/share/cacti/site/rra/172_16_42_105_traffic_in_271.rrd',2,'.1.3.6.1.2.1.2.2.1.16.14','',''); +INSERT INTO `poller_item` VALUES (272,0,11,0,'172.16.42.105','public',2,'','',161,500,'traffic_in','/usr/share/cacti/site/rra/172_16_42_105_traffic_in_272.rrd',2,'.1.3.6.1.2.1.2.2.1.10.15','',''); +INSERT INTO `poller_item` VALUES (272,0,11,0,'172.16.42.105','public',2,'','',161,500,'traffic_out','/usr/share/cacti/site/rra/172_16_42_105_traffic_in_272.rrd',2,'.1.3.6.1.2.1.2.2.1.16.15','',''); +INSERT INTO `poller_item` VALUES (273,0,11,0,'172.16.42.105','public',2,'','',161,500,'traffic_in','/usr/share/cacti/site/rra/172_16_42_105_traffic_in_273.rrd',2,'.1.3.6.1.2.1.2.2.1.10.16','',''); +INSERT INTO `poller_item` VALUES (273,0,11,0,'172.16.42.105','public',2,'','',161,500,'traffic_out','/usr/share/cacti/site/rra/172_16_42_105_traffic_in_273.rrd',2,'.1.3.6.1.2.1.2.2.1.16.16','',''); +INSERT INTO `poller_item` VALUES (274,0,11,0,'172.16.42.105','public',2,'','',161,500,'traffic_in','/usr/share/cacti/site/rra/172_16_42_105_traffic_in_274.rrd',2,'.1.3.6.1.2.1.2.2.1.10.17','',''); +INSERT INTO `poller_item` VALUES (274,0,11,0,'172.16.42.105','public',2,'','',161,500,'traffic_out','/usr/share/cacti/site/rra/172_16_42_105_traffic_in_274.rrd',2,'.1.3.6.1.2.1.2.2.1.16.17','',''); +INSERT INTO `poller_item` VALUES (275,0,11,0,'172.16.42.105','public',2,'','',161,500,'traffic_in','/usr/share/cacti/site/rra/172_16_42_105_traffic_in_275.rrd',2,'.1.3.6.1.2.1.2.2.1.10.18','',''); +INSERT INTO `poller_item` VALUES (275,0,11,0,'172.16.42.105','public',2,'','',161,500,'traffic_out','/usr/share/cacti/site/rra/172_16_42_105_traffic_in_275.rrd',2,'.1.3.6.1.2.1.2.2.1.16.18','',''); +INSERT INTO `poller_item` VALUES (276,0,11,0,'172.16.42.105','public',2,'','',161,500,'traffic_in','/usr/share/cacti/site/rra/172_16_42_105_traffic_in_276.rrd',2,'.1.3.6.1.2.1.2.2.1.10.19','',''); +INSERT INTO `poller_item` VALUES (276,0,11,0,'172.16.42.105','public',2,'','',161,500,'traffic_out','/usr/share/cacti/site/rra/172_16_42_105_traffic_in_276.rrd',2,'.1.3.6.1.2.1.2.2.1.16.19','',''); +INSERT INTO `poller_item` VALUES (277,0,11,0,'172.16.42.105','public',2,'','',161,500,'traffic_in','/usr/share/cacti/site/rra/172_16_42_105_traffic_in_277.rrd',2,'.1.3.6.1.2.1.2.2.1.10.20','',''); +INSERT INTO `poller_item` VALUES (277,0,11,0,'172.16.42.105','public',2,'','',161,500,'traffic_out','/usr/share/cacti/site/rra/172_16_42_105_traffic_in_277.rrd',2,'.1.3.6.1.2.1.2.2.1.16.20','',''); +INSERT INTO `poller_item` VALUES (278,0,11,0,'172.16.42.105','public',2,'','',161,500,'traffic_in','/usr/share/cacti/site/rra/172_16_42_105_traffic_in_278.rrd',2,'.1.3.6.1.2.1.2.2.1.10.21','',''); +INSERT INTO `poller_item` VALUES (278,0,11,0,'172.16.42.105','public',2,'','',161,500,'traffic_out','/usr/share/cacti/site/rra/172_16_42_105_traffic_in_278.rrd',2,'.1.3.6.1.2.1.2.2.1.16.21','',''); +INSERT INTO `poller_item` VALUES (279,0,11,0,'172.16.42.105','public',2,'','',161,500,'traffic_in','/usr/share/cacti/site/rra/172_16_42_105_traffic_in_279.rrd',2,'.1.3.6.1.2.1.2.2.1.10.22','',''); +INSERT INTO `poller_item` VALUES (279,0,11,0,'172.16.42.105','public',2,'','',161,500,'traffic_out','/usr/share/cacti/site/rra/172_16_42_105_traffic_in_279.rrd',2,'.1.3.6.1.2.1.2.2.1.16.22','',''); +INSERT INTO `poller_item` VALUES (280,0,11,0,'172.16.42.105','public',2,'','',161,500,'traffic_in','/usr/share/cacti/site/rra/172_16_42_105_traffic_in_280.rrd',2,'.1.3.6.1.2.1.2.2.1.10.23','',''); +INSERT INTO `poller_item` VALUES (280,0,11,0,'172.16.42.105','public',2,'','',161,500,'traffic_out','/usr/share/cacti/site/rra/172_16_42_105_traffic_in_280.rrd',2,'.1.3.6.1.2.1.2.2.1.16.23','',''); +INSERT INTO `poller_item` VALUES (281,0,11,0,'172.16.42.105','public',2,'','',161,500,'traffic_in','/usr/share/cacti/site/rra/172_16_42_105_traffic_in_281.rrd',2,'.1.3.6.1.2.1.2.2.1.10.24','',''); +INSERT INTO `poller_item` VALUES (281,0,11,0,'172.16.42.105','public',2,'','',161,500,'traffic_out','/usr/share/cacti/site/rra/172_16_42_105_traffic_in_281.rrd',2,'.1.3.6.1.2.1.2.2.1.16.24','',''); +INSERT INTO `poller_item` VALUES (282,0,11,0,'172.16.42.105','public',2,'','',161,500,'traffic_in','/usr/share/cacti/site/rra/172_16_42_105_traffic_in_282.rrd',2,'.1.3.6.1.2.1.2.2.1.10.25','',''); +INSERT INTO `poller_item` VALUES (282,0,11,0,'172.16.42.105','public',2,'','',161,500,'traffic_out','/usr/share/cacti/site/rra/172_16_42_105_traffic_in_282.rrd',2,'.1.3.6.1.2.1.2.2.1.16.25','',''); +INSERT INTO `poller_item` VALUES (283,0,12,0,'172.16.42.1','public',2,'','',161,500,'cpu_nice','/usr/share/cacti/site/rra/sinabox_cpu_nice_283.rrd',1,'.1.3.6.1.4.1.2021.11.51.0','',''); +INSERT INTO `poller_item` VALUES (284,0,12,0,'172.16.42.1','public',2,'','',161,500,'cpu_system','/usr/share/cacti/site/rra/sinabox_cpu_system_284.rrd',1,'.1.3.6.1.4.1.2021.11.52.0','',''); +INSERT INTO `poller_item` VALUES (285,0,12,0,'172.16.42.1','public',2,'','',161,500,'cpu_user','/usr/share/cacti/site/rra/sinabox_cpu_user_285.rrd',1,'.1.3.6.1.4.1.2021.11.50.0','',''); +INSERT INTO `poller_item` VALUES (286,0,12,0,'172.16.42.1','public',2,'','',161,500,'load_1min','/usr/share/cacti/site/rra/sinabox_load_1min_286.rrd',1,'.1.3.6.1.4.1.2021.10.1.3.1','',''); +INSERT INTO `poller_item` VALUES (287,0,12,0,'172.16.42.1','public',2,'','',161,500,'load_15min','/usr/share/cacti/site/rra/sinabox_load_15min_287.rrd',1,'.1.3.6.1.4.1.2021.10.1.3.3','',''); +INSERT INTO `poller_item` VALUES (288,0,12,0,'172.16.42.1','public',2,'','',161,500,'load_5min','/usr/share/cacti/site/rra/sinabox_load_5min_288.rrd',1,'.1.3.6.1.4.1.2021.10.1.3.2','',''); +INSERT INTO `poller_item` VALUES (289,0,12,0,'172.16.42.1','public',2,'','',161,500,'mem_buffers','/usr/share/cacti/site/rra/sinabox_mem_buffers_289.rrd',1,'.1.3.6.1.4.1.2021.4.14.0','',''); +INSERT INTO `poller_item` VALUES (290,0,12,0,'172.16.42.1','public',2,'','',161,500,'mem_cache','/usr/share/cacti/site/rra/sinabox_mem_cache_290.rrd',1,'.1.3.6.1.4.1.2021.4.15.0','',''); +INSERT INTO `poller_item` VALUES (291,0,12,0,'172.16.42.1','public',2,'','',161,500,'mem_free','/usr/share/cacti/site/rra/sinabox_mem_free_291.rrd',1,'.1.3.6.1.4.1.2021.4.6.0','',''); +INSERT INTO `poller_item` VALUES (292,0,12,0,'172.16.42.1','public',2,'','',161,500,'unicast_out','/usr/share/cacti/site/rra/sinabox_unicast_in_292.rrd',2,'.1.3.6.1.2.1.2.2.1.17.1','',''); +INSERT INTO `poller_item` VALUES (293,0,12,0,'172.16.42.1','public',2,'','',161,500,'unicast_out','/usr/share/cacti/site/rra/sinabox_unicast_in_293.rrd',2,'.1.3.6.1.2.1.2.2.1.17.2','',''); +INSERT INTO `poller_item` VALUES (294,0,12,0,'172.16.42.1','public',2,'','',161,500,'unicast_out','/usr/share/cacti/site/rra/sinabox_unicast_in_294.rrd',2,'.1.3.6.1.2.1.2.2.1.17.4','',''); +INSERT INTO `poller_item` VALUES (295,0,12,0,'172.16.42.1','public',2,'','',161,500,'unicast_out','/usr/share/cacti/site/rra/sinabox_unicast_in_295.rrd',2,'.1.3.6.1.2.1.2.2.1.17.5','',''); +INSERT INTO `poller_item` VALUES (296,0,12,0,'172.16.42.1','public',2,'','',161,500,'unicast_out','/usr/share/cacti/site/rra/sinabox_unicast_in_296.rrd',2,'.1.3.6.1.2.1.2.2.1.17.6','',''); +INSERT INTO `poller_item` VALUES (297,0,12,0,'172.16.42.1','public',2,'','',161,500,'unicast_out','/usr/share/cacti/site/rra/sinabox_unicast_in_297.rrd',2,'.1.3.6.1.2.1.2.2.1.17.7','',''); +INSERT INTO `poller_item` VALUES (298,0,12,0,'172.16.42.1','public',2,'','',161,500,'unicast_out','/usr/share/cacti/site/rra/sinabox_unicast_in_298.rrd',2,'.1.3.6.1.2.1.2.2.1.17.8','',''); +INSERT INTO `poller_item` VALUES (299,0,12,0,'172.16.42.1','public',2,'','',161,500,'unicast_out','/usr/share/cacti/site/rra/sinabox_unicast_in_299.rrd',2,'.1.3.6.1.2.1.2.2.1.17.10','',''); +INSERT INTO `poller_item` VALUES (300,0,12,0,'172.16.42.1','public',2,'','',161,500,'unicast_out','/usr/share/cacti/site/rra/sinabox_unicast_in_300.rrd',2,'.1.3.6.1.2.1.2.2.1.17.13','',''); +INSERT INTO `poller_item` VALUES (301,0,12,0,'172.16.42.1','public',2,'','',161,500,'unicast_out','/usr/share/cacti/site/rra/sinabox_unicast_in_301.rrd',2,'.1.3.6.1.2.1.2.2.1.17.3','',''); +INSERT INTO `poller_item` VALUES (302,0,12,0,'172.16.42.1','public',2,'','',161,500,'unicast_out','/usr/share/cacti/site/rra/sinabox_unicast_in_302.rrd',2,'.1.3.6.1.2.1.2.2.1.17.15','',''); +INSERT INTO `poller_item` VALUES (303,0,12,0,'172.16.42.1','public',2,'','',161,500,'unicast_out','/usr/share/cacti/site/rra/sinabox_unicast_in_303.rrd',2,'.1.3.6.1.2.1.2.2.1.17.9','',''); +INSERT INTO `poller_item` VALUES (304,0,12,0,'172.16.42.1','public',2,'','',161,500,'unicast_in','/usr/share/cacti/site/rra/sinabox_unicast_in_304.rrd',2,'.1.3.6.1.2.1.2.2.1.11.13','',''); +INSERT INTO `poller_item` VALUES (304,0,12,0,'172.16.42.1','public',2,'','',161,500,'unicast_out','/usr/share/cacti/site/rra/sinabox_unicast_in_304.rrd',2,'.1.3.6.1.2.1.2.2.1.17.13','',''); +INSERT INTO `poller_item` VALUES (302,0,12,0,'172.16.42.1','public',2,'','',161,500,'unicast_in','/usr/share/cacti/site/rra/sinabox_unicast_in_302.rrd',2,'.1.3.6.1.2.1.2.2.1.11.15','',''); +INSERT INTO `poller_item` VALUES (301,0,12,0,'172.16.42.1','public',2,'','',161,500,'unicast_in','/usr/share/cacti/site/rra/sinabox_unicast_in_301.rrd',2,'.1.3.6.1.2.1.2.2.1.11.3','',''); +INSERT INTO `poller_item` VALUES (292,0,12,0,'172.16.42.1','public',2,'','',161,500,'unicast_in','/usr/share/cacti/site/rra/sinabox_unicast_in_292.rrd',2,'.1.3.6.1.2.1.2.2.1.11.1','',''); +INSERT INTO `poller_item` VALUES (293,0,12,0,'172.16.42.1','public',2,'','',161,500,'unicast_in','/usr/share/cacti/site/rra/sinabox_unicast_in_293.rrd',2,'.1.3.6.1.2.1.2.2.1.11.2','',''); +INSERT INTO `poller_item` VALUES (294,0,12,0,'172.16.42.1','public',2,'','',161,500,'unicast_in','/usr/share/cacti/site/rra/sinabox_unicast_in_294.rrd',2,'.1.3.6.1.2.1.2.2.1.11.4','',''); +INSERT INTO `poller_item` VALUES (295,0,12,0,'172.16.42.1','public',2,'','',161,500,'unicast_in','/usr/share/cacti/site/rra/sinabox_unicast_in_295.rrd',2,'.1.3.6.1.2.1.2.2.1.11.5','',''); +INSERT INTO `poller_item` VALUES (296,0,12,0,'172.16.42.1','public',2,'','',161,500,'unicast_in','/usr/share/cacti/site/rra/sinabox_unicast_in_296.rrd',2,'.1.3.6.1.2.1.2.2.1.11.6','',''); +INSERT INTO `poller_item` VALUES (297,0,12,0,'172.16.42.1','public',2,'','',161,500,'unicast_in','/usr/share/cacti/site/rra/sinabox_unicast_in_297.rrd',2,'.1.3.6.1.2.1.2.2.1.11.7','',''); +INSERT INTO `poller_item` VALUES (298,0,12,0,'172.16.42.1','public',2,'','',161,500,'unicast_in','/usr/share/cacti/site/rra/sinabox_unicast_in_298.rrd',2,'.1.3.6.1.2.1.2.2.1.11.8','',''); +INSERT INTO `poller_item` VALUES (299,0,12,0,'172.16.42.1','public',2,'','',161,500,'unicast_in','/usr/share/cacti/site/rra/sinabox_unicast_in_299.rrd',2,'.1.3.6.1.2.1.2.2.1.11.10','',''); +INSERT INTO `poller_item` VALUES (300,0,12,0,'172.16.42.1','public',2,'','',161,500,'unicast_in','/usr/share/cacti/site/rra/sinabox_unicast_in_300.rrd',2,'.1.3.6.1.2.1.2.2.1.11.13','',''); +INSERT INTO `poller_item` VALUES (303,0,12,0,'172.16.42.1','public',2,'','',161,500,'unicast_in','/usr/share/cacti/site/rra/sinabox_unicast_in_303.rrd',2,'.1.3.6.1.2.1.2.2.1.11.9','',''); +INSERT INTO `poller_item` VALUES (306,0,5,0,'172.16.42.1','public',2,'','',161,500,'traffic_out','/usr/share/cacti/site/rra/sinabox_traffic_in_306.rrd',2,'.1.3.6.1.2.1.2.2.1.16.14','',''); +INSERT INTO `poller_item` VALUES (306,0,5,0,'172.16.42.1','public',2,'','',161,500,'traffic_in','/usr/share/cacti/site/rra/sinabox_traffic_in_306.rrd',2,'.1.3.6.1.2.1.2.2.1.10.14','',''); +INSERT INTO `poller_item` VALUES (69,0,4,0,'172.16.42.102','public',2,'','',161,500,'traffic_in','/usr/share/cacti/site/rra/172_16_42_102_traffic_in_69.rrd',2,'.1.3.6.1.2.1.31.1.1.1.6.1','',''); +INSERT INTO `poller_item` VALUES (71,0,4,0,'172.16.42.102','public',2,'','',161,500,'traffic_in','/usr/share/cacti/site/rra/172_16_42_102_traffic_in_71.rrd',2,'.1.3.6.1.2.1.31.1.1.1.6.3','',''); +INSERT INTO `poller_item` VALUES (77,0,4,0,'172.16.42.102','public',2,'','',161,500,'traffic_in','/usr/share/cacti/site/rra/172_16_42_102_traffic_in_77.rrd',2,'.1.3.6.1.2.1.31.1.1.1.6.9','',''); +INSERT INTO `poller_item` VALUES (78,0,4,0,'172.16.42.102','public',2,'','',161,500,'traffic_in','/usr/share/cacti/site/rra/172_16_42_102_traffic_in_78.rrd',2,'.1.3.6.1.2.1.31.1.1.1.6.10','',''); +INSERT INTO `poller_item` VALUES (79,0,4,0,'172.16.42.102','public',2,'','',161,500,'traffic_in','/usr/share/cacti/site/rra/172_16_42_102_traffic_in_79.rrd',2,'.1.3.6.1.2.1.31.1.1.1.6.11','',''); +INSERT INTO `poller_item` VALUES (80,0,4,0,'172.16.42.102','public',2,'','',161,500,'traffic_in','/usr/share/cacti/site/rra/172_16_42_102_traffic_in_80.rrd',2,'.1.3.6.1.2.1.31.1.1.1.6.12','',''); +INSERT INTO `poller_item` VALUES (81,0,4,0,'172.16.42.102','public',2,'','',161,500,'traffic_in','/usr/share/cacti/site/rra/172_16_42_102_traffic_in_81.rrd',2,'.1.3.6.1.2.1.31.1.1.1.6.13','',''); +INSERT INTO `poller_item` VALUES (83,0,4,0,'172.16.42.102','public',2,'','',161,500,'traffic_in','/usr/share/cacti/site/rra/172_16_42_102_traffic_in_83.rrd',2,'.1.3.6.1.2.1.31.1.1.1.6.15','',''); +INSERT INTO `poller_item` VALUES (84,0,4,0,'172.16.42.102','public',2,'','',161,500,'traffic_in','/usr/share/cacti/site/rra/172_16_42_102_traffic_in_84.rrd',2,'.1.3.6.1.2.1.31.1.1.1.6.16','',''); +INSERT INTO `poller_item` VALUES (85,0,4,0,'172.16.42.102','public',2,'','',161,500,'traffic_in','/usr/share/cacti/site/rra/172_16_42_102_traffic_in_85.rrd',2,'.1.3.6.1.2.1.31.1.1.1.6.17','',''); +INSERT INTO `poller_item` VALUES (86,0,4,0,'172.16.42.102','public',2,'','',161,500,'traffic_in','/usr/share/cacti/site/rra/172_16_42_102_traffic_in_86.rrd',2,'.1.3.6.1.2.1.31.1.1.1.6.18','',''); +INSERT INTO `poller_item` VALUES (88,0,4,0,'172.16.42.102','public',2,'','',161,500,'traffic_in','/usr/share/cacti/site/rra/172_16_42_102_traffic_in_88.rrd',2,'.1.3.6.1.2.1.31.1.1.1.6.20','',''); +INSERT INTO `poller_item` VALUES (89,0,4,0,'172.16.42.102','public',2,'','',161,500,'traffic_in','/usr/share/cacti/site/rra/172_16_42_102_traffic_in_89.rrd',2,'.1.3.6.1.2.1.31.1.1.1.6.21','',''); +INSERT INTO `poller_item` VALUES (90,0,4,0,'172.16.42.102','public',2,'','',161,500,'traffic_in','/usr/share/cacti/site/rra/172_16_42_102_traffic_in_90.rrd',2,'.1.3.6.1.2.1.31.1.1.1.6.22','',''); +INSERT INTO `poller_item` VALUES (92,0,4,0,'172.16.42.102','public',2,'','',161,500,'traffic_in','/usr/share/cacti/site/rra/172_16_42_102_traffic_in_92.rrd',2,'.1.3.6.1.2.1.31.1.1.1.6.24','',''); +INSERT INTO `poller_item` VALUES (93,0,4,0,'172.16.42.102','public',2,'','',161,500,'traffic_in','/usr/share/cacti/site/rra/172_16_42_102_traffic_in_93.rrd',2,'.1.3.6.1.2.1.31.1.1.1.6.25','',''); +INSERT INTO `poller_item` VALUES (94,0,4,0,'172.16.42.102','public',2,'','',161,500,'traffic_in','/usr/share/cacti/site/rra/172_16_42_102_traffic_in_94.rrd',2,'.1.3.6.1.2.1.31.1.1.1.6.26','',''); +INSERT INTO `poller_item` VALUES (95,0,4,0,'172.16.42.102','public',2,'','',161,500,'traffic_in','/usr/share/cacti/site/rra/172_16_42_102_traffic_in_95.rrd',2,'.1.3.6.1.2.1.31.1.1.1.6.27','',''); +INSERT INTO `poller_item` VALUES (97,0,4,0,'172.16.42.102','public',2,'','',161,500,'traffic_in','/usr/share/cacti/site/rra/172_16_42_102_traffic_in_97.rrd',2,'.1.3.6.1.2.1.31.1.1.1.6.29','',''); +INSERT INTO `poller_item` VALUES (100,0,6,0,'172.16.42.103','public',2,'','',161,500,'traffic_in','/usr/share/cacti/site/rra/172_16_42_103_traffic_in_100.rrd',2,'.1.3.6.1.2.1.31.1.1.1.6.2','',''); +INSERT INTO `poller_item` VALUES (111,0,6,0,'172.16.42.103','public',2,'','',161,500,'traffic_in','/usr/share/cacti/site/rra/172_16_42_103_traffic_in_111.rrd',2,'.1.3.6.1.2.1.31.1.1.1.6.13','',''); +INSERT INTO `poller_item` VALUES (116,0,6,0,'172.16.42.103','public',2,'','',161,500,'traffic_in','/usr/share/cacti/site/rra/172_16_42_103_traffic_in_116.rrd',2,'.1.3.6.1.2.1.31.1.1.1.6.18','',''); +INSERT INTO `poller_item` VALUES (121,0,6,0,'172.16.42.103','public',2,'','',161,500,'traffic_in','/usr/share/cacti/site/rra/172_16_42_103_traffic_in_121.rrd',2,'.1.3.6.1.2.1.31.1.1.1.6.23','',''); +INSERT INTO `poller_item` VALUES (127,0,6,0,'172.16.42.103','public',2,'','',161,500,'traffic_in','/usr/share/cacti/site/rra/172_16_42_103_traffic_in_127.rrd',2,'.1.3.6.1.2.1.31.1.1.1.6.29','',''); +INSERT INTO `poller_item` VALUES (307,0,13,0,'127.0.0.1','public',1,'','',161,500,'cpu_nice','/usr/share/cacti/site/rra/monitor_easterhegg_de_cpu_nice_307.rrd',1,'.1.3.6.1.4.1.2021.11.51.0','',''); +INSERT INTO `poller_item` VALUES (308,0,13,0,'127.0.0.1','public',1,'','',161,500,'cpu_system','/usr/share/cacti/site/rra/monitor_easterhegg_de_cpu_system_308.rrd',1,'.1.3.6.1.4.1.2021.11.52.0','',''); +INSERT INTO `poller_item` VALUES (309,0,13,0,'127.0.0.1','public',1,'','',161,500,'cpu_user','/usr/share/cacti/site/rra/monitor_easterhegg_de_cpu_user_309.rrd',1,'.1.3.6.1.4.1.2021.11.50.0','',''); +INSERT INTO `poller_item` VALUES (310,0,13,0,'127.0.0.1','public',1,'','',161,500,'mem_buffers','/usr/share/cacti/site/rra/monitor_easterhegg_de_mem_buffers_310.rrd',1,'.1.3.6.1.4.1.2021.4.14.0','',''); +INSERT INTO `poller_item` VALUES (311,0,13,0,'127.0.0.1','public',1,'','',161,500,'mem_cache','/usr/share/cacti/site/rra/monitor_easterhegg_de_mem_cache_311.rrd',1,'.1.3.6.1.4.1.2021.4.15.0','',''); +INSERT INTO `poller_item` VALUES (312,0,13,0,'127.0.0.1','public',1,'','',161,500,'mem_free','/usr/share/cacti/site/rra/monitor_easterhegg_de_mem_free_312.rrd',1,'.1.3.6.1.4.1.2021.4.6.0','',''); +INSERT INTO `poller_item` VALUES (313,0,13,0,'127.0.0.1','public',1,'','',161,500,'traffic_out','/usr/share/cacti/site/rra/monitor_easterhegg_de_traffic_in_313.rrd',2,'.1.3.6.1.2.1.2.2.1.16.2','',''); +INSERT INTO `poller_item` VALUES (313,0,13,0,'127.0.0.1','public',1,'','',161,500,'traffic_in','/usr/share/cacti/site/rra/monitor_easterhegg_de_traffic_in_313.rrd',2,'.1.3.6.1.2.1.2.2.1.10.2','',''); +INSERT INTO `poller_item` VALUES (314,0,13,1,'127.0.0.1','public',1,'','',161,500,'hdd_used','/usr/share/cacti/site/rra/monitor_easterhegg_de_hdd_free_314.rrd',2,'perl /usr/share/cacti/site/scripts/query_unix_partitions.pl get used /dev/hda1','',''); +INSERT INTO `poller_item` VALUES (314,0,13,1,'127.0.0.1','public',1,'','',161,500,'hdd_free','/usr/share/cacti/site/rra/monitor_easterhegg_de_hdd_free_314.rrd',2,'perl /usr/share/cacti/site/scripts/query_unix_partitions.pl get available /dev/hda1','',''); + +-- +-- Table structure for table `poller_output` +-- + +CREATE TABLE `poller_output` ( + `local_data_id` mediumint(8) unsigned NOT NULL default '0', + `rrd_name` varchar(19) NOT NULL default '', + `time` datetime NOT NULL default '0000-00-00 00:00:00', + `output` text NOT NULL, + PRIMARY KEY (`local_data_id`,`rrd_name`,`time`) +) TYPE=MyISAM; + +-- +-- Dumping data for table `poller_output` +-- + + +-- +-- Table structure for table `poller_reindex` +-- + +CREATE TABLE `poller_reindex` ( + `host_id` mediumint(8) unsigned NOT NULL default '0', + `data_query_id` mediumint(8) unsigned NOT NULL default '0', + `action` tinyint(3) unsigned NOT NULL default '0', + `op` char(1) NOT NULL default '', + `assert_value` varchar(100) NOT NULL default '', + `arg1` varchar(100) NOT NULL default '', + PRIMARY KEY (`host_id`,`data_query_id`,`arg1`) +) TYPE=MyISAM; + +-- +-- Dumping data for table `poller_reindex` +-- + +INSERT INTO `poller_reindex` VALUES (2,1,0,'<','26482628','.1.3.6.1.2.1.1.3.0'); +INSERT INTO `poller_reindex` VALUES (3,1,0,'<','9394323','.1.3.6.1.2.1.1.3.0'); +INSERT INTO `poller_reindex` VALUES (4,1,0,'<','926249','.1.3.6.1.2.1.1.3.0'); +INSERT INTO `poller_reindex` VALUES (5,1,0,'<','15712740','.1.3.6.1.2.1.1.3.0'); +INSERT INTO `poller_reindex` VALUES (5,2,0,'<','15712747','.1.3.6.1.2.1.1.3.0'); +INSERT INTO `poller_reindex` VALUES (6,1,0,'<','1428784','.1.3.6.1.2.1.1.3.0'); +INSERT INTO `poller_reindex` VALUES (5,6,0,'<','15712755','.1.3.6.1.2.1.1.3.0'); +INSERT INTO `poller_reindex` VALUES (7,1,0,'<','18720240','.1.3.6.1.2.1.1.3.0'); +INSERT INTO `poller_reindex` VALUES (8,1,0,'<','31000750','.1.3.6.1.2.1.1.3.0'); +INSERT INTO `poller_reindex` VALUES (9,1,0,'<','','.1.3.6.1.2.1.1.3.0'); +INSERT INTO `poller_reindex` VALUES (10,1,0,'<','','.1.3.6.1.2.1.1.3.0'); +INSERT INTO `poller_reindex` VALUES (11,1,0,'<','3183519','.1.3.6.1.2.1.1.3.0'); +INSERT INTO `poller_reindex` VALUES (11,3,0,'<','3183527','.1.3.6.1.2.1.1.3.0'); +INSERT INTO `poller_reindex` VALUES (12,1,0,'<','15715534','.1.3.6.1.2.1.1.3.0'); +INSERT INTO `poller_reindex` VALUES (12,2,0,'<','15715541','.1.3.6.1.2.1.1.3.0'); +INSERT INTO `poller_reindex` VALUES (13,6,0,'<','244222','.1.3.6.1.2.1.1.3.0'); +INSERT INTO `poller_reindex` VALUES (13,1,0,'<','244221','.1.3.6.1.2.1.1.3.0'); +INSERT INTO `poller_reindex` VALUES (13,2,0,'<','244222','.1.3.6.1.2.1.1.3.0'); + +-- +-- Table structure for table `poller_time` +-- + +CREATE TABLE `poller_time` ( + `id` mediumint(8) unsigned NOT NULL auto_increment, + `poller_id` smallint(5) unsigned NOT NULL default '0', + `start_time` datetime NOT NULL default '0000-00-00 00:00:00', + `end_time` datetime NOT NULL default '0000-00-00 00:00:00', + PRIMARY KEY (`id`) +) TYPE=MyISAM; + +-- +-- Dumping data for table `poller_time` +-- + +INSERT INTO `poller_time` VALUES (1,0,'2005-03-29 22:10:40','2005-03-29 22:10:40'); + +-- +-- Table structure for table `rra` +-- + +CREATE TABLE `rra` ( + `id` mediumint(8) unsigned NOT NULL auto_increment, + `hash` varchar(32) NOT NULL default '', + `name` varchar(100) NOT NULL default '', + `x_files_factor` double NOT NULL default '0.1', + `steps` mediumint(8) default '1', + `rows` int(12) NOT NULL default '600', + `timespan` int(12) unsigned NOT NULL default '0', + PRIMARY KEY (`id`), + UNIQUE KEY `ID` (`id`), + KEY `id_2` (`id`) +) TYPE=MyISAM; + +-- +-- Dumping data for table `rra` +-- + +INSERT INTO `rra` VALUES (1,'c21df5178e5c955013591239eb0afd46','Daily (5 Minute Average)',0.5,1,600,86400); +INSERT INTO `rra` VALUES (2,'0d9c0af8b8acdc7807943937b3208e29','Weekly (30 Minute Average)',0.5,6,700,604800); +INSERT INTO `rra` VALUES (4,'e36f3adb9f152adfa5dc50fd2b23337e','Yearly (1 Day Average)',0.5,288,797,33053184); +INSERT INTO `rra` VALUES (3,'6fc2d038fb42950138b0ce3e9874cc60','Monthly (2 Hour Average)',0.5,24,775,2678400); + +-- +-- Table structure for table `rra_cf` +-- + +CREATE TABLE `rra_cf` ( + `rra_id` mediumint(8) unsigned NOT NULL default '0', + `consolidation_function_id` smallint(5) unsigned NOT NULL default '0', + PRIMARY KEY (`rra_id`,`consolidation_function_id`), + KEY `rra_id` (`rra_id`) +) TYPE=MyISAM; + +-- +-- Dumping data for table `rra_cf` +-- + +INSERT INTO `rra_cf` VALUES (1,1); +INSERT INTO `rra_cf` VALUES (1,3); +INSERT INTO `rra_cf` VALUES (2,1); +INSERT INTO `rra_cf` VALUES (2,3); +INSERT INTO `rra_cf` VALUES (3,1); +INSERT INTO `rra_cf` VALUES (3,3); +INSERT INTO `rra_cf` VALUES (4,1); +INSERT INTO `rra_cf` VALUES (4,3); + +-- +-- Table structure for table `settings` +-- + +CREATE TABLE `settings` ( + `name` varchar(50) NOT NULL default '', + `value` varchar(255) NOT NULL default '', + PRIMARY KEY (`name`), + UNIQUE KEY `Name` (`name`), + KEY `name_2` (`name`) +) TYPE=MyISAM; + +-- +-- Dumping data for table `settings` +-- + +INSERT INTO `settings` VALUES ('path_rrdtool','/usr/bin/rrdtool'); +INSERT INTO `settings` VALUES ('path_php_binary','/usr/bin/php'); +INSERT INTO `settings` VALUES ('path_snmpwalk','/usr/bin/snmpwalk'); +INSERT INTO `settings` VALUES ('path_snmpget','/usr/bin/snmpget'); +INSERT INTO `settings` VALUES ('path_cactilog','/usr/share/cacti/site/log/cacti.log'); +INSERT INTO `settings` VALUES ('snmp_version','net-snmp'); +INSERT INTO `settings` VALUES ('path_webroot','/usr/share/cacti/site'); +INSERT INTO `settings` VALUES ('date','2005-03-29 22:10:02'); +INSERT INTO `settings` VALUES ('export_type','local'); +INSERT INTO `settings` VALUES ('path_html_export','/var/www/bunte-bilder'); +INSERT INTO `settings` VALUES ('export_timing','classic'); +INSERT INTO `settings` VALUES ('path_html_export_ctr','1'); +INSERT INTO `settings` VALUES ('export_hourly',''); +INSERT INTO `settings` VALUES ('export_daily',''); +INSERT INTO `settings` VALUES ('export_ftp_sanitize',''); +INSERT INTO `settings` VALUES ('export_ftp_host',''); +INSERT INTO `settings` VALUES ('export_ftp_port',''); +INSERT INTO `settings` VALUES ('export_ftp_passive',''); +INSERT INTO `settings` VALUES ('export_ftp_user',''); +INSERT INTO `settings` VALUES ('export_ftp_password',''); +INSERT INTO `settings` VALUES ('path_html_export_skip','1'); + +-- +-- Table structure for table `settings_graphs` +-- + +CREATE TABLE `settings_graphs` ( + `user_id` smallint(8) unsigned NOT NULL default '0', + `name` varchar(50) NOT NULL default '', + `value` varchar(255) NOT NULL default '', + PRIMARY KEY (`user_id`,`name`), + KEY `user_id` (`user_id`,`name`) +) TYPE=MyISAM; + +-- +-- Dumping data for table `settings_graphs` +-- + +INSERT INTO `settings_graphs` VALUES (1,'default_rra_id','1'); +INSERT INTO `settings_graphs` VALUES (1,'default_view_mode','1'); +INSERT INTO `settings_graphs` VALUES (1,'default_timespan','7'); +INSERT INTO `settings_graphs` VALUES (1,'timespan_sel','on'); +INSERT INTO `settings_graphs` VALUES (1,'default_date_format','4'); +INSERT INTO `settings_graphs` VALUES (1,'default_datechar','1'); +INSERT INTO `settings_graphs` VALUES (1,'page_refresh','300'); +INSERT INTO `settings_graphs` VALUES (1,'default_height','100'); +INSERT INTO `settings_graphs` VALUES (1,'default_width','300'); +INSERT INTO `settings_graphs` VALUES (1,'num_columns','2'); +INSERT INTO `settings_graphs` VALUES (1,'thumbnail_section_preview','on'); +INSERT INTO `settings_graphs` VALUES (1,'thumbnail_section_tree_1','on'); +INSERT INTO `settings_graphs` VALUES (1,'thumbnail_section_tree_2',''); +INSERT INTO `settings_graphs` VALUES (1,'default_tree_id','4'); +INSERT INTO `settings_graphs` VALUES (1,'default_tree_view_mode','2'); +INSERT INTO `settings_graphs` VALUES (1,'expand_hosts',''); +INSERT INTO `settings_graphs` VALUES (1,'preview_graphs_per_page','10'); +INSERT INTO `settings_graphs` VALUES (1,'list_graphs_per_page','10'); + +-- +-- Table structure for table `settings_tree` +-- + +CREATE TABLE `settings_tree` ( + `user_id` mediumint(8) unsigned NOT NULL default '0', + `graph_tree_item_id` mediumint(8) unsigned NOT NULL default '0', + `status` tinyint(1) NOT NULL default '0', + PRIMARY KEY (`user_id`,`graph_tree_item_id`) +) TYPE=MyISAM; + +-- +-- Dumping data for table `settings_tree` +-- + + +-- +-- Table structure for table `snmp_query` +-- + +CREATE TABLE `snmp_query` ( + `id` mediumint(8) unsigned NOT NULL auto_increment, + `hash` varchar(32) NOT NULL default '', + `xml_path` varchar(255) NOT NULL default '', + `name` varchar(100) NOT NULL default '', + `description` varchar(255) default NULL, + `graph_template_id` mediumint(8) unsigned NOT NULL default '0', + `data_input_id` mediumint(8) unsigned NOT NULL default '0', + PRIMARY KEY (`id`), + UNIQUE KEY `id` (`id`), + KEY `id_2` (`id`) +) TYPE=MyISAM; + +-- +-- Dumping data for table `snmp_query` +-- + +INSERT INTO `snmp_query` VALUES (1,'d75e406fdeca4fcef45b8be3a9a63cbc','/resource/snmp_queries/interface.xml','SNMP - Interface Statistics','Queries a host for a list of monitorable interfaces',0,2); +INSERT INTO `snmp_query` VALUES (2,'3c1b27d94ad208a0090f293deadde753','/resource/snmp_queries/net-snmp_disk.xml','ucd/net - Get Monitored Partitions','Retrieves a list of monitored partitions/disks from a net-snmp enabled host.',0,2); +INSERT INTO `snmp_query` VALUES (3,'59aab7b0feddc7860002ed9303085ba5','/resource/snmp_queries/kbridge.xml','Karlnet - Wireless Bridge Statistics','Gets information about the wireless connectivity of each station from a Karlnet bridge.',0,2); +INSERT INTO `snmp_query` VALUES (4,'ad06f46e22e991cb47c95c7233cfaee8','/resource/snmp_queries/netware_disk.xml','Netware - Get Available Volumes','Retrieves a list of volumes from a Netware server.',0,2); +INSERT INTO `snmp_query` VALUES (6,'8ffa36c1864124b38bcda2ae9bd61f46','/resource/script_queries/unix_disk.xml','Unix - Get Mounted Partitions','Queries a list of mounted partitions on a unix-based host with the',0,11); +INSERT INTO `snmp_query` VALUES (7,'30ec734bc0ae81a3d995be82c73f46c1','/resource/snmp_queries/netware_cpu.xml','Netware - Get Processor Information','Gets information about running processors in a Netware server',0,2); +INSERT INTO `snmp_query` VALUES (8,'9343eab1f4d88b0e61ffc9d020f35414','/resource/script_server/host_disk.xml','SNMP - Get Mounted Partitions','Gets a list of partitions using SNMP',0,12); +INSERT INTO `snmp_query` VALUES (9,'0d1ab53fe37487a5d0b9e1d3ee8c1d0d','/resource/script_server/host_cpu.xml','SNMP - Get Processor Information','Gets usage for each processor in the system using the host MIB.',0,12); + +-- +-- Table structure for table `snmp_query_graph` +-- + +CREATE TABLE `snmp_query_graph` ( + `id` mediumint(8) unsigned NOT NULL auto_increment, + `hash` varchar(32) NOT NULL default '', + `snmp_query_id` mediumint(8) unsigned NOT NULL default '0', + `name` varchar(100) NOT NULL default '', + `graph_template_id` mediumint(8) unsigned NOT NULL default '0', + PRIMARY KEY (`id`), + UNIQUE KEY `id` (`id`), + KEY `id_2` (`id`) +) TYPE=MyISAM; + +-- +-- Dumping data for table `snmp_query_graph` +-- + +INSERT INTO `snmp_query_graph` VALUES (2,'a4b829746fb45e35e10474c36c69c0cf',1,'In/Out Errors/Discarded Packets',22); +INSERT INTO `snmp_query_graph` VALUES (3,'01e33224f8b15997d3d09d6b1bf83e18',1,'In/Out Non-Unicast Packets',24); +INSERT INTO `snmp_query_graph` VALUES (4,'1e6edee3115c42d644dbd014f0577066',1,'In/Out Unicast Packets',23); +INSERT INTO `snmp_query_graph` VALUES (15,'a0b3e7b63c2e66f9e1ea24a16ff245fc',6,'Available Disk Space',21); +INSERT INTO `snmp_query_graph` VALUES (6,'da43655bf1f641b07579256227806977',2,'Available/Used Disk Space',3); +INSERT INTO `snmp_query_graph` VALUES (7,'1cc468ef92a5779d37a26349e27ef3ba',3,'Wireless Levels',5); +INSERT INTO `snmp_query_graph` VALUES (8,'bef2dc94bc84bf91827f45424aac8d2a',3,'Wireless Transmissions',6); +INSERT INTO `snmp_query_graph` VALUES (9,'ab93b588c29731ab15db601ca0bc9dec',1,'In/Out Bytes (64-bit Counters)',25); +INSERT INTO `snmp_query_graph` VALUES (10,'5a5ce35edb4b195cbde99fd0161dfb4e',4,'Volume Information (free, freeable space)',19); +INSERT INTO `snmp_query_graph` VALUES (11,'c1c2cfd33eaf5064300e92e26e20bc56',4,'Directory Information (total/available entries)',20); +INSERT INTO `snmp_query_graph` VALUES (13,'ae34f5f385bed8c81a158bf3030f1089',1,'In/Out Bits',2); +INSERT INTO `snmp_query_graph` VALUES (14,'1e16a505ddefb40356221d7a50619d91',1,'In/Out Bits (64-bit Counters)',2); +INSERT INTO `snmp_query_graph` VALUES (16,'d1e0d9b8efd4af98d28ce2aad81a87e7',1,'In/Out Bytes',25); +INSERT INTO `snmp_query_graph` VALUES (17,'f6db4151aa07efa401a0af6c9b871844',7,'Get Processor Utilization',15); +INSERT INTO `snmp_query_graph` VALUES (18,'46c4ee688932cf6370459527eceb8ef3',8,'Available Disk Space',26); +INSERT INTO `snmp_query_graph` VALUES (19,'4a515b61441ea5f27ab7dee6c3cb7818',9,'Get Processor Utilization',27); +INSERT INTO `snmp_query_graph` VALUES (20,'ed7f68175d7bb83db8ead332fc945720',1,'In/Out Bits with 95th Percentile',31); +INSERT INTO `snmp_query_graph` VALUES (21,'f85386cd2fc94634ef167c7f1e5fbcd0',1,'In/Out Bits with Total Bandwidth',32); +INSERT INTO `snmp_query_graph` VALUES (22,'7d309bf200b6e3cdb59a33493c2e58e0',1,'In/Out Bytes with Total Bandwidth',33); + +-- +-- Table structure for table `snmp_query_graph_rrd` +-- + +CREATE TABLE `snmp_query_graph_rrd` ( + `snmp_query_graph_id` mediumint(8) unsigned NOT NULL default '0', + `data_template_id` mediumint(8) unsigned NOT NULL default '0', + `data_template_rrd_id` mediumint(8) unsigned NOT NULL default '0', + `snmp_field_name` varchar(50) NOT NULL default '0', + PRIMARY KEY (`snmp_query_graph_id`,`data_template_id`,`data_template_rrd_id`), + KEY `snmp_query_graph_id` (`snmp_query_graph_id`) +) TYPE=MyISAM; + +-- +-- Dumping data for table `snmp_query_graph_rrd` +-- + +INSERT INTO `snmp_query_graph_rrd` VALUES (2,38,47,'ifInDiscards'); +INSERT INTO `snmp_query_graph_rrd` VALUES (3,40,52,'ifOutNUcastPkts'); +INSERT INTO `snmp_query_graph_rrd` VALUES (3,40,53,'ifInNUcastPkts'); +INSERT INTO `snmp_query_graph_rrd` VALUES (4,39,48,'ifInUcastPkts'); +INSERT INTO `snmp_query_graph_rrd` VALUES (2,38,51,'ifOutErrors'); +INSERT INTO `snmp_query_graph_rrd` VALUES (6,3,3,'dskAvail'); +INSERT INTO `snmp_query_graph_rrd` VALUES (6,3,4,'dskUsed'); +INSERT INTO `snmp_query_graph_rrd` VALUES (7,7,8,'kbWirelessStationExclHellos'); +INSERT INTO `snmp_query_graph_rrd` VALUES (7,8,9,'kbWirelessStationExclHellos'); +INSERT INTO `snmp_query_graph_rrd` VALUES (8,10,11,'kbWirelessStationExclHellos'); +INSERT INTO `snmp_query_graph_rrd` VALUES (8,9,10,'kbWirelessStationExclHellos'); +INSERT INTO `snmp_query_graph_rrd` VALUES (9,41,55,'ifHCOutOctets'); +INSERT INTO `snmp_query_graph_rrd` VALUES (9,41,54,'ifHCInOctets'); +INSERT INTO `snmp_query_graph_rrd` VALUES (10,35,38,'nwVolSize'); +INSERT INTO `snmp_query_graph_rrd` VALUES (10,35,40,'nwVolFreeable'); +INSERT INTO `snmp_query_graph_rrd` VALUES (10,35,39,'nwVolFree'); +INSERT INTO `snmp_query_graph_rrd` VALUES (11,36,42,'nwVolTotalDirEntries'); +INSERT INTO `snmp_query_graph_rrd` VALUES (11,36,43,'nwVolUsedDirEntries'); +INSERT INTO `snmp_query_graph_rrd` VALUES (2,38,50,'ifOutDiscards'); +INSERT INTO `snmp_query_graph_rrd` VALUES (2,38,46,'ifInErrors'); +INSERT INTO `snmp_query_graph_rrd` VALUES (13,41,54,'ifInOctets'); +INSERT INTO `snmp_query_graph_rrd` VALUES (14,41,54,'ifHCInOctets'); +INSERT INTO `snmp_query_graph_rrd` VALUES (14,41,55,'ifHCOutOctets'); +INSERT INTO `snmp_query_graph_rrd` VALUES (13,41,55,'ifOutOctets'); +INSERT INTO `snmp_query_graph_rrd` VALUES (4,39,49,'ifOutUcastPkts'); +INSERT INTO `snmp_query_graph_rrd` VALUES (15,37,44,'dskAvailable'); +INSERT INTO `snmp_query_graph_rrd` VALUES (16,41,54,'ifInOctets'); +INSERT INTO `snmp_query_graph_rrd` VALUES (16,41,55,'ifOutOctets'); +INSERT INTO `snmp_query_graph_rrd` VALUES (15,37,56,'dskUsed'); +INSERT INTO `snmp_query_graph_rrd` VALUES (17,42,76,'nwhrProcessorUtilization'); +INSERT INTO `snmp_query_graph_rrd` VALUES (18,43,78,'hrStorageUsed'); +INSERT INTO `snmp_query_graph_rrd` VALUES (18,43,92,'hrStorageSize'); +INSERT INTO `snmp_query_graph_rrd` VALUES (19,44,79,'hrProcessorLoad'); +INSERT INTO `snmp_query_graph_rrd` VALUES (20,41,55,'ifOutOctets'); +INSERT INTO `snmp_query_graph_rrd` VALUES (20,41,54,'ifInOctets'); +INSERT INTO `snmp_query_graph_rrd` VALUES (21,41,55,'ifOutOctets'); +INSERT INTO `snmp_query_graph_rrd` VALUES (21,41,54,'ifInOctets'); +INSERT INTO `snmp_query_graph_rrd` VALUES (22,41,55,'ifOutOctets'); +INSERT INTO `snmp_query_graph_rrd` VALUES (22,41,54,'ifInOctets'); + +-- +-- Table structure for table `snmp_query_graph_rrd_sv` +-- + +CREATE TABLE `snmp_query_graph_rrd_sv` ( + `id` mediumint(8) unsigned NOT NULL auto_increment, + `hash` varchar(32) NOT NULL default '', + `snmp_query_graph_id` mediumint(8) unsigned NOT NULL default '0', + `data_template_id` mediumint(8) unsigned NOT NULL default '0', + `sequence` mediumint(8) unsigned NOT NULL default '0', + `field_name` varchar(100) NOT NULL default '', + `text` varchar(255) NOT NULL default '', + PRIMARY KEY (`id`), + UNIQUE KEY `id` (`id`), + KEY `id_2` (`id`), + KEY `snmp_query_graph_id` (`snmp_query_graph_id`) +) TYPE=MyISAM; + +-- +-- Dumping data for table `snmp_query_graph_rrd_sv` +-- + +INSERT INTO `snmp_query_graph_rrd_sv` VALUES (10,'5d3a8b2f4a454e5b0a1494e00fe7d424',6,3,1,'name','|host_description| - Partition - |query_dskDevice|'); +INSERT INTO `snmp_query_graph_rrd_sv` VALUES (11,'d0b49af67a83c258ef1eab3780f7b3dc',7,7,1,'name','|host_description| - Wireless Noise Level - |query_kbWirelessStationName|'); +INSERT INTO `snmp_query_graph_rrd_sv` VALUES (12,'bf6b966dc369f3df2ea640a90845e94c',7,8,1,'name','|host_description| - Wireless Signal Level - |query_kbWirelessStationName|'); +INSERT INTO `snmp_query_graph_rrd_sv` VALUES (13,'5c3616603a7ac9d0c1cb9556b377a74f',8,10,1,'name','|host_description| - Wireless Re-Transmissions - |query_kbWirelessStationName|'); +INSERT INTO `snmp_query_graph_rrd_sv` VALUES (14,'080f0022f77044a512b083e3a8304e8b',8,9,1,'name','|host_description| - Wireless Transmissions - |query_kbWirelessStationName|'); +INSERT INTO `snmp_query_graph_rrd_sv` VALUES (88,'e1be83d708ed3c0b8715ccb6517a0365',9,41,2,'name','|host_description| - Traffic - |query_ifName|'); +INSERT INTO `snmp_query_graph_rrd_sv` VALUES (86,'c582d3b37f19e4a703d9bf4908dc6548',9,41,1,'name','|host_description| - Traffic - |query_ifIP| - |query_ifName|'); +INSERT INTO `snmp_query_graph_rrd_sv` VALUES (82,'8d820d091ec1a9683cfa74a462f239ee',14,41,2,'name','|host_description| - Traffic - |query_ifName|'); +INSERT INTO `snmp_query_graph_rrd_sv` VALUES (81,'2e8b27c63d98249096ad5bc320787f43',14,41,1,'name','|host_description| - Traffic - |query_ifIP| - |query_ifName|'); +INSERT INTO `snmp_query_graph_rrd_sv` VALUES (79,'2347e9f53564a54d43f3c00d4b60040d',16,41,4,'name','|host_description| - Traffic - |query_ifDescr|'); +INSERT INTO `snmp_query_graph_rrd_sv` VALUES (30,'8132fa9c446e199732f0102733cb1714',11,36,1,'name','|host_description| - Directories - |query_nwVolPhysicalName|'); +INSERT INTO `snmp_query_graph_rrd_sv` VALUES (29,'8fc9a94a5f6ef902a3de0fa7549e7476',10,35,1,'name','|host_description| - Volumes - |query_nwVolPhysicalName|'); +INSERT INTO `snmp_query_graph_rrd_sv` VALUES (80,'27eb220995925e1a5e0e41b2582a2af6',16,41,1,'rrd_maximum','|query_ifSpeed|'); +INSERT INTO `snmp_query_graph_rrd_sv` VALUES (85,'e85ddc56efa677b70448f9e931360b77',14,41,1,'rrd_maximum','|query_ifSpeed|'); +INSERT INTO `snmp_query_graph_rrd_sv` VALUES (84,'37bb8c5b38bb7e89ec88ea7ccacf44d4',14,41,4,'name','|host_description| - Traffic - |query_ifDescr|'); +INSERT INTO `snmp_query_graph_rrd_sv` VALUES (83,'62a47c18be10f273a5f5a13a76b76f54',14,41,3,'name','|host_description| - Traffic - |query_ifIP|/|query_ifDescr|'); +INSERT INTO `snmp_query_graph_rrd_sv` VALUES (32,'',12,37,1,'name','|host_description| - Partition - |query_dskDevice|'); +INSERT INTO `snmp_query_graph_rrd_sv` VALUES (78,'3a0f707d1c8fd0e061b70241541c7e2e',16,41,3,'name','|host_description| - Traffic - |query_ifIP|/|query_ifDescr|'); +INSERT INTO `snmp_query_graph_rrd_sv` VALUES (77,'8ef8ae2ef548892ab95bb6c9f0b3170e',16,41,2,'name','|host_description| - Traffic - |query_ifName|'); +INSERT INTO `snmp_query_graph_rrd_sv` VALUES (76,'c7ee2110bf81639086d2da03d9d88286',16,41,1,'name','|host_description| - Traffic - |query_ifIP| - |query_ifName|'); +INSERT INTO `snmp_query_graph_rrd_sv` VALUES (75,'7e093c535fa3d810fa76fc3d8c80c94b',13,41,1,'rrd_maximum','|query_ifSpeed|'); +INSERT INTO `snmp_query_graph_rrd_sv` VALUES (74,'084efd82bbddb69fb2ac9bd0b0f16ac6',13,41,4,'name','|host_description| - Traffic - |query_ifDescr|'); +INSERT INTO `snmp_query_graph_rrd_sv` VALUES (72,'14aa2dead86bbad0f992f1514722c95e',13,41,2,'name','|host_description| - Traffic - |query_ifName|'); +INSERT INTO `snmp_query_graph_rrd_sv` VALUES (73,'70390712158c3c5052a7d830fb456489',13,41,3,'name','|host_description| - Traffic - |query_ifIP|/|query_ifDescr|'); +INSERT INTO `snmp_query_graph_rrd_sv` VALUES (49,'6537b3209e0697fbec278e94e7317b52',2,38,1,'name','|host_description| - Errors - |query_ifIP| - |query_ifName|'); +INSERT INTO `snmp_query_graph_rrd_sv` VALUES (50,'6d3f612051016f48c951af8901720a1c',2,38,2,'name','|host_description| - Errors - |query_ifName|'); +INSERT INTO `snmp_query_graph_rrd_sv` VALUES (51,'62bc981690576d0b2bd0041ec2e4aa6f',2,38,3,'name','|host_description| - Errors - |query_ifIP|/|query_ifDescr|'); +INSERT INTO `snmp_query_graph_rrd_sv` VALUES (52,'adb270d55ba521d205eac6a21478804a',2,38,4,'name','|host_description| - Errors - |query_ifDescr|'); +INSERT INTO `snmp_query_graph_rrd_sv` VALUES (54,'77065435f3bbb2ff99bc3b43b81de8fe',3,40,1,'name','|host_description| - Non-Unicast Packets - |query_ifIP| - |query_ifName|'); +INSERT INTO `snmp_query_graph_rrd_sv` VALUES (55,'240d8893092619c97a54265e8d0b86a1',3,40,2,'name','|host_description| - Non-Unicast Packets - |query_ifName|'); +INSERT INTO `snmp_query_graph_rrd_sv` VALUES (56,'4b200ecf445bdeb4c84975b74991df34',3,40,3,'name','|host_description| - Non-Unicast Packets - |query_ifIP|/|query_ifDescr|'); +INSERT INTO `snmp_query_graph_rrd_sv` VALUES (57,'d6da3887646078e4d01fe60a123c2179',3,40,4,'name','|host_description| - Non-Unicast Packets - |query_ifDescr|'); +INSERT INTO `snmp_query_graph_rrd_sv` VALUES (59,'ce7769b97d80ca31d21f83dc18ba93c2',4,39,1,'name','|host_description| - Unicast Packets - |query_ifIP| - |query_ifName|'); +INSERT INTO `snmp_query_graph_rrd_sv` VALUES (60,'1ee1f9717f3f4771f7f823ca5a8b83dd',4,39,2,'name','|host_description| - Unicast Packets - |query_ifName|'); +INSERT INTO `snmp_query_graph_rrd_sv` VALUES (61,'a7dbd54604533b592d4fae6e67587e32',4,39,3,'name','|host_description| - Unicast Packets - |query_ifIP|/|query_ifDescr|'); +INSERT INTO `snmp_query_graph_rrd_sv` VALUES (62,'b148fa7199edcf06cd71c89e5c5d7b63',4,39,4,'name','|host_description| - Unicast Packets - |query_ifDescr|'); +INSERT INTO `snmp_query_graph_rrd_sv` VALUES (70,'87a659326af8c75158e5142874fd74b0',13,41,1,'name','|host_description| - Traffic - |query_ifIP| - |query_ifName|'); +INSERT INTO `snmp_query_graph_rrd_sv` VALUES (69,'cb09784ba05e401a3f1450126ed1e395',15,37,1,'name','|host_description| - Free Space - |query_dskDevice|'); +INSERT INTO `snmp_query_graph_rrd_sv` VALUES (89,'57a9ae1f197498ca8dcde90194f61cbc',9,41,3,'name','|host_description| - Traffic - |query_ifIP|/|query_ifDescr|'); +INSERT INTO `snmp_query_graph_rrd_sv` VALUES (90,'0110e120981c7ff15304e4a85cb42cbe',9,41,4,'name','|host_description| - Traffic - |query_ifDescr|'); +INSERT INTO `snmp_query_graph_rrd_sv` VALUES (91,'ce0b9c92a15759d3ddbd7161d26a98b7',9,41,1,'rrd_maximum','|query_ifSpeed|'); +INSERT INTO `snmp_query_graph_rrd_sv` VALUES (92,'42277993a025f1bfd85374d6b4deeb60',17,42,1,'name','|host_description| - CPU Utilization - CPU|query_nwhrProcessorNum|'); +INSERT INTO `snmp_query_graph_rrd_sv` VALUES (93,'a3f280327b1592a1a948e256380b544f',18,43,1,'name','|host_description| - Used Space - |query_hrStorageDescr|'); +INSERT INTO `snmp_query_graph_rrd_sv` VALUES (94,'b5a724edc36c10891fa2a5c370d55b6f',19,44,1,'name','|host_description| - CPU Utilization - CPU|query_hrProcessorFrwID|'); +INSERT INTO `snmp_query_graph_rrd_sv` VALUES (95,'7e87efd0075caba9908e2e6e569b25b0',20,41,1,'name','|host_description| - Traffic - |query_ifIP| - |query_ifName|'); +INSERT INTO `snmp_query_graph_rrd_sv` VALUES (96,'dd28d96a253ab86846aedb25d1cca712',20,41,2,'name','|host_description| - Traffic - |query_ifName|'); +INSERT INTO `snmp_query_graph_rrd_sv` VALUES (97,'ce425fed4eb3174e4f1cde9713eeafa0',20,41,3,'name','|host_description| - Traffic - |query_ifIP|/|query_ifDescr|'); +INSERT INTO `snmp_query_graph_rrd_sv` VALUES (98,'d0d05156ddb2c65181588db4b64d3907',20,41,4,'name','|host_description| - Traffic - |query_ifDescr|'); +INSERT INTO `snmp_query_graph_rrd_sv` VALUES (99,'3b018f789ff72cc5693ef79e3a794370',20,41,1,'rrd_maximum','|query_ifSpeed|'); +INSERT INTO `snmp_query_graph_rrd_sv` VALUES (100,'b225229dbbb48c1766cf90298674ceed',21,41,1,'name','|host_description| - Traffic - |query_ifIP| - |query_ifName|'); +INSERT INTO `snmp_query_graph_rrd_sv` VALUES (101,'c79248ddbbd195907260887b021a055d',21,41,2,'name','|host_description| - Traffic - |query_ifName|'); +INSERT INTO `snmp_query_graph_rrd_sv` VALUES (102,'12a6750d973b7f14783f205d86220082',21,41,3,'name','|host_description| - Traffic - |query_ifIP|/|query_ifDescr|'); +INSERT INTO `snmp_query_graph_rrd_sv` VALUES (103,'25b151fcfe093812cb5c208e36dd697e',21,41,4,'name','|host_description| - Traffic - |query_ifDescr|'); +INSERT INTO `snmp_query_graph_rrd_sv` VALUES (104,'e9ab404a294e406c20fdd30df766161f',21,41,1,'rrd_maximum','|query_ifSpeed|'); +INSERT INTO `snmp_query_graph_rrd_sv` VALUES (105,'119578a4f01ab47e820b0e894e5e5bb3',22,41,1,'name','|host_description| - Traffic - |query_ifIP| - |query_ifName|'); +INSERT INTO `snmp_query_graph_rrd_sv` VALUES (106,'940e57d24b2623849c77b59ed05931b9',22,41,2,'name','|host_description| - Traffic - |query_ifName|'); +INSERT INTO `snmp_query_graph_rrd_sv` VALUES (107,'0f045eab01bbc4437b30da568ed5cb03',22,41,3,'name','|host_description| - Traffic - |query_ifIP|/|query_ifDescr|'); +INSERT INTO `snmp_query_graph_rrd_sv` VALUES (108,'bd70bf71108d32f0bf91b24c85b87ff0',22,41,4,'name','|host_description| - Traffic - |query_ifDescr|'); +INSERT INTO `snmp_query_graph_rrd_sv` VALUES (109,'fdc4cb976c4b9053bfa2af791a21c5b5',22,41,1,'rrd_maximum','|query_ifSpeed|'); + +-- +-- Table structure for table `snmp_query_graph_sv` +-- + +CREATE TABLE `snmp_query_graph_sv` ( + `id` mediumint(8) unsigned NOT NULL auto_increment, + `hash` varchar(32) NOT NULL default '', + `snmp_query_graph_id` mediumint(8) unsigned NOT NULL default '0', + `sequence` mediumint(8) unsigned NOT NULL default '0', + `field_name` varchar(100) NOT NULL default '', + `text` varchar(255) NOT NULL default '', + PRIMARY KEY (`id`), + KEY `id` (`id`), + KEY `snmp_query_graph_id` (`snmp_query_graph_id`), + KEY `id_2` (`id`) +) TYPE=MyISAM; + +-- +-- Dumping data for table `snmp_query_graph_sv` +-- + +INSERT INTO `snmp_query_graph_sv` VALUES (7,'437918b8dcd66a64625c6cee481fff61',6,1,'title','|host_description| - Disk Space - |query_dskPath|'); +INSERT INTO `snmp_query_graph_sv` VALUES (5,'2ddc61ff4bd9634f33aedce9524b7690',7,1,'title','|host_description| - Wireless Levels (|query_kbWirelessStationName|)'); +INSERT INTO `snmp_query_graph_sv` VALUES (6,'c72e2da7af2cdbd6b44a5eb42c5b4758',8,1,'title','|host_description| - Wireless Transmissions (|query_kbWirelessStationName|)'); +INSERT INTO `snmp_query_graph_sv` VALUES (33,'809c2e80552d56b65ca496c1c2fff398',16,3,'title','|host_description| - Traffic - |query_ifDescr|/|query_ifIndex|'); +INSERT INTO `snmp_query_graph_sv` VALUES (32,'e403f5a733bf5c8401a110609683deb3',16,2,'title','|host_description| - Traffic - |query_ifIP| (|query_ifDescr|)'); +INSERT INTO `snmp_query_graph_sv` VALUES (31,'7fb4a267065f960df81c15f9022cd3a4',16,1,'title','|host_description| - Traffic - |query_ifName|'); +INSERT INTO `snmp_query_graph_sv` VALUES (11,'a412c5dfa484b599ec0f570979fdbc9e',10,1,'title','|host_description| - Volume Information - |query_nwVolPhysicalName|'); +INSERT INTO `snmp_query_graph_sv` VALUES (12,'48f4792dd49fefd7d640ec46b1d7bdb3',11,1,'title','|host_description| - Directory Information - |query_nwVolPhysicalName|'); +INSERT INTO `snmp_query_graph_sv` VALUES (14,'',12,1,'title','|host_description| - Disk Space - |query_dskDevice|'); +INSERT INTO `snmp_query_graph_sv` VALUES (15,'49dca5592ac26ff149a4fbd18d690644',13,1,'title','|host_description| - Traffic - |query_ifName|'); +INSERT INTO `snmp_query_graph_sv` VALUES (16,'bda15298139ad22bdc8a3b0952d4e3ab',13,2,'title','|host_description| - Traffic - |query_ifIP| (|query_ifDescr|)'); +INSERT INTO `snmp_query_graph_sv` VALUES (17,'29e48483d0471fcd996bfb702a5960aa',13,3,'title','|host_description| - Traffic - |query_ifDescr|/|query_ifIndex|'); +INSERT INTO `snmp_query_graph_sv` VALUES (18,'3f42d358965cb94ce4f708b59e04f82b',14,1,'title','|host_description| - Traffic - |query_ifName|'); +INSERT INTO `snmp_query_graph_sv` VALUES (19,'45f44b2f811ea8a8ace1cbed8ef906f1',14,2,'title','|host_description| - Traffic - |query_ifIP| (|query_ifDescr|)'); +INSERT INTO `snmp_query_graph_sv` VALUES (20,'69c14fbcc23aecb9920b3cdad7f89901',14,3,'title','|host_description| - Traffic - |query_ifDescr|/|query_ifIndex|'); +INSERT INTO `snmp_query_graph_sv` VALUES (21,'299d3434851fc0d5c0e105429069709d',2,1,'title','|host_description| - Errors - |query_ifName|'); +INSERT INTO `snmp_query_graph_sv` VALUES (22,'8c8860b17fd67a9a500b4cb8b5e19d4b',2,2,'title','|host_description| - Errors - |query_ifIP| (|query_ifDescr|)'); +INSERT INTO `snmp_query_graph_sv` VALUES (23,'d96360ae5094e5732e7e7496ceceb636',2,3,'title','|host_description| - Errors - |query_ifDescr|/|query_ifIndex|'); +INSERT INTO `snmp_query_graph_sv` VALUES (24,'750a290cadc3dc60bb682a5c5f47df16',3,1,'title','|host_description| - Non-Unicast Packets - |query_ifName|'); +INSERT INTO `snmp_query_graph_sv` VALUES (25,'bde195eecc256c42ca9725f1f22c1dc0',3,2,'title','|host_description| - Non-Unicast Packets - |query_ifIP| (|query_ifDescr|)'); +INSERT INTO `snmp_query_graph_sv` VALUES (26,'d9e97d22689e4ffddaca23b46f2aa306',3,3,'title','|host_description| - Non-Unicast Packets - |query_ifDescr|/|query_ifIndex|'); +INSERT INTO `snmp_query_graph_sv` VALUES (27,'48ceaba62e0c2671a810a7f1adc5f751',4,1,'title','|host_description| - Unicast Packets - |query_ifName|'); +INSERT INTO `snmp_query_graph_sv` VALUES (28,'d6258884bed44abe46d264198adc7c5d',4,2,'title','|host_description| - Unicast Packets - |query_ifIP| (|query_ifDescr|)'); +INSERT INTO `snmp_query_graph_sv` VALUES (29,'6eb58d9835b2b86222306d6ced9961d9',4,3,'title','|host_description| - Unicast Packets - |query_ifDescr|/|query_ifIndex|'); +INSERT INTO `snmp_query_graph_sv` VALUES (30,'f21b23df740bc4a2d691d2d7b1b18dba',15,1,'title','|host_description| - Disk Space - |query_dskDevice|'); +INSERT INTO `snmp_query_graph_sv` VALUES (34,'0a5eb36e98c04ad6be8e1ef66caeed3c',9,1,'title','|host_description| - Traffic - |query_ifName|'); +INSERT INTO `snmp_query_graph_sv` VALUES (35,'4c4386a96e6057b7bd0b78095209ddfa',9,2,'title','|host_description| - Traffic - |query_ifIP| (|query_ifDescr|)'); +INSERT INTO `snmp_query_graph_sv` VALUES (36,'fd3a384768b0388fa64119fe2f0cc113',9,3,'title','|host_description| - Traffic - |query_ifDescr|/|query_ifIndex|'); +INSERT INTO `snmp_query_graph_sv` VALUES (40,'d99f8db04fd07bcd2260d246916e03da',17,1,'title','|host_description| - CPU Utilization - CPU|query_nwhrProcessorNum|'); +INSERT INTO `snmp_query_graph_sv` VALUES (38,'9852782792ede7c0805990e506ac9618',18,1,'title','|host_description| - Used Space - |query_hrStorageDescr|'); +INSERT INTO `snmp_query_graph_sv` VALUES (39,'fa2f07ab54fce72eea684ba893dd9c95',19,1,'title','|host_description| - CPU Utilization - CPU|query_hrProcessorFrwID|'); +INSERT INTO `snmp_query_graph_sv` VALUES (41,'f434ec853c479d424276f367e9806a75',20,1,'title','|host_description| - Traffic - |query_ifName|'); +INSERT INTO `snmp_query_graph_sv` VALUES (42,'9b085245847444c5fb90ebbf4448e265',20,2,'title','|host_description| - Traffic - |query_ifIP| (|query_ifDescr|)'); +INSERT INTO `snmp_query_graph_sv` VALUES (43,'5977863f28629bd8eb93a2a9cbc3e306',20,3,'title','|host_description| - Traffic - |query_ifDescr|/|query_ifIndex|'); +INSERT INTO `snmp_query_graph_sv` VALUES (44,'37b6711af3930c56309cf8956d8bbf14',21,1,'title','|host_description| - Traffic - |query_ifName|'); +INSERT INTO `snmp_query_graph_sv` VALUES (45,'cc435c5884a75421329a9b08207c1c90',21,2,'title','|host_description| - Traffic - |query_ifIP| (|query_ifDescr|)'); +INSERT INTO `snmp_query_graph_sv` VALUES (46,'82edeea1ec249c9818773e3145836492',21,3,'title','|host_description| - Traffic - |query_ifDescr|/|query_ifIndex|'); +INSERT INTO `snmp_query_graph_sv` VALUES (47,'87522150ee8a601b4d6a1f6b9e919c47',22,1,'title','|host_description| - Traffic - |query_ifName|'); +INSERT INTO `snmp_query_graph_sv` VALUES (48,'993a87c04f550f1209d689d584aa8b45',22,2,'title','|host_description| - Traffic - |query_ifIP| (|query_ifDescr|)'); +INSERT INTO `snmp_query_graph_sv` VALUES (49,'183bb486c92a566fddcb0585ede37865',22,3,'title','|host_description| - Traffic - |query_ifDescr|/|query_ifIndex|'); + +-- +-- Table structure for table `user_auth` +-- + +CREATE TABLE `user_auth` ( + `id` mediumint(8) unsigned NOT NULL auto_increment, + `username` varchar(50) NOT NULL default '0', + `password` varchar(50) NOT NULL default '0', + `realm` mediumint(8) NOT NULL default '0', + `full_name` varchar(100) default '0', + `must_change_password` char(2) default NULL, + `show_tree` char(2) default 'on', + `show_list` char(2) default 'on', + `show_preview` char(2) NOT NULL default 'on', + `graph_settings` char(2) default NULL, + `login_opts` tinyint(1) NOT NULL default '1', + `policy_graphs` tinyint(1) unsigned NOT NULL default '1', + `policy_trees` tinyint(1) unsigned NOT NULL default '1', + `policy_hosts` tinyint(1) unsigned NOT NULL default '1', + `policy_graph_templates` tinyint(1) unsigned NOT NULL default '1', + PRIMARY KEY (`id`), + UNIQUE KEY `ID` (`id`), + KEY `id_2` (`id`) +) TYPE=MyISAM; + +-- +-- Dumping data for table `user_auth` +-- + +INSERT INTO `user_auth` VALUES (1,'admin','4a5e687705bc436b698d9c28cffe9e26',0,'Administrator','','on','on','on','on',1,1,1,1,1); +INSERT INTO `user_auth` VALUES (3,'guest','43e9a4ab75570f5b',0,'Guest Account','','on','on','on','',3,1,1,1,1); + +-- +-- Table structure for table `user_auth_perms` +-- + +CREATE TABLE `user_auth_perms` ( + `user_id` mediumint(8) unsigned NOT NULL default '0', + `item_id` mediumint(8) unsigned NOT NULL default '0', + `type` tinyint(2) unsigned NOT NULL default '0', + PRIMARY KEY (`user_id`,`item_id`,`type`), + KEY `user_id` (`user_id`,`type`) +) TYPE=MyISAM; + +-- +-- Dumping data for table `user_auth_perms` +-- + + +-- +-- Table structure for table `user_auth_realm` +-- + +CREATE TABLE `user_auth_realm` ( + `realm_id` mediumint(8) unsigned NOT NULL default '0', + `user_id` mediumint(8) unsigned NOT NULL default '0', + PRIMARY KEY (`realm_id`,`user_id`), + KEY `user_id` (`user_id`) +) TYPE=MyISAM; + +-- +-- Dumping data for table `user_auth_realm` +-- + +INSERT INTO `user_auth_realm` VALUES (1,1); +INSERT INTO `user_auth_realm` VALUES (2,1); +INSERT INTO `user_auth_realm` VALUES (3,1); +INSERT INTO `user_auth_realm` VALUES (4,1); +INSERT INTO `user_auth_realm` VALUES (5,1); +INSERT INTO `user_auth_realm` VALUES (7,1); +INSERT INTO `user_auth_realm` VALUES (7,3); +INSERT INTO `user_auth_realm` VALUES (8,1); +INSERT INTO `user_auth_realm` VALUES (9,1); +INSERT INTO `user_auth_realm` VALUES (10,1); +INSERT INTO `user_auth_realm` VALUES (11,1); +INSERT INTO `user_auth_realm` VALUES (12,1); +INSERT INTO `user_auth_realm` VALUES (13,1); +INSERT INTO `user_auth_realm` VALUES (14,1); +INSERT INTO `user_auth_realm` VALUES (15,1); +INSERT INTO `user_auth_realm` VALUES (16,1); +INSERT INTO `user_auth_realm` VALUES (17,1); + +-- +-- Table structure for table `user_log` +-- + +CREATE TABLE `user_log` ( + `username` varchar(50) NOT NULL default '0', + `user_id` mediumint(8) NOT NULL default '0', + `time` datetime NOT NULL default '0000-00-00 00:00:00', + `result` tinyint(1) NOT NULL default '0', + `ip` varchar(15) NOT NULL default '', + PRIMARY KEY (`username`,`user_id`,`time`) +) TYPE=MyISAM; + +-- +-- Dumping data for table `user_log` +-- + +INSERT INTO `user_log` VALUES ('admin',1,'2004-12-19 15:00:26',1,'192.168.1.101'); +INSERT INTO `user_log` VALUES ('cacti',0,'2005-03-25 21:05:45',0,'172.16.42.130'); +INSERT INTO `user_log` VALUES ('admin',0,'2005-03-25 21:05:50',0,'172.16.42.130'); +INSERT INTO `user_log` VALUES ('root',0,'2005-03-25 21:07:30',0,'172.16.42.130'); +INSERT INTO `user_log` VALUES ('root',0,'2005-03-25 21:07:34',0,'172.16.42.130'); +INSERT INTO `user_log` VALUES ('root',0,'2005-03-25 21:07:41',0,'172.16.42.130'); +INSERT INTO `user_log` VALUES ('root',0,'2005-03-25 21:07:46',0,'172.16.42.130'); +INSERT INTO `user_log` VALUES ('admin',0,'2005-03-25 21:09:30',0,'172.16.42.130'); +INSERT INTO `user_log` VALUES ('admin',0,'2005-03-25 21:09:34',0,'172.16.42.130'); +INSERT INTO `user_log` VALUES ('admin',0,'2005-03-25 21:10:01',0,'172.16.42.130'); +INSERT INTO `user_log` VALUES ('cacti',0,'2005-03-25 21:11:53',0,'172.16.42.130'); +INSERT INTO `user_log` VALUES ('cacti',0,'2005-03-25 21:11:56',0,'172.16.42.130'); +INSERT INTO `user_log` VALUES ('admin',0,'2005-03-25 21:11:59',0,'172.16.42.130'); +INSERT INTO `user_log` VALUES ('admin',0,'2005-03-25 21:12:03',0,'172.16.42.130'); +INSERT INTO `user_log` VALUES ('admin',0,'2005-03-25 21:12:09',0,'172.16.42.130'); +INSERT INTO `user_log` VALUES ('admin',0,'2005-03-25 21:12:13',0,'172.16.42.130'); +INSERT INTO `user_log` VALUES ('admin',1,'2005-03-25 21:12:53',1,'172.16.42.130'); +INSERT INTO `user_log` VALUES ('admin',0,'0000-00-00 00:00:00',3,'172.16.42.130'); +INSERT INTO `user_log` VALUES ('admin',1,'2005-03-25 21:14:48',1,'172.16.42.131'); +INSERT INTO `user_log` VALUES ('admin',1,'2005-03-25 21:22:01',1,'172.16.42.128'); +INSERT INTO `user_log` VALUES ('noc',0,'2005-03-25 21:32:19',0,'172.16.42.140'); +INSERT INTO `user_log` VALUES ('admin',1,'2005-03-25 21:32:27',1,'172.16.42.140'); +INSERT INTO `user_log` VALUES ('guest',0,'2005-03-26 01:57:21',0,'172.16.42.131'); +INSERT INTO `user_log` VALUES ('guest',0,'2005-03-26 01:57:29',0,'172.16.42.131'); +INSERT INTO `user_log` VALUES ('admin',1,'2005-03-26 01:57:35',1,'172.16.42.131'); +INSERT INTO `user_log` VALUES ('admin',1,'2005-03-26 02:07:39',1,'172.16.42.131'); +INSERT INTO `user_log` VALUES ('admin',1,'2005-03-26 02:53:51',1,'172.16.42.128'); +INSERT INTO `user_log` VALUES ('admin',1,'2005-03-26 04:51:28',1,'172.16.42.131'); +INSERT INTO `user_log` VALUES ('admin',1,'2005-03-26 04:59:18',1,'172.16.42.128'); +INSERT INTO `user_log` VALUES ('admin',1,'2005-03-26 10:12:31',1,'172.16.42.130'); +INSERT INTO `user_log` VALUES ('admin',1,'2005-03-26 11:08:30',1,'172.16.42.130'); +INSERT INTO `user_log` VALUES ('admin',1,'2005-03-26 14:31:48',1,'2001:6f8:975:10'); +INSERT INTO `user_log` VALUES ('admin',1,'2005-03-26 14:33:58',1,'2001:6f8:975:10'); +INSERT INTO `user_log` VALUES ('admin',1,'2005-03-26 16:37:52',1,'172.16.42.140'); +INSERT INTO `user_log` VALUES ('admin',1,'2005-03-26 17:17:54',1,'172.16.42.131'); +INSERT INTO `user_log` VALUES ('admin',1,'2005-03-26 17:50:17',1,'172.16.42.140'); +INSERT INTO `user_log` VALUES ('admin',1,'2005-03-26 19:12:24',1,'2001:748:306:42'); +INSERT INTO `user_log` VALUES ('admin',1,'2005-03-27 00:05:04',1,'172.16.42.253'); +INSERT INTO `user_log` VALUES ('admin',1,'2005-03-27 00:06:25',1,'172.16.42.137'); +INSERT INTO `user_log` VALUES ('admin',1,'2005-03-27 11:13:20',1,'172.16.42.137'); +INSERT INTO `user_log` VALUES ('admin',1,'2005-03-27 18:09:49',1,'2001:6f8:975:10'); +INSERT INTO `user_log` VALUES ('admin',1,'2005-03-27 18:41:02',1,'172.16.42.137'); +INSERT INTO `user_log` VALUES ('admin',1,'2005-03-27 19:52:01',1,'2001:748:306:42'); +INSERT INTO `user_log` VALUES ('admin',1,'2005-03-27 19:56:49',1,'2001:748:306:42'); +INSERT INTO `user_log` VALUES ('admin',1,'2005-03-28 00:16:34',1,'2001:748:306:42'); +INSERT INTO `user_log` VALUES ('noc',0,'2005-03-28 01:25:10',0,'172.16.42.137'); +INSERT INTO `user_log` VALUES ('admin',1,'2005-03-28 11:18:54',1,'172.16.42.130'); +INSERT INTO `user_log` VALUES ('admin',1,'2005-03-28 13:58:58',1,'172.16.42.130'); +INSERT INTO `user_log` VALUES ('admin',1,'2005-03-28 14:56:47',1,'172.16.42.130'); + +-- +-- Table structure for table `version` +-- + +CREATE TABLE `version` ( + `cacti` char(20) default NULL +) TYPE=MyISAM; + +-- +-- Dumping data for table `version` +-- + +INSERT INTO `version` VALUES ('0.8.6c'); + diff --git a/noc/monitor.easterhegg.de/cacti/apache.conf b/noc/monitor.easterhegg.de/cacti/apache.conf new file mode 100644 index 0000000..9380b0e --- /dev/null +++ b/noc/monitor.easterhegg.de/cacti/apache.conf @@ -0,0 +1,32 @@ +Alias /cacti /usr/share/cacti/site + + + order allow,deny + allow from all + + + + Options +FollowSymLinks + AllowOverride None + order deny,allow + allow from 172.16.42.0/24 + allow from 2001:6f8:975:1000::1/64 + allow from 2001:748:306:42::2/64 + #allow from 2001:6f8:975:1000:209:6bff:fefa:2182 + deny from all +# + AddType application/x-httpd-php .php + + php_flag magic_quotes_gpc Off + php_flag short_open_tag On + php_flag register_globals Off + php_flag register_argc_argv On + php_flag track_vars On + # this setting is necessary for some locales + php_value mbstring.func_overload 0 + php_value include_path . + + DirectoryIndex index.php +# + + diff --git a/noc/monitor.easterhegg.de/cacti/debian.php b/noc/monitor.easterhegg.de/cacti/debian.php new file mode 100644 index 0000000..22341ce --- /dev/null +++ b/noc/monitor.easterhegg.de/cacti/debian.php @@ -0,0 +1,6 @@ + diff --git a/noc/monitor.easterhegg.de/smokeping/basepage.html b/noc/monitor.easterhegg.de/smokeping/basepage.html new file mode 100644 index 0000000..f5fa3b7 --- /dev/null +++ b/noc/monitor.easterhegg.de/smokeping/basepage.html @@ -0,0 +1,84 @@ + + + + + + +SmokePing Latency Page for <##title##> + + + + + + + + + + + +
    +

    +

    Select Target:  

    +

    <##menu##>

    +
    +
    +
    +
    +
    +

    Maintained by:
    <##owner##>

    +

    Created using <##author##>'s <##smokeping##>

    +

    <##smokelogo##>

    +

    +

    <##rrdlogo##>

    +
    +

    <##title##>

    +

    <##remark##>

    +

    <##overview##>

    +

    <##body##>

    +
    +
    + + diff --git a/noc/monitor.easterhegg.de/smokeping/config b/noc/monitor.easterhegg.de/smokeping/config new file mode 100644 index 0000000..bd61892 --- /dev/null +++ b/noc/monitor.easterhegg.de/smokeping/config @@ -0,0 +1,145 @@ +# Note that all IP addresses in this file are false, to prevent some +# machine falling under a deadly DOS storm because all users keep +# the same addresses in their config. + +*** General *** + +################################################ +# DON'T TOUCH UNLESS YOU KNOW WHAT YOU'RE DOING +# BETWEEN THESE MARKS! +################################################ +sendmail = /usr/lib/sendmail +imgcache = /var/www/smokeping +imgurl = ../smokeping +datadir = /var/lib/smokeping +piddir = /var/run/smokeping +smokemail = /etc/smokeping/smokemail +################################################ +# END OF DON'T TOUCH SECTION +################################################ + + +# Please edit this to suit your installation +owner = Easterhegg +contact = someone@easterhegg.de +cgiurl = http://monitor.easterhegg.de/cgi-bin/smokeping.cgi +mailhost = mx.easterhegg.de +# specify this to get syslog logging +syslogfacility = local0 +# each probe is now run in its own process +# disable this to revert to the old behaviour +# concurrentprobes = no + +*** Alerts *** +to = postmaster@localhost +from = postmaster@localhost + ++bigloss +type = loss +# in percent +pattern = ==0%,==0%,==0%,==0%,>0%,>0%,>0% +comment = suddenly there is packet loss + ++someloss +type = loss +# in percent +pattern = >0%,*12*,>0%,*12*,>0% +comment = loss 3 times in a row + ++startloss +type = loss +# in percent +pattern = ==S,>0%,>0%,>0% +comment = loss at startup + ++rttdetect +type = rtt +# in milli seconds +pattern = <10,<10,<10,<10,<10,<100,>100,>100,>100 +comment = routing mesed up again ? + +*** Database *** + +step = 300 +pings = 20 + +# consfn mrhb steps total + +AVERAGE 0.5 1 1008 +AVERAGE 0.5 12 4320 + MIN 0.5 12 4320 + MAX 0.5 12 4320 +AVERAGE 0.5 144 720 + MAX 0.5 144 720 + MIN 0.5 144 720 + +*** Presentation *** + +template = /etc/smokeping/basepage.html + ++ overview + +width = 600 +height = 50 +range = 10h + ++ detail + +width = 600 +height = 200 +unison_tolerance = 2 + +"Last 3 Hours" 3h +"Last 30 Hours" 30h +"Last 10 Days" 10d +"Last 400 Days" 400d + +*** Probes *** + ++ FPing +binary = /usr/bin/fping + ++ AnotherDNS +forks = 10 +#binary = /usr/bin/dig + + +*** Targets *** + +probe = FPing + +## You have to edit and uncomment all what you want below this. +# Please, refer to smokeping_config man page for more info +# The given adresses aren't real to avoid DoS. + +menu = Top +title = Network Latency Grapher +remark = Welcome to the SmokePing website of 'A poorly \ + mantained site running Debian.' + ++ Easterhegg +menu = Easterhegg +title = Easterhegg +alerts = bigloss,someloss,startloss + +++ sinabox +menu = sinabox +title = sinabox + +probe = AnotherDNS + ++++ sinaboxPING +menu = sinaboxPING +title = sinabox ICMP echo reply RTTs +host = 172.16.0.1 +alerts = bigloss,someloss,startloss,rttdetect +probe = FPing + ++++ sinaboxDNS +menu = sinaboxDNS +title = Domain Name Service at sinabox.easterhegg.de +host = 172.16.0.1 +probe = AnotherDNS +++++ PROBE_CONF +lookup = resolve.test.roka.net + diff --git a/noc/monitor.easterhegg.de/smokeping/smokemail b/noc/monitor.easterhegg.de/smokeping/smokemail new file mode 100644 index 0000000..5b4d4da --- /dev/null +++ b/noc/monitor.easterhegg.de/smokeping/smokemail @@ -0,0 +1,65 @@ +From: <##FROM##> +To: <##TO##> +Subject: SmokePing Agent + +Hi, + +Please execute the attache Perl Script on your computer. It will register +your IP with SmokePing. You have to rerun this script at least everytime +your IP changes. You can run the script as often as you want. + +The script is written in Perl. If you don't have Perl available on your +system, you must have a Windows Box. You can easily fix this prolem by +downloading ActivePerl from www.activestate.com + +As soon as you have run the SmokePing Agent, the SmokePing server will +start monitoring your host. Check out: +<##URL##>?target=<##PATH##> + +Cheers +<##OWNER##> + +------------8<------------------------ +#!/usr/bin/perl -w + +my $url = '<##URL##>'; +my $path = '<##PATH##>'; +my $secret = '<##SECRET##>'; + +use strict; +use IO::Socket; + +my $post="target=${path}&secret=${secret}"; +my $clen=length $post; + +$url =~ m|http://([^/]+)(/.+)|; +my $host = $1; +my $script = $2; + +my $remote = IO::Socket::INET->new( Proto => "tcp", + PeerAddr => $host, + PeerPort => "http(80)", + ); +exit 0 unless $remote; +$remote->autoflush(1); + +print $remote <<"REQUEST"; +POST $script HTTP/1.0\r +User-Agent: smokeping-agent/1.0\r +Host: ${host}:80\r +Pragma: no-cache\r +Content-Length: ${clen}\r +Content-Type: application/x-www-form-urlencoded\r +\r +${post}\r +REQUEST + +my $head = 1; +while (<$remote>) { + /^\s*$/ && do {$head=0;next}; + print unless $head; +} + +close $remote; +exit; +------------8<------------------------ diff --git a/noc/monitor.easterhegg.de/var-lib-cacti.tgz b/noc/monitor.easterhegg.de/var-lib-cacti.tgz new file mode 100644 index 0000000..d62d177 Binary files /dev/null and b/noc/monitor.easterhegg.de/var-lib-cacti.tgz differ diff --git a/noc/monitor.easterhegg.de/var-lib-smokeping.tgz b/noc/monitor.easterhegg.de/var-lib-smokeping.tgz new file mode 100644 index 0000000..8ec263a Binary files /dev/null and b/noc/monitor.easterhegg.de/var-lib-smokeping.tgz differ diff --git a/noc/monitor.easterhegg.de/var-www.tgz b/noc/monitor.easterhegg.de/var-www.tgz new file mode 100644 index 0000000..7f85188 Binary files /dev/null and b/noc/monitor.easterhegg.de/var-www.tgz differ diff --git a/noc/patches/bind-9.3.1-configure.sh b/noc/patches/bind-9.3.1-configure.sh new file mode 100644 index 0000000..c8b6bc6 --- /dev/null +++ b/noc/patches/bind-9.3.1-configure.sh @@ -0,0 +1 @@ +./configure --prefix=/usr --sysconfdir=/etc/namedb --localstatedir=/var --disable-threads --enable-libbind --enable-ipv6 --with-openssl=no diff --git a/noc/patches/iptables-1.3.0-imq1.diff b/noc/patches/iptables-1.3.0-imq1.diff new file mode 100644 index 0000000..c3bf8d0 --- /dev/null +++ b/noc/patches/iptables-1.3.0-imq1.diff @@ -0,0 +1,220 @@ +--- userspace/extensions.orig/.IMQ-test6 Thu Jan 1 01:00:00 1970 ++++ userspace/extensions/.IMQ-test6 Mon Jun 16 10:12:47 2003 +@@ -0,0 +1,3 @@ ++#!/bin/sh ++# True if IMQ target patch is applied. ++[ -f $KERNEL_DIR/net/ipv6/netfilter/ip6t_IMQ.c ] && echo IMQ +--- userspace/extensions.orig/libip6t_IMQ.c Thu Jan 1 01:00:00 1970 ++++ userspace/extensions/libip6t_IMQ.c Mon Jun 16 10:12:47 2003 +@@ -0,0 +1,101 @@ ++/* Shared library add-on to iptables to add IMQ target support. */ ++#include ++#include ++#include ++#include ++ ++#include ++#include ++#include ++ ++/* Function which prints out usage message. */ ++static void ++help(void) ++{ ++ printf( ++"IMQ target v%s options:\n" ++" --todev enqueue to imq, defaults to 0\n", ++IPTABLES_VERSION); ++} ++ ++static struct option opts[] = { ++ { "todev", 1, 0, '1' }, ++ { 0 } ++}; ++ ++/* Initialize the target. */ ++static void ++init(struct ip6t_entry_target *t, unsigned int *nfcache) ++{ ++ struct ip6t_imq_info *mr = (struct ip6t_imq_info*)t->data; ++ ++ mr->todev = 0; ++ *nfcache |= NFC_UNKNOWN; ++} ++ ++/* Function which parses command options; returns true if it ++ ate an option */ ++static int ++parse(int c, char **argv, int invert, unsigned int *flags, ++ const struct ip6t_entry *entry, ++ struct ip6t_entry_target **target) ++{ ++ struct ip6t_imq_info *mr = (struct ip6t_imq_info*)(*target)->data; ++ ++ switch(c) { ++ case '1': ++ if (check_inverse(optarg, &invert, NULL, 0)) ++ exit_error(PARAMETER_PROBLEM, ++ "Unexpected `!' after --todev"); ++ mr->todev=atoi(optarg); ++ break; ++ default: ++ return 0; ++ } ++ return 1; ++} ++ ++static void ++final_check(unsigned int flags) ++{ ++} ++ ++/* Prints out the targinfo. */ ++static void ++print(const struct ip6t_ip6 *ip, ++ const struct ip6t_entry_target *target, ++ int numeric) ++{ ++ struct ip6t_imq_info *mr = (struct ip6t_imq_info*)target->data; ++ ++ printf("IMQ: todev %u ", mr->todev); ++} ++ ++/* Saves the union ipt_targinfo in parsable form to stdout. */ ++static void ++save(const struct ip6t_ip6 *ip, const struct ip6t_entry_target *target) ++{ ++ struct ip6t_imq_info *mr = (struct ip6t_imq_info*)target->data; ++ ++ printf("--todev %u", mr->todev); ++} ++ ++static struct ip6tables_target imq = { ++ .next = NULL, ++ .name = "IMQ", ++ .version = IPTABLES_VERSION, ++ .size = IP6T_ALIGN(sizeof(struct ip6t_imq_info)), ++ .userspacesize = IP6T_ALIGN(sizeof(struct ip6t_imq_info)), ++ .help = &help, ++ .init = &init, ++ .parse = &parse, ++ .final_check = &final_check, ++ .print = &print, ++ .save = &save, ++ .extra_opts = opts ++}; ++ ++void _init(void) ++{ ++ register_target6(&imq); ++} +--- userspace/extensions.orig/.IMQ-test Thu Jan 1 01:00:00 1970 ++++ userspace/extensions/.IMQ-test Mon Jun 16 10:12:47 2003 +@@ -0,0 +1,3 @@ ++#!/bin/sh ++# True if IMQ target patch is applied. ++[ -f $KERNEL_DIR/net/ipv4/netfilter/ipt_IMQ.c ] && echo IMQ +--- userspace/extensions.orig/libipt_IMQ.c Thu Jan 1 01:00:00 1970 ++++ userspace/extensions/libipt_IMQ.c Mon Jun 16 10:12:47 2003 +@@ -0,0 +1,101 @@ ++/* Shared library add-on to iptables to add IMQ target support. */ ++#include ++#include ++#include ++#include ++ ++#include ++#include ++#include ++ ++/* Function which prints out usage message. */ ++static void ++help(void) ++{ ++ printf( ++"IMQ target v%s options:\n" ++" --todev enqueue to imq, defaults to 0\n", ++IPTABLES_VERSION); ++} ++ ++static struct option opts[] = { ++ { "todev", 1, 0, '1' }, ++ { 0 } ++}; ++ ++/* Initialize the target. */ ++static void ++init(struct ipt_entry_target *t, unsigned int *nfcache) ++{ ++ struct ipt_imq_info *mr = (struct ipt_imq_info*)t->data; ++ ++ mr->todev = 0; ++ *nfcache |= NFC_UNKNOWN; ++} ++ ++/* Function which parses command options; returns true if it ++ ate an option */ ++static int ++parse(int c, char **argv, int invert, unsigned int *flags, ++ const struct ipt_entry *entry, ++ struct ipt_entry_target **target) ++{ ++ struct ipt_imq_info *mr = (struct ipt_imq_info*)(*target)->data; ++ ++ switch(c) { ++ case '1': ++ if (check_inverse(optarg, &invert, NULL, 0)) ++ exit_error(PARAMETER_PROBLEM, ++ "Unexpected `!' after --todev"); ++ mr->todev=atoi(optarg); ++ break; ++ default: ++ return 0; ++ } ++ return 1; ++} ++ ++static void ++final_check(unsigned int flags) ++{ ++} ++ ++/* Prints out the targinfo. */ ++static void ++print(const struct ipt_ip *ip, ++ const struct ipt_entry_target *target, ++ int numeric) ++{ ++ struct ipt_imq_info *mr = (struct ipt_imq_info*)target->data; ++ ++ printf("IMQ: todev %u ", mr->todev); ++} ++ ++/* Saves the union ipt_targinfo in parsable form to stdout. */ ++static void ++save(const struct ipt_ip *ip, const struct ipt_entry_target *target) ++{ ++ struct ipt_imq_info *mr = (struct ipt_imq_info*)target->data; ++ ++ printf("--todev %u", mr->todev); ++} ++ ++static struct iptables_target imq = { ++ .next = NULL, ++ .name = "IMQ", ++ .version = IPTABLES_VERSION, ++ .size = IPT_ALIGN(sizeof(struct ipt_imq_info)), ++ .userspacesize = IPT_ALIGN(sizeof(struct ipt_imq_info)), ++ .help = &help, ++ .init = &init, ++ .parse = &parse, ++ .final_check = &final_check, ++ .print = &print, ++ .save = &save, ++ .extra_opts = opts ++}; ++ ++void _init(void) ++{ ++ register_target(&imq); ++} diff --git a/noc/patches/iptables-svn-sinabox.tar.bz2 b/noc/patches/iptables-svn-sinabox.tar.bz2 new file mode 100644 index 0000000..2ec6c07 Binary files /dev/null and b/noc/patches/iptables-svn-sinabox.tar.bz2 differ diff --git a/noc/patches/kernel-image-2.6.11.5_10.00.Custom_i386.deb b/noc/patches/kernel-image-2.6.11.5_10.00.Custom_i386.deb new file mode 100644 index 0000000..351c2ed Binary files /dev/null and b/noc/patches/kernel-image-2.6.11.5_10.00.Custom_i386.deb differ diff --git a/noc/patches/linux-2.6.11.4.config b/noc/patches/linux-2.6.11.4.config new file mode 100644 index 0000000..8952c84 --- /dev/null +++ b/noc/patches/linux-2.6.11.4.config @@ -0,0 +1,1843 @@ +# +# Automatically generated make config: don't edit +# Linux kernel version: 2.6.11.5 +# Sun Mar 27 04:28:13 2005 +# +CONFIG_X86=y +CONFIG_MMU=y +CONFIG_UID16=y +CONFIG_GENERIC_ISA_DMA=y +CONFIG_GENERIC_IOMAP=y + +# +# Code maturity level options +# +CONFIG_EXPERIMENTAL=y +CONFIG_CLEAN_COMPILE=y +CONFIG_BROKEN_ON_SMP=y +CONFIG_LOCK_KERNEL=y + +# +# General setup +# +CONFIG_LOCALVERSION="n" +CONFIG_SWAP=y +CONFIG_SYSVIPC=y +CONFIG_POSIX_MQUEUE=y +# CONFIG_BSD_PROCESS_ACCT is not set +CONFIG_SYSCTL=y +# CONFIG_AUDIT is not set +CONFIG_LOG_BUF_SHIFT=14 +CONFIG_HOTPLUG=y +CONFIG_KOBJECT_UEVENT=y +CONFIG_IKCONFIG=y +CONFIG_IKCONFIG_PROC=y +# CONFIG_EMBEDDED is not set +CONFIG_KALLSYMS=y +CONFIG_KALLSYMS_ALL=y +# CONFIG_KALLSYMS_EXTRA_PASS is not set +CONFIG_FUTEX=y +CONFIG_EPOLL=y +# CONFIG_CC_OPTIMIZE_FOR_SIZE is not set +CONFIG_SHMEM=y +CONFIG_CC_ALIGN_FUNCTIONS=0 +CONFIG_CC_ALIGN_LABELS=0 +CONFIG_CC_ALIGN_LOOPS=0 +CONFIG_CC_ALIGN_JUMPS=0 +# CONFIG_TINY_SHMEM is not set + +# +# Loadable module support +# +CONFIG_MODULES=y +CONFIG_MODULE_UNLOAD=y +CONFIG_MODULE_FORCE_UNLOAD=y +CONFIG_OBSOLETE_MODPARM=y +CONFIG_MODVERSIONS=y +CONFIG_MODULE_SRCVERSION_ALL=y +CONFIG_KMOD=y + +# +# Processor type and features +# +CONFIG_X86_PC=y +# CONFIG_X86_ELAN is not set +# CONFIG_X86_VOYAGER is not set +# CONFIG_X86_NUMAQ is not set +# CONFIG_X86_SUMMIT is not set +# CONFIG_X86_BIGSMP is not set +# CONFIG_X86_VISWS is not set +# CONFIG_X86_GENERICARCH is not set +# CONFIG_X86_ES7000 is not set +# CONFIG_M386 is not set +# CONFIG_M486 is not set +# CONFIG_M586 is not set +# CONFIG_M586TSC is not set +# CONFIG_M586MMX is not set +# CONFIG_M686 is not set +# CONFIG_MPENTIUMII is not set +# CONFIG_MPENTIUMIII is not set +# CONFIG_MPENTIUMM is not set +CONFIG_MPENTIUM4=y +# CONFIG_MK6 is not set +# CONFIG_MK7 is not set +# CONFIG_MK8 is not set +# CONFIG_MCRUSOE is not set +# CONFIG_MEFFICEON is not set +# CONFIG_MWINCHIPC6 is not set +# CONFIG_MWINCHIP2 is not set +# CONFIG_MWINCHIP3D is not set +# CONFIG_MCYRIXIII is not set +# CONFIG_MVIAC3_2 is not set +# CONFIG_X86_GENERIC is not set +CONFIG_X86_CMPXCHG=y +CONFIG_X86_XADD=y +CONFIG_X86_L1_CACHE_SHIFT=7 +CONFIG_RWSEM_XCHGADD_ALGORITHM=y +CONFIG_GENERIC_CALIBRATE_DELAY=y +CONFIG_X86_WP_WORKS_OK=y +CONFIG_X86_INVLPG=y +CONFIG_X86_BSWAP=y +CONFIG_X86_POPAD_OK=y +CONFIG_X86_GOOD_APIC=y +CONFIG_X86_INTEL_USERCOPY=y +CONFIG_X86_USE_PPRO_CHECKSUM=y +CONFIG_HPET_TIMER=y +CONFIG_HPET_EMULATE_RTC=y +# CONFIG_SMP is not set +CONFIG_PREEMPT=y +CONFIG_PREEMPT_BKL=y +CONFIG_X86_UP_APIC=y +CONFIG_X86_UP_IOAPIC=y +CONFIG_X86_LOCAL_APIC=y +CONFIG_X86_IO_APIC=y +CONFIG_X86_TSC=y +CONFIG_X86_MCE=y +CONFIG_X86_MCE_NONFATAL=m +CONFIG_X86_MCE_P4THERMAL=y +# CONFIG_TOSHIBA is not set +# CONFIG_I8K is not set +CONFIG_MICROCODE=m +CONFIG_X86_MSR=m +CONFIG_X86_CPUID=m + +# +# Firmware Drivers +# +# CONFIG_EDD is not set +CONFIG_NOHIGHMEM=y +# CONFIG_HIGHMEM4G is not set +# CONFIG_HIGHMEM64G is not set +CONFIG_MATH_EMULATION=y +CONFIG_MTRR=y +# CONFIG_EFI is not set +CONFIG_HAVE_DEC_LOCK=y +CONFIG_REGPARM=y + +# +# Power management options (ACPI, APM) +# +CONFIG_PM=y +# CONFIG_PM_DEBUG is not set +# CONFIG_SOFTWARE_SUSPEND is not set + +# +# ACPI (Advanced Configuration and Power Interface) Support +# +CONFIG_ACPI=y +CONFIG_ACPI_BOOT=y +CONFIG_ACPI_INTERPRETER=y +CONFIG_ACPI_SLEEP=y +CONFIG_ACPI_SLEEP_PROC_FS=y +# CONFIG_ACPI_AC is not set +# CONFIG_ACPI_BATTERY is not set +# CONFIG_ACPI_BUTTON is not set +CONFIG_ACPI_VIDEO=m +CONFIG_ACPI_FAN=m +CONFIG_ACPI_PROCESSOR=m +CONFIG_ACPI_THERMAL=m +# CONFIG_ACPI_ASUS is not set +# CONFIG_ACPI_IBM is not set +# CONFIG_ACPI_TOSHIBA is not set +CONFIG_ACPI_BLACKLIST_YEAR=0 +# CONFIG_ACPI_DEBUG is not set +CONFIG_ACPI_BUS=y +CONFIG_ACPI_EC=y +CONFIG_ACPI_POWER=y +CONFIG_ACPI_PCI=y +CONFIG_ACPI_SYSTEM=y +# CONFIG_X86_PM_TIMER is not set +CONFIG_ACPI_CONTAINER=m + +# +# APM (Advanced Power Management) BIOS Support +# +# CONFIG_APM is not set + +# +# CPU Frequency scaling +# +CONFIG_CPU_FREQ=y +# CONFIG_CPU_FREQ_DEBUG is not set +CONFIG_CPU_FREQ_STAT=m +# CONFIG_CPU_FREQ_STAT_DETAILS is not set +CONFIG_CPU_FREQ_DEFAULT_GOV_PERFORMANCE=y +# CONFIG_CPU_FREQ_DEFAULT_GOV_USERSPACE is not set +CONFIG_CPU_FREQ_GOV_PERFORMANCE=y +CONFIG_CPU_FREQ_GOV_POWERSAVE=m +CONFIG_CPU_FREQ_GOV_USERSPACE=m +CONFIG_CPU_FREQ_GOV_ONDEMAND=m +CONFIG_CPU_FREQ_TABLE=m + +# +# CPUFreq processor drivers +# +CONFIG_X86_ACPI_CPUFREQ=m +# CONFIG_X86_POWERNOW_K6 is not set +# CONFIG_X86_POWERNOW_K7 is not set +# CONFIG_X86_POWERNOW_K8 is not set +# CONFIG_X86_GX_SUSPMOD is not set +CONFIG_X86_SPEEDSTEP_CENTRINO=m +CONFIG_X86_SPEEDSTEP_CENTRINO_ACPI=y +CONFIG_X86_SPEEDSTEP_CENTRINO_TABLE=y +CONFIG_X86_SPEEDSTEP_ICH=m +CONFIG_X86_SPEEDSTEP_SMI=m +CONFIG_X86_P4_CLOCKMOD=m +# CONFIG_X86_CPUFREQ_NFORCE2 is not set +# CONFIG_X86_LONGRUN is not set +# CONFIG_X86_LONGHAUL is not set + +# +# shared options +# +CONFIG_X86_ACPI_CPUFREQ_PROC_INTF=y +CONFIG_X86_SPEEDSTEP_LIB=m +CONFIG_X86_SPEEDSTEP_RELAXED_CAP_CHECK=y + +# +# Bus options (PCI, PCMCIA, EISA, MCA, ISA) +# +CONFIG_PCI=y +# CONFIG_PCI_GOBIOS is not set +# CONFIG_PCI_GOMMCONFIG is not set +# CONFIG_PCI_GODIRECT is not set +CONFIG_PCI_GOANY=y +CONFIG_PCI_BIOS=y +CONFIG_PCI_DIRECT=y +CONFIG_PCI_MMCONFIG=y +# CONFIG_PCIEPORTBUS is not set +CONFIG_PCI_MSI=y +# CONFIG_PCI_LEGACY_PROC is not set +CONFIG_PCI_NAMES=y +CONFIG_ISA=y +# CONFIG_EISA is not set +# CONFIG_MCA is not set +# CONFIG_SCx200 is not set + +# +# PCCARD (PCMCIA/CardBus) support +# +# CONFIG_PCCARD is not set + +# +# PC-card bridges +# +CONFIG_PCMCIA_PROBE=y + +# +# PCI Hotplug Support +# +# CONFIG_HOTPLUG_PCI is not set + +# +# Executable file formats +# +CONFIG_BINFMT_ELF=y +CONFIG_BINFMT_AOUT=m +CONFIG_BINFMT_MISC=m + +# +# Device Drivers +# + +# +# Generic Driver Options +# +CONFIG_STANDALONE=y +CONFIG_PREVENT_FIRMWARE_BUILD=y +CONFIG_FW_LOADER=m +# CONFIG_DEBUG_DRIVER is not set + +# +# Memory Technology Devices (MTD) +# +# CONFIG_MTD is not set + +# +# Parallel port support +# +CONFIG_PARPORT=m +CONFIG_PARPORT_PC=m +CONFIG_PARPORT_PC_CML1=m +# CONFIG_PARPORT_SERIAL is not set +# CONFIG_PARPORT_PC_FIFO is not set +# CONFIG_PARPORT_PC_SUPERIO is not set +# CONFIG_PARPORT_OTHER is not set +# CONFIG_PARPORT_1284 is not set + +# +# Plug and Play support +# +CONFIG_PNP=y +CONFIG_PNP_DEBUG=y + +# +# Protocols +# +CONFIG_ISAPNP=y +CONFIG_PNPBIOS=y +CONFIG_PNPBIOS_PROC_FS=y +CONFIG_PNPACPI=y + +# +# Block devices +# +CONFIG_BLK_DEV_FD=y +# CONFIG_BLK_DEV_XD is not set +# CONFIG_PARIDE is not set +# CONFIG_BLK_CPQ_DA is not set +# CONFIG_BLK_CPQ_CISS_DA is not set +# CONFIG_BLK_DEV_DAC960 is not set +# CONFIG_BLK_DEV_UMEM is not set +# CONFIG_BLK_DEV_COW_COMMON is not set +CONFIG_BLK_DEV_LOOP=m +CONFIG_BLK_DEV_CRYPTOLOOP=m +CONFIG_BLK_DEV_NBD=m +# CONFIG_BLK_DEV_SX8 is not set +# CONFIG_BLK_DEV_UB is not set +CONFIG_BLK_DEV_RAM=y +CONFIG_BLK_DEV_RAM_COUNT=16 +CONFIG_BLK_DEV_RAM_SIZE=4096 +CONFIG_BLK_DEV_INITRD=y +CONFIG_INITRAMFS_SOURCE="" +# CONFIG_LBD is not set +# CONFIG_CDROM_PKTCDVD is not set + +# +# IO Schedulers +# +CONFIG_IOSCHED_NOOP=y +CONFIG_IOSCHED_AS=y +CONFIG_IOSCHED_DEADLINE=y +CONFIG_IOSCHED_CFQ=y +# CONFIG_ATA_OVER_ETH is not set + +# +# ATA/ATAPI/MFM/RLL support +# +CONFIG_IDE=y +CONFIG_BLK_DEV_IDE=y + +# +# Please see Documentation/ide.txt for help/info on IDE drives +# +# CONFIG_BLK_DEV_IDE_SATA is not set +# CONFIG_BLK_DEV_HD_IDE is not set +CONFIG_BLK_DEV_IDEDISK=y +CONFIG_IDEDISK_MULTI_MODE=y +CONFIG_BLK_DEV_IDECD=m +# CONFIG_BLK_DEV_IDETAPE is not set +# CONFIG_BLK_DEV_IDEFLOPPY is not set +CONFIG_BLK_DEV_IDESCSI=m +# CONFIG_IDE_TASK_IOCTL is not set + +# +# IDE chipset support/bugfixes +# +CONFIG_IDE_GENERIC=y +CONFIG_BLK_DEV_CMD640=y +# CONFIG_BLK_DEV_CMD640_ENHANCED is not set +# CONFIG_BLK_DEV_IDEPNP is not set +CONFIG_BLK_DEV_IDEPCI=y +CONFIG_IDEPCI_SHARE_IRQ=y +# CONFIG_BLK_DEV_OFFBOARD is not set +CONFIG_BLK_DEV_GENERIC=y +# CONFIG_BLK_DEV_OPTI621 is not set +CONFIG_BLK_DEV_RZ1000=y +CONFIG_BLK_DEV_IDEDMA_PCI=y +# CONFIG_BLK_DEV_IDEDMA_FORCED is not set +CONFIG_IDEDMA_PCI_AUTO=y +# CONFIG_IDEDMA_ONLYDISK is not set +# CONFIG_BLK_DEV_AEC62XX is not set +# CONFIG_BLK_DEV_ALI15X3 is not set +# CONFIG_BLK_DEV_AMD74XX is not set +# CONFIG_BLK_DEV_ATIIXP is not set +# CONFIG_BLK_DEV_CMD64X is not set +# CONFIG_BLK_DEV_TRIFLEX is not set +# CONFIG_BLK_DEV_CY82C693 is not set +# CONFIG_BLK_DEV_CS5520 is not set +# CONFIG_BLK_DEV_CS5530 is not set +# CONFIG_BLK_DEV_HPT34X is not set +# CONFIG_BLK_DEV_HPT366 is not set +# CONFIG_BLK_DEV_SC1200 is not set +CONFIG_BLK_DEV_PIIX=y +# CONFIG_BLK_DEV_NS87415 is not set +# CONFIG_BLK_DEV_PDC202XX_OLD is not set +# CONFIG_BLK_DEV_PDC202XX_NEW is not set +# CONFIG_BLK_DEV_SVWKS is not set +# CONFIG_BLK_DEV_SIIMAGE is not set +# CONFIG_BLK_DEV_SIS5513 is not set +# CONFIG_BLK_DEV_SLC90E66 is not set +# CONFIG_BLK_DEV_TRM290 is not set +# CONFIG_BLK_DEV_VIA82CXXX is not set +# CONFIG_IDE_ARM is not set +# CONFIG_IDE_CHIPSETS is not set +CONFIG_BLK_DEV_IDEDMA=y +# CONFIG_IDEDMA_IVB is not set +CONFIG_IDEDMA_AUTO=y +# CONFIG_BLK_DEV_HD is not set + +# +# SCSI device support +# +CONFIG_SCSI=y +CONFIG_SCSI_PROC_FS=y + +# +# SCSI support type (disk, tape, CD-ROM) +# +CONFIG_BLK_DEV_SD=y +# CONFIG_CHR_DEV_ST is not set +# CONFIG_CHR_DEV_OSST is not set +CONFIG_BLK_DEV_SR=m +# CONFIG_BLK_DEV_SR_VENDOR is not set +CONFIG_CHR_DEV_SG=m + +# +# Some SCSI devices (e.g. CD jukebox) support multiple LUNs +# +CONFIG_SCSI_MULTI_LUN=y +# CONFIG_SCSI_CONSTANTS is not set +# CONFIG_SCSI_LOGGING is not set + +# +# SCSI Transport Attributes +# +# CONFIG_SCSI_SPI_ATTRS is not set +# CONFIG_SCSI_FC_ATTRS is not set +# CONFIG_SCSI_ISCSI_ATTRS is not set + +# +# SCSI low-level drivers +# +# CONFIG_BLK_DEV_3W_XXXX_RAID is not set +# CONFIG_SCSI_3W_9XXX is not set +# CONFIG_SCSI_7000FASST is not set +# CONFIG_SCSI_ACARD is not set +# CONFIG_SCSI_AHA152X is not set +# CONFIG_SCSI_AHA1542 is not set +# CONFIG_SCSI_AACRAID is not set +# CONFIG_SCSI_AIC7XXX is not set +# CONFIG_SCSI_AIC7XXX_OLD is not set +# CONFIG_SCSI_AIC79XX is not set +# CONFIG_SCSI_DPT_I2O is not set +# CONFIG_SCSI_IN2000 is not set +# CONFIG_MEGARAID_NEWGEN is not set +# CONFIG_MEGARAID_LEGACY is not set +# CONFIG_SCSI_SATA is not set +# CONFIG_SCSI_BUSLOGIC is not set +# CONFIG_SCSI_DMX3191D is not set +# CONFIG_SCSI_DTC3280 is not set +# CONFIG_SCSI_EATA is not set +# CONFIG_SCSI_EATA_PIO is not set +# CONFIG_SCSI_FUTURE_DOMAIN is not set +# CONFIG_SCSI_GDTH is not set +# CONFIG_SCSI_GENERIC_NCR5380 is not set +# CONFIG_SCSI_GENERIC_NCR5380_MMIO is not set +# CONFIG_SCSI_IPS is not set +# CONFIG_SCSI_INITIO is not set +# CONFIG_SCSI_INIA100 is not set +# CONFIG_SCSI_PPA is not set +# CONFIG_SCSI_IMM is not set +# CONFIG_SCSI_NCR53C406A is not set +# CONFIG_SCSI_SYM53C8XX_2 is not set +# CONFIG_SCSI_IPR is not set +# CONFIG_SCSI_PAS16 is not set +# CONFIG_SCSI_PSI240I is not set +# CONFIG_SCSI_QLOGIC_FAS is not set +# CONFIG_SCSI_QLOGIC_ISP is not set +# CONFIG_SCSI_QLOGIC_FC is not set +# CONFIG_SCSI_QLOGIC_1280 is not set +CONFIG_SCSI_QLA2XXX=y +# CONFIG_SCSI_QLA21XX is not set +# CONFIG_SCSI_QLA22XX is not set +# CONFIG_SCSI_QLA2300 is not set +# CONFIG_SCSI_QLA2322 is not set +# CONFIG_SCSI_QLA6312 is not set +# CONFIG_SCSI_SYM53C416 is not set +# CONFIG_SCSI_DC395x is not set +# CONFIG_SCSI_DC390T is not set +# CONFIG_SCSI_T128 is not set +# CONFIG_SCSI_U14_34F is not set +# CONFIG_SCSI_ULTRASTOR is not set +# CONFIG_SCSI_NSP32 is not set +# CONFIG_SCSI_DEBUG is not set + +# +# Old CD-ROM drivers (not SCSI, not IDE) +# +# CONFIG_CD_NO_IDESCSI is not set + +# +# Multi-device support (RAID and LVM) +# +# CONFIG_MD is not set + +# +# Fusion MPT device support +# +# CONFIG_FUSION is not set + +# +# IEEE 1394 (FireWire) support +# +CONFIG_IEEE1394=m + +# +# Subsystem Options +# +CONFIG_IEEE1394_VERBOSEDEBUG=y +# CONFIG_IEEE1394_OUI_DB is not set +# CONFIG_IEEE1394_EXTRA_CONFIG_ROMS is not set + +# +# Device Drivers +# +# CONFIG_IEEE1394_PCILYNX is not set +CONFIG_IEEE1394_OHCI1394=m + +# +# Protocol Drivers +# +CONFIG_IEEE1394_VIDEO1394=m +CONFIG_IEEE1394_SBP2=m +# CONFIG_IEEE1394_SBP2_PHYS_DMA is not set +# CONFIG_IEEE1394_ETH1394 is not set +CONFIG_IEEE1394_DV1394=m +CONFIG_IEEE1394_RAWIO=m +CONFIG_IEEE1394_CMP=m +# CONFIG_IEEE1394_AMDTP is not set + +# +# I2O device support +# +CONFIG_I2O=m +CONFIG_I2O_CONFIG=m +CONFIG_I2O_BLOCK=m +CONFIG_I2O_SCSI=m +CONFIG_I2O_PROC=m + +# +# Networking support +# +CONFIG_NET=y + +# +# Networking options +# +CONFIG_PACKET=y +CONFIG_PACKET_MMAP=y +CONFIG_NETLINK_DEV=y +CONFIG_UNIX=y +CONFIG_NET_KEY=m +CONFIG_USE_POLICY_FWD=y +CONFIG_INET=y +CONFIG_IP_MULTICAST=y +CONFIG_IP_ADVANCED_ROUTER=y +CONFIG_IP_MULTIPLE_TABLES=y +CONFIG_IP_ROUTE_FWMARK=y +# CONFIG_IP_ROUTE_MULTIPATH is not set +CONFIG_IP_ROUTE_VERBOSE=y +# CONFIG_IP_PNP is not set +CONFIG_NET_IPIP=m +CONFIG_NET_IPGRE=m +CONFIG_NET_IPGRE_BROADCAST=y +CONFIG_IP_MROUTE=y +CONFIG_IP_PIMSM_V1=y +CONFIG_IP_PIMSM_V2=y +# CONFIG_ARPD is not set +CONFIG_SYN_COOKIES=y +CONFIG_INET_AH=m +CONFIG_INET_ESP=m +CONFIG_INET_IPCOMP=m +CONFIG_INET_TUNNEL=m +CONFIG_IP_TCPDIAG=m +CONFIG_IP_TCPDIAG_IPV6=y + +# +# IP: Virtual Server Configuration +# +# CONFIG_IP_VS is not set +CONFIG_IPV6=m +# CONFIG_IPV6_PRIVACY is not set +CONFIG_IPV6_ROUTER_PREF=y +CONFIG_IPV6_NEW_ROUNDROBIN=y +CONFIG_INET6_AH=m +CONFIG_INET6_ESP=m +CONFIG_INET6_IPCOMP=m +CONFIG_INET6_TUNNEL=m +CONFIG_IPV6_TUNNEL=m +CONFIG_IPV6_MROUTE=y +CONFIG_IPV6_PIMSM_V2=y +CONFIG_IPV6_STATISTICS=y +CONFIG_IPV6_DELPREFIX=y +CONFIG_IPV6_ALLFRAG=y +CONFIG_NETFILTER=y +# CONFIG_NETFILTER_DEBUG is not set + +# +# IP: Netfilter Configuration +# +CONFIG_IP_NF_CONNTRACK=m +CONFIG_IP_NF_CT_ACCT=y +CONFIG_IP_NF_CONNTRACK_MARK=y +CONFIG_IP_NF_CT_PROTO_SCTP=m +CONFIG_IP_NF_FTP=m +CONFIG_IP_NF_IRC=m +CONFIG_IP_NF_TFTP=m +CONFIG_IP_NF_AMANDA=m +CONFIG_IP_NF_QUEUE=m +CONFIG_IP_NF_IPTABLES=m +CONFIG_IP_NF_MATCH_LIMIT=m +CONFIG_IP_NF_MATCH_IPRANGE=m +CONFIG_IP_NF_MATCH_MAC=m +CONFIG_IP_NF_MATCH_PKTTYPE=m +CONFIG_IP_NF_MATCH_MARK=m +CONFIG_IP_NF_MATCH_MULTIPORT=m +CONFIG_IP_NF_MATCH_TOS=m +CONFIG_IP_NF_MATCH_RECENT=m +CONFIG_IP_NF_MATCH_ECN=m +CONFIG_IP_NF_MATCH_DSCP=m +CONFIG_IP_NF_MATCH_AH_ESP=m +CONFIG_IP_NF_MATCH_LENGTH=m +CONFIG_IP_NF_MATCH_TTL=m +CONFIG_IP_NF_MATCH_TCPMSS=m +CONFIG_IP_NF_MATCH_HELPER=m +CONFIG_IP_NF_MATCH_STATE=m +CONFIG_IP_NF_MATCH_CONNTRACK=m +CONFIG_IP_NF_MATCH_OWNER=m +CONFIG_IP_NF_MATCH_ADDRTYPE=m +CONFIG_IP_NF_MATCH_REALM=m +CONFIG_IP_NF_MATCH_SCTP=m +CONFIG_IP_NF_MATCH_COMMENT=m +CONFIG_IP_NF_MATCH_CONNMARK=m +CONFIG_IP_NF_MATCH_HASHLIMIT=m +CONFIG_IP_NF_FILTER=m +CONFIG_IP_NF_TARGET_REJECT=m +CONFIG_IP_NF_TARGET_IMQ=m +CONFIG_IP_NF_TARGET_LOG=m +CONFIG_IP_NF_TARGET_ULOG=m +CONFIG_IP_NF_TARGET_TCPMSS=m +CONFIG_IP_NF_NAT=m +CONFIG_IP_NF_NAT_NEEDED=y +CONFIG_IP_NF_TARGET_MASQUERADE=m +CONFIG_IP_NF_TARGET_REDIRECT=m +CONFIG_IP_NF_TARGET_NETMAP=m +CONFIG_IP_NF_TARGET_SAME=m +CONFIG_IP_NF_NAT_SNMP_BASIC=m +CONFIG_IP_NF_NAT_IRC=m +CONFIG_IP_NF_NAT_FTP=m +CONFIG_IP_NF_NAT_TFTP=m +CONFIG_IP_NF_NAT_AMANDA=m +CONFIG_IP_NF_MANGLE=m +CONFIG_IP_NF_TARGET_TOS=m +CONFIG_IP_NF_TARGET_ECN=m +CONFIG_IP_NF_TARGET_DSCP=m +CONFIG_IP_NF_TARGET_MARK=m +CONFIG_IP_NF_TARGET_CLASSIFY=m +CONFIG_IP_NF_TARGET_CONNMARK=m +CONFIG_IP_NF_TARGET_CLUSTERIP=m +CONFIG_IP_NF_RAW=m +CONFIG_IP_NF_TARGET_NOTRACK=m +CONFIG_IP_NF_ARPTABLES=m +CONFIG_IP_NF_ARPFILTER=m +CONFIG_IP_NF_ARP_MANGLE=m +CONFIG_IP_NF_SET=m +CONFIG_IP_NF_SET_MAX=256 +CONFIG_IP_NF_SET_HASHSIZE=1024 +CONFIG_IP_NF_SET_IPMAP=m +CONFIG_IP_NF_SET_MACIPMAP=m +CONFIG_IP_NF_SET_PORTMAP=m +CONFIG_IP_NF_SET_IPHASH=m +CONFIG_IP_NF_SET_NETHASH=m +CONFIG_IP_NF_MATCH_SET=m +CONFIG_IP_NF_TARGET_SET=m +CONFIG_IP_NF_TARGET_TARPIT=m +CONFIG_IP_NF_MATCH_IPP2P=m + +# +# IPv6: Netfilter Configuration +# +# CONFIG_IP6_NF_FTP is not set +CONFIG_IP6_NF_QUEUE=m +CONFIG_IP6_NF_IPTABLES=m +CONFIG_IP6_NF_MATCH_LIMIT=m +CONFIG_IP6_NF_MATCH_MAC=m +CONFIG_IP6_NF_MATCH_RT=m +CONFIG_IP6_NF_MATCH_OPTS=m +CONFIG_IP6_NF_MATCH_FRAG=m +CONFIG_IP6_NF_MATCH_HL=m +CONFIG_IP6_NF_MATCH_MULTIPORT=m +CONFIG_IP6_NF_MATCH_OWNER=m +CONFIG_IP6_NF_MATCH_MARK=m +CONFIG_IP6_NF_MATCH_IPV6HEADER=m +CONFIG_IP6_NF_MATCH_AHESP=m +CONFIG_IP6_NF_MATCH_LENGTH=m +CONFIG_IP6_NF_MATCH_EUI64=m +CONFIG_IP6_NF_CONNTRACK=m +CONFIG_IP6_NF_MATCH_STATE=m +CONFIG_IP6_NF_FILTER=m +CONFIG_IP6_NF_TARGET_IMQ=m +CONFIG_IP6_NF_TARGET_LOG=m +CONFIG_IP6_NF_TARGET_REJECT=m +CONFIG_IP6_NF_MANGLE=m +CONFIG_IP6_NF_TARGET_MARK=m +CONFIG_IP6_NF_RAW=m +CONFIG_IP6_NF_TARGET_ULOG=m +CONFIG_XFRM=y +CONFIG_XFRM_USER=m + +# +# SCTP Configuration (EXPERIMENTAL) +# +# CONFIG_IP_SCTP is not set +# CONFIG_ATM is not set +# CONFIG_BRIDGE is not set +CONFIG_VLAN_8021Q=y +# CONFIG_DECNET is not set +CONFIG_LLC=m +CONFIG_LLC2=m +# CONFIG_IPX is not set +# CONFIG_ATALK is not set +# CONFIG_X25 is not set +# CONFIG_LAPB is not set +# CONFIG_NET_DIVERT is not set +# CONFIG_ECONET is not set +# CONFIG_WAN_ROUTER is not set + +# +# QoS and/or fair queueing +# +CONFIG_NET_SCHED=y +# CONFIG_NET_SCH_CLK_JIFFIES is not set +# CONFIG_NET_SCH_CLK_GETTIMEOFDAY is not set +CONFIG_NET_SCH_CLK_CPU=y +CONFIG_NET_SCH_CBQ=m +CONFIG_NET_SCH_HTB=m +CONFIG_NET_SCH_HFSC=m +CONFIG_NET_SCH_PRIO=m +CONFIG_NET_SCH_RED=m +CONFIG_NET_SCH_SFQ=m +CONFIG_NET_SCH_TEQL=m +CONFIG_NET_SCH_TBF=m +CONFIG_NET_SCH_GRED=m +CONFIG_NET_SCH_DSMARK=m +CONFIG_NET_SCH_NETEM=m +CONFIG_NET_SCH_INGRESS=m +CONFIG_NET_QOS=y +CONFIG_NET_ESTIMATOR=y +CONFIG_NET_CLS=y +CONFIG_NET_CLS_TCINDEX=m +CONFIG_NET_CLS_ROUTE4=m +CONFIG_NET_CLS_ROUTE=y +CONFIG_NET_CLS_FW=m +CONFIG_NET_CLS_U32=m +CONFIG_CLS_U32_PERF=y +CONFIG_NET_CLS_IND=y +CONFIG_CLS_U32_MARK=y +CONFIG_NET_CLS_RSVP=m +CONFIG_NET_CLS_RSVP6=m +CONFIG_NET_CLS_ACT=y +CONFIG_NET_ACT_POLICE=m +CONFIG_NET_ACT_GACT=m +CONFIG_GACT_PROB=y +CONFIG_NET_ACT_MIRRED=m +CONFIG_NET_ACT_IPT=m +CONFIG_NET_ACT_PEDIT=m + +# +# Network testing +# +CONFIG_NET_PKTGEN=m +# CONFIG_NETPOLL is not set +# CONFIG_NET_POLL_CONTROLLER is not set +CONFIG_HAMRADIO=y + +# +# Packet Radio protocols +# +CONFIG_AX25=m +# CONFIG_AX25_DAMA_SLAVE is not set +# CONFIG_NETROM is not set +# CONFIG_ROSE is not set + +# +# AX.25 network device drivers +# +# CONFIG_MKISS is not set +# CONFIG_6PACK is not set +# CONFIG_BPQETHER is not set +# CONFIG_DMASCC is not set +# CONFIG_SCC is not set +# CONFIG_BAYCOM_SER_FDX is not set +# CONFIG_BAYCOM_SER_HDX is not set +# CONFIG_BAYCOM_PAR is not set +# CONFIG_BAYCOM_EPP is not set +# CONFIG_YAM is not set +# CONFIG_IRDA is not set +# CONFIG_BT is not set +CONFIG_NETDEVICES=y +CONFIG_DUMMY=y +CONFIG_BONDING=m +# CONFIG_EQUALIZER is not set +CONFIG_IMQ=m +# CONFIG_IMQ_BEHAVIOR_AA is not set +# CONFIG_IMQ_BEHAVIOR_AB is not set +CONFIG_IMQ_BEHAVIOR_BA=y +# CONFIG_IMQ_BEHAVIOR_BB is not set +CONFIG_IMQ_NUM_DEVS=2 +CONFIG_TUN=m +CONFIG_ETHERTAP=m +# CONFIG_NET_SB1000 is not set + +# +# ARCnet devices +# +# CONFIG_ARCNET is not set + +# +# Ethernet (10 or 100Mbit) +# +CONFIG_NET_ETHERNET=y +CONFIG_MII=m +# CONFIG_HAPPYMEAL is not set +# CONFIG_SUNGEM is not set +# CONFIG_NET_VENDOR_3COM is not set +# CONFIG_LANCE is not set +# CONFIG_NET_VENDOR_SMC is not set +# CONFIG_NET_VENDOR_RACAL is not set + +# +# Tulip family network device support +# +# CONFIG_NET_TULIP is not set +# CONFIG_AT1700 is not set +# CONFIG_DEPCA is not set +# CONFIG_HP100 is not set +# CONFIG_NET_ISA is not set +CONFIG_NET_PCI=y +# CONFIG_PCNET32 is not set +# CONFIG_AMD8111_ETH is not set +# CONFIG_ADAPTEC_STARFIRE is not set +# CONFIG_AC3200 is not set +# CONFIG_APRICOT is not set +# CONFIG_B44 is not set +# CONFIG_FORCEDETH is not set +# CONFIG_CS89x0 is not set +# CONFIG_DGRS is not set +# CONFIG_EEPRO100 is not set +CONFIG_E100=m +# CONFIG_E100_NAPI is not set +# CONFIG_FEALNX is not set +# CONFIG_NATSEMI is not set +# CONFIG_NE2K_PCI is not set +# CONFIG_8139CP is not set +# CONFIG_8139TOO is not set +# CONFIG_SIS900 is not set +# CONFIG_EPIC100 is not set +# CONFIG_SUNDANCE is not set +# CONFIG_TLAN is not set +# CONFIG_VIA_RHINE is not set +# CONFIG_NET_POCKET is not set + +# +# Ethernet (1000 Mbit) +# +# CONFIG_ACENIC is not set +# CONFIG_DL2K is not set +CONFIG_E1000=m +# CONFIG_E1000_NAPI is not set +# CONFIG_NS83820 is not set +# CONFIG_HAMACHI is not set +# CONFIG_YELLOWFIN is not set +# CONFIG_R8169 is not set +# CONFIG_SK98LIN is not set +# CONFIG_VIA_VELOCITY is not set +# CONFIG_TIGON3 is not set + +# +# Ethernet (10000 Mbit) +# +# CONFIG_IXGB is not set +# CONFIG_S2IO is not set + +# +# Token Ring devices +# +# CONFIG_TR is not set + +# +# Wireless LAN (non-hamradio) +# +# CONFIG_NET_RADIO is not set + +# +# Wan interfaces +# +# CONFIG_WAN is not set +# CONFIG_FDDI is not set +# CONFIG_HIPPI is not set +# CONFIG_PLIP is not set +CONFIG_PPP=m +# CONFIG_PPP_MULTILINK is not set +CONFIG_PPP_FILTER=y +CONFIG_PPP_ASYNC=m +CONFIG_PPP_SYNC_TTY=m +CONFIG_PPP_DEFLATE=m +CONFIG_PPP_BSDCOMP=m +CONFIG_PPPOE=m +# CONFIG_SLIP is not set +# CONFIG_NET_FC is not set +# CONFIG_SHAPER is not set +# CONFIG_NETCONSOLE is not set + +# +# ISDN subsystem +# +CONFIG_ISDN=m + +# +# Old ISDN4Linux +# +CONFIG_ISDN_I4L=m +CONFIG_ISDN_PPP=y +CONFIG_ISDN_PPP_VJ=y +CONFIG_ISDN_MPP=y +CONFIG_IPPP_FILTER=y +CONFIG_ISDN_PPP_BSDCOMP=m +CONFIG_ISDN_AUDIO=y +CONFIG_ISDN_TTY_FAX=y + +# +# ISDN feature submodules +# +CONFIG_ISDN_DRV_LOOP=m +CONFIG_ISDN_DIVERSION=m + +# +# ISDN4Linux hardware drivers +# + +# +# Passive cards +# +CONFIG_ISDN_DRV_HISAX=m + +# +# D-channel protocol features +# +CONFIG_HISAX_EURO=y +CONFIG_DE_AOC=y +CONFIG_HISAX_NO_SENDCOMPLETE=y +CONFIG_HISAX_NO_LLC=y +CONFIG_HISAX_NO_KEYPAD=y +# CONFIG_HISAX_1TR6 is not set +# CONFIG_HISAX_NI1 is not set +CONFIG_HISAX_MAX_CARDS=8 + +# +# HiSax supported cards +# +# CONFIG_HISAX_16_0 is not set +# CONFIG_HISAX_16_3 is not set +# CONFIG_HISAX_TELESPCI is not set +# CONFIG_HISAX_S0BOX is not set +CONFIG_HISAX_AVM_A1=y +CONFIG_HISAX_FRITZPCI=y +# CONFIG_HISAX_AVM_A1_PCMCIA is not set +# CONFIG_HISAX_ELSA is not set +# CONFIG_HISAX_IX1MICROR2 is not set +# CONFIG_HISAX_DIEHLDIVA is not set +# CONFIG_HISAX_ASUSCOM is not set +# CONFIG_HISAX_TELEINT is not set +# CONFIG_HISAX_HFCS is not set +# CONFIG_HISAX_SEDLBAUER is not set +# CONFIG_HISAX_SPORTSTER is not set +# CONFIG_HISAX_MIC is not set +# CONFIG_HISAX_NETJET is not set +# CONFIG_HISAX_NETJET_U is not set +# CONFIG_HISAX_NICCY is not set +# CONFIG_HISAX_ISURF is not set +# CONFIG_HISAX_HSTSAPHIR is not set +# CONFIG_HISAX_BKM_A4T is not set +# CONFIG_HISAX_SCT_QUADRO is not set +# CONFIG_HISAX_GAZEL is not set +# CONFIG_HISAX_HFC_PCI is not set +# CONFIG_HISAX_W6692 is not set +# CONFIG_HISAX_HFC_SX is not set +# CONFIG_HISAX_ENTERNOW_PCI is not set +# CONFIG_HISAX_DEBUG is not set + +# +# HiSax PCMCIA card service modules +# + +# +# HiSax sub driver modules +# +# CONFIG_HISAX_ST5481 is not set +# CONFIG_HISAX_HFCUSB is not set +CONFIG_HISAX_FRITZ_PCIPNP=m + +# +# Active cards +# +# CONFIG_ISDN_DRV_ICN is not set +# CONFIG_ISDN_DRV_PCBIT is not set +# CONFIG_ISDN_DRV_SC is not set +# CONFIG_ISDN_DRV_ACT2000 is not set +# CONFIG_ISDN_DRV_TPAM is not set +# CONFIG_HYSDN is not set + +# +# CAPI subsystem +# +CONFIG_ISDN_CAPI=m +CONFIG_ISDN_DRV_AVMB1_VERBOSE_REASON=y +CONFIG_ISDN_CAPI_MIDDLEWARE=y +CONFIG_ISDN_CAPI_CAPI20=m +CONFIG_ISDN_CAPI_CAPIFS_BOOL=y +CONFIG_ISDN_CAPI_CAPIFS=m +CONFIG_ISDN_CAPI_CAPIDRV=m + +# +# CAPI hardware drivers +# + +# +# Active AVM cards +# +# CONFIG_CAPI_AVM is not set + +# +# Active Eicon DIVA Server cards +# +# CONFIG_CAPI_EICON is not set + +# +# Telephony Support +# +# CONFIG_PHONE is not set + +# +# Input device support +# +CONFIG_INPUT=y + +# +# Userland interfaces +# +CONFIG_INPUT_MOUSEDEV=y +CONFIG_INPUT_MOUSEDEV_PSAUX=y +CONFIG_INPUT_MOUSEDEV_SCREEN_X=1024 +CONFIG_INPUT_MOUSEDEV_SCREEN_Y=768 +# CONFIG_INPUT_JOYDEV is not set +# CONFIG_INPUT_TSDEV is not set +# CONFIG_INPUT_EVDEV is not set +# CONFIG_INPUT_EVBUG is not set + +# +# Input I/O drivers +# +# CONFIG_GAMEPORT is not set +CONFIG_SOUND_GAMEPORT=y +CONFIG_SERIO=y +CONFIG_SERIO_I8042=y +CONFIG_SERIO_SERPORT=y +# CONFIG_SERIO_CT82C710 is not set +# CONFIG_SERIO_PARKBD is not set +# CONFIG_SERIO_PCIPS2 is not set +CONFIG_SERIO_LIBPS2=y +# CONFIG_SERIO_RAW is not set + +# +# Input Device Drivers +# +CONFIG_INPUT_KEYBOARD=y +CONFIG_KEYBOARD_ATKBD=y +# CONFIG_KEYBOARD_SUNKBD is not set +# CONFIG_KEYBOARD_LKKBD is not set +# CONFIG_KEYBOARD_XTKBD is not set +# CONFIG_KEYBOARD_NEWTON is not set +CONFIG_INPUT_MOUSE=y +CONFIG_MOUSE_PS2=y +# CONFIG_MOUSE_SERIAL is not set +# CONFIG_MOUSE_INPORT is not set +# CONFIG_MOUSE_LOGIBM is not set +# CONFIG_MOUSE_PC110PAD is not set +# CONFIG_MOUSE_VSXXXAA is not set +# CONFIG_INPUT_JOYSTICK is not set +# CONFIG_INPUT_TOUCHSCREEN is not set +CONFIG_INPUT_MISC=y +CONFIG_INPUT_PCSPKR=m +# CONFIG_INPUT_UINPUT is not set + +# +# Character devices +# +CONFIG_VT=y +CONFIG_VT_CONSOLE=y +CONFIG_HW_CONSOLE=y +# CONFIG_SERIAL_NONSTANDARD is not set + +# +# Serial drivers +# +CONFIG_SERIAL_8250=y +CONFIG_SERIAL_8250_CONSOLE=y +CONFIG_SERIAL_8250_ACPI=y +CONFIG_SERIAL_8250_NR_UARTS=4 +# CONFIG_SERIAL_8250_EXTENDED is not set + +# +# Non-8250 serial port support +# +CONFIG_SERIAL_CORE=y +CONFIG_SERIAL_CORE_CONSOLE=y +CONFIG_UNIX98_PTYS=y +CONFIG_LEGACY_PTYS=y +CONFIG_LEGACY_PTY_COUNT=256 +CONFIG_PRINTER=m +# CONFIG_LP_CONSOLE is not set +# CONFIG_PPDEV is not set +# CONFIG_TIPAR is not set + +# +# IPMI +# +CONFIG_IPMI_HANDLER=m +CONFIG_IPMI_PANIC_EVENT=y +CONFIG_IPMI_PANIC_STRING=y +CONFIG_IPMI_DEVICE_INTERFACE=m +CONFIG_IPMI_SI=m +CONFIG_IPMI_WATCHDOG=m +CONFIG_IPMI_POWEROFF=m + +# +# Watchdog Cards +# +CONFIG_WATCHDOG=y +# CONFIG_WATCHDOG_NOWAYOUT is not set + +# +# Watchdog Device Drivers +# +CONFIG_SOFT_WATCHDOG=m +# CONFIG_ACQUIRE_WDT is not set +# CONFIG_ADVANTECH_WDT is not set +# CONFIG_ALIM1535_WDT is not set +# CONFIG_ALIM7101_WDT is not set +# CONFIG_SC520_WDT is not set +# CONFIG_EUROTECH_WDT is not set +# CONFIG_IB700_WDT is not set +# CONFIG_WAFER_WDT is not set +# CONFIG_I8XX_TCO is not set +# CONFIG_SC1200_WDT is not set +# CONFIG_SCx200_WDT is not set +# CONFIG_60XX_WDT is not set +# CONFIG_CPU5_WDT is not set +# CONFIG_W83627HF_WDT is not set +# CONFIG_W83877F_WDT is not set +# CONFIG_MACHZ_WDT is not set + +# +# ISA-based Watchdog Cards +# +# CONFIG_PCWATCHDOG is not set +# CONFIG_MIXCOMWD is not set +# CONFIG_WDT is not set + +# +# PCI-based Watchdog Cards +# +# CONFIG_PCIPCWATCHDOG is not set +# CONFIG_WDTPCI is not set + +# +# USB-based Watchdog Cards +# +# CONFIG_USBPCWATCHDOG is not set +CONFIG_HW_RANDOM=y +CONFIG_NVRAM=y +CONFIG_RTC=y +# CONFIG_DTLK is not set +# CONFIG_R3964 is not set +# CONFIG_APPLICOM is not set +# CONFIG_SONYPI is not set + +# +# Ftape, the floppy tape device driver +# +# CONFIG_FTAPE is not set +CONFIG_AGP=m +# CONFIG_AGP_ALI is not set +# CONFIG_AGP_ATI is not set +# CONFIG_AGP_AMD is not set +# CONFIG_AGP_AMD64 is not set +CONFIG_AGP_INTEL=m +# CONFIG_AGP_INTEL_MCH is not set +# CONFIG_AGP_NVIDIA is not set +# CONFIG_AGP_SIS is not set +# CONFIG_AGP_SWORKS is not set +# CONFIG_AGP_VIA is not set +# CONFIG_AGP_EFFICEON is not set +CONFIG_DRM=m +# CONFIG_DRM_TDFX is not set +# CONFIG_DRM_R128 is not set +# CONFIG_DRM_RADEON is not set +# CONFIG_DRM_I810 is not set +CONFIG_DRM_I830=m +# CONFIG_DRM_I915 is not set +# CONFIG_DRM_MGA is not set +# CONFIG_DRM_SIS is not set +# CONFIG_MWAVE is not set +# CONFIG_RAW_DRIVER is not set +CONFIG_HPET=y +# CONFIG_HPET_RTC_IRQ is not set +CONFIG_HPET_MMAP=y +CONFIG_HANGCHECK_TIMER=y + +# +# I2C support +# +CONFIG_I2C=m +CONFIG_I2C_CHARDEV=m + +# +# I2C Algorithms +# +CONFIG_I2C_ALGOBIT=m +# CONFIG_I2C_ALGOPCF is not set +CONFIG_I2C_ALGOPCA=m + +# +# I2C Hardware Bus support +# +# CONFIG_I2C_ALI1535 is not set +# CONFIG_I2C_ALI1563 is not set +# CONFIG_I2C_ALI15X3 is not set +# CONFIG_I2C_AMD756 is not set +# CONFIG_I2C_AMD8111 is not set +# CONFIG_I2C_ELEKTOR is not set +CONFIG_I2C_I801=m +CONFIG_I2C_I810=m +CONFIG_I2C_ISA=m +# CONFIG_I2C_NFORCE2 is not set +# CONFIG_I2C_PARPORT is not set +# CONFIG_I2C_PARPORT_LIGHT is not set +CONFIG_I2C_PIIX4=m +# CONFIG_I2C_PROSAVAGE is not set +# CONFIG_I2C_SAVAGE4 is not set +# CONFIG_SCx200_ACB is not set +# CONFIG_I2C_SIS5595 is not set +# CONFIG_I2C_SIS630 is not set +# CONFIG_I2C_SIS96X is not set +CONFIG_I2C_STUB=m +# CONFIG_I2C_VIA is not set +# CONFIG_I2C_VIAPRO is not set +# CONFIG_I2C_VOODOO3 is not set +CONFIG_I2C_PCA_ISA=m + +# +# Hardware Sensors Chip support +# +CONFIG_I2C_SENSOR=m +CONFIG_SENSORS_ADM1021=m +CONFIG_SENSORS_ADM1025=m +CONFIG_SENSORS_ADM1026=m +CONFIG_SENSORS_ADM1031=m +CONFIG_SENSORS_ASB100=m +CONFIG_SENSORS_DS1621=m +CONFIG_SENSORS_FSCHER=m +CONFIG_SENSORS_GL518SM=m +CONFIG_SENSORS_IT87=m +CONFIG_SENSORS_LM63=m +CONFIG_SENSORS_LM75=m +CONFIG_SENSORS_LM77=m +CONFIG_SENSORS_LM78=m +CONFIG_SENSORS_LM80=m +CONFIG_SENSORS_LM83=m +CONFIG_SENSORS_LM85=m +CONFIG_SENSORS_LM87=m +CONFIG_SENSORS_LM90=m +CONFIG_SENSORS_MAX1619=m +CONFIG_SENSORS_PC87360=m +CONFIG_SENSORS_SMSC47B397=m +CONFIG_SENSORS_SMSC47M1=m +CONFIG_SENSORS_VIA686A=m +CONFIG_SENSORS_W83781D=m +CONFIG_SENSORS_W83L785TS=m +CONFIG_SENSORS_W83627HF=m + +# +# Other I2C Chip support +# +CONFIG_SENSORS_EEPROM=m +CONFIG_SENSORS_PCF8574=m +CONFIG_SENSORS_PCF8591=m +CONFIG_SENSORS_RTC8564=m +# CONFIG_I2C_DEBUG_CORE is not set +# CONFIG_I2C_DEBUG_ALGO is not set +# CONFIG_I2C_DEBUG_BUS is not set +# CONFIG_I2C_DEBUG_CHIP is not set + +# +# Dallas's 1-wire bus +# +# CONFIG_W1 is not set + +# +# Misc devices +# +# CONFIG_IBM_ASM is not set + +# +# Multimedia devices +# +# CONFIG_VIDEO_DEV is not set + +# +# Digital Video Broadcasting Devices +# +# CONFIG_DVB is not set + +# +# Graphics support +# +# CONFIG_FB is not set +# CONFIG_VIDEO_SELECT is not set + +# +# Console display driver support +# +CONFIG_VGA_CONSOLE=y +# CONFIG_MDA_CONSOLE is not set +CONFIG_DUMMY_CONSOLE=y + +# +# Sound +# +CONFIG_SOUND=y + +# +# Advanced Linux Sound Architecture +# +CONFIG_SND=y +CONFIG_SND_TIMER=y +CONFIG_SND_PCM=y +# CONFIG_SND_SEQUENCER is not set +CONFIG_SND_OSSEMUL=y +CONFIG_SND_MIXER_OSS=y +CONFIG_SND_PCM_OSS=y +# CONFIG_SND_RTCTIMER is not set +# CONFIG_SND_VERBOSE_PRINTK is not set +# CONFIG_SND_DEBUG is not set + +# +# Generic devices +# +# CONFIG_SND_DUMMY is not set +# CONFIG_SND_MTPAV is not set +# CONFIG_SND_SERIAL_U16550 is not set +# CONFIG_SND_MPU401 is not set + +# +# ISA devices +# +# CONFIG_SND_AD1816A is not set +# CONFIG_SND_AD1848 is not set +# CONFIG_SND_CS4231 is not set +# CONFIG_SND_CS4232 is not set +# CONFIG_SND_CS4236 is not set +# CONFIG_SND_ES968 is not set +# CONFIG_SND_ES1688 is not set +# CONFIG_SND_ES18XX is not set +# CONFIG_SND_GUSCLASSIC is not set +# CONFIG_SND_GUSEXTREME is not set +# CONFIG_SND_GUSMAX is not set +# CONFIG_SND_INTERWAVE is not set +# CONFIG_SND_INTERWAVE_STB is not set +# CONFIG_SND_OPTI92X_AD1848 is not set +# CONFIG_SND_OPTI92X_CS4231 is not set +# CONFIG_SND_OPTI93X is not set +# CONFIG_SND_SB8 is not set +# CONFIG_SND_SB16 is not set +# CONFIG_SND_SBAWE is not set +# CONFIG_SND_WAVEFRONT is not set +# CONFIG_SND_ALS100 is not set +# CONFIG_SND_AZT2320 is not set +# CONFIG_SND_CMI8330 is not set +# CONFIG_SND_DT019X is not set +# CONFIG_SND_OPL3SA2 is not set +# CONFIG_SND_SGALAXY is not set +# CONFIG_SND_SSCAPE is not set + +# +# PCI devices +# +CONFIG_SND_AC97_CODEC=y +# CONFIG_SND_ALI5451 is not set +# CONFIG_SND_ATIIXP is not set +# CONFIG_SND_ATIIXP_MODEM is not set +# CONFIG_SND_AU8810 is not set +# CONFIG_SND_AU8820 is not set +# CONFIG_SND_AU8830 is not set +# CONFIG_SND_AZT3328 is not set +# CONFIG_SND_BT87X is not set +# CONFIG_SND_CS46XX is not set +# CONFIG_SND_CS4281 is not set +# CONFIG_SND_EMU10K1 is not set +# CONFIG_SND_EMU10K1X is not set +# CONFIG_SND_CA0106 is not set +# CONFIG_SND_KORG1212 is not set +# CONFIG_SND_MIXART is not set +# CONFIG_SND_NM256 is not set +# CONFIG_SND_RME32 is not set +# CONFIG_SND_RME96 is not set +# CONFIG_SND_RME9652 is not set +# CONFIG_SND_HDSP is not set +# CONFIG_SND_TRIDENT is not set +# CONFIG_SND_YMFPCI is not set +# CONFIG_SND_ALS4000 is not set +# CONFIG_SND_CMIPCI is not set +# CONFIG_SND_ENS1370 is not set +# CONFIG_SND_ENS1371 is not set +# CONFIG_SND_ES1938 is not set +# CONFIG_SND_ES1968 is not set +# CONFIG_SND_MAESTRO3 is not set +# CONFIG_SND_FM801 is not set +# CONFIG_SND_ICE1712 is not set +# CONFIG_SND_ICE1724 is not set +CONFIG_SND_INTEL8X0=y +# CONFIG_SND_INTEL8X0M is not set +# CONFIG_SND_SONICVIBES is not set +# CONFIG_SND_VIA82XX is not set +# CONFIG_SND_VIA82XX_MODEM is not set +# CONFIG_SND_VX222 is not set + +# +# USB devices +# +# CONFIG_SND_USB_AUDIO is not set +# CONFIG_SND_USB_USX2Y is not set + +# +# Open Sound System +# +# CONFIG_SOUND_PRIME is not set + +# +# USB support +# +CONFIG_USB=m +# CONFIG_USB_DEBUG is not set + +# +# Miscellaneous USB options +# +CONFIG_USB_DEVICEFS=y +# CONFIG_USB_BANDWIDTH is not set +# CONFIG_USB_DYNAMIC_MINORS is not set +# CONFIG_USB_SUSPEND is not set +# CONFIG_USB_OTG is not set +CONFIG_USB_ARCH_HAS_HCD=y +CONFIG_USB_ARCH_HAS_OHCI=y + +# +# USB Host Controller Drivers +# +CONFIG_USB_EHCI_HCD=m +# CONFIG_USB_EHCI_SPLIT_ISO is not set +# CONFIG_USB_EHCI_ROOT_HUB_TT is not set +# CONFIG_USB_OHCI_HCD is not set +CONFIG_USB_UHCI_HCD=m +# CONFIG_USB_SL811_HCD is not set + +# +# USB Device Class drivers +# +# CONFIG_USB_AUDIO is not set +# CONFIG_USB_BLUETOOTH_TTY is not set +# CONFIG_USB_MIDI is not set +# CONFIG_USB_ACM is not set +CONFIG_USB_PRINTER=m + +# +# NOTE: USB_STORAGE enables SCSI, and 'SCSI disk support' may also be needed; see USB_STORAGE Help for more information +# +CONFIG_USB_STORAGE=m +# CONFIG_USB_STORAGE_DEBUG is not set +CONFIG_USB_STORAGE_RW_DETECT=y +# CONFIG_USB_STORAGE_DATAFAB is not set +# CONFIG_USB_STORAGE_FREECOM is not set +# CONFIG_USB_STORAGE_ISD200 is not set +# CONFIG_USB_STORAGE_DPCM is not set +# CONFIG_USB_STORAGE_HP8200e is not set +# CONFIG_USB_STORAGE_SDDR09 is not set +# CONFIG_USB_STORAGE_SDDR55 is not set +# CONFIG_USB_STORAGE_JUMPSHOT is not set + +# +# USB Input Devices +# +CONFIG_USB_HID=m +CONFIG_USB_HIDINPUT=y +# CONFIG_HID_FF is not set +CONFIG_USB_HIDDEV=y + +# +# USB HID Boot Protocol drivers +# +# CONFIG_USB_KBD is not set +# CONFIG_USB_MOUSE is not set +# CONFIG_USB_AIPTEK is not set +# CONFIG_USB_WACOM is not set +# CONFIG_USB_KBTAB is not set +# CONFIG_USB_POWERMATE is not set +# CONFIG_USB_MTOUCH is not set +# CONFIG_USB_EGALAX is not set +# CONFIG_USB_XPAD is not set +# CONFIG_USB_ATI_REMOTE is not set + +# +# USB Imaging devices +# +# CONFIG_USB_MDC800 is not set +# CONFIG_USB_MICROTEK is not set + +# +# USB Multimedia devices +# +# CONFIG_USB_DABUSB is not set + +# +# Video4Linux support is needed for USB Multimedia device support +# + +# +# USB Network Adapters +# +# CONFIG_USB_CATC is not set +# CONFIG_USB_KAWETH is not set +# CONFIG_USB_PEGASUS is not set +# CONFIG_USB_RTL8150 is not set +# CONFIG_USB_USBNET is not set + +# +# USB port drivers +# +# CONFIG_USB_USS720 is not set + +# +# USB Serial Converter support +# +CONFIG_USB_SERIAL=m +CONFIG_USB_SERIAL_GENERIC=y +# CONFIG_USB_SERIAL_BELKIN is not set +# CONFIG_USB_SERIAL_WHITEHEAT is not set +# CONFIG_USB_SERIAL_DIGI_ACCELEPORT is not set +# CONFIG_USB_SERIAL_CYPRESS_M8 is not set +# CONFIG_USB_SERIAL_EMPEG is not set +# CONFIG_USB_SERIAL_FTDI_SIO is not set +CONFIG_USB_SERIAL_VISOR=m +# CONFIG_USB_SERIAL_IPAQ is not set +# CONFIG_USB_SERIAL_IR is not set +# CONFIG_USB_SERIAL_EDGEPORT is not set +# CONFIG_USB_SERIAL_EDGEPORT_TI is not set +# CONFIG_USB_SERIAL_GARMIN is not set +# CONFIG_USB_SERIAL_IPW is not set +# CONFIG_USB_SERIAL_KEYSPAN_PDA is not set +# CONFIG_USB_SERIAL_KEYSPAN is not set +# CONFIG_USB_SERIAL_KLSI is not set +# CONFIG_USB_SERIAL_KOBIL_SCT is not set +# CONFIG_USB_SERIAL_MCT_U232 is not set +CONFIG_USB_SERIAL_PL2303=m +# CONFIG_USB_SERIAL_SAFE is not set +# CONFIG_USB_SERIAL_TI is not set +# CONFIG_USB_SERIAL_CYBERJACK is not set +# CONFIG_USB_SERIAL_XIRCOM is not set +# CONFIG_USB_SERIAL_OMNINET is not set + +# +# USB Miscellaneous drivers +# +# CONFIG_USB_EMI62 is not set +# CONFIG_USB_EMI26 is not set +# CONFIG_USB_AUERSWALD is not set +# CONFIG_USB_RIO500 is not set +# CONFIG_USB_LEGOTOWER is not set +# CONFIG_USB_LCD is not set +# CONFIG_USB_LED is not set +# CONFIG_USB_CYTHERM is not set +# CONFIG_USB_PHIDGETKIT is not set +# CONFIG_USB_PHIDGETSERVO is not set +# CONFIG_USB_IDMOUSE is not set +# CONFIG_USB_TEST is not set + +# +# USB ATM/DSL drivers +# + +# +# USB Gadget Support +# +# CONFIG_USB_GADGET is not set + +# +# MMC/SD Card support +# +# CONFIG_MMC is not set + +# +# InfiniBand support +# +# CONFIG_INFINIBAND is not set + +# +# File systems +# +CONFIG_EXT2_FS=y +# CONFIG_EXT2_FS_XATTR is not set +CONFIG_EXT3_FS=y +CONFIG_EXT3_FS_XATTR=y +# CONFIG_EXT3_FS_POSIX_ACL is not set +# CONFIG_EXT3_FS_SECURITY is not set +CONFIG_JBD=y +# CONFIG_JBD_DEBUG is not set +CONFIG_FS_MBCACHE=y +# CONFIG_REISERFS_FS is not set +# CONFIG_JFS_FS is not set + +# +# XFS support +# +# CONFIG_XFS_FS is not set +# CONFIG_MINIX_FS is not set +# CONFIG_ROMFS_FS is not set +CONFIG_QUOTA=y +# CONFIG_QFMT_V1 is not set +# CONFIG_QFMT_V2 is not set +CONFIG_QUOTACTL=y +CONFIG_DNOTIFY=y +# CONFIG_AUTOFS_FS is not set +CONFIG_AUTOFS4_FS=y + +# +# CD-ROM/DVD Filesystems +# +CONFIG_ISO9660_FS=m +CONFIG_JOLIET=y +CONFIG_ZISOFS=y +CONFIG_ZISOFS_FS=m +CONFIG_UDF_FS=m +CONFIG_UDF_NLS=y + +# +# DOS/FAT/NT Filesystems +# +CONFIG_FAT_FS=m +CONFIG_MSDOS_FS=m +CONFIG_VFAT_FS=m +CONFIG_FAT_DEFAULT_CODEPAGE=850 +CONFIG_FAT_DEFAULT_IOCHARSET="iso8859-1" +# CONFIG_NTFS_FS is not set + +# +# Pseudo filesystems +# +CONFIG_PROC_FS=y +CONFIG_PROC_KCORE=y +CONFIG_SYSFS=y +# CONFIG_DEVFS_FS is not set +# CONFIG_DEVPTS_FS_XATTR is not set +CONFIG_TMPFS=y +CONFIG_TMPFS_XATTR=y +# CONFIG_TMPFS_SECURITY is not set +# CONFIG_HUGETLBFS is not set +# CONFIG_HUGETLB_PAGE is not set +CONFIG_RAMFS=y + +# +# Miscellaneous filesystems +# +# CONFIG_ADFS_FS is not set +# CONFIG_AFFS_FS is not set +# CONFIG_HFS_FS is not set +# CONFIG_HFSPLUS_FS is not set +# CONFIG_BEFS_FS is not set +# CONFIG_BFS_FS is not set +# CONFIG_EFS_FS is not set +# CONFIG_CRAMFS is not set +# CONFIG_VXFS_FS is not set +# CONFIG_HPFS_FS is not set +# CONFIG_QNX4FS_FS is not set +# CONFIG_SYSV_FS is not set +CONFIG_UFS_FS=m +# CONFIG_UFS_FS_WRITE is not set + +# +# Network File Systems +# +# CONFIG_NFS_FS is not set +# CONFIG_NFSD is not set +# CONFIG_SMB_FS is not set +# CONFIG_CIFS is not set +# CONFIG_NCP_FS is not set +# CONFIG_CODA_FS is not set +# CONFIG_AFS_FS is not set + +# +# Partition Types +# +# CONFIG_PARTITION_ADVANCED is not set +CONFIG_MSDOS_PARTITION=y + +# +# Native Language Support +# +CONFIG_NLS=y +CONFIG_NLS_DEFAULT="iso8859-1" +CONFIG_NLS_CODEPAGE_437=m +# CONFIG_NLS_CODEPAGE_737 is not set +# CONFIG_NLS_CODEPAGE_775 is not set +CONFIG_NLS_CODEPAGE_850=m +# CONFIG_NLS_CODEPAGE_852 is not set +# CONFIG_NLS_CODEPAGE_855 is not set +# CONFIG_NLS_CODEPAGE_857 is not set +# CONFIG_NLS_CODEPAGE_860 is not set +# CONFIG_NLS_CODEPAGE_861 is not set +# CONFIG_NLS_CODEPAGE_862 is not set +# CONFIG_NLS_CODEPAGE_863 is not set +# CONFIG_NLS_CODEPAGE_864 is not set +# CONFIG_NLS_CODEPAGE_865 is not set +# CONFIG_NLS_CODEPAGE_866 is not set +# CONFIG_NLS_CODEPAGE_869 is not set +# CONFIG_NLS_CODEPAGE_936 is not set +# CONFIG_NLS_CODEPAGE_950 is not set +# CONFIG_NLS_CODEPAGE_932 is not set +# CONFIG_NLS_CODEPAGE_949 is not set +# CONFIG_NLS_CODEPAGE_874 is not set +# CONFIG_NLS_ISO8859_8 is not set +# CONFIG_NLS_CODEPAGE_1250 is not set +# CONFIG_NLS_CODEPAGE_1251 is not set +# CONFIG_NLS_ASCII is not set +CONFIG_NLS_ISO8859_1=m +# CONFIG_NLS_ISO8859_2 is not set +# CONFIG_NLS_ISO8859_3 is not set +# CONFIG_NLS_ISO8859_4 is not set +# CONFIG_NLS_ISO8859_5 is not set +# CONFIG_NLS_ISO8859_6 is not set +# CONFIG_NLS_ISO8859_7 is not set +# CONFIG_NLS_ISO8859_9 is not set +# CONFIG_NLS_ISO8859_13 is not set +# CONFIG_NLS_ISO8859_14 is not set +CONFIG_NLS_ISO8859_15=m +# CONFIG_NLS_KOI8_R is not set +# CONFIG_NLS_KOI8_U is not set +CONFIG_NLS_UTF8=m + +# +# Profiling support +# +# CONFIG_PROFILING is not set + +# +# Kernel hacking +# +CONFIG_DEBUG_KERNEL=y +CONFIG_MAGIC_SYSRQ=y +# CONFIG_SCHEDSTATS is not set +# CONFIG_DEBUG_SLAB is not set +# CONFIG_DEBUG_PREEMPT is not set +# CONFIG_DEBUG_SPINLOCK is not set +# CONFIG_DEBUG_SPINLOCK_SLEEP is not set +# CONFIG_DEBUG_KOBJECT is not set +CONFIG_DEBUG_BUGVERBOSE=y +# CONFIG_DEBUG_INFO is not set +# CONFIG_DEBUG_FS is not set +# CONFIG_FRAME_POINTER is not set +CONFIG_EARLY_PRINTK=y +# CONFIG_DEBUG_STACKOVERFLOW is not set +# CONFIG_KPROBES is not set +# CONFIG_DEBUG_STACK_USAGE is not set +# CONFIG_DEBUG_PAGEALLOC is not set +CONFIG_4KSTACKS=y +CONFIG_X86_FIND_SMP_CONFIG=y +CONFIG_X86_MPPARSE=y + +# +# Security options +# +# CONFIG_KEYS is not set +CONFIG_SECURITY=y +# CONFIG_SECURITY_NETWORK is not set +CONFIG_SECURITY_CAPABILITIES=m +# CONFIG_SECURITY_ROOTPLUG is not set +CONFIG_SECURITY_SECLVL=m +# CONFIG_SECURITY_SELINUX is not set + +# +# Cryptographic options +# +CONFIG_CRYPTO=y +CONFIG_CRYPTO_HMAC=y +CONFIG_CRYPTO_NULL=m +CONFIG_CRYPTO_MD4=m +CONFIG_CRYPTO_MD5=m +CONFIG_CRYPTO_SHA1=m +CONFIG_CRYPTO_SHA256=m +CONFIG_CRYPTO_SHA512=m +CONFIG_CRYPTO_WP512=m +CONFIG_CRYPTO_DES=m +CONFIG_CRYPTO_BLOWFISH=m +CONFIG_CRYPTO_TWOFISH=m +CONFIG_CRYPTO_SERPENT=m +CONFIG_CRYPTO_AES_586=m +CONFIG_CRYPTO_CAST5=m +CONFIG_CRYPTO_CAST6=m +CONFIG_CRYPTO_TEA=m +CONFIG_CRYPTO_ARC4=m +CONFIG_CRYPTO_KHAZAD=m +CONFIG_CRYPTO_ANUBIS=m +CONFIG_CRYPTO_DEFLATE=m +CONFIG_CRYPTO_MICHAEL_MIC=m +CONFIG_CRYPTO_CRC32C=m +CONFIG_CRYPTO_TEST=m + +# +# Hardware crypto devices +# +# CONFIG_CRYPTO_DEV_PADLOCK is not set + +# +# Library routines +# +CONFIG_CRC_CCITT=m +CONFIG_CRC32=m +CONFIG_LIBCRC32C=m +CONFIG_ZLIB_INFLATE=m +CONFIG_ZLIB_DEFLATE=m +CONFIG_GENERIC_HARDIRQS=y +CONFIG_GENERIC_IRQ_PROBE=y +CONFIG_X86_BIOS_REBOOT=y +CONFIG_PC=y diff --git a/noc/patches/linux-2.6.11.5-sinabox.diff b/noc/patches/linux-2.6.11.5-sinabox.diff new file mode 100644 index 0000000..7b175af --- /dev/null +++ b/noc/patches/linux-2.6.11.5-sinabox.diff @@ -0,0 +1,26281 @@ +diff -urN linux-2.6.11/arch/ppc/oprofile/op_model_fsl_booke.c linux.sinabox/arch/ppc/oprofile/op_model_fsl_booke.c +--- linux-2.6.11/arch/ppc/oprofile/op_model_fsl_booke.c 2005-03-02 08:38:33.000000000 +0100 ++++ linux.sinabox/arch/ppc/oprofile/op_model_fsl_booke.c 2005-03-19 07:35:05.000000000 +0100 +@@ -150,7 +150,6 @@ + int is_kernel; + int val; + int i; +- unsigned int cpu = smp_processor_id(); + + /* set the PMM bit (see comment below) */ + mtmsr(mfmsr() | MSR_PMM); +@@ -162,7 +161,7 @@ + val = ctr_read(i); + if (val < 0) { + if (oprofile_running && ctr[i].enabled) { +- oprofile_add_sample(pc, is_kernel, i, cpu); ++ oprofile_add_pc(pc, is_kernel, i); + ctr_write(i, reset_value[i]); + } else { + ctr_write(i, 0); +diff -urN linux-2.6.11/arch/ppc/platforms/4xx/ebony.h linux.sinabox/arch/ppc/platforms/4xx/ebony.h +--- linux-2.6.11/arch/ppc/platforms/4xx/ebony.h 2005-03-02 08:38:18.000000000 +0100 ++++ linux.sinabox/arch/ppc/platforms/4xx/ebony.h 2005-03-19 07:35:01.000000000 +0100 +@@ -61,8 +61,8 @@ + */ + + /* OpenBIOS defined UART mappings, used before early_serial_setup */ +-#define UART0_IO_BASE (u8 *) 0xE0000200 +-#define UART1_IO_BASE (u8 *) 0xE0000300 ++#define UART0_IO_BASE 0xE0000200 ++#define UART1_IO_BASE 0xE0000300 + + /* external Epson SG-615P */ + #define BASE_BAUD 691200 +diff -urN linux-2.6.11/arch/ppc/platforms/4xx/luan.h linux.sinabox/arch/ppc/platforms/4xx/luan.h +--- linux-2.6.11/arch/ppc/platforms/4xx/luan.h 2005-03-02 08:38:13.000000000 +0100 ++++ linux.sinabox/arch/ppc/platforms/4xx/luan.h 2005-03-19 07:35:00.000000000 +0100 +@@ -47,9 +47,9 @@ + #define RS_TABLE_SIZE 3 + + /* PIBS defined UART mappings, used before early_serial_setup */ +-#define UART0_IO_BASE (u8 *) 0xa0000200 +-#define UART1_IO_BASE (u8 *) 0xa0000300 +-#define UART2_IO_BASE (u8 *) 0xa0000600 ++#define UART0_IO_BASE 0xa0000200 ++#define UART1_IO_BASE 0xa0000300 ++#define UART2_IO_BASE 0xa0000600 + + #define BASE_BAUD 11059200 + #define STD_UART_OP(num) \ +diff -urN linux-2.6.11/arch/ppc/platforms/4xx/ocotea.h linux.sinabox/arch/ppc/platforms/4xx/ocotea.h +--- linux-2.6.11/arch/ppc/platforms/4xx/ocotea.h 2005-03-02 08:38:08.000000000 +0100 ++++ linux.sinabox/arch/ppc/platforms/4xx/ocotea.h 2005-03-19 07:34:56.000000000 +0100 +@@ -56,8 +56,8 @@ + #define RS_TABLE_SIZE 2 + + /* OpenBIOS defined UART mappings, used before early_serial_setup */ +-#define UART0_IO_BASE (u8 *) 0xE0000200 +-#define UART1_IO_BASE (u8 *) 0xE0000300 ++#define UART0_IO_BASE 0xE0000200 ++#define UART1_IO_BASE 0xE0000300 + + #define BASE_BAUD 11059200/16 + #define STD_UART_OP(num) \ +diff -urN linux-2.6.11/conf.vars linux.sinabox/conf.vars +--- linux-2.6.11/conf.vars 1970-01-01 01:00:00.000000000 +0100 ++++ linux.sinabox/conf.vars 2005-03-27 04:28:13.000000000 +0200 +@@ -0,0 +1,9 @@ ++VERSION = 2 ++PATCHLEVEL = 6 ++SUBLEVEL = 11 ++EXTRAVERSION = .5 ++KPKG_SELECTED_MODULES = ++Debian Revision = 10.00.Custom ++KPKG_ARCH = ++do_parallel = ++fast_dep = +diff -urN linux-2.6.11/debian/buildinfo linux.sinabox/debian/buildinfo +--- linux-2.6.11/debian/buildinfo 1970-01-01 01:00:00.000000000 +0100 ++++ linux.sinabox/debian/buildinfo 2005-03-24 19:40:43.000000000 +0100 +@@ -0,0 +1,21 @@ ++gcc-3.3.5-1 ++gcc-2.95-2.95.4-22 ++gcc-3.0-base-3.0.4-16 ++gcc-3.2-3.2.3-9 ++gcc-3.2-base-3.2.3-9 ++gcc-3.3-3.3.5-12 ++gcc-3.3-base-3.3.5-12 ++gcc-3.4-base-3.4.3-12 ++perl-5.8.4-8 ++dpkg-1.10.27 ++libc6-2.3.2.ds1-20 ++libc6-dev-2.3.2.ds1-20 ++binutils-2.15-5 ++ldso-1.9.11-15 ++make-3.80-9 ++dpkg-dev-1.10.27 ++this was built on a machine with the kernel: ++Linux marwin 2.6.11-rc4n #1 SMP Tue Feb 15 13:50:10 CET 2005 i686 GNU/Linux ++using the compiler: ++gcc version 3.3.5 (Debian 1:3.3.5-12) ++applied kernel patches: +diff -urN linux-2.6.11/debian/changelog linux.sinabox/debian/changelog +--- linux-2.6.11/debian/changelog 1970-01-01 01:00:00.000000000 +0100 ++++ linux.sinabox/debian/changelog 2005-03-24 19:30:47.000000000 +0100 +@@ -0,0 +1,451 @@ ++kernel-source-2.6.11.5 (10.00.Custom) unstable; urgency=low ++ ++ * Added support for netwinders ++ * Modified modules support to not assume everything in /usr/src/modules ++ is a directory. ++ ++ -- Manoj Srivastava Wed, 25 Nov 1998 01:39:43 -0600 ++ ++kernel-source-0.34 (1.01) unstable; urgency=low ++ ++ * This is a major change in the source/header packages. In architectures ++ different from i386, `kernel-headers-*' and `kernel-source-*' are ++ incompatible. This also has an effect on libc6-dev, which depends on ++ kernel-headers-2.0.3x | kernel-source-2.0.3x, which is only true on ++ i386 architectures. One possible solution would be to make libc6-dev ++ depend on kernel-headers-2.0.32, but that won't work because ++ kernel-source provides kernel-headers. In fact, since kernel-headers ++ are arch dependent, but kernel-source is arch: all, kernel-source-* ++ should not provide kernel-header* at all. ++ ++ Once kernel source stops providing kernel-header*, and libc6-dev ++ depends on kernel-headers-2.0.32 and links /usr/include/{linux,asm} to ++ /usr/src/kernel-headers-2.0.32 (nor /usr/src/linux-2.0.32) things ++ would work again in a Multi arch compatible fashion. ++ ++ Hence, now kernel-source-* packages compiled with this kernel-package ++ shall not provide any sort of kernel-headers. For the sake of ++ backwards compatibility, /usr/src/linux-$version symlinks are still ++ being provided (as people may upload newer kernels while keeping an ++ older libc6-dev around, which depends on /usr/src/linux-2.0.32. ++ ++ However, I have been badgered enough about this that I shall remove ++ the /usr/src/linux-$version symlinks at some point. This version no ++ longer registers stuff in /usr/src/.linux-versions, and is no longer ++ as paranoid about /usr/src/linux; but it does not outright remove ++ those files either, so as not to cause people with older kernels ++ having a problem during removal.As soon as it is deemed permissible, ++ we shall get less paranoid about /usr/src/linux-$version as well. ++ * closes: Bug#18277 ++ ++ -- Manoj Srivastava Wed, 18 Feb 1998 16:44:31 -0600 ++ ++kernel-source-0.33 (1.01) unstable; urgency=low ++ ++ * Added SUBARCH, which is used to distinguish Amiga, Atari, Macintosh, ++ etc. kernels for Debian/m68k, and may well be required for the alpha, ++ from what I hear. Unlike the FLAVOURS variable, which affects ++ everything it can lay its grubby hands on (kernel image, headers, ++ source, doc package versions, and where the modules are looked for ++ under /lib/modules), this only affects the naming of the kernel-image ++ as the source and doc packages are architecture independent and the ++ kernel-headers do not vary from one sub-architecture to the ++ next. These changes are courtesy of James Troup ++ ++ -- Manoj Srivastava Mon, 16 Feb 1998 16:47:08 -0600 ++ ++kernel-source-0.32 (1.01) unstable; urgency=low ++ ++ * Ensure that the /usr/src/linux and /usr/src/linux- links ++ always exist, no matter what. Apparently, upgrading from ++ kernel-source-2.0.32_2.0.32-1 to kernel-source-2.0.32_2.0.32-3 does ++ not create /usr/src/linux-, which breaks libc6-dev. ++ * Toned down the language about LILO, so as not to startle new sparc users ++ ++ -- Manoj Srivastava Thu, 12 Feb 1998 21:56:50 -0600 ++ ++kernel-source-0.31 (1.01) unstable; urgency=low ++ ++ * Added ARCH to make called, this allows for cross compiling kernels ++ (added on a request by James Troup ) ++ * Make kernel-headers arch: any, so we can indeed have different headers ++ for different architectures. ++ * m68k can now handle vmlinuz, so reverse that behaviour in the rules ++ file. AFAIK m68k still uses zImage. ++ * Improvements to /usr/doc/kernel-patch/MultiArch.gz, based on ++ suggestions by James Troup / ++ ++ -- Manoj Srivastava Mon, 9 Feb 1998 17:11:05 -0600 ++ ++kernel-source-0.30 (1.01) unstable; urgency=low ++ ++ * Redid the Headers README file ++ * Added a rationale to the LinkPolicy document. So far, it detailed ++ *what* Debian did. Now, it also says *why* we do it. ++ ++ -- Manoj Srivastava Thu, 29 Jan 1998 19:13:58 -0600 ++ ++kernel-source-0.29 (1.01) unstable; urgency=low ++ ++ * Important changes for kernel-source-* and kernel-header-* packages: now ++ kernel-source-* packages also provide the exact kernel-header-* (libc6 ++ need only depend on kernel-header-* now. ++ * The kernel-header-* and kernel-source-* packages now also maitain the ++ /usr/src/linux-X.YY.ZZ links (in addition to the /usr/src/linux links) ++ This is used in the libc6 package. ++ ++ -- Manoj Srivastava Sat, 13 Dec 1997 12:46:47 -0600 ++ ++ ++kernel-source-0.28 (1.01) unstable; urgency=low ++ ++ * Fixed a typo where we tried to dd /vmlinuz-2.0.32 rather than the ++ correct /boot/vmlinuz-2.0.32 in image.postinst. How come this glaring ++ an error has gone unreported until now? ++ ++ -- Manoj Srivastava Fri, 23 Jan 1998 14:36:34 -0600 ++ ++kernel-source-0.27 (1.01) unstable; urgency=low ++ ++ * Fixed Typo in kernel rules that put all modules into block (this ++ is more of a thinko/cut and paste error. fixes: Bug#16697,Bug#16702 ++ * No longer a fatal error if there is no /vmlinuz (or ++ equivalent). fixes: Bug#16899 ++ * Added language to the abort on /usr/src/linux not being a ++ link. ++ * Documented the fact that if you re-run make-kpkg with a different ++ revision number, you have to reconfigure the kernel. ++ fixes: Bug#16968 ++ * ignore obsolete fdformat in favour of superformat. ++ * Changed the kernel rules file not break on the sound modules of ++ 2.1.70+ kernels (I think it is a bug in the kernel Makefile, but this ++ fix make make-kpkg handle the problem and be more robust). ++ * Modified image.postinst to also cater to people on whose architecture ++ the image is not called vmlinuz but something else (like vmlinux, for ++ example). closes:Bug#16258 ++ * Made the postrm's also know about the kernel versrion, not just the ++ postinst. (Sorry). closes:Bug#15920 ++ * Changed include.postrm to be more careful about removing the symbolic ++ link /usr/src/linux-X.Y.Z. Keep track if there is another package ++ installed that could provide the link. ++ ++ -- Manoj Srivastava Wed, 21 Jan 1998 03:27:35 -0600 ++ ++kernel-source-0.26 (1.01) unstable; urgency=low ++ ++ * Added HAM modules to the module we know about, these were introduced ++ in 2.1.70. ++ ++ -- Manoj Srivastava Tue, 9 Dec 1997 23:27:04 -0600 ++ ++kernel-source-0.25 (1.01) unstable; urgency=low ++ ++ * Ignore unmounted devices while looking for a root file system. Much ++ thanks to Thomas Kocourek for noticing ++ this. ++ * Make sure that the copyright file for the kernel-doc package is not ++ compressed. closes:Bug#14403,Bug#14405 ++ * Added internal utility kpkg-vercheck to test the validity of the ++ package version. ++ ++ -- Manoj Srivastava Mon, 10 Nov 1997 10:37:08 -0600 ++ ++kernel-source-0.24 (1.01) unstable; urgency=low ++ ++ * Install the README.headers in the right place for the source ++ package. closes:Bug#14552. ++ * Handle the new NLS_MODULES that have appeared in the newest 2.1.6x ++ kernels. closes:Bug#14527. ++ ++ -- Manoj Srivastava Wed, 5 Nov 1997 23:30:48 -0600 ++ ++kernel-source-0.23 (1.-0) unstable; urgency=low ++ ++ * Added README.headers to the kernel-source package as well, since the ++ information _is_ relevant to compiling kernels. Since kernel source ++ packages have higher visibility than kernel header packages, this may ++ help avoid some FAQs from being asked. ++ * Changed image postinst not to use the obsolete -d option to ++ superformat. Removed extra spaces from the exec option, so that it is ++ more likely to work. Noticed by Joost Kooij ++ * Note that the proposed two level versioning scheme fails if standard ++ kernels use epochs. Further note that one may introduce epochs even in ++ custom kernels. ++ ++ -- Manoj Srivastava Thu, 23 Oct 1997 12:19:51 -0500 ++ ++kernel-source-0.22 (1.01) unstable; urgency=low ++ ++ * Handle obsolete /System.map and /System.old links left around by older ++ kernel-package packages. All the programs that look at the information ++ in the map files (including top, ps, and klogd) also will look at ++ /boot/System.map-, we just need to ensure that that file is ++ present, and no longer require the symbolic link. ++ Actually, having the symbolic link in / is technically detrimental ++ (apart from cluttering up /); many programs, though looking in /boot, ++ still allow /System.map to override. If you use LILO to choose between ++ multiple kernels, then the /System.map symbolic link only applies to ++ one such kernel, for all other choices the symbols loaded will be ++ wrong. Not having the symbolic links at all prevents this. ++ Therefore, the new image.postinst file shall offer to remove the ++ symbolic links in /. This should fix BUG#13359 ++ ++ -- Manoj Srivastava Fri, 26 Sep 1997 10:44:39 -0500 ++ ++kernel-source-0.21 (1.01) unstable; urgency=low ++ ++ * Fixed handling of modules.dep in the image.postinst. We do not attempt ++ to recreate a modules.dep, since the man page admits the file so ++ created may be incorrect. We warn the installer that there maybe ++ problems loading modules into the kernel until reboot iff the version ++ being installed is the same as the version currently running. ++ ++ -- Manoj Srivastava Tue, 16 Sep 1997 15:07:02 -0500 ++ ++kernel-source-0.20 (1.01) unstable; urgency=low ++ ++ * No longer create a System.map symlink in /, since that may confuse ++ klogd when choosing kernel images using LILO. Since top, ps, and klogd ++ look at /boot/System.map-, we just need to make sure that ++ file is present. This makes us friendlier to multiple images of the ++ same kernel version. ++ * No longer redirect output to a file in /tmp for security reasons (we ++ use a log file in /var/log instead). This fixes BUG#11765, ++ BUG#11766 and BUG#11847 ++ * Added support for different flavours of the same kernel version for ++ people who need them. This is based on the ideas and work of Bill ++ Mitchell and Noel Maddy . ++ This should make us fully compliant to having multiple flavours of the ++ same kernel version. ++ * Added dependencies to targets in rules. Now things should work as ++ expected if one edits a .config file. ++ * Fixed destination for the Buildinfo file. This fixes BUG#11884. ++ ++ -- Manoj Srivastava Mon, 4 Aug 1997 13:03:51 -0500 ++ ++kernel-source-0.19 (1.01) unstable; urgency=low ++ ++ * All kernel packages produced now list the version of kernel-package ++ used in the file /usr/doc/Buildinfo. ++ * The image prerm will allow you to remove an running kernel image and ++ hose your system. You will be warned. (under protest). ++ * Fixed typo in control file for kernel-doc description. This fixes ++ Bug#11568. ++ ++ -- Manoj Srivastava Tue, 29 Jul 1997 17:47:41 -0500 ++ ++kernel-source-0.18 (1.01) unstable; urgency=low ++ ++ * No longer carries around an extra uncompressed kernel image, and does ++ not anymore create /boot/psdatabase-X.X.XX. The psdatabase file does ++ not seem to be required anymore. ++ ++ -- Manoj Srivastava Wed, 18 Jun 1997 13:05:33 -0500 ++ ++kernel-source-0.17 (1.01) unstable; urgency=low ++ ++ * Added patches to support m68k from "Frank Neumann" ++ . ++ * Added patched to support sparcs from Eric Delaunay ++ ++ ++ -- Manoj Srivastava Mon, 2 Jun 1997 15:17:59 -0500 ++ ++kernel-source-0.16 (1.01) unstable; urgency=low ++ ++ * Moved config to /boot, where it arguably should have gone to in the ++ first place. The /boot directory contains other information pertinent ++ to the kernel, such as the System.map file, and the psdatabase. The ++ information about exactly what was configured into the kernel was ++ missing, and it can get quite critical on some machines. Also, the ++ config file may serve as a base for compiling the next kernel. This ++ file is not really a configuration file (not when packaged as part of ++ the kernel-image package), hence it does not belong in /etc (no amout ++ of changing this file will have any affet on system behaviour). ++ ++ -- Manoj Srivastava Wed, 21 May 1997 01:44:17 -0500 ++ ++kernel-source-0.15 (1.01) unstable; urgency=low ++ ++ * Kernel-image and kernel-doc now suggest each other. ++ * Also recognize powerpc as a synonym for ppc in determining whether ++ we use zImage or bzImage by default. ++ * Fixed up some typos in documentation ++ * Added rules target kernel_doc. This fixes BUG#9138 ++ * Also install .config file under /usr/doc. This fixes BUG#9298 ++ ++ -- Manoj Srivastava Fri, 2 May 1997 14:34:51 -0500 ++ ++kernel-source-0.14 (1.01) unstable; urgency=low ++ ++ * No longer install text files in the modules directory, since depmod ++ in modutils-2.1.34 fails when it finds a non-ELF file in modules ++ directory. This fixes Bug#9243. ++ ++ -- Manoj Srivastava Wed, 30 Apr 1997 15:24:51 -0500 ++ ++kernel-source-0.13 (1.01) unstable; urgency=low ++ ++ * Really add in all the changes sent in by Herbert Xu. The changes are: ++ * Changed to source package name back to kernel-source-2.6.11.5 again. ++ * Changed the installs to be without -o root -g root since it is no ++ longer useful as the chowns are done before the packages are built. It ++ also means that if it is used in targets like stamp-configure which may ++ be run by anyone it won't not generate an error. ++ * Made rules file generate the control file. ++ * Fixed some typos in chown commands while generating the header ++ packages. ++ ++ -- Manoj Srivastava Mon, 21 Apr 1997 15:12:19 -0500 ++ ++ kernel-source-0.12 (1.01) unstable; urgency=low ++ ++ * Forgot to mention that the source package for the kernel packages ++ (produced by make-kpkg buildpackage, for example) has been changed to ++ not contain the kernel version as part of the name (all the deb files ++ produced have not changed), so we now get kernel-image-xxx_yy_zz.deb, ++ kernel-source-xxx_yy_zz.deb, and kernel-headers-xxx_yy_zz.deb, along ++ with kernel-source.tar.gz and kernel-source_yy.diff.gz ++ * Added changes from the kernel packages maintainer (this is the ++ kernel-packages maintainer speaking, Herbert Xu handles the kernel ++ image, headers, and source packages at the moment). ++ ++ -- Manoj Srivastava Sun, 13 Apr 1997 00:03:36 -0500 ++ ++ kernel-source-0.11 (1.01) unstable; urgency=low ++ ++ * set umask to copy the kernel source files untainted by package creators ++ umask. ++ * set umask to copy the kernel header files untainted by package creators ++ umask. ++ ++ -- Manoj Srivastava Tuesday, 1 Apr 1997 11:04:42 -0600 ++ ++ kernel-source-0.10 (1.01) unstable; urgency=low ++ ++ * image postinst no longer aborts when the user gives up on formatting a ++ floppy, but is offered a choice to proceed with a preformatted floppy. ++ * Fixed spelling errors in kernel image postinst ++ * Offer to user superformat if it exists. ++ * Tested boot floppy creation. ++ * Tested on 2.0.29, 2.1.29, and 2.1.30 ++ * Mention setfdprm in postinst if fail to format floppy. ++ * Fix a typo in code determining which floppy drive to use ++ * Allow leading whitespace in responses ++ ++ -- Manoj Srivastava Sun, 23 Mar 1997 22:53:13 -0600 ++ ++kernel-source-0.9 (1.01) unstable; urgency=low ++ ++ n Stupid @#$%$%@! vi changed Feb to February in the changelog messing up ++ gencontrol. ++ ++ -- Manoj Srivastava Mon, 17 Feb 1997 19:29:02 -0600 ++ ++kernel-source-0.8 (1.01) unstable; urgency=low ++ ++ * Removed extra root checks ++ * Added error messages to failed root check ++ ++ -- Manoj Srivastava Thursday, 13 February 1997 14:47:06 -0600 ++ ++kernel-source-0.7 (1.01) unstable; urgency=low ++ ++ * Fixed kernel rules file so that one does not depend on the existence of modules ++ ++ -- Manoj Srivastava Tuesday, 28 January 1997 22:15:27 -0600 ++ ++kernel-source-0.6 (1.01) unstable; urgency=low ++ ++ * changed priority of kernel-source package to optional ++ * changed priority of kernel-image package to optional ++ ++ -- Manoj Srivastava Fri, 22 Nov 1996 11:02:31 -0600 ++ ++ ++kernel-source-0.5 (1.01) unstable; urgency=low ++ ++ * kernel-source-X.XX now no longer recommends bin86, since bin86 is only ++ available intel platforms. It now merely mentions it in the ++ description. ++ ++ -- Manoj Srivastava Thu, 7 Nov 1996 22:17:47 -0600 ++ ++kernel-source-0.4 (1.01) unstable; urgency=low ++ ++ * kernel-source-X.XX now recommends bin86, which fixes Bug#4443 ++ * Added short, succinct (and potentially dangerous) instructions on ++ compiling kernels at the top of the README file. This fixes Bug#4445. ++ ++ -- Manoj Srivastava Wed, 6 Nov 1996 23:59:47 -0600 ++ ++kernel-source-0.3 (1.01) unstable; urgency=low ++ ++ * Changed everything to new packaging standards. ++ * Major re-organization. ++ * Added explanation for kernel-headers-X.XX (and why we need this ++ package inspite of having headers in libc5-dev) ++ * Added README files for all packages (the old README files became ++ copyright files). ++ * Added target for buildpackage (wich needed a hack in the target clean ++ so as not to remove the ./debian directory prematurely) ++ ++ -- Manoj Srivastava Tue, 5 Nov 1996 22:42:12 -0600 ++ ++kernel-source-0.2 (1.01) unstable; urgency=low ++ ++ * Made image.postinst more polite. ++ * Also enabled kernel-{source,image,headers} targets in kernel.rules ++ * Changed make-kpkg to also accept the new targets. ++ * Fixed typo in man page. ++ * The man page says it is an administrators man page rather than a ++ programmers man page. ++ * Recommended libc-dev for kernel-source and kernel-package ++ * source suggests ncurses3.0-dev, tk40-dev and the description explains ++ you could use make menuconfig rather than plain old make config if you ++ had these packages. ++ * Fixed typo in the rules for modules in /usr/src/modules/ directory ++ * Made the rules for such modules ignore errors (since they are not ++ really a part of this package, error there should not halt this build ++ (or so people seem to want it) ++ * Look for modules in the kernel config file (or the default config file ++ if the user has not supplied a config file), and only make modules and ++ install them if modules have been configured in the config file. This ++ could be tested better. ++ * Fixed the make-kpkg.8 man page so that it now does not seem to mandate ++ a source and diff file for additional modules installed under the ++ directory /usr/src/modules/ (whether these files are produced is at ++ the discretion of the maintainer of that modules package. ++ * Make configure depend on stamp-configure which in turn depends on ++ .config Hopefully, this will remake the image target if one changes ++ the config file Hopefully, this will not cause the image target to ++ build needlessly. ++ ++ -- Manoj Srivastava ++ ++kernel-source-0.1 (1.01) unstable; urgency=low ++ ++ * Changed the scripts to refer to /usr/bin/perl rather than /bin/perl. ++ * Added an extended description to the image control file. ++ * Added a note that the dist target requires a PGP key. ++ * Fixed a typo (missing DEBDIR) in debian.rules. ++ * Fixed the targets expected by make-kpkg (kernel_image rather than ++ kernel-image, etc). ++ * In image.postinst, made arguments to system be a single argument if ++ the arguments contain shell meta-characters, (this way perl passes ++ them to sh -c). ++ * Made make-kpkg accept non floats as revision numbers, to facilitate ++ local names. ++ * Fixed silly bug in makefloppy in image.postinst. ++ * Fixed the extended description of the kernel-package package. ++ * Updated the image postinst to install the mbr, if it exists, and to ++ activate the root partition, and to not overwrite the mbr (oops). ++ * Changed maintainer email address to debian.org (I'll be in a state of ++ flux soon) ++ ++ ++ -- Manoj Srivastava ++ ++Local variables: ++mode: debian-changelog ++End: +diff -urN linux-2.6.11/debian/control linux.sinabox/debian/control +--- linux-2.6.11/debian/control 1970-01-01 01:00:00.000000000 +0100 ++++ linux.sinabox/debian/control 2005-03-24 19:30:47.000000000 +0100 +@@ -0,0 +1,115 @@ ++Source: kernel-source-2.6.11.5 ++Section: devel ++Priority: optional ++Maintainer: Unknown Kernel Package Maintainer ++Standards-Version: 3.5.9.0 ++ ++Package: kernel-headers-2.6.11.5 ++Architecture: any ++Section: devel ++Priority: optional ++Provides: kernel-headers, kernel-headers-2.6 ++Description: Header files related to Linux kernel version 2.6.11.5 ++ This package provides kernel header files for version 2.6.11.5, for sites ++ that want the latest kernel headers. Please read ++ /usr/share/doc/kernel-headers-2.6.11.5/debian.README.gz for details ++ ++Package: kernel-source-2.6.11.5 ++Architecture: all ++Section: devel ++Priority: optional ++Provides: kernel-source, kernel-source-2.6 ++Depends: binutils, bzip2 ++Recommends: libc-dev, gcc, make ++Suggests: libncurses-dev | ncurses-dev, kernel-package ++Description: Linux kernel source for version 2.6.11.5 ++ This package provides the source code for the Linux kernel version 2.6.11.5. ++ . ++ You may configure the kernel to your setup by typing "make config" ++ and following instructions, but you could get ncursesX.X-dev and try ++ "make menuconfig" for a jazzier, and easier to use interface. There ++ are options to use QT or GNOME based configuration interfaces, but they ++ need additional packages to be installed. Also, please read the detailed ++ documentation in the file ++ /usr/share/doc/kernel-source-2.6.11.5/README.headers.gz. ++ . ++ If you wish to use this package to create a custom Linux kernel, then ++ it is suggested that you investigate the package kernel-package, ++ which has been designed to ease the task of creating kernel image ++ packages. ++ ++Package: kernel-image-2.6.11.5 ++Architecture: i386 ++Section: base ++Priority: optional ++Provides: kernel-image, kernel-image-2.6 ++Depends: coreutils | fileutils (>= 4.0) ++Suggests: lilo (>= 19.1) | grub, fdutils, kernel-doc-2.6.11.5 | kernel-source-2.6.11.5 ++Description: Linux kernel binary image for version 2.6.11.5. ++ This package contains the Linux kernel image for version 2.6.11.5, ++ the corresponding System.map file, and the modules built by the ++ packager. It also contains scripts that try to ensure that the ++ system is not left in a unbootable state after an update. ++ . ++ If you wish to update a bootdisk, or to use a bootloader to make ++ installing and using the image easier, we suggest you install the latest ++ fdutils (for formatting a floppy to be used as boot disk), and LILO, for a ++ powerful bootloader. Of course, both these are optional. ++ . ++ Kernel image packages are generally produced using kernel-package, ++ and it is suggested that you install that package if you wish to ++ create a custom kernel from the sources. Please look at kernel-img.conf(5), ++ and /usr/share/doc/kernel-package/README.gz from the package kernel-package ++ for details on how to tailor the installation of this or any other kernel ++ image package ++ ++Package: kernel-doc-2.6.11.5 ++Architecture: all ++Section: doc ++Priority: optional ++Provides: kernel-doc-2.6 ++Suggests: kernel-image-2.6.11.5 ++Description: Linux kernel specific documentation for version 2.6.11.5. ++ This package provides various Readme's in the 2.6.11.5 kernel ++ Documentation/ subdirectory: these typically contain kernel-specific ++ installation notes for some drivers. for example. Please see ++ /usr/share/doc/kernel-doc-X.X.XX/Documentation/00-INDEX for a list of ++ contents. Please also read the Changes file, as it contains ++ information about the problems which may result by upgrading your ++ kernel. ++ ++Package: kernel-uml-2.6.11.5 ++Architecture: i386 ++Section: base ++Priority: optional ++Provides: kernel-uml, kernel-uml-2.6, user-mode-linux ++Depends: coreutils | fileutils (>= 4.0) ++Suggests: lilo (>= 19.1) | grub, fdutils, kernel-doc-2.6.11.5 | kernel-source-2.6.11.5, uml-utilities ++Conflicts: user-mode-linux (>= 2.0) ++Replaces: user-mode-linux ++Description: Linux uml kernel binary image for version 2.6.11.5. ++ This package contains the Linux uml kernel image for version 2.6.11.5 ++ and the modules built by the packager. ++ ++Package: kernel-xen0-2.6.11.5 ++Architecture: i386 ++Section: base ++Priority: optional ++Provides: kernel-xen0, kernel-xen0-2.6 ++Depends: coreutils | fileutils (>= 4.0) ++Suggests: lilo (>= 19.1) | grub, fdutils, kernel-doc-2.6.11.5 | kernel-source-2.6.11.5 ++Description: Linux xen kernel binary image for version 2.6.11.5. ++ This package contains the Linux xen kernel image for version 2.6.11.5 ++ and the modules built by the packager. ++ ++Package: kernel-xenu-2.6.11.5 ++Architecture: i386 ++Section: base ++Priority: optional ++Provides: kernel-xenu, kernel-xenu-2.6 ++Depends: coreutils | fileutils (>= 4.0) ++Suggests: lilo (>= 19.1) | grub, fdutils, kernel-doc-2.6.11.5 | kernel-source-2.6.11.5 ++Description: Linux xen kernel binary image for version 2.6.11.5. ++ This package contains the Linux xen kernel image for version 2.6.11.5 ++ and the modules built by the packager. ++ +diff -urN linux-2.6.11/debian/files linux.sinabox/debian/files +--- linux-2.6.11/debian/files 1970-01-01 01:00:00.000000000 +0100 ++++ linux.sinabox/debian/files 2005-03-27 04:28:23.000000000 +0200 +@@ -0,0 +1 @@ ++kernel-image-2.6.11.5_10.00.Custom_i386.deb base optional +diff -urN linux-2.6.11/debian/rules linux.sinabox/debian/rules +--- linux-2.6.11/debian/rules 1970-01-01 01:00:00.000000000 +0100 ++++ linux.sinabox/debian/rules 2005-03-20 07:41:15.000000000 +0100 +@@ -0,0 +1,2596 @@ ++#! /usr/bin/make -f ++############################ -*- Mode: Makefile -*- ########################### ++## debian.rules --- ++## Author : Manoj Srivastava ( srivasta@pilgrim.umass.edu ) ++## Created On : Sat Apr 27 06:36:31 1996 ++## Created On Node : melkor.pilgrim.umass.edu ++## Last Modified By : Manoj Srivastava ++## Last Modified On : Sat Mar 19 23:09:13 2005 ++## Last Machine Used: glaurung.internal.golden-gryphon.com ++## Update Count : 776 ++## Status : Unknown, Use with caution! ++## HISTORY : ++## Description : ++## arch-tag: aa70d4e5-79bf-405c-95ec-5fa9f7ae7b69 ++############################################################################### ++ ++DPKG_ARCH := dpkg-architecture ++ ++ifeq ($(strip $(KPKG_ARCH)),um) ++ MAKING_VIRTUAL_IMAGE:=YES ++endif ++ifeq ($(strip $(KPKG_ARCH)),xen) ++ MAKING_VIRTUAL_IMAGE:=YES ++endif ++ ++ifdef KPKG_ARCH ++ ifeq ($(strip $(MAKING_VIRTUAL_IMAGE)),) ++ ha:=-a$(KPKG_ARCH) ++ endif ++endif ++ ++# set the dpkg-architecture vars ++export DEB_BUILD_ARCH := $(shell $(DPKG_ARCH) $(ha) -qDEB_BUILD_ARCH) ++export DEB_BUILD_GNU_CPU := $(shell $(DPKG_ARCH) $(ha) -qDEB_BUILD_GNU_CPU) ++export DEB_BUILD_GNU_TYPE := $(shell $(DPKG_ARCH) $(ha) -qDEB_BUILD_GNU_TYPE) ++export DEB_HOST_ARCH := $(shell $(DPKG_ARCH) $(ha) -qDEB_HOST_ARCH) ++export DEB_HOST_GNU_CPU := $(shell $(DPKG_ARCH) $(ha) -qDEB_HOST_GNU_CPU) ++export DEB_HOST_GNU_SYSTEM := $(shell $(DPKG_ARCH) $(ha) -qDEB_HOST_GNU_SYSTEM) ++export DEB_HOST_GNU_TYPE := $(shell $(DPKG_ARCH) $(ha) -qDEB_HOST_GNU_TYPE) ++export DEB_BUILD_GNU_SYSTEM:= $(shell $(DPKG_ARCH) $(ha) -qDEB_BUILD_GNU_SYSTEM) ++ ++# ++# VERSION=$(shell LC_ALL=C dpkg-parsechangelog | grep ^Version: | \ ++# sed 's/^Version: *//') ++# ++ ++# The version of kernel-package this belongs to ++kpkg_version := 8.129 ++ ++# The maintainer information. ++maintainer = Debian Kernel Team ++email= debian-kernel@lists.debian.org ++ ++pgp=$(maintainer) ++ ++# Where we read our config information from ++CONFLOC :=$(shell if test -f ~/.kernel-pkg.conf; then\ ++ echo ~/.kernel-pkg.conf; \ ++ else \ ++ echo /etc/kernel-pkg.conf; \ ++ fi) ++# Where the package libs are stored ++LIBLOC :=/usr/share/kernel-package ++# Default location of the modules ++ifeq ($(strip $(MODULE_LOC)),) ++MODULE_LOC =/usr/src/modules ++endif ++# ++DEBDIR = $(LIBLOC) ++DEBDIR_NAME = $(shell basename $(DEBDIR)) ++ ++DEBIAN_FILES = kernel_version.mk config kpkg-vercheck Control Control.bin86 rules \ ++ README README.grub README.headers README.tecra README.modules \ ++ sample.module.control Flavours Rationale copyright.source \ ++ README.Debian src.postinst README.source include.postinst \ ++ copyright.headers README.headers README.doc copyright.doc \ ++ src.postinst image.postinst image.postrm image.preinst image.prerm \ ++ xen.postinst xen.prerm um.postinst um.prerm linux.1 $(loaderdoc) \ ++ README.image copyright.image ++DEBIAN_DIRS = Config ++ ++# Package specific stuff ++# decide if image is meant to be in /boot rather than / ++link_in_boot := ++# Can we use symlinks? ++no_symlink := ++# If so, where is the real file (usually, vmlinuz-X.X.X is real, and ++# vmlinuz is the link, this variable reverses it. ++reverse_symlink := ++ ++# The version numbers for kernel-image, kernel-headers and ++# kernel-source are deduced from the Makefile (see below, ++# and footnote 1 for details) ++ ++# Whether to look for and install kernel patches by default. ++# Be very careful if you do this. ++patch_the_kernel := AUTO ++ ++# do not create libc headers by default ++make_libc_headers := NO ++ ++# run make clean after build ++do_clean := NO ++ ++# install uncompressed kernel ELF-image (for oprofile) ++int_install_vmlinux := NO ++ ++# what kernel config target to run in our configure target. ++config_target := oldconfig ++ ++ ++# The default architecture (all if architecture independent) ++CROSS_ARG:= ++ ++ifdef KPKG_ARCH ++ architecture:=$(KPKG_ARCH) ++else ++ #architecture:=$(shell CC=$(HOSTCC) dpkg --print-gnu-build-architecture) ++ architecture:=$(DEB_HOST_ARCH) ++endif ++ ++ifndef CROSS_COMPILE ++ ifeq ($(strip $(MAKING_VIRTUAL_IMAGE)),) ++ ifneq ($(strip $(architecture)),$(strip $(DEB_BUILD_ARCH))) ++ KERNEL_CROSS:=$(architecture)-$(strip $(DEB_HOST_GNU_SYSTEM))- ++ endif ++ endif ++else ++ KERNEL_CROSS:=$(CROSS_COMPILE)- ++endif ++ ++KERNEL_CROSS:=$(shell echo $(KERNEL_CROSS) | sed -e 's,--$$,-,') ++ ++ifneq ($(strip $(KERNEL_CROSS)),) ++ CROSS_ARG:=CROSS_COMPILE=$(KERNEL_CROSS) ++endif ++ ++KERNEL_ARCH:=$(architecture) ++DEBCONFIG = $(CONFDIR)/config ++IMAGEDIR=/boot ++INT_IMAGE_DESTDIR=debian/tmp-image$(IMAGEDIR) ++ ++ ++ ++comma:= , ++empty:= ++space:= $(empty) $(empty) ++ ++# Install rules ++install_file= install -p -o root -g root -m 644 ++install_program= install -p -o root -g root -m 755 ++make_directory= install -p -d -o root -g root -m 755 ++deb_rule = $(MAKE) -f $(DEBDIR)/rules ++ ++ ++# localversion_files := $(wildcard localversion*) ++# VERSION =$(shell grep -E '^VERSION +=' Makefile 2>/dev/null | \ ++# sed -e 's/[^0-9]*\([0-9]*\)/\1/') ++# PATCHLEVEL =$(shell grep -E '^PATCHLEVEL +=' Makefile 2>/dev/null | \ ++# sed -e 's/[^0-9]*\([0-9]*\)/\1/') ++# SUBLEVEL =$(shell grep -E '^SUBLEVEL +=' Makefile 2>/dev/null | \ ++# sed -e 's/[^0-9]*\([0-9]*\)/\1/') ++# EXTRA_VERSION =$(shell grep -E '^EXTRAVERSION +=' Makefile 2>/dev/null | \ ++# sed -e 's/EXTRAVERSION *= *\([^ \t]*\)/\1/') ++# LOCALVERSION = $(subst $(space),, $(shell cat /dev/null $(localversion_files)) \ ++# $(CONFIG_LOCALVERSION)) ++ ++# Could have used :=, but some patches do seem to patch the ++# Makefile. perhaps deferring the rule makes that better ++VERSION :=$(shell $(MAKE) $(CROSS_ARG) --no-print-directory -sf $(DEBDIR)/kernel_version.mk debian_VERSION) ++PATCHLEVEL :=$(shell $(MAKE) $(CROSS_ARG) --no-print-directory -sf $(DEBDIR)/kernel_version.mk debian_PATCHLEVEL) ++SUBLEVEL :=$(shell $(MAKE) $(CROSS_ARG) --no-print-directory -sf $(DEBDIR)/kernel_version.mk debian_SUBLEVEL) ++EXTRA_VERSION:=$(shell $(MAKE) $(CROSS_ARG) --no-print-directory -sf $(DEBDIR)/kernel_version.mk debian_EXTRAVERSION) ++LOCALVERSION :=$(shell $(MAKE) $(CROSS_ARG) --no-print-directory -sf $(DEBDIR)/kernel_version.mk debian_LOCALVERSION) ++ ++ ++ ++HAVE_NEW_MODLIB =$(shell grep -E '\(INSTALL_MOD_PATH\)' Makefile 2>/dev/null ) ++ ++ifneq ($(strip $(EXTRA_VERSION)),) ++HAS_ILLEGAL_EXTRA_VERSION =$(shell \ ++ perl -e '$$i="$(EXTRA_VERSION)"; $$i !~ m/^[a-z\.\-\+][a-z\d\.\-\+]*$$/o && print YES;') ++ ifneq ($(strip $(HAS_ILLEGAL_EXTRA_VERSION)),) ++ $(error Error: The EXTRAVERSION may only contain lowercase alphanumerics \ ++ and the characters - + . The current value is: $(EXTRA_VERSION). Aborting.) ++ endif ++endif ++ ++AM_OFFICIAL := $(shell if [ -f debian/official ]; then echo YES; fi ) ++ ++###################################################################### ++### Architecture specific stuff ### ++###################################################################### ++# Each architecture has the following specified for it ++# (a) The kernel image type (i.e. zImage or bzImage) ++# (b) The dependency on a loader, if any ++# (c) The name of the loader ++# (d) The name of the documentation file for the loader ++# (e) The build target ++# (f) The location of the kernelimage source ++# (g) The location of the kernelimage destination ++# (h) The name of the arch specific configuration file ++# Some architectures has sub architectures ++ ++### m68k ++ifeq ($(strip $(architecture)),m68k) ++ ifeq (,$(findstring /$(KPKG_SUBARCH)/,/amiga/atari/mac/mvme147/mvme16x/bvme6000/)) ++ GUESS_SUBARCH:=$(shell awk '/Model/ { print $$2}' /proc/hardware) ++ ifneq (,$(findstring Motorola,$(GUESS_SUBARCH))) ++ GUESS_SUBARCH:=$(shell awk '/Model/ { print $$3}' /proc/hardware) ++ ifneq (,$(findstring MVME147,$(GUESS_SUBARCH))) ++ KPKG_SUBARCH:=mvme147 ++ else ++ KPKG_SUBARCH:=mvme16x ++ endif ++ else ++ ifneq (,$(findstring BVME,$(GUESS_SUBARCH))) ++ KPKG_SUBARCH:=bvme6000 ++ else ++ ifneq (,$(findstring Amiga,$(GUESS_SUBARCH))) ++ KPKG_SUBARCH:=amiga ++ else ++ ifneq (,$(findstring Atari,$(GUESS_SUBARCH))) ++ KPKG_SUBARCH:=atari ++ else ++ ifneq (,$(findstring Mac,$(GUESS_SUBARCH))) ++ KPKG_SUBARCH:=mac ++ endif ++ endif ++ endif ++ endif ++ endif ++ endif ++ NEED_DIRECT_GZIP_IMAGE=NO ++ kimage := zImage ++ target = $(kimage) ++ kimagesrc = vmlinux.gz ++ kimagedest = $(INT_IMAGE_DESTDIR)/vmlinuz-$(version) ++ kelfimagesrc = vmlinux ++ kelfimagedest = $(INT_IMAGE_DESTDIR)/vmlinux-$(version) ++ DEBCONFIG = $(CONFDIR)/config.$(KPKG_SUBARCH) ++ ifneq (,$(findstring $(KPKG_SUBARCH),mvme147 mvme16x bvme6000)) ++ loaderdep=vmelilo ++ loader=vmelilo ++ loaderdoc=VmeliloDefault ++ else ++ loaderdep= ++ loader=lilo ++ loaderdoc= ++ endif ++endif ++ ++### ARM ++ifeq ($(strip $(architecture)),arm) ++ GUESS_SUBARCH:='netwinder' ++ ++ ifneq (,$(findstring $(KPKG_SUBARCH),netwinder)) ++ KPKG_SUBARCH:=$(GUESS_SUBARCH) ++ kimage := zImage ++ target = Image ++ kimagesrc = arch/$(KERNEL_ARCH)/boot/Image ++ kimagedest = $(INT_IMAGE_DESTDIR)/vmlinuz-$(version) ++ loaderdep= ++ loader=nettrom ++ loaderdoc= ++ NEED_DIRECT_GZIP_IMAGE=NO ++ DEBCONFIG= $(CONFDIR)/config.netwinder ++ else ++ kimage := zImage ++ target = zImage ++ NEED_DIRECT_GZIP_IMAGE=NO ++ kimagesrc = arch/$(KERNEL_ARCH)/boot/zImage ++ kimagedest = $(INT_IMAGE_DESTDIR)/vmlinuz-$(version) ++ DEBCONFIG = $(CONFDIR)/config.arm ++ endif ++ kelfimagesrc = vmlinux ++ kelfimagedest = $(INT_IMAGE_DESTDIR)/vmlinux-$(version) ++endif ++ ++##### PowerPC64 ++ifeq ($(strip $(architecture)), powerpc64) ++ KERNEL_ARCH=ppc64 ++ kimage := vmlinux ++ loader=NoLoader ++ target = $(kimage) ++ kimagesrc = vmlinux ++ kimagedest = $(INT_IMAGE_DESTDIR)/vmlinux-$(version) ++ DEBCONFIG= $(CONFDIR)/config.$(KPKG_SUBARCH) ++ kelfimagesrc = vmlinux ++ kelfimagedest = $(INT_IMAGE_DESTDIR)/vmlinux-$(version) ++endif ++ ++### PowerPC ++ifneq ($(strip $(filter ppc powerpc,$(architecture))),) ++ ifeq ($(DEB_BUILD_ARCH),powerpc) ++ # This is only meaningful when building on a PowerPC ++ ifeq ($(GUESS_SUBARCH),) ++ GUESS_SUBARCH:=$(shell awk '/machine/ { print $$3}' /proc/cpuinfo) ++ ifneq (,$(findstring Power,$(GUESS_SUBARCH))) ++ GUESS_SUBARCH:=pmac ++ else ++ # At the request of Colin Watson, changed from find string iMac. ++ # Any powerpc system that would contain Mac in /proc/cpuinfo is a ++ # PowerMac system, according to arch/ppc/platforms/* in the kernel source ++ ifneq (,$(findstring Mac,$(GUESS_SUBARCH))) ++ GUESS_SUBARCH:=pmac ++ endif ++ endif ++ else ++ GUESS_SUBARCH:=pmac ++ endif ++ # Well NuBus powermacs are not pmac subarchs, but nubus ones. ++ #ifeq (,$(shell grep NuBus /proc/cpuinfo)) ++ # GUESS_SUBARCH:=nubus ++ #endif ++ endif ++ ++ ifeq (,$(findstring $(KPKG_SUBARCH),apus prpmc chrp mbx pmac prep Amiga APUs CHRP MBX PReP chrp-rs6k nubus )) ++ KPKG_SUBARCH:=$(GUESS_SUBARCH) ++ endif ++ ++ KERNEL_ARCH:=ppc ++ ++ ifneq (,$(findstring $(KPKG_SUBARCH),APUs apus Amiga)) ++ KPKG_SUBARCH:=apus ++ loader := NoLoader ++ kimage := vmapus.gz ++ target = zImage ++ kimagesrc = $(shell if [ -d arch/$(KERNEL_ARCH)/boot/images ]; then \ ++ echo arch/$(KERNEL_ARCH)/boot/images/vmapus.gz ; else \ ++ echo arch/$(KERNEL_ARCH)/boot/$(kimage) ; fi) ++ kimagedest = $(INT_IMAGE_DESTDIR)/vmlinuz-$(version) ++ kelfimagesrc = vmlinux ++ kelfimagedest = $(INT_IMAGE_DESTDIR)/vmlinux-$(version) ++ DEBCONFIG = $(CONFDIR)/config.apus ++ endif ++ ++ ifneq (,$(findstring $(KPKG_SUBARCH),chrp-rs6k)) ++ KPKG_SUBARCH:=chrp-rs6k ++ loaderdep=quik ++ loader=quik ++ loaderdoc=QuikDefault ++ kimage := zImage ++ target = $(kimage) ++ kimagesrc = $(shell if [ -d arch/$(KERNEL_ARCH)/chrpboot ]; then \ ++ echo arch/$(KERNEL_ARCH)/chrpboot/$(kimage) ; else \ ++ echo arch/$(KERNEL_ARCH)/boot/images/$(kimage).chrp-rs6k ; fi) ++ kimagedest = $(INT_IMAGE_DESTDIR)/vmlinuz-$(version) ++ kelfimagesrc = vmlinux ++ kelfimagedest = $(INT_IMAGE_DESTDIR)/vmlinux-$(version) ++ DEBCONFIG = $(CONFDIR)/config.chrp ++ endif ++ ++ ifneq (,$(findstring $(KPKG_SUBARCH),CHRP chrp)) ++ KPKG_SUBARCH:=chrp ++ loaderdep=quik ++ loader=quik ++ loaderdoc=QuikDefault ++ kimage := zImage ++ target = $(kimage) ++ kimagesrc = $(shell if [ -d arch/$(KERNEL_ARCH)/chrpboot ]; then \ ++ echo arch/$(KERNEL_ARCH)/chrpboot/$(kimage) ; else \ ++ echo arch/$(KERNEL_ARCH)/boot/images/$(kimage).chrp ; fi) ++ kimagedest = $(INT_IMAGE_DESTDIR)/vmlinuz-$(version) ++ kelfimagesrc = vmlinux ++ kelfimagedest = $(INT_IMAGE_DESTDIR)/vmlinux-$(version) ++ DEBCONFIG = $(CONFDIR)/config.chrp ++ endif ++ ++ ifneq (,$(findstring $(KPKG_SUBARCH),PRPMC prpmc)) ++ KPKG_SUBARCH:=prpmc ++ loader := NoLoader ++ kimage := zImage ++ target = $(kimage) ++ kimagesrc = arch/$(KERNEL_ARCH)/boot/images/zImage.pplus ++ kimagedest = $(INT_IMAGE_DESTDIR)/vmlinuz-$(version) ++ kelfimagesrc = vmlinux ++ kelfimagedest = $(INT_IMAGE_DESTDIR)/vmlinux-$(version) ++ endif ++ ++ ifneq (,$(findstring $(KPKG_SUBARCH),MBX mbx)) ++ KPKG_SUBARCH:=mbx ++ loader := NoLoader ++ kimage := zImage ++ target = $(kimage) ++ kimagesrc = $(shell if [ -d arch/$(KERNEL_ARCH)/mbxboot ]; then \ ++ echo arch/$(KERNEL_ARCH)/mbxboot/$(kimage) ; else \ ++ echo arch/$(KERNEL_ARCH)/boot/images/zvmlinux.embedded; fi) ++ kimagedest = $(INT_IMAGE_DESTDIR)/vmlinuz-$(version) ++ kelfimagesrc = vmlinux ++ kelfimagedest = $(INT_IMAGE_DESTDIR)/vmlinux-$(version) ++ DEBCONFIG = $(CONFDIR)/config.mbx ++ endif ++ ++ ifneq (,$(findstring $(KPKG_SUBARCH),pmac)) ++ KPKG_SUBARCH:=pmac ++ target := zImage ++ ifeq ($(DEB_BUILD_ARCH),powerpc) ++ # This is only meaningful when building on a PowerPC ++ ifneq (,$(shell grep NewWorld /proc/cpuinfo)) ++ loaderdep=yaboot ++ loader=yaboot ++ #loaderdoc= ++ else ++ loaderdep=quik ++ loader=quik ++ loaderdoc=QuikDefault ++ endif ++ else ++ loaderdep=yaboot ++ loader=yaboot ++ endif ++ kimagesrc = vmlinux ++ kimage := vmlinux ++ kimagedest = $(INT_IMAGE_DESTDIR)/vmlinux-$(version) ++ HAVE_COFF_IMAGE = YES ++ coffsrc = $(shell if [ -d arch/$(KERNEL_ARCH)/coffboot ]; then \ ++ echo arch/$(KERNEL_ARCH)/coffboot/$(kimage).coff ; else \ ++ echo arch/$(KERNEL_ARCH)/boot/images/$(kimage).coff ; fi) ++ coffdest=$(INT_IMAGE_DESTDIR)/vmlinux.coff-$(version) ++ DEBCONFIG = $(CONFDIR)/config.pmac ++ endif ++ ++ ifneq (,$(findstring $(KPKG_SUBARCH),PReP prep)) ++ KPKG_SUBARCH:=prep ++ loader := NoLoader ++ kimage := zImage ++ target = $(kimage) ++ kimagesrc = $(shell if [ -d arch/$(KERNEL_ARCH)/boot/images ]; then \ ++ echo arch/$(KERNEL_ARCH)/boot/images/$(kimage).prep ; else \ ++ echo arch/$(KERNEL_ARCH)/boot/$(kimage) ; fi) ++ kimagedest = $(INT_IMAGE_DESTDIR)/vmlinuz-$(version) ++ kelfimagesrc = vmlinux ++ kelfimagedest = $(INT_IMAGE_DESTDIR)/vmlinux-$(version) ++ DEBCONFIG = $(CONFDIR)/config.prep ++ endif ++ ++ ifneq (,$(findstring $(KPKG_SUBARCH), NuBuS nubus)) ++ KPKG_SUBARCH := nubus ++ target := zImage ++ loader= NoLoader ++ kimagesrc = arch/$(KERNEL_ARCH)/appleboot/Mach\ Kernel ++ kimage := vmlinux ++ kimagedest = $(INT_IMAGE_DESTDIR)/vmlinuz-$(version) ++ endif ++ ++endif ++ ++ ++##### Alpha ++ifeq ($(strip $(architecture)),alpha) ++ kimage := vmlinuz ++ loaderdep= ++ loader=milo ++ loaderdoc= ++ target = boot ++ kimagesrc = arch/$(KERNEL_ARCH)/boot/vmlinux.gz ++ kimagedest = $(INT_IMAGE_DESTDIR)/vmlinuz-$(version) ++ kelfimagesrc = vmlinux ++ kelfimagedest = $(INT_IMAGE_DESTDIR)/vmlinux-$(version) ++ DEBCONFIG = $(CONFDIR)/config.alpha ++endif ++ ++ ++##### Sparc ++ifeq ($(strip $(architecture)),sparc) ++ kimage := vmlinuz ++ loaderdep = silo ++ loader = silo ++ loaderdoc=SiloDefault ++ NEED_DIRECT_GZIP_IMAGE = YES ++ kimagedest = $(INT_IMAGE_DESTDIR)/vmlinuz-$(version) ++ DEBCONFIG = $(CONFDIR)/config.sparc ++ ifeq (,$(APPEND_TO_VERSION)) ++ ARCH_IN_NAME = YES ++ endif ++ ++ ifeq (,$(KPKG_SUBARCH)) ++ ifeq (sparc64,$(strip $(shell uname -m))) ++ KPKG_SUBARCH = sparc64 ++ else ++ KPKG_SUBARCH = sparc32 ++ endif ++ endif ++ ++ ifneq (,$(filter sparc64%,$(KPKG_SUBARCH))) ++ KERNEL_ARCH = sparc64 ++ else ++ ifneq (,$(filter sparc%,$(KPKG_SUBARCH))) ++ KERNEL_ARCH = sparc ++ else ++ KERNEL_ARCH = $(strip $(shell uname -m)) ++ endif ++ endif ++ ++ ifneq ($(shell if [ $(VERSION) -ge 2 ] && [ $(PATCHLEVEL) -ge 5 ] && \ ++ [ $(SUBLEVEL) -ge 41 ]; then echo new; \ ++ elif [ $(VERSION) -ge 2 ] && [ $(PATCHLEVEL) -ge 6 ]; then \ ++ echo new; \ ++ elif [ $(VERSION) -ge 3 ]; then echo new; fi),) ++ target = image ++ kimagesrc = arch/$(KERNEL_ARCH)/boot/image ++ kelfimagesrc = vmlinux ++ kelfimagedest = $(INT_IMAGE_DESTDIR)/vmlinux-$(version) ++ else ++ target = vmlinux ++ kimagesrc = vmlinux ++ endif ++endif ++ ++##### amd64 ++ifeq ($(strip $(architecture)),amd64) ++ KERNEL_ARCH=x86_64 ++ kimage := bzImage ++ loaderdep=lilo (>= 19.1) | grub ++ loader=lilo ++ loaderdoc=LiloDefault ++ target = $(kimage) ++ kimagesrc = $(strip arch/$(KERNEL_ARCH)/boot/$(kimage)) ++ kimagedest = $(INT_IMAGE_DESTDIR)/vmlinuz-$(version) ++ DEBCONFIG= $(CONFDIR)/config.$(KPKG_SUBARCH) ++ kelfimagesrc = vmlinux ++ kelfimagedest = $(INT_IMAGE_DESTDIR)/vmlinux-$(version) ++endif ++ ++ ++##### i386 and such ++ifeq ($(strip $(architecture)),i386) ++ # sub archs can be i386 i486 i586 i686 ++ GUESS_SUBARCH:=$(shell if test -f .config; then \ ++ perl -nle '/^CONFIG_M(.86)=y/ && print "$$1"' .config;\ ++ else \ ++ uname -m;\ ++ fi) ++ ifeq (,$(findstring $(KPKG_SUBARCH),i386 i486 i586 i686)) ++ KPKG_SUBARCH:=$(GUESS_SUBARCH) ++ endif ++ kimage := bzImage ++ loaderdep=lilo (>= 19.1) | grub ++ loader=lilo ++ loaderdoc=LiloDefault ++ target = $(kimage) ++ kimagesrc = $(strip arch/$(KERNEL_ARCH)/boot/$(kimage)) ++ kimagedest = $(INT_IMAGE_DESTDIR)/vmlinuz-$(version) ++ DEBCONFIG= $(CONFDIR)/config.$(KPKG_SUBARCH) ++ kelfimagesrc = vmlinux ++ kelfimagedest = $(INT_IMAGE_DESTDIR)/vmlinux-$(version) ++endif ++ ++##### S/390 ++ifeq ($(strip $(architecture)),s390) ++ # make it possible to build s390x kernels on s390 for 2.4 kernels only ++ # because 2.6 always use s390 as architecture. ++ ifeq (4,$(PATCHLEVEL)) ++ ifeq (,$(findstring $(KPKG_SUBARCH),s390 s390x)) ++ KPKG_SUBARCH = s390 ++ endif ++ KERNEL_ARCH = $(KPKG_SUBARCH) ++ ifneq ($(shell uname -m),$(KPKG_SUBARCH)) ++ UNAME_MACHINE = $(KPKG_SUBARCH) ++ export UNAME_MACHINE ++ endif ++ endif ++ kimage := zimage ++ loaderdep=zipl ++ loader=zipl ++ loaderdoc= ++ target = image ++ NEED_DIRECT_GZIP_IMAGE=NO ++ kimagesrc = $(strip arch/$(KERNEL_ARCH)/boot/$(target)) ++ kimagedest = $(INT_IMAGE_DESTDIR)/vmlinuz-$(version) ++ DEBCONFIG= $(CONFDIR)/config.$(KPKG_SUBARCH) ++ kelfimagesrc = vmlinux ++ kelfimagedest = $(INT_IMAGE_DESTDIR)/vmlinux-$(version) ++endif ++ ++##### hppa ++ifeq ($(strip $(architecture)),hppa) ++ kimage := vmlinux ++ loaderdep=palo ++ loader=palo ++ loaderdoc= ++ target=$(kimage) ++ NEED_DIRECT_GZIP_IMAGE=NO ++ # Override arch name because hppa uses arch/parisc not arch/hppa ++ KERNEL_ARCH := parisc ++ kimagesrc=$(kimage) ++ kimagedest=$(INT_IMAGE_DESTDIR)/vmlinux-$(version) ++ # This doesn't seem to work, but the other archs do it... ++ DEBCONFIG=$(CONFDIR)/config.$(KPKG_SUBARCH) ++endif ++ ++##### ia64 ++ifeq ($(strip $(architecture)),ia64) ++ kimage := vmlinuz ++ loaderdep=elilo ++ loader=elilo ++ loaderdoc= ++ target=compressed ++ NEED_DIRECT_GZIP_IMAGE=NO ++ kimagesrc=vmlinux.gz ++ kimagedest=$(INT_IMAGE_DESTDIR)/vmlinuz-$(version) ++ kelfimagesrc = vmlinux ++ kelfimagedest = $(INT_IMAGE_DESTDIR)/vmlinux-$(version) ++ DEBCONFIG=$(CONFDIR)/config.$(KPKG_SUBARCH) ++endif ++ ++##### mips ++ifeq ($(strip $(architecture)),mips) ++ # SGI ELF32 ++ ifneq (,$(filter r4k-ip22 r5k-ip22 r5k-ip32 r10k-ip32,$(strip $(KPKG_SUBARCH)))) ++ kimage := vmlinux ++ loaderdep = arcboot ++ loader = arcboot ++ loaderdoc = ++ endif ++ # SGI ELF64 ++ ifneq (,$(filter r10k-ip27 r10k-ip28 r10k-ip30,$(strip $(KPKG_SUBARCH)))) ++ kimage := vmlinux.64 ++ loaderdep = arcboot ++ loader = arcboot ++ loaderdoc = ++ endif ++ # Broadcom SWARM ++ ifneq (,$(filter sb1-swarm-bn,$(strip $(KPKG_SUBARCH)))) ++ kimage := vmlinux ++ loaderdep = sibyl ++ loader = sibyl ++ loaderdoc = ++ endif ++ ++ # Default value for e.g. a generic header package ++ ifeq (,$(kimage)) ++ kimage := vmlinux ++ endif ++ ifeq (,$(kimagesrc)) ++ kimagesrc := $(kimage) ++ endif ++ ++ NEED_DIRECT_GZIP_IMAGE = NO ++ kimagesrc = $(kimage) ++ kimagedest = $(INT_IMAGE_DESTDIR)/vmlinux-$(version) ++ ++ ifneq ($(shell if [ $(VERSION) -ge 2 ] && [ $(PATCHLEVEL) -ge 5 ] && \ ++ [ $(SUBLEVEL) -ge 41 ]; then echo new; \ ++ elif [ $(VERSION) -ge 2 ] && [ $(PATCHLEVEL) -ge 6 ]; then \ ++ echo new; \ ++ elif [ $(VERSION) -ge 3 ]; then echo new; fi),) ++ target = ++ else ++ target = boot ++ endif ++ ++ ifneq (,$(filter mips64%,$(KPKG_SUBARCH))) ++ KERNEL_ARCH = mips64 ++ endif ++ ifneq (,$(filter %-64,$(KPKG_SUBARCH))) ++ KERNEL_ARCH = mips64 ++ endif ++endif ++ ++##### mipsel ++ifeq ($(strip $(architecture)),mipsel) ++ # DECstations ++ ifneq (,$(filter r3k-kn02 r4k-kn04,$(strip $(KPKG_SUBARCH)))) ++ kimage := vmlinux ++ kimagesrc = $(kimage) ++ loaderdep = delo ++ loader = delo ++ loaderdoc = ++ endif ++ # Cobalt ++ ifneq (,$(filter r5k-cobalt,$(strip $(KPKG_SUBARCH)))) ++ kimage := vmlinux ++ kimagesrc = $(kimage) ++ loaderdep = colo ++ loader = colo ++ loaderdoc = ++ endif ++ # LASAT ++ ifneq (,$(filter r5k-lasat,$(strip $(KPKG_SUBARCH)))) ++ kimage := vmlinux ++ kimagesrc = $(kimage) ++ loaderdep = ++ loader = ++ loaderdoc = ++ endif ++ # Broadcom SWARM ++ ifneq (,$(filter sb1-swarm-bn,$(strip $(KPKG_SUBARCH)))) ++ kimage := vmlinux ++ kimagesrc = $(kimage) ++ loaderdep = sibyl ++ loader = sibyl ++ loaderdoc = ++ endif ++ # xxs1500 ++ ifneq (,$(filter xxs1500,$(strip $(KPKG_SUBARCH)))) ++ kimage := vmlinux.srec ++ kimagesrc = $(strip arch/$(KERNEL_ARCH)/boot/$(kimage)) ++ loaderdep = ++ loader = ++ loaderdoc = ++ endif ++ ++ # Default value for e.g. a generic header package ++ ifeq (,$(kimage)) ++ kimage := vmlinux ++ endif ++ ++ NEED_DIRECT_GZIP_IMAGE = NO ++ kimagedest = $(INT_IMAGE_DESTDIR)/vmlinux-$(version) ++ ++ ifneq ($(shell if [ $(VERSION) -ge 2 ] && [ $(PATCHLEVEL) -ge 5 ] && \ ++ [ $(SUBLEVEL) -ge 41 ]; then echo new; \ ++ elif [ $(VERSION) -ge 2 ] && [ $(PATCHLEVEL) -ge 6 ]; then \ ++ echo new; \ ++ elif [ $(VERSION) -ge 3 ]; then echo new; fi),) ++ target = ++ else ++ target = boot ++ endif ++ ++ KERNEL_ARCH = mips ++ ifneq (,$(filter mips64el%,$(KPKG_SUBARCH))) ++ KERNEL_ARCH = mips64 ++ endif ++ ifneq (,$(filter %-64,$(KPKG_SUBARCH))) ++ KERNEL_ARCH = mips64 ++ endif ++endif ++ ++##### m32r ++ifeq ($(strip $(architecture)),m32r) ++ KERNEL_ARCH := m32r ++ kimage := zImage ++ loaderdep= ++ loader= ++ loaderdoc= ++ target = $(kimage) ++ kimagesrc = $(strip arch/$(KERNEL_ARCH)/boot/$(kimage)) ++ kimagedest = $(INT_IMAGE_DESTDIR)/vmlinuz-$(version) ++ DEBCONFIG= $(CONFDIR)/config.$(KPKG_SUBARCH) ++endif ++ ++ ++# usermode linux ++ifeq ($(strip $(architecture)),um) ++ DEBCONFIG = $(CONFDIR)/config.um ++ ++ ++ ifneq ($(shell if [ $(VERSION) -ge 2 ] && [ $(PATCHLEVEL) -ge 6 ] && \ ++ [ $(SUBLEVEL) -ge 9 ]; then echo new; \ ++ elif [ $(VERSION) -ge 2 ] && [ $(PATCHLEVEL) -ge r ]; then \ ++ echo new; \ ++ elif [ $(VERSION) -ge 3 ]; then echo new; fi),) ++ target = vmlinux ++ kimage := vmlinux ++ else ++ target = linux ++ kimage := linux ++ endif ++ ++ ++ kimagesrc = $(strip $(kimage)) ++ INT_IMAGE_DESTDIR=$(IMAGE_DOC) ++ kimagedest = debian/tmp-image$(IMAGEDIR)/linux-$(version) ++ loaderdep= ++ loaderdoc= ++ KERNEL_ARCH = um ++ architecture = i386 ++ IMAGEDIR = /usr/bin ++endif ++ ++# xen-linux ++ifeq ($(strip $(architecture)),xen) ++ KERNEL_ARCH = xen ++ architecture = i386 ++ ++ ifeq (,$(findstring $(KPKG_SUBARCH),xen0 xenu)) ++ KPKG_SUBARCH:=xen0 ++ endif ++ DEBCONFIG = $(CONFDIR)/config.$(KPKG_SUBARCH) ++ ++ ifneq ($(shell if [ $(VERSION) -ge 2 ] && [ $(PATCHLEVEL) -ge 5 ] && \ ++ [ $(SUBLEVEL) -ge 41 ]; then echo new; \ ++ elif [ $(VERSION) -ge 2 ] && [ $(PATCHLEVEL) -ge 6 ]; then \ ++ echo new; \ ++ elif [ $(VERSION) -ge 3 ]; then echo new; fi),) ++ target = vmlinuz ++ else ++ target = bzImage ++ endif ++ kimage := $(target) ++ ++ ifeq (,$(filter xen0,$(KPKG_SUBARCH))) ++ # only domain-0 are bootable via xen so only domain0 subarch needs grub and xen-vm ++ loaderdep=grub,xen-vm ++ loader=grub ++ loaderdoc= ++ else ++ loaderdep= ++ loader= ++ loaderdoc= ++ endif ++ ++ kimagesrc = $(kimage) ++ kimagedest = $(INT_IMAGE_DESTDIR)/xen-linux-$(version) ++endif ++ ++ ++###################################################################### ++###################################################################### ++ ++ifneq ($(strip $(KPKG_STEM)),) ++INT_STEM := $(KPKG_STEM) ++else ++INT_STEM := kernel ++endif ++ ++ifneq ($(strip $(loaderdep)),) ++ int_loaderdep := $(loaderdep), ++else ++ int_loaderdep := ++endif ++ ++ ++ ++# The following variable is used to simplify the process of making ++# diffs and orig targets, Please set it if AND ONLY IF no patches ++# have been applied to the upstream source, in other words, we have ++# just added debian* files. If any patches were applied, please ++# leave it empty ++ ++# NO_SRC_CHANGES = ++NO_SRC_CHANGES = YES ++ ++ ++# NOTE: FLAVOUR is now obsolete ++# If you want to have more than one kernel configuration per kernel ++# version, set FLAVOUR in the top level kernel Makefile *before* ++# invoking make-kpkg -- it will be appended to UTS_RELEASE in ++# version.h (separated by a hyphen). This affects everything -- the ++# names and versions of the image, source, headers, and doc packages, ++# and where the modules are searched for in /lib/modules. ++ ++ifdef FLAVOUR ++# uhm - should check if we really have a Makefile capable of Flavours? ++endif ++ ++FLAVOUR:=$(shell grep ^FLAVOUR Makefile 2>/dev/null | \ ++ perl -ple 's/FLAVOUR[\s:=]+//g') ++ ++ifeq ($(strip $(FLAVOUR_SEP)),) ++FLAVOUR_SEP:= + ++endif ++ ++ifneq ($(strip $(FLAVOUR)),) ++INT_FLAV := $(FLAVOUR_SEP)$(FLAVOUR) ++FLAV_ARG := FLAVOUR=$(FLAVOUR) ++else ++INT_FLAV := ++FLAV_ARG := ++endif ++ ++## This is the replacement for FLAVOUR ++EXTRAVERSION =$(strip $(EXTRA_VERSION)) ++ifneq ($(strip $(APPEND_TO_VERSION)),) ++iatv := $(strip $(APPEND_TO_VERSION)) ++EXTRAV_ARG := EXTRAVERSION=${EXTRA_VERSION}${iatv} ++else ++iatv := ++EXTRAV_ARG := ++endif ++ ++UTS_RELEASE_VERSION=$(shell if [ -f include/linux/version.h ]; then \ ++ grep 'define UTS_RELEASE' include/linux/version.h | \ ++ perl -nle 'm/^\s*\#define\s+UTS_RELEASE\s+("?)(\S+)\1/g && print $$2;';\ ++ else echo "" ; \ ++ fi) ++ ++version = $(VERSION).$(PATCHLEVEL).$(SUBLEVEL)$(EXTRAVERSION)$(iatv)$(INT_FLAV)$(LOCALVERSION) ++ ++# See if we are being run in the kernel directory ++IN_KERNEL_DIR := $(shell if test -d drivers && test -d kernel && test -d fs && test \ ++ -d include/linux ; then \ ++ echo YES; \ ++ fi ) ++ ++IN_KERNEL_HEADERS=$(shell if [ -f $(INT_STEM)-headers.revision ]; then \ ++ cat $(INT_STEM)-headers.revision; \ ++ else echo "" ; \ ++ fi) ++ ++ifeq ($(strip $(IN_KERNEL_DIR)),) ++ifneq ($(strip $(IN_KERNEL_HEADERS)),) ++version=$(UTS_RELEASE_VERSION) ++debian :=$(IN_KERNEL_HEADERS) ++endif ++endif ++ ++# Bug out if the version number id not all lowercase ++lc_version = $(shell echo $(version) | tr A-Z a-z) ++ifneq ($(strip $(version)),$(strip $(lc_version))) ++ ifeq ($(strip $(IGNORE_UPPERCASE_VERSION)),) ++ $(error Error. The version number $(strip $(version)) is not all \ ++ lowercase. Since the version ends up in the package name of the \ ++ kernel image package, this is a Debian policy violation, and \ ++ the packaging system shall refuse to package the image. ) ++ else ++ $(warn Error. The version number $(strip $(version)) is not all \ ++ lowercase. Since the version ends up in the package name of the \ ++ kernel image package, this is a Debian policy violation, and \ ++ the packaging system shall refuse to package the image. Lower -casing version.) ++ ++ version := $(strip $(lc_version)) ++ endif ++endif ++ ++ ++ ++# KPKG_SUBARCH is used to distinguish Amiga, Atari, Macintosh, etc. kernels ++# for Debian/m68k. INT_SUBARCH is used in the names of the image file ++# produced. It only affects the naming of the kernel-image as the ++# source and doc packages are architecture independent and the ++# kernel-headers do not vary from one sub-architecture to the next. ++ ++# This is the default ++INT_SUBARCH := ++ ++ifneq ($(strip $(ARCH_IN_NAME)),) ++ifneq ($(strip $(KPKG_SUBARCH)),) ++INT_SUBARCH := -$(KPKG_SUBARCH) ++endif ++endif ++ ++# The name of the package (for example, 'emacs'). ++package := $(INT_STEM)-source-$(version) ++h_package := $(INT_STEM)-headers-$(version) ++ifeq ($(strip $(KERNEL_ARCH)),um) ++ i_package := $(INT_STEM)-uml-$(version)$(INT_SUBARCH) ++else ++ ifeq ($(strip $(KERNEL_ARCH)),xen) ++ i_package := $(INT_STEM)-$(KPKG_SUBARCH)-$(version) ++ else ++ i_package := $(INT_STEM)-image-$(version)$(INT_SUBARCH) ++ endif ++endif ++d_package := $(INT_STEM)-doc-$(version) ++l_package := libc-kheaders ++ ++SOURCE_TOP:= debian/tmp-source ++HEADER_TOP:= debian/tmp-headers ++IMAGE_TOP := debian/tmp-image ++DOC_TOP := debian/tmp-doc ++MAN1DIR = $(IMAGE_TOP)/usr/share/man/man1 ++ ++SOURCE_DOC:= $(SOURCE_TOP)/usr/share/doc/$(package) ++HEADER_DOC:= $(HEADER_TOP)/usr/share/doc/$(h_package) ++IMAGE_DOC := $(IMAGE_TOP)/usr/share/doc/$(i_package) ++DOC_DOC := $(DOC_TOP)/usr/share/doc/$(d_package) ++ ++SOURCE_SRC:= $(SOURCE_TOP)/usr/src/$(package) ++HEADER_SRC:= $(HEADER_TOP)/usr/src/$(h_package) ++UML_DIR := $(IMAGE_TOP)/usr/lib/uml/modules ++ ++ ++FILES_TO_CLEAN = modules/modversions.h modules/ksyms.ver debian/files \ ++ conf.vars scripts/cramfs/cramfsck scripts/cramfs/mkcramfs \ ++ applied_patches debian/buildinfo ++STAMPS_TO_CLEAN = stamp-build stamp-configure stamp-source stamp-image \ ++ stamp-headers stamp-src stamp-diff stamp-doc \ ++ stamp-buildpackage stamp-libc-kheaders stamp-debian \ ++ stamp-patch stamp-kernel-configure ++DIRS_TO_CLEAN = $(SOURCE_TOP) $(HEADER_TOP) $(IMAGE_TOP) $(DOC_TOP) ++ ++ifeq ($(strip $(VERSIONED_PATCH_DIR)),) ++VERSIONED_PATCH_DIR = $(shell if [ -d \ ++/usr/src/kernel-patches/$(architecture)/$(VERSION).$(PATCHLEVEL).$(SUBLEVEL) \ ++ ]; then echo \ ++/usr/src/kernel-patches/$(architecture)/$(VERSION).$(PATCHLEVEL).$(SUBLEVEL); \ ++ fi) ++endif ++ ++ifeq ($(strip $(VERSIONED_ALL_PATCH_DIR)),) ++VERSIONED_ALL_PATCH_DIR = $(shell if [ -d \ ++/usr/src/kernel-patches/all/$(VERSION).$(PATCHLEVEL).$(SUBLEVEL) \ ++ ]; then echo \ ++/usr/src/kernel-patches/all/$(VERSION).$(PATCHLEVEL).$(SUBLEVEL); \ ++ fi) ++endif ++ ++ifeq ($(strip $(PATCH_DIR)),) ++PATCH_DIR = $(shell if [ -d /usr/src/kernel-patches/$(architecture)/ ];\ ++ then echo /usr/src/kernel-patches/$(architecture); \ ++ fi) ++endif ++ ++ifeq ($(strip $(ALL_PATCH_DIR)),) ++ALL_PATCH_DIR = $(shell if [ -d /usr/src/kernel-patches/all/ ]; \ ++ then echo /usr/src/kernel-patches/all ;\ ++ fi) ++endif ++ ++VERSIONED_ALL_PATCH_APPLY = $(VERSIONED_ALL_PATCH_DIR)/apply ++VERSIONED_ALL_PATCH_UNPATCH = $(VERSIONED_ALL_PATCH_DIR)/unpatch ++ ++VERSIONED_DIR_PATCH_APPLY = $(VERSIONED_PATCH_DIR)/apply ++VERSIONED_DIR_PATCH_UNPATCH = $(VERSIONED_PATCH_DIR)/unpatch ++ ++ALL_PATCH_APPLY = $(ALL_PATCH_DIR)/apply ++ALL_PATCH_UNPATCH = $(ALL_PATCH_DIR)/unpatch ++ ++DIR_PATCH_APPLY = $(PATCH_DIR)/apply ++DIR_PATCH_UNPATCH = $(PATCH_DIR)/unpatch ++ ++# The destination of all .deb files ++# (suggested by Rob Browning ) ++DEB_DEST := .. ++SRCTOP := $(shell if [ "$$PWD" != "" ]; then echo $$PWD; else pwd; fi) ++INSTALL_MOD_PATH=$(SRCTOP)/$(IMAGE_TOP) ++KPKG_DEST_DIR ?= $(SRCTOP)/.. ++ ++# Include any site specific overrides here. ++-include $(CONFLOC) ++ ++# Over ride the config file from the environment/command line ++ifneq ($(strip $(KPKG_MAINTAINER)),) ++maintainer=$(KPKG_MAINTAINER) ++endif ++ ++ifneq ($(strip $(KPKG_EMAIL)),) ++email=$(KPKG_EMAIL) ++endif ++ ++# This should be a name to feed the modules build for pgp signature, ++# since we the maintainer would be different there. ++ifneq ($(strip $(PGP_SIGNATURE)),) ++pgp=$(PGP_SIGNATURE) ++endif ++ ++ifneq ($(strip $(EXTRA_DOCS)),) ++extra_docs = $(EXTRA_DOCS) ++endif ++ ++ifneq ($(strip $(extra_docs)),) ++HAVE_EXTRA_DOCS:=$(shell if [ -e $(extra_docs) ]; then echo YES; fi) ++endif ++ ++ifneq ($(strip $(DEBIAN_REVISION_MANDATORY)),) ++debian_revision_mandatory:=$(DEBIAN_REVISION_MANDATORY) ++endif ++ ++ ++ifneq ($(strip $(install_vmlinux)),) ++int_install_vmlinux:=$(install_vmlinux) ++endif ++ ++ifneq ($(strip $(KPKG_FOLLOW_SYMLINKS_IN_SRC)),) ++int_follow_symlinks_in_src=YES ++else ++ifneq ($(strip $(kpkg_follow_symlinks_in_src)),) ++int_follow_symlinks_in_src=YES ++endif ++endif ++ ++ ++ ++ ++ ++# The Debian revision ++ifneq ($(strip $(DEBIAN_REVISION)),) ++HAS_CHANGELOG := $(shell \ ++ if test -f debian/changelog && ( test -f stamp-debian || test -f debian/official );\ ++ then echo YES;\ ++ else echo NO; fi; ) ++else ++HAS_CHANGELOG := $(shell if test -f debian/changelog; then echo YES;\ ++ else echo NO; fi; ) ++endif ++# If there is a changelog file, it overrides. The only exception is ++# when there is no stamp-config, and there is no debian/official, ++# *AND* there is a DEBIAN_REVISION, in which case the DEBIAN_REVISION ++# over rides (since we are going to replace the changelog file soon ++# anyway. Else, use the commandline or env var setting. Or else ++# default to 10.00.Custom, unless the human has requested that the ++# revision is mandatory, in which case we raise an error ++ ++ifeq ($(strip $(HAS_CHANGELOG)),YES) ++debian := $(shell if test -f debian/changelog; then \ ++ perl -nle 'print /\((\S+)\)/; exit 0' debian/changelog;\ ++ fi; ) ++else ++ifneq ($(strip $(DEBIAN_REVISION)),) ++debian := $(DEBIAN_REVISION) ++else ++ifeq ($(strip $(debian)),) ++ifneq ($(strip $(debian_revision_mandatory)),) ++$(error A Debian revision is mandatory, but none was provided) ++else ++debian := 10.00.Custom ++endif ++endif ++endif ++endif ++ ++# Hmm. The version that we have computed *MUST* match the one that is in the ++# changelog. ++ifeq ($(strip $(HAS_CHANGELOG)),YES) ++saved_version := $(shell if test -f debian/changelog; then \ ++ perl -nle 'print /^$(INT_STEM)-source-(\S+)/; exit 0' \ ++ debian/changelog;\ ++ fi; ) ++ifneq ($(strip $(saved_version)),) ++ifneq ($(strip $(saved_version)),$(strip $(version))) ++HAVE_VERSION_MISMATCH=YES ++endif ++endif ++endif ++ ++ ++ifneq ($(strip $(DELETE_BUILD_LINK)),) ++delete_build_link := YES ++else ++ifeq ($(strip $(delete_build_link)),) ++delete_build_link := $(shell if test -f debian/official; then echo YES;\ ++ else echo NO; fi; ) ++endif ++endif ++ ++ifneq ($(strip $(IMAGE_IN_BOOT)),) ++link_in_boot := $(IMAGE_IN_BOOT) ++endif ++ ++ifneq ($(strip $(LINK_IN_BOOT)),) ++link_in_boot := $(LINK_IN_BOOT) ++endif ++ ++ifneq ($(strip $(NO_SYMLINK)),) ++no_symlink := $(NO_SYMLINK) ++endif ++ ++ifneq ($(strip $(REVERSE_SYMLINK)),) ++reverse_symlink := $(REVERSE_SYMLINK) ++endif ++ ++ifneq ($(strip $(IMAGE_TYPE)),) ++kimage = $(IMAGE_TYPE) ++endif ++ ++ifneq ($(strip $(PATCH_THE_KERNEL)),) ++patch_the_kernel = $(PATCH_THE_KERNEL) ++endif ++ ++ifneq ($(strip $(KPKG_SELECTED_PATCHES)),) ++ifeq ($(strip $(patch_the_kernel)),NO) ++patch_the_kernel = NO ++else ++ifeq ($(strip $(patch_the_kernel)),no) ++patch_the_kernel = NO ++else ++patch_the_kernel = YES ++endif ++endif ++endif ++ ++ ++ifeq ($(strip $(patch_the_kernel)),yes) ++patch_the_kernel = YES ++endif ++ifeq ($(strip $(patch_the_kernel)),Yes) ++patch_the_kernel = YES ++endif ++ifeq ($(strip $(patch_the_kernel)),YEs) ++patch_the_kernel = YES ++endif ++ifeq ($(strip $(patch_the_kernel)),yEs) ++patch_the_kernel = YES ++endif ++ifeq ($(strip $(patch_the_kernel)),yES) ++patch_the_kernel = YES ++endif ++ifeq ($(strip $(patch_the_kernel)),yeS) ++patch_the_kernel = YES ++endif ++ ++ ++ ++ifneq ($(strip $(CONFIG_TARGET)),) ++config_target := $(CONFIG_TARGET) ++have_new_config_target := YES ++endif ++ ++# If config_target doesn't end in 'config' then reset it to 'oldconfig'. ++ifneq ($(patsubst %config,config,$(strip $(config_target))),config) ++config_target := oldconfig ++have_new_config_target := ++endif ++ ++ifneq ($(strip $(USE_SAVED_CONFIG)),) ++use_saved_config = $(USE_SAVED_CONFIG) ++endif ++ ++#ifeq ($(origin var),command line) ++#$(warn You are setting an internal var from the cmdline. Use at your own risk) ++#endif ++#you can automated it a bit more with $(foreach) and $(if) ++ ++ ++### ++### In the following, we define these variables ++### ROOT_CMD -- set in the environment, plaing old sudo or fakeroot ++### root_cmd -- The same ++### int_root_cmd -- the argument passed to dpkg-buildpackage ++### -r$(ROOT_CMD) ++ifneq ($(strip $(ROOT_CMD)),) ++ # ROOT_CMD is not supposed to have -r or -us and -uc ++ int_dummy_root := $(ROOT_CMD) ++ # remove -us and -uc ++ ifneq ($(strip $(findstring -us, $(int_dummy_root))),) ++ int_dummy_root := $(subst -us,, $(strip $(int_dummy_root))) ++ int_us := -us ++ endif ++ ifneq ($(strip $(findstring -uc, $(int_dummy_root))),) ++ int_dummy_root := $(subst -uc,, $(strip $(int_dummy_root))) ++ int_uc := -uc ++ endif ++ ifneq ($(strip $(findstring -r, $(int_dummy_root))),) ++ int_dummy_root := $(subst -r,, $(strip $(int_dummy_root))) ++ endif ++ # sanitize ++ ROOT_CMD := $(strip $(int_dummy_root)) ++ int_root_cmd := -r$(strip $(int_dummy_root)) ++else ++ # well, ROOT_CMD is not set yet ++ ifneq ($(strip $(root_cmd)),) ++ # Try and set ROOT_CMD from root_cmd ++ int_dummy_root := $(root_cmd) ++ # remove -us and -uc ++ ifneq ($(strip $(findstring -us, $(int_dummy_root))),) ++ int_dummy_root := $(subst -us,, $(strip $(int_dummy_root))) ++ int_us := -us ++ endif ++ ifneq ($(strip $(findstring -uc, $(int_dummy_root))),) ++ int_dummy_root := $(subst -uc,, $(strip $(int_dummy_root))) ++ int_uc := -uc ++ endif ++ # now that -us and -uc are gone, remove -r ++ ifneq ($(strip $(findstring -r, $(int_dummy_root))),) ++ int_dummy_root := $(subst -r,, $(strip $(int_dummy_root))) ++ endif ++ # Finally, sanitized ++ ROOT_CMD := $(strip $(int_dummy_root)) ++ int_root_cmd := -r$(strip $(int_dummy_root)) ++ endif ++endif ++ ++# make sure that root_cmd and ROOT_CMD are the same ++ifneq ($(strip $(ROOT_CMD)),) ++ root_cmd := $(ROOT_CMD) ++endif ++ ++ifneq ($(strip $(UNSIGN_SOURCE)),) ++ int_us := -us ++endif ++ ++ifneq ($(strip $(UNSIGN_CHANGELOG)),) ++ int_uc := -uc ++endif ++ ++int_am_root := $(shell [ $$(id -u) -eq 0 ] && echo "YES" ) ++ ++ ++ifneq ($(strip $(CLEAN_SOURCE)),) ++do_clean = $(CLEAN_SOURCE) ++endif ++ ++ifneq ($(strip $(CONCURRENCY_LEVEL)),) ++do_parallel = -j$(CONCURRENCY_LEVEL) ++ ++# Well, I wish there was something better than guessing by version number ++CAN_DO_DEP_FAST=$(shell if [ $(VERSION) -lt 2 ]; then echo ''; \ ++ elif [ $(VERSION) -gt 2 ]; then echo YES; \ ++ elif [ $(PATCHLEVEL) -lt 4 ]; then echo ''; \ ++ else echo YES; \ ++ fi) ++ifneq ($(strip $(CAN_DO_DEP_FAST)),) ++fast_dep= -j$(CONCURRENCY_LEVEL) ++endif ++ ++endif ++ ++ifneq ($(strip $(SOURCE_CLEAN_HOOK)),) ++source_clean_hook=$(SOURCE_CLEAN_HOOK) ++endif ++ifneq ($(strip $(HEADER_CLEAN_HOOK)),) ++header_clean_hook=$(HEADER_CLEAN_HOOK) ++endif ++ifneq ($(strip $(DOC_CLEAN_HOOK)),) ++doc_clean_hook=$(DOC_CLEAN_HOOK) ++endif ++ifneq ($(strip $(IMAGE_CLEAN_HOOK)),) ++image_clean_hook=$(IMAGE_CLEAN_HOOK) ++endif ++ ++ifneq ($(strip $(INITRD)),) ++initrddep := initrd-tools (>= 0.1.48), # there is a space here ++else ++initrddep := ++endif ++ ++ifeq ($(strip $(CONFDIR)),) ++ifeq ($(strip $(patch_the_kernel)),YES) ++CONFDIR = $(PATCH_DIR) ++else ++ifeq ($(strip $(patch_the_kernel)),yes) ++CONFDIR = $(PATCH_DIR) ++else ++CONFDIR = $(DEBDIR)/Config ++endif ++endif ++endif ++ ++# The file which has local configuration ++CONFIG_FILE := $(shell if test -e .config ; then \ ++ echo .config; \ ++ elif test -e $(DEBCONFIG) ; then \ ++ echo $(DEBCONFIG); \ ++ elif test -e $(CONFDIR)/config ; then \ ++ echo $(CONFDIR)/config ; \ ++ elif test -e $(DEBDIR)/config ; then \ ++ echo $(DEBDIR)/config ; \ ++ elif test -e /boot/config-$(version) ; then \ ++ echo /boot/config-$(version) ; \ ++ elif test -e /boot/config-$$(uname -r) ; then \ ++ echo /boot/config-$$(uname -r) ; \ ++ else echo /dev/null ; \ ++ fi) ++ ++ ++# Deal with modules issues ++ ++# define MODULES_ENABLED if appropriate ++ifneq ($(strip $(shell grep -E ^[^\#]*CONFIG_MODULES $(CONFIG_FILE))),) ++MODULES_ENABLED := YES ++endif ++ ++# accept both space separated list of modules, as well as comma ++# separated ones ++valid_modules:= ++ ++# See what modules we are talking about ++ifeq ($(strip $(MODULES_ENABLED)),YES) ++ifneq ($(strip $(KPKG_SELECTED_MODULES)),) ++canonical_modules=$(subst $(comma),$(space),$(KPKG_SELECTED_MODULES)) ++else ++canonical_modules=$(shell test -e $(MODULE_LOC) && \ ++ find $(MODULE_LOC) -follow -maxdepth 1 -type d -print |\ ++ grep -E -v '^$(MODULE_LOC)/$$') ++endif ++ ++ ++# Now, if we have any modules at all, they are in canonical_modules ++ifneq ($(strip $(canonical_modules)),) ++ ++# modules can have the full path, or just the name of the module. We ++# make all the modules ahve absolute paths by fleshing them out. ++path_modules :=$(filter /%, $(canonical_modules)) ++no_path_modules:=$(filter-out /%, $(canonical_modules)) ++fleshed_out :=$(foreach mod,$(no_path_modules),$(MODULE_LOC)/$(mod)) ++ ++# Hmmph. recreate the canonical modules; now everything has a full ++# path name. ++ ++canonical_modules:=$(path_modules) $(fleshed_out) ++# test to see if the dir names are real ++valid_modules = $(shell for dir in $(canonical_modules); do \ ++ if [ -d $$dir ] && [ -x $$dir/debian/rules ]; then \ ++ echo $$dir; \ ++ fi; \ ++ done) ++ ++ ++endif ++endif ++ ++ifeq ($(strip $(patch_the_kernel)),YES) ++ ++# Well then. Let us see if we want to select the patches we apply. ++ifneq ($(strip $(KPKG_SELECTED_PATCHES)),) ++canonical_patches=$(subst $(comma),$(space),$(KPKG_SELECTED_PATCHES)) ++ ++ifneq ($(strip $(canonical_patches)),) ++# test to see if the patches exist ++temp_valid_patches = $(shell for name in $(canonical_patches); do \ ++ if [ -x $(VERSIONED_DIR_PATCH_APPLY)/$$name ] && \ ++ [ -x $(VERSIONED_DIR_PATCH_UNPATCH)/$$name ]; \ ++ then echo $(VERSIONED_DIR_PATCH_APPLY)/$$name; \ ++ elif [ -x $(VERSIONED_ALL_PATCH_APPLY)/$$name ] && \ ++ [ -x $(VERSIONED_ALL_PATCH_UNPATCH)/$$name ]; \ ++ then echo $(VERSIONED_ALL_PATCH_APPLY)/$$name; \ ++ elif [ -x $(DIR_PATCH_APPLY)/$$name ] && \ ++ [ -x $(DIR_PATCH_UNPATCH)/$$name ]; then \ ++ echo $(DIR_PATCH_APPLY)/$$name; \ ++ elif [ -x $(ALL_PATCH_APPLY)/$$name ] && \ ++ [ -x $(ALL_PATCH_UNPATCH)/$$name ]; then \ ++ echo $(ALL_PATCH_APPLY)/$$name; \ ++ else \ ++ echo $$name.error; \ ++ fi; \ ++ done) ++ ++temp_patch_not_found = $(filter %.error, $(temp_valid_patches)) ++patch_not_found = $(subst .error,,$(temp_patch_not_found)) ++ifneq ($(strip $(patch_not_found)),) ++$(error Could not find patch for $(patch_not_found)) ++endif ++ ++valid_patches = $(filter-out %.error, $(temp_valid_patches)) ++ ++ifeq ($(strip $(valid_patches)),) ++$(error Could not find patch scripts for $(canonical_patches)) ++endif ++ ++ ++ ++canonical_unpatches = $(shell new=""; \ ++ for name in $(canonical_patches); do \ ++ new="$$name $$new"; \ ++ done; \ ++ echo $$new;) ++ ++temp_valid_unpatches = $(shell for name in $(canonical_unpatches); do \ ++ if [ -x $(VERSIONED_DIR_PATCH_APPLY)/$$name ] && \ ++ [ -x $(VERSIONED_DIR_PATCH_UNPATCH)/$$name ]; \ ++ then echo $(VERSIONED_DIR_PATCH_UNPATCH)/$$name; \ ++ elif [ -x $(VERSIONED_ALL_PATCH_APPLY)/$$name ] && \ ++ [ -x $(VERSIONED_ALL_PATCH_UNPATCH)/$$name ]; \ ++ then echo $(VERSIONED_ALL_PATCH_UNPATCH)/$$name; \ ++ elif [ -x $(DIR_PATCH_APPLY)/$$name ] && \ ++ [ -x $(DIR_PATCH_UNPATCH)/$$name ]; then \ ++ echo $(DIR_PATCH_UNPATCH)/$$name; \ ++ elif [ -x $(ALL_PATCH_APPLY)/$$name ] && \ ++ [ -x $(ALL_PATCH_UNPATCH)/$$name ]; then \ ++ echo $(ALL_PATCH_UNPATCH)/$$name; \ ++ else \ ++ echo $$name.error; \ ++ fi; \ ++ done) ++temp_unpatch_not_found = $(filter %.error, $(temp_valid_unpatches)) ++unpatch_not_found = $(subst .error,,$(temp_unpatch_not_found)) ++ifneq ($(strip $(unpatch_not_found)),) ++$(error Could not find unpatch for $(unpatch_not_found)) ++endif ++ ++valid_unpatches = $(filter-out %.error, $(temp_valid_unpatches)) ++ ++ifeq ($(strip $(valid_unpatches)),) ++$(error Could not find un-patch scripts for $(canonical_unpatches)) ++endif ++ ++ ++endif ++else ++# OK. We want to patch the kernel, but there are no patches specified. ++valid_patches = $(shell if [ -n "$(VERSIONED_PATCH_DIR)" ] && \ ++ [ -d $(VERSIONED_DIR_PATCH_APPLY) ]; then \ ++ run-parts --test $(VERSIONED_DIR_PATCH_APPLY); \ ++ fi; \ ++ if [ -n "$(VERSIONED_ALL_PATCH_DIR)" ] && \ ++ [ -d $(VERSIONED_ALL_PATCH_APPLY) ]; then \ ++ run-parts --test $(VERSIONED_ALL_PATCH_APPLY); \ ++ fi; \ ++ if [ -n "$(PATCH_DIR)" ] && \ ++ [ -d $(DIR_PATCH_APPLY) ]; then \ ++ run-parts --test $(DIR_PATCH_APPLY); \ ++ fi; \ ++ if [ -n "$(ALL_PATCH_DIR)" ] && \ ++ [ -d $(ALL_PATCH_APPLY) ]; then \ ++ run-parts --test $(ALL_PATCH_APPLY); \ ++ fi) ++valid_unpatches = $(shell ( if [ -n "$(VERSIONED_PATCH_DIR)" ] && \ ++ [ -d $(VERSIONED_DIR_PATCH_UNPATCH) ]; then \ ++ run-parts --test $(VERSIONED_DIR_PATCH_UNPATCH); \ ++ fi; \ ++ if [ -n "$(VERSIONED_ALL_PATCH_DIR)" ] && \ ++ [ -d $(VERSIONED_ALL_PATCH_UNPATCH) ]; then \ ++ run-parts --test $(VERSIONED_ALL_PATCH_UNPATCH); \ ++ fi; \ ++ if [ -n "$(PATCH_DIR)" ] && \ ++ [ -d $(DIR_PATCH_UNPATCH) ]; then \ ++ run-parts --test $(DIR_PATCH_UNPATCH); \ ++ fi; \ ++ if [ -n "$(ALL_PATCH_DIR)" ] && \ ++ [ -d $(ALL_PATCH_UNPATCH) ]; then \ ++ run-parts --test $(ALL_PATCH_UNPATCH); \ ++ fi) | tac) ++endif ++endif ++ ++old_applied_patches=$(shell if [ -f applied_patches ]; then \ ++ cat applied_patches; \ ++ else \ ++ echo ''; \ ++ fi ) ++ ++ifeq ($(strip $(valid_unpatches)),) ++ifneq ($(strip $(old_applied_patches)),) ++old_unpatches=$(shell new=""; \ ++ for name in $(notdir $(old_applied_patches)); do \ ++ new="$$name $$new"; \ ++ done; \ ++ echo $$new;) ++temp_old_unpatches = $(shell for name in $(old_unpatches); do \ ++ if [ -x $(VERSIONED_DIR_PATCH_UNPATCH)/$$name ]; \ ++ then echo $(VERSIONED_DIR_PATCH_UNPATCH)/$$name;\ ++ elif [ -x $(VERSIONED_ALL_PATCH_UNPATCH)/$$name ];\ ++ then echo $(VERSIONED_ALL_PATCH_UNPATCH)/$$name;\ ++ elif [ -x $(DIR_PATCH_UNPATCH)/$$name ]; then \ ++ echo $(DIR_PATCH_UNPATCH)/$$name; \ ++ elif [ -x $(ALL_PATCH_UNPATCH)/$$name ]; then \ ++ echo $(ALL_PATCH_UNPATCH)/$$name; \ ++ else \ ++ echo $$name.error; \ ++ fi; \ ++ done) ++temp_old_unpatch_not_found = $(filter %.error, $(temp_old_unpatches)) ++old_unpatch_not_found = $(subst .error,,$(temp_unpatch_not_found)) ++valid_unpatches = $(filter-out %.error, $(temp_old_unpatches)) ++endif ++endif ++ ++# See if the version numbers are valid ++HAVE_VALID_PACKAGE_VERSION := $(shell \ ++ if test -x $(DEBDIR)/kpkg-vercheck; then \ ++ $(DEBDIR)/kpkg-vercheck $(debian) ; \ ++ else \ ++ echo "Could not find $(DEBDIR)/kpkg-vercheck" ; \ ++ fi ) ++ ++TAR_COMPRESSION := $(shell \ ++ if tar --help | grep -- \-\-bzip2 >/dev/null; then \ ++ echo --bzip2; \ ++ else \ ++ echo --gzip; \ ++ fi ) ++TAR_SUFFIX := $(shell \ ++ if tar --help | grep -- \-\-bzip2 >/dev/null; then \ ++ echo bz2; \ ++ else \ ++ echo gz; \ ++ fi ) ++ ++STOP_FOR_BIN86 = NO ++CONTROL=$(DEBDIR)/Control ++ifeq ($(strip $(architecture)),i386) ++NEED_BIN86 := $(shell if dpkg --compare-versions \ ++ $(VERSION).$(PATCHLEVEL) lt 2.4 >/dev/null 2>&1; \ ++ then echo YES; fi) ++ifeq ($(strip $(NEED_BIN86)),YES) ++CONTROL=$(DEBDIR)/Control.bin86 ++HAVE_BIN86 := $(shell if test -x /usr/bin/as86; then echo YES; \ ++ else echo NO; fi ) ++ifeq ($(strip $(HAVE_BIN86)),NO) ++STOP_FOR_BIN86 = YES ++endif ++endif ++endif ++ ++ ++ ++ifeq (,$(strip $(kimagedest))) ++$(error Error. I do not know where the kernel image goes to [kimagedest undefined]\ ++ The usual case for this is that I could not determine which arch or subarch \ ++ tihs machine belongs to. Please specify a subarch, and try again.) ++endif ++ifeq (,$(strip $(kimagesrc))) ++$(error Error. I do not know where the kernel image goes to [kimagesrc undefined]\ ++ The usual case for this is that I could not determine which arch or subarch \ ++ tihs machine belongs to. Please specify a subarch, and try again.) ++endif ++ ++# export variables ++export root_cmd FLAVOUR INT_SUBARCH APPEND_TO_VERSION UNSIGN_CHANGELOG \ ++ UNSIGN_SOURCE ROOT_CMD MODULE_LOC EXTRAVERSION ALL_PATCH_DIR \ ++ ALL_PATCH_APPLY ALL_PATCH_UNPATCH DIR_PATCH_UNPATCH \ ++ DIR_PATCH_APPLY VERSIONED_PATCH_DIR VERSIONED_ALL_PATCH_UNPATCH \ ++ VERSIONED_ALL_PATCH_APPLY VERSIONED_DIR_PATCH_UNPATCH \ ++ VERSIONED_DIR_PATCH_APPLY KPKG_SELECTED_PATCHES \ ++ KPKG_SELECTED_MODULES CONCURRENCY_LEVEL ++ ++ ++ifeq ($(strip $(IN_KERNEL_DIR)),) ++# Hah! Not in kernel directory!! ++build configure clean binary kernel_source kernel-source kernel-headers\ ++stamp-source kernel_headers stamp-headers kernel_image stamp-image \ ++kernel-image kernel-doc kernel_doc stamp-doc buildpackage \ ++libc_kheaders libc-kheaders stamp-libc-kheaders kernel-image-deb debian: ++ @echo "You should invoke this command from the top level directory of" ++ @echo "a linux kernel source directory tree, and as far as I can tell," ++ @echo "the current directory:" ++ @echo " $(SRCTOP)" ++ @echo "is not a top level linux kernel source directory. " ++ @echo "" ++ @echo " (If I am wrong then kernel-packages and the linux kernel" ++ @echo " are so out sync that you'd better get the latest versions" ++ @echo " of the kernel-package package and the Linux sources)" ++ @echo "" ++ @echo "Please change directory to wherever linux kernel sources" ++ @echo "reside and try again." ++else ++ifneq ($(strip $(HAVE_VALID_PACKAGE_VERSION)),YES) ++# Hah! Bogus version number ++build configure clean binary kernel_source kernel-source kernel-headers\ ++stamp-source kernel_headers stamp-headers kernel_image stamp-image \ ++kernel-image kernel-doc kernel_doc stamp-doc buildpackage kernel-image-deb \ ++debian: ++ @echo "Problems ecountered with the version number $(debian)." ++ @echo "$(HAVE_VALID_PACKAGE_VERSION)" ++ @echo "" ++ @echo "Please re-read the README file and try again." ++else ++ifeq ($(strip $(STOP_FOR__BIN86)),YES) ++# Hah! we need bin 86, but it aint here ++build configure clean binary kernel_source kernel-source kernel-headers\ ++stamp-source kernel_headers stamp-headers kernel_image stamp-image \ ++kernel-image kernel-doc kernel_doc stamp-doc buildpackage kernel-image-deb \ ++debian: ++ @echo "You Need to install the package bin86 before you can " ++ @echo "compile the kernel on this machine" ++ @echo "" ++ @echo "Please install bin86 and try again." ++else ++all build: debian configure stamp-build ++stamp-build: ++# Builds the binary package. ++# debian.config contains the current idea of what the image should ++# have. ++ifneq ($(strip $(HAVE_VERSION_MISMATCH)),) ++ @(echo "The changelog says we are creating $(saved_version), but I thought the version is $(version)"; exit 1) ++endif ++ifneq ($(strip $(UTS_RELEASE_VERSION)), $(strip $(version))) ++ if [ -f include/linux/version.h ]; then \ ++ uts_ver=$$(grep 'define UTS_RELEASE' include/linux/version.h | \ ++ perl -nle 'm/^\s*\#define\s+UTS_RELEASE\s+("?)(\S+)\1/g && print $$2;'); \ ++ if [ "X$$uts_ver" != "X$(strip $(UTS_RELEASE_VERSION))" ]; then \ ++ echo "The UTS Release version in include/linux/version.h"; \ ++ echo " \"$$uts_ver\" "; \ ++ echo "does not match current version " ; \ ++ echo " \"$(strip $(version))\" " ; \ ++ echo "Reconfiguring." ; \ ++ touch Makefile; \ ++ fi; \ ++ fi ++endif ++ -test -f stamp-configure || $(deb_rule) configure ++ $(MAKE) $(do_parallel) $(EXTRAV_ARG) $(FLAV_ARG) ARCH=$(KERNEL_ARCH) \ ++ $(CROSS_ARG) $(target) ++ifneq ($(strip $(shell grep -E ^[^\#]*CONFIG_MODULES $(CONFIG_FILE))),) ++ $(MAKE) $(do_parallel) $(EXTRAV_ARG) $(FLAV_ARG) ARCH=$(KERNEL_ARCH) \ ++ $(CROSS_ARG) modules ++endif ++ COLUMNS=150 dpkg -l 'gcc*' perl dpkg 'libc6*' binutils ldso make dpkg-dev |\ ++ awk '$$1 ~ /[hi]i/ { printf("%s-%s\n", $$2, $$3) }' > debian/buildinfo ++ @echo this was built on a machine with the kernel: >> debian/buildinfo ++ uname -a >> debian/buildinfo ++ echo using the compiler: >> debian/buildinfo ++ grep LINUX_COMPILER include/linux/compile.h | \ ++ sed -e 's/.*LINUX_COMPILER "//' -e 's/"$$//' >> debian/buildinfo ++ifneq ($(strip $(shell test -f version.Debian && cat version.Debian)),) ++ echo kernel source package used: >> debian/buildinfo ++ COLUMNS=150 dpkg -l kernel-source-$(shell test -f version.Debian && \ ++ cat version.Debian | sed -e 's/-.*$$//') | \ ++ awk '$$1 ~ /[hi]i/ { printf("%s-%s\n", $$2, $$3) }' >> debian/buildinfo ++endif ++ echo applied kernel patches: >> debian/buildinfo ++ifneq ($(strip $(valid_patches)),) ++ COLUMNS=150 dpkg -l $(shell echo $(valid_patches) | tr ' ' '\n' | \ ++ sed -ne 's/^.*\/\(.*\)/kernel-patch-\1/p') | \ ++ awk '$$1 ~ /[hi]i/ { printf("%s-%s\n", $$2, $$3) }' >> debian/buildinfo ++endif ++ echo done > $@ ++ ++buildpackage: clean stamp-buildpackage ++stamp-buildpackage: configure ++ifneq ($(strip $(HAVE_VERSION_MISMATCH)),) ++ @(echo "The changelog says we are creating $(saved_version), but I thought the version is $(version)"; exit 1) ++endif ++ test -f stamp-configure || $(deb_rule) configure ++ echo 'Building Package' > stamp-building ++ dpkg-buildpackage -nc $(strip $(int_root_cmd)) $(strip $(int_us)) $(strip $(int_uc)) \ ++ -m"$(maintainer) <$(email)>" -k"$(pgp)" ++ rm -f stamp-building ++ echo done > $@ ++ ++# stamp-debian and stamp-configure used to be a single target. Now ++# they are split - the reason is that arch-indep packages need to be ++# built before arch-dep packages, and make-kpkg tries to do 'make ++# config' for both cases. This used to work because the .config file ++# resided with kernel-source, but now that it is in kernel-patch, it ++# breaks down. I think the cleanest way out of this is to only deal ++# with config files when necessary, and thus the split. Herbert Xu ++debian: stamp-debian ++stamp-debian: ++ifneq ($(strip $(HAVE_VERSION_MISMATCH)),) ++ @(echo "The changelog says we are creating $(saved_version), but I thought the version is $(version)"; exit 1) ++endif ++ # work around idiocy in recent kernel versions ++ test ! -e scripts/package/builddeb || \ ++ mv -f scripts/package/builddeb scripts/package/builddeb.dist ++ test ! -e scripts/package/Makefile || \ ++ (mv -f scripts/package/Makefile scripts/package/Makefile.dist && \ ++ (echo "# Dummy file "; echo "help:") > scripts/package/Makefile) ++ @test -f $(DEBDIR)/rules || \ ++ echo Error: Could not find $(DEBDIR)/rules ++ -test ! -f stamp-debian && test ! -f debian/official && \ ++ rm -rf ./debian && mkdir ./debian ++ifeq ($(strip $(patch_the_kernel)),YES) ++ -test -f applied_patches && rm -f applied_patches ++ifneq ($(strip $(valid_patches)),) ++ -for patch in $(valid_patches) ; do \ ++ if test -x $$patch; then \ ++ if $$patch; then \ ++ echo "Patch $$patch processed fine"; \ ++ echo "$(notdir $$patch)" >> applied_patches; \ ++ else \ ++ echo "Patch $(notdir $$patch) failed."; \ ++ echo "Hit return to Continue"; \ ++ read ans; \ ++ fi; \ ++ fi; \ ++ done ++ echo done > stamp-patch ++endif ++endif ++ -test ! -f stamp-debian && \ ++ ( test ! -f debian/official || test ! -f debian/control) && \ ++ sed -e 's/=V/$(version)/g' -e 's/=D/$(debian)/g' \ ++ -e 's/=A/$(architecture)/g' -e 's/=SA/$(INT_SUBARCH)/g' \ ++ -e 's/=L/$(int_loaderdep) /g' -e 's/=I/$(initrddep)/g' \ ++ -e 's/=CV/$(VERSION).$(PATCHLEVEL)/g' \ ++ -e 's/=M/$(maintainer) <$(email)>/g' \ ++ -e 's/=ST/$(INT_STEM)/g' \ ++ $(CONTROL)> debian/control ++ -test ! -f stamp-debian && test ! -f debian/official && \ ++ sed -e 's/=V/$(version)/g' -e 's/=D/$(debian)/g' \ ++ -e 's/=A/$(architecture)/g' -e 's/=M/$(maintainer) <$(email)>/g' \ ++ -e 's/=ST/$(INT_STEM)/g' \ ++ $(DEBDIR)/changelog > debian/changelog ++ -test ! -f debian/rules && \ ++ install -p -m 755 $(DEBDIR)/rules debian/rules ++# -test ! -f stamp-debian && test ! -f debian/official && \ ++# for file in $(DEBIAN_FILES); do cp -f $(LIBLOC)/$$file ./debian/; done ++# for dir in $(DEBIAN_DIRS); do cp -af $(LIBLOC)/$$dir ./debian/; done ++ echo done > $@ ++ ++conf.vars: Makefile .config ++ @rm -f .mak ++ @touch .mak ++ @echo Please ignore the warning about overriding and ignoring targets above. ++ @echo These are harmless. They are only invoked in a part of the process ++ @echo that tries to snarf variable values for the conf.vars file. ++ @echo "VERSION = $(VERSION)" >> .mak ++ @echo "PATCHLEVEL = $(PATCHLEVEL)" >> .mak ++ @echo "SUBLEVEL = $(SUBLEVEL)" >> .mak ++ @echo "EXTRAVERSION = $(EXTRAVERSION)" >> .mak ++ifneq ($(strip $(iatv)),) ++ @echo "APPEND_TO_VERSION = $(iatv)" >> .mak ++endif ++ifeq ($(strip $(patch_the_kernel)),YES) ++ @echo "KPKG_SELECTED_PATCHES = $(KPKG_SELECTED_PATCHES)" >> .mak ++endif ++ifeq ($(strip $(MODULES_ENABLED)),YES) ++ @echo "KPKG_SELECTED_MODULES = $(KPKG_SELECTED_MODULES)" >> .mak ++endif ++ @echo "Debian Revision = $(debian)" >> .mak ++ @echo "KPKG_ARCH = $(KPKG_ARCH)" >> .mak ++# Fetch the rest of the information from the kernel's Makefile ++ @$(MAKE) --no-print-directory -sf $(DEBDIR)/kernel_version.mk ARCH=$(KERNEL_ARCH) \ ++ $(CROSS_ARG) debian_conf_var >> .mak ++ @echo "do_parallel = $(do_parallel)" >> .mak ++ @echo "fast_dep = $(fast_dep)" >> .mak ++# @sed -e 's%$(TOPDIR)%$$(TOPDIR)%g' .mak > conf.vars ++# Use the kernel's Makefile to calculate the TOPDIR. ++# TOPDIR is obsolete in 2.6 kernels, so the kernel_version.mk ++# will get us the right answer ++ @sed -e 's%$(shell $(MAKE) --no-print-directory -sf $(DEBDIR)/kernel_version.mk debian_TOPDIR)%$$(TOPDIR)%g' .mak > conf.vars ++ @rm -f .mak ++ ++dummy_do_dep: ++ +$(MAKE) $(EXTRAV_ARG) $(FLAV_ARG) $(CROSS_ARG) \ ++ ARCH=$(KERNEL_ARCH) $(fast_dep) dep ++ ++stamp-kernel-configure: stamp-debian .config ++ $(MAKE) $(EXTRAV_ARG) $(FLAV_ARG) $(CROSS_ARG) \ ++ ARCH=$(KERNEL_ARCH) $(config_target) ++ifeq ($(shell if [ $(VERSION) -ge 2 ] && [ $(PATCHLEVEL) -ge 5 ]; then \ ++ echo new;fi),) ++ +$(MAKE) -f ./debian/rules dummy_do_dep ++ $(MAKE) $(EXTRAV_ARG) $(FLAV_ARG) $(CROSS_ARG) \ ++ ARCH=$(KERNEL_ARCH) clean ++else ++ifeq ($(strip $(MAKING_VIRTUAL_IMAGE)),) ++ $(MAKE) $(EXTRAV_ARG) $(FLAV_ARG) $(CROSS_ARG) \ ++ ARCH=$(KERNEL_ARCH) prepare ++endif ++endif ++ echo done > $@ ++ ++configure: debian .config stamp-configure ++stamp-configure: stamp-debian .config conf.vars stamp-kernel-configure ++ echo done > $@ ++ ++ ++ ++.config: ++ifneq ($(strip $(use_saved_config)),NO) ++ test -f .config || test ! -f .config.save || \ ++ cp -pf .config.save .config ++endif ++ test -f .config || test ! -f $(CONFIG_FILE) || \ ++ cp -pf $(CONFIG_FILE) .config ++ test -f .config || test ! -f $(DEBDIR)/config || \ ++ cp -pf $(DEBDIR)/config .config ++ifeq ($(strip $(have_new_config_target)),) ++ test -f .config || (echo "*** Need a config file .config" && false) ++endif ++# if $(have_new_config_target) is set, then we need not have a .config ++# file at this point ++ ++clean: ++ifeq ($(strip $(int_am_root)),) ++ifeq ($(strip $(ROOT_CMD)),) ++ @echo "You may need root privileges - some parts may fail" ++endif ++ $(ROOT_CMD) $(deb_rule) real_stamp_clean ++else ++ $(deb_rule) real_stamp_clean ++endif ++ ++# Perhaps a list of patches should be dumped to a file on patching? so we ++# only unpatch what we have applied? That would be changed, though saner, ++# behaviour ++real_stamp_clean: ++ test ! -f .config || cp -pf .config config.precious ++ -test -f Makefile && \ ++ $(MAKE) $(FLAV_ARG) $(EXTRAV_ARG) $(CROSS_ARG) ARCH=$(KERNEL_ARCH) distclean ++ test ! -f config.precious || mv -f config.precious .config ++ifeq ($(strip $(patch_the_kernel)),YES) ++ $(deb_rule) unpatch_now ++endif ++ifeq ($(strip $(NO_UNPATCH_BY_DEFAULT)),) ++ test ! -f stamp-patch || $(deb_rule) unpatch_now ++endif ++ -test -f stamp-building || test -f debian/official || rm -rf debian ++ # work around idiocy in recent kernel versions ++ test ! -e scripts/package/builddeb.dist || \ ++ mv -f scripts/package/builddeb.dist scripts/package/builddeb ++ test ! -e scripts/package/Makefile.dist || \ ++ mv -f scripts/package/Makefile.dist scripts/package/Makefile ++ rm -f $(FILES_TO_CLEAN) $(STAMPS_TO_CLEAN) ++ rm -rf $(DIRS_TO_CLEAN) ++ ++ ++unpatch_now: ++ifneq ($(strip $(valid_unpatches)),) ++ -for patch in $(valid_unpatches) ; do \ ++ if test -x $$patch; then \ ++ if $$patch; then \ ++ echo "Removed Patch $$patch "; \ ++ else \ ++ echo "Patch $$patch failed."; \ ++ echo "Hit return to Continue"; \ ++ read ans; \ ++ fi; \ ++ fi; \ ++ done ++ rm -f stamp-patch ++endif ++ ++ ++binary: binary-indep binary-arch ++binary-indep: kernel_source kernel_doc ++binary-arch: kernel_image kernel_headers ++ ++ ++kernel-source kernel_source: stamp-source ++stamp-source: stamp-debian ++ifeq ($(strip $(int_am_root)),) ++ifeq ($(strip $(ROOT_CMD)),) ++ @echo need root privileges; exit 1 ++else ++ $(ROOT_CMD) $(deb_rule) real_stamp_source ++endif ++else ++ $(deb_rule) real_stamp_source ++endif ++ ++real_stamp_source: ++ifneq ($(strip $(MAKING_VIRTUAL_IMAGE)),) ++ echo done > stamp-source ++else ++ifneq ($(strip $(HAVE_VERSION_MISMATCH)),) ++ @(echo "The changelog says we are creating $(saved_version), but I thought the version is $(version)"; exit 1) ++endif ++ test -f stamp-debian || $(deb_rule) debian ++ rm -rf $(SOURCE_TOP) ++ $(make_directory) $(SOURCE_TOP)/DEBIAN ++ $(make_directory) $(SOURCE_SRC) ++ $(make_directory) $(SOURCE_DOC) ++ sed -e 's/=P/$(package)/g' -e 's/=V/$(version)/g' \ ++ $(DEBDIR)/src.postinst > $(SOURCE_TOP)/DEBIAN/postinst ++ chmod 755 $(SOURCE_TOP)/DEBIAN/postinst ++ $(install_file) debian/changelog $(SOURCE_DOC)/changelog.Debian ++ gzip -9qf $(SOURCE_DOC)/changelog.Debian ++ $(install_file) $(DEBDIR)/README $(SOURCE_DOC)/debian.README ++ gzip -9qf $(SOURCE_DOC)/debian.README ++ $(install_file) $(DEBDIR)/README.grub $(SOURCE_DOC)/README.grub ++ gzip -9qf $(SOURCE_DOC)/README.grub ++ $(install_file) $(DEBDIR)/README.headers $(SOURCE_DOC)/README.headers ++ gzip -9qf $(SOURCE_DOC)/README.headers ++ $(install_file) $(DEBDIR)/README.tecra $(SOURCE_DOC)/README.tecra ++ gzip -9qf $(SOURCE_DOC)/README.tecra ++ $(install_file) $(DEBDIR)/README.modules $(SOURCE_DOC)/README.modules ++ gzip -9qf $(SOURCE_DOC)/README.modules ++ $(install_file) $(DEBDIR)/sample.module.control \ ++ $(SOURCE_DOC)/sample.module.control ++ gzip -9qf $(SOURCE_DOC)/sample.module.control ++ $(install_file) README $(SOURCE_DOC)/README ++ gzip -9qf $(SOURCE_DOC)/README ++ $(install_file) $(DEBDIR)/Flavours $(SOURCE_DOC)/Flavours ++ gzip -9qf $(SOURCE_DOC)/Flavours ++ $(install_file) $(DEBDIR)/Rationale $(SOURCE_DOC)/Rationale ++ gzip -9qf $(SOURCE_DOC)/Rationale ++ $(install_file) $(DEBDIR)/copyright.source $(SOURCE_DOC)/copyright ++ echo "This was produced by kernel-package version $(kpkg_version)." > \ ++ $(SOURCE_DOC)/Buildinfo ++ifneq ($(strip $(int_follow_symlinks_in_src)),) ++ -tar cfh - $$(echo * | sed -e 's/ debian//g' -e 's/\.deb//g' ) \ ++ | (cd $(SOURCE_SRC); umask 000; tar xpsf -) ++ (cd $(SOURCE_SRC)/include; rm -rf asm ; ) ++else ++ -tar cf - $$(echo * | sed -e 's/ debian//g' -e 's/\.deb//g' ) \ ++ | (cd $(SOURCE_SRC); umask 000; tar xspf -) ++ (cd $(SOURCE_SRC)/include; rm -f asm ; ) ++endif ++ $(install_file) debian/changelog $(SOURCE_SRC)/Debian.src.changelog ++ (cd $(SOURCE_SRC); \ ++ $(MAKE) $(EXTRAV_ARG) $(FLAV_ARG) $(CROSS_ARG) ARCH=$(KERNEL_ARCH) distclean) ++ (cd $(SOURCE_SRC); rm -f stamp-building $(STAMPS_TO_CLEAN)) ++ (cd $(SOURCE_SRC); \ ++ [ ! -d scripts/cramfs ] || make -C scripts/cramfs distclean ; ) ++ if test -f debian/official && test -f debian/README.Debian ; then \ ++ $(install_file) debian/README.Debian $(SOURCE_SRC)/README.Debian ; \ ++ $(install_file) debian/README.Debian $(SOURCE_DOC)/README.Debian ; \ ++ gzip -9qf $(SOURCE_DOC)/README.Debian;\ ++ else \ ++ sed -e 's/=V/$(version)/g' -e 's/=A/$(architecture)/g' \ ++ -e 's/=ST/$(INT_STEM)/g' \ ++ $(DEBDIR)/README.source > $(SOURCE_SRC)/README.Debian ; \ ++ fi ++ if test -f README.Debian ; then \ ++ $(install_file) README.Debian $(SOURCE_DOC)/README.Debian.1st; \ ++ gzip -9qf $(SOURCE_DOC)/README.Debian.1st;\ ++ fi ++ifneq ($(strip $(source_clean_hook)),) ++ (cd $(SOURCE_SRC); \ ++ test -x $(source_clean_hook) && $(source_clean_hook)) ++endif ++ chmod -R og=rX $(SOURCE_TOP) ++ chown -R root:root $(SOURCE_TOP) ++ (cd $(SOURCE_TOP)/usr/src/ && \ ++ tar $(TAR_COMPRESSION) -cf $(package).tar.$(TAR_SUFFIX) $(package) &&\ ++ rm -rf $(package);) ++ dpkg-gencontrol -isp -p$(package) -P$(SOURCE_TOP)/ ++ chmod -R og=rX $(SOURCE_TOP) ++ chown -R root:root $(SOURCE_TOP) ++ dpkg --build $(SOURCE_TOP) $(DEB_DEST) ++ rm -f -r $(SOURCE_TOP) ++ echo done > stamp-source ++endif ++ ++libc-kheaders libc_kheaders: stamp-libc-kheaders ++stamp-libc-kheaders: configure ++ @echo This target is now obsolete. ++ ++ ++kernel-headers kernel_headers: stamp-headers ++stamp-headers: configure ++ifeq ($(strip $(int_am_root)),) ++ifeq ($(strip $(ROOT_CMD)),) ++ @echo need root privileges; exit 1 ++else ++ $(ROOT_CMD) $(deb_rule) real_stamp_headers ++endif ++else ++ $(deb_rule) real_stamp_headers ++endif ++ ++real_stamp_headers: ++ifneq ($(strip $(MAKING_VIRTUAL_IMAGE)),) ++ echo done > stamp-headers ++else ++ifneq ($(strip $(HAVE_VERSION_MISMATCH)),) ++ @(echo "The changelog says we are creating $(saved_version), but I thought the version is $(version)"; exit 1) ++endif ++ifneq ($(strip $(UTS_RELEASE_VERSION)),$(strip $(version))) ++ @echo "The UTS Release version in include/linux/version.h $(UTS_RELEASE_VERSION) does not match current version $(version), reconfiguring" ++ touch Makefile ++endif ++ test -f stamp-configure || $(deb_rule) configure ++ rm -rf $(HEADER_TOP) ++ $(make_directory) $(HEADER_TOP)/DEBIAN ++ $(make_directory) $(HEADER_SRC) ++ $(make_directory) $(HEADER_DOC) ++ $(make_directory) $(HEADER_SRC)/arch/$(KERNEL_ARCH) ++ sed -e 's/=P/$(h_package)/g' -e 's/=V/$(version)/g' \ ++ $(DEBDIR)/include.postinst > $(HEADER_TOP)/DEBIAN/postinst ++ chmod 755 $(HEADER_TOP)/DEBIAN/postinst ++ $(install_file) $(DEBDIR)/copyright.headers $(HEADER_DOC)/copyright ++ $(install_file) debian/changelog $(HEADER_DOC)/changelog.Debian ++ gzip -9qf $(HEADER_DOC)/changelog.Debian ++ $(install_file) $(DEBDIR)/README.headers $(HEADER_DOC)/debian.README ++ gzip -9qf $(HEADER_DOC)/debian.README ++ $(install_file) .config $(HEADER_DOC)/config-$(version) ++ $(install_file) conf.vars $(HEADER_DOC)/conf.vars ++ gzip -9qf $(HEADER_DOC)/config-$(version) ++ gzip -9qf $(HEADER_DOC)/conf.vars ++ $(install_file) CREDITS $(HEADER_DOC)/ ++ gzip -9qf $(HEADER_DOC)/CREDITS ++ $(install_file) MAINTAINERS $(HEADER_DOC)/ ++ gzip -9qf $(HEADER_DOC)/MAINTAINERS ++ $(install_file) REPORTING-BUGS $(HEADER_DOC)/ ++ gzip -9qf $(HEADER_DOC)/REPORTING-BUGS ++ $(install_file) README $(HEADER_DOC)/ ++ gzip -9qf $(HEADER_DOC)/README ++ if test -f debian/official && test -f debian/README.Debian ; then \ ++ $(install_file) debian/README.Debian $(HEADER_DOC)/README.Debian ; \ ++ gzip -9qf $(HEADER_DOC)/README.Debian ; \ ++ $(install_file) README.Debian $(HEADER_DOC)/README.Debian;\ ++ gzip -9qf $(HEADER_DOC)/README.Debian;\ ++ fi ++ if test -f README.Debian ; then \ ++ $(install_file) README.Debian $(HEADER_DOC)/README.Debian.1st;\ ++ gzip -9qf $(HEADER_DOC)/README.Debian.1st;\ ++ fi ++ echo "This was produced by kernel-package version $(kpkg_version)." > \ ++ $(HEADER_DOC)/Buildinfo ++ chmod 0644 $(HEADER_DOC)/Buildinfo ++ $(install_file) Makefile $(HEADER_SRC) ++ test ! -e Rules.make || $(install_file) Rules.make $(HEADER_SRC) ++ test ! -e arch/$(KERNEL_ARCH)/Makefile || \ ++ $(install_file) arch/$(KERNEL_ARCH)/Makefile $(HEADER_SRC)/arch/$(KERNEL_ARCH) ++ test ! -e Rules.make || $(install_file) Rules.make $(HEADER_SRC) ++ifneq ($(strip $(int_follow_symlinks_in_src)),) ++ -tar cfh - include | (cd $(HEADER_SRC); umask 000; tar xsf -) ++ (cd $(HEADER_SRC)/include; rm -rf asm; ln -s asm-$(KERNEL_ARCH) asm) ++else ++ -tar cf - include | (cd $(HEADER_SRC); umask 000; tar xsf -) ++ (cd $(HEADER_SRC)/include; rm -f asm; ln -s asm-$(KERNEL_ARCH) asm) ++endif ++ $(install_file) .config $(HEADER_SRC)/.config ++ echo $(debian) > $(HEADER_SRC)/$(INT_STEM)-headers.revision ++ifneq ($(strip $(header_clean_hook)),) ++ (cd $(HEADER_SRC); \ ++ test -x $(header_clean_hook) && $(header_clean_hook)) ++endif ++ dpkg-gencontrol -DArchitecture=$(architecture) -isp \ ++ -p$(h_package) -P$(HEADER_TOP)/ ++ chown -R root:root $(HEADER_TOP) ++ chmod -R og=rX $(HEADER_TOP) ++ dpkg --build $(HEADER_TOP) $(DEB_DEST) ++ rm -rf $(HEADER_TOP) ++ echo done > stamp-headers ++endif ++ ++kernel-doc kernel_doc: stamp-doc ++stamp-doc: stamp-debian ++ifeq ($(strip $(int_am_root)),) ++ifeq ($(strip $(ROOT_CMD)),) ++ @echo need root privileges; exit 1 ++else ++ $(ROOT_CMD) $(deb_rule) real_stamp_doc ++endif ++else ++ $(deb_rule) real_stamp_doc ++endif ++ ++real_stamp_doc: ++ifneq ($(strip $(MAKING_VIRTUAL_IMAGE)),) ++ echo done > stamp-doc ++else ++ifneq ($(strip $(HAVE_VERSION_MISMATCH)),) ++ @(echo "The changelog says we are creating $(saved_version), but I thought the version is $(version)"; exit 1) ++endif ++ test -f stamp-debian || $(deb_rule) debian ++ rm -rf $(DOC_TOP) ++ $(make_directory) $(DOC_TOP)/DEBIAN ++ $(make_directory) $(DOC_DOC) ++ $(install_file) debian/changelog $(DOC_DOC)/changelog.Debian ++ $(install_file) $(DEBDIR)/README.doc $(DOC_DOC)/README.Debian ++ echo "This was produced by kernel-package version $(kpkg_version)." > \ ++ $(DOC_DOC)/Buildinfo ++ chmod 0644 $(DOC_DOC)/Buildinfo ++ if test -f debian/official && test -f debian/README.Debian ; then \ ++ $(install_file) debian/README.Debian $(DOC_DOC)/README.Debian;\ ++ fi ++ if test -f README.Debian ; then \ ++ $(install_file) README.Debian $(DOC_DOC)/README.Debian.1st;\ ++ fi ++ifneq ($(strip $(shell if [ -x /usr/bin/db2html ]; then echo YSE; fi)),) ++ $(MAKE) mandocs htmldocs ++endif ++ -tar cf - Documentation | (cd $(DOC_DOC); umask 000; tar xsf -) ++ifneq ($(shell if [ $(VERSION) -ge 2 ] && [ $(PATCHLEVEL) -ge 5 ]; then \ ++ echo new;fi),) ++ find -name Kconfig -print0 | xargs -0r cat | \ ++ (umask 000 ; cat > $(DOC_DOC)/Kconfig.collected) ++# removing if empty should be faster than running find twice ++ if ! test -s $(DOC_DOC)/Kconfig.collected ; then \ ++ rm -f $(DOC_DOC)/Kconfig.collected ; \ ++ fi ++endif ++ifneq ($(strip $(doc_clean_hook)),) ++ (cd $(DOC_DOC); \ ++ test -x $(doc_clean_hook) && $(doc_clean_hook)) ++endif ++ -gzip -9qfr $(DOC_DOC) ++ -find $(DOC_DOC) -type f -name \*.gz -perm +111 -exec gunzip {} \; ++ $(install_file) $(DEBDIR)/copyright.doc $(DOC_DOC)/copyright ++ sed -e 's/=P/$(d_package)/g' -e 's/=V/$(version)/g' \ ++ $(DEBDIR)/src.postinst > $(DOC_TOP)/DEBIAN/postinst ++ chmod 755 $(DOC_TOP)/DEBIAN/postinst ++ dpkg-gencontrol -isp -p$(d_package) -P$(DOC_TOP)/ ++ chmod -R og=rX $(DOC_TOP) ++ chown -R root:root $(DOC_TOP) ++ dpkg --build $(DOC_TOP) $(DEB_DEST) ++ rm -rf $(DOC_TOP) ++ echo done > stamp-doc ++endif ++ ++kernel-image kernel_image: stamp-image ++stamp-image: configure build kernel-image-deb ++# % make config ++# % make-kpkg build ++# % sudo make -f debian/rules kernel-image-deb ++# seems to create a working .deb with a kernel that gives the correct ++# user name (as opposed to root@...) ++kernel-image-deb: ++ifeq ($(strip $(int_am_root)),) ++ifeq ($(strip $(ROOT_CMD)),) ++ @echo need root privileges; exit 1 ++else ++ $(ROOT_CMD) $(deb_rule) real_stamp_image ++endif ++else ++ $(deb_rule) real_stamp_image ++endif ++ ++real_stamp_image: ++ifneq ($(strip $(HAVE_VERSION_MISMATCH)),) ++ @(echo "The changelog says we are creating $(saved_version), but I thought the version is $(version)"; exit 1) ++endif ++ifneq ($(strip $(UTS_RELEASE_VERSION)),$(strip $(version))) ++ @echo "The UTS Release version in include/linux/version.h $(UTS_RELEASE_VERSION) does not match current version $(version), reconfiguring." ++ touch Makefile ++endif ++ rm -f -r ./$(IMAGE_TOP) ./$(IMAGE_TOP).deb ++ test -f stamp-configure || $(deb_rule) configure ++ test -f stamp-build || $(deb_rule) build ++ $(make_directory) $(IMAGE_TOP)/DEBIAN ++ $(make_directory) $(IMAGE_TOP)/$(IMAGEDIR) ++ $(make_directory) $(IMAGE_DOC) ++ifneq ($(strip $(KERNEL_ARCH)),um) ++ ifneq ($(strip $(KERNEL_ARCH)),xen) ++ sed -e 's/=V/$(version)/g' -e 's/=B/$(link_in_boot)/g' \ ++ -e 's/=ST/$(INT_STEM)/g' -e 's/=R/$(reverse_symlink)/g' \ ++ -e 's/=K/$(kimage)/g' -e 's/=L/$(loader)/g' \ ++ -e 's/=I/$(INITRD)/g' -e 's,=D,$(IMAGEDIR),g' \ ++ -e 's@=M@$(MKIMAGE)@g' -e 's/=OF/$(AM_OFFICIAL)/g' \ ++ -e 's@=A@$(DEB_HOST_ARCH)@g' \ ++ -e 's/=S/$(no_symlink)/g' \ ++ $(DEBDIR)/image.postinst > $(IMAGE_TOP)/DEBIAN/postinst ++ chmod 755 $(IMAGE_TOP)/DEBIAN/postinst ++ sed -e 's/=V/$(version)/g' -e 's/=B/$(link_in_boot)/g' \ ++ -e 's/=ST/$(INT_STEM)/g' -e 's/=R/$(reverse_symlink)/g' \ ++ -e 's/=K/$(kimage)/g' -e 's/=L/$(loader)/g' \ ++ -e 's/=I/$(INITRD)/g' -e 's,=D,$(IMAGEDIR),g' \ ++ -e 's@=M@$(MKIMAGE)@g' -e 's/=OF/$(AM_OFFICIAL)/g' \ ++ -e 's@=A@$(DEB_HOST_ARCH)@g' \ ++ -e 's/=S/$(no_symlink)/g' \ ++ $(DEBDIR)/image.postrm > $(IMAGE_TOP)/DEBIAN/postrm ++ chmod 755 $(IMAGE_TOP)/DEBIAN/postrm ++ sed -e 's/=V/$(version)/g' -e 's/=B/$(link_in_boot)/g' \ ++ -e 's/=ST/$(INT_STEM)/g' -e 's/=R/$(reverse_symlink)/g' \ ++ -e 's/=K/$(kimage)/g' -e 's/=L/$(loader)/g' \ ++ -e 's/=I/$(INITRD)/g' -e 's,=D,$(IMAGEDIR),g' \ ++ -e 's@=M@$(MKIMAGE)@g' -e 's/=OF/$(AM_OFFICIAL)/g' \ ++ -e 's@=A@$(DEB_HOST_ARCH)@g' \ ++ -e 's/=S/$(no_symlink)/g' \ ++ $(DEBDIR)/image.preinst > $(IMAGE_TOP)/DEBIAN/preinst ++ chmod 755 $(IMAGE_TOP)/DEBIAN/preinst ++ sed -e 's/=V/$(version)/g' -e 's/=B/$(link_in_boot)/g' \ ++ -e 's/=ST/$(INT_STEM)/g' -e 's/=R/$(reverse_symlink)/g' \ ++ -e 's/=K/$(kimage)/g' -e 's/=L/$(loader)/g' \ ++ -e 's/=I/$(INITRD)/g' -e 's,=D,$(IMAGEDIR),g' \ ++ -e 's@=M@$(MKIMAGE)@g' -e 's/=OF/$(AM_OFFICIAL)/g' \ ++ -e 's@=A@$(DEB_HOST_ARCH)@g' \ ++ -e 's/=S/$(no_symlink)/g' \ ++ $(DEBDIR)/image.prerm > $(IMAGE_TOP)/DEBIAN/prerm ++ chmod 755 $(IMAGE_TOP)/DEBIAN/prerm ++ else ++ sed -e 's/=V/$(version)/g' -e 's/=B/$(link_in_boot)/g' \ ++ -e 's/=ST/$(INT_STEM)/g' -e 's/=R/$(reverse_symlink)/g' \ ++ -e 's/=K/$(kimage)/g' -e 's/=L/$(loader)/g' \ ++ -e 's/=I/$(INITRD)/g' -e 's,=D,$(IMAGEDIR),g' \ ++ -e 's@=M@$(MKIMAGE)@g' -e 's/=OF/$(AM_OFFICIAL)/g' \ ++ -e 's@=A@$(DEB_HOST_ARCH)@g' \ ++ -e 's/=S/$(no_symlink)/g' \ ++ $(DEBDIR)/xen.postinst > $(IMAGE_TOP)/DEBIAN/postinst ++ chmod 755 $(IMAGE_TOP)/DEBIAN/postinst ++ sed -e 's/=V/$(version)/g' -e 's/=B/$(link_in_boot)/g' \ ++ -e 's/=ST/$(INT_STEM)/g' -e 's/=R/$(reverse_symlink)/g' \ ++ -e 's/=K/$(kimage)/g' -e 's/=L/$(loader)/g' \ ++ -e 's/=I/$(INITRD)/g' -e 's,=D,$(IMAGEDIR),g' \ ++ -e 's@=M@$(MKIMAGE)@g' -e 's/=OF/$(AM_OFFICIAL)/g' \ ++ -e 's@=A@$(DEB_HOST_ARCH)@g' \ ++ -e 's/=S/$(no_symlink)/g' \ ++ $(DEBDIR)/xen.prerm > $(IMAGE_TOP)/DEBIAN/prerm ++ chmod 755 $(IMAGE_TOP)/DEBIAN/prerm ++ endif ++else ++ $(make_directory) $(UML_DIR) ++ $(make_directory) $(MAN1DIR) ++ sed -e 's/=V/$(version)/g' -e 's/=B/$(link_in_boot)/g' \ ++ -e 's/=ST/$(INT_STEM)/g' -e 's/=R/$(reverse_symlink)/g' \ ++ -e 's/=K/$(kimage)/g' -e 's/=L/$(loader)/g' \ ++ -e 's/=I/$(INITRD)/g' -e 's,=D,$(IMAGEDIR),g' \ ++ -e 's@=M@$(MKIMAGE)@g' -e 's/=OF/$(AM_OFFICIAL)/g' \ ++ -e 's@=A@$(DEB_HOST_ARCH)@g' \ ++ -e 's/=S/$(no_symlink)/g' \ ++ $(DEBDIR)/um.postinst > $(IMAGE_TOP)/DEBIAN/postinst ++ chmod 755 $(IMAGE_TOP)/DEBIAN/postinst ++ sed -e 's/=V/$(version)/g' -e 's/=B/$(link_in_boot)/g' \ ++ -e 's/=ST/$(INT_STEM)/g' -e 's/=R/$(reverse_symlink)/g' \ ++ -e 's/=K/$(kimage)/g' -e 's/=L/$(loader)/g' \ ++ -e 's/=I/$(INITRD)/g' -e 's,=D,$(IMAGEDIR),g' \ ++ -e 's@=M@$(MKIMAGE)@g' -e 's/=OF/$(AM_OFFICIAL)/g' \ ++ -e 's@=A@$(DEB_HOST_ARCH)@g' \ ++ -e 's/=S/$(no_symlink)/g' \ ++ $(DEBDIR)/um.prerm > $(IMAGE_TOP)/DEBIAN/prerm ++ chmod 755 $(IMAGE_TOP)/DEBIAN/prerm ++ $(install_file) $(DEBDIR)/linux.1 $(MAN1DIR)/linux-$(version).1 ++ gzip -9fq $(MAN1DIR)/linux-$(version).1 ++endif ++ $(install_file) Documentation/Changes $(IMAGE_DOC)/ ++ gzip -9qf $(IMAGE_DOC)/Changes ++ $(install_file) debian/changelog $(IMAGE_DOC)/changelog.Debian ++ gzip -9qf $(IMAGE_DOC)/changelog.Debian ++ifdef loaderdoc ++ $(install_file) $(DEBDIR)/$(loaderdoc) $(IMAGE_DOC)/$(loaderdoc) ++ gzip -9qf $(IMAGE_DOC)/$(loaderdoc) ++endif ++ $(install_file) $(DEBDIR)/README.image $(IMAGE_DOC)/debian.README ++ gzip -9qf $(IMAGE_DOC)/debian.README ++ $(install_file) $(DEBDIR)/copyright.image $(IMAGE_DOC)/copyright ++ echo "This was produced by kernel-package version $(kpkg_version)." > \ ++ $(IMAGE_DOC)/Buildinfo ++ chmod 0644 $(IMAGE_DOC)/Buildinfo ++ $(install_file) .config $(INT_IMAGE_DESTDIR)/config-$(version) ++ $(install_file) conf.vars $(IMAGE_DOC)/conf.vars ++ gzip -9qf $(IMAGE_DOC)/conf.vars ++ $(install_file) debian/buildinfo $(IMAGE_DOC)/buildinfo ++ gzip -9qf $(IMAGE_DOC)/buildinfo ++ if test -f debian/official && test -f debian/README.Debian ; then \ ++ $(install_file) debian/README.Debian $(IMAGE_DOC)/README.Debian ; \ ++ gzip -9qf $(IMAGE_DOC)/README.Debian;\ ++ fi ++ if test -f README.Debian ; then \ ++ $(install_file) README.Debian $(IMAGE_DOC)/README.Debian.1st;\ ++ gzip -9qf $(IMAGE_DOC)/README.Debian.1st;\ ++ fi ++ if test -f Debian.src.changelog; then \ ++ $(install_file) Debian.src.changelog $(IMAGE_DOC)/; \ ++ gzip -9qf $(IMAGE_DOC)/Debian.src.changelog;\ ++ fi ++ifeq ($(strip $(HAVE_EXTRA_DOCS)),YES) ++ $(install_file) $(extra_docs) $(IMAGE_DOC)/ ++endif ++ifneq ($(strip $(shell grep -E ^[^\#]*CONFIG_MODULES $(CONFIG_FILE))),) ++ifeq ($(strip $(HAVE_NEW_MODLIB)),) ++ $(mod_inst_cmds) ++else ++# could have also said DEPMOD=/bin/true instead of moving files ++ifneq ($(strip $(KERNEL_CROSS)),) ++ mv System.map System.precious ++endif ++ $(MAKE) $(EXTRAV_ARG) INSTALL_MOD_PATH=$(INSTALL_MOD_PATH) \ ++ $(CROSS_ARG) ARCH=$(KERNEL_ARCH) modules_install ++ifneq ($(strip $(KERNEL_CROSS)),) ++ mv System.precious System.map ++endif ++endif ++ test ! -e $(IMAGE_TOP)/lib/modules/$(version)/source || \ ++ mv $(IMAGE_TOP)/lib/modules/$(version)/source ./debian/source-link ++ test ! -e $(IMAGE_TOP)/lib/modules/$(version)/build || \ ++ mv $(IMAGE_TOP)/lib/modules/$(version)/build ./debian/build-link ++ifeq ($(strip $(KERNEL_ARCH)),um) ++ -depmod -q -FSystem.map -b $(IMAGE_TOP) \ ++ $(version)-$$(sed q include/linux/version.h | sed s/\"//g | awk -F\- '{print $$2}') ++else ++ifeq ($(DEB_BUILD_GNU_TYPE),$(DEB_HOST_GNU_TYPE)) ++ -depmod -q -FSystem.map -b $(IMAGE_TOP) $(version); ++endif ++endif ++ test ! -e ./debian/source-link || \ ++ mv ./debian/source-link $(IMAGE_TOP)/lib/modules/$(version)/source ++ test ! -e ./debian/build-link || \ ++ mv ./debian/build-link $(IMAGE_TOP)/lib/modules/$(version)/build ++ ++endif ++ifeq ($(strip $(NEED_DIRECT_GZIP_IMAGE)),YES) ++ gzip -9vc $(kimagesrc) > $(kimagedest) ++else ++ cp $(kimagesrc) $(kimagedest) ++endif ++ifeq ($(strip $(KERNEL_ARCH)),um) ++ chmod 755 $(kimagedest); ++ifeq (,$(findstring nostrip,$(DEB_BUILD_OPTIONS))) ++ strip --strip-unneeded --remove-section=.note --remove-section=.comment $(kimagedest); ++endif ++else ++ chmod 644 $(kimagedest); ++endif ++ifeq ($(strip $(HAVE_COFF_IMAGE)),YES) ++ cp $(coffsrc) $(coffdest) ++ chmod 644 $(coffdest) ++endif ++ifeq ($(strip $(int_install_vmlinux)),YES) ++ifneq ($(strip $(kelfimagesrc)),) ++ cp $(kelfimagesrc) $(kelfimagedest) ++ chmod 644 $(kelfimagedest) ++endif ++endif ++ if test -d $(SRCTOP)/debian/image.d ; then \ ++ IMAGE_TOP=$(IMAGE_TOP) version=$(version) \ ++ run-parts --verbose $(SRCTOP)/debian/image.d ; \ ++ fi ++ if [ -x debian/post-install ]; then \ ++ IMAGE_TOP=$(IMAGE_TOP) STEM=$(INT_STEM) version=$(version) \ ++ debian/post-install; \ ++ fi ++ifneq ($(strip $(image_clean_hook)),) ++ (cd $(IMAGE_TOP); \ ++ test -x $(image_clean_hook) && $(image_clean_hook)) ++endif ++ test ! -s applied_patches || cp applied_patches \ ++ $(INT_IMAGE_DESTDIR)/patches-$(version) ++ test ! -s applied_patches || chmod 644 \ ++ $(INT_IMAGE_DESTDIR)/patches-$(version) ++ifneq ($(strip $(KERNEL_ARCH)),um) ++ test ! -f System.map || cp System.map \ ++ $(INT_IMAGE_DESTDIR)/System.map-$(version); ++ test ! -f System.map || chmod 644 \ ++ $(INT_IMAGE_DESTDIR)/System.map-$(version); ++else ++ mv $(INSTALL_MOD_PATH)/lib/modules/* $(UML_DIR)/ -v ++ rm -rf $(INSTALL_MOD_PATH)/lib ++endif ++ # For LKCD enabled kernels ++ test ! -f Kerntypes || cp Kerntypes \ ++ $(INT_IMAGE_DESTDIR)/Kerntypes-$(version) ++ test ! -f Kerntypes || chmod 644 \ ++ $(INT_IMAGE_DESTDIR)/Kerntypes-$(version) ++ifeq ($(strip $(delete_build_link)),YES) ++ rm -f $(IMAGE_TOP)/lib/modules/$(version)/build ++endif ++ dpkg-gencontrol -DArchitecture=$(architecture) -isp \ ++ -p$(i_package) -P$(IMAGE_TOP)/ ++ chmod -R og=rX $(IMAGE_TOP) ++ chown -R root:root $(IMAGE_TOP) ++ dpkg --build $(IMAGE_TOP) $(DEB_DEST) ++ rm -f -r $(IMAGE_TOP) ++ifeq ($(strip $(do_clean)),YES) ++ $(MAKE) $(EXTRAV_ARG) $(FLAV_ARG) $(CROSS_ARG) ARCH=$(KERNEL_ARCH) clean ++ rm -f stamp-build ++endif ++ echo done > stamp-image ++ ++# This for STOP_FOR_BIN86 ++endif ++ ++# This endif is for HAVE_VALID_PACKAGE_VERSION ++endif ++ ++#This endif is for IN_KERNEL_DIR ++endif ++ ++ ++# only generate module image packages ++modules-image modules_image: configure ++ifeq ($(strip $(shell grep -E ^[^\#]*CONFIG_MODULES $(CONFIG_FILE))),) ++ @echo Modules not configured, so not making $@ ++else ++ifneq ($(strip $(HAVE_VERSION_MISMATCH)),) ++ @(echo "The changelog says we are creating $(saved_version), but I thought the version is $(version)"; exit 1) ++endif ++ -for module in $(valid_modules) ; do \ ++ if test -d $$module; then \ ++ (cd $$module; \ ++ if ./debian/rules KVERS="$(version)" KSRC="$(SRCTOP)" \ ++ KMAINT="$(pgp)" KEMAIL="$(email)" \ ++ KPKG_DEST_DIR="$(KPKG_DEST_DIR)" \ ++ KPKG_MAINTAINER="$(maintainer)" \ ++ KPKG_EXTRAV_ARG="$(EXTRAV_ARG)" \ ++ ARCH="$(KERNEL_ARCH)" \ ++ KDREV="$(debian)" kdist_image; then \ ++ echo "Module $$module processed fine"; \ ++ else \ ++ echo "Module $$module failed."; \ ++ if [ "X$(strip $(ROOT_CMD))" != "X" ]; then \ ++ echo "Perhaps $$module does not understand --rootcmd?"; \ ++ echo "If you see messages that indicate that it is not"; \ ++ echo "in fact being built as root, please file a bug "; \ ++ echo "against $$module."; \ ++ fi; \ ++ echo "Hit return to Continue"; \ ++ read ans; \ ++ fi; \ ++ ); \ ++ fi; \ ++ done ++endif ++ ++# generate the modules packages and sign them ++modules: configure ++ifeq ($(strip $(shell grep -E ^[^\#]*CONFIG_MODULES $(CONFIG_FILE))),) ++ @echo Modules not configured, so not making $@ ++else ++ifneq ($(strip $(HAVE_VERSION_MISMATCH)),) ++ @(echo "The changelog says we are creating $(saved_version), but I thought the version is $(version)"; exit 1) ++endif ++ -for module in $(valid_modules) ; do \ ++ if test -d $$module; then \ ++ (cd $$module; \ ++ if ./debian/rules KVERS="$(version)" KSRC="$(SRCTOP)" \ ++ KMAINT="$(pgp)" KEMAIL="$(email)" \ ++ KPKG_DEST_DIR="$(KPKG_DEST_DIR)" \ ++ KPKG_MAINTAINER="$(maintainer)" \ ++ ARCH=$(KERNEL_ARCH) \ ++ KPKG_EXTRAV_ARG="$(EXTRAV_ARG)" \ ++ KDREV="$(debian)" kdist; then \ ++ echo "Module $$module processed fine"; \ ++ else \ ++ echo "Module $$module failed."; \ ++ if [ "X$(strip $(ROOT_CMD))" != "X" ]; then \ ++ echo "Perhaps $$module does not understand --rootcmd?"; \ ++ echo "If you see messages that indicate that it is not"; \ ++ echo "in fact being built as root, please file a bug "; \ ++ echo "against $$module."; \ ++ fi; \ ++ echo "Hit return to Continue?"; \ ++ read ans; \ ++ fi; \ ++ ); \ ++ fi; \ ++ done ++endif ++ ++# configure the modules packages ++modules-config modules_config: configure ++ifeq ($(strip $(shell grep -E ^[^\#]*CONFIG_MODULES $(CONFIG_FILE))),) ++ @echo Modules not configured, so not making $@ ++else ++ifneq ($(strip $(HAVE_VERSION_MISMATCH)),) ++ @(echo "The changelog says we are creating $(saved_version), but I thought the version is $(version)"; exit 1) ++endif ++ -for module in $(valid_modules) ; do \ ++ if test -d $$module; then \ ++ (cd $$module; \ ++ if ./debian/rules KVERS="$(version)" KSRC="$(SRCTOP)" \ ++ KMAINT="$(pgp)" KEMAIL="$(email)" \ ++ KPKG_DEST_DIR="$(KPKG_DEST_DIR)" \ ++ KPKG_MAINTAINER="$(maintainer)" \ ++ ARCH=$(KERNEL_ARCH) \ ++ KPKG_EXTRAV_ARG="$(EXTRAV_ARG)" \ ++ KDREV="$(debian)" kdist_configure; then\ ++ echo "Module $$module configured fine"; \ ++ else \ ++ echo "Module $$module failed to configure"; \ ++ echo "Hit return to Continue?"; \ ++ read ans; \ ++ fi; \ ++ ); \ ++ fi; \ ++ done ++endif ++ ++modules-clean modules_clean: .config ++ifeq ($(strip $(shell grep -E ^[^\#]*CONFIG_MODULES $(CONFIG_FILE))),) ++ @echo Modules not configured, so not making $@ ++else ++ -for module in $(valid_modules); do \ ++ if test -d $$module; then \ ++ (cd $$module; \ ++ if ./debian/rules KVERS="$(version)" KSRC="$(SRCTOP)" \ ++ KMAINT="$(pgp)" KEMAIL="$(email)" \ ++ KPKG_DEST_DIR="$(KPKG_DEST_DIR)" \ ++ KPKG_MAINTAINER="$(maintainer)" \ ++ ARCH=$(KERNEL_ARCH) \ ++ KPKG_EXTRAV_ARG="$(EXTRAV_ARG)" \ ++ KDREV="$(debian)" kdist_clean; then \ ++ echo "Module $$module cleaned"; \ ++ else \ ++ echo "Module $$module failed to clean up"; \ ++ echo "Hit return to Continue?"; \ ++ read ans; \ ++ fi; \ ++ ); \ ++ fi; \ ++ done ++endif ++ ++ ++source diff: ++ @echo >&2 'source and diff are obsolete - use dpkg-source -b'; false ++ ++define mod_inst_cmds ++ @( \ ++ MODLIB=$(INSTALL_MOD_PATH)/lib/modules/$(version); \ ++ cd modules; \ ++ MODULES=""; \ ++ inst_mod() { These="$$(cat $$1)"; MODULES="$$MODULES $$These"; \ ++ mkdir -p $$MODLIB/$$2; cp $$These $$MODLIB/$$2; \ ++ echo Installing modules under $$MODLIB/$$2; \ ++ }; \ ++ \ ++ if [ -f BLOCK_MODULES ]; then inst_mod BLOCK_MODULES block; fi; \ ++ if [ -f NET_MODULES ]; then inst_mod NET_MODULES net; fi; \ ++ if [ -f IPV4_MODULES ]; then inst_mod IPV4_MODULES ipv4; fi; \ ++ if [ -f IPV6_MODULES ]; then inst_mod IPV6_MODULES ipv6; fi; \ ++ if [ -f ATM_MODULES ]; then inst_mod ATM_MODULES atm; fi; \ ++ if [ -f SCSI_MODULES ]; then inst_mod SCSI_MODULES scsi; fi; \ ++ if [ -f FS_MODULES ]; then inst_mod FS_MODULES fs; fi; \ ++ if [ -f NLS_MODULES ]; then inst_mod NLS_MODULES fs; fi; \ ++ if [ -f CDROM_MODULES ]; then inst_mod CDROM_MODULES cdrom; fi; \ ++ if [ -f HAM_MODULES ]; then inst_mod HAM_MODULES net; fi; \ ++ if [ -f SOUND_MODULES ]; then inst_mod SOUND_MODULES sound; fi; \ ++ if [ -f VIDEO_MODULES ]; then inst_mod VIDEO_MODULES video; fi; \ ++ if [ -f FC4_MODULES ]; then inst_mod FC4_MODULES fc4; fi; \ ++ if [ -f IRDA_MODULES ]; then inst_mod IRDA_MODULES net; fi; \ ++ if [ -f USB_MODULES ]; then inst_mod USB_MODULES usb; fi; \ ++ if [ -f SK98LIN_MODULES ]; then inst_mod SK98LIN_MODULES net; fi; \ ++ if [ -f SKFP_MODULES ]; then inst_mod SKFP_MODULES net; fi; \ ++ if [ -f IEEE1394_MODULES ]; then inst_mod IEEE1394_MODULES ieee1394; fi; \ ++ if [ -f PCMCIA_MODULES ]; then inst_mod PCMCIA_MODULES pcmcia; fi; \ ++ if [ -f PCMCIA_NET_MODULES ]; then inst_mod PCMCIA_NET_MODULES pcmcia; fi; \ ++ if [ -f PCMCIA_CHAR_MODULES ]; then inst_mod PCMCIA_CHAR_MODULES pcmcia; fi; \ ++ if [ -f PCMCIA_SCSI_MODULES ]; then inst_mod PCMCIA_SCSI_MODULES pcmcia; fi; \ ++ \ ++ for f in *.o; do [ -r $$f ] && echo $$f; done > .allmods; \ ++ echo $$MODULES | tr ' ' '\n' | sort | comm -23 .allmods - > .misc; \ ++ if [ -s .misc ]; then inst_mod .misc misc; fi; \ ++ rm -f .misc .allmods; \ ++ ) ++endef ++ ++# 2.0.38 2.2.12 2.3.1 ++# BLOCK_MODULES X X X ++# NET_MODULES X X X ++# IPV4_MODULES X X X ++# IPV6_MODULES X X ++# ATM_MODULES X ++# SCSI_MODULES X X X ++# FS_MODULES X X X ++# NLS_MODULES X X ++# CDROM_MODULES X X X ++# HAM_MODULES X X ++# SOUND_MODULES X X ++# VIDEO_MODULES X X ++# FC4_MODULES X X ++# IRDA_MODULES X X ++# USB_MODULES X ++ ++.PHONY: binary binary-arch binary-indep clean debian modules modules_image ++ ++test: ++ echo version: $(version) ++ echo KPKG_ARCH: $(KPKG_ARCH) ++ echo $(DEB_BUILD_ARCH) ++ echo $(DEB_BUILD_GNU_CPU) ++ echo $(DEB_BUILD_GNU_TYPE) ++ echo $(DEB_HOST_ARCH) ++ echo $(DEB_HOST_GNU_CPU) ++ echo $(DEB_HOST_GNU_SYSTEM) ++ echo $(DEB_HOST_GNU_TYPE) ++ echo $(DEB_BUILD_GNU_SYSTEM) +diff -urN linux-2.6.11/Documentation/networking/ip-sysctl.txt linux.sinabox/Documentation/networking/ip-sysctl.txt +--- linux-2.6.11/Documentation/networking/ip-sysctl.txt 2005-03-02 08:38:07.000000000 +0100 ++++ linux.sinabox/Documentation/networking/ip-sysctl.txt 2005-03-26 19:02:06.000000000 +0100 +@@ -661,7 +661,7 @@ + TRUE: disable IPv4-mapped address feature + FALSE: enable IPv4-mapped address feature + +- Default: FALSE (as specified in RFC2553bis) ++ Default: FALSE (as specified in RFC3493) + + IPv6 Fragmentation: + +diff -urN linux-2.6.11/drivers/char/drm/drm_ioctl.c linux.sinabox/drivers/char/drm/drm_ioctl.c +--- linux-2.6.11/drivers/char/drm/drm_ioctl.c 2005-03-02 08:37:50.000000000 +0100 ++++ linux.sinabox/drivers/char/drm/drm_ioctl.c 2005-03-19 07:34:53.000000000 +0100 +@@ -326,6 +326,8 @@ + + DRM_COPY_FROM_USER_IOCTL(sv, argp, sizeof(sv)); + ++ memset(&version, 0, sizeof(version)); ++ + dev->driver->version(&version); + retv.drm_di_major = DRM_IF_MAJOR; + retv.drm_di_minor = DRM_IF_MINOR; +diff -urN linux-2.6.11/drivers/input/serio/i8042-x86ia64io.h linux.sinabox/drivers/input/serio/i8042-x86ia64io.h +--- linux-2.6.11/drivers/input/serio/i8042-x86ia64io.h 2005-03-02 08:38:17.000000000 +0100 ++++ linux.sinabox/drivers/input/serio/i8042-x86ia64io.h 2005-03-19 07:35:01.000000000 +0100 +@@ -88,7 +88,7 @@ + }; + #endif + +-#ifdef CONFIG_ACPI ++#if defined(__ia64__) && defined(CONFIG_ACPI) + #include + #include + +@@ -281,7 +281,7 @@ + i8042_kbd_irq = I8042_MAP_IRQ(1); + i8042_aux_irq = I8042_MAP_IRQ(12); + +-#ifdef CONFIG_ACPI ++#if defined(__ia64__) && defined(CONFIG_ACPI) + if (i8042_acpi_init()) + return -1; + #endif +@@ -300,7 +300,7 @@ + + static inline void i8042_platform_exit(void) + { +-#ifdef CONFIG_ACPI ++#if defined(__ia64__) && defined(CONFIG_ACPI) + i8042_acpi_exit(); + #endif + } +diff -urN linux-2.6.11/drivers/md/raid6altivec.uc linux.sinabox/drivers/md/raid6altivec.uc +--- linux-2.6.11/drivers/md/raid6altivec.uc 2005-03-02 08:38:25.000000000 +0100 ++++ linux.sinabox/drivers/md/raid6altivec.uc 2005-03-19 07:35:02.000000000 +0100 +@@ -108,7 +108,11 @@ + int raid6_have_altivec(void) + { + /* This assumes either all CPUs have Altivec or none does */ ++#ifdef CONFIG_PPC64 + return cur_cpu_spec->cpu_features & CPU_FTR_ALTIVEC; ++#else ++ return cur_cpu_spec[0]->cpu_features & CPU_FTR_ALTIVEC; ++#endif + } + #endif + +diff -urN linux-2.6.11/drivers/media/video/adv7170.c linux.sinabox/drivers/media/video/adv7170.c +--- linux-2.6.11/drivers/media/video/adv7170.c 2005-03-02 08:38:26.000000000 +0100 ++++ linux.sinabox/drivers/media/video/adv7170.c 2005-03-19 07:35:03.000000000 +0100 +@@ -130,7 +130,7 @@ + u8 block_data[32]; + + msg.addr = client->addr; +- msg.flags = client->flags; ++ msg.flags = 0; + while (len >= 2) { + msg.buf = (char *) block_data; + msg.len = 0; +diff -urN linux-2.6.11/drivers/media/video/adv7175.c linux.sinabox/drivers/media/video/adv7175.c +--- linux-2.6.11/drivers/media/video/adv7175.c 2005-03-02 08:38:26.000000000 +0100 ++++ linux.sinabox/drivers/media/video/adv7175.c 2005-03-19 07:35:03.000000000 +0100 +@@ -126,7 +126,7 @@ + u8 block_data[32]; + + msg.addr = client->addr; +- msg.flags = client->flags; ++ msg.flags = 0; + while (len >= 2) { + msg.buf = (char *) block_data; + msg.len = 0; +diff -urN linux-2.6.11/drivers/media/video/bt819.c linux.sinabox/drivers/media/video/bt819.c +--- linux-2.6.11/drivers/media/video/bt819.c 2005-03-02 08:37:48.000000000 +0100 ++++ linux.sinabox/drivers/media/video/bt819.c 2005-03-19 07:34:51.000000000 +0100 +@@ -146,7 +146,7 @@ + u8 block_data[32]; + + msg.addr = client->addr; +- msg.flags = client->flags; ++ msg.flags = 0; + while (len >= 2) { + msg.buf = (char *) block_data; + msg.len = 0; +diff -urN linux-2.6.11/drivers/media/video/saa7110.c linux.sinabox/drivers/media/video/saa7110.c +--- linux-2.6.11/drivers/media/video/saa7110.c 2005-03-02 08:37:30.000000000 +0100 ++++ linux.sinabox/drivers/media/video/saa7110.c 2005-03-19 07:34:49.000000000 +0100 +@@ -60,8 +60,10 @@ + + #define I2C_SAA7110 0x9C /* or 0x9E */ + ++#define SAA7110_NR_REG 0x35 ++ + struct saa7110 { +- unsigned char reg[54]; ++ u8 reg[SAA7110_NR_REG]; + + int norm; + int input; +@@ -95,31 +97,28 @@ + unsigned int len) + { + int ret = -1; +- u8 reg = *data++; ++ u8 reg = *data; /* first register to write to */ + +- len--; ++ /* Sanity check */ ++ if (reg + (len - 1) > SAA7110_NR_REG) ++ return ret; + + /* the saa7110 has an autoincrement function, use it if + * the adapter understands raw I2C */ + if (i2c_check_functionality(client->adapter, I2C_FUNC_I2C)) { + struct saa7110 *decoder = i2c_get_clientdata(client); + struct i2c_msg msg; +- u8 block_data[54]; + +- msg.len = 0; +- msg.buf = (char *) block_data; ++ msg.len = len; ++ msg.buf = (char *) data; + msg.addr = client->addr; +- msg.flags = client->flags; +- while (len >= 1) { +- msg.len = 0; +- block_data[msg.len++] = reg; +- while (len-- >= 1 && msg.len < 54) +- block_data[msg.len++] = +- decoder->reg[reg++] = *data++; +- ret = i2c_transfer(client->adapter, &msg, 1); +- } ++ msg.flags = 0; ++ ret = i2c_transfer(client->adapter, &msg, 1); ++ ++ /* Cache the written data */ ++ memcpy(decoder->reg + reg, data + 1, len - 1); + } else { +- while (len-- >= 1) { ++ for (++data, --len; len; len--) { + if ((ret = saa7110_write(client, reg++, + *data++)) < 0) + break; +@@ -192,7 +191,7 @@ + return 0; + } + +-static const unsigned char initseq[] = { ++static const unsigned char initseq[1 + SAA7110_NR_REG] = { + 0, 0x4C, 0x3C, 0x0D, 0xEF, 0xBD, 0xF2, 0x03, 0x00, + /* 0x08 */ 0xF8, 0xF8, 0x60, 0x60, 0x00, 0x86, 0x18, 0x90, + /* 0x10 */ 0x00, 0x59, 0x40, 0x46, 0x42, 0x1A, 0xFF, 0xDA, +diff -urN linux-2.6.11/drivers/media/video/saa7114.c linux.sinabox/drivers/media/video/saa7114.c +--- linux-2.6.11/drivers/media/video/saa7114.c 2005-03-02 08:38:25.000000000 +0100 ++++ linux.sinabox/drivers/media/video/saa7114.c 2005-03-19 07:35:02.000000000 +0100 +@@ -163,7 +163,7 @@ + u8 block_data[32]; + + msg.addr = client->addr; +- msg.flags = client->flags; ++ msg.flags = 0; + while (len >= 2) { + msg.buf = (char *) block_data; + msg.len = 0; +diff -urN linux-2.6.11/drivers/media/video/saa7185.c linux.sinabox/drivers/media/video/saa7185.c +--- linux-2.6.11/drivers/media/video/saa7185.c 2005-03-02 08:38:34.000000000 +0100 ++++ linux.sinabox/drivers/media/video/saa7185.c 2005-03-19 07:35:06.000000000 +0100 +@@ -118,7 +118,7 @@ + u8 block_data[32]; + + msg.addr = client->addr; +- msg.flags = client->flags; ++ msg.flags = 0; + while (len >= 2) { + msg.buf = (char *) block_data; + msg.len = 0; +diff -urN linux-2.6.11/drivers/net/amd8111e.c linux.sinabox/drivers/net/amd8111e.c +--- linux-2.6.11/drivers/net/amd8111e.c 2005-03-02 08:38:38.000000000 +0100 ++++ linux.sinabox/drivers/net/amd8111e.c 2005-03-19 07:35:06.000000000 +0100 +@@ -1381,6 +1381,8 @@ + + if(amd8111e_restart(dev)){ + spin_unlock_irq(&lp->lock); ++ if (dev->irq) ++ free_irq(dev->irq, dev); + return -ENOMEM; + } + /* Start ipg timer */ +diff -urN linux-2.6.11/drivers/net/imq.c linux.sinabox/drivers/net/imq.c +--- linux-2.6.11/drivers/net/imq.c 1970-01-01 01:00:00.000000000 +0100 ++++ linux.sinabox/drivers/net/imq.c 2005-03-26 00:49:04.000000000 +0100 +@@ -0,0 +1,387 @@ ++/* ++ * Pseudo-driver for the intermediate queue device. ++ * ++ * This program 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 ++ * 2 of the License, or (at your option) any later version. ++ * ++ * Authors: Patrick McHardy, ++ * ++ * The first version was written by Martin Devera, ++ * ++ * Credits: Jan Rafaj ++ * - Update patch to 2.4.21 ++ * Sebastian Strollo ++ * - Fix "Dead-loop on netdevice imq"-issue ++ * Marcel Sebek ++ * - Update to 2.6.2-rc1 ++ * ++ * After some time of inactivity there is a group taking care ++ * of IMQ again: http://www.linuximq.net ++ * ++ * ++ * 2004/06/30 - New version of IMQ patch to kernels <=2.6.7 including ++ * the following changes: ++ * ++ * - Correction of ipv6 support "+"s issue (Hasso Tepper) ++ * - Correction of imq_init_devs() issue that resulted in ++ * kernel OOPS unloading IMQ as module (Norbert Buchmuller) ++ * - Addition of functionality to choose number of IMQ devices ++ * during kernel config (Andre Correa) ++ * - Addition of functionality to choose how IMQ hooks on ++ * PRE and POSTROUTING (after or before NAT) (Andre Correa) ++ * - Cosmetic corrections (Norbert Buchmuller) (Andre Correa) ++ * ++ * More info at: http://www.linuximq.net/ (2004-04-22) ++ */ ++ ++#include ++#include ++#include ++#include ++#include ++#include ++#include ++#include ++#include ++#include ++#if defined(CONFIG_IPV6) || defined (CONFIG_IPV6_MODULE) ++ #include ++#endif ++#include ++#include ++ ++static nf_hookfn imq_nf_hook; ++ ++static struct nf_hook_ops imq_ingress_ipv4 = { ++ .hook = imq_nf_hook, ++ .owner = THIS_MODULE, ++ .pf = PF_INET, ++ .hooknum = NF_IP_PRE_ROUTING, ++#if defined(CONFIG_IMQ_BEHAVIOR_BA) || defined(CONFIG_IMQ_BEHAVIOR_BB) ++ .priority = NF_IP_PRI_MANGLE + 1 ++#else ++ .priority = NF_IP_PRI_NAT_DST + 1 ++#endif ++}; ++ ++static struct nf_hook_ops imq_egress_ipv4 = { ++ .hook = imq_nf_hook, ++ .owner = THIS_MODULE, ++ .pf = PF_INET, ++ .hooknum = NF_IP_POST_ROUTING, ++#if defined(CONFIG_IMQ_BEHAVIOR_AA) || defined(CONFIG_IMQ_BEHAVIOR_BA) ++ .priority = NF_IP_PRI_LAST ++#else ++ .priority = NF_IP_PRI_NAT_SRC - 1 ++#endif ++}; ++ ++#if defined(CONFIG_IPV6) || defined (CONFIG_IPV6_MODULE) ++static struct nf_hook_ops imq_ingress_ipv6 = { ++ .hook = imq_nf_hook, ++ .owner = THIS_MODULE, ++ .pf = PF_INET6, ++ .hooknum = NF_IP6_PRE_ROUTING, ++#if defined(CONFIG_IMQ_BEHAVIOR_BA) || defined(CONFIG_IMQ_BEHAVIOR_BB) ++ .priority = NF_IP6_PRI_MANGLE + 1 ++#else ++ .priority = NF_IP6_PRI_NAT_DST + 1 ++#endif ++}; ++ ++static struct nf_hook_ops imq_egress_ipv6 = { ++ .hook = imq_nf_hook, ++ .owner = THIS_MODULE, ++ .pf = PF_INET6, ++ .hooknum = NF_IP6_POST_ROUTING, ++#if defined(CONFIG_IMQ_BEHAVIOR_AA) || defined(CONFIG_IMQ_BEHAVIOR_BA) ++ .priority = NF_IP6_PRI_LAST ++#else ++ .priority = NF_IP6_PRI_NAT_SRC - 1 ++#endif ++}; ++#endif ++ ++#if defined(CONFIG_IMQ_NUM_DEVS) ++static unsigned int numdevs = CONFIG_IMQ_NUM_DEVS; ++#else ++static unsigned int numdevs = 2; ++#endif ++ ++static struct net_device *imq_devs; ++ ++static struct net_device_stats *imq_get_stats(struct net_device *dev) ++{ ++ return (struct net_device_stats *)dev->priv; ++} ++ ++/* called for packets kfree'd in qdiscs at places other than enqueue */ ++static void imq_skb_destructor(struct sk_buff *skb) ++{ ++ struct nf_info *info = skb->nf_info; ++ ++ if (info) { ++ if (info->indev) ++ dev_put(info->indev); ++ if (info->outdev) ++ dev_put(info->outdev); ++ kfree(info); ++ } ++} ++ ++static int imq_dev_xmit(struct sk_buff *skb, struct net_device *dev) ++{ ++ struct net_device_stats *stats = (struct net_device_stats*) dev->priv; ++ ++ stats->tx_bytes += skb->len; ++ stats->tx_packets++; ++ ++ skb->imq_flags = 0; ++ skb->destructor = NULL; ++ ++ dev->trans_start = jiffies; ++ nf_reinject(skb, skb->nf_info, NF_ACCEPT); ++ return 0; ++} ++ ++static int imq_nf_queue(struct sk_buff *skb, struct nf_info *info, void *data) ++{ ++ struct net_device *dev; ++ struct net_device_stats *stats; ++ struct sk_buff *skb2 = NULL; ++ struct Qdisc *q; ++ unsigned int index = skb->imq_flags&IMQ_F_IFMASK; ++ int ret = -1; ++ ++ if (index > numdevs) ++ return -1; ++ ++ dev = imq_devs + index; ++ if (!(dev->flags & IFF_UP)) { ++ skb->imq_flags = 0; ++ nf_reinject(skb, info, NF_ACCEPT); ++ return 0; ++ } ++ dev->last_rx = jiffies; ++ ++ if (skb->destructor) { ++ skb2 = skb; ++ skb = skb_clone(skb, GFP_ATOMIC); ++ if (!skb) ++ return -1; ++ } ++ skb->nf_info = info; ++ ++ stats = (struct net_device_stats *)dev->priv; ++ stats->rx_bytes+= skb->len; ++ stats->rx_packets++; ++ ++ spin_lock_bh(&dev->queue_lock); ++ q = dev->qdisc; ++ if (q->enqueue) { ++ q->enqueue(skb_get(skb), q); ++ if (skb_shared(skb)) { ++ skb->destructor = imq_skb_destructor; ++ kfree_skb(skb); ++ ret = 0; ++ } ++ } ++ if (spin_is_locked(&dev->xmit_lock)) ++ netif_schedule(dev); ++ else ++ ++ while (!netif_queue_stopped(dev) && ++ qdisc_restart(dev)<0) ++ /* NOTHING */; ++ ++ spin_unlock_bh(&dev->queue_lock); ++ ++ if (skb2) ++ kfree_skb(ret ? skb : skb2); ++ ++ return ret; ++} ++ ++static unsigned int imq_nf_hook(unsigned int hook, struct sk_buff **pskb, ++ const struct net_device *indev, ++ const struct net_device *outdev, ++ int (*okfn)(struct sk_buff *)) ++{ ++ if ((*pskb)->imq_flags & IMQ_F_ENQUEUE) ++ return NF_QUEUE; ++ ++ return NF_ACCEPT; ++} ++ ++ ++static int __init imq_init_hooks(void) ++{ ++ int err; ++ ++ err = nf_register_queue_handler(PF_INET, imq_nf_queue, NULL); ++ if (err > 0) ++ goto err1; ++ if ((err = nf_register_hook(&imq_ingress_ipv4))) ++ goto err2; ++ if ((err = nf_register_hook(&imq_egress_ipv4))) ++ goto err3; ++#if defined(CONFIG_IPV6) || defined (CONFIG_IPV6_MODULE) ++ if ((err = nf_register_queue_handler(PF_INET6, imq_nf_queue, NULL))) ++ goto err4; ++ if ((err = nf_register_hook(&imq_ingress_ipv6))) ++ goto err5; ++ if ((err = nf_register_hook(&imq_egress_ipv6))) ++ goto err6; ++#endif ++ ++ return 0; ++ ++#if defined(CONFIG_IPV6) || defined (CONFIG_IPV6_MODULE) ++err6: ++ nf_unregister_hook(&imq_ingress_ipv6); ++err5: ++ nf_unregister_queue_handler(PF_INET6); ++err4: ++ nf_unregister_hook(&imq_egress_ipv4); ++#endif ++err3: ++ nf_unregister_hook(&imq_ingress_ipv4); ++err2: ++ nf_unregister_queue_handler(PF_INET); ++err1: ++ return err; ++} ++ ++static void __exit imq_unhook(void) ++{ ++ nf_unregister_hook(&imq_ingress_ipv4); ++ nf_unregister_hook(&imq_egress_ipv4); ++ nf_unregister_queue_handler(PF_INET); ++#if defined(CONFIG_IPV6) || defined (CONFIG_IPV6_MODULE) ++ nf_unregister_hook(&imq_ingress_ipv6); ++ nf_unregister_hook(&imq_egress_ipv6); ++ nf_unregister_queue_handler(PF_INET6); ++#endif ++} ++ ++static int __init imq_dev_init(struct net_device *dev) ++{ ++ dev->hard_start_xmit = imq_dev_xmit; ++ dev->type = ARPHRD_VOID; ++ dev->mtu = 1500; ++ dev->tx_queue_len = 30; ++ dev->flags = IFF_NOARP; ++ dev->priv = kmalloc(sizeof(struct net_device_stats), GFP_KERNEL); ++ if (dev->priv == NULL) ++ return -ENOMEM; ++ memset(dev->priv, 0, sizeof(struct net_device_stats)); ++ dev->get_stats = imq_get_stats; ++ ++ return 0; ++} ++ ++static void imq_dev_uninit(struct net_device *dev) ++{ ++ kfree(dev->priv); ++} ++ ++static int __init imq_init_devs(void) ++{ ++ struct net_device *dev; ++ int i,j; ++ j = numdevs; ++ ++ if (!numdevs || numdevs > IMQ_MAX_DEVS) { ++ printk(KERN_ERR "IMQ: numdevs has to be betweed 1 and %u\n", ++ IMQ_MAX_DEVS); ++ return -EINVAL; ++ } ++ ++ imq_devs = kmalloc(sizeof(struct net_device) * numdevs, GFP_KERNEL); ++ if (!imq_devs) ++ return -ENOMEM; ++ memset(imq_devs, 0, sizeof(struct net_device) * numdevs); ++ ++ /* we start counting at zero */ ++ numdevs--; ++ ++ for (i = 0, dev = imq_devs; i <= numdevs; i++, dev++) { ++ SET_MODULE_OWNER(dev); ++ strcpy(dev->name, "imq%d"); ++ dev->init = imq_dev_init; ++ dev->uninit = imq_dev_uninit; ++ ++ if (register_netdev(dev) < 0) ++ goto err_register; ++ } ++ printk(KERN_INFO "IMQ starting with %u devices...\n", j); ++ return 0; ++ ++err_register: ++ for (; i; i--) ++ unregister_netdev(--dev); ++ kfree(imq_devs); ++ return -EIO; ++} ++ ++static void imq_cleanup_devs(void) ++{ ++ int i; ++ struct net_device *dev = imq_devs; ++ ++ for (i = 0; i <= numdevs; i++) ++ unregister_netdev(dev++); ++ ++ kfree(imq_devs); ++} ++ ++static int __init imq_init_module(void) ++{ ++ int err; ++ ++ if ((err = imq_init_devs())) { ++ printk(KERN_ERR "IMQ: Error trying imq_init_devs()\n"); ++ return err; ++ } ++ if ((err = imq_init_hooks())) { ++ printk(KERN_ERR "IMQ: Error trying imq_init_hooks()\n"); ++ imq_cleanup_devs(); ++ return err; ++ } ++ ++ printk(KERN_INFO "IMQ driver loaded successfully.\n"); ++ ++#if defined(CONFIG_IMQ_BEHAVIOR_BA) || defined(CONFIG_IMQ_BEHAVIOR_BB) ++ printk(KERN_INFO "\tHooking IMQ before NAT on PREROUTING.\n"); ++#else ++ printk(KERN_INFO "\tHooking IMQ after NAT on PREROUTING.\n"); ++#endif ++#if defined(CONFIG_IMQ_BEHAVIOR_AB) || defined(CONFIG_IMQ_BEHAVIOR_BB) ++ printk(KERN_INFO "\tHooking IMQ before NAT on POSTROUTING.\n"); ++#else ++ printk(KERN_INFO "\tHooking IMQ after NAT on POSTROUTING.\n"); ++#endif ++ ++ return 0; ++} ++ ++static void __exit imq_cleanup_module(void) ++{ ++ imq_unhook(); ++ imq_cleanup_devs(); ++ printk(KERN_INFO "IMQ driver unloaded successfully.\n"); ++} ++ ++ ++module_init(imq_init_module); ++module_exit(imq_cleanup_module); ++ ++module_param(numdevs, int, 0); ++MODULE_PARM_DESC(numdevs, "number of IMQ devices (how many imq* devices will be created)"); ++MODULE_AUTHOR(""); ++MODULE_DESCRIPTION("Pseudo-driver for the intermediate queue device. See http://www.linuximq.net/ for more information."); ++MODULE_LICENSE("GPL"); ++ ++ +diff -urN linux-2.6.11/drivers/net/Kconfig linux.sinabox/drivers/net/Kconfig +--- linux-2.6.11/drivers/net/Kconfig 2005-03-02 08:38:25.000000000 +0100 ++++ linux.sinabox/drivers/net/Kconfig 2005-03-26 00:49:04.000000000 +0100 +@@ -81,6 +81,129 @@ + To compile this driver as a module, choose M here: the module + will be called eql. If unsure, say N. + ++config IMQ ++ tristate "IMQ (intermediate queueing device) support" ++ depends on NETDEVICES && NETFILTER ++ ---help--- ++ The IMQ device(s) is used as placeholder for QoS queueing disciplines. ++ Every packet entering/leaving the IP stack can be directed through ++ the IMQ device where it's enqueued/dequeued to the attached qdisc. ++ This allows you to treat network devices as classes and distribute ++ bandwidth among them. Iptables is used to specify through which IMQ ++ device, if any, packets travel. ++ ++ More information at: http://www.linuximq.net/ ++ ++ To compile this driver as a module, choose M here: the module ++ will be called imq. If unsure, say N. ++ ++choice ++ prompt "IMQ behavior (PRE/POSTROUTING)" ++ depends on IMQ ++ default IMQ_BEHAVIOR_BA ++ help ++ ++ This settings defines how IMQ behaves in respect to its ++ hooking in PREROUTING and POSTROUTING. ++ ++ IMQ can work in any of the following ways: ++ ++ PREROUTING | POSTROUTING ++ -----------------|------------------- ++ #1 After NAT | After NAT ++ #2 After NAT | Before NAT ++ #3 Before NAT | After NAT ++ #4 Before NAT | Before NAT ++ ++ The default behavior is to hook before NAT on PREROUTING ++ and after NAT on POSTROUTING (#3). ++ ++ This settings are specially usefull when trying to use IMQ ++ to shape NATed clients. ++ ++ More information can be found at: www.linuximq.net ++ ++ If not sure leave the default settings alone. ++ ++config IMQ_BEHAVIOR_AA ++ bool "IMQ AA" ++ help ++ This settings defines how IMQ behaves in respect to its ++ hooking in PREROUTING and POSTROUTING. ++ ++ Choosing this option will make IMQ hook like this: ++ ++ PREROUTING: After NAT ++ POSTROUTING: After NAT ++ ++ More information can be found at: www.linuximq.net ++ ++ If not sure leave the default settings alone. ++ ++config IMQ_BEHAVIOR_AB ++ bool "IMQ AB" ++ help ++ This settings defines how IMQ behaves in respect to its ++ hooking in PREROUTING and POSTROUTING. ++ ++ Choosing this option will make IMQ hook like this: ++ ++ PREROUTING: After NAT ++ POSTROUTING: Before NAT ++ ++ More information can be found at: www.linuximq.net ++ ++ If not sure leave the default settings alone. ++ ++config IMQ_BEHAVIOR_BA ++ bool "IMQ BA" ++ help ++ This settings defines how IMQ behaves in respect to its ++ hooking in PREROUTING and POSTROUTING. ++ ++ Choosing this option will make IMQ hook like this: ++ ++ PREROUTING: Before NAT ++ POSTROUTING: After NAT ++ ++ More information can be found at: www.linuximq.net ++ ++ If not sure leave the default settings alone. ++ ++config IMQ_BEHAVIOR_BB ++ bool "IMQ BB" ++ help ++ This settings defines how IMQ behaves in respect to its ++ hooking in PREROUTING and POSTROUTING. ++ ++ Choosing this option will make IMQ hook like this: ++ ++ PREROUTING: Before NAT ++ POSTROUTING: Before NAT ++ ++ More information can be found at: www.linuximq.net ++ ++ If not sure leave the default settings alone. ++ ++endchoice ++ ++config IMQ_NUM_DEVS ++ ++ int "Number of IMQ devices" ++ range 2 8 ++ depends on IMQ ++ default "2" ++ help ++ ++ This settings defines how many IMQ devices will be ++ created. ++ ++ The default value is 2. ++ ++ More information can be found at: www.linuximq.net ++ ++ If not sure leave the default settings alone. ++ + config TUN + tristate "Universal TUN/TAP device driver support" + depends on NETDEVICES +diff -urN linux-2.6.11/drivers/net/Makefile linux.sinabox/drivers/net/Makefile +--- linux-2.6.11/drivers/net/Makefile 2005-03-02 08:37:52.000000000 +0100 ++++ linux.sinabox/drivers/net/Makefile 2005-03-26 00:49:04.000000000 +0100 +@@ -113,6 +113,7 @@ + endif + + obj-$(CONFIG_DUMMY) += dummy.o ++obj-$(CONFIG_IMQ) += imq.o + obj-$(CONFIG_DE600) += de600.o + obj-$(CONFIG_DE620) += de620.o + obj-$(CONFIG_LANCE) += lance.o +diff -urN linux-2.6.11/drivers/net/ppp_async.c linux.sinabox/drivers/net/ppp_async.c +--- linux-2.6.11/drivers/net/ppp_async.c 2005-03-02 08:38:17.000000000 +0100 ++++ linux.sinabox/drivers/net/ppp_async.c 2005-03-19 07:35:01.000000000 +0100 +@@ -1000,7 +1000,7 @@ + data += 4; + dlen -= 4; + /* data[0] is code, data[1] is length */ +- while (dlen >= 2 && dlen >= data[1]) { ++ while (dlen >= 2 && dlen >= data[1] && data[1] >= 2) { + switch (data[0]) { + case LCP_MRU: + val = (data[2] << 8) + data[3]; +diff -urN linux-2.6.11/drivers/net/r8169.c linux.sinabox/drivers/net/r8169.c +--- linux-2.6.11/drivers/net/r8169.c 2005-03-02 08:38:09.000000000 +0100 ++++ linux.sinabox/drivers/net/r8169.c 2005-03-19 07:34:57.000000000 +0100 +@@ -1683,16 +1683,19 @@ + rtl8169_make_unusable_by_asic(desc); + } + +-static inline void rtl8169_return_to_asic(struct RxDesc *desc, int rx_buf_sz) ++static inline void rtl8169_mark_to_asic(struct RxDesc *desc, u32 rx_buf_sz) + { +- desc->opts1 |= cpu_to_le32(DescOwn + rx_buf_sz); ++ u32 eor = le32_to_cpu(desc->opts1) & RingEnd; ++ ++ desc->opts1 = cpu_to_le32(DescOwn | eor | rx_buf_sz); + } + +-static inline void rtl8169_give_to_asic(struct RxDesc *desc, dma_addr_t mapping, +- int rx_buf_sz) ++static inline void rtl8169_map_to_asic(struct RxDesc *desc, dma_addr_t mapping, ++ u32 rx_buf_sz) + { + desc->addr = cpu_to_le64(mapping); +- desc->opts1 |= cpu_to_le32(DescOwn + rx_buf_sz); ++ wmb(); ++ rtl8169_mark_to_asic(desc, rx_buf_sz); + } + + static int rtl8169_alloc_rx_skb(struct pci_dev *pdev, struct sk_buff **sk_buff, +@@ -1712,7 +1715,7 @@ + mapping = pci_map_single(pdev, skb->tail, rx_buf_sz, + PCI_DMA_FROMDEVICE); + +- rtl8169_give_to_asic(desc, mapping, rx_buf_sz); ++ rtl8169_map_to_asic(desc, mapping, rx_buf_sz); + + out: + return ret; +@@ -2150,7 +2153,7 @@ + skb_reserve(skb, NET_IP_ALIGN); + eth_copy_and_sum(skb, sk_buff[0]->tail, pkt_size, 0); + *sk_buff = skb; +- rtl8169_return_to_asic(desc, rx_buf_sz); ++ rtl8169_mark_to_asic(desc, rx_buf_sz); + ret = 0; + } + } +diff -urN linux-2.6.11/drivers/net/sis900.c linux.sinabox/drivers/net/sis900.c +--- linux-2.6.11/drivers/net/sis900.c 2005-03-02 08:38:08.000000000 +0100 ++++ linux.sinabox/drivers/net/sis900.c 2005-03-19 07:34:56.000000000 +0100 +@@ -236,7 +236,7 @@ + signature = (u16) read_eeprom(ioaddr, EEPROMSignature); + if (signature == 0xffff || signature == 0x0000) { + printk (KERN_INFO "%s: Error EERPOM read %x\n", +- net_dev->name, signature); ++ pci_name(pci_dev), signature); + return 0; + } + +@@ -268,7 +268,7 @@ + if (!isa_bridge) + isa_bridge = pci_get_device(PCI_VENDOR_ID_SI, 0x0018, isa_bridge); + if (!isa_bridge) { +- printk("%s: Can not find ISA bridge\n", net_dev->name); ++ printk("%s: Can not find ISA bridge\n", pci_name(pci_dev)); + return 0; + } + pci_read_config_byte(isa_bridge, 0x48, ®); +@@ -456,10 +456,6 @@ + net_dev->tx_timeout = sis900_tx_timeout; + net_dev->watchdog_timeo = TX_TIMEOUT; + net_dev->ethtool_ops = &sis900_ethtool_ops; +- +- ret = register_netdev(net_dev); +- if (ret) +- goto err_unmap_rx; + + /* Get Mac address according to the chip revision */ + pci_read_config_byte(pci_dev, PCI_CLASS_REVISION, &revision); +@@ -476,7 +472,7 @@ + + if (ret == 0) { + ret = -ENODEV; +- goto err_out_unregister; ++ goto err_unmap_rx; + } + + /* 630ET : set the mii access mode as software-mode */ +@@ -486,7 +482,7 @@ + /* probe for mii transceiver */ + if (sis900_mii_probe(net_dev) == 0) { + ret = -ENODEV; +- goto err_out_unregister; ++ goto err_unmap_rx; + } + + /* save our host bridge revision */ +@@ -496,6 +492,10 @@ + pci_dev_put(dev); + } + ++ ret = register_netdev(net_dev); ++ if (ret) ++ goto err_unmap_rx; ++ + /* print some information about our NIC */ + printk(KERN_INFO "%s: %s at %#lx, IRQ %d, ", net_dev->name, + card_name, ioaddr, net_dev->irq); +@@ -505,8 +505,6 @@ + + return 0; + +- err_out_unregister: +- unregister_netdev(net_dev); + err_unmap_rx: + pci_free_consistent(pci_dev, RX_TOTAL_SIZE, sis_priv->rx_ring, + sis_priv->rx_ring_dma); +@@ -533,6 +531,7 @@ + static int __init sis900_mii_probe(struct net_device * net_dev) + { + struct sis900_private * sis_priv = net_dev->priv; ++ const char *dev_name = pci_name(sis_priv->pci_dev); + u16 poll_bit = MII_STAT_LINK, status = 0; + unsigned long timeout = jiffies + 5 * HZ; + int phy_addr; +@@ -582,21 +581,20 @@ + mii_phy->phy_types = + (mii_status & (MII_STAT_CAN_TX_FDX | MII_STAT_CAN_TX)) ? LAN : HOME; + printk(KERN_INFO "%s: %s transceiver found at address %d.\n", +- net_dev->name, mii_chip_table[i].name, ++ dev_name, mii_chip_table[i].name, + phy_addr); + break; + } + + if( !mii_chip_table[i].phy_id1 ) { + printk(KERN_INFO "%s: Unknown PHY transceiver found at address %d.\n", +- net_dev->name, phy_addr); ++ dev_name, phy_addr); + mii_phy->phy_types = UNKNOWN; + } + } + + if (sis_priv->mii == NULL) { +- printk(KERN_INFO "%s: No MII transceivers found!\n", +- net_dev->name); ++ printk(KERN_INFO "%s: No MII transceivers found!\n", dev_name); + return 0; + } + +@@ -621,7 +619,7 @@ + poll_bit ^= (mdio_read(net_dev, sis_priv->cur_phy, MII_STATUS) & poll_bit); + if (time_after_eq(jiffies, timeout)) { + printk(KERN_WARNING "%s: reset phy and link down now\n", +- net_dev->name); ++ dev_name); + return -ETIME; + } + } +@@ -691,7 +689,7 @@ + sis_priv->mii = default_phy; + sis_priv->cur_phy = default_phy->phy_addr; + printk(KERN_INFO "%s: Using transceiver found at address %d as default\n", +- net_dev->name,sis_priv->cur_phy); ++ pci_name(sis_priv->pci_dev), sis_priv->cur_phy); + } + + status = mdio_read(net_dev, sis_priv->cur_phy, MII_CONTROL); +diff -urN linux-2.6.11/drivers/net/tun.c linux.sinabox/drivers/net/tun.c +--- linux-2.6.11/drivers/net/tun.c 2005-03-02 08:38:08.000000000 +0100 ++++ linux.sinabox/drivers/net/tun.c 2005-03-19 07:34:56.000000000 +0100 +@@ -229,7 +229,7 @@ + size_t len = count; + + if (!(tun->flags & TUN_NO_PI)) { +- if ((len -= sizeof(pi)) > len) ++ if ((len -= sizeof(pi)) > count) + return -EINVAL; + + if(memcpy_fromiovec((void *)&pi, iv, sizeof(pi))) +diff -urN linux-2.6.11/drivers/net/via-rhine.c linux.sinabox/drivers/net/via-rhine.c +--- linux-2.6.11/drivers/net/via-rhine.c 2005-03-02 08:38:32.000000000 +0100 ++++ linux.sinabox/drivers/net/via-rhine.c 2005-03-19 07:35:04.000000000 +0100 +@@ -1197,8 +1197,10 @@ + dev->name, rp->pdev->irq); + + rc = alloc_ring(dev); +- if (rc) ++ if (rc) { ++ free_irq(rp->pdev->irq, dev); + return rc; ++ } + alloc_rbufs(dev); + alloc_tbufs(dev); + rhine_chip_reset(dev); +@@ -1899,6 +1901,9 @@ + struct rhine_private *rp = netdev_priv(dev); + void __iomem *ioaddr = rp->base; + ++ if (!(rp->quirks & rqWOL)) ++ return; /* Nothing to do for non-WOL adapters */ ++ + rhine_power_init(dev); + + /* Make sure we use pattern 0, 1 and not 4, 5 */ +diff -urN linux-2.6.11/drivers/net/wan/hd6457x.c linux.sinabox/drivers/net/wan/hd6457x.c +--- linux-2.6.11/drivers/net/wan/hd6457x.c 2005-03-02 08:37:50.000000000 +0100 ++++ linux.sinabox/drivers/net/wan/hd6457x.c 2005-03-19 07:34:53.000000000 +0100 +@@ -315,7 +315,7 @@ + #endif + stats->rx_packets++; + stats->rx_bytes += skb->len; +- skb->dev->last_rx = jiffies; ++ dev->last_rx = jiffies; + skb->protocol = hdlc_type_trans(skb, dev); + netif_rx(skb); + } +diff -urN linux-2.6.11/drivers/pci/hotplug/pciehp_ctrl.c linux.sinabox/drivers/pci/hotplug/pciehp_ctrl.c +--- linux-2.6.11/drivers/pci/hotplug/pciehp_ctrl.c 2005-03-02 08:37:49.000000000 +0100 ++++ linux.sinabox/drivers/pci/hotplug/pciehp_ctrl.c 2005-03-19 07:34:52.000000000 +0100 +@@ -1354,10 +1354,11 @@ + dbg("PCI Bridge Hot-Remove s:b:d:f(%02x:%02x:%02x:%02x)\n", + ctrl->seg, func->bus, func->device, func->function); + bridge_slot_remove(func); +- } else ++ } else { + dbg("PCI Function Hot-Remove s:b:d:f(%02x:%02x:%02x:%02x)\n", + ctrl->seg, func->bus, func->device, func->function); + slot_remove(func); ++ } + + func = pciehp_slot_find(ctrl->slot_bus, device, 0); + } +diff -urN linux-2.6.11/fs/cramfs/inode.c linux.sinabox/fs/cramfs/inode.c +--- linux-2.6.11/fs/cramfs/inode.c 2005-03-02 08:37:47.000000000 +0100 ++++ linux.sinabox/fs/cramfs/inode.c 2005-03-19 07:34:50.000000000 +0100 +@@ -70,6 +70,7 @@ + inode->i_data.a_ops = &cramfs_aops; + } else { + inode->i_size = 0; ++ inode->i_blocks = 0; + init_special_inode(inode, inode->i_mode, + old_decode_dev(cramfs_inode->size)); + } +diff -urN linux-2.6.11/fs/eventpoll.c linux.sinabox/fs/eventpoll.c +--- linux-2.6.11/fs/eventpoll.c 2005-03-02 08:38:07.000000000 +0100 ++++ linux.sinabox/fs/eventpoll.c 2005-03-19 07:34:55.000000000 +0100 +@@ -619,6 +619,7 @@ + return error; + } + ++#define MAX_EVENTS (INT_MAX / sizeof(struct epoll_event)) + + /* + * Implement the event wait interface for the eventpoll file. It is the kernel +@@ -635,7 +636,7 @@ + current, epfd, events, maxevents, timeout)); + + /* The maximum number of event must be greater than zero */ +- if (maxevents <= 0) ++ if (maxevents <= 0 || maxevents > MAX_EVENTS) + return -EINVAL; + + /* Verify that the area passed by the user is writeable */ +diff -urN linux-2.6.11/fs/exec.c linux.sinabox/fs/exec.c +--- linux-2.6.11/fs/exec.c 2005-03-02 08:38:06.000000000 +0100 ++++ linux.sinabox/fs/exec.c 2005-03-19 07:34:55.000000000 +0100 +@@ -814,7 +814,7 @@ + { + /* buf must be at least sizeof(tsk->comm) in size */ + task_lock(tsk); +- memcpy(buf, tsk->comm, sizeof(tsk->comm)); ++ strncpy(buf, tsk->comm, sizeof(tsk->comm)); + task_unlock(tsk); + } + +diff -urN linux-2.6.11/include/linux/icmpv6.h linux.sinabox/include/linux/icmpv6.h +--- linux-2.6.11/include/linux/icmpv6.h 2005-03-02 08:37:50.000000000 +0100 ++++ linux.sinabox/include/linux/icmpv6.h 2005-03-26 19:02:06.000000000 +0100 +@@ -40,14 +40,18 @@ + struct icmpv6_nd_ra { + __u8 hop_limit; + #if defined(__LITTLE_ENDIAN_BITFIELD) +- __u8 reserved:6, ++ __u8 reserved:3, ++ router_pref:2, ++ home_agent:1, + other:1, + managed:1; + + #elif defined(__BIG_ENDIAN_BITFIELD) + __u8 managed:1, + other:1, +- reserved:6; ++ home_agent:1, ++ router_pref:2, ++ reserved:3; + #else + #error "Please fix " + #endif +@@ -70,6 +74,8 @@ + #define icmp6_addrconf_managed icmp6_dataun.u_nd_ra.managed + #define icmp6_addrconf_other icmp6_dataun.u_nd_ra.other + #define icmp6_rt_lifetime icmp6_dataun.u_nd_ra.rt_lifetime ++#define icmp6_home_agent icmp6_dataun.u_nd_ra.home_agent ++#define icmp6_router_pref icmp6_dataun.u_nd_ra.router_pref + }; + + +diff -urN linux-2.6.11/include/linux/imq.h linux.sinabox/include/linux/imq.h +--- linux-2.6.11/include/linux/imq.h 1970-01-01 01:00:00.000000000 +0100 ++++ linux.sinabox/include/linux/imq.h 2005-03-26 00:49:04.000000000 +0100 +@@ -0,0 +1,9 @@ ++#ifndef _IMQ_H ++#define _IMQ_H ++ ++#define IMQ_MAX_DEVS 16 ++ ++#define IMQ_F_IFMASK 0x7f ++#define IMQ_F_ENQUEUE 0x80 ++ ++#endif /* _IMQ_H */ +diff -urN linux-2.6.11/include/linux/in6.h linux.sinabox/include/linux/in6.h +--- linux-2.6.11/include/linux/in6.h 2005-03-02 08:38:12.000000000 +0100 ++++ linux.sinabox/include/linux/in6.h 2005-03-26 19:02:06.000000000 +0100 +@@ -40,14 +40,14 @@ + #define s6_addr32 in6_u.u6_addr32 + }; + +-/* IPv6 Wildcard Address (::) and Loopback Address (::1) defined in RFC2553 ++/* IPv6 Wildcard Address (::) and Loopback Address (::1) defined in RFC3493 + * NOTE: Be aware the IN6ADDR_* constants and in6addr_* externals are defined + * in network byte order, not in host byte order as are the IPv4 equivalents + */ + #if 0 + extern const struct in6_addr in6addr_any; +-#define IN6ADDR_ANY_INIT { { { 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 } } } + #endif ++#define IN6ADDR_ANY_INIT { { { 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 } } } + extern const struct in6_addr in6addr_loopback; + #define IN6ADDR_LOOPBACK_INIT { { { 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1 } } } + +@@ -56,7 +56,7 @@ + __u16 sin6_port; /* Transport layer port # */ + __u32 sin6_flowinfo; /* IPv6 flow information */ + struct in6_addr sin6_addr; /* IPv6 address */ +- __u32 sin6_scope_id; /* scope id (new in RFC2553) */ ++ __u32 sin6_scope_id; /* scope id */ + }; + + struct ipv6_mreq { +@@ -198,4 +198,7 @@ + * MCAST_MSFILTER 48 + */ + ++/* Netfilter */ ++#define IPV6_NF_ORIGINAL_DST 80 ++ + #endif +diff -urN linux-2.6.11/include/linux/ip.h linux.sinabox/include/linux/ip.h +--- linux-2.6.11/include/linux/ip.h 2005-03-02 08:37:52.000000000 +0100 ++++ linux.sinabox/include/linux/ip.h 2005-03-26 19:02:06.000000000 +0100 +@@ -152,6 +152,7 @@ + }; + + #define IPCORK_OPT 1 /* ip-options has been held in ipcork.opt */ ++#define IPCORK_ALLFRAG 2 /* IPv6: always fragment */ + + static inline struct inet_sock *inet_sk(const struct sock *sk) + { +diff -urN linux-2.6.11/include/linux/ipv6.h linux.sinabox/include/linux/ipv6.h +--- linux-2.6.11/include/linux/ipv6.h 2005-03-02 08:38:13.000000000 +0100 ++++ linux.sinabox/include/linux/ipv6.h 2005-03-26 19:02:06.000000000 +0100 +@@ -145,6 +145,9 @@ + __s32 max_desync_factor; + #endif + __s32 max_addresses; ++#ifdef CONFIG_IPV6_MROUTE ++ __s32 mc_forwarding; ++#endif + void *sysctl; + }; + +@@ -167,6 +170,9 @@ + DEVCONF_MAX_DESYNC_FACTOR, + DEVCONF_MAX_ADDRESSES, + DEVCONF_FORCE_MLD_VERSION, ++#ifdef CONFIG_IPV6_MROUTE ++ DEVCONF_MCFORWARDING, ++#endif + DEVCONF_MAX + }; + +diff -urN linux-2.6.11/include/linux/ipv6_route.h linux.sinabox/include/linux/ipv6_route.h +--- linux-2.6.11/include/linux/ipv6_route.h 2005-03-02 08:37:50.000000000 +0100 ++++ linux.sinabox/include/linux/ipv6_route.h 2005-03-26 19:02:06.000000000 +0100 +@@ -19,6 +19,12 @@ + #define RTF_ADDRCONF 0x00040000 /* addrconf route - RA */ + #define RTF_PREFIX_RT 0x00080000 /* A prefix only route - RA */ + ++#define RTF_PREF_HIGH 0x08000000 ++#define RTF_PREF_LOW 0x18000000 ++#define RTF_PREF_INVAL 0x10000000 ++#define RTF_PREF_MASK 0x18000000 ++#define RTF_PREF(pref) (((pref)&3)<<27) ++ + #define RTF_NONEXTHOP 0x00200000 /* route with no nexthop */ + #define RTF_EXPIRES 0x00400000 + +@@ -28,6 +34,11 @@ + + #define RTF_LOCAL 0x80000000 + ++#ifdef __KERNEL__ ++#define IPV6_UNSHIFT_PREF(flag) (((flag)&RTF_PREF_MASK)>>27) ++#define IPV6_SIGNEDPREF(pref) ((((pref)+2)&3)-2) ++#endif ++ + struct in6_rtmsg { + struct in6_addr rtmsg_dst; + struct in6_addr rtmsg_src; +diff -urN linux-2.6.11/include/linux/mroute6.h linux.sinabox/include/linux/mroute6.h +--- linux-2.6.11/include/linux/mroute6.h 1970-01-01 01:00:00.000000000 +0100 ++++ linux.sinabox/include/linux/mroute6.h 2005-03-26 19:02:06.000000000 +0100 +@@ -0,0 +1,296 @@ ++#ifndef __LINUX_MROUTE6_H ++#define __LINUX_MROUTE6_H ++ ++#include ++ ++/* ++ * Based on the MROUTING 3.5 defines primarily to keep ++ * source compatibility with BSD. ++ * ++ * See the pim6sd code for the original history. ++ * ++ * Protocol Independent Multicast (PIM) data structures included ++ * Carlos Picoto (cap@di.fc.ul.pt) ++ * ++ */ ++ ++#define MRT6_BASE 200 ++#define MRT6_INIT (MRT6_BASE) /* Activate the kernel mroute code */ ++#define MRT6_DONE (MRT6_BASE+1) /* Shutdown the kernel mroute */ ++#define MRT6_ADD_MIF (MRT6_BASE+2) /* Add a virtual interface */ ++#define MRT6_DEL_MIF (MRT6_BASE+3) /* Delete a virtual interface */ ++#define MRT6_ADD_MFC (MRT6_BASE+4) /* Add a multicast forwarding entry */ ++#define MRT6_DEL_MFC (MRT6_BASE+5) /* Delete a multicast forwarding entry */ ++#define MRT6_VERSION (MRT6_BASE+6) /* Get the kernel multicast version */ ++#define MRT6_ASSERT (MRT6_BASE+7) /* Activate PIM assert mode */ ++#define MRT6_PIM (MRT6_BASE+8) /* enable PIM code */ ++ ++#define SIOCGETMIFCNT_IN6 SIOCPROTOPRIVATE /* IP protocol privates */ ++#define SIOCGETSGCNT_IN6 (SIOCPROTOPRIVATE+1) ++#define SIOCGETRPF (SIOCPROTOPRIVATE+2) ++ ++#define MAXMIFS 32 ++typedef unsigned long mifbitmap_t; /* User mode code depends on this lot */ ++typedef unsigned short mifi_t; ++#define ALL_MIFS ((mifi_t)(-1)) ++ ++#ifndef IF_SETSIZE ++#define IF_SETSIZE 256 ++#endif ++ ++typedef u_int32_t if_mask; ++#define NIFBITS (sizeof(if_mask) * 8) /* bits per mask */ ++ ++#ifndef howmany ++#define howmany(x, y) (((x) + ((y) - 1)) / (y)) ++#endif ++ ++typedef struct if_set { ++ if_mask ifs_bits[howmany(IF_SETSIZE, NIFBITS)]; ++} if_set; ++ ++#define IF_SET(n, p) ((p)->ifs_bits[(n)/NIFBITS] |= (1 << ((n) % NIFBITS))) ++#define IF_CLR(n, p) ((p)->ifs_bits[(n)/NIFBITS] &= ~(1 << ((n) % NIFBITS))) ++#define IF_ISSET(n, p) ((p)->ifs_bits[(n)/NIFBITS] & (1 << ((n) % NIFBITS))) ++#define IF_COPY(f, t) bcopy(f, t, sizeof(*(f))) ++#define IF_ZERO(p) bzero(p, sizeof(*(p))) ++ ++/* ++ Same idea as select ++ ++#define VIFM_SET(n,m) ((m)|=(1<<(n))) ++#define VIFM_CLR(n,m) ((m)&=~(1<<(n))) ++#define VIFM_ISSET(n,m) ((m)&(1<<(n))) ++#define VIFM_CLRALL(m) ((m)=0) ++#define VIFM_COPY(mfrom,mto) ((mto)=(mfrom)) ++#define VIFM_SAME(m1,m2) ((m1)==(m2)) ++*/ ++ ++/* ++ * Passed by mrouted for an MRT_ADD_MIF - again we use the ++ * mrouted 3.6 structures for compatibility ++ */ ++ ++struct mif6ctl { ++ mifi_t mif6c_mifi; /* Index of MIF */ ++ unsigned char mif6c_flags; /* MIFF_ flags */ ++ unsigned char vifc_threshold; /* ttl limit */ ++ unsigned int vifc_rate_limit; /* Rate limiter values (NI) */ ++ u_short mif6c_pifi; /* the index of the physical IF */ ++}; ++ ++#define MIFF_REGISTER 0x1 /* register vif */ ++ ++/* ++ * Cache manipulation structures for mrouted and PIMd ++ */ ++ ++struct mf6cctl ++{ ++ struct sockaddr_in6 mf6cc_origin; /* Origin of mcast */ ++ struct sockaddr_in6 mf6cc_mcastgrp; /* Group in question */ ++ mifi_t mf6cc_parent; /* Where it arrived */ ++ struct if_set mf6cc_ifset; /* Where it is going */ ++ unsigned int mfcc_pkt_cnt; /* pkt count for src-grp */ ++ unsigned int mfcc_byte_cnt; ++ unsigned int mfcc_wrong_if; ++ int mfcc_expire; ++}; ++ ++/* ++ * Group count retrieval for pim6sd ++ */ ++ ++struct sioc_sg_req6 ++{ ++ struct sockaddr_in6 src; ++ struct sockaddr_in6 grp; ++ unsigned long pktcnt; ++ unsigned long bytecnt; ++ unsigned long wrong_if; ++}; ++ ++/* ++ * To get vif packet counts ++ */ ++ ++struct sioc_mif_req6 ++{ ++ mifi_t mifi; /* Which iface */ ++ unsigned long icount; /* In packets */ ++ unsigned long ocount; /* Out packets */ ++ unsigned long ibytes; /* In bytes */ ++ unsigned long obytes; /* Out bytes */ ++}; ++ ++/* ++ * That's all usermode folks ++ */ ++ ++#ifdef __KERNEL__ ++struct inet6_dev * ipv6_find_idev(struct net_device *dev); ++#include ++ ++extern int ip6_mroute_setsockopt(struct sock *, int, char __user *, int); ++extern int ip6_mroute_getsockopt(struct sock *, int, char __user *, int __user *); ++extern int ip6mr_ioctl(struct sock *sk, int cmd, void __user *arg); ++extern void ip6_mr_init(void); ++ ++struct mif_device ++{ ++ struct net_device *dev; /* Device we are using */ ++ unsigned long bytes_in,bytes_out; ++ unsigned long pkt_in,pkt_out; /* Statistics */ ++ unsigned long rate_limit; /* Traffic shaping (NI) */ ++ unsigned char threshold; /* TTL threshold */ ++ unsigned short flags; /* Control flags */ ++ int link; /* Physical interface index */ ++}; ++ ++#define VIFF_STATIC 0x8000 ++ ++struct mfc6_cache ++{ ++ struct mfc6_cache *next; /* Next entry on cache line */ ++ struct in6_addr mf6c_mcastgrp; /* Group the entry belongs to */ ++ struct in6_addr mf6c_origin; /* Source of packet */ ++ mifi_t mf6c_parent; /* Source interface */ ++ int mfc_flags; /* Flags on line */ ++ ++ union { ++ struct { ++ unsigned long expires; ++ struct sk_buff_head unresolved; /* Unresolved buffers */ ++ } unres; ++ struct { ++ unsigned long last_assert; ++ int minvif; ++ int maxvif; ++ unsigned long bytes; ++ unsigned long pkt; ++ unsigned long wrong_if; ++ unsigned char ttls[MAXMIFS]; /* TTL thresholds */ ++ } res; ++ } mfc_un; ++}; ++ ++#define MFC_STATIC 1 ++#define MFC_NOTIFY 2 ++ ++#define MFC6_LINES 64 ++ ++#if (MFC6_LINES & (MFC6_LINES -1 )) == 0 ++#define MF6CHASHMOD(h) ((h) & (MFC6_LINES -1)) ++#else ++#define MF6CHASHMOD(h) ((h) % MFC6_LINES) ++#endif ++ ++#define MFC6_HASH(a, g) MF6CHASHMOD((a).s6_addr32[0] ^ (a).s6_addr32[1] ^ \ ++ (a).s6_addr32[2] ^ (a).s6_addr32[3] ^ \ ++ (a).s6_addr32[0] ^ (a).s6_addr32[1] ^ \ ++ (a).s6_addr32[2] ^ (a).s6_addr32[3]) ++ ++#endif ++ ++ ++ ++#define MFC_ASSERT_THRESH (3*HZ) /* Maximal freq. of asserts */ ++ ++/* ++ * Pseudo messages used by mrouted ++ */ ++ ++#define IGMPMSG_NOCACHE 1 /* Kern cache fill request to mrouted */ ++#define IGMPMSG_WRONGVIF 2 /* For PIM assert processing (unused) */ ++#define IGMPMSG_WHOLEPKT 3 /* For PIM Register processing */ ++ ++#define PIM_REGISTER 1 ++ ++#ifdef __KERNEL__ ++ ++#define PIM_V1_VERSION __constant_htonl(0x10000000) ++#define PIM_V1_REGISTER 1 ++ ++#define PIM_VERSION 2 ++ ++#define PIM_NULL_REGISTER __constant_htonl(0x40000000) ++ ++/* PIMv2 register message header layout (ietf-draft-idmr-pimvsm-v2-00.ps */ ++ ++struct pim6reghdr ++{ ++ __u8 type; ++ __u8 reserved; ++ __u16 csum; ++ __u32 flags; ++}; ++ ++ ++struct rtmsg; ++extern int ip6mr_get_route(struct sk_buff *skb, struct rtmsg *rtm, int nowait); ++#endif ++ ++#ifdef __KERNEL__ ++ ++extern struct sock *mroute6_socket; ++ ++#define IN6_ARE_ADDR_EQUAL(a,b) \ ++ (memcmp(&(a)->s6_addr[0], &(b)->s6_addr[0], sizeof(struct in6_addr)) == 0) ++#endif ++ ++/* ++ * Structure used to communicate from kernel to multicast router. ++ * We'll overlay the structure onto an MLD header (not an IPv6 heder like igmpmsg{} ++ * used for IPv4 implementation). This is because this structure will be passed via an ++ * IPv6 raw socket, on wich an application will only receiver the payload i.e the data after ++ * the IPv6 header and all the extension headers. (See section 3 of RFC 3542) ++ */ ++ ++struct mrt6msg { ++#define MRT6MSG_NOCACHE 1 ++#define MRT6MSG_WRONGMIF 2 ++#define MRT6MSG_WHOLEPKT 3 /* used for use level encap */ ++ u_char im6_mbz; /* must be zero */ ++ u_char im6_msgtype; /* what type of message */ ++ u_int16_t im6_mif; /* mif rec'd on */ ++ u_int32_t im6_pad; /* padding for 64 bit arch */ ++ struct in6_addr im6_src, im6_dst; ++}; ++ ++/* ++ * PIM packet header ++ */ ++#define PIM_VERSION 2 ++struct pim { ++#if defined(BYTE_ORDER) && (BYTE_ORDER == LITTLE_ENDIAN) ++ u_char pim_type:4, /* the PIM message type, currently they are: ++ * Hello, Register, Register-Stop, Join/Prune, ++ * Bootstrap, Assert, Graft (PIM-DM only), ++ * Graft-Ack (PIM-DM only), C-RP-Adv ++ */ ++ pim_ver:4; /* PIM version number; 2 for PIMv2 */ ++#else ++ u_char pim_ver:4, /* PIM version */ ++ pim_type:4; /* PIM type */ ++#endif ++ u_char pim_rsv; /* Reserved */ ++ u_short pim_cksum; /* IP style check sum */ ++}; ++ ++#define PIM_MINLEN 8 /* The header min. length is 8 */ ++#define PIM6_REG_MINLEN (PIM_MINLEN+40) /* Register message + inner IP6 header */ ++ ++#define IPV6_VERSION 0x60 ++#define IPV6_VERSION_MASK 0xf0 ++ ++/* XXX :there should not be there */ ++#include ++ ++struct mld_hdr { ++ struct icmp6hdr mld_icmp6_hdr; ++ struct in6_addr mld_addr; ++}; ++ ++#define mld_type mld_icmp6_hdr.icmp6_type ++ ++#endif +diff -urN linux-2.6.11/include/linux/netfilter.h linux.sinabox/include/linux/netfilter.h +--- linux-2.6.11/include/linux/netfilter.h 2005-03-02 08:38:09.000000000 +0100 ++++ linux.sinabox/include/linux/netfilter.h 2005-03-26 19:02:06.000000000 +0100 +@@ -175,6 +175,10 @@ + extern void (*ip_ct_attach)(struct sk_buff *, struct sk_buff *); + extern void nf_ct_attach(struct sk_buff *, struct sk_buff *); + ++#if defined(CONFIG_IPV6) || defined(CONFIG_IPV6_MODULE) ++extern void (*ip6_ct_attach)(struct sk_buff *, struct sk_buff *); ++#endif ++ + /* FIXME: Before cache is ever used, this must be implemented for real. */ + extern void nf_invalidate_cache(int pf); + +diff -urN linux-2.6.11/include/linux/netfilter_ipv4/ip_set.h linux.sinabox/include/linux/netfilter_ipv4/ip_set.h +--- linux-2.6.11/include/linux/netfilter_ipv4/ip_set.h 1970-01-01 01:00:00.000000000 +0100 ++++ linux.sinabox/include/linux/netfilter_ipv4/ip_set.h 2005-03-24 19:22:37.000000000 +0100 +@@ -0,0 +1,489 @@ ++#ifndef _IP_SET_H ++#define _IP_SET_H ++ ++/* Copyright (C) 2000-2002 Joakim Axelsson ++ * Patrick Schaaf ++ * Martin Josefsson ++ * Copyright (C) 2003-2004 Jozsef Kadlecsik ++ * ++ * This program is free software; you can redistribute it and/or modify ++ * it under the terms of the GNU General Public License version 2 as ++ * published by the Free Software Foundation. ++ */ ++ ++/* ++ * A sockopt of such quality has hardly ever been seen before on the open ++ * market! This little beauty, hardly ever used: above 64, so it's ++ * traditionally used for firewalling, not touched (even once!) by the ++ * 2.0, 2.2 and 2.4 kernels! ++ * ++ * Comes with its own certificate of authenticity, valid anywhere in the ++ * Free world! ++ * ++ * Rusty, 19.4.2000 ++ */ ++#define SO_IP_SET 83 ++ ++/* ++ * Heavily modify by Joakim Axelsson 08.03.2002 ++ * - Made it more modulebased ++ * ++ * Additional heavy modifications by Jozsef Kadlecsik 22.02.2004 ++ * - bindings added ++ * - in order to "deal with" backward compatibility, renamed to ipset ++ */ ++ ++/* ++ * Used so that the kernel module and ipset-binary can match their versions ++ */ ++#define IP_SET_PROTOCOL_VERSION 2 ++ ++#define IP_SET_MAXNAMELEN 32 /* set names and set typenames */ ++ ++/* Lets work with our own typedef for representing an IP address. ++ * We hope to make the code more portable, possibly to IPv6... ++ * ++ * The representation works in HOST byte order, because most set types ++ * will perform arithmetic operations and compare operations. ++ * ++ * For now the type is an uint32_t. ++ * ++ * Make sure to ONLY use the functions when translating and parsing ++ * in order to keep the host byte order and make it more portable: ++ * parse_ip() ++ * parse_mask() ++ * parse_ipandmask() ++ * ip_tostring() ++ * (Joakim: where are they???) ++ */ ++ ++typedef uint32_t ip_set_ip_t; ++ ++/* Sets are identified by an id in kernel space. Tweak with ip_set_id_t ++ * and IP_SET_INVALID_ID if you want to increase the max number of sets. ++ */ ++typedef uint16_t ip_set_id_t; ++ ++#define IP_SET_INVALID_ID 65535 ++ ++/* How deep we follow bindings */ ++#define IP_SET_MAX_BINDINGS 6 ++ ++/* ++ * Option flags for kernel operations (ipt_set_info) ++ */ ++#define IPSET_SRC 0x01 /* Source match/add */ ++#define IPSET_DST 0x02 /* Destination match/add */ ++#define IPSET_MATCH_INV 0x04 /* Inverse matching */ ++ ++/* ++ * Set types (flavours) ++ */ ++#define IPSET_TYPE_IP 0 /* IP address type of set */ ++#define IPSET_TYPE_PORT 1 /* Port type of set */ ++ ++/* Reserved keywords */ ++#define IPSET_TOKEN_DEFAULT ":default:" ++#define IPSET_TOKEN_ALL ":all:" ++ ++/* SO_IP_SET operation constants, and their request struct types. ++ * ++ * Operation ids: ++ * 0-99: commands with version checking ++ * 100-199: add/del/test/bind/unbind ++ * 200-299: list, save, restore ++ */ ++ ++/* Single shot operations: ++ * version, create, destroy, flush, rename and swap ++ * ++ * Sets are identified by name. ++ */ ++ ++#define IP_SET_REQ_STD \ ++ unsigned op; \ ++ unsigned version; \ ++ char name[IP_SET_MAXNAMELEN] ++ ++#define IP_SET_OP_CREATE 0x00000001 /* Create a new (empty) set */ ++struct ip_set_req_create { ++ IP_SET_REQ_STD; ++ char typename[IP_SET_MAXNAMELEN]; ++}; ++ ++#define IP_SET_OP_DESTROY 0x00000002 /* Remove a (empty) set */ ++struct ip_set_req_std { ++ IP_SET_REQ_STD; ++}; ++ ++#define IP_SET_OP_FLUSH 0x00000003 /* Remove all IPs in a set */ ++/* Uses ip_set_req_std */ ++ ++#define IP_SET_OP_RENAME 0x00000004 /* Rename a set */ ++/* Uses ip_set_req_create */ ++ ++#define IP_SET_OP_SWAP 0x00000005 /* Swap two sets */ ++/* Uses ip_set_req_create */ ++ ++union ip_set_name_index { ++ char name[IP_SET_MAXNAMELEN]; ++ ip_set_id_t index; ++}; ++ ++#define IP_SET_OP_GET_BYNAME 0x00000006 /* Get set index by name */ ++struct ip_set_req_get_set { ++ unsigned op; ++ unsigned version; ++ union ip_set_name_index set; ++}; ++ ++#define IP_SET_OP_GET_BYINDEX 0x00000007 /* Get set name by index */ ++/* Uses ip_set_req_get_set */ ++ ++#define IP_SET_OP_VERSION 0x00000100 /* Ask kernel version */ ++struct ip_set_req_version { ++ unsigned op; ++ unsigned version; ++}; ++ ++/* Double shots operations: ++ * add, del, test, bind and unbind. ++ * ++ * First we query the kernel to get the index and type of the target set, ++ * then issue the command. Validity of IP is checked in kernel in order ++ * to minimalize sockopt operations. ++ */ ++ ++/* Get minimal set data for add/del/test/bind/unbind IP */ ++#define IP_SET_OP_ADT_GET 0x00000010 /* Get set and type */ ++struct ip_set_req_adt_get { ++ unsigned op; ++ unsigned version; ++ union ip_set_name_index set; ++ char typename[IP_SET_MAXNAMELEN]; ++}; ++ ++#define IP_SET_REQ_BYINDEX \ ++ unsigned op; \ ++ ip_set_id_t index; ++ ++struct ip_set_req_adt { ++ IP_SET_REQ_BYINDEX; ++}; ++ ++#define IP_SET_OP_ADD_IP 0x00000101 /* Add an IP to a set */ ++/* Uses ip_set_req_adt, with type specific addage */ ++ ++#define IP_SET_OP_DEL_IP 0x00000102 /* Remove an IP from a set */ ++/* Uses ip_set_req_adt, with type specific addage */ ++ ++#define IP_SET_OP_TEST_IP 0x00000103 /* Test an IP in a set */ ++/* Uses ip_set_req_adt, with type specific addage */ ++ ++#define IP_SET_OP_BIND_SET 0x00000104 /* Bind an IP to a set */ ++/* Uses ip_set_req_bind, with type specific addage */ ++struct ip_set_req_bind { ++ IP_SET_REQ_BYINDEX; ++ char binding[IP_SET_MAXNAMELEN]; ++}; ++ ++#define IP_SET_OP_UNBIND_SET 0x00000105 /* Unbind an IP from a set */ ++/* Uses ip_set_req_bind, with type speficic addage ++ * index = 0 means unbinding for all sets */ ++ ++#define IP_SET_OP_TEST_BIND_SET 0x00000106 /* Test binding an IP to a set */ ++/* Uses ip_set_req_bind, with type specific addage */ ++ ++/* Multiple shots operations: list, save, restore. ++ * ++ * - check kernel version and query the max number of sets ++ * - get the basic information on all sets ++ * and size required for the next step ++ * - get actual set data: header, data, bindings ++ */ ++ ++/* Get max_sets and the index of a queried set ++ */ ++#define IP_SET_OP_MAX_SETS 0x00000020 ++struct ip_set_req_max_sets { ++ unsigned op; ++ unsigned version; ++ ip_set_id_t max_sets; /* max_sets */ ++ ip_set_id_t sets; /* real number of sets */ ++ union ip_set_name_index set; /* index of set if name used */ ++}; ++ ++/* Get the id and name of the sets plus size for next step */ ++#define IP_SET_OP_LIST_SIZE 0x00000201 ++#define IP_SET_OP_SAVE_SIZE 0x00000202 ++struct ip_set_req_setnames { ++ unsigned op; ++ ip_set_id_t index; /* set to list/save */ ++ size_t size; /* size to get setdata/bindings */ ++ /* followed by sets number of struct ip_set_name_list */ ++}; ++ ++struct ip_set_name_list { ++ char name[IP_SET_MAXNAMELEN]; ++ char typename[IP_SET_MAXNAMELEN]; ++ ip_set_id_t index; ++ ip_set_id_t id; ++}; ++ ++/* The actual list operation */ ++#define IP_SET_OP_LIST 0x00000203 ++struct ip_set_req_list { ++ IP_SET_REQ_BYINDEX; ++ /* sets number of struct ip_set_list in reply */ ++}; ++ ++struct ip_set_list { ++ ip_set_id_t index; ++ ip_set_id_t binding; ++ u_int32_t ref; ++ size_t header_size; /* Set header data of header_size */ ++ size_t members_size; /* Set members data of members_size */ ++ size_t bindings_size; /* Set bindings data of bindings_size */ ++}; ++ ++struct ip_set_hash_list { ++ ip_set_ip_t ip; ++ ip_set_id_t binding; ++}; ++ ++/* The save operation */ ++#define IP_SET_OP_SAVE 0x00000204 ++/* Uses ip_set_req_list, in the reply replaced by ++ * sets number of struct ip_set_save plus a marker ++ * ip_set_save followed by ip_set_hash_save structures. ++ */ ++struct ip_set_save { ++ ip_set_id_t index; ++ ip_set_id_t binding; ++ size_t header_size; /* Set header data of header_size */ ++ size_t members_size; /* Set members data of members_size */ ++}; ++ ++/* At restoring, ip == 0 means default binding for the given set: */ ++struct ip_set_hash_save { ++ ip_set_ip_t ip; ++ ip_set_id_t id; ++ ip_set_id_t binding; ++}; ++ ++/* The restore operation */ ++#define IP_SET_OP_RESTORE 0x00000205 ++/* Uses ip_set_req_setnames followed by ip_set_restore structures ++ * plus a marker ip_set_restore, followed by ip_set_hash_save ++ * structures. ++ */ ++struct ip_set_restore { ++ char name[IP_SET_MAXNAMELEN]; ++ char typename[IP_SET_MAXNAMELEN]; ++ ip_set_id_t index; ++ size_t header_size; /* Create data of header_size */ ++ size_t members_size; /* Set members data of members_size */ ++}; ++ ++static inline int bitmap_bytes(ip_set_ip_t a, ip_set_ip_t b) ++{ ++ return 4 * ((((b - a + 8) / 8) + 3) / 4); ++} ++ ++#ifdef __KERNEL__ ++ ++#define ip_set_printk(format, args...) \ ++ do { \ ++ printk("%s: %s: ", __FILE__, __FUNCTION__); \ ++ printk(format "\n" , ## args); \ ++ } while (0) ++ ++#if defined(IP_SET_DEBUG) ++#define DP(format, args...) \ ++ do { \ ++ printk("%s: %s (DBG): ", __FILE__, __FUNCTION__);\ ++ printk(format "\n" , ## args); \ ++ } while (0) ++#define IP_SET_ASSERT(x) \ ++ do { \ ++ if (!(x)) \ ++ printk("IP_SET_ASSERT: %s:%i(%s)\n", \ ++ __FILE__, __LINE__, __FUNCTION__); \ ++ } while (0) ++#else ++#define DP(format, args...) ++#define IP_SET_ASSERT(x) ++#endif ++ ++struct ip_set; ++ ++/* ++ * The ip_set_type definition - one per set type, e.g. "ipmap". ++ * ++ * Each individual set has a pointer, set->type, going to one ++ * of these structures. Function pointers inside the structure implement ++ * the real behaviour of the sets. ++ * ++ * If not mentioned differently, the implementation behind the function ++ * pointers of a set_type, is expected to return 0 if ok, and a negative ++ * errno (e.g. -EINVAL) on error. ++ */ ++struct ip_set_type { ++ struct list_head list; /* next in list of set types */ ++ ++ /* test for IP in set (kernel: iptables -m set src|dst) ++ * return 0 if not in set, 1 if in set. ++ */ ++ int (*testip_kernel) (struct ip_set *set, ++ const struct sk_buff * skb, ++ u_int32_t flags, ++ ip_set_ip_t *ip); ++ ++ /* test for IP in set (userspace: ipset -T set IP) ++ * return 0 if not in set, 1 if in set. ++ */ ++ int (*testip) (struct ip_set *set, ++ const void *data, size_t size, ++ ip_set_ip_t *ip); ++ ++ /* ++ * Size of the data structure passed by when ++ * adding/deletin/testing an entry. ++ */ ++ size_t reqsize; ++ ++ /* Add IP into set (userspace: ipset -A set IP) ++ * Return -EEXIST if the address is already in the set, ++ * and -ERANGE if the address lies outside the set bounds. ++ * If the address was not already in the set, 0 is returned. ++ */ ++ int (*addip) (struct ip_set *set, ++ const void *data, size_t size, ++ ip_set_ip_t *ip); ++ ++ /* Add IP into set (kernel: iptables ... -j SET set src|dst) ++ * Return -EEXIST if the address is already in the set, ++ * and -ERANGE if the address lies outside the set bounds. ++ * If the address was not already in the set, 0 is returned. ++ */ ++ int (*addip_kernel) (struct ip_set *set, ++ const struct sk_buff * skb, ++ u_int32_t flags, ++ ip_set_ip_t *ip); ++ ++ /* remove IP from set (userspace: ipset -D set --entry x) ++ * Return -EEXIST if the address is NOT in the set, ++ * and -ERANGE if the address lies outside the set bounds. ++ * If the address really was in the set, 0 is returned. ++ */ ++ int (*delip) (struct ip_set *set, ++ const void *data, size_t size, ++ ip_set_ip_t *ip); ++ ++ /* remove IP from set (kernel: iptables ... -j SET --entry x) ++ * Return -EEXIST if the address is NOT in the set, ++ * and -ERANGE if the address lies outside the set bounds. ++ * If the address really was in the set, 0 is returned. ++ */ ++ int (*delip_kernel) (struct ip_set *set, ++ const struct sk_buff * skb, ++ u_int32_t flags, ++ ip_set_ip_t *ip); ++ ++ /* new set creation - allocated type specific items ++ */ ++ int (*create) (struct ip_set *set, ++ const void *data, size_t size); ++ ++ /* retry the operation after successfully tweaking the set ++ */ ++ int (*retry) (struct ip_set *set); ++ ++ /* set destruction - free type specific items ++ * There is no return value. ++ * Can be called only when child sets are destroyed. ++ */ ++ void (*destroy) (struct ip_set *set); ++ ++ /* set flushing - reset all bits in the set, or something similar. ++ * There is no return value. ++ */ ++ void (*flush) (struct ip_set *set); ++ ++ /* Listing: size needed for header ++ */ ++ size_t header_size; ++ ++ /* Listing: Get the header ++ * ++ * Fill in the information in "data". ++ * This function is always run after list_header_size() under a ++ * writelock on the set. Therefor is the length of "data" always ++ * correct. ++ */ ++ void (*list_header) (const struct ip_set *set, ++ void *data); ++ ++ /* Listing: Get the size for the set members ++ */ ++ int (*list_members_size) (const struct ip_set *set); ++ ++ /* Listing: Get the set members ++ * ++ * Fill in the information in "data". ++ * This function is always run after list_member_size() under a ++ * writelock on the set. Therefor is the length of "data" always ++ * correct. ++ */ ++ void (*list_members) (const struct ip_set *set, ++ void *data); ++ ++ char typename[IP_SET_MAXNAMELEN]; ++ char typecode; ++ int protocol_version; ++ ++ /* Set this to THIS_MODULE if you are a module, otherwise NULL */ ++ struct module *me; ++}; ++ ++extern int ip_set_register_set_type(struct ip_set_type *set_type); ++extern void ip_set_unregister_set_type(struct ip_set_type *set_type); ++ ++/* A generic ipset */ ++struct ip_set { ++ char name[IP_SET_MAXNAMELEN]; /* the name of the set */ ++ rwlock_t lock; /* lock for concurrency control */ ++ ip_set_id_t id; /* set id for swapping */ ++ ip_set_id_t binding; /* default binding for the set */ ++ atomic_t ref; /* in kernel and in hash references */ ++ struct ip_set_type *type; /* the set types */ ++ void *data; /* pooltype specific data */ ++}; ++ ++/* Structure to bind set elements to sets */ ++struct ip_set_hash { ++ struct list_head list; /* list of clashing entries in hash */ ++ ip_set_ip_t ip; /* ip from set */ ++ ip_set_id_t id; /* set id */ ++ ip_set_id_t binding; /* set we bind the element to */ ++}; ++ ++/* register and unregister set references */ ++extern ip_set_id_t ip_set_get_byname(const char name[IP_SET_MAXNAMELEN]); ++extern ip_set_id_t ip_set_get_byindex(ip_set_id_t id); ++extern void ip_set_put(ip_set_id_t id); ++ ++/* API for iptables set match, and SET target */ ++extern void ip_set_addip_kernel(ip_set_id_t id, ++ const struct sk_buff *skb, ++ const u_int32_t *flags); ++extern void ip_set_delip_kernel(ip_set_id_t id, ++ const struct sk_buff *skb, ++ const u_int32_t *flags); ++extern int ip_set_testip_kernel(ip_set_id_t id, ++ const struct sk_buff *skb, ++ const u_int32_t *flags); ++ ++#endif /* __KERNEL__ */ ++ ++#endif /*_IP_SET_H*/ +diff -urN linux-2.6.11/include/linux/netfilter_ipv4/ip_set_iphash.h linux.sinabox/include/linux/netfilter_ipv4/ip_set_iphash.h +--- linux-2.6.11/include/linux/netfilter_ipv4/ip_set_iphash.h 1970-01-01 01:00:00.000000000 +0100 ++++ linux.sinabox/include/linux/netfilter_ipv4/ip_set_iphash.h 2005-03-24 19:22:37.000000000 +0100 +@@ -0,0 +1,30 @@ ++#ifndef __IP_SET_IPHASH_H ++#define __IP_SET_IPHASH_H ++ ++#include ++ ++#define SETTYPE_NAME "iphash" ++#define MAX_RANGE 0x0000FFFF ++ ++struct ip_set_iphash { ++ ip_set_ip_t *members; /* the iphash proper */ ++ uint32_t initval; /* initval for jhash_1word */ ++ uint32_t prime; /* prime for double hashing */ ++ uint32_t hashsize; /* hash size */ ++ uint16_t probes; /* max number of probes */ ++ uint16_t resize; /* resize factor in percent */ ++ ip_set_ip_t netmask; /* netmask */ ++}; ++ ++struct ip_set_req_iphash_create { ++ uint32_t hashsize; ++ uint16_t probes; ++ uint16_t resize; ++ ip_set_ip_t netmask; ++}; ++ ++struct ip_set_req_iphash { ++ ip_set_ip_t ip; ++}; ++ ++#endif /* __IP_SET_IPHASH_H */ +diff -urN linux-2.6.11/include/linux/netfilter_ipv4/ip_set_ipmap.h linux.sinabox/include/linux/netfilter_ipv4/ip_set_ipmap.h +--- linux-2.6.11/include/linux/netfilter_ipv4/ip_set_ipmap.h 1970-01-01 01:00:00.000000000 +0100 ++++ linux.sinabox/include/linux/netfilter_ipv4/ip_set_ipmap.h 2005-03-24 19:22:37.000000000 +0100 +@@ -0,0 +1,56 @@ ++#ifndef __IP_SET_IPMAP_H ++#define __IP_SET_IPMAP_H ++ ++#include ++ ++#define SETTYPE_NAME "ipmap" ++#define MAX_RANGE 0x0000FFFF ++ ++struct ip_set_ipmap { ++ void *members; /* the ipmap proper */ ++ ip_set_ip_t first_ip; /* host byte order, included in range */ ++ ip_set_ip_t last_ip; /* host byte order, included in range */ ++ ip_set_ip_t netmask; /* subnet netmask */ ++ ip_set_ip_t sizeid; /* size of set in IPs */ ++ u_int16_t hosts; /* number of hosts in a subnet */ ++}; ++ ++struct ip_set_req_ipmap_create { ++ ip_set_ip_t from; ++ ip_set_ip_t to; ++ ip_set_ip_t netmask; ++}; ++ ++struct ip_set_req_ipmap { ++ ip_set_ip_t ip; ++}; ++ ++unsigned int ++mask_to_bits(ip_set_ip_t mask) ++{ ++ unsigned int bits = 32; ++ ip_set_ip_t maskaddr; ++ ++ if (mask == 0xFFFFFFFF) ++ return bits; ++ ++ maskaddr = 0xFFFFFFFE; ++ while (--bits >= 0 && maskaddr != mask) ++ maskaddr <<= 1; ++ ++ return bits; ++} ++ ++ip_set_ip_t ++range_to_mask(ip_set_ip_t from, ip_set_ip_t to, unsigned int *bits) ++{ ++ ip_set_ip_t mask = 0xFFFFFFFE; ++ ++ *bits = 32; ++ while (--(*bits) >= 0 && mask && (to & mask) != from) ++ mask <<= 1; ++ ++ return mask; ++} ++ ++#endif /* __IP_SET_IPMAP_H */ +diff -urN linux-2.6.11/include/linux/netfilter_ipv4/ip_set_jhash.h linux.sinabox/include/linux/netfilter_ipv4/ip_set_jhash.h +--- linux-2.6.11/include/linux/netfilter_ipv4/ip_set_jhash.h 1970-01-01 01:00:00.000000000 +0100 ++++ linux.sinabox/include/linux/netfilter_ipv4/ip_set_jhash.h 2005-03-24 19:22:37.000000000 +0100 +@@ -0,0 +1,148 @@ ++#ifndef _LINUX_IPSET_JHASH_H ++#define _LINUX_IPSET_JHASH_H ++ ++/* This is a copy of linux/jhash.h but the types u32/u8 are changed ++ * to __u32/__u8 so that the header file can be included into ++ * userspace code as well. Jozsef Kadlecsik (kadlec@blackhole.kfki.hu) ++ */ ++ ++/* jhash.h: Jenkins hash support. ++ * ++ * Copyright (C) 1996 Bob Jenkins (bob_jenkins@burtleburtle.net) ++ * ++ * http://burtleburtle.net/bob/hash/ ++ * ++ * These are the credits from Bob's sources: ++ * ++ * lookup2.c, by Bob Jenkins, December 1996, Public Domain. ++ * hash(), hash2(), hash3, and mix() are externally useful functions. ++ * Routines to test the hash are included if SELF_TEST is defined. ++ * You can use this free for any purpose. It has no warranty. ++ * ++ * Copyright (C) 2003 David S. Miller (davem@redhat.com) ++ * ++ * I've modified Bob's hash to be useful in the Linux kernel, and ++ * any bugs present are surely my fault. -DaveM ++ */ ++ ++/* NOTE: Arguments are modified. */ ++#define __jhash_mix(a, b, c) \ ++{ \ ++ a -= b; a -= c; a ^= (c>>13); \ ++ b -= c; b -= a; b ^= (a<<8); \ ++ c -= a; c -= b; c ^= (b>>13); \ ++ a -= b; a -= c; a ^= (c>>12); \ ++ b -= c; b -= a; b ^= (a<<16); \ ++ c -= a; c -= b; c ^= (b>>5); \ ++ a -= b; a -= c; a ^= (c>>3); \ ++ b -= c; b -= a; b ^= (a<<10); \ ++ c -= a; c -= b; c ^= (b>>15); \ ++} ++ ++/* The golden ration: an arbitrary value */ ++#define JHASH_GOLDEN_RATIO 0x9e3779b9 ++ ++/* The most generic version, hashes an arbitrary sequence ++ * of bytes. No alignment or length assumptions are made about ++ * the input key. ++ */ ++static inline __u32 jhash(void *key, __u32 length, __u32 initval) ++{ ++ __u32 a, b, c, len; ++ __u8 *k = key; ++ ++ len = length; ++ a = b = JHASH_GOLDEN_RATIO; ++ c = initval; ++ ++ while (len >= 12) { ++ a += (k[0] +((__u32)k[1]<<8) +((__u32)k[2]<<16) +((__u32)k[3]<<24)); ++ b += (k[4] +((__u32)k[5]<<8) +((__u32)k[6]<<16) +((__u32)k[7]<<24)); ++ c += (k[8] +((__u32)k[9]<<8) +((__u32)k[10]<<16)+((__u32)k[11]<<24)); ++ ++ __jhash_mix(a,b,c); ++ ++ k += 12; ++ len -= 12; ++ } ++ ++ c += length; ++ switch (len) { ++ case 11: c += ((__u32)k[10]<<24); ++ case 10: c += ((__u32)k[9]<<16); ++ case 9 : c += ((__u32)k[8]<<8); ++ case 8 : b += ((__u32)k[7]<<24); ++ case 7 : b += ((__u32)k[6]<<16); ++ case 6 : b += ((__u32)k[5]<<8); ++ case 5 : b += k[4]; ++ case 4 : a += ((__u32)k[3]<<24); ++ case 3 : a += ((__u32)k[2]<<16); ++ case 2 : a += ((__u32)k[1]<<8); ++ case 1 : a += k[0]; ++ }; ++ ++ __jhash_mix(a,b,c); ++ ++ return c; ++} ++ ++/* A special optimized version that handles 1 or more of __u32s. ++ * The length parameter here is the number of __u32s in the key. ++ */ ++static inline __u32 jhash2(__u32 *k, __u32 length, __u32 initval) ++{ ++ __u32 a, b, c, len; ++ ++ a = b = JHASH_GOLDEN_RATIO; ++ c = initval; ++ len = length; ++ ++ while (len >= 3) { ++ a += k[0]; ++ b += k[1]; ++ c += k[2]; ++ __jhash_mix(a, b, c); ++ k += 3; len -= 3; ++ } ++ ++ c += length * 4; ++ ++ switch (len) { ++ case 2 : b += k[1]; ++ case 1 : a += k[0]; ++ }; ++ ++ __jhash_mix(a,b,c); ++ ++ return c; ++} ++ ++ ++/* A special ultra-optimized versions that knows they are hashing exactly ++ * 3, 2 or 1 word(s). ++ * ++ * NOTE: In partilar the "c += length; __jhash_mix(a,b,c);" normally ++ * done at the end is not done here. ++ */ ++static inline __u32 jhash_3words(__u32 a, __u32 b, __u32 c, __u32 initval) ++{ ++ a += JHASH_GOLDEN_RATIO; ++ b += JHASH_GOLDEN_RATIO; ++ c += initval; ++ ++ __jhash_mix(a, b, c); ++ ++ return c; ++} ++ ++static inline __u32 jhash_2words(__u32 a, __u32 b, __u32 initval) ++{ ++ return jhash_3words(a, b, 0, initval); ++} ++ ++static inline __u32 jhash_1word(__u32 a, __u32 initval) ++{ ++ return jhash_3words(a, 0, 0, initval); ++} ++ ++#endif /* _LINUX_IPSET_JHASH_H */ +diff -urN linux-2.6.11/include/linux/netfilter_ipv4/ip_set_macipmap.h linux.sinabox/include/linux/netfilter_ipv4/ip_set_macipmap.h +--- linux-2.6.11/include/linux/netfilter_ipv4/ip_set_macipmap.h 1970-01-01 01:00:00.000000000 +0100 ++++ linux.sinabox/include/linux/netfilter_ipv4/ip_set_macipmap.h 2005-03-24 19:22:37.000000000 +0100 +@@ -0,0 +1,38 @@ ++#ifndef __IP_SET_MACIPMAP_H ++#define __IP_SET_MACIPMAP_H ++ ++#include ++ ++#define SETTYPE_NAME "macipmap" ++#define MAX_RANGE 0x0000FFFF ++ ++/* general flags */ ++#define IPSET_MACIP_MATCHUNSET 1 ++ ++/* per ip flags */ ++#define IPSET_MACIP_ISSET 1 ++ ++struct ip_set_macipmap { ++ void *members; /* the macipmap proper */ ++ ip_set_ip_t first_ip; /* host byte order, included in range */ ++ ip_set_ip_t last_ip; /* host byte order, included in range */ ++ u_int32_t flags; ++}; ++ ++struct ip_set_req_macipmap_create { ++ ip_set_ip_t from; ++ ip_set_ip_t to; ++ u_int32_t flags; ++}; ++ ++struct ip_set_req_macipmap { ++ ip_set_ip_t ip; ++ unsigned char ethernet[ETH_ALEN]; ++}; ++ ++struct ip_set_macip { ++ unsigned short flags; ++ unsigned char ethernet[ETH_ALEN]; ++}; ++ ++#endif /* __IP_SET_MACIPMAP_H */ +diff -urN linux-2.6.11/include/linux/netfilter_ipv4/ip_set_malloc.h linux.sinabox/include/linux/netfilter_ipv4/ip_set_malloc.h +--- linux-2.6.11/include/linux/netfilter_ipv4/ip_set_malloc.h 1970-01-01 01:00:00.000000000 +0100 ++++ linux.sinabox/include/linux/netfilter_ipv4/ip_set_malloc.h 2005-03-24 19:22:37.000000000 +0100 +@@ -0,0 +1,34 @@ ++#ifndef _IP_SET_MALLOC_H ++#define _IP_SET_MALLOC_H ++ ++#ifdef __KERNEL__ ++ ++/* Memory allocation and deallocation */ ++static size_t max_malloc_size = 0; ++ ++static inline void init_max_malloc_size(void) ++{ ++#define CACHE(x) max_malloc_size = x; ++#include ++#undef CACHE ++} ++ ++static inline void * ip_set_malloc(size_t bytes) ++{ ++ if (bytes > max_malloc_size) ++ return vmalloc(bytes); ++ else ++ return kmalloc(bytes, GFP_KERNEL); ++} ++ ++static inline void ip_set_free(void * data, size_t bytes) ++{ ++ if (bytes > max_malloc_size) ++ vfree(data); ++ else ++ kfree(data); ++} ++ ++#endif /* __KERNEL__ */ ++ ++#endif /*_IP_SET_MALLOC_H*/ +diff -urN linux-2.6.11/include/linux/netfilter_ipv4/ip_set_nethash.h linux.sinabox/include/linux/netfilter_ipv4/ip_set_nethash.h +--- linux-2.6.11/include/linux/netfilter_ipv4/ip_set_nethash.h 1970-01-01 01:00:00.000000000 +0100 ++++ linux.sinabox/include/linux/netfilter_ipv4/ip_set_nethash.h 2005-03-24 19:22:37.000000000 +0100 +@@ -0,0 +1,55 @@ ++#ifndef __IP_SET_NETHASH_H ++#define __IP_SET_NETHASH_H ++ ++#include ++ ++#define SETTYPE_NAME "nethash" ++#define MAX_RANGE 0x0000FFFF ++ ++struct ip_set_nethash { ++ ip_set_ip_t *members; /* the nethash proper */ ++ uint32_t initval; /* initval for jhash_1word */ ++ uint32_t prime; /* prime for double hashing */ ++ uint32_t hashsize; /* hash size */ ++ uint16_t probes; /* max number of probes */ ++ uint16_t resize; /* resize factor in percent */ ++ unsigned char cidr[30]; /* CIDR sizes */ ++}; ++ ++struct ip_set_req_nethash_create { ++ uint32_t hashsize; ++ uint16_t probes; ++ uint16_t resize; ++}; ++ ++struct ip_set_req_nethash { ++ ip_set_ip_t ip; ++ unsigned char cidr; ++}; ++ ++static unsigned char shifts[] = {255, 253, 249, 242, 225, 193, 129, 1}; ++ ++static inline ip_set_ip_t ++pack(ip_set_ip_t ip, unsigned char cidr) ++{ ++ ip_set_ip_t addr, *paddr = &addr; ++ unsigned char n, t, *a; ++ ++ addr = htonl(ip & (0xFFFFFFFF << (32 - (cidr)))); ++#ifdef __KERNEL__ ++ DP("ip:%u.%u.%u.%u/%u", NIPQUAD(addr), cidr); ++#endif ++ n = cidr / 8; ++ t = cidr % 8; ++ a = &((unsigned char *)paddr)[n]; ++ *a = *a /(1 << (8 - t)) + shifts[t]; ++#ifdef __KERNEL__ ++ DP("n: %u, t: %u, a: %u", n, t, *a); ++ DP("ip:%u.%u.%u.%u/%u, %u.%u.%u.%u", ++ HIPQUAD(ip), cidr, NIPQUAD(addr)); ++#endif ++ ++ return ntohl(addr); ++} ++ ++#endif /* __IP_SET_NETHASH_H */ +diff -urN linux-2.6.11/include/linux/netfilter_ipv4/ip_set_portmap.h linux.sinabox/include/linux/netfilter_ipv4/ip_set_portmap.h +--- linux-2.6.11/include/linux/netfilter_ipv4/ip_set_portmap.h 1970-01-01 01:00:00.000000000 +0100 ++++ linux.sinabox/include/linux/netfilter_ipv4/ip_set_portmap.h 2005-03-24 19:22:37.000000000 +0100 +@@ -0,0 +1,25 @@ ++#ifndef __IP_SET_PORTMAP_H ++#define __IP_SET_PORTMAP_H ++ ++#include ++ ++#define SETTYPE_NAME "portmap" ++#define MAX_RANGE 0x0000FFFF ++#define INVALID_PORT (MAX_RANGE + 1) ++ ++struct ip_set_portmap { ++ void *members; /* the portmap proper */ ++ ip_set_ip_t first_port; /* host byte order, included in range */ ++ ip_set_ip_t last_port; /* host byte order, included in range */ ++}; ++ ++struct ip_set_req_portmap_create { ++ ip_set_ip_t from; ++ ip_set_ip_t to; ++}; ++ ++struct ip_set_req_portmap { ++ ip_set_ip_t port; ++}; ++ ++#endif /* __IP_SET_PORTMAP_H */ +diff -urN linux-2.6.11/include/linux/netfilter_ipv4/ip_set_prime.h linux.sinabox/include/linux/netfilter_ipv4/ip_set_prime.h +--- linux-2.6.11/include/linux/netfilter_ipv4/ip_set_prime.h 1970-01-01 01:00:00.000000000 +0100 ++++ linux.sinabox/include/linux/netfilter_ipv4/ip_set_prime.h 2005-03-24 19:22:37.000000000 +0100 +@@ -0,0 +1,34 @@ ++#ifndef __IP_SET_PRIME_H ++#define __IP_SET_PRIME_H ++ ++static inline unsigned make_prime_bound(unsigned nr) ++{ ++ unsigned long long nr64 = nr; ++ unsigned long long x = 1; ++ nr = 1; ++ while (x <= nr64) { x <<= 2; nr <<= 1; } ++ return nr; ++} ++ ++static inline int make_prime_check(unsigned nr) ++{ ++ unsigned x = 3; ++ unsigned b = make_prime_bound(nr); ++ while (x <= b) { ++ if (0 == (nr % x)) return 0; ++ x += 2; ++ } ++ return 1; ++} ++ ++static unsigned make_prime(unsigned nr) ++{ ++ if (0 == (nr & 1)) nr--; ++ while (nr > 1) { ++ if (make_prime_check(nr)) return nr; ++ nr -= 2; ++ } ++ return 2; ++} ++ ++#endif /* __IP_SET_PRIME_H */ +diff -urN linux-2.6.11/include/linux/netfilter_ipv4/ipt_IMQ.h linux.sinabox/include/linux/netfilter_ipv4/ipt_IMQ.h +--- linux-2.6.11/include/linux/netfilter_ipv4/ipt_IMQ.h 1970-01-01 01:00:00.000000000 +0100 ++++ linux.sinabox/include/linux/netfilter_ipv4/ipt_IMQ.h 2005-03-26 00:49:04.000000000 +0100 +@@ -0,0 +1,8 @@ ++#ifndef _IPT_IMQ_H ++#define _IPT_IMQ_H ++ ++struct ipt_imq_info { ++ unsigned int todev; /* target imq device */ ++}; ++ ++#endif /* _IPT_IMQ_H */ +diff -urN linux-2.6.11/include/linux/netfilter_ipv4/ipt_ipp2p.h linux.sinabox/include/linux/netfilter_ipv4/ipt_ipp2p.h +--- linux-2.6.11/include/linux/netfilter_ipv4/ipt_ipp2p.h 1970-01-01 01:00:00.000000000 +0100 ++++ linux.sinabox/include/linux/netfilter_ipv4/ipt_ipp2p.h 2005-03-24 19:26:06.000000000 +0100 +@@ -0,0 +1,29 @@ ++#ifndef __IPT_IPP2P_H ++#define __IPT_IPP2P_H ++#define IPP2P_VERSION "0.7.2" ++ ++struct ipt_p2p_info { ++ int cmd; ++ int debug; ++}; ++ ++#endif //__IPT_IPP2P_H ++ ++#define SHORT_HAND_IPP2P 1 /* --ipp2p switch*/ ++#define SHORT_HAND_DATA 4 /* --ipp2p-data switch*/ ++#define SHORT_HAND_NONE 5 /* no short hand*/ ++ ++#define IPP2P_EDK 2 ++#define IPP2P_DATA_KAZAA 8 ++#define IPP2P_DATA_EDK 16 ++#define IPP2P_DATA_DC 32 ++#define IPP2P_DC 64 ++#define IPP2P_DATA_GNU 128 ++#define IPP2P_GNU 256 ++#define IPP2P_KAZAA 512 ++#define IPP2P_BIT 1024 ++#define IPP2P_APPLE 2048 ++#define IPP2P_SOUL 4096 ++#define IPP2P_WINMX 8192 ++#define IPP2P_ARES 16384 ++ +diff -urN linux-2.6.11/include/linux/netfilter_ipv4/ipt_set.h linux.sinabox/include/linux/netfilter_ipv4/ipt_set.h +--- linux-2.6.11/include/linux/netfilter_ipv4/ipt_set.h 1970-01-01 01:00:00.000000000 +0100 ++++ linux.sinabox/include/linux/netfilter_ipv4/ipt_set.h 2005-03-24 19:22:37.000000000 +0100 +@@ -0,0 +1,21 @@ ++#ifndef _IPT_SET_H ++#define _IPT_SET_H ++ ++#include ++ ++struct ipt_set_info { ++ ip_set_id_t index; ++ u_int32_t flags[IP_SET_MAX_BINDINGS + 1]; ++}; ++ ++/* match info */ ++struct ipt_set_info_match { ++ struct ipt_set_info match_set; ++}; ++ ++struct ipt_set_info_target { ++ struct ipt_set_info add_set; ++ struct ipt_set_info del_set; ++}; ++ ++#endif /*_IPT_SET_H*/ +diff -urN linux-2.6.11/include/linux/netfilter_ipv6/ip6_conntrack_core.h linux.sinabox/include/linux/netfilter_ipv6/ip6_conntrack_core.h +--- linux-2.6.11/include/linux/netfilter_ipv6/ip6_conntrack_core.h 1970-01-01 01:00:00.000000000 +0100 ++++ linux.sinabox/include/linux/netfilter_ipv6/ip6_conntrack_core.h 2005-03-26 19:02:06.000000000 +0100 +@@ -0,0 +1,69 @@ ++/* ++ * Copyright (C)2003 USAGI/WIDE Project ++ * ++ * Authors: ++ * Yasuyuki Kozakai ++ * ++ * Based on: include/linux/netfilter_ipv4/ip_conntrack_core.h ++ * ++ * This program 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 ++ * 2 of the License, or (at your option) any later version. ++ */ ++#ifndef _IP6_CONNTRACK_CORE_H ++#define _IP6_CONNTRACK_CORE_H ++#include ++#include ++ ++/* This header is used to share core functionality between the ++ standalone connection tracking module, and the compatibility layer's use ++ of connection tracking. */ ++extern unsigned int ip6_conntrack_in(unsigned int hooknum, ++ struct sk_buff **pskb, ++ const struct net_device *in, ++ const struct net_device *out, ++ int (*okfn)(struct sk_buff *)); ++ ++extern int ip6_conntrack_init(void); ++extern void ip6_conntrack_cleanup(void); ++ ++struct ip6_conntrack_protocol; ++extern struct ip6_conntrack_protocol *ip6_ct_find_proto(u_int8_t protocol); ++/* Like above, but you already have conntrack read lock. */ ++extern struct ip6_conntrack_protocol *__ip6_ct_find_proto(u_int8_t protocol); ++extern struct list_head ip6_protocol_list; ++ ++/* Returns conntrack if it dealt with ICMP, and filled in skb->nfct */ ++extern struct ip6_conntrack *icmp6_error_track(struct sk_buff *skb, ++ unsigned int icmp6off, ++ enum ip6_conntrack_info *ctinfo, ++ unsigned int hooknum); ++extern int ip6_get_tuple(const struct ipv6hdr *ipv6h, ++ const struct sk_buff *skb, ++ unsigned int protoff, ++ u_int8_t protonum, ++ struct ip6_conntrack_tuple *tuple, ++ const struct ip6_conntrack_protocol *protocol); ++ ++/* Find a connection corresponding to a tuple. */ ++struct ip6_conntrack_tuple_hash * ++ip6_conntrack_find_get(const struct ip6_conntrack_tuple *tuple, ++ const struct ip6_conntrack *ignored_conntrack); ++ ++extern int __ip6_conntrack_confirm(struct sk_buff *skb); ++ ++/* Confirm a connection: returns NF_DROP if packet must be dropped. */ ++static inline int ip6_conntrack_confirm(struct sk_buff *skb) ++{ ++ if (skb->nfct ++ && !is_confirmed((struct ip6_conntrack *)skb->nfct)) ++ return __ip6_conntrack_confirm(skb); ++ return NF_ACCEPT; ++} ++ ++extern struct list_head *ip6_conntrack_hash; ++extern struct list_head ip6_conntrack_expect_list; ++DECLARE_RWLOCK_EXTERN(ip6_conntrack_lock); ++#endif /* _IP6_CONNTRACK_CORE_H */ ++ +diff -urN linux-2.6.11/include/linux/netfilter_ipv6/ip6_conntrack_ftp.h linux.sinabox/include/linux/netfilter_ipv6/ip6_conntrack_ftp.h +--- linux-2.6.11/include/linux/netfilter_ipv6/ip6_conntrack_ftp.h 1970-01-01 01:00:00.000000000 +0100 ++++ linux.sinabox/include/linux/netfilter_ipv6/ip6_conntrack_ftp.h 2005-03-26 19:02:06.000000000 +0100 +@@ -0,0 +1,57 @@ ++/* ++ * Copyright (C)2003 USAGI/WIDE Project ++ * ++ * Authors: ++ * Yasuyuki Kozakai ++ * ++ * Based on: include/linux/netfilter_ipv4/ip_conntrack_ftp.h ++ * ++ * This program 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 ++ * 2 of the License, or (at your option) any later version. ++ */ ++#ifndef _IP6_CONNTRACK_FTP_H ++#define _IP6_CONNTRACK_FTP_H ++/* FTP tracking. */ ++ ++#ifdef __KERNEL__ ++ ++#include ++ ++/* Protects ftp part of conntracks */ ++DECLARE_LOCK_EXTERN(ip6_ftp_lock); ++ ++#define FTP_PORT 21 ++ ++#endif /* __KERNEL__ */ ++ ++enum ip6_ct_ftp_type ++{ ++ /* EPRT command from client */ ++ IP6_CT_FTP_EPRT, ++ /* EPSV response from server */ ++ IP6_CT_FTP_EPSV, ++}; ++ ++/* This structure is per expected connection */ ++struct ip6_ct_ftp_expect ++{ ++ /* We record seq number and length of ftp ip/port text here: all in ++ * host order. */ ++ ++ /* sequence number of IP address in packet is in ip_conntrack_expect */ ++ u_int32_t len; /* length of IPv6 address */ ++ enum ip6_ct_ftp_type ftptype; /* EPRT or EPSV ? */ ++ u_int16_t port; /* Port that was to be used */ ++}; ++ ++/* This structure exists only once per master */ ++struct ip6_ct_ftp_master { ++ /* Next valid seq position for cmd matching after newline */ ++ u_int32_t seq_aft_nl[IP6_CT_DIR_MAX]; ++ /* 0 means seq_match_aft_nl not set */ ++ int seq_aft_nl_set[IP6_CT_DIR_MAX]; ++}; ++ ++#endif /* _IP6_CONNTRACK_FTP_H */ +diff -urN linux-2.6.11/include/linux/netfilter_ipv6/ip6_conntrack.h linux.sinabox/include/linux/netfilter_ipv6/ip6_conntrack.h +--- linux-2.6.11/include/linux/netfilter_ipv6/ip6_conntrack.h 1970-01-01 01:00:00.000000000 +0100 ++++ linux.sinabox/include/linux/netfilter_ipv6/ip6_conntrack.h 2005-03-26 19:02:06.000000000 +0100 +@@ -0,0 +1,264 @@ ++/* ++ * Copyright (C)2003 USAGI/WIDE Project ++ * ++ * Authors: ++ * Yasuyuki Kozakai ++ * ++ * Based on: include/linux/netfilter_ipv4/ip_conntrack.h ++ * ++ * This program 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 ++ * 2 of the License, or (at your option) any later version. ++ */ ++#ifndef _IP6_CONNTRACK_H ++#define _IP6_CONNTRACK_H ++/* Connection state tracking for netfilter. This is separated from, ++ but required by, the NAT layer; it can also be used by an iptables ++ extension. */ ++ ++#include ++#include ++#include ++#include ++#include ++ ++enum ip6_conntrack_info ++{ ++ /* Part of an established connection (either direction). */ ++ IP6_CT_ESTABLISHED, ++ ++ /* Like NEW, but related to an existing connection, or ICMP error ++ (in either direction). */ ++ IP6_CT_RELATED, ++ ++ /* Started a new connection to track (only ++ IP6_CT_DIR_ORIGINAL); may be a retransmission. */ ++ IP6_CT_NEW, ++ ++ /* >= this indicates reply direction */ ++ IP6_CT_IS_REPLY, ++ ++ /* Number of distinct IP6_CT types (no NEW in reply dirn). */ ++ IP6_CT_NUMBER = IP6_CT_IS_REPLY * 2 - 1 ++}; ++ ++/* Bitset representing status of connection. */ ++enum ip6_conntrack_status { ++ /* It's an expected connection: bit 0 set. This bit never changed */ ++ IP6S_EXPECTED_BIT = 0, ++ IP6S_EXPECTED = (1 << IP6S_EXPECTED_BIT), ++ ++ /* We've seen packets both ways: bit 1 set. Can be set, not unset. */ ++ IP6S_SEEN_REPLY_BIT = 1, ++ IP6S_SEEN_REPLY = (1 << IP6S_SEEN_REPLY_BIT), ++ ++ /* Conntrack should never be early-expired. */ ++ IP6S_ASSURED_BIT = 2, ++ IP6S_ASSURED = (1 << IP6S_ASSURED_BIT), ++ ++ /* Connection is confirmed: originating packet has left box */ ++ IP6S_CONFIRMED_BIT = 3, ++ IP6S_CONFIRMED = (1 << IP6S_CONFIRMED_BIT), ++}; ++ ++#include ++#include ++ ++/* per conntrack: protocol private data */ ++union ip6_conntrack_proto { ++ /* insert conntrack proto private data here */ ++ struct ip6_ct_tcp tcp; ++ struct ip6_ct_icmpv6 icmpv6; ++}; ++ ++union ip6_conntrack_expect_proto { ++ /* insert expect proto private data here */ ++}; ++ ++/* Add protocol helper include file here */ ++#include ++ ++/* per expectation: application helper private data */ ++union ip6_conntrack_expect_help { ++ /* insert conntrack helper private data (expect) here */ ++ struct ip6_ct_ftp_expect exp_ftp_info; ++}; ++ ++/* per conntrack: application helper private data */ ++union ip6_conntrack_help { ++ /* insert conntrack helper private data (master) here */ ++ struct ip6_ct_ftp_master ct_ftp_info; ++}; ++ ++#ifdef __KERNEL__ ++ ++#include ++#include ++ ++#ifdef CONFIG_NF_DEBUG ++#define IP6_NF_ASSERT(x) \ ++do { \ ++ if (!(x)) \ ++ /* Wooah! I'm tripping my conntrack in a frenzy of \ ++ netplay... */ \ ++ printk("NF_IP6_ASSERT: %s:%i(%s)\n", \ ++ __FILE__, __LINE__, __FUNCTION__); \ ++} while(0) ++#else ++#define IP6_NF_ASSERT(x) ++#endif ++ ++struct ip6_conntrack_expect ++{ ++ /* Internal linked list (global expectation list) */ ++ struct list_head list; ++ ++ /* reference count */ ++ atomic_t use; ++ ++ /* expectation list for this master */ ++ struct list_head expected_list; ++ ++ /* The conntrack of the master connection */ ++ struct ip6_conntrack *expectant; ++ ++ /* The conntrack of the sibling connection, set after ++ * expectation arrived */ ++ struct ip6_conntrack *sibling; ++ ++ /* IPv6 packet is never NATed */ ++ /* Tuple saved for conntrack */ ++/* ++ struct ip6_conntrack_tuple ct_tuple; ++*/ ++ ++ /* Timer function; deletes the expectation. */ ++ struct timer_list timeout; ++ ++ /* Data filled out by the conntrack helpers follow: */ ++ ++ /* We expect this tuple, with the following mask */ ++ struct ip6_conntrack_tuple tuple, mask; ++ ++ /* Function to call after setup and insertion */ ++ int (*expectfn)(struct ip6_conntrack *new); ++ ++ /* At which sequence number did this expectation occur */ ++ u_int32_t seq; ++ ++ union ip6_conntrack_expect_proto proto; ++ ++ union ip6_conntrack_expect_help help; ++}; ++ ++#include ++struct ip6_conntrack ++{ ++ /* Usage count in here is 1 for hash table/destruct timer, 1 per skb, ++ plus 1 for any connection(s) we are `master' for */ ++ struct nf_conntrack ct_general; ++ ++ /* These are my tuples; original and reply */ ++ struct ip6_conntrack_tuple_hash tuplehash[IP6_CT_DIR_MAX]; ++ ++ /* Have we seen traffic both ways yet? (bitset) */ ++ unsigned long status; ++ ++ /* Timer function; drops refcnt when it goes off. */ ++ struct timer_list timeout; ++ ++ /* If we're expecting another related connection, this will be ++ in expected linked list */ ++ struct list_head sibling_list; ++ ++ /* Current number of expected connections */ ++ unsigned int expecting; ++ ++ /* If we were expected by an expectation, this will be it */ ++ struct ip6_conntrack_expect *master; ++ ++ /* Helper, if any. */ ++ struct ip6_conntrack_helper *helper; ++ ++ /* Storage reserved for other modules: */ ++ union ip6_conntrack_proto proto; ++ ++ union ip6_conntrack_help help; ++}; ++ ++/* get master conntrack via master expectation */ ++#define master_ct6(conntr) (conntr->master ? conntr->master->expectant : NULL) ++ ++/* Alter reply tuple (maybe alter helper). If it's already taken, ++ return 0 and don't do alteration. */ ++extern int ++ip6_conntrack_alter_reply(struct ip6_conntrack *conntrack, ++ const struct ip6_conntrack_tuple *newreply); ++ ++/* Is this tuple taken? (ignoring any belonging to the given ++ conntrack). */ ++extern int ++ip6_conntrack_tuple_taken(const struct ip6_conntrack_tuple *tuple, ++ const struct ip6_conntrack *ignored_conntrack); ++ ++/* Return conntrack_info and tuple hash for given skb. */ ++static inline struct ip6_conntrack * ++ip6_conntrack_get(const struct sk_buff *skb, enum ip6_conntrack_info *ctinfo) ++{ ++ *ctinfo = skb->nfctinfo; ++ return (struct ip6_conntrack *)skb->nfct; ++} ++ ++/* decrement reference count on a conntrack */ ++extern inline void ip6_conntrack_put(struct ip6_conntrack *ct); ++ ++/* find unconfirmed expectation based on tuple */ ++struct ip6_conntrack_expect * ++ip6_conntrack_expect_find_get(const struct ip6_conntrack_tuple *tuple); ++ ++/* decrement reference count on an expectation */ ++void ip6_conntrack_expect_put(struct ip6_conntrack_expect *exp); ++ ++/* call to create an explicit dependency on ip6_conntrack. */ ++extern void need_ip6_conntrack(void); ++ ++extern int ip6_invert_tuplepr(struct ip6_conntrack_tuple *inverse, ++ const struct ip6_conntrack_tuple *orig); ++ ++/* Refresh conntrack for this many jiffies */ ++extern void ip6_ct_refresh(struct ip6_conntrack *ct, ++ unsigned long extra_jiffies); ++ ++/* Call me when a conntrack is destroyed. */ ++extern void (*ip6_conntrack_destroyed)(struct ip6_conntrack *conntrack); ++ ++/* Returns new sk_buff, or NULL */ ++struct sk_buff * ++ip6_ct_gather_frags(struct sk_buff *skb); ++ ++/* Delete all conntracks which match. */ ++extern void ++ip6_ct_selective_cleanup(int (*kill)(const struct ip6_conntrack *i, void *data), ++ void *data); ++ ++/* It's confirmed if it is, or has been in the hash table. */ ++static inline int is_confirmed(struct ip6_conntrack *ct) ++{ ++ return test_bit(IP6S_CONFIRMED_BIT, &ct->status); ++} ++ ++extern unsigned int ip6_conntrack_htable_size; ++ ++/* eg. PROVIDES_CONNTRACK6(ftp); */ ++#define PROVIDES_CONNTRACK6(name) \ ++ int needs_ip6_conntrack_##name; \ ++ EXPORT_SYMBOL(needs_ip6_conntrack_##name) ++ ++/*. eg. NEEDS_CONNTRACK6(ftp); */ ++#define NEEDS_CONNTRACK6(name) \ ++ extern int needs_ip6_conntrack_##name; \ ++ static int *need_ip6_conntrack_##name __attribute_used__ = &needs_ip6_conntrack_##name ++ ++#endif /* __KERNEL__ */ ++#endif /* _IP6_CONNTRACK_H */ +diff -urN linux-2.6.11/include/linux/netfilter_ipv6/ip6_conntrack_helper.h linux.sinabox/include/linux/netfilter_ipv6/ip6_conntrack_helper.h +--- linux-2.6.11/include/linux/netfilter_ipv6/ip6_conntrack_helper.h 1970-01-01 01:00:00.000000000 +0100 ++++ linux.sinabox/include/linux/netfilter_ipv6/ip6_conntrack_helper.h 2005-03-26 19:02:06.000000000 +0100 +@@ -0,0 +1,57 @@ ++/* ++ * Copyright (C)2003 USAGI/WIDE Project ++ * ++ * Authors: ++ * Yasuyuki Kozakai ++ * ++ * Based on: include/linux/netfilter_ipv4/ip_conntrack_helper.h ++ * ++ * This program 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 ++ * 2 of the License, or (at your option) any later version. ++ */ ++/* IP6 connection tracking helpers. */ ++#ifndef _IP6_CONNTRACK_HELPER_H ++#define _IP6_CONNTRACK_HELPER_H ++#include ++ ++struct module; ++ ++/* Reuse expectation when max_expected reached */ ++#define IP6_CT_HELPER_F_REUSE_EXPECT 0x01 ++ ++struct ip6_conntrack_helper ++{ ++ struct list_head list; /* Internal use. */ ++ ++ const char *name; /* name of the module */ ++ unsigned char flags; /* Flags (see above) */ ++ struct module *me; /* pointer to self */ ++ unsigned int max_expected; /* Maximum number of concurrent ++ * expected connections */ ++ unsigned int timeout; /* timeout for expecteds */ ++ ++ /* Mask of things we will help (compared against server response) */ ++ struct ip6_conntrack_tuple tuple; ++ struct ip6_conntrack_tuple mask; ++ ++ /* Function to call when data passes; return verdict, or -1 to ++ invalidate. */ ++ int (*help)(const struct sk_buff *skb, ++ unsigned int protoff, ++ struct ip6_conntrack *ct, ++ enum ip6_conntrack_info conntrackinfo); ++}; ++ ++extern int ip6_conntrack_helper_register(struct ip6_conntrack_helper *); ++extern void ip6_conntrack_helper_unregister(struct ip6_conntrack_helper *); ++ ++extern struct ip6_conntrack_helper *ip6_ct_find_helper(const struct ip6_conntrack_tuple *tuple); ++ ++/* Add an expected connection: can have more than one per connection */ ++extern int ip6_conntrack_expect_related(struct ip6_conntrack *related_to, ++ struct ip6_conntrack_expect *exp); ++extern void ip6_conntrack_unexpect_related(struct ip6_conntrack_expect *exp); ++ ++#endif /*_IP6_CONNTRACK_HELPER_H*/ +diff -urN linux-2.6.11/include/linux/netfilter_ipv6/ip6_conntrack_icmpv6.h linux.sinabox/include/linux/netfilter_ipv6/ip6_conntrack_icmpv6.h +--- linux-2.6.11/include/linux/netfilter_ipv6/ip6_conntrack_icmpv6.h 1970-01-01 01:00:00.000000000 +0100 ++++ linux.sinabox/include/linux/netfilter_ipv6/ip6_conntrack_icmpv6.h 2005-03-26 19:02:06.000000000 +0100 +@@ -0,0 +1,24 @@ ++/* ++ * Copyright (C)2003 USAGI/WIDE Project ++ * ++ * Authors: ++ * Yasuyuki Kozakai ++ * ++ * Based on: include/linux/netfilter_ipv4/ip_conntrack_icmp.h ++ * ++ * This program 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 ++ * 2 of the License, or (at your option) any later version. ++ */ ++#ifndef _IP6_CONNTRACK_ICMPV6_H ++#define _IP6_CONNTRACK_ICMPV6_H ++/* ICMPv6 tracking. */ ++#include ++ ++struct ip6_ct_icmpv6 ++{ ++ /* Optimization: when number in == number out, forget immediately. */ ++ atomic_t count; ++}; ++#endif /* _IP6_CONNTRACK_ICMPv6_H */ +diff -urN linux-2.6.11/include/linux/netfilter_ipv6/ip6_conntrack_protocol.h linux.sinabox/include/linux/netfilter_ipv6/ip6_conntrack_protocol.h +--- linux-2.6.11/include/linux/netfilter_ipv6/ip6_conntrack_protocol.h 1970-01-01 01:00:00.000000000 +0100 ++++ linux.sinabox/include/linux/netfilter_ipv6/ip6_conntrack_protocol.h 2005-03-26 19:02:06.000000000 +0100 +@@ -0,0 +1,83 @@ ++/* ++ * Copyright (C)2003 USAGI/WIDE Project ++ * ++ * Authors: ++ * Yasuyuki Kozakai ++ * ++ * Based on: include/linux/netfilter_ipv4/ip_conntrack_protocol.h ++ * ++ * This program 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 ++ * 2 of the License, or (at your option) any later version. ++ */ ++/* Header for use in defining a given protocol for connection tracking. */ ++#ifndef _IP6_CONNTRACK_PROTOCOL_H ++#define _IP6_CONNTRACK_PROTOCOL_H ++#include ++#include ++ ++struct ip6_conntrack_protocol ++{ ++ /* Next pointer. */ ++ struct list_head list; ++ ++ /* Protocol number. */ ++ u_int8_t proto; ++ ++ /* Protocol name */ ++ const char *name; ++ ++ /* Try to fill in the third arg: dataoff is offset past IPv6 ++ hdr and IPv6 ext hdrs. Return true if possible. */ ++ int (*pkt_to_tuple)(const struct sk_buff *skb, ++ unsigned int dataoff, ++ struct ip6_conntrack_tuple *tuple); ++ ++ /* Invert the per-proto part of the tuple: ie. turn xmit into reply. ++ * Some packets can't be inverted: return 0 in that case. ++ */ ++ int (*invert_tuple)(struct ip6_conntrack_tuple *inverse, ++ const struct ip6_conntrack_tuple *orig); ++ ++ /* Print out the per-protocol part of the tuple. */ ++ unsigned int (*print_tuple)(char *buffer, ++ const struct ip6_conntrack_tuple *); ++ ++ /* Print out the private part of the conntrack. */ ++ unsigned int (*print_conntrack)(char *buffer, ++ const struct ip6_conntrack *); ++ ++ /* Returns verdict for packet, or -1 for invalid. */ ++ int (*packet)(struct ip6_conntrack *conntrack, ++ const struct sk_buff *skb, ++ unsigned int dataoff, ++ enum ip6_conntrack_info ctinfo); ++ ++ /* Called when a new connection for this protocol found; ++ * returns TRUE if it's OK. If so, packet() called next. */ ++ int (*new)(struct ip6_conntrack *conntrack, const struct sk_buff *skb, ++ unsigned int dataoff); ++ ++ /* Called when a conntrack entry is destroyed */ ++ void (*destroy)(struct ip6_conntrack *conntrack); ++ ++ /* Has to decide if a expectation matches one packet or not */ ++ int (*exp_matches_pkt)(struct ip6_conntrack_expect *exp, ++ const struct sk_buff *skb, ++ unsigned int dataoff); ++ ++ /* Module (if any) which this is connected to. */ ++ struct module *me; ++}; ++ ++/* Protocol registration. */ ++extern int ip6_conntrack_protocol_register(struct ip6_conntrack_protocol *proto); ++extern void ip6_conntrack_protocol_unregister(struct ip6_conntrack_protocol *proto); ++ ++/* Existing built-in protocols */ ++extern struct ip6_conntrack_protocol ip6_conntrack_protocol_tcp; ++extern struct ip6_conntrack_protocol ip6_conntrack_protocol_udp; ++extern struct ip6_conntrack_protocol ip6_conntrack_protocol_icmpv6; ++extern int ip6_conntrack_protocol_tcp_init(void); ++#endif /*_IP6_CONNTRACK_PROTOCOL_H*/ +diff -urN linux-2.6.11/include/linux/netfilter_ipv6/ip6_conntrack_reasm.h linux.sinabox/include/linux/netfilter_ipv6/ip6_conntrack_reasm.h +--- linux-2.6.11/include/linux/netfilter_ipv6/ip6_conntrack_reasm.h 1970-01-01 01:00:00.000000000 +0100 ++++ linux.sinabox/include/linux/netfilter_ipv6/ip6_conntrack_reasm.h 2005-03-26 19:02:06.000000000 +0100 +@@ -0,0 +1,28 @@ ++/* ++ * Copyright (C)2003 USAGI/WIDE Project ++ * ++ * Authors: ++ * Yasuyuki Kozakai ++ * ++ * This program 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 ++ * 2 of the License, or (at your option) any later version. ++ */ ++#ifndef _IP6_CONNTRACK_REASM_H ++#define _IP6_CONNTRACK_REASM_H ++ ++#include ++extern struct sk_buff * ++ip6_ct_gather_frags(struct sk_buff *skb); ++ ++extern int ++ip6_ct_output_frags(struct sk_buff *skb, struct nf_info *info); ++ ++extern int ip6_ct_kfree_frags(struct sk_buff *skb); ++ ++extern int ip6_ct_frags_init(void); ++extern void ip6_ct_frags_cleanup(void); ++ ++#endif /* _IP6_CONNTRACK_REASM_H */ ++ +diff -urN linux-2.6.11/include/linux/netfilter_ipv6/ip6_conntrack_tcp.h linux.sinabox/include/linux/netfilter_ipv6/ip6_conntrack_tcp.h +--- linux-2.6.11/include/linux/netfilter_ipv6/ip6_conntrack_tcp.h 1970-01-01 01:00:00.000000000 +0100 ++++ linux.sinabox/include/linux/netfilter_ipv6/ip6_conntrack_tcp.h 2005-03-26 19:02:06.000000000 +0100 +@@ -0,0 +1,41 @@ ++/* ++ * Copyright (C)2003 USAGI/WIDE Project ++ * ++ * Authors: ++ * Yasuyuki Kozakai ++ * ++ * Based on: include/linux/netfilter_ipv4/ip_conntrack_tcp.h ++ * ++ * This program 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 ++ * 2 of the License, or (at your option) any later version. ++ */ ++#ifndef _IP6_CONNTRACK_TCP_H ++#define _IP6_CONNTRACK_TCP_H ++/* TCP tracking. */ ++ ++enum tcp_conntrack { ++ TCP_CONNTRACK_NONE, ++ TCP_CONNTRACK_ESTABLISHED, ++ TCP_CONNTRACK_SYN_SENT, ++ TCP_CONNTRACK_SYN_RECV, ++ TCP_CONNTRACK_FIN_WAIT, ++ TCP_CONNTRACK_TIME_WAIT, ++ TCP_CONNTRACK_CLOSE, ++ TCP_CONNTRACK_CLOSE_WAIT, ++ TCP_CONNTRACK_LAST_ACK, ++ TCP_CONNTRACK_LISTEN, ++ TCP_CONNTRACK_MAX ++}; ++ ++struct ip6_ct_tcp ++{ ++ enum tcp_conntrack state; ++ ++ /* Poor man's window tracking: sequence number of valid ACK ++ handshake completion packet */ ++ u_int32_t handshake_ack; ++}; ++ ++#endif /* _IP6_CONNTRACK_TCP_H */ +diff -urN linux-2.6.11/include/linux/netfilter_ipv6/ip6_conntrack_tuple.h linux.sinabox/include/linux/netfilter_ipv6/ip6_conntrack_tuple.h +--- linux-2.6.11/include/linux/netfilter_ipv6/ip6_conntrack_tuple.h 1970-01-01 01:00:00.000000000 +0100 ++++ linux.sinabox/include/linux/netfilter_ipv6/ip6_conntrack_tuple.h 2005-03-26 19:02:06.000000000 +0100 +@@ -0,0 +1,131 @@ ++/* ++ * Copyright (C)2003 USAGI/WIDE Project ++ * ++ * Authors: ++ * Yasuyuki Kozakai ++ * ++ * Based on: include/linux/netfilter_ipv4/ip_conntrack_tuple.h ++ * ++ * This program 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 ++ * 2 of the License, or (at your option) any later version. ++ */ ++#ifndef _IP6_CONNTRACK_TUPLE_H ++#define _IP6_CONNTRACK_TUPLE_H ++ ++#ifdef __KERNEL__ ++#include ++#include ++#endif ++ ++/* A `tuple' is a structure containing the information to uniquely ++ identify a connection. ie. if two packets have the same tuple, they ++ are in the same connection; if not, they are not. ++ ++ We divide the structure along "manipulatable" and ++ "non-manipulatable" lines, for the benefit of the NAT code. ++*/ ++ ++/* The protocol-specific manipulable parts of the tuple: always in ++ network order! */ ++union ip6_conntrack_manip_proto ++{ ++ /* Add other protocols here. */ ++ u_int16_t all; ++ ++ struct { ++ u_int16_t port; ++ } tcp; ++ struct { ++ u_int16_t port; ++ } udp; ++ struct { ++ u_int16_t id; ++ } icmpv6; ++}; ++ ++/* The manipulable part of the tuple. */ ++struct ip6_conntrack_manip ++{ ++ struct in6_addr ip; ++ union ip6_conntrack_manip_proto u; ++}; ++ ++/* This contains the information to distinguish a connection. */ ++struct ip6_conntrack_tuple ++{ ++ struct ip6_conntrack_manip src; ++ ++ /* These are the parts of the tuple which are fixed. */ ++ struct { ++ struct in6_addr ip; ++ union { ++ /* Add other protocols here. */ ++ u_int16_t all; ++ ++ struct { ++ u_int16_t port; ++ } tcp; ++ struct { ++ u_int16_t port; ++ } udp; ++ struct { ++ u_int8_t type, code; ++ } icmpv6; ++ } u; ++ ++ /* The protocol. */ ++ u_int16_t protonum; ++ } dst; ++}; ++ ++enum ip6_conntrack_dir ++{ ++ IP6_CT_DIR_ORIGINAL, ++ IP6_CT_DIR_REPLY, ++ IP6_CT_DIR_MAX ++}; ++ ++#ifdef __KERNEL__ ++ ++#define DUMP_TUPLE(tp) \ ++{ \ ++ DEBUGP("tuple %p: %u %x:%x:%x:%x:%x:%x:%x:%x, %hu -> %x:%x:%x:%x:%x:%x:%x:%x, %hu\n", \ ++ (tp), (tp)->dst.protonum, \ ++ NIP6((tp)->src.ip), ntohs((tp)->src.u.all), \ ++ NIP6((tp)->dst.ip), ntohs((tp)->dst.u.all)); \ ++} ++ ++#define CTINFO2DIR(ctinfo) ((ctinfo) >= IP6_CT_IS_REPLY ? IP6_CT_DIR_REPLY : IP6_CT_DIR_ORIGINAL) ++ ++/* If we're the first tuple, it's the original dir. */ ++#define DIRECTION(h) ((enum ip6_conntrack_dir)(&(h)->ctrack->tuplehash[1] == (h))) ++ ++/* Connections have two entries in the hash table: one for each way */ ++struct ip6_conntrack_tuple_hash ++{ ++ struct list_head list; ++ ++ struct ip6_conntrack_tuple tuple; ++ ++ /* this == &ctrack->tuplehash[DIRECTION(this)]. */ ++ struct ip6_conntrack *ctrack; ++}; ++ ++#endif /* __KERNEL__ */ ++ ++extern int ip6_ct_tuple_src_equal(const struct ip6_conntrack_tuple *t1, ++ const struct ip6_conntrack_tuple *t2); ++ ++extern int ip6_ct_tuple_dst_equal(const struct ip6_conntrack_tuple *t1, ++ const struct ip6_conntrack_tuple *t2); ++ ++extern int ip6_ct_tuple_equal(const struct ip6_conntrack_tuple *t1, ++ const struct ip6_conntrack_tuple *t2); ++ ++extern int ip6_ct_tuple_mask_cmp(const struct ip6_conntrack_tuple *t, ++ const struct ip6_conntrack_tuple *tuple, ++ const struct ip6_conntrack_tuple *mask); ++ ++#endif /* _IP6_CONNTRACK_TUPLE_H */ +diff -urN linux-2.6.11/include/linux/netfilter_ipv6/ip6t_IMQ.h linux.sinabox/include/linux/netfilter_ipv6/ip6t_IMQ.h +--- linux-2.6.11/include/linux/netfilter_ipv6/ip6t_IMQ.h 1970-01-01 01:00:00.000000000 +0100 ++++ linux.sinabox/include/linux/netfilter_ipv6/ip6t_IMQ.h 2005-03-26 00:49:04.000000000 +0100 +@@ -0,0 +1,8 @@ ++#ifndef _IP6T_IMQ_H ++#define _IP6T_IMQ_H ++ ++struct ip6t_imq_info { ++ unsigned int todev; /* target imq device */ ++}; ++ ++#endif /* _IP6T_IMQ_H */ +diff -urN linux-2.6.11/include/linux/netfilter_ipv6/ip6t_REJECT.h linux.sinabox/include/linux/netfilter_ipv6/ip6t_REJECT.h +--- linux-2.6.11/include/linux/netfilter_ipv6/ip6t_REJECT.h 1970-01-01 01:00:00.000000000 +0100 ++++ linux.sinabox/include/linux/netfilter_ipv6/ip6t_REJECT.h 2005-03-26 19:02:06.000000000 +0100 +@@ -0,0 +1,18 @@ ++#ifndef _IP6T_REJECT_H ++#define _IP6T_REJECT_H ++ ++enum ip6t_reject_with { ++ IP6T_ICMP6_NO_ROUTE, ++ IP6T_ICMP6_ADM_PROHIBITED, ++ IP6T_ICMP6_NOT_NEIGHBOUR, ++ IP6T_ICMP6_ADDR_UNREACH, ++ IP6T_ICMP6_PORT_UNREACH, ++ IP6T_ICMP6_ECHOREPLY, ++ IP6T_TCP_RESET ++}; ++ ++struct ip6t_reject_info { ++ enum ip6t_reject_with with; /* reject type */ ++}; ++ ++#endif /*_IP6T_REJECT_H*/ +diff -urN linux-2.6.11/include/linux/netfilter_ipv6/ip6t_state.h linux.sinabox/include/linux/netfilter_ipv6/ip6t_state.h +--- linux-2.6.11/include/linux/netfilter_ipv6/ip6t_state.h 1970-01-01 01:00:00.000000000 +0100 ++++ linux.sinabox/include/linux/netfilter_ipv6/ip6t_state.h 2005-03-26 19:02:06.000000000 +0100 +@@ -0,0 +1,24 @@ ++/* ++ * Copyright (C)2003 USAGI/WIDE Project ++ * ++ * Authors: ++ * Yasuyuki Kozakai ++ * ++ * Based on: include/linux/netfilter_ipv4/ipt_state.h ++ * ++ * This program 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 ++ * 2 of the License, or (at your option) any later version. ++ */ ++#ifndef _IP6T_STATE_H ++#define _IP6T_STATE_H ++ ++#define IP6T_STATE_BIT(ctinfo) (1 << ((ctinfo)%IP6_CT_IS_REPLY+1)) ++#define IP6T_STATE_INVALID (1 << 0) ++ ++struct ip6t_state_info ++{ ++ unsigned int statemask; ++}; ++#endif /*_IP6T_STATE_H*/ +diff -urN linux-2.6.11/include/linux/rtnetlink.h linux.sinabox/include/linux/rtnetlink.h +--- linux-2.6.11/include/linux/rtnetlink.h 2005-03-02 08:38:18.000000000 +0100 ++++ linux.sinabox/include/linux/rtnetlink.h 2005-03-26 19:02:06.000000000 +0100 +@@ -346,6 +346,7 @@ + #define RTAX_FEATURE_ECN 0x00000001 + #define RTAX_FEATURE_SACK 0x00000002 + #define RTAX_FEATURE_TIMESTAMP 0x00000004 ++#define RTAX_FEATURE_ALLFRAG 0x00000008 + + struct rta_session + { +diff -urN linux-2.6.11/include/linux/skbuff.h linux.sinabox/include/linux/skbuff.h +--- linux-2.6.11/include/linux/skbuff.h 2005-03-02 08:38:38.000000000 +0100 ++++ linux.sinabox/include/linux/skbuff.h 2005-03-26 00:49:04.000000000 +0100 +@@ -251,6 +251,11 @@ + __u32 nfcache; + __u32 nfctinfo; + struct nf_conntrack *nfct; ++ ++#if defined(CONFIG_IMQ) || defined(CONFIG_IMQ_MODULE) ++ unsigned char imq_flags; ++ struct nf_info *nf_info; ++#endif + #ifdef CONFIG_NETFILTER_DEBUG + unsigned int nf_debug; + #endif +diff -urN linux-2.6.11/include/linux/sysctl.h linux.sinabox/include/linux/sysctl.h +--- linux-2.6.11/include/linux/sysctl.h 2005-03-02 08:38:10.000000000 +0100 ++++ linux.sinabox/include/linux/sysctl.h 2005-03-26 19:02:06.000000000 +0100 +@@ -455,7 +455,8 @@ + NET_IPV6_ROUTE_GC_INTERVAL=6, + NET_IPV6_ROUTE_GC_ELASTICITY=7, + NET_IPV6_ROUTE_MTU_EXPIRES=8, +- NET_IPV6_ROUTE_MIN_ADVMSS=9 ++ NET_IPV6_ROUTE_MIN_ADVMSS=9, ++ NET_IPV6_ROUTE_GC_MIN_INTERVAL_MS=10 + }; + + enum { +@@ -475,7 +476,8 @@ + NET_IPV6_REGEN_MAX_RETRY=14, + NET_IPV6_MAX_DESYNC_FACTOR=15, + NET_IPV6_MAX_ADDRESSES=16, +- NET_IPV6_FORCE_MLD_VERSION=17 ++ NET_IPV6_FORCE_MLD_VERSION=17, ++ NET_IPV6_MC_FORWARDING=18 + }; + + /* /proc/sys/net/ipv6/icmp */ +@@ -488,8 +490,8 @@ + NET_NEIGH_MCAST_SOLICIT=1, + NET_NEIGH_UCAST_SOLICIT=2, + NET_NEIGH_APP_SOLICIT=3, +- NET_NEIGH_RETRANS_TIME=4, +- NET_NEIGH_REACHABLE_TIME=5, ++ NET_NEIGH_RETRANS_TIME=4, /* deprecated */ ++ NET_NEIGH_REACHABLE_TIME=5, /* deprecated */ + NET_NEIGH_DELAY_PROBE_TIME=6, + NET_NEIGH_GC_STALE_TIME=7, + NET_NEIGH_UNRES_QLEN=8, +@@ -500,7 +502,10 @@ + NET_NEIGH_GC_INTERVAL=13, + NET_NEIGH_GC_THRESH1=14, + NET_NEIGH_GC_THRESH2=15, +- NET_NEIGH_GC_THRESH3=16 ++ NET_NEIGH_GC_THRESH3=16, ++ NET_NEIGH_RETRANS_TIME_MS=17, ++ NET_NEIGH_REACHABLE_TIME_MS=18, ++ __NET_NEIGH_MAX + }; + + /* /proc/sys/net/ipx */ +diff -urN linux-2.6.11/include/linux/xfrm.h linux.sinabox/include/linux/xfrm.h +--- linux-2.6.11/include/linux/xfrm.h 2005-03-02 08:38:37.000000000 +0100 ++++ linux.sinabox/include/linux/xfrm.h 2005-03-26 19:02:06.000000000 +0100 +@@ -90,8 +90,12 @@ + { + XFRM_POLICY_IN = 0, + XFRM_POLICY_OUT = 1, ++#ifdef CONFIG_USE_POLICY_FWD + XFRM_POLICY_FWD = 2, + XFRM_POLICY_MAX = 3 ++#else ++ XFRM_POLICY_MAX = 2 ++#endif + }; + + enum +diff -urN linux-2.6.11/include/net/addrconf.h linux.sinabox/include/net/addrconf.h +--- linux-2.6.11/include/net/addrconf.h 2005-03-02 08:38:18.000000000 +0100 ++++ linux.sinabox/include/net/addrconf.h 2005-03-26 19:02:06.000000000 +0100 +@@ -102,6 +102,8 @@ + + extern void addrconf_prefix_rcv(struct net_device *dev, u8 *opt, int len); + ++extern int ipv6_get_hoplimit(struct net_device *dev); ++ + /* + * anycast prototypes (anycast.c) + */ +diff -urN linux-2.6.11/include/net/dst.h linux.sinabox/include/net/dst.h +--- linux-2.6.11/include/net/dst.h 2005-03-02 08:38:38.000000000 +0100 ++++ linux.sinabox/include/net/dst.h 2005-03-26 19:02:06.000000000 +0100 +@@ -125,6 +125,18 @@ + } + + static inline int ++ip6_dst_allfrag(const struct dst_entry *dst) ++{ ++#ifdef CONFIG_IPV6_ALLFRAG ++ int ret = dst_path_metric(dst, RTAX_FEATURES) & RTAX_FEATURE_ALLFRAG; ++ barrier(); ++ return ret; ++#else ++ return 0; ++#endif ++}; ++ ++static inline int + dst_metric_locked(struct dst_entry *dst, int metric) + { + return dst_metric(dst, RTAX_LOCK) & (1<stats.ipv6_statistics, field); \ ++ SNMP_INC_STATS(ipv6_statistics, field); \ ++}) ++#define IP6_INC_STATS_BH(idev, field) ({ \ ++ struct inet6_dev *_idev = (idev); \ ++ if (likely(_idev != NULL)) \ ++ SNMP_INC_STATS_BH((_idev)->stats.ipv6_statistics, field); \ ++ SNMP_INC_STATS_BH(ipv6_statistics, field); \ ++}) ++#define IP6_INC_STATS_USER(idev, field) ({ \ ++ struct inet6_dev *_idev = (idev); \ ++ if (likely(_idev != NULL)) \ ++ SNMP_INC_STATS_USER(_idev->stats.ipv6_statistics, field); \ ++ SNMP_INC_STATS_USER(ipv6_statistics, field); \ ++}) ++#else + #define IP6_INC_STATS(field) SNMP_INC_STATS(ipv6_statistics, field) + #define IP6_INC_STATS_BH(field) SNMP_INC_STATS_BH(ipv6_statistics, field) + #define IP6_INC_STATS_USER(field) SNMP_INC_STATS_USER(ipv6_statistics, field) ++#endif + DECLARE_SNMP_STAT(struct icmpv6_mib, icmpv6_statistics); + #define ICMP6_INC_STATS(idev, field) ({ \ + struct inet6_dev *_idev = (idev); \ +@@ -142,9 +163,30 @@ + SNMP_INC_STATS_OFFSET_BH(icmpv6_statistics, field, _offset); \ + }) + DECLARE_SNMP_STAT(struct udp_mib, udp_stats_in6); ++#if 0 ++#define UDP6_INC_STATS(idev, field) ({ \ ++ struct inet6_dev *_idev = (idev); \ ++ if (likely(_idev != NULL)) \ ++ SNMP_INC_STATS(idev->stats.udp_stats_in6, field); \ ++ SNMP_INC_STATS(udp_stats_in6, field); \ ++}) ++#define UDP6_INC_STATS_BH(idev, field) ({ \ ++ struct inet6_dev *_idev = (idev); \ ++ if (likely(_idev != NULL)) \ ++ SNMP_INC_STATS_BH((_idev)->stats.udp_stats_in6, field); \ ++ SNMP_INC_STATS_BH(udp_stats_in6, field); \ ++}) ++#define UDP6_INC_STATS_USER(idev, field) ({ \ ++ struct inet6_dev *_idev = (idev); \ ++ if (likely(_idev != NULL)) \ ++ SNMP_INC_STATS_USER(_idev->stats.udp_stats_in6, field); \ ++ SNMP_INC_STATS_USER(udp_stats_in6, field); \ ++}) ++#else + #define UDP6_INC_STATS(field) SNMP_INC_STATS(udp_stats_in6, field) + #define UDP6_INC_STATS_BH(field) SNMP_INC_STATS_BH(udp_stats_in6, field) +-#define UDP6_INC_STATS_USER(field) SNMP_INC_STATS_USER(udp_stats_in6, field) ++#define UDP6_INC_STATS_USER(field) SNMP_INC_STATS_USER(udp_stats_in6, field) ++#endif + extern atomic_t inet6_sock_nr; + + int snmp6_register_dev(struct inet6_dev *idev); +@@ -231,7 +273,7 @@ + void (*destructor)(struct sock *)); + + +-extern int ipv6_parse_hopopts(struct sk_buff *skb, int); ++extern int ipv6_parse_hopopts(struct sk_buff **skb, unsigned int *nhoffp); + + extern struct ipv6_txoptions * ipv6_dup_options(struct sock *sk, struct ipv6_txoptions *opt); + +@@ -249,12 +291,28 @@ + char *, + unsigned int, unsigned int); + +- +-extern int ipv6_addr_type(const struct in6_addr *addr); ++/* ++ * Address manipulation functions ++ */ ++extern int __ipv6_addr_type(const struct in6_addr *addr); ++static inline int ipv6_addr_type(const struct in6_addr *addr) ++{ ++ return __ipv6_addr_type(addr) & 0xffff; ++} + + static inline int ipv6_addr_scope(const struct in6_addr *addr) + { +- return ipv6_addr_type(addr) & IPV6_ADDR_SCOPE_MASK; ++ return __ipv6_addr_type(addr) & IPV6_ADDR_SCOPE_MASK; ++} ++ ++static inline int __ipv6_addr_src_scope(int type) ++{ ++ return type == IPV6_ADDR_ANY ? __IPV6_ADDR_SCOPE_INVALID : type>>16; ++} ++ ++static inline int ipv6_addr_src_scope(const struct in6_addr *addr) ++{ ++ return __ipv6_addr_src_scope(__ipv6_addr_type(addr)); + } + + static inline int ipv6_addr_cmp(const struct in6_addr *a1, const struct in6_addr *a2) +@@ -305,6 +363,33 @@ + a1->s6_addr32[3] == a2->s6_addr32[3]); + } + ++/* compare "prefix length" bits of an address */ ++static inline int __ipv6_prefix_equal(const u32 *a1, const u32 *a2, ++ unsigned int prefixlen) ++{ ++ unsigned pdw, pbi; ++ ++ /* check complete u32 in prefix */ ++ pdw = prefixlen >> 5; ++ if (pdw && memcmp(a1, a2, pdw << 2)) ++ return 0; ++ ++ /* check incomplete u32 in prefix */ ++ pbi = prefixlen & 0x1f; ++ if (pbi && ((a1[pdw] ^ a2[pdw]) & htonl((0xffffffff) << (32 - pbi)))) ++ return 0; ++ ++ return 1; ++} ++ ++static inline int ipv6_prefix_equal(const struct in6_addr *a1, ++ const struct in6_addr *a2, ++ unsigned int prefixlen) ++{ ++ return __ipv6_prefix_equal(a1->s6_addr32, a2->s6_addr32, ++ prefixlen); ++} ++ + static inline int ipv6_addr_any(const struct in6_addr *a) + { + return ((a->s6_addr32[0] | a->s6_addr32[1] | +@@ -368,6 +453,7 @@ + extern int ip6_forward(struct sk_buff *skb); + extern int ip6_input(struct sk_buff *skb); + extern int ip6_mc_input(struct sk_buff *skb); ++extern int ip6_mr_input(struct sk_buff *skb); + + /* + * Extension header (options) processing +diff -urN linux-2.6.11/include/net/neighbour.h linux.sinabox/include/net/neighbour.h +--- linux-2.6.11/include/net/neighbour.h 2005-03-02 08:38:32.000000000 +0100 ++++ linux.sinabox/include/net/neighbour.h 2005-03-26 19:02:06.000000000 +0100 +@@ -54,6 +54,8 @@ + #include + #include + ++#include ++ + #include + #include + +@@ -158,7 +160,8 @@ + struct pneigh_entry + { + struct pneigh_entry *next; +- struct net_device *dev; ++ struct net_device *dev; ++ struct neigh_table *tbl; + u8 key[0]; + }; + +@@ -205,6 +208,27 @@ + #endif + }; + ++struct neigh_notifier_parms { ++ void (*link_notifier)(void *); ++ void *link_notifier_data; ++}; ++ ++static __inline__ char * neigh_state(int state) ++{ ++ switch (state) { ++ case NUD_NONE: return "NONE"; ++ case NUD_INCOMPLETE: return "INCOMPLETE"; ++ case NUD_REACHABLE: return "REACHABLE"; ++ case NUD_STALE: return "STALE"; ++ case NUD_DELAY: return "DELAY"; ++ case NUD_PROBE: return "PROBE"; ++ case NUD_FAILED: return "FAILED"; ++ case NUD_NOARP: return "NOARP"; ++ case NUD_PERMANENT: return "PERMANENT"; ++ default: return "???"; ++ } ++} ++ + /* flags for neigh_update() */ + #define NEIGH_UPDATE_F_OVERRIDE 0x00000001 + #define NEIGH_UPDATE_F_WEAK_OVERRIDE 0x00000002 +@@ -274,7 +298,8 @@ + struct neigh_parms *p, + int p_id, int pdev_id, + char *p_name, +- proc_handler *proc_handler); ++ proc_handler *proc_handler, ++ void (*notifier)(void *)); + extern void neigh_sysctl_unregister(struct neigh_parms *p); + + static inline void __neigh_parms_put(struct neigh_parms *parms) +@@ -300,18 +325,35 @@ + + static inline void neigh_release(struct neighbour *neigh) + { ++#ifdef CONFIG_IPV6_NDISC_DEBUG ++ printk(KERN_DEBUG "%s(neigh=%p): refcnt=%d\n", ++ __FUNCTION__, neigh, atomic_read(&neigh->refcnt)-1); ++#endif + if (atomic_dec_and_test(&neigh->refcnt)) + neigh_destroy(neigh); + } + + static inline struct neighbour * neigh_clone(struct neighbour *neigh) + { ++#ifdef CONFIG_IPV6_NDISC_DEBUG ++ printk(KERN_DEBUG "%s(neigh=%p): refcnt=%d\n", ++ __FUNCTION__, neigh, neigh ? atomic_read(&neigh->refcnt)+1 : 0); ++#endif + if (neigh) + atomic_inc(&neigh->refcnt); + return neigh; + } + ++#ifdef CONFIG_IPV6_NDISC_DEBUG ++#define neigh_hold(n) ({ \ ++ struct neighbour *_n = (n); \ ++ printk(KERN_DEBUG "%s(neigh=%p): refcnt=%d\n", \ ++ __FUNCTION__, _n, atomic_read(&_n->refcnt)+1); \ ++ atomic_inc(&_n->refcnt); \ ++}) ++#else + #define neigh_hold(n) atomic_inc(&(n)->refcnt) ++#endif + + static inline void neigh_confirm(struct neighbour *neigh) + { +@@ -331,6 +373,11 @@ + + static inline int neigh_event_send(struct neighbour *neigh, struct sk_buff *skb) + { ++#ifdef CONFIG_IPV6_NDISC_DEBUG ++ printk(KERN_DEBUG ++ "%s(neigh=%p, skb=%p): %s, refcnt=%d\n", ++ __FUNCTION__, neigh, skb, neigh_state(neigh->nud_state), atomic_read(&neigh->refcnt)); ++#endif + neigh->used = jiffies; + if (!(neigh->nud_state&(NUD_CONNECTED|NUD_DELAY|NUD_PROBE))) + return __neigh_event_send(neigh, skb); +diff -urN linux-2.6.11/include/net/xfrm.h linux.sinabox/include/net/xfrm.h +--- linux-2.6.11/include/net/xfrm.h 2005-03-02 08:38:25.000000000 +0100 ++++ linux.sinabox/include/net/xfrm.h 2005-03-26 19:02:06.000000000 +0100 +@@ -471,8 +471,12 @@ + static inline int + __xfrm6_selector_match(struct xfrm_selector *sel, struct flowi *fl) + { +- return addr_match(&fl->fl6_dst, &sel->daddr, sel->prefixlen_d) && +- addr_match(&fl->fl6_src, &sel->saddr, sel->prefixlen_s) && ++ return __ipv6_prefix_equal(fl->fl6_dst.s6_addr32, ++ sel->daddr.a6, ++ sel->prefixlen_d) && ++ __ipv6_prefix_equal(fl->fl6_src.s6_addr32, ++ sel->saddr.a6, ++ sel->prefixlen_s) && + !((xfrm_flowi_dport(fl) ^ sel->dport) & sel->dport_mask) && + !((xfrm_flowi_sport(fl) ^ sel->sport) & sel->sport_mask) && + (fl->proto == sel->proto || !sel->proto) && +@@ -863,7 +867,7 @@ + extern void km_policy_expired(struct xfrm_policy *pol, int dir, int hard); + + extern void xfrm_input_init(void); +-extern int xfrm_parse_spi(struct sk_buff *skb, u8 nexthdr, u32 *spi, u32 *seq); ++extern int xfrm_parse_spi(struct sk_buff *skb, u8 nexthdr, u32 *spi); + + extern void xfrm_probe_algs(void); + extern int xfrm_count_auth_supported(void); +diff -urN linux-2.6.11/include/video/tgafb.h linux.sinabox/include/video/tgafb.h +--- linux-2.6.11/include/video/tgafb.h 2005-03-02 08:38:19.000000000 +0100 ++++ linux.sinabox/include/video/tgafb.h 2005-03-26 19:02:06.000000000 +0100 +@@ -47,7 +47,6 @@ + #define TGA_VALID_REG 0x0070 + #define TGA_CURSOR_XY_REG 0x0074 + #define TGA_INTR_STAT_REG 0x007c +-#define TGA_DATA_REG 0x0080 + #define TGA_RAMDAC_SETUP_REG 0x00c0 + #define TGA_BLOCK_COLOR0_REG 0x0140 + #define TGA_BLOCK_COLOR1_REG 0x0144 +diff -urN linux-2.6.11/kernel/signal.c linux.sinabox/kernel/signal.c +--- linux-2.6.11/kernel/signal.c 2005-03-02 08:38:07.000000000 +0100 ++++ linux.sinabox/kernel/signal.c 2005-03-19 07:34:55.000000000 +0100 +@@ -1728,6 +1728,7 @@ + * with another processor delivering a stop signal, + * then the SIGCONT that wakes us up should clear it. + */ ++ read_unlock(&tasklist_lock); + return 0; + } + +diff -urN linux-2.6.11/Makefile linux.sinabox/Makefile +--- linux-2.6.11/Makefile 2005-03-02 08:38:13.000000000 +0100 ++++ linux.sinabox/Makefile 2005-03-27 04:28:15.000000000 +0200 +@@ -1,7 +1,7 @@ + VERSION = 2 + PATCHLEVEL = 6 + SUBLEVEL = 11 +-EXTRAVERSION = ++EXTRAVERSION = .5 + NAME=Woozy Numbat + + # *DOCUMENTATION* +diff -urN linux-2.6.11/net/core/neighbour.c linux.sinabox/net/core/neighbour.c +--- linux-2.6.11/net/core/neighbour.c 2005-03-02 08:37:47.000000000 +0100 ++++ linux.sinabox/net/core/neighbour.c 2005-03-26 19:02:06.000000000 +0100 +@@ -33,13 +33,18 @@ + #include + #include + ++#ifdef CONFIG_IPV6_NDISC_DEBUG ++#define NEIGH_DEBUG 3 ++#else + #define NEIGH_DEBUG 1 ++#endif + + #define NEIGH_PRINTK(x...) printk(x) + #define NEIGH_NOPRINTK(x...) do { ; } while(0) + #define NEIGH_PRINTK0 NEIGH_PRINTK + #define NEIGH_PRINTK1 NEIGH_NOPRINTK + #define NEIGH_PRINTK2 NEIGH_NOPRINTK ++#define NEIGH_PRINTK3 NEIGH_NOPRINTK + + #if NEIGH_DEBUG >= 1 + #undef NEIGH_PRINTK1 +@@ -49,6 +54,10 @@ + #undef NEIGH_PRINTK2 + #define NEIGH_PRINTK2 NEIGH_PRINTK + #endif ++#if NEIGH_DEBUG >= 3 ++#undef NEIGH_PRINTK3 ++#define NEIGH_PRINTK3 NEIGH_PRINTK ++#endif + + #define PNEIGH_HASHMASK 0xF + +@@ -118,6 +127,10 @@ + int shrunk = 0; + int i; + ++ NEIGH_PRINTK3(KERN_DEBUG ++ "%s(tbl=%p)\n", ++ __FUNCTION__, tbl); ++ + NEIGH_CACHE_STAT_INC(tbl, forced_gc_runs); + + write_lock_bh(&tbl->lock); +@@ -156,9 +169,21 @@ + { + if ((n->nud_state & NUD_IN_TIMER) && + del_timer(&n->timer)) { ++ ++ NEIGH_PRINTK3(KERN_DEBUG ++ "%s(n=%p): %s, refcnt=%d\n", ++ __FUNCTION__, ++ n, neigh_state(n->nud_state), atomic_read(&n->refcnt) -1); ++ + neigh_release(n); + return 1; + } ++ ++ NEIGH_PRINTK3(KERN_DEBUG ++ "%s(n=%p): %s, refcnt=%d\n", ++ __FUNCTION__, ++ n, neigh_state(n->nud_state), atomic_read(&n->refcnt)); ++ + return 0; + } + +@@ -203,6 +228,11 @@ + { + int i; + ++ NEIGH_PRINTK3(KERN_DEBUG ++ "%s(tbl=%p, dev=%p)\n", ++ __FUNCTION__, ++ tbl, dev); ++ + write_lock_bh(&tbl->lock); + + for (i = 0; i <= tbl->hash_mask; i++) { +@@ -255,18 +285,30 @@ + unsigned long now = jiffies; + int entries; + ++ NEIGH_PRINTK3(KERN_DEBUG ++ "%s(tbl=%p)\n", ++ __FUNCTION__, tbl); ++ + entries = atomic_inc_return(&tbl->entries) - 1; + if (entries >= tbl->gc_thresh3 || + (entries >= tbl->gc_thresh2 && + time_after(now, tbl->last_flush + 5 * HZ))) { + if (!neigh_forced_gc(tbl) && +- entries >= tbl->gc_thresh3) ++ entries > tbl->gc_thresh3) { ++ NEIGH_PRINTK3(KERN_DEBUG ++ "%s(): failed to shrink table\n", ++ __FUNCTINO__); + goto out_entries; ++ } + } + + n = kmem_cache_alloc(tbl->kmem_cachep, SLAB_ATOMIC); +- if (!n) ++ if (!n) { ++ NEIGH_PRINTK3(KERN_DEBUG ++ "%s(): failed to allocate memory\n", ++ __FUNCTION__); + goto out_entries; ++ } + + memset(n, 0, tbl->entry_size); + +@@ -364,11 +406,20 @@ + + NEIGH_CACHE_STAT_INC(tbl, lookups); + ++ NEIGH_PRINTK3(KERN_DEBUG ++ "%s(tbl=%p, pkey=%p, dev=%p)\n", ++ __FUNCTION__, ++ tbl, pkey, dev); ++ + read_lock_bh(&tbl->lock); + for (n = tbl->hash_buckets[hash_val]; n; n = n->next) { + if (dev == n->dev && !memcmp(n->primary_key, pkey, key_len)) { + neigh_hold(n); + NEIGH_CACHE_STAT_INC(tbl, hits); ++ NEIGH_PRINTK3(KERN_DEBUG ++ "%s() => %p (state=%s, refcnt=%d)\n", ++ __FUNCTION__, ++ n, neigh_state(n->nud_state), atomic_read(&n->refcnt)); + break; + } + } +@@ -384,11 +435,20 @@ + + NEIGH_CACHE_STAT_INC(tbl, lookups); + ++ NEIGH_PRINTK3(KERN_DEBUG ++ "%s(tbl=%p, pkey=%p)\n", ++ __FUNCTION__, ++ tbl, pkey); ++ + read_lock_bh(&tbl->lock); + for (n = tbl->hash_buckets[hash_val]; n; n = n->next) { + if (!memcmp(n->primary_key, pkey, key_len)) { + neigh_hold(n); + NEIGH_CACHE_STAT_INC(tbl, hits); ++ NEIGH_PRINTK3(KERN_DEBUG ++ "%s() => %p (state=%s, refcnt=%d)\n", ++ __FUNCTION__, ++ n, neigh_state(n->nud_state), atomic_read(&n->refcnt)); + break; + } + } +@@ -402,7 +462,14 @@ + u32 hash_val; + int key_len = tbl->key_len; + int error; +- struct neighbour *n1, *rc, *n = neigh_alloc(tbl); ++ struct neighbour *n1, *rc, *n; ++ ++ NEIGH_PRINTK3(KERN_DEBUG ++ "%s(tbl=%p, pkey=%p, dev=%p)\n", ++ __FUNCTION__, ++ tbl, pkey, dev); ++ ++ n = neigh_alloc(tbl); + + if (!n) { + rc = ERR_PTR(-ENOBUFS); +@@ -453,6 +520,10 @@ + n->dead = 0; + neigh_hold(n); + write_unlock_bh(&tbl->lock); ++ NEIGH_PRINTK3(KERN_DEBUG ++ "%s(): => %p (state=%s, refnt=%d)\n", ++ __FUNCTION__, ++ n, neigh_state(n->nud_state), atomic_read(&n->refcnt)); + NEIGH_PRINTK2("neigh %p is created.\n", n); + rc = n; + out: +@@ -496,6 +567,7 @@ + + memcpy(n->key, pkey, key_len); + n->dev = dev; ++ n->tbl = tbl; + if (dev) + dev_hold(dev); + +@@ -578,6 +650,11 @@ + { + struct hh_cache *hh; + ++ NEIGH_PRINTK3(KERN_DEBUG ++ "%s(neigh=%p): %s, refcnt=%d, dead=%d\n", ++ __FUNCTION__, ++ neigh, neigh_state(neigh->nud_state), atomic_read(&neigh->refcnt), neigh->dead); ++ + NEIGH_CACHE_STAT_INC(neigh->tbl, destroys); + + if (!neigh->dead) { +@@ -623,6 +700,10 @@ + { + struct hh_cache *hh; + ++ NEIGH_PRINTK3(KERN_DEBUG ++ "%s(neigh=%p): %s, refcnt=%d\n", ++ __FUNCTION__, ++ neigh, neigh_state(neigh->nud_state), atomic_read(&neigh->refcnt)); + NEIGH_PRINTK2("neigh %p is suspected.\n", neigh); + + neigh->output = neigh->ops->output; +@@ -640,6 +721,10 @@ + { + struct hh_cache *hh; + ++ NEIGH_PRINTK3(KERN_DEBUG ++ "%s(neigh=%p): %s, refcnt=%d\n", ++ __FUNCTION__, ++ neigh, neigh_state(neigh->nud_state), atomic_read(&neigh->refcnt)); + NEIGH_PRINTK2("neigh %p is connected.\n", neigh); + + neigh->output = neigh->ops->connected_output; +@@ -654,6 +739,11 @@ + struct neighbour *n, **np; + unsigned long expire, now = jiffies; + ++ NEIGH_PRINTK3(KERN_DEBUG ++ "%s(arg=%p)\n", ++ __FUNCTION__, ++ tbl); ++ + NEIGH_CACHE_STAT_INC(tbl, periodic_gc_runs); + + write_lock(&tbl->lock); +@@ -678,6 +768,11 @@ + + write_lock(&n->lock); + ++ NEIGH_PRINTK3(KERN_DEBUG ++ "%s(): - %p, state=%s, refcnt=%d\n", ++ __FUNCTION__, ++ n, neigh_state(n->nud_state), atomic_read(&n->refcnt)); ++ + state = n->nud_state; + if (state & (NUD_PERMANENT | NUD_IN_TIMER)) { + write_unlock(&n->lock); +@@ -733,17 +828,28 @@ + struct neighbour *neigh = (struct neighbour *)arg; + unsigned state; + int notify = 0; ++ int refcnt; + + write_lock(&neigh->lock); +- + state = neigh->nud_state; ++ ++ NEIGH_PRINTK3(KERN_DEBUG ++ "%s(arg=%p): %s, refcnt=%d\n", ++ __FUNCTION__, ++ neigh, neigh_state(neigh->nud_state), atomic_read(&neigh->refcnt)); ++ + now = jiffies; + next = now + HZ; + ++ + if (!(state & NUD_IN_TIMER)) { + #ifndef CONFIG_SMP + printk(KERN_WARNING "neigh: timer & !nud_in_timer\n"); + #endif ++ refcnt = atomic_read(&neigh->refcnt) - 1; ++ NEIGH_PRINTK3(KERN_DEBUG ++ "%s(): => state=%s, refcnt=%d\n", ++ __FUNCTION__, neigh_state(state), refcnt); + goto out; + } + +@@ -788,6 +894,7 @@ + neigh->nud_state = NUD_FAILED; + notify = 1; + NEIGH_CACHE_STAT_INC(neigh->tbl, res_failed); ++ + NEIGH_PRINTK2("neigh %p is failed.\n", neigh); + + /* It is very thin place. report_unreachable is very complicated +@@ -840,6 +947,11 @@ + + write_lock_bh(&neigh->lock); + ++ NEIGH_PRINTK3(KERN_DEBUG ++ "%s(neigh=%p, skb=%p): %s\n", ++ __FUNCTION__, ++ neigh, skb, neigh_state(neigh->nud_state)); ++ + rc = 0; + if (neigh->nud_state & (NUD_CONNECTED | NUD_DELAY | NUD_PROBE)) + goto out_unlock_bh; +@@ -936,17 +1048,33 @@ + struct net_device *dev; + int update_isrouter = 0; + ++ NEIGH_PRINTK3(KERN_DEBUG ++ "%s(neigh=%p, lladdr=%p, new=%u, flags=%08x): %s\n", ++ __FUNCTION__, ++ neigh, lladdr, new, flags, neigh_state(neigh->nud_state)); ++ ++ if (!neigh) { ++ NEIGH_PRINTK1(KERN_WARNING "neigh_update(): neigh==NULL\n"); ++ return -EINVAL; ++ } ++ + write_lock_bh(&neigh->lock); + + dev = neigh->dev; + old = neigh->nud_state; + err = -EPERM; + ++ if (!dev) { ++ NEIGH_PRINTK1(KERN_WARNING "neigh_update(): neigh->dev==NULL\n"); ++ return -EINVAL; ++ } ++ + if (!(flags & NEIGH_UPDATE_F_ADMIN) && + (old & (NUD_NOARP | NUD_PERMANENT))) + goto out; + + if (!(new & NUD_VALID)) { ++ /* NONE,INCOMPLETE,FAILED */ + neigh_del_timer(neigh); + if (old & NUD_CONNECTED) + neigh_suspect(neigh); +@@ -1021,11 +1149,11 @@ + } + + if (lladdr != neigh->ha) { ++ neigh->updated = jiffies; + memcpy(&neigh->ha, lladdr, dev->addr_len); + neigh_update_hhs(neigh); + if (!(new & NUD_CONNECTED)) +- neigh->confirmed = jiffies - +- (neigh->parms->base_reachable_time << 1); ++ neigh->confirmed = jiffies - (neigh->parms->base_reachable_time<<1); + #ifdef CONFIG_ARPD + notify = 1; + #endif +@@ -1040,7 +1168,6 @@ + struct sk_buff *skb; + + /* Again: avoid dead loop if something went wrong */ +- + while (neigh->nud_state & NUD_VALID && + (skb = __skb_dequeue(&neigh->arp_queue)) != NULL) { + struct neighbour *n1 = neigh; +@@ -1071,8 +1198,15 @@ + u8 *lladdr, void *saddr, + struct net_device *dev) + { +- struct neighbour *neigh = __neigh_lookup(tbl, saddr, dev, +- lladdr || !dev->addr_len); ++ struct neighbour *neigh; ++ ++ NEIGH_PRINTK3(KERN_DEBUG ++ "%s(tbl=%p, lladdr=%p, saddr=%p, dev=%p)\n", ++ __FUNCTION__, ++ tbl, lladdr, saddr, dev); ++ ++ neigh = __neigh_lookup(tbl, saddr, dev, ++ lladdr || !dev->addr_len); + if (neigh) + neigh_update(neigh, lladdr, NUD_STALE, + NEIGH_UPDATE_F_OVERRIDE); +@@ -1123,6 +1257,11 @@ + { + struct net_device *dev = skb->dev; + ++ NEIGH_PRINTK3(KERN_DEBUG ++ "%s(skb=%p)\n", ++ __FUNCTION__, ++ skb); ++ + __skb_pull(skb, skb->nh.raw - skb->data); + + if (dev->hard_header && +@@ -1142,6 +1281,11 @@ + struct neighbour *neigh; + int rc = 0; + ++ NEIGH_PRINTK3(KERN_DEBUG ++ "%s(skb=%p)\n", ++ __FUNCTION__, ++ skb); ++ + if (!dst || !(neigh = dst->neighbour)) + goto discard; + +@@ -1188,6 +1332,11 @@ + struct neighbour *neigh = dst->neighbour; + struct net_device *dev = neigh->dev; + ++ NEIGH_PRINTK3(KERN_DEBUG ++ "%s(skb=%p)\n", ++ __FUNCTION__, ++ skb); ++ + __skb_pull(skb, skb->nh.raw - skb->data); + + read_lock_bh(&neigh->lock); +@@ -1424,6 +1573,11 @@ + struct net_device *dev = NULL; + int err = -ENODEV; + ++ NEIGH_PRINTK3(KERN_DEBUG ++ "%s(skb=%p, nlh=%p, arg=%p)\n", ++ __FUNCTION__, ++ skb, nlh, arg); ++ + if (ndm->ndm_ifindex && + (dev = dev_get_by_index(ndm->ndm_ifindex)) == NULL) + goto out; +@@ -1476,6 +1630,11 @@ + struct net_device *dev = NULL; + int err = -ENODEV; + ++ NEIGH_PRINTK3(KERN_DEBUG ++ "%s(skb=%p, nlh=%p, arg=%p)\n", ++ __FUNCTION__, ++ skb, nlh, arg); ++ + if (ndm->ndm_ifindex && + (dev = dev_get_by_index(ndm->ndm_ifindex)) == NULL) + goto out; +@@ -1544,6 +1703,40 @@ + return err; + } + ++/* ++ * XXX: based on neigh_fill_info() ++ */ ++static int pneigh_fill_info(struct sk_buff *skb, struct pneigh_entry *pn, ++ u32 pid, u32 seq, int event) ++{ ++ int locked = 0; ++ unsigned char *b = skb->tail; ++ struct nlmsghdr *nlh = NLMSG_PUT(skb, pid, seq, event, ++ sizeof(struct ndmsg)); ++ struct ndmsg *ndm = NLMSG_DATA(nlh); ++ ++ read_lock_bh(&pn->tbl->lock); ++ locked = 1; ++ ndm->ndm_family = pn->tbl->family; ++ ndm->ndm_flags = NTF_PROXY; ++ ndm->ndm_type = 0; ++ ndm->ndm_ifindex = pn->dev->ifindex; ++ RTA_PUT(skb, NDA_DST, pn->tbl->key_len, pn->key); ++ read_unlock_bh(&pn->tbl->lock); ++ locked = 0; ++ ndm->ndm_state = 0; ++ ++ nlh->nlmsg_len = skb->tail - b; ++ return skb->len; ++ ++nlmsg_failure: ++rtattr_failure: ++ if (locked) ++ read_unlock_bh(&pn->tbl->lock); ++ ++ skb_trim(skb, b - skb->data); ++ return -1; ++} + + static int neigh_fill_info(struct sk_buff *skb, struct neighbour *n, + u32 pid, u32 seq, int event) +@@ -1585,6 +1778,42 @@ + return -1; + } + ++/* ++ * XXX: based on neigh_dump_table() ++ */ ++static int pneigh_dump_table(struct neigh_table *tbl, struct sk_buff *skb, ++ struct netlink_callback *cb) ++{ ++ struct pneigh_entry *pn; ++ int rc, h, s_h = cb->args[1]; ++ int idx, s_idx = idx = cb->args[2]; ++ ++ for (h = 0; h <= PNEIGH_HASHMASK; h++) { ++ if (h < s_h) ++ continue; ++ if (h > s_h) ++ s_idx = 0; ++ read_lock_bh(&tbl->lock); ++ for (pn = tbl->phash_buckets[h], idx = 0; pn; pn = pn->next, idx++) { ++ if (idx < s_idx) ++ continue; ++ if (pneigh_fill_info(skb, pn, NETLINK_CB(cb->skb).pid, ++ cb->nlh->nlmsg_seq, ++ RTM_NEWNEIGH) <= 0) { ++ read_unlock_bh(&tbl->lock); ++ rc = -1; ++ goto out; ++ } ++ } ++ read_unlock_bh(&tbl->lock); ++ } ++ ++ rc = skb->len; ++out: ++ cb->args[1] = h; ++ cb->args[2] = idx; ++ return rc; ++} + + static int neigh_dump_table(struct neigh_table *tbl, struct sk_buff *skb, + struct netlink_callback *cb) +@@ -1623,10 +1852,15 @@ + { + struct neigh_table *tbl; + int t, family, s_t; ++ long a1, a2, pa1, pa2; + + read_lock(&neigh_tbl_lock); + family = ((struct rtgenmsg *)NLMSG_DATA(cb->nlh))->rtgen_family; + s_t = cb->args[0]; ++ a1 = cb->args[1]; ++ a2 = cb->args[2]; ++ pa1 = cb->args[1]; ++ pa2 = cb->args[2]; + + for (tbl = neigh_tables, t = 0; tbl; tbl = tbl->next, t++) { + if (t < s_t || (family && tbl->family != family)) +@@ -1634,12 +1868,28 @@ + if (t > s_t) + memset(&cb->args[1], 0, sizeof(cb->args) - + sizeof(cb->args[0])); ++ cb->args[1] = a1; ++ cb->args[2] = a2; + if (neigh_dump_table(tbl, skb, cb) < 0) + break; ++ a1 = cb->args[1]; ++ a2 = cb->args[2]; ++ ++ cb->args[1] = pa1; ++ cb->args[2] = pa2; ++ if (pneigh_dump_table(tbl, skb, cb) < 0) ++ break; ++ pa1 = cb->args[1]; ++ pa2 = cb->args[2]; + } + read_unlock(&neigh_tbl_lock); + + cb->args[0] = t; ++ /* ++ * XXX: Fix me! currently only neigh's status is reported. ++ */ ++ cb->args[1] = a1; ++ cb->args[2] = a2; + return skb->len; + } + +@@ -2044,14 +2294,80 @@ + #endif /* CONFIG_ARPD */ + + #ifdef CONFIG_SYSCTL ++static int ++ndisc_proc_dointvec_ms_jiffies(struct ctl_table *ctl, ++ int write, ++ struct file *filp, ++ void __user *buffer, size_t *lenp, ++ loff_t *ppos) ++{ ++ struct neigh_notifier_parms *np = ctl->extra1; ++ int ret = proc_dointvec_ms_jiffies(ctl, write, filp, buffer, lenp, ppos); ++ ++ if (write && np && np->link_notifier) ++ (np->link_notifier)(np->link_notifier_data); ++ return ret; ++} ++ ++static int ++ndisc_proc_rtime_dointvec_ms_jiffies(struct ctl_table *ctl, ++ int write, ++ struct file *filp, ++ void __user *buffer, size_t *lenp, ++ loff_t *ppos) ++{ ++ struct neigh_notifier_parms *np = ctl->extra1; ++ int ret = proc_dointvec_ms_jiffies(ctl, write, filp, buffer, lenp, ppos); ++ ++ if (write) { ++ if (ctl->extra2) ++ *((unsigned int *)ctl->extra2) = neigh_rand_reach_time(*(unsigned int *)ctl->data); ++ if (np && np->link_notifier) ++ (np->link_notifier)(np->link_notifier_data); ++ } ++ return ret; ++} ++ ++static int ++ndisc_sysctl_ms_jiffies(ctl_table *ctl, int __user *name, int nlen, ++ void __user *oldval, size_t __user *oldlenp, ++ void __user *newval, size_t newlen, void **context) ++{ ++ struct neigh_notifier_parms *np = ctl->extra1; ++ int ret = sysctl_ms_jiffies(ctl, name, nlen, ++ oldval, oldlenp, newval, newlen, ++ context); ++ if (newval && newlen && ret > 0 && np && np->link_notifier) ++ (np->link_notifier)(np->link_notifier_data); ++ return ret; ++} ++ ++static int ++ndisc_rtime_sysctl_ms_jiffies(ctl_table *ctl, int __user *name, int nlen, ++ void __user *oldval, size_t __user *oldlenp, ++ void __user *newval, size_t newlen, void **context) ++{ ++ struct neigh_notifier_parms *np = ctl->extra1; ++ int ret = sysctl_ms_jiffies(ctl, name, nlen, ++ oldval, oldlenp, newval, newlen, ++ context); ++ if (newval && newlen && ret > 0 && np && np->link_notifier) { ++ if (ctl->extra2) ++ *((unsigned int *)ctl->extra2) = neigh_rand_reach_time(*(unsigned int *)ctl->data); ++ if (np && np->link_notifier) ++ (np->link_notifier)(np->link_notifier_data); ++ } ++ return ret; ++} + + static struct neigh_sysctl_table { + struct ctl_table_header *sysctl_header; +- ctl_table neigh_vars[17]; ++ ctl_table neigh_vars[__NET_NEIGH_MAX]; + ctl_table neigh_dev[2]; + ctl_table neigh_neigh_dir[2]; + ctl_table neigh_proto_dir[2]; + ctl_table neigh_root_dir[2]; ++ struct neigh_notifier_parms notifier; + } neigh_sysctl_template = { + .neigh_vars = { + { +@@ -2170,6 +2486,23 @@ + .mode = 0644, + .proc_handler = &proc_dointvec, + }, ++ { ++ .ctl_name = NET_NEIGH_RETRANS_TIME_MS, ++ .procname = "retrans_time_ms", ++ .maxlen = sizeof(int), ++ .mode = 0644, ++ .proc_handler = &ndisc_proc_dointvec_ms_jiffies, ++ .strategy = &ndisc_sysctl_ms_jiffies, ++ }, ++ { ++ .ctl_name = NET_NEIGH_REACHABLE_TIME_MS, ++ .procname = "base_reachable_time_ms", ++ .maxlen = sizeof(int), ++ .mode = 0644, ++ .proc_handler = &ndisc_proc_rtime_dointvec_ms_jiffies, ++ .strategy = &ndisc_rtime_sysctl_ms_jiffies, ++ }, ++ + }, + .neigh_dev = { + { +@@ -2200,7 +2533,8 @@ + + int neigh_sysctl_register(struct net_device *dev, struct neigh_parms *p, + int p_id, int pdev_id, char *p_name, +- proc_handler *handler) ++ proc_handler *handler, ++ void (*neigh_notifier)(void *)) + { + struct neigh_sysctl_table *t = kmalloc(sizeof(*t), GFP_KERNEL); + const char *dev_name_source = NULL; +@@ -2210,6 +2544,10 @@ + if (!t) + return -ENOBUFS; + memcpy(t, &neigh_sysctl_template, sizeof(*t)); ++ ++ t->notifier.link_notifier = neigh_notifier; ++ t->notifier.link_notifier_data = dev; ++ + t->neigh_vars[0].data = &p->mcast_probes; + t->neigh_vars[1].data = &p->ucast_probes; + t->neigh_vars[2].data = &p->app_probes; +@@ -2231,7 +2569,10 @@ + if (dev) { + dev_name_source = dev->name; + t->neigh_dev[0].ctl_name = dev->ifindex; +- memset(&t->neigh_vars[12], 0, sizeof(ctl_table)); ++ t->neigh_vars[12].procname = NULL; ++ t->neigh_vars[13].procname = NULL; ++ t->neigh_vars[14].procname = NULL; ++ t->neigh_vars[15].procname = NULL; + } else { + t->neigh_vars[12].data = (int *)(p + 1); + t->neigh_vars[13].data = (int *)(p + 1) + 1; +@@ -2239,6 +2580,13 @@ + t->neigh_vars[15].data = (int *)(p + 1) + 3; + } + ++ t->neigh_vars[16].data = &p->retrans_time; ++ t->neigh_vars[16].extra1 = &t->notifier; ++ ++ t->neigh_vars[17].data = &p->base_reachable_time; ++ t->neigh_vars[17].extra1 = &t->notifier; ++ t->neigh_vars[17].extra2 = &p->reachable_time; ++ + dev_name = net_sysctl_strdup(dev_name_source); + if (!dev_name) { + err = -ENOBUFS; +@@ -2313,6 +2661,7 @@ + + #ifdef CONFIG_ARPD + EXPORT_SYMBOL(neigh_app_ns); ++EXPORT_SYMBOL(neigh_app_notify); + #endif + #ifdef CONFIG_SYSCTL + EXPORT_SYMBOL(neigh_sysctl_register); +diff -urN linux-2.6.11/net/core/netfilter.c linux.sinabox/net/core/netfilter.c +--- linux-2.6.11/net/core/netfilter.c 2005-03-02 08:38:08.000000000 +0100 ++++ linux.sinabox/net/core/netfilter.c 2005-03-26 19:02:06.000000000 +0100 +@@ -806,6 +806,9 @@ + tracking in use: without this, connection may not be in hash table, and hence + manufactured ICMP or RST packets will not be associated with it. */ + void (*ip_ct_attach)(struct sk_buff *, struct sk_buff *); ++#if defined(CONFIG_IPV6) || defined(CONFIG_IPV6_MODULE) ++void (*ip6_ct_attach)(struct sk_buff *, struct sk_buff *); ++#endif + + void nf_ct_attach(struct sk_buff *new, struct sk_buff *skb) + { +@@ -828,6 +831,9 @@ + } + + EXPORT_SYMBOL(ip_ct_attach); ++#if defined(CONFIG_IPV6) || defined(CONFIG_IPV6_MODULE) ++EXPORT_SYMBOL(ip6_ct_attach); ++#endif + EXPORT_SYMBOL(nf_ct_attach); + EXPORT_SYMBOL(nf_getsockopt); + EXPORT_SYMBOL(nf_hook_slow); +diff -urN linux-2.6.11/net/ipv4/ah4.c linux.sinabox/net/ipv4/ah4.c +--- linux-2.6.11/net/ipv4/ah4.c 2005-03-02 08:38:25.000000000 +0100 ++++ linux.sinabox/net/ipv4/ah4.c 2005-03-26 19:02:06.000000000 +0100 +@@ -128,6 +128,8 @@ + goto out; + + ah = (struct ip_auth_hdr*)skb->data; ++ if (x->props.replay_window && xfrm_replay_check(x, ah->seq_no)) ++ goto out; + ahp = x->data; + ah_hlen = (ah->hdrlen + 2) << 2; + +@@ -171,6 +173,8 @@ + goto out; + } + } ++ if (x->props.replay_window) ++ xfrm_replay_advance(x, ah->seq_no); + ((struct iphdr*)work_buf)->protocol = ah->nexthdr; + skb->nh.raw = skb_pull(skb, ah_hlen); + memcpy(skb->nh.raw, work_buf, iph->ihl*4); +diff -urN linux-2.6.11/net/ipv4/arp.c linux.sinabox/net/ipv4/arp.c +--- linux-2.6.11/net/ipv4/arp.c 2005-03-02 08:38:25.000000000 +0100 ++++ linux.sinabox/net/ipv4/arp.c 2005-03-26 19:02:06.000000000 +0100 +@@ -1243,7 +1243,7 @@ + arp_proc_init(); + #ifdef CONFIG_SYSCTL + neigh_sysctl_register(NULL, &arp_tbl.parms, NET_IPV4, +- NET_IPV4_NEIGH, "ipv4", NULL); ++ NET_IPV4_NEIGH, "ipv4", NULL, NULL); + #endif + register_netdevice_notifier(&arp_netdev_notifier); + } +diff -urN linux-2.6.11/net/ipv4/devinet.c linux.sinabox/net/ipv4/devinet.c +--- linux-2.6.11/net/ipv4/devinet.c 2005-03-02 08:37:50.000000000 +0100 ++++ linux.sinabox/net/ipv4/devinet.c 2005-03-26 19:02:06.000000000 +0100 +@@ -153,7 +153,7 @@ + dev_hold(dev); + #ifdef CONFIG_SYSCTL + neigh_sysctl_register(dev, in_dev->arp_parms, NET_IPV4, +- NET_IPV4_NEIGH, "ipv4", NULL); ++ NET_IPV4_NEIGH, "ipv4", NULL, NULL); + #endif + + /* Account for reference dev->ip_ptr */ +@@ -992,7 +992,7 @@ + devinet_sysctl_unregister(&in_dev->cnf); + neigh_sysctl_unregister(in_dev->arp_parms); + neigh_sysctl_register(dev, in_dev->arp_parms, NET_IPV4, +- NET_IPV4_NEIGH, "ipv4", NULL); ++ NET_IPV4_NEIGH, "ipv4", NULL, NULL); + devinet_sysctl_register(in_dev, &in_dev->cnf); + #endif + break; +diff -urN linux-2.6.11/net/ipv4/esp4.c linux.sinabox/net/ipv4/esp4.c +--- linux-2.6.11/net/ipv4/esp4.c 2005-03-02 08:38:10.000000000 +0100 ++++ linux.sinabox/net/ipv4/esp4.c 2005-03-26 19:02:06.000000000 +0100 +@@ -153,6 +153,7 @@ + + if (!pskb_may_pull(skb, sizeof(struct ip_esp_hdr))) + goto out; ++ esph = (struct ip_esp_hdr*)skb->data; + + if (elen <= 0 || (elen & (blksize-1))) + goto out; +@@ -161,7 +162,8 @@ + if (esp->auth.icv_full_len) { + u8 sum[esp->auth.icv_full_len]; + u8 sum1[alen]; +- ++ if (x->props.replay_window && xfrm_replay_check(x, esph->seq_no)) ++ goto out; + esp->auth.icv(esp, skb, 0, skb->len-alen, sum); + + if (skb_copy_bits(skb, skb->len-alen, sum1, alen)) +@@ -171,6 +173,9 @@ + x->stats.integrity_failed++; + goto out; + } ++ ++ if (x->props.replay_window) ++ xfrm_replay_advance(x, esph->seq_no); + } + + if ((nfrags = skb_cow_data(skb, 0, &trailer)) < 0) +@@ -178,7 +183,6 @@ + + skb->ip_summed = CHECKSUM_NONE; + +- esph = (struct ip_esp_hdr*)skb->data; + iph = skb->nh.iph; + + /* Get ivec. This can be wrong, check against another impls. */ +@@ -373,7 +377,7 @@ + if (x->aalg->alg_key_len > 512) + goto error; + } +- if (x->ealg == NULL) ++ if (x->ealg == NULL || (x->ealg->alg_key_len == 0 && x->props.ealgo != SADB_EALG_NULL)) + goto error; + + esp = kmalloc(sizeof(*esp), GFP_KERNEL); +@@ -412,11 +416,13 @@ + goto error; + } + esp->conf.key = x->ealg->alg_key; +- esp->conf.key_len = (x->ealg->alg_key_len+7)/8; +- if (x->props.ealgo == SADB_EALG_NULL) ++ if (x->props.ealgo == SADB_EALG_NULL) { ++ esp->conf.key_len = 0; + esp->conf.tfm = crypto_alloc_tfm(x->ealg->alg_name, CRYPTO_TFM_MODE_ECB); +- else ++ } else { ++ esp->conf.key_len = (x->ealg->alg_key_len+7)/8; + esp->conf.tfm = crypto_alloc_tfm(x->ealg->alg_name, CRYPTO_TFM_MODE_CBC); ++ } + if (esp->conf.tfm == NULL) + goto error; + esp->conf.ivlen = crypto_tfm_alg_ivsize(esp->conf.tfm); +diff -urN linux-2.6.11/net/ipv4/fib_hash.c linux.sinabox/net/ipv4/fib_hash.c +--- linux-2.6.11/net/ipv4/fib_hash.c 2005-03-02 08:38:09.000000000 +0100 ++++ linux.sinabox/net/ipv4/fib_hash.c 2005-03-19 07:34:57.000000000 +0100 +@@ -919,13 +919,23 @@ + return fa; + } + ++static struct fib_alias *fib_get_idx(struct seq_file *seq, loff_t pos) ++{ ++ struct fib_alias *fa = fib_get_first(seq); ++ ++ if (fa) ++ while (pos && (fa = fib_get_next(seq))) ++ --pos; ++ return pos ? NULL : fa; ++} ++ + static void *fib_seq_start(struct seq_file *seq, loff_t *pos) + { + void *v = NULL; + + read_lock(&fib_hash_lock); + if (ip_fib_main_table) +- v = *pos ? fib_get_next(seq) : SEQ_START_TOKEN; ++ v = *pos ? fib_get_idx(seq, *pos - 1) : SEQ_START_TOKEN; + return v; + } + +diff -urN linux-2.6.11/net/ipv4/ip_forward.c linux.sinabox/net/ipv4/ip_forward.c +--- linux-2.6.11/net/ipv4/ip_forward.c 2005-03-02 08:37:30.000000000 +0100 ++++ linux.sinabox/net/ipv4/ip_forward.c 2005-03-26 19:02:06.000000000 +0100 +@@ -60,8 +60,13 @@ + struct rtable *rt; /* Route we use */ + struct ip_options * opt = &(IPCB(skb)->opt); + ++#ifdef CONFIG_USE_POLICY_FWD + if (!xfrm4_policy_check(NULL, XFRM_POLICY_FWD, skb)) + goto drop; ++#else ++ if (!xfrm4_policy_check(NULL, XFRM_POLICY_IN, skb)) ++ goto drop; ++#endif + + if (IPCB(skb)->opt.router_alert && ip_call_ra_chain(skb)) + return NET_RX_SUCCESS; +diff -urN linux-2.6.11/net/ipv4/netfilter/ip_set.c linux.sinabox/net/ipv4/netfilter/ip_set.c +--- linux-2.6.11/net/ipv4/netfilter/ip_set.c 1970-01-01 01:00:00.000000000 +0100 ++++ linux.sinabox/net/ipv4/netfilter/ip_set.c 2005-03-24 19:22:37.000000000 +0100 +@@ -0,0 +1,1986 @@ ++/* Copyright (C) 2000-2002 Joakim Axelsson ++ * Patrick Schaaf ++ * Copyright (C) 2003-2004 Jozsef Kadlecsik ++ * ++ * This program is free software; you can redistribute it and/or modify ++ * it under the terms of the GNU General Public License version 2 as ++ * published by the Free Software Foundation. ++ */ ++ ++/* Kernel module for IP set management */ ++ ++#include ++#include ++#include ++#include ++#include ++#include ++#include ++#include ++#include ++#include ++#include ++#include ++#include ++#include ++#include ++ ++#define ASSERT_READ_LOCK(x) /* dont use that */ ++#define ASSERT_WRITE_LOCK(x) ++#include ++#include ++ ++static struct list_head set_type_list; /* all registered sets */ ++static struct ip_set **ip_set_list; /* all individual sets */ ++static DECLARE_RWLOCK(ip_set_lock); /* protects the lists and the hash */ ++static DECLARE_MUTEX(ip_set_app_mutex); /* serializes user access */ ++static ip_set_id_t ip_set_max = CONFIG_IP_NF_SET_MAX; ++static ip_set_id_t ip_set_bindings_hash_size = CONFIG_IP_NF_SET_HASHSIZE; ++static struct list_head *ip_set_hash; /* hash of bindings */ ++static unsigned int ip_set_hash_random; /* random seed */ ++ ++/* ++ * Sets are identified either by the index in ip_set_list or by id. ++ * The id never changes and is used to find a key in the hash. ++ * The index may change by swapping and used at all other places ++ * (set/SET netfilter modules, binding value, etc.) ++ * ++ * Userspace requests are serialized by ip_set_mutex and sets can ++ * be deleted only from userspace. Therefore ip_set_list locking ++ * must obey the following rules: ++ * ++ * - kernel requests: read and write locking mandatory ++ * - user requests: read locking optional, write locking mandatory ++ */ ++ ++static inline void ++__ip_set_get(ip_set_id_t index) ++{ ++ atomic_inc(&ip_set_list[index]->ref); ++} ++ ++static inline void ++__ip_set_put(ip_set_id_t index) ++{ ++ atomic_dec(&ip_set_list[index]->ref); ++} ++ ++/* ++ * Binding routines ++ */ ++ ++static inline int ++ip_hash_cmp(const struct ip_set_hash *set_hash, ++ ip_set_id_t id, ip_set_ip_t ip) ++{ ++ return set_hash->id == id && set_hash->ip == ip; ++} ++ ++static ip_set_id_t ++ip_set_find_in_hash(ip_set_id_t id, ip_set_ip_t ip) ++{ ++ u_int32_t key = jhash_2words(id, ip, ip_set_hash_random) ++ % ip_set_bindings_hash_size; ++ struct ip_set_hash *set_hash; ++ ++ MUST_BE_READ_LOCKED(&ip_set_lock); ++ IP_SET_ASSERT(ip_set_list[id]); ++ DP("set: %s, ip: %u.%u.%u.%u", ip_set_list[id]->name, HIPQUAD(ip)); ++ ++ set_hash = LIST_FIND(&ip_set_hash[key], ip_hash_cmp, ++ struct ip_set_hash *, id, ip); ++ ++ DP("set: %s, ip: %u.%u.%u.%u, binding: %s", ip_set_list[id]->name, ++ HIPQUAD(ip), ++ set_hash != NULL ? ip_set_list[set_hash->binding]->name : ""); ++ ++ return (set_hash != NULL ? set_hash->binding : IP_SET_INVALID_ID); ++} ++ ++static inline void ++__set_hash_del(struct ip_set_hash *set_hash) ++{ ++ MUST_BE_WRITE_LOCKED(&ip_set_lock); ++ IP_SET_ASSERT(ip_set_list[set_hash->binding]); ++ ++ __ip_set_put(set_hash->binding); ++ list_del(&set_hash->list); ++ kfree(set_hash); ++} ++ ++static int ++ip_set_hash_del(ip_set_id_t id, ip_set_ip_t ip) ++{ ++ u_int32_t key = jhash_2words(id, ip, ip_set_hash_random) ++ % ip_set_bindings_hash_size; ++ struct ip_set_hash *set_hash; ++ ++ IP_SET_ASSERT(ip_set_list[id]); ++ DP("set: %s, ip: %u.%u.%u.%u", ip_set_list[id]->name, HIPQUAD(ip)); ++ WRITE_LOCK(&ip_set_lock); ++ set_hash = LIST_FIND(&ip_set_hash[key], ip_hash_cmp, ++ struct ip_set_hash *, id, ip); ++ DP("set: %s, ip: %u.%u.%u.%u, binding: %s", ip_set_list[id]->name, ++ HIPQUAD(ip), ++ set_hash != NULL ? ip_set_list[set_hash->binding]->name : ""); ++ ++ if (set_hash != NULL) ++ __set_hash_del(set_hash); ++ WRITE_UNLOCK(&ip_set_lock); ++ return 0; ++} ++ ++static int ++ip_set_hash_add(ip_set_id_t id, ip_set_ip_t ip, ip_set_id_t binding) ++{ ++ u_int32_t key = jhash_2words(id, ip, ip_set_hash_random) ++ % ip_set_bindings_hash_size; ++ struct ip_set_hash *set_hash; ++ int ret = 0; ++ ++ IP_SET_ASSERT(ip_set_list[id]); ++ IP_SET_ASSERT(ip_set_list[binding]); ++ DP("set: %s, ip: %u.%u.%u.%u, binding: %s", ip_set_list[id]->name, ++ HIPQUAD(ip), ip_set_list[binding]->name); ++ WRITE_LOCK(&ip_set_lock); ++ set_hash = LIST_FIND(&ip_set_hash[key], ip_hash_cmp, ++ struct ip_set_hash *, id, ip); ++ if (!set_hash) { ++ set_hash = kmalloc(sizeof(struct ip_set_hash), GFP_KERNEL); ++ if (!set_hash) { ++ ret = -ENOMEM; ++ goto unlock; ++ } ++ INIT_LIST_HEAD(&set_hash->list); ++ set_hash->id = id; ++ set_hash->ip = ip; ++ list_add(&ip_set_hash[key], &set_hash->list); ++ } else { ++ IP_SET_ASSERT(ip_set_list[set_hash->binding]); ++ DP("overwrite binding: %s", ++ ip_set_list[set_hash->binding]->name); ++ __ip_set_put(set_hash->binding); ++ } ++ set_hash->binding = binding; ++ __ip_set_get(set_hash->binding); ++ unlock: ++ WRITE_UNLOCK(&ip_set_lock); ++ return ret; ++} ++ ++#define FOREACH_HASH_DO(fn, args...) \ ++({ \ ++ ip_set_id_t __key; \ ++ struct ip_set_hash *__set_hash; \ ++ \ ++ for (__key = 0; __key < ip_set_bindings_hash_size; __key++) { \ ++ list_for_each_entry(__set_hash, &ip_set_hash[__key], list) \ ++ fn(__set_hash , ## args); \ ++ } \ ++}) ++ ++#define FOREACH_HASH_RW_DO(fn, args...) \ ++({ \ ++ ip_set_id_t __key; \ ++ struct ip_set_hash *__set_hash, *__n; \ ++ \ ++ MUST_BE_WRITE_LOCKED(&ip_set_lock); \ ++ for (__key = 0; __key < ip_set_bindings_hash_size; __key++) { \ ++ list_for_each_entry_safe(__set_hash, __n, &ip_set_hash[__key], list)\ ++ fn(__set_hash , ## args); \ ++ } \ ++}) ++ ++/* Add, del and test set entries from kernel */ ++ ++#define follow_bindings(index, set, ip) \ ++((index = ip_set_find_in_hash((set)->id, ip)) != IP_SET_INVALID_ID \ ++ || (index = (set)->binding) != IP_SET_INVALID_ID) ++ ++int ++ip_set_testip_kernel(ip_set_id_t index, ++ const struct sk_buff *skb, ++ const u_int32_t *flags) ++{ ++ struct ip_set *set; ++ ip_set_ip_t ip; ++ int res, i = 0; ++ ++ IP_SET_ASSERT(flags[i]); ++ READ_LOCK(&ip_set_lock); ++ do { ++ set = ip_set_list[index]; ++ IP_SET_ASSERT(set); ++ DP("set %s, index %u", set->name, index); ++ read_lock_bh(&set->lock); ++ res = set->type->testip_kernel(set, skb, flags[i], &ip); ++ read_unlock_bh(&set->lock); ++ } while (res > 0 ++ && flags[++i] ++ && follow_bindings(index, set, ip)); ++ READ_UNLOCK(&ip_set_lock); ++ ++ return res; ++} ++ ++void ++ip_set_addip_kernel(ip_set_id_t index, ++ const struct sk_buff *skb, ++ const u_int32_t *flags) ++{ ++ struct ip_set *set; ++ ip_set_ip_t ip; ++ int res, i= 0; ++ ++ IP_SET_ASSERT(flags[i]); ++ READ_LOCK(&ip_set_lock); ++ do { ++ set = ip_set_list[index]; ++ IP_SET_ASSERT(set); ++ DP("set %s, index %u", set->name, index); ++ write_lock_bh(&set->lock); ++ res = set->type->addip_kernel(set, skb, flags[i], &ip); ++ write_unlock_bh(&set->lock); ++ } while ((res == -EAGAIN ++ && set->type->retry ++ && (res = set->type->retry(set)) == 0) ++ || ((res == 0 || res == -EEXIST) ++ && flags[++i] ++ && follow_bindings(index, set, ip))); ++ READ_UNLOCK(&ip_set_lock); ++} ++ ++void ++ip_set_delip_kernel(ip_set_id_t index, ++ const struct sk_buff *skb, ++ const u_int32_t *flags) ++{ ++ struct ip_set *set; ++ ip_set_ip_t ip; ++ int res, i = 0; ++ ++ IP_SET_ASSERT(flags[i]); ++ READ_LOCK(&ip_set_lock); ++ do { ++ set = ip_set_list[index]; ++ IP_SET_ASSERT(set); ++ DP("set %s, index %u", set->name, index); ++ write_lock_bh(&set->lock); ++ res = set->type->delip_kernel(set, skb, flags[i], &ip); ++ write_unlock_bh(&set->lock); ++ } while ((res == 0 || res == -EEXIST) ++ && flags[++i] ++ && follow_bindings(index, set, ip)); ++ READ_UNLOCK(&ip_set_lock); ++} ++ ++/* Register and deregister settype */ ++ ++static inline int ++set_type_equal(const struct ip_set_type *set_type, const char *str2) ++{ ++ return !strncmp(set_type->typename, str2, IP_SET_MAXNAMELEN - 1); ++} ++ ++static inline struct ip_set_type * ++find_set_type(const char *name) ++{ ++ return LIST_FIND(&set_type_list, ++ set_type_equal, ++ struct ip_set_type *, ++ name); ++} ++ ++int ++ip_set_register_set_type(struct ip_set_type *set_type) ++{ ++ int ret = 0; ++ ++ if (set_type->protocol_version != IP_SET_PROTOCOL_VERSION) { ++ ip_set_printk("'%s' uses wrong protocol version %u (want %u)", ++ set_type->typename, ++ set_type->protocol_version, ++ IP_SET_PROTOCOL_VERSION); ++ return -EINVAL; ++ } ++ ++ WRITE_LOCK(&ip_set_lock); ++ if (find_set_type(set_type->typename)) { ++ /* Duplicate! */ ++ ip_set_printk("'%s' already registered!", ++ set_type->typename); ++ ret = -EINVAL; ++ goto unlock; ++ } ++ if (!try_module_get(THIS_MODULE)) { ++ ret = -EFAULT; ++ goto unlock; ++ } ++ list_append(&set_type_list, set_type); ++ DP("'%s' registered.", set_type->typename); ++ unlock: ++ WRITE_UNLOCK(&ip_set_lock); ++ return ret; ++} ++ ++void ++ip_set_unregister_set_type(struct ip_set_type *set_type) ++{ ++ WRITE_LOCK(&ip_set_lock); ++ if (!find_set_type(set_type->typename)) { ++ ip_set_printk("'%s' not registered?", ++ set_type->typename); ++ goto unlock; ++ } ++ LIST_DELETE(&set_type_list, set_type); ++ module_put(THIS_MODULE); ++ DP("'%s' unregistered.", set_type->typename); ++ unlock: ++ WRITE_UNLOCK(&ip_set_lock); ++ ++} ++ ++/* ++ * Userspace routines ++ */ ++ ++/* ++ * Find set by name, reference it once. The reference makes sure the ++ * thing pointed to, does not go away under our feet. Drop the reference ++ * later, using ip_set_put(). ++ */ ++ip_set_id_t ++ip_set_get_byname(const char *name) ++{ ++ ip_set_id_t i, index = IP_SET_INVALID_ID; ++ ++ down(&ip_set_app_mutex); ++ for (i = 0; i < ip_set_max; i++) { ++ if (ip_set_list[i] != NULL ++ && strcmp(ip_set_list[i]->name, name) == 0) { ++ __ip_set_get(i); ++ index = i; ++ break; ++ } ++ } ++ up(&ip_set_app_mutex); ++ return index; ++} ++ ++/* ++ * Find set by index, reference it once. The reference makes sure the ++ * thing pointed to, does not go away under our feet. Drop the reference ++ * later, using ip_set_put(). ++ */ ++ip_set_id_t ++ip_set_get_byindex(ip_set_id_t index) ++{ ++ down(&ip_set_app_mutex); ++ ++ if (index >= ip_set_max) ++ return IP_SET_INVALID_ID; ++ ++ if (ip_set_list[index]) ++ __ip_set_get(index); ++ else ++ index = IP_SET_INVALID_ID; ++ ++ up(&ip_set_app_mutex); ++ return index; ++} ++ ++/* ++ * If the given set pointer points to a valid set, decrement ++ * reference count by 1. The caller shall not assume the index ++ * to be valid, after calling this function. ++ */ ++void ip_set_put(ip_set_id_t index) ++{ ++ down(&ip_set_app_mutex); ++ if (ip_set_list[index]) ++ __ip_set_put(index); ++ up(&ip_set_app_mutex); ++} ++ ++/* Find a set by name or index */ ++static ip_set_id_t ++ip_set_find_byname(const char *name) ++{ ++ ip_set_id_t i, index = IP_SET_INVALID_ID; ++ ++ for (i = 0; i < ip_set_max; i++) { ++ if (ip_set_list[i] != NULL ++ && strcmp(ip_set_list[i]->name, name) == 0) { ++ index = i; ++ break; ++ } ++ } ++ return index; ++} ++ ++static ip_set_id_t ++ip_set_find_byindex(ip_set_id_t index) ++{ ++ if (index >= ip_set_max || ip_set_list[index] == NULL) ++ index = IP_SET_INVALID_ID; ++ ++ return index; ++} ++ ++/* ++ * Add, del, test, bind and unbind ++ */ ++ ++static inline int ++__ip_set_testip(struct ip_set *set, ++ const void *data, ++ size_t size, ++ ip_set_ip_t *ip) ++{ ++ int res; ++ ++ read_lock_bh(&set->lock); ++ res = set->type->testip(set, data, size, ip); ++ read_unlock_bh(&set->lock); ++ ++ return res; ++} ++ ++static int ++__ip_set_addip(ip_set_id_t index, ++ const void *data, ++ size_t size) ++{ ++ struct ip_set *set = ip_set_list[index]; ++ ip_set_ip_t ip; ++ int res; ++ ++ IP_SET_ASSERT(set); ++ do { ++ write_lock_bh(&set->lock); ++ res = set->type->addip(set, data, size, &ip); ++ write_unlock_bh(&set->lock); ++ } while (res == -EAGAIN ++ && set->type->retry ++ && (res = set->type->retry(set)) == 0); ++ ++ return res; ++} ++ ++static int ++ip_set_addip(ip_set_id_t index, ++ const void *data, ++ size_t size) ++{ ++ ++ return __ip_set_addip(index, ++ data + sizeof(struct ip_set_req_adt), ++ size - sizeof(struct ip_set_req_adt)); ++} ++ ++static int ++ip_set_delip(ip_set_id_t index, ++ const void *data, ++ size_t size) ++{ ++ struct ip_set *set = ip_set_list[index]; ++ ip_set_ip_t ip; ++ int res; ++ ++ IP_SET_ASSERT(set); ++ write_lock_bh(&set->lock); ++ res = set->type->delip(set, ++ data + sizeof(struct ip_set_req_adt), ++ size - sizeof(struct ip_set_req_adt), ++ &ip); ++ write_unlock_bh(&set->lock); ++ ++ return res; ++} ++ ++static int ++ip_set_testip(ip_set_id_t index, ++ const void *data, ++ size_t size) ++{ ++ struct ip_set *set = ip_set_list[index]; ++ ip_set_ip_t ip; ++ int res; ++ ++ IP_SET_ASSERT(set); ++ res = __ip_set_testip(set, ++ data + sizeof(struct ip_set_req_adt), ++ size - sizeof(struct ip_set_req_adt), ++ &ip); ++ ++ return (res > 0 ? -EEXIST : res); ++} ++ ++static int ++ip_set_bindip(ip_set_id_t index, ++ const void *data, ++ size_t size) ++{ ++ struct ip_set *set = ip_set_list[index]; ++ struct ip_set_req_bind *req_bind; ++ ip_set_id_t binding; ++ ip_set_ip_t ip; ++ int res; ++ ++ IP_SET_ASSERT(set); ++ if (size < sizeof(struct ip_set_req_bind)) ++ return -EINVAL; ++ ++ req_bind = (struct ip_set_req_bind *) data; ++ req_bind->binding[IP_SET_MAXNAMELEN - 1] = '\0'; ++ ++ if (strcmp(req_bind->binding, IPSET_TOKEN_DEFAULT) == 0) { ++ /* Default binding of a set */ ++ char *binding_name; ++ ++ if (size != sizeof(struct ip_set_req_bind) + IP_SET_MAXNAMELEN) ++ return -EINVAL; ++ ++ binding_name = (char *)(data + sizeof(struct ip_set_req_bind)); ++ binding_name[IP_SET_MAXNAMELEN - 1] = '\0'; ++ ++ binding = ip_set_find_byname(binding_name); ++ if (binding == IP_SET_INVALID_ID) ++ return -ENOENT; ++ ++ WRITE_LOCK(&ip_set_lock); ++ /* Sets as binding values are referenced */ ++ if (set->binding != IP_SET_INVALID_ID) ++ __ip_set_put(set->binding); ++ set->binding = binding; ++ __ip_set_get(set->binding); ++ WRITE_UNLOCK(&ip_set_lock); ++ ++ return 0; ++ } ++ binding = ip_set_find_byname(req_bind->binding); ++ if (binding == IP_SET_INVALID_ID) ++ return -ENOENT; ++ ++ res = __ip_set_testip(set, ++ data + sizeof(struct ip_set_req_bind), ++ size - sizeof(struct ip_set_req_bind), ++ &ip); ++ DP("set %s, ip: %u.%u.%u.%u, binding %s", ++ set->name, HIPQUAD(ip), ip_set_list[binding]->name); ++ ++ if (res >= 0) ++ res = ip_set_hash_add(set->id, ip, binding); ++ ++ return res; ++} ++ ++#define FOREACH_SET_DO(fn, args...) \ ++({ \ ++ ip_set_id_t __i; \ ++ struct ip_set *__set; \ ++ \ ++ for (__i = 0; __i < ip_set_max; __i++) { \ ++ __set = ip_set_list[__i]; \ ++ if (__set != NULL) \ ++ fn(__set , ##args); \ ++ } \ ++}) ++ ++static inline void ++__set_hash_del_byid(struct ip_set_hash *set_hash, ip_set_id_t id) ++{ ++ if (set_hash->id == id) ++ __set_hash_del(set_hash); ++} ++ ++static inline void ++__unbind_default(struct ip_set *set) ++{ ++ if (set->binding != IP_SET_INVALID_ID) { ++ /* Sets as binding values are referenced */ ++ __ip_set_put(set->binding); ++ set->binding = IP_SET_INVALID_ID; ++ } ++} ++ ++static int ++ip_set_unbindip(ip_set_id_t index, ++ const void *data, ++ size_t size) ++{ ++ struct ip_set *set; ++ struct ip_set_req_bind *req_bind; ++ ip_set_ip_t ip; ++ int res; ++ ++ DP(""); ++ if (size < sizeof(struct ip_set_req_bind)) ++ return -EINVAL; ++ ++ req_bind = (struct ip_set_req_bind *) data; ++ req_bind->binding[IP_SET_MAXNAMELEN - 1] = '\0'; ++ ++ DP("%u %s", index, req_bind->binding); ++ if (index == IP_SET_INVALID_ID) { ++ /* unbind :all: */ ++ if (strcmp(req_bind->binding, IPSET_TOKEN_DEFAULT) == 0) { ++ /* Default binding of sets */ ++ WRITE_LOCK(&ip_set_lock); ++ FOREACH_SET_DO(__unbind_default); ++ WRITE_UNLOCK(&ip_set_lock); ++ return 0; ++ } else if (strcmp(req_bind->binding, IPSET_TOKEN_ALL) == 0) { ++ /* Flush all bindings of all sets*/ ++ WRITE_LOCK(&ip_set_lock); ++ FOREACH_HASH_RW_DO(__set_hash_del); ++ WRITE_UNLOCK(&ip_set_lock); ++ return 0; ++ } ++ DP("unreachable reached!"); ++ return -EINVAL; ++ } ++ ++ set = ip_set_list[index]; ++ IP_SET_ASSERT(set); ++ if (strcmp(req_bind->binding, IPSET_TOKEN_DEFAULT) == 0) { ++ /* Default binding of set */ ++ ip_set_id_t binding = ip_set_find_byindex(set->binding); ++ ++ if (binding == IP_SET_INVALID_ID) ++ return -ENOENT; ++ ++ WRITE_LOCK(&ip_set_lock); ++ /* Sets in hash values are referenced */ ++ __ip_set_put(set->binding); ++ set->binding = IP_SET_INVALID_ID; ++ WRITE_UNLOCK(&ip_set_lock); ++ ++ return 0; ++ } else if (strcmp(req_bind->binding, IPSET_TOKEN_ALL) == 0) { ++ /* Flush all bindings */ ++ ++ WRITE_LOCK(&ip_set_lock); ++ FOREACH_HASH_RW_DO(__set_hash_del_byid, set->id); ++ WRITE_UNLOCK(&ip_set_lock); ++ return 0; ++ } ++ ++ res = __ip_set_testip(set, ++ data + sizeof(struct ip_set_req_bind), ++ size - sizeof(struct ip_set_req_bind), ++ &ip); ++ ++ DP("set %s, ip: %u.%u.%u.%u", set->name, HIPQUAD(ip)); ++ if (res >= 0) ++ res = ip_set_hash_del(set->id, ip); ++ ++ return res; ++} ++ ++static int ++ip_set_testbind(ip_set_id_t index, ++ const void *data, ++ size_t size) ++{ ++ struct ip_set *set = ip_set_list[index]; ++ struct ip_set_req_bind *req_bind; ++ ip_set_id_t binding; ++ ip_set_ip_t ip; ++ int res; ++ ++ IP_SET_ASSERT(set); ++ if (size < sizeof(struct ip_set_req_bind)) ++ return -EINVAL; ++ ++ req_bind = (struct ip_set_req_bind *) data; ++ req_bind->binding[IP_SET_MAXNAMELEN - 1] = '\0'; ++ ++ if (strcmp(req_bind->binding, IPSET_TOKEN_DEFAULT) == 0) { ++ /* Default binding of set */ ++ char *binding_name; ++ ++ if (size != sizeof(struct ip_set_req_bind) + IP_SET_MAXNAMELEN) ++ return -EINVAL; ++ ++ binding_name = (char *)(data + sizeof(struct ip_set_req_bind)); ++ binding_name[IP_SET_MAXNAMELEN - 1] = '\0'; ++ ++ binding = ip_set_find_byname(binding_name); ++ if (binding == IP_SET_INVALID_ID) ++ return -ENOENT; ++ ++ res = (set->binding == binding) ? -EEXIST : 0; ++ ++ return res; ++ } ++ binding = ip_set_find_byname(req_bind->binding); ++ if (binding == IP_SET_INVALID_ID) ++ return -ENOENT; ++ ++ ++ res = __ip_set_testip(set, ++ data + sizeof(struct ip_set_req_bind), ++ size - sizeof(struct ip_set_req_bind), ++ &ip); ++ DP("set %s, ip: %u.%u.%u.%u, binding %s", ++ set->name, HIPQUAD(ip), ip_set_list[binding]->name); ++ ++ if (res >= 0) ++ res = (ip_set_find_in_hash(set->id, ip) == binding) ++ ? -EEXIST : 0; ++ ++ return res; ++} ++ ++static struct ip_set_type * ++find_set_type_rlock(const char *typename) ++{ ++ struct ip_set_type *type; ++ ++ READ_LOCK(&ip_set_lock); ++ type = find_set_type(typename); ++ if (type == NULL) ++ READ_UNLOCK(&ip_set_lock); ++ ++ return type; ++} ++ ++static int ++find_free_id(const char *name, ++ ip_set_id_t *index, ++ ip_set_id_t *id) ++{ ++ ip_set_id_t i; ++ ++ *id = IP_SET_INVALID_ID; ++ for (i = 0; i < ip_set_max; i++) { ++ if (ip_set_list[i] == NULL) { ++ if (*id == IP_SET_INVALID_ID) ++ *id = *index = i; ++ } else if (strcmp(name, ip_set_list[i]->name) == 0) ++ /* Name clash */ ++ return -EEXIST; ++ } ++ if (*id == IP_SET_INVALID_ID) ++ /* No free slot remained */ ++ return -ERANGE; ++ /* Check that index is usable as id (swapping) */ ++ check: ++ for (i = 0; i < ip_set_max; i++) { ++ if (ip_set_list[i] != NULL ++ && ip_set_list[i]->id == *id) { ++ *id = i; ++ goto check; ++ } ++ } ++ return 0; ++} ++ ++/* ++ * Create a set ++ */ ++static int ++ip_set_create(const char *name, ++ const char *typename, ++ ip_set_id_t restore, ++ const void *data, ++ size_t size) ++{ ++ struct ip_set *set; ++ ip_set_id_t index, id; ++ int res = 0; ++ ++ DP("setname: %s, typename: %s, id: %u", name, typename, restore); ++ /* ++ * First, and without any locks, allocate and initialize ++ * a normal base set structure. ++ */ ++ set = kmalloc(sizeof(struct ip_set), GFP_KERNEL); ++ if (!set) ++ return -ENOMEM; ++ set->lock = RW_LOCK_UNLOCKED; ++ strncpy(set->name, name, IP_SET_MAXNAMELEN); ++ set->binding = IP_SET_INVALID_ID; ++ atomic_set(&set->ref, 0); ++ ++ /* ++ * Next, take the &ip_set_lock, check that we know the type, ++ * and take a reference on the type, to make sure it ++ * stays available while constructing our new set. ++ * ++ * After referencing the type, we drop the &ip_set_lock, ++ * and let the new set construction run without locks. ++ */ ++ set->type = find_set_type_rlock(typename); ++ if (set->type == NULL) { ++ /* Try loading the module */ ++ char modulename[IP_SET_MAXNAMELEN + strlen("ip_set_") + 1]; ++ strcpy(modulename, "ip_set_"); ++ strcat(modulename, typename); ++ DP("try to load %s", modulename); ++ request_module(modulename); ++ set->type = find_set_type_rlock(typename); ++ } ++ if (set->type == NULL) { ++ ip_set_printk("no set type '%s', set '%s' not created", ++ typename, name); ++ res = -ENOENT; ++ goto out; ++ } ++ if (!try_module_get(set->type->me)) { ++ READ_UNLOCK(&ip_set_lock); ++ res = -EFAULT; ++ goto out; ++ } ++ READ_UNLOCK(&ip_set_lock); ++ ++ /* ++ * Without holding any locks, create private part. ++ */ ++ res = set->type->create(set, data, size); ++ if (res != 0) ++ goto put_out; ++ ++ /* BTW, res==0 here. */ ++ ++ /* ++ * Here, we have a valid, constructed set. &ip_set_lock again, ++ * find free id/index and check that it is not already in ++ * ip_set_list. ++ */ ++ WRITE_LOCK(&ip_set_lock); ++ if ((res = find_free_id(set->name, &index, &id)) != 0) { ++ DP("no free id!"); ++ goto cleanup; ++ } ++ ++ /* Make sure restore gets the same index */ ++ if (restore != IP_SET_INVALID_ID && index != restore) { ++ DP("Can't restore, sets are screwed up"); ++ res = -ERANGE; ++ goto cleanup; ++ } ++ ++ /* ++ * Finally! Add our shiny new set to the list, and be done. ++ */ ++ DP("create: '%s' created with index %u, id %u!", set->name, index, id); ++ set->id = id; ++ ip_set_list[index] = set; ++ WRITE_UNLOCK(&ip_set_lock); ++ return res; ++ ++ cleanup: ++ WRITE_UNLOCK(&ip_set_lock); ++ set->type->destroy(set); ++ put_out: ++ module_put(set->type->me); ++ out: ++ kfree(set); ++ return res; ++} ++ ++/* ++ * Destroy a given existing set ++ */ ++static void ++ip_set_destroy_set(ip_set_id_t index) ++{ ++ struct ip_set *set = ip_set_list[index]; ++ ++ IP_SET_ASSERT(set); ++ DP("set: %s", set->name); ++ WRITE_LOCK(&ip_set_lock); ++ FOREACH_HASH_RW_DO(__set_hash_del_byid, set->id); ++ if (set->binding != IP_SET_INVALID_ID) ++ __ip_set_put(set->binding); ++ ip_set_list[index] = NULL; ++ WRITE_UNLOCK(&ip_set_lock); ++ ++ /* Must call it without holding any lock */ ++ set->type->destroy(set); ++ module_put(set->type->me); ++ kfree(set); ++} ++ ++/* ++ * Destroy a set - or all sets ++ * Sets must not be referenced/used. ++ */ ++static int ++ip_set_destroy(ip_set_id_t index) ++{ ++ ip_set_id_t i; ++ ++ /* ref modification always protected by the mutex */ ++ if (index != IP_SET_INVALID_ID) { ++ if (atomic_read(&ip_set_list[index]->ref)) ++ return -EBUSY; ++ ip_set_destroy_set(index); ++ } else { ++ for (i = 0; i < ip_set_max; i++) { ++ if (ip_set_list[i] != NULL ++ && (atomic_read(&ip_set_list[i]->ref))) ++ return -EBUSY; ++ } ++ ++ for (i = 0; i < ip_set_max; i++) { ++ if (ip_set_list[i] != NULL) ++ ip_set_destroy_set(i); ++ } ++ } ++ return 0; ++} ++ ++static void ++ip_set_flush_set(struct ip_set *set) ++{ ++ DP("set: %s %u", set->name, set->id); ++ ++ write_lock_bh(&set->lock); ++ set->type->flush(set); ++ write_unlock_bh(&set->lock); ++} ++ ++/* ++ * Flush data in a set - or in all sets ++ */ ++static int ++ip_set_flush(ip_set_id_t index) ++{ ++ if (index != IP_SET_INVALID_ID) { ++ IP_SET_ASSERT(ip_set_list[index]); ++ ip_set_flush_set(ip_set_list[index]); ++ } else ++ FOREACH_SET_DO(ip_set_flush_set); ++ ++ return 0; ++} ++ ++/* Rename a set */ ++static int ++ip_set_rename(ip_set_id_t index, const char *name) ++{ ++ struct ip_set *set = ip_set_list[index]; ++ ip_set_id_t i; ++ int res = 0; ++ ++ DP("set: %s to %s", set->name, name); ++ WRITE_LOCK(&ip_set_lock); ++ for (i = 0; i < ip_set_max; i++) { ++ if (ip_set_list[i] != NULL ++ && strncmp(ip_set_list[i]->name, ++ name, ++ IP_SET_MAXNAMELEN - 1) == 0) { ++ res = -EEXIST; ++ goto unlock; ++ } ++ } ++ strncpy(set->name, name, IP_SET_MAXNAMELEN); ++ unlock: ++ WRITE_UNLOCK(&ip_set_lock); ++ return res; ++} ++ ++/* ++ * Swap two sets so that name/index points to the other. ++ * References are also swapped. ++ */ ++static int ++ip_set_swap(ip_set_id_t from_index, ip_set_id_t to_index) ++{ ++ struct ip_set *from = ip_set_list[from_index]; ++ struct ip_set *to = ip_set_list[to_index]; ++ char from_name[IP_SET_MAXNAMELEN]; ++ u_int32_t from_ref; ++ ++ DP("set: %s to %s", from->name, to->name); ++ /* Type can't be changed. Artifical restriction. */ ++ if (from->type->typecode != to->type->typecode) ++ return -ENOEXEC; ++ ++ /* No magic here: ref munging protected by the mutex */ ++ WRITE_LOCK(&ip_set_lock); ++ strncpy(from_name, from->name, IP_SET_MAXNAMELEN); ++ from_ref = atomic_read(&from->ref); ++ ++ strncpy(from->name, to->name, IP_SET_MAXNAMELEN); ++ atomic_set(&from->ref, atomic_read(&to->ref)); ++ strncpy(to->name, from_name, IP_SET_MAXNAMELEN); ++ atomic_set(&to->ref, from_ref); ++ ++ ip_set_list[from_index] = to; ++ ip_set_list[to_index] = from; ++ ++ WRITE_UNLOCK(&ip_set_lock); ++ return 0; ++} ++ ++/* ++ * List set data ++ */ ++ ++static inline void ++__set_hash_bindings_size_list(struct ip_set_hash *set_hash, ++ ip_set_id_t id, size_t *size) ++{ ++ if (set_hash->id == id) ++ *size += sizeof(struct ip_set_hash_list); ++} ++ ++static inline void ++__set_hash_bindings_size_save(struct ip_set_hash *set_hash, ++ ip_set_id_t id, size_t *size) ++{ ++ if (set_hash->id == id) ++ *size += sizeof(struct ip_set_hash_save); ++} ++ ++static inline void ++__set_hash_bindings(struct ip_set_hash *set_hash, ++ ip_set_id_t id, void *data, int *used) ++{ ++ if (set_hash->id == id) { ++ struct ip_set_hash_list *hash_list = ++ (struct ip_set_hash_list *)(data + *used); ++ ++ hash_list->ip = set_hash->ip; ++ hash_list->binding = set_hash->binding; ++ *used += sizeof(struct ip_set_hash_list); ++ } ++} ++ ++static int ip_set_list_set(ip_set_id_t index, ++ void *data, ++ int *used, ++ int len) ++{ ++ struct ip_set *set = ip_set_list[index]; ++ struct ip_set_list *set_list; ++ ++ /* Pointer to our header */ ++ set_list = (struct ip_set_list *) (data + *used); ++ ++ DP("set: %s, used: %d %p %p", set->name, *used, data, data + *used); ++ ++ /* Get and ensure header size */ ++ if (*used + sizeof(struct ip_set_list) > len) ++ goto not_enough_mem; ++ *used += sizeof(struct ip_set_list); ++ ++ read_lock_bh(&set->lock); ++ /* Get and ensure set specific header size */ ++ set_list->header_size = set->type->header_size; ++ if (*used + set_list->header_size > len) ++ goto unlock_set; ++ ++ /* Fill in the header */ ++ set_list->index = index; ++ set_list->binding = set->binding; ++ set_list->ref = atomic_read(&set->ref); ++ ++ /* Fill in set spefific header data */ ++ set->type->list_header(set, data + *used); ++ *used += set_list->header_size; ++ ++ /* Get and ensure set specific members size */ ++ set_list->members_size = set->type->list_members_size(set); ++ if (*used + set_list->members_size > len) ++ goto unlock_set; ++ ++ /* Fill in set spefific members data */ ++ set->type->list_members(set, data + *used); ++ *used += set_list->members_size; ++ read_unlock_bh(&set->lock); ++ ++ /* Bindings */ ++ ++ /* Get and ensure set specific bindings size */ ++ set_list->bindings_size = 0; ++ FOREACH_HASH_DO(__set_hash_bindings_size_list, ++ set->id, &set_list->bindings_size); ++ if (*used + set_list->bindings_size > len) ++ goto not_enough_mem; ++ ++ /* Fill in set spefific bindings data */ ++ FOREACH_HASH_DO(__set_hash_bindings, set->id, data, used); ++ ++ return 0; ++ ++ unlock_set: ++ read_unlock_bh(&set->lock); ++ not_enough_mem: ++ DP("not enough mem, try again"); ++ return -EAGAIN; ++} ++ ++/* ++ * Save sets ++ */ ++static int ip_set_save_set(ip_set_id_t index, ++ void *data, ++ int *used, ++ int len) ++{ ++ struct ip_set *set; ++ struct ip_set_save *set_save; ++ ++ /* Pointer to our header */ ++ set_save = (struct ip_set_save *) (data + *used); ++ ++ /* Get and ensure header size */ ++ if (*used + sizeof(struct ip_set_save) > len) ++ goto not_enough_mem; ++ *used += sizeof(struct ip_set_save); ++ ++ set = ip_set_list[index]; ++ DP("set: %s, used: %u(%u) %p %p", set->name, *used, len, ++ data, data + *used); ++ ++ read_lock_bh(&set->lock); ++ /* Get and ensure set specific header size */ ++ set_save->header_size = set->type->header_size; ++ if (*used + set_save->header_size > len) ++ goto unlock_set; ++ ++ /* Fill in the header */ ++ set_save->index = index; ++ set_save->binding = set->binding; ++ ++ /* Fill in set spefific header data */ ++ set->type->list_header(set, data + *used); ++ *used += set_save->header_size; ++ ++ DP("set header filled: %s, used: %u %p %p", set->name, *used, ++ data, data + *used); ++ /* Get and ensure set specific members size */ ++ set_save->members_size = set->type->list_members_size(set); ++ if (*used + set_save->members_size > len) ++ goto unlock_set; ++ ++ /* Fill in set spefific members data */ ++ set->type->list_members(set, data + *used); ++ *used += set_save->members_size; ++ read_unlock_bh(&set->lock); ++ DP("set members filled: %s, used: %u %p %p", set->name, *used, ++ data, data + *used); ++ return 0; ++ ++ unlock_set: ++ read_unlock_bh(&set->lock); ++ not_enough_mem: ++ DP("not enough mem, try again"); ++ return -EAGAIN; ++} ++ ++static inline void ++__set_hash_save_bindings(struct ip_set_hash *set_hash, ++ ip_set_id_t id, ++ void *data, ++ int *used, ++ int len, ++ int *res) ++{ ++ if (*res == 0 ++ && (id == IP_SET_INVALID_ID || set_hash->id == id)) { ++ struct ip_set_hash_save *hash_save = ++ (struct ip_set_hash_save *)(data + *used); ++ /* Ensure bindings size */ ++ if (*used + sizeof(struct ip_set_hash_save) > len) { ++ *res = -ENOMEM; ++ return; ++ } ++ hash_save->id = set_hash->id; ++ hash_save->ip = set_hash->ip; ++ hash_save->binding = set_hash->binding; ++ *used += sizeof(struct ip_set_hash_save); ++ } ++} ++ ++static int ip_set_save_bindings(ip_set_id_t index, ++ void *data, ++ int *used, ++ int len) ++{ ++ int res = 0; ++ struct ip_set_save *set_save; ++ ++ DP("used %u, len %u", *used, len); ++ /* Get and ensure header size */ ++ if (*used + sizeof(struct ip_set_save) > len) ++ return -ENOMEM; ++ ++ /* Marker */ ++ set_save = (struct ip_set_save *) (data + *used); ++ set_save->index = IP_SET_INVALID_ID; ++ *used += sizeof(struct ip_set_save); ++ ++ DP("marker added used %u, len %u", *used, len); ++ /* Fill in bindings data */ ++ if (index != IP_SET_INVALID_ID) ++ /* Sets are identified by id in hash */ ++ index = ip_set_list[index]->id; ++ FOREACH_HASH_DO(__set_hash_save_bindings, index, data, used, len, &res); ++ ++ return res; ++} ++ ++/* ++ * Restore sets ++ */ ++static int ip_set_restore(void *data, ++ int len) ++{ ++ int res = 0; ++ int line = 0, used = 0, members_size; ++ struct ip_set *set; ++ struct ip_set_hash_save *hash_save; ++ struct ip_set_restore *set_restore; ++ ip_set_id_t index; ++ ++ /* Loop to restore sets */ ++ while (1) { ++ line++; ++ ++ DP("%u %u %u", used, sizeof(struct ip_set_restore), len); ++ /* Get and ensure header size */ ++ if (used + sizeof(struct ip_set_restore) > len) ++ return line; ++ set_restore = (struct ip_set_restore *) (data + used); ++ used += sizeof(struct ip_set_restore); ++ ++ /* Ensure data size */ ++ if (used ++ + set_restore->header_size ++ + set_restore->members_size > len) ++ return line; ++ ++ /* Check marker */ ++ if (set_restore->index == IP_SET_INVALID_ID) { ++ line--; ++ goto bindings; ++ } ++ ++ /* Try to create the set */ ++ DP("restore %s %s", set_restore->name, set_restore->typename); ++ res = ip_set_create(set_restore->name, ++ set_restore->typename, ++ set_restore->index, ++ data + used, ++ set_restore->header_size); ++ ++ if (res != 0) ++ return line; ++ used += set_restore->header_size; ++ ++ index = ip_set_find_byindex(set_restore->index); ++ DP("index %u, restore_index %u", index, set_restore->index); ++ if (index != set_restore->index) ++ return line; ++ /* Try to restore members data */ ++ set = ip_set_list[index]; ++ members_size = 0; ++ DP("members_size %u reqsize %u", ++ set_restore->members_size, set->type->reqsize); ++ while (members_size + set->type->reqsize <= ++ set_restore->members_size) { ++ line++; ++ DP("members: %u, line %u", members_size, line); ++ if (__ip_set_addip(index, ++ data + used + members_size, ++ set->type->reqsize)) { ++ return line; ++ } ++ members_size += set->type->reqsize; ++ } ++ ++ DP("members_size %u %u", ++ set_restore->members_size, members_size); ++ if (members_size != set_restore->members_size) ++ return line++; ++ used += set_restore->members_size; ++ } ++ ++ bindings: ++ /* Loop to restore bindings */ ++ while (used < len) { ++ line++; ++ ++ DP("restore binding, line %u", line); ++ /* Get and ensure size */ ++ if (used + sizeof(struct ip_set_hash_save) > len) ++ return line; ++ hash_save = (struct ip_set_hash_save *) (data + used); ++ used += sizeof(struct ip_set_hash_save); ++ ++ /* hash_save->id is used to store the index */ ++ index = ip_set_find_byindex(hash_save->id); ++ DP("restore binding index %u, id %u, %u -> %u", ++ index, hash_save->id, hash_save->ip, hash_save->binding); ++ if (index != hash_save->id) ++ return line; ++ ++ set = ip_set_list[hash_save->id]; ++ /* Null valued IP means default binding */ ++ if (hash_save->ip) ++ res = ip_set_hash_add(set->id, ++ hash_save->ip, ++ hash_save->binding); ++ else { ++ IP_SET_ASSERT(set->binding == IP_SET_INVALID_ID); ++ WRITE_LOCK(&ip_set_lock); ++ set->binding = hash_save->binding; ++ __ip_set_get(set->binding); ++ WRITE_UNLOCK(&ip_set_lock); ++ DP("default binding: %u", set->binding); ++ } ++ if (res != 0) ++ return line; ++ } ++ if (used != len) ++ return line; ++ ++ return 0; ++} ++ ++static int ++ip_set_sockfn_set(struct sock *sk, int optval, void *user, unsigned int len) ++{ ++ void *data; ++ int res = 0; /* Assume OK */ ++ unsigned *op; ++ struct ip_set_req_adt *req_adt; ++ ip_set_id_t index = IP_SET_INVALID_ID; ++ int (*adtfn)(ip_set_id_t index, ++ const void *data, size_t size); ++ struct fn_table { ++ int (*fn)(ip_set_id_t index, ++ const void *data, size_t size); ++ } adtfn_table[] = ++ { { ip_set_addip }, { ip_set_delip }, { ip_set_testip}, ++ { ip_set_bindip}, { ip_set_unbindip }, { ip_set_testbind }, ++ }; ++ ++ DP("optval=%d, user=%p, len=%d", optval, user, len); ++ if (!capable(CAP_NET_ADMIN)) ++ return -EPERM; ++ if (optval != SO_IP_SET) ++ return -EBADF; ++ if (len <= sizeof(unsigned)) { ++ ip_set_printk("short userdata (want >%d, got %d)", ++ sizeof(unsigned), len); ++ return -EINVAL; ++ } ++ data = vmalloc(len); ++ if (!data) { ++ DP("out of mem for %d bytes", len); ++ return -ENOMEM; ++ } ++ if (copy_from_user(data, user, len) != 0) { ++ res = -EFAULT; ++ goto done; ++ } ++ if (down_interruptible(&ip_set_app_mutex)) { ++ res = -EINTR; ++ goto done; ++ } ++ ++ op = (unsigned *)data; ++ DP("op=%x", *op); ++ ++ if (*op < IP_SET_OP_VERSION) { ++ /* Check the version at the beginning of operations */ ++ struct ip_set_req_version *req_version = ++ (struct ip_set_req_version *) data; ++ if (req_version->version != IP_SET_PROTOCOL_VERSION) { ++ res = -EPROTO; ++ goto done; ++ } ++ } ++ ++ switch (*op) { ++ case IP_SET_OP_CREATE:{ ++ struct ip_set_req_create *req_create ++ = (struct ip_set_req_create *) data; ++ ++ if (len <= sizeof(struct ip_set_req_create)) { ++ ip_set_printk("short CREATE data (want >%d, got %d)", ++ sizeof(struct ip_set_req_create), len); ++ res = -EINVAL; ++ goto done; ++ } ++ req_create->name[IP_SET_MAXNAMELEN - 1] = '\0'; ++ req_create->typename[IP_SET_MAXNAMELEN - 1] = '\0'; ++ res = ip_set_create(req_create->name, ++ req_create->typename, ++ IP_SET_INVALID_ID, ++ data + sizeof(struct ip_set_req_create), ++ len - sizeof(struct ip_set_req_create)); ++ goto done; ++ } ++ case IP_SET_OP_DESTROY:{ ++ struct ip_set_req_std *req_destroy ++ = (struct ip_set_req_std *) data; ++ ++ if (len != sizeof(struct ip_set_req_std)) { ++ ip_set_printk("invalid DESTROY data (want %d, got %d)", ++ sizeof(struct ip_set_req_std), len); ++ res = -EINVAL; ++ goto done; ++ } ++ if (strcmp(req_destroy->name, IPSET_TOKEN_ALL) == 0) { ++ /* Destroy all sets */ ++ index = IP_SET_INVALID_ID; ++ } else { ++ req_destroy->name[IP_SET_MAXNAMELEN - 1] = '\0'; ++ index = ip_set_find_byname(req_destroy->name); ++ ++ if (index == IP_SET_INVALID_ID) { ++ res = -ENOENT; ++ goto done; ++ } ++ } ++ ++ res = ip_set_destroy(index); ++ goto done; ++ } ++ case IP_SET_OP_FLUSH:{ ++ struct ip_set_req_std *req_flush = ++ (struct ip_set_req_std *) data; ++ ++ if (len != sizeof(struct ip_set_req_std)) { ++ ip_set_printk("invalid FLUSH data (want %d, got %d)", ++ sizeof(struct ip_set_req_std), len); ++ res = -EINVAL; ++ goto done; ++ } ++ if (strcmp(req_flush->name, IPSET_TOKEN_ALL) == 0) { ++ /* Flush all sets */ ++ index = IP_SET_INVALID_ID; ++ } else { ++ req_flush->name[IP_SET_MAXNAMELEN - 1] = '\0'; ++ index = ip_set_find_byname(req_flush->name); ++ ++ if (index == IP_SET_INVALID_ID) { ++ res = -ENOENT; ++ goto done; ++ } ++ } ++ res = ip_set_flush(index); ++ goto done; ++ } ++ case IP_SET_OP_RENAME:{ ++ struct ip_set_req_create *req_rename ++ = (struct ip_set_req_create *) data; ++ ++ if (len != sizeof(struct ip_set_req_create)) { ++ ip_set_printk("invalid RENAME data (want %d, got %d)", ++ sizeof(struct ip_set_req_create), len); ++ res = -EINVAL; ++ goto done; ++ } ++ ++ req_rename->name[IP_SET_MAXNAMELEN - 1] = '\0'; ++ req_rename->typename[IP_SET_MAXNAMELEN - 1] = '\0'; ++ ++ index = ip_set_find_byname(req_rename->name); ++ if (index == IP_SET_INVALID_ID) { ++ res = -ENOENT; ++ goto done; ++ } ++ res = ip_set_rename(index, req_rename->typename); ++ goto done; ++ } ++ case IP_SET_OP_SWAP:{ ++ struct ip_set_req_create *req_swap ++ = (struct ip_set_req_create *) data; ++ ip_set_id_t to_index; ++ ++ if (len != sizeof(struct ip_set_req_create)) { ++ ip_set_printk("invalid SWAP data (want %d, got %d)", ++ sizeof(struct ip_set_req_create), len); ++ res = -EINVAL; ++ goto done; ++ } ++ ++ req_swap->name[IP_SET_MAXNAMELEN - 1] = '\0'; ++ req_swap->typename[IP_SET_MAXNAMELEN - 1] = '\0'; ++ ++ index = ip_set_find_byname(req_swap->name); ++ if (index == IP_SET_INVALID_ID) { ++ res = -ENOENT; ++ goto done; ++ } ++ to_index = ip_set_find_byname(req_swap->typename); ++ if (to_index == IP_SET_INVALID_ID) { ++ res = -ENOENT; ++ goto done; ++ } ++ res = ip_set_swap(index, to_index); ++ goto done; ++ } ++ default: ++ break; /* Set identified by id */ ++ } ++ ++ /* There we may have add/del/test/bind/unbind/test_bind operations */ ++ if (*op < IP_SET_OP_ADD_IP || *op > IP_SET_OP_TEST_BIND_SET) { ++ res = -EBADMSG; ++ goto done; ++ } ++ adtfn = adtfn_table[*op - IP_SET_OP_ADD_IP].fn; ++ ++ if (len < sizeof(struct ip_set_req_adt)) { ++ ip_set_printk("short data in adt request (want >=%d, got %d)", ++ sizeof(struct ip_set_req_adt), len); ++ res = -EINVAL; ++ goto done; ++ } ++ req_adt = (struct ip_set_req_adt *) data; ++ ++ /* -U :all: :all:|:default: uses IP_SET_INVALID_ID */ ++ if (!(*op == IP_SET_OP_UNBIND_SET ++ && req_adt->index == IP_SET_INVALID_ID)) { ++ index = ip_set_find_byindex(req_adt->index); ++ if (index == IP_SET_INVALID_ID) { ++ res = -ENOENT; ++ goto done; ++ } ++ } ++ res = adtfn(index, data, len); ++ ++ done: ++ up(&ip_set_app_mutex); ++ vfree(data); ++ if (res > 0) ++ res = 0; ++ DP("final result %d", res); ++ return res; ++} ++ ++static int ++ip_set_sockfn_get(struct sock *sk, int optval, void *user, int *len) ++{ ++ int res = 0; ++ unsigned *op; ++ ip_set_id_t index = IP_SET_INVALID_ID; ++ void *data; ++ int copylen = *len; ++ ++ DP("optval=%d, user=%p, len=%d", optval, user, *len); ++ if (!capable(CAP_NET_ADMIN)) ++ return -EPERM; ++ if (optval != SO_IP_SET) ++ return -EBADF; ++ if (*len < sizeof(unsigned)) { ++ ip_set_printk("short userdata (want >=%d, got %d)", ++ sizeof(unsigned), *len); ++ return -EINVAL; ++ } ++ data = vmalloc(*len); ++ if (!data) { ++ DP("out of mem for %d bytes", *len); ++ return -ENOMEM; ++ } ++ if (copy_from_user(data, user, *len) != 0) { ++ res = -EFAULT; ++ goto done; ++ } ++ if (down_interruptible(&ip_set_app_mutex)) { ++ res = -EINTR; ++ goto done; ++ } ++ ++ op = (unsigned *) data; ++ DP("op=%x", *op); ++ ++ if (*op < IP_SET_OP_VERSION) { ++ /* Check the version at the beginning of operations */ ++ struct ip_set_req_version *req_version = ++ (struct ip_set_req_version *) data; ++ if (req_version->version != IP_SET_PROTOCOL_VERSION) { ++ res = -EPROTO; ++ goto done; ++ } ++ } ++ ++ switch (*op) { ++ case IP_SET_OP_VERSION: { ++ struct ip_set_req_version *req_version = ++ (struct ip_set_req_version *) data; ++ ++ if (*len != sizeof(struct ip_set_req_version)) { ++ ip_set_printk("invalid VERSION (want %d, got %d)", ++ sizeof(struct ip_set_req_version), ++ *len); ++ res = -EINVAL; ++ goto done; ++ } ++ ++ req_version->version = IP_SET_PROTOCOL_VERSION; ++ res = copy_to_user(user, req_version, ++ sizeof(struct ip_set_req_version)); ++ goto done; ++ } ++ case IP_SET_OP_GET_BYNAME: { ++ struct ip_set_req_get_set *req_get ++ = (struct ip_set_req_get_set *) data; ++ ++ if (*len != sizeof(struct ip_set_req_get_set)) { ++ ip_set_printk("invalid GET_BYNAME (want %d, got %d)", ++ sizeof(struct ip_set_req_get_set), *len); ++ res = -EINVAL; ++ goto done; ++ } ++ req_get->set.name[IP_SET_MAXNAMELEN - 1] = '\0'; ++ index = ip_set_find_byname(req_get->set.name); ++ req_get->set.index = index; ++ goto copy; ++ } ++ case IP_SET_OP_GET_BYINDEX: { ++ struct ip_set_req_get_set *req_get ++ = (struct ip_set_req_get_set *) data; ++ ++ if (*len != sizeof(struct ip_set_req_get_set)) { ++ ip_set_printk("invalid GET_BYINDEX (want %d, got %d)", ++ sizeof(struct ip_set_req_get_set), *len); ++ res = -EINVAL; ++ goto done; ++ } ++ req_get->set.name[IP_SET_MAXNAMELEN - 1] = '\0'; ++ index = ip_set_find_byindex(req_get->set.index); ++ strncpy(req_get->set.name, ++ index == IP_SET_INVALID_ID ? "" ++ : ip_set_list[index]->name, IP_SET_MAXNAMELEN); ++ goto copy; ++ } ++ case IP_SET_OP_ADT_GET: { ++ struct ip_set_req_adt_get *req_get ++ = (struct ip_set_req_adt_get *) data; ++ ++ if (*len != sizeof(struct ip_set_req_adt_get)) { ++ ip_set_printk("invalid ADT_GET (want %d, got %d)", ++ sizeof(struct ip_set_req_adt_get), *len); ++ res = -EINVAL; ++ goto done; ++ } ++ req_get->set.name[IP_SET_MAXNAMELEN - 1] = '\0'; ++ index = ip_set_find_byname(req_get->set.name); ++ if (index != IP_SET_INVALID_ID) { ++ req_get->set.index = index; ++ strncpy(req_get->typename, ++ ip_set_list[index]->type->typename, ++ IP_SET_MAXNAMELEN - 1); ++ } else { ++ res = -ENOENT; ++ goto done; ++ } ++ goto copy; ++ } ++ case IP_SET_OP_MAX_SETS: { ++ struct ip_set_req_max_sets *req_max_sets ++ = (struct ip_set_req_max_sets *) data; ++ ip_set_id_t i; ++ ++ if (*len != sizeof(struct ip_set_req_max_sets)) { ++ ip_set_printk("invalid MAX_SETS (want %d, got %d)", ++ sizeof(struct ip_set_req_max_sets), *len); ++ res = -EINVAL; ++ goto done; ++ } ++ ++ if (strcmp(req_max_sets->set.name, IPSET_TOKEN_ALL) == 0) { ++ req_max_sets->set.index = IP_SET_INVALID_ID; ++ } else { ++ req_max_sets->set.name[IP_SET_MAXNAMELEN - 1] = '\0'; ++ req_max_sets->set.index = ++ ip_set_find_byname(req_max_sets->set.name); ++ if (req_max_sets->set.index == IP_SET_INVALID_ID) { ++ res = -ENOENT; ++ goto done; ++ } ++ } ++ req_max_sets->max_sets = ip_set_max; ++ req_max_sets->sets = 0; ++ for (i = 0; i < ip_set_max; i++) { ++ if (ip_set_list[i] != NULL) ++ req_max_sets->sets++; ++ } ++ goto copy; ++ } ++ case IP_SET_OP_LIST_SIZE: ++ case IP_SET_OP_SAVE_SIZE: { ++ struct ip_set_req_setnames *req_setnames ++ = (struct ip_set_req_setnames *) data; ++ struct ip_set_name_list *name_list; ++ struct ip_set *set; ++ ip_set_id_t i; ++ int used; ++ ++ if (*len < sizeof(struct ip_set_req_setnames)) { ++ ip_set_printk("short LIST_SIZE (want >=%d, got %d)", ++ sizeof(struct ip_set_req_setnames), *len); ++ res = -EINVAL; ++ goto done; ++ } ++ ++ req_setnames->size = 0; ++ used = sizeof(struct ip_set_req_setnames); ++ for (i = 0; i < ip_set_max; i++) { ++ if (ip_set_list[i] == NULL) ++ continue; ++ name_list = (struct ip_set_name_list *) ++ (data + used); ++ used += sizeof(struct ip_set_name_list); ++ if (used > copylen) { ++ res = -EAGAIN; ++ goto done; ++ } ++ set = ip_set_list[i]; ++ /* Fill in index, name, etc. */ ++ name_list->index = i; ++ name_list->id = set->id; ++ strncpy(name_list->name, ++ set->name, ++ IP_SET_MAXNAMELEN - 1); ++ strncpy(name_list->typename, ++ set->type->typename, ++ IP_SET_MAXNAMELEN - 1); ++ DP("filled %s of type %s, index %u\n", ++ name_list->name, name_list->typename, ++ name_list->index); ++ if (!(req_setnames->index == IP_SET_INVALID_ID ++ || req_setnames->index == i)) ++ continue; ++ /* Update size */ ++ switch (*op) { ++ case IP_SET_OP_LIST_SIZE: { ++ req_setnames->size += sizeof(struct ip_set_list) ++ + set->type->header_size ++ + set->type->list_members_size(set); ++ FOREACH_HASH_DO(__set_hash_bindings_size_list, ++ i, &req_setnames->size); ++ break; ++ } ++ case IP_SET_OP_SAVE_SIZE: { ++ req_setnames->size += sizeof(struct ip_set_save) ++ + set->type->header_size ++ + set->type->list_members_size(set); ++ FOREACH_HASH_DO(__set_hash_bindings_size_save, ++ i, &req_setnames->size); ++ break; ++ } ++ default: ++ break; ++ } ++ } ++ if (copylen != used) { ++ res = -EAGAIN; ++ goto done; ++ } ++ goto copy; ++ } ++ case IP_SET_OP_LIST: { ++ struct ip_set_req_list *req_list ++ = (struct ip_set_req_list *) data; ++ ip_set_id_t i; ++ int used; ++ ++ if (*len < sizeof(struct ip_set_req_list)) { ++ ip_set_printk("short LIST (want >=%d, got %d)", ++ sizeof(struct ip_set_req_list), *len); ++ res = -EINVAL; ++ goto done; ++ } ++ index = req_list->index; ++ if (index != IP_SET_INVALID_ID ++ && ip_set_find_byindex(index) != index) { ++ res = -ENOENT; ++ goto done; ++ } ++ used = 0; ++ if (index == IP_SET_INVALID_ID) { ++ /* List all sets */ ++ for (i = 0; i < ip_set_max && res == 0; i++) { ++ if (ip_set_list[i] != NULL) ++ res = ip_set_list_set(i, data, &used, *len); ++ } ++ } else { ++ /* List an individual set */ ++ res = ip_set_list_set(index, data, &used, *len); ++ } ++ if (res != 0) ++ goto done; ++ else if (copylen != used) { ++ res = -EAGAIN; ++ goto done; ++ } ++ goto copy; ++ } ++ case IP_SET_OP_SAVE: { ++ struct ip_set_req_list *req_save ++ = (struct ip_set_req_list *) data; ++ ip_set_id_t i; ++ int used; ++ ++ if (*len < sizeof(struct ip_set_req_list)) { ++ ip_set_printk("short SAVE (want >=%d, got %d)", ++ sizeof(struct ip_set_req_list), *len); ++ res = -EINVAL; ++ goto done; ++ } ++ index = req_save->index; ++ if (index != IP_SET_INVALID_ID ++ && ip_set_find_byindex(index) != index) { ++ res = -ENOENT; ++ goto done; ++ } ++ used = 0; ++ if (index == IP_SET_INVALID_ID) { ++ /* Save all sets */ ++ for (i = 0; i < ip_set_max && res == 0; i++) { ++ if (ip_set_list[i] != NULL) ++ res = ip_set_save_set(i, data, &used, *len); ++ } ++ } else { ++ /* Save an individual set */ ++ res = ip_set_save_set(index, data, &used, *len); ++ } ++ if (res == 0) ++ res = ip_set_save_bindings(index, data, &used, *len); ++ ++ if (res != 0) ++ goto done; ++ else if (copylen != used) { ++ res = -EAGAIN; ++ goto done; ++ } ++ goto copy; ++ } ++ case IP_SET_OP_RESTORE: { ++ struct ip_set_req_setnames *req_restore ++ = (struct ip_set_req_setnames *) data; ++ int line; ++ ++ if (*len < sizeof(struct ip_set_req_setnames) ++ || *len != req_restore->size) { ++ ip_set_printk("invalid RESTORE (want =%d, got %d)", ++ req_restore->size, *len); ++ res = -EINVAL; ++ goto done; ++ } ++ line = ip_set_restore(data + sizeof(struct ip_set_req_setnames), ++ req_restore->size - sizeof(struct ip_set_req_setnames)); ++ DP("ip_set_restore: %u", line); ++ if (line != 0) { ++ res = -EAGAIN; ++ req_restore->size = line; ++ copylen = sizeof(struct ip_set_req_setnames); ++ goto copy; ++ } ++ goto done; ++ } ++ default: ++ res = -EBADMSG; ++ goto done; ++ } /* end of switch(op) */ ++ ++ copy: ++ DP("set %s, copylen %u", index != IP_SET_INVALID_ID ++ && ip_set_list[index] ++ ? ip_set_list[index]->name ++ : ":all:", copylen); ++ if (res == 0) ++ res = copy_to_user(user, data, copylen); ++ else ++ copy_to_user(user, data, copylen); ++ ++ done: ++ up(&ip_set_app_mutex); ++ vfree(data); ++ if (res > 0) ++ res = 0; ++ DP("final result %d", res); ++ return res; ++} ++ ++static struct nf_sockopt_ops so_set = { ++ .pf = PF_INET, ++ .set_optmin = SO_IP_SET, ++ .set_optmax = SO_IP_SET + 1, ++ .set = &ip_set_sockfn_set, ++ .get_optmin = SO_IP_SET, ++ .get_optmax = SO_IP_SET + 1, ++ .get = &ip_set_sockfn_get, ++ .use = 0 ++}; ++ ++static int max_sets, hash_size; ++module_param(max_sets, int, 0600); ++MODULE_PARM_DESC(max_sets, "maximal number of sets"); ++module_param(hash_size, int, 0600); ++MODULE_PARM_DESC(hash_size, "hash size for bindings"); ++MODULE_LICENSE("GPL"); ++MODULE_AUTHOR("Jozsef Kadlecsik "); ++MODULE_DESCRIPTION("module implementing core IP set support"); ++ ++static int __init init(void) ++{ ++ int res; ++ ip_set_id_t i; ++ ++ get_random_bytes(&ip_set_hash_random, 4); ++ if (max_sets) ++ ip_set_max = max_sets; ++ ip_set_list = vmalloc(sizeof(struct ip_set *) * ip_set_max); ++ if (!ip_set_list) { ++ printk(KERN_ERR "Unable to create ip_set_list\n"); ++ return -ENOMEM; ++ } ++ memset(ip_set_list, 0, sizeof(struct ip_set *) * ip_set_max); ++ if (hash_size) ++ ip_set_bindings_hash_size = hash_size; ++ ip_set_hash = vmalloc(sizeof(struct list_head) * ip_set_bindings_hash_size); ++ if (!ip_set_hash) { ++ printk(KERN_ERR "Unable to create ip_set_hash\n"); ++ vfree(ip_set_list); ++ return -ENOMEM; ++ } ++ for (i = 0; i < ip_set_bindings_hash_size; i++) ++ INIT_LIST_HEAD(&ip_set_hash[i]); ++ ++ INIT_LIST_HEAD(&set_type_list); ++ ++ res = nf_register_sockopt(&so_set); ++ if (res != 0) { ++ ip_set_printk("SO_SET registry failed: %d", res); ++ vfree(ip_set_list); ++ vfree(ip_set_hash); ++ return res; ++ } ++ return 0; ++} ++ ++static void __exit fini(void) ++{ ++ /* There can't be any existing set or binding */ ++ nf_unregister_sockopt(&so_set); ++ vfree(ip_set_list); ++ vfree(ip_set_hash); ++ DP("these are the famous last words"); ++} ++ ++EXPORT_SYMBOL(ip_set_register_set_type); ++EXPORT_SYMBOL(ip_set_unregister_set_type); ++ ++EXPORT_SYMBOL(ip_set_get_byname); ++EXPORT_SYMBOL(ip_set_get_byindex); ++EXPORT_SYMBOL(ip_set_put); ++ ++EXPORT_SYMBOL(ip_set_addip_kernel); ++EXPORT_SYMBOL(ip_set_delip_kernel); ++EXPORT_SYMBOL(ip_set_testip_kernel); ++ ++module_init(init); ++module_exit(fini); +diff -urN linux-2.6.11/net/ipv4/netfilter/ip_set_iphash.c linux.sinabox/net/ipv4/netfilter/ip_set_iphash.c +--- linux-2.6.11/net/ipv4/netfilter/ip_set_iphash.c 1970-01-01 01:00:00.000000000 +0100 ++++ linux.sinabox/net/ipv4/netfilter/ip_set_iphash.c 2005-03-24 19:22:37.000000000 +0100 +@@ -0,0 +1,379 @@ ++/* Copyright (C) 2003-2004 Jozsef Kadlecsik ++ * ++ * This program is free software; you can redistribute it and/or modify ++ * it under the terms of the GNU General Public License version 2 as ++ * published by the Free Software Foundation. ++ */ ++ ++/* Kernel module implementing an ip hash set */ ++ ++#include ++#include ++#include ++#include ++#include ++#include ++#include ++#include ++#include ++#include ++#include ++ ++#include ++ ++#include ++#include ++#include ++#include ++ ++static inline __u32 ++jhash_ip(const struct ip_set_iphash *map, ip_set_ip_t ip) ++{ ++ return jhash_1word(ip, map->initval); ++} ++ ++static inline __u32 ++randhash_ip(const struct ip_set_iphash *map, ip_set_ip_t ip) ++{ ++ return (1 + ip % map->prime); ++} ++ ++static inline __u32 ++hash_id(struct ip_set *set, ip_set_ip_t ip, ip_set_ip_t *hash_ip) ++{ ++ struct ip_set_iphash *map = (struct ip_set_iphash *) set->data; ++ __u32 jhash, randhash, id; ++ u_int16_t i; ++ ++ *hash_ip = ip & map->netmask; ++ jhash = jhash_ip(map, *hash_ip); ++ randhash = randhash_ip(map, *hash_ip); ++ DP("set: %s, ip:%u.%u.%u.%u, %u.%u.%u.%u, %u.%u.%u.%u", ++ set->name, HIPQUAD(ip), HIPQUAD(*hash_ip), HIPQUAD(map->netmask)); ++ ++ for (i = 0; i < map->probes; i++) { ++ id = (jhash + i * randhash) % map->hashsize; ++ DP("hash key: %u", id); ++ if (map->members[id] == *hash_ip) ++ return id; ++ /* No shortcut at testing - there can be deleted ++ * entries. */ ++ } ++ return UINT_MAX; ++} ++ ++static inline int ++__testip(struct ip_set *set, ip_set_ip_t ip, ip_set_ip_t *hash_ip) ++{ ++ return (hash_id(set, ip, hash_ip) != UINT_MAX); ++} ++ ++static int ++testip(struct ip_set *set, const void *data, size_t size, ++ ip_set_ip_t *hash_ip) ++{ ++ struct ip_set_req_iphash *req = ++ (struct ip_set_req_iphash *) data; ++ ++ if (size != sizeof(struct ip_set_req_iphash)) { ++ ip_set_printk("data length wrong (want %d, have %d)", ++ sizeof(struct ip_set_req_iphash), ++ size); ++ return -EINVAL; ++ } ++ return __testip(set, req->ip, hash_ip); ++} ++ ++static int ++testip_kernel(struct ip_set *set, const struct sk_buff *skb, ++ u_int32_t flags, ip_set_ip_t *hash_ip) ++{ ++ return __testip(set, ++ ntohl(flags & IPSET_SRC ? skb->nh.iph->saddr ++ : skb->nh.iph->daddr), ++ hash_ip); ++} ++ ++static inline int ++__addip(struct ip_set_iphash *map, ip_set_ip_t ip, ip_set_ip_t *hash_ip) ++{ ++ __u32 jhash, randhash, probe; ++ u_int16_t i; ++ ++ *hash_ip = ip & map->netmask; ++ jhash = jhash_ip(map, *hash_ip); ++ randhash = randhash_ip(map, *hash_ip); ++ ++ for (i = 0; i < map->probes; i++) { ++ probe = (jhash + i * randhash) % map->hashsize; ++ if (map->members[probe] == *hash_ip) ++ return -EEXIST; ++ if (!map->members[probe]) { ++ map->members[probe] = *hash_ip; ++ return 0; ++ } ++ } ++ /* Trigger rehashing */ ++ return -EAGAIN; ++} ++ ++static int ++addip(struct ip_set *set, const void *data, size_t size, ++ ip_set_ip_t *hash_ip) ++{ ++ struct ip_set_req_iphash *req = ++ (struct ip_set_req_iphash *) data; ++ ++ if (size != sizeof(struct ip_set_req_iphash)) { ++ ip_set_printk("data length wrong (want %d, have %d)", ++ sizeof(struct ip_set_req_iphash), ++ size); ++ return -EINVAL; ++ } ++ return __addip((struct ip_set_iphash *) set->data, req->ip, hash_ip); ++} ++ ++static int ++addip_kernel(struct ip_set *set, const struct sk_buff *skb, ++ u_int32_t flags, ip_set_ip_t *hash_ip) ++{ ++ return __addip((struct ip_set_iphash *) set->data, ++ ntohl(flags & IPSET_SRC ? skb->nh.iph->saddr ++ : skb->nh.iph->daddr), ++ hash_ip); ++} ++ ++static int retry(struct ip_set *set) ++{ ++ struct ip_set_iphash *map = (struct ip_set_iphash *) set->data; ++ ip_set_ip_t hash_ip, *members; ++ u_int32_t i, hashsize; ++ unsigned newbytes; ++ int res; ++ struct ip_set_iphash tmp = { ++ .hashsize = map->hashsize, ++ .probes = map->probes, ++ .resize = map->resize, ++ .netmask = map->netmask, ++ }; ++ ++ if (map->resize == 0) ++ return -ERANGE; ++ ++ again: ++ res = 0; ++ ++ /* Calculate new parameters */ ++ get_random_bytes(&tmp.initval, 4); ++ hashsize = tmp.hashsize + (tmp.hashsize * map->resize)/100; ++ if (hashsize == tmp.hashsize) ++ hashsize++; ++ tmp.prime = make_prime(hashsize); ++ ++ ip_set_printk("rehashing of set %s triggered: " ++ "hashsize grows from %u to %u", ++ set->name, tmp.hashsize, hashsize); ++ tmp.hashsize = hashsize; ++ ++ newbytes = hashsize * sizeof(ip_set_ip_t); ++ tmp.members = ip_set_malloc(newbytes); ++ if (!tmp.members) { ++ DP("out of memory for %d bytes", newbytes); ++ return -ENOMEM; ++ } ++ memset(tmp.members, 0, newbytes); ++ ++ write_lock_bh(&set->lock); ++ map = (struct ip_set_iphash *) set->data; /* Play safe */ ++ for (i = 0; i < map->hashsize && res == 0; i++) { ++ if (map->members[i]) ++ res = __addip(&tmp, map->members[i], &hash_ip); ++ } ++ if (res) { ++ /* Failure, try again */ ++ write_unlock_bh(&set->lock); ++ ip_set_free(tmp.members, newbytes); ++ goto again; ++ } ++ ++ /* Success at resizing! */ ++ members = map->members; ++ hashsize = map->hashsize; ++ ++ map->initval = tmp.initval; ++ map->prime = tmp.prime; ++ map->hashsize = tmp.hashsize; ++ map->members = tmp.members; ++ write_unlock_bh(&set->lock); ++ ++ ip_set_free(members, hashsize * sizeof(ip_set_ip_t)); ++ ++ return 0; ++} ++ ++static inline int ++__delip(struct ip_set *set, ip_set_ip_t ip, ip_set_ip_t *hash_ip) ++{ ++ struct ip_set_iphash *map = (struct ip_set_iphash *) set->data; ++ ip_set_ip_t id = hash_id(set, ip, hash_ip); ++ ++ if (id == UINT_MAX) ++ return -EEXIST; ++ ++ map->members[id] = 0; ++ return 0; ++} ++ ++static int ++delip(struct ip_set *set, const void *data, size_t size, ++ ip_set_ip_t *hash_ip) ++{ ++ struct ip_set_req_iphash *req = ++ (struct ip_set_req_iphash *) data; ++ ++ if (size != sizeof(struct ip_set_req_iphash)) { ++ ip_set_printk("data length wrong (want %d, have %d)", ++ sizeof(struct ip_set_req_iphash), ++ size); ++ return -EINVAL; ++ } ++ return __delip(set, req->ip, hash_ip); ++} ++ ++static int ++delip_kernel(struct ip_set *set, const struct sk_buff *skb, ++ u_int32_t flags, ip_set_ip_t *hash_ip) ++{ ++ return __delip(set, ++ ntohl(flags & IPSET_SRC ? skb->nh.iph->saddr ++ : skb->nh.iph->daddr), ++ hash_ip); ++} ++ ++static int create(struct ip_set *set, const void *data, size_t size) ++{ ++ unsigned newbytes; ++ struct ip_set_req_iphash_create *req = ++ (struct ip_set_req_iphash_create *) data; ++ struct ip_set_iphash *map; ++ ++ if (size != sizeof(struct ip_set_req_iphash_create)) { ++ ip_set_printk("data length wrong (want %d, have %d)", ++ sizeof(struct ip_set_req_iphash_create), ++ size); ++ return -EINVAL; ++ } ++ ++ if (req->hashsize < 1) { ++ ip_set_printk("hashsize too small"); ++ return -ENOEXEC; ++ } ++ ++ map = kmalloc(sizeof(struct ip_set_iphash), GFP_KERNEL); ++ if (!map) { ++ DP("out of memory for %d bytes", ++ sizeof(struct ip_set_iphash)); ++ return -ENOMEM; ++ } ++ get_random_bytes(&map->initval, 4); ++ map->prime = make_prime(req->hashsize); ++ map->hashsize = req->hashsize; ++ map->probes = req->probes; ++ map->resize = req->resize; ++ map->netmask = req->netmask; ++ newbytes = map->hashsize * sizeof(ip_set_ip_t); ++ map->members = ip_set_malloc(newbytes); ++ if (!map->members) { ++ DP("out of memory for %d bytes", newbytes); ++ kfree(map); ++ return -ENOMEM; ++ } ++ memset(map->members, 0, newbytes); ++ ++ set->data = map; ++ return 0; ++} ++ ++static void destroy(struct ip_set *set) ++{ ++ struct ip_set_iphash *map = (struct ip_set_iphash *) set->data; ++ ++ ip_set_free(map->members, map->hashsize * sizeof(ip_set_ip_t)); ++ kfree(map); ++ ++ set->data = NULL; ++} ++ ++static void flush(struct ip_set *set) ++{ ++ struct ip_set_iphash *map = (struct ip_set_iphash *) set->data; ++ memset(map->members, 0, map->hashsize * sizeof(ip_set_ip_t)); ++} ++ ++static void list_header(const struct ip_set *set, void *data) ++{ ++ struct ip_set_iphash *map = (struct ip_set_iphash *) set->data; ++ struct ip_set_req_iphash_create *header = ++ (struct ip_set_req_iphash_create *) data; ++ ++ header->hashsize = map->hashsize; ++ header->probes = map->probes; ++ header->resize = map->resize; ++ header->netmask = map->netmask; ++} ++ ++static int list_members_size(const struct ip_set *set) ++{ ++ struct ip_set_iphash *map = (struct ip_set_iphash *) set->data; ++ ++ return (map->hashsize * sizeof(ip_set_ip_t)); ++} ++ ++static void list_members(const struct ip_set *set, void *data) ++{ ++ struct ip_set_iphash *map = (struct ip_set_iphash *) set->data; ++ int bytes = map->hashsize * sizeof(ip_set_ip_t); ++ ++ memcpy(data, map->members, bytes); ++} ++ ++static struct ip_set_type ip_set_iphash = { ++ .typename = SETTYPE_NAME, ++ .typecode = IPSET_TYPE_IP, ++ .protocol_version = IP_SET_PROTOCOL_VERSION, ++ .create = &create, ++ .destroy = &destroy, ++ .flush = &flush, ++ .reqsize = sizeof(struct ip_set_req_iphash), ++ .addip = &addip, ++ .addip_kernel = &addip_kernel, ++ .retry = &retry, ++ .delip = &delip, ++ .delip_kernel = &delip_kernel, ++ .testip = &testip, ++ .testip_kernel = &testip_kernel, ++ .header_size = sizeof(struct ip_set_req_iphash_create), ++ .list_header = &list_header, ++ .list_members_size = &list_members_size, ++ .list_members = &list_members, ++ .me = THIS_MODULE, ++}; ++ ++MODULE_LICENSE("GPL"); ++MODULE_AUTHOR("Jozsef Kadlecsik "); ++MODULE_DESCRIPTION("iphash type of IP sets"); ++ ++static int __init init(void) ++{ ++ init_max_malloc_size(); ++ return ip_set_register_set_type(&ip_set_iphash); ++} ++ ++static void __exit fini(void) ++{ ++ /* FIXME: possible race with ip_set_create() */ ++ ip_set_unregister_set_type(&ip_set_iphash); ++} ++ ++module_init(init); ++module_exit(fini); +diff -urN linux-2.6.11/net/ipv4/netfilter/ip_set_ipmap.c linux.sinabox/net/ipv4/netfilter/ip_set_ipmap.c +--- linux-2.6.11/net/ipv4/netfilter/ip_set_ipmap.c 1970-01-01 01:00:00.000000000 +0100 ++++ linux.sinabox/net/ipv4/netfilter/ip_set_ipmap.c 2005-03-24 19:22:37.000000000 +0100 +@@ -0,0 +1,313 @@ ++/* Copyright (C) 2000-2002 Joakim Axelsson ++ * Patrick Schaaf ++ * Copyright (C) 2003-2004 Jozsef Kadlecsik ++ * ++ * This program is free software; you can redistribute it and/or modify ++ * it under the terms of the GNU General Public License version 2 as ++ * published by the Free Software Foundation. ++ */ ++ ++/* Kernel module implementing an IP set type: the single bitmap type */ ++ ++#include ++#include ++#include ++#include ++#include ++#include ++#include ++#include ++#include ++ ++#include ++ ++static inline ip_set_ip_t ++ip_to_id(const struct ip_set_ipmap *map, ip_set_ip_t ip) ++{ ++ return (ip - map->first_ip)/map->hosts; ++} ++ ++static inline int ++__testip(struct ip_set *set, ip_set_ip_t ip, ip_set_ip_t *hash_ip) ++{ ++ struct ip_set_ipmap *map = (struct ip_set_ipmap *) set->data; ++ ++ if (ip < map->first_ip || ip > map->last_ip) ++ return -ERANGE; ++ ++ *hash_ip = ip & map->netmask; ++ DP("set: %s, ip:%u.%u.%u.%u, %u.%u.%u.%u", ++ set->name, HIPQUAD(ip), HIPQUAD(*hash_ip)); ++ return !!test_bit(ip_to_id(map, *hash_ip), map->members); ++} ++ ++static int ++testip(struct ip_set *set, const void *data, size_t size, ++ ip_set_ip_t *hash_ip) ++{ ++ struct ip_set_req_ipmap *req = ++ (struct ip_set_req_ipmap *) data; ++ ++ if (size != sizeof(struct ip_set_req_ipmap)) { ++ ip_set_printk("data length wrong (want %d, have %d)", ++ sizeof(struct ip_set_req_ipmap), ++ size); ++ return -EINVAL; ++ } ++ return __testip(set, req->ip, hash_ip); ++} ++ ++static int ++testip_kernel(struct ip_set *set, ++ const struct sk_buff *skb, ++ u_int32_t flags, ++ ip_set_ip_t *hash_ip) ++{ ++ int res; ++ ++ DP("flag: %s src: %u.%u.%u.%u dst: %u.%u.%u.%u", ++ flags & IPSET_SRC ? "SRC" : "DST", ++ NIPQUAD(skb->nh.iph->saddr), ++ NIPQUAD(skb->nh.iph->daddr)); ++ ++ res = __testip(set, ++ ntohl(flags & IPSET_SRC ? skb->nh.iph->saddr ++ : skb->nh.iph->daddr), ++ hash_ip); ++ return (res < 0 ? 0 : res); ++} ++ ++static inline int ++__addip(struct ip_set *set, ip_set_ip_t ip, ip_set_ip_t *hash_ip) ++{ ++ struct ip_set_ipmap *map = (struct ip_set_ipmap *) set->data; ++ ++ if (ip < map->first_ip || ip > map->last_ip) ++ return -ERANGE; ++ ++ *hash_ip = ip & map->netmask; ++ DP("%u.%u.%u.%u, %u.%u.%u.%u", HIPQUAD(ip), HIPQUAD(*hash_ip)); ++ if (test_and_set_bit(ip_to_id(map, *hash_ip), map->members)) ++ return -EEXIST; ++ ++ return 0; ++} ++ ++static int ++addip(struct ip_set *set, const void *data, size_t size, ++ ip_set_ip_t *hash_ip) ++{ ++ struct ip_set_req_ipmap *req = ++ (struct ip_set_req_ipmap *) data; ++ ++ if (size != sizeof(struct ip_set_req_ipmap)) { ++ ip_set_printk("data length wrong (want %d, have %d)", ++ sizeof(struct ip_set_req_ipmap), ++ size); ++ return -EINVAL; ++ } ++ DP("%u.%u.%u.%u", HIPQUAD(req->ip)); ++ return __addip(set, req->ip, hash_ip); ++} ++ ++static int ++addip_kernel(struct ip_set *set, const struct sk_buff *skb, ++ u_int32_t flags, ip_set_ip_t *hash_ip) ++{ ++ return __addip(set, ++ ntohl(flags & IPSET_SRC ? skb->nh.iph->saddr ++ : skb->nh.iph->daddr), ++ hash_ip); ++} ++ ++static inline int ++__delip(struct ip_set *set, ip_set_ip_t ip, ip_set_ip_t *hash_ip) ++{ ++ struct ip_set_ipmap *map = (struct ip_set_ipmap *) set->data; ++ ++ if (ip < map->first_ip || ip > map->last_ip) ++ return -ERANGE; ++ ++ *hash_ip = ip & map->netmask; ++ DP("%u.%u.%u.%u, %u.%u.%u.%u", HIPQUAD(ip), HIPQUAD(*hash_ip)); ++ if (!test_and_clear_bit(ip_to_id(map, *hash_ip), map->members)) ++ return -EEXIST; ++ ++ return 0; ++} ++ ++static int ++delip(struct ip_set *set, const void *data, size_t size, ++ ip_set_ip_t *hash_ip) ++{ ++ struct ip_set_req_ipmap *req = ++ (struct ip_set_req_ipmap *) data; ++ ++ if (size != sizeof(struct ip_set_req_ipmap)) { ++ ip_set_printk("data length wrong (want %d, have %d)", ++ sizeof(struct ip_set_req_ipmap), ++ size); ++ return -EINVAL; ++ } ++ return __delip(set, req->ip, hash_ip); ++} ++ ++static int ++delip_kernel(struct ip_set *set, const struct sk_buff *skb, ++ u_int32_t flags, ip_set_ip_t *hash_ip) ++{ ++ return __delip(set, ++ ntohl(flags & IPSET_SRC ? skb->nh.iph->saddr ++ : skb->nh.iph->daddr), ++ hash_ip); ++} ++ ++static int create(struct ip_set *set, const void *data, size_t size) ++{ ++ int newbytes; ++ struct ip_set_req_ipmap_create *req = ++ (struct ip_set_req_ipmap_create *) data; ++ struct ip_set_ipmap *map; ++ ++ if (size != sizeof(struct ip_set_req_ipmap_create)) { ++ ip_set_printk("data length wrong (want %d, have %d)", ++ sizeof(struct ip_set_req_ipmap_create), ++ size); ++ return -EINVAL; ++ } ++ ++ DP("from %u.%u.%u.%u to %u.%u.%u.%u", ++ HIPQUAD(req->from), HIPQUAD(req->to)); ++ ++ if (req->from > req->to) { ++ DP("bad ip range"); ++ return -ENOEXEC; ++ } ++ ++ if (req->to - req->from > MAX_RANGE) { ++ ip_set_printk("range too big (max %d addresses)", ++ MAX_RANGE); ++ return -ENOEXEC; ++ } ++ ++ map = kmalloc(sizeof(struct ip_set_ipmap), GFP_KERNEL); ++ if (!map) { ++ DP("out of memory for %d bytes", ++ sizeof(struct ip_set_ipmap)); ++ return -ENOMEM; ++ } ++ map->first_ip = req->from; ++ map->last_ip = req->to; ++ map->netmask = req->netmask; ++ ++ if (req->netmask == 0xFFFFFFFF) { ++ map->hosts = 1; ++ map->sizeid = map->last_ip - map->first_ip + 1; ++ } else { ++ unsigned int mask_bits, netmask_bits; ++ ip_set_ip_t mask; ++ ++ map->first_ip &= map->netmask; /* Should we better bark? */ ++ ++ mask = range_to_mask(map->first_ip, map->last_ip, &mask_bits); ++ netmask_bits = mask_to_bits(map->netmask); ++ ++ if (!mask || netmask_bits <= mask_bits) ++ return -ENOEXEC; ++ ++ map->hosts = 2 << (32 - netmask_bits - 1); ++ map->sizeid = 2 << (netmask_bits - mask_bits - 1); ++ } ++ newbytes = bitmap_bytes(0, map->sizeid - 1); ++ map->members = kmalloc(newbytes, GFP_KERNEL); ++ if (!map->members) { ++ DP("out of memory for %d bytes", newbytes); ++ kfree(map); ++ return -ENOMEM; ++ } ++ memset(map->members, 0, newbytes); ++ ++ set->data = map; ++ return 0; ++} ++ ++static void destroy(struct ip_set *set) ++{ ++ struct ip_set_ipmap *map = (struct ip_set_ipmap *) set->data; ++ ++ kfree(map->members); ++ kfree(map); ++ ++ set->data = NULL; ++} ++ ++static void flush(struct ip_set *set) ++{ ++ struct ip_set_ipmap *map = (struct ip_set_ipmap *) set->data; ++ memset(map->members, 0, bitmap_bytes(0, map->sizeid - 1)); ++} ++ ++static void list_header(const struct ip_set *set, void *data) ++{ ++ struct ip_set_ipmap *map = (struct ip_set_ipmap *) set->data; ++ struct ip_set_req_ipmap_create *header = ++ (struct ip_set_req_ipmap_create *) data; ++ ++ header->from = map->first_ip; ++ header->to = map->last_ip; ++ header->netmask = map->netmask; ++} ++ ++static int list_members_size(const struct ip_set *set) ++{ ++ struct ip_set_ipmap *map = (struct ip_set_ipmap *) set->data; ++ ++ return bitmap_bytes(0, map->sizeid - 1); ++} ++ ++static void list_members(const struct ip_set *set, void *data) ++{ ++ struct ip_set_ipmap *map = (struct ip_set_ipmap *) set->data; ++ int bytes = bitmap_bytes(0, map->sizeid - 1); ++ ++ memcpy(data, map->members, bytes); ++} ++ ++static struct ip_set_type ip_set_ipmap = { ++ .typename = SETTYPE_NAME, ++ .typecode = IPSET_TYPE_IP, ++ .protocol_version = IP_SET_PROTOCOL_VERSION, ++ .create = &create, ++ .destroy = &destroy, ++ .flush = &flush, ++ .reqsize = sizeof(struct ip_set_req_ipmap), ++ .addip = &addip, ++ .addip_kernel = &addip_kernel, ++ .delip = &delip, ++ .delip_kernel = &delip_kernel, ++ .testip = &testip, ++ .testip_kernel = &testip_kernel, ++ .header_size = sizeof(struct ip_set_req_ipmap_create), ++ .list_header = &list_header, ++ .list_members_size = &list_members_size, ++ .list_members = &list_members, ++ .me = THIS_MODULE, ++}; ++ ++MODULE_LICENSE("GPL"); ++MODULE_AUTHOR("Jozsef Kadlecsik "); ++MODULE_DESCRIPTION("ipmap type of IP sets"); ++ ++static int __init init(void) ++{ ++ return ip_set_register_set_type(&ip_set_ipmap); ++} ++ ++static void __exit fini(void) ++{ ++ /* FIXME: possible race with ip_set_create() */ ++ ip_set_unregister_set_type(&ip_set_ipmap); ++} ++ ++module_init(init); ++module_exit(fini); +diff -urN linux-2.6.11/net/ipv4/netfilter/ip_set_macipmap.c linux.sinabox/net/ipv4/netfilter/ip_set_macipmap.c +--- linux-2.6.11/net/ipv4/netfilter/ip_set_macipmap.c 1970-01-01 01:00:00.000000000 +0100 ++++ linux.sinabox/net/ipv4/netfilter/ip_set_macipmap.c 2005-03-24 19:22:37.000000000 +0100 +@@ -0,0 +1,338 @@ ++/* Copyright (C) 2000-2002 Joakim Axelsson ++ * Patrick Schaaf ++ * Martin Josefsson ++ * Copyright (C) 2003-2004 Jozsef Kadlecsik ++ * ++ * This program is free software; you can redistribute it and/or modify ++ * it under the terms of the GNU General Public License version 2 as ++ * published by the Free Software Foundation. ++ */ ++ ++/* Kernel module implementing an IP set type: the macipmap type */ ++ ++#include ++#include ++#include ++#include ++#include ++#include ++#include ++#include ++#include ++#include ++#include ++ ++#include ++#include ++ ++static int ++testip(struct ip_set *set, const void *data, size_t size, ip_set_ip_t *hash_ip) ++{ ++ struct ip_set_macipmap *map = (struct ip_set_macipmap *) set->data; ++ struct ip_set_macip *table = (struct ip_set_macip *) map->members; ++ struct ip_set_req_macipmap *req = (struct ip_set_req_macipmap *) data; ++ ++ if (size != sizeof(struct ip_set_req_macipmap)) { ++ ip_set_printk("data length wrong (want %d, have %d)", ++ sizeof(struct ip_set_req_macipmap), ++ size); ++ return -EINVAL; ++ } ++ ++ if (req->ip < map->first_ip || req->ip > map->last_ip) ++ return -ERANGE; ++ ++ *hash_ip = req->ip; ++ DP("set: %s, ip:%u.%u.%u.%u, %u.%u.%u.%u", ++ set->name, HIPQUAD(req->ip), HIPQUAD(*hash_ip)); ++ if (test_bit(IPSET_MACIP_ISSET, ++ (void *) &table[req->ip - map->first_ip].flags)) { ++ return (memcmp(req->ethernet, ++ &table[req->ip - map->first_ip].ethernet, ++ ETH_ALEN) == 0); ++ } else { ++ return (map->flags & IPSET_MACIP_MATCHUNSET ? 1 : 0); ++ } ++} ++ ++static int ++testip_kernel(struct ip_set *set, const struct sk_buff *skb, ++ u_int32_t flags, ip_set_ip_t *hash_ip) ++{ ++ struct ip_set_macipmap *map = ++ (struct ip_set_macipmap *) set->data; ++ struct ip_set_macip *table = ++ (struct ip_set_macip *) map->members; ++ ip_set_ip_t ip; ++ ++ ip = ntohl(flags & IPSET_SRC ? skb->nh.iph->saddr ++ : skb->nh.iph->daddr); ++ DP("flag: %s src: %u.%u.%u.%u dst: %u.%u.%u.%u", ++ flags & IPSET_SRC ? "SRC" : "DST", ++ NIPQUAD(skb->nh.iph->saddr), ++ NIPQUAD(skb->nh.iph->daddr)); ++ ++ if (ip < map->first_ip || ip > map->last_ip) ++ return 0; ++ ++ *hash_ip = ip; ++ DP("set: %s, ip:%u.%u.%u.%u, %u.%u.%u.%u", ++ set->name, HIPQUAD(ip), HIPQUAD(*hash_ip)); ++ if (test_bit(IPSET_MACIP_ISSET, ++ (void *) &table[ip - map->first_ip].flags)) { ++ /* Is mac pointer valid? ++ * If so, compare... */ ++ return (skb->mac.raw >= skb->head ++ && (skb->mac.raw + ETH_HLEN) <= skb->data ++ && (memcmp(eth_hdr(skb)->h_source, ++ &table[ip - map->first_ip].ethernet, ++ ETH_ALEN) == 0)); ++ } else { ++ return (map->flags & IPSET_MACIP_MATCHUNSET ? 1 : 0); ++ } ++} ++ ++/* returns 0 on success */ ++static inline int ++__addip(struct ip_set *set, ++ ip_set_ip_t ip, unsigned char *ethernet, ip_set_ip_t *hash_ip) ++{ ++ struct ip_set_macipmap *map = ++ (struct ip_set_macipmap *) set->data; ++ struct ip_set_macip *table = ++ (struct ip_set_macip *) map->members; ++ ++ if (ip < map->first_ip || ip > map->last_ip) ++ return -ERANGE; ++ if (test_and_set_bit(IPSET_MACIP_ISSET, ++ (void *) &table[ip - map->first_ip].flags)) ++ return -EEXIST; ++ ++ *hash_ip = ip; ++ DP("%u.%u.%u.%u, %u.%u.%u.%u", HIPQUAD(ip), HIPQUAD(*hash_ip)); ++ memcpy(&table[ip - map->first_ip].ethernet, ethernet, ETH_ALEN); ++ return 0; ++} ++ ++static int ++addip(struct ip_set *set, const void *data, size_t size, ++ ip_set_ip_t *hash_ip) ++{ ++ struct ip_set_req_macipmap *req = ++ (struct ip_set_req_macipmap *) data; ++ ++ if (size != sizeof(struct ip_set_req_macipmap)) { ++ ip_set_printk("data length wrong (want %d, have %d)", ++ sizeof(struct ip_set_req_macipmap), ++ size); ++ return -EINVAL; ++ } ++ return __addip(set, req->ip, req->ethernet, hash_ip); ++} ++ ++static int ++addip_kernel(struct ip_set *set, const struct sk_buff *skb, ++ u_int32_t flags, ip_set_ip_t *hash_ip) ++{ ++ ip_set_ip_t ip; ++ ++ ip = ntohl(flags & IPSET_SRC ? skb->nh.iph->saddr ++ : skb->nh.iph->daddr); ++ ++ if (!(skb->mac.raw >= skb->head ++ && (skb->mac.raw + ETH_HLEN) <= skb->data)) ++ return -EINVAL; ++ ++ return __addip(set, ip, eth_hdr(skb)->h_source, hash_ip); ++} ++ ++static inline int ++__delip(struct ip_set *set, ip_set_ip_t ip, ip_set_ip_t *hash_ip) ++{ ++ struct ip_set_macipmap *map = ++ (struct ip_set_macipmap *) set->data; ++ struct ip_set_macip *table = ++ (struct ip_set_macip *) map->members; ++ ++ if (ip < map->first_ip || ip > map->last_ip) ++ return -ERANGE; ++ if (!test_and_clear_bit(IPSET_MACIP_ISSET, ++ (void *)&table[ip - map->first_ip].flags)) ++ return -EEXIST; ++ ++ *hash_ip = ip; ++ DP("%u.%u.%u.%u, %u.%u.%u.%u", HIPQUAD(ip), HIPQUAD(*hash_ip)); ++ return 0; ++} ++ ++static int ++delip(struct ip_set *set, const void *data, size_t size, ++ ip_set_ip_t *hash_ip) ++{ ++ struct ip_set_req_macipmap *req = ++ (struct ip_set_req_macipmap *) data; ++ ++ if (size != sizeof(struct ip_set_req_macipmap)) { ++ ip_set_printk("data length wrong (want %d, have %d)", ++ sizeof(struct ip_set_req_macipmap), ++ size); ++ return -EINVAL; ++ } ++ return __delip(set, req->ip, hash_ip); ++} ++ ++static int ++delip_kernel(struct ip_set *set, const struct sk_buff *skb, ++ u_int32_t flags, ip_set_ip_t *hash_ip) ++{ ++ return __delip(set, ++ ntohl(flags & IPSET_SRC ? skb->nh.iph->saddr ++ : skb->nh.iph->daddr), ++ hash_ip); ++} ++ ++static inline size_t members_size(ip_set_id_t from, ip_set_id_t to) ++{ ++ return (size_t)((to - from + 1) * sizeof(struct ip_set_macip)); ++} ++ ++static int create(struct ip_set *set, const void *data, size_t size) ++{ ++ int newbytes; ++ struct ip_set_req_macipmap_create *req = ++ (struct ip_set_req_macipmap_create *) data; ++ struct ip_set_macipmap *map; ++ ++ if (size != sizeof(struct ip_set_req_macipmap_create)) { ++ ip_set_printk("data length wrong (want %d, have %d)", ++ sizeof(struct ip_set_req_macipmap_create), ++ size); ++ return -EINVAL; ++ } ++ ++ DP("from %u.%u.%u.%u to %u.%u.%u.%u", ++ HIPQUAD(req->from), HIPQUAD(req->to)); ++ ++ if (req->from > req->to) { ++ DP("bad ip range"); ++ return -ENOEXEC; ++ } ++ ++ if (req->to - req->from > MAX_RANGE) { ++ ip_set_printk("range too big (max %d addresses)", ++ MAX_RANGE); ++ return -ENOEXEC; ++ } ++ ++ map = kmalloc(sizeof(struct ip_set_macipmap), GFP_KERNEL); ++ if (!map) { ++ DP("out of memory for %d bytes", ++ sizeof(struct ip_set_macipmap)); ++ return -ENOMEM; ++ } ++ map->flags = req->flags; ++ map->first_ip = req->from; ++ map->last_ip = req->to; ++ newbytes = members_size(map->first_ip, map->last_ip); ++ map->members = ip_set_malloc(newbytes); ++ if (!map->members) { ++ DP("out of memory for %d bytes", newbytes); ++ kfree(map); ++ return -ENOMEM; ++ } ++ memset(map->members, 0, newbytes); ++ ++ set->data = map; ++ return 0; ++} ++ ++static void destroy(struct ip_set *set) ++{ ++ struct ip_set_macipmap *map = ++ (struct ip_set_macipmap *) set->data; ++ ++ ip_set_free(map->members, members_size(map->first_ip, map->last_ip)); ++ kfree(map); ++ ++ set->data = NULL; ++} ++ ++static void flush(struct ip_set *set) ++{ ++ struct ip_set_macipmap *map = ++ (struct ip_set_macipmap *) set->data; ++ memset(map->members, 0, members_size(map->first_ip, map->last_ip)); ++} ++ ++static void list_header(const struct ip_set *set, void *data) ++{ ++ struct ip_set_macipmap *map = ++ (struct ip_set_macipmap *) set->data; ++ struct ip_set_req_macipmap_create *header = ++ (struct ip_set_req_macipmap_create *) data; ++ ++ DP("list_header %x %x %u", map->first_ip, map->last_ip, ++ map->flags); ++ ++ header->from = map->first_ip; ++ header->to = map->last_ip; ++ header->flags = map->flags; ++} ++ ++static int list_members_size(const struct ip_set *set) ++{ ++ struct ip_set_macipmap *map = ++ (struct ip_set_macipmap *) set->data; ++ ++ return members_size(map->first_ip, map->last_ip); ++} ++ ++static void list_members(const struct ip_set *set, void *data) ++{ ++ struct ip_set_macipmap *map = ++ (struct ip_set_macipmap *) set->data; ++ ++ int bytes = members_size(map->first_ip, map->last_ip); ++ ++ memcpy(data, map->members, bytes); ++} ++ ++static struct ip_set_type ip_set_macipmap = { ++ .typename = SETTYPE_NAME, ++ .typecode = IPSET_TYPE_IP, ++ .protocol_version = IP_SET_PROTOCOL_VERSION, ++ .create = &create, ++ .destroy = &destroy, ++ .flush = &flush, ++ .reqsize = sizeof(struct ip_set_req_macipmap), ++ .addip = &addip, ++ .addip_kernel = &addip_kernel, ++ .delip = &delip, ++ .delip_kernel = &delip_kernel, ++ .testip = &testip, ++ .testip_kernel = &testip_kernel, ++ .header_size = sizeof(struct ip_set_req_macipmap_create), ++ .list_header = &list_header, ++ .list_members_size = &list_members_size, ++ .list_members = &list_members, ++ .me = THIS_MODULE, ++}; ++ ++MODULE_LICENSE("GPL"); ++MODULE_AUTHOR("Jozsef Kadlecsik "); ++MODULE_DESCRIPTION("macipmap type of IP sets"); ++ ++static int __init init(void) ++{ ++ init_max_malloc_size(); ++ return ip_set_register_set_type(&ip_set_macipmap); ++} ++ ++static void __exit fini(void) ++{ ++ /* FIXME: possible race with ip_set_create() */ ++ ip_set_unregister_set_type(&ip_set_macipmap); ++} ++ ++module_init(init); ++module_exit(fini); +diff -urN linux-2.6.11/net/ipv4/netfilter/ip_set_nethash.c linux.sinabox/net/ipv4/netfilter/ip_set_nethash.c +--- linux-2.6.11/net/ipv4/netfilter/ip_set_nethash.c 1970-01-01 01:00:00.000000000 +0100 ++++ linux.sinabox/net/ipv4/netfilter/ip_set_nethash.c 2005-03-24 19:22:37.000000000 +0100 +@@ -0,0 +1,448 @@ ++/* Copyright (C) 2003-2004 Jozsef Kadlecsik ++ * ++ * This program is free software; you can redistribute it and/or modify ++ * it under the terms of the GNU General Public License version 2 as ++ * published by the Free Software Foundation. ++ */ ++ ++/* Kernel module implementing a cidr nethash set */ ++ ++#include ++#include ++#include ++#include ++#include ++#include ++#include ++#include ++#include ++#include ++#include ++ ++#include ++ ++#include ++#include ++#include ++#include ++ ++static inline __u32 ++jhash_ip(const struct ip_set_nethash *map, ip_set_ip_t ip) ++{ ++ return jhash_1word(ip, map->initval); ++} ++ ++static inline __u32 ++randhash_ip(const struct ip_set_nethash *map, ip_set_ip_t ip) ++{ ++ return (1 + ip % map->prime); ++} ++ ++static inline __u32 ++hash_id_cidr(struct ip_set_nethash *map, ++ ip_set_ip_t ip, ++ unsigned char cidr, ++ ip_set_ip_t *hash_ip) ++{ ++ __u32 jhash, randhash, id; ++ u_int16_t i; ++ ++ *hash_ip = pack(ip, cidr); ++ jhash = jhash_ip(map, *hash_ip); ++ randhash = randhash_ip(map, *hash_ip); ++ ++ for (i = 0; i < map->probes; i++) { ++ id = (jhash + i * randhash) % map->hashsize; ++ DP("hash key: %u", id); ++ if (map->members[id] == *hash_ip) ++ return id; ++ } ++ return UINT_MAX; ++} ++ ++static inline __u32 ++hash_id(struct ip_set *set, ip_set_ip_t ip, ip_set_ip_t *hash_ip) ++{ ++ struct ip_set_nethash *map = (struct ip_set_nethash *) set->data; ++ __u32 id = UINT_MAX; ++ int i; ++ ++ for (i = 0; i < 30 && map->cidr[i]; i++) { ++ id = hash_id_cidr(map, ip, map->cidr[i], hash_ip); ++ if (id != UINT_MAX) ++ break; ++ } ++ return id; ++} ++ ++static inline int ++__testip_cidr(struct ip_set *set, ip_set_ip_t ip, unsigned char cidr, ++ ip_set_ip_t *hash_ip) ++{ ++ struct ip_set_nethash *map = (struct ip_set_nethash *) set->data; ++ ++ return (hash_id_cidr(map, ip, cidr, hash_ip) != UINT_MAX); ++} ++ ++static inline int ++__testip(struct ip_set *set, ip_set_ip_t ip, ip_set_ip_t *hash_ip) ++{ ++ return (hash_id(set, ip, hash_ip) != UINT_MAX); ++} ++ ++static int ++testip(struct ip_set *set, const void *data, size_t size, ++ ip_set_ip_t *hash_ip) ++{ ++ struct ip_set_req_nethash *req = ++ (struct ip_set_req_nethash *) data; ++ ++ if (size != sizeof(struct ip_set_req_nethash)) { ++ ip_set_printk("data length wrong (want %d, have %d)", ++ sizeof(struct ip_set_req_nethash), ++ size); ++ return -EINVAL; ++ } ++ return __testip_cidr(set, req->ip, req->cidr, hash_ip); ++} ++ ++static int ++testip_kernel(struct ip_set *set, const struct sk_buff *skb, ++ u_int32_t flags, ip_set_ip_t *hash_ip) ++{ ++ return __testip(set, ++ ntohl(flags & IPSET_SRC ? skb->nh.iph->saddr ++ : skb->nh.iph->daddr), ++ hash_ip); ++} ++ ++static inline int ++__addip_base(struct ip_set_nethash *map, ip_set_ip_t ip) ++{ ++ __u32 jhash, randhash, probe; ++ u_int16_t i; ++ ++ jhash = jhash_ip(map, ip); ++ randhash = randhash_ip(map, ip); ++ ++ for (i = 0; i < map->probes; i++) { ++ probe = (jhash + i * randhash) % map->hashsize; ++ if (map->members[probe] == ip) ++ return -EEXIST; ++ if (!map->members[probe]) { ++ map->members[probe] = ip; ++ return 0; ++ } ++ } ++ /* Trigger rehashing */ ++ return -EAGAIN; ++} ++ ++static inline int ++__addip(struct ip_set_nethash *map, ip_set_ip_t ip, unsigned char cidr, ++ ip_set_ip_t *hash_ip) ++{ ++ *hash_ip = pack(ip, cidr); ++ DP("%u.%u.%u.%u/%u, %u.%u.%u.%u", HIPQUAD(ip), cidr, HIPQUAD(*hash_ip)); ++ ++ return __addip_base(map, *hash_ip); ++} ++ ++static void ++update_cidr_sizes(struct ip_set_nethash *map, unsigned char cidr) ++{ ++ unsigned char next; ++ int i; ++ ++ for (i = 0; i < 30 && map->cidr[i]; i++) { ++ if (map->cidr[i] == cidr) { ++ return; ++ } else if (map->cidr[i] < cidr) { ++ next = map->cidr[i]; ++ map->cidr[i] = cidr; ++ cidr = next; ++ } ++ } ++ if (i < 30) ++ map->cidr[i] = cidr; ++} ++ ++static int ++addip(struct ip_set *set, const void *data, size_t size, ++ ip_set_ip_t *hash_ip) ++{ ++ struct ip_set_req_nethash *req = ++ (struct ip_set_req_nethash *) data; ++ int ret; ++ ++ if (size != sizeof(struct ip_set_req_nethash)) { ++ ip_set_printk("data length wrong (want %d, have %d)", ++ sizeof(struct ip_set_req_nethash), ++ size); ++ return -EINVAL; ++ } ++ ret = __addip((struct ip_set_nethash *) set->data, ++ req->ip, req->cidr, hash_ip); ++ ++ if (ret == 0) ++ update_cidr_sizes((struct ip_set_nethash *) set->data, ++ req->cidr); ++ ++ return ret; ++} ++ ++static int ++addip_kernel(struct ip_set *set, const struct sk_buff *skb, ++ u_int32_t flags, ip_set_ip_t *hash_ip) ++{ ++ struct ip_set_nethash *map = (struct ip_set_nethash *) set->data; ++ int ret = -ERANGE; ++ ip_set_ip_t ip = ntohl(flags & IPSET_SRC ? skb->nh.iph->saddr ++ : skb->nh.iph->daddr); ++ ++ if (map->cidr[0]) ++ ret = __addip(map, ip, map->cidr[0], hash_ip); ++ ++ return ret; ++} ++ ++static int retry(struct ip_set *set) ++{ ++ struct ip_set_nethash *map = (struct ip_set_nethash *) set->data; ++ ip_set_ip_t *members; ++ u_int32_t i, hashsize; ++ unsigned newbytes; ++ int res; ++ struct ip_set_nethash tmp = { ++ .hashsize = map->hashsize, ++ .probes = map->probes, ++ .resize = map->resize ++ }; ++ ++ if (map->resize == 0) ++ return -ERANGE; ++ ++ memcpy(tmp.cidr, map->cidr, 30 * sizeof(unsigned char)); ++ again: ++ res = 0; ++ ++ /* Calculate new parameters */ ++ get_random_bytes(&tmp.initval, 4); ++ hashsize = tmp.hashsize + (tmp.hashsize * map->resize)/100; ++ if (hashsize == tmp.hashsize) ++ hashsize++; ++ tmp.prime = make_prime(hashsize); ++ ++ ip_set_printk("rehashing of set %s triggered: " ++ "hashsize grows from %u to %u", ++ set->name, tmp.hashsize, hashsize); ++ tmp.hashsize = hashsize; ++ ++ newbytes = hashsize * sizeof(ip_set_ip_t); ++ tmp.members = ip_set_malloc(newbytes); ++ if (!tmp.members) { ++ DP("out of memory for %d bytes", newbytes); ++ return -ENOMEM; ++ } ++ memset(tmp.members, 0, newbytes); ++ ++ write_lock_bh(&set->lock); ++ map = (struct ip_set_nethash *) set->data; /* Play safe */ ++ for (i = 0; i < map->hashsize && res == 0; i++) { ++ if (map->members[i]) ++ res = __addip_base(&tmp, map->members[i]); ++ } ++ if (res) { ++ /* Failure, try again */ ++ ip_set_free(tmp.members, newbytes); ++ write_unlock_bh(&set->lock); ++ goto again; ++ } ++ ++ /* Success at resizing! */ ++ members = map->members; ++ hashsize = map->hashsize; ++ ++ map->initval = tmp.initval; ++ map->prime = tmp.prime; ++ map->hashsize = tmp.hashsize; ++ map->members = tmp.members; ++ write_unlock_bh(&set->lock); ++ ++ ip_set_free(members, hashsize * sizeof(ip_set_ip_t)); ++ ++ return 0; ++} ++ ++static inline int ++__delip(struct ip_set_nethash *map, ip_set_ip_t ip, unsigned char cidr, ++ ip_set_ip_t *hash_ip) ++{ ++ ip_set_ip_t id = hash_id_cidr(map, ip, cidr, hash_ip); ++ ++ if (id == UINT_MAX) ++ return -EEXIST; ++ ++ map->members[id] = 0; ++ return 0; ++} ++ ++static int ++delip(struct ip_set *set, const void *data, size_t size, ++ ip_set_ip_t *hash_ip) ++{ ++ struct ip_set_req_nethash *req = ++ (struct ip_set_req_nethash *) data; ++ ++ if (size != sizeof(struct ip_set_req_nethash)) { ++ ip_set_printk("data length wrong (want %d, have %d)", ++ sizeof(struct ip_set_req_nethash), ++ size); ++ return -EINVAL; ++ } ++ /* TODO: no garbage collection in map->cidr */ ++ return __delip((struct ip_set_nethash *) set->data, ++ req->ip, req->cidr, hash_ip); ++} ++ ++static int ++delip_kernel(struct ip_set *set, const struct sk_buff *skb, ++ u_int32_t flags, ip_set_ip_t *hash_ip) ++{ ++ struct ip_set_nethash *map = (struct ip_set_nethash *) set->data; ++ int ret = -ERANGE; ++ ip_set_ip_t ip = ntohl(flags & IPSET_SRC ? skb->nh.iph->saddr ++ : skb->nh.iph->daddr); ++ ++ if (map->cidr[0]) ++ ret = __delip(map, ip, map->cidr[0], hash_ip); ++ ++ return ret; ++} ++ ++static int create(struct ip_set *set, const void *data, size_t size) ++{ ++ unsigned newbytes; ++ struct ip_set_req_nethash_create *req = ++ (struct ip_set_req_nethash_create *) data; ++ struct ip_set_nethash *map; ++ ++ if (size != sizeof(struct ip_set_req_nethash_create)) { ++ ip_set_printk("data length wrong (want %d, have %d)", ++ sizeof(struct ip_set_req_nethash_create), ++ size); ++ return -EINVAL; ++ } ++ ++ if (req->hashsize < 1) { ++ ip_set_printk("hashsize too small"); ++ return -ENOEXEC; ++ } ++ ++ map = kmalloc(sizeof(struct ip_set_nethash), GFP_KERNEL); ++ if (!map) { ++ DP("out of memory for %d bytes", ++ sizeof(struct ip_set_nethash)); ++ return -ENOMEM; ++ } ++ get_random_bytes(&map->initval, 4); ++ map->prime = make_prime(req->hashsize); ++ map->hashsize = req->hashsize; ++ map->probes = req->probes; ++ map->resize = req->resize; ++ memset(map->cidr, 0, 30 * sizeof(unsigned char)); ++ newbytes = map->hashsize * sizeof(ip_set_ip_t); ++ map->members = ip_set_malloc(newbytes); ++ if (!map->members) { ++ DP("out of memory for %d bytes", newbytes); ++ kfree(map); ++ return -ENOMEM; ++ } ++ memset(map->members, 0, newbytes); ++ ++ set->data = map; ++ return 0; ++} ++ ++static void destroy(struct ip_set *set) ++{ ++ struct ip_set_nethash *map = (struct ip_set_nethash *) set->data; ++ ++ ip_set_free(map->members, map->hashsize * sizeof(ip_set_ip_t)); ++ kfree(map); ++ ++ set->data = NULL; ++} ++ ++static void flush(struct ip_set *set) ++{ ++ struct ip_set_nethash *map = (struct ip_set_nethash *) set->data; ++ memset(map->members, 0, map->hashsize * sizeof(ip_set_ip_t)); ++ memset(map->cidr, 0, 30 * sizeof(unsigned char)); ++} ++ ++static void list_header(const struct ip_set *set, void *data) ++{ ++ struct ip_set_nethash *map = (struct ip_set_nethash *) set->data; ++ struct ip_set_req_nethash_create *header = ++ (struct ip_set_req_nethash_create *) data; ++ ++ header->hashsize = map->hashsize; ++ header->probes = map->probes; ++ header->resize = map->resize; ++} ++ ++static int list_members_size(const struct ip_set *set) ++{ ++ struct ip_set_nethash *map = (struct ip_set_nethash *) set->data; ++ ++ return (map->hashsize * sizeof(ip_set_ip_t)); ++} ++ ++static void list_members(const struct ip_set *set, void *data) ++{ ++ struct ip_set_nethash *map = (struct ip_set_nethash *) set->data; ++ int bytes = map->hashsize * sizeof(ip_set_ip_t); ++ ++ memcpy(data, map->members, bytes); ++} ++ ++static struct ip_set_type ip_set_nethash = { ++ .typename = SETTYPE_NAME, ++ .typecode = IPSET_TYPE_IP, ++ .protocol_version = IP_SET_PROTOCOL_VERSION, ++ .create = &create, ++ .destroy = &destroy, ++ .flush = &flush, ++ .reqsize = sizeof(struct ip_set_req_nethash), ++ .addip = &addip, ++ .addip_kernel = &addip_kernel, ++ .retry = &retry, ++ .delip = &delip, ++ .delip_kernel = &delip_kernel, ++ .testip = &testip, ++ .testip_kernel = &testip_kernel, ++ .header_size = sizeof(struct ip_set_req_nethash_create), ++ .list_header = &list_header, ++ .list_members_size = &list_members_size, ++ .list_members = &list_members, ++ .me = THIS_MODULE, ++}; ++ ++MODULE_LICENSE("GPL"); ++MODULE_AUTHOR("Jozsef Kadlecsik "); ++MODULE_DESCRIPTION("nethash type of IP sets"); ++ ++static int __init init(void) ++{ ++ return ip_set_register_set_type(&ip_set_nethash); ++} ++ ++static void __exit fini(void) ++{ ++ /* FIXME: possible race with ip_set_create() */ ++ ip_set_unregister_set_type(&ip_set_nethash); ++} ++ ++module_init(init); ++module_exit(fini); +diff -urN linux-2.6.11/net/ipv4/netfilter/ip_set_portmap.c linux.sinabox/net/ipv4/netfilter/ip_set_portmap.c +--- linux-2.6.11/net/ipv4/netfilter/ip_set_portmap.c 1970-01-01 01:00:00.000000000 +0100 ++++ linux.sinabox/net/ipv4/netfilter/ip_set_portmap.c 2005-03-24 19:22:37.000000000 +0100 +@@ -0,0 +1,325 @@ ++/* Copyright (C) 2003-2004 Jozsef Kadlecsik ++ * ++ * This program is free software; you can redistribute it and/or modify ++ * it under the terms of the GNU General Public License version 2 as ++ * published by the Free Software Foundation. ++ */ ++ ++/* Kernel module implementing a port set type as a bitmap */ ++ ++#include ++#include ++#include ++#include ++#include ++#include ++#include ++#include ++#include ++#include ++#include ++ ++#include ++ ++#include ++ ++/* We must handle non-linear skbs */ ++static inline ip_set_ip_t ++get_port(const struct sk_buff *skb, u_int32_t flags) ++{ ++ struct iphdr *iph = skb->nh.iph; ++ u_int16_t offset = ntohs(iph->frag_off) & IP_OFFSET; ++ ++ switch (iph->protocol) { ++ case IPPROTO_TCP: { ++ struct tcphdr tcph; ++ ++ /* See comments at tcp_match in ip_tables.c */ ++ if (offset) ++ return INVALID_PORT; ++ ++ if (skb_copy_bits(skb, skb->nh.iph->ihl*4, &tcph, sizeof(tcph)) < 0) ++ /* No choice either */ ++ return INVALID_PORT; ++ ++ return ntohs(flags & IPSET_SRC ? ++ tcph.source : tcph.dest); ++ } ++ case IPPROTO_UDP: { ++ struct udphdr udph; ++ ++ if (offset) ++ return INVALID_PORT; ++ ++ if (skb_copy_bits(skb, skb->nh.iph->ihl*4, &udph, sizeof(udph)) < 0) ++ /* No choice either */ ++ return INVALID_PORT; ++ ++ return ntohs(flags & IPSET_SRC ? ++ udph.source : udph.dest); ++ } ++ default: ++ return INVALID_PORT; ++ } ++} ++ ++static inline int ++__testport(struct ip_set *set, ip_set_ip_t port, ip_set_ip_t *hash_port) ++{ ++ struct ip_set_portmap *map = (struct ip_set_portmap *) set->data; ++ ++ if (port < map->first_port || port > map->last_port) ++ return -ERANGE; ++ ++ *hash_port = port; ++ DP("set: %s, port:%u, %u", set->name, port, *hash_port); ++ return !!test_bit(port - map->first_port, map->members); ++} ++ ++static int ++testport(struct ip_set *set, const void *data, size_t size, ++ ip_set_ip_t *hash_port) ++{ ++ struct ip_set_req_portmap *req = ++ (struct ip_set_req_portmap *) data; ++ ++ if (size != sizeof(struct ip_set_req_portmap)) { ++ ip_set_printk("data length wrong (want %d, have %d)", ++ sizeof(struct ip_set_req_portmap), ++ size); ++ return -EINVAL; ++ } ++ return __testport(set, req->port, hash_port); ++} ++ ++static int ++testport_kernel(struct ip_set *set, const struct sk_buff *skb, ++ u_int32_t flags, ip_set_ip_t *hash_port) ++{ ++ int res; ++ ip_set_ip_t port = get_port(skb, flags); ++ ++ DP("flag %s port %u", flags & IPSET_SRC ? "SRC" : "DST", port); ++ if (port == INVALID_PORT) ++ return 0; ++ ++ res = __testport(set, port, hash_port); ++ ++ return (res < 0 ? 0 : res); ++} ++ ++static inline int ++__addport(struct ip_set *set, ip_set_ip_t port, ip_set_ip_t *hash_port) ++{ ++ struct ip_set_portmap *map = (struct ip_set_portmap *) set->data; ++ ++ if (port < map->first_port || port > map->last_port) ++ return -ERANGE; ++ if (test_and_set_bit(port - map->first_port, map->members)) ++ return -EEXIST; ++ ++ *hash_port = port; ++ DP("port %u", port); ++ return 0; ++} ++ ++static int ++addport(struct ip_set *set, const void *data, size_t size, ++ ip_set_ip_t *hash_port) ++{ ++ struct ip_set_req_portmap *req = ++ (struct ip_set_req_portmap *) data; ++ ++ if (size != sizeof(struct ip_set_req_portmap)) { ++ ip_set_printk("data length wrong (want %d, have %d)", ++ sizeof(struct ip_set_req_portmap), ++ size); ++ return -EINVAL; ++ } ++ return __addport(set, req->port, hash_port); ++} ++ ++static int ++addport_kernel(struct ip_set *set, const struct sk_buff *skb, ++ u_int32_t flags, ip_set_ip_t *hash_port) ++{ ++ ip_set_ip_t port = get_port(skb, flags); ++ ++ if (port == INVALID_PORT) ++ return -EINVAL; ++ ++ return __addport(set, port, hash_port); ++} ++ ++static inline int ++__delport(struct ip_set *set, ip_set_ip_t port, ip_set_ip_t *hash_port) ++{ ++ struct ip_set_portmap *map = (struct ip_set_portmap *) set->data; ++ ++ if (port < map->first_port || port > map->last_port) ++ return -ERANGE; ++ if (!test_and_clear_bit(port - map->first_port, map->members)) ++ return -EEXIST; ++ ++ *hash_port = port; ++ DP("port %u", port); ++ return 0; ++} ++ ++static int ++delport(struct ip_set *set, const void *data, size_t size, ++ ip_set_ip_t *hash_port) ++{ ++ struct ip_set_req_portmap *req = ++ (struct ip_set_req_portmap *) data; ++ ++ if (size != sizeof(struct ip_set_req_portmap)) { ++ ip_set_printk("data length wrong (want %d, have %d)", ++ sizeof(struct ip_set_req_portmap), ++ size); ++ return -EINVAL; ++ } ++ return __delport(set, req->port, hash_port); ++} ++ ++static int ++delport_kernel(struct ip_set *set, const struct sk_buff *skb, ++ u_int32_t flags, ip_set_ip_t *hash_port) ++{ ++ ip_set_ip_t port = get_port(skb, flags); ++ ++ if (port == INVALID_PORT) ++ return -EINVAL; ++ ++ return __delport(set, port, hash_port); ++} ++ ++static int create(struct ip_set *set, const void *data, size_t size) ++{ ++ int newbytes; ++ struct ip_set_req_portmap_create *req = ++ (struct ip_set_req_portmap_create *) data; ++ struct ip_set_portmap *map; ++ ++ if (size != sizeof(struct ip_set_req_portmap_create)) { ++ ip_set_printk("data length wrong (want %d, have %d)", ++ sizeof(struct ip_set_req_portmap_create), ++ size); ++ return -EINVAL; ++ } ++ ++ DP("from %u to %u", req->from, req->to); ++ ++ if (req->from > req->to) { ++ DP("bad port range"); ++ return -ENOEXEC; ++ } ++ ++ if (req->to - req->from > MAX_RANGE) { ++ ip_set_printk("range too big (max %d ports)", ++ MAX_RANGE); ++ return -ENOEXEC; ++ } ++ ++ map = kmalloc(sizeof(struct ip_set_portmap), GFP_KERNEL); ++ if (!map) { ++ DP("out of memory for %d bytes", ++ sizeof(struct ip_set_portmap)); ++ return -ENOMEM; ++ } ++ map->first_port = req->from; ++ map->last_port = req->to; ++ newbytes = bitmap_bytes(req->from, req->to); ++ map->members = kmalloc(newbytes, GFP_KERNEL); ++ if (!map->members) { ++ DP("out of memory for %d bytes", newbytes); ++ kfree(map); ++ return -ENOMEM; ++ } ++ memset(map->members, 0, newbytes); ++ ++ set->data = map; ++ return 0; ++} ++ ++static void destroy(struct ip_set *set) ++{ ++ struct ip_set_portmap *map = (struct ip_set_portmap *) set->data; ++ ++ kfree(map->members); ++ kfree(map); ++ ++ set->data = NULL; ++} ++ ++static void flush(struct ip_set *set) ++{ ++ struct ip_set_portmap *map = (struct ip_set_portmap *) set->data; ++ memset(map->members, 0, bitmap_bytes(map->first_port, map->last_port)); ++} ++ ++static void list_header(const struct ip_set *set, void *data) ++{ ++ struct ip_set_portmap *map = (struct ip_set_portmap *) set->data; ++ struct ip_set_req_portmap_create *header = ++ (struct ip_set_req_portmap_create *) data; ++ ++ DP("list_header %u %u", map->first_port, map->last_port); ++ ++ header->from = map->first_port; ++ header->to = map->last_port; ++} ++ ++static int list_members_size(const struct ip_set *set) ++{ ++ struct ip_set_portmap *map = (struct ip_set_portmap *) set->data; ++ ++ return bitmap_bytes(map->first_port, map->last_port); ++} ++ ++static void list_members(const struct ip_set *set, void *data) ++{ ++ struct ip_set_portmap *map = (struct ip_set_portmap *) set->data; ++ int bytes = bitmap_bytes(map->first_port, map->last_port); ++ ++ memcpy(data, map->members, bytes); ++} ++ ++static struct ip_set_type ip_set_portmap = { ++ .typename = SETTYPE_NAME, ++ .typecode = IPSET_TYPE_PORT, ++ .protocol_version = IP_SET_PROTOCOL_VERSION, ++ .create = &create, ++ .destroy = &destroy, ++ .flush = &flush, ++ .reqsize = sizeof(struct ip_set_req_portmap), ++ .addip = &addport, ++ .addip_kernel = &addport_kernel, ++ .delip = &delport, ++ .delip_kernel = &delport_kernel, ++ .testip = &testport, ++ .testip_kernel = &testport_kernel, ++ .header_size = sizeof(struct ip_set_req_portmap_create), ++ .list_header = &list_header, ++ .list_members_size = &list_members_size, ++ .list_members = &list_members, ++ .me = THIS_MODULE, ++}; ++ ++MODULE_LICENSE("GPL"); ++MODULE_AUTHOR("Jozsef Kadlecsik "); ++MODULE_DESCRIPTION("portmap type of IP sets"); ++ ++static int __init init(void) ++{ ++ return ip_set_register_set_type(&ip_set_portmap); ++} ++ ++static void __exit fini(void) ++{ ++ /* FIXME: possible race with ip_set_create() */ ++ ip_set_unregister_set_type(&ip_set_portmap); ++} ++ ++module_init(init); ++module_exit(fini); +diff -urN linux-2.6.11/net/ipv4/netfilter/ipt_IMQ.c linux.sinabox/net/ipv4/netfilter/ipt_IMQ.c +--- linux-2.6.11/net/ipv4/netfilter/ipt_IMQ.c 1970-01-01 01:00:00.000000000 +0100 ++++ linux.sinabox/net/ipv4/netfilter/ipt_IMQ.c 2005-03-26 00:49:04.000000000 +0100 +@@ -0,0 +1,78 @@ ++/* ++ * This target marks packets to be enqueued to an imq device ++ */ ++#include ++#include ++#include ++#include ++#include ++ ++static unsigned int imq_target(struct sk_buff **pskb, ++ const struct net_device *in, ++ const struct net_device *out, ++ unsigned int hooknum, ++ const void *targinfo, ++ void *userdata) ++{ ++ struct ipt_imq_info *mr = (struct ipt_imq_info*)targinfo; ++ ++ (*pskb)->imq_flags = mr->todev | IMQ_F_ENQUEUE; ++ (*pskb)->nfcache |= NFC_ALTERED; ++ ++ return IPT_CONTINUE; ++} ++ ++static int imq_checkentry(const char *tablename, ++ const struct ipt_entry *e, ++ void *targinfo, ++ unsigned int targinfosize, ++ unsigned int hook_mask) ++{ ++ struct ipt_imq_info *mr; ++ ++ if (targinfosize != IPT_ALIGN(sizeof(struct ipt_imq_info))) { ++ printk(KERN_WARNING "IMQ: invalid targinfosize\n"); ++ return 0; ++ } ++ mr = (struct ipt_imq_info*)targinfo; ++ ++ if (strcmp(tablename, "mangle") != 0) { ++ printk(KERN_WARNING ++ "IMQ: IMQ can only be called from \"mangle\" table, not \"%s\"\n", ++ tablename); ++ return 0; ++ } ++ ++ if (mr->todev > IMQ_MAX_DEVS) { ++ printk(KERN_WARNING ++ "IMQ: invalid device specified, highest is %u\n", ++ IMQ_MAX_DEVS); ++ return 0; ++ } ++ ++ return 1; ++} ++ ++static struct ipt_target ipt_imq_reg = { ++ .name = "IMQ", ++ .target = imq_target, ++ .checkentry = imq_checkentry, ++ .me = THIS_MODULE ++}; ++ ++static int __init init(void) ++{ ++ if (ipt_register_target(&ipt_imq_reg)) ++ return -EINVAL; ++ ++ return 0; ++} ++ ++static void __exit fini(void) ++{ ++ ipt_unregister_target(&ipt_imq_reg); ++} ++ ++module_init(init); ++module_exit(fini); ++MODULE_LICENSE("GPL"); +diff -urN linux-2.6.11/net/ipv4/netfilter/ipt_ipp2p.c linux.sinabox/net/ipv4/netfilter/ipt_ipp2p.c +--- linux-2.6.11/net/ipv4/netfilter/ipt_ipp2p.c 1970-01-01 01:00:00.000000000 +0100 ++++ linux.sinabox/net/ipv4/netfilter/ipt_ipp2p.c 2005-03-24 19:26:06.000000000 +0100 +@@ -0,0 +1,640 @@ ++#include ++#include ++#include ++#include ++#include ++#include ++ ++#define get_u8(X,O) (*(__u8 *)(X + O)) ++#define get_u16(X,O) (*(__u16 *)(X + O)) ++#define get_u32(X,O) (*(__u32 *)(X + O)) ++ ++MODULE_AUTHOR("Eicke Friedrich "); ++MODULE_DESCRIPTION("An extension to iptables to identify P2P traffic."); ++MODULE_LICENSE("GPL"); ++ ++ ++/*Search for UDP eDonkey/eMule/Kad commands*/ ++int ++udp_search_edk (unsigned char *haystack, int packet_len) ++{ ++ unsigned char *t = haystack; ++ t += 8; ++ ++ switch (t[0]) { ++ case 0xe3: { /*edonkey*/ ++ switch (t[1]) { ++ /* e3 9a + 16Bytes Hash | size == 26 */ ++ case 0x9a: if (packet_len == 26) return ((IPP2P_EDK * 100) + 1); ++ /* e3 96 xx yy zz kk | size == 14 | server status request */ ++ case 0x96: if (packet_len == 14) return ((IPP2P_EDK * 100) + 2); ++ /* e3 a2 | size == 10 or 14 <-- recheck*/ ++ } ++ } ++ ++ case 0xc5: { /*emule*/ ++ switch (t[1]) { ++ /* c5 91 xx yy | size == 12 (8+4) | xx != 0x00 -- xx yy queue rating */ ++ case 0x91: if ((packet_len == 12) && (t[2] != 0x00)) return ((IPP2P_EDK * 100) + 3); ++ /* c5 90 xx .. yy | size == 26 (8+2+16) | xx .. yy == hash -- file ping */ ++ case 0x90: if ((packet_len == 26) && (t[2] != 0x00)) return ((IPP2P_EDK * 100) + 4); ++ /* c5 92 | size == 10 (8+2) -- file not found */ ++ case 0x92: if (packet_len == 10) return ((IPP2P_EDK * 100) + 5); ++ /* c5 93 | size == 10 (8+2) -- queue full */ ++ case 0x93: if (packet_len == 10) return ((IPP2P_EDK * 100) + 6); ++ } ++ } ++ ++ case 0xe4: { /*kad*/ ++ switch (t[1]) { ++ /* e4 50 | size == 12 */ ++ case 0x50: if (packet_len == 12) return ((IPP2P_EDK * 100) + 7); ++ /* e4 58 | size == 14 */ ++ case 0x58: if ((packet_len == 14) && (t[2] != 0x00)) return ((IPP2P_EDK * 100) + 8); ++ /* e4 59 | size == 10 */ ++ case 0x59: if (packet_len == 10) return ((IPP2P_EDK * 100) + 9); ++ /* e4 30 .. | t[18] == 0x01 | size > 26 | --> search */ ++ case 0x30: if ((packet_len > 26) && (t[18] == 0x01)) return ((IPP2P_EDK * 100) + 10); ++ /* e4 28 .. 00 | t[68] == 0x00 | size > 76 */ ++ case 0x28: if ((packet_len > 76) && (t[68] == 0x00)) return ((IPP2P_EDK * 100) + 11); ++ /* e4 20 .. | size == 43 */ ++ case 0x20: if ((packet_len == 43) && (t[2] != 0x00) && (t[34] != 0x00)) return ((IPP2P_EDK * 100) + 12); ++ /* e4 00 .. 00 | size == 35 ? */ ++ case 0x00: if ((packet_len == 35) && (t[26] == 0x00)) return ((IPP2P_EDK * 100) + 13); ++ /* e4 10 .. 00 | size == 35 ? */ ++ case 0x10: if ((packet_len == 35) && (t[26] == 0x00)) return ((IPP2P_EDK * 100) + 14); ++ /* e4 18 .. 00 | size == 35 ? */ ++ case 0x18: if ((packet_len == 35) && (t[26] == 0x00)) return ((IPP2P_EDK * 100) + 15); ++ /* e4 40 .. | t[18] == 0x01 | t[19] == 0x00 | size > 40 */ ++ case 0x40: if ((packet_len > 40) && (t[18] == 0x01) && (t[19] == 0x00)) return ((IPP2P_EDK * 100) + 16); ++ } ++ } ++ ++ default: return 0; ++ } /* end of switch (t[0]) */ ++}/*udp_search_edk*/ ++ ++ ++/*Search for UDP Gnutella commands*/ ++int ++udp_search_gnu (unsigned char *haystack, int packet_len) ++{ ++ unsigned char *t = haystack; ++ t += 8; ++ ++ if (memcmp(t, "GND", 3) == 0) return ((IPP2P_GNU * 100) + 1); ++ if (memcmp(t, "GNUTELLA ", 9) == 0) return ((IPP2P_GNU * 100) + 2); ++ return 0; ++}/*udp_search_gnu*/ ++ ++ ++/*Search for UDP KaZaA commands*/ ++int ++udp_search_kazaa (unsigned char *haystack, int packet_len) ++{ ++ unsigned char *t = haystack; ++ ++ if (t[packet_len-1] == 0x00){ ++ t += (packet_len - 6); ++ if (memcmp(t, "KaZaA", 5) == 0) return (IPP2P_KAZAA * 100); ++ } ++ return 0; ++}/*udp_search_kazaa*/ ++ ++ ++/*Search for UDP BitTorrent commands*/ ++int ++udp_search_bit (unsigned char *haystack, int packet_len) ++{ ++ unsigned char *t = haystack; ++ ++ /* packet_len has to be 24 */ ++ if (packet_len != 24) return 0; ++ ++ t += 8; ++ ++ /* ^ 00 00 04 17 27 10 19 80 */ ++ if ((ntohl(get_u32(t, 0)) == 0x00000417) && (ntohl(get_u32(t, 4)) == 0x27101980)) return (IPP2P_BIT * 100); ++ ++ return 0; ++}/*udp_search_bit*/ ++ ++ ++ ++/*Search for Ares commands*/ ++int ++search_ares (unsigned char *haystack, int packet_len, int head_len) ++{ ++ unsigned char *t = haystack; ++ t += head_len; ++ ++ if ((packet_len - head_len) == 6){ /* possible connect command*/ ++ if ((t[0] == 0x03) && (t[1] == 0x00) && (t[2] == 0x5a) && (t[3] == 0x04) && (t[4] == 0x03) && (t[5] == 0x05)) ++ return ((IPP2P_ARES * 100) + 1); /* found connect packet: 03 00 5a 04 03 05 */ ++ } ++ if ((packet_len - head_len) == 60){ /* possible download command*/ ++ if ((t[59] == 0x0a) && (t[58] == 0x0a)){ ++ if (memcmp(t, "PUSH SHA1:", 10) == 0) /* found download command */ ++ return ((IPP2P_ARES * 100) + 2); ++ } ++ } ++ return 0; ++} /*search_ares*/ ++ ++ ++/*Search for SoulSeek commands*/ ++int ++search_soul (unsigned char *haystack, int packet_len, int head_len) ++{ ++ unsigned char *t = haystack; ++ t += head_len; ++ ++ if (get_u16(t, 0) == (packet_len - head_len - 4)){ ++ /* xx xx 00 00 yy zz 00 00 .. | xx = sizeof(payload) - 4 */ ++ if ((get_u16(t,2) == 0x0000) &&(t[4] != 0x00) && (get_u16(t,6) == 0x0000)) ++ return ((IPP2P_SOUL * 100) + 1); ++ } else { ++ /* 00 00 00 00 00 00 00 00 + sizeof(payload) == 8*/ ++ if (((packet_len - head_len) == 8) && (get_u32(t, 0) == 0x00000000) && (get_u32(t, 4) == 0x00000000)) ++ return ((IPP2P_SOUL * 100) + 2); ++ } ++ ++ /* 01 xx 00 00 00 yy .. zz 00 00 00 .. | xx == sizeof(nick) | yy .. zz == nick */ ++ if ((t[0] == 0x01) && (t[2] == 0x00) && (get_u16(t,3) == 0x0000) && ((packet_len - head_len) > ((get_u8(t,1))+6)) && ++ (t[(get_u8(t,1))+4] != 0x00) && (t[(get_u8(t,1))+5] == 0x01) && (t[(get_u8(t,1))+6] == 0x00)) ++ return ((IPP2P_SOUL * 100) + 3); ++ return 0; ++} ++ ++ ++/*Search for WinMX commands*/ ++int ++search_winmx (unsigned char *haystack, int packet_len, int head_len) ++{ ++ unsigned char *t = haystack; ++ int c; ++ t += head_len; ++ ++ if (((packet_len - head_len) == 4) && (memcmp(t, "SEND", 4) == 0)) return ((IPP2P_WINMX * 100) + 1); ++ if (((packet_len - head_len) == 3) && (memcmp(t, "GET", 3) == 0)) return ((IPP2P_WINMX * 100) + 2); ++ if (packet_len < (head_len + 10)) return 0; ++ ++ if ((memcmp(t, "SEND", 4) == 0) || (memcmp(t, "GET", 3) == 0)){ ++ c = head_len + 4; ++ t += 4; ++ while (c < packet_len - 5) { ++ if ((t[0] == 0x20) && (t[1] == 0x22)){ ++ c += 2; ++ t += 2; ++ while (c < packet_len - 2) { ++ if ((t[0] == 0x22) && (t[1] == 0x20)) return ((IPP2P_WINMX * 100) + 3); ++ t++; ++ c++; ++ } ++ } ++ t++; ++ c++; ++ } ++ } ++ return 0; ++} /*search_winmx*/ ++ ++ ++/*Search for appleJuice commands*/ ++int ++search_apple (unsigned char *haystack, int packet_len, int head_len) ++{ ++ unsigned char *t = haystack; ++ t += head_len; ++ ++ if ((memcmp(t, "ajprot", 6) == 0) && (t[6] == 0x0d) && (t[7] == 0x0a)) return (IPP2P_APPLE * 100); ++ ++ return 0; ++} ++ ++ ++/*Search for BitTorrent commands*/ ++int ++search_bittorrent (unsigned char *haystack, int packet_len, int head_len) ++{ ++ ++ unsigned char *t = haystack; ++ if (*(haystack+head_len) != 0x13) return 0; /*Bail out of first byte != 0x13*/ ++ ++ t += head_len + 1; ++ ++ if (memcmp(t, "BitTorrent protocol", 19) == 0) return (IPP2P_BIT * 100); ++ return 0; ++} ++ ++ ++ ++/*check for Kazaa get command*/ ++int ++search_kazaa (unsigned char *haystack, int packet_len, int head_len) ++{ ++ unsigned char *t = haystack; ++ ++ if (!((*(haystack + packet_len - 2) == 0x0d) && (*(haystack + packet_len - 1) == 0x0a))) return 0; ++ ++ t += head_len; ++ if (memcmp(t, "GET /.hash=", 11) == 0) ++ return (IPP2P_DATA_KAZAA * 100); ++ else ++ return 0; ++} ++ ++ ++/*check for gnutella get command*/ ++int ++search_gnu (unsigned char *haystack, int packet_len, int head_len) ++{ ++ unsigned char *t = haystack; ++ ++ if (!((*(haystack + packet_len - 2) == 0x0d) && (*(haystack + packet_len - 1) == 0x0a))) return 0; ++ ++ t += head_len; ++ if (memcmp(t, "GET /get/", 9) == 0) return ((IPP2P_DATA_GNU * 100) + 1); ++ if (memcmp(t, "GET /uri-res/", 13) == 0) return ((IPP2P_DATA_GNU * 100) + 2); ++ ++ return 0; ++} ++ ++ ++/*check for gnutella get commands and other typical data*/ ++int ++search_all_gnu (unsigned char *haystack, int packet_len, int head_len) ++{ ++ unsigned char *t = haystack; ++ int c; ++ ++ if (!((*(haystack + packet_len - 2) == 0x0d) && (*(haystack + packet_len - 1) == 0x0a))) return 0; ++ ++ t += head_len; ++ ++ if (memcmp(t, "GNUTELLA CONNECT/", 17) == 0) return ((IPP2P_GNU * 100) + 1); ++ if (memcmp(t, "GNUTELLA/", 9) == 0) return ((IPP2P_GNU * 100) + 2); ++ ++ if ((memcmp(t, "GET /get/", 9) == 0) || (memcmp(t, "GET /uri-res/", 13) == 0)) ++ { ++ c = head_len + 8; ++ t += 8; ++ while (c < packet_len - 22) { ++ if ((t[0] == 0x0d) && (t[1] == 0x0a)) { ++ if ((memcmp(t, "X-Gnutella-", 11) == 0) || (memcmp(t, "X-Queue:", 8) == 0)) return ((IPP2P_GNU * 100) + 3); ++ t += 2; ++ c += 2; ++ } else { ++ t++; ++ c++; ++ } ++ } ++ } ++ return 0; ++} ++ ++ ++/*check for KaZaA download commands and other typical data*/ ++int ++search_all_kazaa (unsigned char *haystack, int packet_len, int head_len) ++{ ++ unsigned char *t = haystack; ++ int c; ++ ++ if (!((*(haystack + packet_len - 2) == 0x0d) && (*(haystack + packet_len - 1) == 0x0a))) return 0; ++ ++ t += head_len; ++ if (memcmp(t, "GIVE ", 5) == 0) return ((IPP2P_KAZAA * 100) + 1); ++ ++ if (memcmp(t, "GET /", 5) == 0) { ++ c = head_len + 8; ++ t += 8; ++ while (c < packet_len - 22) { ++ if ((t[0] == 0x0d) && (t[1] == 0x0a)) { ++ if ( memcmp(t, "X-Kazaa-Username: ", 18) == 0 ) return ((IPP2P_KAZAA * 100) + 2); ++ t += 2; ++ c += 2; ++ } else { ++ t++; ++ c++; ++ } ++ } ++ } ++ ++ return 0; ++} ++ ++/*fast check for edonkey file segment transfer command*/ ++int ++search_edk (unsigned char *haystack, int packet_len, int head_len) ++{ ++ if (*(haystack+head_len) != 0xe3) ++ return 0; ++ else { ++ if (*(haystack+head_len+5) == 0x47) ++ return (IPP2P_DATA_EDK * 100); ++ else ++ return 0; ++ } ++} ++ ++ ++ ++/*intensive but slower search for some edonkey packets including size-check*/ ++int ++search_all_edk (unsigned char *haystack, int packet_len, int head_len) ++{ ++ unsigned char *t = haystack; ++ int cmd; ++ ++ if (*(haystack+head_len) == 0xd4) { ++ t += head_len; ++ cmd = get_u16(t, 1); ++ if (cmd == (packet_len - head_len - 5)) { ++ switch (t[5]) { ++ case 0x82: return ((IPP2P_EDK * 100) + 42); ++ case 0x15: return ((IPP2P_EDK * 100) + 43); ++ default: return 0; ++ } ++ } ++ return 0; ++ } ++ ++ ++ if (*(haystack+head_len) == 0xc5) { /*search for additional eMule packets*/ ++ t += head_len; ++ cmd = get_u16(t, 1); ++ ++ if (cmd == (packet_len - head_len - 5)) { ++ switch (t[5]) { ++ case 0x01: return ((IPP2P_EDK * 100) + 30); ++ case 0x02: return ((IPP2P_EDK * 100) + 31); ++ case 0x60: return ((IPP2P_EDK * 100) + 32); ++ case 0x81: return ((IPP2P_EDK * 100) + 33); ++ case 0x82: return ((IPP2P_EDK * 100) + 34); ++ case 0x85: return ((IPP2P_EDK * 100) + 35); ++ case 0x86: return ((IPP2P_EDK * 100) + 36); ++ case 0x87: return ((IPP2P_EDK * 100) + 37); ++ case 0x40: return ((IPP2P_EDK * 100) + 38); ++ case 0x92: return ((IPP2P_EDK * 100) + 39); ++ case 0x93: return ((IPP2P_EDK * 100) + 40); ++ case 0x12: return ((IPP2P_EDK * 100) + 41); ++ default: return 0; ++ } ++ } ++ ++ return 0; ++ } ++ ++ ++ if (*(haystack+head_len) != 0xe3) ++ return 0; ++ else { ++ t += head_len; ++ cmd = get_u16(t, 1); ++ if (cmd == (packet_len - head_len - 5)) { ++ switch (t[5]) { ++ case 0x01: return ((IPP2P_EDK * 100) + 1); /*Client: hello or Server:hello*/ ++ case 0x50: return ((IPP2P_EDK * 100) + 2); /*Client: file status*/ ++ case 0x16: return ((IPP2P_EDK * 100) + 3); /*Client: search*/ ++ case 0x58: return ((IPP2P_EDK * 100) + 4); /*Client: file request*/ ++ case 0x48: return ((IPP2P_EDK * 100) + 5); /*???*/ ++ case 0x54: return ((IPP2P_EDK * 100) + 6); /*???*/ ++ case 0x47: return ((IPP2P_EDK * 100) + 7); /*Client: file segment request*/ ++ case 0x46: return ((IPP2P_EDK * 100) + 8); /*Client: download segment*/ ++ case 0x4c: return ((IPP2P_EDK * 100) + 9); /*Client: Hello-Answer*/ ++ case 0x4f: return ((IPP2P_EDK * 100) + 10); /*Client: file status request*/ ++ case 0x59: return ((IPP2P_EDK * 100) + 11); /*Client: file request answer*/ ++ case 0x65: return ((IPP2P_EDK * 100) + 12); /*Client: ???*/ ++ case 0x66: return ((IPP2P_EDK * 100) + 13); /*Client: ???*/ ++ case 0x51: return ((IPP2P_EDK * 100) + 14); /*Client: ???*/ ++ case 0x52: return ((IPP2P_EDK * 100) + 15); /*Client: ???*/ ++ case 0x4d: return ((IPP2P_EDK * 100) + 16); /*Client: ???*/ ++ case 0x5c: return ((IPP2P_EDK * 100) + 17); /*Client: ???*/ ++ case 0x38: return ((IPP2P_EDK * 100) + 18); /*Client: ???*/ ++ case 0x69: return ((IPP2P_EDK * 100) + 19); /*Client: ???*/ ++ case 0x19: return ((IPP2P_EDK * 100) + 20); /*Client: ???*/ ++ case 0x42: return ((IPP2P_EDK * 100) + 21); /*Client: ???*/ ++ case 0x34: return ((IPP2P_EDK * 100) + 22); /*Client: ???*/ ++ case 0x94: return ((IPP2P_EDK * 100) + 23); /*Client: ???*/ ++ case 0x1c: return ((IPP2P_EDK * 100) + 24); /*Client: ???*/ ++ case 0x6a: return ((IPP2P_EDK * 100) + 25); /*Client: ???*/ ++ default: return 0; ++ } ++ } else { ++ if (cmd > packet_len - head_len - 5) { ++ if ((t[3] == 0x00) && (t[4] == 0x00)) { ++ if (t[5] == 0x01) return ((IPP2P_EDK * 100) + 26); ++ if (t[5] == 0x4c) return ((IPP2P_EDK * 100) + 27); ++ } ++ return 0; ++ ++ } /*non edk packet*/ ++ if (t[cmd+5] == 0xe3) return ((IPP2P_EDK * 100) + 28);/*found another edk-command*/ ++ if (t[cmd+5] == 0xc5) return ((IPP2P_EDK * 100) + 29);/*found an emule-command*/ ++ return 0; ++ } ++ } ++} ++ ++ ++/*fast check for Direct Connect send command*/ ++int ++search_dc (unsigned char *haystack, int packet_len, int head_len) ++{ ++ unsigned char *t = haystack; ++ ++ if (*(haystack+head_len) != 0x24 ) ++ return 0; ++ else { ++ t += head_len + 1; ++ if (memcmp(t, "Send|", 5) == 0) ++ return (IPP2P_DATA_DC * 100); ++ else ++ return 0; ++ } ++ ++} ++ ++ ++/*intensive but slower check for all direct connect packets*/ ++int ++search_all_dc (unsigned char *haystack, int packet_len, int head_len) ++{ ++ unsigned char *t = haystack; ++ ++ if ((*(haystack + head_len) == 0x24) && (*(haystack + packet_len - 1) == 0x7c)) { ++ t += head_len + 1; ++ if (memcmp(t, "Lock ", 5) == 0) return ((IPP2P_DC * 100) + 1); /*hub: hello*/ ++ if (memcmp(t, "Key ", 4) == 0) return ((IPP2P_DC * 100) + 2); /*client: hello*/ ++ if (memcmp(t, "Hello ", 6) == 0) return ((IPP2P_DC * 100) + 3); /*hub:connected*/ ++ if (memcmp(t, "MyNick ", 7) == 0) return ((IPP2P_DC * 100) + 4); /*client-client: hello*/ ++ if (memcmp(t, "Search ", 7) == 0) return ((IPP2P_DC * 100) + 5); /*client: search*/ ++ if (memcmp(t, "Send", 4) == 0) return ((IPP2P_DC * 100) + 6); /*client: start download*/ ++ return 0; ++ } else ++ return 0; ++} ++ ++ ++static struct { ++ int command; ++ __u8 short_hand; /*for fucntions included in short hands*/ ++ int packet_len; ++ int (*function_name) (unsigned char *, int, int); ++} matchlist[] = { ++ {IPP2P_EDK,SHORT_HAND_IPP2P,40, &search_all_edk}, ++ {IPP2P_DATA_KAZAA,SHORT_HAND_DATA,200, &search_kazaa}, ++ {IPP2P_DATA_EDK,SHORT_HAND_DATA,60, &search_edk}, ++ {IPP2P_DATA_DC,SHORT_HAND_DATA,26, &search_dc}, ++ {IPP2P_DC,SHORT_HAND_IPP2P,25, search_all_dc}, ++ {IPP2P_DATA_GNU,SHORT_HAND_DATA,40, &search_gnu}, ++ {IPP2P_GNU,SHORT_HAND_IPP2P,35, &search_all_gnu}, ++ {IPP2P_KAZAA,SHORT_HAND_IPP2P,35, &search_all_kazaa}, ++ {IPP2P_BIT,SHORT_HAND_NONE,40, &search_bittorrent}, ++ {IPP2P_APPLE,SHORT_HAND_NONE,20, &search_apple}, ++ {IPP2P_SOUL,SHORT_HAND_NONE,25, &search_soul}, ++ {IPP2P_WINMX,SHORT_HAND_NONE,20, &search_winmx}, ++ {IPP2P_ARES,SHORT_HAND_NONE,25, &search_ares}, ++ {0,0,0,NULL} ++}; ++ ++ ++static struct { ++ int command; ++ __u8 short_hand; /*for fucntions included in short hands*/ ++ int packet_len; ++ int (*function_name) (unsigned char *, int); ++} udp_list[] = { ++ {IPP2P_KAZAA,SHORT_HAND_IPP2P,14, &udp_search_kazaa}, ++ {IPP2P_BIT,SHORT_HAND_NONE,23, &udp_search_bit}, ++ {IPP2P_GNU,SHORT_HAND_IPP2P,11, &udp_search_gnu}, ++ {IPP2P_EDK,SHORT_HAND_IPP2P,9, &udp_search_edk}, ++ {0,0,0,NULL} ++}; ++ ++ ++static int ++match(const struct sk_buff *skb, ++ const struct net_device *in, ++ const struct net_device *out, ++ const void *matchinfo, ++ int offset, ++ int *hotdrop) ++{ ++ const struct ipt_p2p_info *info = matchinfo; ++ unsigned char *haystack; ++ struct iphdr *ip = skb->nh.iph; ++ int p2p_result = 0, i = 0; ++ int head_len; ++ int hlen = ntohs(ip->tot_len)-(ip->ihl*4); /*hlen = packet-data length*/ ++ ++ /*must not be a fragment*/ ++ if (offset) { ++ if (info->debug) printk("IPP2P.match: offset found %i \n",offset); ++ return 0; ++ } ++ ++ /*make sure that skb is linear*/ ++ if(skb_is_nonlinear(skb)){ ++ if (info->debug) printk("IPP2P.match: nonlinear skb found\n"); ++ return 0; ++ } ++ ++ ++ haystack=(char *)ip+(ip->ihl*4); /*haystack = packet data*/ ++ ++ switch (ip->protocol){ ++ case IPPROTO_TCP: /*what to do with a TCP packet*/ ++ { ++ struct tcphdr *tcph = (void *) ip + ip->ihl * 4; ++ ++ if (tcph->fin) return 0; /*if FIN bit is set bail out*/ ++ if (tcph->syn) return 0; /*if SYN bit is set bail out*/ ++ if (tcph->rst) return 0; /*if RST bit is set bail out*/ ++ head_len = tcph->doff * 4; /*get TCP-Header-Size*/ ++ while (matchlist[i].command) { ++ if ((((info->cmd & matchlist[i].command) == matchlist[i].command) || ++ ((info->cmd & matchlist[i].short_hand) == matchlist[i].short_hand)) && ++ (hlen > matchlist[i].packet_len)) { ++ p2p_result = matchlist[i].function_name(haystack, hlen, head_len); ++ if (p2p_result) ++ { ++ if (info->debug) printk("IPP2P.debug:TCP-match: %i from: %u.%u.%u.%u:%i to: %u.%u.%u.%u:%i Length: %i\n", ++ p2p_result, NIPQUAD(ip->saddr),ntohs(tcph->source), NIPQUAD(ip->daddr),ntohs(tcph->dest),hlen); ++ return p2p_result; ++ } ++ } ++ i++; ++ } ++ return p2p_result; ++ } ++ ++ case IPPROTO_UDP: /*what to do with an UDP packet*/ ++ { ++ struct udphdr *udph = (void *) ip + ip->ihl * 4; ++ ++ while (udp_list[i].command){ ++ if ((((info->cmd & udp_list[i].command) == udp_list[i].command) || ++ ((info->cmd & udp_list[i].short_hand) == udp_list[i].short_hand)) && ++ (hlen > udp_list[i].packet_len)) { ++ p2p_result = udp_list[i].function_name(haystack, hlen); ++ if (p2p_result){ ++ if (info->debug) printk("IPP2P.debug:UDP-match: %i from: %u.%u.%u.%u:%i to: %u.%u.%u.%u:%i Length: %i\n", ++ p2p_result, NIPQUAD(ip->saddr),ntohs(udph->source), NIPQUAD(ip->daddr),ntohs(udph->dest),hlen); ++ return p2p_result; ++ } ++ } ++ i++; ++ } ++ return p2p_result; ++ } ++ ++ default: return 0; ++ } ++} ++ ++ ++ ++static int ++checkentry(const char *tablename, ++ const struct ipt_ip *ip, ++ void *matchinfo, ++ unsigned int matchsize, ++ unsigned int hook_mask) ++{ ++ /* Must specify -p tcp */ ++/* if (ip->proto != IPPROTO_TCP || (ip->invflags & IPT_INV_PROTO)) { ++ * printk("ipp2p: Only works on TCP packets, use -p tcp\n"); ++ * return 0; ++ * }*/ ++ return 1; ++} ++ ++ ++ ++ ++static struct ipt_match ipp2p_match = { ++ .name = "ipp2p", ++ .match = &match, ++ .checkentry = &checkentry, ++ .me = THIS_MODULE, ++}; ++ ++ ++static int __init init(void) ++{ ++ printk(KERN_INFO "IPP2P v%s loading\n", IPP2P_VERSION); ++ return ipt_register_match(&ipp2p_match); ++} ++ ++static void __exit fini(void) ++{ ++ ipt_unregister_match(&ipp2p_match); ++ printk(KERN_INFO "IPP2P v%s unloaded\n", IPP2P_VERSION); ++} ++ ++module_init(init); ++module_exit(fini); ++ ++ +diff -urN linux-2.6.11/net/ipv4/netfilter/ipt_set.c linux.sinabox/net/ipv4/netfilter/ipt_set.c +--- linux-2.6.11/net/ipv4/netfilter/ipt_set.c 1970-01-01 01:00:00.000000000 +0100 ++++ linux.sinabox/net/ipv4/netfilter/ipt_set.c 2005-03-24 19:22:37.000000000 +0100 +@@ -0,0 +1,112 @@ ++/* Copyright (C) 2000-2002 Joakim Axelsson ++ * Patrick Schaaf ++ * Martin Josefsson ++ * Copyright (C) 2003-2004 Jozsef Kadlecsik ++ * ++ * This program is free software; you can redistribute it and/or modify ++ * it under the terms of the GNU General Public License version 2 as ++ * published by the Free Software Foundation. ++ */ ++ ++/* Kernel module to match an IP set. */ ++ ++#include ++#include ++#include ++ ++#include ++#include ++#include ++ ++static inline int ++match_set(const struct ipt_set_info *info, ++ const struct sk_buff *skb, ++ int inv) ++{ ++ if (ip_set_testip_kernel(info->index, skb, info->flags)) ++ inv = !inv; ++ return inv; ++} ++ ++static int ++match(const struct sk_buff *skb, ++ const struct net_device *in, ++ const struct net_device *out, ++ const void *matchinfo, ++ int offset, ++ int *hotdrop) ++{ ++ const struct ipt_set_info_match *info = matchinfo; ++ ++ return match_set(&info->match_set, ++ skb, ++ info->match_set.flags[0] & IPSET_MATCH_INV); ++} ++ ++static int ++checkentry(const char *tablename, ++ const struct ipt_ip *ip, ++ void *matchinfo, ++ unsigned int matchsize, ++ unsigned int hook_mask) ++{ ++ struct ipt_set_info_match *info = ++ (struct ipt_set_info_match *) matchinfo; ++ ip_set_id_t index; ++ ++ if (matchsize != IPT_ALIGN(sizeof(struct ipt_set_info_match))) { ++ ip_set_printk("invalid matchsize %d", matchsize); ++ return 0; ++ } ++ ++ index = ip_set_get_byindex(info->match_set.index); ++ ++ if (index == IP_SET_INVALID_ID) { ++ ip_set_printk("Cannot find set indentified by id %u to match", ++ info->match_set.index); ++ return 0; /* error */ ++ } ++ if (info->match_set.flags[IP_SET_MAX_BINDINGS] != 0) { ++ ip_set_printk("That's nasty!"); ++ return 0; /* error */ ++ } ++ ++ return 1; ++} ++ ++static void destroy(void *matchinfo, unsigned int matchsize) ++{ ++ struct ipt_set_info_match *info = matchinfo; ++ ++ if (matchsize != IPT_ALIGN(sizeof(struct ipt_set_info_match))) { ++ ip_set_printk("invalid matchsize %d", matchsize); ++ return; ++ } ++ ++ ip_set_put(info->match_set.index); ++} ++ ++static struct ipt_match set_match = { ++ .name = "set", ++ .match = &match, ++ .checkentry = &checkentry, ++ .destroy = &destroy, ++ .me = THIS_MODULE ++}; ++ ++MODULE_LICENSE("GPL"); ++MODULE_AUTHOR("Jozsef Kadlecsik "); ++MODULE_DESCRIPTION("iptables IP set match module"); ++ ++static int __init init(void) ++{ ++ return ipt_register_match(&set_match); ++} ++ ++static void __exit fini(void) ++{ ++ ipt_unregister_match(&set_match); ++} ++ ++module_init(init); ++module_exit(fini); +diff -urN linux-2.6.11/net/ipv4/netfilter/ipt_SET.c linux.sinabox/net/ipv4/netfilter/ipt_SET.c +--- linux-2.6.11/net/ipv4/netfilter/ipt_SET.c 1970-01-01 01:00:00.000000000 +0100 ++++ linux.sinabox/net/ipv4/netfilter/ipt_SET.c 2005-03-24 19:22:37.000000000 +0100 +@@ -0,0 +1,128 @@ ++/* Copyright (C) 2000-2002 Joakim Axelsson ++ * Patrick Schaaf ++ * Martin Josefsson ++ * Copyright (C) 2003-2004 Jozsef Kadlecsik ++ * ++ * This program is free software; you can redistribute it and/or modify ++ * it under the terms of the GNU General Public License version 2 as ++ * published by the Free Software Foundation. ++ */ ++ ++/* ipt_SET.c - netfilter target to manipulate IP sets */ ++ ++#include ++#include ++#include ++#include ++#include ++#include ++#include ++#include ++#include ++#include ++#include ++#include ++#include ++ ++static unsigned int ++target(struct sk_buff **pskb, ++ const struct net_device *in, ++ const struct net_device *out, ++ unsigned int hooknum, ++ const void *targinfo, ++ void *userinfo) ++{ ++ const struct ipt_set_info_target *info = targinfo; ++ ++ if (info->add_set.index != IP_SET_INVALID_ID) ++ ip_set_addip_kernel(info->add_set.index, ++ *pskb, ++ info->add_set.flags); ++ if (info->del_set.index != IP_SET_INVALID_ID) ++ ip_set_delip_kernel(info->del_set.index, ++ *pskb, ++ info->del_set.flags); ++ ++ return IPT_CONTINUE; ++} ++ ++static int ++checkentry(const char *tablename, ++ const struct ipt_entry *e, ++ void *targinfo, ++ unsigned int targinfosize, unsigned int hook_mask) ++{ ++ struct ipt_set_info_target *info = ++ (struct ipt_set_info_target *) targinfo; ++ ip_set_id_t index; ++ ++ if (targinfosize != IPT_ALIGN(sizeof(*info))) { ++ DP("bad target info size %u", targinfosize); ++ return 0; ++ } ++ ++ if (info->add_set.index != IP_SET_INVALID_ID) { ++ index = ip_set_get_byindex(info->add_set.index); ++ if (index == IP_SET_INVALID_ID) { ++ ip_set_printk("cannot find add_set index %u as target", ++ info->add_set.index); ++ return 0; /* error */ ++ } ++ } ++ ++ if (info->del_set.index != IP_SET_INVALID_ID) { ++ index = ip_set_get_byindex(info->del_set.index); ++ if (index == IP_SET_INVALID_ID) { ++ ip_set_printk("cannot find del_set index %u as target", ++ info->del_set.index); ++ return 0; /* error */ ++ } ++ } ++ if (info->add_set.flags[IP_SET_MAX_BINDINGS] != 0 ++ || info->del_set.flags[IP_SET_MAX_BINDINGS] != 0) { ++ ip_set_printk("That's nasty!"); ++ return 0; /* error */ ++ } ++ ++ return 1; ++} ++ ++static void destroy(void *targetinfo, unsigned int targetsize) ++{ ++ struct ipt_set_info_target *info = targetinfo; ++ ++ if (targetsize != IPT_ALIGN(sizeof(struct ipt_set_info_target))) { ++ ip_set_printk("invalid targetsize %d", targetsize); ++ return; ++ } ++ ++ if (info->add_set.index != IP_SET_INVALID_ID) ++ ip_set_put(info->add_set.index); ++ if (info->del_set.index != IP_SET_INVALID_ID) ++ ip_set_put(info->del_set.index); ++} ++ ++static struct ipt_target SET_target = { ++ .name = "SET", ++ .target = target, ++ .checkentry = checkentry, ++ .destroy = destroy, ++ .me = THIS_MODULE ++}; ++ ++MODULE_LICENSE("GPL"); ++MODULE_AUTHOR("Jozsef Kadlecsik "); ++MODULE_DESCRIPTION("iptables IP set target module"); ++ ++static int __init init(void) ++{ ++ return ipt_register_target(&SET_target); ++} ++ ++static void __exit fini(void) ++{ ++ ipt_unregister_target(&SET_target); ++} ++ ++module_init(init); ++module_exit(fini); +diff -urN linux-2.6.11/net/ipv4/netfilter/ipt_TARPIT.c linux.sinabox/net/ipv4/netfilter/ipt_TARPIT.c +--- linux-2.6.11/net/ipv4/netfilter/ipt_TARPIT.c 1970-01-01 01:00:00.000000000 +0100 ++++ linux.sinabox/net/ipv4/netfilter/ipt_TARPIT.c 2005-03-24 19:24:07.000000000 +0100 +@@ -0,0 +1,290 @@ ++/* ++ * Kernel module to capture and hold incoming TCP connections using ++ * no local per-connection resources. ++ * ++ * Based on ipt_REJECT.c and offering functionality similar to ++ * LaBrea . ++ * ++ * Copyright (c) 2002 Aaron Hopkins ++ * ++ * This program 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 2 of the License, or ++ * (at your option) any later version. ++ * ++ * This program 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 this program; if not, write to the Free Software ++ * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. ++ * ++ * Goal: ++ * - Allow incoming TCP connections to be established. ++ * - Passing data should result in the connection being switched to the ++ * persist state (0 byte window), in which the remote side stops sending ++ * data and asks to continue every 60 seconds. ++ * - Attempts to shut down the connection should be ignored completely, so ++ * the remote side ends up having to time it out. ++ * ++ * This means: ++ * - Reply to TCP SYN,!ACK,!RST,!FIN with SYN-ACK, window 5 bytes ++ * - Reply to TCP SYN,ACK,!RST,!FIN with RST to prevent spoofing ++ * - Reply to TCP !SYN,!RST,!FIN with ACK, window 0 bytes, rate-limited ++ */ ++ ++#include ++#include ++#include ++#include ++#include ++#include ++#include ++struct in_device; ++#include ++#include ++#include ++ ++#if 0 ++#define DEBUGP printk ++#else ++#define DEBUGP(format, args...) ++#endif ++ ++MODULE_LICENSE("GPL"); ++MODULE_AUTHOR("Aaron Hopkins "); ++ ++/* Stolen from ip_finish_output2 */ ++static int ip_direct_send(struct sk_buff *skb) ++{ ++ struct dst_entry *dst = skb->dst; ++ struct hh_cache *hh = dst->hh; ++ ++ if (hh) { ++ read_lock_bh(&hh->hh_lock); ++ memcpy(skb->data - 16, hh->hh_data, 16); ++ read_unlock_bh(&hh->hh_lock); ++ skb_push(skb, hh->hh_len); ++ return hh->hh_output(skb); ++ } else if (dst->neighbour) ++ return dst->neighbour->output(skb); ++ ++ if (net_ratelimit()) ++ printk(KERN_DEBUG "TARPIT ip_direct_send: no header cache and no neighbor!\n"); ++ kfree_skb(skb); ++ return -EINVAL; ++} ++ ++ ++/* Send reply */ ++static void tarpit_tcp(struct sk_buff *oskb,struct rtable *ort,int local) ++{ ++ struct sk_buff *nskb; ++ struct rtable *nrt; ++ struct tcphdr *otcph, *ntcph; ++ struct flowi fl = {}; ++ unsigned int otcplen; ++ u_int16_t tmp; ++ ++ /* A truncated TCP header isn't going to be useful */ ++ if (oskb->len < (oskb->nh.iph->ihl*4) + sizeof(struct tcphdr)) ++ return; ++ ++ otcph = (struct tcphdr *)((u_int32_t*)oskb->nh.iph ++ + oskb->nh.iph->ihl); ++ otcplen = oskb->len - oskb->nh.iph->ihl*4; ++ ++ /* No replies for RST or FIN */ ++ if (otcph->rst || otcph->fin) ++ return; ++ ++ /* No reply to !SYN,!ACK. Rate-limit replies to !SYN,ACKs */ ++ if (!otcph->syn && (!otcph->ack || !xrlim_allow(&ort->u.dst, 1*HZ))) ++ return; ++ ++ /* Check checksum. */ ++ if (tcp_v4_check(otcph, otcplen, oskb->nh.iph->saddr, ++ oskb->nh.iph->daddr, ++ csum_partial((char *)otcph, otcplen, 0)) != 0) ++ return; ++ ++ /* Copy skb (even if skb is about to be dropped, we can't just ++ clone it because there may be other things, such as tcpdump, ++ interested in it) */ ++ nskb = skb_copy(oskb, GFP_ATOMIC); ++ if (!nskb) ++ return; ++ ++ /* This packet will not be the same as the other: clear nf fields */ ++ nf_conntrack_put(nskb->nfct); ++ nskb->nfct = NULL; ++ nskb->nfcache = 0; ++#ifdef CONFIG_NETFILTER_DEBUG ++ nskb->nf_debug = 0; ++#endif ++ ++ ntcph = (struct tcphdr *)((u_int32_t*)nskb->nh.iph + nskb->nh.iph->ihl); ++ ++ /* Truncate to length (no data) */ ++ ntcph->doff = sizeof(struct tcphdr)/4; ++ skb_trim(nskb, nskb->nh.iph->ihl*4 + sizeof(struct tcphdr)); ++ nskb->nh.iph->tot_len = htons(nskb->len); ++ ++ /* Swap source and dest */ ++ nskb->nh.iph->daddr = xchg(&nskb->nh.iph->saddr, nskb->nh.iph->daddr); ++ tmp = ntcph->source; ++ ntcph->source = ntcph->dest; ++ ntcph->dest = tmp; ++ ++ /* Use supplied sequence number or make a new one */ ++ ntcph->seq = otcph->ack ? otcph->ack_seq ++ : htonl(secure_tcp_sequence_number(nskb->nh.iph->saddr, ++ nskb->nh.iph->daddr, ++ ntcph->source, ++ ntcph->dest)); ++ ++ /* Our SYN-ACKs must have a >0 window */ ++ ntcph->window = (otcph->syn && !otcph->ack) ? htons(5) : 0; ++ ++ ntcph->urg_ptr = 0; ++ ++ /* Reset flags */ ++ ((u_int8_t *)ntcph)[13] = 0; ++ ++ if (otcph->syn && otcph->ack) { ++ ntcph->rst = 1; ++ ntcph->ack_seq = 0; ++ } else { ++ ntcph->syn = otcph->syn; ++ ntcph->ack = 1; ++ ntcph->ack_seq = htonl(ntohl(otcph->seq) + otcph->syn); ++ } ++ ++ /* Adjust TCP checksum */ ++ ntcph->check = 0; ++ ntcph->check = tcp_v4_check(ntcph, sizeof(struct tcphdr), ++ nskb->nh.iph->saddr, ++ nskb->nh.iph->daddr, ++ csum_partial((char *)ntcph, ++ sizeof(struct tcphdr), 0)); ++ ++ /* Adjust IP TTL */ ++ nskb->nh.iph->ttl = sysctl_ip_default_ttl; ++ ++ /* Set DF, id = 0 */ ++ nskb->nh.iph->frag_off = htons(IP_DF); ++ nskb->nh.iph->id = 0; ++ ++ /* Adjust IP checksum */ ++ nskb->nh.iph->check = 0; ++ nskb->nh.iph->check = ip_fast_csum((unsigned char *)nskb->nh.iph, ++ nskb->nh.iph->ihl); ++ ++ fl.nl_u.ip4_u.daddr = nskb->nh.iph->daddr; ++ fl.nl_u.ip4_u.saddr = local ? nskb->nh.iph->saddr : 0; ++ fl.nl_u.ip4_u.tos = RT_TOS(nskb->nh.iph->tos) | RTO_CONN; ++ fl.oif = 0; ++ ++ if (ip_route_output_key(&nrt, &fl)) ++ goto free_nskb; ++ ++ dst_release(nskb->dst); ++ nskb->dst = &nrt->u.dst; ++ ++ /* "Never happens" */ ++ if (nskb->len > dst_pmtu(nskb->dst)) ++ goto free_nskb; ++ ++ ip_direct_send (nskb); ++ ++ return; ++ ++ free_nskb: ++ kfree_skb(nskb); ++} ++ ++ ++static unsigned int tarpit(struct sk_buff **pskb, ++ const struct net_device *in, ++ const struct net_device *out, ++ unsigned int hooknum, ++ const void *targinfo, ++ void *userinfo) ++{ ++ struct sk_buff *skb = *pskb; ++ struct rtable *rt = (struct rtable*)skb->dst; ++ ++ /* Do we have an input route cache entry? */ ++ if (!rt) ++ return NF_DROP; ++ ++ /* No replies to physical multicast/broadcast */ ++ if (skb->pkt_type != PACKET_HOST && skb->pkt_type != PACKET_OTHERHOST) ++ return NF_DROP; ++ ++ /* Now check at the protocol level */ ++ if (rt->rt_flags&(RTCF_BROADCAST|RTCF_MULTICAST)) ++ return NF_DROP; ++ ++ /* Our naive response construction doesn't deal with IP ++ options, and probably shouldn't try. */ ++ if (skb->nh.iph->ihl*4 != sizeof(struct iphdr)) ++ return NF_DROP; ++ ++ /* We aren't interested in fragments */ ++ if (skb->nh.iph->frag_off & htons(IP_OFFSET)) ++ return NF_DROP; ++ ++ tarpit_tcp(skb,rt,hooknum == NF_IP_LOCAL_IN); ++ ++ return NF_DROP; ++} ++ ++ ++static int check(const char *tablename, ++ const struct ipt_entry *e, ++ void *targinfo, ++ unsigned int targinfosize, ++ unsigned int hook_mask) ++{ ++ /* Only allow these for input/forward packet filtering. */ ++ if (strcmp(tablename, "filter") != 0) { ++ DEBUGP("TARPIT: bad table %s'.\n", tablename); ++ return 0; ++ } ++ if ((hook_mask & ~((1 << NF_IP_LOCAL_IN) ++ | (1 << NF_IP_FORWARD))) != 0) { ++ DEBUGP("TARPIT: bad hook mask %X\n", hook_mask); ++ return 0; ++ } ++ ++ /* Must specify that it's a TCP packet */ ++ if (e->ip.proto != IPPROTO_TCP || (e->ip.invflags & IPT_INV_PROTO)) { ++ DEBUGP("TARPIT: not valid for non-tcp\n"); ++ return 0; ++ } ++ ++ return 1; ++} ++ ++static struct ipt_target ipt_tarpit_reg = { ++ .name = "TARPIT", ++ .target = tarpit, ++ .checkentry = check, ++ .me = THIS_MODULE ++}; ++ ++static int __init init(void) ++{ ++ return ipt_register_target(&ipt_tarpit_reg); ++} ++ ++static void __exit fini(void) ++{ ++ ipt_unregister_target(&ipt_tarpit_reg); ++} ++ ++module_init(init); ++module_exit(fini); +diff -urN linux-2.6.11/net/ipv4/netfilter/ipt_ULOG.c linux.sinabox/net/ipv4/netfilter/ipt_ULOG.c +--- linux-2.6.11/net/ipv4/netfilter/ipt_ULOG.c 2005-03-02 08:37:55.000000000 +0100 ++++ linux.sinabox/net/ipv4/netfilter/ipt_ULOG.c 2005-03-24 19:24:16.000000000 +0100 +@@ -164,7 +164,7 @@ + return skb; + } + +-static void ipt_ulog_packet(unsigned int hooknum, ++void ipt_ulog_packet(unsigned int hooknum, + const struct sk_buff *skb, + const struct net_device *in, + const struct net_device *out, +@@ -415,5 +415,7 @@ + + } + ++EXPORT_SYMBOL(ipt_ulog_packet); ++ + module_init(init); + module_exit(fini); +diff -urN linux-2.6.11/net/ipv4/netfilter/Kconfig linux.sinabox/net/ipv4/netfilter/Kconfig +--- linux-2.6.11/net/ipv4/netfilter/Kconfig 2005-03-02 08:38:20.000000000 +0100 ++++ linux.sinabox/net/ipv4/netfilter/Kconfig 2005-03-26 00:49:04.000000000 +0100 +@@ -396,6 +396,17 @@ + + To compile it as a module, choose M here. If unsure, say N. + ++config IP_NF_TARGET_IMQ ++ tristate "IMQ target support" ++ depends on IP_NF_MANGLE ++ help ++ This option adds a `IMQ' target which is used to specify if and ++ to which IMQ device packets should get enqueued/dequeued. ++ ++ For more information visit: http://www.linuximq.net/ ++ ++ To compile it as a module, choose M here. If unsure, say N. ++ + config IP_NF_TARGET_LOG + tristate "LOG target support" + depends on IP_NF_IPTABLES +@@ -692,5 +703,125 @@ + Allows altering the ARP packet payload: source and destination + hardware and network addresses. + ++config IP_NF_SET ++ tristate "IP set support" ++ depends on INET && NETFILTER ++ help ++ This option adds IP set support to the kernel. ++ In order to define and use sets, you need the userspace utility ++ ipset(8). ++ ++ To compile it as a module, choose M here. If unsure, say N. ++ ++config IP_NF_SET_MAX ++ int "Maximum number of IP sets" ++ default 256 ++ range 2 65534 ++ depends on IP_NF_SET ++ help ++ You can define here default value of the maximum number ++ of IP sets for the kernel. ++ ++ The value can be overriden by the 'max_sets' module ++ parameter of the 'ip_set' module. ++ ++config IP_NF_SET_HASHSIZE ++ int "Hash size for bindings of IP sets" ++ default 1024 ++ depends on IP_NF_SET ++ help ++ You can define here default value of the hash size for ++ bindings of IP sets. ++ ++ The value can be overriden by the 'hash_size' module ++ parameter of the 'ip_set' module. ++ ++config IP_NF_SET_IPMAP ++ tristate "ipmap set support" ++ depends on IP_NF_SET ++ help ++ This option adds the ipmap set type support. ++ ++ To compile it as a module, choose M here. If unsure, say N. ++ ++config IP_NF_SET_MACIPMAP ++ tristate "macipmap set support" ++ depends on IP_NF_SET ++ help ++ This option adds the macipmap set type support. ++ ++ To compile it as a module, choose M here. If unsure, say N. ++ ++config IP_NF_SET_PORTMAP ++ tristate "portmap set support" ++ depends on IP_NF_SET ++ help ++ This option adds the portmap set type support. ++ ++ To compile it as a module, choose M here. If unsure, say N. ++ ++config IP_NF_SET_IPHASH ++ tristate "iphash set support" ++ depends on IP_NF_SET ++ help ++ This option adds the iphash set type support. ++ ++ To compile it as a module, choose M here. If unsure, say N. ++ ++config IP_NF_SET_NETHASH ++ tristate "nethash set support" ++ depends on IP_NF_SET ++ help ++ This option adds the nethash set type support. ++ ++ To compile it as a module, choose M here. If unsure, say N. ++ ++config IP_NF_MATCH_SET ++ tristate "set match support" ++ depends on IP_NF_SET ++ help ++ Set matching matches against given IP sets. ++ You need the ipset utility to create and set up the sets. ++ ++ To compile it as a module, choose M here. If unsure, say N. ++ ++config IP_NF_TARGET_SET ++ tristate "SET target support" ++ depends on IP_NF_SET ++ help ++ The SET target makes possible to add/delete entries ++ in IP sets. ++ You need the ipset utility to create and set up the sets. ++ ++ To compile it as a module, choose M here. If unsure, say N. ++ ++ ++config IP_NF_TARGET_TARPIT ++ tristate 'TARPIT target support' ++ depends on IP_NF_FILTER ++ help ++ Adds a TARPIT target to iptables, which captures and holds ++ incoming TCP connections using no local per-connection resources. ++ Connections are accepted, but immediately switched to the persist ++ state (0 byte window), in which the remote side stops sending data ++ and asks to continue every 60-240 seconds. Attempts to close the ++ connection are ignored, forcing the remote side to time out the ++ connection in 12-24 minutes. ++ ++ This offers similar functionality to LaBrea ++ but doesn't require dedicated ++ hardware or IPs. Any TCP port that you would normally DROP or REJECT ++ can instead become a tarpit. ++ ++config IP_NF_MATCH_IPP2P ++ tristate 'IPP2P match support' ++ depends on IP_NF_IPTABLES ++ help ++ This option makes possible to match some P2P packets ++ therefore helps controlling such traffic. ++ ++ If you want to compile it as a module, say M here and read ++ . If unsure, say `N'. ++ + endmenu + +diff -urN linux-2.6.11/net/ipv4/netfilter/Kconfig.orig linux.sinabox/net/ipv4/netfilter/Kconfig.orig +--- linux-2.6.11/net/ipv4/netfilter/Kconfig.orig 1970-01-01 01:00:00.000000000 +0100 ++++ linux.sinabox/net/ipv4/netfilter/Kconfig.orig 2005-03-24 19:26:06.000000000 +0100 +@@ -0,0 +1,816 @@ ++# ++# IP netfilter configuration ++# ++ ++menu "IP: Netfilter Configuration" ++ depends on INET && NETFILTER ++ ++# connection tracking, helpers and protocols ++config IP_NF_CONNTRACK ++ tristate "Connection tracking (required for masq/NAT)" ++ ---help--- ++ Connection tracking keeps a record of what packets have passed ++ through your machine, in order to figure out how they are related ++ into connections. ++ ++ This is required to do Masquerading or other kinds of Network ++ Address Translation (except for Fast NAT). It can also be used to ++ enhance packet filtering (see `Connection state match support' ++ below). ++ ++ To compile it as a module, choose M here. If unsure, say N. ++ ++config IP_NF_CT_ACCT ++ bool "Connection tracking flow accounting" ++ depends on IP_NF_CONNTRACK ++ help ++ If this option is enabled, the connection tracking code will ++ keep per-flow packet and byte counters. ++ ++ Those counters can be used for flow-based accounting or the ++ `connbytes' match. ++ ++ If unsure, say `N'. ++ ++config IP_NF_CONNTRACK_MARK ++ bool 'Connection mark tracking support' ++ help ++ This option enables support for connection marks, used by the ++ `CONNMARK' target and `connmark' match. Similar to the mark value ++ of packets, but this mark value is kept in the conntrack session ++ instead of the individual packets. ++ ++config IP_NF_CT_PROTO_SCTP ++ tristate 'SCTP protocol connection tracking support (EXPERIMENTAL)' ++ depends on IP_NF_CONNTRACK && EXPERIMENTAL ++ help ++ With this option enabled, the connection tracking code will ++ be able to do state tracking on SCTP connections. ++ ++ If you want to compile it as a module, say M here and read ++ . If unsure, say `N'. ++ ++config IP_NF_FTP ++ tristate "FTP protocol support" ++ depends on IP_NF_CONNTRACK ++ help ++ Tracking FTP connections is problematic: special helpers are ++ required for tracking them, and doing masquerading and other forms ++ of Network Address Translation on them. ++ ++ To compile it as a module, choose M here. If unsure, say Y. ++ ++config IP_NF_IRC ++ tristate "IRC protocol support" ++ depends on IP_NF_CONNTRACK ++ ---help--- ++ There is a commonly-used extension to IRC called ++ Direct Client-to-Client Protocol (DCC). This enables users to send ++ files to each other, and also chat to each other without the need ++ of a server. DCC Sending is used anywhere you send files over IRC, ++ and DCC Chat is most commonly used by Eggdrop bots. If you are ++ using NAT, this extension will enable you to send files and initiate ++ chats. Note that you do NOT need this extension to get files or ++ have others initiate chats, or everything else in IRC. ++ ++ To compile it as a module, choose M here. If unsure, say Y. ++ ++config IP_NF_TFTP ++ tristate "TFTP protocol support" ++ depends on IP_NF_CONNTRACK ++ help ++ TFTP connection tracking helper, this is required depending ++ on how restrictive your ruleset is. ++ If you are using a tftp client behind -j SNAT or -j MASQUERADING ++ you will need this. ++ ++ To compile it as a module, choose M here. If unsure, say Y. ++ ++config IP_NF_AMANDA ++ tristate "Amanda backup protocol support" ++ depends on IP_NF_CONNTRACK ++ help ++ If you are running the Amanda backup package ++ on this machine or machines that will be MASQUERADED through this ++ machine, then you may want to enable this feature. This allows the ++ connection tracking and natting code to allow the sub-channels that ++ Amanda requires for communication of the backup data, messages and ++ index. ++ ++ To compile it as a module, choose M here. If unsure, say Y. ++ ++config IP_NF_QUEUE ++ tristate "Userspace queueing via NETLINK" ++ help ++ Netfilter has the ability to queue packets to user space: the ++ netlink device can be used to access them using this driver. ++ ++ To compile it as a module, choose M here. If unsure, say N. ++ ++config IP_NF_IPTABLES ++ tristate "IP tables support (required for filtering/masq/NAT)" ++ help ++ iptables is a general, extensible packet identification framework. ++ The packet filtering and full NAT (masquerading, port forwarding, ++ etc) subsystems now use this: say `Y' or `M' here if you want to use ++ either of those. ++ ++ To compile it as a module, choose M here. If unsure, say N. ++ ++# The matches. ++config IP_NF_MATCH_LIMIT ++ tristate "limit match support" ++ depends on IP_NF_IPTABLES ++ help ++ limit matching allows you to control the rate at which a rule can be ++ matched: mainly useful in combination with the LOG target ("LOG ++ target support", below) and to avoid some Denial of Service attacks. ++ ++ To compile it as a module, choose M here. If unsure, say N. ++ ++config IP_NF_MATCH_IPRANGE ++ tristate "IP range match support" ++ depends on IP_NF_IPTABLES ++ help ++ This option makes possible to match IP addresses against IP address ++ ranges. ++ ++ To compile it as a module, choose M here. If unsure, say N. ++ ++config IP_NF_MATCH_MAC ++ tristate "MAC address match support" ++ depends on IP_NF_IPTABLES ++ help ++ MAC matching allows you to match packets based on the source ++ Ethernet address of the packet. ++ ++ To compile it as a module, choose M here. If unsure, say N. ++ ++config IP_NF_MATCH_PKTTYPE ++ tristate "Packet type match support" ++ depends on IP_NF_IPTABLES ++ help ++ Packet type matching allows you to match a packet by ++ its "class", eg. BROADCAST, MULTICAST, ... ++ ++ Typical usage: ++ iptables -A INPUT -m pkttype --pkt-type broadcast -j LOG ++ ++ To compile it as a module, choose M here. If unsure, say N. ++ ++config IP_NF_MATCH_MARK ++ tristate "netfilter MARK match support" ++ depends on IP_NF_IPTABLES ++ help ++ Netfilter mark matching allows you to match packets based on the ++ `nfmark' value in the packet. This can be set by the MARK target ++ (see below). ++ ++ To compile it as a module, choose M here. If unsure, say N. ++ ++config IP_NF_MATCH_MULTIPORT ++ tristate "Multiple port match support" ++ depends on IP_NF_IPTABLES ++ help ++ Multiport matching allows you to match TCP or UDP packets based on ++ a series of source or destination ports: normally a rule can only ++ match a single range of ports. ++ ++ To compile it as a module, choose M here. If unsure, say N. ++ ++config IP_NF_MATCH_TOS ++ tristate "TOS match support" ++ depends on IP_NF_IPTABLES ++ help ++ TOS matching allows you to match packets based on the Type Of ++ Service fields of the IP packet. ++ ++ To compile it as a module, choose M here. If unsure, say N. ++ ++config IP_NF_MATCH_RECENT ++ tristate "recent match support" ++ depends on IP_NF_IPTABLES ++ help ++ This match is used for creating one or many lists of recently ++ used addresses and then matching against that/those list(s). ++ ++ Short options are available by using 'iptables -m recent -h' ++ Official Website: ++ ++ To compile it as a module, choose M here. If unsure, say N. ++ ++config IP_NF_MATCH_ECN ++ tristate "ECN match support" ++ depends on IP_NF_IPTABLES ++ help ++ This option adds a `ECN' match, which allows you to match against ++ the IPv4 and TCP header ECN fields. ++ ++ To compile it as a module, choose M here. If unsure, say N. ++ ++config IP_NF_MATCH_DSCP ++ tristate "DSCP match support" ++ depends on IP_NF_IPTABLES ++ help ++ This option adds a `DSCP' match, which allows you to match against ++ the IPv4 header DSCP field (DSCP codepoint). ++ ++ The DSCP codepoint can have any value between 0x0 and 0x4f. ++ ++ To compile it as a module, choose M here. If unsure, say N. ++ ++config IP_NF_MATCH_AH_ESP ++ tristate "AH/ESP match support" ++ depends on IP_NF_IPTABLES ++ help ++ These two match extensions (`ah' and `esp') allow you to match a ++ range of SPIs inside AH or ESP headers of IPSec packets. ++ ++ To compile it as a module, choose M here. If unsure, say N. ++ ++config IP_NF_MATCH_LENGTH ++ tristate "LENGTH match support" ++ depends on IP_NF_IPTABLES ++ help ++ This option allows you to match the length of a packet against a ++ specific value or range of values. ++ ++ To compile it as a module, choose M here. If unsure, say N. ++ ++config IP_NF_MATCH_TTL ++ tristate "TTL match support" ++ depends on IP_NF_IPTABLES ++ help ++ This adds CONFIG_IP_NF_MATCH_TTL option, which enabled the user ++ to match packets by their TTL value. ++ ++ To compile it as a module, choose M here. If unsure, say N. ++ ++config IP_NF_MATCH_TCPMSS ++ tristate "tcpmss match support" ++ depends on IP_NF_IPTABLES ++ help ++ This option adds a `tcpmss' match, which allows you to examine the ++ MSS value of TCP SYN packets, which control the maximum packet size ++ for that connection. ++ ++ To compile it as a module, choose M here. If unsure, say N. ++ ++config IP_NF_MATCH_HELPER ++ tristate "Helper match support" ++ depends on IP_NF_CONNTRACK && IP_NF_IPTABLES ++ help ++ Helper matching allows you to match packets in dynamic connections ++ tracked by a conntrack-helper, ie. ip_conntrack_ftp ++ ++ To compile it as a module, choose M here. If unsure, say Y. ++ ++config IP_NF_MATCH_STATE ++ tristate "Connection state match support" ++ depends on IP_NF_CONNTRACK && IP_NF_IPTABLES ++ help ++ Connection state matching allows you to match packets based on their ++ relationship to a tracked connection (ie. previous packets). This ++ is a powerful tool for packet classification. ++ ++ To compile it as a module, choose M here. If unsure, say N. ++ ++config IP_NF_MATCH_CONNTRACK ++ tristate "Connection tracking match support" ++ depends on IP_NF_CONNTRACK && IP_NF_IPTABLES ++ help ++ This is a general conntrack match module, a superset of the state match. ++ ++ It allows matching on additional conntrack information, which is ++ useful in complex configurations, such as NAT gateways with multiple ++ internet links or tunnels. ++ ++ To compile it as a module, choose M here. If unsure, say N. ++ ++config IP_NF_MATCH_OWNER ++ tristate "Owner match support" ++ depends on IP_NF_IPTABLES ++ help ++ Packet owner matching allows you to match locally-generated packets ++ based on who created them: the user, group, process or session. ++ ++ To compile it as a module, choose M here. If unsure, say N. ++ ++config IP_NF_MATCH_PHYSDEV ++ tristate "Physdev match support" ++ depends on IP_NF_IPTABLES && BRIDGE_NETFILTER ++ help ++ Physdev packet matching matches against the physical bridge ports ++ the IP packet arrived on or will leave by. ++ ++ To compile it as a module, choose M here. If unsure, say N. ++ ++config IP_NF_MATCH_ADDRTYPE ++ tristate 'address type match support' ++ depends on IP_NF_IPTABLES ++ help ++ This option allows you to match what routing thinks of an address, ++ eg. UNICAST, LOCAL, BROADCAST, ... ++ ++ If you want to compile it as a module, say M here and read ++ . If unsure, say `N'. ++ ++config IP_NF_MATCH_REALM ++ tristate 'realm match support' ++ depends on IP_NF_IPTABLES ++ select NET_CLS_ROUTE ++ help ++ This option adds a `realm' match, which allows you to use the realm ++ key from the routing subsystem inside iptables. ++ ++ This match pretty much resembles the CONFIG_NET_CLS_ROUTE4 option ++ in tc world. ++ ++ If you want to compile it as a module, say M here and read ++ . If unsure, say `N'. ++ ++config IP_NF_MATCH_SCTP ++ tristate 'SCTP protocol match support' ++ depends on IP_NF_IPTABLES ++ help ++ With this option enabled, you will be able to use the iptables ++ `sctp' match in order to match on SCTP source/destination ports ++ and SCTP chunk types. ++ ++ If you want to compile it as a module, say M here and read ++ . If unsure, say `N'. ++ ++config IP_NF_MATCH_COMMENT ++ tristate 'comment match support' ++ depends on IP_NF_IPTABLES ++ help ++ This option adds a `comment' dummy-match, which allows you to put ++ comments in your iptables ruleset. ++ ++ If you want to compile it as a module, say M here and read ++ . If unsure, say `N'. ++ ++config IP_NF_MATCH_CONNMARK ++ tristate 'Connection mark match support' ++ depends on IP_NF_CONNTRACK_MARK && IP_NF_IPTABLES ++ help ++ This option adds a `connmark' match, which allows you to match the ++ connection mark value previously set for the session by `CONNMARK'. ++ ++ If you want to compile it as a module, say M here and read ++ . The module will be called ++ ipt_connmark.o. If unsure, say `N'. ++ ++config IP_NF_MATCH_HASHLIMIT ++ tristate 'hashlimit match support' ++ depends on IP_NF_IPTABLES ++ help ++ This option adds a new iptables `hashlimit' match. ++ ++ As opposed to `limit', this match dynamically crates a hash table ++ of limit buckets, based on your selection of source/destination ++ ip addresses and/or ports. ++ ++ It enables you to express policies like `10kpps for any given ++ destination IP' or `500pps from any given source IP' with a single ++ IPtables rule. ++ ++# `filter', generic and specific targets ++config IP_NF_FILTER ++ tristate "Packet filtering" ++ depends on IP_NF_IPTABLES ++ help ++ Packet filtering defines a table `filter', which has a series of ++ rules for simple packet filtering at local input, forwarding and ++ local output. See the man page for iptables(8). ++ ++ To compile it as a module, choose M here. If unsure, say N. ++ ++config IP_NF_TARGET_REJECT ++ tristate "REJECT target support" ++ depends on IP_NF_FILTER ++ help ++ The REJECT target allows a filtering rule to specify that an ICMP ++ error should be issued in response to an incoming packet, rather ++ than silently being dropped. ++ ++ To compile it as a module, choose M here. If unsure, say N. ++ ++config IP_NF_TARGET_LOG ++ tristate "LOG target support" ++ depends on IP_NF_IPTABLES ++ help ++ This option adds a `LOG' target, which allows you to create rules in ++ any iptables table which records the packet header to the syslog. ++ ++ To compile it as a module, choose M here. If unsure, say N. ++ ++config IP_NF_TARGET_ULOG ++ tristate "ULOG target support" ++ depends on IP_NF_IPTABLES ++ ---help--- ++ This option adds a `ULOG' target, which allows you to create rules in ++ any iptables table. The packet is passed to a userspace logging ++ daemon using netlink multicast sockets; unlike the LOG target ++ which can only be viewed through syslog. ++ ++ The apropriate userspace logging daemon (ulogd) may be obtained from ++ ++ ++ To compile it as a module, choose M here. If unsure, say N. ++ ++config IP_NF_TARGET_TCPMSS ++ tristate "TCPMSS target support" ++ depends on IP_NF_IPTABLES ++ ---help--- ++ This option adds a `TCPMSS' target, which allows you to alter the ++ MSS value of TCP SYN packets, to control the maximum size for that ++ connection (usually limiting it to your outgoing interface's MTU ++ minus 40). ++ ++ This is used to overcome criminally braindead ISPs or servers which ++ block ICMP Fragmentation Needed packets. The symptoms of this ++ problem are that everything works fine from your Linux ++ firewall/router, but machines behind it can never exchange large ++ packets: ++ 1) Web browsers connect, then hang with no data received. ++ 2) Small mail works fine, but large emails hang. ++ 3) ssh works fine, but scp hangs after initial handshaking. ++ ++ Workaround: activate this option and add a rule to your firewall ++ configuration like: ++ ++ iptables -A FORWARD -p tcp --tcp-flags SYN,RST SYN \ ++ -j TCPMSS --clamp-mss-to-pmtu ++ ++ To compile it as a module, choose M here. If unsure, say N. ++ ++# NAT + specific targets ++config IP_NF_NAT ++ tristate "Full NAT" ++ depends on IP_NF_IPTABLES && IP_NF_CONNTRACK ++ help ++ The Full NAT option allows masquerading, port forwarding and other ++ forms of full Network Address Port Translation. It is controlled by ++ the `nat' table in iptables: see the man page for iptables(8). ++ ++ To compile it as a module, choose M here. If unsure, say N. ++ ++config IP_NF_NAT_NEEDED ++ bool ++ depends on IP_NF_NAT != n ++ default y ++ ++config IP_NF_TARGET_MASQUERADE ++ tristate "MASQUERADE target support" ++ depends on IP_NF_NAT ++ help ++ Masquerading is a special case of NAT: all outgoing connections are ++ changed to seem to come from a particular interface's address, and ++ if the interface goes down, those connections are lost. This is ++ only useful for dialup accounts with dynamic IP address (ie. your IP ++ address will be different on next dialup). ++ ++ To compile it as a module, choose M here. If unsure, say N. ++ ++config IP_NF_TARGET_REDIRECT ++ tristate "REDIRECT target support" ++ depends on IP_NF_NAT ++ help ++ REDIRECT is a special case of NAT: all incoming connections are ++ mapped onto the incoming interface's address, causing the packets to ++ come to the local machine instead of passing through. This is ++ useful for transparent proxies. ++ ++ To compile it as a module, choose M here. If unsure, say N. ++ ++config IP_NF_TARGET_NETMAP ++ tristate "NETMAP target support" ++ depends on IP_NF_NAT ++ help ++ NETMAP is an implementation of static 1:1 NAT mapping of network ++ addresses. It maps the network address part, while keeping the host ++ address part intact. It is similar to Fast NAT, except that ++ Netfilter's connection tracking doesn't work well with Fast NAT. ++ ++ To compile it as a module, choose M here. If unsure, say N. ++ ++config IP_NF_TARGET_SAME ++ tristate "SAME target support" ++ depends on IP_NF_NAT ++ help ++ This option adds a `SAME' target, which works like the standard SNAT ++ target, but attempts to give clients the same IP for all connections. ++ ++ To compile it as a module, choose M here. If unsure, say N. ++ ++config IP_NF_NAT_SNMP_BASIC ++ tristate "Basic SNMP-ALG support (EXPERIMENTAL)" ++ depends on EXPERIMENTAL && IP_NF_NAT ++ ---help--- ++ ++ This module implements an Application Layer Gateway (ALG) for ++ SNMP payloads. In conjunction with NAT, it allows a network ++ management system to access multiple private networks with ++ conflicting addresses. It works by modifying IP addresses ++ inside SNMP payloads to match IP-layer NAT mapping. ++ ++ This is the "basic" form of SNMP-ALG, as described in RFC 2962 ++ ++ To compile it as a module, choose M here. If unsure, say N. ++ ++config IP_NF_NAT_IRC ++ tristate ++ depends on IP_NF_IPTABLES!=n && IP_NF_CONNTRACK!=n && IP_NF_NAT!=n ++ default IP_NF_NAT if IP_NF_IRC=y ++ default m if IP_NF_IRC=m ++ ++# If they want FTP, set to $CONFIG_IP_NF_NAT (m or y), ++# or $CONFIG_IP_NF_FTP (m or y), whichever is weaker. Argh. ++config IP_NF_NAT_FTP ++ tristate ++ depends on IP_NF_IPTABLES!=n && IP_NF_CONNTRACK!=n && IP_NF_NAT!=n ++ default IP_NF_NAT if IP_NF_FTP=y ++ default m if IP_NF_FTP=m ++ ++config IP_NF_NAT_TFTP ++ tristate ++ depends on IP_NF_IPTABLES!=n && IP_NF_CONNTRACK!=n && IP_NF_NAT!=n ++ default IP_NF_NAT if IP_NF_TFTP=y ++ default m if IP_NF_TFTP=m ++ ++config IP_NF_NAT_AMANDA ++ tristate ++ depends on IP_NF_IPTABLES!=n && IP_NF_CONNTRACK!=n && IP_NF_NAT!=n ++ default IP_NF_NAT if IP_NF_AMANDA=y ++ default m if IP_NF_AMANDA=m ++ ++# mangle + specific targets ++config IP_NF_MANGLE ++ tristate "Packet mangling" ++ depends on IP_NF_IPTABLES ++ help ++ This option adds a `mangle' table to iptables: see the man page for ++ iptables(8). This table is used for various packet alterations ++ which can effect how the packet is routed. ++ ++ To compile it as a module, choose M here. If unsure, say N. ++ ++config IP_NF_TARGET_TOS ++ tristate "TOS target support" ++ depends on IP_NF_MANGLE ++ help ++ This option adds a `TOS' target, which allows you to create rules in ++ the `mangle' table which alter the Type Of Service field of an IP ++ packet prior to routing. ++ ++ To compile it as a module, choose M here. If unsure, say N. ++ ++config IP_NF_TARGET_ECN ++ tristate "ECN target support" ++ depends on IP_NF_MANGLE ++ ---help--- ++ This option adds a `ECN' target, which can be used in the iptables mangle ++ table. ++ ++ You can use this target to remove the ECN bits from the IPv4 header of ++ an IP packet. This is particularly useful, if you need to work around ++ existing ECN blackholes on the internet, but don't want to disable ++ ECN support in general. ++ ++ To compile it as a module, choose M here. If unsure, say N. ++ ++config IP_NF_TARGET_DSCP ++ tristate "DSCP target support" ++ depends on IP_NF_MANGLE ++ help ++ This option adds a `DSCP' match, which allows you to match against ++ the IPv4 header DSCP field (DSCP codepoint). ++ ++ The DSCP codepoint can have any value between 0x0 and 0x4f. ++ ++ To compile it as a module, choose M here. If unsure, say N. ++ ++config IP_NF_TARGET_MARK ++ tristate "MARK target support" ++ depends on IP_NF_MANGLE ++ help ++ This option adds a `MARK' target, which allows you to create rules ++ in the `mangle' table which alter the netfilter mark (nfmark) field ++ associated with the packet prior to routing. This can change ++ the routing method (see `Use netfilter MARK value as routing ++ key') and can also be used by other subsystems to change their ++ behavior. ++ ++ To compile it as a module, choose M here. If unsure, say N. ++ ++config IP_NF_TARGET_CLASSIFY ++ tristate "CLASSIFY target support" ++ depends on IP_NF_MANGLE ++ help ++ This option adds a `CLASSIFY' target, which enables the user to set ++ the priority of a packet. Some qdiscs can use this value for ++ classification, among these are: ++ ++ atm, cbq, dsmark, pfifo_fast, htb, prio ++ ++ To compile it as a module, choose M here. If unsure, say N. ++ ++config IP_NF_TARGET_CONNMARK ++ tristate 'CONNMARK target support' ++ depends on IP_NF_CONNTRACK_MARK && IP_NF_MANGLE ++ help ++ This option adds a `CONNMARK' target, which allows one to manipulate ++ the connection mark value. Similar to the MARK target, but ++ affects the connection mark value rather than the packet mark value. ++ ++ If you want to compile it as a module, say M here and read ++ . The module will be called ++ ipt_CONNMARK.o. If unsure, say `N'. ++ ++config IP_NF_TARGET_CLUSTERIP ++ tristate "CLUSTERIP target support (EXPERIMENTAL)" ++ depends on IP_NF_CONNTRACK_MARK && IP_NF_IPTABLES && EXPERIMENTAL ++ help ++ The CLUSTERIP target allows you to build load-balancing clusters of ++ network servers without having a dedicated load-balancing ++ router/server/switch. ++ ++ To compile it as a module, choose M here. If unsure, say N. ++ ++# raw + specific targets ++config IP_NF_RAW ++ tristate 'raw table support (required for NOTRACK/TRACE)' ++ depends on IP_NF_IPTABLES ++ help ++ This option adds a `raw' table to iptables. This table is the very ++ first in the netfilter framework and hooks in at the PREROUTING ++ and OUTPUT chains. ++ ++ If you want to compile it as a module, say M here and read ++ . If unsure, say `N'. ++ ++config IP_NF_TARGET_NOTRACK ++ tristate 'NOTRACK target support' ++ depends on IP_NF_RAW ++ depends on IP_NF_CONNTRACK ++ help ++ The NOTRACK target allows a select rule to specify ++ which packets *not* to enter the conntrack/NAT ++ subsystem with all the consequences (no ICMP error tracking, ++ no protocol helpers for the selected packets). ++ ++ If you want to compile it as a module, say M here and read ++ . If unsure, say `N'. ++ ++ ++# ARP tables ++config IP_NF_ARPTABLES ++ tristate "ARP tables support" ++ help ++ arptables is a general, extensible packet identification framework. ++ The ARP packet filtering and mangling (manipulation)subsystems ++ use this: say Y or M here if you want to use either of those. ++ ++ To compile it as a module, choose M here. If unsure, say N. ++ ++config IP_NF_ARPFILTER ++ tristate "ARP packet filtering" ++ depends on IP_NF_ARPTABLES ++ help ++ ARP packet filtering defines a table `filter', which has a series of ++ rules for simple ARP packet filtering at local input and ++ local output. On a bridge, you can also specify filtering rules ++ for forwarded ARP packets. See the man page for arptables(8). ++ ++ To compile it as a module, choose M here. If unsure, say N. ++ ++config IP_NF_ARP_MANGLE ++ tristate "ARP payload mangling" ++ depends on IP_NF_ARPTABLES ++ help ++ Allows altering the ARP packet payload: source and destination ++ hardware and network addresses. ++ ++config IP_NF_SET ++ tristate "IP set support" ++ depends on INET && NETFILTER ++ help ++ This option adds IP set support to the kernel. ++ In order to define and use sets, you need the userspace utility ++ ipset(8). ++ ++ To compile it as a module, choose M here. If unsure, say N. ++ ++config IP_NF_SET_MAX ++ int "Maximum number of IP sets" ++ default 256 ++ range 2 65534 ++ depends on IP_NF_SET ++ help ++ You can define here default value of the maximum number ++ of IP sets for the kernel. ++ ++ The value can be overriden by the 'max_sets' module ++ parameter of the 'ip_set' module. ++ ++config IP_NF_SET_HASHSIZE ++ int "Hash size for bindings of IP sets" ++ default 1024 ++ depends on IP_NF_SET ++ help ++ You can define here default value of the hash size for ++ bindings of IP sets. ++ ++ The value can be overriden by the 'hash_size' module ++ parameter of the 'ip_set' module. ++ ++config IP_NF_SET_IPMAP ++ tristate "ipmap set support" ++ depends on IP_NF_SET ++ help ++ This option adds the ipmap set type support. ++ ++ To compile it as a module, choose M here. If unsure, say N. ++ ++config IP_NF_SET_MACIPMAP ++ tristate "macipmap set support" ++ depends on IP_NF_SET ++ help ++ This option adds the macipmap set type support. ++ ++ To compile it as a module, choose M here. If unsure, say N. ++ ++config IP_NF_SET_PORTMAP ++ tristate "portmap set support" ++ depends on IP_NF_SET ++ help ++ This option adds the portmap set type support. ++ ++ To compile it as a module, choose M here. If unsure, say N. ++ ++config IP_NF_SET_IPHASH ++ tristate "iphash set support" ++ depends on IP_NF_SET ++ help ++ This option adds the iphash set type support. ++ ++ To compile it as a module, choose M here. If unsure, say N. ++ ++config IP_NF_SET_NETHASH ++ tristate "nethash set support" ++ depends on IP_NF_SET ++ help ++ This option adds the nethash set type support. ++ ++ To compile it as a module, choose M here. If unsure, say N. ++ ++config IP_NF_MATCH_SET ++ tristate "set match support" ++ depends on IP_NF_SET ++ help ++ Set matching matches against given IP sets. ++ You need the ipset utility to create and set up the sets. ++ ++ To compile it as a module, choose M here. If unsure, say N. ++ ++config IP_NF_TARGET_SET ++ tristate "SET target support" ++ depends on IP_NF_SET ++ help ++ The SET target makes possible to add/delete entries ++ in IP sets. ++ You need the ipset utility to create and set up the sets. ++ ++ To compile it as a module, choose M here. If unsure, say N. ++ ++ ++config IP_NF_TARGET_TARPIT ++ tristate 'TARPIT target support' ++ depends on IP_NF_FILTER ++ help ++ Adds a TARPIT target to iptables, which captures and holds ++ incoming TCP connections using no local per-connection resources. ++ Connections are accepted, but immediately switched to the persist ++ state (0 byte window), in which the remote side stops sending data ++ and asks to continue every 60-240 seconds. Attempts to close the ++ connection are ignored, forcing the remote side to time out the ++ connection in 12-24 minutes. ++ ++ This offers similar functionality to LaBrea ++ but doesn't require dedicated ++ hardware or IPs. Any TCP port that you would normally DROP or REJECT ++ can instead become a tarpit. ++ ++config IP_NF_MATCH_IPP2P ++ tristate 'IPP2P match support' ++ depends on IP_NF_IPTABLES ++ help ++ This option makes possible to match some P2P packets ++ therefore helps controlling such traffic. ++ ++ If you want to compile it as a module, say M here and read ++ . If unsure, say `N'. ++ ++endmenu ++ +diff -urN linux-2.6.11/net/ipv4/netfilter/Makefile linux.sinabox/net/ipv4/netfilter/Makefile +--- linux-2.6.11/net/ipv4/netfilter/Makefile 2005-03-02 08:37:50.000000000 +0100 ++++ linux.sinabox/net/ipv4/netfilter/Makefile 2005-03-26 00:49:04.000000000 +0100 +@@ -36,9 +36,11 @@ + # matches + obj-$(CONFIG_IP_NF_MATCH_HELPER) += ipt_helper.o + obj-$(CONFIG_IP_NF_MATCH_LIMIT) += ipt_limit.o ++obj-$(CONFIG_IP_NF_MATCH_IPP2P) += ipt_ipp2p.o + obj-$(CONFIG_IP_NF_MATCH_HASHLIMIT) += ipt_hashlimit.o + obj-$(CONFIG_IP_NF_MATCH_SCTP) += ipt_sctp.o + obj-$(CONFIG_IP_NF_MATCH_MARK) += ipt_mark.o ++obj-$(CONFIG_IP_NF_MATCH_SET) += ipt_set.o + obj-$(CONFIG_IP_NF_MATCH_MAC) += ipt_mac.o + obj-$(CONFIG_IP_NF_MATCH_IPRANGE) += ipt_iprange.o + obj-$(CONFIG_IP_NF_MATCH_PKTTYPE) += ipt_pkttype.o +@@ -62,10 +64,12 @@ + + # targets + obj-$(CONFIG_IP_NF_TARGET_REJECT) += ipt_REJECT.o ++obj-$(CONFIG_IP_NF_TARGET_TARPIT) += ipt_TARPIT.o + obj-$(CONFIG_IP_NF_TARGET_TOS) += ipt_TOS.o + obj-$(CONFIG_IP_NF_TARGET_ECN) += ipt_ECN.o + obj-$(CONFIG_IP_NF_TARGET_DSCP) += ipt_DSCP.o + obj-$(CONFIG_IP_NF_TARGET_MARK) += ipt_MARK.o ++obj-$(CONFIG_IP_NF_TARGET_IMQ) += ipt_IMQ.o + obj-$(CONFIG_IP_NF_TARGET_MASQUERADE) += ipt_MASQUERADE.o + obj-$(CONFIG_IP_NF_TARGET_REDIRECT) += ipt_REDIRECT.o + obj-$(CONFIG_IP_NF_TARGET_NETMAP) += ipt_NETMAP.o +@@ -77,6 +81,15 @@ + obj-$(CONFIG_IP_NF_TARGET_ULOG) += ipt_ULOG.o + obj-$(CONFIG_IP_NF_TARGET_TCPMSS) += ipt_TCPMSS.o + obj-$(CONFIG_IP_NF_TARGET_NOTRACK) += ipt_NOTRACK.o ++obj-$(CONFIG_IP_NF_TARGET_SET) += ipt_SET.o ++ ++# sets ++obj-$(CONFIG_IP_NF_SET) += ip_set.o ++obj-$(CONFIG_IP_NF_SET_IPMAP) += ip_set_ipmap.o ++obj-$(CONFIG_IP_NF_SET_PORTMAP) += ip_set_portmap.o ++obj-$(CONFIG_IP_NF_SET_MACIPMAP) += ip_set_macipmap.o ++obj-$(CONFIG_IP_NF_SET_IPHASH) += ip_set_iphash.o ++obj-$(CONFIG_IP_NF_SET_NETHASH) += ip_set_nethash.o + obj-$(CONFIG_IP_NF_TARGET_CLUSTERIP) += ipt_CLUSTERIP.o + + # generic ARP tables +diff -urN linux-2.6.11/net/ipv4/netfilter/Makefile.orig linux.sinabox/net/ipv4/netfilter/Makefile.orig +--- linux-2.6.11/net/ipv4/netfilter/Makefile.orig 1970-01-01 01:00:00.000000000 +0100 ++++ linux.sinabox/net/ipv4/netfilter/Makefile.orig 2005-03-24 19:26:06.000000000 +0100 +@@ -0,0 +1,101 @@ ++# ++# Makefile for the netfilter modules on top of IPv4. ++# ++ ++# objects for the standalone - connection tracking / NAT ++ip_conntrack-objs := ip_conntrack_standalone.o ip_conntrack_core.o ip_conntrack_proto_generic.o ip_conntrack_proto_tcp.o ip_conntrack_proto_udp.o ip_conntrack_proto_icmp.o ++iptable_nat-objs := ip_nat_standalone.o ip_nat_rule.o ip_nat_core.o ip_nat_helper.o ip_nat_proto_unknown.o ip_nat_proto_tcp.o ip_nat_proto_udp.o ip_nat_proto_icmp.o ++ ++# connection tracking ++obj-$(CONFIG_IP_NF_CONNTRACK) += ip_conntrack.o ++ ++# SCTP protocol connection tracking ++obj-$(CONFIG_IP_NF_CT_PROTO_SCTP) += ip_conntrack_proto_sctp.o ++ ++# connection tracking helpers ++obj-$(CONFIG_IP_NF_AMANDA) += ip_conntrack_amanda.o ++obj-$(CONFIG_IP_NF_TFTP) += ip_conntrack_tftp.o ++obj-$(CONFIG_IP_NF_FTP) += ip_conntrack_ftp.o ++obj-$(CONFIG_IP_NF_IRC) += ip_conntrack_irc.o ++ ++# NAT helpers ++obj-$(CONFIG_IP_NF_NAT_AMANDA) += ip_nat_amanda.o ++obj-$(CONFIG_IP_NF_NAT_TFTP) += ip_nat_tftp.o ++obj-$(CONFIG_IP_NF_NAT_FTP) += ip_nat_ftp.o ++obj-$(CONFIG_IP_NF_NAT_IRC) += ip_nat_irc.o ++ ++# generic IP tables ++obj-$(CONFIG_IP_NF_IPTABLES) += ip_tables.o ++ ++# the three instances of ip_tables ++obj-$(CONFIG_IP_NF_FILTER) += iptable_filter.o ++obj-$(CONFIG_IP_NF_MANGLE) += iptable_mangle.o ++obj-$(CONFIG_IP_NF_NAT) += iptable_nat.o ++obj-$(CONFIG_IP_NF_RAW) += iptable_raw.o ++ ++# matches ++obj-$(CONFIG_IP_NF_MATCH_HELPER) += ipt_helper.o ++obj-$(CONFIG_IP_NF_MATCH_LIMIT) += ipt_limit.o ++obj-$(CONFIG_IP_NF_MATCH_IPP2P) += ipt_ipp2p.o ++obj-$(CONFIG_IP_NF_MATCH_HASHLIMIT) += ipt_hashlimit.o ++obj-$(CONFIG_IP_NF_MATCH_SCTP) += ipt_sctp.o ++obj-$(CONFIG_IP_NF_MATCH_MARK) += ipt_mark.o ++obj-$(CONFIG_IP_NF_MATCH_SET) += ipt_set.o ++obj-$(CONFIG_IP_NF_MATCH_MAC) += ipt_mac.o ++obj-$(CONFIG_IP_NF_MATCH_IPRANGE) += ipt_iprange.o ++obj-$(CONFIG_IP_NF_MATCH_PKTTYPE) += ipt_pkttype.o ++obj-$(CONFIG_IP_NF_MATCH_MULTIPORT) += ipt_multiport.o ++obj-$(CONFIG_IP_NF_MATCH_OWNER) += ipt_owner.o ++obj-$(CONFIG_IP_NF_MATCH_TOS) += ipt_tos.o ++obj-$(CONFIG_IP_NF_MATCH_RECENT) += ipt_recent.o ++obj-$(CONFIG_IP_NF_MATCH_ECN) += ipt_ecn.o ++obj-$(CONFIG_IP_NF_MATCH_DSCP) += ipt_dscp.o ++obj-$(CONFIG_IP_NF_MATCH_AH_ESP) += ipt_ah.o ipt_esp.o ++obj-$(CONFIG_IP_NF_MATCH_LENGTH) += ipt_length.o ++obj-$(CONFIG_IP_NF_MATCH_TTL) += ipt_ttl.o ++obj-$(CONFIG_IP_NF_MATCH_STATE) += ipt_state.o ++obj-$(CONFIG_IP_NF_MATCH_CONNMARK) += ipt_connmark.o ++obj-$(CONFIG_IP_NF_MATCH_CONNTRACK) += ipt_conntrack.o ++obj-$(CONFIG_IP_NF_MATCH_TCPMSS) += ipt_tcpmss.o ++obj-$(CONFIG_IP_NF_MATCH_REALM) += ipt_realm.o ++obj-$(CONFIG_IP_NF_MATCH_ADDRTYPE) += ipt_addrtype.o ++obj-$(CONFIG_IP_NF_MATCH_PHYSDEV) += ipt_physdev.o ++obj-$(CONFIG_IP_NF_MATCH_COMMENT) += ipt_comment.o ++ ++# targets ++obj-$(CONFIG_IP_NF_TARGET_REJECT) += ipt_REJECT.o ++obj-$(CONFIG_IP_NF_TARGET_TARPIT) += ipt_TARPIT.o ++obj-$(CONFIG_IP_NF_TARGET_TOS) += ipt_TOS.o ++obj-$(CONFIG_IP_NF_TARGET_ECN) += ipt_ECN.o ++obj-$(CONFIG_IP_NF_TARGET_DSCP) += ipt_DSCP.o ++obj-$(CONFIG_IP_NF_TARGET_MARK) += ipt_MARK.o ++obj-$(CONFIG_IP_NF_TARGET_MASQUERADE) += ipt_MASQUERADE.o ++obj-$(CONFIG_IP_NF_TARGET_REDIRECT) += ipt_REDIRECT.o ++obj-$(CONFIG_IP_NF_TARGET_NETMAP) += ipt_NETMAP.o ++obj-$(CONFIG_IP_NF_TARGET_SAME) += ipt_SAME.o ++obj-$(CONFIG_IP_NF_TARGET_CLASSIFY) += ipt_CLASSIFY.o ++obj-$(CONFIG_IP_NF_NAT_SNMP_BASIC) += ip_nat_snmp_basic.o ++obj-$(CONFIG_IP_NF_TARGET_LOG) += ipt_LOG.o ++obj-$(CONFIG_IP_NF_TARGET_CONNMARK) += ipt_CONNMARK.o ++obj-$(CONFIG_IP_NF_TARGET_ULOG) += ipt_ULOG.o ++obj-$(CONFIG_IP_NF_TARGET_TCPMSS) += ipt_TCPMSS.o ++obj-$(CONFIG_IP_NF_TARGET_NOTRACK) += ipt_NOTRACK.o ++obj-$(CONFIG_IP_NF_TARGET_SET) += ipt_SET.o ++ ++# sets ++obj-$(CONFIG_IP_NF_SET) += ip_set.o ++obj-$(CONFIG_IP_NF_SET_IPMAP) += ip_set_ipmap.o ++obj-$(CONFIG_IP_NF_SET_PORTMAP) += ip_set_portmap.o ++obj-$(CONFIG_IP_NF_SET_MACIPMAP) += ip_set_macipmap.o ++obj-$(CONFIG_IP_NF_SET_IPHASH) += ip_set_iphash.o ++obj-$(CONFIG_IP_NF_SET_NETHASH) += ip_set_nethash.o ++obj-$(CONFIG_IP_NF_TARGET_CLUSTERIP) += ipt_CLUSTERIP.o ++ ++# generic ARP tables ++obj-$(CONFIG_IP_NF_ARPTABLES) += arp_tables.o ++obj-$(CONFIG_IP_NF_ARP_MANGLE) += arpt_mangle.o ++ ++# just filtering instance of ARP tables for now ++obj-$(CONFIG_IP_NF_ARPFILTER) += arptable_filter.o ++ ++obj-$(CONFIG_IP_NF_QUEUE) += ip_queue.o +diff -urN linux-2.6.11/net/ipv4/tcp_timer.c linux.sinabox/net/ipv4/tcp_timer.c +--- linux-2.6.11/net/ipv4/tcp_timer.c 2005-03-02 08:38:26.000000000 +0100 ++++ linux.sinabox/net/ipv4/tcp_timer.c 2005-03-19 07:35:03.000000000 +0100 +@@ -38,6 +38,7 @@ + + #ifdef TCP_DEBUG + const char tcp_timer_bug_msg[] = KERN_DEBUG "tcpbug: unknown timer value\n"; ++EXPORT_SYMBOL(tcp_timer_bug_msg); + #endif + + /* +diff -urN linux-2.6.11/net/ipv4/xfrm4_input.c linux.sinabox/net/ipv4/xfrm4_input.c +--- linux-2.6.11/net/ipv4/xfrm4_input.c 2005-03-02 08:37:48.000000000 +0100 ++++ linux.sinabox/net/ipv4/xfrm4_input.c 2005-03-26 19:02:06.000000000 +0100 +@@ -31,30 +31,29 @@ + IP_ECN_set_ce(inner_iph); + } + +-static int xfrm4_parse_spi(struct sk_buff *skb, u8 nexthdr, u32 *spi, u32 *seq) ++static int xfrm4_parse_spi(struct sk_buff *skb, u8 nexthdr, u32 *spi) + { + switch (nexthdr) { + case IPPROTO_IPIP: + if (!pskb_may_pull(skb, sizeof(struct iphdr))) + return -EINVAL; + *spi = skb->nh.iph->saddr; +- *seq = 0; + return 0; + } + +- return xfrm_parse_spi(skb, nexthdr, spi, seq); ++ return xfrm_parse_spi(skb, nexthdr, spi); + } + + int xfrm4_rcv_encap(struct sk_buff *skb, __u16 encap_type) + { + int err; +- u32 spi, seq; ++ u32 spi; + struct sec_decap_state xfrm_vec[XFRM_MAX_DEPTH]; + struct xfrm_state *x; + int xfrm_nr = 0; + int decaps = 0; + +- if ((err = xfrm4_parse_spi(skb, skb->nh.iph->protocol, &spi, &seq)) != 0) ++ if ((err = xfrm4_parse_spi(skb, skb->nh.iph->protocol, &spi)) != 0) + goto drop; + + do { +@@ -71,9 +70,6 @@ + if (unlikely(x->km.state != XFRM_STATE_VALID)) + goto drop_unlock; + +- if (x->props.replay_window && xfrm_replay_check(x, seq)) +- goto drop_unlock; +- + if (xfrm_state_check_expire(x)) + goto drop_unlock; + +@@ -84,9 +80,6 @@ + /* only the first xfrm gets the encap type */ + encap_type = 0; + +- if (x->props.replay_window) +- xfrm_replay_advance(x, seq); +- + x->curlft.bytes += skb->len; + x->curlft.packets++; + +@@ -116,8 +109,9 @@ + break; + } + +- if ((err = xfrm_parse_spi(skb, skb->nh.iph->protocol, &spi, &seq)) < 0) ++ if ((err = xfrm_parse_spi(skb, skb->nh.iph->protocol, &spi)) < 0) + goto drop; ++ + } while (!err); + + /* Allocate new secpath or COW existing one. */ +diff -urN linux-2.6.11/net/ipv6/addrconf.c linux.sinabox/net/ipv6/addrconf.c +--- linux-2.6.11/net/ipv6/addrconf.c 2005-03-02 08:38:26.000000000 +0100 ++++ linux.sinabox/net/ipv6/addrconf.c 2005-03-26 19:02:06.000000000 +0100 +@@ -35,6 +35,10 @@ + * YOSHIFUJI Hideaki @USAGI : ARCnet support + * YOSHIFUJI Hideaki @USAGI : convert /proc/net/if_inet6 to + * seq_file. ++ * YOSHIFUJI Hideaki @USAGI : improved source address ++ * selection; consider scope, ++ * status etc. ++ * Hoerdt Mickael : Added Multicast routing support. + */ + + #include +@@ -105,8 +109,10 @@ + static void ipv6_regen_rndid(unsigned long data); + + static int desync_factor = MAX_DESYNC_FACTOR * HZ; ++#ifdef CONFIG_IPV6_PRIVACY_MD5 + static struct crypto_tfm *md5_tfm; + static DEFINE_SPINLOCK(md5_tfm_lock); ++#endif /* CONFIG_IPV6_PRIVACY_MD5 */ + #endif + + static int ipv6_count_addresses(struct inet6_dev *idev); +@@ -144,6 +150,8 @@ + + static struct notifier_block *inet6addr_chain; + ++static u32 ipv6_addrselect_label_lookup(const struct in6_addr *addr, int ifindex); ++ + struct ipv6_devconf ipv6_devconf = { + .forwarding = 0, + .hop_limit = IPV6_DEFAULT_HOPLIMIT, +@@ -164,6 +172,9 @@ + .max_desync_factor = MAX_DESYNC_FACTOR, + #endif + .max_addresses = IPV6_MAX_ADDRESSES, ++#ifdef CONFIG_IPV6_MROUTE ++ .mc_forwarding = 0, ++#endif + }; + + static struct ipv6_devconf ipv6_devconf_dflt = { +@@ -185,54 +196,58 @@ + .max_desync_factor = MAX_DESYNC_FACTOR, + #endif + .max_addresses = IPV6_MAX_ADDRESSES, ++#ifdef CONFIG_IPV6_MROUTE ++ .mc_forwarding = 0, ++#endif + }; + +-/* IPv6 Wildcard Address and Loopback Address defined by RFC2553 */ ++/* IPv6 Wildcard Address and Loopback Address defined by RFC3493 */ + #if 0 + const struct in6_addr in6addr_any = IN6ADDR_ANY_INIT; + #endif + const struct in6_addr in6addr_loopback = IN6ADDR_LOOPBACK_INIT; + +-int ipv6_addr_type(const struct in6_addr *addr) ++int __ipv6_addr_type(const struct in6_addr *addr) + { +- int type; +- u32 st; ++ u32 st = addr->s6_addr32[0]; + +- st = addr->s6_addr32[0]; ++ /* Consider all addresses with the first three bits different of ++ 000 and 111 as unicasts. ++ */ ++ if ((st & htonl(0xE0000000)) != htonl(0x00000000) && ++ (st & htonl(0xE0000000)) != htonl(0xE0000000)) ++ return (IPV6_ADDR_UNICAST | ++ IPV6_ADDR_SCOPE_GLOBAL<<16); + + if ((st & htonl(0xFF000000)) == htonl(0xFF000000)) { +- type = IPV6_ADDR_MULTICAST; ++ /* multicast */ ++ /* addr-select 3.1 */ ++ int type = IPV6_ADDR_MC_SCOPE(addr)<<16; + +- switch((st & htonl(0x00FF0000))) { +- case __constant_htonl(0x00010000): ++ switch(type) { ++ case IPV6_ADDR_SCOPE_NODELOCAL<<16: + type |= IPV6_ADDR_LOOPBACK; + break; + +- case __constant_htonl(0x00020000): ++ case IPV6_ADDR_SCOPE_LINKLOCAL<<16: + type |= IPV6_ADDR_LINKLOCAL; + break; + +- case __constant_htonl(0x00050000): ++ case IPV6_ADDR_SCOPE_SITELOCAL<<16: + type |= IPV6_ADDR_SITELOCAL; + break; + }; ++ type |= IPV6_ADDR_MULTICAST; + return type; + } + +- type = IPV6_ADDR_UNICAST; +- +- /* Consider all addresses with the first three bits different of +- 000 and 111 as finished. +- */ +- if ((st & htonl(0xE0000000)) != htonl(0x00000000) && +- (st & htonl(0xE0000000)) != htonl(0xE0000000)) +- return type; +- + if ((st & htonl(0xFFC00000)) == htonl(0xFE800000)) +- return (IPV6_ADDR_LINKLOCAL | type); ++ return (IPV6_ADDR_LINKLOCAL | IPV6_ADDR_UNICAST | ++ IPV6_ADDR_SCOPE_LINKLOCAL<<16); /* addr-select 3.1 */ + + if ((st & htonl(0xFFC00000)) == htonl(0xFEC00000)) +- return (IPV6_ADDR_SITELOCAL | type); ++ return (IPV6_ADDR_SITELOCAL | IPV6_ADDR_UNICAST | ++ IPV6_ADDR_SCOPE_SITELOCAL<<16); /* addr-select 3.1 */ + + if ((addr->s6_addr32[0] | addr->s6_addr32[1]) == 0) { + if (addr->s6_addr32[2] == 0) { +@@ -240,24 +255,50 @@ + return IPV6_ADDR_ANY; + + if (addr->s6_addr32[3] == htonl(0x00000001)) +- return (IPV6_ADDR_LOOPBACK | type); ++ return (IPV6_ADDR_LOOPBACK | IPV6_ADDR_UNICAST | ++ IPV6_ADDR_SCOPE_LINKLOCAL<<16); /* addr-select 3.4 */ + +- return (IPV6_ADDR_COMPATv4 | type); ++ return (IPV6_ADDR_COMPATv4 | IPV6_ADDR_UNICAST | ++ IPV6_ADDR_SCOPE_GLOBAL<<16); /* addr-select 3.3 */ + } + + if (addr->s6_addr32[2] == htonl(0x0000ffff)) +- return IPV6_ADDR_MAPPED; ++ return (IPV6_ADDR_MAPPED | ++ IPV6_ADDR_SCOPE_GLOBAL<<16); /* addr-select 3.3 */ ++ } ++ ++ return (IPV6_ADDR_RESERVED | ++ IPV6_ADDR_SCOPE_GLOBAL<<16); /* addr-select 3.4 */ ++} ++ ++/* find 1st bit in difference between the 2 addrs */ ++static inline int addr_diff(const void *__a1, const void *__a2, int addrlen) ++{ ++ /* find 1st bit in difference between the 2 addrs. ++ * bit may be an invalid value, ++ * but if it is >= plen, the value is ignored in any case. ++ */ ++ const u32 *a1 = __a1; ++ const u32 *a2 = __a2; ++ int i; ++ ++ addrlen >>= 2; ++ for (i = 0; i < addrlen; i++) { ++ u32 xb = a1[i] ^ a2[i]; ++ if (xb) { ++ int j = 31; ++ xb = ntohl(xb); ++ while ((xb & (1 << j)) == 0) ++ j--; ++ return (i * 32 + 31 - j); ++ } + } ++ return addrlen<<5; ++} + +- st &= htonl(0xFF000000); +- if (st == 0) +- return IPV6_ADDR_RESERVED; +- st &= htonl(0xFE000000); +- if (st == htonl(0x02000000)) +- return IPV6_ADDR_RESERVED; /* for NSAP */ +- if (st == htonl(0x04000000)) +- return IPV6_ADDR_RESERVED; /* for IPX */ +- return type; ++static inline int ipv6_addr_diff(const struct in6_addr *a1, const struct in6_addr *a2) ++{ ++ return addr_diff(a1->s6_addr, a2->s6_addr, sizeof(struct in6_addr)); + } + + static void addrconf_del_timer(struct inet6_ifaddr *ifp) +@@ -366,7 +407,9 @@ + + #ifdef CONFIG_IPV6_PRIVACY + get_random_bytes(ndev->rndid, sizeof(ndev->rndid)); ++#ifdef CONFIG_IPV6_PRIVACY_MD5 + get_random_bytes(ndev->entropy, sizeof(ndev->entropy)); ++#endif /* CONFIG_IPV6_PRIVACY_MD5 */ + init_timer(&ndev->regen_timer); + ndev->regen_timer.function = ipv6_regen_rndid; + ndev->regen_timer.data = (unsigned long) ndev; +@@ -391,14 +434,14 @@ + ndev->tstamp = jiffies; + #ifdef CONFIG_SYSCTL + neigh_sysctl_register(dev, ndev->nd_parms, NET_IPV6, +- NET_IPV6_NEIGH, "ipv6", &ndisc_ifinfo_sysctl_change); ++ NET_IPV6_NEIGH, "ipv6", &ndisc_ifinfo_sysctl_change, NULL); + addrconf_sysctl_register(ndev, &ndev->cnf); + #endif + } + return ndev; + } + +-static struct inet6_dev * ipv6_find_idev(struct net_device *dev) ++struct inet6_dev * ipv6_find_idev(struct net_device *dev) + { + struct inet6_dev *idev; + +@@ -589,6 +632,10 @@ + struct inet6_ifaddr *ifa, **ifap; + struct inet6_dev *idev = ifp->idev; + int hash; ++#ifdef CONFIG_IPV6_DELPREFIX ++ int deleted = 0, onlink = 0; ++ unsigned long expires = jiffies; ++#endif + + hash = ipv6_addr_hash(&ifp->addr); + +@@ -631,7 +678,32 @@ + *ifap = ifa->if_next; + __in6_ifa_put(ifp); + ifa->if_next = NULL; ++#ifndef CONFIG_IPV6_DELPREFIX + break; ++#else ++ if (!(ifp->flags & IFA_F_PERMANENT) || ++ onlink > 0) ++ break; ++ deleted = 1; ++ } else { ++ if (ipv6_prefix_equal(&ifa->addr, &ifp->addr, ++ ifp->prefix_len)) { ++ if (ifa->flags & IFA_F_PERMANENT) { ++ onlink = 1; ++ if (deleted) ++ break; ++ } else if (!onlink) { ++ unsigned long lifetime; ++ onlink = -1; ++ ++ lifetime = ifp->valid_lft; ++ if (lifetime > 0x7fffffffUL/HZ) ++ lifetime = 0x7ffffffUL/HZ; ++ if (time_before(expires, ifp->tstamp + lifetime * HZ)) ++ expires = ifp->tstamp + lifetime * HZ; ++ } ++ } ++#endif + } + } + write_unlock_bh(&idev->lock); +@@ -642,6 +714,52 @@ + + addrconf_del_timer(ifp); + ++#ifdef CONFIG_IPV6_DELPREFIX ++ /* ++ * Clean-up on-link route. ++ * We need to respect prefix lifetime. ++ * ++ * 1) if the address was not permanent, don't delete it. ++ * - timer for fib entry will delete itself. ++ * 2) if there're other permanent addresses with same prefix, don't ++ * delete it. ++ * 3) if there're only dynamic addresses, change prefix route to ++ * dynamic. ++ * - lifetime will be set to the longest valid lifetime among the ++ * addresses with same prefix on the device ++ * - subsequent RA will update lifetime. ++ * 4) otherwise, delete it. ++ * ++ * --yoshfuji ++ */ ++ if ((ifp->flags & IFA_F_PERMANENT) && onlink < 1) { ++ struct in6_addr prefix; ++ struct rt6_info *rt; ++ ++ ipv6_addr_prefix(&prefix, &ifp->addr, ifp->prefix_len); ++ rt = rt6_lookup(&prefix, NULL, ifp->idev->dev->ifindex, 1); ++ ++ if (rt && ((rt->rt6i_flags & (RTF_GATEWAY | RTF_DEFAULT)) == 0)) { ++ if (onlink == 0) { ++ ip6_del_rt(rt, NULL, NULL); ++ rt = NULL; ++ } else if (!(rt->rt6i_flags & RTF_EXPIRES)) { ++ /* ++ * prefix lifetime and valid lifetime are ++ * (almost) the same. ++ * subsequent RA will update appropriately. ++ * --yoshfuji ++ */ ++ if (expires < jiffies) ++ expires = jiffies; ++ rt->rt6i_expires = expires; ++ rt->rt6i_flags |= RTF_EXPIRES; ++ } ++ } ++ dst_release(&rt->u.dst); ++ } ++#endif ++ + in6_ifa_put(ifp); + } + +@@ -743,147 +861,215 @@ + + /* + * Choose an appropriate source address ++ * draft-ietf-ipv6-default-addr-select-09.txt + * should do: + * i) get an address with an appropriate scope + * ii) see if there is a specific route for the destination and use + * an address of the attached interface + * iii) don't use deprecated addresses + */ +-static int inline ipv6_saddr_pref(const struct inet6_ifaddr *ifp, u8 invpref) ++#define IPV6_SADDRSELECT_SELF 0x01 ++#define IPV6_SADDRSELECT_PREFERRED 0x02 ++#define IPV6_SADDRSELECT_HOME 0x04 ++#define IPV6_SADDRSELECT_PUBLIC 0x08 ++#define IPV6_SADDRSELECT_INTERFACE 0x10 ++#define IPV6_SADDRSELECT_LABEL 0x20 ++ ++struct addrselect_attrs { ++ struct inet6_ifaddr *ifp; ++ u16 flags; ++ s16 matchlen; ++ u8 scope; ++}; ++ ++static int __inline__ ipv6_addrselect_preferred(int type) + { +- int pref; +- pref = ifp->flags&IFA_F_DEPRECATED ? 0 : 2; +-#ifdef CONFIG_IPV6_PRIVACY +- pref |= (ifp->flags^invpref)&IFA_F_TEMPORARY ? 0 : 1; +-#endif +- return pref; ++ /* section 3.3, 3.4 */ ++ if (type&(IPV6_ADDR_MAPPED|IPV6_ADDR_COMPATv4| ++ IPV6_ADDR_LOOPBACK|IPV6_ADDR_RESERVED)) ++ return 1; ++ return 0; + } + +-#ifdef CONFIG_IPV6_PRIVACY +-#define IPV6_GET_SADDR_MAXSCORE(score) ((score) == 3) +-#else +-#define IPV6_GET_SADDR_MAXSCORE(score) (score) +-#endif +- +-int ipv6_dev_get_saddr(struct net_device *dev, ++int ipv6_dev_get_saddr(struct net_device *daddr_dev, + struct in6_addr *daddr, struct in6_addr *saddr) + { +- struct inet6_ifaddr *ifp = NULL; +- struct inet6_ifaddr *match = NULL; ++ int daddr_type, daddr_scope; ++ u32 daddr_label; ++ struct inet6_ifaddr *ifp0, *ifp = NULL; ++ struct net_device *dev; + struct inet6_dev *idev; +- int scope; ++ + int err; +- int hiscore = -1, score; ++ int update; ++ struct addrselect_attrs candidate = {NULL,0,0,0}; ++#if defined(CONFIG_IPV6_PRIVACY) ++ u16 invpref = 0; ++#endif + +- scope = ipv6_addr_scope(daddr); ++#ifdef CONFIG_IPV6_PRIVACY ++ if (ipv6_devconf.use_tempaddr > 1) ++ invpref |= IPV6_SADDRSELECT_PUBLIC; ++#endif + +- /* +- * known dev +- * search dev and walk through dev addresses +- */ ++ daddr_type = __ipv6_addr_type(daddr); ++ daddr_scope = __ipv6_addr_src_scope(daddr_type); ++ daddr_label = ipv6_addrselect_label_lookup(daddr, ++ daddr_dev?daddr_dev->ifindex:0); + +- if (dev) { +- if (dev->flags & IFF_LOOPBACK) +- scope = IFA_HOST; ++ read_lock(&dev_base_lock); ++ read_lock(&addrconf_lock); ++ for (dev = dev_base; dev; dev=dev->next) { ++ /* Rule 0: Candidate Source Address (section 4) ++ * - multicast and link-local destination address, ++ * the set of candidate source address MUST only ++ * include addresses assigned to interfaces ++ * belonging to the same link as the outgoing ++ * interface. ++ * (- For site-local destination addresses, the ++ * set of candidate source addresses MUST only ++ * include addresses assigned to interfaces ++ * belonging to the same site as the outgoing ++ * interface.) ++ */ ++ if ((daddr_type&IPV6_ADDR_MULTICAST || ++ daddr_scope <= IPV6_ADDR_SCOPE_LINKLOCAL) && ++ daddr_dev && dev != daddr_dev) ++ continue; + +- read_lock(&addrconf_lock); + idev = __in6_dev_get(dev); +- if (idev) { +- read_lock_bh(&idev->lock); +- for (ifp=idev->addr_list; ifp; ifp=ifp->if_next) { +- if (ifp->scope == scope) { +- if (ifp->flags&IFA_F_TENTATIVE) +- continue; +-#ifdef CONFIG_IPV6_PRIVACY +- score = ipv6_saddr_pref(ifp, idev->cnf.use_tempaddr > 1 ? IFA_F_TEMPORARY : 0); +-#else +- score = ipv6_saddr_pref(ifp, 0); +-#endif +- if (score <= hiscore) +- continue; ++ if (!idev) ++ continue; + +- if (match) +- in6_ifa_put(match); +- match = ifp; +- hiscore = score; +- in6_ifa_hold(ifp); ++ read_lock_bh(&idev->lock); ++ ifp0 = idev->addr_list; ++ for (ifp=ifp0; ifp; ifp=ifp->if_next) { ++ struct addrselect_attrs temp = {NULL,0,0,0}; ++ int addr_type; ++ update = 0; ++ ++ /* Rule 0: Candidate Source Address (section 4) ++ * - In any case, anycast addresses, multicast ++ * addresses, and the unspecified address MUST ++ * NOT be included in a candidate set. ++ */ ++ addr_type = __ipv6_addr_type(&ifp->addr); ++ if (addr_type == IPV6_ADDR_ANY || ++ addr_type&IPV6_ADDR_MULTICAST) ++ continue; + +- if (IPV6_GET_SADDR_MAXSCORE(score)) { +- read_unlock_bh(&idev->lock); +- read_unlock(&addrconf_lock); +- goto out; +- } ++ /* Rule 1: Prefer same address */ ++ if (ipv6_addr_cmp(&ifp->addr, daddr) == 0) ++ temp.flags |= IPV6_SADDRSELECT_SELF; ++ if ((temp.flags^candidate.flags)&IPV6_SADDRSELECT_SELF) { ++ update = temp.flags&IPV6_SADDRSELECT_SELF; ++ if (!update) { ++ continue; + } + } +- read_unlock_bh(&idev->lock); +- } +- read_unlock(&addrconf_lock); +- } + +- if (scope == IFA_LINK) +- goto out; ++ /* Rule 2: Prefer appropriate scope */ ++ temp.scope = __ipv6_addr_src_scope(addr_type); ++ if (!update) { ++ update = temp.scope - candidate.scope; ++ if (update > 0) { ++ update = candidate.scope < daddr_scope ? 1 : -1; ++ } else if (update < 0) { ++ update = temp.scope < daddr_scope ? -1 : 1; ++ } ++ if (update < 0) { ++ continue; ++ } ++ } + +- /* +- * dev == NULL or search failed for specified dev +- */ ++ /* Rule 3: Avoid deprecated address */ ++ if (ipv6_addrselect_preferred(addr_type) || ++ !(ifp->flags & IFA_F_DEPRECATED)) ++ temp.flags |= IPV6_SADDRSELECT_PREFERRED; ++ if (!update && (temp.flags^candidate.flags)&IPV6_SADDRSELECT_PREFERRED) { ++ update = temp.flags&IPV6_SADDRSELECT_PREFERRED; ++ if (!update) { ++ continue; ++ } ++ } + +- read_lock(&dev_base_lock); +- read_lock(&addrconf_lock); +- for (dev = dev_base; dev; dev=dev->next) { +- idev = __in6_dev_get(dev); +- if (idev) { +- read_lock_bh(&idev->lock); +- for (ifp=idev->addr_list; ifp; ifp=ifp->if_next) { +- if (ifp->scope == scope) { +- if (ifp->flags&IFA_F_TENTATIVE) +- continue; ++ /* XXX: Rule 4: Prefer home address */ ++ ++ /* Rule 5: Prefer outgoing interface */ ++ if (daddr_dev == NULL || daddr_dev == dev) ++ temp.flags |= IPV6_SADDRSELECT_INTERFACE; ++ if (!update && (temp.flags^candidate.flags)&IPV6_SADDRSELECT_INTERFACE) { ++ update = temp.flags&IPV6_SADDRSELECT_INTERFACE; ++ if (!update) { ++ continue; ++ } ++ } ++ ++ /* XXX: Rule 6: Prefer matching label */ ++ if (ipv6_addrselect_label_lookup(&ifp->addr, dev->ifindex) == daddr_label) ++ temp.flags |= IPV6_SADDRSELECT_LABEL; ++ if (!update && (temp.flags^candidate.flags)&IPV6_SADDRSELECT_LABEL) { ++ update = temp.flags&IPV6_SADDRSELECT_LABEL; ++ if (!update) { ++ continue; ++ } ++ } ++ ++ /* XXX: Rule 7: Prefer public address */ + #ifdef CONFIG_IPV6_PRIVACY +- score = ipv6_saddr_pref(ifp, idev->cnf.use_tempaddr > 1 ? IFA_F_TEMPORARY : 0); +-#else +- score = ipv6_saddr_pref(ifp, 0); ++ if (!(ifp->flags & IFA_F_TEMPORARY)) ++ temp.flags |= IPV6_SADDRSELECT_PUBLIC; ++ if (!update && (temp.flags^candidate.flags)&IPV6_SADDRSELECT_PUBLIC) { ++ update = (temp.flags^invpref)&IPV6_SADDRSELECT_PUBLIC; ++ if (!update) { ++ continue; ++ } ++ } + #endif +- if (score <= hiscore) +- continue; +- +- if (match) +- in6_ifa_put(match); +- match = ifp; +- hiscore = score; +- in6_ifa_hold(ifp); + +- if (IPV6_GET_SADDR_MAXSCORE(score)) { +- read_unlock_bh(&idev->lock); +- goto out_unlock_base; +- } ++ /* Rule 8: Use longest matching prefix */ ++ temp.matchlen = ipv6_addr_diff(&ifp->addr, daddr); ++ if (!update) { ++ update = temp.matchlen - candidate.matchlen; ++ if (update < 0) { ++ continue; + } + } +- read_unlock_bh(&idev->lock); ++ ++ /* Final Rule */ ++ if (!update && candidate.ifp) { ++ continue; ++ } ++ ++ /* update candidate */ ++ temp.ifp = ifp; ++ in6_ifa_hold(ifp); ++ if (candidate.ifp) ++ in6_ifa_put(candidate.ifp); ++ candidate = temp; + } ++ read_unlock_bh(&idev->lock); + } +- +-out_unlock_base: + read_unlock(&addrconf_lock); + read_unlock(&dev_base_lock); + +-out: +- err = -EADDRNOTAVAIL; +- if (match) { +- ipv6_addr_copy(saddr, &match->addr); ++ if (candidate.ifp) { ++ ipv6_addr_copy(saddr, &candidate.ifp->addr); ++ in6_ifa_put(candidate.ifp); + err = 0; +- in6_ifa_put(match); ++ } else { ++ err = -EADDRNOTAVAIL; + } +- + return err; + } + +- + int ipv6_get_saddr(struct dst_entry *dst, + struct in6_addr *daddr, struct in6_addr *saddr) + { +- return ipv6_dev_get_saddr(dst ? dst->dev : NULL, daddr, saddr); ++ return ipv6_dev_get_saddr(dst ? ((struct rt6_info *)dst)->rt6i_dev : NULL, ++ daddr, saddr); + } + +- + int ipv6_get_lladdr(struct net_device *dev, struct in6_addr *addr) + { + struct inet6_dev *idev; +@@ -972,6 +1158,70 @@ + return ifp; + } + ++/* address selection: default policy label */ ++/* XXX: user level configuration */ ++static struct ipv6_addrselect_label { ++ struct in6_addr addr; ++ u16 plen; ++ u32 ifindex; ++ u32 label; ++} ipv6_addrselect_label_table[] = { ++ /* ::1/128, label = 0 */ ++ { ++ .addr = IN6ADDR_LOOPBACK_INIT, ++ .plen = 128, ++ .label = 0, ++ }, ++ /* ::/0, label = 1 */ ++ { ++ .addr = IN6ADDR_ANY_INIT, ++ .plen = 0, ++ .label = 1, ++ }, ++ /* 2002::/16, label = 2 */ ++ { ++ .addr = {{{ 0x20, 0x02 }}}, ++ .plen = 16, ++ .label = 2, ++ }, ++ /* ::/96, label = 3 */ ++ { ++ .plen = 96, ++ .label = 3, ++ }, ++ /* ::ffff:0:0/96, label = 4 */ ++ { ++ .addr = {{{ [10] = 0xff, [11] = 0xff }}}, ++ .plen = 96, ++ .label = 4, ++ }, ++ /* sentinel */ ++ { ++ .label = 0xffffffff, ++ } ++}; ++ ++static u32 ipv6_addrselect_label_lookup(const struct in6_addr *addr, ++ int ifindex) ++{ ++ struct ipv6_addrselect_label *p; ++ int plen, matchlen = -1; ++ u32 label = 0xffffffff; ++ ++ for (p = ipv6_addrselect_label_table; ++ p->label != 0xffffffff; ++ p++) { ++ if (ifindex && p->ifindex && ifindex != p->ifindex) ++ continue; ++ plen = ipv6_addr_diff(addr, &p->addr); ++ if (plen < p->plen || plen < matchlen) ++ continue; ++ matchlen = plen; ++ label = p->label; ++ } ++ return label; ++} ++ + int ipv6_rcv_saddr_equal(const struct sock *sk, const struct sock *sk2) + { + const struct in6_addr *sk_rcv_saddr6 = &inet6_sk(sk)->rcv_saddr; +@@ -1151,15 +1401,19 @@ + /* (re)generation of randomized interface identifier (RFC 3041 3.2, 3.5) */ + static int __ipv6_regen_rndid(struct inet6_dev *idev) + { ++#ifdef CONFIG_IPV6_PRIVACY_MD5 + struct net_device *dev; +- struct scatterlist sg[2]; +- +- sg[0].page = virt_to_page(idev->entropy); +- sg[0].offset = offset_in_page(idev->entropy); +- sg[0].length = 8; +- sg[1].page = virt_to_page(idev->work_eui64); +- sg[1].offset = offset_in_page(idev->work_eui64); +- sg[1].length = 8; ++ struct scatterlist sg[] = { ++ { ++ .page = virt_to_page(idev->entropy), ++ .offset = offset_in_page(idev->entropy), ++ .length = 8, ++ },{ ++ .page = virt_to_page(idev->work_eui64), ++ .offset = offset_in_page(idev->work_eui64), ++ .length = 8, ++ } ++ }; + + dev = idev->dev; + +@@ -1169,7 +1423,11 @@ + idev); + get_random_bytes(idev->work_eui64, sizeof(idev->work_eui64)); + } ++#endif /* CONFIG_IPV6_PRIVACY_MD5 */ + regen: ++#ifndef CONFIG_IPV6_PRIVACY_MD5 ++ get_random_bytes(idev->rndid, sizeof(idev->rndid)); ++#else /* CONFIG_IPV6_PRIVACY_MD5 */ + spin_lock(&md5_tfm_lock); + if (unlikely(md5_tfm == NULL)) { + spin_unlock(&md5_tfm_lock); +@@ -1181,9 +1439,14 @@ + spin_unlock(&md5_tfm_lock); + + memcpy(idev->rndid, &idev->work_digest[0], 8); ++#endif /* CONFIG_IPV6_PRIVACY_MD5 */ + idev->rndid[0] &= ~0x02; ++#ifndef CONFIG_IPV6_PRIVACY_MD5 ++ ++#else /* CONFIG_IPV6_PRIVACY_MD5 */ + memcpy(idev->entropy, &idev->work_digest[8], 8); + ++#endif /* CONFIG_IPV6_PRIVACY_MD5 */ + /* + * : + * check if generated address is not inappropriate +@@ -1982,7 +2245,10 @@ + if (idev) { + addrconf_sysctl_unregister(&idev->cnf); + neigh_sysctl_unregister(idev->nd_parms); +- neigh_sysctl_register(dev, idev->nd_parms, NET_IPV6, NET_IPV6_NEIGH, "ipv6", &ndisc_ifinfo_sysctl_change); ++ neigh_sysctl_register(dev, idev->nd_parms, ++ NET_IPV6, NET_IPV6_NEIGH, ++ "ipv6", ++ &ndisc_ifinfo_sysctl_change, NULL); + addrconf_sysctl_register(idev, &idev->cnf); + } + #endif +@@ -2427,6 +2693,10 @@ + unsigned long regen_advance; + #endif + ++#ifdef CONFIG_IPV6_PRIVACY ++ regen_advance = ifp->idev->cnf.regen_max_retry * ifp->idev->cnf.dad_transmits * ifp->idev->nd_parms->retrans_time / HZ; ++#endif ++ + if (ifp->flags & IFA_F_PERMANENT) + continue; + +@@ -2469,28 +2739,33 @@ + } + #ifdef CONFIG_IPV6_PRIVACY + } else if ((ifp->flags&IFA_F_TEMPORARY) && +- !(ifp->flags&IFA_F_TENTATIVE)) { +- if (age >= ifp->prefered_lft - regen_advance) { +- struct inet6_ifaddr *ifpub = ifp->ifpub; +- if (time_before(ifp->tstamp + ifp->prefered_lft * HZ, next)) +- next = ifp->tstamp + ifp->prefered_lft * HZ; +- if (!ifp->regen_count && ifpub) { +- ifp->regen_count++; +- in6_ifa_hold(ifp); +- in6_ifa_hold(ifpub); +- spin_unlock(&ifp->lock); +- write_unlock(&addrconf_hash_lock); +- ipv6_create_tempaddr(ifpub, ifp); +- in6_ifa_put(ifpub); +- in6_ifa_put(ifp); +- goto restart; +- } +- } else if (time_before(ifp->tstamp + ifp->prefered_lft * HZ - regen_advance * HZ, next)) +- next = ifp->tstamp + ifp->prefered_lft * HZ - regen_advance * HZ; +- spin_unlock(&ifp->lock); ++ !(ifp->flags&IFA_F_TENTATIVE) && ++ age >= ifp->prefered_lft - regen_advance) { ++ struct inet6_ifaddr *ifpub = ifp->ifpub; ++ if (time_before(ifp->tstamp + ifp->prefered_lft * HZ, next)) ++ next = ifp->tstamp + ifp->prefered_lft * HZ; ++ if (!ifp->regen_count && ifpub) { ++ ifp->regen_count++; ++ in6_ifa_hold(ifp); ++ in6_ifa_hold(ifpub); ++ spin_unlock(&ifp->lock); ++ write_unlock(&addrconf_hash_lock); ++ ipv6_create_tempaddr(ifpub, ifp); ++ in6_ifa_put(ifpub); ++ in6_ifa_put(ifp); ++ goto restart; ++ } else { ++ spin_unlock(&ifp->lock); ++ } + #endif + } else { + /* ifp->prefered_lft <= ifp->valid_lft */ ++#ifdef CONFIG_IPV6_PRIVACY ++ if (ifp->flags&IFA_F_TEMPORARY) { ++ if (time_before(ifp->tstamp + ifp->prefered_lft * HZ - regen_advance * HZ, next)) ++ next = ifp->tstamp + ifp->prefered_lft * HZ - regen_advance * HZ; ++ } else ++#endif + if (time_before(ifp->tstamp + ifp->prefered_lft * HZ, next)) + next = ifp->tstamp + ifp->prefered_lft * HZ; + spin_unlock(&ifp->lock); +@@ -2835,6 +3110,9 @@ + array[DEVCONF_MAX_DESYNC_FACTOR] = cnf->max_desync_factor; + #endif + array[DEVCONF_MAX_ADDRESSES] = cnf->max_addresses; ++#ifdef CONFIG_IPV6_MROUTE ++ array[DEVCONF_MCFORWARDING] = cnf->mc_forwarding; ++#endif + } + + static int inet6_fill_ifinfo(struct sk_buff *skb, struct inet6_dev *idev, +@@ -3147,7 +3425,7 @@ + static struct addrconf_sysctl_table + { + struct ctl_table_header *sysctl_header; +- ctl_table addrconf_vars[18]; ++ ctl_table addrconf_vars[19]; + ctl_table addrconf_dev[2]; + ctl_table addrconf_conf_dir[2]; + ctl_table addrconf_proto_dir[2]; +@@ -3296,6 +3574,16 @@ + .mode = 0644, + .proc_handler = &proc_dointvec, + }, ++#ifdef CONFIG_IPV6_MROUTE ++ { ++ .ctl_name = NET_IPV6_MC_FORWARDING, ++ .procname = "mc_forwarding", ++ .data = &ipv6_devconf.mc_forwarding, ++ .maxlen = sizeof(int), ++ .mode = 0644, ++ .proc_handler = &proc_dointvec, ++ }, ++#endif + { + .ctl_name = 0, /* sentinel */ + } +@@ -3440,6 +3728,9 @@ + + void __init addrconf_init(void) + { ++#ifdef CONFIG_IPV6_PRIVACY_MD5 ++ struct crypto_tfm *tfm; ++#endif /* CONFIG_IPV6_PRIVACY_MD5 */ + /* The addrconf netdev notifier requires that loopback_dev + * has it's ipv6 private information allocated and setup + * before it can bring up and give link-local addresses +@@ -3465,12 +3756,22 @@ + + register_netdevice_notifier(&ipv6_dev_notf); + +-#ifdef CONFIG_IPV6_PRIVACY +- md5_tfm = crypto_alloc_tfm("md5", 0); +- if (unlikely(md5_tfm == NULL)) ++#ifdef CONFIG_IPV6_PRIVACY_MD5 ++ tfm = crypto_alloc_tfm("md5", 0); ++ if (likely(tfm != NULL)) { ++ spin_lock(&md5_tfm_lock); ++ if (likely(md5_tfm == NULL)) { ++ md5_tfm = tfm; ++ spin_unlock(&md5_tfm_lock); ++ } else { ++ spin_unlock(&md5_tfm_lock); ++ crypto_free_tfm(tfm); ++ } ++ } else { + printk(KERN_WARNING + "failed to load transform for md5\n"); +-#endif ++ } ++#endif /* CONFIG_IPV6_PRIVACY_MD5 */ + + addrconf_verify(0); + rtnetlink_links[PF_INET6] = inet6_rtnetlink_table; +@@ -3487,6 +3788,9 @@ + struct inet6_dev *idev; + struct inet6_ifaddr *ifa; + int i; ++#ifdef CONFIG_IPV6_PRIVACY_MD5 ++ struct crypto_tfm *tfm; ++#endif /* CONFIG_IPV6_PRIVACY_MD5 */ + + unregister_netdevice_notifier(&ipv6_dev_notf); + +@@ -3531,12 +3835,14 @@ + + rtnl_unlock(); + +-#ifdef CONFIG_IPV6_PRIVACY +- if (likely(md5_tfm != NULL)) { +- crypto_free_tfm(md5_tfm); +- md5_tfm = NULL; +- } +-#endif ++#ifdef CONFIG_IPV6_PRIVACY_MD5 ++ spin_lock(&md5_tfm_lock); ++ tfm = md5_tfm; ++ md5_tfm = NULL; ++ spin_unlock(&md5_tfm_lock); ++ if (likely(tfm)) ++ crypto_free_tfm(tfm); ++#endif /* CONFIG_IPV6_PRIVACY_MD5 */ + + #ifdef CONFIG_PROC_FS + proc_net_remove("if_inet6"); +diff -urN linux-2.6.11/net/ipv6/af_inet6.c linux.sinabox/net/ipv6/af_inet6.c +--- linux-2.6.11/net/ipv6/af_inet6.c 2005-03-02 08:38:10.000000000 +0100 ++++ linux.sinabox/net/ipv6/af_inet6.c 2005-03-26 19:02:06.000000000 +0100 +@@ -13,6 +13,7 @@ + * piggy, Karl Knutson : Socket protocol table + * Hideaki YOSHIFUJI : sin6_scope_id support + * Arnaldo Melo : check proc_net_create return, cleanups ++ * Hoerdt Mickael : Added Multicast routing support. + * + * This program is free software; you can redistribute it and/or + * modify it under the terms of the GNU General Public License +@@ -62,6 +63,9 @@ + + #include + #include ++#ifdef CONFIG_IPV6_MROUTE ++#include ++#endif + + MODULE_AUTHOR("Cast of dozens"); + MODULE_DESCRIPTION("IPv6 protocol stack for Linux"); +@@ -758,6 +762,9 @@ + err = icmpv6_init(&inet6_family_ops); + if (err) + goto icmp_fail; ++#ifdef CONFIG_IPV6_MROUTE ++ ip6_mr_init(); ++#endif + err = ndisc_init(&inet6_family_ops); + if (err) + goto ndisc_fail; +diff -urN linux-2.6.11/net/ipv6/ah6.c linux.sinabox/net/ipv6/ah6.c +--- linux-2.6.11/net/ipv6/ah6.c 2005-03-02 08:38:38.000000000 +0100 ++++ linux.sinabox/net/ipv6/ah6.c 2005-03-26 19:02:06.000000000 +0100 +@@ -264,6 +264,8 @@ + + hdr_len = skb->data - skb->nh.raw; + ah = (struct ipv6_auth_hdr*)skb->data; ++ if (x->props.replay_window && xfrm_replay_check(x, ah->seq_no)) ++ goto out; + ahp = x->data; + nexthdr = ah->nexthdr; + ah_hlen = (ah->hdrlen + 2) << 2; +@@ -302,6 +304,8 @@ + } + } + ++ if (x->props.replay_window) ++ xfrm_replay_advance(x, ah->seq_no); + skb->nh.raw = skb_pull(skb, ah_hlen); + memcpy(skb->nh.raw, tmp_hdr, hdr_len); + skb->nh.ipv6h->payload_len = htons(skb->len - sizeof(struct ipv6hdr)); +diff -urN linux-2.6.11/net/ipv6/anycast.c linux.sinabox/net/ipv6/anycast.c +--- linux-2.6.11/net/ipv6/anycast.c 2005-03-02 08:38:34.000000000 +0100 ++++ linux.sinabox/net/ipv6/anycast.c 2005-03-26 19:02:06.000000000 +0100 +@@ -48,32 +48,6 @@ + /* Big ac list lock for all the sockets */ + static DEFINE_RWLOCK(ipv6_sk_ac_lock); + +-/* XXX ip6_addr_match() and ip6_onlink() really belong in net/core.c */ +- +-static int +-ip6_addr_match(struct in6_addr *addr1, struct in6_addr *addr2, int prefix) +-{ +- __u32 mask; +- int i; +- +- if (prefix > 128 || prefix < 0) +- return 0; +- if (prefix == 0) +- return 1; +- for (i=0; i<4; ++i) { +- if (prefix >= 32) +- mask = ~0; +- else +- mask = htonl(~0 << (32 - prefix)); +- if ((addr1->s6_addr32[i] ^ addr2->s6_addr32[i]) & mask) +- return 0; +- prefix -= 32; +- if (prefix <= 0) +- break; +- } +- return 1; +-} +- + static int + ip6_onlink(struct in6_addr *addr, struct net_device *dev) + { +@@ -87,8 +61,8 @@ + if (idev) { + read_lock_bh(&idev->lock); + for (ifa=idev->addr_list; ifa; ifa=ifa->if_next) { +- onlink = ip6_addr_match(addr, &ifa->addr, +- ifa->prefix_len); ++ onlink = ipv6_prefix_equal(addr, &ifa->addr, ++ ifa->prefix_len); + if (onlink) + break; + } +diff -urN linux-2.6.11/net/ipv6/esp6.c linux.sinabox/net/ipv6/esp6.c +--- linux-2.6.11/net/ipv6/esp6.c 2005-03-02 08:38:12.000000000 +0100 ++++ linux.sinabox/net/ipv6/esp6.c 2005-03-26 19:02:06.000000000 +0100 +@@ -148,6 +148,7 @@ + ret = -EINVAL; + goto out_nofree; + } ++ esph = (struct ipv6_esp_hdr*)skb->data; + + if (elen <= 0 || (elen & (blksize-1))) { + ret = -EINVAL; +@@ -166,6 +167,11 @@ + u8 sum[esp->auth.icv_full_len]; + u8 sum1[alen]; + ++ if (x->props.replay_window && xfrm_replay_check(x, esph->seq_no)) { ++ ret = -EINVAL; ++ goto out; ++ } ++ + esp->auth.icv(esp, skb, 0, skb->len-alen, sum); + + if (skb_copy_bits(skb, skb->len-alen, sum1, alen)) +@@ -176,6 +182,10 @@ + ret = -EINVAL; + goto out; + } ++ ++ if (x->props.replay_window) ++ xfrm_replay_advance(x, esph->seq_no); ++ + } + + if ((nfrags = skb_cow_data(skb, 0, &trailer)) < 0) { +@@ -185,7 +195,6 @@ + + skb->ip_summed = CHECKSUM_NONE; + +- esph = (struct ipv6_esp_hdr*)skb->data; + iph = skb->nh.ipv6h; + + /* Get ivec. This can be wrong, check against another impls. */ +@@ -307,7 +316,7 @@ + if (x->aalg->alg_key_len > 512) + goto error; + } +- if (x->ealg == NULL) ++ if (x->ealg == NULL || (x->ealg->alg_key_len == 0 && x->props.ealgo != SADB_EALG_NULL)) + goto error; + + if (x->encap) +@@ -349,11 +358,13 @@ + goto error; + } + esp->conf.key = x->ealg->alg_key; +- esp->conf.key_len = (x->ealg->alg_key_len+7)/8; +- if (x->props.ealgo == SADB_EALG_NULL) ++ if (x->props.ealgo == SADB_EALG_NULL) { ++ esp->conf.key_len = 0; + esp->conf.tfm = crypto_alloc_tfm(x->ealg->alg_name, CRYPTO_TFM_MODE_ECB); +- else ++ } else { ++ esp->conf.key_len = (x->ealg->alg_key_len+7)/8; + esp->conf.tfm = crypto_alloc_tfm(x->ealg->alg_name, CRYPTO_TFM_MODE_CBC); ++ } + if (esp->conf.tfm == NULL) + goto error; + esp->conf.ivlen = crypto_tfm_alg_ivsize(esp->conf.tfm); +diff -urN linux-2.6.11/net/ipv6/exthdrs.c linux.sinabox/net/ipv6/exthdrs.c +--- linux-2.6.11/net/ipv6/exthdrs.c 2005-03-02 08:37:47.000000000 +0100 ++++ linux.sinabox/net/ipv6/exthdrs.c 2005-03-26 19:02:06.000000000 +0100 +@@ -156,10 +156,18 @@ + { + struct sk_buff *skb = *skbp; + struct inet6_skb_parm *opt = IP6CB(skb); ++#ifdef CONFIG_IPV6_STATISTICS ++ struct dst_entry *dst = skb->dst; ++ struct inet6_dev *idev = ((struct rt6_info *)dst)->rt6i_idev; ++#endif + + if (!pskb_may_pull(skb, (skb->h.raw-skb->data)+8) || + !pskb_may_pull(skb, (skb->h.raw-skb->data)+((skb->h.raw[1]+1)<<3))) { ++#ifdef CONFIG_IPV6_STATISTICS ++ IP6_INC_STATS_BH(idev, IPSTATS_MIB_INHDRERRORS); ++#else + IP6_INC_STATS_BH(IPSTATS_MIB_INHDRERRORS); ++#endif + kfree_skb(skb); + return -1; + } +@@ -172,7 +180,11 @@ + return 1; + } + ++#ifdef CONFIG_IPV6_STATISTICS ++ IP6_INC_STATS_BH(idev, IPSTATS_MIB_INHDRERRORS); ++#else + IP6_INC_STATS_BH(IPSTATS_MIB_INHDRERRORS); ++#endif + return -1; + } + +@@ -220,6 +232,10 @@ + struct inet6_skb_parm *opt = IP6CB(skb); + struct in6_addr *addr; + struct in6_addr daddr; ++#ifdef CONFIG_IPV6_STATISTICS ++ struct dst_entry *dst = skb->dst; ++ struct inet6_dev *idev = ((struct rt6_info *)dst)->rt6i_idev; ++#endif + int n, i; + + struct ipv6_rt_hdr *hdr; +@@ -227,7 +243,11 @@ + + if (!pskb_may_pull(skb, (skb->h.raw-skb->data)+8) || + !pskb_may_pull(skb, (skb->h.raw-skb->data)+((skb->h.raw[1]+1)<<3))) { ++#ifdef CONFIG_IPV6_STATISTICS ++ IP6_INC_STATS_BH(idev, IPSTATS_MIB_INHDRERRORS); ++#else + IP6_INC_STATS_BH(IPSTATS_MIB_INHDRERRORS); ++#endif + kfree_skb(skb); + return -1; + } +@@ -236,7 +256,11 @@ + + if (ipv6_addr_is_multicast(&skb->nh.ipv6h->daddr) || + skb->pkt_type != PACKET_HOST) { ++#ifdef CONFIG_IPV6_STATISTICS ++ IP6_INC_STATS_BH(idev, IPSTATS_MIB_INADDRERRORS); ++#else + IP6_INC_STATS_BH(IPSTATS_MIB_INADDRERRORS); ++#endif + kfree_skb(skb); + return -1; + } +@@ -252,13 +276,21 @@ + } + + if (hdr->type != IPV6_SRCRT_TYPE_0) { ++#ifdef CONFIG_IPV6_STATISTICS ++ IP6_INC_STATS_BH(idev, IPSTATS_MIB_INHDRERRORS); ++#else + IP6_INC_STATS_BH(IPSTATS_MIB_INHDRERRORS); ++#endif + icmpv6_param_prob(skb, ICMPV6_HDR_FIELD, (&hdr->type) - skb->nh.raw); + return -1; + } + + if (hdr->hdrlen & 0x01) { ++#ifdef CONFIG_IPV6_STATISTICS ++ IP6_INC_STATS_BH(idev, IPSTATS_MIB_INHDRERRORS); ++#else + IP6_INC_STATS_BH(IPSTATS_MIB_INHDRERRORS); ++#endif + icmpv6_param_prob(skb, ICMPV6_HDR_FIELD, (&hdr->hdrlen) - skb->nh.raw); + return -1; + } +@@ -271,7 +303,11 @@ + n = hdr->hdrlen >> 1; + + if (hdr->segments_left > n) { ++#ifdef CONFIG_IPV6_STATISTICS ++ IP6_INC_STATS_BH(idev, IPSTATS_MIB_INHDRERRORS); ++#else + IP6_INC_STATS_BH(IPSTATS_MIB_INHDRERRORS); ++#endif + icmpv6_param_prob(skb, ICMPV6_HDR_FIELD, (&hdr->segments_left) - skb->nh.raw); + return -1; + } +@@ -284,7 +320,11 @@ + kfree_skb(skb); + /* the copy is a forwarded packet */ + if (skb2 == NULL) { +- IP6_INC_STATS_BH(IPSTATS_MIB_OUTDISCARDS); ++#ifdef CONFIG_IPV6_STATISTICS ++ IP6_INC_STATS_BH(idev, IPSTATS_MIB_OUTDISCARDS); ++#else ++ IP6_INC_STATS_BH(IPSTATS_MIB_OUTDISCARDS); ++#endif + return -1; + } + *skbp = skb = skb2; +@@ -302,7 +342,11 @@ + addr += i - 1; + + if (ipv6_addr_is_multicast(addr)) { ++#ifdef CONFIG_IPV6_STATISTICS ++ IP6_INC_STATS_BH(idev, IPSTATS_MIB_INADDRERRORS); ++#else + IP6_INC_STATS_BH(IPSTATS_MIB_INADDRERRORS); ++#endif + kfree_skb(skb); + return -1; + } +@@ -321,7 +365,11 @@ + + if (skb->dst->dev->flags&IFF_LOOPBACK) { + if (skb->nh.ipv6h->hop_limit <= 1) { ++#ifdef CONFIG_IPV6_STATISTICS ++ IP6_INC_STATS_BH(idev, IPSTATS_MIB_INHDRERRORS); ++#else + IP6_INC_STATS_BH(IPSTATS_MIB_INHDRERRORS); ++#endif + icmpv6_send(skb, ICMPV6_TIME_EXCEED, ICMPV6_EXC_HOPLIMIT, + 0, skb->dev); + kfree_skb(skb); +@@ -434,29 +482,49 @@ + + static int ipv6_hop_jumbo(struct sk_buff *skb, int optoff) + { ++#ifdef CONFIG_IPV6_STATISTICS ++ struct dst_entry *dst = skb->dst; ++ struct inet6_dev *idev = ((struct rt6_info *)dst)->rt6i_idev; ++#endif + u32 pkt_len; + + if (skb->nh.raw[optoff+1] != 4 || (optoff&3) != 2) { + LIMIT_NETDEBUG( + printk(KERN_DEBUG "ipv6_hop_jumbo: wrong jumbo opt length/alignment %d\n", skb->nh.raw[optoff+1])); ++#ifdef CONFIG_IPV6_STATISTICS ++ IP6_INC_STATS_BH(idev, IPSTATS_MIB_INHDRERRORS); ++#else + IP6_INC_STATS_BH(IPSTATS_MIB_INHDRERRORS); ++#endif + goto drop; + } + + pkt_len = ntohl(*(u32*)(skb->nh.raw+optoff+2)); + if (pkt_len <= IPV6_MAXPLEN) { ++#ifdef CONFIG_IPV6_STATISTICS ++ IP6_INC_STATS_BH(idev, IPSTATS_MIB_INHDRERRORS); ++#else + IP6_INC_STATS_BH(IPSTATS_MIB_INHDRERRORS); ++#endif + icmpv6_param_prob(skb, ICMPV6_HDR_FIELD, optoff+2); + return 0; + } + if (skb->nh.ipv6h->payload_len) { ++#ifdef CONFIG_IPV6_STATISTICS ++ IP6_INC_STATS_BH(idev, IPSTATS_MIB_INHDRERRORS); ++#else + IP6_INC_STATS_BH(IPSTATS_MIB_INHDRERRORS); ++#endif + icmpv6_param_prob(skb, ICMPV6_HDR_FIELD, optoff); + return 0; + } + + if (pkt_len > skb->len - sizeof(struct ipv6hdr)) { ++#ifdef CONFIG_IPV6_STATISTICS ++ IP6_INC_STATS_BH(idev, IPSTATS_MIB_INTRUNCATEDPKTS); ++#else + IP6_INC_STATS_BH(IPSTATS_MIB_INTRUNCATEDPKTS); ++#endif + goto drop; + } + if (pkt_len + sizeof(struct ipv6hdr) < skb->len) { +@@ -483,11 +551,13 @@ + { -1, } + }; + +-int ipv6_parse_hopopts(struct sk_buff *skb, int nhoff) ++int ipv6_parse_hopopts(struct sk_buff **skbp, unsigned int *nhoffp) + { +- IP6CB(skb)->hop = sizeof(struct ipv6hdr); +- if (ip6_parse_tlv(tlvprochopopt_lst, skb)) +- return sizeof(struct ipv6hdr); ++ IP6CB(*skbp)->hop = sizeof(struct ipv6hdr); ++ if (ip6_parse_tlv(tlvprochopopt_lst, *skbp)) { ++ *nhoffp = sizeof(struct ipv6hdr); ++ return 1; ++ } + return -1; + } + +@@ -543,14 +613,34 @@ + ipv6_push_rthdr(skb, proto, opt->srcrt, daddr); + if (opt->dst0opt) + ipv6_push_exthdr(skb, proto, NEXTHDR_DEST, opt->dst0opt); +- if (opt->hopopt) ++ if (skb->len > IPV6_MAXPLEN - (opt->hopopt ? (opt->hopopt->hdrlen+2)<<2 : 0)) { ++ /* data is jumbogram */ ++ u8 *hopt = skb_push(skb, 8); ++ if (opt->hopopt) { ++ u8 *hlen; ++ ipv6_push_exthdr(skb, proto, NEXTHDR_HOP, opt->hopopt); ++ hlen = skb->data + 1; ++ (*hlen)++; ++ hopt[0] = IPV6_TLV_PADN; ++ hopt[1] = 0; ++ } else { ++ hopt[0] = *proto; ++ hopt[1] = 0; ++ } ++ hopt[2] = 0xC2; ++ hopt[3] = 4; ++ *(u32 *)&hopt[4] = htonl(skb->len); ++ *proto = NEXTHDR_HOP; ++ } else if (opt->hopopt) + ipv6_push_exthdr(skb, proto, NEXTHDR_HOP, opt->hopopt); + } + + void ipv6_push_frag_opts(struct sk_buff *skb, struct ipv6_txoptions *opt, u8 *proto) + { +- if (opt->dst1opt) ++ if (opt->dst1opt) { + ipv6_push_exthdr(skb, proto, NEXTHDR_DEST, opt->dst1opt); ++ skb->h.raw = skb->data; ++ } + } + + struct ipv6_txoptions * +diff -urN linux-2.6.11/net/ipv6/icmp.c linux.sinabox/net/ipv6/icmp.c +--- linux-2.6.11/net/ipv6/icmp.c 2005-03-02 08:37:52.000000000 +0100 ++++ linux.sinabox/net/ipv6/icmp.c 2005-03-26 19:02:06.000000000 +0100 +@@ -176,7 +176,11 @@ + */ + dst = ip6_route_output(sk, fl); + if (dst->error) { ++#ifdef CONFIG_IPV6_STATISTICS ++ IP6_INC_STATS((((struct rt6_info *)dst)->rt6i_idev), IPSTATS_MIB_OUTNOROUTES); ++#else + IP6_INC_STATS(IPSTATS_MIB_OUTNOROUTES); ++#endif + } else if (dst->dev && (dst->dev->flags&IFF_LOOPBACK)) { + res = 1; + } else { +@@ -381,6 +385,8 @@ + hlimit = np->hop_limit; + if (hlimit < 0) + hlimit = dst_metric(dst, RTAX_HOPLIMIT); ++ if (hlimit < 0) ++ hlimit = ipv6_get_hoplimit(dst->dev); + + msg.skb = skb; + msg.offset = skb->nh.raw - skb->data; +@@ -467,6 +473,8 @@ + hlimit = np->hop_limit; + if (hlimit < 0) + hlimit = dst_metric(dst, RTAX_HOPLIMIT); ++ if (hlimit < 0) ++ hlimit = ipv6_get_hoplimit(dst->dev); + + idev = in6_dev_get(skb->dev); + +diff -urN linux-2.6.11/net/ipv6/ip6_fib.c linux.sinabox/net/ipv6/ip6_fib.c +--- linux-2.6.11/net/ipv6/ip6_fib.c 2005-03-02 08:38:19.000000000 +0100 ++++ linux.sinabox/net/ipv6/ip6_fib.c 2005-03-26 19:02:06.000000000 +0100 +@@ -18,6 +18,7 @@ + * Yuji SEKIYA @USAGI: Support default route on router node; + * remove ip6_null_entry from the top of + * routing table. ++ * Ville Nuorvala: Fixes to source address sub trees + */ + #include + #include +@@ -49,6 +50,11 @@ + + struct rt6_statistics rt6_stats; + ++#if !defined(CONFIG_IPV6_NEW_ROUNDROBIN) ++extern struct rt6_info *rt6_dflt_pointer; ++extern spinlock_t rt6_dflt_lock; ++#endif ++ + static kmem_cache_t * fib6_node_kmem; + + enum fib_walk_state_t +@@ -80,6 +86,7 @@ + #define SUBTREE(fn) NULL + #endif + ++static struct rt6_info * fib6_find_prefix(struct fib6_node *fn); + static void fib6_prune_clones(struct fib6_node *fn, struct rt6_info *rt); + static struct fib6_node * fib6_repair_tree(struct fib6_node *fn); + +@@ -117,36 +124,6 @@ + */ + + /* +- * compare "prefix length" bits of an address +- */ +- +-static __inline__ int addr_match(void *token1, void *token2, int prefixlen) +-{ +- __u32 *a1 = token1; +- __u32 *a2 = token2; +- int pdw; +- int pbi; +- +- pdw = prefixlen >> 5; /* num of whole __u32 in prefix */ +- pbi = prefixlen & 0x1f; /* num of bits in incomplete u32 in prefix */ +- +- if (pdw) +- if (memcmp(a1, a2, pdw << 2)) +- return 0; +- +- if (pbi) { +- __u32 mask; +- +- mask = htonl((0xffffffff) << (32 - pbi)); +- +- if ((a1[pdw] ^ a2[pdw]) & mask) +- return 0; +- } +- +- return 1; +-} +- +-/* + * test bit + */ + +@@ -261,7 +238,7 @@ + * Prefix match + */ + if (plen < fn->fn_bit || +- !addr_match(&key->addr, addr, fn->fn_bit)) ++ !ipv6_prefix_equal(&key->addr, addr, fn->fn_bit)) + goto insert_above; + + /* +@@ -513,6 +490,9 @@ + { + struct fib6_node *fn; + int err = -ENOMEM; ++#ifdef CONFIG_IPV6_SUBTREES ++ struct fib6_node *pn = NULL; ++#endif + + fn = fib6_add_1(root, &rt->rt6i_dst.addr, sizeof(struct in6_addr), + rt->rt6i_dst.plen, offsetof(struct rt6_info, rt6i_dst)); +@@ -565,10 +545,6 @@ + /* Now link new subtree to main tree */ + sfn->parent = fn; + fn->subtree = sfn; +- if (fn->leaf == NULL) { +- fn->leaf = rt; +- atomic_inc(&rt->rt6i_ref); +- } + } else { + sn = fib6_add_1(fn->subtree, &rt->rt6i_src.addr, + sizeof(struct in6_addr), rt->rt6i_src.plen, +@@ -578,6 +554,13 @@ + goto st_failure; + } + ++ /* fib6_add_1 might have cleared the old leaf pointer */ ++ if (fn->leaf == NULL) { ++ fn->leaf = rt; ++ atomic_inc(&rt->rt6i_ref); ++ } ++ ++ pn = fn; + fn = sn; + } + #endif +@@ -591,8 +574,29 @@ + } + + out: +- if (err) ++ if (err) { ++#ifdef CONFIG_IPV6_SUBTREES ++ /* If fib6_add_1 has cleared the old leaf pointer in the ++ * super-tree leaf node, we have to find a new one for it. ++ * ++ * This situation will never arise in the sub-tree since ++ * the node will at least have the duplicate route that ++ * caused fib6_add_rt2node to fail in the first place. ++ */ ++ ++ if (pn && !(pn->fn_flags & RTN_RTINFO)) { ++ pn->leaf = fib6_find_prefix(pn); ++#if RT6_DEBUG >= 2 ++ if (!pn->leaf) { ++ BUG_TRAP(pn->leaf); ++ pn->leaf = &ip6_null_entry; ++ } ++#endif ++ atomic_inc(&pn->leaf->rt6i_ref); ++ } ++#endif + dst_free(&rt->u.dst); ++ } + return err; + + #ifdef CONFIG_IPV6_SUBTREES +@@ -667,7 +671,7 @@ + key = (struct rt6key *) ((u8 *) fn->leaf + + args->offset); + +- if (addr_match(&key->addr, args->addr, key->plen)) ++ if (ipv6_prefix_equal(&key->addr, args->addr, key->plen)) + return fn; + } + +@@ -680,16 +684,19 @@ + struct fib6_node * fib6_lookup(struct fib6_node *root, struct in6_addr *daddr, + struct in6_addr *saddr) + { +- struct lookup_args args[2]; + struct fib6_node *fn; +- +- args[0].offset = offsetof(struct rt6_info, rt6i_dst); +- args[0].addr = daddr; +- ++ struct lookup_args args[2] = { ++ { ++ .offset = offsetof(struct rt6_info, rt6i_dst), ++ .addr = daddr, ++ }, + #ifdef CONFIG_IPV6_SUBTREES +- args[1].offset = offsetof(struct rt6_info, rt6i_src); +- args[1].addr = saddr; ++ { ++ .offset = offsetof(struct rt6_info, rt6i_src), ++ .addr = saddr, ++ }, + #endif ++ }; + + fn = fib6_lookup_1(root, args); + +@@ -718,7 +725,7 @@ + * Prefix match + */ + if (plen < fn->fn_bit || +- !addr_match(&key->addr, addr, fn->fn_bit)) ++ !ipv6_prefix_equal(&key->addr, addr, fn->fn_bit)) + return NULL; + + if (plen == fn->fn_bit) +@@ -747,10 +754,8 @@ + #ifdef CONFIG_IPV6_SUBTREES + if (src_len) { + BUG_TRAP(saddr!=NULL); +- if (fn == NULL) +- fn = fn->subtree; + if (fn) +- fn = fib6_locate_1(fn, saddr, src_len, ++ fn = fib6_locate_1(fn->subtree, saddr, src_len, + offsetof(struct rt6_info, rt6i_src)); + } + #endif +@@ -1184,7 +1189,9 @@ + if (rt->rt6i_flags&RTF_EXPIRES && rt->rt6i_expires) { + if (time_after(now, rt->rt6i_expires)) { + RT6_TRACE("expiring %p\n", rt); ++#if !defined(CONFIG_IPV6_NEW_ROUNDROBIN) + rt6_reset_dflt_pointer(rt); ++#endif + return -1; + } + gc_args.more++; +diff -urN linux-2.6.11/net/ipv6/ip6_input.c linux.sinabox/net/ipv6/ip6_input.c +--- linux-2.6.11/net/ipv6/ip6_input.c 2005-03-02 08:38:17.000000000 +0100 ++++ linux.sinabox/net/ipv6/ip6_input.c 2005-03-26 19:02:06.000000000 +0100 +@@ -19,6 +19,7 @@ + * + * Mitsuru KANDA @USAGI and + * YOSHIFUJI Hideaki @USAGI: Remove ipv6_parse_exthdrs(). ++ * Hoerdt Mickael : Added Multicast routing support. + */ + + #include +@@ -59,15 +60,27 @@ + int ipv6_rcv(struct sk_buff *skb, struct net_device *dev, struct packet_type *pt) + { + struct ipv6hdr *hdr; ++#ifdef CONFIG_IPV6_STATISTICS ++ struct inet6_dev *idev = NULL; ++#endif + u32 pkt_len; + + if (skb->pkt_type == PACKET_OTHERHOST) + goto drop; + ++#ifdef CONFIG_IPV6_STATISTICS ++ idev = in6_dev_get(dev); ++ IP6_INC_STATS_BH(idev, IPSTATS_MIB_INRECEIVES); ++#else + IP6_INC_STATS_BH(IPSTATS_MIB_INRECEIVES); ++#endif + + if ((skb = skb_share_check(skb, GFP_ATOMIC)) == NULL) { ++#ifdef CONFIG_IPV6_STATISTICS ++ IP6_INC_STATS_BH(idev, IPSTATS_MIB_INDISCARDS); ++#else + IP6_INC_STATS_BH(IPSTATS_MIB_INDISCARDS); ++#endif + goto out; + } + +@@ -79,10 +92,8 @@ + if (skb->len < sizeof(struct ipv6hdr)) + goto err; + +- if (!pskb_may_pull(skb, sizeof(struct ipv6hdr))) { +- IP6_INC_STATS_BH(IPSTATS_MIB_INHDRERRORS); +- goto drop; +- } ++ if (!pskb_may_pull(skb, sizeof(struct ipv6hdr))) ++ goto err; + + hdr = skb->nh.ipv6h; + +@@ -96,10 +107,8 @@ + if (pkt_len + sizeof(struct ipv6hdr) > skb->len) + goto truncated; + if (pkt_len + sizeof(struct ipv6hdr) < skb->len) { +- if (__pskb_trim(skb, pkt_len + sizeof(struct ipv6hdr))){ +- IP6_INC_STATS_BH(IPSTATS_MIB_INHDRERRORS); +- goto drop; +- } ++ if (__pskb_trim(skb, pkt_len + sizeof(struct ipv6hdr))) ++ goto err; + hdr = skb->nh.ipv6h; + if (skb->ip_summed == CHECKSUM_HW) + skb->ip_summed = CHECKSUM_NONE; +@@ -107,22 +116,39 @@ + } + + if (hdr->nexthdr == NEXTHDR_HOP) { ++ unsigned int nhoff = offsetof(struct ipv6hdr, nexthdr); + skb->h.raw = (u8*)(hdr+1); +- if (ipv6_parse_hopopts(skb, offsetof(struct ipv6hdr, nexthdr)) < 0) { +- IP6_INC_STATS_BH(IPSTATS_MIB_INHDRERRORS); +- return 0; ++ if (ipv6_parse_hopopts(&skb, &nhoff) < 0) { ++ skb = NULL; ++ goto err; + } +- hdr = skb->nh.ipv6h; + } + ++#ifdef CONFIG_IPV6_STATISTICS ++ if (idev) ++ in6_dev_put(idev); ++#endif + return NF_HOOK(PF_INET6,NF_IP6_PRE_ROUTING, skb, dev, NULL, ip6_rcv_finish); + truncated: ++#ifdef CONFIG_IPV6_STATISTICS ++ IP6_INC_STATS_BH(idev, IPSTATS_MIB_INTRUNCATEDPKTS); ++#else + IP6_INC_STATS_BH(IPSTATS_MIB_INTRUNCATEDPKTS); ++#endif + err: ++#ifdef CONFIG_IPV6_STATISTICS ++ IP6_INC_STATS_BH(idev, IPSTATS_MIB_INHDRERRORS); ++#else + IP6_INC_STATS_BH(IPSTATS_MIB_INHDRERRORS); ++#endif + drop: +- kfree_skb(skb); ++ if (skb) ++ kfree_skb(skb); + out: ++#ifdef CONFIG_IPV6_STATISTICS ++ if (idev) ++ in6_dev_put(idev); ++#endif + return 0; + } + +@@ -135,17 +161,16 @@ + { + struct inet6_protocol *ipprot; + struct sock *raw_sk; ++#ifdef CONFIG_IPV6_STATISTICS ++ struct dst_entry *dst = skb->dst; ++ struct inet6_dev *idev = ((struct rt6_info *)dst)->rt6i_idev; ++#endif + unsigned int nhoff; + int nexthdr; + u8 hash; + int cksum_sub = 0; + + skb->h.raw = skb->nh.raw + sizeof(struct ipv6hdr); +- +- /* +- * Parse extension headers +- */ +- + nexthdr = skb->nh.ipv6h->nexthdr; + nhoff = offsetof(struct ipv6hdr, nexthdr); + +@@ -193,15 +218,27 @@ + if (ret > 0) + goto resubmit; + else if (ret == 0) ++#ifdef CONFIG_IPV6_STATISTICS ++ IP6_INC_STATS_BH(idev, IPSTATS_MIB_INDELIVERS); ++#else + IP6_INC_STATS_BH(IPSTATS_MIB_INDELIVERS); ++#endif + } else { + if (!raw_sk) { + if (xfrm6_policy_check(NULL, XFRM_POLICY_IN, skb)) { ++#ifdef CONFIG_IPV6_STATISTICS ++ IP6_INC_STATS_BH(idev, IPSTATS_MIB_INUNKNOWNPROTOS); ++#else + IP6_INC_STATS_BH(IPSTATS_MIB_INUNKNOWNPROTOS); ++#endif + icmpv6_param_prob(skb, ICMPV6_UNK_NEXTHDR, nhoff); + } + } else { ++#ifdef CONFIG_IPV6_STATISTICS ++ IP6_INC_STATS_BH(idev, IPSTATS_MIB_INDELIVERS); ++#else + IP6_INC_STATS_BH(IPSTATS_MIB_INDELIVERS); ++#endif + kfree_skb(skb); + } + } +@@ -209,7 +246,11 @@ + return 0; + + discard: ++#ifdef CONFIG_IPV6_STATISTICS ++ IP6_INC_STATS_BH(idev, IPSTATS_MIB_INDISCARDS); ++#else + IP6_INC_STATS_BH(IPSTATS_MIB_INDISCARDS); ++#endif + rcu_read_unlock(); + kfree_skb(skb); + return 0; +@@ -224,18 +265,65 @@ + int ip6_mc_input(struct sk_buff *skb) + { + struct ipv6hdr *hdr; ++#if defined(CONFIG_IPV6_STATISTICS) || defined(CONFIG_IPV6_MROUTE) ++ struct dst_entry *dst = skb->dst; ++#endif ++#ifdef CONFIG_IPV6_STATISTICS ++ struct inet6_dev *idev = ((struct rt6_info *)dst)->rt6i_idev; ++#endif + int deliver; ++ int discard = 1; + ++#ifdef CONFIG_IPV6_MROUTE ++ skb->dev = dst->dev; ++#endif ++ ++#ifdef CONFIG_IPV6_STATISTICS ++ IP6_INC_STATS_BH(idev, IPSTATS_MIB_INMCASTPKTS); ++#else + IP6_INC_STATS_BH(IPSTATS_MIB_INMCASTPKTS); ++#endif + + hdr = skb->nh.ipv6h; + deliver = likely(!(skb->dev->flags & (IFF_PROMISC|IFF_ALLMULTI))) || + ipv6_chk_mcast_addr(skb->dev, &hdr->daddr, NULL); + ++#ifdef CONFIG_IPV6_MROUTE + /* +- * IPv6 multicast router mode isnt currently supported. ++ * IPv6 multicast router mode is now supported ;) + */ ++ if (ipv6_devconf.mc_forwarding == 1) { ++ int addr_typed; ++ int addr_types; ++ ++ addr_typed = ipv6_addr_type(&hdr->daddr); ++ addr_types = ipv6_addr_type(&hdr->saddr); ++ ++ if (!(addr_typed & (IPV6_ADDR_LOOPBACK | IPV6_ADDR_LINKLOCAL))) { ++ struct sk_buff *skb2; ++ ++ /* check if this is a mld message */ ++ if(hdr->nexthdr == NEXTHDR_HOP) { ++ if(skb->h.raw[0] == IPPROTO_ICMPV6 ){ ++ ip6_input(skb); ++ return 0; ++ } ++ } ++ ++ if (deliver) { ++ skb2 = skb_clone(skb,GFP_ATOMIC); ++ } else { ++ discard = 0; ++ skb2 = skb; ++ } ++ ip6_mr_input(skb2); ++ } ++ } ++#else + #if 0 ++ /* ++ * IPv6 multicast router mode isnt currently supported. ++ */ + if (ipv6_config.multicast_route) { + int addr_type; + +@@ -257,13 +345,14 @@ + } + } + #endif ++#endif + + if (likely(deliver)) { ++ discard = 0; + ip6_input(skb); +- return 0; + } + /* discard */ +- kfree_skb(skb); +- ++ if (discard) ++ kfree_skb(skb); + return 0; + } +diff -urN linux-2.6.11/net/ipv6/ip6mr.c linux.sinabox/net/ipv6/ip6mr.c +--- linux-2.6.11/net/ipv6/ip6mr.c 1970-01-01 01:00:00.000000000 +0100 ++++ linux.sinabox/net/ipv6/ip6mr.c 2005-03-26 19:02:06.000000000 +0100 +@@ -0,0 +1,1682 @@ ++/* ++ * Linux IPv6 multicast routing support for BSD pim6sd ++ * ++ * (c) 2004 Mickael Hoerdt, ++ * LSIIT Laboratory, Strasbourg, France ++ * (c) 2004 Jean-Philippe Andriot, ++ * 6WIND, Paris, France ++ * ++ * This program 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 ++ * 2 of the License, or (at your option) any later version. ++ * ++ * Version: $Id: ip6mr.c,v 1.1 2004/12/27 17:54:01 hoerdt Exp $ ++ * ++ * Fixes: ++ * Michael Chastain : Incorrect size of copying. ++ * Alan Cox : Added the cache manager code ++ * Alan Cox : Fixed the clone/copy bug and device race. ++ * Mike McLagan : Routing by source ++ * Malcolm Beattie : Buffer handling fixes. ++ * Alexey Kuznetsov : Double buffer free and other fixes. ++ * SVR Anand : Fixed several multicast bugs and problems. ++ * Alexey Kuznetsov : Status, optimisations and more. ++ * Brad Parker : Better behaviour on mrouted upcall ++ * overflow. ++ * Carlos Picoto : PIMv1 Support ++ * Pavlin Ivanov Radoslavov: PIMv2 Registers must checksum only PIM header ++ * Relax this requirement to work with older peers. ++ * Mickael Hoerdt and : IPv6 support based on linux/net/ipv4/ipmr.c [Linux 2.x] ++ * Jean-Philippe Andriot on netinet/ip6_mroute.c [*BSD] ++ * ++ */ ++ ++#include ++#include ++#include ++#include ++#include ++#include ++#include ++#include ++#include ++#include ++#include ++#include ++#include ++#include ++#include ++#include ++#include ++#include ++#include ++#include ++#include ++#include ++#include ++#include ++#include ++#include ++#include ++#include ++#include ++#include ++#include ++#include ++#include ++ ++ ++#include ++#include ++#include ++#include ++#include ++ ++struct sock *mroute6_socket; ++ ++ ++/* Big lock, protecting vif table, mrt cache and mroute socket state. ++ Note that the changes are semaphored via rtnl_lock. ++ */ ++ ++static rwlock_t mrt_lock = RW_LOCK_UNLOCKED; ++ ++/* ++ * Multicast router control variables ++ */ ++ ++static struct mif_device vif6_table[MAXMIFS]; /* Devices */ ++static int maxvif; ++ ++#define MIF_EXISTS(idx) (vif6_table[idx].dev != NULL) ++ ++static int mroute_do_assert; /* Set in PIM assert */ ++static int mroute_do_pim; ++ ++static struct mfc6_cache *mfc6_cache_array[MFC_LINES]; /* Forwarding cache */ ++ ++static struct mfc6_cache *mfc_unres_queue; /* Queue of unresolved entries */ ++static atomic_t cache_resolve_queue_len; /* Size of unresolved */ ++ ++/* Special spinlock for queue of unresolved entries */ ++static spinlock_t mfc_unres_lock = SPIN_LOCK_UNLOCKED; ++ ++/* We return to original Alan's scheme. Hash table of resolved ++ entries is changed only in process context and protected ++ with weak lock mrt_lock. Queue of unresolved entries is protected ++ with strong spinlock mfc_unres_lock. ++ ++ In this case data path is free of exclusive locks at all. ++ */ ++ ++static kmem_cache_t *mrt_cachep; ++ ++static int ip6_mr_forward(struct sk_buff *skb, struct mfc6_cache *cache, int local); ++static int ip6mr_cache_report(struct sk_buff *pkt, vifi_t vifi, int assert); ++static int ip6mr_fill_mroute(struct sk_buff *skb, struct mfc6_cache *c, struct rtmsg *rtm); ++ ++static struct inet6_protocol pim6_protocol; ++ ++static struct timer_list ipmr_expire_timer; ++ ++ ++#ifdef CONFIG_PROC_FS ++ ++struct ipmr_mfc_iter { ++ struct mfc6_cache **cache; ++ int ct; ++}; ++ ++ ++static struct mfc6_cache *ipmr_mfc_seq_idx(struct ipmr_mfc_iter *it, loff_t pos) ++{ ++ struct mfc6_cache *mfc; ++ ++ it->cache = mfc6_cache_array; ++ read_lock(&mrt_lock); ++ for (it->ct = 0; it->ct < MFC_LINES; it->ct++) ++ for(mfc = mfc6_cache_array[it->ct]; mfc; mfc = mfc->next) ++ if (pos-- == 0) ++ return mfc; ++ read_unlock(&mrt_lock); ++ ++ it->cache = &mfc_unres_queue; ++ spin_lock_bh(&mfc_unres_lock); ++ for(mfc = mfc_unres_queue; mfc; mfc = mfc->next) ++ if (pos-- == 0) ++ return mfc; ++ spin_unlock_bh(&mfc_unres_lock); ++ ++ it->cache = NULL; ++ return NULL; ++} ++ ++ ++ ++ ++/* ++ * The /proc interfaces to multicast routing /proc/ip6_mr_cache /proc/ip6_mr_vif ++ */ ++ ++struct ipmr_vif_iter { ++ int ct; ++}; ++ ++static struct mif_device *ip6mr_vif_seq_idx(struct ipmr_vif_iter *iter, ++ loff_t pos) ++{ ++ for (iter->ct = 0; iter->ct < maxvif; ++iter->ct) { ++ if(!MIF_EXISTS(iter->ct)) ++ continue; ++ if (pos-- == 0) ++ return &vif6_table[iter->ct]; ++ } ++ return NULL; ++} ++ ++static void *ip6mr_vif_seq_start(struct seq_file *seq, loff_t *pos) ++{ ++ read_lock(&mrt_lock); ++ return *pos ? ip6mr_vif_seq_idx(seq->private, *pos - 1) ++ : SEQ_START_TOKEN; ++} ++ ++static void *ip6mr_vif_seq_next(struct seq_file *seq, void *v, loff_t *pos) ++{ ++ struct ipmr_vif_iter *iter = seq->private; ++ ++ ++*pos; ++ if (v == SEQ_START_TOKEN) ++ return ip6mr_vif_seq_idx(iter, 0); ++ ++ while (++iter->ct < maxvif) { ++ if(!MIF_EXISTS(iter->ct)) ++ continue; ++ return &vif6_table[iter->ct]; ++ } ++ return NULL; ++} ++ ++static void ip6mr_vif_seq_stop(struct seq_file *seq, void *v) ++{ ++ read_unlock(&mrt_lock); ++} ++ ++static int ip6mr_vif_seq_show(struct seq_file *seq, void *v) ++{ ++ if (v == SEQ_START_TOKEN) { ++ seq_puts(seq, ++ "Interface BytesIn PktsIn BytesOut PktsOut Flags\n"); ++ } else { ++ const struct mif_device *vif = v; ++ const char *name = vif->dev ? vif->dev->name : "none"; ++ ++ seq_printf(seq, ++ "%2Zd %-10s %8ld %7ld %8ld %7ld %05X\n", ++ vif - vif6_table, ++ name, vif->bytes_in, vif->pkt_in, ++ vif->bytes_out, vif->pkt_out, ++ vif->flags); ++ } ++ return 0; ++} ++ ++static struct seq_operations ip6mr_vif_seq_ops = { ++ .start = ip6mr_vif_seq_start, ++ .next = ip6mr_vif_seq_next, ++ .stop = ip6mr_vif_seq_stop, ++ .show = ip6mr_vif_seq_show, ++}; ++ ++static int ip6mr_vif_open(struct inode *inode, struct file *file) ++{ ++ struct seq_file *seq; ++ int rc = -ENOMEM; ++ struct ipmr_vif_iter *s = kmalloc(sizeof(*s), GFP_KERNEL); ++ ++ if (!s) ++ goto out; ++ ++ rc = seq_open(file, &ip6mr_vif_seq_ops); ++ if (rc) ++ goto out_kfree; ++ ++ s->ct = 0; ++ seq = file->private_data; ++ seq->private = s; ++out: ++ return rc; ++out_kfree: ++ kfree(s); ++ goto out; ++ ++} ++ ++static struct file_operations ip6mr_vif_fops = { ++ .owner = THIS_MODULE, ++ .open = ip6mr_vif_open, ++ .read = seq_read, ++ .llseek = seq_lseek, ++ .release = seq_release, ++}; ++ ++static void *ipmr_mfc_seq_start(struct seq_file *seq, loff_t *pos) ++{ ++ return *pos ? ipmr_mfc_seq_idx(seq->private, *pos - 1) ++ : SEQ_START_TOKEN; ++} ++ ++static void *ipmr_mfc_seq_next(struct seq_file *seq, void *v, loff_t *pos) ++{ ++ struct mfc6_cache *mfc = v; ++ struct ipmr_mfc_iter *it = seq->private; ++ ++ ++*pos; ++ ++ if (v == SEQ_START_TOKEN) ++ return ipmr_mfc_seq_idx(seq->private, 0); ++ ++ if (mfc->next) ++ return mfc->next; ++ ++ if (it->cache == &mfc_unres_queue) ++ goto end_of_list; ++ ++ BUG_ON(it->cache != mfc6_cache_array); ++ ++ while (++it->ct < MFC_LINES) { ++ mfc = mfc6_cache_array[it->ct]; ++ if (mfc) ++ return mfc; ++ } ++ ++ /* exhausted cache_array, show unresolved */ ++ read_unlock(&mrt_lock); ++ it->cache = &mfc_unres_queue; ++ it->ct = 0; ++ ++ spin_lock_bh(&mfc_unres_lock); ++ mfc = mfc_unres_queue; ++ if (mfc) ++ return mfc; ++ ++ end_of_list: ++ spin_unlock_bh(&mfc_unres_lock); ++ it->cache = NULL; ++ ++ return NULL; ++} ++ ++static void ipmr_mfc_seq_stop(struct seq_file *seq, void *v) ++{ ++ struct ipmr_mfc_iter *it = seq->private; ++ ++ if (it->cache == &mfc_unres_queue) ++ spin_unlock_bh(&mfc_unres_lock); ++ else if (it->cache == mfc6_cache_array) ++ read_unlock(&mrt_lock); ++} ++ ++static int ipmr_mfc_seq_show(struct seq_file *seq, void *v) ++{ ++ int n; ++ ++ if (v == SEQ_START_TOKEN) { ++ seq_puts(seq, ++ "Group Origin Iif Pkts Bytes Wrong Oifs\n"); ++ } else { ++ const struct mfc6_cache *mfc = v; ++ const struct ipmr_mfc_iter *it = seq->private; ++ int i; ++ ++ for(i=0;i<16;i++) { ++ seq_printf(seq,"%02x",mfc->mf6c_mcastgrp.s6_addr[i]); ++ } ++ seq_printf(seq," "); ++ for(i=0;i<16;i++) { ++ seq_printf(seq,"%02x",mfc->mf6c_origin.s6_addr[i]); ++ } ++ seq_printf(seq," "); ++ ++ seq_printf(seq, "%-3d %8ld %8ld %8ld", ++ mfc->mf6c_parent, ++ mfc->mfc_un.res.pkt, ++ mfc->mfc_un.res.bytes, ++ mfc->mfc_un.res.wrong_if); ++ ++ if (it->cache != &mfc_unres_queue) { ++ for(n = mfc->mfc_un.res.minvif; ++ n < mfc->mfc_un.res.maxvif; n++ ) { ++ if(MIF_EXISTS(n) ++ && mfc->mfc_un.res.ttls[n] < 255) ++ seq_printf(seq, ++ " %2d:%-3d", ++ n, mfc->mfc_un.res.ttls[n]); ++ } ++ } ++ seq_putc(seq, '\n'); ++ } ++ return 0; ++} ++ ++static struct seq_operations ipmr_mfc_seq_ops = { ++ .start = ipmr_mfc_seq_start, ++ .next = ipmr_mfc_seq_next, ++ .stop = ipmr_mfc_seq_stop, ++ .show = ipmr_mfc_seq_show, ++}; ++ ++static int ipmr_mfc_open(struct inode *inode, struct file *file) ++{ ++ struct seq_file *seq; ++ int rc = -ENOMEM; ++ struct ipmr_mfc_iter *s = kmalloc(sizeof(*s), GFP_KERNEL); ++ ++ if (!s) ++ goto out; ++ ++ rc = seq_open(file, &ipmr_mfc_seq_ops); ++ if (rc) ++ goto out_kfree; ++ ++ memset(s, 0, sizeof(*s)); ++ seq = file->private_data; ++ seq->private = s; ++out: ++ return rc; ++out_kfree: ++ kfree(s); ++ goto out; ++ ++} ++ ++static struct file_operations ip6mr_mfc_fops = { ++ .owner = THIS_MODULE, ++ .open = ipmr_mfc_open, ++ .read = seq_read, ++ .llseek = seq_lseek, ++ .release = seq_release, ++}; ++#endif ++ ++#ifdef CONFIG_IPV6_PIMSM_V2 ++static int reg_vif_num = -1; ++ ++static int pim6_rcv(struct sk_buff **pskb,unsigned int *nhoffp) ++{ ++ struct pimreghdr *pim; ++ struct ipv6hdr *encap; ++ struct sk_buff *skb = *pskb; ++ struct net_device *reg_dev = NULL; ++ ++ if (!pskb_may_pull(skb, sizeof(*pim) + sizeof(*encap))) ++ goto drop; ++ ++ pim = (struct pimreghdr*)skb->h.raw; ++ if (pim->type != ((PIM_VERSION<<4)|(PIM_REGISTER)) || ++ (pim->flags&PIM_NULL_REGISTER) || ++ (ip_compute_csum((void *)pim, sizeof(*pim)) != 0 && ++ (u16)csum_fold(skb_checksum(skb, 0, skb->len, 0)))) ++ goto drop; ++ ++ /* check if the inner packet is destined to mcast group */ ++ encap = (struct ipv6hdr*)(skb->h.raw + sizeof(struct pimreghdr)); ++ ++ if(!(ipv6_addr_type(&encap->daddr)&IPV6_ADDR_MULTICAST) || ++ encap->payload_len == 0 || ++ ntohs(encap->payload_len) + sizeof(*pim) > skb->len) ++ goto drop; ++ ++ read_lock(&mrt_lock); ++ if (reg_vif_num >= 0) ++ reg_dev = vif6_table[reg_vif_num].dev; ++ if (reg_dev) ++ dev_hold(reg_dev); ++ read_unlock(&mrt_lock); ++ ++ if (reg_dev == NULL) ++ goto drop; ++ ++ skb->mac.raw = skb->nh.raw; ++ skb_pull(skb, (u8*)encap - skb->data); ++ skb->nh.ipv6h = (struct ipv6hdr *)skb->data; ++ skb->dev = reg_dev; ++ skb->protocol = htons(ETH_P_IP); ++ skb->ip_summed = 0; ++ skb->pkt_type = PACKET_HOST; ++ dst_release(skb->dst); ++ ((struct net_device_stats*)reg_dev->priv)->rx_bytes += skb->len; ++ ((struct net_device_stats*)reg_dev->priv)->rx_packets++; ++ skb->dst = NULL; ++#ifdef CONFIG_NETFILTER ++ nf_conntrack_put(skb->nfct); ++ skb->nfct = NULL; ++#endif ++ netif_rx(skb); ++ dev_put(reg_dev); ++ return 0; ++ drop: ++ kfree_skb(skb); ++ return 0; ++} ++ ++static struct inet6_protocol pim6_protocol = { ++ .handler = pim6_rcv, ++}; ++#endif ++ ++/* Service routines creating virtual interfaces: PIMREG */ ++#ifdef CONFIG_IPV6_PIMSM_V2 ++ ++ ++static int reg_vif_xmit(struct sk_buff *skb, struct net_device *dev) ++{ ++ read_lock(&mrt_lock); ++ ((struct net_device_stats*)dev->priv)->tx_bytes += skb->len; ++ ((struct net_device_stats*)dev->priv)->tx_packets++; ++ ip6mr_cache_report(skb, reg_vif_num, MRT6MSG_WHOLEPKT); ++ read_unlock(&mrt_lock); ++ kfree_skb(skb); ++ return 0; ++} ++ ++static struct net_device_stats *reg_vif_get_stats(struct net_device *dev) ++{ ++ return (struct net_device_stats*)dev->priv; ++} ++ ++static void reg_vif_setup(struct net_device *dev) ++{ ++ dev->type = ARPHRD_PIMREG; ++ dev->mtu = 1500 - sizeof(struct ipv6hdr) - 8; ++ dev->flags = IFF_NOARP; ++ dev->hard_start_xmit = reg_vif_xmit; ++ dev->get_stats = reg_vif_get_stats; ++ dev->destructor = free_netdev; ++} ++ ++static struct net_device *ip6mr_reg_vif(void) ++{ ++ struct net_device *dev; ++ struct inet6_dev *in_dev; ++ ++ dev = alloc_netdev(sizeof(struct net_device_stats), "pim6reg", ++ reg_vif_setup); ++ ++ if (dev == NULL) ++ return NULL; ++ ++ if (register_netdevice(dev)) { ++ free_netdev(dev); ++ return NULL; ++ } ++ dev->iflink = 0; ++ ++ if ((in_dev = ipv6_find_idev(dev)) == NULL) { ++ goto failure; ++ } ++ ++/* ++ * if ((in_dev = __in6_dev_get(dev)) == NULL) ++ goto failure; ++*/ ++#if 0 ++ in_dev->cnf.rp_filter = 0; ++#endif ++ ++ if (dev_open(dev)) ++ goto failure; ++ ++ return dev; ++ ++failure: ++ /* allow the register to be completed before unregistering. */ ++ rtnl_unlock(); ++ rtnl_lock(); ++ ++ unregister_netdevice(dev); ++ return NULL; ++} ++#endif ++ ++/* ++ * Delete a VIF entry ++ */ ++ ++static int mif6_delete(int vifi) ++{ ++ struct mif_device *v; ++ struct net_device *dev; ++ struct inet6_dev *in_dev; ++ ++ if (vifi < 0 || vifi >= maxvif) ++ return -EADDRNOTAVAIL; ++ ++ v = &vif6_table[vifi]; ++ ++ write_lock_bh(&mrt_lock); ++ dev = v->dev; ++ v->dev = NULL; ++ ++ if (!dev) { ++ write_unlock_bh(&mrt_lock); ++ return -EADDRNOTAVAIL; ++ } ++ ++#ifdef CONFIG_IPV6_PIMSM_V2 ++ if (vifi == reg_vif_num) ++ reg_vif_num = -1; ++#endif ++ ++ if (vifi+1 == maxvif) { ++ int tmp; ++ for (tmp=vifi-1; tmp>=0; tmp--) { ++ if (MIF_EXISTS(tmp)) ++ break; ++ } ++ maxvif = tmp+1; ++ } ++ ++ write_unlock_bh(&mrt_lock); ++ ++ dev_set_allmulti(dev, -1); ++ ++ if ((in_dev = __in6_dev_get(dev)) != NULL) { ++ in_dev->cnf.mc_forwarding--; ++ } ++ ++ if (v->flags&(MIFF_REGISTER)) ++ unregister_netdevice(dev); ++ ++ dev_put(dev); ++ return 0; ++} ++ ++/* Destroy an unresolved cache entry, killing queued skbs ++ and reporting error to netlink readers. ++ */ ++ ++static void ip6mr_destroy_unres(struct mfc6_cache *c) ++{ ++ struct sk_buff *skb; ++ ++ atomic_dec(&cache_resolve_queue_len); ++ ++ while((skb=skb_dequeue(&c->mfc_un.unres.unresolved))) { ++ if (skb->nh.ipv6h->version == 0) { ++ struct nlmsghdr *nlh = (struct nlmsghdr *)skb_pull(skb, sizeof(struct ipv6hdr)); ++ nlh->nlmsg_type = NLMSG_ERROR; ++ nlh->nlmsg_len = NLMSG_LENGTH(sizeof(struct nlmsgerr)); ++ skb_trim(skb, nlh->nlmsg_len); ++ ((struct nlmsgerr*)NLMSG_DATA(nlh))->error = -ETIMEDOUT; ++ netlink_unicast(rtnl, skb, NETLINK_CB(skb).dst_pid, MSG_DONTWAIT); ++ } else ++ kfree_skb(skb); ++ } ++ ++ kmem_cache_free(mrt_cachep, c); ++} ++ ++ ++/* Single timer process for all the unresolved queue. */ ++ ++static void ipmr_expire_process(unsigned long dummy) ++{ ++ unsigned long now; ++ unsigned long expires; ++ struct mfc6_cache *c, **cp; ++ ++ if (!spin_trylock(&mfc_unres_lock)) { ++ mod_timer(&ipmr_expire_timer, jiffies+HZ/10); ++ return; ++ } ++ ++ if (atomic_read(&cache_resolve_queue_len) == 0) ++ goto out; ++ ++ now = jiffies; ++ expires = 10*HZ; ++ cp = &mfc_unres_queue; ++ ++ while ((c=*cp) != NULL) { ++ if (time_after(c->mfc_un.unres.expires, now)) { ++ unsigned long interval = c->mfc_un.unres.expires - now; ++ if (interval < expires) ++ expires = interval; ++ cp = &c->next; ++ continue; ++ } ++ ++ *cp = c->next; ++ ++ ip6mr_destroy_unres(c); ++ } ++ ++ if (atomic_read(&cache_resolve_queue_len)) ++ mod_timer(&ipmr_expire_timer, jiffies + expires); ++ ++out: ++ spin_unlock(&mfc_unres_lock); ++} ++ ++/* Fill oifs list. It is called under write locked mrt_lock. */ ++ ++static void ip6mr_update_threshoulds(struct mfc6_cache *cache, unsigned char *ttls) ++{ ++ int vifi; ++ ++ cache->mfc_un.res.minvif = MAXVIFS; ++ cache->mfc_un.res.maxvif = 0; ++ memset(cache->mfc_un.res.ttls, 255, MAXVIFS); ++ ++ for (vifi=0; vifimfc_un.res.ttls[vifi] = ttls[vifi]; ++ if (cache->mfc_un.res.minvif > vifi) ++ cache->mfc_un.res.minvif = vifi; ++ if (cache->mfc_un.res.maxvif <= vifi) ++ cache->mfc_un.res.maxvif = vifi + 1; ++ } ++ } ++} ++ ++static int mif6_add(struct mif6ctl *vifc, int mrtsock) ++{ ++ int vifi = vifc->mif6c_mifi; ++ struct mif_device *v = &vif6_table[vifi]; ++ struct net_device *dev; ++ struct inet6_dev *in_dev; ++ ++ /* Is vif busy ? */ ++ if (MIF_EXISTS(vifi)) ++ return -EADDRINUSE; ++ ++ switch (vifc->mif6c_flags) { ++#ifdef CONFIG_IPV6_PIMSM_V2 ++ case MIFF_REGISTER: ++ /* ++ * Special Purpose VIF in PIM ++ * All the packets will be sent to the daemon ++ */ ++ if (reg_vif_num >= 0) ++ return -EADDRINUSE; ++ dev = ip6mr_reg_vif(); ++ if (!dev) ++ return -ENOBUFS; ++ break; ++#endif ++ case 0: ++ dev=dev_get_by_index(vifc->mif6c_pifi); ++ if (!dev) ++ return -EADDRNOTAVAIL; ++ __dev_put(dev); ++ break; ++ default: ++ return -EINVAL; ++ } ++ ++ if ((in_dev = __in6_dev_get(dev)) == NULL) ++ return -EADDRNOTAVAIL; ++ in_dev->cnf.mc_forwarding++; ++ dev_set_allmulti(dev, +1); ++ ++ /* ++ * Fill in the VIF structures ++ */ ++ v->rate_limit=vifc->vifc_rate_limit; ++ v->flags=vifc->mif6c_flags; ++ if(!mrtsock) ++ v->flags |= VIFF_STATIC; ++ v->threshold=vifc->vifc_threshold; ++ v->bytes_in = 0; ++ v->bytes_out = 0; ++ v->pkt_in = 0; ++ v->pkt_out = 0; ++ v->link = dev->ifindex; ++ if (v->flags&(MIFF_REGISTER)) ++ v->link = dev->iflink; ++ ++ /* And finish update writing critical data */ ++ write_lock_bh(&mrt_lock); ++ dev_hold(dev); ++ v->dev=dev; ++#ifdef CONFIG_IPV6_PIMSM_V2 ++ if (v->flags&MIFF_REGISTER) ++ reg_vif_num = vifi; ++#endif ++ if (vifi+1 > maxvif) ++ maxvif = vifi+1; ++ write_unlock_bh(&mrt_lock); ++ return 0; ++} ++ ++static struct mfc6_cache *ip6mr_cache_find(struct in6_addr origin,struct in6_addr mcastgrp) ++{ ++ int line=MFC6_HASH(mcastgrp,origin); ++ struct mfc6_cache *c; ++ ++ for (c=mfc6_cache_array[line]; c; c = c->next) { ++ if (IN6_ARE_ADDR_EQUAL(&c->mf6c_origin,&origin) && ++ IN6_ARE_ADDR_EQUAL(&c->mf6c_mcastgrp,&mcastgrp)) ++ break; ++ } ++ return c; ++} ++ ++/* ++ * Allocate a multicast cache entry ++ */ ++static struct mfc6_cache *ip6mr_cache_alloc(void) ++{ ++ struct mfc6_cache *c=kmem_cache_alloc(mrt_cachep, GFP_KERNEL); ++ if(c==NULL) ++ return NULL; ++ memset(c, 0, sizeof(*c)); ++ c->mfc_un.res.minvif = MAXVIFS; ++ return c; ++} ++ ++static struct mfc6_cache *ip6mr_cache_alloc_unres(void) ++{ ++ struct mfc6_cache *c=kmem_cache_alloc(mrt_cachep, GFP_ATOMIC); ++ if(c==NULL) ++ return NULL; ++ memset(c, 0, sizeof(*c)); ++ skb_queue_head_init(&c->mfc_un.unres.unresolved); ++ c->mfc_un.unres.expires = jiffies + 10*HZ; ++ return c; ++} ++ ++/* ++ * A cache entry has gone into a resolved state from queued ++ */ ++ ++static void ip6mr_cache_resolve(struct mfc6_cache *uc, struct mfc6_cache *c) ++{ ++ struct sk_buff *skb; ++ ++ /* ++ * Play the pending entries through our router ++ */ ++ ++ while((skb=__skb_dequeue(&uc->mfc_un.unres.unresolved))) { ++ if (skb->nh.ipv6h->version == 0) { ++ int err; ++ struct nlmsghdr *nlh = (struct nlmsghdr *)skb_pull(skb, sizeof(struct ipv6hdr)); ++ ++ if (ip6mr_fill_mroute(skb, c, NLMSG_DATA(nlh)) > 0) { ++ nlh->nlmsg_len = skb->tail - (u8*)nlh; ++ } else { ++ nlh->nlmsg_type = NLMSG_ERROR; ++ nlh->nlmsg_len = NLMSG_LENGTH(sizeof(struct nlmsgerr)); ++ skb_trim(skb, nlh->nlmsg_len); ++ ((struct nlmsgerr*)NLMSG_DATA(nlh))->error = -EMSGSIZE; ++ } ++ err = netlink_unicast(rtnl, skb, NETLINK_CB(skb).dst_pid, MSG_DONTWAIT); ++ } else ++ ip6_mr_forward(skb, c, 0); ++ } ++} ++ ++/* ++ * Bounce a cache query up to pim6sd. We could use netlink for this but pim6sd ++ * expects the following bizarre scheme. ++ * ++ * Called under mrt_lock. ++ */ ++ ++static int ip6mr_cache_report(struct sk_buff *pkt, vifi_t vifi, int assert) ++{ ++ struct sk_buff *skb; ++ struct mrt6msg *msg; ++ int ret; ++ ++#ifdef CONFIG_IPV6_PIMSM_V2 ++ if (assert == MRT6MSG_WHOLEPKT) ++ skb = skb_realloc_headroom(pkt, sizeof(struct ipv6hdr)); ++ else ++#endif ++ skb = alloc_skb(128, GFP_ATOMIC); ++ ++ if(!skb) ++ return -ENOBUFS; ++ ++ /* I suppose that internal messages ++ * do not require checksums */ ++ ++ skb->ip_summed = CHECKSUM_UNNECESSARY; ++ ++#ifdef CONFIG_IPV6_PIMSM_V2 ++ if (assert == MRT6MSG_WHOLEPKT) { ++ /* Ugly, but we have no choice with this interface. ++ Duplicate old header, fix length etc. ++ And all this only to mangle msg->im6_msgtype and ++ to set msg->im6_mbz to "mbz" :-) ++ */ ++ msg = (struct mrt6msg*)skb_push(skb, sizeof(struct ipv6hdr)); ++ skb->nh.raw = skb->h.raw = (u8*)msg; ++ memcpy(msg, pkt->nh.raw, sizeof(struct ipv6hdr)); ++ msg->im6_msgtype = MRT6MSG_WHOLEPKT; ++ msg->im6_mbz = 0; ++ msg->im6_mif = reg_vif_num; ++ } else ++#endif ++ { ++ ++ /* ++ * Copy the IP header ++ */ ++ ++ skb->nh.ipv6h = (struct ipv6hdr *)skb_put(skb, sizeof(struct ipv6hdr)); ++ memcpy(skb->data,pkt->data,sizeof(struct ipv6hdr)); ++ ++ msg = (struct mrt6msg*)skb->nh.ipv6h; ++ skb->dst = dst_clone(pkt->dst); ++ ++ /* ++ * Add our header ++ */ ++ ++ msg->im6_msgtype = assert; ++ msg->im6_mbz = 0; ++ msg->im6_mif = vifi; ++ skb->h.raw = skb->nh.raw; ++ } ++ ++ if (mroute6_socket == NULL) { ++ kfree_skb(skb); ++ return -EINVAL; ++ } ++ ++ /* ++ * Deliver to user space multicast routing algorithms ++ */ ++ if ((ret=sock_queue_rcv_skb(mroute6_socket,skb))<0) { ++ if (net_ratelimit()) ++ printk(KERN_WARNING "mroute6: pending queue full, dropping entries.\n"); ++ kfree_skb(skb); ++ } ++ ++ return ret; ++} ++ ++/* ++ * Queue a packet for resolution. It gets locked cache entry! ++ */ ++ ++static int ++ip6mr_cache_unresolved(vifi_t vifi, struct sk_buff *skb) ++{ ++ int err; ++ struct mfc6_cache *c; ++ ++ spin_lock_bh(&mfc_unres_lock); ++ for (c=mfc_unres_queue; c; c=c->next) { ++ if (IN6_ARE_ADDR_EQUAL(&c->mf6c_mcastgrp,&skb->nh.ipv6h->daddr) && ++ IN6_ARE_ADDR_EQUAL(&c->mf6c_origin,&skb->nh.ipv6h->saddr)) ++ break; ++ } ++ ++ if (c == NULL) { ++ /* ++ * Create a new entry if allowable ++ */ ++ ++ if (atomic_read(&cache_resolve_queue_len)>=10 || ++ (c=ip6mr_cache_alloc_unres())==NULL) { ++ spin_unlock_bh(&mfc_unres_lock); ++ ++ kfree_skb(skb); ++ return -ENOBUFS; ++ } ++ ++ /* ++ * Fill in the new cache entry ++ */ ++ c->mf6c_parent=-1; ++ c->mf6c_origin=skb->nh.ipv6h->saddr; ++ c->mf6c_mcastgrp=skb->nh.ipv6h->daddr; ++ ++ /* ++ * Reflect first query at pim6sd ++ */ ++ if ((err = ip6mr_cache_report(skb, vifi, MRT6MSG_NOCACHE))<0) { ++ /* If the report failed throw the cache entry ++ out - Brad Parker ++ */ ++ spin_unlock_bh(&mfc_unres_lock); ++ ++ kmem_cache_free(mrt_cachep, c); ++ kfree_skb(skb); ++ return err; ++ } ++ ++ atomic_inc(&cache_resolve_queue_len); ++ c->next = mfc_unres_queue; ++ mfc_unres_queue = c; ++ ++ mod_timer(&ipmr_expire_timer, c->mfc_un.unres.expires); ++ } ++ ++ /* ++ * See if we can append the packet ++ */ ++ if (c->mfc_un.unres.unresolved.qlen>3) { ++ kfree_skb(skb); ++ err = -ENOBUFS; ++ } else { ++ skb_queue_tail(&c->mfc_un.unres.unresolved,skb); ++ err = 0; ++ } ++ ++ spin_unlock_bh(&mfc_unres_lock); ++ return err; ++} ++ ++/* ++ * MFC6 cache manipulation by user space ++ */ ++ ++static int ip6mr_mfc_delete(struct mf6cctl *mfc) ++{ ++ int line; ++ struct mfc6_cache *c, **cp; ++ ++ line=MFC6_HASH(mfc->mf6cc_mcastgrp.sin6_addr, mfc->mf6cc_origin.sin6_addr); ++ ++ for (cp=&mfc6_cache_array[line]; (c=*cp) != NULL; cp = &c->next) { ++ if (IN6_ARE_ADDR_EQUAL(&c->mf6c_origin,&mfc->mf6cc_origin.sin6_addr) && ++ IN6_ARE_ADDR_EQUAL(&c->mf6c_mcastgrp,&mfc->mf6cc_mcastgrp.sin6_addr)) { ++ write_lock_bh(&mrt_lock); ++ *cp = c->next; ++ write_unlock_bh(&mrt_lock); ++ ++ kmem_cache_free(mrt_cachep, c); ++ return 0; ++ } ++ } ++ return -ENOENT; ++} ++ ++static int ip6mr_device_event(struct notifier_block *this, unsigned long event, void *ptr) ++{ ++ struct mif_device *v; ++ int ct; ++ if (event != NETDEV_UNREGISTER) ++ return NOTIFY_DONE; ++ v=&vif6_table[0]; ++ for(ct=0;ctdev==ptr) ++ mif6_delete(ct); ++ } ++ return NOTIFY_DONE; ++} ++ ++static struct notifier_block ip6_mr_notifier = { ++ .notifier_call = ip6mr_device_event ++}; ++ ++/* ++ * Setup for IP multicast routing ++ */ ++ ++void __init ip6_mr_init(void) ++{ ++ printk(KERN_INFO "6WIND/LSIIT IPv6 multicast forwarding 0.1 plus PIM-SM/SSM with *BSD API\n"); ++ ++ mrt_cachep = kmem_cache_create("ip6_mrt_cache", ++ sizeof(struct mfc6_cache), ++ 0, SLAB_HWCACHE_ALIGN, ++ NULL, NULL); ++ if (!mrt_cachep) ++ panic("cannot allocate ip_mrt_cache"); ++ ++ init_timer(&ipmr_expire_timer); ++ ipmr_expire_timer.function=ipmr_expire_process; ++ register_netdevice_notifier(&ip6_mr_notifier); ++#ifdef CONFIG_PROC_FS ++ proc_net_fops_create("ip6_mr_vif", 0, &ip6mr_vif_fops); ++ proc_net_fops_create("ip6_mr_cache", 0, &ip6mr_mfc_fops); ++#endif ++} ++ ++ ++static int ip6mr_mfc_add(struct mf6cctl *mfc, int mrtsock) ++{ ++ int line; ++ struct mfc6_cache *uc, *c, **cp; ++ unsigned char ttls[MAXVIFS]; ++ int i; ++ ++ memset(ttls, 255, MAXVIFS); ++ for(i=0;imf6cc_ifset)) ++ ttls[i]=1; ++ ++ } ++ ++ line=MFC6_HASH(mfc->mf6cc_mcastgrp.sin6_addr, mfc->mf6cc_origin.sin6_addr); ++ ++ for (cp=&mfc6_cache_array[line]; (c=*cp) != NULL; cp = &c->next) { ++ if (IN6_ARE_ADDR_EQUAL(&c->mf6c_origin,&mfc->mf6cc_origin.sin6_addr) && ++ IN6_ARE_ADDR_EQUAL(&c->mf6c_mcastgrp,&mfc->mf6cc_mcastgrp.sin6_addr)) ++ break; ++ } ++ ++ if (c != NULL) { ++ write_lock_bh(&mrt_lock); ++ c->mf6c_parent = mfc->mf6cc_parent; ++ ip6mr_update_threshoulds(c, ttls); ++ if (!mrtsock) ++ c->mfc_flags |= MFC_STATIC; ++ write_unlock_bh(&mrt_lock); ++ return 0; ++ } ++ ++ if(!(ipv6_addr_type(&mfc->mf6cc_mcastgrp.sin6_addr)&IPV6_ADDR_MULTICAST)) ++ return -EINVAL; ++ ++ c=ip6mr_cache_alloc(); ++ if (c==NULL) ++ return -ENOMEM; ++ ++ c->mf6c_origin=mfc->mf6cc_origin.sin6_addr; ++ c->mf6c_mcastgrp=mfc->mf6cc_mcastgrp.sin6_addr; ++ c->mf6c_parent=mfc->mf6cc_parent; ++ ip6mr_update_threshoulds(c, ttls); ++ if (!mrtsock) ++ c->mfc_flags |= MFC_STATIC; ++ ++ write_lock_bh(&mrt_lock); ++ c->next = mfc6_cache_array[line]; ++ mfc6_cache_array[line] = c; ++ write_unlock_bh(&mrt_lock); ++ ++ /* ++ * Check to see if we resolved a queued list. If so we ++ * need to send on the frames and tidy up. ++ */ ++ spin_lock_bh(&mfc_unres_lock); ++ for (cp = &mfc_unres_queue; (uc=*cp) != NULL; ++ cp = &uc->next) { ++ if (IN6_ARE_ADDR_EQUAL(&uc->mf6c_origin,&c->mf6c_origin) && ++ IN6_ARE_ADDR_EQUAL(&uc->mf6c_mcastgrp,&c->mf6c_mcastgrp)) { ++ *cp = uc->next; ++ if (atomic_dec_and_test(&cache_resolve_queue_len)) ++ del_timer(&ipmr_expire_timer); ++ break; ++ } ++ } ++ spin_unlock_bh(&mfc_unres_lock); ++ ++ if (uc) { ++ ip6mr_cache_resolve(uc, c); ++ kmem_cache_free(mrt_cachep, uc); ++ } ++ return 0; ++} ++ ++/* ++ * Close the multicast socket, and clear the vif tables etc ++ */ ++ ++static void mroute_clean_tables(struct sock *sk) ++{ ++ int i; ++ ++ /* ++ * Shut down all active vif entries ++ */ ++ for(i=0; imfc_flags&MFC_STATIC) { ++ cp = &c->next; ++ continue; ++ } ++ write_lock_bh(&mrt_lock); ++ *cp = c->next; ++ write_unlock_bh(&mrt_lock); ++ ++ kmem_cache_free(mrt_cachep, c); ++ } ++ } ++ ++ if (atomic_read(&cache_resolve_queue_len) != 0) { ++ struct mfc6_cache *c; ++ ++ spin_lock_bh(&mfc_unres_lock); ++ while (mfc_unres_queue != NULL) { ++ c = mfc_unres_queue; ++ mfc_unres_queue = c->next; ++ spin_unlock_bh(&mfc_unres_lock); ++ ++ ip6mr_destroy_unres(c); ++ ++ spin_lock_bh(&mfc_unres_lock); ++ } ++ spin_unlock_bh(&mfc_unres_lock); ++ } ++} ++ ++static void mrtsock_destruct(struct sock *sk) ++{ ++ rtnl_lock(); ++ if (sk == mroute6_socket) { ++ ipv6_devconf.mc_forwarding--; ++ ++ write_lock_bh(&mrt_lock); ++ mroute6_socket=NULL; ++ write_unlock_bh(&mrt_lock); ++ ++ mroute_clean_tables(sk); ++ } ++ rtnl_unlock(); ++} ++ ++/* ++ * Socket options and virtual interface manipulation. The whole ++ * virtual interface system is a complete heap, but unfortunately ++ * that's how BSD mrouted happens to think. Maybe one day with a proper ++ * MOSPF/PIM router set up we can clean this up. ++ */ ++ ++int ip6_mroute_setsockopt(struct sock *sk,int optname,char __user *optval,int optlen) ++{ ++ int ret; ++ struct mif6ctl vif; ++ struct mf6cctl mfc; ++ mifi_t mifi; ++ ++ if(optname!=MRT6_INIT) ++ { ++ if(sk!=mroute6_socket && !capable(CAP_NET_ADMIN)) ++ return -EACCES; ++ } ++ ++ switch(optname) ++ { ++ case MRT6_INIT: ++ if (sk->sk_type != SOCK_RAW || ++ inet_sk(sk)->num != IPPROTO_ICMPV6) ++ return -EOPNOTSUPP; ++ if(optlen!=sizeof(int)) ++ return -ENOPROTOOPT; ++ ++ rtnl_lock(); ++ if (mroute6_socket) { ++ rtnl_unlock(); ++ return -EADDRINUSE; ++ } ++ ++ ret = ip6_ra_control(sk, 1, mrtsock_destruct); ++ if (ret == 0) { ++ write_lock_bh(&mrt_lock); ++ mroute6_socket=sk; ++ write_unlock_bh(&mrt_lock); ++ ++ ipv6_devconf.mc_forwarding++; ++ } ++ rtnl_unlock(); ++ return ret; ++ case MRT6_DONE: ++ if (sk!=mroute6_socket) ++ return -EACCES; ++ return ip6_ra_control(sk, -1, NULL); ++ case MRT6_ADD_MIF: ++ if(optlen!=sizeof(vif)) ++ return -EINVAL; ++ if (copy_from_user(&vif,optval,sizeof(vif))) ++ return -EFAULT; ++ if(vif.mif6c_mifi >= MAXVIFS) ++ return -ENFILE; ++ rtnl_lock(); ++ ret = mif6_add(&vif, sk==mroute6_socket); ++ rtnl_unlock(); ++ return ret; ++ case MRT6_DEL_MIF: ++ if(optlen!=sizeof(mifi_t)) ++ return -EINVAL; ++ if (copy_from_user(&mifi,optval,sizeof(mifi_t))) ++ return -EFAULT; ++ rtnl_lock(); ++ ret = mif6_delete(mifi); ++ rtnl_unlock(); ++ return ret; ++ ++ /* ++ * Manipulate the forwarding caches. These live ++ * in a sort of kernel/user symbiosis. ++ */ ++ case MRT6_ADD_MFC: ++ case MRT6_DEL_MFC: ++ if(optlen!=sizeof(mfc)) ++ return -EINVAL; ++ if (copy_from_user(&mfc,optval, sizeof(mfc))) ++ return -EFAULT; ++ rtnl_lock(); ++ if (optname==MRT6_DEL_MFC) ++ ret = ip6mr_mfc_delete(&mfc); ++ else ++ ret = ip6mr_mfc_add(&mfc, sk==mroute6_socket); ++ rtnl_unlock(); ++ return ret; ++ /* ++ * Control PIM assert (to activate pim will activate assert) ++ */ ++ case MRT6_ASSERT: ++ { ++ int v; ++ if(get_user(v,(int __user *)optval)) ++ return -EFAULT; ++ mroute_do_assert=(v)?1:0; ++ return 0; ++ } ++#ifdef CONFIG_IPV6_PIMSM_V2 ++ case MRT6_PIM: ++ { ++ int v, ret; ++ if(get_user(v,(int __user *)optval)) ++ return -EFAULT; ++ v = (v)?1:0; ++ rtnl_lock(); ++ ret = 0; ++ if (v != mroute_do_pim) { ++ mroute_do_pim = v; ++ mroute_do_assert = v; ++ if (mroute_do_pim) ++ ret = inet6_add_protocol(&pim6_protocol, ++ IPPROTO_PIM); ++ else ++ ret = inet6_del_protocol(&pim6_protocol, ++ IPPROTO_PIM); ++ if (ret < 0) ++ ret = -EAGAIN; ++ } ++ rtnl_unlock(); ++ return ret; ++ } ++#endif ++ /* ++ * Spurious command, or MRT_VERSION which you cannot ++ * set. ++ */ ++ default: ++ return -ENOPROTOOPT; ++ } ++} ++ ++/* ++ * Getsock opt support for the multicast routing system. ++ */ ++ ++int ip6_mroute_getsockopt(struct sock *sk,int optname,char __user *optval,int __user *optlen) ++{ ++ int olr; ++ int val; ++ ++ if(optname!=MRT6_VERSION && ++#ifdef CONFIG_IPV6_PIMSM_V2 ++ optname!=MRT6_PIM && ++#endif ++ optname!=MRT6_ASSERT) ++ return -ENOPROTOOPT; ++ ++ if (get_user(olr, optlen)) ++ return -EFAULT; ++ ++ olr = min_t(unsigned int, olr, sizeof(int)); ++ if (olr < 0) ++ return -EINVAL; ++ ++ if(put_user(olr,optlen)) ++ return -EFAULT; ++ if(optname==MRT6_VERSION) ++ val=0x0305; ++#ifdef CONFIG_IPV6_PIMSM_V2 ++ else if(optname==MRT6_PIM) ++ val=mroute_do_pim; ++#endif ++ else ++ val=mroute_do_assert; ++ if(copy_to_user(optval,&val,olr)) ++ return -EFAULT; ++ return 0; ++} ++ ++/* ++ * The IP multicast ioctl support routines. ++ */ ++ ++int ip6mr_ioctl(struct sock *sk, int cmd, void __user *arg) ++{ ++ struct sioc_sg_req6 sr; ++ struct sioc_mif_req6 vr; ++ struct mif_device *vif; ++ struct mfc6_cache *c; ++ ++ switch(cmd) ++ { ++ case SIOCGETMIFCNT_IN6: ++ if (copy_from_user(&vr,arg,sizeof(vr))) ++ return -EFAULT; ++ if(vr.mifi>=maxvif) ++ return -EINVAL; ++ read_lock(&mrt_lock); ++ vif=&vif6_table[vr.mifi]; ++ if(MIF_EXISTS(vr.mifi)) { ++ vr.icount=vif->pkt_in; ++ vr.ocount=vif->pkt_out; ++ vr.ibytes=vif->bytes_in; ++ vr.obytes=vif->bytes_out; ++ read_unlock(&mrt_lock); ++ ++ if (copy_to_user(arg,&vr,sizeof(vr))) ++ return -EFAULT; ++ return 0; ++ } ++ read_unlock(&mrt_lock); ++ return -EADDRNOTAVAIL; ++ case SIOCGETSGCNT_IN6: ++ if (copy_from_user(&sr,arg,sizeof(sr))) ++ return -EFAULT; ++ ++ read_lock(&mrt_lock); ++ c = ip6mr_cache_find(sr.src.sin6_addr, sr.grp.sin6_addr); ++ if (c) { ++ sr.pktcnt = c->mfc_un.res.pkt; ++ sr.bytecnt = c->mfc_un.res.bytes; ++ sr.wrong_if = c->mfc_un.res.wrong_if; ++ read_unlock(&mrt_lock); ++ ++ if (copy_to_user(arg,&sr,sizeof(sr))) ++ return -EFAULT; ++ return 0; ++ } ++ read_unlock(&mrt_lock); ++ return -EADDRNOTAVAIL; ++ default: ++ return -ENOIOCTLCMD; ++ } ++} ++ ++ ++static inline int ip6mr_forward_finish(struct sk_buff *skb) ++{ ++#ifdef notyet ++ struct ip_options * opt = &(IP6CB(skb)->opt); ++ ++ IP_INC_STATS_BH(OutForwDatagrams); ++ ++ if (unlikely(opt->optlen)) ++ ip_forward_options(skb); ++#endif ++ ++ return dst_output(skb); ++} ++ ++/* ++ * Processing handlers for ip6mr_forward ++ */ ++ ++static void ip6mr_queue_xmit(struct sk_buff *skb, struct mfc6_cache *c, int vifi) ++{ ++ struct ipv6hdr *ipv6h = skb->nh.ipv6h; ++ struct mif_device *vif = &vif6_table[vifi]; ++ struct net_device *dev; ++#if 0 ++ struct rtable *rt; ++ int encap = 0; ++#endif ++ struct in6_addr *snd_addr=&ipv6h->daddr; ++ int full_len = skb->len; ++ ++ if (vif->dev == NULL) ++ goto out_free; ++ ++#ifdef CONFIG_IPV6_PIMSM_V2 ++ if (vif->flags & MIFF_REGISTER) { ++ vif->pkt_out++; ++ vif->bytes_out+=skb->len; ++ ((struct net_device_stats*)vif->dev->priv)->tx_bytes += skb->len; ++ ((struct net_device_stats*)vif->dev->priv)->tx_packets++; ++ ip6mr_cache_report(skb, vifi, MRT6MSG_WHOLEPKT); ++ kfree_skb(skb); ++ return; ++ } ++#endif ++ /* ++ * RFC1584 teaches, that DVMRP/PIM router must deliver packets locally ++ * not only before forwarding, but after forwarding on all output ++ * interfaces. It is clear, if mrouter runs a multicasting ++ * program, it should receive packets not depending to what interface ++ * program is joined. ++ * If we will not make it, the program will have to join on all ++ * interfaces. On the other hand, multihoming host (or router, but ++ * not mrouter) cannot join to more than one interface - it will ++ * result in receiving multiple packets. ++ */ ++ dev = vif->dev; ++ skb->dev=dev; ++ vif->pkt_out++; ++ vif->bytes_out+=skb->len; ++ ++ ipv6h = skb->nh.ipv6h; ++ ++ ipv6h->hop_limit--; ++ ++ if(dev->hard_header) { ++ unsigned char ha[MAX_ADDR_LEN]; ++ ndisc_mc_map(snd_addr,ha,dev,1); ++ if(dev->hard_header(skb,dev, ETH_P_IPV6,ha,NULL,full_len) < 0) ++ goto out_free; ++ } ++ ++ NF_HOOK(PF_INET6, NF_IP6_LOCAL_OUT, skb, skb->dev, dev, ++ dev_queue_xmit); ++/* NF_HOOK(PF_INET6, NF_IP6_POST_ROUTING, skb, skb->dev, dev, ++ ip6mr_forward_finish); ++*/ ++ ++ ++ /* NF_HOOK(PF_INET6, NF_IP6_FORWARD, skb, skb->dev, dev, ++ ip6mr_forward_finish); ++ */ ++ return; ++ /* XXX */ ++ ++out_free: ++ kfree_skb(skb); ++ return; ++} ++ ++static int ip6mr_find_vif(struct net_device *dev) ++{ ++ int ct; ++ for (ct=maxvif-1; ct>=0; ct--) { ++ if (vif6_table[ct].dev == dev) ++ break; ++ } ++ return ct; ++} ++ ++static int ip6_mr_forward(struct sk_buff *skb, struct mfc6_cache *cache, int local) ++{ ++ int psend = -1; ++ int vif, ct; ++ ++ vif = cache->mf6c_parent; ++ cache->mfc_un.res.pkt++; ++ cache->mfc_un.res.bytes += skb->len; ++ ++ /* ++ * Wrong interface: drop packet and (maybe) send PIM assert. ++ */ ++ if (vif6_table[vif].dev != skb->dev) { ++ int true_vifi; ++ ++ if (((struct rtable*)skb->dst)->fl.iif == 0) { ++ /* It is our own packet, looped back. ++ Very complicated situation... ++ ++ The best workaround until routing daemons will be ++ fixed is not to redistribute packet, if it was ++ send through wrong interface. It means, that ++ multicast applications WILL NOT work for ++ (S,G), which have default multicast route pointing ++ to wrong oif. In any case, it is not a good ++ idea to use multicasting applications on router. ++ */ ++ goto dont_forward; ++ } ++ ++ cache->mfc_un.res.wrong_if++; ++ true_vifi = ip6mr_find_vif(skb->dev); ++ ++ if (true_vifi >= 0 && mroute_do_assert && ++ /* pimsm uses asserts, when switching from RPT to SPT, ++ so that we cannot check that packet arrived on an oif. ++ It is bad, but otherwise we would need to move pretty ++ large chunk of pimd to kernel. Ough... --ANK ++ */ ++ (mroute_do_pim || cache->mfc_un.res.ttls[true_vifi] < 255) && ++ time_after(jiffies, ++ cache->mfc_un.res.last_assert + MFC_ASSERT_THRESH)) { ++ cache->mfc_un.res.last_assert = jiffies; ++ ip6mr_cache_report(skb, true_vifi, MRT6MSG_WRONGMIF); ++ } ++ goto dont_forward; ++ } ++ ++ vif6_table[vif].pkt_in++; ++ vif6_table[vif].bytes_in+=skb->len; ++ ++ /* ++ * Forward the frame ++ */ ++ for (ct = cache->mfc_un.res.maxvif-1; ct >= cache->mfc_un.res.minvif; ct--) { ++ if (skb->nh.ipv6h->hop_limit > cache->mfc_un.res.ttls[ct]) { ++ struct ipv6hdr *ipv6h = skb->nh.ipv6h; ++ if (psend != -1) { ++ struct sk_buff *skb2 = skb_clone(skb, GFP_ATOMIC); ++ if (skb2) { ++ ip6mr_queue_xmit(skb2, cache, psend); ++ ipv6h->hop_limit++; ++ } ++ } ++ psend=ct; ++ } ++ } ++ if (psend != -1) { ++ struct ipv6hdr *ipv6h = skb->nh.ipv6h; ++ if (local) { ++ struct sk_buff *skb2 = skb_clone(skb, GFP_ATOMIC); ++ if (skb2) { ++ ip6mr_queue_xmit(skb2, cache, psend); ++ ipv6h->hop_limit++; ++ } ++ } else { ++ ip6mr_queue_xmit(skb, cache, psend); ++ ipv6h->hop_limit++; ++ return 0; ++ } ++ } ++ ++dont_forward: ++ if (!local) ++ kfree_skb(skb); ++ return 0; ++} ++ ++ ++/* ++ * Multicast packets for forwarding arrive here ++ */ ++ ++int ip6_mr_input(struct sk_buff *skb) ++{ ++ struct mfc6_cache *cache; ++ int local = ((struct rt6_info*)skb->dst)->rt6i_flags&RTCF_LOCAL; ++#if 0 ++ IP6CB(skb)->flags = 0; ++#endif ++ ++ read_lock(&mrt_lock); ++ cache = ip6mr_cache_find(skb->nh.ipv6h->saddr, skb->nh.ipv6h->daddr); ++ ++ /* ++ * No usable cache entry ++ */ ++ if (cache==NULL) { ++ int vif; ++ ++ vif = ip6mr_find_vif(skb->dev); ++ if (vif >= 0) { ++ int err = ip6mr_cache_unresolved(vif, skb); ++ read_unlock(&mrt_lock); ++ ++ return err; ++ } ++ read_unlock(&mrt_lock); ++ kfree_skb(skb); ++ return -ENODEV; ++ } ++ ++ ip6_mr_forward(skb, cache, local); ++ ++ read_unlock(&mrt_lock); ++ ++ return 0; ++#if 0 ++dont_forward: ++ kfree_skb(skb); ++ return 0; ++#endif ++} ++ ++ ++static int ++ip6mr_fill_mroute(struct sk_buff *skb, struct mfc6_cache *c, struct rtmsg *rtm) ++{ ++ int ct; ++ struct rtnexthop *nhp; ++ struct net_device *dev = vif6_table[c->mf6c_parent].dev; ++ u8 *b = skb->tail; ++ struct rtattr *mp_head; ++ ++ if (dev) ++ RTA_PUT(skb, RTA_IIF, 4, &dev->ifindex); ++ ++ mp_head = (struct rtattr*)skb_put(skb, RTA_LENGTH(0)); ++ ++ for (ct = c->mfc_un.res.minvif; ct < c->mfc_un.res.maxvif; ct++) { ++ if (c->mfc_un.res.ttls[ct] < 255) { ++ if (skb_tailroom(skb) < RTA_ALIGN(RTA_ALIGN(sizeof(*nhp)) + 4)) ++ goto rtattr_failure; ++ nhp = (struct rtnexthop*)skb_put(skb, RTA_ALIGN(sizeof(*nhp))); ++ nhp->rtnh_flags = 0; ++ nhp->rtnh_hops = c->mfc_un.res.ttls[ct]; ++ nhp->rtnh_ifindex = vif6_table[ct].dev->ifindex; ++ nhp->rtnh_len = sizeof(*nhp); ++ } ++ } ++ mp_head->rta_type = RTA_MULTIPATH; ++ mp_head->rta_len = skb->tail - (u8*)mp_head; ++ rtm->rtm_type = RTN_MULTICAST; ++ return 1; ++ ++rtattr_failure: ++ skb_trim(skb, b - skb->data); ++ return -EMSGSIZE; ++} +diff -urN linux-2.6.11/net/ipv6/ip6_output.c linux.sinabox/net/ipv6/ip6_output.c +--- linux-2.6.11/net/ipv6/ip6_output.c 2005-03-02 08:37:47.000000000 +0100 ++++ linux.sinabox/net/ipv6/ip6_output.c 2005-03-26 19:02:06.000000000 +0100 +@@ -75,6 +75,9 @@ + + struct dst_entry *dst = skb->dst; + struct hh_cache *hh = dst->hh; ++#ifdef CONFIG_IPV6_STATISTICS ++ struct inet6_dev *idev = ((struct rt6_info *)dst)->rt6i_idev; ++#endif + + if (hh) { + int hh_alen; +@@ -88,14 +91,18 @@ + } else if (dst->neighbour) + return dst->neighbour->output(skb); + ++#ifdef CONFIG_IPV6_STATISTICS ++ IP6_INC_STATS_BH(idev, IPSTATS_MIB_OUTNOROUTES); ++#else + IP6_INC_STATS_BH(IPSTATS_MIB_OUTNOROUTES); ++#endif + kfree_skb(skb); + return -EINVAL; + + } + + /* dev_loopback_xmit for use with netfilter. */ +-static int ip6_dev_loopback_xmit(struct sk_buff *newskb) ++int ip6_dev_loopback_xmit(struct sk_buff *newskb) + { + newskb->mac.raw = newskb->data; + __skb_pull(newskb, newskb->nh.raw - newskb->data); +@@ -112,6 +119,9 @@ + { + struct dst_entry *dst = skb->dst; + struct net_device *dev = dst->dev; ++#ifdef CONFIG_IPV6_STATISTICS ++ struct inet6_dev *idev = ((struct rt6_info *)dst)->rt6i_idev; ++#endif + + skb->protocol = htons(ETH_P_IPV6); + skb->dev = dev; +@@ -133,13 +143,21 @@ + ip6_dev_loopback_xmit); + + if (skb->nh.ipv6h->hop_limit == 0) { ++#ifdef CONFIG_IPV6_STATISTICS ++ IP6_INC_STATS(idev, IPSTATS_MIB_OUTDISCARDS); ++#else + IP6_INC_STATS(IPSTATS_MIB_OUTDISCARDS); ++#endif + kfree_skb(skb); + return 0; + } + } + ++#ifdef CONFIG_IPV6_STATISTICS ++ IP6_INC_STATS(idev, IPSTATS_MIB_OUTMCASTPKTS); ++#else + IP6_INC_STATS(IPSTATS_MIB_OUTMCASTPKTS); ++#endif + } + + return NF_HOOK(PF_INET6, NF_IP6_POST_ROUTING, skb,NULL, skb->dev,ip6_output_finish); +@@ -147,7 +165,7 @@ + + int ip6_output(struct sk_buff *skb) + { +- if (skb->len > dst_pmtu(skb->dst)) ++ if (skb->len > dst_pmtu(skb->dst) || ip6_dst_allfrag(skb->dst)) + return ip6_fragment(skb, ip6_output2); + else + return ip6_output2(skb); +@@ -166,11 +184,21 @@ + .saddr = iph->saddr, } }, + .proto = iph->nexthdr, + }; ++#ifdef CONFIG_IPV6_STATISTICS ++ struct inet6_dev *idev = NULL; ++#endif + + dst = ip6_route_output(skb->sk, &fl); ++#ifdef CONFIG_IPV6_STATISTICS ++ idev = ((struct rt6_info *)dst)->rt6i_idev; ++#endif + + if (dst->error) { ++#ifdef CONFIG_IPV6_STATISTICS ++ IP6_INC_STATS(idev, IPSTATS_MIB_OUTNOROUTES); ++#else + IP6_INC_STATS(IPSTATS_MIB_OUTNOROUTES); ++#endif + LIMIT_NETDEBUG( + printk(KERN_DEBUG "ip6_route_me_harder: No more route.\n")); + dst_release(dst); +@@ -209,11 +237,16 @@ + struct in6_addr *first_hop = &fl->fl6_dst; + struct dst_entry *dst = skb->dst; + struct ipv6hdr *hdr; ++#ifdef CONFIG_IPV6_STATISTICS ++ struct inet6_dev *idev = ((struct rt6_info *)dst)->rt6i_idev; ++#endif + u8 proto = fl->proto; + int seg_len = skb->len; + int hlimit; + u32 mtu; + ++ skb->h.raw = skb->data; ++ + if (opt) { + int head_room; + +@@ -229,7 +262,11 @@ + kfree_skb(skb); + skb = skb2; + if (skb == NULL) { ++#ifdef CONFIG_IPV6_STATISTICS ++ IP6_INC_STATS(idev, IPSTATS_MIB_OUTDISCARDS); ++#else + IP6_INC_STATS(IPSTATS_MIB_OUTDISCARDS); ++#endif + return -ENOBUFS; + } + if (sk) +@@ -253,6 +290,8 @@ + hlimit = np->hop_limit; + if (hlimit < 0) + hlimit = dst_metric(dst, RTAX_HOPLIMIT); ++ if (hlimit < 0) ++ hlimit = ipv6_get_hoplimit(dst->dev); + + hdr->payload_len = htons(seg_len); + hdr->nexthdr = proto; +@@ -263,15 +302,28 @@ + + mtu = dst_pmtu(dst); + if ((skb->len <= mtu) || ipfragok) { ++#ifdef CONFIG_IPV6_STATISTICS ++ IP6_INC_STATS(idev, IPSTATS_MIB_OUTREQUESTS); ++#else + IP6_INC_STATS(IPSTATS_MIB_OUTREQUESTS); ++#endif + return NF_HOOK(PF_INET6, NF_IP6_LOCAL_OUT, skb, NULL, dst->dev, ip6_maybe_reroute); + } + + if (net_ratelimit()) +- printk(KERN_DEBUG "IPv6: sending pkt_too_big to self\n"); ++ printk(KERN_DEBUG "IPv6: sending pkt_too_big to self; " ++ "saddr=%04x:%04x:%04x:%04x:%04x:%04x:%04x:%04x, " ++ "daddr=%04x:%04x:%04x:%04x:%04x:%04x:%04x:%04x, " ++ "skb->len(%d) > mtu(%d)\n", ++ NIP6(hdr->saddr), NIP6(hdr->daddr), ++ skb->len, mtu); + skb->dev = dst->dev; + icmpv6_send(skb, ICMPV6_PKT_TOOBIG, 0, mtu, skb->dev); ++#ifdef CONFIG_IPV6_STATISTICS ++ IP6_INC_STATS(idev, IPSTATS_MIB_FRAGFAILS); ++#else + IP6_INC_STATS(IPSTATS_MIB_FRAGFAILS); ++#endif + kfree_skb(skb); + return -EMSGSIZE; + } +@@ -348,14 +400,32 @@ + struct dst_entry *dst = skb->dst; + struct ipv6hdr *hdr = skb->nh.ipv6h; + struct inet6_skb_parm *opt = IP6CB(skb); ++#ifdef CONFIG_IPV6_STATISTICS ++ struct inet6_dev *idev = ((struct rt6_info *)dst)->rt6i_idev; ++#endif + + if (ipv6_devconf.forwarding == 0) + goto error; + ++#ifdef CONFIG_USE_POLICY_FWD + if (!xfrm6_policy_check(NULL, XFRM_POLICY_FWD, skb)) { ++#ifdef CONFIG_IPV6_STATISTICS ++ IP6_INC_STATS(idev, IPSTATS_MIB_INDISCARDS); ++#else + IP6_INC_STATS(IPSTATS_MIB_INDISCARDS); ++#endif + goto drop; + } ++#else ++ if (!xfrm6_policy_check(NULL, XFRM_POLICY_IN, skb)) { ++#ifdef CONFIG_IPV6_STATISTICS ++ IP6_INC_STATS(idev, IPSTATS_MIB_INDISCARDS); ++#else ++ IP6_INC_STATS(IPSTATS_MIB_INDISCARDS); ++#endif ++ goto drop; ++ } ++#endif + + skb->ip_summed = CHECKSUM_NONE; + +@@ -392,7 +462,11 @@ + } + + if (!xfrm6_route_forward(skb)) { ++#ifdef CONFIG_IPV6_STATISTICS ++ IP6_INC_STATS(idev, IPSTATS_MIB_INDISCARDS); ++#else + IP6_INC_STATS(IPSTATS_MIB_INDISCARDS); ++#endif + goto drop; + } + +@@ -430,14 +504,23 @@ + /* Again, force OUTPUT device used as source address */ + skb->dev = dst->dev; + icmpv6_send(skb, ICMPV6_PKT_TOOBIG, 0, dst_pmtu(dst), skb->dev); ++#ifdef CONFIG_IPV6_STATISTICS ++ IP6_INC_STATS_BH(idev, IPSTATS_MIB_INTOOBIGERRORS); ++ IP6_INC_STATS_BH(idev, IPSTATS_MIB_FRAGFAILS); ++#else + IP6_INC_STATS_BH(IPSTATS_MIB_INTOOBIGERRORS); + IP6_INC_STATS_BH(IPSTATS_MIB_FRAGFAILS); ++#endif + kfree_skb(skb); + return -EMSGSIZE; + } + + if (skb_cow(skb, dst->dev->hard_header_len)) { ++#ifdef CONFIG_IPV6_STATISTICS ++ IP6_INC_STATS(idev, IPSTATS_MIB_OUTDISCARDS); ++#else + IP6_INC_STATS(IPSTATS_MIB_OUTDISCARDS); ++#endif + goto drop; + } + +@@ -447,11 +530,19 @@ + + hdr->hop_limit--; + ++#ifdef CONFIG_IPV6_STATISTICS ++ IP6_INC_STATS_BH(idev, IPSTATS_MIB_OUTFORWDATAGRAMS); ++#else + IP6_INC_STATS_BH(IPSTATS_MIB_OUTFORWDATAGRAMS); ++#endif + return NF_HOOK(PF_INET6,NF_IP6_FORWARD, skb, skb->dev, dst->dev, ip6_forward_finish); + + error: ++#ifdef CONFIG_IPV6_STATISTICS ++ IP6_INC_STATS_BH(idev, IPSTATS_MIB_INADDRERRORS); ++#else + IP6_INC_STATS_BH(IPSTATS_MIB_INADDRERRORS); ++#endif + drop: + kfree_skb(skb); + return -EINVAL; +@@ -500,17 +591,21 @@ + switch (**nexthdr) { + + case NEXTHDR_HOP: ++ break; + case NEXTHDR_ROUTING: ++ found_rhdr = 1; ++ break; + case NEXTHDR_DEST: +- if (**nexthdr == NEXTHDR_ROUTING) found_rhdr = 1; +- if (**nexthdr == NEXTHDR_DEST && found_rhdr) return offset; +- offset += ipv6_optlen(exthdr); +- *nexthdr = &exthdr->nexthdr; +- exthdr = (struct ipv6_opt_hdr*)(skb->nh.raw + offset); ++ if (found_rhdr) ++ return offset; + break; +- default : ++ default: + return offset; + } ++ ++ offset += ipv6_optlen(exthdr); ++ *nexthdr = &exthdr->nexthdr; ++ exthdr = (struct ipv6_opt_hdr*)(skb->nh.raw + offset); + } + + return offset; +@@ -523,6 +618,9 @@ + struct rt6_info *rt = (struct rt6_info*)skb->dst; + struct ipv6hdr *tmp_hdr; + struct frag_hdr *fh; ++#ifdef CONFIG_IPV6_STATISTICS ++ struct inet6_dev *idev = rt->rt6i_idev; ++#endif + unsigned int mtu, hlen, left, len; + u32 frag_id = 0; + int ptr, offset = 0, err=0; +@@ -566,7 +664,11 @@ + + tmp_hdr = kmalloc(hlen, GFP_ATOMIC); + if (!tmp_hdr) { ++#ifdef CONFIG_IPV6_STATISTICS ++ IP6_INC_STATS(idev, IPSTATS_MIB_FRAGFAILS); ++#else + IP6_INC_STATS(IPSTATS_MIB_FRAGFAILS); ++#endif + return -ENOMEM; + } + +@@ -622,7 +724,11 @@ + kfree(tmp_hdr); + + if (err == 0) { ++#ifdef CONFIG_IPV6_STATISTICS ++ IP6_INC_STATS(idev, IPSTATS_MIB_FRAGOKS); ++#else + IP6_INC_STATS(IPSTATS_MIB_FRAGOKS); ++#endif + return 0; + } + +@@ -632,7 +738,11 @@ + frag = skb; + } + ++#ifdef CONFIG_IPV6_STATISTICS ++ IP6_INC_STATS(idev, IPSTATS_MIB_FRAGFAILS); ++#else + IP6_INC_STATS(IPSTATS_MIB_FRAGFAILS); ++#endif + return err; + } + +@@ -665,7 +775,11 @@ + + if ((frag = alloc_skb(len+hlen+sizeof(struct frag_hdr)+LL_RESERVED_SPACE(rt->u.dst.dev), GFP_ATOMIC)) == NULL) { + NETDEBUG(printk(KERN_INFO "IPv6: frag: no memory for new fragment!\n")); ++#ifdef CONFIG_IPV6_STATISTICS ++ IP6_INC_STATS(idev, IPSTATS_MIB_FRAGFAILS); ++#else + IP6_INC_STATS(IPSTATS_MIB_FRAGFAILS); ++#endif + err = -ENOMEM; + goto fail; + } +@@ -723,19 +837,31 @@ + * Put this fragment into the sending queue. + */ + ++#ifdef CONFIG_IPV6_STATISTICS ++ IP6_INC_STATS(idev, IPSTATS_MIB_FRAGCREATES); ++#else + IP6_INC_STATS(IPSTATS_MIB_FRAGCREATES); ++#endif + + err = output(frag); + if (err) + goto fail; + } + kfree_skb(skb); ++#ifdef CONFIG_IPV6_STATISTICS ++ IP6_INC_STATS(idev, IPSTATS_MIB_FRAGOKS); ++#else + IP6_INC_STATS(IPSTATS_MIB_FRAGOKS); ++#endif + return err; + + fail: + kfree_skb(skb); ++#ifdef CONFIG_IPV6_STATISTICS ++ IP6_INC_STATS(idev, IPSTATS_MIB_FRAGFAILS); ++#else + IP6_INC_STATS(IPSTATS_MIB_FRAGFAILS); ++#endif + return err; + } + +@@ -814,6 +940,9 @@ + struct inet_sock *inet = inet_sk(sk); + struct ipv6_pinfo *np = inet6_sk(sk); + struct sk_buff *skb; ++#ifdef CONFIG_IPV6_STATISTICS ++ struct inet6_dev *idev = rt->rt6i_idev; ++#endif + unsigned int maxfraglen, fragheaderlen; + int exthdrlen; + int hh_len; +@@ -848,6 +977,7 @@ + inet->cork.fl = *fl; + np->cork.hop_limit = hlimit; + inet->cork.fragsize = mtu = dst_pmtu(&rt->u.dst); ++ inet->cork.flags |= ip6_dst_allfrag(&rt->u.dst) ? IPCORK_ALLFRAG : 0; + inet->cork.length = 0; + sk->sk_sndmsg_page = NULL; + sk->sk_sndmsg_off = 0; +@@ -899,7 +1029,7 @@ + + while (length > 0) { + /* Check if the remaining data fits into current packet. */ +- copy = mtu - skb->len; ++ copy = (inet->cork.length <= mtu && !(inet->cork.flags & IPCORK_ALLFRAG) ? mtu : maxfraglen) - skb->len; + if (copy < length) + copy = maxfraglen - skb->len; + +@@ -924,7 +1054,7 @@ + * we know we need more fragment(s). + */ + datalen = length + fraggap; +- if (datalen > mtu - fragheaderlen) ++ if (datalen > (inet->cork.length <= mtu && !(inet->cork.flags & IPCORK_ALLFRAG) ? mtu : maxfraglen) - fragheaderlen) + datalen = maxfraglen - fragheaderlen; + + fraglen = datalen + fragheaderlen; +@@ -1080,7 +1210,11 @@ + return 0; + error: + inet->cork.length -= length; ++#ifdef CONFIG_IPV6_STATISTICS ++ IP6_INC_STATS(idev, IPSTATS_MIB_OUTDISCARDS); ++#else + IP6_INC_STATS(IPSTATS_MIB_OUTDISCARDS); ++#endif + return err; + } + +@@ -1095,6 +1229,9 @@ + struct ipv6_txoptions *opt = np->cork.opt; + struct rt6_info *rt = np->cork.rt; + struct flowi *fl = &inet->cork.fl; ++#ifdef CONFIG_IPV6_STATISTICS ++ struct inet6_dev *idev = rt->rt6i_idev; ++#endif + unsigned char proto = fl->proto; + int err = 0; + +@@ -1140,7 +1277,11 @@ + ipv6_addr_copy(&hdr->daddr, final_dst); + + skb->dst = dst_clone(&rt->u.dst); +- IP6_INC_STATS(IPSTATS_MIB_OUTREQUESTS); ++#ifdef CONFIG_IPV6_STATISTICS ++ IP6_INC_STATS(idev, IPSTATS_MIB_OUTREQUESTS); ++#else ++ IP6_INC_STATS(IPSTATS_MIB_OUTREQUESTS); ++#endif + err = NF_HOOK(PF_INET6, NF_IP6_LOCAL_OUT, skb, NULL, skb->dst->dev, dst_output); + if (err) { + if (err > 0) +@@ -1158,6 +1299,7 @@ + if (np->cork.rt) { + dst_release(&np->cork.rt->u.dst); + np->cork.rt = NULL; ++ inet->cork.flags &= ~IPCORK_ALLFRAG; + } + memset(&inet->cork.fl, 0, sizeof(inet->cork.fl)); + return err; +@@ -1170,9 +1312,19 @@ + struct inet_sock *inet = inet_sk(sk); + struct ipv6_pinfo *np = inet6_sk(sk); + struct sk_buff *skb; ++#ifdef CONFIG_IPV6_STATISTICS ++ struct dst_entry *dst; ++ struct inet6_dev *idev = NULL; ++#endif + + while ((skb = __skb_dequeue_tail(&sk->sk_write_queue)) != NULL) { ++#ifdef CONFIG_IPV6_STATISTICS ++ dst = skb->dst; ++ idev = ((struct rt6_info *)dst)->rt6i_idev; ++ IP6_INC_STATS(idev, IPSTATS_MIB_OUTDISCARDS); ++#else + IP6_INC_STATS(IPSTATS_MIB_OUTDISCARDS); ++#endif + kfree_skb(skb); + } + +@@ -1185,6 +1337,7 @@ + if (np->cork.rt) { + dst_release(&np->cork.rt->u.dst); + np->cork.rt = NULL; ++ inet->cork.flags &= ~IPCORK_ALLFRAG; + } + memset(&inet->cork.fl, 0, sizeof(inet->cork.fl)); + } +diff -urN linux-2.6.11/net/ipv6/ip6_tunnel.c linux.sinabox/net/ipv6/ip6_tunnel.c +--- linux-2.6.11/net/ipv6/ip6_tunnel.c 2005-03-02 08:37:48.000000000 +0100 ++++ linux.sinabox/net/ipv6/ip6_tunnel.c 2005-03-26 19:02:06.000000000 +0100 +@@ -736,7 +736,7 @@ + dsfield = INET_ECN_encapsulate(0, dsfield); + ipv6_change_dsfield(ipv6h, ~INET_ECN_MASK, dsfield); + ipv6h->payload_len = htons(skb->len - sizeof(struct ipv6hdr)); +- ipv6h->hop_limit = t->parms.hop_limit; ++ ipv6h->hop_limit = t->parms.hop_limit; /*XXX use physical link's mtu */ + ipv6h->nexthdr = proto; + ipv6_addr_copy(&ipv6h->saddr, &fl.fl6_src); + ipv6_addr_copy(&ipv6h->daddr, &fl.fl6_dst); +diff -urN linux-2.6.11/net/ipv6/ipv6_sockglue.c linux.sinabox/net/ipv6/ipv6_sockglue.c +--- linux-2.6.11/net/ipv6/ipv6_sockglue.c 2005-03-02 08:37:48.000000000 +0100 ++++ linux.sinabox/net/ipv6/ipv6_sockglue.c 2005-03-26 19:02:06.000000000 +0100 +@@ -23,6 +23,8 @@ + * Changes: + * David L Stevens : + * - added multicast source filtering API for MLDv2 ++ * Hoerdt Mickael : ++ * - added multicat routing support for IPv6 + */ + + #include +@@ -55,6 +57,10 @@ + + #include + ++#ifdef CONFIG_IPV6_MROUTE ++#include ++#endif ++ + DEFINE_SNMP_STAT(struct ipstats_mib, ipv6_statistics); + + static struct packet_type ipv6_packet_type = { +@@ -69,9 +75,14 @@ + { + struct ip6_ra_chain *ra, *new_ra, **rap; + ++#ifndef CONFIG_IPV6_MROUTE + /* RA packet may be delivered ONLY to IPPROTO_RAW socket */ + if (sk->sk_type != SOCK_RAW || inet_sk(sk)->num != IPPROTO_RAW) + return -EINVAL; ++#else ++ if (sk->sk_type != SOCK_RAW || inet_sk(sk)->num == IPPROTO_RAW) ++ return -EINVAL; ++#endif + + new_ra = (sel>=0) ? kmalloc(sizeof(*new_ra), GFP_KERNEL) : NULL; + +@@ -136,6 +147,11 @@ + + valbool = (val!=0); + ++#ifdef CONFIG_IPV6_MROUTE ++ if(optname >= MRT6_BASE && optname <= (MRT6_BASE + 10)) ++ return ip6_mroute_setsockopt(sk,optname,optval,optlen); ++#endif ++ + lock_sock(sk); + + switch (optname) { +@@ -535,6 +551,11 @@ + return udp_prot.getsockopt(sk, level, optname, optval, optlen); + if(level!=SOL_IPV6) + return -ENOPROTOOPT; ++ ++#ifdef CONFIG_IPV6_MROUTE ++ if(optname >= MRT6_BASE && optname <= (MRT6_BASE + 10)) ++ return ip6_mroute_getsockopt(sk,optname,optval,optlen); ++#endif + if (get_user(len, optlen)) + return -EFAULT; + switch (optname) { +diff -urN linux-2.6.11/net/ipv6/ipv6_syms.c linux.sinabox/net/ipv6/ipv6_syms.c +--- linux-2.6.11/net/ipv6/ipv6_syms.c 2005-03-02 08:38:13.000000000 +0100 ++++ linux.sinabox/net/ipv6/ipv6_syms.c 2005-03-26 19:02:06.000000000 +0100 +@@ -7,7 +7,7 @@ + #include + #include + +-EXPORT_SYMBOL(ipv6_addr_type); ++EXPORT_SYMBOL(__ipv6_addr_type); + EXPORT_SYMBOL(icmpv6_send); + EXPORT_SYMBOL(icmpv6_statistics); + EXPORT_SYMBOL(icmpv6_err_convert); +@@ -38,4 +38,8 @@ + #endif + EXPORT_SYMBOL(rt6_lookup); + EXPORT_SYMBOL(fl6_sock_lookup); ++EXPORT_SYMBOL(ip6_append_data); ++EXPORT_SYMBOL(ip6_flush_pending_frames); ++EXPORT_SYMBOL(ip6_push_pending_frames); ++EXPORT_SYMBOL(ip6_dst_lookup); + EXPORT_SYMBOL(ipv6_push_nfrag_opts); +diff -urN linux-2.6.11/net/ipv6/Kconfig linux.sinabox/net/ipv6/Kconfig +--- linux-2.6.11/net/ipv6/Kconfig 2005-03-02 08:38:09.000000000 +0100 ++++ linux.sinabox/net/ipv6/Kconfig 2005-03-26 19:02:06.000000000 +0100 +@@ -2,7 +2,7 @@ + # IPv6 configuration + # + config IPV6_PRIVACY +- bool "IPv6: Privacy Extensions (RFC 3041) support" ++ bool "IPv6: Privacy Extensions support" + depends on IPV6 + ---help--- + Privacy Extensions for Stateless Address Autoconfiguration in IPv6 +@@ -17,6 +17,22 @@ + + See for details. + ++config IPV6_PRIVACY_MD5 ++ bool "IPv6: Use RFC 3041 randomized interface identifiers" ++ depends on IPV6_PRIVACY ++ ---help--- ++ Instead of standard pseudo random generator, use ++ traditional algorithm described in the original RFC 3041. ++ ++config IPV6_ROUTER_PREF ++ bool "IPv6: default router preference" ++ depends on IPV6 ++ ++config IPV6_NEW_ROUNDROBIN ++ bool ++ depends on IPV6_ROUTER_PREF ++ default y ++ + config INET6_AH + tristate "IPv6: AH transformation" + depends on IPV6 +@@ -77,3 +93,51 @@ + + If unsure, say N. + ++config IPV6_MROUTE ++ bool "IPv6: multicast routing (EXPERIMENTAL)" ++ depends on IPV6 && EXPERIMENTAL ++ ---help--- ++ Experimental support for IPv6 multicast forwarding. ++ If unsure, say N. ++ ++config IPV6_PIMSM_V2 ++ bool "IPv6: PIM-SM version 2 support (EXPERIMENTAL)" ++ depends on IPV6_MROUTE ++ ---help--- ++ Support for IPv6 PIM multicast routing protocol PIM-SMv2. ++ If unsure, say N. ++ ++config IPV6_STATISTICS ++ bool "IPv6: per-interface statistics for SNMP" ++ depends on IPV6 ++ ++config IPV6_DELPREFIX ++ bool "IPv6: delete prefix route on manual address deletion" ++ depends on IPV6 ++ ---help--- ++ When an address is being configured manually, kernel ++ automatically append a prefix route for the address. ++ On the other hand, kernel won't delete it when the address ++ is being deleted. ++ ++ It is not a problem on prefix for auto-configured address, ++ but this probably is confusing on prefix for manual addresses. ++ (Note: prefix route for auto-configured address is managed ++ by its timer.) ++ ++ With this option, delete prefix route if there's no address ++ on the device. In addition, if all the other address are ++ auto-configured address, we change it to dynamic ++ prefix route. ++ ++ This is experimental. ++ ++config IPV6_ALLFRAG ++ bool "IPv6: fragment < 1280" ++ depends on IPV6 ++ ---help--- ++ According to RFC2460, always append fragment header after ++ receiving TooBig w/ mtu < 1280. ++ ++ This is experimental. ++ +diff -urN linux-2.6.11/net/ipv6/Makefile linux.sinabox/net/ipv6/Makefile +--- linux-2.6.11/net/ipv6/Makefile 2005-03-02 08:38:17.000000000 +0100 ++++ linux.sinabox/net/ipv6/Makefile 2005-03-26 19:02:06.000000000 +0100 +@@ -10,6 +10,8 @@ + exthdrs.o sysctl_net_ipv6.o datagram.o proc.o \ + ip6_flowlabel.o ipv6_syms.o + ++ipv6-$(CONFIG_IPV6_MROUTE) += ip6mr.o ++ + ipv6-$(CONFIG_XFRM) += xfrm6_policy.o xfrm6_state.o xfrm6_input.o \ + xfrm6_output.o + ipv6-objs += $(ipv6-y) +diff -urN linux-2.6.11/net/ipv6/mcast.c linux.sinabox/net/ipv6/mcast.c +--- linux-2.6.11/net/ipv6/mcast.c 2005-03-02 08:38:25.000000000 +0100 ++++ linux.sinabox/net/ipv6/mcast.c 2005-03-26 19:02:06.000000000 +0100 +@@ -62,6 +62,11 @@ + + #include + ++#ifdef CONFIG_IPV6_MROUTE ++#include ++int ip6_dev_loopback_xmit(struct sk_buff *newskb); ++#endif ++ + /* Set to 3 to get tracing... */ + #define MCAST_DEBUG 2 + +@@ -1320,7 +1325,11 @@ + struct inet6_dev *idev = in6_dev_get(skb->dev); + int err; + ++#ifdef CONFIG_IPV6_STATISTICS ++ IP6_INC_STATS(idev, IPSTATS_MIB_OUTREQUESTS); ++#else + IP6_INC_STATS(IPSTATS_MIB_OUTREQUESTS); ++#endif + payload_len = skb->tail - (unsigned char *)skb->nh.ipv6h - + sizeof(struct ipv6hdr); + mldlen = skb->tail - skb->h.raw; +@@ -1330,11 +1339,33 @@ + IPPROTO_ICMPV6, csum_partial(skb->h.raw, mldlen, 0)); + err = NF_HOOK(PF_INET6, NF_IP6_LOCAL_OUT, skb, NULL, skb->dev, + dev_queue_xmit); ++ ++#ifdef CONFIG_IPV6_MROUTE ++ /* ++ * if we are acting as a multicast router, loopback a copy to the ++ * process level multicast routing daemon ++ */ ++ if (mroute6_socket != NULL) { ++ struct sk_buff *newskb = skb_clone(skb, GFP_ATOMIC); ++ if (newskb) ++ NF_HOOK(PF_INET6, NF_IP6_POST_ROUTING, newskb, NULL, ++ newskb->dev, ip6_dev_loopback_xmit); ++ } ++#endif ++ + if (!err) { + ICMP6_INC_STATS(idev,ICMP6_MIB_OUTMSGS); ++#ifdef CONFIG_IPV6_STATISTICS ++ IP6_INC_STATS(idev, IPSTATS_MIB_OUTMCASTPKTS); ++#else + IP6_INC_STATS(IPSTATS_MIB_OUTMCASTPKTS); ++#endif + } else ++#ifdef CONFIG_IPV6_STATISTICS ++ IP6_INC_STATS(idev, IPSTATS_MIB_OUTDISCARDS); ++#else + IP6_INC_STATS(IPSTATS_MIB_OUTDISCARDS); ++#endif + + if (likely(idev != NULL)) + in6_dev_put(idev); +@@ -1604,7 +1635,11 @@ + static void igmp6_send(struct in6_addr *addr, struct net_device *dev, int type) + { + struct sock *sk = igmp6_socket->sk; ++#ifdef CONFIG_IPV6_STATISTICS ++ struct inet6_dev *idev = __in6_dev_get(dev); ++#else + struct inet6_dev *idev; ++#endif + struct sk_buff *skb; + struct icmp6hdr *hdr; + struct in6_addr *snd_addr; +@@ -1616,7 +1651,11 @@ + IPV6_TLV_ROUTERALERT, 2, 0, 0, + IPV6_TLV_PADN, 0 }; + ++#ifdef CONFIG_IPV6_STATISTICS ++ IP6_INC_STATS(idev, IPSTATS_MIB_OUTREQUESTS); ++#else + IP6_INC_STATS(IPSTATS_MIB_OUTREQUESTS); ++#endif + snd_addr = addr; + if (type == ICMPV6_MGM_REDUCTION) { + snd_addr = &all_routers; +@@ -1630,7 +1669,11 @@ + skb = sock_alloc_send_skb(sk, LL_RESERVED_SPACE(dev) + full_len, 1, &err); + + if (skb == NULL) { ++#ifdef CONFIG_IPV6_STATISTICS ++ IP6_INC_STATS(idev, IPSTATS_MIB_OUTDISCARDS); ++#else + IP6_INC_STATS(IPSTATS_MIB_OUTDISCARDS); ++#endif + return; + } + +@@ -1669,22 +1712,47 @@ + + err = NF_HOOK(PF_INET6, NF_IP6_LOCAL_OUT, skb, NULL, skb->dev, + dev_queue_xmit); ++ ++#ifdef CONFIG_IPV6_MROUTE ++ /* ++ * if we are acting as a multicast router, loopback a copy to the ++ * process level multicast routing daemon ++ */ ++ if (mroute6_socket != NULL) { ++ struct sk_buff *newskb = skb_clone(skb, GFP_ATOMIC); ++ if (newskb) ++ NF_HOOK(PF_INET6, NF_IP6_POST_ROUTING, newskb, NULL, ++ newskb->dev, ip6_dev_loopback_xmit); ++ } ++#endif + if (!err) { + if (type == ICMPV6_MGM_REDUCTION) + ICMP6_INC_STATS(idev, ICMP6_MIB_OUTGROUPMEMBREDUCTIONS); + else + ICMP6_INC_STATS(idev, ICMP6_MIB_OUTGROUPMEMBRESPONSES); + ICMP6_INC_STATS(idev, ICMP6_MIB_OUTMSGS); ++#ifdef CONFIG_IPV6_STATISTICS ++ IP6_INC_STATS(idev, IPSTATS_MIB_OUTMCASTPKTS); ++#else + IP6_INC_STATS(IPSTATS_MIB_OUTMCASTPKTS); ++#endif + } else ++#ifdef CONFIG_IPV6_STATISTICS ++ IP6_INC_STATS(idev, IPSTATS_MIB_OUTDISCARDS); ++#else + IP6_INC_STATS(IPSTATS_MIB_OUTDISCARDS); ++#endif + + if (likely(idev != NULL)) + in6_dev_put(idev); + return; + + out: ++#ifdef CONFIG_IPV6_STATISTICS ++ IP6_INC_STATS(idev, IPSTATS_MIB_OUTDISCARDS); ++#else + IP6_INC_STATS(IPSTATS_MIB_OUTDISCARDS); ++#endif + kfree_skb(skb); + } + +diff -urN linux-2.6.11/net/ipv6/ndisc.c linux.sinabox/net/ipv6/ndisc.c +--- linux-2.6.11/net/ipv6/ndisc.c 2005-03-02 08:38:10.000000000 +0100 ++++ linux.sinabox/net/ipv6/ndisc.c 2005-03-26 19:02:06.000000000 +0100 +@@ -437,6 +437,7 @@ + return; + } + ++ ND_PRINTK2("%s:dst=%p\n", __FUNCTION__, dst); + if (inc_opt) { + if (dev->addr_len) + len += NDISC_OPT_SPACE(dev->addr_len); +@@ -444,7 +445,7 @@ + inc_opt = 0; + } + +- skb = sock_alloc_send_skb(sk, MAX_HEADER + len + LL_RESERVED_SPACE(dev), ++ skb = sock_alloc_send_skb(sk, MAX_HEADER + len + LL_RESERVED_SPACE(dev) + dst->header_len + 64, + 1, &err); + + if (skb == NULL) { +@@ -485,7 +486,11 @@ + + skb->dst = dst; + idev = in6_dev_get(dst->dev); ++#ifdef CONFIG_IPV6_STATISTICS ++ IP6_INC_STATS(idev, IPSTATS_MIB_OUTREQUESTS); ++#else + IP6_INC_STATS(IPSTATS_MIB_OUTREQUESTS); ++#endif + err = NF_HOOK(PF_INET6, NF_IP6_LOCAL_OUT, skb, NULL, dst->dev, dst_output); + if (!err) { + ICMP6_INC_STATS(idev, ICMP6_MIB_OUTNEIGHBORADVERTISEMENTS); +@@ -534,7 +539,7 @@ + if (send_llinfo) + len += NDISC_OPT_SPACE(dev->addr_len); + +- skb = sock_alloc_send_skb(sk, MAX_HEADER + len + LL_RESERVED_SPACE(dev), ++ skb = sock_alloc_send_skb(sk, MAX_HEADER + len + LL_RESERVED_SPACE(dev) + dst->header_len + 64, + 1, &err); + if (skb == NULL) { + ND_PRINTK0(KERN_ERR +@@ -570,7 +575,11 @@ + /* send it! */ + skb->dst = dst; + idev = in6_dev_get(dst->dev); ++#ifdef CONFIG_IPV6_STATISTICS ++ IP6_INC_STATS(idev, IPSTATS_MIB_OUTREQUESTS); ++#else + IP6_INC_STATS(IPSTATS_MIB_OUTREQUESTS); ++#endif + err = NF_HOOK(PF_INET6, NF_IP6_LOCAL_OUT, skb, NULL, dst->dev, dst_output); + if (!err) { + ICMP6_INC_STATS(idev, ICMP6_MIB_OUTNEIGHBORSOLICITS); +@@ -610,7 +619,7 @@ + if (dev->addr_len) + len += NDISC_OPT_SPACE(dev->addr_len); + +- skb = sock_alloc_send_skb(sk, MAX_HEADER + len + LL_RESERVED_SPACE(dev), ++ skb = sock_alloc_send_skb(sk, MAX_HEADER + len + LL_RESERVED_SPACE(dev) + dst->header_len + 64, + 1, &err); + if (skb == NULL) { + ND_PRINTK0(KERN_ERR +@@ -644,7 +653,11 @@ + /* send it! */ + skb->dst = dst; + idev = in6_dev_get(dst->dev); ++#ifdef CONFIG_IPV6_STATISTICS ++ IP6_INC_STATS(idev, IPSTATS_MIB_OUTREQUESTS); ++#else + IP6_INC_STATS(IPSTATS_MIB_OUTREQUESTS); ++#endif + err = NF_HOOK(PF_INET6, NF_IP6_LOCAL_OUT, skb, NULL, dst->dev, dst_output); + if (!err) { + ICMP6_INC_STATS(idev, ICMP6_MIB_OUTROUTERSOLICITS); +@@ -809,7 +822,6 @@ + * sender should delay its response + * by a random time between 0 and + * MAX_ANYCAST_DELAY_TIME seconds. +- * (RFC2461) -- yoshfuji + */ + struct sk_buff *n = skb_clone(skb, GFP_ATOMIC); + if (n) +@@ -825,7 +837,7 @@ + + ipv6_addr_all_nodes(&maddr); + ndisc_send_na(dev, NULL, &maddr, &msg->target, +- idev->cnf.forwarding, 0, (ifp != NULL), 1); ++ idev->cnf.forwarding, 0, (ifp != NULL) && inc, inc); + goto out; + } + +@@ -846,7 +858,7 @@ + NEIGH_UPDATE_F_OVERRIDE); + if (neigh || !dev->hard_header) { + ndisc_send_na(dev, neigh, saddr, &msg->target, +- idev->cnf.forwarding, ++ idev->cnf.forwarding, + 1, (ifp != NULL && inc), inc); + if (neigh) + neigh_release(neigh); +@@ -1021,6 +1033,7 @@ + struct rt6_info *rt; + int lifetime; + struct ndisc_options ndopts; ++ int pref = 0; + int optlen; + + __u8 * opt = (__u8 *)(ra_msg + 1); +@@ -1082,7 +1095,18 @@ + + lifetime = ntohs(ra_msg->icmph.icmp6_rt_lifetime); + ++#ifdef CONFIG_IPV6_ROUTER_PREF ++ pref = IPV6_SIGNEDPREF(ra_msg->icmph.icmp6_router_pref); ++ if (pref < -1) { ++ if (net_ratelimit()) ++ ND_PRINTK2("ICMP6 RA: invalid RA preference; zero lifetime\n"); ++ lifetime = 0; ++ } ++#endif ++ + rt = rt6_get_dflt_router(&skb->nh.ipv6h->saddr, skb->dev); ++ if (rt) ++ neigh = rt->rt6i_nexthop; + + if (rt) + neigh = rt->rt6i_nexthop; +@@ -1097,7 +1121,7 @@ + ND_PRINTK3(KERN_DEBUG + "ICMPv6 RA: adding default router.\n"); + +- rt = rt6_add_dflt_router(&skb->nh.ipv6h->saddr, skb->dev); ++ rt = rt6_add_dflt_router(&skb->nh.ipv6h->saddr, skb->dev, pref); + if (rt == NULL) { + ND_PRINTK0(KERN_ERR + "ICMPv6 RA: %s() failed to add default route.\n", +@@ -1121,8 +1145,11 @@ + if (rt) + rt->rt6i_expires = jiffies + (HZ * lifetime); + +- if (ra_msg->icmph.icmp6_hop_limit) ++ if (ra_msg->icmph.icmp6_hop_limit) { + in6_dev->cnf.hop_limit = ra_msg->icmph.icmp6_hop_limit; ++ if (rt) ++ rt->u.dst.metrics[RTAX_HOPLIMIT-1] = ra_msg->icmph.icmp6_hop_limit; ++ } + + /* + * Update Reachable Time and Retrans Timer +@@ -1329,6 +1356,7 @@ + int rd_len; + int err; + int hlen; ++ u8 ha_buf[MAX_ADDR_LEN], *ha = NULL; + + dev = skb->dev; + +@@ -1341,10 +1369,14 @@ + + ndisc_flow_init(&fl, NDISC_REDIRECT, &saddr_buf, &skb->nh.ipv6h->saddr); + +- rt = rt6_lookup(&skb->nh.ipv6h->saddr, NULL, dev->ifindex, 1); +- if (rt == NULL) ++ /* ++ * we use ip6_route_output() here so that we do not try to ++ * send redirect to off-link. ++ * cf) ndisc_dst_alloc() assumes that destination is on-link. ++ */ ++ dst = ip6_route_output(NULL, &fl); ++ if (dst == NULL) + return; +- dst = &rt->u.dst; + + err = xfrm_lookup(&dst, &fl, NULL, 0); + if (err) { +@@ -1366,16 +1398,14 @@ + } + + if (dev->addr_len) { ++ read_lock_bh(&neigh->lock); + if (neigh->nud_state&NUD_VALID) { +- len += NDISC_OPT_SPACE(dev->addr_len); +- } else { +- /* If nexthop is not valid, do not redirect! +- We will make it later, when will be sure, +- that it is alive. +- */ +- dst_release(dst); +- return; +- } ++ memcpy(ha_buf, neigh->ha, dev->addr_len); ++ read_unlock_bh(&neigh->lock); ++ ha = ha_buf; ++ len += NDISC_OPT_SPACE(dev->addr_len); ++ } else ++ read_unlock_bh(&neigh->lock); + } + + rd_len = min_t(unsigned int, +@@ -1383,7 +1413,7 @@ + rd_len &= ~0x7; + len += rd_len; + +- buff = sock_alloc_send_skb(sk, MAX_HEADER + len + LL_RESERVED_SPACE(dev), ++ buff = sock_alloc_send_skb(sk, MAX_HEADER + len + LL_RESERVED_SPACE(dev) + dst->header_len + 64, + 1, &err); + if (buff == NULL) { + ND_PRINTK0(KERN_ERR +@@ -1420,8 +1450,8 @@ + * include target_address option + */ + +- if (dev->addr_len) +- opt = ndisc_fill_addr_option(opt, ND_OPT_TARGET_LL_ADDR, neigh->ha, ++ if (ha) ++ opt = ndisc_fill_addr_option(opt, ND_OPT_TARGET_LL_ADDR, ha, + dev->addr_len, dev->type); + + /* +@@ -1441,7 +1471,11 @@ + + buff->dst = dst; + idev = in6_dev_get(dst->dev); ++#ifdef CONFIG_IPV6_STATISTICS ++ IP6_INC_STATS(idev, IPSTATS_MIB_OUTREQUESTS); ++#else + IP6_INC_STATS(IPSTATS_MIB_OUTREQUESTS); ++#endif + err = NF_HOOK(PF_INET6, NF_IP6_LOCAL_OUT, buff, NULL, dst->dev, dst_output); + if (!err) { + ICMP6_INC_STATS(idev, ICMP6_MIB_OUTREDIRECTS); +@@ -1533,10 +1567,46 @@ + }; + + #ifdef CONFIG_SYSCTL ++static void __ndisc_ifinfo_notifier(struct inet6_dev *idev) ++{ ++ idev->tstamp = jiffies; ++ inet6_ifinfo_notify(RTM_NEWLINK, idev); ++} ++ ++static void ndisc_ifinfo_notifier(void *data) ++{ ++ struct net_device *dev = data; ++ if (dev) { ++ struct inet6_dev *idev = in6_dev_get(dev); ++ if (idev) { ++ __ndisc_ifinfo_notifier(idev); ++ in6_dev_put(idev); ++ } ++ } ++} ++ + int ndisc_ifinfo_sysctl_change(struct ctl_table *ctl, int write, struct file * filp, void __user *buffer, size_t *lenp, loff_t *ppos) + { + struct net_device *dev = ctl->extra1; + struct inet6_dev *idev; ++#if 1 ++ static char warncomm[TASK_COMM_LEN]; ++ static int warned; ++ const char *dev_name = dev ? dev->name : "default"; ++ ++ if (strcmp(warncomm, current->comm) && warned < 5) { ++ strcpy(warncomm, current->comm); ++ printk(KERN_WARNING ++ "process `%s' is using old sysctl " ++ "net.ipv6.neigh.%s.%s; " ++ "Use net.ipv6.neigh.%s.%s_ms " ++ "instead.\n", ++ warncomm, ++ dev_name, ctl->procname, ++ dev_name, ctl->procname); ++ warned++; ++ } ++#endif + + if (write && dev && (idev = in6_dev_get(dev)) != NULL) { + idev->tstamp = jiffies; +@@ -1578,7 +1648,8 @@ + + #ifdef CONFIG_SYSCTL + neigh_sysctl_register(NULL, &nd_tbl.parms, NET_IPV6, NET_IPV6_NEIGH, +- "ipv6", &ndisc_ifinfo_sysctl_change); ++ "ipv6", &ndisc_ifinfo_sysctl_change, ++ ndisc_ifinfo_notifier); + #endif + + register_netdevice_notifier(&ndisc_netdev_notifier); +diff -urN linux-2.6.11/net/ipv6/netfilter/ip6_conntrack_core.c linux.sinabox/net/ipv6/netfilter/ip6_conntrack_core.c +--- linux-2.6.11/net/ipv6/netfilter/ip6_conntrack_core.c 1970-01-01 01:00:00.000000000 +0100 ++++ linux.sinabox/net/ipv6/netfilter/ip6_conntrack_core.c 2005-03-26 19:02:06.000000000 +0100 +@@ -0,0 +1,1593 @@ ++/* ++ * IPv6 Connection Tracking ++ * Linux INET6 implementation ++ * ++ * Copyright (C)2003 USAGI/WIDE Project ++ * ++ * Authors: ++ * Yasuyuki Kozakai ++ * ++ * Based on: net/ipv4/netfilter/ip_conntrack_core.c ++ * ++ * This program 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 ++ * 2 of the License, or (at your option) any later version. ++ */ ++ ++/* (c) 1999 Paul `Rusty' Russell. Licenced under the GNU General ++ * Public Licence. ++ * ++ * 23 Apr 2001: Harald Welte ++ * - new API and handling of conntrack/nat helpers ++ * - now capable of multiple expectations for one master ++ * 16 Jul 2002: Harald Welte ++ * - add usage/reference counts to ip_conntrack_expect ++ * - export ip_conntrack[_expect]_{find_get,put} functions ++ * */ ++ ++#include ++#include ++#include ++#include ++#include ++#include ++#include ++#include ++#include ++#include ++#include ++#include ++#include ++#include ++#include ++#include ++#include ++#include ++#include ++#include ++ ++/* This rwlock protects the main hash table, protocol/helper/expected ++ registrations, conntrack timers*/ ++#define ASSERT_READ_LOCK(x) MUST_BE_READ_LOCKED(&ip6_conntrack_lock) ++#define ASSERT_WRITE_LOCK(x) MUST_BE_WRITE_LOCKED(&ip6_conntrack_lock) ++ ++#include ++#include ++#include ++#include ++#include ++ ++#define IP6_CONNTRACK_VERSION "0.1" ++ ++#if 0 ++#define DEBUGP printk ++#else ++#define DEBUGP(format, args...) ++#endif ++ ++DECLARE_RWLOCK(ip6_conntrack_lock); ++DECLARE_RWLOCK(ip6_conntrack_expect_tuple_lock); ++ ++void (*ip6_conntrack_destroyed)(struct ip6_conntrack *conntrack) = NULL; ++LIST_HEAD(ip6_conntrack_expect_list); ++LIST_HEAD(ip6_protocol_list); ++static LIST_HEAD(helpers); ++unsigned int ip6_conntrack_htable_size = 0; ++static int ip6_conntrack_max = 0; ++static atomic_t ip6_conntrack_count = ATOMIC_INIT(0); ++struct list_head *ip6_conntrack_hash; ++static kmem_cache_t *ip6_conntrack_cachep; ++ ++extern struct ip6_conntrack_protocol ip6_conntrack_generic_protocol; ++ ++/* ++ * Based on ipv6_skip_exthdr() in net/ipv6/exthdr.c ++ * ++ * This function parses (probably truncated) exthdr set "hdr" ++ * of length "len". "nexthdrp" initially points to some place, ++ * where type of the first header can be found. ++ * ++ * It skips all well-known exthdrs, and returns pointer to the start ++ * of unparsable area i.e. the first header with unknown type. ++ * if success, *nexthdr is updated by type/protocol of this header. ++ * ++ * NOTES: - it may return pointer pointing beyond end of packet, ++ * if the last recognized header is truncated in the middle. ++ * - if packet is truncated, so that all parsed headers are skipped, ++ * it returns -1. ++ * - First fragment header is skipped, not-first ones ++ * are considered as unparsable. ++ * - ESP is unparsable for now and considered like ++ * normal payload protocol. ++ * - Note also special handling of AUTH header. Thanks to IPsec wizards. ++ */ ++ ++static int ip6_ct_skip_exthdr(struct sk_buff *skb, int start, u8 *nexthdrp, ++ int len) ++{ ++ u8 nexthdr = *nexthdrp; ++ ++ while (ipv6_ext_hdr(nexthdr)) { ++ struct ipv6_opt_hdr hdr; ++ int hdrlen; ++ ++ if (len < (int)sizeof(struct ipv6_opt_hdr)) ++ return -1; ++ if (nexthdr == NEXTHDR_NONE) ++ break; ++ if (skb_copy_bits(skb, start, &hdr, sizeof(hdr))) ++ BUG(); ++ if (nexthdr == NEXTHDR_FRAGMENT) { ++ struct frag_hdr fhdr; ++ ++ if (len < (int)sizeof(struct frag_hdr)) ++ return -1; ++ if (skb_copy_bits(skb, start, &fhdr, sizeof(fhdr))) ++ BUG(); ++ if (ntohs(fhdr.frag_off) & ~0x7) ++ return -1; ++ hdrlen = 8; ++ } else if (nexthdr == NEXTHDR_AUTH) ++ hdrlen = (hdr.hdrlen+2)<<2; ++ else ++ hdrlen = ipv6_optlen(&hdr); ++ ++ nexthdr = hdr.nexthdr; ++ len -= hdrlen; ++ start += hdrlen; ++ } ++ ++ *nexthdrp = nexthdr; ++ return start; ++} ++ ++int ip6_ct_tuple_src_equal(const struct ip6_conntrack_tuple *t1, ++ const struct ip6_conntrack_tuple *t2) ++{ ++ if (ipv6_addr_cmp(&t1->src.ip, &t2->src.ip)) ++ return 0; ++ ++ if (t1->src.u.all != t2->src.u.all) ++ return 0; ++ ++ if (t1->dst.protonum != t2->dst.protonum) ++ return 0; ++ ++ return 1; ++ ++} ++ ++int ip6_ct_tuple_dst_equal(const struct ip6_conntrack_tuple *t1, ++ const struct ip6_conntrack_tuple *t2) ++{ ++ if (ipv6_addr_cmp(&t1->dst.ip, &t2->dst.ip)) ++ return 0; ++ ++ if (t1->dst.u.all != t2->dst.u.all) ++ return 0; ++ ++ if (t1->dst.protonum != t2->dst.protonum) ++ return 0; ++ ++ return 1; ++} ++ ++int ip6_ct_tuple_equal(const struct ip6_conntrack_tuple *t1, ++ const struct ip6_conntrack_tuple *t2) ++{ ++ return ip6_ct_tuple_src_equal(t1, t2) && ip6_ct_tuple_dst_equal(t1, t2); ++} ++ ++int ip6_ct_tuple_mask_cmp(const struct ip6_conntrack_tuple *t, ++ const struct ip6_conntrack_tuple *tuple, ++ const struct ip6_conntrack_tuple *mask) ++{ ++ int count = 0; ++ ++ for (count = 0; count < 8; count++){ ++ if ((ntohs(t->src.ip.s6_addr16[count]) ^ ++ ntohs(tuple->src.ip.s6_addr16[count])) & ++ ntohs(mask->src.ip.s6_addr16[count])) ++ return 0; ++ ++ if ((ntohs(t->dst.ip.s6_addr16[count]) ^ ++ ntohs(tuple->dst.ip.s6_addr16[count])) & ++ ntohs(mask->dst.ip.s6_addr16[count])) ++ return 0; ++ } ++ ++ if ((t->src.u.all ^ tuple->src.u.all) & mask->src.u.all) ++ return 0; ++ ++ if ((t->dst.u.all ^ tuple->dst.u.all) & mask->dst.u.all) ++ return 0; ++ ++ if ((t->dst.protonum ^ tuple->dst.protonum) & mask->dst.protonum) ++ return 0; ++ ++ return 1; ++} ++ ++static inline int proto_cmpfn(const struct ip6_conntrack_protocol *curr, ++ u_int8_t protocol) ++{ ++ return protocol == curr->proto; ++} ++ ++struct ip6_conntrack_protocol *__ip6_ct_find_proto(u_int8_t protocol) ++{ ++ struct ip6_conntrack_protocol *p; ++ ++ MUST_BE_READ_LOCKED(&ip6_conntrack_lock); ++ p = LIST_FIND(&ip6_protocol_list, proto_cmpfn, ++ struct ip6_conntrack_protocol *, protocol); ++ if (!p) ++ p = &ip6_conntrack_generic_protocol; ++ ++ return p; ++} ++ ++struct ip6_conntrack_protocol *ip6_ct_find_proto(u_int8_t protocol) ++{ ++ struct ip6_conntrack_protocol *p; ++ ++ READ_LOCK(&ip6_conntrack_lock); ++ p = __ip6_ct_find_proto(protocol); ++ READ_UNLOCK(&ip6_conntrack_lock); ++ return p; ++} ++ ++inline void ++ip6_conntrack_put(struct ip6_conntrack *ct) ++{ ++ IP6_NF_ASSERT(ct); ++ nf_conntrack_put(&ct->ct_general); ++} ++ ++static int ip6_conntrack_hash_rnd_initted; ++static unsigned int ip6_conntrack_hash_rnd; ++static u_int32_t ++hash_conntrack(const struct ip6_conntrack_tuple *tuple) ++{ ++ u32 a, b, c; ++ ++ a = tuple->src.ip.s6_addr32[0]; ++ b = tuple->src.ip.s6_addr32[1]; ++ c = tuple->src.ip.s6_addr32[2]; ++ ++ a += JHASH_GOLDEN_RATIO; ++ b += JHASH_GOLDEN_RATIO; ++ c += ip6_conntrack_hash_rnd; ++ __jhash_mix(a, b, c); ++ ++ a += tuple->src.ip.s6_addr32[3]; ++ b += tuple->dst.ip.s6_addr32[0]; ++ c += tuple->dst.ip.s6_addr32[1]; ++ __jhash_mix(a, b, c); ++ ++ a += tuple->dst.ip.s6_addr32[2]; ++ b += tuple->dst.ip.s6_addr32[3]; ++ c += tuple->src.u.all | (tuple->dst.u.all << 16); ++ __jhash_mix(a, b, c); ++ ++ a += tuple->dst.protonum; ++ __jhash_mix(a, b, c); ++ ++ return c % ip6_conntrack_htable_size; ++} ++ ++int ++ip6_get_tuple(const struct ipv6hdr *ipv6h, ++ const struct sk_buff *skb, ++ unsigned int dataoff, ++ u_int8_t protonum, ++ struct ip6_conntrack_tuple *tuple, ++ const struct ip6_conntrack_protocol *protocol) ++{ ++ /* Should I check that this packet is'nt fragmented ++ like IPv4 conntrack? - kozakai */ ++ ++ ipv6_addr_copy(&tuple->src.ip, &ipv6h->saddr); ++ ipv6_addr_copy(&tuple->dst.ip, &ipv6h->daddr); ++ ++ tuple->dst.protonum = protonum; ++ ++ return protocol->pkt_to_tuple(skb, dataoff, tuple); ++} ++ ++static int ++invert_tuple(struct ip6_conntrack_tuple *inverse, ++ const struct ip6_conntrack_tuple *orig, ++ const struct ip6_conntrack_protocol *protocol) ++{ ++ ipv6_addr_copy(&inverse->src.ip, &orig->dst.ip); ++ ipv6_addr_copy(&inverse->dst.ip, &orig->src.ip); ++ inverse->dst.protonum = orig->dst.protonum; ++ ++ return protocol->invert_tuple(inverse, orig); ++} ++ ++ ++/* ip6_conntrack_expect helper functions */ ++ ++/* Compare tuple parts depending on mask. */ ++static inline int expect_cmp(const struct ip6_conntrack_expect *i, ++ const struct ip6_conntrack_tuple *tuple) ++{ ++ MUST_BE_READ_LOCKED(&ip6_conntrack_expect_tuple_lock); ++ return ip6_ct_tuple_mask_cmp(tuple, &i->tuple, &i->mask); ++} ++ ++static void ++destroy_expect(struct ip6_conntrack_expect *exp) ++{ ++ DEBUGP("destroy_expect(%p) use=%d\n", exp, atomic_read(&exp->use)); ++ IP6_NF_ASSERT(atomic_read(&exp->use)); ++ IP6_NF_ASSERT(!timer_pending(&exp->timeout)); ++ ++ kfree(exp); ++} ++ ++ ++inline void ip6_conntrack_expect_put(struct ip6_conntrack_expect *exp) ++{ ++ IP6_NF_ASSERT(exp); ++ ++ if (atomic_dec_and_test(&exp->use)) { ++ /* usage count dropped to zero */ ++ destroy_expect(exp); ++ } ++} ++ ++static inline struct ip6_conntrack_expect * ++__ip6_ct_expect_find(const struct ip6_conntrack_tuple *tuple) ++{ ++ MUST_BE_READ_LOCKED(&ip6_conntrack_lock); ++ MUST_BE_READ_LOCKED(&ip6_conntrack_expect_tuple_lock); ++ return LIST_FIND(&ip6_conntrack_expect_list, expect_cmp, ++ struct ip6_conntrack_expect *, tuple); ++} ++ ++/* Find a expectation corresponding to a tuple. */ ++struct ip6_conntrack_expect * ++ip6_conntrack_expect_find_get(const struct ip6_conntrack_tuple *tuple) ++{ ++ struct ip6_conntrack_expect *exp; ++ ++ READ_LOCK(&ip6_conntrack_lock); ++ READ_LOCK(&ip6_conntrack_expect_tuple_lock); ++ exp = __ip6_ct_expect_find(tuple); ++ if (exp) ++ atomic_inc(&exp->use); ++ READ_UNLOCK(&ip6_conntrack_expect_tuple_lock); ++ READ_UNLOCK(&ip6_conntrack_lock); ++ ++ return exp; ++} ++ ++/* remove one specific expectation from all lists and drop refcount, ++ * does _NOT_ delete the timer. */ ++static void __unexpect_related(struct ip6_conntrack_expect *expect) ++{ ++ DEBUGP("unexpect_related(%p)\n", expect); ++ MUST_BE_WRITE_LOCKED(&ip6_conntrack_lock); ++ ++ /* we're not allowed to unexpect a confirmed expectation! */ ++ IP6_NF_ASSERT(!expect->sibling); ++ ++ /* delete from global and local lists */ ++ list_del(&expect->list); ++ list_del(&expect->expected_list); ++ ++ /* decrement expect-count of master conntrack */ ++ if (expect->expectant) ++ expect->expectant->expecting--; ++ ++ ip6_conntrack_expect_put(expect); ++} ++ ++/* remove one specific expecatation from all lists, drop refcount ++ * and expire timer. ++ * This function can _NOT_ be called for confirmed expects! */ ++static void unexpect_related(struct ip6_conntrack_expect *expect) ++{ ++ IP6_NF_ASSERT(expect->expectant); ++ IP6_NF_ASSERT(expect->expectant->helper); ++ /* if we are supposed to have a timer, but we can't delete ++ * it: race condition. __unexpect_related will ++ * be calledd by timeout function */ ++ if (expect->expectant->helper->timeout ++ && !del_timer(&expect->timeout)) ++ return; ++ ++ __unexpect_related(expect); ++} ++ ++/* delete all unconfirmed expectations for this conntrack */ ++static void remove_expectations(struct ip6_conntrack *ct, int drop_refcount) ++{ ++ struct list_head *exp_entry, *next; ++ struct ip6_conntrack_expect *exp; ++ ++ DEBUGP("remove_expectations(%p)\n", ct); ++ ++ list_for_each_safe(exp_entry, next, &ct->sibling_list) { ++ exp = list_entry(exp_entry, struct ip6_conntrack_expect, ++ expected_list); ++ ++ /* we skip established expectations, as we want to delete ++ * the un-established ones only */ ++ if (exp->sibling) { ++ DEBUGP("remove_expectations: skipping established %p of %p\n", exp->sibling, ct); ++ if (drop_refcount) { ++ /* Indicate that this expectations parent is dead */ ++ ip6_conntrack_put(exp->expectant); ++ exp->expectant = NULL; ++ } ++ continue; ++ } ++ ++ IP6_NF_ASSERT(list_inlist(&ip6_conntrack_expect_list, exp)); ++ IP6_NF_ASSERT(exp->expectant == ct); ++ ++ /* delete expectation from global and private lists */ ++ unexpect_related(exp); ++ } ++} ++ ++static void ++clean_from_lists(struct ip6_conntrack *ct) ++{ ++ unsigned int ho, hr; ++ ++ DEBUGP("clean_from_lists(%p)\n", ct); ++ MUST_BE_WRITE_LOCKED(&ip6_conntrack_lock); ++ ++ ho = hash_conntrack(&ct->tuplehash[IP6_CT_DIR_ORIGINAL].tuple); ++ hr = hash_conntrack(&ct->tuplehash[IP6_CT_DIR_REPLY].tuple); ++ ++ LIST_DELETE(&ip6_conntrack_hash[ho], ++ &ct->tuplehash[IP6_CT_DIR_ORIGINAL]); ++ LIST_DELETE(&ip6_conntrack_hash[hr], ++ &ct->tuplehash[IP6_CT_DIR_REPLY]); ++ ++ /* Destroy all un-established, pending expectations */ ++ remove_expectations(ct, 1); ++} ++ ++static void ++destroy_conntrack(struct nf_conntrack *nfct) ++{ ++ struct ip6_conntrack *ct = (struct ip6_conntrack *)nfct, *master = NULL; ++ struct ip6_conntrack_protocol *proto; ++ ++ DEBUGP("destroy_conntrack(%p)\n", ct); ++ IP6_NF_ASSERT(atomic_read(&nfct->use) == 0); ++ IP6_NF_ASSERT(!timer_pending(&ct->timeout)); ++ ++ /* To make sure we don't get any weird locking issues here: ++ * destroy_conntrack() MUST NOT be called with a write lock ++ * to ip6_conntrack_lock!!! -HW */ ++ proto = ip6_ct_find_proto(ct->tuplehash[IP6_CT_DIR_REPLY].tuple.dst.protonum); ++ if (proto && proto->destroy) ++ proto->destroy(ct); ++ ++ if (ip6_conntrack_destroyed) ++ ip6_conntrack_destroyed(ct); ++ ++ WRITE_LOCK(&ip6_conntrack_lock); ++ /* Delete us from our own list to prevent corruption later */ ++ list_del(&ct->sibling_list); ++ ++ /* Delete our master expectation */ ++ if (ct->master) { ++ if (ct->master->expectant) { ++ /* can't call __unexpect_related here, ++ * since it would screw up expect_list */ ++ list_del(&ct->master->expected_list); ++ master = ct->master->expectant; ++ } ++ kfree(ct->master); ++ } ++ WRITE_UNLOCK(&ip6_conntrack_lock); ++ ++ if (master) ++ ip6_conntrack_put(master); ++ ++ DEBUGP("destroy_conntrack: returning ct=%p to slab\n", ct); ++ kmem_cache_free(ip6_conntrack_cachep, ct); ++ atomic_dec(&ip6_conntrack_count); ++} ++ ++static void death_by_timeout(unsigned long ul_conntrack) ++{ ++ struct ip6_conntrack *ct = (void *)ul_conntrack; ++ ++ WRITE_LOCK(&ip6_conntrack_lock); ++ clean_from_lists(ct); ++ WRITE_UNLOCK(&ip6_conntrack_lock); ++ ip6_conntrack_put(ct); ++} ++ ++static inline int ++conntrack_tuple_cmp(const struct ip6_conntrack_tuple_hash *i, ++ const struct ip6_conntrack_tuple *tuple, ++ const struct ip6_conntrack *ignored_conntrack) ++{ ++ MUST_BE_READ_LOCKED(&ip6_conntrack_lock); ++ return i->ctrack != ignored_conntrack ++ && ip6_ct_tuple_equal(tuple, &i->tuple); ++} ++ ++static struct ip6_conntrack_tuple_hash * ++__ip6_conntrack_find(const struct ip6_conntrack_tuple *tuple, ++ const struct ip6_conntrack *ignored_conntrack) ++{ ++ struct ip6_conntrack_tuple_hash *h; ++ unsigned int hash = hash_conntrack(tuple); ++ ++ MUST_BE_READ_LOCKED(&ip6_conntrack_lock); ++ h = LIST_FIND(&ip6_conntrack_hash[hash], ++ conntrack_tuple_cmp, ++ struct ip6_conntrack_tuple_hash *, ++ tuple, ignored_conntrack); ++ return h; ++} ++ ++/* Find a connection corresponding to a tuple. */ ++struct ip6_conntrack_tuple_hash * ++ip6_conntrack_find_get(const struct ip6_conntrack_tuple *tuple, ++ const struct ip6_conntrack *ignored_conntrack) ++{ ++ struct ip6_conntrack_tuple_hash *h; ++ ++ READ_LOCK(&ip6_conntrack_lock); ++ h = __ip6_conntrack_find(tuple, ignored_conntrack); ++ if (h) ++ atomic_inc(&h->ctrack->ct_general.use); ++ READ_UNLOCK(&ip6_conntrack_lock); ++ ++ return h; ++} ++ ++/* Confirm a connection given skb; places it in hash table */ ++int __ip6_conntrack_confirm(struct sk_buff *skb) ++{ ++ unsigned int hash, repl_hash; ++ struct ip6_conntrack *ct; ++ enum ip6_conntrack_info ctinfo; ++ ++ ct = ip6_conntrack_get(skb, &ctinfo); ++ ++ /* ip6t_REJECT uses ip6_conntrack_attach to attach related ++ ICMP/TCP RST packets in other direction. Actual packet ++ which created connection will be IP6_CT_NEW or for an ++ expected connection, IP6_CT_RELATED. */ ++ if (CTINFO2DIR(ctinfo) != IP6_CT_DIR_ORIGINAL) ++ return NF_ACCEPT; ++ ++ hash = hash_conntrack(&ct->tuplehash[IP6_CT_DIR_ORIGINAL].tuple); ++ repl_hash = hash_conntrack(&ct->tuplehash[IP6_CT_DIR_REPLY].tuple); ++ ++ /* We're not in hash table, and we refuse to set up related ++ connections for unconfirmed conns. But packet copies and ++ REJECT will give spurious warnings here. */ ++ /* IP6_NF_ASSERT(atomic_read(&ct->ct_general.use) == 1); */ ++ ++ /* No external references means noone else could have ++ confirmed us. */ ++ IP6_NF_ASSERT(!is_confirmed(ct)); ++ DEBUGP("Confirming conntrack %p\n", ct); ++ ++ WRITE_LOCK(&ip6_conntrack_lock); ++ /* See if there's one in the list already, including reverse: ++ NAT could have grabbed it without realizing, since we're ++ not in the hash. If there is, we lost race. */ ++ if (!LIST_FIND(&ip6_conntrack_hash[hash], ++ conntrack_tuple_cmp, ++ struct ip6_conntrack_tuple_hash *, ++ &ct->tuplehash[IP6_CT_DIR_ORIGINAL].tuple, NULL) ++ && !LIST_FIND(&ip6_conntrack_hash[repl_hash], ++ conntrack_tuple_cmp, ++ struct ip6_conntrack_tuple_hash *, ++ &ct->tuplehash[IP6_CT_DIR_REPLY].tuple, NULL)) { ++ list_prepend(&ip6_conntrack_hash[hash], ++ &ct->tuplehash[IP6_CT_DIR_ORIGINAL]); ++ list_prepend(&ip6_conntrack_hash[repl_hash], ++ &ct->tuplehash[IP6_CT_DIR_REPLY]); ++ /* Timer relative to confirmation time, not original ++ setting time, otherwise we'd get timer wrap in ++ wierd delay cases. */ ++ ct->timeout.expires += jiffies; ++ add_timer(&ct->timeout); ++ atomic_inc(&ct->ct_general.use); ++ set_bit(IP6S_CONFIRMED_BIT, &ct->status); ++ WRITE_UNLOCK(&ip6_conntrack_lock); ++ return NF_ACCEPT; ++ } ++ ++ WRITE_UNLOCK(&ip6_conntrack_lock); ++ return NF_DROP; ++} ++ ++/* Is this needed ? this code is for NAT. - kozakai */ ++/* Returns true if a connection correspondings to the tuple (required ++ for NAT). */ ++int ++ip6_conntrack_tuple_taken(const struct ip6_conntrack_tuple *tuple, ++ const struct ip6_conntrack *ignored_conntrack) ++{ ++ struct ip6_conntrack_tuple_hash *h; ++ ++ READ_LOCK(&ip6_conntrack_lock); ++ h = __ip6_conntrack_find(tuple, ignored_conntrack); ++ READ_UNLOCK(&ip6_conntrack_lock); ++ ++ return h != NULL; ++} ++ ++/* Returns conntrack if it dealt with ICMP, and filled in skb fields */ ++struct ip6_conntrack * ++icmp6_error_track(struct sk_buff *skb, ++ unsigned int icmp6off, ++ enum ip6_conntrack_info *ctinfo, ++ unsigned int hooknum) ++{ ++ struct ip6_conntrack_tuple intuple, origtuple; ++ struct ip6_conntrack_tuple_hash *h; ++ struct ipv6hdr *ip6h; ++ struct icmp6hdr hdr; ++ struct ipv6hdr inip6h; ++ unsigned int inip6off; ++ struct ip6_conntrack_protocol *inproto; ++ u_int8_t inprotonum; ++ unsigned int inprotoff; ++ ++ IP6_NF_ASSERT(skb->nfct == NULL); ++ ++ ip6h = skb->nh.ipv6h; ++ if (skb_copy_bits(skb, icmp6off, &hdr, sizeof(hdr)) != 0) { ++ DEBUGP("icmp_error_track: Can't copy ICMPv6 hdr.\n"); ++ return NULL; ++ } ++ ++ if (hdr.icmp6_type >= 128) ++ return NULL; ++ ++ /* ++ * Should I ignore invalid ICMPv6 error here ? ++ * ex) ICMPv6 error in ICMPv6 error, Fragmented packet, and so on. ++ * - kozakai ++ */ ++ ++ /* Why not check checksum in IPv4 conntrack ? - kozakai */ ++ /* Ignore it if the checksum's bogus. */ ++ ++ if (csum_ipv6_magic(&ip6h->saddr, &ip6h->daddr, skb->len - icmp6off, ++ IPPROTO_ICMPV6, ++ skb_checksum(skb, icmp6off, ++ skb->len - icmp6off, 0))) { ++ DEBUGP("ICMPv6 checksum failed\n"); ++ return NULL; ++ } ++ ++ inip6off = icmp6off + sizeof(hdr); ++ if (skb_copy_bits(skb, inip6off, &inip6h, sizeof(inip6h)) != 0) { ++ DEBUGP("Can't copy inner IPv6 hdr.\n"); ++ return NULL; ++ } ++ ++ inprotonum = inip6h.nexthdr; ++ inprotoff = ip6_ct_skip_exthdr(skb, inip6off + sizeof(inip6h), ++ &inprotonum, ++ skb->len - inip6off - sizeof(inip6h)); ++ ++ if (inprotoff < 0 || inprotoff > skb->len ++ || inprotonum == NEXTHDR_FRAGMENT) { ++ DEBUGP("icmp6_error: Can't find protocol header in ICMPv6 payload.\n"); ++ return NULL; ++ } ++ ++ inproto = ip6_ct_find_proto(inprotonum); ++ ++ /* Are they talking about one of our connections? */ ++ if (!ip6_get_tuple(&inip6h, skb, inprotoff, inprotonum, ++ &origtuple, inproto)) { ++ DEBUGP("icmp6_error: ! get_tuple p=%u\n", inprotonum); ++ return NULL; ++ } ++ ++ /* Ordinarily, we'd expect the inverted tupleproto, but it's ++ been preserved inside the ICMP. */ ++ if (!invert_tuple(&intuple, &origtuple, inproto)) { ++ DEBUGP("icmp6_error_track: Can't invert tuple\n"); ++ return NULL; ++ } ++ ++ *ctinfo = IP6_CT_RELATED; ++ ++ h = ip6_conntrack_find_get(&intuple, NULL); ++ if (!h) { ++ DEBUGP("icmp6_error_track: no match\n"); ++ return NULL; ++ } else { ++ if (DIRECTION(h) == IP6_CT_DIR_REPLY) ++ *ctinfo += IP6_CT_IS_REPLY; ++ } ++ ++ /* Update skb to refer to this connection */ ++ skb->nfct = &h->ctrack->ct_general; ++ return h->ctrack; ++} ++ ++/* There's a small race here where we may free a just-assured ++ connection. Too bad: we're in trouble anyway. */ ++static inline int unreplied(const struct ip6_conntrack_tuple_hash *i) ++{ ++ return !(test_bit(IP6S_ASSURED_BIT, &i->ctrack->status)); ++} ++ ++static int early_drop(struct list_head *chain) ++{ ++ /* Traverse backwards: gives us oldest, which is roughly LRU */ ++ struct ip6_conntrack_tuple_hash *h; ++ int dropped = 0; ++ ++ READ_LOCK(&ip6_conntrack_lock); ++ h = LIST_FIND_B(chain, unreplied, struct ip6_conntrack_tuple_hash *); ++ if (h) ++ atomic_inc(&h->ctrack->ct_general.use); ++ READ_UNLOCK(&ip6_conntrack_lock); ++ ++ if (!h) ++ return dropped; ++ ++ if (del_timer(&h->ctrack->timeout)) { ++ death_by_timeout((unsigned long)h->ctrack); ++ dropped = 1; ++ } ++ ip6_conntrack_put(h->ctrack); ++ return dropped; ++} ++ ++static inline int helper_cmp(const struct ip6_conntrack_helper *i, ++ const struct ip6_conntrack_tuple *rtuple) ++{ ++ return ip6_ct_tuple_mask_cmp(rtuple, &i->tuple, &i->mask); ++} ++ ++struct ip6_conntrack_helper * ++ip6_ct_find_helper(const struct ip6_conntrack_tuple *tuple){ ++ ++ MUST_BE_READ_LOCKED(&ip6_conntrack_lock); ++ return LIST_FIND(&helpers, helper_cmp, ++ struct ip6_conntrack_helper *, ++ tuple); ++} ++ ++/* Allocate a new conntrack: we return -ENOMEM if classification ++ failed due to stress. Otherwise it really is unclassifiable. */ ++static struct ip6_conntrack_tuple_hash * ++init_conntrack(const struct ip6_conntrack_tuple *tuple, ++ struct ip6_conntrack_protocol *protocol, ++ struct sk_buff *skb, ++ unsigned int protoff) ++{ ++ struct ip6_conntrack *conntrack; ++ struct ip6_conntrack_tuple repl_tuple; ++ size_t hash; ++ struct ip6_conntrack_expect *expected; ++ static unsigned int drop_next = 0; ++ ++ if (!ip6_conntrack_hash_rnd_initted) { ++ get_random_bytes(&ip6_conntrack_hash_rnd, 4); ++ ip6_conntrack_hash_rnd_initted = 1; ++ } ++ ++ hash = hash_conntrack(tuple); ++ ++ if (ip6_conntrack_max && ++ atomic_read(&ip6_conntrack_count) >= ip6_conntrack_max) { ++ /* Try dropping from random chain, or else from the ++ chain about to put into (in case they're trying to ++ bomb one hash chain). */ ++ unsigned int next = (drop_next++)%ip6_conntrack_htable_size; ++ ++ if (!early_drop(&ip6_conntrack_hash[next]) ++ && !early_drop(&ip6_conntrack_hash[hash])) { ++ if (net_ratelimit()) ++ printk(KERN_WARNING ++ "ip6_conntrack: table full, dropping" ++ " packet.\n"); ++ return ERR_PTR(-ENOMEM); ++ } ++ } ++ ++ if (!invert_tuple(&repl_tuple, tuple, protocol)) { ++ DEBUGP("Can't invert tuple.\n"); ++ return NULL; ++ } ++ ++ conntrack = kmem_cache_alloc(ip6_conntrack_cachep, GFP_ATOMIC); ++ if (!conntrack) { ++ DEBUGP("Can't allocate conntrack.\n"); ++ return ERR_PTR(-ENOMEM); ++ } ++ ++ memset(conntrack, 0, sizeof(*conntrack)); ++ atomic_set(&conntrack->ct_general.use, 1); ++ conntrack->ct_general.destroy = destroy_conntrack; ++ conntrack->tuplehash[IP6_CT_DIR_ORIGINAL].tuple = *tuple; ++ conntrack->tuplehash[IP6_CT_DIR_ORIGINAL].ctrack = conntrack; ++ conntrack->tuplehash[IP6_CT_DIR_REPLY].tuple = repl_tuple; ++ conntrack->tuplehash[IP6_CT_DIR_REPLY].ctrack = conntrack; ++ ++ if (!protocol->new(conntrack, skb, protoff)) { ++ kmem_cache_free(ip6_conntrack_cachep, conntrack); ++ return NULL; ++ } ++ /* Don't set timer yet: wait for confirmation */ ++ init_timer(&conntrack->timeout); ++ conntrack->timeout.data = (unsigned long)conntrack; ++ conntrack->timeout.function = death_by_timeout; ++ ++ INIT_LIST_HEAD(&conntrack->sibling_list); ++ ++ WRITE_LOCK(&ip6_conntrack_lock); ++ /* Need finding and deleting of expected ONLY if we win race */ ++ READ_LOCK(&ip6_conntrack_expect_tuple_lock); ++ expected = LIST_FIND(&ip6_conntrack_expect_list, expect_cmp, ++ struct ip6_conntrack_expect *, tuple); ++ READ_UNLOCK(&ip6_conntrack_expect_tuple_lock); ++ ++ /* If master is not in hash table yet (ie. packet hasn't left ++ this machine yet), how can other end know about expected? ++ Hence these are not the droids you are looking for (if ++ master ct never got confirmed, we'd hold a reference to it ++ and weird things would happen to future packets). */ ++ if (expected && !is_confirmed(expected->expectant)) ++ expected = NULL; ++ ++ /* Look up the conntrack helper for master connections only */ ++ if (!expected) ++ conntrack->helper = ip6_ct_find_helper(&repl_tuple); ++ ++ /* If the expectation is dying, then this is a loser. */ ++ if (expected ++ && expected->expectant->helper->timeout ++ && ! del_timer(&expected->timeout)) ++ expected = NULL; ++ ++ if (expected) { ++ DEBUGP("conntrack: expectation arrives ct=%p exp=%p\n", ++ conntrack, expected); ++ /* Welcome, Mr. Bond. We've been expecting you... */ ++ IP6_NF_ASSERT(master_ct6(conntrack)); ++ __set_bit(IP6S_EXPECTED_BIT, &conntrack->status); ++ conntrack->master = expected; ++ expected->sibling = conntrack; ++ LIST_DELETE(&ip6_conntrack_expect_list, expected); ++ expected->expectant->expecting--; ++ nf_conntrack_get(&master_ct6(conntrack)->ct_general); ++ } ++ atomic_inc(&ip6_conntrack_count); ++ WRITE_UNLOCK(&ip6_conntrack_lock); ++ ++ if (expected && expected->expectfn) ++ expected->expectfn(conntrack); ++ return &conntrack->tuplehash[IP6_CT_DIR_ORIGINAL]; ++} ++ ++/* On success, returns conntrack ptr, sets skb->nfct and ctinfo */ ++static inline struct ip6_conntrack * ++resolve_normal_ct(struct sk_buff *skb, ++ unsigned int protoff, ++ u_int16_t protonum, ++ struct ip6_conntrack_protocol *proto, ++ int *set_reply, ++ unsigned int hooknum, ++ enum ip6_conntrack_info *ctinfo) ++{ ++ struct ip6_conntrack_tuple tuple; ++ struct ip6_conntrack_tuple_hash *h; ++ ++ if (!ip6_get_tuple(skb->nh.ipv6h, skb, protoff, protonum, &tuple, proto)) ++ return NULL; ++ ++ /* look for tuple match */ ++ h = ip6_conntrack_find_get(&tuple, NULL); ++ if (!h) { ++ h = init_conntrack(&tuple, proto, skb, protoff); ++ if (!h) ++ return NULL; ++ if (IS_ERR(h)) ++ return (void *)h; ++ } ++ ++ /* It exists; we have (non-exclusive) reference. */ ++ if (DIRECTION(h) == IP6_CT_DIR_REPLY) { ++ *ctinfo = IP6_CT_ESTABLISHED + IP6_CT_IS_REPLY; ++ /* Please set reply bit if this packet OK */ ++ *set_reply = 1; ++ } else { ++ /* Once we've had two way comms, always ESTABLISHED. */ ++ if (test_bit(IP6S_SEEN_REPLY_BIT, &h->ctrack->status)) { ++ DEBUGP("ip6_conntrack_in: normal packet for %p\n", ++ h->ctrack); ++ *ctinfo = IP6_CT_ESTABLISHED; ++ } else if (test_bit(IP6S_EXPECTED_BIT, &h->ctrack->status)) { ++ DEBUGP("ip6_conntrack_in: related packet for %p\n", ++ h->ctrack); ++ *ctinfo = IP6_CT_RELATED; ++ } else { ++ DEBUGP("ip6_conntrack_in: new packet for %p\n", ++ h->ctrack); ++ *ctinfo = IP6_CT_NEW; ++ } ++ *set_reply = 0; ++ } ++ skb->nfct = &h->ctrack->ct_general; ++ skb->nfctinfo = *ctinfo; ++ return h->ctrack; ++} ++ ++/* Netfilter hook itself. */ ++unsigned int ip6_conntrack_in(unsigned int hooknum, ++ struct sk_buff **pskb, ++ const struct net_device *in, ++ const struct net_device *out, ++ int (*okfn)(struct sk_buff *)) ++{ ++ struct ip6_conntrack *ct; ++ enum ip6_conntrack_info ctinfo; ++ struct ip6_conntrack_protocol *proto; ++ int set_reply; ++ int ret; ++ u_int8_t protonum; ++ int len; ++ int daddr_type; ++ int protoff, extoff; ++ ++ /* FIXME: Do this right please. --RR */ ++ (*pskb)->nfcache |= NFC_UNKNOWN; ++ ++ /* Ignore multicast - kozakai */ ++ daddr_type = ipv6_addr_type(&(*pskb)->nh.ipv6h->daddr); ++ if (daddr_type & IPV6_ADDR_MULTICAST) ++ return NF_ACCEPT; ++ ++ /* Previously seen (loopback)? Ignore. Do this before ++ fragment check. */ ++ if ((*pskb)->nfct) ++ return NF_ACCEPT; ++ ++ extoff = (u8*)((*pskb)->nh.ipv6h+1) - (*pskb)->data; ++ len = (*pskb)->len - extoff; ++ ++ /* Verify that a protocol is present and get the protocol handler ++ we need */ ++ protonum = (*pskb)->nh.ipv6h->nexthdr; ++ protoff = ip6_ct_skip_exthdr(*pskb, extoff, &protonum, len); ++ ++ /* ++ * Notice! (protoff == (*pskb)->len) mean that this packet doesn't ++ * have no data except of IPv6 & ext headers. but tracked anyway. ++ * - kozakai ++ */ ++ if (protoff < 0 || protoff > (*pskb)->len ++ || protonum == NEXTHDR_FRAGMENT) { ++ DEBUGP("ip6_conntrack_core: can't find proto in pkt\n"); ++ return NF_ACCEPT; ++ } ++ ++ /* It may be an icmp error... */ ++ if (protonum == IPPROTO_ICMPV6 ++ && icmp6_error_track(*pskb, protoff, &ctinfo, hooknum)) ++ return NF_ACCEPT; ++ ++ proto = ip6_ct_find_proto(protonum); ++ ++ if (!(ct = resolve_normal_ct(*pskb, protoff, protonum, proto, ++ &set_reply, hooknum,&ctinfo))) ++ /* Not valid part of a connection */ ++ return NF_ACCEPT; ++ ++ if (IS_ERR(ct)) ++ /* Too stressed to deal. */ ++ return NF_DROP; ++ ++ IP6_NF_ASSERT((*pskb)->nfct); ++ ++ ret = proto->packet(ct, *pskb, protoff, ctinfo); ++ if (ret == -1) { ++ /* Invalid */ ++ nf_conntrack_put((*pskb)->nfct); ++ (*pskb)->nfct = NULL; ++ return NF_ACCEPT; ++ } ++ ++ if (ret != NF_DROP && ct->helper) { ++ ret = ct->helper->help(*pskb, protoff, ct, ctinfo); ++ if (ret == -1) { ++ /* Invalid */ ++ nf_conntrack_put((*pskb)->nfct); ++ (*pskb)->nfct = NULL; ++ return NF_ACCEPT; ++ } ++ } ++ if (set_reply) ++ set_bit(IP6S_SEEN_REPLY_BIT, &ct->status); ++ ++ return ret; ++} ++ ++int ip6_invert_tuplepr(struct ip6_conntrack_tuple *inverse, ++ const struct ip6_conntrack_tuple *orig) ++{ ++ return invert_tuple(inverse, orig, ip6_ct_find_proto(orig->dst.protonum)); ++} ++ ++static inline int resent_expect(const struct ip6_conntrack_expect *i, ++ const struct ip6_conntrack_tuple *tuple, ++ const struct ip6_conntrack_tuple *mask) ++{ ++ DEBUGP("resent_expect\n"); ++ DEBUGP(" tuple: "); DUMP_TUPLE(&i->tuple); ++ DEBUGP("test tuple: "); DUMP_TUPLE(tuple); ++ return (ip6_ct_tuple_equal(&i->tuple, tuple) ++ && ip6_ct_tuple_equal(&i->mask, mask)); ++} ++ ++static struct in6_addr * ++or_addr6_bits(struct in6_addr *result, const struct in6_addr *one, ++ const struct in6_addr *two) ++{ ++ ++ int count = 0; ++ ++ for (count = 0; count < 8; count++) ++ result->s6_addr16[count] = ntohs(one->s6_addr16[count]) ++ & ntohs(two->s6_addr16[count]); ++ ++ return result; ++} ++ ++/* Would two expected things clash? */ ++static inline int expect_clash(const struct ip6_conntrack_expect *i, ++ const struct ip6_conntrack_tuple *tuple, ++ const struct ip6_conntrack_tuple *mask) ++{ ++ /* Part covered by intersection of masks must be unequal, ++ otherwise they clash */ ++ struct ip6_conntrack_tuple intersect_mask; ++ ++ intersect_mask.src.u.all = i->mask.src.u.all & mask->src.u.all; ++ intersect_mask.dst.u.all = i->mask.dst.u.all & mask->dst.u.all; ++ intersect_mask.dst.protonum = i->mask.dst.protonum ++ & mask->dst.protonum; ++ ++ or_addr6_bits(&intersect_mask.src.ip, &i->mask.src.ip, ++ &mask->src.ip); ++ or_addr6_bits(&intersect_mask.dst.ip, &i->mask.dst.ip, ++ &mask->dst.ip); ++ ++ return ip6_ct_tuple_mask_cmp(&i->tuple, tuple, &intersect_mask); ++} ++ ++inline void ip6_conntrack_unexpect_related(struct ip6_conntrack_expect *expect) ++{ ++ WRITE_LOCK(&ip6_conntrack_lock); ++ unexpect_related(expect); ++ WRITE_UNLOCK(&ip6_conntrack_lock); ++} ++ ++static void expectation_timed_out(unsigned long ul_expect) ++{ ++ struct ip6_conntrack_expect *expect = (void *) ul_expect; ++ ++ DEBUGP("expectation %p timed out\n", expect); ++ WRITE_LOCK(&ip6_conntrack_lock); ++ __unexpect_related(expect); ++ WRITE_UNLOCK(&ip6_conntrack_lock); ++} ++ ++/* Add a related connection. */ ++int ip6_conntrack_expect_related(struct ip6_conntrack *related_to, ++ struct ip6_conntrack_expect *expect) ++{ ++ struct ip6_conntrack_expect *old, *new; ++ int ret = 0; ++ ++ WRITE_LOCK(&ip6_conntrack_lock); ++ /* Because of the write lock, no reader can walk the lists, ++ * so there is no need to use the tuple lock too */ ++ ++ DEBUGP("ip6_conntrack_expect_related %p\n", related_to); ++ DEBUGP("tuple: "); DUMP_TUPLE(&expect->tuple); ++ DEBUGP("mask: "); DUMP_TUPLE(&expect->mask); ++ ++ old = LIST_FIND(&ip6_conntrack_expect_list, resent_expect, ++ struct ip6_conntrack_expect *, &expect->tuple, ++ &expect->mask); ++ if (old) { ++ /* Helper private data may contain offsets but no pointers ++ pointing into the payload - otherwise we should have to copy ++ the data filled out by the helper over the old one */ ++ DEBUGP("expect_related: resent packet\n"); ++ if (related_to->helper->timeout) { ++ if (!del_timer(&old->timeout)) { ++ /* expectation is dying. Fall through */ ++ old = NULL; ++ } else { ++ old->timeout.expires = jiffies + ++ related_to->helper->timeout * HZ; ++ add_timer(&old->timeout); ++ } ++ } ++ ++ if (old) { ++ WRITE_UNLOCK(&ip6_conntrack_lock); ++ return -EEXIST; ++ } ++ } else if (related_to->helper->max_expected && ++ related_to->expecting >= related_to->helper->max_expected) { ++ struct list_head *cur_item; ++ /* old == NULL */ ++ if (!(related_to->helper->flags & ++ IP6_CT_HELPER_F_REUSE_EXPECT)) { ++ WRITE_UNLOCK(&ip6_conntrack_lock); ++ if (net_ratelimit()) ++ printk(KERN_WARNING ++ "ip6_conntrack: max number of expected " ++ "connections %i of %s for " ++ "%x:%x:%x:%x:%x:%x:%x:%x->%x:%x:%x:%x:%x:%x:%x:%x\n", ++ related_to->helper->max_expected, ++ related_to->helper->name, ++ NIP6(related_to->tuplehash[IP6_CT_DIR_ORIGINAL].tuple.src.ip), ++ NIP6(related_to->tuplehash[IP6_CT_DIR_ORIGINAL].tuple.dst.ip)); ++ return -EPERM; ++ } ++ DEBUGP("ip6_conntrack: max number of expected " ++ "connections %i of %s reached for " ++ "%x:%x:%x:%x:%x:%x:%x:%x->%x:%x:%x:%x:%x:%x:%x:%x, reusing\n", ++ related_to->helper->max_expected, ++ related_to->helper->name, ++ NIP6(related_to->tuplehash[IP6_CT_DIR_ORIGINAL].tuple.src.ip), ++ NIP6(related_to->tuplehash[IP6_CT_DIR_ORIGINAL].tuple.dst.ip)); ++ ++ /* choose the the oldest expectation to evict */ ++ list_for_each(cur_item, &related_to->sibling_list) { ++ struct ip6_conntrack_expect *cur; ++ ++ cur = list_entry(cur_item, ++ struct ip6_conntrack_expect, ++ expected_list); ++ if (cur->sibling == NULL) { ++ old = cur; ++ break; ++ } ++ } ++ ++ /* (!old) cannot happen, since related_to->expecting is the ++ * number of unconfirmed expects */ ++ IP6_NF_ASSERT(old); ++ ++ /* newnat14 does not reuse the real allocated memory ++ * structures but rather unexpects the old and ++ * allocates a new. unexpect_related will decrement ++ * related_to->expecting. ++ */ ++ unexpect_related(old); ++ ret = -EPERM; ++ } else if (LIST_FIND(&ip6_conntrack_expect_list, expect_clash, ++ struct ip6_conntrack_expect *, &expect->tuple, ++ &expect->mask)) { ++ WRITE_UNLOCK(&ip6_conntrack_lock); ++ DEBUGP("expect_related: busy!\n"); ++ return -EBUSY; ++ } ++ ++ new = (struct ip6_conntrack_expect *) ++ kmalloc(sizeof(struct ip6_conntrack_expect), GFP_ATOMIC); ++ if (!new) { ++ WRITE_UNLOCK(&ip6_conntrack_lock); ++ DEBUGP("expect_relaed: OOM allocating expect\n"); ++ return -ENOMEM; ++ } ++ ++ DEBUGP("new expectation %p of conntrack %p\n", new, related_to); ++ memcpy(new, expect, sizeof(*expect)); ++ new->expectant = related_to; ++ new->sibling = NULL; ++ atomic_set(&new->use, 1); ++ ++ /* add to expected list for this connection */ ++ list_add(&new->expected_list, &related_to->sibling_list); ++ /* add to global list of expectations */ ++ list_prepend(&ip6_conntrack_expect_list, &new->list); ++ /* add and start timer if required */ ++ if (related_to->helper->timeout) { ++ init_timer(&new->timeout); ++ new->timeout.data = (unsigned long)new; ++ new->timeout.function = expectation_timed_out; ++ new->timeout.expires = jiffies + ++ related_to->helper->timeout * HZ; ++ add_timer(&new->timeout); ++ } ++ related_to->expecting++; ++ ++ WRITE_UNLOCK(&ip6_conntrack_lock); ++ ++ return ret; ++} ++ ++ ++/* Is this code needed ? this is for NAT. - kozakai */ ++/* Alter reply tuple (maybe alter helper). If it's already taken, ++ return 0 and don't do alteration. */ ++int ip6_conntrack_alter_reply(struct ip6_conntrack *conntrack, ++ const struct ip6_conntrack_tuple *newreply) ++{ ++ WRITE_LOCK(&ip6_conntrack_lock); ++ if (__ip6_conntrack_find(newreply, conntrack)) { ++ WRITE_UNLOCK(&ip6_conntrack_lock); ++ return 0; ++ } ++ /* Should be unconfirmed, so not in hash table yet */ ++ IP6_NF_ASSERT(!is_confirmed(conntrack)); ++ ++ DEBUGP("Altering reply tuple of %p to ", conntrack); ++ DUMP_TUPLE(newreply); ++ ++ conntrack->tuplehash[IP6_CT_DIR_REPLY].tuple = *newreply; ++ if (!conntrack->master) ++ conntrack->helper = ip6_ct_find_helper(newreply); ++ WRITE_UNLOCK(&ip6_conntrack_lock); ++ ++ return 1; ++} ++ ++int ip6_conntrack_helper_register(struct ip6_conntrack_helper *me) ++{ ++ WRITE_LOCK(&ip6_conntrack_lock); ++ list_prepend(&helpers, me); ++ WRITE_UNLOCK(&ip6_conntrack_lock); ++ ++ return 0; ++} ++ ++static inline int unhelp(struct ip6_conntrack_tuple_hash *i, ++ const struct ip6_conntrack_helper *me) ++{ ++ if (i->ctrack->helper == me) { ++ /* Get rid of any expected. */ ++ remove_expectations(i->ctrack, 0); ++ /* And *then* set helper to NULL */ ++ i->ctrack->helper = NULL; ++ } ++ return 0; ++} ++ ++void ip6_conntrack_helper_unregister(struct ip6_conntrack_helper *me) ++{ ++ unsigned int i; ++ ++ /* Need write lock here, to delete helper. */ ++ WRITE_LOCK(&ip6_conntrack_lock); ++ LIST_DELETE(&helpers, me); ++ ++ /* Get rid of expecteds, set helpers to NULL. */ ++ for (i = 0; i < ip6_conntrack_htable_size; i++) ++ LIST_FIND_W(&ip6_conntrack_hash[i], unhelp, ++ struct ip6_conntrack_tuple_hash *, me); ++ WRITE_UNLOCK(&ip6_conntrack_lock); ++ ++ /* Someone could be still looking at the helper in a bh. */ ++ synchronize_net(); ++} ++ ++/* Refresh conntrack for this many jiffies. */ ++void ip6_ct_refresh(struct ip6_conntrack *ct, unsigned long extra_jiffies) ++{ ++ IP6_NF_ASSERT(ct->timeout.data == (unsigned long)ct); ++ ++ WRITE_LOCK(&ip6_conntrack_lock); ++ /* If not in hash table, timer will not be active yet */ ++ if (!is_confirmed(ct)) ++ ct->timeout.expires = extra_jiffies; ++ else { ++ /* Need del_timer for race avoidance (may already be dying). */ ++ if (del_timer(&ct->timeout)) { ++ ct->timeout.expires = jiffies + extra_jiffies; ++ add_timer(&ct->timeout); ++ } ++ } ++ WRITE_UNLOCK(&ip6_conntrack_lock); ++} ++ ++/* Used by ip6t_REJECT. */ ++static void ip6_conntrack_attach(struct sk_buff *nskb, struct sk_buff *skb) ++{ ++ struct ip6_conntrack *ct; ++ enum ip6_conntrack_info ctinfo; ++ ++ ct = ip6_conntrack_get(skb, &ctinfo); ++ ++ /* This ICMP is in reverse direction to the packet which ++ caused it */ ++ if (CTINFO2DIR(ctinfo) == IP6_CT_DIR_ORIGINAL) ++ ctinfo = IP6_CT_RELATED + IP6_CT_IS_REPLY; ++ else ++ ctinfo = IP6_CT_RELATED; ++ ++ /* Attach new skbuff, and increment count */ ++ nskb->nfct = &ct->ct_general; ++ nskb->nfctinfo = ctinfo; ++ nf_conntrack_get(nskb->nfct); ++} ++ ++static inline int ++do_kill(const struct ip6_conntrack_tuple_hash *i, ++ int (*kill)(const struct ip6_conntrack *i, void *data), ++ void *data) ++{ ++ return kill(i->ctrack, data); ++} ++ ++/* Bring out ya dead! */ ++static struct ip6_conntrack_tuple_hash * ++get_next_corpse(int (*kill)(const struct ip6_conntrack *i, void *data), ++ void *data) ++{ ++ struct ip6_conntrack_tuple_hash *h = NULL; ++ unsigned int i; ++ ++ READ_LOCK(&ip6_conntrack_lock); ++ for (i = 0; !h && i < ip6_conntrack_htable_size; i++) { ++ h = LIST_FIND(&ip6_conntrack_hash[i], do_kill, ++ struct ip6_conntrack_tuple_hash *, kill, data); ++ } ++ if (h) ++ atomic_inc(&h->ctrack->ct_general.use); ++ READ_UNLOCK(&ip6_conntrack_lock); ++ ++ return h; ++} ++ ++void ++ip6_ct_selective_cleanup(int (*kill)(const struct ip6_conntrack *i, void *data), ++ void *data) ++{ ++ struct ip6_conntrack_tuple_hash *h; ++ ++ /* This is order n^2, by the way. */ ++ while ((h = get_next_corpse(kill, data)) != NULL) { ++ /* Time to push up daises... */ ++ if (del_timer(&h->ctrack->timeout)) ++ death_by_timeout((unsigned long)h->ctrack); ++ /* ... else the timer will get him soon. */ ++ ++ ip6_conntrack_put(h->ctrack); ++ } ++} ++ ++/* Fast function for those who don't want to parse /proc (and I don't ++ blame them). */ ++/* Reversing the socket's dst/src point of view gives us the reply ++ mapping. */ ++static int ++getorigdst(struct sock *sk, int optval, void __user *user, int *len) ++{ ++ struct inet_sock *inet = inet_sk(sk); ++ struct ipv6_pinfo *np = inet6_sk(sk); ++ struct ip6_conntrack_tuple_hash *h; ++ struct ip6_conntrack_tuple tuple; ++ ++ memset(&tuple, 0, sizeof(tuple)); ++ ipv6_addr_copy(&tuple.src.ip, &np->rcv_saddr); ++ ipv6_addr_copy(&tuple.dst.ip, &np->daddr); ++ tuple.src.u.tcp.port = inet->sport; ++ tuple.dst.u.tcp.port = inet->dport; ++ tuple.dst.protonum = IPPROTO_TCP; ++ ++ /* We only do TCP at the moment: is there a better way? */ ++ if (strcmp(sk->sk_prot->name, "TCP")) { ++ DEBUGP("IPV6_NF_ORIGINAL_DST: Not a TCP socket\n"); ++ return -ENOPROTOOPT; ++ } ++ ++ if ((unsigned int) *len < sizeof(struct sockaddr_in6)) { ++ DEBUGP("IPV6_NF_ORIGINAL_DST: len %u not %u\n", ++ *len, sizeof(struct sockaddr_in6)); ++ return -EINVAL; ++ } ++ ++ h = ip6_conntrack_find_get(&tuple, NULL); ++ if (h) { ++ struct sockaddr_in6 sin; ++ memset(&sin, 0, sizeof(sin)); ++ ++ sin.sin6_family = AF_INET6; ++ sin.sin6_port = h->ctrack->tuplehash[IP6_CT_DIR_ORIGINAL] ++ .tuple.dst.u.tcp.port; ++ ipv6_addr_copy(&sin.sin6_addr, ++ &h->ctrack->tuplehash[IP6_CT_DIR_ORIGINAL] ++ .tuple.dst.ip); ++ /* FIXME: sin6_scope_id */ ++ ++ DEBUGP("IPV6_NF_ORIGINAL_DST: %x:%x:%x:%x:%x:%x:%x:%x %u\n", ++ NIP6(sin.sin6_addr), ntohs(sin.sin6_port)); ++ ip6_conntrack_put(h->ctrack); ++ if (copy_to_user(user, &sin, sizeof(sin)) != 0) ++ return -EFAULT; ++ else ++ return 0; ++ } ++ DEBUGP("IPV6_NF_ORIGINAL_DST: Can't find %x:%x:%x:%x:%x:%x:%x:%x/%u-%x:%x:%x:%x:%x:%x:%x:%x/%u.\n", ++ NIP6(tuple.src.ip), ntohs(tuple.src.u.tcp.port), ++ NIP6(tuple.dst.ip), ntohs(tuple.dst.u.tcp.port)); ++ return -ENOENT; ++} ++ ++static struct nf_sockopt_ops so_getorigdst = { ++ .pf = PF_INET6, ++ .get_optmin = IPV6_NF_ORIGINAL_DST, ++ .get_optmax = IPV6_NF_ORIGINAL_DST+1, ++ .get = &getorigdst, ++}; ++ ++#define NET_IP6_CONNTRACK_MAX 2089 ++#define NET_IP6_CONNTRACK_MAX_NAME "ip6_conntrack_max" ++ ++#ifdef CONFIG_SYSCTL ++static struct ctl_table_header *ip6_conntrack_sysctl_header; ++ ++static ctl_table ip6_conntrack_table[] = { ++ { ++ .ctl_name = NET_IP6_CONNTRACK_MAX, ++ .procname = NET_IP6_CONNTRACK_MAX_NAME, ++ .data = &ip6_conntrack_max, ++ .maxlen = sizeof(ip6_conntrack_max), ++ .mode = 0644, ++ .proc_handler = proc_dointvec ++ }, ++ { .ctl_name = 0 } ++}; ++ ++static ctl_table ip6_conntrack_dir_table[] = { ++ { ++ .ctl_name = NET_IPV6, ++ .procname = "ipv6", NULL, ++ .mode = 0555, ++ .child = ip6_conntrack_table ++ }, ++ { .ctl_name = 0 } ++}; ++ ++static ctl_table ip6_conntrack_root_table[] = { ++ { ++ .ctl_name = CTL_NET, ++ .procname = "net", ++ .mode = 0555, ++ .child = ip6_conntrack_dir_table ++ }, ++ { .ctl_name = 0 } ++}; ++#endif /*CONFIG_SYSCTL*/ ++ ++static int kill_all(const struct ip6_conntrack *i, void *data) ++{ ++ return 1; ++} ++ ++/* Mishearing the voices in his head, our hero wonders how he's ++ supposed to kill the mall. */ ++void ip6_conntrack_cleanup(void) ++{ ++#ifdef CONFIG_SYSCTL ++ unregister_sysctl_table(ip6_conntrack_sysctl_header); ++#endif ++ ip6_ct_attach = NULL; ++ /* This makes sure all current packets have passed through ++ netfilter framework. Roll on, two-stage module ++ delete... */ ++ synchronize_net(); ++ ++ i_see_dead_people: ++ ip6_ct_selective_cleanup(kill_all, NULL); ++ if (atomic_read(&ip6_conntrack_count) != 0) { ++ schedule(); ++ goto i_see_dead_people; ++ } ++ ++ kmem_cache_destroy(ip6_conntrack_cachep); ++ vfree(ip6_conntrack_hash); ++ nf_unregister_sockopt(&so_getorigdst); ++} ++ ++static int hashsize = 0; ++MODULE_PARM(hashsize, "i"); ++ ++int __init ip6_conntrack_init(void) ++{ ++ unsigned int i; ++ int ret; ++ ++ /* Idea from tcp.c: use 1/16384 of memory. On i386: 32MB ++ * machine has 256 buckets. >= 1GB machines have 8192 buckets. */ ++ if (hashsize) { ++ ip6_conntrack_htable_size = hashsize; ++ } else { ++ ip6_conntrack_htable_size ++ = (((num_physpages << PAGE_SHIFT) / 16384) ++ / sizeof(struct list_head)); ++ if (num_physpages > (1024 * 1024 * 1024 / PAGE_SIZE)) ++ ip6_conntrack_htable_size = 8192; ++ if (ip6_conntrack_htable_size < 16) ++ ip6_conntrack_htable_size = 16; ++ } ++ ip6_conntrack_max = 8 * ip6_conntrack_htable_size; ++ ++ printk("ip6_conntrack version %s (%u buckets, %d max)" ++ " - %Zd bytes per conntrack\n", IP6_CONNTRACK_VERSION, ++ ip6_conntrack_htable_size, ip6_conntrack_max, ++ sizeof(struct ip6_conntrack)); ++ ++ ret = nf_register_sockopt(&so_getorigdst); ++ if (ret != 0) { ++ printk(KERN_ERR "Unable to register netfilter socket option\n"); ++ return ret; ++ } ++ ++ ip6_conntrack_hash = vmalloc(sizeof(struct list_head) ++ * ip6_conntrack_htable_size); ++ if (!ip6_conntrack_hash) { ++ printk(KERN_ERR "Unable to create ip6_conntrack_hash\n"); ++ goto err_unreg_sockopt; ++ } ++ ++ ip6_conntrack_cachep = kmem_cache_create("ip6_conntrack", ++ sizeof(struct ip6_conntrack), 0, ++ SLAB_HWCACHE_ALIGN, NULL, NULL); ++ if (!ip6_conntrack_cachep) { ++ printk(KERN_ERR "Unable to create ip6_conntrack slab cache\n"); ++ goto err_free_hash; ++ } ++ /* Don't NEED lock here, but good form anyway. */ ++ WRITE_LOCK(&ip6_conntrack_lock); ++ /* Sew in builtin protocols. */ ++ list_append(&ip6_protocol_list, &ip6_conntrack_protocol_tcp); ++ list_append(&ip6_protocol_list, &ip6_conntrack_protocol_udp); ++ list_append(&ip6_protocol_list, &ip6_conntrack_protocol_icmpv6); ++ WRITE_UNLOCK(&ip6_conntrack_lock); ++ ++ for (i = 0; i < ip6_conntrack_htable_size; i++) ++ INIT_LIST_HEAD(&ip6_conntrack_hash[i]); ++ ++/* This is fucking braindead. There is NO WAY of doing this without ++ the CONFIG_SYSCTL unless you don't want to detect errors. ++ Grrr... --RR */ ++#ifdef CONFIG_SYSCTL ++ ip6_conntrack_sysctl_header ++ = register_sysctl_table(ip6_conntrack_root_table, 0); ++ if (ip6_conntrack_sysctl_header == NULL) { ++ goto err_free_ct_cachep; ++ } ++#endif /*CONFIG_SYSCTL*/ ++ ++ /* For use by ip6t_REJECT */ ++ ip6_ct_attach = ip6_conntrack_attach; ++ return ret; ++ ++#ifdef CONFIG_SYSCTL ++err_free_ct_cachep: ++ kmem_cache_destroy(ip6_conntrack_cachep); ++#endif /*CONFIG_SYSCTL*/ ++err_free_hash: ++ vfree(ip6_conntrack_hash); ++err_unreg_sockopt: ++ nf_unregister_sockopt(&so_getorigdst); ++ ++ return -ENOMEM; ++} +diff -urN linux-2.6.11/net/ipv6/netfilter/ip6_conntrack_ftp.c linux.sinabox/net/ipv6/netfilter/ip6_conntrack_ftp.c +--- linux-2.6.11/net/ipv6/netfilter/ip6_conntrack_ftp.c 1970-01-01 01:00:00.000000000 +0100 ++++ linux.sinabox/net/ipv6/netfilter/ip6_conntrack_ftp.c 2005-03-26 19:02:06.000000000 +0100 +@@ -0,0 +1,554 @@ ++/* ++ * FTP extension for IPv6 connection tracking. ++ * Linux INET6 implementation ++ * ++ * Copyright (C)2003 USAGI/WIDE Project ++ * ++ * Authors: ++ * Yasuyuki Kozakai ++ * ++ * Based on: net/ipv4/netfilter/ip_conntrack_ftp.c ++ * ++ * This program 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 ++ * 2 of the License, or (at your option) any later version. ++ */ ++ ++/* FTP extension for IP6 connection tracking. */ ++#include ++#include ++#include ++#include ++#include ++#include ++#include ++#include ++#include ++ ++#include ++#include ++#include ++#include ++ ++/* This is slow, but it's simple. --RR */ ++static char ftp_buffer[65536]; ++ ++DECLARE_LOCK(ip6_ftp_lock); ++struct module *ip6_conntrack_ftp = THIS_MODULE; ++ ++#define MAX_PORTS 8 ++static int ports[MAX_PORTS]; ++static int ports_c = 0; ++#ifdef MODULE_PARM ++MODULE_PARM(ports, "1-" __MODULE_STRING(MAX_PORTS) "i"); ++#endif ++ ++static int loose = 0; ++MODULE_PARM(loose, "i"); ++ ++#if 0 ++#define DEBUGP printk ++#else ++#define DEBUGP(format, args...) ++#endif ++ ++struct cmd_info { ++ struct in6_addr ip; ++ u_int16_t port; ++}; ++ ++static int try_eprt(const char *, size_t, struct cmd_info *, char); ++static int try_espv_response(const char *, size_t, struct cmd_info *, char); ++ ++static struct ftp_search { ++ enum ip6_conntrack_dir dir; ++ const char *pattern; ++ size_t plen; ++ char skip; ++ char term; ++ enum ip6_ct_ftp_type ftptype; ++ int (*getnum)(const char *, size_t, struct cmd_info *, char); ++} search[] = { ++ { ++ IP6_CT_DIR_ORIGINAL, ++ "EPRT", sizeof("EPRT") - 1, ' ', '\r', ++ IP6_CT_FTP_EPRT, ++ try_eprt, ++ }, ++ { ++ IP6_CT_DIR_REPLY, ++ "229 ", sizeof("229 ") - 1, '(', ')', ++ IP6_CT_FTP_EPSV, ++ try_espv_response, ++ }, ++}; ++ ++/* This code is based on inet_pton() in glibc-2.2.4 */ ++ ++#define NS_IN6ADDRSZ 16 ++#define NS_INADDRSZ 4 ++#define NS_INT16SZ 2 ++ ++/* ++ * return the length of string of address parse untill error, ++ * dlen or reaching terminal char - kozakai ++ */ ++static int ++get_ipv6_addr(const char *src, u_int8_t *dst, size_t dlen, u_int8_t term) ++{ ++ static const char xdigits[] = "0123456789abcdef"; ++ u_int8_t tmp[NS_IN6ADDRSZ], *tp, *endp, *colonp; ++ const char *curtok; ++ int ch, saw_xdigit; ++ u_int32_t val; ++ size_t clen = 0; ++ ++ tp = memset(tmp, '\0', NS_IN6ADDRSZ); ++ endp = tp + NS_IN6ADDRSZ; ++ colonp = NULL; ++ ++ /* Leading :: requires some special handling. */ ++ if (*src == ':'){ ++ if (*++src != ':') ++ return (0); ++ clen++; ++ } ++ ++ curtok = src; ++ saw_xdigit = 0; ++ val = 0; ++ while ((clen < dlen) && (*src != term)) { ++ const char *pch; ++ ++ ch = tolower (*src++); ++ clen++; ++ ++ pch = strchr(xdigits, ch); ++ if (pch != NULL) { ++ val <<= 4; ++ val |= (pch - xdigits); ++ if (val > 0xffff) ++ return (0); ++ ++ saw_xdigit = 1; ++ continue; ++ } ++ if (ch == ':') { ++ curtok = src; ++ if (!saw_xdigit) { ++ if (colonp) ++ return (0); ++ colonp = tp; ++ continue; ++ } else if (*src == term) { ++ return (0); ++ } ++ if (tp + NS_INT16SZ > endp) ++ return (0); ++ *tp++ = (u_int8_t) (val >> 8) & 0xff; ++ *tp++ = (u_int8_t) val & 0xff; ++ saw_xdigit = 0; ++ val = 0; ++ continue; ++ } ++ return (0); ++ } ++ if (saw_xdigit) { ++ if (tp + NS_INT16SZ > endp) ++ return (0); ++ ++ *tp++ = (u_int8_t) (val >> 8) & 0xff; ++ *tp++ = (u_int8_t) val & 0xff; ++ } ++ if (colonp != NULL) { ++ /* ++ * Since some memmove()'s erroneously fail to handle ++ * overlapping regions, we'll do the shift by hand. ++ */ ++ const int n = tp - colonp; ++ int i; ++ ++ if (tp == endp) ++ return (0); ++ ++ for (i = 1; i <= n; i++) { ++ endp[- i] = colonp[n - i]; ++ colonp[n - i] = 0; ++ } ++ tp = endp; ++ } ++ if (tp != endp || (*src != term)) ++ return (0); ++ ++ memcpy(dst, tmp, NS_IN6ADDRSZ); ++ return clen; ++} ++ ++/* return length of port if succeed. */ ++static int get_port(const char *data, u_int16_t *port, size_t dlen, char term) ++{ ++ int i; ++ u_int16_t tmp_port = 0; ++ ++ for(i = 0; i < dlen; i++) { ++ /* Finished? */ ++ if(data[i] == term){ ++ *port = htons(tmp_port); ++ return i; ++ } ++ ++ if(data[i] < '0' || data[i] > '9') ++ return 0; ++ ++ tmp_port = tmp_port*10 + (data[i] - '0'); ++ } ++ return 0; ++} ++ ++/* Returns 0, or length of numbers: |1|132.235.1.2|6275| */ ++static int try_eprt(const char *data, size_t dlen, struct cmd_info *cmd, ++ char term) ++{ ++ char delim; ++ int len; ++ int addr_len; ++ ++ /* First character is delimiter, then "1" for IPv4, then ++ delimiter again. */ ++ ++ if (dlen <= 3) ++ return 0; ++ ++ delim = data[0]; ++ ++ if (isdigit(delim) || delim < 33 || delim > 126 ++ || data[1] != '2' || data[2] != delim){ ++ return 0; ++ } ++ DEBUGP("Got %c2%c\n", delim, delim); ++ ++ len = 3; ++ ++ /* Now we have IP address. */ ++ addr_len = get_ipv6_addr(&data[len], cmd->ip.s6_addr, ++ dlen - len, delim); ++ ++ if (addr_len == 0) ++ return 0; ++ ++ len += addr_len + 1; ++ ++ DEBUGP("Got IPv6 address!\n"); ++ ++ addr_len = get_port(&data[len], &cmd->port, dlen, delim); ++ ++ if(addr_len == 0) ++ return 0; ++ ++ len += addr_len + 1; ++ ++ return len; ++} ++ ++/* Returns 0, or length of numbers: |||6446| */ ++static int try_espv_response(const char *data, size_t dlen, ++ struct cmd_info *cmd, char term) ++{ ++ char delim; ++ size_t len; ++ ++ /* Three delimiters. */ ++ if (dlen <= 3) ++ return 0; ++ ++ delim = data[0]; ++ ++ if (isdigit(delim) || delim < 33 || delim > 126 ++ || data[1] != delim || data[2] != delim) ++ return 0; ++ ++ len = get_port(&data[3], &cmd->port, dlen, delim); ++ ++ if(len == 0) ++ return 0; ++ ++ return 3 + len + 1; ++} ++ ++/* Return 1 for match, 0 for accept, -1 for partial. */ ++static int find_pattern(const char *data, size_t dlen, ++ const char *pattern, size_t plen, ++ char skip, char term, ++ unsigned int *numoff, ++ unsigned int *numlen, ++ struct cmd_info *cmd, ++ int (*getnum)(const char *, size_t, struct cmd_info *, ++ char)) ++{ ++ size_t i; ++ ++ DEBUGP("find_pattern `%s': dlen = %u\n", pattern, dlen); ++ if (dlen == 0) ++ return 0; ++ ++ if (dlen <= plen) { ++ /* Short packet: try for partial? */ ++ if (strnicmp(data, pattern, dlen) == 0) ++ return -1; ++ else return 0; ++ } ++ ++ if (strnicmp(data, pattern, plen) != 0) { ++#if 0 ++ size_t i; ++ ++ DEBUGP("ftp: string mismatch\n"); ++ for (i = 0; i < plen; i++) { ++ DEBUGP("ftp:char %u `%c'(%u) vs `%c'(%u)\n", ++ i, data[i], data[i], ++ pattern[i], pattern[i]); ++ } ++#endif ++ return 0; ++ } ++ ++ DEBUGP("Pattern matches!\n"); ++ /* Now we've found the constant string, try to skip ++ to the 'skip' character */ ++ for (i = plen; data[i] != skip; i++) ++ if (i == dlen - 1) return -1; ++ ++ /* Skip over the last character */ ++ i++; ++ ++ DEBUGP("Skipped up to `%c'!\n", skip); ++ ++ *numoff = i; ++ *numlen = getnum(data + i, dlen - i, cmd, term); ++ if (!*numlen) ++ return -1; ++ ++ DEBUGP("Match succeeded!\n"); ++ return 1; ++} ++ ++static int help(const struct sk_buff *skb, ++ unsigned int protoff, ++ struct ip6_conntrack *ct, ++ enum ip6_conntrack_info ctinfo) ++{ ++ unsigned int dataoff, datalen; ++ struct tcphdr tcph; ++ u_int32_t old_seq_aft_nl; ++ int old_seq_aft_nl_set, ret; ++ int dir = CTINFO2DIR(ctinfo); ++ unsigned int matchlen, matchoff; ++ struct ip6_ct_ftp_master *ct_ftp_info = &ct->help.ct_ftp_info; ++ struct ip6_conntrack_expect expect, *exp = &expect; ++ struct ip6_ct_ftp_expect *exp_ftp_info = &exp->help.exp_ftp_info; ++ ++ unsigned int i; ++ int found = 0; ++ ++ struct ipv6hdr *ipv6h = skb->nh.ipv6h; ++ struct ip6_conntrack_tuple *t = &exp->tuple, *mask = &exp->mask; ++ struct cmd_info cmd; ++ unsigned int csum; ++ ++ /* Until there's been traffic both ways, don't look in packets. */ ++ if (ctinfo != IP6_CT_ESTABLISHED ++ && ctinfo != IP6_CT_ESTABLISHED+IP6_CT_IS_REPLY) { ++ DEBUGP("ftp: Conntrackinfo = %u\n", ctinfo); ++ return NF_ACCEPT; ++ } ++ ++ if (skb_copy_bits(skb, protoff, &tcph, sizeof(tcph)) != 0) ++ return NF_ACCEPT; ++ ++ dataoff = protoff + tcph.doff * 4; ++ /* No data? */ ++ if (dataoff >= skb->len) { ++ DEBUGP("ftp: dataoff(%u) >= skblen(%u)\n", dataoff, skb->len); ++ return NF_ACCEPT; ++ } ++ datalen = skb->len - dataoff; ++ ++ LOCK_BH(&ip6_ftp_lock); ++ ++ csum = skb_copy_and_csum_bits(skb, dataoff, ftp_buffer, ++ skb->len - dataoff, 0); ++ csum = skb_checksum(skb, protoff, tcph.doff * 4, csum); ++ ++ /* Checksum invalid? Ignore. */ ++ /* FIXME: Source route IP option packets --RR */ ++ if (csum_ipv6_magic(&ipv6h->saddr, &ipv6h->daddr, skb->len - protoff, ++ IPPROTO_TCP, csum)) { ++ DEBUGP("ftp_help: bad csum: %p %u\n" ++ "%x:%x:%x:%x:%x:%x:%x:%x -> %x:%x:%x:%x:%x:%x:%x:%x\n", ++ &tcph, skb->len - protoff, NIP6(ipv6h->saddr), ++ NIP6(ipv6h->daddr)); ++ ret = NF_ACCEPT; ++ goto out; ++ } ++ ++ old_seq_aft_nl_set = ct_ftp_info->seq_aft_nl_set[dir]; ++ old_seq_aft_nl = ct_ftp_info->seq_aft_nl[dir]; ++ ++ DEBUGP("conntrack_ftp: datalen %u\n", datalen); ++ if (ftp_buffer[datalen - 1] == '\n') { ++ DEBUGP("conntrack_ftp: datalen %u ends in \\n\n", datalen); ++ if (!old_seq_aft_nl_set ++ || after(ntohl(tcph.seq) + datalen, old_seq_aft_nl)) { ++ DEBUGP("conntrack_ftp: updating nl to %u\n", ++ ntohl(tcph.seq) + datalen); ++ ct_ftp_info->seq_aft_nl[dir] = ++ ntohl(tcph.seq) + datalen; ++ ct_ftp_info->seq_aft_nl_set[dir] = 1; ++ } ++ } ++ ++ if(!old_seq_aft_nl_set || ++ (ntohl(tcph.seq) != old_seq_aft_nl)) { ++ DEBUGP("ip6_conntrack_ftp_help: wrong seq pos %s(%u)\n", ++ old_seq_aft_nl_set ? "":"(UNSET) ", old_seq_aft_nl); ++ ret = NF_ACCEPT; ++ goto out; ++ } ++ ++ /* Initialize IP array to expected address (it's not mentioned ++ in EPSV responses) */ ++ ipv6_addr_copy(&cmd.ip, &ct->tuplehash[dir].tuple.src.ip); ++ ++ for (i = 0; i < ARRAY_SIZE(search); i++) { ++ if (search[i].dir != dir) continue; ++ ++ found = find_pattern(ftp_buffer, datalen, ++ search[i].pattern, ++ search[i].plen, ++ search[i].skip, ++ search[i].term, ++ &matchoff, &matchlen, ++ &cmd, ++ search[i].getnum); ++ if (found) break; ++ } ++ if (found == -1) { ++ /* We don't usually drop packets. After all, this is ++ connection tracking, not packet filtering. ++ However, it is neccessary for accurate tracking in ++ this case. */ ++ if (net_ratelimit()) ++ printk("conntrack_ftp: partial %s %u+%u\n", ++ search[i].pattern, ++ ntohl(tcph.seq), datalen); ++ ret = NF_DROP; ++ goto out; ++ } else if (found == 0) { /* No match */ ++ ret = NF_ACCEPT; ++ goto out; ++ } ++ ++ DEBUGP("conntrack_ftp: match `%.*s' (%u bytes at %u)\n", ++ (int)matchlen, ftp_buffer + matchoff, ++ matchlen, ntohl(tcph.seq) + matchoff); ++ ++ memset(&expect, 0, sizeof(expect)); ++ ++ /* Update the ftp info */ ++ if (!ipv6_addr_cmp(&cmd.ip, &ct->tuplehash[dir].tuple.src.ip)) { ++ exp->seq = ntohl(tcph.seq) + matchoff; ++ exp_ftp_info->len = matchlen; ++ exp_ftp_info->ftptype = search[i].ftptype; ++ exp_ftp_info->port = cmd.port; ++ } else { ++ /* ++ This situation is occurred with NAT. ++ */ ++ if (!loose) { ++ ret = NF_ACCEPT; ++ goto out; ++ } ++ } ++ ++ ipv6_addr_copy(&t->src.ip, &ct->tuplehash[!dir].tuple.src.ip); ++ ipv6_addr_copy(&t->dst.ip, &cmd.ip); ++ t->src.u.tcp.port = 0; ++ t->dst.u.tcp.port = cmd.port; ++ t->dst.protonum = IPPROTO_TCP; ++ ++ ipv6_addr_set(&mask->src.ip, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF); ++ mask->src.u.tcp.port = 0; ++ mask->dst.u.tcp.port = 0xFFFF; ++ mask->dst.protonum = 0xFFFF; ++ ++ exp->expectfn = NULL; ++ ++ /* Ignore failure; should only happen with NAT */ ++ ip6_conntrack_expect_related(ct, &expect); ++ ret = NF_ACCEPT; ++ out: ++ UNLOCK_BH(&ip6_ftp_lock); ++ return ret; ++} ++ ++static struct ip6_conntrack_helper ftp[MAX_PORTS]; ++static char ftp_names[MAX_PORTS][10]; ++ ++/* Not __exit: called from init() */ ++static void fini(void) ++{ ++ int i; ++ for (i = 0; i < ports_c; i++) { ++ DEBUGP("ip6_ct_ftp: unregistering helper for port %d\n", ++ ports[i]); ++ ip6_conntrack_helper_unregister(&ftp[i]); ++ } ++} ++ ++static int __init init(void) ++{ ++ int i, ret; ++ char *tmpname; ++ ++ if (ports[0] == 0) ++ ports[0] = FTP_PORT; ++ ++ for (i = 0; (i < MAX_PORTS) && ports[i]; i++) { ++ memset(&ftp[i], 0, sizeof(struct ip6_conntrack_helper)); ++ ftp[i].tuple.src.u.tcp.port = htons(ports[i]); ++ ftp[i].tuple.dst.protonum = IPPROTO_TCP; ++ ftp[i].mask.src.u.tcp.port = 0xFFFF; ++ ftp[i].mask.dst.protonum = 0xFFFF; ++ ftp[i].max_expected = 1; ++ ftp[i].timeout = 0; ++ ftp[i].flags = IP6_CT_HELPER_F_REUSE_EXPECT; ++ ftp[i].me = ip6_conntrack_ftp; ++ ftp[i].help = help; ++ ++ tmpname = &ftp_names[i][0]; ++ if (ports[i] == FTP_PORT) ++ sprintf(tmpname, "ftp"); ++ else ++ sprintf(tmpname, "ftp-%d", ports[i]); ++ ftp[i].name = tmpname; ++ ++ DEBUGP("ip6_ct_ftp: registering helper for port %d\n", ++ ports[i]); ++ ret = ip6_conntrack_helper_register(&ftp[i]); ++ ++ if (ret) { ++ fini(); ++ return ret; ++ } ++ ports_c++; ++ } ++ return 0; ++} ++ ++ ++PROVIDES_CONNTRACK6(ftp); ++EXPORT_SYMBOL(ip6_ftp_lock); ++MODULE_LICENSE("GPL"); ++module_init(init); ++module_exit(fini); +diff -urN linux-2.6.11/net/ipv6/netfilter/ip6_conntrack_proto_generic.c linux.sinabox/net/ipv6/netfilter/ip6_conntrack_proto_generic.c +--- linux-2.6.11/net/ipv6/netfilter/ip6_conntrack_proto_generic.c 1970-01-01 01:00:00.000000000 +0100 ++++ linux.sinabox/net/ipv6/netfilter/ip6_conntrack_proto_generic.c 2005-03-26 19:02:06.000000000 +0100 +@@ -0,0 +1,82 @@ ++/* ++ * IPv6 generic protocol extension for IPv6 connection tracking ++ * Linux INET6 implementation ++ * ++ * Copyright (C)2003 USAGI/WIDE Project ++ * ++ * Authors: ++ * Yasuyuki Kozakai ++ * ++ * Based on: net/ipv4/netfilter/ip_conntrack_proto_generic.c ++ * ++ * This program 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 ++ * 2 of the License, or (at your option) any later version. ++ */ ++ ++#include ++#include ++#include ++#include ++#include ++ ++#define GENERIC_TIMEOUT (600*HZ) ++ ++static int generic_pkt_to_tuple(const struct sk_buff *skb, ++ unsigned int dataoff, ++ struct ip6_conntrack_tuple *tuple) ++{ ++ tuple->src.u.all = 0; ++ tuple->dst.u.all = 0; ++ ++ return 1; ++} ++ ++static int generic_invert_tuple(struct ip6_conntrack_tuple *tuple, ++ const struct ip6_conntrack_tuple *orig) ++{ ++ tuple->src.u.all = 0; ++ tuple->dst.u.all = 0; ++ ++ return 1; ++} ++ ++/* Print out the per-protocol part of the tuple. */ ++static unsigned int generic_print_tuple(char *buffer, ++ const struct ip6_conntrack_tuple *tuple) ++{ ++ return 0; ++} ++ ++/* Print out the private part of the conntrack. */ ++static unsigned int generic_print_conntrack(char *buffer, ++ const struct ip6_conntrack *state) ++{ ++ return 0; ++} ++ ++/* Returns verdict for packet, or -1 for invalid. */ ++static int established(struct ip6_conntrack *conntrack, ++ const struct sk_buff *skb, ++ unsigned int dataoff, ++ enum ip6_conntrack_info conntrackinfo) ++{ ++ ip6_ct_refresh(conntrack, GENERIC_TIMEOUT); ++ return NF_ACCEPT; ++} ++ ++/* Called when a new connection for this protocol found. */ ++static int ++new(struct ip6_conntrack *conntrack, ++ const struct sk_buff *skb, ++ unsigned int dataoff) ++{ ++ return 1; ++} ++ ++struct ip6_conntrack_protocol ip6_conntrack_generic_protocol ++= { { NULL, NULL }, 0, "unknown", ++ generic_pkt_to_tuple, generic_invert_tuple, generic_print_tuple, ++ generic_print_conntrack, established, new, NULL, NULL, NULL }; ++ +diff -urN linux-2.6.11/net/ipv6/netfilter/ip6_conntrack_proto_icmpv6.c linux.sinabox/net/ipv6/netfilter/ip6_conntrack_proto_icmpv6.c +--- linux-2.6.11/net/ipv6/netfilter/ip6_conntrack_proto_icmpv6.c 1970-01-01 01:00:00.000000000 +0100 ++++ linux.sinabox/net/ipv6/netfilter/ip6_conntrack_proto_icmpv6.c 2005-03-26 19:02:06.000000000 +0100 +@@ -0,0 +1,135 @@ ++/* ++ * ICMPv6 extension for IPv6 connection tracking ++ * Linux INET6 implementation ++ * ++ * Copyright (C)2003 USAGI/WIDE Project ++ * ++ * Authors: ++ * Yasuyuki Kozakai ++ * ++ * Based on: net/ipv4/netfilter/ip_conntrack_proto_icmp.c ++ * ++ * This program 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 ++ * 2 of the License, or (at your option) any later version. ++ */ ++ ++#include ++#include ++#include ++#include ++#include ++#include ++#include ++ ++#define ICMPV6_TIMEOUT (30*HZ) ++ ++#if 0 ++#define DEBUGP printk ++#else ++#define DEBUGP(format, args...) ++#endif ++ ++static int icmpv6_pkt_to_tuple(const struct sk_buff *skb, ++ unsigned int dataoff, ++ struct ip6_conntrack_tuple *tuple) ++{ ++ struct icmp6hdr hdr; ++ ++ if (skb_copy_bits(skb, dataoff, &hdr, sizeof(hdr)) != 0) ++ return 0; ++ tuple->dst.u.icmpv6.type = hdr.icmp6_type; ++ tuple->src.u.icmpv6.id = hdr.icmp6_identifier; ++ tuple->dst.u.icmpv6.code = hdr.icmp6_code; ++ ++ return 1; ++} ++ ++static int icmpv6_invert_tuple(struct ip6_conntrack_tuple *tuple, ++ const struct ip6_conntrack_tuple *orig) ++{ ++ /* Add 1; spaces filled with 0. */ ++ static u_int8_t invmap[] = { ++ [ICMPV6_ECHO_REQUEST] = ICMPV6_ECHO_REPLY + 1, ++ [ICMPV6_ECHO_REPLY] = ICMPV6_ECHO_REQUEST + 1, ++ [ICMPV6_NI_QUERY] = ICMPV6_NI_QUERY + 1, ++ [ICMPV6_NI_REPLY] = ICMPV6_NI_REPLY +1 ++ }; ++ ++ if (orig->dst.u.icmpv6.type >= sizeof(invmap) ++ || !invmap[orig->dst.u.icmpv6.type]) ++ return 0; ++ ++ tuple->src.u.icmpv6.id = orig->src.u.icmpv6.id; ++ tuple->dst.u.icmpv6.type = invmap[orig->dst.u.icmpv6.type] - 1; ++ tuple->dst.u.icmpv6.code = orig->dst.u.icmpv6.code; ++ return 1; ++} ++ ++/* Print out the per-protocol part of the tuple. */ ++static unsigned int icmpv6_print_tuple(char *buffer, ++ const struct ip6_conntrack_tuple *tuple) ++{ ++ return sprintf(buffer, "type=%u code=%u id=%u ", ++ tuple->dst.u.icmpv6.type, ++ tuple->dst.u.icmpv6.code, ++ ntohs(tuple->src.u.icmpv6.id)); ++} ++ ++/* Print out the private part of the conntrack. */ ++static unsigned int icmpv6_print_conntrack(char *buffer, ++ const struct ip6_conntrack *conntrack) ++{ ++ return sprintf(buffer, "count=%u ", ++ atomic_read(&conntrack->proto.icmpv6.count)); ++} ++ ++/* Returns verdict for packet, or -1 for invalid. */ ++static int icmpv6_packet(struct ip6_conntrack *ct, ++ const struct sk_buff *skb, ++ unsigned int dataoff, ++ enum ip6_conntrack_info ctinfo) ++{ ++ /* Try to delete connection immediately after all replies: ++ won't actually vanish as we still have skb, and del_timer ++ means this will only run once even if count hits zero twice ++ (theoretically possible with SMP) */ ++ if (CTINFO2DIR(ctinfo) == IP6_CT_DIR_REPLY) { ++ if (atomic_dec_and_test(&ct->proto.icmpv6.count) ++ && del_timer(&ct->timeout)) ++ ct->timeout.function((unsigned long)ct); ++ } else { ++ atomic_inc(&ct->proto.icmpv6.count); ++ ip6_ct_refresh(ct, ICMPV6_TIMEOUT); ++ } ++ ++ return NF_ACCEPT; ++} ++ ++/* Called when a new connection for this protocol found. */ ++static int icmpv6_new(struct ip6_conntrack *conntrack, ++ const struct sk_buff *skb, ++ unsigned int dataoff) ++{ ++ static u_int8_t valid_new[] = { ++ [ICMPV6_ECHO_REQUEST] = 1, ++ [ICMPV6_NI_QUERY] = 1 ++ }; ++ ++ if (conntrack->tuplehash[0].tuple.dst.u.icmpv6.type >= sizeof(valid_new) ++ || !valid_new[conntrack->tuplehash[0].tuple.dst.u.icmpv6.type]) { ++ /* Can't create a new ICMPV6 `conn' with this. */ ++ DEBUGP("icmpv6: can't create new conn with type %u\n", ++ conntrack->tuplehash[0].tuple.dst.u.icmpv6.type); ++ DUMP_TUPLE(&conntrack->tuplehash[0].tuple); ++ return 0; ++ } ++ atomic_set(&conntrack->proto.icmpv6.count, 0); ++ return 1; ++} ++ ++struct ip6_conntrack_protocol ip6_conntrack_protocol_icmpv6 ++= { { NULL, NULL }, IPPROTO_ICMPV6, "icmpv6", ++ icmpv6_pkt_to_tuple, icmpv6_invert_tuple, icmpv6_print_tuple, ++ icmpv6_print_conntrack, icmpv6_packet, icmpv6_new, NULL, NULL, NULL }; +diff -urN linux-2.6.11/net/ipv6/netfilter/ip6_conntrack_proto_tcp.c linux.sinabox/net/ipv6/netfilter/ip6_conntrack_proto_tcp.c +--- linux-2.6.11/net/ipv6/netfilter/ip6_conntrack_proto_tcp.c 1970-01-01 01:00:00.000000000 +0100 ++++ linux.sinabox/net/ipv6/netfilter/ip6_conntrack_proto_tcp.c 2005-03-26 19:02:06.000000000 +0100 +@@ -0,0 +1,273 @@ ++/* ++ * TCP extension for IPv6 Connection Tracking ++ * Linux INET6 implementation ++ * ++ * Copyright (C)2003 USAGI/WIDE Project ++ * ++ * Authors: ++ * Yasuyuki Kozakai ++ * ++ * Based on: net/ipv4/netfilter/ip_conntrack_proto_tcp.c ++ * ++ * This program 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 ++ * 2 of the License, or (at your option) any later version. ++ */ ++ ++#include ++#include ++#include ++#include ++#include ++#include ++#include ++#include ++#include ++ ++#include ++ ++#include ++#include ++#include ++ ++#if 0 ++#define DEBUGP printk ++#else ++#define DEBUGP(format, args...) ++#endif ++ ++/* Protects conntrack->proto.tcp */ ++static DECLARE_RWLOCK(tcp_lock); ++ ++/* FIXME: Examine ipfilter's timeouts and conntrack transitions more ++ closely. They're more complex. --RR */ ++ ++/* Actually, I believe that neither ipmasq (where this code is stolen ++ from) nor ipfilter do it exactly right. A new conntrack machine taking ++ into account packet loss (which creates uncertainty as to exactly ++ the conntrack of the connection) is required. RSN. --RR */ ++ ++static const char *tcp_conntrack_names[] = { ++ "NONE", ++ "ESTABLISHED", ++ "SYN_SENT", ++ "SYN_RECV", ++ "FIN_WAIT", ++ "TIME_WAIT", ++ "CLOSE", ++ "CLOSE_WAIT", ++ "LAST_ACK", ++ "LISTEN" ++}; ++ ++#define SECS *HZ ++#define MINS * 60 SECS ++#define HOURS * 60 MINS ++#define DAYS * 24 HOURS ++ ++ ++static unsigned long tcp_timeouts[] ++= { 30 MINS, /* TCP_CONNTRACK_NONE, */ ++ 5 DAYS, /* TCP_CONNTRACK_ESTABLISHED, */ ++ 2 MINS, /* TCP_CONNTRACK_SYN_SENT, */ ++ 60 SECS, /* TCP_CONNTRACK_SYN_RECV, */ ++ 2 MINS, /* TCP_CONNTRACK_FIN_WAIT, */ ++ 2 MINS, /* TCP_CONNTRACK_TIME_WAIT, */ ++ 10 SECS, /* TCP_CONNTRACK_CLOSE, */ ++ 60 SECS, /* TCP_CONNTRACK_CLOSE_WAIT, */ ++ 30 SECS, /* TCP_CONNTRACK_LAST_ACK, */ ++ 2 MINS, /* TCP_CONNTRACK_LISTEN, */ ++}; ++ ++#define sNO TCP_CONNTRACK_NONE ++#define sES TCP_CONNTRACK_ESTABLISHED ++#define sSS TCP_CONNTRACK_SYN_SENT ++#define sSR TCP_CONNTRACK_SYN_RECV ++#define sFW TCP_CONNTRACK_FIN_WAIT ++#define sTW TCP_CONNTRACK_TIME_WAIT ++#define sCL TCP_CONNTRACK_CLOSE ++#define sCW TCP_CONNTRACK_CLOSE_WAIT ++#define sLA TCP_CONNTRACK_LAST_ACK ++#define sLI TCP_CONNTRACK_LISTEN ++#define sIV TCP_CONNTRACK_MAX ++ ++static enum tcp_conntrack tcp_conntracks[2][5][TCP_CONNTRACK_MAX] = { ++ { ++/* ORIGINAL */ ++/* sNO, sES, sSS, sSR, sFW, sTW, sCL, sCW, sLA, sLI */ ++/*syn*/ {sSS, sES, sSS, sSR, sSS, sSS, sSS, sSS, sSS, sLI }, ++/*fin*/ {sTW, sFW, sSS, sTW, sFW, sTW, sCL, sTW, sLA, sLI }, ++/*ack*/ {sES, sES, sSS, sES, sFW, sTW, sCL, sCW, sLA, sES }, ++/*rst*/ {sCL, sCL, sSS, sCL, sCL, sTW, sCL, sCL, sCL, sCL }, ++/*none*/{sIV, sIV, sIV, sIV, sIV, sIV, sIV, sIV, sIV, sIV } ++ }, ++ { ++/* REPLY */ ++/* sNO, sES, sSS, sSR, sFW, sTW, sCL, sCW, sLA, sLI */ ++/*syn*/ {sSR, sES, sSR, sSR, sSR, sSR, sSR, sSR, sSR, sSR }, ++/*fin*/ {sCL, sCW, sSS, sTW, sTW, sTW, sCL, sCW, sLA, sLI }, ++/*ack*/ {sCL, sES, sSS, sSR, sFW, sTW, sCL, sCW, sCL, sLI }, ++/*rst*/ {sCL, sCL, sCL, sCL, sCL, sCL, sCL, sCL, sLA, sLI }, ++/*none*/{sIV, sIV, sIV, sIV, sIV, sIV, sIV, sIV, sIV, sIV } ++ } ++}; ++ ++static int tcp_pkt_to_tuple(const struct sk_buff *skb, ++ unsigned int dataoff, ++ struct ip6_conntrack_tuple *tuple) ++{ ++ struct tcphdr hdr; ++ ++ /* Actually only need first 8 bytes. */ ++ if (skb_copy_bits(skb, dataoff, &hdr, 8) != 0) ++ return 0; ++ ++ tuple->src.u.tcp.port = hdr.source; ++ tuple->dst.u.tcp.port = hdr.dest; ++ ++ return 1; ++} ++ ++static int tcp_invert_tuple(struct ip6_conntrack_tuple *tuple, ++ const struct ip6_conntrack_tuple *orig) ++{ ++ tuple->src.u.tcp.port = orig->dst.u.tcp.port; ++ tuple->dst.u.tcp.port = orig->src.u.tcp.port; ++ return 1; ++} ++ ++/* Print out the per-protocol part of the tuple. */ ++static unsigned int tcp_print_tuple(char *buffer, ++ const struct ip6_conntrack_tuple *tuple) ++{ ++ return sprintf(buffer, "sport=%hu dport=%hu ", ++ ntohs(tuple->src.u.tcp.port), ++ ntohs(tuple->dst.u.tcp.port)); ++} ++ ++/* Print out the private part of the conntrack. */ ++static unsigned int tcp_print_conntrack(char *buffer, ++ const struct ip6_conntrack *conntrack) ++{ ++ enum tcp_conntrack state; ++ ++ READ_LOCK(&tcp_lock); ++ state = conntrack->proto.tcp.state; ++ READ_UNLOCK(&tcp_lock); ++ ++ return sprintf(buffer, "%s ", tcp_conntrack_names[state]); ++} ++ ++static unsigned int get_conntrack_index(const struct tcphdr *tcph) ++{ ++ if (tcph->rst) return 3; ++ else if (tcph->syn) return 0; ++ else if (tcph->fin) return 1; ++ else if (tcph->ack) return 2; ++ else return 4; ++} ++ ++/* Returns verdict for packet, or -1 for invalid. */ ++static int tcp_packet(struct ip6_conntrack *conntrack, ++ const struct sk_buff *skb, ++ unsigned int dataoff, ++ enum ip6_conntrack_info ctinfo) ++{ ++ enum tcp_conntrack newconntrack, oldtcpstate; ++ struct tcphdr tcph; ++ ++ if (skb_copy_bits(skb, dataoff, &tcph, sizeof(tcph)) != 0) ++ return -1; ++ ++ WRITE_LOCK(&tcp_lock); ++ oldtcpstate = conntrack->proto.tcp.state; ++ newconntrack ++ = tcp_conntracks ++ [CTINFO2DIR(ctinfo)] ++ [get_conntrack_index(&tcph)][oldtcpstate]; ++ ++ /* Invalid */ ++ if (newconntrack == TCP_CONNTRACK_MAX) { ++ DEBUGP("ip6_conntrack_tcp: Invalid dir=%i index=%u conntrack=%u\n", ++ CTINFO2DIR(ctinfo), get_conntrack_index(&tcph), ++ conntrack->proto.tcp.state); ++ WRITE_UNLOCK(&tcp_lock); ++ return -1; ++ } ++ ++ conntrack->proto.tcp.state = newconntrack; ++ ++ /* Poor man's window tracking: record SYN/ACK for handshake check */ ++ if (oldtcpstate == TCP_CONNTRACK_SYN_SENT ++ && CTINFO2DIR(ctinfo) == IP6_CT_DIR_REPLY ++ && tcph.syn && tcph.ack) ++ conntrack->proto.tcp.handshake_ack ++ = htonl(ntohl(tcph.seq) + 1); ++ ++ /* If only reply is a RST, we can consider ourselves not to ++ have an established connection: this is a fairly common ++ problem case, so we can delete the conntrack ++ immediately. --RR */ ++ if (!test_bit(IP6S_SEEN_REPLY_BIT, &conntrack->status) && tcph.rst) { ++ WRITE_UNLOCK(&tcp_lock); ++ if (del_timer(&conntrack->timeout)) ++ conntrack->timeout.function((unsigned long)conntrack); ++ } else { ++ /* Set ASSURED if we see see valid ack in ESTABLISHED after SYN_RECV */ ++ if (oldtcpstate == TCP_CONNTRACK_SYN_RECV ++ && CTINFO2DIR(ctinfo) == IP6_CT_DIR_ORIGINAL ++ && tcph.ack && !tcph.syn ++ && tcph.ack_seq == conntrack->proto.tcp.handshake_ack) ++ set_bit(IP6S_ASSURED_BIT, &conntrack->status); ++ ++ WRITE_UNLOCK(&tcp_lock); ++ ip6_ct_refresh(conntrack, tcp_timeouts[newconntrack]); ++ } ++ ++ return NF_ACCEPT; ++} ++ ++/* Called when a new connection for this protocol found. */ ++static int tcp_new(struct ip6_conntrack *conntrack, const struct sk_buff *skb, ++ unsigned int dataoff) ++{ ++ enum tcp_conntrack newconntrack; ++ struct tcphdr tcph; ++ ++ if (skb_copy_bits(skb, dataoff, &tcph, sizeof(tcph)) != 0) ++ return -1; ++ ++ /* Don't need lock here: this conntrack not in circulation yet */ ++ newconntrack ++ = tcp_conntracks[0][get_conntrack_index(&tcph)] ++ [TCP_CONNTRACK_NONE]; ++ ++ /* Invalid: delete conntrack */ ++ if (newconntrack == TCP_CONNTRACK_MAX) { ++ DEBUGP("ip6_conntrack_tcp: invalid new deleting.\n"); ++ return 0; ++ } ++ ++ conntrack->proto.tcp.state = newconntrack; ++ return 1; ++} ++ ++static int tcp_exp_matches_pkt(struct ip6_conntrack_expect *exp, ++ const struct sk_buff *skb, ++ unsigned int dataoff) ++{ ++ struct tcphdr tcph; ++ unsigned int datalen; ++ ++ if (skb_copy_bits(skb, dataoff, &tcph, sizeof(tcph)) != 0) ++ return 0; ++ datalen = skb->len - dataoff; ++ ++ return between(exp->seq, ntohl(tcph.seq), ntohl(tcph.seq) + datalen); ++} ++ ++struct ip6_conntrack_protocol ip6_conntrack_protocol_tcp ++= { { NULL, NULL }, IPPROTO_TCP, "tcp", ++ tcp_pkt_to_tuple, tcp_invert_tuple, tcp_print_tuple, tcp_print_conntrack, ++ tcp_packet, tcp_new, NULL, tcp_exp_matches_pkt, NULL }; +diff -urN linux-2.6.11/net/ipv6/netfilter/ip6_conntrack_proto_udp.c linux.sinabox/net/ipv6/netfilter/ip6_conntrack_proto_udp.c +--- linux-2.6.11/net/ipv6/netfilter/ip6_conntrack_proto_udp.c 1970-01-01 01:00:00.000000000 +0100 ++++ linux.sinabox/net/ipv6/netfilter/ip6_conntrack_proto_udp.c 2005-03-26 19:02:06.000000000 +0100 +@@ -0,0 +1,95 @@ ++/* ++ * UDP extension for IPv6 Connection Tracking ++ * Linux INET6 implementation ++ * ++ * Copyright (C)2003 USAGI/WIDE Project ++ * ++ * Authors: ++ * Yasuyuki Kozakai ++ * ++ * Based on: net/ipv4/netfilter/ip_conntrack_proto_udp.c ++ * ++ * This program 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 ++ * 2 of the License, or (at your option) any later version. ++ */ ++#include ++#include ++#include ++#include ++#include ++#include ++ ++#define UDP_TIMEOUT (30*HZ) ++#define UDP_STREAM_TIMEOUT (180*HZ) ++ ++static int udp_pkt_to_tuple(const struct sk_buff *skb, ++ unsigned int dataoff, ++ struct ip6_conntrack_tuple *tuple) ++{ ++ struct udphdr hdr; ++ ++ /* Actually only need first 8 bytes. */ ++ if (skb_copy_bits(skb, dataoff, &hdr, 8) != 0) ++ return 0; ++ ++ tuple->src.u.udp.port = hdr.source; ++ tuple->dst.u.udp.port = hdr.dest; ++ ++ return 1; ++} ++ ++static int udp_invert_tuple(struct ip6_conntrack_tuple *tuple, ++ const struct ip6_conntrack_tuple *orig) ++{ ++ tuple->src.u.udp.port = orig->dst.u.udp.port; ++ tuple->dst.u.udp.port = orig->src.u.udp.port; ++ return 1; ++} ++ ++/* Print out the per-protocol part of the tuple. */ ++static unsigned int udp_print_tuple(char *buffer, ++ const struct ip6_conntrack_tuple *tuple) ++{ ++ return sprintf(buffer, "sport=%hu dport=%hu ", ++ ntohs(tuple->src.u.udp.port), ++ ntohs(tuple->dst.u.udp.port)); ++} ++ ++/* Print out the private part of the conntrack. */ ++static unsigned int udp_print_conntrack(char *buffer, ++ const struct ip6_conntrack *conntrack) ++{ ++ return 0; ++} ++ ++/* Returns verdict for packet, and may modify conntracktype */ ++static int udp_packet(struct ip6_conntrack *conntrack, ++ const struct sk_buff *skb, ++ unsigned int dataoff, ++ enum ip6_conntrack_info conntrackinfo) ++{ ++ /* If we've seen traffic both ways, this is some kind of UDP ++ stream. Extend timeout. */ ++ if (test_bit(IP6S_SEEN_REPLY_BIT, &conntrack->status)) { ++ ip6_ct_refresh(conntrack, UDP_STREAM_TIMEOUT); ++ /* Also, more likely to be important, and not a probe */ ++ set_bit(IP6S_ASSURED_BIT, &conntrack->status); ++ } else ++ ip6_ct_refresh(conntrack, UDP_TIMEOUT); ++ ++ return NF_ACCEPT; ++} ++ ++/* Called when a new connection for this protocol found. */ ++static int udp_new(struct ip6_conntrack *conntrack, const struct sk_buff *skb, ++ unsigned int dataoff) ++{ ++ return 1; ++} ++ ++struct ip6_conntrack_protocol ip6_conntrack_protocol_udp ++= { { NULL, NULL }, IPPROTO_UDP, "udp", ++ udp_pkt_to_tuple, udp_invert_tuple, udp_print_tuple, udp_print_conntrack, ++ udp_packet, udp_new, NULL, NULL, NULL }; +diff -urN linux-2.6.11/net/ipv6/netfilter/ip6_conntrack_reasm.c linux.sinabox/net/ipv6/netfilter/ip6_conntrack_reasm.c +--- linux-2.6.11/net/ipv6/netfilter/ip6_conntrack_reasm.c 1970-01-01 01:00:00.000000000 +0100 ++++ linux.sinabox/net/ipv6/netfilter/ip6_conntrack_reasm.c 2005-03-26 19:02:06.000000000 +0100 +@@ -0,0 +1,990 @@ ++/* ++ * IPv6 fragment reassembly for connection tracking ++ * Linux INET6 implementation ++ * ++ * Copyright (C)2003 USAGI/WIDE Project ++ * ++ * Authors: ++ * Yasuyuki Kozakai ++ * ++ * Based on: net/ipv6/reassembly.c ++ * ++ * This program 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 ++ * 2 of the License, or (at your option) any later version. ++ */ ++ ++#include ++#include ++#include ++#include ++#include ++#include ++#include ++#include ++#include ++#include ++#include ++#include ++#include ++#include ++#include ++ ++#include ++#include ++ ++#include ++#include ++#include ++#include ++#include ++#include ++#include ++#include ++#include ++#include ++#include ++ ++#if 0 ++#define DEBUGP printk ++#else ++#define DEBUGP(format, args...) ++#endif ++ ++#define IP6CT_FRAGS_HIGH_THRESH 262144 /* == 256*1024 */ ++#define IP6CT_FRAGS_LOW_THRESH 196608 /* == 192*1024 */ ++#define IP6CT_FRAGS_TIMEOUT IPV6_FRAG_TIMEOUT ++ ++static int sysctl_ip6_ct_frag_high_thresh = 256*1024; ++static int sysctl_ip6_ct_frag_low_thresh = 192*1024; ++static int sysctl_ip6_ct_frag_time = IPV6_FRAG_TIMEOUT; ++ ++struct ip6ct_frag_skb_cb ++{ ++ struct inet6_skb_parm h; ++ int offset; ++ struct sk_buff *orig; ++}; ++ ++#define IP6CT_FRAG6_CB(skb) ((struct ip6ct_frag_skb_cb*)((skb)->cb)) ++ ++ ++/* ++ * Equivalent of ipv4 struct ipq ++ */ ++ ++struct ip6ct_frag_queue ++{ ++ struct ip6ct_frag_queue *next; ++ struct list_head lru_list; /* lru list member */ ++ ++ __u32 id; /* fragment id */ ++ struct in6_addr saddr; ++ struct in6_addr daddr; ++ ++ spinlock_t lock; ++ atomic_t refcnt; ++ struct timer_list timer; /* expire timer */ ++ struct sk_buff *fragments; ++ int len; ++ int meat; ++ struct timeval stamp; ++ unsigned int csum; ++ __u8 last_in; /* has first/last segment arrived? */ ++#define COMPLETE 4 ++#define FIRST_IN 2 ++#define LAST_IN 1 ++ __u16 nhoffset; ++ struct ip6ct_frag_queue **pprev; ++}; ++ ++/* Hash table. */ ++ ++#define IP6CT_Q_HASHSZ 64 ++ ++static struct ip6ct_frag_queue *ip6_ct_frag_hash[IP6CT_Q_HASHSZ]; ++static rwlock_t ip6_ct_frag_lock = RW_LOCK_UNLOCKED; ++static u32 ip6_ct_frag_hash_rnd; ++static LIST_HEAD(ip6_ct_frag_lru_list); ++int ip6_ct_frag_nqueues = 0; ++ ++static __inline__ void __fq_unlink(struct ip6ct_frag_queue *fq) ++{ ++ if(fq->next) ++ fq->next->pprev = fq->pprev; ++ *fq->pprev = fq->next; ++ list_del(&fq->lru_list); ++ ip6_ct_frag_nqueues--; ++} ++ ++static __inline__ void fq_unlink(struct ip6ct_frag_queue *fq) ++{ ++ write_lock(&ip6_ct_frag_lock); ++ __fq_unlink(fq); ++ write_unlock(&ip6_ct_frag_lock); ++} ++ ++static unsigned int ip6qhashfn(u32 id, struct in6_addr *saddr, ++ struct in6_addr *daddr) ++{ ++ u32 a, b, c; ++ ++ a = saddr->s6_addr32[0]; ++ b = saddr->s6_addr32[1]; ++ c = saddr->s6_addr32[2]; ++ ++ a += JHASH_GOLDEN_RATIO; ++ b += JHASH_GOLDEN_RATIO; ++ c += ip6_ct_frag_hash_rnd; ++ __jhash_mix(a, b, c); ++ ++ a += saddr->s6_addr32[3]; ++ b += daddr->s6_addr32[0]; ++ c += daddr->s6_addr32[1]; ++ __jhash_mix(a, b, c); ++ ++ a += daddr->s6_addr32[2]; ++ b += daddr->s6_addr32[3]; ++ c += id; ++ __jhash_mix(a, b, c); ++ ++ return c & (IP6CT_Q_HASHSZ - 1); ++} ++ ++static struct timer_list ip6_ct_frag_secret_timer; ++int sysctl_ip6_ct_frag_secret_interval = 10 * 60 * HZ; ++ ++static void ip6_ct_frag_secret_rebuild(unsigned long dummy) ++{ ++ unsigned long now = jiffies; ++ int i; ++ ++ write_lock(&ip6_ct_frag_lock); ++ get_random_bytes(&ip6_ct_frag_hash_rnd, sizeof(u32)); ++ for (i = 0; i < IP6CT_Q_HASHSZ; i++) { ++ struct ip6ct_frag_queue *q; ++ ++ q = ip6_ct_frag_hash[i]; ++ while (q) { ++ struct ip6ct_frag_queue *next = q->next; ++ unsigned int hval = ip6qhashfn(q->id, ++ &q->saddr, ++ &q->daddr); ++ ++ if (hval != i) { ++ /* Unlink. */ ++ if (q->next) ++ q->next->pprev = q->pprev; ++ *q->pprev = q->next; ++ ++ /* Relink to new hash chain. */ ++ if ((q->next = ip6_ct_frag_hash[hval]) != NULL) ++ q->next->pprev = &q->next; ++ ip6_ct_frag_hash[hval] = q; ++ q->pprev = &ip6_ct_frag_hash[hval]; ++ } ++ ++ q = next; ++ } ++ } ++ write_unlock(&ip6_ct_frag_lock); ++ ++ mod_timer(&ip6_ct_frag_secret_timer, now + sysctl_ip6_ct_frag_secret_interval); ++} ++ ++atomic_t ip6_ct_frag_mem = ATOMIC_INIT(0); ++ ++/* Memory Tracking Functions. */ ++static inline void frag_kfree_skb(struct sk_buff *skb) ++{ ++ atomic_sub(skb->truesize, &ip6_ct_frag_mem); ++ if (IP6CT_FRAG6_CB(skb)->orig) ++ kfree_skb(IP6CT_FRAG6_CB(skb)->orig); ++ ++ kfree_skb(skb); ++} ++ ++static inline void frag_free_queue(struct ip6ct_frag_queue *fq) ++{ ++ atomic_sub(sizeof(struct ip6ct_frag_queue), &ip6_ct_frag_mem); ++ kfree(fq); ++} ++ ++static inline struct ip6ct_frag_queue *frag_alloc_queue(void) ++{ ++ struct ip6ct_frag_queue *fq = kmalloc(sizeof(struct ip6ct_frag_queue), GFP_ATOMIC); ++ ++ if(!fq) ++ return NULL; ++ atomic_add(sizeof(struct ip6ct_frag_queue), &ip6_ct_frag_mem); ++ return fq; ++} ++ ++/* Destruction primitives. */ ++ ++/* Complete destruction of fq. */ ++static void ip6_ct_frag_destroy(struct ip6ct_frag_queue *fq) ++{ ++ struct sk_buff *fp; ++ ++ BUG_TRAP(fq->last_in&COMPLETE); ++ BUG_TRAP(del_timer(&fq->timer) == 0); ++ ++ /* Release all fragment data. */ ++ fp = fq->fragments; ++ while (fp) { ++ struct sk_buff *xp = fp->next; ++ ++ frag_kfree_skb(fp); ++ fp = xp; ++ } ++ ++ frag_free_queue(fq); ++} ++ ++static __inline__ void fq_put(struct ip6ct_frag_queue *fq) ++{ ++ if (atomic_dec_and_test(&fq->refcnt)) ++ ip6_ct_frag_destroy(fq); ++} ++ ++/* Kill fq entry. It is not destroyed immediately, ++ * because caller (and someone more) holds reference count. ++ */ ++static __inline__ void fq_kill(struct ip6ct_frag_queue *fq) ++{ ++ if (del_timer(&fq->timer)) ++ atomic_dec(&fq->refcnt); ++ ++ if (!(fq->last_in & COMPLETE)) { ++ fq_unlink(fq); ++ atomic_dec(&fq->refcnt); ++ fq->last_in |= COMPLETE; ++ } ++} ++ ++static void ip6_ct_frag_evictor(void) ++{ ++ struct ip6ct_frag_queue *fq; ++ struct list_head *tmp; ++ ++ for(;;) { ++ if (atomic_read(&ip6_ct_frag_mem) <= sysctl_ip6_ct_frag_low_thresh) ++ return; ++ read_lock(&ip6_ct_frag_lock); ++ if (list_empty(&ip6_ct_frag_lru_list)) { ++ read_unlock(&ip6_ct_frag_lock); ++ return; ++ } ++ tmp = ip6_ct_frag_lru_list.next; ++ fq = list_entry(tmp, struct ip6ct_frag_queue, lru_list); ++ atomic_inc(&fq->refcnt); ++ read_unlock(&ip6_ct_frag_lock); ++ ++ spin_lock(&fq->lock); ++ if (!(fq->last_in&COMPLETE)) ++ fq_kill(fq); ++ spin_unlock(&fq->lock); ++ ++ fq_put(fq); ++ } ++} ++ ++static void ip6_ct_frag_expire(unsigned long data) ++{ ++ struct ip6ct_frag_queue *fq = (struct ip6ct_frag_queue *) data; ++ ++ spin_lock(&fq->lock); ++ ++ if (fq->last_in & COMPLETE) ++ goto out; ++ ++ fq_kill(fq); ++ ++out: ++ spin_unlock(&fq->lock); ++ fq_put(fq); ++} ++ ++/* Creation primitives. */ ++ ++ ++static struct ip6ct_frag_queue *ip6_ct_frag_intern(unsigned int hash, ++ struct ip6ct_frag_queue *fq_in) ++{ ++ struct ip6ct_frag_queue *fq; ++ ++ write_lock(&ip6_ct_frag_lock); ++#ifdef CONFIG_SMP ++ for (fq = ip6_ct_frag_hash[hash]; fq; fq = fq->next) { ++ if (fq->id == fq_in->id && ++ !ipv6_addr_cmp(&fq_in->saddr, &fq->saddr) && ++ !ipv6_addr_cmp(&fq_in->daddr, &fq->daddr)) { ++ atomic_inc(&fq->refcnt); ++ write_unlock(&ip6_ct_frag_lock); ++ fq_in->last_in |= COMPLETE; ++ fq_put(fq_in); ++ return fq; ++ } ++ } ++#endif ++ fq = fq_in; ++ ++ if (!mod_timer(&fq->timer, jiffies + sysctl_ip6_ct_frag_time)) ++ atomic_inc(&fq->refcnt); ++ ++ atomic_inc(&fq->refcnt); ++ if((fq->next = ip6_ct_frag_hash[hash]) != NULL) ++ fq->next->pprev = &fq->next; ++ ip6_ct_frag_hash[hash] = fq; ++ fq->pprev = &ip6_ct_frag_hash[hash]; ++ INIT_LIST_HEAD(&fq->lru_list); ++ list_add_tail(&fq->lru_list, &ip6_ct_frag_lru_list); ++ ip6_ct_frag_nqueues++; ++ write_unlock(&ip6_ct_frag_lock); ++ return fq; ++} ++ ++ ++static struct ip6ct_frag_queue * ++ip6_ct_frag_create(unsigned int hash, u32 id, struct in6_addr *src, struct in6_addr *dst) ++{ ++ struct ip6ct_frag_queue *fq; ++ ++ if ((fq = frag_alloc_queue()) == NULL) { ++ DEBUGP("Can't alloc new queue\n"); ++ goto oom; ++ } ++ ++ memset(fq, 0, sizeof(struct ip6ct_frag_queue)); ++ ++ fq->id = id; ++ ipv6_addr_copy(&fq->saddr, src); ++ ipv6_addr_copy(&fq->daddr, dst); ++ ++ init_timer(&fq->timer); ++ fq->timer.function = ip6_ct_frag_expire; ++ fq->timer.data = (long) fq; ++ fq->lock = SPIN_LOCK_UNLOCKED; ++ atomic_set(&fq->refcnt, 1); ++ ++ return ip6_ct_frag_intern(hash, fq); ++ ++oom: ++ return NULL; ++} ++ ++static __inline__ struct ip6ct_frag_queue * ++fq_find(u32 id, struct in6_addr *src, struct in6_addr *dst) ++{ ++ struct ip6ct_frag_queue *fq; ++ unsigned int hash = ip6qhashfn(id, src, dst); ++ ++ read_lock(&ip6_ct_frag_lock); ++ for(fq = ip6_ct_frag_hash[hash]; fq; fq = fq->next) { ++ if (fq->id == id && ++ !ipv6_addr_cmp(src, &fq->saddr) && ++ !ipv6_addr_cmp(dst, &fq->daddr)) { ++ atomic_inc(&fq->refcnt); ++ read_unlock(&ip6_ct_frag_lock); ++ return fq; ++ } ++ } ++ read_unlock(&ip6_ct_frag_lock); ++ ++ return ip6_ct_frag_create(hash, id, src, dst); ++} ++ ++ ++static int ip6_ct_frag_queue(struct ip6ct_frag_queue *fq, struct sk_buff *skb, ++ struct frag_hdr *fhdr, int nhoff) ++{ ++ struct sk_buff *prev, *next; ++ int offset, end; ++ ++ if (fq->last_in & COMPLETE) { ++ DEBUGP("Allready completed\n"); ++ goto err; ++ } ++ ++ offset = ntohs(fhdr->frag_off) & ~0x7; ++ end = offset + (ntohs(skb->nh.ipv6h->payload_len) - ++ ((u8 *) (fhdr + 1) - (u8 *) (skb->nh.ipv6h + 1))); ++ ++ if ((unsigned int)end > IPV6_MAXPLEN) { ++ DEBUGP("offset is too large.\n"); ++ return -1; ++ } ++ ++ if (skb->ip_summed == CHECKSUM_HW) ++ skb->csum = csum_sub(skb->csum, ++ csum_partial(skb->nh.raw, (u8*)(fhdr+1)-skb->nh.raw, 0)); ++ ++ /* Is this the final fragment? */ ++ if (!(fhdr->frag_off & htons(IP6_MF))) { ++ /* If we already have some bits beyond end ++ * or have different end, the segment is corrupted. ++ */ ++ if (end < fq->len || ++ ((fq->last_in & LAST_IN) && end != fq->len)) { ++ DEBUGP("already received last fragment\n"); ++ goto err; ++ } ++ fq->last_in |= LAST_IN; ++ fq->len = end; ++ } else { ++ /* Check if the fragment is rounded to 8 bytes. ++ * Required by the RFC. ++ */ ++ if (end & 0x7) { ++ /* RFC2460 says always send parameter problem in ++ * this case. -DaveM ++ */ ++ DEBUGP("the end of this message is not rounded to 8 bytes.\n"); ++ return -1; ++ } ++ if (end > fq->len) { ++ /* Some bits beyond end -> corruption. */ ++ if (fq->last_in & LAST_IN) { ++ DEBUGP("last packet already reached.\n"); ++ goto err; ++ } ++ fq->len = end; ++ } ++ } ++ ++ if (end == offset) ++ goto err; ++ ++ /* Point into the IP datagram 'data' part. */ ++ if (!pskb_pull(skb, (u8 *) (fhdr + 1) - skb->data)) { ++ DEBUGP("queue: message is too short.\n"); ++ goto err; ++ } ++ if (end-offset < skb->len) { ++ if (pskb_trim(skb, end - offset)) { ++ DEBUGP("Can't trim\n"); ++ goto err; ++ } ++ if (skb->ip_summed != CHECKSUM_UNNECESSARY) ++ skb->ip_summed = CHECKSUM_NONE; ++ } ++ ++ /* Find out which fragments are in front and at the back of us ++ * in the chain of fragments so far. We must know where to put ++ * this fragment, right? ++ */ ++ prev = NULL; ++ for(next = fq->fragments; next != NULL; next = next->next) { ++ if (IP6CT_FRAG6_CB(next)->offset >= offset) ++ break; /* bingo! */ ++ prev = next; ++ } ++ ++ /* We found where to put this one. Check for overlap with ++ * preceding fragment, and, if needed, align things so that ++ * any overlaps are eliminated. ++ */ ++ if (prev) { ++ int i = (IP6CT_FRAG6_CB(prev)->offset + prev->len) - offset; ++ ++ if (i > 0) { ++ offset += i; ++ if (end <= offset) { ++ DEBUGP("overlap\n"); ++ goto err; ++ } ++ if (!pskb_pull(skb, i)) { ++ DEBUGP("Can't pull\n"); ++ goto err; ++ } ++ if (skb->ip_summed != CHECKSUM_UNNECESSARY) ++ skb->ip_summed = CHECKSUM_NONE; ++ } ++ } ++ ++ /* Look for overlap with succeeding segments. ++ * If we can merge fragments, do it. ++ */ ++ while (next && IP6CT_FRAG6_CB(next)->offset < end) { ++ int i = end - IP6CT_FRAG6_CB(next)->offset; /* overlap is 'i' bytes */ ++ ++ if (i < next->len) { ++ /* Eat head of the next overlapped fragment ++ * and leave the loop. The next ones cannot overlap. ++ */ ++ DEBUGP("Eat head of the overlapped parts.: %d", i); ++ if (!pskb_pull(next, i)) ++ goto err; ++ IP6CT_FRAG6_CB(next)->offset += i; /* next fragment */ ++ fq->meat -= i; ++ if (next->ip_summed != CHECKSUM_UNNECESSARY) ++ next->ip_summed = CHECKSUM_NONE; ++ break; ++ } else { ++ struct sk_buff *free_it = next; ++ ++ /* Old fragmnet is completely overridden with ++ * new one drop it. ++ */ ++ next = next->next; ++ ++ if (prev) ++ prev->next = next; ++ else ++ fq->fragments = next; ++ ++ fq->meat -= free_it->len; ++ frag_kfree_skb(free_it); ++ } ++ } ++ ++ IP6CT_FRAG6_CB(skb)->offset = offset; ++ ++ /* Insert this fragment in the chain of fragments. */ ++ skb->next = next; ++ if (prev) ++ prev->next = skb; ++ else ++ fq->fragments = skb; ++ ++ skb->dev = NULL; ++ fq->stamp = skb->stamp; ++ fq->meat += skb->len; ++ atomic_add(skb->truesize, &ip6_ct_frag_mem); ++ ++ /* The first fragment. ++ * nhoffset is obtained from the first fragment, of course. ++ */ ++ if (offset == 0) { ++ fq->nhoffset = nhoff; ++ fq->last_in |= FIRST_IN; ++ } ++ write_lock(&ip6_ct_frag_lock); ++ list_move_tail(&fq->lru_list, &ip6_ct_frag_lru_list); ++ write_unlock(&ip6_ct_frag_lock); ++ return 0; ++ ++err: ++ return -1; ++} ++ ++/* ++ * Check if this packet is complete. ++ * Returns NULL on failure by any reason, and pointer ++ * to current nexthdr field in reassembled frame. ++ * ++ * It is called with locked fq, and caller must check that ++ * queue is eligible for reassembly i.e. it is not COMPLETE, ++ * the last and the first frames arrived and all the bits are here. ++ */ ++static struct sk_buff * ++ip6_ct_frag_reasm(struct ip6ct_frag_queue *fq, struct net_device *dev) ++{ ++ struct sk_buff *fp, *op, *head = fq->fragments; ++ int payload_len; ++ ++ fq_kill(fq); ++ ++ BUG_TRAP(head != NULL); ++ BUG_TRAP(IP6CT_FRAG6_CB(head)->offset == 0); ++ ++ /* Unfragmented part is taken from the first segment. */ ++ payload_len = (head->data - head->nh.raw) - sizeof(struct ipv6hdr) + fq->len - sizeof(struct frag_hdr); ++ if (payload_len > IPV6_MAXPLEN) { ++ DEBUGP("payload len is too large.\n"); ++ goto out_oversize; ++ } ++ ++ /* Head of list must not be cloned. */ ++ if (skb_cloned(head) && pskb_expand_head(head, 0, 0, GFP_ATOMIC)) { ++ DEBUGP("skb is cloned but can't expand head"); ++ goto out_oom; ++ } ++ ++ /* If the first fragment is fragmented itself, we split ++ * it to two chunks: the first with data and paged part ++ * and the second, holding only fragments. */ ++ if (skb_shinfo(head)->frag_list) { ++ struct sk_buff *clone; ++ int i, plen = 0; ++ ++ if ((clone = alloc_skb(0, GFP_ATOMIC)) == NULL) { ++ DEBUGP("Can't alloc skb\n"); ++ goto out_oom; ++ } ++ clone->next = head->next; ++ head->next = clone; ++ skb_shinfo(clone)->frag_list = skb_shinfo(head)->frag_list; ++ skb_shinfo(head)->frag_list = NULL; ++ for (i=0; inr_frags; i++) ++ plen += skb_shinfo(head)->frags[i].size; ++ clone->len = clone->data_len = head->data_len - plen; ++ head->data_len -= clone->len; ++ head->len -= clone->len; ++ clone->csum = 0; ++ clone->ip_summed = head->ip_summed; ++ ++ IP6CT_FRAG6_CB(clone)->orig = NULL; ++ atomic_add(clone->truesize, &ip6_ct_frag_mem); ++ } ++ ++ /* We have to remove fragment header from datagram and to relocate ++ * header in order to calculate ICV correctly. */ ++ head->nh.raw[fq->nhoffset] = head->h.raw[0]; ++ memmove(head->head + sizeof(struct frag_hdr), head->head, ++ (head->data - head->head) - sizeof(struct frag_hdr)); ++ head->mac.raw += sizeof(struct frag_hdr); ++ head->nh.raw += sizeof(struct frag_hdr); ++ ++ skb_shinfo(head)->frag_list = head->next; ++ head->h.raw = head->data; ++ skb_push(head, head->data - head->nh.raw); ++ atomic_sub(head->truesize, &ip6_ct_frag_mem); ++ ++ for (fp=head->next; fp; fp = fp->next) { ++ head->data_len += fp->len; ++ head->len += fp->len; ++ if (head->ip_summed != fp->ip_summed) ++ head->ip_summed = CHECKSUM_NONE; ++ else if (head->ip_summed == CHECKSUM_HW) ++ head->csum = csum_add(head->csum, fp->csum); ++ head->truesize += fp->truesize; ++ atomic_sub(fp->truesize, &ip6_ct_frag_mem); ++ } ++ ++ head->next = NULL; ++ head->dev = dev; ++ head->stamp = fq->stamp; ++ head->nh.ipv6h->payload_len = ntohs(payload_len); ++ ++ /* Yes, and fold redundant checksum back. 8) */ ++ if (head->ip_summed == CHECKSUM_HW) ++ head->csum = csum_partial(head->nh.raw, head->h.raw-head->nh.raw, head->csum); ++ ++ fq->fragments = NULL; ++ ++ /* all original skbs are linked into the IP6CT_FRAG6_CB(head).orig */ ++ fp = skb_shinfo(head)->frag_list; ++ if (IP6CT_FRAG6_CB(fp)->orig == NULL) ++ /* at above code, head skb is divided into two skbs. */ ++ fp = fp->next; ++ ++ op = IP6CT_FRAG6_CB(head)->orig; ++ for (; fp; fp = fp->next) { ++ struct sk_buff *orig = IP6CT_FRAG6_CB(fp)->orig; ++ ++ op->next = orig; ++ op = orig; ++ IP6CT_FRAG6_CB(fp)->orig = NULL; ++ } ++ ++ return head; ++ ++out_oversize: ++ if (net_ratelimit()) ++ printk(KERN_DEBUG "ip6_ct_frag_reasm: payload len = %d\n", payload_len); ++ goto out_fail; ++out_oom: ++ if (net_ratelimit()) ++ printk(KERN_DEBUG "ip6_ct_frag_reasm: no memory for reassembly\n"); ++out_fail: ++ return NULL; ++} ++ ++/* ++ * find the header just before Fragment Header. ++ * ++ * if success return 0 and set ... ++ * (*prevhdrp): the value of "Next Header Field" in the header ++ * just before Fragment Header. ++ * (*prevhoff): the offset of "Next Header Field" in the header ++ * just before Fragment Header. ++ * (*fhoff) : the offset of Fragment Header. ++ * ++ * Based on ipv6_skip_hdr() in net/ipv6/exthdr.c ++ * ++ */ ++static int ++find_prev_fhdr(struct sk_buff *skb, u8 *prevhdrp, int *prevhoff, int *fhoff) ++{ ++ u8 nexthdr = skb->nh.ipv6h->nexthdr; ++ u8 prev_nhoff = (u8 *)&skb->nh.ipv6h->nexthdr - skb->data; ++ int start = (u8 *)(skb->nh.ipv6h+1) - skb->data; ++ int len = skb->len - start; ++ u8 prevhdr = NEXTHDR_IPV6; ++ ++ while (nexthdr != NEXTHDR_FRAGMENT) { ++ struct ipv6_opt_hdr hdr; ++ int hdrlen; ++ ++ if (!ipv6_ext_hdr(nexthdr)) { ++ return -1; ++ } ++ if (len < (int)sizeof(struct ipv6_opt_hdr)) { ++ DEBUGP("too short\n"); ++ return -1; ++ } ++ if (nexthdr == NEXTHDR_NONE) { ++ DEBUGP("next header is none\n"); ++ return -1; ++ } ++ if (skb_copy_bits(skb, start, &hdr, sizeof(hdr))) ++ BUG(); ++ if (nexthdr == NEXTHDR_AUTH) ++ hdrlen = (hdr.hdrlen+2)<<2; ++ else ++ hdrlen = ipv6_optlen(&hdr); ++ ++ prevhdr = nexthdr; ++ prev_nhoff = start; ++ ++ nexthdr = hdr.nexthdr; ++ len -= hdrlen; ++ start += hdrlen; ++ } ++ ++ if (len < 0) ++ return -1; ++ ++ *prevhdrp = prevhdr; ++ *prevhoff = prev_nhoff; ++ *fhoff = start; ++ ++ return 0; ++} ++ ++struct sk_buff *ip6_ct_gather_frags(struct sk_buff *skb) ++{ ++ struct sk_buff *clone; ++ struct net_device *dev = skb->dev; ++ struct frag_hdr *fhdr; ++ struct ip6ct_frag_queue *fq; ++ struct ipv6hdr *hdr; ++ int fhoff, nhoff; ++ u8 prevhdr; ++ struct sk_buff *ret_skb = NULL; ++ ++ /* Jumbo payload inhibits frag. header */ ++ if (skb->nh.ipv6h->payload_len == 0) { ++ DEBUGP("payload len = 0\n"); ++ return skb; ++ } ++ ++ if (find_prev_fhdr(skb, &prevhdr, &nhoff, &fhoff) < 0) ++ return skb; ++ ++ clone = skb_clone(skb, GFP_ATOMIC); ++ if (clone == NULL) { ++ DEBUGP("Can't clone skb\n"); ++ return skb; ++ } ++ ++ IP6CT_FRAG6_CB(clone)->orig = skb; ++ ++ if (!pskb_may_pull(clone, fhoff + sizeof(*fhdr))) { ++ DEBUGP("message is too short.\n"); ++ goto ret_orig; ++ } ++ ++ clone->h.raw = clone->data + fhoff; ++ hdr = clone->nh.ipv6h; ++ fhdr = (struct frag_hdr *)clone->h.raw; ++ ++ if (!(fhdr->frag_off & htons(0xFFF9))) { ++ DEBUGP("Invalid fragment offset\n"); ++ /* It is not a fragmented frame */ ++ goto ret_orig; ++ } ++ ++ if (atomic_read(&ip6_ct_frag_mem) > sysctl_ip6_ct_frag_high_thresh) ++ ip6_ct_frag_evictor(); ++ ++ if ((fq = fq_find(fhdr->identification, &hdr->saddr, &hdr->daddr)) == NULL) { ++ DEBUGP("Can't find and can't create new queue\n"); ++ goto ret_orig; ++ } ++ ++ spin_lock(&fq->lock); ++ ++ if (ip6_ct_frag_queue(fq, clone, fhdr, nhoff) < 0) { ++ spin_unlock(&fq->lock); ++ DEBUGP("Can't insert skb to queue\n"); ++ fq_put(fq); ++ goto ret_orig; ++ } ++ ++ if (fq->last_in == (FIRST_IN|LAST_IN) && ++ fq->meat == fq->len) { ++ ret_skb = ip6_ct_frag_reasm(fq, dev); ++ ++ if (ret_skb == NULL) ++ DEBUGP("Can't reassemble fragmented packets\n"); ++ } ++ spin_unlock(&fq->lock); ++ ++ fq_put(fq); ++ return ret_skb; ++ ++ret_orig: ++ kfree_skb(clone); ++ return skb; ++} ++ ++int ip6_ct_output_frags(struct sk_buff *skb, struct nf_info *info) ++{ ++ struct sk_buff *s, *s2; ++ struct nf_info *copy_info; ++ ++ for (s = IP6CT_FRAG6_CB(skb)->orig; s;) { ++ if (skb->nfct) ++ nf_conntrack_get(skb->nfct); ++ s->nfct = skb->nfct; ++ s->nfcache = skb->nfcache; ++ ++ /* ++ * nf_reinject() frees copy_info, ++ * so I have to copy it every time. (T-T ++ */ ++ copy_info = kmalloc(sizeof(*copy_info), GFP_ATOMIC); ++ if (copy_info == NULL) { ++ DEBUGP("Can't kmalloc() for nf_info\n"); ++ return -1; ++ } ++ ++ copy_info->pf = info->pf; ++ copy_info->hook = info->hook; ++ copy_info->indev = info->indev; ++ copy_info->outdev = info->outdev; ++ copy_info->okfn = info->okfn; ++ copy_info->elem = info->elem; ++ ++ /* ++ * nf_reinject() put the module "ip6_conntrack". ++ */ ++ if (!try_module_get(info->elem->owner)) { ++ DEBUGP("Can't get module.\n"); ++ kfree_skb(s); ++ continue; ++ } ++ ++ if (copy_info->indev) ++ dev_hold(copy_info->indev); ++ if (copy_info->outdev) ++ dev_hold(copy_info->outdev); ++ ++ s2 = s->next; ++ nf_reinject(s, copy_info, NF_ACCEPT); ++ s = s2; ++ } ++ ++ kfree_skb(skb); ++ ++ return 0; ++} ++ ++int ip6_ct_kfree_frags(struct sk_buff *skb) ++{ ++ struct sk_buff *s, *s2; ++ ++ for (s = IP6CT_FRAG6_CB(skb)->orig; s; s = s2) { ++ ++ s2 = s->next; ++ kfree_skb(s); ++ } ++ ++ kfree_skb(skb); ++ ++ return 0; ++} ++ ++#ifdef CONFIG_SYSCTL ++ ++#define IP6CT_HIGH_THRESH_NAME "ip6ct_frags_high_thresh" ++#define IP6CT_LOW_THRESH_NAME "ip6ct_frags_low_thresh" ++#define IP6CT_TIMEOUT_NAME "ip6ct_frags_timeout" ++ ++static struct ctl_table_header *ip6_ct_frags_sysctl_header; ++ ++static ctl_table ip6_ct_frags_table[] = { ++ { ++ .ctl_name = IP6CT_FRAGS_HIGH_THRESH, ++ .procname = IP6CT_HIGH_THRESH_NAME, ++ .data = &sysctl_ip6_ct_frag_high_thresh, ++ .maxlen = sizeof(sysctl_ip6_ct_frag_high_thresh), ++ .mode = 0644, ++ .proc_handler = proc_dointvec ++ }, ++ { ++ .ctl_name = IP6CT_FRAGS_LOW_THRESH, ++ .procname = IP6CT_LOW_THRESH_NAME, ++ .data = &sysctl_ip6_ct_frag_low_thresh, ++ .maxlen = sizeof(sysctl_ip6_ct_frag_high_thresh), ++ .mode = 0644, ++ .proc_handler = proc_dointvec ++ }, ++ { ++ .ctl_name = IP6CT_FRAGS_TIMEOUT, ++ .procname = IP6CT_TIMEOUT_NAME, ++ .data = &sysctl_ip6_ct_frag_time, ++ .maxlen = sizeof(sysctl_ip6_ct_frag_time), ++ .mode = 0644, ++ .proc_handler = proc_dointvec ++ }, ++ { .ctl_name = 0 } ++}; ++ ++static ctl_table ip6_ct_frags_dir_table[] = { ++ { ++ .ctl_name = NET_IPV6, ++ .procname = "ipv6", NULL, ++ .mode = 0555, ++ .child = ip6_ct_frags_table ++ }, ++ { .ctl_name = 0 } ++}; ++ ++static ctl_table ip6_ct_frags_root_table[] = { ++ { ++ .ctl_name = CTL_NET, ++ .procname = "net", ++ .mode = 0555, ++ .child = ip6_ct_frags_dir_table ++ }, ++ { .ctl_name = 0 } ++}; ++ ++#endif /*CONFIG_SYSCTL*/ ++ ++int __init ip6_ct_frags_init(void) ++{ ++#ifdef CONFIG_SYSCTL ++ ip6_ct_frags_sysctl_header = register_sysctl_table(ip6_ct_frags_root_table, 0); ++ ++ if (ip6_ct_frags_sysctl_header == NULL) { ++ printk("ip6_ct_frags_init: Can't register sysctl tables.\n"); ++ return -ENOMEM; ++ } ++#endif ++ ++ ip6_ct_frag_hash_rnd = (u32) ((num_physpages ^ (num_physpages>>7)) ^ ++ (jiffies ^ (jiffies >> 6))); ++ ++ init_timer(&ip6_ct_frag_secret_timer); ++ ip6_ct_frag_secret_timer.function = ip6_ct_frag_secret_rebuild; ++ ip6_ct_frag_secret_timer.expires = jiffies + sysctl_ip6_ct_frag_secret_interval; ++ add_timer(&ip6_ct_frag_secret_timer); ++ ++ return 0; ++} ++ ++void ip6_ct_frags_cleanup(void) ++{ ++ del_timer(&ip6_ct_frag_secret_timer); ++#ifdef CONFIG_SYSCTL ++ unregister_sysctl_table(ip6_ct_frags_sysctl_header); ++#endif ++ sysctl_ip6_ct_frag_low_thresh = 0; ++ ip6_ct_frag_evictor(); ++} +diff -urN linux-2.6.11/net/ipv6/netfilter/ip6_conntrack_standalone.c linux.sinabox/net/ipv6/netfilter/ip6_conntrack_standalone.c +--- linux-2.6.11/net/ipv6/netfilter/ip6_conntrack_standalone.c 1970-01-01 01:00:00.000000000 +0100 ++++ linux.sinabox/net/ipv6/netfilter/ip6_conntrack_standalone.c 2005-03-26 19:02:06.000000000 +0100 +@@ -0,0 +1,502 @@ ++/* ++ * IPv6 Connection Tracking ++ * Linux INET6 implementation ++ * ++ * Copyright (C)2003 USAGI/WIDE Project ++ * ++ * Authors: ++ * Yasuyuki Kozakai ++ * ++ * Based on: net/ipv4/netfilter/ip_conntrack_standalone.c ++ * ++ * This program 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 ++ * 2 of the License, or (at your option) any later version. ++ */ ++ ++/* This file contains all the functions required for the standalone ++ ip6_conntrack module. ++ ++ These are not required by the compatibility layer. ++*/ ++ ++/* (c) 1999 Paul `Rusty' Russell. Licenced under the GNU General ++ Public Licence. */ ++ ++#include ++#include ++#include ++#include ++#include ++#include ++#include ++#include ++#include ++ ++#define ASSERT_READ_LOCK(x) MUST_BE_READ_LOCKED(&ip6_conntrack_lock) ++#define ASSERT_WRITE_LOCK(x) MUST_BE_WRITE_LOCKED(&ip6_conntrack_lock) ++ ++#include ++#include ++#include ++#include ++#include ++#include ++ ++#if 0 ++#define DEBUGP printk ++#else ++#define DEBUGP(format, args...) ++#endif ++ ++MODULE_LICENSE("GPL"); ++ ++static int kill_proto(const struct ip6_conntrack *i, void *data) ++{ ++ return (i->tuplehash[IP6_CT_DIR_ORIGINAL].tuple.dst.protonum == ++ *((u_int8_t *) data)); ++} ++ ++static unsigned int ++print_tuple(char *buffer, const struct ip6_conntrack_tuple *tuple, ++ struct ip6_conntrack_protocol *proto) ++{ ++ int len; ++ ++ len = sprintf(buffer, "src=%x:%x:%x:%x:%x:%x:%x:%x dst=%x:%x:%x:%x:%x:%x:%x:%x ", ++ NIP6(tuple->src.ip), NIP6(tuple->dst.ip)); ++ ++ len += proto->print_tuple(buffer + len, tuple); ++ ++ return len; ++} ++ ++/* FIXME: Don't print source proto part. --RR */ ++static unsigned int ++print_expect(char *buffer, const struct ip6_conntrack_expect *expect) ++{ ++ unsigned int len; ++ ++ if (expect->expectant->helper->timeout) ++ len = sprintf(buffer, "EXPECTING: %lu ", ++ timer_pending(&expect->timeout) ++ ? (expect->timeout.expires - jiffies)/HZ : 0); ++ else ++ len = sprintf(buffer, "EXPECTING: - "); ++ len += sprintf(buffer + len, "use=%u proto=%u ", ++ atomic_read(&expect->use), expect->tuple.dst.protonum); ++ len += print_tuple(buffer + len, &expect->tuple, ++ __ip6_ct_find_proto(expect->tuple.dst.protonum)); ++ len += sprintf(buffer + len, "\n"); ++ return len; ++} ++ ++static unsigned int ++print_conntrack(char *buffer, struct ip6_conntrack *conntrack) ++{ ++ unsigned int len; ++ struct ip6_conntrack_protocol *proto ++ = __ip6_ct_find_proto(conntrack->tuplehash[IP6_CT_DIR_ORIGINAL] ++ .tuple.dst.protonum); ++ ++ len = sprintf(buffer, "%-8s %u %lu ", ++ proto->name, ++ conntrack->tuplehash[IP6_CT_DIR_ORIGINAL] ++ .tuple.dst.protonum, ++ timer_pending(&conntrack->timeout) ++ ? (conntrack->timeout.expires - jiffies)/HZ : 0); ++ ++ len += proto->print_conntrack(buffer + len, conntrack); ++ len += print_tuple(buffer + len, ++ &conntrack->tuplehash[IP6_CT_DIR_ORIGINAL].tuple, ++ proto); ++ if (!(test_bit(IP6S_SEEN_REPLY_BIT, &conntrack->status))) ++ len += sprintf(buffer + len, "[UNREPLIED] "); ++ len += print_tuple(buffer + len, ++ &conntrack->tuplehash[IP6_CT_DIR_REPLY].tuple, ++ proto); ++ if (test_bit(IP6S_ASSURED_BIT, &conntrack->status)) ++ len += sprintf(buffer + len, "[ASSURED] "); ++ len += sprintf(buffer + len, "use=%u ", ++ atomic_read(&conntrack->ct_general.use)); ++ len += sprintf(buffer + len, "\n"); ++ ++ return len; ++} ++ ++/* Returns true when finished. */ ++static inline int ++conntrack_iterate(const struct ip6_conntrack_tuple_hash *hash, ++ char *buffer, off_t offset, off_t *upto, ++ unsigned int *len, unsigned int maxlen) ++{ ++ unsigned int newlen; ++ IP6_NF_ASSERT(hash->ctrack); ++ ++ MUST_BE_READ_LOCKED(&ip6_conntrack_lock); ++ ++ /* Only count originals */ ++ if (DIRECTION(hash)) ++ return 0; ++ ++ if ((*upto)++ < offset) ++ return 0; ++ ++ newlen = print_conntrack(buffer + *len, hash->ctrack); ++ if (*len + newlen > maxlen) ++ return 1; ++ else *len += newlen; ++ ++ return 0; ++} ++ ++static int ++list_conntracks(char *buffer, char **start, off_t offset, int length) ++{ ++ unsigned int i; ++ unsigned int len = 0; ++ off_t upto = 0; ++ struct list_head *e; ++ ++ READ_LOCK(&ip6_conntrack_lock); ++ /* Traverse hash; print originals then reply. */ ++ for (i = 0; i < ip6_conntrack_htable_size; i++) { ++ if (LIST_FIND(&ip6_conntrack_hash[i], conntrack_iterate, ++ struct ip6_conntrack_tuple_hash *, ++ buffer, offset, &upto, &len, length)) ++ goto finished; ++ } ++ ++ /* Now iterate through expecteds. */ ++ for (e = ip6_conntrack_expect_list.next; ++ e != &ip6_conntrack_expect_list; e = e->next) { ++ unsigned int last_len; ++ struct ip6_conntrack_expect *expect ++ = (struct ip6_conntrack_expect *)e; ++ if (upto++ < offset) continue; ++ ++ last_len = len; ++ len += print_expect(buffer + len, expect); ++ if (len > length) { ++ len = last_len; ++ goto finished; ++ } ++ } ++ ++ finished: ++ READ_UNLOCK(&ip6_conntrack_lock); ++ ++ /* `start' hack - see fs/proc/generic.c line ~165 */ ++ *start = (char *)((unsigned int)upto - offset); ++ return len; ++} ++ ++static unsigned int ip6_confirm(unsigned int hooknum, ++ struct sk_buff **pskb, ++ const struct net_device *in, ++ const struct net_device *out, ++ int (*okfn)(struct sk_buff *)); ++static unsigned int ip6_conntrack_out(unsigned int hooknum, ++ struct sk_buff **pskb, ++ const struct net_device *in, ++ const struct net_device *out, ++ int (*okfn)(struct sk_buff *)); ++static unsigned int ip6_conntrack_reasm(unsigned int hooknum, ++ struct sk_buff **pskb, ++ const struct net_device *in, ++ const struct net_device *out, ++ int (*okfn)(struct sk_buff *)); ++static unsigned int ip6_conntrack_local(unsigned int hooknum, ++ struct sk_buff **pskb, ++ const struct net_device *in, ++ const struct net_device *out, ++ int (*okfn)(struct sk_buff *)); ++ ++/* Connection tracking may drop packets, but never alters them, so ++ make it the first hook. */ ++static struct nf_hook_ops ip6_conntrack_in_ops = { ++ /* Don't forget to change .hook to "ip6_conntrack_input". - zak */ ++ .hook = ip6_conntrack_reasm, ++ .owner = THIS_MODULE, ++ .pf = PF_INET6, ++ .hooknum = NF_IP6_PRE_ROUTING, ++ .priority = NF_IP6_PRI_CONNTRACK, ++}; ++ ++static struct nf_hook_ops ip6_conntrack_local_out_ops = { ++ .hook = ip6_conntrack_local, ++ .owner = THIS_MODULE, ++ .pf = PF_INET6, ++ .hooknum = NF_IP6_LOCAL_OUT, ++ .priority = NF_IP6_PRI_CONNTRACK, ++}; ++ ++/* Refragmenter; last chance. */ ++static struct nf_hook_ops ip6_conntrack_out_ops = { ++ .hook = ip6_conntrack_out, ++ .owner = THIS_MODULE, ++ .pf = PF_INET6, ++ .hooknum = NF_IP6_POST_ROUTING, ++ .priority = NF_IP6_PRI_LAST, ++}; ++ ++static struct nf_hook_ops ip6_conntrack_local_in_ops = { ++ .hook = ip6_confirm, ++ .owner = THIS_MODULE, ++ .pf = PF_INET6, ++ .hooknum = NF_IP6_LOCAL_IN, ++ .priority = NF_IP6_PRI_LAST-1, ++}; ++ ++static unsigned int ip6_confirm(unsigned int hooknum, ++ struct sk_buff **pskb, ++ const struct net_device *in, ++ const struct net_device *out, ++ int (*okfn)(struct sk_buff *)) ++{ ++ int ret; ++ ++ ret = ip6_conntrack_confirm(*pskb); ++ ++ return ret; ++} ++ ++static unsigned int ip6_conntrack_out(unsigned int hooknum, ++ struct sk_buff **pskb, ++ const struct net_device *in, ++ const struct net_device *out, ++ int (*okfn)(struct sk_buff *)) ++{ ++ ++ if (ip6_conntrack_confirm(*pskb) != NF_ACCEPT) ++ return NF_DROP; ++ ++ return NF_ACCEPT; ++} ++ ++static unsigned int ip6_conntrack_reasm(unsigned int hooknum, ++ struct sk_buff **pskb, ++ const struct net_device *in, ++ const struct net_device *out, ++ int (*okfn)(struct sk_buff *)) ++{ ++ struct sk_buff *skb = *pskb; ++ struct sk_buff **rsmd_pskb = &skb; ++ int fragd = 0; ++ int ret; ++ ++ skb->nfcache |= NFC_UNKNOWN; ++ ++ /* ++ * Previously seen (loopback)? Ignore. Do this before ++ * fragment check. ++ */ ++ if (skb->nfct) { ++ DEBUGP("previously seen\n"); ++ return NF_ACCEPT; ++ } ++ ++ skb = ip6_ct_gather_frags(skb); ++ ++ /* queued */ ++ if (skb == NULL) ++ return NF_STOLEN; ++ ++ if (skb != (*pskb)) ++ fragd = 1; ++ ++ ret = ip6_conntrack_in(hooknum, rsmd_pskb, in, out, okfn); ++ ++ if (!fragd) ++ return ret; ++ ++ if (ret == NF_DROP) { ++ ip6_ct_kfree_frags(skb); ++ }else{ ++ struct nf_info info; ++ ++ info.pf = PF_INET6; ++ info.hook = hooknum; ++ info.indev = in; ++ info.outdev = out; ++ info.okfn = okfn; ++ switch (hooknum) { ++ case NF_IP6_PRE_ROUTING: ++ info.elem = &ip6_conntrack_in_ops; ++ break; ++ case NF_IP6_LOCAL_OUT: ++ info.elem = &ip6_conntrack_local_out_ops; ++ break; ++ } ++ ++ if (ip6_ct_output_frags(skb, &info) <0) ++ DEBUGP("Can't output fragments\n"); ++ ++ } ++ ++ return NF_STOLEN; ++} ++ ++static unsigned int ip6_conntrack_local(unsigned int hooknum, ++ struct sk_buff **pskb, ++ const struct net_device *in, ++ const struct net_device *out, ++ int (*okfn)(struct sk_buff *)) ++{ ++ unsigned int ret; ++ ++ /* root is playing with raw sockets. */ ++ if ((*pskb)->len < sizeof(struct ipv6hdr)) { ++ if (net_ratelimit()) ++ printk("ip6t_hook: IPv6 header is too short.\n"); ++ return NF_ACCEPT; ++ } ++ ++ ret = ip6_conntrack_reasm(hooknum, pskb, in, out, okfn); ++ ++ return ret; ++} ++ ++static int init_or_cleanup(int init) ++{ ++ struct proc_dir_entry *proc; ++ int ret = 0; ++ ++ if (!init) goto cleanup; ++ ++ ret = ip6_ct_frags_init(); ++ if (ret < 0) ++ goto cleanup_reasm; ++ ++ ret = ip6_conntrack_init(); ++ if (ret < 0) ++ goto cleanup_nothing; ++ ++ proc = proc_net_create("ip6_conntrack",0,list_conntracks); ++ if (!proc) goto cleanup_init; ++ proc->owner = THIS_MODULE; ++ ++ ret = nf_register_hook(&ip6_conntrack_in_ops); ++ if (ret < 0) { ++ printk("ip6_conntrack: can't register pre-routing hook.\n"); ++ goto cleanup_proc; ++ } ++ ret = nf_register_hook(&ip6_conntrack_local_out_ops); ++ if (ret < 0) { ++ printk("ip6_conntrack: can't register local out hook.\n"); ++ goto cleanup_inops; ++ } ++ ret = nf_register_hook(&ip6_conntrack_out_ops); ++ if (ret < 0) { ++ printk("ip6_conntrack: can't register post-routing hook.\n"); ++ goto cleanup_inandlocalops; ++ } ++ ret = nf_register_hook(&ip6_conntrack_local_in_ops); ++ if (ret < 0) { ++ printk("ip6_conntrack: can't register local in hook.\n"); ++ goto cleanup_inoutandlocalops; ++ } ++ ++ return ret; ++ ++ cleanup: ++ nf_unregister_hook(&ip6_conntrack_local_in_ops); ++ cleanup_inoutandlocalops: ++ nf_unregister_hook(&ip6_conntrack_out_ops); ++ cleanup_inandlocalops: ++ nf_unregister_hook(&ip6_conntrack_local_out_ops); ++ cleanup_inops: ++ nf_unregister_hook(&ip6_conntrack_in_ops); ++ cleanup_proc: ++ proc_net_remove("ip6_conntrack"); ++ cleanup_init: ++ ip6_conntrack_cleanup(); ++ cleanup_reasm: ++ ip6_ct_frags_cleanup(); ++ cleanup_nothing: ++ return ret; ++} ++ ++/* FIXME: Allow NULL functions and sub in pointers to generic for ++ them. --RR */ ++int ip6_conntrack_protocol_register(struct ip6_conntrack_protocol *proto) ++{ ++ int ret = 0; ++ struct list_head *i; ++ ++ WRITE_LOCK(&ip6_conntrack_lock); ++ for (i = ip6_protocol_list.next; i != &ip6_protocol_list; i = i->next) { ++ if (((struct ip6_conntrack_protocol *)i)->proto ++ == proto->proto) { ++ ret = -EBUSY; ++ goto out; ++ } ++ } ++ ++ list_prepend(&ip6_protocol_list, proto); ++ ++ out: ++ WRITE_UNLOCK(&ip6_conntrack_lock); ++ return ret; ++} ++ ++void ip6_conntrack_protocol_unregister(struct ip6_conntrack_protocol *proto) ++{ ++ WRITE_LOCK(&ip6_conntrack_lock); ++ ++ /* ip_ct_find_proto() returns proto_generic in case there is no protocol ++ * helper. So this should be enough - HW */ ++ LIST_DELETE(&ip6_protocol_list, proto); ++ WRITE_UNLOCK(&ip6_conntrack_lock); ++ ++ /* Somebody could be still looking at the proto in bh. */ ++ synchronize_net(); ++ ++ /* Remove all contrack entries for this protocol */ ++ ip6_ct_selective_cleanup(kill_proto, &proto->proto); ++} ++ ++static int __init init(void) ++{ ++ return init_or_cleanup(1); ++} ++ ++static void __exit fini(void) ++{ ++ init_or_cleanup(0); ++} ++ ++module_init(init); ++module_exit(fini); ++ ++/* Some modules need us, but don't depend directly on any symbol. ++ They should call this. */ ++void need_ip6_conntrack(void) ++{ ++} ++ ++EXPORT_SYMBOL(ip6_conntrack_protocol_register); ++EXPORT_SYMBOL(ip6_conntrack_protocol_unregister); ++EXPORT_SYMBOL(ip6_invert_tuplepr); ++EXPORT_SYMBOL(ip6_conntrack_alter_reply); ++EXPORT_SYMBOL(ip6_conntrack_destroyed); ++EXPORT_SYMBOL(ip6_conntrack_get); ++EXPORT_SYMBOL(need_ip6_conntrack); ++EXPORT_SYMBOL(ip6_conntrack_helper_register); ++EXPORT_SYMBOL(ip6_conntrack_helper_unregister); ++EXPORT_SYMBOL(ip6_ct_selective_cleanup); ++EXPORT_SYMBOL(ip6_ct_refresh); ++EXPORT_SYMBOL(ip6_ct_find_proto); ++EXPORT_SYMBOL(__ip6_ct_find_proto); ++EXPORT_SYMBOL(ip6_ct_find_helper); ++EXPORT_SYMBOL(ip6_conntrack_expect_related); ++EXPORT_SYMBOL(ip6_conntrack_unexpect_related); ++EXPORT_SYMBOL_GPL(ip6_conntrack_expect_find_get); ++EXPORT_SYMBOL_GPL(ip6_conntrack_expect_put); ++EXPORT_SYMBOL(ip6_conntrack_tuple_taken); ++EXPORT_SYMBOL(ip6_conntrack_htable_size); ++EXPORT_SYMBOL(ip6_conntrack_expect_list); ++EXPORT_SYMBOL(ip6_conntrack_lock); ++EXPORT_SYMBOL_GPL(ip6_conntrack_find_get); ++EXPORT_SYMBOL_GPL(ip6_conntrack_put); +diff -urN linux-2.6.11/net/ipv6/netfilter/ip6t_IMQ.c linux.sinabox/net/ipv6/netfilter/ip6t_IMQ.c +--- linux-2.6.11/net/ipv6/netfilter/ip6t_IMQ.c 1970-01-01 01:00:00.000000000 +0100 ++++ linux.sinabox/net/ipv6/netfilter/ip6t_IMQ.c 2005-03-26 00:49:04.000000000 +0100 +@@ -0,0 +1,78 @@ ++/* ++ * This target marks packets to be enqueued to an imq device ++ */ ++#include ++#include ++#include ++#include ++#include ++ ++static unsigned int imq_target(struct sk_buff **pskb, ++ unsigned int hooknum, ++ const struct net_device *in, ++ const struct net_device *out, ++ const void *targinfo, ++ void *userdata) ++{ ++ struct ip6t_imq_info *mr = (struct ip6t_imq_info*)targinfo; ++ ++ (*pskb)->imq_flags = mr->todev | IMQ_F_ENQUEUE; ++ (*pskb)->nfcache |= NFC_ALTERED; ++ ++ return IP6T_CONTINUE; ++} ++ ++static int imq_checkentry(const char *tablename, ++ const struct ip6t_entry *e, ++ void *targinfo, ++ unsigned int targinfosize, ++ unsigned int hook_mask) ++{ ++ struct ip6t_imq_info *mr; ++ ++ if (targinfosize != IP6T_ALIGN(sizeof(struct ip6t_imq_info))) { ++ printk(KERN_WARNING "IMQ: invalid targinfosize\n"); ++ return 0; ++ } ++ mr = (struct ip6t_imq_info*)targinfo; ++ ++ if (strcmp(tablename, "mangle") != 0) { ++ printk(KERN_WARNING ++ "IMQ: IMQ can only be called from \"mangle\" table, not \"%s\"\n", ++ tablename); ++ return 0; ++ } ++ ++ if (mr->todev > IMQ_MAX_DEVS) { ++ printk(KERN_WARNING ++ "IMQ: invalid device specified, highest is %u\n", ++ IMQ_MAX_DEVS); ++ return 0; ++ } ++ ++ return 1; ++} ++ ++static struct ip6t_target ip6t_imq_reg = { ++ .name = "IMQ", ++ .target = imq_target, ++ .checkentry = imq_checkentry, ++ .me = THIS_MODULE ++}; ++ ++static int __init init(void) ++{ ++ if (ip6t_register_target(&ip6t_imq_reg)) ++ return -EINVAL; ++ ++ return 0; ++} ++ ++static void __exit fini(void) ++{ ++ ip6t_unregister_target(&ip6t_imq_reg); ++} ++ ++module_init(init); ++module_exit(fini); ++MODULE_LICENSE("GPL"); +diff -urN linux-2.6.11/net/ipv6/netfilter/ip6t_REJECT.c linux.sinabox/net/ipv6/netfilter/ip6t_REJECT.c +--- linux-2.6.11/net/ipv6/netfilter/ip6t_REJECT.c 1970-01-01 01:00:00.000000000 +0100 ++++ linux.sinabox/net/ipv6/netfilter/ip6t_REJECT.c 2005-03-26 19:02:06.000000000 +0100 +@@ -0,0 +1,453 @@ ++/* ++ * IP6 tables REJECT target module ++ * Linux INET6 implementation ++ * ++ * Copyright (C)2003 USAGI/WIDE Project ++ * ++ * Authors: ++ * Yasuyuki Kozakai ++ * ++ * Based on net/ipv4/netfilter/ipt_REJECT.c ++ * ++ * This program 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 ++ * 2 of the License, or (at your option) any later version. ++ */ ++ ++/* This module works well with IPv6 Connection Tracking. - kozakai */ ++ ++#include ++#include ++#include ++#include ++#include ++#include ++#include ++#include ++#include ++#include ++#include ++#include ++ ++MODULE_AUTHOR("Yasuyuki KOZAKAI "); ++MODULE_DESCRIPTION("IP6 tables REJECT target module"); ++MODULE_LICENSE("GPL"); ++ ++#if 0 ++#define DEBUGP printk ++#else ++#define DEBUGP(format, args...) ++#endif ++ ++static void connection_attach(struct sk_buff *new_skb, struct sk_buff *skb) ++{ ++ void (*attach)(struct sk_buff *, struct sk_buff *); ++ if (skb->nfct && (attach = ip6_ct_attach) != NULL) { ++ mb(); ++ attach(new_skb, skb); ++ } ++} ++ ++static int maybe_reroute(struct sk_buff *skb) ++{ ++ if (skb->nfcache & NFC_ALTERED){ ++ if (ip6_route_me_harder(skb) != 0){ ++ kfree_skb(skb); ++ return -EINVAL; ++ } ++ } ++ ++ return dst_output(skb); ++} ++ ++/* Send RST reply */ ++static void send_reset(struct sk_buff *oldskb) ++{ ++ struct sk_buff *nskb; ++ struct tcphdr otcph, *tcph; ++ unsigned int otcplen, tcphoff, hh_len; ++ int needs_ack; ++ struct ipv6hdr *oip6h = oldskb->nh.ipv6h, *ip6h; ++ struct dst_entry *dst = NULL; ++ u8 proto = oip6h->nexthdr; ++ struct flowi fl; ++ int err; ++ ++ if ((!(ipv6_addr_type(&oip6h->saddr) & IPV6_ADDR_UNICAST)) || ++ (!(ipv6_addr_type(&oip6h->daddr) & IPV6_ADDR_UNICAST))) { ++ DEBUGP("ip6t_REJECT: addr is not unicast.\n"); ++ return; ++ } ++ ++ tcphoff = ipv6_skip_exthdr(oldskb, ((u8*)(oip6h+1) - oldskb->data), ++ &proto, oldskb->len - ((u8*)(oip6h+1) ++ - oldskb->data)); ++ ++ if ((tcphoff < 0) || (tcphoff > oldskb->len)) { ++ DEBUGP("ip6t_REJECT: Can't get TCP header.\n"); ++ return; ++ } ++ ++ otcplen = oldskb->len - tcphoff; ++ ++ /* IP header checks: fragment, too short. */ ++ if ((proto != IPPROTO_TCP) || (otcplen < sizeof(struct tcphdr))) { ++ DEBUGP("ip6t_REJECT: proto(%d) != IPPROTO_TCP, or too short. otcplen = %d\n", ++ proto, otcplen); ++ return; ++ } ++ ++ if (skb_copy_bits(oldskb, tcphoff, &otcph, sizeof(struct tcphdr))) { ++ if (net_ratelimit()) ++ printk("ip6t_REJECT: Can't copy tcp header\n"); ++ return; ++ } ++ ++ /* No RST for RST. */ ++ if (otcph.rst) { ++ DEBUGP("ip6t_REJECT: RST is set\n"); ++ return; ++ } ++ ++ /* Check checksum. */ ++ if (csum_ipv6_magic(&oip6h->saddr, &oip6h->daddr, otcplen, IPPROTO_TCP, ++ skb_checksum(oldskb, tcphoff, otcplen, 0))) { ++ DEBUGP("ip6t_REJECT: TCP checksum is invalid\n"); ++ return; ++ } ++ ++ memset(&fl, 0, sizeof(fl)); ++ fl.proto = IPPROTO_TCP; ++ ipv6_addr_copy(&fl.fl6_src, &oip6h->daddr); ++ ipv6_addr_copy(&fl.fl6_dst, &oip6h->saddr); ++ fl.fl_ip_sport = otcph.dest; ++ fl.fl_ip_dport = otcph.source; ++ err = ip6_dst_lookup(NULL, &dst, &fl); ++ if (err) { ++ if (net_ratelimit()) ++ printk("ip6t_REJECT: can't find dst. err = %d\n", err); ++ return; ++ } ++ ++ hh_len = (dst->dev->hard_header_len + 15)&~15; ++ nskb = alloc_skb(hh_len + 15 + dst->header_len + sizeof(struct ipv6hdr) ++ + sizeof(struct tcphdr) + dst->trailer_len, ++ GFP_ATOMIC); ++ ++ if (!nskb) { ++ if (net_ratelimit()) ++ printk("ip6t_REJECT: Can't alloc skb\n"); ++ dst_release(dst); ++ return; ++ } ++ ++ nskb->dst = dst; ++ dst_hold(dst); ++ ++ skb_reserve(nskb, hh_len + dst->header_len); ++ ++ ip6h = nskb->nh.ipv6h = (struct ipv6hdr *) ++ skb_put(nskb, sizeof(struct ipv6hdr)); ++ ip6h->version = 6; ++ ip6h->hop_limit = dst_metric(dst, RTAX_HOPLIMIT); ++ ip6h->nexthdr = IPPROTO_TCP; ++ ip6h->payload_len = htons(sizeof(struct tcphdr)); ++ ipv6_addr_copy(&ip6h->saddr, &oip6h->daddr); ++ ipv6_addr_copy(&ip6h->daddr, &oip6h->saddr); ++ ++ tcph = (struct tcphdr *)skb_put(nskb, sizeof(struct tcphdr)); ++ /* Truncate to length (no data) */ ++ tcph->doff = sizeof(struct tcphdr)/4; ++ tcph->source = otcph.dest; ++ tcph->dest = otcph.source; ++ ++ if (otcph.ack) { ++ needs_ack = 0; ++ tcph->seq = otcph.ack_seq; ++ tcph->ack_seq = 0; ++ } else { ++ needs_ack = 1; ++ tcph->ack_seq = htonl(ntohl(otcph.seq) + otcph.syn + otcph.fin ++ + otcplen - (otcph.doff<<2)); ++ tcph->seq = 0; ++ } ++ ++ /* Reset flags */ ++ ((u_int8_t *)tcph)[13] = 0; ++ tcph->rst = 1; ++ tcph->ack = needs_ack; ++ tcph->window = 0; ++ tcph->urg_ptr = 0; ++ tcph->check = 0; ++ ++ /* Adjust TCP checksum */ ++ tcph->check = csum_ipv6_magic(&nskb->nh.ipv6h->saddr, ++ &nskb->nh.ipv6h->daddr, ++ sizeof(struct tcphdr), IPPROTO_TCP, ++ csum_partial((char *)tcph, ++ sizeof(struct tcphdr), 0)); ++ ++ connection_attach(nskb, oldskb); ++ ++ NF_HOOK(PF_INET6, NF_IP6_LOCAL_OUT, nskb, NULL, nskb->dst->dev, ++ maybe_reroute); ++ ++ dst_release(dst); ++} ++ ++static void send_unreach(struct sk_buff *skb_in, unsigned char code) ++{ ++ struct ipv6hdr *ip6h, *hdr = skb_in->nh.ipv6h; ++ struct icmp6hdr *icmp6h; ++ struct dst_entry *dst = NULL; ++ struct rt6_info *rt; ++ int tmo; ++ __u32 csum; ++ unsigned int len, datalen, hh_len; ++ int saddr_type, daddr_type; ++ unsigned int ptr, ip6off; ++ u8 proto; ++ struct flowi fl; ++ struct sk_buff *nskb; ++ char *data; ++ ++ saddr_type = ipv6_addr_type(&hdr->saddr); ++ daddr_type = ipv6_addr_type(&hdr->daddr); ++ ++ if ((!(saddr_type & IPV6_ADDR_UNICAST)) || ++ (!(daddr_type & IPV6_ADDR_UNICAST))) { ++ DEBUGP("ip6t_REJECT: addr is not unicast.\n"); ++ return; ++ } ++ ++ ip6off = skb_in->nh.raw - skb_in->data; ++ proto = hdr->nexthdr; ++ ptr = ipv6_skip_exthdr(skb_in, ip6off + sizeof(struct ipv6hdr), &proto, ++ skb_in->len - ip6off); ++ ++ if ((ptr < 0) || (ptr > skb_in->len)) { ++ ptr = ip6off + sizeof(struct ipv6hdr); ++ proto = hdr->nexthdr; ++ } else if (proto == IPPROTO_ICMPV6) { ++ u8 type; ++ ++ if (skb_copy_bits(skb_in, ptr + offsetof(struct icmp6hdr, ++ icmp6_type), &type, 1)) { ++ DEBUGP("ip6t_REJECT: Can't get ICMPv6 type\n"); ++ return; ++ } ++ ++ if (!(type & ICMPV6_INFOMSG_MASK)) { ++ DEBUGP("ip6t_REJECT: no reply to icmp error\n"); ++ return; ++ } ++ } else if (proto == IPPROTO_UDP) { ++ int plen = skb_in->len - (ptr - ip6off); ++ uint16_t check; ++ ++ if (plen < sizeof(struct udphdr)) { ++ DEBUGP("ip6t_REJECT: too short\n"); ++ return; ++ } ++ ++ if (skb_copy_bits(skb_in, ptr + offsetof(struct udphdr, check), ++ &check, 2)) { ++ if (net_ratelimit()) ++ printk("ip6t_REJECT: can't get copy from skb"); ++ return; ++ } ++ ++ if (check && ++ csum_ipv6_magic(&hdr->saddr, &hdr->daddr, plen, ++ IPPROTO_UDP, ++ skb_checksum(skb_in, ptr, plen, 0))) { ++ DEBUGP("ip6t_REJECT: UDP checksum is invalid.\n"); ++ return; ++ } ++ } ++ ++ memset(&fl, 0, sizeof(fl)); ++ fl.proto = IPPROTO_ICMPV6; ++ ipv6_addr_copy(&fl.fl6_src, &hdr->daddr); ++ ipv6_addr_copy(&fl.fl6_dst, &hdr->saddr); ++ fl.fl_icmp_type = ICMPV6_DEST_UNREACH; ++ fl.fl_icmp_code = code; ++ ++ if (ip6_dst_lookup(NULL, &dst, &fl)) { ++ return; ++ } ++ ++ rt = (struct rt6_info *)dst; ++ tmo = 1*HZ; ++ ++ if (rt->rt6i_dst.plen < 128) ++ tmo >>= ((128 - rt->rt6i_dst.plen)>>5); ++ ++ if (!xrlim_allow(dst, tmo)) { ++ if (net_ratelimit()) ++ printk("ip6t_REJECT: rate limitted\n"); ++ goto dst_release_out; ++ } ++ ++ len = skb_in->len + sizeof(struct ipv6hdr) + sizeof(struct icmp6hdr); ++ ++ if (len > dst_pmtu(dst)) ++ len = dst_pmtu(dst); ++ if (len > IPV6_MIN_MTU) ++ len = IPV6_MIN_MTU; ++ ++ datalen = len - sizeof(struct ipv6hdr) - sizeof(struct icmp6hdr); ++ hh_len = (rt->u.dst.dev->hard_header_len + 15)&~15; ++ ++ nskb = alloc_skb(hh_len + 15 + dst->header_len + dst->trailer_len + len, ++ GFP_ATOMIC); ++ ++ if (!nskb) { ++ if (net_ratelimit()) ++ printk("ip6t_REJECT: can't alloc skb\n"); ++ goto dst_release_out; ++ } ++ ++ nskb->priority = 0; ++ nskb->dst = dst; ++ dst_hold(dst); ++ ++ skb_reserve(nskb, hh_len + dst->header_len); ++ ++ ip6h = nskb->nh.ipv6h = (struct ipv6hdr *) ++ skb_put(nskb, sizeof(struct ipv6hdr)); ++ ip6h->version = 6; ++ ip6h->hop_limit = dst_metric(dst, RTAX_HOPLIMIT); ++ ip6h->nexthdr = IPPROTO_ICMPV6; ++ ip6h->payload_len = htons(datalen + sizeof(struct icmp6hdr)); ++ ipv6_addr_copy(&ip6h->saddr, &hdr->daddr); ++ ipv6_addr_copy(&ip6h->daddr, &hdr->saddr); ++ ++ icmp6h = (struct icmp6hdr *) skb_put(nskb, sizeof(struct icmp6hdr)); ++ icmp6h->icmp6_type = ICMPV6_DEST_UNREACH; ++ icmp6h->icmp6_code = code; ++ icmp6h->icmp6_cksum = 0; ++ ++ data = skb_put(nskb, datalen); ++ ++ csum = csum_partial((unsigned char *)icmp6h, sizeof(struct icmp6hdr), 0); ++ csum = skb_copy_and_csum_bits(skb_in, ip6off, data, datalen, csum); ++ icmp6h->icmp6_cksum = csum_ipv6_magic(&hdr->saddr, &hdr->daddr, ++ datalen + sizeof(struct icmp6hdr), ++ IPPROTO_ICMPV6, csum); ++ ++ connection_attach(nskb, skb_in); ++ NF_HOOK(PF_INET6, NF_IP6_LOCAL_OUT, nskb, NULL, nskb->dst->dev, ++ maybe_reroute); ++ ++dst_release_out: ++ dst_release(dst); ++} ++ ++static unsigned int reject6_target(struct sk_buff **pskb, ++ const struct net_device *in, ++ const struct net_device *out, ++ unsigned int hooknum, ++ const void *targinfo, ++ void *userinfo) ++{ ++ const struct ip6t_reject_info *reject = targinfo; ++ ++ DEBUGP(KERN_DEBUG "%s: medium point\n", __FUNCTION__); ++ /* WARNING: This code causes reentry within ip6tables. ++ This means that the ip6tables jump stack is now crap. We ++ must return an absolute verdict. --RR */ ++ switch (reject->with) { ++ case IP6T_ICMP6_NO_ROUTE: ++ send_unreach(*pskb, ICMPV6_NOROUTE); ++ break; ++ case IP6T_ICMP6_ADM_PROHIBITED: ++ send_unreach(*pskb, ICMPV6_ADM_PROHIBITED); ++ break; ++ case IP6T_ICMP6_NOT_NEIGHBOUR: ++ send_unreach(*pskb, ICMPV6_NOT_NEIGHBOUR); ++ break; ++ case IP6T_ICMP6_ADDR_UNREACH: ++ send_unreach(*pskb, ICMPV6_ADDR_UNREACH); ++ break; ++ case IP6T_ICMP6_PORT_UNREACH: ++ send_unreach(*pskb, ICMPV6_PORT_UNREACH); ++ break; ++ case IP6T_ICMP6_ECHOREPLY: ++ /* Do nothing */ ++ break; ++ case IP6T_TCP_RESET: ++ send_reset(*pskb); ++ break; ++ default: ++ if (net_ratelimit()) ++ printk(KERN_WARNING "ip6t_REJECT: case %u not handled yet\n", reject->with); ++ break; ++ } ++ ++ return NF_DROP; ++} ++ ++static int check(const char *tablename, ++ const struct ip6t_entry *e, ++ void *targinfo, ++ unsigned int targinfosize, ++ unsigned int hook_mask) ++{ ++ const struct ip6t_reject_info *rejinfo = targinfo; ++ ++ if (targinfosize != IP6T_ALIGN(sizeof(struct ip6t_reject_info))) { ++ DEBUGP("ip6t_REJECT: targinfosize %u != 0\n", targinfosize); ++ return 0; ++ } ++ ++ /* Only allow these for packet filtering. */ ++ if (strcmp(tablename, "filter") != 0) { ++ DEBUGP("ip6t_REJECT: bad table `%s'.\n", tablename); ++ return 0; ++ } ++ ++ if ((hook_mask & ~((1 << NF_IP6_LOCAL_IN) ++ | (1 << NF_IP6_FORWARD) ++ | (1 << NF_IP6_LOCAL_OUT))) != 0) { ++ DEBUGP("ip6t_REJECT: bad hook mask %X\n", hook_mask); ++ return 0; ++ } ++ ++ if (rejinfo->with == IP6T_ICMP6_ECHOREPLY) { ++ printk("ip6t_REJECT: ECHOREPLY is not supported.\n"); ++ return 0; ++ } else if (rejinfo->with == IP6T_TCP_RESET) { ++ /* Must specify that it's a TCP packet */ ++ if (e->ipv6.proto != IPPROTO_TCP ++ || (e->ipv6.invflags & IP6T_INV_PROTO)) { ++ DEBUGP("ip6t_REJECT: TCP_RESET illegal for non-tcp\n"); ++ return 0; ++ } ++ } ++ ++ return 1; ++} ++ ++static struct ip6t_target ip6t_reject_reg = { ++ .name = "REJECT", ++ .target = reject6_target, ++ .checkentry = check, ++ .me = THIS_MODULE ++}; ++ ++static int __init init(void) ++{ ++ if (ip6t_register_target(&ip6t_reject_reg)) ++ return -EINVAL; ++ return 0; ++} ++ ++static void __exit fini(void) ++{ ++ ip6t_unregister_target(&ip6t_reject_reg); ++} ++ ++module_init(init); ++module_exit(fini); +diff -urN linux-2.6.11/net/ipv6/netfilter/ip6t_state.c linux.sinabox/net/ipv6/netfilter/ip6t_state.c +--- linux-2.6.11/net/ipv6/netfilter/ip6t_state.c 1970-01-01 01:00:00.000000000 +0100 ++++ linux.sinabox/net/ipv6/netfilter/ip6t_state.c 2005-03-26 19:02:06.000000000 +0100 +@@ -0,0 +1,79 @@ ++/* ++ * Matching connection tracking information ++ * Linux INET6 implementation ++ * ++ * Copyright (C)2003 USAGI/WIDE Project ++ * ++ * Authors: ++ * Yasuyuki Kozakai ++ * ++ * Based on: net/ipv4/netfilter/ip6t_state.c ++ * ++ * This program 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 ++ * 2 of the License, or (at your option) any later version. ++ */ ++/* Kernel module to match connection tracking information. ++ * GPL (C) 1999 Rusty Russell (rusty@rustcorp.com.au). ++ */ ++#include ++#include ++#include ++#include ++#include ++ ++static int ++match(const struct sk_buff *skb, ++ const struct net_device *in, ++ const struct net_device *out, ++ const void *matchinfo, ++ int offset, ++ unsigned int protoff, ++ int *hotdrop) ++{ ++ const struct ip6t_state_info *sinfo = matchinfo; ++ enum ip6_conntrack_info ctinfo; ++ unsigned int statebit; ++ ++ if (!ip6_conntrack_get(skb, &ctinfo)) ++ statebit = IP6T_STATE_INVALID; ++ else ++ statebit = IP6T_STATE_BIT(ctinfo); ++ ++ return (sinfo->statemask & statebit); ++} ++ ++static int check(const char *tablename, ++ const struct ip6t_ip6 *ip, ++ void *matchinfo, ++ unsigned int matchsize, ++ unsigned int hook_mask) ++{ ++ if (matchsize != IP6T_ALIGN(sizeof(struct ip6t_state_info))) ++ return 0; ++ ++ return 1; ++} ++ ++static struct ip6t_match state_match = { ++ .name = "state", ++ .match = &match, ++ .checkentry = &check, ++ .me = THIS_MODULE, ++}; ++ ++static int __init init(void) ++{ ++ need_ip6_conntrack(); ++ return ip6t_register_match(&state_match); ++} ++ ++static void __exit fini(void) ++{ ++ ip6t_unregister_match(&state_match); ++} ++ ++module_init(init); ++module_exit(fini); ++MODULE_LICENSE("GPL"); +diff -urN linux-2.6.11/net/ipv6/netfilter/ip6t_ULOG.c linux.sinabox/net/ipv6/netfilter/ip6t_ULOG.c +--- linux-2.6.11/net/ipv6/netfilter/ip6t_ULOG.c 1970-01-01 01:00:00.000000000 +0100 ++++ linux.sinabox/net/ipv6/netfilter/ip6t_ULOG.c 2005-03-24 19:24:16.000000000 +0100 +@@ -0,0 +1,142 @@ ++/* ++ * netfilter module for userspace packet logging daemons ++ * ++ * (C) 2000-2004 by Harald Welte ++ * ++ * 2000/09/22 ulog-cprange feature added ++ * 2001/01/04 in-kernel queue as proposed by Sebastian Zander ++ * ++ * 2001/01/30 per-rule nlgroup conflicts with global queue. ++ * nlgroup now global (sysctl) ++ * 2001/04/19 ulog-queue reworked, now fixed buffer size specified at ++ * module loadtime -HW ++ * 2002/07/07 remove broken nflog_rcv() function -HW ++ * 2002/08/29 fix shifted/unshifted nlgroup bug -HW ++ * 2002/10/30 fix uninitialized mac_len field - ++ * 2004/10/25 fix erroneous calculation of 'len' parameter to NLMSG_PUT ++ * resulting in bogus 'error during NLMSG_PUT' messages. ++ * 2005/02/10 ported to ipv6 ++ * ++ * (C) 1999-2001 Paul `Rusty' Russell ++ * (C) 2002-2004 Netfilter Core Team ++ * ++ * This program is free software; you can redistribute it and/or modify ++ * it under the terms of the GNU General Public License version 2 as ++ * published by the Free Software Foundation. ++ */ ++ ++#include ++#include ++#include ++ ++MODULE_LICENSE("GPL"); ++MODULE_AUTHOR("Jonas Berlin "); ++MODULE_DESCRIPTION("ip6tables userspace logging module"); ++ ++#if 0 ++#define DEBUGP(format, args...) printk("%s:%s:" format, \ ++ __FILE__, __FUNCTION__ , ## args) ++#else ++#define DEBUGP(format, args...) ++#endif ++ ++static unsigned int nflog = 1; ++module_param(nflog, int, 0400); ++MODULE_PARM_DESC(nflog, "register as internal netfilter logging module"); ++ ++// from ipt_ULOG.c ++void ipt_ulog_packet(unsigned int hooknum, ++ const struct sk_buff *skb, ++ const struct net_device *in, ++ const struct net_device *out, ++ const struct ipt_ulog_info *loginfo, ++ const char *prefix); ++ ++static unsigned int ip6t_ulog_target(struct sk_buff **pskb, ++ const struct net_device *in, ++ const struct net_device *out, ++ unsigned int hooknum, ++ const void *targinfo, void *userinfo) ++{ ++ const struct ipt_ulog_info *loginfo = (const struct ipt_ulog_info *) targinfo; ++ ++ ipt_ulog_packet(hooknum, *pskb, in, out, loginfo, NULL); ++ ++ return IP6T_CONTINUE; ++} ++ ++static void ip6t_logfn(unsigned int hooknum, ++ const struct sk_buff *skb, ++ const struct net_device *in, ++ const struct net_device *out, ++ const char *prefix) ++{ ++ struct ipt_ulog_info loginfo = { ++ .nl_group = ULOG_DEFAULT_NLGROUP, ++ .copy_range = 0, ++ .qthreshold = ULOG_DEFAULT_QTHRESHOLD, ++ .prefix = "" ++ }; ++ ++ ipt_ulog_packet(hooknum, skb, in, out, &loginfo, prefix); ++} ++ ++static int ip6t_ulog_checkentry(const char *tablename, ++ const struct ip6t_entry *e, ++ void *targinfo, ++ unsigned int targinfosize, ++ unsigned int hookmask) ++{ ++ struct ipt_ulog_info *loginfo = (struct ipt_ulog_info *) targinfo; ++ ++ if (targinfosize != IP6T_ALIGN(sizeof(struct ipt_ulog_info))) { ++ DEBUGP("ip6t_ULOG: targinfosize %u != 0\n", targinfosize); ++ return 0; ++ } ++ ++ if (loginfo->prefix[sizeof(loginfo->prefix) - 1] != '\0') { ++ DEBUGP("ip6t_ULOG: prefix term %i\n", ++ loginfo->prefix[sizeof(loginfo->prefix) - 1]); ++ return 0; ++ } ++ ++ if (loginfo->qthreshold > ULOG_MAX_QLEN) { ++ DEBUGP("ip6t_ULOG: queue threshold %i > MAX_QLEN\n", ++ loginfo->qthreshold); ++ return 0; ++ } ++ ++ return 1; ++} ++ ++static struct ip6t_target ip6t_ulog_reg = { ++ .name = "ULOG", ++ .target = ip6t_ulog_target, ++ .checkentry = ip6t_ulog_checkentry, ++ .me = THIS_MODULE, ++}; ++ ++static int __init init(void) ++{ ++ DEBUGP("ip6t_ULOG: init module\n"); ++ ++ if (ip6t_register_target(&ip6t_ulog_reg) != 0) { ++ return -EINVAL; ++ } ++ if (nflog) ++ nf_log_register(PF_INET6, &ip6t_logfn); ++ ++ return 0; ++} ++ ++static void __exit fini(void) ++{ ++ DEBUGP("ip6t_ULOG: cleanup_module\n"); ++ ++ if (nflog) ++ nf_log_unregister(PF_INET6, &ip6t_logfn); ++ ip6t_unregister_target(&ip6t_ulog_reg); ++} ++ ++module_init(init); ++module_exit(fini); +diff -urN linux-2.6.11/net/ipv6/netfilter/Kconfig linux.sinabox/net/ipv6/netfilter/Kconfig +--- linux-2.6.11/net/ipv6/netfilter/Kconfig 2005-03-02 08:38:25.000000000 +0100 ++++ linux.sinabox/net/ipv6/netfilter/Kconfig 2005-03-26 19:02:06.000000000 +0100 +@@ -5,6 +5,16 @@ + menu "IPv6: Netfilter Configuration" + depends on INET && IPV6 && NETFILTER + ++config IP6_NF_FTP ++ tristate "FTP protocol support" ++ depends on IP6_NF_CONNTRACK ++ help ++ Tracking FTP connections is problematic: special helpers are ++ required for tracking them. ++ ++ If you want to compile it as a module, say M here and read ++ . If unsure, say `Y'. ++ + #tristate 'Connection tracking (required for masq/NAT)' CONFIG_IP6_NF_CONNTRACK + #if [ "$CONFIG_IP6_NF_CONNTRACK" != "n" ]; then + # dep_tristate ' FTP protocol support' CONFIG_IP6_NF_FTP $CONFIG_IP6_NF_CONNTRACK +@@ -167,6 +177,32 @@ + + To compile it as a module, choose M here. If unsure, say N. + ++config IP6_NF_CONNTRACK ++ tristate "Connection tracking (EXPERIMENTAL)" ++ depends on EXPERIMENTAL ++ ---help--- ++ Connection tracking keeps a record of what packets have passed ++ through your machine, in order to figure out how they are related ++ into connections. ++ ++ It can also be used to enhance packet filtering ++ (see `Connection state match support' ++ below). ++ ++ If you want to compile it as a module, say M here and read ++ . If unsure, say `N'. ++ ++config IP6_NF_MATCH_STATE ++ tristate "Connection state match support" ++ depends on IP6_NF_CONNTRACK && IP6_NF_IPTABLES ++ help ++ Connection state matching allows you to match packets based on their ++ relationship to a tracked connection (ie. previous packets). This ++ is a powerful tool for packet classification. ++ ++ If you want to compile it as a module, say M here and read ++ . If unsure, say `N'. ++ + # dep_tristate ' Multiple port match support' CONFIG_IP6_NF_MATCH_MULTIPORT $CONFIG_IP6_NF_IPTABLES + # dep_tristate ' TOS match support' CONFIG_IP6_NF_MATCH_TOS $CONFIG_IP6_NF_IPTABLES + # if [ "$CONFIG_IP6_NF_CONNTRACK" != "n" ]; then +@@ -187,6 +223,15 @@ + + To compile it as a module, choose M here. If unsure, say N. + ++config IP6_NF_TARGET_IMQ ++ tristate "IMQ target support" ++ depends on IP6_NF_MANGLE ++ help ++ This option adds a `IMQ' target which is used to specify if and ++ to which imq device packets should get enqueued/dequeued. ++ ++ To compile it as a module, choose M here. If unsure, say N. ++ + config IP6_NF_TARGET_LOG + tristate "LOG target support" + depends on IP6_NF_FILTER +@@ -196,8 +241,17 @@ + + To compile it as a module, choose M here. If unsure, say N. + ++config IP6_NF_TARGET_REJECT ++ tristate "REJECT target support" ++ depends on IP6_NF_FILTER ++ help ++ The REJECT target allows a filtering rule to specify that an ICMP ++ error should be issued in response to an incoming packet, rather ++ than silently being dropped. ++ ++ To compile it as a module, choose M here. If unsure, say N. ++ + # if [ "$CONFIG_IP6_NF_FILTER" != "n" ]; then +-# dep_tristate ' REJECT target support' CONFIG_IP6_NF_TARGET_REJECT $CONFIG_IP6_NF_FILTER + # if [ "$CONFIG_EXPERIMENTAL" = "y" ]; then + # dep_tristate ' MIRROR target support (EXPERIMENTAL)' CONFIG_IP6_NF_TARGET_MIRROR $CONFIG_IP6_NF_FILTER + # fi +@@ -238,5 +292,22 @@ + If you want to compile it as a module, say M here and read + . If unsure, say `N'. + ++config IP6_NF_TARGET_ULOG ++ tristate "ULOG target support" ++ depends on IP6_NF_IPTABLES && IP_NF_TARGET_ULOG ++ ---help--- ++ This option adds a `ULOG' target, which allows you to create rules in ++ any ip6tables table. The packet is passed to a userspace logging ++ daemon using netlink multicast sockets; unlike the LOG target ++ which can only be viewed through syslog. ++ ++ NOTE: This target requires the ipv4 version of ULOG to be compiled as ++ well. ++ ++ The apropriate userspace logging daemon (ulogd) may be obtained from ++ ++ ++ To compile it as a module, choose M here. If unsure, say N. ++ + endmenu + +diff -urN linux-2.6.11/net/ipv6/netfilter/Kconfig.orig linux.sinabox/net/ipv6/netfilter/Kconfig.orig +--- linux-2.6.11/net/ipv6/netfilter/Kconfig.orig 1970-01-01 01:00:00.000000000 +0100 ++++ linux.sinabox/net/ipv6/netfilter/Kconfig.orig 2005-03-26 00:49:04.000000000 +0100 +@@ -0,0 +1,268 @@ ++# ++# IP netfilter configuration ++# ++ ++menu "IPv6: Netfilter Configuration" ++ depends on INET && IPV6 && NETFILTER ++ ++#tristate 'Connection tracking (required for masq/NAT)' CONFIG_IP6_NF_CONNTRACK ++#if [ "$CONFIG_IP6_NF_CONNTRACK" != "n" ]; then ++# dep_tristate ' FTP protocol support' CONFIG_IP6_NF_FTP $CONFIG_IP6_NF_CONNTRACK ++#fi ++config IP6_NF_QUEUE ++ tristate "Userspace queueing via NETLINK" ++ ---help--- ++ ++ This option adds a queue handler to the kernel for IPv6 ++ packets which lets us to receive the filtered packets ++ with QUEUE target using libiptc as we can do with ++ the IPv4 now. ++ ++ (C) Fernando Anton 2001 ++ IPv64 Project - Work based in IPv64 draft by Arturo Azcorra. ++ Universidad Carlos III de Madrid ++ Universidad Politecnica de Alcala de Henares ++ email: . ++ ++ To compile it as a module, choose M here. If unsure, say N. ++ ++config IP6_NF_IPTABLES ++ tristate "IP6 tables support (required for filtering/masq/NAT)" ++ help ++ ip6tables is a general, extensible packet identification framework. ++ Currently only the packet filtering and packet mangling subsystem ++ for IPv6 use this, but connection tracking is going to follow. ++ Say 'Y' or 'M' here if you want to use either of those. ++ ++ To compile it as a module, choose M here. If unsure, say N. ++ ++# The simple matches. ++config IP6_NF_MATCH_LIMIT ++ tristate "limit match support" ++ depends on IP6_NF_IPTABLES ++ help ++ limit matching allows you to control the rate at which a rule can be ++ matched: mainly useful in combination with the LOG target ("LOG ++ target support", below) and to avoid some Denial of Service attacks. ++ ++ To compile it as a module, choose M here. If unsure, say N. ++ ++config IP6_NF_MATCH_MAC ++ tristate "MAC address match support" ++ depends on IP6_NF_IPTABLES ++ help ++ mac matching allows you to match packets based on the source ++ Ethernet address of the packet. ++ ++ To compile it as a module, choose M here. If unsure, say N. ++ ++config IP6_NF_MATCH_RT ++ tristate "Routing header match support" ++ depends on IP6_NF_IPTABLES ++ help ++ rt matching allows you to match packets based on the routing ++ header of the packet. ++ ++ To compile it as a module, choose M here. If unsure, say N. ++ ++config IP6_NF_MATCH_OPTS ++ tristate "Hop-by-hop and Dst opts header match support" ++ depends on IP6_NF_IPTABLES ++ help ++ This allows one to match packets based on the hop-by-hop ++ and destination options headers of a packet. ++ ++ To compile it as a module, choose M here. If unsure, say N. ++ ++config IP6_NF_MATCH_FRAG ++ tristate "Fragmentation header match support" ++ depends on IP6_NF_IPTABLES ++ help ++ frag matching allows you to match packets based on the fragmentation ++ header of the packet. ++ ++ To compile it as a module, choose M here. If unsure, say N. ++ ++config IP6_NF_MATCH_HL ++ tristate "HL match support" ++ depends on IP6_NF_IPTABLES ++ help ++ HL matching allows you to match packets based on the hop ++ limit of the packet. ++ ++ To compile it as a module, choose M here. If unsure, say N. ++ ++config IP6_NF_MATCH_MULTIPORT ++ tristate "Multiple port match support" ++ depends on IP6_NF_IPTABLES ++ help ++ Multiport matching allows you to match TCP or UDP packets based on ++ a series of source or destination ports: normally a rule can only ++ match a single range of ports. ++ ++ To compile it as a module, choose M here. If unsure, say N. ++ ++config IP6_NF_MATCH_OWNER ++ tristate "Owner match support" ++ depends on IP6_NF_IPTABLES ++ help ++ Packet owner matching allows you to match locally-generated packets ++ based on who created them: the user, group, process or session. ++ ++ To compile it as a module, choose M here. If unsure, say N. ++ ++# dep_tristate ' MAC address match support' CONFIG_IP6_NF_MATCH_MAC $CONFIG_IP6_NF_IPTABLES ++config IP6_NF_MATCH_MARK ++ tristate "netfilter MARK match support" ++ depends on IP6_NF_IPTABLES ++ help ++ Netfilter mark matching allows you to match packets based on the ++ `nfmark' value in the packet. This can be set by the MARK target ++ (see below). ++ ++ To compile it as a module, choose M here. If unsure, say N. ++ ++config IP6_NF_MATCH_IPV6HEADER ++ tristate "IPv6 Extension Headers Match" ++ depends on IP6_NF_IPTABLES ++ help ++ This module allows one to match packets based upon ++ the ipv6 extension headers. ++ ++ To compile it as a module, choose M here. If unsure, say N. ++ ++config IP6_NF_MATCH_AHESP ++ tristate "AH/ESP match support" ++ depends on IP6_NF_IPTABLES ++ help ++ This module allows one to match AH and ESP packets. ++ ++ To compile it as a module, choose M here. If unsure, say N. ++ ++config IP6_NF_MATCH_LENGTH ++ tristate "Packet Length match support" ++ depends on IP6_NF_IPTABLES ++ help ++ This option allows you to match the length of a packet against a ++ specific value or range of values. ++ ++ To compile it as a module, choose M here. If unsure, say N. ++ ++config IP6_NF_MATCH_EUI64 ++ tristate "EUI64 address check" ++ depends on IP6_NF_IPTABLES ++ help ++ This module performs checking on the IPv6 source address ++ Compares the last 64 bits with the EUI64 (delivered ++ from the MAC address) address ++ ++ To compile it as a module, choose M here. If unsure, say N. ++ ++config IP6_NF_MATCH_PHYSDEV ++ tristate "Physdev match support" ++ depends on IP6_NF_IPTABLES && BRIDGE_NETFILTER ++ help ++ Physdev packet matching matches against the physical bridge ports ++ the IP packet arrived on or will leave by. ++ ++ To compile it as a module, choose M here. If unsure, say N. ++ ++# dep_tristate ' Multiple port match support' CONFIG_IP6_NF_MATCH_MULTIPORT $CONFIG_IP6_NF_IPTABLES ++# dep_tristate ' TOS match support' CONFIG_IP6_NF_MATCH_TOS $CONFIG_IP6_NF_IPTABLES ++# if [ "$CONFIG_IP6_NF_CONNTRACK" != "n" ]; then ++# dep_tristate ' Connection state match support' CONFIG_IP6_NF_MATCH_STATE $CONFIG_IP6_NF_CONNTRACK $CONFIG_IP6_NF_IPTABLES ++# fi ++# if [ "$CONFIG_EXPERIMENTAL" = "y" ]; then ++# dep_tristate ' Unclean match support (EXPERIMENTAL)' CONFIG_IP6_NF_MATCH_UNCLEAN $CONFIG_IP6_NF_IPTABLES ++# dep_tristate ' Owner match support (EXPERIMENTAL)' CONFIG_IP6_NF_MATCH_OWNER $CONFIG_IP6_NF_IPTABLES ++# fi ++# The targets ++config IP6_NF_FILTER ++ tristate "Packet filtering" ++ depends on IP6_NF_IPTABLES ++ help ++ Packet filtering defines a table `filter', which has a series of ++ rules for simple packet filtering at local input, forwarding and ++ local output. See the man page for iptables(8). ++ ++ To compile it as a module, choose M here. If unsure, say N. ++ ++config IP6_NF_TARGET_IMQ ++ tristate "IMQ target support" ++ depends on IP6_NF_MANGLE ++ help ++ This option adds a `IMQ' target which is used to specify if and ++ to which imq device packets should get enqueued/dequeued. ++ ++ To compile it as a module, choose M here. If unsure, say N. ++ ++config IP6_NF_TARGET_LOG ++ tristate "LOG target support" ++ depends on IP6_NF_FILTER ++ help ++ This option adds a `LOG' target, which allows you to create rules in ++ any iptables table which records the packet header to the syslog. ++ ++ To compile it as a module, choose M here. If unsure, say N. ++ ++# if [ "$CONFIG_IP6_NF_FILTER" != "n" ]; then ++# dep_tristate ' REJECT target support' CONFIG_IP6_NF_TARGET_REJECT $CONFIG_IP6_NF_FILTER ++# if [ "$CONFIG_EXPERIMENTAL" = "y" ]; then ++# dep_tristate ' MIRROR target support (EXPERIMENTAL)' CONFIG_IP6_NF_TARGET_MIRROR $CONFIG_IP6_NF_FILTER ++# fi ++# fi ++config IP6_NF_MANGLE ++ tristate "Packet mangling" ++ depends on IP6_NF_IPTABLES ++ help ++ This option adds a `mangle' table to iptables: see the man page for ++ iptables(8). This table is used for various packet alterations ++ which can effect how the packet is routed. ++ ++ To compile it as a module, choose M here. If unsure, say N. ++ ++# dep_tristate ' TOS target support' CONFIG_IP6_NF_TARGET_TOS $CONFIG_IP_NF_MANGLE ++config IP6_NF_TARGET_MARK ++ tristate "MARK target support" ++ depends on IP6_NF_MANGLE ++ help ++ This option adds a `MARK' target, which allows you to create rules ++ in the `mangle' table which alter the netfilter mark (nfmark) field ++ associated with the packet packet prior to routing. This can change ++ the routing method (see `Use netfilter MARK value as routing ++ key') and can also be used by other subsystems to change their ++ behavior. ++ ++ To compile it as a module, choose M here. If unsure, say N. ++ ++#dep_tristate ' LOG target support' CONFIG_IP6_NF_TARGET_LOG $CONFIG_IP6_NF_IPTABLES ++config IP6_NF_RAW ++ tristate 'raw table support (required for TRACE)' ++ depends on IP6_NF_IPTABLES ++ help ++ This option adds a `raw' table to ip6tables. This table is the very ++ first in the netfilter framework and hooks in at the PREROUTING ++ and OUTPUT chains. ++ ++ If you want to compile it as a module, say M here and read ++ . If unsure, say `N'. ++ ++config IP6_NF_TARGET_ULOG ++ tristate "ULOG target support" ++ depends on IP6_NF_IPTABLES && IP_NF_TARGET_ULOG ++ ---help--- ++ This option adds a `ULOG' target, which allows you to create rules in ++ any ip6tables table. The packet is passed to a userspace logging ++ daemon using netlink multicast sockets; unlike the LOG target ++ which can only be viewed through syslog. ++ ++ NOTE: This target requires the ipv4 version of ULOG to be compiled as ++ well. ++ ++ The apropriate userspace logging daemon (ulogd) may be obtained from ++ ++ ++ To compile it as a module, choose M here. If unsure, say N. ++ ++endmenu ++ +diff -urN linux-2.6.11/net/ipv6/netfilter/Makefile linux.sinabox/net/ipv6/netfilter/Makefile +--- linux-2.6.11/net/ipv6/netfilter/Makefile 2005-03-02 08:38:10.000000000 +0100 ++++ linux.sinabox/net/ipv6/netfilter/Makefile 2005-03-26 19:02:06.000000000 +0100 +@@ -2,6 +2,18 @@ + # Makefile for the netfilter modules on top of IPv6. + # + ++# objects for the conntrack ++ip6_nf_conntrack-objs := ip6_conntrack_core.o ip6_conntrack_proto_generic.o ip6_conntrack_proto_tcp.o ip6_conntrack_proto_udp.o ip6_conntrack_proto_icmpv6.o ip6_conntrack_reasm.o ++ ++# objects for the standalone - connection tracking ++ip6_conntrack-objs := ip6_conntrack_standalone.o $(ip6_nf_conntrack-objs) ++ ++# connection tracking ++obj-$(CONFIG_IP6_NF_CONNTRACK) += ip6_conntrack.o ++ ++# connection tracking helpers ++obj-$(CONFIG_IP6_NF_FTP) += ip6_conntrack_ftp.o ++ + # Link order matters here. + obj-$(CONFIG_IP6_NF_IPTABLES) += ip6_tables.o + obj-$(CONFIG_IP6_NF_MATCH_LIMIT) += ip6t_limit.o +@@ -20,7 +32,11 @@ + obj-$(CONFIG_IP6_NF_FILTER) += ip6table_filter.o + obj-$(CONFIG_IP6_NF_MANGLE) += ip6table_mangle.o + obj-$(CONFIG_IP6_NF_TARGET_MARK) += ip6t_MARK.o ++obj-$(CONFIG_IP6_NF_TARGET_IMQ) += ip6t_IMQ.o + obj-$(CONFIG_IP6_NF_QUEUE) += ip6_queue.o + obj-$(CONFIG_IP6_NF_TARGET_LOG) += ip6t_LOG.o ++obj-$(CONFIG_IP6_NF_TARGET_ULOG) += ip6t_ULOG.o + obj-$(CONFIG_IP6_NF_RAW) += ip6table_raw.o + obj-$(CONFIG_IP6_NF_MATCH_HL) += ip6t_hl.o ++obj-$(CONFIG_IP6_NF_MATCH_STATE) += ip6t_state.o ++obj-$(CONFIG_IP6_NF_TARGET_REJECT) += ip6t_REJECT.o +diff -urN linux-2.6.11/net/ipv6/netfilter/Makefile.orig linux.sinabox/net/ipv6/netfilter/Makefile.orig +--- linux-2.6.11/net/ipv6/netfilter/Makefile.orig 1970-01-01 01:00:00.000000000 +0100 ++++ linux.sinabox/net/ipv6/netfilter/Makefile.orig 2005-03-26 00:49:04.000000000 +0100 +@@ -0,0 +1,28 @@ ++# ++# Makefile for the netfilter modules on top of IPv6. ++# ++ ++# Link order matters here. ++obj-$(CONFIG_IP6_NF_IPTABLES) += ip6_tables.o ++obj-$(CONFIG_IP6_NF_MATCH_LIMIT) += ip6t_limit.o ++obj-$(CONFIG_IP6_NF_MATCH_MARK) += ip6t_mark.o ++obj-$(CONFIG_IP6_NF_MATCH_LENGTH) += ip6t_length.o ++obj-$(CONFIG_IP6_NF_MATCH_MAC) += ip6t_mac.o ++obj-$(CONFIG_IP6_NF_MATCH_RT) += ip6t_rt.o ++obj-$(CONFIG_IP6_NF_MATCH_OPTS) += ip6t_hbh.o ip6t_dst.o ++obj-$(CONFIG_IP6_NF_MATCH_IPV6HEADER) += ip6t_ipv6header.o ++obj-$(CONFIG_IP6_NF_MATCH_FRAG) += ip6t_frag.o ++obj-$(CONFIG_IP6_NF_MATCH_AHESP) += ip6t_esp.o ip6t_ah.o ++obj-$(CONFIG_IP6_NF_MATCH_EUI64) += ip6t_eui64.o ++obj-$(CONFIG_IP6_NF_MATCH_MULTIPORT) += ip6t_multiport.o ++obj-$(CONFIG_IP6_NF_MATCH_OWNER) += ip6t_owner.o ++obj-$(CONFIG_IP6_NF_MATCH_PHYSDEV) += ip6t_physdev.o ++obj-$(CONFIG_IP6_NF_FILTER) += ip6table_filter.o ++obj-$(CONFIG_IP6_NF_MANGLE) += ip6table_mangle.o ++obj-$(CONFIG_IP6_NF_TARGET_MARK) += ip6t_MARK.o ++obj-$(CONFIG_IP6_NF_TARGET_IMQ) += ip6t_IMQ.o ++obj-$(CONFIG_IP6_NF_QUEUE) += ip6_queue.o ++obj-$(CONFIG_IP6_NF_TARGET_LOG) += ip6t_LOG.o ++obj-$(CONFIG_IP6_NF_TARGET_ULOG) += ip6t_ULOG.o ++obj-$(CONFIG_IP6_NF_RAW) += ip6table_raw.o ++obj-$(CONFIG_IP6_NF_MATCH_HL) += ip6t_hl.o +diff -urN linux-2.6.11/net/ipv6/proc.c linux.sinabox/net/ipv6/proc.c +--- linux-2.6.11/net/ipv6/proc.c 2005-03-02 08:38:07.000000000 +0100 ++++ linux.sinabox/net/ipv6/proc.c 2005-03-26 19:02:06.000000000 +0100 +@@ -164,7 +164,13 @@ + + if (idev) { + seq_printf(seq, "%-32s\t%u\n", "ifIndex", idev->dev->ifindex); ++#ifdef CONFIG_IPV6_STATISTICS ++ snmp6_seq_show_item(seq, (void **)idev->stats.ipv6_statistics, snmp6_ipstats_list); ++#endif + snmp6_seq_show_item(seq, (void **)idev->stats.icmpv6, snmp6_icmp6_list); ++#if 0 ++ snmp6_seq_show_item(seq, (void **)idev->stats.udp_stats_in6, snmp6_udp6_list); ++#endif + } else { + snmp6_seq_show_item(seq, (void **)ipv6_statistics, snmp6_ipstats_list); + snmp6_seq_show_item(seq, (void **)icmpv6_statistics, snmp6_icmp6_list); +@@ -284,19 +290,45 @@ + if (!idev || !idev->dev) + return -EINVAL; + ++#ifdef CONFIG_IPV6_STATISTICS ++ if (snmp6_mib_init((void **)idev->stats.ipv6_statistics, sizeof(struct ipstats_mib), ++ __alignof__(struct ipstats_mib)) < 0) ++ goto err_ip; ++#endif ++ + if (snmp6_mib_init((void **)idev->stats.icmpv6, sizeof(struct icmpv6_mib), + __alignof__(struct icmpv6_mib)) < 0) + goto err_icmp; + ++#if 0 ++ if (snmp6_mib_init((void **)idev->stats.udp_stats_in6, sizeof(struct udp_mib), ++ __alignof__(struct udp_mib)) < 0) ++ goto err_udp; ++#endif ++ + return 0; + ++#if 0 ++err_udp: ++ snmp6_mib_free((void **)idev->stats.icmpv6); ++#endif + err_icmp: ++#ifdef CONFIG_IPV6_STATISTICS ++ snmp6_mib_free((void **)idev->stats.ipv6_statistics); ++err_ip: ++#endif + return err; + } + + int snmp6_free_dev(struct inet6_dev *idev) + { ++#ifdef CONFIG_IPV6_STATISTICS ++ snmp6_mib_free((void **)idev->stats.ipv6_statistics); ++#endif + snmp6_mib_free((void **)idev->stats.icmpv6); ++#if 0 ++ snmp6_mib_free((void **)idev->stats.udp_stats_in6); ++#endif + return 0; + } + +diff -urN linux-2.6.11/net/ipv6/raw.c linux.sinabox/net/ipv6/raw.c +--- linux-2.6.11/net/ipv6/raw.c 2005-03-02 08:38:07.000000000 +0100 ++++ linux.sinabox/net/ipv6/raw.c 2005-03-26 19:02:06.000000000 +0100 +@@ -13,6 +13,10 @@ + * Hideaki YOSHIFUJI : sin6_scope_id support + * YOSHIFUJI,H.@USAGI : raw checksum (RFC2292(bis) compliance) + * Kazunori MIYAZAWA @USAGI: change process style to use ip6_append_data ++ * Hoerdt Mickael : Added Ipv6 multicast routing support. ++ * ++ * Changes: ++ * Kazunori MIYAZAWA @USAGI: change datagram transmit routine to ip6_append_data + * + * This program is free software; you can redistribute it and/or + * modify it under the terms of the GNU General Public License +@@ -55,6 +59,10 @@ + #include + #include + ++#ifdef CONFIG_IPV6_MROUTE ++#include ++#endif ++ + struct hlist_head raw_v6_htable[RAWV6_HTABLE_SIZE]; + DEFINE_RWLOCK(raw_v6_lock); + +@@ -162,7 +170,19 @@ + sk = __raw_v6_lookup(sk, nexthdr, daddr, saddr); + + while (sk) { +- if (nexthdr != IPPROTO_ICMPV6 || !icmpv6_filter(sk, skb)) { ++ int filtered; ++ ++ switch (nexthdr) { ++ case IPPROTO_ICMPV6: ++ filtered = icmpv6_filter(sk, skb); ++ break; ++ default: ++ filtered = 0; ++ } ++ ++ if (filtered < 0) ++ break; ++ if (filtered == 0) { + struct sk_buff *clone = skb_clone(skb, GFP_ATOMIC); + + /* Not releasing hash table! */ +@@ -199,6 +219,10 @@ + if (sk->sk_state != TCP_CLOSE) + goto out; + ++ if (addr->sin6_port && ++ ntohs(addr->sin6_port) != inet->num) ++ goto out; ++ + /* Check if the address belongs to the host. */ + if (addr_type != IPV6_ADDR_ANY) { + struct net_device *dev = NULL; +@@ -407,8 +431,11 @@ + + /* Copy the address. */ + if (sin6) { ++ struct inet_sock *inet = inet_sk(sk); ++ + sin6->sin6_family = AF_INET6; + ipv6_addr_copy(&sin6->sin6_addr, &skb->nh.ipv6h->saddr); ++ sin6->sin6_port = htons(inet->num); + sin6->sin6_flowinfo = 0; + sin6->sin6_scope_id = 0; + if (ipv6_addr_type(&sin6->sin6_addr) & IPV6_ADDR_LINKLOCAL) +@@ -509,6 +536,9 @@ + struct inet_sock *inet = inet_sk(sk); + struct ipv6hdr *iph; + struct sk_buff *skb; ++#ifdef CONFIG_IPV6_STATISTICS ++ struct inet6_dev *idev = NULL; ++#endif + unsigned int hh_len; + int err; + +@@ -539,7 +569,12 @@ + if (err) + goto error_fault; + ++#ifdef CONFIG_IPV6_STATISTICS ++ idev = rt->rt6i_idev; ++ IP6_INC_STATS(idev, IPSTATS_MIB_OUTREQUESTS); ++#else + IP6_INC_STATS(IPSTATS_MIB_OUTREQUESTS); ++#endif + err = NF_HOOK(PF_INET6, NF_IP6_LOCAL_OUT, skb, NULL, rt->u.dst.dev, + dst_output); + if (err > 0) +@@ -553,7 +588,11 @@ + err = -EFAULT; + kfree_skb(skb); + error: ++#ifdef CONFIG_IPV6_STATISTICS ++ IP6_INC_STATS(idev, IPSTATS_MIB_OUTDISCARDS); ++#else + IP6_INC_STATS(IPSTATS_MIB_OUTDISCARDS); ++#endif + return err; + } + +@@ -756,6 +795,8 @@ + hlimit = np->hop_limit; + if (hlimit < 0) + hlimit = dst_metric(dst, RTAX_HOPLIMIT); ++ if (hlimit < 0) ++ hlimit = ipv6_get_hoplimit(dst->dev); + } + + if (msg->msg_flags&MSG_CONFIRM) +@@ -952,7 +993,11 @@ + } + + default: ++#ifdef CONFIG_IPV6_MROUTE ++ return ip6mr_ioctl(sk,cmd,(void __user *)arg); ++#else + return -ENOIOCTLCMD; ++#endif + } + } + +@@ -960,7 +1005,12 @@ + { + if (inet_sk(sk)->num == IPPROTO_RAW) + ip6_ra_control(sk, -1, NULL); +- ++#ifdef CONFIG_IPV6_MROUTE ++ if (sk == mroute6_socket) { ++ printk(KERN_DEBUG "closing mroute6 socket.\n"); ++ ip6_ra_control(sk, -1, NULL); ++ } ++#endif + sk_common_release(sk); + } + +diff -urN linux-2.6.11/net/ipv6/reassembly.c linux.sinabox/net/ipv6/reassembly.c +--- linux-2.6.11/net/ipv6/reassembly.c 2005-03-02 08:37:53.000000000 +0100 ++++ linux.sinabox/net/ipv6/reassembly.c 2005-03-26 19:02:06.000000000 +0100 +@@ -53,6 +53,9 @@ + #include + #include + #include ++#ifdef CONFIG_IPV6_STATISTICS ++#include ++#endif + + int sysctl_ip6frag_high_thresh = 256*1024; + int sysctl_ip6frag_low_thresh = 192*1024; +@@ -264,7 +267,7 @@ + } + } + +-static void ip6_evictor(void) ++static void ip6_evictor(struct inet6_dev *idev) + { + struct frag_queue *fq; + struct list_head *tmp; +@@ -291,14 +294,21 @@ + spin_unlock(&fq->lock); + + fq_put(fq, &work); ++#ifdef CONFIG_IPV6_STATISTICS ++ IP6_INC_STATS_BH(idev, IPSTATS_MIB_REASMFAILS); ++#else + IP6_INC_STATS_BH(IPSTATS_MIB_REASMFAILS); ++#endif + } + } + + static void ip6_frag_expire(unsigned long data) + { + struct frag_queue *fq = (struct frag_queue *) data; +- ++ struct net_device *dev = NULL; ++#ifdef CONFIG_IPV6_STATISTICS ++ struct inet6_dev *idev = NULL; ++#endif + spin_lock(&fq->lock); + + if (fq->last_in & COMPLETE) +@@ -306,13 +316,19 @@ + + fq_kill(fq); + ++#ifdef CONFIG_IPV6_STATISTICS ++ dev = dev_get_by_index(fq->iif); ++ idev = dev ? in6_dev_get(dev) : NULL; ++ ++ IP6_INC_STATS_BH(idev, IPSTATS_MIB_REASMTIMEOUT); ++ IP6_INC_STATS_BH(idev, IPSTATS_MIB_REASMFAILS); ++#else + IP6_INC_STATS_BH(IPSTATS_MIB_REASMTIMEOUT); + IP6_INC_STATS_BH(IPSTATS_MIB_REASMFAILS); ++#endif + + /* Send error only if the first segment arrived. */ + if (fq->last_in&FIRST_IN && fq->fragments) { +- struct net_device *dev = dev_get_by_index(fq->iif); +- + /* + But use as source device on which LAST ARRIVED + segment was received. And do not use fq->dev +@@ -322,9 +338,14 @@ + fq->fragments->dev = dev; + icmpv6_send(fq->fragments, ICMPV6_TIME_EXCEED, ICMPV6_EXC_FRAGTIME, 0, + dev); +- dev_put(dev); + } + } ++#ifdef CONFIG_IPV6_STATISTICS ++ if (idev) ++ in6_dev_put(idev); ++ if (dev) ++ dev_put(dev); ++#endif + out: + spin_unlock(&fq->lock); + fq_put(fq, NULL); +@@ -371,7 +392,11 @@ + + + static struct frag_queue * ++#ifdef CONFIG_IPV6_STATISTICS ++ip6_frag_create(unsigned int hash, u32 id, struct in6_addr *src, struct in6_addr *dst, struct inet6_dev *idev) ++#else + ip6_frag_create(unsigned int hash, u32 id, struct in6_addr *src, struct in6_addr *dst) ++#endif + { + struct frag_queue *fq; + +@@ -393,12 +418,20 @@ + return ip6_frag_intern(hash, fq); + + oom: ++#ifdef CONFIG_IPV6_STATISTICS ++ IP6_INC_STATS_BH(idev, IPSTATS_MIB_REASMFAILS); ++#else + IP6_INC_STATS_BH(IPSTATS_MIB_REASMFAILS); ++#endif + return NULL; + } + + static __inline__ struct frag_queue * ++#ifdef CONFIG_IPV6_STATISTICS ++fq_find(u32 id, struct in6_addr *src, struct in6_addr *dst, struct inet6_dev *idev) ++#else + fq_find(u32 id, struct in6_addr *src, struct in6_addr *dst) ++#endif + { + struct frag_queue *fq; + unsigned int hash = ip6qhashfn(id, src, dst); +@@ -415,7 +448,11 @@ + } + read_unlock(&ip6_frag_lock); + ++#ifdef CONFIG_IPV6_STATISTICS ++ return ip6_frag_create(hash, id, src, dst, idev); ++#else + return ip6_frag_create(hash, id, src, dst); ++#endif + } + + +@@ -423,6 +460,11 @@ + struct frag_hdr *fhdr, int nhoff) + { + struct sk_buff *prev, *next; ++#ifdef CONFIG_IPV6_STATISTICS ++ struct dst_entry *dst = skb->dst; ++ struct inet6_dev *idev = ((struct rt6_info *)dst)->rt6i_idev; ++#endif ++ + int offset, end; + + if (fq->last_in & COMPLETE) +@@ -433,7 +475,11 @@ + ((u8 *) (fhdr + 1) - (u8 *) (skb->nh.ipv6h + 1))); + + if ((unsigned int)end > IPV6_MAXPLEN) { ++#ifdef CONFIG_IPV6_STATISTICS ++ IP6_INC_STATS_BH(idev, IPSTATS_MIB_INHDRERRORS); ++#else + IP6_INC_STATS_BH(IPSTATS_MIB_INHDRERRORS); ++#endif + icmpv6_param_prob(skb,ICMPV6_HDR_FIELD, (u8*)&fhdr->frag_off - skb->nh.raw); + return; + } +@@ -460,7 +506,11 @@ + /* RFC2460 says always send parameter problem in + * this case. -DaveM + */ ++#ifdef CONFIG_IPV6_STATISTICS ++ IP6_INC_STATS_BH(idev, IPSTATS_MIB_INHDRERRORS); ++#else + IP6_INC_STATS_BH(IPSTATS_MIB_INHDRERRORS); ++#endif + icmpv6_param_prob(skb, ICMPV6_HDR_FIELD, + offsetof(struct ipv6hdr, payload_len)); + return; +@@ -579,7 +629,11 @@ + return; + + err: ++#ifdef CONFIG_IPV6_STATISTICS ++ IP6_INC_STATS(idev, IPSTATS_MIB_REASMFAILS); ++#else + IP6_INC_STATS(IPSTATS_MIB_REASMFAILS); ++#endif + kfree_skb(skb); + } + +@@ -597,6 +651,11 @@ + struct net_device *dev) + { + struct sk_buff *fp, *head = fq->fragments; ++#ifdef CONFIG_IPV6_STATISTICS ++ struct sk_buff *skb = *skb_in; ++ struct dst_entry *dst = skb->dst; ++ struct inet6_dev *idev = ((struct rt6_info *)dst)->rt6i_idev; ++#endif + int payload_len; + unsigned int nhoff; + +@@ -673,7 +732,11 @@ + if (head->ip_summed == CHECKSUM_HW) + head->csum = csum_partial(head->nh.raw, head->h.raw-head->nh.raw, head->csum); + ++#ifdef CONFIG_IPV6_STATISTICS ++ IP6_INC_STATS_BH(idev, IPSTATS_MIB_REASMOKS); ++#else + IP6_INC_STATS_BH(IPSTATS_MIB_REASMOKS); ++#endif + fq->fragments = NULL; + *nhoffp = nhoff; + return 1; +@@ -686,7 +749,11 @@ + if (net_ratelimit()) + printk(KERN_DEBUG "ip6_frag_reasm: no memory for reassembly\n"); + out_fail: ++#ifdef CONFIG_IPV6_STATISTICS ++ IP6_INC_STATS_BH(idev, IPSTATS_MIB_REASMFAILS); ++#else + IP6_INC_STATS_BH(IPSTATS_MIB_REASMFAILS); ++#endif + return -1; + } + +@@ -697,19 +764,35 @@ + struct frag_hdr *fhdr; + struct frag_queue *fq; + struct ipv6hdr *hdr; ++#ifdef CONFIG_IPV6_STATISTICS ++ struct dst_entry *dst = skb->dst; ++ struct inet6_dev *idev = ((struct rt6_info *)dst)->rt6i_idev; ++#endif + + hdr = skb->nh.ipv6h; + ++#ifdef CONFIG_IPV6_STATISTICS ++ IP6_INC_STATS_BH(idev, IPSTATS_MIB_REASMREQDS); ++#else + IP6_INC_STATS_BH(IPSTATS_MIB_REASMREQDS); ++#endif + + /* Jumbo payload inhibits frag. header */ + if (hdr->payload_len==0) { ++#ifdef CONFIG_IPV6_STATISTICS ++ IP6_INC_STATS(idev, IPSTATS_MIB_INHDRERRORS); ++#else + IP6_INC_STATS(IPSTATS_MIB_INHDRERRORS); ++#endif + icmpv6_param_prob(skb, ICMPV6_HDR_FIELD, skb->h.raw-skb->nh.raw); + return -1; + } + if (!pskb_may_pull(skb, (skb->h.raw-skb->data)+sizeof(struct frag_hdr))) { ++#ifdef CONFIG_IPV6_STATISTICS ++ IP6_INC_STATS(idev, IPSTATS_MIB_INHDRERRORS); ++#else + IP6_INC_STATS(IPSTATS_MIB_INHDRERRORS); ++#endif + icmpv6_param_prob(skb, ICMPV6_HDR_FIELD, skb->h.raw-skb->nh.raw); + return -1; + } +@@ -720,16 +803,29 @@ + if (!(fhdr->frag_off & htons(0xFFF9))) { + /* It is not a fragmented frame */ + skb->h.raw += sizeof(struct frag_hdr); ++#ifdef CONFIG_IPV6_STATISTICS ++ IP6_INC_STATS_BH(idev, IPSTATS_MIB_REASMOKS); ++#else + IP6_INC_STATS_BH(IPSTATS_MIB_REASMOKS); ++#endif + + *nhoffp = (u8*)fhdr - skb->nh.raw; + return 1; + } + +- if (atomic_read(&ip6_frag_mem) > sysctl_ip6frag_high_thresh) +- ip6_evictor(); ++ if (atomic_read(&ip6_frag_mem) > sysctl_ip6frag_high_thresh) { ++#ifdef CONFIG_IPV6_STATISTICS ++ ip6_evictor(idev); ++#else ++ ip6_evictor(NULL); ++#endif ++ } + ++#ifdef CONFIG_IPV6_STATISTICS ++ if ((fq = fq_find(fhdr->identification, &hdr->saddr, &hdr->daddr, idev)) != NULL) { ++#else + if ((fq = fq_find(fhdr->identification, &hdr->saddr, &hdr->daddr)) != NULL) { ++#endif + int ret = -1; + + spin_lock(&fq->lock); +@@ -745,7 +841,11 @@ + return ret; + } + ++#ifdef CONFIG_IPV6_STATISTICS ++ IP6_INC_STATS_BH(idev, IPSTATS_MIB_REASMFAILS); ++#else + IP6_INC_STATS_BH(IPSTATS_MIB_REASMFAILS); ++#endif + kfree_skb(skb); + return -1; + } +diff -urN linux-2.6.11/net/ipv6/route.c linux.sinabox/net/ipv6/route.c +--- linux-2.6.11/net/ipv6/route.c 2005-03-02 08:38:17.000000000 +0100 ++++ linux.sinabox/net/ipv6/route.c 2005-03-26 19:02:06.000000000 +0100 +@@ -136,7 +136,6 @@ + + DEFINE_RWLOCK(rt6_lock); + +- + /* allocate dst with ip6_dst_ops */ + static __inline__ struct rt6_info *ip6_dst_alloc(void) + { +@@ -216,8 +215,9 @@ + /* + * pointer to the last default router chosen. BH is disabled locally. + */ +-static struct rt6_info *rt6_dflt_pointer; +-static DEFINE_SPINLOCK(rt6_dflt_lock); ++#if !defined(CONFIG_IPV6_NEW_ROUNDROBIN) ++struct rt6_info *rt6_dflt_pointer; ++spinlock_t rt6_dflt_lock = SPIN_LOCK_UNLOCKED; + + void rt6_reset_dflt_pointer(struct rt6_info *rt) + { +@@ -228,61 +228,168 @@ + } + spin_unlock_bh(&rt6_dflt_lock); + } ++#endif + + /* Default Router Selection (RFC 2461 6.3.6) */ +-static struct rt6_info *rt6_best_dflt(struct rt6_info *rt, int oif) ++static int __rt6_score_dflt(struct rt6_info *sprt, struct rt6_info *dflt, int oif) + { +- struct rt6_info *match = NULL; +- struct rt6_info *sprt; +- int mpri = 0; ++ struct neighbour *neigh = sprt->rt6i_nexthop; ++ int m = oif ? 0 : 8; + +- for (sprt = rt; sprt; sprt = sprt->u.next) { +- struct neighbour *neigh; +- int m = 0; ++ if (!neigh) ++ return -1; + +- if (!oif || +- (sprt->rt6i_dev && +- sprt->rt6i_dev->ifindex == oif)) +- m += 8; ++ if (rt6_check_expired(sprt)) ++ return -1; + +- if (rt6_check_expired(sprt)) +- continue; ++ if (oif && sprt->rt6i_dev && ++ sprt->rt6i_dev->ifindex == oif) ++ m += 8; ++ ++#if !defined(CONFIG_IPV6_ROUTER_PREF) ++ if (sprt == dflt) ++ m += 4; ++#endif + +- if (sprt == rt6_dflt_pointer) +- m += 4; ++ read_lock_bh(&neigh->lock); ++ switch (neigh->nud_state) { ++ case NUD_REACHABLE: ++ m += 3; ++ break; + +- if ((neigh = sprt->rt6i_nexthop) != NULL) { +- read_lock_bh(&neigh->lock); +- switch (neigh->nud_state) { +- case NUD_REACHABLE: +- m += 3; +- break; ++ case NUD_STALE: ++ case NUD_DELAY: ++ case NUD_PROBE: ++ m += 2; ++ break; + +- case NUD_STALE: +- case NUD_DELAY: +- case NUD_PROBE: +- m += 2; +- break; ++ case NUD_NOARP: ++ case NUD_PERMANENT: ++ m += 1; ++ break; + +- case NUD_NOARP: +- case NUD_PERMANENT: +- m += 1; ++ case NUD_INCOMPLETE: ++ default: ++ m = -1; ++ } ++ read_unlock_bh(&neigh->lock); ++ ++ return m; ++} ++ ++static struct rt6_info *rt6_best_dflt(struct rt6_info *rt, struct rt6_info **head, int oif) ++{ ++ struct rt6_info *match = NULL; ++ struct rt6_info *sprt; ++#if defined(CONFIG_IPV6_NEW_ROUNDROBIN) ++ struct rt6_info *last = NULL; ++#endif ++ int mpri = 0; ++#if defined(CONFIG_IPV6_ROUTER_PREF) ++ u32 metric = 0; ++ int pref = -3; ++#else ++ static const int okpri = 12; /* device match, prob. reachable */ ++#endif ++ ++ if (head != NULL && *head != rt) ++ head = NULL; /*XXX*/ ++ ++#if !defined(CONFIG_IPV6_NEW_ROUNDROBIN) ++ spin_lock(&rt6_dflt_lock); ++#endif ++#if !defined(CONFIG_IPV6_NEW_ROUNDROBIN) ++ if (rt6_dflt_pointer) { ++ for (sprt = rt; sprt; sprt = sprt->u.next) { ++ if (sprt == rt6_dflt_pointer) + break; ++ } ++ if (!sprt) ++ rt6_dflt_pointer = NULL; /* for sure */ ++ } ++#endif + +- case NUD_INCOMPLETE: +- default: +- read_unlock_bh(&neigh->lock); ++#if defined(CONFIG_IPV6_ROUTER_PREF) ++#if !defined(CONFIG_IPV6_NEW_ROUNDROBIN) ++ if (rt6_dflt_pointer) { ++ for (sprt = rt6_dflt_pointer->u.next; sprt; sprt = sprt->u.next) { ++ int m, p; ++ ++ if ((metric != 0 && sprt->rt6i_metric > metric) || ++ sprt->u.dst.obsolete > 0 || ++ sprt->u.dst.error != 0) + continue; ++ ++#if defined(CONFIG_IPV6_NEW_ROUNDROBIN) ++ m = __rt6_score_dflt(sprt, rt, oif); ++#else ++ m = __rt6_score_dflt(sprt, rt6_dflt_pointer, oif); ++#endif ++ if (m < mpri) ++ continue; ++ p = IPV6_SIGNEDPREF(IPV6_UNSHIFT_PREF(sprt->rt6i_flags)); ++ if (sprt->rt6i_metric < metric || m > mpri || p > pref) { ++ match = sprt; ++ metric = sprt->rt6i_metric; ++ mpri = m; ++ pref = p; + } +- read_unlock_bh(&neigh->lock); +- } else { ++ } ++ } ++#endif ++#if defined(CONFIG_IPV6_NEW_ROUNDROBIN) ++ metric = rt->rt6i_metric; ++#endif ++ for (sprt = rt; sprt; sprt = sprt->u.next) { ++ int m, p; ++#if defined(CONFIG_IPV6_NEW_ROUNDROBIN) ++ if (sprt->rt6i_metric > metric) ++ break; ++#else ++ if ((metric != 0 && sprt->rt6i_metric > metric) || ++ sprt->u.dst.obsolete > 0 || ++ sprt->u.dst.error != 0) + continue; ++ ++#endif ++#if defined(CONFIG_IPV6_NEW_ROUNDROBIN) ++ m = __rt6_score_dflt(sprt, rt, oif); ++#else ++ m = __rt6_score_dflt(sprt, rt6_dflt_pointer, oif); ++#endif ++ if (m < mpri) ++ continue; ++ p = IPV6_SIGNEDPREF(IPV6_UNSHIFT_PREF(sprt->rt6i_flags)); ++ if ( ++#if !defined(CONFIG_IPV6_NEW_ROUNDROBIN) ++ sprt->rt6i_metric < metric || ++#endif ++ m > mpri || p > pref) { ++ match = sprt; ++ metric = sprt->rt6i_metric; ++ mpri = m; ++ pref = p; + } ++#if defined(CONFIG_IPV6_NEW_ROUNDROBIN) ++ last = sprt; ++#else ++ if (sprt == rt6_dflt_pointer) ++ break; ++#endif ++ } ++#else /* CONFIG_IPV6_ROUTER_PREF / !CONFIG_IPV6_ROUTER_PREF */ ++ for (sprt = rt; sprt; sprt = sprt->u.next) { ++ int m; ++#if defined(CONFIG_IPV6_NEW_ROUNDROBIN) ++ m = __rt6_score_dflt(sprt, rt, oif); ++#else ++ m = __rt6_score_dflt(sprt, rt6_dflt_pointer, oif); ++#endif + +- if (m > mpri || m >= 12) { ++ if (m > mpri || m >= okpri) { + match = sprt; + mpri = m; +- if (m >= 12) { ++ if (m >= okpri) { + /* we choose the last default router if it + * is in (probably) reachable state. + * If route changed, we should do pmtu +@@ -293,7 +400,6 @@ + } + } + +- spin_lock(&rt6_dflt_lock); + if (!match) { + /* + * No default routers are known to be reachable. +@@ -323,14 +429,25 @@ + } + } + } ++#endif /* !CONFIG_IPV6_ROUTER_PREF */ + + if (match) { ++#if defined(CONFIG_IPV6_NEW_ROUNDROBIN) ++ if (rt != last && last) { ++ *head = rt->u.next; ++ rt->u.next = last->u.next; ++ last->u.next = rt; ++ } ++#else + if (rt6_dflt_pointer != match) + RT6_TRACE("changed default router: %p->%p\n", + rt6_dflt_pointer, match); + rt6_dflt_pointer = match; ++#endif + } ++#if !defined(CONFIG_IPV6_NEW_ROUNDROBIN) + spin_unlock(&rt6_dflt_lock); ++#endif + + if (!match) { + /* +@@ -540,7 +657,7 @@ + } + if (rt->rt6i_flags & RTF_DEFAULT) { + if (rt->rt6i_metric >= IP6_RT_PRIO_ADDRCONF) +- rt = rt6_best_dflt(rt, fl->oif); ++ rt = rt6_best_dflt(rt, &fn->leaf, fl->oif); + } else { + rt = rt6_device_match(rt, fl->oif, strict); + BACKTRACK(); +@@ -575,7 +692,6 @@ + return &rt->u.dst; + } + +- + /* + * Destination cache support functions + */ +@@ -628,8 +744,10 @@ + + if (mtu < dst_pmtu(dst) && rt6->rt6i_dst.plen == 128) { + rt6->rt6i_flags |= RTF_MODIFIED; +- if (mtu < IPV6_MIN_MTU) ++ if (mtu < IPV6_MIN_MTU) { + mtu = IPV6_MIN_MTU; ++ dst->metrics[RTAX_FEATURES-1] |= RTAX_FEATURE_ALLFRAG; ++ } + dst->metrics[RTAX_MTU-1] = mtu; + } + } +@@ -769,7 +887,7 @@ + return mtu; + } + +-static int ipv6_get_hoplimit(struct net_device *dev) ++int ipv6_get_hoplimit(struct net_device *dev) + { + int hoplimit = ipv6_devconf.hop_limit; + struct inet6_dev *idev; +@@ -965,14 +1083,8 @@ + } + } + +- if (rt->u.dst.metrics[RTAX_HOPLIMIT-1] == 0) { +- if (ipv6_addr_is_multicast(&rt->rt6i_dst.addr)) +- rt->u.dst.metrics[RTAX_HOPLIMIT-1] = +- IPV6_DEFAULT_MCASTHOPS; +- else +- rt->u.dst.metrics[RTAX_HOPLIMIT-1] = +- ipv6_get_hoplimit(dev); +- } ++ if (rt->u.dst.metrics[RTAX_HOPLIMIT-1] == 0) ++ rt->u.dst.metrics[RTAX_HOPLIMIT-1] = -1; + + if (!rt->u.dst.metrics[RTAX_MTU-1]) + rt->u.dst.metrics[RTAX_MTU-1] = ipv6_get_mtu(dev); +@@ -998,7 +1110,9 @@ + + write_lock_bh(&rt6_lock); + ++#ifndef CONFIG_IPV6_NEW_ROUNDROBIN + rt6_reset_dflt_pointer(NULL); ++#endif + + err = fib6_del(rt, nlh, _rtattr); + dst_release(&rt->u.dst); +@@ -1051,11 +1165,24 @@ + { + struct rt6_info *rt, *nrt; + ++#ifdef CONFIG_IPV6_NDISC_DEBUG ++ printk(KERN_DEBUG ++ "%s(" ++ "dest=%04x:%04x:%04x:%04x:%04x:%04x:%04x:%04x, " ++ "saddr=%04x:%04x:%04x:%04x:%04x:%04x:%04x:%04x, " ++ "neigh=%p(%s), " ++ "lladdr=%p, on_link=%d)\n", ++ __FUNCTION__, ++ NIP6(*dest), NIP6(*saddr), ++ neigh, neigh_state(neigh->nud_state), ++ lladdr, on_link); ++#endif ++ + /* Locate old route to this destination. */ + rt = rt6_lookup(dest, NULL, neigh->dev->ifindex, 1); + + if (rt == NULL) +- return; ++ goto out; + + if (neigh->dev != rt->rt6i_dev) + goto out; +@@ -1068,8 +1195,12 @@ + * But then router serving it might decide, that we should + * know truth 8)8) --ANK (980726). + */ +- if (!(rt->rt6i_flags&RTF_GATEWAY)) ++ if (!(rt->rt6i_flags&RTF_GATEWAY)) { ++ if (net_ratelimit()) ++ printk(KERN_DEBUG "%s(): rt=%p is on-link; ignored.\n", ++ __FUNCTION__, rt); + goto out; ++ } + + /* + * RFC 2461 specifies that redirects should only be +@@ -1101,9 +1232,8 @@ + } + + source_ok: +- + /* +- * We have finally decided to accept it. ++ * Okay, we have finally decided to accept it. + */ + + neigh_update(neigh, lladdr, NUD_STALE, +@@ -1152,7 +1282,6 @@ + + out: + dst_release(&rt->u.dst); +- return; + } + + /* +@@ -1164,17 +1293,7 @@ + struct net_device *dev, u32 pmtu) + { + struct rt6_info *rt, *nrt; +- +- if (pmtu < IPV6_MIN_MTU) { +- if (net_ratelimit()) +- printk(KERN_DEBUG "rt6_pmtu_discovery: invalid MTU value %d\n", +- pmtu); +- /* According to RFC1981, the PMTU is set to the IPv6 minimum +- link MTU if the node receives a Packet Too Big message +- reporting next-hop MTU that is less than the IPv6 minimum MTU. +- */ +- pmtu = IPV6_MIN_MTU; +- } ++ int allfrag = 0; + + rt = rt6_lookup(daddr, saddr, dev->ifindex, 0); + +@@ -1184,6 +1303,17 @@ + if (pmtu >= dst_pmtu(&rt->u.dst)) + goto out; + ++ if (pmtu < IPV6_MIN_MTU) { ++ /* ++ * According to RFC2461, pmtu is set to the IPv6 minimum MTU ++ * (1280) and a fragment header is included after a node ++ * receiving Too Big message reporting PMTU is less than ++ * the IPv6 minimum MTU. ++ */ ++ pmtu = IPV6_MIN_MTU; ++ allfrag = 1; ++ } ++ + /* New mtu received -> path was valid. + They are sent only in response to data packets, + so that this nexthop apparently is reachable. --ANK +@@ -1197,6 +1327,8 @@ + */ + if (rt->rt6i_flags & RTF_CACHE) { + rt->u.dst.metrics[RTAX_MTU-1] = pmtu; ++ if (allfrag) ++ rt->u.dst.metrics[RTAX_FEATURES-1] |= RTAX_FEATURE_ALLFRAG; + dst_set_expires(&rt->u.dst, ip6_rt_mtu_expires); + rt->rt6i_flags |= RTF_MODIFIED|RTF_EXPIRES; + goto out; +@@ -1211,6 +1343,8 @@ + nrt = rt6_cow(rt, daddr, saddr); + if (!nrt->u.dst.error) { + nrt->u.dst.metrics[RTAX_MTU-1] = pmtu; ++ if (allfrag) ++ nrt->u.dst.metrics[RTAX_FEATURES-1] |= RTAX_FEATURE_ALLFRAG; + /* According to RFC 1981, detecting PMTU increase shouldn't be + happened within 5 mins, the recommended timer is 10 mins. + Here this route expiration time is set to ip6_rt_mtu_expires +@@ -1232,6 +1366,8 @@ + dst_set_expires(&nrt->u.dst, ip6_rt_mtu_expires); + nrt->rt6i_flags |= RTF_DYNAMIC|RTF_CACHE|RTF_EXPIRES; + nrt->u.dst.metrics[RTAX_MTU-1] = pmtu; ++ if (allfrag) ++ nrt->u.dst.metrics[RTAX_FEATURES-1] |= RTAX_FEATURE_ALLFRAG; + ip6_ins_rt(nrt, NULL, NULL); + } + +@@ -1293,7 +1429,8 @@ + } + + struct rt6_info *rt6_add_dflt_router(struct in6_addr *gwaddr, +- struct net_device *dev) ++ struct net_device *dev, ++ int pref) + { + struct in6_rtmsg rtmsg; + +@@ -1301,7 +1438,7 @@ + rtmsg.rtmsg_type = RTMSG_NEWROUTE; + ipv6_addr_copy(&rtmsg.rtmsg_gateway, gwaddr); + rtmsg.rtmsg_metric = 1024; +- rtmsg.rtmsg_flags = RTF_GATEWAY | RTF_ADDRCONF | RTF_DEFAULT | RTF_UP | RTF_EXPIRES; ++ rtmsg.rtmsg_flags = RTF_GATEWAY | RTF_ADDRCONF | RTF_DEFAULT | RTF_UP | RTF_PREF(pref&3) | RTF_EXPIRES; + + rtmsg.rtmsg_ifindex = dev->ifindex; + +@@ -1319,7 +1456,9 @@ + if (rt->rt6i_flags & (RTF_DEFAULT | RTF_ADDRCONF)) { + dst_hold(&rt->u.dst); + ++#ifndef CONFIG_IPV6_NEW_ROUNDROBIN + rt6_reset_dflt_pointer(NULL); ++#endif + + read_unlock_bh(&rt6_lock); + +@@ -1371,7 +1510,13 @@ + + int ip6_pkt_discard(struct sk_buff *skb) + { ++#ifdef CONFIG_IPV6_STATISTICS ++ struct dst_entry *dst = skb->dst; ++ struct inet6_dev *idev = ((struct rt6_info *)dst)->rt6i_idev; ++ IP6_INC_STATS(idev, IPSTATS_MIB_OUTNOROUTES); ++#else + IP6_INC_STATS(IPSTATS_MIB_OUTNOROUTES); ++#endif + icmpv6_send(skb, ICMPV6_DEST_UNREACH, ICMPV6_NOROUTE, 0, skb->dev); + kfree_skb(skb); + return 0; +@@ -1406,7 +1551,7 @@ + rt->rt6i_idev = idev; + rt->u.dst.metrics[RTAX_MTU-1] = ipv6_get_mtu(rt->rt6i_dev); + rt->u.dst.metrics[RTAX_ADVMSS-1] = ipv6_advmss(dst_pmtu(&rt->u.dst)); +- rt->u.dst.metrics[RTAX_HOPLIMIT-1] = ipv6_get_hoplimit(rt->rt6i_dev); ++ rt->u.dst.metrics[RTAX_HOPLIMIT-1] = -1; + rt->u.dst.obsolete = -1; + + rt->rt6i_flags = RTF_UP | RTF_NONEXTHOP; +@@ -1877,7 +2022,6 @@ + static int rt6_info_route(struct rt6_info *rt, void *p_arg) + { + struct rt6_proc_arg *arg = (struct rt6_proc_arg *) p_arg; +- int i; + + if (arg->skip < arg->offset / RT6_INFO_LEN) { + arg->skip++; +@@ -1887,39 +2031,29 @@ + if (arg->len >= arg->length) + return 0; + +- for (i=0; i<16; i++) { +- sprintf(arg->buffer + arg->len, "%02x", +- rt->rt6i_dst.addr.s6_addr[i]); +- arg->len += 2; +- } +- arg->len += sprintf(arg->buffer + arg->len, " %02x ", ++ arg->len += sprintf(arg->buffer + arg->len, ++ "%04x%04x%04x%04x%04x%04x%04x%04x %02x ", ++ NIP6(rt->rt6i_dst.addr), + rt->rt6i_dst.plen); + + #ifdef CONFIG_IPV6_SUBTREES +- for (i=0; i<16; i++) { +- sprintf(arg->buffer + arg->len, "%02x", +- rt->rt6i_src.addr.s6_addr[i]); +- arg->len += 2; +- } +- arg->len += sprintf(arg->buffer + arg->len, " %02x ", ++ arg->len += sprintf(arg->buffer + arg->len, ++ "%04x%04x%04x%04x%04x%04x%04x%04x %02x ", ++ NIP6(rt->rt6i_src.addr), + rt->rt6i_src.plen); + #else +- sprintf(arg->buffer + arg->len, +- "00000000000000000000000000000000 00 "); +- arg->len += 36; ++ arg->len += sprintf(arg->buffer + arg->len, ++ "00000000000000000000000000000000 00 "); + #endif + +- if (rt->rt6i_nexthop) { +- for (i=0; i<16; i++) { +- sprintf(arg->buffer + arg->len, "%02x", +- rt->rt6i_nexthop->primary_key[i]); +- arg->len += 2; +- } +- } else { +- sprintf(arg->buffer + arg->len, +- "00000000000000000000000000000000"); +- arg->len += 32; +- } ++ if (rt->rt6i_nexthop) ++ arg->len += sprintf(arg->buffer + arg->len, ++ "%04x%04x%04x%04x%04x%04x%04x%04x", ++ NIP6(*((struct in6_addr *)rt->rt6i_nexthop->primary_key))); ++ else ++ arg->len += sprintf(arg->buffer + arg->len, ++ "00000000000000000000000000000000"); ++ + arg->len += sprintf(arg->buffer + arg->len, + " %08x %08x %08x %08x %8s\n", + rt->rt6i_metric, atomic_read(&rt->u.dst.__refcnt), +@@ -2080,6 +2214,15 @@ + .proc_handler = &proc_dointvec_jiffies, + .strategy = &sysctl_jiffies, + }, ++ { ++ .ctl_name = NET_IPV6_ROUTE_GC_MIN_INTERVAL_MS, ++ .procname = "gc_min_interval_ms", ++ .data = &ip6_rt_gc_min_interval, ++ .maxlen = sizeof(int), ++ .mode = 0644, ++ .proc_handler = &proc_dointvec_ms_jiffies, ++ .strategy = &sysctl_ms_jiffies, ++ }, + { .ctl_name = 0 } + }; + +diff -urN linux-2.6.11/net/ipv6/udp.c linux.sinabox/net/ipv6/udp.c +--- linux-2.6.11/net/ipv6/udp.c 2005-03-02 08:38:20.000000000 +0100 ++++ linux.sinabox/net/ipv6/udp.c 2005-03-26 19:02:06.000000000 +0100 +@@ -277,7 +277,6 @@ + if (ipv6_addr_type(&sin6->sin6_addr) & IPV6_ADDR_LINKLOCAL) + sin6->sin6_scope_id = IP6CB(skb)->iif; + } +- + } + if (skb->protocol == htons(ETH_P_IP)) { + if (inet->cmsg_flags) +@@ -811,6 +810,8 @@ + hlimit = np->hop_limit; + if (hlimit < 0) + hlimit = dst_metric(dst, RTAX_HOPLIMIT); ++ if (hlimit < 0) ++ hlimit = ipv6_get_hoplimit(dst->dev); + } + + if (msg->msg_flags&MSG_CONFIRM) +diff -urN linux-2.6.11/net/ipv6/xfrm6_input.c linux.sinabox/net/ipv6/xfrm6_input.c +--- linux-2.6.11/net/ipv6/xfrm6_input.c 2005-03-02 08:38:33.000000000 +0100 ++++ linux.sinabox/net/ipv6/xfrm6_input.c 2005-03-26 19:02:06.000000000 +0100 +@@ -42,7 +42,7 @@ + nexthdr = skb->nh.raw[nhoff]; + + seq = 0; +- if (!spi && (err = xfrm_parse_spi(skb, nexthdr, &spi, &seq)) != 0) ++ if (!spi && (err = xfrm_parse_spi(skb, nexthdr, &spi)) != 0) + goto drop; + + do { +@@ -58,9 +58,6 @@ + if (unlikely(x->km.state != XFRM_STATE_VALID)) + goto drop_unlock; + +- if (x->props.replay_window && xfrm_replay_check(x, seq)) +- goto drop_unlock; +- + if (xfrm_state_check_expire(x)) + goto drop_unlock; + +@@ -70,9 +67,6 @@ + + skb->nh.raw[nhoff] = nexthdr; + +- if (x->props.replay_window) +- xfrm_replay_advance(x, seq); +- + x->curlft.bytes += skb->len; + x->curlft.packets++; + +@@ -99,8 +93,9 @@ + break; + } + +- if ((err = xfrm_parse_spi(skb, nexthdr, &spi, &seq)) < 0) ++ if ((err = xfrm_parse_spi(skb, nexthdr, &spi)) < 0) + goto drop; ++ + } while (!err); + + /* Allocate new secpath or COW existing one. */ +diff -urN linux-2.6.11/net/ipv6/xfrm6_policy.c linux.sinabox/net/ipv6/xfrm6_policy.c +--- linux-2.6.11/net/ipv6/xfrm6_policy.c 2005-03-02 08:37:50.000000000 +0100 ++++ linux.sinabox/net/ipv6/xfrm6_policy.c 2005-03-26 19:02:06.000000000 +0100 +@@ -25,8 +25,8 @@ + static int xfrm6_dst_lookup(struct xfrm_dst **dst, struct flowi *fl) + { + int err = 0; +- *dst = (struct xfrm_dst*)ip6_route_output(NULL, fl); +- if (!*dst) ++ err = ip6_dst_lookup(NULL, (struct dst_entry **)dst, fl); ++ if (err) + err = -ENETUNREACH; + return err; + } +@@ -56,7 +56,6 @@ + { + struct dst_entry *dst; + +- /* Still not clear if we should set fl->fl6_{src,dst}... */ + read_lock_bh(&policy->lock); + for (dst = policy->bundles; dst; dst = dst->next) { + struct xfrm_dst *xdst = (struct xfrm_dst*)dst; +diff -urN linux-2.6.11/net/Kconfig linux.sinabox/net/Kconfig +--- linux-2.6.11/net/Kconfig 2005-03-02 08:38:34.000000000 +0100 ++++ linux.sinabox/net/Kconfig 2005-03-26 19:02:06.000000000 +0100 +@@ -81,6 +81,18 @@ + + Say Y unless you know what you are doing. + ++config USE_POLICY_FWD ++ bool "Use xfrm policy fwd" ++ default y ++ ---help--- ++ Using XFRM_POLICY_FWD which corespond to fwd in setkey ++ when specifing inbound forwarding policy. ++ This is USAGI original changes. If you want the original ++ kernel behavior of IPsec, say Y. If you want behavior ++ which is similar to KAME IPsec stack, say N. ++ ++ Unsure, Say Y. ++ + config INET + bool "TCP/IP networking" + ---help--- +@@ -107,12 +119,12 @@ + + # IPv6 as module will cause a CRASH if you try to unload it + config IPV6 +- tristate "The IPv6 protocol (EXPERIMENTAL)" +- depends on INET && EXPERIMENTAL +- select CRYPTO if IPV6_PRIVACY +- select CRYPTO_MD5 if IPV6_PRIVACY ++ tristate "The IPv6 protocol" ++ depends on INET ++ select CRYPTO if IPV6_PRIVACY_MD5 ++ select CRYPTO_MD5 if IPV6_PRIVACY_MD5 + ---help--- +- This is experimental support for the IP version 6 (formerly called ++ This is additional support for the IP version 6 (formerly called + IPng "IP next generation"). You will still be able to do + regular IPv4 networking as well. + +@@ -127,8 +139,6 @@ + To compile this protocol support as a module, choose M here: the + module will be called ipv6. + +- It is safe to say N here for now. +- + source "net/ipv6/Kconfig" + + menuconfig NETFILTER +diff -urN linux-2.6.11/net/netrom/nr_in.c linux.sinabox/net/netrom/nr_in.c +--- linux-2.6.11/net/netrom/nr_in.c 2005-03-02 08:38:01.000000000 +0100 ++++ linux.sinabox/net/netrom/nr_in.c 2005-03-19 07:34:55.000000000 +0100 +@@ -74,7 +74,6 @@ + static int nr_state1_machine(struct sock *sk, struct sk_buff *skb, + int frametype) + { +- bh_lock_sock(sk); + switch (frametype) { + case NR_CONNACK: { + nr_cb *nr = nr_sk(sk); +@@ -103,8 +102,6 @@ + default: + break; + } +- bh_unlock_sock(sk); +- + return 0; + } + +@@ -116,7 +113,6 @@ + static int nr_state2_machine(struct sock *sk, struct sk_buff *skb, + int frametype) + { +- bh_lock_sock(sk); + switch (frametype) { + case NR_CONNACK | NR_CHOKE_FLAG: + nr_disconnect(sk, ECONNRESET); +@@ -132,8 +128,6 @@ + default: + break; + } +- bh_unlock_sock(sk); +- + return 0; + } + +@@ -154,7 +148,6 @@ + nr = skb->data[18]; + ns = skb->data[17]; + +- bh_lock_sock(sk); + switch (frametype) { + case NR_CONNREQ: + nr_write_internal(sk, NR_CONNACK); +@@ -265,8 +258,6 @@ + default: + break; + } +- bh_unlock_sock(sk); +- + return queued; + } + +diff -urN linux-2.6.11/net/sched/sch_generic.c linux.sinabox/net/sched/sch_generic.c +--- linux-2.6.11/net/sched/sch_generic.c 2005-03-02 08:37:45.000000000 +0100 ++++ linux.sinabox/net/sched/sch_generic.c 2005-03-26 00:49:04.000000000 +0100 +@@ -29,6 +29,9 @@ + #include + #include + #include ++#if defined(CONFIG_IMQ) || defined(CONFIG_IMQ_MODULE) ++#include ++#endif + #include + #include + #include +@@ -136,7 +139,13 @@ + + if (!netif_queue_stopped(dev)) { + int ret; +- if (netdev_nit) ++ ++ if (netdev_nit ++#if defined(CONFIG_IMQ) || defined(CONFIG_IMQ_MODULE) ++ && !(skb->imq_flags & IMQ_F_ENQUEUE) ++#endif ++ ) ++ + dev_queue_xmit_nit(skb, dev); + + ret = dev->hard_start_xmit(skb, dev); +diff -urN linux-2.6.11/net/xfrm/xfrm_input.c linux.sinabox/net/xfrm/xfrm_input.c +--- linux-2.6.11/net/xfrm/xfrm_input.c 2005-03-02 08:38:34.000000000 +0100 ++++ linux.sinabox/net/xfrm/xfrm_input.c 2005-03-26 19:02:06.000000000 +0100 +@@ -46,24 +46,21 @@ + + /* Fetch spi and seq from ipsec header */ + +-int xfrm_parse_spi(struct sk_buff *skb, u8 nexthdr, u32 *spi, u32 *seq) ++int xfrm_parse_spi(struct sk_buff *skb, u8 nexthdr, u32 *spi) + { +- int offset, offset_seq; ++ int offset; + + switch (nexthdr) { + case IPPROTO_AH: + offset = offsetof(struct ip_auth_hdr, spi); +- offset_seq = offsetof(struct ip_auth_hdr, seq_no); + break; + case IPPROTO_ESP: + offset = offsetof(struct ip_esp_hdr, spi); +- offset_seq = offsetof(struct ip_esp_hdr, seq_no); + break; + case IPPROTO_COMP: + if (!pskb_may_pull(skb, sizeof(struct ip_comp_hdr))) + return -EINVAL; + *spi = ntohl(ntohs(*(u16*)(skb->h.raw + 2))); +- *seq = 0; + return 0; + default: + return 1; +@@ -73,7 +70,6 @@ + return -EINVAL; + + *spi = *(u32*)(skb->h.raw + offset); +- *seq = *(u32*)(skb->h.raw + offset_seq); + return 0; + } + EXPORT_SYMBOL(xfrm_parse_spi); +diff -urN linux-2.6.11/net/xfrm/xfrm_policy.c linux.sinabox/net/xfrm/xfrm_policy.c +--- linux-2.6.11/net/xfrm/xfrm_policy.c 2005-03-02 08:38:09.000000000 +0100 ++++ linux.sinabox/net/xfrm/xfrm_policy.c 2005-03-26 19:02:06.000000000 +0100 +@@ -703,9 +703,14 @@ + + static inline int policy_to_flow_dir(int dir) + { ++#ifdef CONFIG_USE_POLICY_FWD + if (XFRM_POLICY_IN == FLOW_DIR_IN && + XFRM_POLICY_OUT == FLOW_DIR_OUT && + XFRM_POLICY_FWD == FLOW_DIR_FWD) ++#else ++ if (XFRM_POLICY_IN == FLOW_DIR_IN && ++ XFRM_POLICY_OUT == FLOW_DIR_OUT) ++#endif + return dir; + switch (dir) { + default: +@@ -713,8 +718,10 @@ + return FLOW_DIR_IN; + case XFRM_POLICY_OUT: + return FLOW_DIR_OUT; ++#ifdef CONFIG_USE_POLICY_FWD + case XFRM_POLICY_FWD: + return FLOW_DIR_FWD; ++#endif + }; + } + +diff -urN linux-2.6.11/net/xfrm/xfrm_state.c linux.sinabox/net/xfrm/xfrm_state.c +--- linux-2.6.11/net/xfrm/xfrm_state.c 2005-03-02 08:38:17.000000000 +0100 ++++ linux.sinabox/net/xfrm/xfrm_state.c 2005-03-19 07:35:00.000000000 +0100 +@@ -609,7 +609,7 @@ + + for (i = 0; i < XFRM_DST_HSIZE; i++) { + list_for_each_entry(x, xfrm_state_bydst+i, bydst) { +- if (x->km.seq == seq) { ++ if (x->km.seq == seq && x->km.state == XFRM_STATE_ACQ) { + xfrm_state_hold(x); + return x; + } +diff -urN linux-2.6.11/net/xfrm/xfrm_user.c linux.sinabox/net/xfrm/xfrm_user.c +--- linux-2.6.11/net/xfrm/xfrm_user.c 2005-03-02 08:38:10.000000000 +0100 ++++ linux.sinabox/net/xfrm/xfrm_user.c 2005-03-26 19:02:06.000000000 +0100 +@@ -530,7 +530,9 @@ + switch (dir) { + case XFRM_POLICY_IN: + case XFRM_POLICY_OUT: ++#ifdef CONFIG_USE_POLICY_FWD + case XFRM_POLICY_FWD: ++#endif + break; + + default: +@@ -1136,14 +1138,14 @@ + + switch (family) { + case AF_INET: +- if (opt != IP_XFRM_POLICY) { ++ if (opt != IP_XFRM_POLICY && opt != IP_IPSEC_POLICY) { + *dir = -EOPNOTSUPP; + return NULL; + } + break; + #if defined(CONFIG_IPV6) || defined(CONFIG_IPV6_MODULE) + case AF_INET6: +- if (opt != IPV6_XFRM_POLICY) { ++ if (opt != IPV6_XFRM_POLICY && opt != IPV6_IPSEC_POLICY) { + *dir = -EOPNOTSUPP; + return NULL; + } +diff -urN linux-2.6.11/scripts/package/builddeb linux.sinabox/scripts/package/builddeb +--- linux-2.6.11/scripts/package/builddeb 2005-03-02 08:38:37.000000000 +0100 ++++ linux.sinabox/scripts/package/builddeb 1970-01-01 01:00:00.000000000 +0100 +@@ -1,79 +0,0 @@ +-#!/bin/sh +-# +-# builddeb 1.2 +-# Copyright 2003 Wichert Akkerman +-# +-# Simple script to generate a deb package for a Linux kernel. All the +-# complexity of what to do with a kernel after it is installer or removed +-# is left to other scripts and packages: they can install scripts in the +-# /etc/kernel/{pre,post}{inst,rm}.d/ directories that will be called on +-# package install and removal. +- +-set -e +- +-# Some variables and settings used throughout the script +-version=$KERNELRELEASE +-tmpdir="$objtree/debian/tmp" +- +-# Setup the directory structure +-rm -rf "$tmpdir" +-mkdir -p "$tmpdir/DEBIAN" "$tmpdir/lib" "$tmpdir/boot" +- +-# Build and install the kernel +-cp System.map "$tmpdir/boot/System.map-$version" +-cp .config "$tmpdir/boot/config-$version" +-cp $KBUILD_IMAGE "$tmpdir/boot/vmlinuz-$version" +- +-if grep -q '^CONFIG_MODULES=y' .config ; then +- INSTALL_MOD_PATH="$tmpdir" make modules_install +-fi +- +-# Install the maintainer scripts +-for script in postinst postrm preinst prerm ; do +- mkdir -p "$tmpdir/etc/kernel/$script.d" +- cat < "$tmpdir/DEBIAN/$script" +-#!/bin/sh +- +-set -e +- +-test -d /etc/kernel/$script.d && run-parts --arg="$version" /etc/kernel/$script.d +-exit 0 +-EOF +- chmod 755 "$tmpdir/DEBIAN/$script" +-done +- +-name="Kernel Compiler <$(id -nu)@$(hostname -f)>" +-# Generate a simple changelog template +-cat < debian/changelog +-linux ($version) unstable; urgency=low +- +- * A standard release +- +- -- $name $(date -R) +-EOF +- +-# Generate a control file +-cat < debian/control +-Source: linux +-Section: base +-Priority: optional +-Maintainer: $name +-Standards-Version: 3.6.1 +- +-Package: linux-$version +-Architecture: any +-Description: Linux kernel, version $version +- This package contains the Linux kernel, modules and corresponding other +- files version $version. +-EOF +- +-# Fix some ownership and permissions +-chown -R root:root "$tmpdir" +-chmod -R go-w "$tmpdir" +- +-# Perform the final magic +-dpkg-gencontrol -isp +-dpkg --build "$tmpdir" .. +- +-exit 0 +- +diff -urN linux-2.6.11/scripts/package/builddeb.dist linux.sinabox/scripts/package/builddeb.dist +--- linux-2.6.11/scripts/package/builddeb.dist 1970-01-01 01:00:00.000000000 +0100 ++++ linux.sinabox/scripts/package/builddeb.dist 2005-03-19 07:35:06.000000000 +0100 +@@ -0,0 +1,79 @@ ++#!/bin/sh ++# ++# builddeb 1.2 ++# Copyright 2003 Wichert Akkerman ++# ++# Simple script to generate a deb package for a Linux kernel. All the ++# complexity of what to do with a kernel after it is installer or removed ++# is left to other scripts and packages: they can install scripts in the ++# /etc/kernel/{pre,post}{inst,rm}.d/ directories that will be called on ++# package install and removal. ++ ++set -e ++ ++# Some variables and settings used throughout the script ++version=$KERNELRELEASE ++tmpdir="$objtree/debian/tmp" ++ ++# Setup the directory structure ++rm -rf "$tmpdir" ++mkdir -p "$tmpdir/DEBIAN" "$tmpdir/lib" "$tmpdir/boot" ++ ++# Build and install the kernel ++cp System.map "$tmpdir/boot/System.map-$version" ++cp .config "$tmpdir/boot/config-$version" ++cp $KBUILD_IMAGE "$tmpdir/boot/vmlinuz-$version" ++ ++if grep -q '^CONFIG_MODULES=y' .config ; then ++ INSTALL_MOD_PATH="$tmpdir" make modules_install ++fi ++ ++# Install the maintainer scripts ++for script in postinst postrm preinst prerm ; do ++ mkdir -p "$tmpdir/etc/kernel/$script.d" ++ cat < "$tmpdir/DEBIAN/$script" ++#!/bin/sh ++ ++set -e ++ ++test -d /etc/kernel/$script.d && run-parts --arg="$version" /etc/kernel/$script.d ++exit 0 ++EOF ++ chmod 755 "$tmpdir/DEBIAN/$script" ++done ++ ++name="Kernel Compiler <$(id -nu)@$(hostname -f)>" ++# Generate a simple changelog template ++cat < debian/changelog ++linux ($version) unstable; urgency=low ++ ++ * A standard release ++ ++ -- $name $(date -R) ++EOF ++ ++# Generate a control file ++cat < debian/control ++Source: linux ++Section: base ++Priority: optional ++Maintainer: $name ++Standards-Version: 3.6.1 ++ ++Package: linux-$version ++Architecture: any ++Description: Linux kernel, version $version ++ This package contains the Linux kernel, modules and corresponding other ++ files version $version. ++EOF ++ ++# Fix some ownership and permissions ++chown -R root:root "$tmpdir" ++chmod -R go-w "$tmpdir" ++ ++# Perform the final magic ++dpkg-gencontrol -isp ++dpkg --build "$tmpdir" .. ++ ++exit 0 ++ +diff -urN linux-2.6.11/scripts/package/Makefile linux.sinabox/scripts/package/Makefile +--- linux-2.6.11/scripts/package/Makefile 2005-03-02 08:38:11.000000000 +0100 ++++ linux.sinabox/scripts/package/Makefile 2005-03-24 19:30:47.000000000 +0100 +@@ -1,89 +1,2 @@ +-# Makefile for the different targets used to generate full packages of a kernel +-# It uses the generic clean infrastructure of kbuild +- +-# Ignore the following files/directories during tar operation +-TAR_IGNORE := --exclude SCCS --exclude BitKeeper --exclude .svn --exclude CVS +- +- +-# RPM target +-# --------------------------------------------------------------------------- +-# The rpm target generates two rpm files: +-# /usr/src/packages/SRPMS/kernel-2.6.7rc2-1.src.rpm +-# /usr/src/packages/RPMS/i386/kernel-2.6.7rc2-1..rpm +-# The src.rpm files includes all source for the kernel being built +-# The .rpm includes kernel configuration, modules etc. +-# +-# Process to create the rpm files +-# a) clean the kernel +-# b) Generate .spec file +-# c) Build a tar ball, using symlink to make kernel version +-# first entry in the path +-# d) and pack the result to a tar.gz file +-# e) generate the rpm files, based on kernel.spec +-# - Use /. to avoid tar packing just the symlink +- +-# Do we have rpmbuild, otherwise fall back to the older rpm +-RPM := $(shell if [ -x "/usr/bin/rpmbuild" ]; then echo rpmbuild; \ +- else echo rpm; fi) +- +-# Remove hyphens since they have special meaning in RPM filenames +-KERNELPATH := kernel-$(subst -,,$(KERNELRELEASE)) +-MKSPEC := $(srctree)/scripts/package/mkspec +-PREV := set -e; cd ..; +- +-# rpm-pkg +-.PHONY: rpm-pkg rpm +- +-$(objtree)/kernel.spec: $(MKSPEC) $(srctree)/Makefile +- $(CONFIG_SHELL) $(MKSPEC) > $@ +- +-rpm-pkg rpm: $(objtree)/kernel.spec +- $(MAKE) clean +- $(PREV) ln -sf $(srctree) $(KERNELPATH) +- $(PREV) tar -cz $(RCS_TAR_IGNORE) -f $(KERNELPATH).tar.gz $(KERNELPATH)/. +- $(PREV) rm $(KERNELPATH) +- +- set -e; \ +- $(CONFIG_SHELL) $(srctree)/scripts/mkversion > $(objtree)/.tmp_version +- set -e; \ +- mv -f $(objtree)/.tmp_version $(objtree)/.version +- +- $(RPM) --target $(UTS_MACHINE) -ta ../$(KERNELPATH).tar.gz +- rm ../$(KERNELPATH).tar.gz +- +-clean-files := $(objtree)/kernel.spec +- +-# binrpm-pkg +-.PHONY: binrpm-pkg +-$(objtree)/binkernel.spec: $(MKSPEC) $(srctree)/Makefile +- $(CONFIG_SHELL) $(MKSPEC) prebuilt > $@ +- +-binrpm-pkg: $(objtree)/binkernel.spec +- $(MAKE) +- set -e; \ +- $(CONFIG_SHELL) $(srctree)/scripts/mkversion > $(objtree)/.tmp_version +- set -e; \ +- mv -f $(objtree)/.tmp_version $(objtree)/.version +- +- $(RPM) --define "_builddir $(srctree)" --target $(UTS_MACHINE) -bb $< +- +-clean-files += $(objtree)/binkernel.spec +- +-# Deb target +-# --------------------------------------------------------------------------- +-# +-.PHONY: deb-pkg +-deb-pkg: +- $(MAKE) +- $(CONFIG_SHELL) $(srctree)/scripts/package/builddeb +- +-clean-dirs += $(objtree)/debian/ +- +- +-# Help text displayed when executing 'make help' +-# --------------------------------------------------------------------------- ++# Dummy file + help: +- @echo ' rpm-pkg - Build the kernel as an RPM package' +- @echo ' binrpm-pkg - Build an rpm package containing the compiled kernel & modules' +- @echo ' deb-pkg - Build the kernel as an deb package' +- +diff -urN linux-2.6.11/scripts/package/Makefile.dist linux.sinabox/scripts/package/Makefile.dist +--- linux-2.6.11/scripts/package/Makefile.dist 1970-01-01 01:00:00.000000000 +0100 ++++ linux.sinabox/scripts/package/Makefile.dist 2005-03-19 07:34:59.000000000 +0100 +@@ -0,0 +1,89 @@ ++# Makefile for the different targets used to generate full packages of a kernel ++# It uses the generic clean infrastructure of kbuild ++ ++# Ignore the following files/directories during tar operation ++TAR_IGNORE := --exclude SCCS --exclude BitKeeper --exclude .svn --exclude CVS ++ ++ ++# RPM target ++# --------------------------------------------------------------------------- ++# The rpm target generates two rpm files: ++# /usr/src/packages/SRPMS/kernel-2.6.7rc2-1.src.rpm ++# /usr/src/packages/RPMS/i386/kernel-2.6.7rc2-1..rpm ++# The src.rpm files includes all source for the kernel being built ++# The .rpm includes kernel configuration, modules etc. ++# ++# Process to create the rpm files ++# a) clean the kernel ++# b) Generate .spec file ++# c) Build a tar ball, using symlink to make kernel version ++# first entry in the path ++# d) and pack the result to a tar.gz file ++# e) generate the rpm files, based on kernel.spec ++# - Use /. to avoid tar packing just the symlink ++ ++# Do we have rpmbuild, otherwise fall back to the older rpm ++RPM := $(shell if [ -x "/usr/bin/rpmbuild" ]; then echo rpmbuild; \ ++ else echo rpm; fi) ++ ++# Remove hyphens since they have special meaning in RPM filenames ++KERNELPATH := kernel-$(subst -,,$(KERNELRELEASE)) ++MKSPEC := $(srctree)/scripts/package/mkspec ++PREV := set -e; cd ..; ++ ++# rpm-pkg ++.PHONY: rpm-pkg rpm ++ ++$(objtree)/kernel.spec: $(MKSPEC) $(srctree)/Makefile ++ $(CONFIG_SHELL) $(MKSPEC) > $@ ++ ++rpm-pkg rpm: $(objtree)/kernel.spec ++ $(MAKE) clean ++ $(PREV) ln -sf $(srctree) $(KERNELPATH) ++ $(PREV) tar -cz $(RCS_TAR_IGNORE) -f $(KERNELPATH).tar.gz $(KERNELPATH)/. ++ $(PREV) rm $(KERNELPATH) ++ ++ set -e; \ ++ $(CONFIG_SHELL) $(srctree)/scripts/mkversion > $(objtree)/.tmp_version ++ set -e; \ ++ mv -f $(objtree)/.tmp_version $(objtree)/.version ++ ++ $(RPM) --target $(UTS_MACHINE) -ta ../$(KERNELPATH).tar.gz ++ rm ../$(KERNELPATH).tar.gz ++ ++clean-files := $(objtree)/kernel.spec ++ ++# binrpm-pkg ++.PHONY: binrpm-pkg ++$(objtree)/binkernel.spec: $(MKSPEC) $(srctree)/Makefile ++ $(CONFIG_SHELL) $(MKSPEC) prebuilt > $@ ++ ++binrpm-pkg: $(objtree)/binkernel.spec ++ $(MAKE) ++ set -e; \ ++ $(CONFIG_SHELL) $(srctree)/scripts/mkversion > $(objtree)/.tmp_version ++ set -e; \ ++ mv -f $(objtree)/.tmp_version $(objtree)/.version ++ ++ $(RPM) --define "_builddir $(srctree)" --target $(UTS_MACHINE) -bb $< ++ ++clean-files += $(objtree)/binkernel.spec ++ ++# Deb target ++# --------------------------------------------------------------------------- ++# ++.PHONY: deb-pkg ++deb-pkg: ++ $(MAKE) ++ $(CONFIG_SHELL) $(srctree)/scripts/package/builddeb ++ ++clean-dirs += $(objtree)/debian/ ++ ++ ++# Help text displayed when executing 'make help' ++# --------------------------------------------------------------------------- ++help: ++ @echo ' rpm-pkg - Build the kernel as an RPM package' ++ @echo ' binrpm-pkg - Build an rpm package containing the compiled kernel & modules' ++ @echo ' deb-pkg - Build the kernel as an deb package' ++ +diff -urN linux-2.6.11/sound/pci/ac97/ac97_codec.c linux.sinabox/sound/pci/ac97/ac97_codec.c +--- linux-2.6.11/sound/pci/ac97/ac97_codec.c 2005-03-02 08:38:37.000000000 +0100 ++++ linux.sinabox/sound/pci/ac97/ac97_codec.c 2005-03-19 07:35:06.000000000 +0100 +@@ -1185,7 +1185,7 @@ + /* + * create mute switch(es) for normal stereo controls + */ +-static int snd_ac97_cmute_new(snd_card_t *card, char *name, int reg, ac97_t *ac97) ++static int snd_ac97_cmute_new_stereo(snd_card_t *card, char *name, int reg, int check_stereo, ac97_t *ac97) + { + snd_kcontrol_t *kctl; + int err; +@@ -1196,7 +1196,7 @@ + + mute_mask = 0x8000; + val = snd_ac97_read(ac97, reg); +- if (ac97->flags & AC97_STEREO_MUTES) { ++ if (check_stereo || (ac97->flags & AC97_STEREO_MUTES)) { + /* check whether both mute bits work */ + val1 = val | 0x8080; + snd_ac97_write(ac97, reg, val1); +@@ -1254,7 +1254,7 @@ + /* + * create a mute-switch and a volume for normal stereo/mono controls + */ +-static int snd_ac97_cmix_new(snd_card_t *card, const char *pfx, int reg, ac97_t *ac97) ++static int snd_ac97_cmix_new_stereo(snd_card_t *card, const char *pfx, int reg, int check_stereo, ac97_t *ac97) + { + int err; + char name[44]; +@@ -1265,7 +1265,7 @@ + + if (snd_ac97_try_bit(ac97, reg, 15)) { + sprintf(name, "%s Switch", pfx); +- if ((err = snd_ac97_cmute_new(card, name, reg, ac97)) < 0) ++ if ((err = snd_ac97_cmute_new_stereo(card, name, reg, check_stereo, ac97)) < 0) + return err; + } + check_volume_resolution(ac97, reg, &lo_max, &hi_max); +@@ -1277,6 +1277,8 @@ + return 0; + } + ++#define snd_ac97_cmix_new(card, pfx, reg, ac97) snd_ac97_cmix_new_stereo(card, pfx, reg, 0, ac97) ++#define snd_ac97_cmute_new(card, name, reg, ac97) snd_ac97_cmute_new_stereo(card, name, reg, 0, ac97) + + static unsigned int snd_ac97_determine_spdif_rates(ac97_t *ac97); + +@@ -1327,7 +1329,8 @@ + + /* build surround controls */ + if (snd_ac97_try_volume_mix(ac97, AC97_SURROUND_MASTER)) { +- if ((err = snd_ac97_cmix_new(card, "Surround Playback", AC97_SURROUND_MASTER, ac97)) < 0) ++ /* Surround Master (0x38) is with stereo mutes */ ++ if ((err = snd_ac97_cmix_new_stereo(card, "Surround Playback", AC97_SURROUND_MASTER, 1, ac97)) < 0) + return err; + } + +diff -urN linux-2.6.11/stamp-build linux.sinabox/stamp-build +--- linux-2.6.11/stamp-build 1970-01-01 01:00:00.000000000 +0100 ++++ linux.sinabox/stamp-build 2005-03-24 19:40:43.000000000 +0100 +@@ -0,0 +1 @@ ++done +diff -urN linux-2.6.11/stamp-configure linux.sinabox/stamp-configure +--- linux-2.6.11/stamp-configure 1970-01-01 01:00:00.000000000 +0100 ++++ linux.sinabox/stamp-configure 2005-03-27 04:28:14.000000000 +0200 +@@ -0,0 +1 @@ ++done +diff -urN linux-2.6.11/stamp-debian linux.sinabox/stamp-debian +--- linux-2.6.11/stamp-debian 1970-01-01 01:00:00.000000000 +0100 ++++ linux.sinabox/stamp-debian 2005-03-24 19:30:47.000000000 +0100 +@@ -0,0 +1 @@ ++done +diff -urN linux-2.6.11/stamp-image linux.sinabox/stamp-image +--- linux-2.6.11/stamp-image 1970-01-01 01:00:00.000000000 +0100 ++++ linux.sinabox/stamp-image 2005-03-27 04:28:28.000000000 +0200 +@@ -0,0 +1 @@ ++done +diff -urN linux-2.6.11/stamp-kernel-configure linux.sinabox/stamp-kernel-configure +--- linux-2.6.11/stamp-kernel-configure 1970-01-01 01:00:00.000000000 +0100 ++++ linux.sinabox/stamp-kernel-configure 2005-03-27 04:28:14.000000000 +0200 +@@ -0,0 +1 @@ ++done diff --git a/noc/patches/linux-2.6.9-imq1.diff b/noc/patches/linux-2.6.9-imq1.diff new file mode 100644 index 0000000..26b5539 --- /dev/null +++ b/noc/patches/linux-2.6.9-imq1.diff @@ -0,0 +1,841 @@ +diff -Nru linux-2.6.9.orig/drivers/net/Kconfig linux-2.6.9/drivers/net/Kconfig +--- linux-2.6.9.orig/drivers/net/Kconfig 2004-10-18 21:55:06.000000000 +0000 ++++ linux-2.6.9/drivers/net/Kconfig 2004-10-19 18:34:52.000000000 +0000 +@@ -81,6 +81,129 @@ + To compile this driver as a module, choose M here: the module + will be called eql. If unsure, say N. + ++config IMQ ++ tristate "IMQ (intermediate queueing device) support" ++ depends on NETDEVICES && NETFILTER ++ ---help--- ++ The IMQ device(s) is used as placeholder for QoS queueing disciplines. ++ Every packet entering/leaving the IP stack can be directed through ++ the IMQ device where it's enqueued/dequeued to the attached qdisc. ++ This allows you to treat network devices as classes and distribute ++ bandwidth among them. Iptables is used to specify through which IMQ ++ device, if any, packets travel. ++ ++ More information at: http://www.linuximq.net/ ++ ++ To compile this driver as a module, choose M here: the module ++ will be called imq. If unsure, say N. ++ ++choice ++ prompt "IMQ behavior (PRE/POSTROUTING)" ++ depends on IMQ ++ default IMQ_BEHAVIOR_BA ++ help ++ ++ This settings defines how IMQ behaves in respect to its ++ hooking in PREROUTING and POSTROUTING. ++ ++ IMQ can work in any of the following ways: ++ ++ PREROUTING | POSTROUTING ++ -----------------|------------------- ++ #1 After NAT | After NAT ++ #2 After NAT | Before NAT ++ #3 Before NAT | After NAT ++ #4 Before NAT | Before NAT ++ ++ The default behavior is to hook before NAT on PREROUTING ++ and after NAT on POSTROUTING (#3). ++ ++ This settings are specially usefull when trying to use IMQ ++ to shape NATed clients. ++ ++ More information can be found at: www.linuximq.net ++ ++ If not sure leave the default settings alone. ++ ++config IMQ_BEHAVIOR_AA ++ bool "IMQ AA" ++ help ++ This settings defines how IMQ behaves in respect to its ++ hooking in PREROUTING and POSTROUTING. ++ ++ Choosing this option will make IMQ hook like this: ++ ++ PREROUTING: After NAT ++ POSTROUTING: After NAT ++ ++ More information can be found at: www.linuximq.net ++ ++ If not sure leave the default settings alone. ++ ++config IMQ_BEHAVIOR_AB ++ bool "IMQ AB" ++ help ++ This settings defines how IMQ behaves in respect to its ++ hooking in PREROUTING and POSTROUTING. ++ ++ Choosing this option will make IMQ hook like this: ++ ++ PREROUTING: After NAT ++ POSTROUTING: Before NAT ++ ++ More information can be found at: www.linuximq.net ++ ++ If not sure leave the default settings alone. ++ ++config IMQ_BEHAVIOR_BA ++ bool "IMQ BA" ++ help ++ This settings defines how IMQ behaves in respect to its ++ hooking in PREROUTING and POSTROUTING. ++ ++ Choosing this option will make IMQ hook like this: ++ ++ PREROUTING: Before NAT ++ POSTROUTING: After NAT ++ ++ More information can be found at: www.linuximq.net ++ ++ If not sure leave the default settings alone. ++ ++config IMQ_BEHAVIOR_BB ++ bool "IMQ BB" ++ help ++ This settings defines how IMQ behaves in respect to its ++ hooking in PREROUTING and POSTROUTING. ++ ++ Choosing this option will make IMQ hook like this: ++ ++ PREROUTING: Before NAT ++ POSTROUTING: Before NAT ++ ++ More information can be found at: www.linuximq.net ++ ++ If not sure leave the default settings alone. ++ ++endchoice ++ ++config IMQ_NUM_DEVS ++ ++ int "Number of IMQ devices" ++ range 2 8 ++ depends on IMQ ++ default "2" ++ help ++ ++ This settings defines how many IMQ devices will be ++ created. ++ ++ The default value is 2. ++ ++ More information can be found at: www.linuximq.net ++ ++ If not sure leave the default settings alone. ++ + config TUN + tristate "Universal TUN/TAP device driver support" + depends on NETDEVICES +diff -Nru linux-2.6.9.orig/drivers/net/Makefile linux-2.6.9/drivers/net/Makefile +--- linux-2.6.9.orig/drivers/net/Makefile 2004-10-18 21:53:45.000000000 +0000 ++++ linux-2.6.9/drivers/net/Makefile 2004-10-19 18:34:52.000000000 +0000 +@@ -113,6 +113,7 @@ + endif + + obj-$(CONFIG_DUMMY) += dummy.o ++obj-$(CONFIG_IMQ) += imq.o + obj-$(CONFIG_DE600) += de600.o + obj-$(CONFIG_DE620) += de620.o + obj-$(CONFIG_LANCE) += lance.o +diff -Nru linux-2.6.9.orig/drivers/net/imq.c linux-2.6.9/drivers/net/imq.c +--- linux-2.6.9.orig/drivers/net/imq.c 1970-01-01 00:00:00.000000000 +0000 ++++ linux-2.6.9/drivers/net/imq.c 2004-10-19 18:34:52.000000000 +0000 +@@ -0,0 +1,387 @@ ++/* ++ * Pseudo-driver for the intermediate queue device. ++ * ++ * This program 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 ++ * 2 of the License, or (at your option) any later version. ++ * ++ * Authors: Patrick McHardy, ++ * ++ * The first version was written by Martin Devera, ++ * ++ * Credits: Jan Rafaj ++ * - Update patch to 2.4.21 ++ * Sebastian Strollo ++ * - Fix "Dead-loop on netdevice imq"-issue ++ * Marcel Sebek ++ * - Update to 2.6.2-rc1 ++ * ++ * After some time of inactivity there is a group taking care ++ * of IMQ again: http://www.linuximq.net ++ * ++ * ++ * 2004/06/30 - New version of IMQ patch to kernels <=2.6.7 including ++ * the following changes: ++ * ++ * - Correction of ipv6 support "+"s issue (Hasso Tepper) ++ * - Correction of imq_init_devs() issue that resulted in ++ * kernel OOPS unloading IMQ as module (Norbert Buchmuller) ++ * - Addition of functionality to choose number of IMQ devices ++ * during kernel config (Andre Correa) ++ * - Addition of functionality to choose how IMQ hooks on ++ * PRE and POSTROUTING (after or before NAT) (Andre Correa) ++ * - Cosmetic corrections (Norbert Buchmuller) (Andre Correa) ++ * ++ * More info at: http://www.linuximq.net/ (2004-04-22) ++ */ ++ ++#include ++#include ++#include ++#include ++#include ++#include ++#include ++#include ++#include ++#include ++#if defined(CONFIG_IPV6) || defined (CONFIG_IPV6_MODULE) ++ #include ++#endif ++#include ++#include ++ ++static nf_hookfn imq_nf_hook; ++ ++static struct nf_hook_ops imq_ingress_ipv4 = { ++ .hook = imq_nf_hook, ++ .owner = THIS_MODULE, ++ .pf = PF_INET, ++ .hooknum = NF_IP_PRE_ROUTING, ++#if defined(CONFIG_IMQ_BEHAVIOR_BA) || defined(CONFIG_IMQ_BEHAVIOR_BB) ++ .priority = NF_IP_PRI_MANGLE + 1 ++#else ++ .priority = NF_IP_PRI_NAT_DST + 1 ++#endif ++}; ++ ++static struct nf_hook_ops imq_egress_ipv4 = { ++ .hook = imq_nf_hook, ++ .owner = THIS_MODULE, ++ .pf = PF_INET, ++ .hooknum = NF_IP_POST_ROUTING, ++#if defined(CONFIG_IMQ_BEHAVIOR_AA) || defined(CONFIG_IMQ_BEHAVIOR_BA) ++ .priority = NF_IP_PRI_LAST ++#else ++ .priority = NF_IP_PRI_NAT_SRC - 1 ++#endif ++}; ++ ++#if defined(CONFIG_IPV6) || defined (CONFIG_IPV6_MODULE) ++static struct nf_hook_ops imq_ingress_ipv6 = { ++ .hook = imq_nf_hook, ++ .owner = THIS_MODULE, ++ .pf = PF_INET6, ++ .hooknum = NF_IP6_PRE_ROUTING, ++#if defined(CONFIG_IMQ_BEHAVIOR_BA) || defined(CONFIG_IMQ_BEHAVIOR_BB) ++ .priority = NF_IP6_PRI_MANGLE + 1 ++#else ++ .priority = NF_IP6_PRI_NAT_DST + 1 ++#endif ++}; ++ ++static struct nf_hook_ops imq_egress_ipv6 = { ++ .hook = imq_nf_hook, ++ .owner = THIS_MODULE, ++ .pf = PF_INET6, ++ .hooknum = NF_IP6_POST_ROUTING, ++#if defined(CONFIG_IMQ_BEHAVIOR_AA) || defined(CONFIG_IMQ_BEHAVIOR_BA) ++ .priority = NF_IP6_PRI_LAST ++#else ++ .priority = NF_IP6_PRI_NAT_SRC - 1 ++#endif ++}; ++#endif ++ ++#if defined(CONFIG_IMQ_NUM_DEVS) ++static unsigned int numdevs = CONFIG_IMQ_NUM_DEVS; ++#else ++static unsigned int numdevs = 2; ++#endif ++ ++static struct net_device *imq_devs; ++ ++static struct net_device_stats *imq_get_stats(struct net_device *dev) ++{ ++ return (struct net_device_stats *)dev->priv; ++} ++ ++/* called for packets kfree'd in qdiscs at places other than enqueue */ ++static void imq_skb_destructor(struct sk_buff *skb) ++{ ++ struct nf_info *info = skb->nf_info; ++ ++ if (info) { ++ if (info->indev) ++ dev_put(info->indev); ++ if (info->outdev) ++ dev_put(info->outdev); ++ kfree(info); ++ } ++} ++ ++static int imq_dev_xmit(struct sk_buff *skb, struct net_device *dev) ++{ ++ struct net_device_stats *stats = (struct net_device_stats*) dev->priv; ++ ++ stats->tx_bytes += skb->len; ++ stats->tx_packets++; ++ ++ skb->imq_flags = 0; ++ skb->destructor = NULL; ++ ++ dev->trans_start = jiffies; ++ nf_reinject(skb, skb->nf_info, NF_ACCEPT); ++ return 0; ++} ++ ++static int imq_nf_queue(struct sk_buff *skb, struct nf_info *info, void *data) ++{ ++ struct net_device *dev; ++ struct net_device_stats *stats; ++ struct sk_buff *skb2 = NULL; ++ struct Qdisc *q; ++ unsigned int index = skb->imq_flags&IMQ_F_IFMASK; ++ int ret = -1; ++ ++ if (index > numdevs) ++ return -1; ++ ++ dev = imq_devs + index; ++ if (!(dev->flags & IFF_UP)) { ++ skb->imq_flags = 0; ++ nf_reinject(skb, info, NF_ACCEPT); ++ return 0; ++ } ++ dev->last_rx = jiffies; ++ ++ if (skb->destructor) { ++ skb2 = skb; ++ skb = skb_clone(skb, GFP_ATOMIC); ++ if (!skb) ++ return -1; ++ } ++ skb->nf_info = info; ++ ++ stats = (struct net_device_stats *)dev->priv; ++ stats->rx_bytes+= skb->len; ++ stats->rx_packets++; ++ ++ spin_lock_bh(&dev->queue_lock); ++ q = dev->qdisc; ++ if (q->enqueue) { ++ q->enqueue(skb_get(skb), q); ++ if (skb_shared(skb)) { ++ skb->destructor = imq_skb_destructor; ++ kfree_skb(skb); ++ ret = 0; ++ } ++ } ++ if (spin_is_locked(&dev->xmit_lock)) ++ netif_schedule(dev); ++ else ++ ++ while (!netif_queue_stopped(dev) && ++ qdisc_restart(dev)<0) ++ /* NOTHING */; ++ ++ spin_unlock_bh(&dev->queue_lock); ++ ++ if (skb2) ++ kfree_skb(ret ? skb : skb2); ++ ++ return ret; ++} ++ ++static unsigned int imq_nf_hook(unsigned int hook, struct sk_buff **pskb, ++ const struct net_device *indev, ++ const struct net_device *outdev, ++ int (*okfn)(struct sk_buff *)) ++{ ++ if ((*pskb)->imq_flags & IMQ_F_ENQUEUE) ++ return NF_QUEUE; ++ ++ return NF_ACCEPT; ++} ++ ++ ++static int __init imq_init_hooks(void) ++{ ++ int err; ++ ++ err = nf_register_queue_handler(PF_INET, imq_nf_queue, NULL); ++ if (err > 0) ++ goto err1; ++ if ((err = nf_register_hook(&imq_ingress_ipv4))) ++ goto err2; ++ if ((err = nf_register_hook(&imq_egress_ipv4))) ++ goto err3; ++#if defined(CONFIG_IPV6) || defined (CONFIG_IPV6_MODULE) ++ if ((err = nf_register_queue_handler(PF_INET6, imq_nf_queue, NULL))) ++ goto err4; ++ if ((err = nf_register_hook(&imq_ingress_ipv6))) ++ goto err5; ++ if ((err = nf_register_hook(&imq_egress_ipv6))) ++ goto err6; ++#endif ++ ++ return 0; ++ ++#if defined(CONFIG_IPV6) || defined (CONFIG_IPV6_MODULE) ++err6: ++ nf_unregister_hook(&imq_ingress_ipv6); ++err5: ++ nf_unregister_queue_handler(PF_INET6); ++err4: ++ nf_unregister_hook(&imq_egress_ipv4); ++#endif ++err3: ++ nf_unregister_hook(&imq_ingress_ipv4); ++err2: ++ nf_unregister_queue_handler(PF_INET); ++err1: ++ return err; ++} ++ ++static void __exit imq_unhook(void) ++{ ++ nf_unregister_hook(&imq_ingress_ipv4); ++ nf_unregister_hook(&imq_egress_ipv4); ++ nf_unregister_queue_handler(PF_INET); ++#if defined(CONFIG_IPV6) || defined (CONFIG_IPV6_MODULE) ++ nf_unregister_hook(&imq_ingress_ipv6); ++ nf_unregister_hook(&imq_egress_ipv6); ++ nf_unregister_queue_handler(PF_INET6); ++#endif ++} ++ ++static int __init imq_dev_init(struct net_device *dev) ++{ ++ dev->hard_start_xmit = imq_dev_xmit; ++ dev->type = ARPHRD_VOID; ++ dev->mtu = 1500; ++ dev->tx_queue_len = 30; ++ dev->flags = IFF_NOARP; ++ dev->priv = kmalloc(sizeof(struct net_device_stats), GFP_KERNEL); ++ if (dev->priv == NULL) ++ return -ENOMEM; ++ memset(dev->priv, 0, sizeof(struct net_device_stats)); ++ dev->get_stats = imq_get_stats; ++ ++ return 0; ++} ++ ++static void imq_dev_uninit(struct net_device *dev) ++{ ++ kfree(dev->priv); ++} ++ ++static int __init imq_init_devs(void) ++{ ++ struct net_device *dev; ++ int i,j; ++ j = numdevs; ++ ++ if (!numdevs || numdevs > IMQ_MAX_DEVS) { ++ printk(KERN_ERR "IMQ: numdevs has to be betweed 1 and %u\n", ++ IMQ_MAX_DEVS); ++ return -EINVAL; ++ } ++ ++ imq_devs = kmalloc(sizeof(struct net_device) * numdevs, GFP_KERNEL); ++ if (!imq_devs) ++ return -ENOMEM; ++ memset(imq_devs, 0, sizeof(struct net_device) * numdevs); ++ ++ /* we start counting at zero */ ++ numdevs--; ++ ++ for (i = 0, dev = imq_devs; i <= numdevs; i++, dev++) { ++ SET_MODULE_OWNER(dev); ++ strcpy(dev->name, "imq%d"); ++ dev->init = imq_dev_init; ++ dev->uninit = imq_dev_uninit; ++ ++ if (register_netdev(dev) < 0) ++ goto err_register; ++ } ++ printk(KERN_INFO "IMQ starting with %u devices...\n", j); ++ return 0; ++ ++err_register: ++ for (; i; i--) ++ unregister_netdev(--dev); ++ kfree(imq_devs); ++ return -EIO; ++} ++ ++static void imq_cleanup_devs(void) ++{ ++ int i; ++ struct net_device *dev = imq_devs; ++ ++ for (i = 0; i <= numdevs; i++) ++ unregister_netdev(dev++); ++ ++ kfree(imq_devs); ++} ++ ++static int __init imq_init_module(void) ++{ ++ int err; ++ ++ if ((err = imq_init_devs())) { ++ printk(KERN_ERR "IMQ: Error trying imq_init_devs()\n"); ++ return err; ++ } ++ if ((err = imq_init_hooks())) { ++ printk(KERN_ERR "IMQ: Error trying imq_init_hooks()\n"); ++ imq_cleanup_devs(); ++ return err; ++ } ++ ++ printk(KERN_INFO "IMQ driver loaded successfully.\n"); ++ ++#if defined(CONFIG_IMQ_BEHAVIOR_BA) || defined(CONFIG_IMQ_BEHAVIOR_BB) ++ printk(KERN_INFO "\tHooking IMQ before NAT on PREROUTING.\n"); ++#else ++ printk(KERN_INFO "\tHooking IMQ after NAT on PREROUTING.\n"); ++#endif ++#if defined(CONFIG_IMQ_BEHAVIOR_AB) || defined(CONFIG_IMQ_BEHAVIOR_BB) ++ printk(KERN_INFO "\tHooking IMQ before NAT on POSTROUTING.\n"); ++#else ++ printk(KERN_INFO "\tHooking IMQ after NAT on POSTROUTING.\n"); ++#endif ++ ++ return 0; ++} ++ ++static void __exit imq_cleanup_module(void) ++{ ++ imq_unhook(); ++ imq_cleanup_devs(); ++ printk(KERN_INFO "IMQ driver unloaded successfully.\n"); ++} ++ ++ ++module_init(imq_init_module); ++module_exit(imq_cleanup_module); ++ ++module_param(numdevs, int, 0); ++MODULE_PARM_DESC(numdevs, "number of IMQ devices (how many imq* devices will be created)"); ++MODULE_AUTHOR(""); ++MODULE_DESCRIPTION("Pseudo-driver for the intermediate queue device. See http://www.linuximq.net/ for more information."); ++MODULE_LICENSE("GPL"); ++ ++ +diff -Nru linux-2.6.9.orig/include/linux/imq.h linux-2.6.9/include/linux/imq.h +--- linux-2.6.9.orig/include/linux/imq.h 1970-01-01 00:00:00.000000000 +0000 ++++ linux-2.6.9/include/linux/imq.h 2004-10-19 18:34:52.000000000 +0000 +@@ -0,0 +1,9 @@ ++#ifndef _IMQ_H ++#define _IMQ_H ++ ++#define IMQ_MAX_DEVS 16 ++ ++#define IMQ_F_IFMASK 0x7f ++#define IMQ_F_ENQUEUE 0x80 ++ ++#endif /* _IMQ_H */ +diff -Nru linux-2.6.9.orig/include/linux/netfilter_ipv4/ipt_IMQ.h linux-2.6.9/include/linux/netfilter_ipv4/ipt_IMQ.h +--- linux-2.6.9.orig/include/linux/netfilter_ipv4/ipt_IMQ.h 1970-01-01 00:00:00.000000000 +0000 ++++ linux-2.6.9/include/linux/netfilter_ipv4/ipt_IMQ.h 2004-10-19 18:34:52.000000000 +0000 +@@ -0,0 +1,8 @@ ++#ifndef _IPT_IMQ_H ++#define _IPT_IMQ_H ++ ++struct ipt_imq_info { ++ unsigned int todev; /* target imq device */ ++}; ++ ++#endif /* _IPT_IMQ_H */ +diff -Nru linux-2.6.9.orig/include/linux/netfilter_ipv6/ip6t_IMQ.h linux-2.6.9/include/linux/netfilter_ipv6/ip6t_IMQ.h +--- linux-2.6.9.orig/include/linux/netfilter_ipv6/ip6t_IMQ.h 1970-01-01 00:00:00.000000000 +0000 ++++ linux-2.6.9/include/linux/netfilter_ipv6/ip6t_IMQ.h 2004-10-19 18:34:52.000000000 +0000 +@@ -0,0 +1,8 @@ ++#ifndef _IP6T_IMQ_H ++#define _IP6T_IMQ_H ++ ++struct ip6t_imq_info { ++ unsigned int todev; /* target imq device */ ++}; ++ ++#endif /* _IP6T_IMQ_H */ +diff -Nru linux-2.6.9.orig/include/linux/skbuff.h linux-2.6.9/include/linux/skbuff.h +--- linux-2.6.9.orig/include/linux/skbuff.h 2004-10-18 21:55:36.000000000 +0000 ++++ linux-2.6.9/include/linux/skbuff.h 2004-10-19 18:40:20.000000000 +0000 +@@ -251,6 +251,11 @@ + __u32 nfcache; + __u32 nfctinfo; + struct nf_conntrack *nfct; ++ ++#if defined(CONFIG_IMQ) || defined(CONFIG_IMQ_MODULE) ++ unsigned char imq_flags; ++ struct nf_info *nf_info; ++#endif + #ifdef CONFIG_NETFILTER_DEBUG + unsigned int nf_debug; + #endif +diff -Nru linux-2.6.9.orig/net/ipv4/netfilter/Kconfig linux-2.6.9/net/ipv4/netfilter/Kconfig +--- linux-2.6.9.orig/net/ipv4/netfilter/Kconfig 2004-10-18 21:54:55.000000000 +0000 ++++ linux-2.6.9/net/ipv4/netfilter/Kconfig 2004-10-19 18:34:52.000000000 +0000 +@@ -363,6 +363,17 @@ + + To compile it as a module, choose M here. If unsure, say N. + ++config IP_NF_TARGET_IMQ ++ tristate "IMQ target support" ++ depends on IP_NF_MANGLE ++ help ++ This option adds a `IMQ' target which is used to specify if and ++ to which IMQ device packets should get enqueued/dequeued. ++ ++ For more information visit: http://www.linuximq.net/ ++ ++ To compile it as a module, choose M here. If unsure, say N. ++ + config IP_NF_TARGET_LOG + tristate "LOG target support" + depends on IP_NF_IPTABLES +diff -Nru linux-2.6.9.orig/net/ipv4/netfilter/Makefile linux-2.6.9/net/ipv4/netfilter/Makefile +--- linux-2.6.9.orig/net/ipv4/netfilter/Makefile 2004-10-18 21:53:43.000000000 +0000 ++++ linux-2.6.9/net/ipv4/netfilter/Makefile 2004-10-19 18:34:52.000000000 +0000 +@@ -74,6 +74,7 @@ + obj-$(CONFIG_IP_NF_TARGET_ECN) += ipt_ECN.o + obj-$(CONFIG_IP_NF_TARGET_DSCP) += ipt_DSCP.o + obj-$(CONFIG_IP_NF_TARGET_MARK) += ipt_MARK.o ++obj-$(CONFIG_IP_NF_TARGET_IMQ) += ipt_IMQ.o + obj-$(CONFIG_IP_NF_TARGET_MASQUERADE) += ipt_MASQUERADE.o + obj-$(CONFIG_IP_NF_TARGET_REDIRECT) += ipt_REDIRECT.o + obj-$(CONFIG_IP_NF_TARGET_NETMAP) += ipt_NETMAP.o +diff -Nru linux-2.6.9.orig/net/ipv4/netfilter/ipt_IMQ.c linux-2.6.9/net/ipv4/netfilter/ipt_IMQ.c +--- linux-2.6.9.orig/net/ipv4/netfilter/ipt_IMQ.c 1970-01-01 00:00:00.000000000 +0000 ++++ linux-2.6.9/net/ipv4/netfilter/ipt_IMQ.c 2004-10-19 18:34:52.000000000 +0000 +@@ -0,0 +1,78 @@ ++/* ++ * This target marks packets to be enqueued to an imq device ++ */ ++#include ++#include ++#include ++#include ++#include ++ ++static unsigned int imq_target(struct sk_buff **pskb, ++ const struct net_device *in, ++ const struct net_device *out, ++ unsigned int hooknum, ++ const void *targinfo, ++ void *userdata) ++{ ++ struct ipt_imq_info *mr = (struct ipt_imq_info*)targinfo; ++ ++ (*pskb)->imq_flags = mr->todev | IMQ_F_ENQUEUE; ++ (*pskb)->nfcache |= NFC_ALTERED; ++ ++ return IPT_CONTINUE; ++} ++ ++static int imq_checkentry(const char *tablename, ++ const struct ipt_entry *e, ++ void *targinfo, ++ unsigned int targinfosize, ++ unsigned int hook_mask) ++{ ++ struct ipt_imq_info *mr; ++ ++ if (targinfosize != IPT_ALIGN(sizeof(struct ipt_imq_info))) { ++ printk(KERN_WARNING "IMQ: invalid targinfosize\n"); ++ return 0; ++ } ++ mr = (struct ipt_imq_info*)targinfo; ++ ++ if (strcmp(tablename, "mangle") != 0) { ++ printk(KERN_WARNING ++ "IMQ: IMQ can only be called from \"mangle\" table, not \"%s\"\n", ++ tablename); ++ return 0; ++ } ++ ++ if (mr->todev > IMQ_MAX_DEVS) { ++ printk(KERN_WARNING ++ "IMQ: invalid device specified, highest is %u\n", ++ IMQ_MAX_DEVS); ++ return 0; ++ } ++ ++ return 1; ++} ++ ++static struct ipt_target ipt_imq_reg = { ++ .name = "IMQ", ++ .target = imq_target, ++ .checkentry = imq_checkentry, ++ .me = THIS_MODULE ++}; ++ ++static int __init init(void) ++{ ++ if (ipt_register_target(&ipt_imq_reg)) ++ return -EINVAL; ++ ++ return 0; ++} ++ ++static void __exit fini(void) ++{ ++ ipt_unregister_target(&ipt_imq_reg); ++} ++ ++module_init(init); ++module_exit(fini); ++MODULE_LICENSE("GPL"); +diff -Nru linux-2.6.9.orig/net/ipv6/netfilter/Kconfig linux-2.6.9/net/ipv6/netfilter/Kconfig +--- linux-2.6.9.orig/net/ipv6/netfilter/Kconfig 2004-10-18 21:55:06.000000000 +0000 ++++ linux-2.6.9/net/ipv6/netfilter/Kconfig 2004-10-19 18:34:52.000000000 +0000 +@@ -187,6 +187,15 @@ + + To compile it as a module, choose M here. If unsure, say N. + ++config IP6_NF_TARGET_IMQ ++ tristate "IMQ target support" ++ depends on IP6_NF_MANGLE ++ help ++ This option adds a `IMQ' target which is used to specify if and ++ to which imq device packets should get enqueued/dequeued. ++ ++ To compile it as a module, choose M here. If unsure, say N. ++ + config IP6_NF_TARGET_LOG + tristate "LOG target support" + depends on IP6_NF_FILTER +diff -Nru linux-2.6.9.orig/net/ipv6/netfilter/Makefile linux-2.6.9/net/ipv6/netfilter/Makefile +--- linux-2.6.9.orig/net/ipv6/netfilter/Makefile 2004-10-18 21:54:32.000000000 +0000 ++++ linux-2.6.9/net/ipv6/netfilter/Makefile 2004-10-19 18:34:52.000000000 +0000 +@@ -20,6 +20,7 @@ + obj-$(CONFIG_IP6_NF_FILTER) += ip6table_filter.o + obj-$(CONFIG_IP6_NF_MANGLE) += ip6table_mangle.o + obj-$(CONFIG_IP6_NF_TARGET_MARK) += ip6t_MARK.o ++obj-$(CONFIG_IP6_NF_TARGET_IMQ) += ip6t_IMQ.o + obj-$(CONFIG_IP6_NF_QUEUE) += ip6_queue.o + obj-$(CONFIG_IP6_NF_TARGET_LOG) += ip6t_LOG.o + obj-$(CONFIG_IP6_NF_RAW) += ip6table_raw.o +diff -Nru linux-2.6.9.orig/net/ipv6/netfilter/ip6t_IMQ.c linux-2.6.9/net/ipv6/netfilter/ip6t_IMQ.c +--- linux-2.6.9.orig/net/ipv6/netfilter/ip6t_IMQ.c 1970-01-01 00:00:00.000000000 +0000 ++++ linux-2.6.9/net/ipv6/netfilter/ip6t_IMQ.c 2004-10-19 18:34:52.000000000 +0000 +@@ -0,0 +1,78 @@ ++/* ++ * This target marks packets to be enqueued to an imq device ++ */ ++#include ++#include ++#include ++#include ++#include ++ ++static unsigned int imq_target(struct sk_buff **pskb, ++ unsigned int hooknum, ++ const struct net_device *in, ++ const struct net_device *out, ++ const void *targinfo, ++ void *userdata) ++{ ++ struct ip6t_imq_info *mr = (struct ip6t_imq_info*)targinfo; ++ ++ (*pskb)->imq_flags = mr->todev | IMQ_F_ENQUEUE; ++ (*pskb)->nfcache |= NFC_ALTERED; ++ ++ return IP6T_CONTINUE; ++} ++ ++static int imq_checkentry(const char *tablename, ++ const struct ip6t_entry *e, ++ void *targinfo, ++ unsigned int targinfosize, ++ unsigned int hook_mask) ++{ ++ struct ip6t_imq_info *mr; ++ ++ if (targinfosize != IP6T_ALIGN(sizeof(struct ip6t_imq_info))) { ++ printk(KERN_WARNING "IMQ: invalid targinfosize\n"); ++ return 0; ++ } ++ mr = (struct ip6t_imq_info*)targinfo; ++ ++ if (strcmp(tablename, "mangle") != 0) { ++ printk(KERN_WARNING ++ "IMQ: IMQ can only be called from \"mangle\" table, not \"%s\"\n", ++ tablename); ++ return 0; ++ } ++ ++ if (mr->todev > IMQ_MAX_DEVS) { ++ printk(KERN_WARNING ++ "IMQ: invalid device specified, highest is %u\n", ++ IMQ_MAX_DEVS); ++ return 0; ++ } ++ ++ return 1; ++} ++ ++static struct ip6t_target ip6t_imq_reg = { ++ .name = "IMQ", ++ .target = imq_target, ++ .checkentry = imq_checkentry, ++ .me = THIS_MODULE ++}; ++ ++static int __init init(void) ++{ ++ if (ip6t_register_target(&ip6t_imq_reg)) ++ return -EINVAL; ++ ++ return 0; ++} ++ ++static void __exit fini(void) ++{ ++ ip6t_unregister_target(&ip6t_imq_reg); ++} ++ ++module_init(init); ++module_exit(fini); ++MODULE_LICENSE("GPL"); +diff -Nru linux-2.6.9.orig/net/sched/sch_generic.c linux-2.6.9/net/sched/sch_generic.c +--- linux-2.6.9.orig/net/sched/sch_generic.c 2004-10-18 21:53:07.000000000 +0000 ++++ linux-2.6.9/net/sched/sch_generic.c 2004-10-19 18:45:08.000000000 +0000 +@@ -29,6 +29,9 @@ + #include + #include + #include ++#if defined(CONFIG_IMQ) || defined(CONFIG_IMQ_MODULE) ++#include ++#endif + #include + #include + #include +@@ -136,7 +139,13 @@ + + if (!netif_queue_stopped(dev)) { + int ret; +- if (netdev_nit) ++ ++ if (netdev_nit ++#if defined(CONFIG_IMQ) || defined(CONFIG_IMQ_MODULE) ++ && !(skb->imq_flags & IMQ_F_ENQUEUE) ++#endif ++ ) ++ + dev_queue_xmit_nit(skb, dev); + + ret = dev->hard_start_xmit(skb, dev); diff --git a/noc/patches/usagi-26-s20050314.diff b/noc/patches/usagi-26-s20050314.diff new file mode 100644 index 0000000..56d9f80 --- /dev/null +++ b/noc/patches/usagi-26-s20050314.diff @@ -0,0 +1,13540 @@ +diff -urN linux-2.6.11/Documentation/networking/ip-sysctl.txt x1/Documentation/networking/ip-sysctl.txt +--- linux-2.6.11/Documentation/networking/ip-sysctl.txt 2005-03-02 08:38:07.000000000 +0100 ++++ x1/Documentation/networking/ip-sysctl.txt 2004-11-04 14:07:37.000000000 +0100 +@@ -661,7 +661,7 @@ + TRUE: disable IPv4-mapped address feature + FALSE: enable IPv4-mapped address feature + +- Default: FALSE (as specified in RFC2553bis) ++ Default: FALSE (as specified in RFC3493) + + IPv6 Fragmentation: + +diff -urN linux-2.6.11/include/linux/icmpv6.h x1/include/linux/icmpv6.h +--- linux-2.6.11/include/linux/icmpv6.h 2005-03-02 08:37:50.000000000 +0100 ++++ x1/include/linux/icmpv6.h 2004-08-04 02:07:47.000000000 +0200 +@@ -40,14 +40,18 @@ + struct icmpv6_nd_ra { + __u8 hop_limit; + #if defined(__LITTLE_ENDIAN_BITFIELD) +- __u8 reserved:6, ++ __u8 reserved:3, ++ router_pref:2, ++ home_agent:1, + other:1, + managed:1; + + #elif defined(__BIG_ENDIAN_BITFIELD) + __u8 managed:1, + other:1, +- reserved:6; ++ home_agent:1, ++ router_pref:2, ++ reserved:3; + #else + #error "Please fix " + #endif +@@ -70,6 +74,8 @@ + #define icmp6_addrconf_managed icmp6_dataun.u_nd_ra.managed + #define icmp6_addrconf_other icmp6_dataun.u_nd_ra.other + #define icmp6_rt_lifetime icmp6_dataun.u_nd_ra.rt_lifetime ++#define icmp6_home_agent icmp6_dataun.u_nd_ra.home_agent ++#define icmp6_router_pref icmp6_dataun.u_nd_ra.router_pref + }; + + +diff -urN linux-2.6.11/include/linux/in6.h x1/include/linux/in6.h +--- linux-2.6.11/include/linux/in6.h 2005-03-02 08:38:12.000000000 +0100 ++++ x1/include/linux/in6.h 2005-02-03 07:02:41.000000000 +0100 +@@ -40,14 +40,14 @@ + #define s6_addr32 in6_u.u6_addr32 + }; + +-/* IPv6 Wildcard Address (::) and Loopback Address (::1) defined in RFC2553 ++/* IPv6 Wildcard Address (::) and Loopback Address (::1) defined in RFC3493 + * NOTE: Be aware the IN6ADDR_* constants and in6addr_* externals are defined + * in network byte order, not in host byte order as are the IPv4 equivalents + */ + #if 0 + extern const struct in6_addr in6addr_any; +-#define IN6ADDR_ANY_INIT { { { 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 } } } + #endif ++#define IN6ADDR_ANY_INIT { { { 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 } } } + extern const struct in6_addr in6addr_loopback; + #define IN6ADDR_LOOPBACK_INIT { { { 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1 } } } + +@@ -56,7 +56,7 @@ + __u16 sin6_port; /* Transport layer port # */ + __u32 sin6_flowinfo; /* IPv6 flow information */ + struct in6_addr sin6_addr; /* IPv6 address */ +- __u32 sin6_scope_id; /* scope id (new in RFC2553) */ ++ __u32 sin6_scope_id; /* scope id */ + }; + + struct ipv6_mreq { +@@ -198,4 +198,7 @@ + * MCAST_MSFILTER 48 + */ + ++/* Netfilter */ ++#define IPV6_NF_ORIGINAL_DST 80 ++ + #endif +diff -urN linux-2.6.11/include/linux/ip.h x1/include/linux/ip.h +--- linux-2.6.11/include/linux/ip.h 2005-03-02 08:37:52.000000000 +0100 ++++ x1/include/linux/ip.h 2005-02-11 17:24:31.000000000 +0100 +@@ -152,6 +152,7 @@ + }; + + #define IPCORK_OPT 1 /* ip-options has been held in ipcork.opt */ ++#define IPCORK_ALLFRAG 2 /* IPv6: always fragment */ + + static inline struct inet_sock *inet_sk(const struct sock *sk) + { +diff -urN linux-2.6.11/include/linux/ipv6.h x1/include/linux/ipv6.h +--- linux-2.6.11/include/linux/ipv6.h 2005-03-02 08:38:13.000000000 +0100 ++++ x1/include/linux/ipv6.h 2005-02-09 16:31:39.000000000 +0100 +@@ -145,6 +145,9 @@ + __s32 max_desync_factor; + #endif + __s32 max_addresses; ++#ifdef CONFIG_IPV6_MROUTE ++ __s32 mc_forwarding; ++#endif + void *sysctl; + }; + +@@ -167,6 +170,9 @@ + DEVCONF_MAX_DESYNC_FACTOR, + DEVCONF_MAX_ADDRESSES, + DEVCONF_FORCE_MLD_VERSION, ++#ifdef CONFIG_IPV6_MROUTE ++ DEVCONF_MCFORWARDING, ++#endif + DEVCONF_MAX + }; + +diff -urN linux-2.6.11/include/linux/ipv6_route.h x1/include/linux/ipv6_route.h +--- linux-2.6.11/include/linux/ipv6_route.h 2005-03-02 08:37:50.000000000 +0100 ++++ x1/include/linux/ipv6_route.h 2004-11-25 06:33:04.000000000 +0100 +@@ -19,6 +19,12 @@ + #define RTF_ADDRCONF 0x00040000 /* addrconf route - RA */ + #define RTF_PREFIX_RT 0x00080000 /* A prefix only route - RA */ + ++#define RTF_PREF_HIGH 0x08000000 ++#define RTF_PREF_LOW 0x18000000 ++#define RTF_PREF_INVAL 0x10000000 ++#define RTF_PREF_MASK 0x18000000 ++#define RTF_PREF(pref) (((pref)&3)<<27) ++ + #define RTF_NONEXTHOP 0x00200000 /* route with no nexthop */ + #define RTF_EXPIRES 0x00400000 + +@@ -28,6 +34,11 @@ + + #define RTF_LOCAL 0x80000000 + ++#ifdef __KERNEL__ ++#define IPV6_UNSHIFT_PREF(flag) (((flag)&RTF_PREF_MASK)>>27) ++#define IPV6_SIGNEDPREF(pref) ((((pref)+2)&3)-2) ++#endif ++ + struct in6_rtmsg { + struct in6_addr rtmsg_dst; + struct in6_addr rtmsg_src; +diff -urN linux-2.6.11/include/linux/mroute6.h x1/include/linux/mroute6.h +--- linux-2.6.11/include/linux/mroute6.h 1970-01-01 01:00:00.000000000 +0100 ++++ x1/include/linux/mroute6.h 2005-02-09 16:31:39.000000000 +0100 +@@ -0,0 +1,296 @@ ++#ifndef __LINUX_MROUTE6_H ++#define __LINUX_MROUTE6_H ++ ++#include ++ ++/* ++ * Based on the MROUTING 3.5 defines primarily to keep ++ * source compatibility with BSD. ++ * ++ * See the pim6sd code for the original history. ++ * ++ * Protocol Independent Multicast (PIM) data structures included ++ * Carlos Picoto (cap@di.fc.ul.pt) ++ * ++ */ ++ ++#define MRT6_BASE 200 ++#define MRT6_INIT (MRT6_BASE) /* Activate the kernel mroute code */ ++#define MRT6_DONE (MRT6_BASE+1) /* Shutdown the kernel mroute */ ++#define MRT6_ADD_MIF (MRT6_BASE+2) /* Add a virtual interface */ ++#define MRT6_DEL_MIF (MRT6_BASE+3) /* Delete a virtual interface */ ++#define MRT6_ADD_MFC (MRT6_BASE+4) /* Add a multicast forwarding entry */ ++#define MRT6_DEL_MFC (MRT6_BASE+5) /* Delete a multicast forwarding entry */ ++#define MRT6_VERSION (MRT6_BASE+6) /* Get the kernel multicast version */ ++#define MRT6_ASSERT (MRT6_BASE+7) /* Activate PIM assert mode */ ++#define MRT6_PIM (MRT6_BASE+8) /* enable PIM code */ ++ ++#define SIOCGETMIFCNT_IN6 SIOCPROTOPRIVATE /* IP protocol privates */ ++#define SIOCGETSGCNT_IN6 (SIOCPROTOPRIVATE+1) ++#define SIOCGETRPF (SIOCPROTOPRIVATE+2) ++ ++#define MAXMIFS 32 ++typedef unsigned long mifbitmap_t; /* User mode code depends on this lot */ ++typedef unsigned short mifi_t; ++#define ALL_MIFS ((mifi_t)(-1)) ++ ++#ifndef IF_SETSIZE ++#define IF_SETSIZE 256 ++#endif ++ ++typedef u_int32_t if_mask; ++#define NIFBITS (sizeof(if_mask) * 8) /* bits per mask */ ++ ++#ifndef howmany ++#define howmany(x, y) (((x) + ((y) - 1)) / (y)) ++#endif ++ ++typedef struct if_set { ++ if_mask ifs_bits[howmany(IF_SETSIZE, NIFBITS)]; ++} if_set; ++ ++#define IF_SET(n, p) ((p)->ifs_bits[(n)/NIFBITS] |= (1 << ((n) % NIFBITS))) ++#define IF_CLR(n, p) ((p)->ifs_bits[(n)/NIFBITS] &= ~(1 << ((n) % NIFBITS))) ++#define IF_ISSET(n, p) ((p)->ifs_bits[(n)/NIFBITS] & (1 << ((n) % NIFBITS))) ++#define IF_COPY(f, t) bcopy(f, t, sizeof(*(f))) ++#define IF_ZERO(p) bzero(p, sizeof(*(p))) ++ ++/* ++ Same idea as select ++ ++#define VIFM_SET(n,m) ((m)|=(1<<(n))) ++#define VIFM_CLR(n,m) ((m)&=~(1<<(n))) ++#define VIFM_ISSET(n,m) ((m)&(1<<(n))) ++#define VIFM_CLRALL(m) ((m)=0) ++#define VIFM_COPY(mfrom,mto) ((mto)=(mfrom)) ++#define VIFM_SAME(m1,m2) ((m1)==(m2)) ++*/ ++ ++/* ++ * Passed by mrouted for an MRT_ADD_MIF - again we use the ++ * mrouted 3.6 structures for compatibility ++ */ ++ ++struct mif6ctl { ++ mifi_t mif6c_mifi; /* Index of MIF */ ++ unsigned char mif6c_flags; /* MIFF_ flags */ ++ unsigned char vifc_threshold; /* ttl limit */ ++ unsigned int vifc_rate_limit; /* Rate limiter values (NI) */ ++ u_short mif6c_pifi; /* the index of the physical IF */ ++}; ++ ++#define MIFF_REGISTER 0x1 /* register vif */ ++ ++/* ++ * Cache manipulation structures for mrouted and PIMd ++ */ ++ ++struct mf6cctl ++{ ++ struct sockaddr_in6 mf6cc_origin; /* Origin of mcast */ ++ struct sockaddr_in6 mf6cc_mcastgrp; /* Group in question */ ++ mifi_t mf6cc_parent; /* Where it arrived */ ++ struct if_set mf6cc_ifset; /* Where it is going */ ++ unsigned int mfcc_pkt_cnt; /* pkt count for src-grp */ ++ unsigned int mfcc_byte_cnt; ++ unsigned int mfcc_wrong_if; ++ int mfcc_expire; ++}; ++ ++/* ++ * Group count retrieval for pim6sd ++ */ ++ ++struct sioc_sg_req6 ++{ ++ struct sockaddr_in6 src; ++ struct sockaddr_in6 grp; ++ unsigned long pktcnt; ++ unsigned long bytecnt; ++ unsigned long wrong_if; ++}; ++ ++/* ++ * To get vif packet counts ++ */ ++ ++struct sioc_mif_req6 ++{ ++ mifi_t mifi; /* Which iface */ ++ unsigned long icount; /* In packets */ ++ unsigned long ocount; /* Out packets */ ++ unsigned long ibytes; /* In bytes */ ++ unsigned long obytes; /* Out bytes */ ++}; ++ ++/* ++ * That's all usermode folks ++ */ ++ ++#ifdef __KERNEL__ ++struct inet6_dev * ipv6_find_idev(struct net_device *dev); ++#include ++ ++extern int ip6_mroute_setsockopt(struct sock *, int, char __user *, int); ++extern int ip6_mroute_getsockopt(struct sock *, int, char __user *, int __user *); ++extern int ip6mr_ioctl(struct sock *sk, int cmd, void __user *arg); ++extern void ip6_mr_init(void); ++ ++struct mif_device ++{ ++ struct net_device *dev; /* Device we are using */ ++ unsigned long bytes_in,bytes_out; ++ unsigned long pkt_in,pkt_out; /* Statistics */ ++ unsigned long rate_limit; /* Traffic shaping (NI) */ ++ unsigned char threshold; /* TTL threshold */ ++ unsigned short flags; /* Control flags */ ++ int link; /* Physical interface index */ ++}; ++ ++#define VIFF_STATIC 0x8000 ++ ++struct mfc6_cache ++{ ++ struct mfc6_cache *next; /* Next entry on cache line */ ++ struct in6_addr mf6c_mcastgrp; /* Group the entry belongs to */ ++ struct in6_addr mf6c_origin; /* Source of packet */ ++ mifi_t mf6c_parent; /* Source interface */ ++ int mfc_flags; /* Flags on line */ ++ ++ union { ++ struct { ++ unsigned long expires; ++ struct sk_buff_head unresolved; /* Unresolved buffers */ ++ } unres; ++ struct { ++ unsigned long last_assert; ++ int minvif; ++ int maxvif; ++ unsigned long bytes; ++ unsigned long pkt; ++ unsigned long wrong_if; ++ unsigned char ttls[MAXMIFS]; /* TTL thresholds */ ++ } res; ++ } mfc_un; ++}; ++ ++#define MFC_STATIC 1 ++#define MFC_NOTIFY 2 ++ ++#define MFC6_LINES 64 ++ ++#if (MFC6_LINES & (MFC6_LINES -1 )) == 0 ++#define MF6CHASHMOD(h) ((h) & (MFC6_LINES -1)) ++#else ++#define MF6CHASHMOD(h) ((h) % MFC6_LINES) ++#endif ++ ++#define MFC6_HASH(a, g) MF6CHASHMOD((a).s6_addr32[0] ^ (a).s6_addr32[1] ^ \ ++ (a).s6_addr32[2] ^ (a).s6_addr32[3] ^ \ ++ (a).s6_addr32[0] ^ (a).s6_addr32[1] ^ \ ++ (a).s6_addr32[2] ^ (a).s6_addr32[3]) ++ ++#endif ++ ++ ++ ++#define MFC_ASSERT_THRESH (3*HZ) /* Maximal freq. of asserts */ ++ ++/* ++ * Pseudo messages used by mrouted ++ */ ++ ++#define IGMPMSG_NOCACHE 1 /* Kern cache fill request to mrouted */ ++#define IGMPMSG_WRONGVIF 2 /* For PIM assert processing (unused) */ ++#define IGMPMSG_WHOLEPKT 3 /* For PIM Register processing */ ++ ++#define PIM_REGISTER 1 ++ ++#ifdef __KERNEL__ ++ ++#define PIM_V1_VERSION __constant_htonl(0x10000000) ++#define PIM_V1_REGISTER 1 ++ ++#define PIM_VERSION 2 ++ ++#define PIM_NULL_REGISTER __constant_htonl(0x40000000) ++ ++/* PIMv2 register message header layout (ietf-draft-idmr-pimvsm-v2-00.ps */ ++ ++struct pim6reghdr ++{ ++ __u8 type; ++ __u8 reserved; ++ __u16 csum; ++ __u32 flags; ++}; ++ ++ ++struct rtmsg; ++extern int ip6mr_get_route(struct sk_buff *skb, struct rtmsg *rtm, int nowait); ++#endif ++ ++#ifdef __KERNEL__ ++ ++extern struct sock *mroute6_socket; ++ ++#define IN6_ARE_ADDR_EQUAL(a,b) \ ++ (memcmp(&(a)->s6_addr[0], &(b)->s6_addr[0], sizeof(struct in6_addr)) == 0) ++#endif ++ ++/* ++ * Structure used to communicate from kernel to multicast router. ++ * We'll overlay the structure onto an MLD header (not an IPv6 heder like igmpmsg{} ++ * used for IPv4 implementation). This is because this structure will be passed via an ++ * IPv6 raw socket, on wich an application will only receiver the payload i.e the data after ++ * the IPv6 header and all the extension headers. (See section 3 of RFC 3542) ++ */ ++ ++struct mrt6msg { ++#define MRT6MSG_NOCACHE 1 ++#define MRT6MSG_WRONGMIF 2 ++#define MRT6MSG_WHOLEPKT 3 /* used for use level encap */ ++ u_char im6_mbz; /* must be zero */ ++ u_char im6_msgtype; /* what type of message */ ++ u_int16_t im6_mif; /* mif rec'd on */ ++ u_int32_t im6_pad; /* padding for 64 bit arch */ ++ struct in6_addr im6_src, im6_dst; ++}; ++ ++/* ++ * PIM packet header ++ */ ++#define PIM_VERSION 2 ++struct pim { ++#if defined(BYTE_ORDER) && (BYTE_ORDER == LITTLE_ENDIAN) ++ u_char pim_type:4, /* the PIM message type, currently they are: ++ * Hello, Register, Register-Stop, Join/Prune, ++ * Bootstrap, Assert, Graft (PIM-DM only), ++ * Graft-Ack (PIM-DM only), C-RP-Adv ++ */ ++ pim_ver:4; /* PIM version number; 2 for PIMv2 */ ++#else ++ u_char pim_ver:4, /* PIM version */ ++ pim_type:4; /* PIM type */ ++#endif ++ u_char pim_rsv; /* Reserved */ ++ u_short pim_cksum; /* IP style check sum */ ++}; ++ ++#define PIM_MINLEN 8 /* The header min. length is 8 */ ++#define PIM6_REG_MINLEN (PIM_MINLEN+40) /* Register message + inner IP6 header */ ++ ++#define IPV6_VERSION 0x60 ++#define IPV6_VERSION_MASK 0xf0 ++ ++/* XXX :there should not be there */ ++#include ++ ++struct mld_hdr { ++ struct icmp6hdr mld_icmp6_hdr; ++ struct in6_addr mld_addr; ++}; ++ ++#define mld_type mld_icmp6_hdr.icmp6_type ++ ++#endif +diff -urN linux-2.6.11/include/linux/netfilter.h x1/include/linux/netfilter.h +--- linux-2.6.11/include/linux/netfilter.h 2005-03-02 08:38:09.000000000 +0100 ++++ x1/include/linux/netfilter.h 2005-02-03 05:44:11.000000000 +0100 +@@ -175,6 +175,10 @@ + extern void (*ip_ct_attach)(struct sk_buff *, struct sk_buff *); + extern void nf_ct_attach(struct sk_buff *, struct sk_buff *); + ++#if defined(CONFIG_IPV6) || defined(CONFIG_IPV6_MODULE) ++extern void (*ip6_ct_attach)(struct sk_buff *, struct sk_buff *); ++#endif ++ + /* FIXME: Before cache is ever used, this must be implemented for real. */ + extern void nf_invalidate_cache(int pf); + +diff -urN linux-2.6.11/include/linux/netfilter_ipv6/ip6_conntrack.h x1/include/linux/netfilter_ipv6/ip6_conntrack.h +--- linux-2.6.11/include/linux/netfilter_ipv6/ip6_conntrack.h 1970-01-01 01:00:00.000000000 +0100 ++++ x1/include/linux/netfilter_ipv6/ip6_conntrack.h 2004-10-01 11:24:38.000000000 +0200 +@@ -0,0 +1,264 @@ ++/* ++ * Copyright (C)2003 USAGI/WIDE Project ++ * ++ * Authors: ++ * Yasuyuki Kozakai ++ * ++ * Based on: include/linux/netfilter_ipv4/ip_conntrack.h ++ * ++ * This program 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 ++ * 2 of the License, or (at your option) any later version. ++ */ ++#ifndef _IP6_CONNTRACK_H ++#define _IP6_CONNTRACK_H ++/* Connection state tracking for netfilter. This is separated from, ++ but required by, the NAT layer; it can also be used by an iptables ++ extension. */ ++ ++#include ++#include ++#include ++#include ++#include ++ ++enum ip6_conntrack_info ++{ ++ /* Part of an established connection (either direction). */ ++ IP6_CT_ESTABLISHED, ++ ++ /* Like NEW, but related to an existing connection, or ICMP error ++ (in either direction). */ ++ IP6_CT_RELATED, ++ ++ /* Started a new connection to track (only ++ IP6_CT_DIR_ORIGINAL); may be a retransmission. */ ++ IP6_CT_NEW, ++ ++ /* >= this indicates reply direction */ ++ IP6_CT_IS_REPLY, ++ ++ /* Number of distinct IP6_CT types (no NEW in reply dirn). */ ++ IP6_CT_NUMBER = IP6_CT_IS_REPLY * 2 - 1 ++}; ++ ++/* Bitset representing status of connection. */ ++enum ip6_conntrack_status { ++ /* It's an expected connection: bit 0 set. This bit never changed */ ++ IP6S_EXPECTED_BIT = 0, ++ IP6S_EXPECTED = (1 << IP6S_EXPECTED_BIT), ++ ++ /* We've seen packets both ways: bit 1 set. Can be set, not unset. */ ++ IP6S_SEEN_REPLY_BIT = 1, ++ IP6S_SEEN_REPLY = (1 << IP6S_SEEN_REPLY_BIT), ++ ++ /* Conntrack should never be early-expired. */ ++ IP6S_ASSURED_BIT = 2, ++ IP6S_ASSURED = (1 << IP6S_ASSURED_BIT), ++ ++ /* Connection is confirmed: originating packet has left box */ ++ IP6S_CONFIRMED_BIT = 3, ++ IP6S_CONFIRMED = (1 << IP6S_CONFIRMED_BIT), ++}; ++ ++#include ++#include ++ ++/* per conntrack: protocol private data */ ++union ip6_conntrack_proto { ++ /* insert conntrack proto private data here */ ++ struct ip6_ct_tcp tcp; ++ struct ip6_ct_icmpv6 icmpv6; ++}; ++ ++union ip6_conntrack_expect_proto { ++ /* insert expect proto private data here */ ++}; ++ ++/* Add protocol helper include file here */ ++#include ++ ++/* per expectation: application helper private data */ ++union ip6_conntrack_expect_help { ++ /* insert conntrack helper private data (expect) here */ ++ struct ip6_ct_ftp_expect exp_ftp_info; ++}; ++ ++/* per conntrack: application helper private data */ ++union ip6_conntrack_help { ++ /* insert conntrack helper private data (master) here */ ++ struct ip6_ct_ftp_master ct_ftp_info; ++}; ++ ++#ifdef __KERNEL__ ++ ++#include ++#include ++ ++#ifdef CONFIG_NF_DEBUG ++#define IP6_NF_ASSERT(x) \ ++do { \ ++ if (!(x)) \ ++ /* Wooah! I'm tripping my conntrack in a frenzy of \ ++ netplay... */ \ ++ printk("NF_IP6_ASSERT: %s:%i(%s)\n", \ ++ __FILE__, __LINE__, __FUNCTION__); \ ++} while(0) ++#else ++#define IP6_NF_ASSERT(x) ++#endif ++ ++struct ip6_conntrack_expect ++{ ++ /* Internal linked list (global expectation list) */ ++ struct list_head list; ++ ++ /* reference count */ ++ atomic_t use; ++ ++ /* expectation list for this master */ ++ struct list_head expected_list; ++ ++ /* The conntrack of the master connection */ ++ struct ip6_conntrack *expectant; ++ ++ /* The conntrack of the sibling connection, set after ++ * expectation arrived */ ++ struct ip6_conntrack *sibling; ++ ++ /* IPv6 packet is never NATed */ ++ /* Tuple saved for conntrack */ ++/* ++ struct ip6_conntrack_tuple ct_tuple; ++*/ ++ ++ /* Timer function; deletes the expectation. */ ++ struct timer_list timeout; ++ ++ /* Data filled out by the conntrack helpers follow: */ ++ ++ /* We expect this tuple, with the following mask */ ++ struct ip6_conntrack_tuple tuple, mask; ++ ++ /* Function to call after setup and insertion */ ++ int (*expectfn)(struct ip6_conntrack *new); ++ ++ /* At which sequence number did this expectation occur */ ++ u_int32_t seq; ++ ++ union ip6_conntrack_expect_proto proto; ++ ++ union ip6_conntrack_expect_help help; ++}; ++ ++#include ++struct ip6_conntrack ++{ ++ /* Usage count in here is 1 for hash table/destruct timer, 1 per skb, ++ plus 1 for any connection(s) we are `master' for */ ++ struct nf_conntrack ct_general; ++ ++ /* These are my tuples; original and reply */ ++ struct ip6_conntrack_tuple_hash tuplehash[IP6_CT_DIR_MAX]; ++ ++ /* Have we seen traffic both ways yet? (bitset) */ ++ unsigned long status; ++ ++ /* Timer function; drops refcnt when it goes off. */ ++ struct timer_list timeout; ++ ++ /* If we're expecting another related connection, this will be ++ in expected linked list */ ++ struct list_head sibling_list; ++ ++ /* Current number of expected connections */ ++ unsigned int expecting; ++ ++ /* If we were expected by an expectation, this will be it */ ++ struct ip6_conntrack_expect *master; ++ ++ /* Helper, if any. */ ++ struct ip6_conntrack_helper *helper; ++ ++ /* Storage reserved for other modules: */ ++ union ip6_conntrack_proto proto; ++ ++ union ip6_conntrack_help help; ++}; ++ ++/* get master conntrack via master expectation */ ++#define master_ct6(conntr) (conntr->master ? conntr->master->expectant : NULL) ++ ++/* Alter reply tuple (maybe alter helper). If it's already taken, ++ return 0 and don't do alteration. */ ++extern int ++ip6_conntrack_alter_reply(struct ip6_conntrack *conntrack, ++ const struct ip6_conntrack_tuple *newreply); ++ ++/* Is this tuple taken? (ignoring any belonging to the given ++ conntrack). */ ++extern int ++ip6_conntrack_tuple_taken(const struct ip6_conntrack_tuple *tuple, ++ const struct ip6_conntrack *ignored_conntrack); ++ ++/* Return conntrack_info and tuple hash for given skb. */ ++static inline struct ip6_conntrack * ++ip6_conntrack_get(const struct sk_buff *skb, enum ip6_conntrack_info *ctinfo) ++{ ++ *ctinfo = skb->nfctinfo; ++ return (struct ip6_conntrack *)skb->nfct; ++} ++ ++/* decrement reference count on a conntrack */ ++extern inline void ip6_conntrack_put(struct ip6_conntrack *ct); ++ ++/* find unconfirmed expectation based on tuple */ ++struct ip6_conntrack_expect * ++ip6_conntrack_expect_find_get(const struct ip6_conntrack_tuple *tuple); ++ ++/* decrement reference count on an expectation */ ++void ip6_conntrack_expect_put(struct ip6_conntrack_expect *exp); ++ ++/* call to create an explicit dependency on ip6_conntrack. */ ++extern void need_ip6_conntrack(void); ++ ++extern int ip6_invert_tuplepr(struct ip6_conntrack_tuple *inverse, ++ const struct ip6_conntrack_tuple *orig); ++ ++/* Refresh conntrack for this many jiffies */ ++extern void ip6_ct_refresh(struct ip6_conntrack *ct, ++ unsigned long extra_jiffies); ++ ++/* Call me when a conntrack is destroyed. */ ++extern void (*ip6_conntrack_destroyed)(struct ip6_conntrack *conntrack); ++ ++/* Returns new sk_buff, or NULL */ ++struct sk_buff * ++ip6_ct_gather_frags(struct sk_buff *skb); ++ ++/* Delete all conntracks which match. */ ++extern void ++ip6_ct_selective_cleanup(int (*kill)(const struct ip6_conntrack *i, void *data), ++ void *data); ++ ++/* It's confirmed if it is, or has been in the hash table. */ ++static inline int is_confirmed(struct ip6_conntrack *ct) ++{ ++ return test_bit(IP6S_CONFIRMED_BIT, &ct->status); ++} ++ ++extern unsigned int ip6_conntrack_htable_size; ++ ++/* eg. PROVIDES_CONNTRACK6(ftp); */ ++#define PROVIDES_CONNTRACK6(name) \ ++ int needs_ip6_conntrack_##name; \ ++ EXPORT_SYMBOL(needs_ip6_conntrack_##name) ++ ++/*. eg. NEEDS_CONNTRACK6(ftp); */ ++#define NEEDS_CONNTRACK6(name) \ ++ extern int needs_ip6_conntrack_##name; \ ++ static int *need_ip6_conntrack_##name __attribute_used__ = &needs_ip6_conntrack_##name ++ ++#endif /* __KERNEL__ */ ++#endif /* _IP6_CONNTRACK_H */ +diff -urN linux-2.6.11/include/linux/netfilter_ipv6/ip6_conntrack_core.h x1/include/linux/netfilter_ipv6/ip6_conntrack_core.h +--- linux-2.6.11/include/linux/netfilter_ipv6/ip6_conntrack_core.h 1970-01-01 01:00:00.000000000 +0100 ++++ x1/include/linux/netfilter_ipv6/ip6_conntrack_core.h 2004-10-01 11:24:38.000000000 +0200 +@@ -0,0 +1,69 @@ ++/* ++ * Copyright (C)2003 USAGI/WIDE Project ++ * ++ * Authors: ++ * Yasuyuki Kozakai ++ * ++ * Based on: include/linux/netfilter_ipv4/ip_conntrack_core.h ++ * ++ * This program 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 ++ * 2 of the License, or (at your option) any later version. ++ */ ++#ifndef _IP6_CONNTRACK_CORE_H ++#define _IP6_CONNTRACK_CORE_H ++#include ++#include ++ ++/* This header is used to share core functionality between the ++ standalone connection tracking module, and the compatibility layer's use ++ of connection tracking. */ ++extern unsigned int ip6_conntrack_in(unsigned int hooknum, ++ struct sk_buff **pskb, ++ const struct net_device *in, ++ const struct net_device *out, ++ int (*okfn)(struct sk_buff *)); ++ ++extern int ip6_conntrack_init(void); ++extern void ip6_conntrack_cleanup(void); ++ ++struct ip6_conntrack_protocol; ++extern struct ip6_conntrack_protocol *ip6_ct_find_proto(u_int8_t protocol); ++/* Like above, but you already have conntrack read lock. */ ++extern struct ip6_conntrack_protocol *__ip6_ct_find_proto(u_int8_t protocol); ++extern struct list_head ip6_protocol_list; ++ ++/* Returns conntrack if it dealt with ICMP, and filled in skb->nfct */ ++extern struct ip6_conntrack *icmp6_error_track(struct sk_buff *skb, ++ unsigned int icmp6off, ++ enum ip6_conntrack_info *ctinfo, ++ unsigned int hooknum); ++extern int ip6_get_tuple(const struct ipv6hdr *ipv6h, ++ const struct sk_buff *skb, ++ unsigned int protoff, ++ u_int8_t protonum, ++ struct ip6_conntrack_tuple *tuple, ++ const struct ip6_conntrack_protocol *protocol); ++ ++/* Find a connection corresponding to a tuple. */ ++struct ip6_conntrack_tuple_hash * ++ip6_conntrack_find_get(const struct ip6_conntrack_tuple *tuple, ++ const struct ip6_conntrack *ignored_conntrack); ++ ++extern int __ip6_conntrack_confirm(struct sk_buff *skb); ++ ++/* Confirm a connection: returns NF_DROP if packet must be dropped. */ ++static inline int ip6_conntrack_confirm(struct sk_buff *skb) ++{ ++ if (skb->nfct ++ && !is_confirmed((struct ip6_conntrack *)skb->nfct)) ++ return __ip6_conntrack_confirm(skb); ++ return NF_ACCEPT; ++} ++ ++extern struct list_head *ip6_conntrack_hash; ++extern struct list_head ip6_conntrack_expect_list; ++DECLARE_RWLOCK_EXTERN(ip6_conntrack_lock); ++#endif /* _IP6_CONNTRACK_CORE_H */ ++ +diff -urN linux-2.6.11/include/linux/netfilter_ipv6/ip6_conntrack_ftp.h x1/include/linux/netfilter_ipv6/ip6_conntrack_ftp.h +--- linux-2.6.11/include/linux/netfilter_ipv6/ip6_conntrack_ftp.h 1970-01-01 01:00:00.000000000 +0100 ++++ x1/include/linux/netfilter_ipv6/ip6_conntrack_ftp.h 2003-09-18 12:48:46.000000000 +0200 +@@ -0,0 +1,57 @@ ++/* ++ * Copyright (C)2003 USAGI/WIDE Project ++ * ++ * Authors: ++ * Yasuyuki Kozakai ++ * ++ * Based on: include/linux/netfilter_ipv4/ip_conntrack_ftp.h ++ * ++ * This program 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 ++ * 2 of the License, or (at your option) any later version. ++ */ ++#ifndef _IP6_CONNTRACK_FTP_H ++#define _IP6_CONNTRACK_FTP_H ++/* FTP tracking. */ ++ ++#ifdef __KERNEL__ ++ ++#include ++ ++/* Protects ftp part of conntracks */ ++DECLARE_LOCK_EXTERN(ip6_ftp_lock); ++ ++#define FTP_PORT 21 ++ ++#endif /* __KERNEL__ */ ++ ++enum ip6_ct_ftp_type ++{ ++ /* EPRT command from client */ ++ IP6_CT_FTP_EPRT, ++ /* EPSV response from server */ ++ IP6_CT_FTP_EPSV, ++}; ++ ++/* This structure is per expected connection */ ++struct ip6_ct_ftp_expect ++{ ++ /* We record seq number and length of ftp ip/port text here: all in ++ * host order. */ ++ ++ /* sequence number of IP address in packet is in ip_conntrack_expect */ ++ u_int32_t len; /* length of IPv6 address */ ++ enum ip6_ct_ftp_type ftptype; /* EPRT or EPSV ? */ ++ u_int16_t port; /* Port that was to be used */ ++}; ++ ++/* This structure exists only once per master */ ++struct ip6_ct_ftp_master { ++ /* Next valid seq position for cmd matching after newline */ ++ u_int32_t seq_aft_nl[IP6_CT_DIR_MAX]; ++ /* 0 means seq_match_aft_nl not set */ ++ int seq_aft_nl_set[IP6_CT_DIR_MAX]; ++}; ++ ++#endif /* _IP6_CONNTRACK_FTP_H */ +diff -urN linux-2.6.11/include/linux/netfilter_ipv6/ip6_conntrack_helper.h x1/include/linux/netfilter_ipv6/ip6_conntrack_helper.h +--- linux-2.6.11/include/linux/netfilter_ipv6/ip6_conntrack_helper.h 1970-01-01 01:00:00.000000000 +0100 ++++ x1/include/linux/netfilter_ipv6/ip6_conntrack_helper.h 2003-09-18 12:48:46.000000000 +0200 +@@ -0,0 +1,57 @@ ++/* ++ * Copyright (C)2003 USAGI/WIDE Project ++ * ++ * Authors: ++ * Yasuyuki Kozakai ++ * ++ * Based on: include/linux/netfilter_ipv4/ip_conntrack_helper.h ++ * ++ * This program 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 ++ * 2 of the License, or (at your option) any later version. ++ */ ++/* IP6 connection tracking helpers. */ ++#ifndef _IP6_CONNTRACK_HELPER_H ++#define _IP6_CONNTRACK_HELPER_H ++#include ++ ++struct module; ++ ++/* Reuse expectation when max_expected reached */ ++#define IP6_CT_HELPER_F_REUSE_EXPECT 0x01 ++ ++struct ip6_conntrack_helper ++{ ++ struct list_head list; /* Internal use. */ ++ ++ const char *name; /* name of the module */ ++ unsigned char flags; /* Flags (see above) */ ++ struct module *me; /* pointer to self */ ++ unsigned int max_expected; /* Maximum number of concurrent ++ * expected connections */ ++ unsigned int timeout; /* timeout for expecteds */ ++ ++ /* Mask of things we will help (compared against server response) */ ++ struct ip6_conntrack_tuple tuple; ++ struct ip6_conntrack_tuple mask; ++ ++ /* Function to call when data passes; return verdict, or -1 to ++ invalidate. */ ++ int (*help)(const struct sk_buff *skb, ++ unsigned int protoff, ++ struct ip6_conntrack *ct, ++ enum ip6_conntrack_info conntrackinfo); ++}; ++ ++extern int ip6_conntrack_helper_register(struct ip6_conntrack_helper *); ++extern void ip6_conntrack_helper_unregister(struct ip6_conntrack_helper *); ++ ++extern struct ip6_conntrack_helper *ip6_ct_find_helper(const struct ip6_conntrack_tuple *tuple); ++ ++/* Add an expected connection: can have more than one per connection */ ++extern int ip6_conntrack_expect_related(struct ip6_conntrack *related_to, ++ struct ip6_conntrack_expect *exp); ++extern void ip6_conntrack_unexpect_related(struct ip6_conntrack_expect *exp); ++ ++#endif /*_IP6_CONNTRACK_HELPER_H*/ +diff -urN linux-2.6.11/include/linux/netfilter_ipv6/ip6_conntrack_icmpv6.h x1/include/linux/netfilter_ipv6/ip6_conntrack_icmpv6.h +--- linux-2.6.11/include/linux/netfilter_ipv6/ip6_conntrack_icmpv6.h 1970-01-01 01:00:00.000000000 +0100 ++++ x1/include/linux/netfilter_ipv6/ip6_conntrack_icmpv6.h 2003-09-18 12:48:46.000000000 +0200 +@@ -0,0 +1,24 @@ ++/* ++ * Copyright (C)2003 USAGI/WIDE Project ++ * ++ * Authors: ++ * Yasuyuki Kozakai ++ * ++ * Based on: include/linux/netfilter_ipv4/ip_conntrack_icmp.h ++ * ++ * This program 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 ++ * 2 of the License, or (at your option) any later version. ++ */ ++#ifndef _IP6_CONNTRACK_ICMPV6_H ++#define _IP6_CONNTRACK_ICMPV6_H ++/* ICMPv6 tracking. */ ++#include ++ ++struct ip6_ct_icmpv6 ++{ ++ /* Optimization: when number in == number out, forget immediately. */ ++ atomic_t count; ++}; ++#endif /* _IP6_CONNTRACK_ICMPv6_H */ +diff -urN linux-2.6.11/include/linux/netfilter_ipv6/ip6_conntrack_protocol.h x1/include/linux/netfilter_ipv6/ip6_conntrack_protocol.h +--- linux-2.6.11/include/linux/netfilter_ipv6/ip6_conntrack_protocol.h 1970-01-01 01:00:00.000000000 +0100 ++++ x1/include/linux/netfilter_ipv6/ip6_conntrack_protocol.h 2003-09-18 12:48:46.000000000 +0200 +@@ -0,0 +1,83 @@ ++/* ++ * Copyright (C)2003 USAGI/WIDE Project ++ * ++ * Authors: ++ * Yasuyuki Kozakai ++ * ++ * Based on: include/linux/netfilter_ipv4/ip_conntrack_protocol.h ++ * ++ * This program 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 ++ * 2 of the License, or (at your option) any later version. ++ */ ++/* Header for use in defining a given protocol for connection tracking. */ ++#ifndef _IP6_CONNTRACK_PROTOCOL_H ++#define _IP6_CONNTRACK_PROTOCOL_H ++#include ++#include ++ ++struct ip6_conntrack_protocol ++{ ++ /* Next pointer. */ ++ struct list_head list; ++ ++ /* Protocol number. */ ++ u_int8_t proto; ++ ++ /* Protocol name */ ++ const char *name; ++ ++ /* Try to fill in the third arg: dataoff is offset past IPv6 ++ hdr and IPv6 ext hdrs. Return true if possible. */ ++ int (*pkt_to_tuple)(const struct sk_buff *skb, ++ unsigned int dataoff, ++ struct ip6_conntrack_tuple *tuple); ++ ++ /* Invert the per-proto part of the tuple: ie. turn xmit into reply. ++ * Some packets can't be inverted: return 0 in that case. ++ */ ++ int (*invert_tuple)(struct ip6_conntrack_tuple *inverse, ++ const struct ip6_conntrack_tuple *orig); ++ ++ /* Print out the per-protocol part of the tuple. */ ++ unsigned int (*print_tuple)(char *buffer, ++ const struct ip6_conntrack_tuple *); ++ ++ /* Print out the private part of the conntrack. */ ++ unsigned int (*print_conntrack)(char *buffer, ++ const struct ip6_conntrack *); ++ ++ /* Returns verdict for packet, or -1 for invalid. */ ++ int (*packet)(struct ip6_conntrack *conntrack, ++ const struct sk_buff *skb, ++ unsigned int dataoff, ++ enum ip6_conntrack_info ctinfo); ++ ++ /* Called when a new connection for this protocol found; ++ * returns TRUE if it's OK. If so, packet() called next. */ ++ int (*new)(struct ip6_conntrack *conntrack, const struct sk_buff *skb, ++ unsigned int dataoff); ++ ++ /* Called when a conntrack entry is destroyed */ ++ void (*destroy)(struct ip6_conntrack *conntrack); ++ ++ /* Has to decide if a expectation matches one packet or not */ ++ int (*exp_matches_pkt)(struct ip6_conntrack_expect *exp, ++ const struct sk_buff *skb, ++ unsigned int dataoff); ++ ++ /* Module (if any) which this is connected to. */ ++ struct module *me; ++}; ++ ++/* Protocol registration. */ ++extern int ip6_conntrack_protocol_register(struct ip6_conntrack_protocol *proto); ++extern void ip6_conntrack_protocol_unregister(struct ip6_conntrack_protocol *proto); ++ ++/* Existing built-in protocols */ ++extern struct ip6_conntrack_protocol ip6_conntrack_protocol_tcp; ++extern struct ip6_conntrack_protocol ip6_conntrack_protocol_udp; ++extern struct ip6_conntrack_protocol ip6_conntrack_protocol_icmpv6; ++extern int ip6_conntrack_protocol_tcp_init(void); ++#endif /*_IP6_CONNTRACK_PROTOCOL_H*/ +diff -urN linux-2.6.11/include/linux/netfilter_ipv6/ip6_conntrack_reasm.h x1/include/linux/netfilter_ipv6/ip6_conntrack_reasm.h +--- linux-2.6.11/include/linux/netfilter_ipv6/ip6_conntrack_reasm.h 1970-01-01 01:00:00.000000000 +0100 ++++ x1/include/linux/netfilter_ipv6/ip6_conntrack_reasm.h 2003-09-18 12:48:46.000000000 +0200 +@@ -0,0 +1,28 @@ ++/* ++ * Copyright (C)2003 USAGI/WIDE Project ++ * ++ * Authors: ++ * Yasuyuki Kozakai ++ * ++ * This program 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 ++ * 2 of the License, or (at your option) any later version. ++ */ ++#ifndef _IP6_CONNTRACK_REASM_H ++#define _IP6_CONNTRACK_REASM_H ++ ++#include ++extern struct sk_buff * ++ip6_ct_gather_frags(struct sk_buff *skb); ++ ++extern int ++ip6_ct_output_frags(struct sk_buff *skb, struct nf_info *info); ++ ++extern int ip6_ct_kfree_frags(struct sk_buff *skb); ++ ++extern int ip6_ct_frags_init(void); ++extern void ip6_ct_frags_cleanup(void); ++ ++#endif /* _IP6_CONNTRACK_REASM_H */ ++ +diff -urN linux-2.6.11/include/linux/netfilter_ipv6/ip6_conntrack_tcp.h x1/include/linux/netfilter_ipv6/ip6_conntrack_tcp.h +--- linux-2.6.11/include/linux/netfilter_ipv6/ip6_conntrack_tcp.h 1970-01-01 01:00:00.000000000 +0100 ++++ x1/include/linux/netfilter_ipv6/ip6_conntrack_tcp.h 2003-09-18 12:48:46.000000000 +0200 +@@ -0,0 +1,41 @@ ++/* ++ * Copyright (C)2003 USAGI/WIDE Project ++ * ++ * Authors: ++ * Yasuyuki Kozakai ++ * ++ * Based on: include/linux/netfilter_ipv4/ip_conntrack_tcp.h ++ * ++ * This program 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 ++ * 2 of the License, or (at your option) any later version. ++ */ ++#ifndef _IP6_CONNTRACK_TCP_H ++#define _IP6_CONNTRACK_TCP_H ++/* TCP tracking. */ ++ ++enum tcp_conntrack { ++ TCP_CONNTRACK_NONE, ++ TCP_CONNTRACK_ESTABLISHED, ++ TCP_CONNTRACK_SYN_SENT, ++ TCP_CONNTRACK_SYN_RECV, ++ TCP_CONNTRACK_FIN_WAIT, ++ TCP_CONNTRACK_TIME_WAIT, ++ TCP_CONNTRACK_CLOSE, ++ TCP_CONNTRACK_CLOSE_WAIT, ++ TCP_CONNTRACK_LAST_ACK, ++ TCP_CONNTRACK_LISTEN, ++ TCP_CONNTRACK_MAX ++}; ++ ++struct ip6_ct_tcp ++{ ++ enum tcp_conntrack state; ++ ++ /* Poor man's window tracking: sequence number of valid ACK ++ handshake completion packet */ ++ u_int32_t handshake_ack; ++}; ++ ++#endif /* _IP6_CONNTRACK_TCP_H */ +diff -urN linux-2.6.11/include/linux/netfilter_ipv6/ip6_conntrack_tuple.h x1/include/linux/netfilter_ipv6/ip6_conntrack_tuple.h +--- linux-2.6.11/include/linux/netfilter_ipv6/ip6_conntrack_tuple.h 1970-01-01 01:00:00.000000000 +0100 ++++ x1/include/linux/netfilter_ipv6/ip6_conntrack_tuple.h 2003-09-18 12:48:46.000000000 +0200 +@@ -0,0 +1,131 @@ ++/* ++ * Copyright (C)2003 USAGI/WIDE Project ++ * ++ * Authors: ++ * Yasuyuki Kozakai ++ * ++ * Based on: include/linux/netfilter_ipv4/ip_conntrack_tuple.h ++ * ++ * This program 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 ++ * 2 of the License, or (at your option) any later version. ++ */ ++#ifndef _IP6_CONNTRACK_TUPLE_H ++#define _IP6_CONNTRACK_TUPLE_H ++ ++#ifdef __KERNEL__ ++#include ++#include ++#endif ++ ++/* A `tuple' is a structure containing the information to uniquely ++ identify a connection. ie. if two packets have the same tuple, they ++ are in the same connection; if not, they are not. ++ ++ We divide the structure along "manipulatable" and ++ "non-manipulatable" lines, for the benefit of the NAT code. ++*/ ++ ++/* The protocol-specific manipulable parts of the tuple: always in ++ network order! */ ++union ip6_conntrack_manip_proto ++{ ++ /* Add other protocols here. */ ++ u_int16_t all; ++ ++ struct { ++ u_int16_t port; ++ } tcp; ++ struct { ++ u_int16_t port; ++ } udp; ++ struct { ++ u_int16_t id; ++ } icmpv6; ++}; ++ ++/* The manipulable part of the tuple. */ ++struct ip6_conntrack_manip ++{ ++ struct in6_addr ip; ++ union ip6_conntrack_manip_proto u; ++}; ++ ++/* This contains the information to distinguish a connection. */ ++struct ip6_conntrack_tuple ++{ ++ struct ip6_conntrack_manip src; ++ ++ /* These are the parts of the tuple which are fixed. */ ++ struct { ++ struct in6_addr ip; ++ union { ++ /* Add other protocols here. */ ++ u_int16_t all; ++ ++ struct { ++ u_int16_t port; ++ } tcp; ++ struct { ++ u_int16_t port; ++ } udp; ++ struct { ++ u_int8_t type, code; ++ } icmpv6; ++ } u; ++ ++ /* The protocol. */ ++ u_int16_t protonum; ++ } dst; ++}; ++ ++enum ip6_conntrack_dir ++{ ++ IP6_CT_DIR_ORIGINAL, ++ IP6_CT_DIR_REPLY, ++ IP6_CT_DIR_MAX ++}; ++ ++#ifdef __KERNEL__ ++ ++#define DUMP_TUPLE(tp) \ ++{ \ ++ DEBUGP("tuple %p: %u %x:%x:%x:%x:%x:%x:%x:%x, %hu -> %x:%x:%x:%x:%x:%x:%x:%x, %hu\n", \ ++ (tp), (tp)->dst.protonum, \ ++ NIP6((tp)->src.ip), ntohs((tp)->src.u.all), \ ++ NIP6((tp)->dst.ip), ntohs((tp)->dst.u.all)); \ ++} ++ ++#define CTINFO2DIR(ctinfo) ((ctinfo) >= IP6_CT_IS_REPLY ? IP6_CT_DIR_REPLY : IP6_CT_DIR_ORIGINAL) ++ ++/* If we're the first tuple, it's the original dir. */ ++#define DIRECTION(h) ((enum ip6_conntrack_dir)(&(h)->ctrack->tuplehash[1] == (h))) ++ ++/* Connections have two entries in the hash table: one for each way */ ++struct ip6_conntrack_tuple_hash ++{ ++ struct list_head list; ++ ++ struct ip6_conntrack_tuple tuple; ++ ++ /* this == &ctrack->tuplehash[DIRECTION(this)]. */ ++ struct ip6_conntrack *ctrack; ++}; ++ ++#endif /* __KERNEL__ */ ++ ++extern int ip6_ct_tuple_src_equal(const struct ip6_conntrack_tuple *t1, ++ const struct ip6_conntrack_tuple *t2); ++ ++extern int ip6_ct_tuple_dst_equal(const struct ip6_conntrack_tuple *t1, ++ const struct ip6_conntrack_tuple *t2); ++ ++extern int ip6_ct_tuple_equal(const struct ip6_conntrack_tuple *t1, ++ const struct ip6_conntrack_tuple *t2); ++ ++extern int ip6_ct_tuple_mask_cmp(const struct ip6_conntrack_tuple *t, ++ const struct ip6_conntrack_tuple *tuple, ++ const struct ip6_conntrack_tuple *mask); ++ ++#endif /* _IP6_CONNTRACK_TUPLE_H */ +diff -urN linux-2.6.11/include/linux/netfilter_ipv6/ip6t_REJECT.h x1/include/linux/netfilter_ipv6/ip6t_REJECT.h +--- linux-2.6.11/include/linux/netfilter_ipv6/ip6t_REJECT.h 1970-01-01 01:00:00.000000000 +0100 ++++ x1/include/linux/netfilter_ipv6/ip6t_REJECT.h 2004-09-20 03:55:57.000000000 +0200 +@@ -0,0 +1,18 @@ ++#ifndef _IP6T_REJECT_H ++#define _IP6T_REJECT_H ++ ++enum ip6t_reject_with { ++ IP6T_ICMP6_NO_ROUTE, ++ IP6T_ICMP6_ADM_PROHIBITED, ++ IP6T_ICMP6_NOT_NEIGHBOUR, ++ IP6T_ICMP6_ADDR_UNREACH, ++ IP6T_ICMP6_PORT_UNREACH, ++ IP6T_ICMP6_ECHOREPLY, ++ IP6T_TCP_RESET ++}; ++ ++struct ip6t_reject_info { ++ enum ip6t_reject_with with; /* reject type */ ++}; ++ ++#endif /*_IP6T_REJECT_H*/ +diff -urN linux-2.6.11/include/linux/netfilter_ipv6/ip6t_state.h x1/include/linux/netfilter_ipv6/ip6t_state.h +--- linux-2.6.11/include/linux/netfilter_ipv6/ip6t_state.h 1970-01-01 01:00:00.000000000 +0100 ++++ x1/include/linux/netfilter_ipv6/ip6t_state.h 2003-09-18 12:48:46.000000000 +0200 +@@ -0,0 +1,24 @@ ++/* ++ * Copyright (C)2003 USAGI/WIDE Project ++ * ++ * Authors: ++ * Yasuyuki Kozakai ++ * ++ * Based on: include/linux/netfilter_ipv4/ipt_state.h ++ * ++ * This program 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 ++ * 2 of the License, or (at your option) any later version. ++ */ ++#ifndef _IP6T_STATE_H ++#define _IP6T_STATE_H ++ ++#define IP6T_STATE_BIT(ctinfo) (1 << ((ctinfo)%IP6_CT_IS_REPLY+1)) ++#define IP6T_STATE_INVALID (1 << 0) ++ ++struct ip6t_state_info ++{ ++ unsigned int statemask; ++}; ++#endif /*_IP6T_STATE_H*/ +diff -urN linux-2.6.11/include/linux/rtnetlink.h x1/include/linux/rtnetlink.h +--- linux-2.6.11/include/linux/rtnetlink.h 2005-03-02 08:38:18.000000000 +0100 ++++ x1/include/linux/rtnetlink.h 2005-02-11 17:24:31.000000000 +0100 +@@ -346,6 +346,7 @@ + #define RTAX_FEATURE_ECN 0x00000001 + #define RTAX_FEATURE_SACK 0x00000002 + #define RTAX_FEATURE_TIMESTAMP 0x00000004 ++#define RTAX_FEATURE_ALLFRAG 0x00000008 + + struct rta_session + { +diff -urN linux-2.6.11/include/linux/sysctl.h x1/include/linux/sysctl.h +--- linux-2.6.11/include/linux/sysctl.h 2005-03-02 08:38:10.000000000 +0100 ++++ x1/include/linux/sysctl.h 2005-02-28 07:45:54.000000000 +0100 +@@ -455,7 +455,8 @@ + NET_IPV6_ROUTE_GC_INTERVAL=6, + NET_IPV6_ROUTE_GC_ELASTICITY=7, + NET_IPV6_ROUTE_MTU_EXPIRES=8, +- NET_IPV6_ROUTE_MIN_ADVMSS=9 ++ NET_IPV6_ROUTE_MIN_ADVMSS=9, ++ NET_IPV6_ROUTE_GC_MIN_INTERVAL_MS=10 + }; + + enum { +@@ -475,7 +476,8 @@ + NET_IPV6_REGEN_MAX_RETRY=14, + NET_IPV6_MAX_DESYNC_FACTOR=15, + NET_IPV6_MAX_ADDRESSES=16, +- NET_IPV6_FORCE_MLD_VERSION=17 ++ NET_IPV6_FORCE_MLD_VERSION=17, ++ NET_IPV6_MC_FORWARDING=18 + }; + + /* /proc/sys/net/ipv6/icmp */ +@@ -488,8 +490,8 @@ + NET_NEIGH_MCAST_SOLICIT=1, + NET_NEIGH_UCAST_SOLICIT=2, + NET_NEIGH_APP_SOLICIT=3, +- NET_NEIGH_RETRANS_TIME=4, +- NET_NEIGH_REACHABLE_TIME=5, ++ NET_NEIGH_RETRANS_TIME=4, /* deprecated */ ++ NET_NEIGH_REACHABLE_TIME=5, /* deprecated */ + NET_NEIGH_DELAY_PROBE_TIME=6, + NET_NEIGH_GC_STALE_TIME=7, + NET_NEIGH_UNRES_QLEN=8, +@@ -500,7 +502,10 @@ + NET_NEIGH_GC_INTERVAL=13, + NET_NEIGH_GC_THRESH1=14, + NET_NEIGH_GC_THRESH2=15, +- NET_NEIGH_GC_THRESH3=16 ++ NET_NEIGH_GC_THRESH3=16, ++ NET_NEIGH_RETRANS_TIME_MS=17, ++ NET_NEIGH_REACHABLE_TIME_MS=18, ++ __NET_NEIGH_MAX + }; + + /* /proc/sys/net/ipx */ +diff -urN linux-2.6.11/include/linux/xfrm.h x1/include/linux/xfrm.h +--- linux-2.6.11/include/linux/xfrm.h 2005-03-02 08:38:37.000000000 +0100 ++++ x1/include/linux/xfrm.h 2005-01-21 06:15:37.000000000 +0100 +@@ -90,8 +90,12 @@ + { + XFRM_POLICY_IN = 0, + XFRM_POLICY_OUT = 1, ++#ifdef CONFIG_USE_POLICY_FWD + XFRM_POLICY_FWD = 2, + XFRM_POLICY_MAX = 3 ++#else ++ XFRM_POLICY_MAX = 2 ++#endif + }; + + enum +diff -urN linux-2.6.11/include/net/addrconf.h x1/include/net/addrconf.h +--- linux-2.6.11/include/net/addrconf.h 2005-03-02 08:38:18.000000000 +0100 ++++ x1/include/net/addrconf.h 2005-02-03 15:43:50.000000000 +0100 +@@ -102,6 +102,8 @@ + + extern void addrconf_prefix_rcv(struct net_device *dev, u8 *opt, int len); + ++extern int ipv6_get_hoplimit(struct net_device *dev); ++ + /* + * anycast prototypes (anycast.c) + */ +diff -urN linux-2.6.11/include/net/dst.h x1/include/net/dst.h +--- linux-2.6.11/include/net/dst.h 2005-03-02 08:38:38.000000000 +0100 ++++ x1/include/net/dst.h 2005-02-28 07:45:54.000000000 +0100 +@@ -125,6 +125,18 @@ + } + + static inline int ++ip6_dst_allfrag(const struct dst_entry *dst) ++{ ++#ifdef CONFIG_IPV6_ALLFRAG ++ int ret = dst_path_metric(dst, RTAX_FEATURES) & RTAX_FEATURE_ALLFRAG; ++ barrier(); ++ return ret; ++#else ++ return 0; ++#endif ++}; ++ ++static inline int + dst_metric_locked(struct dst_entry *dst, int metric) + { + return dst_metric(dst, RTAX_LOCK) & (1<stats.ipv6_statistics, field); \ ++ SNMP_INC_STATS(ipv6_statistics, field); \ ++}) ++#define IP6_INC_STATS_BH(idev, field) ({ \ ++ struct inet6_dev *_idev = (idev); \ ++ if (likely(_idev != NULL)) \ ++ SNMP_INC_STATS_BH((_idev)->stats.ipv6_statistics, field); \ ++ SNMP_INC_STATS_BH(ipv6_statistics, field); \ ++}) ++#define IP6_INC_STATS_USER(idev, field) ({ \ ++ struct inet6_dev *_idev = (idev); \ ++ if (likely(_idev != NULL)) \ ++ SNMP_INC_STATS_USER(_idev->stats.ipv6_statistics, field); \ ++ SNMP_INC_STATS_USER(ipv6_statistics, field); \ ++}) ++#else + #define IP6_INC_STATS(field) SNMP_INC_STATS(ipv6_statistics, field) + #define IP6_INC_STATS_BH(field) SNMP_INC_STATS_BH(ipv6_statistics, field) + #define IP6_INC_STATS_USER(field) SNMP_INC_STATS_USER(ipv6_statistics, field) ++#endif + DECLARE_SNMP_STAT(struct icmpv6_mib, icmpv6_statistics); + #define ICMP6_INC_STATS(idev, field) ({ \ + struct inet6_dev *_idev = (idev); \ +@@ -142,9 +163,30 @@ + SNMP_INC_STATS_OFFSET_BH(icmpv6_statistics, field, _offset); \ + }) + DECLARE_SNMP_STAT(struct udp_mib, udp_stats_in6); ++#if 0 ++#define UDP6_INC_STATS(idev, field) ({ \ ++ struct inet6_dev *_idev = (idev); \ ++ if (likely(_idev != NULL)) \ ++ SNMP_INC_STATS(idev->stats.udp_stats_in6, field); \ ++ SNMP_INC_STATS(udp_stats_in6, field); \ ++}) ++#define UDP6_INC_STATS_BH(idev, field) ({ \ ++ struct inet6_dev *_idev = (idev); \ ++ if (likely(_idev != NULL)) \ ++ SNMP_INC_STATS_BH((_idev)->stats.udp_stats_in6, field); \ ++ SNMP_INC_STATS_BH(udp_stats_in6, field); \ ++}) ++#define UDP6_INC_STATS_USER(idev, field) ({ \ ++ struct inet6_dev *_idev = (idev); \ ++ if (likely(_idev != NULL)) \ ++ SNMP_INC_STATS_USER(_idev->stats.udp_stats_in6, field); \ ++ SNMP_INC_STATS_USER(udp_stats_in6, field); \ ++}) ++#else + #define UDP6_INC_STATS(field) SNMP_INC_STATS(udp_stats_in6, field) + #define UDP6_INC_STATS_BH(field) SNMP_INC_STATS_BH(udp_stats_in6, field) +-#define UDP6_INC_STATS_USER(field) SNMP_INC_STATS_USER(udp_stats_in6, field) ++#define UDP6_INC_STATS_USER(field) SNMP_INC_STATS_USER(udp_stats_in6, field) ++#endif + extern atomic_t inet6_sock_nr; + + int snmp6_register_dev(struct inet6_dev *idev); +@@ -231,7 +273,7 @@ + void (*destructor)(struct sock *)); + + +-extern int ipv6_parse_hopopts(struct sk_buff *skb, int); ++extern int ipv6_parse_hopopts(struct sk_buff **skb, unsigned int *nhoffp); + + extern struct ipv6_txoptions * ipv6_dup_options(struct sock *sk, struct ipv6_txoptions *opt); + +@@ -249,12 +291,28 @@ + char *, + unsigned int, unsigned int); + +- +-extern int ipv6_addr_type(const struct in6_addr *addr); ++/* ++ * Address manipulation functions ++ */ ++extern int __ipv6_addr_type(const struct in6_addr *addr); ++static inline int ipv6_addr_type(const struct in6_addr *addr) ++{ ++ return __ipv6_addr_type(addr) & 0xffff; ++} + + static inline int ipv6_addr_scope(const struct in6_addr *addr) + { +- return ipv6_addr_type(addr) & IPV6_ADDR_SCOPE_MASK; ++ return __ipv6_addr_type(addr) & IPV6_ADDR_SCOPE_MASK; ++} ++ ++static inline int __ipv6_addr_src_scope(int type) ++{ ++ return type == IPV6_ADDR_ANY ? __IPV6_ADDR_SCOPE_INVALID : type>>16; ++} ++ ++static inline int ipv6_addr_src_scope(const struct in6_addr *addr) ++{ ++ return __ipv6_addr_src_scope(__ipv6_addr_type(addr)); + } + + static inline int ipv6_addr_cmp(const struct in6_addr *a1, const struct in6_addr *a2) +@@ -305,6 +363,33 @@ + a1->s6_addr32[3] == a2->s6_addr32[3]); + } + ++/* compare "prefix length" bits of an address */ ++static inline int __ipv6_prefix_equal(const u32 *a1, const u32 *a2, ++ unsigned int prefixlen) ++{ ++ unsigned pdw, pbi; ++ ++ /* check complete u32 in prefix */ ++ pdw = prefixlen >> 5; ++ if (pdw && memcmp(a1, a2, pdw << 2)) ++ return 0; ++ ++ /* check incomplete u32 in prefix */ ++ pbi = prefixlen & 0x1f; ++ if (pbi && ((a1[pdw] ^ a2[pdw]) & htonl((0xffffffff) << (32 - pbi)))) ++ return 0; ++ ++ return 1; ++} ++ ++static inline int ipv6_prefix_equal(const struct in6_addr *a1, ++ const struct in6_addr *a2, ++ unsigned int prefixlen) ++{ ++ return __ipv6_prefix_equal(a1->s6_addr32, a2->s6_addr32, ++ prefixlen); ++} ++ + static inline int ipv6_addr_any(const struct in6_addr *a) + { + return ((a->s6_addr32[0] | a->s6_addr32[1] | +@@ -368,6 +453,7 @@ + extern int ip6_forward(struct sk_buff *skb); + extern int ip6_input(struct sk_buff *skb); + extern int ip6_mc_input(struct sk_buff *skb); ++extern int ip6_mr_input(struct sk_buff *skb); + + /* + * Extension header (options) processing +diff -urN linux-2.6.11/include/net/neighbour.h x1/include/net/neighbour.h +--- linux-2.6.11/include/net/neighbour.h 2005-03-02 08:38:32.000000000 +0100 ++++ x1/include/net/neighbour.h 2005-02-10 06:31:25.000000000 +0100 +@@ -54,6 +54,8 @@ + #include + #include + ++#include ++ + #include + #include + +@@ -158,7 +160,8 @@ + struct pneigh_entry + { + struct pneigh_entry *next; +- struct net_device *dev; ++ struct net_device *dev; ++ struct neigh_table *tbl; + u8 key[0]; + }; + +@@ -205,6 +208,27 @@ + #endif + }; + ++struct neigh_notifier_parms { ++ void (*link_notifier)(void *); ++ void *link_notifier_data; ++}; ++ ++static __inline__ char * neigh_state(int state) ++{ ++ switch (state) { ++ case NUD_NONE: return "NONE"; ++ case NUD_INCOMPLETE: return "INCOMPLETE"; ++ case NUD_REACHABLE: return "REACHABLE"; ++ case NUD_STALE: return "STALE"; ++ case NUD_DELAY: return "DELAY"; ++ case NUD_PROBE: return "PROBE"; ++ case NUD_FAILED: return "FAILED"; ++ case NUD_NOARP: return "NOARP"; ++ case NUD_PERMANENT: return "PERMANENT"; ++ default: return "???"; ++ } ++} ++ + /* flags for neigh_update() */ + #define NEIGH_UPDATE_F_OVERRIDE 0x00000001 + #define NEIGH_UPDATE_F_WEAK_OVERRIDE 0x00000002 +@@ -274,7 +298,8 @@ + struct neigh_parms *p, + int p_id, int pdev_id, + char *p_name, +- proc_handler *proc_handler); ++ proc_handler *proc_handler, ++ void (*notifier)(void *)); + extern void neigh_sysctl_unregister(struct neigh_parms *p); + + static inline void __neigh_parms_put(struct neigh_parms *parms) +@@ -300,18 +325,35 @@ + + static inline void neigh_release(struct neighbour *neigh) + { ++#ifdef CONFIG_IPV6_NDISC_DEBUG ++ printk(KERN_DEBUG "%s(neigh=%p): refcnt=%d\n", ++ __FUNCTION__, neigh, atomic_read(&neigh->refcnt)-1); ++#endif + if (atomic_dec_and_test(&neigh->refcnt)) + neigh_destroy(neigh); + } + + static inline struct neighbour * neigh_clone(struct neighbour *neigh) + { ++#ifdef CONFIG_IPV6_NDISC_DEBUG ++ printk(KERN_DEBUG "%s(neigh=%p): refcnt=%d\n", ++ __FUNCTION__, neigh, neigh ? atomic_read(&neigh->refcnt)+1 : 0); ++#endif + if (neigh) + atomic_inc(&neigh->refcnt); + return neigh; + } + ++#ifdef CONFIG_IPV6_NDISC_DEBUG ++#define neigh_hold(n) ({ \ ++ struct neighbour *_n = (n); \ ++ printk(KERN_DEBUG "%s(neigh=%p): refcnt=%d\n", \ ++ __FUNCTION__, _n, atomic_read(&_n->refcnt)+1); \ ++ atomic_inc(&_n->refcnt); \ ++}) ++#else + #define neigh_hold(n) atomic_inc(&(n)->refcnt) ++#endif + + static inline void neigh_confirm(struct neighbour *neigh) + { +@@ -331,6 +373,11 @@ + + static inline int neigh_event_send(struct neighbour *neigh, struct sk_buff *skb) + { ++#ifdef CONFIG_IPV6_NDISC_DEBUG ++ printk(KERN_DEBUG ++ "%s(neigh=%p, skb=%p): %s, refcnt=%d\n", ++ __FUNCTION__, neigh, skb, neigh_state(neigh->nud_state), atomic_read(&neigh->refcnt)); ++#endif + neigh->used = jiffies; + if (!(neigh->nud_state&(NUD_CONNECTED|NUD_DELAY|NUD_PROBE))) + return __neigh_event_send(neigh, skb); +diff -urN linux-2.6.11/include/net/xfrm.h x1/include/net/xfrm.h +--- linux-2.6.11/include/net/xfrm.h 2005-03-02 08:38:25.000000000 +0100 ++++ x1/include/net/xfrm.h 2005-02-03 13:45:59.000000000 +0100 +@@ -471,8 +471,12 @@ + static inline int + __xfrm6_selector_match(struct xfrm_selector *sel, struct flowi *fl) + { +- return addr_match(&fl->fl6_dst, &sel->daddr, sel->prefixlen_d) && +- addr_match(&fl->fl6_src, &sel->saddr, sel->prefixlen_s) && ++ return __ipv6_prefix_equal(fl->fl6_dst.s6_addr32, ++ sel->daddr.a6, ++ sel->prefixlen_d) && ++ __ipv6_prefix_equal(fl->fl6_src.s6_addr32, ++ sel->saddr.a6, ++ sel->prefixlen_s) && + !((xfrm_flowi_dport(fl) ^ sel->dport) & sel->dport_mask) && + !((xfrm_flowi_sport(fl) ^ sel->sport) & sel->sport_mask) && + (fl->proto == sel->proto || !sel->proto) && +@@ -863,7 +867,7 @@ + extern void km_policy_expired(struct xfrm_policy *pol, int dir, int hard); + + extern void xfrm_input_init(void); +-extern int xfrm_parse_spi(struct sk_buff *skb, u8 nexthdr, u32 *spi, u32 *seq); ++extern int xfrm_parse_spi(struct sk_buff *skb, u8 nexthdr, u32 *spi); + + extern void xfrm_probe_algs(void); + extern int xfrm_count_auth_supported(void); +diff -urN linux-2.6.11/include/video/tgafb.h x1/include/video/tgafb.h +--- linux-2.6.11/include/video/tgafb.h 2005-03-02 08:38:19.000000000 +0100 ++++ x1/include/video/tgafb.h 2004-12-07 11:12:39.000000000 +0100 +@@ -47,7 +47,6 @@ + #define TGA_VALID_REG 0x0070 + #define TGA_CURSOR_XY_REG 0x0074 + #define TGA_INTR_STAT_REG 0x007c +-#define TGA_DATA_REG 0x0080 + #define TGA_RAMDAC_SETUP_REG 0x00c0 + #define TGA_BLOCK_COLOR0_REG 0x0140 + #define TGA_BLOCK_COLOR1_REG 0x0144 +diff -urN linux-2.6.11/net/Kconfig x1/net/Kconfig +--- linux-2.6.11/net/Kconfig 2005-03-02 08:38:34.000000000 +0100 ++++ x1/net/Kconfig 2005-02-28 12:50:45.000000000 +0100 +@@ -81,6 +81,18 @@ + + Say Y unless you know what you are doing. + ++config USE_POLICY_FWD ++ bool "Use xfrm policy fwd" ++ default y ++ ---help--- ++ Using XFRM_POLICY_FWD which corespond to fwd in setkey ++ when specifing inbound forwarding policy. ++ This is USAGI original changes. If you want the original ++ kernel behavior of IPsec, say Y. If you want behavior ++ which is similar to KAME IPsec stack, say N. ++ ++ Unsure, Say Y. ++ + config INET + bool "TCP/IP networking" + ---help--- +@@ -107,12 +119,12 @@ + + # IPv6 as module will cause a CRASH if you try to unload it + config IPV6 +- tristate "The IPv6 protocol (EXPERIMENTAL)" +- depends on INET && EXPERIMENTAL +- select CRYPTO if IPV6_PRIVACY +- select CRYPTO_MD5 if IPV6_PRIVACY ++ tristate "The IPv6 protocol" ++ depends on INET ++ select CRYPTO if IPV6_PRIVACY_MD5 ++ select CRYPTO_MD5 if IPV6_PRIVACY_MD5 + ---help--- +- This is experimental support for the IP version 6 (formerly called ++ This is additional support for the IP version 6 (formerly called + IPng "IP next generation"). You will still be able to do + regular IPv4 networking as well. + +@@ -127,8 +139,6 @@ + To compile this protocol support as a module, choose M here: the + module will be called ipv6. + +- It is safe to say N here for now. +- + source "net/ipv6/Kconfig" + + menuconfig NETFILTER +diff -urN linux-2.6.11/net/core/neighbour.c x1/net/core/neighbour.c +--- linux-2.6.11/net/core/neighbour.c 2005-03-02 08:37:47.000000000 +0100 ++++ x1/net/core/neighbour.c 2005-02-20 04:42:00.000000000 +0100 +@@ -33,13 +33,18 @@ + #include + #include + ++#ifdef CONFIG_IPV6_NDISC_DEBUG ++#define NEIGH_DEBUG 3 ++#else + #define NEIGH_DEBUG 1 ++#endif + + #define NEIGH_PRINTK(x...) printk(x) + #define NEIGH_NOPRINTK(x...) do { ; } while(0) + #define NEIGH_PRINTK0 NEIGH_PRINTK + #define NEIGH_PRINTK1 NEIGH_NOPRINTK + #define NEIGH_PRINTK2 NEIGH_NOPRINTK ++#define NEIGH_PRINTK3 NEIGH_NOPRINTK + + #if NEIGH_DEBUG >= 1 + #undef NEIGH_PRINTK1 +@@ -49,6 +54,10 @@ + #undef NEIGH_PRINTK2 + #define NEIGH_PRINTK2 NEIGH_PRINTK + #endif ++#if NEIGH_DEBUG >= 3 ++#undef NEIGH_PRINTK3 ++#define NEIGH_PRINTK3 NEIGH_PRINTK ++#endif + + #define PNEIGH_HASHMASK 0xF + +@@ -118,6 +127,10 @@ + int shrunk = 0; + int i; + ++ NEIGH_PRINTK3(KERN_DEBUG ++ "%s(tbl=%p)\n", ++ __FUNCTION__, tbl); ++ + NEIGH_CACHE_STAT_INC(tbl, forced_gc_runs); + + write_lock_bh(&tbl->lock); +@@ -156,9 +169,21 @@ + { + if ((n->nud_state & NUD_IN_TIMER) && + del_timer(&n->timer)) { ++ ++ NEIGH_PRINTK3(KERN_DEBUG ++ "%s(n=%p): %s, refcnt=%d\n", ++ __FUNCTION__, ++ n, neigh_state(n->nud_state), atomic_read(&n->refcnt) -1); ++ + neigh_release(n); + return 1; + } ++ ++ NEIGH_PRINTK3(KERN_DEBUG ++ "%s(n=%p): %s, refcnt=%d\n", ++ __FUNCTION__, ++ n, neigh_state(n->nud_state), atomic_read(&n->refcnt)); ++ + return 0; + } + +@@ -203,6 +228,11 @@ + { + int i; + ++ NEIGH_PRINTK3(KERN_DEBUG ++ "%s(tbl=%p, dev=%p)\n", ++ __FUNCTION__, ++ tbl, dev); ++ + write_lock_bh(&tbl->lock); + + for (i = 0; i <= tbl->hash_mask; i++) { +@@ -255,18 +285,30 @@ + unsigned long now = jiffies; + int entries; + ++ NEIGH_PRINTK3(KERN_DEBUG ++ "%s(tbl=%p)\n", ++ __FUNCTION__, tbl); ++ + entries = atomic_inc_return(&tbl->entries) - 1; + if (entries >= tbl->gc_thresh3 || + (entries >= tbl->gc_thresh2 && + time_after(now, tbl->last_flush + 5 * HZ))) { + if (!neigh_forced_gc(tbl) && +- entries >= tbl->gc_thresh3) ++ entries > tbl->gc_thresh3) { ++ NEIGH_PRINTK3(KERN_DEBUG ++ "%s(): failed to shrink table\n", ++ __FUNCTINO__); + goto out_entries; ++ } + } + + n = kmem_cache_alloc(tbl->kmem_cachep, SLAB_ATOMIC); +- if (!n) ++ if (!n) { ++ NEIGH_PRINTK3(KERN_DEBUG ++ "%s(): failed to allocate memory\n", ++ __FUNCTION__); + goto out_entries; ++ } + + memset(n, 0, tbl->entry_size); + +@@ -364,11 +406,20 @@ + + NEIGH_CACHE_STAT_INC(tbl, lookups); + ++ NEIGH_PRINTK3(KERN_DEBUG ++ "%s(tbl=%p, pkey=%p, dev=%p)\n", ++ __FUNCTION__, ++ tbl, pkey, dev); ++ + read_lock_bh(&tbl->lock); + for (n = tbl->hash_buckets[hash_val]; n; n = n->next) { + if (dev == n->dev && !memcmp(n->primary_key, pkey, key_len)) { + neigh_hold(n); + NEIGH_CACHE_STAT_INC(tbl, hits); ++ NEIGH_PRINTK3(KERN_DEBUG ++ "%s() => %p (state=%s, refcnt=%d)\n", ++ __FUNCTION__, ++ n, neigh_state(n->nud_state), atomic_read(&n->refcnt)); + break; + } + } +@@ -384,11 +435,20 @@ + + NEIGH_CACHE_STAT_INC(tbl, lookups); + ++ NEIGH_PRINTK3(KERN_DEBUG ++ "%s(tbl=%p, pkey=%p)\n", ++ __FUNCTION__, ++ tbl, pkey); ++ + read_lock_bh(&tbl->lock); + for (n = tbl->hash_buckets[hash_val]; n; n = n->next) { + if (!memcmp(n->primary_key, pkey, key_len)) { + neigh_hold(n); + NEIGH_CACHE_STAT_INC(tbl, hits); ++ NEIGH_PRINTK3(KERN_DEBUG ++ "%s() => %p (state=%s, refcnt=%d)\n", ++ __FUNCTION__, ++ n, neigh_state(n->nud_state), atomic_read(&n->refcnt)); + break; + } + } +@@ -402,7 +462,14 @@ + u32 hash_val; + int key_len = tbl->key_len; + int error; +- struct neighbour *n1, *rc, *n = neigh_alloc(tbl); ++ struct neighbour *n1, *rc, *n; ++ ++ NEIGH_PRINTK3(KERN_DEBUG ++ "%s(tbl=%p, pkey=%p, dev=%p)\n", ++ __FUNCTION__, ++ tbl, pkey, dev); ++ ++ n = neigh_alloc(tbl); + + if (!n) { + rc = ERR_PTR(-ENOBUFS); +@@ -453,6 +520,10 @@ + n->dead = 0; + neigh_hold(n); + write_unlock_bh(&tbl->lock); ++ NEIGH_PRINTK3(KERN_DEBUG ++ "%s(): => %p (state=%s, refnt=%d)\n", ++ __FUNCTION__, ++ n, neigh_state(n->nud_state), atomic_read(&n->refcnt)); + NEIGH_PRINTK2("neigh %p is created.\n", n); + rc = n; + out: +@@ -496,6 +567,7 @@ + + memcpy(n->key, pkey, key_len); + n->dev = dev; ++ n->tbl = tbl; + if (dev) + dev_hold(dev); + +@@ -578,6 +650,11 @@ + { + struct hh_cache *hh; + ++ NEIGH_PRINTK3(KERN_DEBUG ++ "%s(neigh=%p): %s, refcnt=%d, dead=%d\n", ++ __FUNCTION__, ++ neigh, neigh_state(neigh->nud_state), atomic_read(&neigh->refcnt), neigh->dead); ++ + NEIGH_CACHE_STAT_INC(neigh->tbl, destroys); + + if (!neigh->dead) { +@@ -623,6 +700,10 @@ + { + struct hh_cache *hh; + ++ NEIGH_PRINTK3(KERN_DEBUG ++ "%s(neigh=%p): %s, refcnt=%d\n", ++ __FUNCTION__, ++ neigh, neigh_state(neigh->nud_state), atomic_read(&neigh->refcnt)); + NEIGH_PRINTK2("neigh %p is suspected.\n", neigh); + + neigh->output = neigh->ops->output; +@@ -640,6 +721,10 @@ + { + struct hh_cache *hh; + ++ NEIGH_PRINTK3(KERN_DEBUG ++ "%s(neigh=%p): %s, refcnt=%d\n", ++ __FUNCTION__, ++ neigh, neigh_state(neigh->nud_state), atomic_read(&neigh->refcnt)); + NEIGH_PRINTK2("neigh %p is connected.\n", neigh); + + neigh->output = neigh->ops->connected_output; +@@ -654,6 +739,11 @@ + struct neighbour *n, **np; + unsigned long expire, now = jiffies; + ++ NEIGH_PRINTK3(KERN_DEBUG ++ "%s(arg=%p)\n", ++ __FUNCTION__, ++ tbl); ++ + NEIGH_CACHE_STAT_INC(tbl, periodic_gc_runs); + + write_lock(&tbl->lock); +@@ -678,6 +768,11 @@ + + write_lock(&n->lock); + ++ NEIGH_PRINTK3(KERN_DEBUG ++ "%s(): - %p, state=%s, refcnt=%d\n", ++ __FUNCTION__, ++ n, neigh_state(n->nud_state), atomic_read(&n->refcnt)); ++ + state = n->nud_state; + if (state & (NUD_PERMANENT | NUD_IN_TIMER)) { + write_unlock(&n->lock); +@@ -733,17 +828,28 @@ + struct neighbour *neigh = (struct neighbour *)arg; + unsigned state; + int notify = 0; ++ int refcnt; + + write_lock(&neigh->lock); +- + state = neigh->nud_state; ++ ++ NEIGH_PRINTK3(KERN_DEBUG ++ "%s(arg=%p): %s, refcnt=%d\n", ++ __FUNCTION__, ++ neigh, neigh_state(neigh->nud_state), atomic_read(&neigh->refcnt)); ++ + now = jiffies; + next = now + HZ; + ++ + if (!(state & NUD_IN_TIMER)) { + #ifndef CONFIG_SMP + printk(KERN_WARNING "neigh: timer & !nud_in_timer\n"); + #endif ++ refcnt = atomic_read(&neigh->refcnt) - 1; ++ NEIGH_PRINTK3(KERN_DEBUG ++ "%s(): => state=%s, refcnt=%d\n", ++ __FUNCTION__, neigh_state(state), refcnt); + goto out; + } + +@@ -788,6 +894,7 @@ + neigh->nud_state = NUD_FAILED; + notify = 1; + NEIGH_CACHE_STAT_INC(neigh->tbl, res_failed); ++ + NEIGH_PRINTK2("neigh %p is failed.\n", neigh); + + /* It is very thin place. report_unreachable is very complicated +@@ -840,6 +947,11 @@ + + write_lock_bh(&neigh->lock); + ++ NEIGH_PRINTK3(KERN_DEBUG ++ "%s(neigh=%p, skb=%p): %s\n", ++ __FUNCTION__, ++ neigh, skb, neigh_state(neigh->nud_state)); ++ + rc = 0; + if (neigh->nud_state & (NUD_CONNECTED | NUD_DELAY | NUD_PROBE)) + goto out_unlock_bh; +@@ -936,17 +1048,33 @@ + struct net_device *dev; + int update_isrouter = 0; + ++ NEIGH_PRINTK3(KERN_DEBUG ++ "%s(neigh=%p, lladdr=%p, new=%u, flags=%08x): %s\n", ++ __FUNCTION__, ++ neigh, lladdr, new, flags, neigh_state(neigh->nud_state)); ++ ++ if (!neigh) { ++ NEIGH_PRINTK1(KERN_WARNING "neigh_update(): neigh==NULL\n"); ++ return -EINVAL; ++ } ++ + write_lock_bh(&neigh->lock); + + dev = neigh->dev; + old = neigh->nud_state; + err = -EPERM; + ++ if (!dev) { ++ NEIGH_PRINTK1(KERN_WARNING "neigh_update(): neigh->dev==NULL\n"); ++ return -EINVAL; ++ } ++ + if (!(flags & NEIGH_UPDATE_F_ADMIN) && + (old & (NUD_NOARP | NUD_PERMANENT))) + goto out; + + if (!(new & NUD_VALID)) { ++ /* NONE,INCOMPLETE,FAILED */ + neigh_del_timer(neigh); + if (old & NUD_CONNECTED) + neigh_suspect(neigh); +@@ -1021,11 +1149,11 @@ + } + + if (lladdr != neigh->ha) { ++ neigh->updated = jiffies; + memcpy(&neigh->ha, lladdr, dev->addr_len); + neigh_update_hhs(neigh); + if (!(new & NUD_CONNECTED)) +- neigh->confirmed = jiffies - +- (neigh->parms->base_reachable_time << 1); ++ neigh->confirmed = jiffies - (neigh->parms->base_reachable_time<<1); + #ifdef CONFIG_ARPD + notify = 1; + #endif +@@ -1040,7 +1168,6 @@ + struct sk_buff *skb; + + /* Again: avoid dead loop if something went wrong */ +- + while (neigh->nud_state & NUD_VALID && + (skb = __skb_dequeue(&neigh->arp_queue)) != NULL) { + struct neighbour *n1 = neigh; +@@ -1071,8 +1198,15 @@ + u8 *lladdr, void *saddr, + struct net_device *dev) + { +- struct neighbour *neigh = __neigh_lookup(tbl, saddr, dev, +- lladdr || !dev->addr_len); ++ struct neighbour *neigh; ++ ++ NEIGH_PRINTK3(KERN_DEBUG ++ "%s(tbl=%p, lladdr=%p, saddr=%p, dev=%p)\n", ++ __FUNCTION__, ++ tbl, lladdr, saddr, dev); ++ ++ neigh = __neigh_lookup(tbl, saddr, dev, ++ lladdr || !dev->addr_len); + if (neigh) + neigh_update(neigh, lladdr, NUD_STALE, + NEIGH_UPDATE_F_OVERRIDE); +@@ -1123,6 +1257,11 @@ + { + struct net_device *dev = skb->dev; + ++ NEIGH_PRINTK3(KERN_DEBUG ++ "%s(skb=%p)\n", ++ __FUNCTION__, ++ skb); ++ + __skb_pull(skb, skb->nh.raw - skb->data); + + if (dev->hard_header && +@@ -1142,6 +1281,11 @@ + struct neighbour *neigh; + int rc = 0; + ++ NEIGH_PRINTK3(KERN_DEBUG ++ "%s(skb=%p)\n", ++ __FUNCTION__, ++ skb); ++ + if (!dst || !(neigh = dst->neighbour)) + goto discard; + +@@ -1188,6 +1332,11 @@ + struct neighbour *neigh = dst->neighbour; + struct net_device *dev = neigh->dev; + ++ NEIGH_PRINTK3(KERN_DEBUG ++ "%s(skb=%p)\n", ++ __FUNCTION__, ++ skb); ++ + __skb_pull(skb, skb->nh.raw - skb->data); + + read_lock_bh(&neigh->lock); +@@ -1424,6 +1573,11 @@ + struct net_device *dev = NULL; + int err = -ENODEV; + ++ NEIGH_PRINTK3(KERN_DEBUG ++ "%s(skb=%p, nlh=%p, arg=%p)\n", ++ __FUNCTION__, ++ skb, nlh, arg); ++ + if (ndm->ndm_ifindex && + (dev = dev_get_by_index(ndm->ndm_ifindex)) == NULL) + goto out; +@@ -1476,6 +1630,11 @@ + struct net_device *dev = NULL; + int err = -ENODEV; + ++ NEIGH_PRINTK3(KERN_DEBUG ++ "%s(skb=%p, nlh=%p, arg=%p)\n", ++ __FUNCTION__, ++ skb, nlh, arg); ++ + if (ndm->ndm_ifindex && + (dev = dev_get_by_index(ndm->ndm_ifindex)) == NULL) + goto out; +@@ -1544,6 +1703,40 @@ + return err; + } + ++/* ++ * XXX: based on neigh_fill_info() ++ */ ++static int pneigh_fill_info(struct sk_buff *skb, struct pneigh_entry *pn, ++ u32 pid, u32 seq, int event) ++{ ++ int locked = 0; ++ unsigned char *b = skb->tail; ++ struct nlmsghdr *nlh = NLMSG_PUT(skb, pid, seq, event, ++ sizeof(struct ndmsg)); ++ struct ndmsg *ndm = NLMSG_DATA(nlh); ++ ++ read_lock_bh(&pn->tbl->lock); ++ locked = 1; ++ ndm->ndm_family = pn->tbl->family; ++ ndm->ndm_flags = NTF_PROXY; ++ ndm->ndm_type = 0; ++ ndm->ndm_ifindex = pn->dev->ifindex; ++ RTA_PUT(skb, NDA_DST, pn->tbl->key_len, pn->key); ++ read_unlock_bh(&pn->tbl->lock); ++ locked = 0; ++ ndm->ndm_state = 0; ++ ++ nlh->nlmsg_len = skb->tail - b; ++ return skb->len; ++ ++nlmsg_failure: ++rtattr_failure: ++ if (locked) ++ read_unlock_bh(&pn->tbl->lock); ++ ++ skb_trim(skb, b - skb->data); ++ return -1; ++} + + static int neigh_fill_info(struct sk_buff *skb, struct neighbour *n, + u32 pid, u32 seq, int event) +@@ -1585,6 +1778,42 @@ + return -1; + } + ++/* ++ * XXX: based on neigh_dump_table() ++ */ ++static int pneigh_dump_table(struct neigh_table *tbl, struct sk_buff *skb, ++ struct netlink_callback *cb) ++{ ++ struct pneigh_entry *pn; ++ int rc, h, s_h = cb->args[1]; ++ int idx, s_idx = idx = cb->args[2]; ++ ++ for (h = 0; h <= PNEIGH_HASHMASK; h++) { ++ if (h < s_h) ++ continue; ++ if (h > s_h) ++ s_idx = 0; ++ read_lock_bh(&tbl->lock); ++ for (pn = tbl->phash_buckets[h], idx = 0; pn; pn = pn->next, idx++) { ++ if (idx < s_idx) ++ continue; ++ if (pneigh_fill_info(skb, pn, NETLINK_CB(cb->skb).pid, ++ cb->nlh->nlmsg_seq, ++ RTM_NEWNEIGH) <= 0) { ++ read_unlock_bh(&tbl->lock); ++ rc = -1; ++ goto out; ++ } ++ } ++ read_unlock_bh(&tbl->lock); ++ } ++ ++ rc = skb->len; ++out: ++ cb->args[1] = h; ++ cb->args[2] = idx; ++ return rc; ++} + + static int neigh_dump_table(struct neigh_table *tbl, struct sk_buff *skb, + struct netlink_callback *cb) +@@ -1623,10 +1852,15 @@ + { + struct neigh_table *tbl; + int t, family, s_t; ++ long a1, a2, pa1, pa2; + + read_lock(&neigh_tbl_lock); + family = ((struct rtgenmsg *)NLMSG_DATA(cb->nlh))->rtgen_family; + s_t = cb->args[0]; ++ a1 = cb->args[1]; ++ a2 = cb->args[2]; ++ pa1 = cb->args[1]; ++ pa2 = cb->args[2]; + + for (tbl = neigh_tables, t = 0; tbl; tbl = tbl->next, t++) { + if (t < s_t || (family && tbl->family != family)) +@@ -1634,12 +1868,28 @@ + if (t > s_t) + memset(&cb->args[1], 0, sizeof(cb->args) - + sizeof(cb->args[0])); ++ cb->args[1] = a1; ++ cb->args[2] = a2; + if (neigh_dump_table(tbl, skb, cb) < 0) + break; ++ a1 = cb->args[1]; ++ a2 = cb->args[2]; ++ ++ cb->args[1] = pa1; ++ cb->args[2] = pa2; ++ if (pneigh_dump_table(tbl, skb, cb) < 0) ++ break; ++ pa1 = cb->args[1]; ++ pa2 = cb->args[2]; + } + read_unlock(&neigh_tbl_lock); + + cb->args[0] = t; ++ /* ++ * XXX: Fix me! currently only neigh's status is reported. ++ */ ++ cb->args[1] = a1; ++ cb->args[2] = a2; + return skb->len; + } + +@@ -2044,14 +2294,80 @@ + #endif /* CONFIG_ARPD */ + + #ifdef CONFIG_SYSCTL ++static int ++ndisc_proc_dointvec_ms_jiffies(struct ctl_table *ctl, ++ int write, ++ struct file *filp, ++ void __user *buffer, size_t *lenp, ++ loff_t *ppos) ++{ ++ struct neigh_notifier_parms *np = ctl->extra1; ++ int ret = proc_dointvec_ms_jiffies(ctl, write, filp, buffer, lenp, ppos); ++ ++ if (write && np && np->link_notifier) ++ (np->link_notifier)(np->link_notifier_data); ++ return ret; ++} ++ ++static int ++ndisc_proc_rtime_dointvec_ms_jiffies(struct ctl_table *ctl, ++ int write, ++ struct file *filp, ++ void __user *buffer, size_t *lenp, ++ loff_t *ppos) ++{ ++ struct neigh_notifier_parms *np = ctl->extra1; ++ int ret = proc_dointvec_ms_jiffies(ctl, write, filp, buffer, lenp, ppos); ++ ++ if (write) { ++ if (ctl->extra2) ++ *((unsigned int *)ctl->extra2) = neigh_rand_reach_time(*(unsigned int *)ctl->data); ++ if (np && np->link_notifier) ++ (np->link_notifier)(np->link_notifier_data); ++ } ++ return ret; ++} ++ ++static int ++ndisc_sysctl_ms_jiffies(ctl_table *ctl, int __user *name, int nlen, ++ void __user *oldval, size_t __user *oldlenp, ++ void __user *newval, size_t newlen, void **context) ++{ ++ struct neigh_notifier_parms *np = ctl->extra1; ++ int ret = sysctl_ms_jiffies(ctl, name, nlen, ++ oldval, oldlenp, newval, newlen, ++ context); ++ if (newval && newlen && ret > 0 && np && np->link_notifier) ++ (np->link_notifier)(np->link_notifier_data); ++ return ret; ++} ++ ++static int ++ndisc_rtime_sysctl_ms_jiffies(ctl_table *ctl, int __user *name, int nlen, ++ void __user *oldval, size_t __user *oldlenp, ++ void __user *newval, size_t newlen, void **context) ++{ ++ struct neigh_notifier_parms *np = ctl->extra1; ++ int ret = sysctl_ms_jiffies(ctl, name, nlen, ++ oldval, oldlenp, newval, newlen, ++ context); ++ if (newval && newlen && ret > 0 && np && np->link_notifier) { ++ if (ctl->extra2) ++ *((unsigned int *)ctl->extra2) = neigh_rand_reach_time(*(unsigned int *)ctl->data); ++ if (np && np->link_notifier) ++ (np->link_notifier)(np->link_notifier_data); ++ } ++ return ret; ++} + + static struct neigh_sysctl_table { + struct ctl_table_header *sysctl_header; +- ctl_table neigh_vars[17]; ++ ctl_table neigh_vars[__NET_NEIGH_MAX]; + ctl_table neigh_dev[2]; + ctl_table neigh_neigh_dir[2]; + ctl_table neigh_proto_dir[2]; + ctl_table neigh_root_dir[2]; ++ struct neigh_notifier_parms notifier; + } neigh_sysctl_template = { + .neigh_vars = { + { +@@ -2170,6 +2486,23 @@ + .mode = 0644, + .proc_handler = &proc_dointvec, + }, ++ { ++ .ctl_name = NET_NEIGH_RETRANS_TIME_MS, ++ .procname = "retrans_time_ms", ++ .maxlen = sizeof(int), ++ .mode = 0644, ++ .proc_handler = &ndisc_proc_dointvec_ms_jiffies, ++ .strategy = &ndisc_sysctl_ms_jiffies, ++ }, ++ { ++ .ctl_name = NET_NEIGH_REACHABLE_TIME_MS, ++ .procname = "base_reachable_time_ms", ++ .maxlen = sizeof(int), ++ .mode = 0644, ++ .proc_handler = &ndisc_proc_rtime_dointvec_ms_jiffies, ++ .strategy = &ndisc_rtime_sysctl_ms_jiffies, ++ }, ++ + }, + .neigh_dev = { + { +@@ -2200,7 +2533,8 @@ + + int neigh_sysctl_register(struct net_device *dev, struct neigh_parms *p, + int p_id, int pdev_id, char *p_name, +- proc_handler *handler) ++ proc_handler *handler, ++ void (*neigh_notifier)(void *)) + { + struct neigh_sysctl_table *t = kmalloc(sizeof(*t), GFP_KERNEL); + const char *dev_name_source = NULL; +@@ -2210,6 +2544,10 @@ + if (!t) + return -ENOBUFS; + memcpy(t, &neigh_sysctl_template, sizeof(*t)); ++ ++ t->notifier.link_notifier = neigh_notifier; ++ t->notifier.link_notifier_data = dev; ++ + t->neigh_vars[0].data = &p->mcast_probes; + t->neigh_vars[1].data = &p->ucast_probes; + t->neigh_vars[2].data = &p->app_probes; +@@ -2231,7 +2569,10 @@ + if (dev) { + dev_name_source = dev->name; + t->neigh_dev[0].ctl_name = dev->ifindex; +- memset(&t->neigh_vars[12], 0, sizeof(ctl_table)); ++ t->neigh_vars[12].procname = NULL; ++ t->neigh_vars[13].procname = NULL; ++ t->neigh_vars[14].procname = NULL; ++ t->neigh_vars[15].procname = NULL; + } else { + t->neigh_vars[12].data = (int *)(p + 1); + t->neigh_vars[13].data = (int *)(p + 1) + 1; +@@ -2239,6 +2580,13 @@ + t->neigh_vars[15].data = (int *)(p + 1) + 3; + } + ++ t->neigh_vars[16].data = &p->retrans_time; ++ t->neigh_vars[16].extra1 = &t->notifier; ++ ++ t->neigh_vars[17].data = &p->base_reachable_time; ++ t->neigh_vars[17].extra1 = &t->notifier; ++ t->neigh_vars[17].extra2 = &p->reachable_time; ++ + dev_name = net_sysctl_strdup(dev_name_source); + if (!dev_name) { + err = -ENOBUFS; +@@ -2313,6 +2661,7 @@ + + #ifdef CONFIG_ARPD + EXPORT_SYMBOL(neigh_app_ns); ++EXPORT_SYMBOL(neigh_app_notify); + #endif + #ifdef CONFIG_SYSCTL + EXPORT_SYMBOL(neigh_sysctl_register); +diff -urN linux-2.6.11/net/core/netfilter.c x1/net/core/netfilter.c +--- linux-2.6.11/net/core/netfilter.c 2005-03-02 08:38:08.000000000 +0100 ++++ x1/net/core/netfilter.c 2005-02-03 05:44:13.000000000 +0100 +@@ -806,6 +806,9 @@ + tracking in use: without this, connection may not be in hash table, and hence + manufactured ICMP or RST packets will not be associated with it. */ + void (*ip_ct_attach)(struct sk_buff *, struct sk_buff *); ++#if defined(CONFIG_IPV6) || defined(CONFIG_IPV6_MODULE) ++void (*ip6_ct_attach)(struct sk_buff *, struct sk_buff *); ++#endif + + void nf_ct_attach(struct sk_buff *new, struct sk_buff *skb) + { +@@ -828,6 +831,9 @@ + } + + EXPORT_SYMBOL(ip_ct_attach); ++#if defined(CONFIG_IPV6) || defined(CONFIG_IPV6_MODULE) ++EXPORT_SYMBOL(ip6_ct_attach); ++#endif + EXPORT_SYMBOL(nf_ct_attach); + EXPORT_SYMBOL(nf_getsockopt); + EXPORT_SYMBOL(nf_hook_slow); +diff -urN linux-2.6.11/net/ipv4/ah4.c x1/net/ipv4/ah4.c +--- linux-2.6.11/net/ipv4/ah4.c 2005-03-02 08:38:25.000000000 +0100 ++++ x1/net/ipv4/ah4.c 2005-02-03 06:35:55.000000000 +0100 +@@ -128,6 +128,8 @@ + goto out; + + ah = (struct ip_auth_hdr*)skb->data; ++ if (x->props.replay_window && xfrm_replay_check(x, ah->seq_no)) ++ goto out; + ahp = x->data; + ah_hlen = (ah->hdrlen + 2) << 2; + +@@ -171,6 +173,8 @@ + goto out; + } + } ++ if (x->props.replay_window) ++ xfrm_replay_advance(x, ah->seq_no); + ((struct iphdr*)work_buf)->protocol = ah->nexthdr; + skb->nh.raw = skb_pull(skb, ah_hlen); + memcpy(skb->nh.raw, work_buf, iph->ihl*4); +diff -urN linux-2.6.11/net/ipv4/arp.c x1/net/ipv4/arp.c +--- linux-2.6.11/net/ipv4/arp.c 2005-03-02 08:38:25.000000000 +0100 ++++ x1/net/ipv4/arp.c 2005-02-10 06:31:25.000000000 +0100 +@@ -1243,7 +1243,7 @@ + arp_proc_init(); + #ifdef CONFIG_SYSCTL + neigh_sysctl_register(NULL, &arp_tbl.parms, NET_IPV4, +- NET_IPV4_NEIGH, "ipv4", NULL); ++ NET_IPV4_NEIGH, "ipv4", NULL, NULL); + #endif + register_netdevice_notifier(&arp_netdev_notifier); + } +diff -urN linux-2.6.11/net/ipv4/devinet.c x1/net/ipv4/devinet.c +--- linux-2.6.11/net/ipv4/devinet.c 2005-03-02 08:37:50.000000000 +0100 ++++ x1/net/ipv4/devinet.c 2005-02-10 06:31:25.000000000 +0100 +@@ -153,7 +153,7 @@ + dev_hold(dev); + #ifdef CONFIG_SYSCTL + neigh_sysctl_register(dev, in_dev->arp_parms, NET_IPV4, +- NET_IPV4_NEIGH, "ipv4", NULL); ++ NET_IPV4_NEIGH, "ipv4", NULL, NULL); + #endif + + /* Account for reference dev->ip_ptr */ +@@ -992,7 +992,7 @@ + devinet_sysctl_unregister(&in_dev->cnf); + neigh_sysctl_unregister(in_dev->arp_parms); + neigh_sysctl_register(dev, in_dev->arp_parms, NET_IPV4, +- NET_IPV4_NEIGH, "ipv4", NULL); ++ NET_IPV4_NEIGH, "ipv4", NULL, NULL); + devinet_sysctl_register(in_dev, &in_dev->cnf); + #endif + break; +diff -urN linux-2.6.11/net/ipv4/esp4.c x1/net/ipv4/esp4.c +--- linux-2.6.11/net/ipv4/esp4.c 2005-03-02 08:38:10.000000000 +0100 ++++ x1/net/ipv4/esp4.c 2005-02-03 06:35:55.000000000 +0100 +@@ -153,6 +153,7 @@ + + if (!pskb_may_pull(skb, sizeof(struct ip_esp_hdr))) + goto out; ++ esph = (struct ip_esp_hdr*)skb->data; + + if (elen <= 0 || (elen & (blksize-1))) + goto out; +@@ -161,7 +162,8 @@ + if (esp->auth.icv_full_len) { + u8 sum[esp->auth.icv_full_len]; + u8 sum1[alen]; +- ++ if (x->props.replay_window && xfrm_replay_check(x, esph->seq_no)) ++ goto out; + esp->auth.icv(esp, skb, 0, skb->len-alen, sum); + + if (skb_copy_bits(skb, skb->len-alen, sum1, alen)) +@@ -171,6 +173,9 @@ + x->stats.integrity_failed++; + goto out; + } ++ ++ if (x->props.replay_window) ++ xfrm_replay_advance(x, esph->seq_no); + } + + if ((nfrags = skb_cow_data(skb, 0, &trailer)) < 0) +@@ -178,7 +183,6 @@ + + skb->ip_summed = CHECKSUM_NONE; + +- esph = (struct ip_esp_hdr*)skb->data; + iph = skb->nh.iph; + + /* Get ivec. This can be wrong, check against another impls. */ +@@ -373,7 +377,7 @@ + if (x->aalg->alg_key_len > 512) + goto error; + } +- if (x->ealg == NULL) ++ if (x->ealg == NULL || (x->ealg->alg_key_len == 0 && x->props.ealgo != SADB_EALG_NULL)) + goto error; + + esp = kmalloc(sizeof(*esp), GFP_KERNEL); +@@ -412,11 +416,13 @@ + goto error; + } + esp->conf.key = x->ealg->alg_key; +- esp->conf.key_len = (x->ealg->alg_key_len+7)/8; +- if (x->props.ealgo == SADB_EALG_NULL) ++ if (x->props.ealgo == SADB_EALG_NULL) { ++ esp->conf.key_len = 0; + esp->conf.tfm = crypto_alloc_tfm(x->ealg->alg_name, CRYPTO_TFM_MODE_ECB); +- else ++ } else { ++ esp->conf.key_len = (x->ealg->alg_key_len+7)/8; + esp->conf.tfm = crypto_alloc_tfm(x->ealg->alg_name, CRYPTO_TFM_MODE_CBC); ++ } + if (esp->conf.tfm == NULL) + goto error; + esp->conf.ivlen = crypto_tfm_alg_ivsize(esp->conf.tfm); +diff -urN linux-2.6.11/net/ipv4/ip_forward.c x1/net/ipv4/ip_forward.c +--- linux-2.6.11/net/ipv4/ip_forward.c 2005-03-02 08:37:30.000000000 +0100 ++++ x1/net/ipv4/ip_forward.c 2005-01-21 06:15:37.000000000 +0100 +@@ -60,8 +60,13 @@ + struct rtable *rt; /* Route we use */ + struct ip_options * opt = &(IPCB(skb)->opt); + ++#ifdef CONFIG_USE_POLICY_FWD + if (!xfrm4_policy_check(NULL, XFRM_POLICY_FWD, skb)) + goto drop; ++#else ++ if (!xfrm4_policy_check(NULL, XFRM_POLICY_IN, skb)) ++ goto drop; ++#endif + + if (IPCB(skb)->opt.router_alert && ip_call_ra_chain(skb)) + return NET_RX_SUCCESS; +diff -urN linux-2.6.11/net/ipv4/xfrm4_input.c x1/net/ipv4/xfrm4_input.c +--- linux-2.6.11/net/ipv4/xfrm4_input.c 2005-03-02 08:37:48.000000000 +0100 ++++ x1/net/ipv4/xfrm4_input.c 2004-11-25 06:33:09.000000000 +0100 +@@ -31,30 +31,29 @@ + IP_ECN_set_ce(inner_iph); + } + +-static int xfrm4_parse_spi(struct sk_buff *skb, u8 nexthdr, u32 *spi, u32 *seq) ++static int xfrm4_parse_spi(struct sk_buff *skb, u8 nexthdr, u32 *spi) + { + switch (nexthdr) { + case IPPROTO_IPIP: + if (!pskb_may_pull(skb, sizeof(struct iphdr))) + return -EINVAL; + *spi = skb->nh.iph->saddr; +- *seq = 0; + return 0; + } + +- return xfrm_parse_spi(skb, nexthdr, spi, seq); ++ return xfrm_parse_spi(skb, nexthdr, spi); + } + + int xfrm4_rcv_encap(struct sk_buff *skb, __u16 encap_type) + { + int err; +- u32 spi, seq; ++ u32 spi; + struct sec_decap_state xfrm_vec[XFRM_MAX_DEPTH]; + struct xfrm_state *x; + int xfrm_nr = 0; + int decaps = 0; + +- if ((err = xfrm4_parse_spi(skb, skb->nh.iph->protocol, &spi, &seq)) != 0) ++ if ((err = xfrm4_parse_spi(skb, skb->nh.iph->protocol, &spi)) != 0) + goto drop; + + do { +@@ -71,9 +70,6 @@ + if (unlikely(x->km.state != XFRM_STATE_VALID)) + goto drop_unlock; + +- if (x->props.replay_window && xfrm_replay_check(x, seq)) +- goto drop_unlock; +- + if (xfrm_state_check_expire(x)) + goto drop_unlock; + +@@ -84,9 +80,6 @@ + /* only the first xfrm gets the encap type */ + encap_type = 0; + +- if (x->props.replay_window) +- xfrm_replay_advance(x, seq); +- + x->curlft.bytes += skb->len; + x->curlft.packets++; + +@@ -116,8 +109,9 @@ + break; + } + +- if ((err = xfrm_parse_spi(skb, skb->nh.iph->protocol, &spi, &seq)) < 0) ++ if ((err = xfrm_parse_spi(skb, skb->nh.iph->protocol, &spi)) < 0) + goto drop; ++ + } while (!err); + + /* Allocate new secpath or COW existing one. */ +diff -urN linux-2.6.11/net/ipv6/Kconfig x1/net/ipv6/Kconfig +--- linux-2.6.11/net/ipv6/Kconfig 2005-03-02 08:38:09.000000000 +0100 ++++ x1/net/ipv6/Kconfig 2005-02-28 12:50:45.000000000 +0100 +@@ -2,7 +2,7 @@ + # IPv6 configuration + # + config IPV6_PRIVACY +- bool "IPv6: Privacy Extensions (RFC 3041) support" ++ bool "IPv6: Privacy Extensions support" + depends on IPV6 + ---help--- + Privacy Extensions for Stateless Address Autoconfiguration in IPv6 +@@ -17,6 +17,22 @@ + + See for details. + ++config IPV6_PRIVACY_MD5 ++ bool "IPv6: Use RFC 3041 randomized interface identifiers" ++ depends on IPV6_PRIVACY ++ ---help--- ++ Instead of standard pseudo random generator, use ++ traditional algorithm described in the original RFC 3041. ++ ++config IPV6_ROUTER_PREF ++ bool "IPv6: default router preference" ++ depends on IPV6 ++ ++config IPV6_NEW_ROUNDROBIN ++ bool ++ depends on IPV6_ROUTER_PREF ++ default y ++ + config INET6_AH + tristate "IPv6: AH transformation" + depends on IPV6 +@@ -77,3 +93,51 @@ + + If unsure, say N. + ++config IPV6_MROUTE ++ bool "IPv6: multicast routing (EXPERIMENTAL)" ++ depends on IPV6 && EXPERIMENTAL ++ ---help--- ++ Experimental support for IPv6 multicast forwarding. ++ If unsure, say N. ++ ++config IPV6_PIMSM_V2 ++ bool "IPv6: PIM-SM version 2 support (EXPERIMENTAL)" ++ depends on IPV6_MROUTE ++ ---help--- ++ Support for IPv6 PIM multicast routing protocol PIM-SMv2. ++ If unsure, say N. ++ ++config IPV6_STATISTICS ++ bool "IPv6: per-interface statistics for SNMP" ++ depends on IPV6 ++ ++config IPV6_DELPREFIX ++ bool "IPv6: delete prefix route on manual address deletion" ++ depends on IPV6 ++ ---help--- ++ When an address is being configured manually, kernel ++ automatically append a prefix route for the address. ++ On the other hand, kernel won't delete it when the address ++ is being deleted. ++ ++ It is not a problem on prefix for auto-configured address, ++ but this probably is confusing on prefix for manual addresses. ++ (Note: prefix route for auto-configured address is managed ++ by its timer.) ++ ++ With this option, delete prefix route if there's no address ++ on the device. In addition, if all the other address are ++ auto-configured address, we change it to dynamic ++ prefix route. ++ ++ This is experimental. ++ ++config IPV6_ALLFRAG ++ bool "IPv6: fragment < 1280" ++ depends on IPV6 ++ ---help--- ++ According to RFC2460, always append fragment header after ++ receiving TooBig w/ mtu < 1280. ++ ++ This is experimental. ++ +diff -urN linux-2.6.11/net/ipv6/Makefile x1/net/ipv6/Makefile +--- linux-2.6.11/net/ipv6/Makefile 2005-03-02 08:38:17.000000000 +0100 ++++ x1/net/ipv6/Makefile 2005-02-09 16:31:39.000000000 +0100 +@@ -10,6 +10,8 @@ + exthdrs.o sysctl_net_ipv6.o datagram.o proc.o \ + ip6_flowlabel.o ipv6_syms.o + ++ipv6-$(CONFIG_IPV6_MROUTE) += ip6mr.o ++ + ipv6-$(CONFIG_XFRM) += xfrm6_policy.o xfrm6_state.o xfrm6_input.o \ + xfrm6_output.o + ipv6-objs += $(ipv6-y) +diff -urN linux-2.6.11/net/ipv6/addrconf.c x1/net/ipv6/addrconf.c +--- linux-2.6.11/net/ipv6/addrconf.c 2005-03-02 08:38:26.000000000 +0100 ++++ x1/net/ipv6/addrconf.c 2005-03-02 17:30:59.000000000 +0100 +@@ -35,6 +35,10 @@ + * YOSHIFUJI Hideaki @USAGI : ARCnet support + * YOSHIFUJI Hideaki @USAGI : convert /proc/net/if_inet6 to + * seq_file. ++ * YOSHIFUJI Hideaki @USAGI : improved source address ++ * selection; consider scope, ++ * status etc. ++ * Hoerdt Mickael : Added Multicast routing support. + */ + + #include +@@ -105,8 +109,10 @@ + static void ipv6_regen_rndid(unsigned long data); + + static int desync_factor = MAX_DESYNC_FACTOR * HZ; ++#ifdef CONFIG_IPV6_PRIVACY_MD5 + static struct crypto_tfm *md5_tfm; + static DEFINE_SPINLOCK(md5_tfm_lock); ++#endif /* CONFIG_IPV6_PRIVACY_MD5 */ + #endif + + static int ipv6_count_addresses(struct inet6_dev *idev); +@@ -144,6 +150,8 @@ + + static struct notifier_block *inet6addr_chain; + ++static u32 ipv6_addrselect_label_lookup(const struct in6_addr *addr, int ifindex); ++ + struct ipv6_devconf ipv6_devconf = { + .forwarding = 0, + .hop_limit = IPV6_DEFAULT_HOPLIMIT, +@@ -164,6 +172,9 @@ + .max_desync_factor = MAX_DESYNC_FACTOR, + #endif + .max_addresses = IPV6_MAX_ADDRESSES, ++#ifdef CONFIG_IPV6_MROUTE ++ .mc_forwarding = 0, ++#endif + }; + + static struct ipv6_devconf ipv6_devconf_dflt = { +@@ -185,54 +196,58 @@ + .max_desync_factor = MAX_DESYNC_FACTOR, + #endif + .max_addresses = IPV6_MAX_ADDRESSES, ++#ifdef CONFIG_IPV6_MROUTE ++ .mc_forwarding = 0, ++#endif + }; + +-/* IPv6 Wildcard Address and Loopback Address defined by RFC2553 */ ++/* IPv6 Wildcard Address and Loopback Address defined by RFC3493 */ + #if 0 + const struct in6_addr in6addr_any = IN6ADDR_ANY_INIT; + #endif + const struct in6_addr in6addr_loopback = IN6ADDR_LOOPBACK_INIT; + +-int ipv6_addr_type(const struct in6_addr *addr) ++int __ipv6_addr_type(const struct in6_addr *addr) + { +- int type; +- u32 st; ++ u32 st = addr->s6_addr32[0]; + +- st = addr->s6_addr32[0]; ++ /* Consider all addresses with the first three bits different of ++ 000 and 111 as unicasts. ++ */ ++ if ((st & htonl(0xE0000000)) != htonl(0x00000000) && ++ (st & htonl(0xE0000000)) != htonl(0xE0000000)) ++ return (IPV6_ADDR_UNICAST | ++ IPV6_ADDR_SCOPE_GLOBAL<<16); + + if ((st & htonl(0xFF000000)) == htonl(0xFF000000)) { +- type = IPV6_ADDR_MULTICAST; ++ /* multicast */ ++ /* addr-select 3.1 */ ++ int type = IPV6_ADDR_MC_SCOPE(addr)<<16; + +- switch((st & htonl(0x00FF0000))) { +- case __constant_htonl(0x00010000): ++ switch(type) { ++ case IPV6_ADDR_SCOPE_NODELOCAL<<16: + type |= IPV6_ADDR_LOOPBACK; + break; + +- case __constant_htonl(0x00020000): ++ case IPV6_ADDR_SCOPE_LINKLOCAL<<16: + type |= IPV6_ADDR_LINKLOCAL; + break; + +- case __constant_htonl(0x00050000): ++ case IPV6_ADDR_SCOPE_SITELOCAL<<16: + type |= IPV6_ADDR_SITELOCAL; + break; + }; ++ type |= IPV6_ADDR_MULTICAST; + return type; + } + +- type = IPV6_ADDR_UNICAST; +- +- /* Consider all addresses with the first three bits different of +- 000 and 111 as finished. +- */ +- if ((st & htonl(0xE0000000)) != htonl(0x00000000) && +- (st & htonl(0xE0000000)) != htonl(0xE0000000)) +- return type; +- + if ((st & htonl(0xFFC00000)) == htonl(0xFE800000)) +- return (IPV6_ADDR_LINKLOCAL | type); ++ return (IPV6_ADDR_LINKLOCAL | IPV6_ADDR_UNICAST | ++ IPV6_ADDR_SCOPE_LINKLOCAL<<16); /* addr-select 3.1 */ + + if ((st & htonl(0xFFC00000)) == htonl(0xFEC00000)) +- return (IPV6_ADDR_SITELOCAL | type); ++ return (IPV6_ADDR_SITELOCAL | IPV6_ADDR_UNICAST | ++ IPV6_ADDR_SCOPE_SITELOCAL<<16); /* addr-select 3.1 */ + + if ((addr->s6_addr32[0] | addr->s6_addr32[1]) == 0) { + if (addr->s6_addr32[2] == 0) { +@@ -240,24 +255,50 @@ + return IPV6_ADDR_ANY; + + if (addr->s6_addr32[3] == htonl(0x00000001)) +- return (IPV6_ADDR_LOOPBACK | type); ++ return (IPV6_ADDR_LOOPBACK | IPV6_ADDR_UNICAST | ++ IPV6_ADDR_SCOPE_LINKLOCAL<<16); /* addr-select 3.4 */ + +- return (IPV6_ADDR_COMPATv4 | type); ++ return (IPV6_ADDR_COMPATv4 | IPV6_ADDR_UNICAST | ++ IPV6_ADDR_SCOPE_GLOBAL<<16); /* addr-select 3.3 */ + } + + if (addr->s6_addr32[2] == htonl(0x0000ffff)) +- return IPV6_ADDR_MAPPED; ++ return (IPV6_ADDR_MAPPED | ++ IPV6_ADDR_SCOPE_GLOBAL<<16); /* addr-select 3.3 */ ++ } ++ ++ return (IPV6_ADDR_RESERVED | ++ IPV6_ADDR_SCOPE_GLOBAL<<16); /* addr-select 3.4 */ ++} ++ ++/* find 1st bit in difference between the 2 addrs */ ++static inline int addr_diff(const void *__a1, const void *__a2, int addrlen) ++{ ++ /* find 1st bit in difference between the 2 addrs. ++ * bit may be an invalid value, ++ * but if it is >= plen, the value is ignored in any case. ++ */ ++ const u32 *a1 = __a1; ++ const u32 *a2 = __a2; ++ int i; ++ ++ addrlen >>= 2; ++ for (i = 0; i < addrlen; i++) { ++ u32 xb = a1[i] ^ a2[i]; ++ if (xb) { ++ int j = 31; ++ xb = ntohl(xb); ++ while ((xb & (1 << j)) == 0) ++ j--; ++ return (i * 32 + 31 - j); ++ } + } ++ return addrlen<<5; ++} + +- st &= htonl(0xFF000000); +- if (st == 0) +- return IPV6_ADDR_RESERVED; +- st &= htonl(0xFE000000); +- if (st == htonl(0x02000000)) +- return IPV6_ADDR_RESERVED; /* for NSAP */ +- if (st == htonl(0x04000000)) +- return IPV6_ADDR_RESERVED; /* for IPX */ +- return type; ++static inline int ipv6_addr_diff(const struct in6_addr *a1, const struct in6_addr *a2) ++{ ++ return addr_diff(a1->s6_addr, a2->s6_addr, sizeof(struct in6_addr)); + } + + static void addrconf_del_timer(struct inet6_ifaddr *ifp) +@@ -366,7 +407,9 @@ + + #ifdef CONFIG_IPV6_PRIVACY + get_random_bytes(ndev->rndid, sizeof(ndev->rndid)); ++#ifdef CONFIG_IPV6_PRIVACY_MD5 + get_random_bytes(ndev->entropy, sizeof(ndev->entropy)); ++#endif /* CONFIG_IPV6_PRIVACY_MD5 */ + init_timer(&ndev->regen_timer); + ndev->regen_timer.function = ipv6_regen_rndid; + ndev->regen_timer.data = (unsigned long) ndev; +@@ -391,14 +434,14 @@ + ndev->tstamp = jiffies; + #ifdef CONFIG_SYSCTL + neigh_sysctl_register(dev, ndev->nd_parms, NET_IPV6, +- NET_IPV6_NEIGH, "ipv6", &ndisc_ifinfo_sysctl_change); ++ NET_IPV6_NEIGH, "ipv6", &ndisc_ifinfo_sysctl_change, NULL); + addrconf_sysctl_register(ndev, &ndev->cnf); + #endif + } + return ndev; + } + +-static struct inet6_dev * ipv6_find_idev(struct net_device *dev) ++struct inet6_dev * ipv6_find_idev(struct net_device *dev) + { + struct inet6_dev *idev; + +@@ -589,6 +632,10 @@ + struct inet6_ifaddr *ifa, **ifap; + struct inet6_dev *idev = ifp->idev; + int hash; ++#ifdef CONFIG_IPV6_DELPREFIX ++ int deleted = 0, onlink = 0; ++ unsigned long expires = jiffies; ++#endif + + hash = ipv6_addr_hash(&ifp->addr); + +@@ -631,7 +678,32 @@ + *ifap = ifa->if_next; + __in6_ifa_put(ifp); + ifa->if_next = NULL; ++#ifndef CONFIG_IPV6_DELPREFIX + break; ++#else ++ if (!(ifp->flags & IFA_F_PERMANENT) || ++ onlink > 0) ++ break; ++ deleted = 1; ++ } else { ++ if (ipv6_prefix_equal(&ifa->addr, &ifp->addr, ++ ifp->prefix_len)) { ++ if (ifa->flags & IFA_F_PERMANENT) { ++ onlink = 1; ++ if (deleted) ++ break; ++ } else if (!onlink) { ++ unsigned long lifetime; ++ onlink = -1; ++ ++ lifetime = ifp->valid_lft; ++ if (lifetime > 0x7fffffffUL/HZ) ++ lifetime = 0x7ffffffUL/HZ; ++ if (time_before(expires, ifp->tstamp + lifetime * HZ)) ++ expires = ifp->tstamp + lifetime * HZ; ++ } ++ } ++#endif + } + } + write_unlock_bh(&idev->lock); +@@ -642,6 +714,52 @@ + + addrconf_del_timer(ifp); + ++#ifdef CONFIG_IPV6_DELPREFIX ++ /* ++ * Clean-up on-link route. ++ * We need to respect prefix lifetime. ++ * ++ * 1) if the address was not permanent, don't delete it. ++ * - timer for fib entry will delete itself. ++ * 2) if there're other permanent addresses with same prefix, don't ++ * delete it. ++ * 3) if there're only dynamic addresses, change prefix route to ++ * dynamic. ++ * - lifetime will be set to the longest valid lifetime among the ++ * addresses with same prefix on the device ++ * - subsequent RA will update lifetime. ++ * 4) otherwise, delete it. ++ * ++ * --yoshfuji ++ */ ++ if ((ifp->flags & IFA_F_PERMANENT) && onlink < 1) { ++ struct in6_addr prefix; ++ struct rt6_info *rt; ++ ++ ipv6_addr_prefix(&prefix, &ifp->addr, ifp->prefix_len); ++ rt = rt6_lookup(&prefix, NULL, ifp->idev->dev->ifindex, 1); ++ ++ if (rt && ((rt->rt6i_flags & (RTF_GATEWAY | RTF_DEFAULT)) == 0)) { ++ if (onlink == 0) { ++ ip6_del_rt(rt, NULL, NULL); ++ rt = NULL; ++ } else if (!(rt->rt6i_flags & RTF_EXPIRES)) { ++ /* ++ * prefix lifetime and valid lifetime are ++ * (almost) the same. ++ * subsequent RA will update appropriately. ++ * --yoshfuji ++ */ ++ if (expires < jiffies) ++ expires = jiffies; ++ rt->rt6i_expires = expires; ++ rt->rt6i_flags |= RTF_EXPIRES; ++ } ++ } ++ dst_release(&rt->u.dst); ++ } ++#endif ++ + in6_ifa_put(ifp); + } + +@@ -743,147 +861,215 @@ + + /* + * Choose an appropriate source address ++ * draft-ietf-ipv6-default-addr-select-09.txt + * should do: + * i) get an address with an appropriate scope + * ii) see if there is a specific route for the destination and use + * an address of the attached interface + * iii) don't use deprecated addresses + */ +-static int inline ipv6_saddr_pref(const struct inet6_ifaddr *ifp, u8 invpref) ++#define IPV6_SADDRSELECT_SELF 0x01 ++#define IPV6_SADDRSELECT_PREFERRED 0x02 ++#define IPV6_SADDRSELECT_HOME 0x04 ++#define IPV6_SADDRSELECT_PUBLIC 0x08 ++#define IPV6_SADDRSELECT_INTERFACE 0x10 ++#define IPV6_SADDRSELECT_LABEL 0x20 ++ ++struct addrselect_attrs { ++ struct inet6_ifaddr *ifp; ++ u16 flags; ++ s16 matchlen; ++ u8 scope; ++}; ++ ++static int __inline__ ipv6_addrselect_preferred(int type) + { +- int pref; +- pref = ifp->flags&IFA_F_DEPRECATED ? 0 : 2; +-#ifdef CONFIG_IPV6_PRIVACY +- pref |= (ifp->flags^invpref)&IFA_F_TEMPORARY ? 0 : 1; +-#endif +- return pref; ++ /* section 3.3, 3.4 */ ++ if (type&(IPV6_ADDR_MAPPED|IPV6_ADDR_COMPATv4| ++ IPV6_ADDR_LOOPBACK|IPV6_ADDR_RESERVED)) ++ return 1; ++ return 0; + } + +-#ifdef CONFIG_IPV6_PRIVACY +-#define IPV6_GET_SADDR_MAXSCORE(score) ((score) == 3) +-#else +-#define IPV6_GET_SADDR_MAXSCORE(score) (score) +-#endif +- +-int ipv6_dev_get_saddr(struct net_device *dev, ++int ipv6_dev_get_saddr(struct net_device *daddr_dev, + struct in6_addr *daddr, struct in6_addr *saddr) + { +- struct inet6_ifaddr *ifp = NULL; +- struct inet6_ifaddr *match = NULL; ++ int daddr_type, daddr_scope; ++ u32 daddr_label; ++ struct inet6_ifaddr *ifp0, *ifp = NULL; ++ struct net_device *dev; + struct inet6_dev *idev; +- int scope; ++ + int err; +- int hiscore = -1, score; ++ int update; ++ struct addrselect_attrs candidate = {NULL,0,0,0}; ++#if defined(CONFIG_IPV6_PRIVACY) ++ u16 invpref = 0; ++#endif + +- scope = ipv6_addr_scope(daddr); ++#ifdef CONFIG_IPV6_PRIVACY ++ if (ipv6_devconf.use_tempaddr > 1) ++ invpref |= IPV6_SADDRSELECT_PUBLIC; ++#endif + +- /* +- * known dev +- * search dev and walk through dev addresses +- */ ++ daddr_type = __ipv6_addr_type(daddr); ++ daddr_scope = __ipv6_addr_src_scope(daddr_type); ++ daddr_label = ipv6_addrselect_label_lookup(daddr, ++ daddr_dev?daddr_dev->ifindex:0); + +- if (dev) { +- if (dev->flags & IFF_LOOPBACK) +- scope = IFA_HOST; ++ read_lock(&dev_base_lock); ++ read_lock(&addrconf_lock); ++ for (dev = dev_base; dev; dev=dev->next) { ++ /* Rule 0: Candidate Source Address (section 4) ++ * - multicast and link-local destination address, ++ * the set of candidate source address MUST only ++ * include addresses assigned to interfaces ++ * belonging to the same link as the outgoing ++ * interface. ++ * (- For site-local destination addresses, the ++ * set of candidate source addresses MUST only ++ * include addresses assigned to interfaces ++ * belonging to the same site as the outgoing ++ * interface.) ++ */ ++ if ((daddr_type&IPV6_ADDR_MULTICAST || ++ daddr_scope <= IPV6_ADDR_SCOPE_LINKLOCAL) && ++ daddr_dev && dev != daddr_dev) ++ continue; + +- read_lock(&addrconf_lock); + idev = __in6_dev_get(dev); +- if (idev) { +- read_lock_bh(&idev->lock); +- for (ifp=idev->addr_list; ifp; ifp=ifp->if_next) { +- if (ifp->scope == scope) { +- if (ifp->flags&IFA_F_TENTATIVE) +- continue; +-#ifdef CONFIG_IPV6_PRIVACY +- score = ipv6_saddr_pref(ifp, idev->cnf.use_tempaddr > 1 ? IFA_F_TEMPORARY : 0); +-#else +- score = ipv6_saddr_pref(ifp, 0); +-#endif +- if (score <= hiscore) +- continue; ++ if (!idev) ++ continue; + +- if (match) +- in6_ifa_put(match); +- match = ifp; +- hiscore = score; +- in6_ifa_hold(ifp); ++ read_lock_bh(&idev->lock); ++ ifp0 = idev->addr_list; ++ for (ifp=ifp0; ifp; ifp=ifp->if_next) { ++ struct addrselect_attrs temp = {NULL,0,0,0}; ++ int addr_type; ++ update = 0; ++ ++ /* Rule 0: Candidate Source Address (section 4) ++ * - In any case, anycast addresses, multicast ++ * addresses, and the unspecified address MUST ++ * NOT be included in a candidate set. ++ */ ++ addr_type = __ipv6_addr_type(&ifp->addr); ++ if (addr_type == IPV6_ADDR_ANY || ++ addr_type&IPV6_ADDR_MULTICAST) ++ continue; + +- if (IPV6_GET_SADDR_MAXSCORE(score)) { +- read_unlock_bh(&idev->lock); +- read_unlock(&addrconf_lock); +- goto out; +- } ++ /* Rule 1: Prefer same address */ ++ if (ipv6_addr_cmp(&ifp->addr, daddr) == 0) ++ temp.flags |= IPV6_SADDRSELECT_SELF; ++ if ((temp.flags^candidate.flags)&IPV6_SADDRSELECT_SELF) { ++ update = temp.flags&IPV6_SADDRSELECT_SELF; ++ if (!update) { ++ continue; + } + } +- read_unlock_bh(&idev->lock); +- } +- read_unlock(&addrconf_lock); +- } + +- if (scope == IFA_LINK) +- goto out; ++ /* Rule 2: Prefer appropriate scope */ ++ temp.scope = __ipv6_addr_src_scope(addr_type); ++ if (!update) { ++ update = temp.scope - candidate.scope; ++ if (update > 0) { ++ update = candidate.scope < daddr_scope ? 1 : -1; ++ } else if (update < 0) { ++ update = temp.scope < daddr_scope ? -1 : 1; ++ } ++ if (update < 0) { ++ continue; ++ } ++ } + +- /* +- * dev == NULL or search failed for specified dev +- */ ++ /* Rule 3: Avoid deprecated address */ ++ if (ipv6_addrselect_preferred(addr_type) || ++ !(ifp->flags & IFA_F_DEPRECATED)) ++ temp.flags |= IPV6_SADDRSELECT_PREFERRED; ++ if (!update && (temp.flags^candidate.flags)&IPV6_SADDRSELECT_PREFERRED) { ++ update = temp.flags&IPV6_SADDRSELECT_PREFERRED; ++ if (!update) { ++ continue; ++ } ++ } + +- read_lock(&dev_base_lock); +- read_lock(&addrconf_lock); +- for (dev = dev_base; dev; dev=dev->next) { +- idev = __in6_dev_get(dev); +- if (idev) { +- read_lock_bh(&idev->lock); +- for (ifp=idev->addr_list; ifp; ifp=ifp->if_next) { +- if (ifp->scope == scope) { +- if (ifp->flags&IFA_F_TENTATIVE) +- continue; ++ /* XXX: Rule 4: Prefer home address */ ++ ++ /* Rule 5: Prefer outgoing interface */ ++ if (daddr_dev == NULL || daddr_dev == dev) ++ temp.flags |= IPV6_SADDRSELECT_INTERFACE; ++ if (!update && (temp.flags^candidate.flags)&IPV6_SADDRSELECT_INTERFACE) { ++ update = temp.flags&IPV6_SADDRSELECT_INTERFACE; ++ if (!update) { ++ continue; ++ } ++ } ++ ++ /* XXX: Rule 6: Prefer matching label */ ++ if (ipv6_addrselect_label_lookup(&ifp->addr, dev->ifindex) == daddr_label) ++ temp.flags |= IPV6_SADDRSELECT_LABEL; ++ if (!update && (temp.flags^candidate.flags)&IPV6_SADDRSELECT_LABEL) { ++ update = temp.flags&IPV6_SADDRSELECT_LABEL; ++ if (!update) { ++ continue; ++ } ++ } ++ ++ /* XXX: Rule 7: Prefer public address */ + #ifdef CONFIG_IPV6_PRIVACY +- score = ipv6_saddr_pref(ifp, idev->cnf.use_tempaddr > 1 ? IFA_F_TEMPORARY : 0); +-#else +- score = ipv6_saddr_pref(ifp, 0); ++ if (!(ifp->flags & IFA_F_TEMPORARY)) ++ temp.flags |= IPV6_SADDRSELECT_PUBLIC; ++ if (!update && (temp.flags^candidate.flags)&IPV6_SADDRSELECT_PUBLIC) { ++ update = (temp.flags^invpref)&IPV6_SADDRSELECT_PUBLIC; ++ if (!update) { ++ continue; ++ } ++ } + #endif +- if (score <= hiscore) +- continue; +- +- if (match) +- in6_ifa_put(match); +- match = ifp; +- hiscore = score; +- in6_ifa_hold(ifp); + +- if (IPV6_GET_SADDR_MAXSCORE(score)) { +- read_unlock_bh(&idev->lock); +- goto out_unlock_base; +- } ++ /* Rule 8: Use longest matching prefix */ ++ temp.matchlen = ipv6_addr_diff(&ifp->addr, daddr); ++ if (!update) { ++ update = temp.matchlen - candidate.matchlen; ++ if (update < 0) { ++ continue; + } + } +- read_unlock_bh(&idev->lock); ++ ++ /* Final Rule */ ++ if (!update && candidate.ifp) { ++ continue; ++ } ++ ++ /* update candidate */ ++ temp.ifp = ifp; ++ in6_ifa_hold(ifp); ++ if (candidate.ifp) ++ in6_ifa_put(candidate.ifp); ++ candidate = temp; + } ++ read_unlock_bh(&idev->lock); + } +- +-out_unlock_base: + read_unlock(&addrconf_lock); + read_unlock(&dev_base_lock); + +-out: +- err = -EADDRNOTAVAIL; +- if (match) { +- ipv6_addr_copy(saddr, &match->addr); ++ if (candidate.ifp) { ++ ipv6_addr_copy(saddr, &candidate.ifp->addr); ++ in6_ifa_put(candidate.ifp); + err = 0; +- in6_ifa_put(match); ++ } else { ++ err = -EADDRNOTAVAIL; + } +- + return err; + } + +- + int ipv6_get_saddr(struct dst_entry *dst, + struct in6_addr *daddr, struct in6_addr *saddr) + { +- return ipv6_dev_get_saddr(dst ? dst->dev : NULL, daddr, saddr); ++ return ipv6_dev_get_saddr(dst ? ((struct rt6_info *)dst)->rt6i_dev : NULL, ++ daddr, saddr); + } + +- + int ipv6_get_lladdr(struct net_device *dev, struct in6_addr *addr) + { + struct inet6_dev *idev; +@@ -972,6 +1158,70 @@ + return ifp; + } + ++/* address selection: default policy label */ ++/* XXX: user level configuration */ ++static struct ipv6_addrselect_label { ++ struct in6_addr addr; ++ u16 plen; ++ u32 ifindex; ++ u32 label; ++} ipv6_addrselect_label_table[] = { ++ /* ::1/128, label = 0 */ ++ { ++ .addr = IN6ADDR_LOOPBACK_INIT, ++ .plen = 128, ++ .label = 0, ++ }, ++ /* ::/0, label = 1 */ ++ { ++ .addr = IN6ADDR_ANY_INIT, ++ .plen = 0, ++ .label = 1, ++ }, ++ /* 2002::/16, label = 2 */ ++ { ++ .addr = {{{ 0x20, 0x02 }}}, ++ .plen = 16, ++ .label = 2, ++ }, ++ /* ::/96, label = 3 */ ++ { ++ .plen = 96, ++ .label = 3, ++ }, ++ /* ::ffff:0:0/96, label = 4 */ ++ { ++ .addr = {{{ [10] = 0xff, [11] = 0xff }}}, ++ .plen = 96, ++ .label = 4, ++ }, ++ /* sentinel */ ++ { ++ .label = 0xffffffff, ++ } ++}; ++ ++static u32 ipv6_addrselect_label_lookup(const struct in6_addr *addr, ++ int ifindex) ++{ ++ struct ipv6_addrselect_label *p; ++ int plen, matchlen = -1; ++ u32 label = 0xffffffff; ++ ++ for (p = ipv6_addrselect_label_table; ++ p->label != 0xffffffff; ++ p++) { ++ if (ifindex && p->ifindex && ifindex != p->ifindex) ++ continue; ++ plen = ipv6_addr_diff(addr, &p->addr); ++ if (plen < p->plen || plen < matchlen) ++ continue; ++ matchlen = plen; ++ label = p->label; ++ } ++ return label; ++} ++ + int ipv6_rcv_saddr_equal(const struct sock *sk, const struct sock *sk2) + { + const struct in6_addr *sk_rcv_saddr6 = &inet6_sk(sk)->rcv_saddr; +@@ -1151,15 +1401,19 @@ + /* (re)generation of randomized interface identifier (RFC 3041 3.2, 3.5) */ + static int __ipv6_regen_rndid(struct inet6_dev *idev) + { ++#ifdef CONFIG_IPV6_PRIVACY_MD5 + struct net_device *dev; +- struct scatterlist sg[2]; +- +- sg[0].page = virt_to_page(idev->entropy); +- sg[0].offset = offset_in_page(idev->entropy); +- sg[0].length = 8; +- sg[1].page = virt_to_page(idev->work_eui64); +- sg[1].offset = offset_in_page(idev->work_eui64); +- sg[1].length = 8; ++ struct scatterlist sg[] = { ++ { ++ .page = virt_to_page(idev->entropy), ++ .offset = offset_in_page(idev->entropy), ++ .length = 8, ++ },{ ++ .page = virt_to_page(idev->work_eui64), ++ .offset = offset_in_page(idev->work_eui64), ++ .length = 8, ++ } ++ }; + + dev = idev->dev; + +@@ -1169,7 +1423,11 @@ + idev); + get_random_bytes(idev->work_eui64, sizeof(idev->work_eui64)); + } ++#endif /* CONFIG_IPV6_PRIVACY_MD5 */ + regen: ++#ifndef CONFIG_IPV6_PRIVACY_MD5 ++ get_random_bytes(idev->rndid, sizeof(idev->rndid)); ++#else /* CONFIG_IPV6_PRIVACY_MD5 */ + spin_lock(&md5_tfm_lock); + if (unlikely(md5_tfm == NULL)) { + spin_unlock(&md5_tfm_lock); +@@ -1181,9 +1439,14 @@ + spin_unlock(&md5_tfm_lock); + + memcpy(idev->rndid, &idev->work_digest[0], 8); ++#endif /* CONFIG_IPV6_PRIVACY_MD5 */ + idev->rndid[0] &= ~0x02; ++#ifndef CONFIG_IPV6_PRIVACY_MD5 ++ ++#else /* CONFIG_IPV6_PRIVACY_MD5 */ + memcpy(idev->entropy, &idev->work_digest[8], 8); + ++#endif /* CONFIG_IPV6_PRIVACY_MD5 */ + /* + * : + * check if generated address is not inappropriate +@@ -1982,7 +2245,10 @@ + if (idev) { + addrconf_sysctl_unregister(&idev->cnf); + neigh_sysctl_unregister(idev->nd_parms); +- neigh_sysctl_register(dev, idev->nd_parms, NET_IPV6, NET_IPV6_NEIGH, "ipv6", &ndisc_ifinfo_sysctl_change); ++ neigh_sysctl_register(dev, idev->nd_parms, ++ NET_IPV6, NET_IPV6_NEIGH, ++ "ipv6", ++ &ndisc_ifinfo_sysctl_change, NULL); + addrconf_sysctl_register(idev, &idev->cnf); + } + #endif +@@ -2427,6 +2693,10 @@ + unsigned long regen_advance; + #endif + ++#ifdef CONFIG_IPV6_PRIVACY ++ regen_advance = ifp->idev->cnf.regen_max_retry * ifp->idev->cnf.dad_transmits * ifp->idev->nd_parms->retrans_time / HZ; ++#endif ++ + if (ifp->flags & IFA_F_PERMANENT) + continue; + +@@ -2469,28 +2739,33 @@ + } + #ifdef CONFIG_IPV6_PRIVACY + } else if ((ifp->flags&IFA_F_TEMPORARY) && +- !(ifp->flags&IFA_F_TENTATIVE)) { +- if (age >= ifp->prefered_lft - regen_advance) { +- struct inet6_ifaddr *ifpub = ifp->ifpub; +- if (time_before(ifp->tstamp + ifp->prefered_lft * HZ, next)) +- next = ifp->tstamp + ifp->prefered_lft * HZ; +- if (!ifp->regen_count && ifpub) { +- ifp->regen_count++; +- in6_ifa_hold(ifp); +- in6_ifa_hold(ifpub); +- spin_unlock(&ifp->lock); +- write_unlock(&addrconf_hash_lock); +- ipv6_create_tempaddr(ifpub, ifp); +- in6_ifa_put(ifpub); +- in6_ifa_put(ifp); +- goto restart; +- } +- } else if (time_before(ifp->tstamp + ifp->prefered_lft * HZ - regen_advance * HZ, next)) +- next = ifp->tstamp + ifp->prefered_lft * HZ - regen_advance * HZ; +- spin_unlock(&ifp->lock); ++ !(ifp->flags&IFA_F_TENTATIVE) && ++ age >= ifp->prefered_lft - regen_advance) { ++ struct inet6_ifaddr *ifpub = ifp->ifpub; ++ if (time_before(ifp->tstamp + ifp->prefered_lft * HZ, next)) ++ next = ifp->tstamp + ifp->prefered_lft * HZ; ++ if (!ifp->regen_count && ifpub) { ++ ifp->regen_count++; ++ in6_ifa_hold(ifp); ++ in6_ifa_hold(ifpub); ++ spin_unlock(&ifp->lock); ++ write_unlock(&addrconf_hash_lock); ++ ipv6_create_tempaddr(ifpub, ifp); ++ in6_ifa_put(ifpub); ++ in6_ifa_put(ifp); ++ goto restart; ++ } else { ++ spin_unlock(&ifp->lock); ++ } + #endif + } else { + /* ifp->prefered_lft <= ifp->valid_lft */ ++#ifdef CONFIG_IPV6_PRIVACY ++ if (ifp->flags&IFA_F_TEMPORARY) { ++ if (time_before(ifp->tstamp + ifp->prefered_lft * HZ - regen_advance * HZ, next)) ++ next = ifp->tstamp + ifp->prefered_lft * HZ - regen_advance * HZ; ++ } else ++#endif + if (time_before(ifp->tstamp + ifp->prefered_lft * HZ, next)) + next = ifp->tstamp + ifp->prefered_lft * HZ; + spin_unlock(&ifp->lock); +@@ -2835,6 +3110,9 @@ + array[DEVCONF_MAX_DESYNC_FACTOR] = cnf->max_desync_factor; + #endif + array[DEVCONF_MAX_ADDRESSES] = cnf->max_addresses; ++#ifdef CONFIG_IPV6_MROUTE ++ array[DEVCONF_MCFORWARDING] = cnf->mc_forwarding; ++#endif + } + + static int inet6_fill_ifinfo(struct sk_buff *skb, struct inet6_dev *idev, +@@ -3147,7 +3425,7 @@ + static struct addrconf_sysctl_table + { + struct ctl_table_header *sysctl_header; +- ctl_table addrconf_vars[18]; ++ ctl_table addrconf_vars[19]; + ctl_table addrconf_dev[2]; + ctl_table addrconf_conf_dir[2]; + ctl_table addrconf_proto_dir[2]; +@@ -3296,6 +3574,16 @@ + .mode = 0644, + .proc_handler = &proc_dointvec, + }, ++#ifdef CONFIG_IPV6_MROUTE ++ { ++ .ctl_name = NET_IPV6_MC_FORWARDING, ++ .procname = "mc_forwarding", ++ .data = &ipv6_devconf.mc_forwarding, ++ .maxlen = sizeof(int), ++ .mode = 0644, ++ .proc_handler = &proc_dointvec, ++ }, ++#endif + { + .ctl_name = 0, /* sentinel */ + } +@@ -3440,6 +3728,9 @@ + + void __init addrconf_init(void) + { ++#ifdef CONFIG_IPV6_PRIVACY_MD5 ++ struct crypto_tfm *tfm; ++#endif /* CONFIG_IPV6_PRIVACY_MD5 */ + /* The addrconf netdev notifier requires that loopback_dev + * has it's ipv6 private information allocated and setup + * before it can bring up and give link-local addresses +@@ -3465,12 +3756,22 @@ + + register_netdevice_notifier(&ipv6_dev_notf); + +-#ifdef CONFIG_IPV6_PRIVACY +- md5_tfm = crypto_alloc_tfm("md5", 0); +- if (unlikely(md5_tfm == NULL)) ++#ifdef CONFIG_IPV6_PRIVACY_MD5 ++ tfm = crypto_alloc_tfm("md5", 0); ++ if (likely(tfm != NULL)) { ++ spin_lock(&md5_tfm_lock); ++ if (likely(md5_tfm == NULL)) { ++ md5_tfm = tfm; ++ spin_unlock(&md5_tfm_lock); ++ } else { ++ spin_unlock(&md5_tfm_lock); ++ crypto_free_tfm(tfm); ++ } ++ } else { + printk(KERN_WARNING + "failed to load transform for md5\n"); +-#endif ++ } ++#endif /* CONFIG_IPV6_PRIVACY_MD5 */ + + addrconf_verify(0); + rtnetlink_links[PF_INET6] = inet6_rtnetlink_table; +@@ -3487,6 +3788,9 @@ + struct inet6_dev *idev; + struct inet6_ifaddr *ifa; + int i; ++#ifdef CONFIG_IPV6_PRIVACY_MD5 ++ struct crypto_tfm *tfm; ++#endif /* CONFIG_IPV6_PRIVACY_MD5 */ + + unregister_netdevice_notifier(&ipv6_dev_notf); + +@@ -3531,12 +3835,14 @@ + + rtnl_unlock(); + +-#ifdef CONFIG_IPV6_PRIVACY +- if (likely(md5_tfm != NULL)) { +- crypto_free_tfm(md5_tfm); +- md5_tfm = NULL; +- } +-#endif ++#ifdef CONFIG_IPV6_PRIVACY_MD5 ++ spin_lock(&md5_tfm_lock); ++ tfm = md5_tfm; ++ md5_tfm = NULL; ++ spin_unlock(&md5_tfm_lock); ++ if (likely(tfm)) ++ crypto_free_tfm(tfm); ++#endif /* CONFIG_IPV6_PRIVACY_MD5 */ + + #ifdef CONFIG_PROC_FS + proc_net_remove("if_inet6"); +diff -urN linux-2.6.11/net/ipv6/af_inet6.c x1/net/ipv6/af_inet6.c +--- linux-2.6.11/net/ipv6/af_inet6.c 2005-03-02 08:38:10.000000000 +0100 ++++ x1/net/ipv6/af_inet6.c 2005-03-02 17:30:59.000000000 +0100 +@@ -13,6 +13,7 @@ + * piggy, Karl Knutson : Socket protocol table + * Hideaki YOSHIFUJI : sin6_scope_id support + * Arnaldo Melo : check proc_net_create return, cleanups ++ * Hoerdt Mickael : Added Multicast routing support. + * + * This program is free software; you can redistribute it and/or + * modify it under the terms of the GNU General Public License +@@ -62,6 +63,9 @@ + + #include + #include ++#ifdef CONFIG_IPV6_MROUTE ++#include ++#endif + + MODULE_AUTHOR("Cast of dozens"); + MODULE_DESCRIPTION("IPv6 protocol stack for Linux"); +@@ -758,6 +762,9 @@ + err = icmpv6_init(&inet6_family_ops); + if (err) + goto icmp_fail; ++#ifdef CONFIG_IPV6_MROUTE ++ ip6_mr_init(); ++#endif + err = ndisc_init(&inet6_family_ops); + if (err) + goto ndisc_fail; +diff -urN linux-2.6.11/net/ipv6/ah6.c x1/net/ipv6/ah6.c +--- linux-2.6.11/net/ipv6/ah6.c 2005-03-02 08:38:38.000000000 +0100 ++++ x1/net/ipv6/ah6.c 2005-02-03 06:35:55.000000000 +0100 +@@ -264,6 +264,8 @@ + + hdr_len = skb->data - skb->nh.raw; + ah = (struct ipv6_auth_hdr*)skb->data; ++ if (x->props.replay_window && xfrm_replay_check(x, ah->seq_no)) ++ goto out; + ahp = x->data; + nexthdr = ah->nexthdr; + ah_hlen = (ah->hdrlen + 2) << 2; +@@ -302,6 +304,8 @@ + } + } + ++ if (x->props.replay_window) ++ xfrm_replay_advance(x, ah->seq_no); + skb->nh.raw = skb_pull(skb, ah_hlen); + memcpy(skb->nh.raw, tmp_hdr, hdr_len); + skb->nh.ipv6h->payload_len = htons(skb->len - sizeof(struct ipv6hdr)); +diff -urN linux-2.6.11/net/ipv6/anycast.c x1/net/ipv6/anycast.c +--- linux-2.6.11/net/ipv6/anycast.c 2005-03-02 08:38:34.000000000 +0100 ++++ x1/net/ipv6/anycast.c 2005-02-03 15:43:50.000000000 +0100 +@@ -48,32 +48,6 @@ + /* Big ac list lock for all the sockets */ + static DEFINE_RWLOCK(ipv6_sk_ac_lock); + +-/* XXX ip6_addr_match() and ip6_onlink() really belong in net/core.c */ +- +-static int +-ip6_addr_match(struct in6_addr *addr1, struct in6_addr *addr2, int prefix) +-{ +- __u32 mask; +- int i; +- +- if (prefix > 128 || prefix < 0) +- return 0; +- if (prefix == 0) +- return 1; +- for (i=0; i<4; ++i) { +- if (prefix >= 32) +- mask = ~0; +- else +- mask = htonl(~0 << (32 - prefix)); +- if ((addr1->s6_addr32[i] ^ addr2->s6_addr32[i]) & mask) +- return 0; +- prefix -= 32; +- if (prefix <= 0) +- break; +- } +- return 1; +-} +- + static int + ip6_onlink(struct in6_addr *addr, struct net_device *dev) + { +@@ -87,8 +61,8 @@ + if (idev) { + read_lock_bh(&idev->lock); + for (ifa=idev->addr_list; ifa; ifa=ifa->if_next) { +- onlink = ip6_addr_match(addr, &ifa->addr, +- ifa->prefix_len); ++ onlink = ipv6_prefix_equal(addr, &ifa->addr, ++ ifa->prefix_len); + if (onlink) + break; + } +diff -urN linux-2.6.11/net/ipv6/esp6.c x1/net/ipv6/esp6.c +--- linux-2.6.11/net/ipv6/esp6.c 2005-03-02 08:38:12.000000000 +0100 ++++ x1/net/ipv6/esp6.c 2005-02-03 06:35:55.000000000 +0100 +@@ -148,6 +148,7 @@ + ret = -EINVAL; + goto out_nofree; + } ++ esph = (struct ipv6_esp_hdr*)skb->data; + + if (elen <= 0 || (elen & (blksize-1))) { + ret = -EINVAL; +@@ -166,6 +167,11 @@ + u8 sum[esp->auth.icv_full_len]; + u8 sum1[alen]; + ++ if (x->props.replay_window && xfrm_replay_check(x, esph->seq_no)) { ++ ret = -EINVAL; ++ goto out; ++ } ++ + esp->auth.icv(esp, skb, 0, skb->len-alen, sum); + + if (skb_copy_bits(skb, skb->len-alen, sum1, alen)) +@@ -176,6 +182,10 @@ + ret = -EINVAL; + goto out; + } ++ ++ if (x->props.replay_window) ++ xfrm_replay_advance(x, esph->seq_no); ++ + } + + if ((nfrags = skb_cow_data(skb, 0, &trailer)) < 0) { +@@ -185,7 +195,6 @@ + + skb->ip_summed = CHECKSUM_NONE; + +- esph = (struct ipv6_esp_hdr*)skb->data; + iph = skb->nh.ipv6h; + + /* Get ivec. This can be wrong, check against another impls. */ +@@ -307,7 +316,7 @@ + if (x->aalg->alg_key_len > 512) + goto error; + } +- if (x->ealg == NULL) ++ if (x->ealg == NULL || (x->ealg->alg_key_len == 0 && x->props.ealgo != SADB_EALG_NULL)) + goto error; + + if (x->encap) +@@ -349,11 +358,13 @@ + goto error; + } + esp->conf.key = x->ealg->alg_key; +- esp->conf.key_len = (x->ealg->alg_key_len+7)/8; +- if (x->props.ealgo == SADB_EALG_NULL) ++ if (x->props.ealgo == SADB_EALG_NULL) { ++ esp->conf.key_len = 0; + esp->conf.tfm = crypto_alloc_tfm(x->ealg->alg_name, CRYPTO_TFM_MODE_ECB); +- else ++ } else { ++ esp->conf.key_len = (x->ealg->alg_key_len+7)/8; + esp->conf.tfm = crypto_alloc_tfm(x->ealg->alg_name, CRYPTO_TFM_MODE_CBC); ++ } + if (esp->conf.tfm == NULL) + goto error; + esp->conf.ivlen = crypto_tfm_alg_ivsize(esp->conf.tfm); +diff -urN linux-2.6.11/net/ipv6/exthdrs.c x1/net/ipv6/exthdrs.c +--- linux-2.6.11/net/ipv6/exthdrs.c 2005-03-02 08:37:47.000000000 +0100 ++++ x1/net/ipv6/exthdrs.c 2005-02-03 05:44:14.000000000 +0100 +@@ -156,10 +156,18 @@ + { + struct sk_buff *skb = *skbp; + struct inet6_skb_parm *opt = IP6CB(skb); ++#ifdef CONFIG_IPV6_STATISTICS ++ struct dst_entry *dst = skb->dst; ++ struct inet6_dev *idev = ((struct rt6_info *)dst)->rt6i_idev; ++#endif + + if (!pskb_may_pull(skb, (skb->h.raw-skb->data)+8) || + !pskb_may_pull(skb, (skb->h.raw-skb->data)+((skb->h.raw[1]+1)<<3))) { ++#ifdef CONFIG_IPV6_STATISTICS ++ IP6_INC_STATS_BH(idev, IPSTATS_MIB_INHDRERRORS); ++#else + IP6_INC_STATS_BH(IPSTATS_MIB_INHDRERRORS); ++#endif + kfree_skb(skb); + return -1; + } +@@ -172,7 +180,11 @@ + return 1; + } + ++#ifdef CONFIG_IPV6_STATISTICS ++ IP6_INC_STATS_BH(idev, IPSTATS_MIB_INHDRERRORS); ++#else + IP6_INC_STATS_BH(IPSTATS_MIB_INHDRERRORS); ++#endif + return -1; + } + +@@ -220,6 +232,10 @@ + struct inet6_skb_parm *opt = IP6CB(skb); + struct in6_addr *addr; + struct in6_addr daddr; ++#ifdef CONFIG_IPV6_STATISTICS ++ struct dst_entry *dst = skb->dst; ++ struct inet6_dev *idev = ((struct rt6_info *)dst)->rt6i_idev; ++#endif + int n, i; + + struct ipv6_rt_hdr *hdr; +@@ -227,7 +243,11 @@ + + if (!pskb_may_pull(skb, (skb->h.raw-skb->data)+8) || + !pskb_may_pull(skb, (skb->h.raw-skb->data)+((skb->h.raw[1]+1)<<3))) { ++#ifdef CONFIG_IPV6_STATISTICS ++ IP6_INC_STATS_BH(idev, IPSTATS_MIB_INHDRERRORS); ++#else + IP6_INC_STATS_BH(IPSTATS_MIB_INHDRERRORS); ++#endif + kfree_skb(skb); + return -1; + } +@@ -236,7 +256,11 @@ + + if (ipv6_addr_is_multicast(&skb->nh.ipv6h->daddr) || + skb->pkt_type != PACKET_HOST) { ++#ifdef CONFIG_IPV6_STATISTICS ++ IP6_INC_STATS_BH(idev, IPSTATS_MIB_INADDRERRORS); ++#else + IP6_INC_STATS_BH(IPSTATS_MIB_INADDRERRORS); ++#endif + kfree_skb(skb); + return -1; + } +@@ -252,13 +276,21 @@ + } + + if (hdr->type != IPV6_SRCRT_TYPE_0) { ++#ifdef CONFIG_IPV6_STATISTICS ++ IP6_INC_STATS_BH(idev, IPSTATS_MIB_INHDRERRORS); ++#else + IP6_INC_STATS_BH(IPSTATS_MIB_INHDRERRORS); ++#endif + icmpv6_param_prob(skb, ICMPV6_HDR_FIELD, (&hdr->type) - skb->nh.raw); + return -1; + } + + if (hdr->hdrlen & 0x01) { ++#ifdef CONFIG_IPV6_STATISTICS ++ IP6_INC_STATS_BH(idev, IPSTATS_MIB_INHDRERRORS); ++#else + IP6_INC_STATS_BH(IPSTATS_MIB_INHDRERRORS); ++#endif + icmpv6_param_prob(skb, ICMPV6_HDR_FIELD, (&hdr->hdrlen) - skb->nh.raw); + return -1; + } +@@ -271,7 +303,11 @@ + n = hdr->hdrlen >> 1; + + if (hdr->segments_left > n) { ++#ifdef CONFIG_IPV6_STATISTICS ++ IP6_INC_STATS_BH(idev, IPSTATS_MIB_INHDRERRORS); ++#else + IP6_INC_STATS_BH(IPSTATS_MIB_INHDRERRORS); ++#endif + icmpv6_param_prob(skb, ICMPV6_HDR_FIELD, (&hdr->segments_left) - skb->nh.raw); + return -1; + } +@@ -284,7 +320,11 @@ + kfree_skb(skb); + /* the copy is a forwarded packet */ + if (skb2 == NULL) { +- IP6_INC_STATS_BH(IPSTATS_MIB_OUTDISCARDS); ++#ifdef CONFIG_IPV6_STATISTICS ++ IP6_INC_STATS_BH(idev, IPSTATS_MIB_OUTDISCARDS); ++#else ++ IP6_INC_STATS_BH(IPSTATS_MIB_OUTDISCARDS); ++#endif + return -1; + } + *skbp = skb = skb2; +@@ -302,7 +342,11 @@ + addr += i - 1; + + if (ipv6_addr_is_multicast(addr)) { ++#ifdef CONFIG_IPV6_STATISTICS ++ IP6_INC_STATS_BH(idev, IPSTATS_MIB_INADDRERRORS); ++#else + IP6_INC_STATS_BH(IPSTATS_MIB_INADDRERRORS); ++#endif + kfree_skb(skb); + return -1; + } +@@ -321,7 +365,11 @@ + + if (skb->dst->dev->flags&IFF_LOOPBACK) { + if (skb->nh.ipv6h->hop_limit <= 1) { ++#ifdef CONFIG_IPV6_STATISTICS ++ IP6_INC_STATS_BH(idev, IPSTATS_MIB_INHDRERRORS); ++#else + IP6_INC_STATS_BH(IPSTATS_MIB_INHDRERRORS); ++#endif + icmpv6_send(skb, ICMPV6_TIME_EXCEED, ICMPV6_EXC_HOPLIMIT, + 0, skb->dev); + kfree_skb(skb); +@@ -434,29 +482,49 @@ + + static int ipv6_hop_jumbo(struct sk_buff *skb, int optoff) + { ++#ifdef CONFIG_IPV6_STATISTICS ++ struct dst_entry *dst = skb->dst; ++ struct inet6_dev *idev = ((struct rt6_info *)dst)->rt6i_idev; ++#endif + u32 pkt_len; + + if (skb->nh.raw[optoff+1] != 4 || (optoff&3) != 2) { + LIMIT_NETDEBUG( + printk(KERN_DEBUG "ipv6_hop_jumbo: wrong jumbo opt length/alignment %d\n", skb->nh.raw[optoff+1])); ++#ifdef CONFIG_IPV6_STATISTICS ++ IP6_INC_STATS_BH(idev, IPSTATS_MIB_INHDRERRORS); ++#else + IP6_INC_STATS_BH(IPSTATS_MIB_INHDRERRORS); ++#endif + goto drop; + } + + pkt_len = ntohl(*(u32*)(skb->nh.raw+optoff+2)); + if (pkt_len <= IPV6_MAXPLEN) { ++#ifdef CONFIG_IPV6_STATISTICS ++ IP6_INC_STATS_BH(idev, IPSTATS_MIB_INHDRERRORS); ++#else + IP6_INC_STATS_BH(IPSTATS_MIB_INHDRERRORS); ++#endif + icmpv6_param_prob(skb, ICMPV6_HDR_FIELD, optoff+2); + return 0; + } + if (skb->nh.ipv6h->payload_len) { ++#ifdef CONFIG_IPV6_STATISTICS ++ IP6_INC_STATS_BH(idev, IPSTATS_MIB_INHDRERRORS); ++#else + IP6_INC_STATS_BH(IPSTATS_MIB_INHDRERRORS); ++#endif + icmpv6_param_prob(skb, ICMPV6_HDR_FIELD, optoff); + return 0; + } + + if (pkt_len > skb->len - sizeof(struct ipv6hdr)) { ++#ifdef CONFIG_IPV6_STATISTICS ++ IP6_INC_STATS_BH(idev, IPSTATS_MIB_INTRUNCATEDPKTS); ++#else + IP6_INC_STATS_BH(IPSTATS_MIB_INTRUNCATEDPKTS); ++#endif + goto drop; + } + if (pkt_len + sizeof(struct ipv6hdr) < skb->len) { +@@ -483,11 +551,13 @@ + { -1, } + }; + +-int ipv6_parse_hopopts(struct sk_buff *skb, int nhoff) ++int ipv6_parse_hopopts(struct sk_buff **skbp, unsigned int *nhoffp) + { +- IP6CB(skb)->hop = sizeof(struct ipv6hdr); +- if (ip6_parse_tlv(tlvprochopopt_lst, skb)) +- return sizeof(struct ipv6hdr); ++ IP6CB(*skbp)->hop = sizeof(struct ipv6hdr); ++ if (ip6_parse_tlv(tlvprochopopt_lst, *skbp)) { ++ *nhoffp = sizeof(struct ipv6hdr); ++ return 1; ++ } + return -1; + } + +@@ -543,14 +613,34 @@ + ipv6_push_rthdr(skb, proto, opt->srcrt, daddr); + if (opt->dst0opt) + ipv6_push_exthdr(skb, proto, NEXTHDR_DEST, opt->dst0opt); +- if (opt->hopopt) ++ if (skb->len > IPV6_MAXPLEN - (opt->hopopt ? (opt->hopopt->hdrlen+2)<<2 : 0)) { ++ /* data is jumbogram */ ++ u8 *hopt = skb_push(skb, 8); ++ if (opt->hopopt) { ++ u8 *hlen; ++ ipv6_push_exthdr(skb, proto, NEXTHDR_HOP, opt->hopopt); ++ hlen = skb->data + 1; ++ (*hlen)++; ++ hopt[0] = IPV6_TLV_PADN; ++ hopt[1] = 0; ++ } else { ++ hopt[0] = *proto; ++ hopt[1] = 0; ++ } ++ hopt[2] = 0xC2; ++ hopt[3] = 4; ++ *(u32 *)&hopt[4] = htonl(skb->len); ++ *proto = NEXTHDR_HOP; ++ } else if (opt->hopopt) + ipv6_push_exthdr(skb, proto, NEXTHDR_HOP, opt->hopopt); + } + + void ipv6_push_frag_opts(struct sk_buff *skb, struct ipv6_txoptions *opt, u8 *proto) + { +- if (opt->dst1opt) ++ if (opt->dst1opt) { + ipv6_push_exthdr(skb, proto, NEXTHDR_DEST, opt->dst1opt); ++ skb->h.raw = skb->data; ++ } + } + + struct ipv6_txoptions * +diff -urN linux-2.6.11/net/ipv6/icmp.c x1/net/ipv6/icmp.c +--- linux-2.6.11/net/ipv6/icmp.c 2005-03-02 08:37:52.000000000 +0100 ++++ x1/net/ipv6/icmp.c 2005-02-03 05:44:15.000000000 +0100 +@@ -176,7 +176,11 @@ + */ + dst = ip6_route_output(sk, fl); + if (dst->error) { ++#ifdef CONFIG_IPV6_STATISTICS ++ IP6_INC_STATS((((struct rt6_info *)dst)->rt6i_idev), IPSTATS_MIB_OUTNOROUTES); ++#else + IP6_INC_STATS(IPSTATS_MIB_OUTNOROUTES); ++#endif + } else if (dst->dev && (dst->dev->flags&IFF_LOOPBACK)) { + res = 1; + } else { +@@ -381,6 +385,8 @@ + hlimit = np->hop_limit; + if (hlimit < 0) + hlimit = dst_metric(dst, RTAX_HOPLIMIT); ++ if (hlimit < 0) ++ hlimit = ipv6_get_hoplimit(dst->dev); + + msg.skb = skb; + msg.offset = skb->nh.raw - skb->data; +@@ -467,6 +473,8 @@ + hlimit = np->hop_limit; + if (hlimit < 0) + hlimit = dst_metric(dst, RTAX_HOPLIMIT); ++ if (hlimit < 0) ++ hlimit = ipv6_get_hoplimit(dst->dev); + + idev = in6_dev_get(skb->dev); + +diff -urN linux-2.6.11/net/ipv6/ip6_fib.c x1/net/ipv6/ip6_fib.c +--- linux-2.6.11/net/ipv6/ip6_fib.c 2005-03-02 08:38:19.000000000 +0100 ++++ x1/net/ipv6/ip6_fib.c 2005-02-03 13:45:59.000000000 +0100 +@@ -18,6 +18,7 @@ + * Yuji SEKIYA @USAGI: Support default route on router node; + * remove ip6_null_entry from the top of + * routing table. ++ * Ville Nuorvala: Fixes to source address sub trees + */ + #include + #include +@@ -49,6 +50,11 @@ + + struct rt6_statistics rt6_stats; + ++#if !defined(CONFIG_IPV6_NEW_ROUNDROBIN) ++extern struct rt6_info *rt6_dflt_pointer; ++extern spinlock_t rt6_dflt_lock; ++#endif ++ + static kmem_cache_t * fib6_node_kmem; + + enum fib_walk_state_t +@@ -80,6 +86,7 @@ + #define SUBTREE(fn) NULL + #endif + ++static struct rt6_info * fib6_find_prefix(struct fib6_node *fn); + static void fib6_prune_clones(struct fib6_node *fn, struct rt6_info *rt); + static struct fib6_node * fib6_repair_tree(struct fib6_node *fn); + +@@ -117,36 +124,6 @@ + */ + + /* +- * compare "prefix length" bits of an address +- */ +- +-static __inline__ int addr_match(void *token1, void *token2, int prefixlen) +-{ +- __u32 *a1 = token1; +- __u32 *a2 = token2; +- int pdw; +- int pbi; +- +- pdw = prefixlen >> 5; /* num of whole __u32 in prefix */ +- pbi = prefixlen & 0x1f; /* num of bits in incomplete u32 in prefix */ +- +- if (pdw) +- if (memcmp(a1, a2, pdw << 2)) +- return 0; +- +- if (pbi) { +- __u32 mask; +- +- mask = htonl((0xffffffff) << (32 - pbi)); +- +- if ((a1[pdw] ^ a2[pdw]) & mask) +- return 0; +- } +- +- return 1; +-} +- +-/* + * test bit + */ + +@@ -261,7 +238,7 @@ + * Prefix match + */ + if (plen < fn->fn_bit || +- !addr_match(&key->addr, addr, fn->fn_bit)) ++ !ipv6_prefix_equal(&key->addr, addr, fn->fn_bit)) + goto insert_above; + + /* +@@ -513,6 +490,9 @@ + { + struct fib6_node *fn; + int err = -ENOMEM; ++#ifdef CONFIG_IPV6_SUBTREES ++ struct fib6_node *pn = NULL; ++#endif + + fn = fib6_add_1(root, &rt->rt6i_dst.addr, sizeof(struct in6_addr), + rt->rt6i_dst.plen, offsetof(struct rt6_info, rt6i_dst)); +@@ -565,10 +545,6 @@ + /* Now link new subtree to main tree */ + sfn->parent = fn; + fn->subtree = sfn; +- if (fn->leaf == NULL) { +- fn->leaf = rt; +- atomic_inc(&rt->rt6i_ref); +- } + } else { + sn = fib6_add_1(fn->subtree, &rt->rt6i_src.addr, + sizeof(struct in6_addr), rt->rt6i_src.plen, +@@ -578,6 +554,13 @@ + goto st_failure; + } + ++ /* fib6_add_1 might have cleared the old leaf pointer */ ++ if (fn->leaf == NULL) { ++ fn->leaf = rt; ++ atomic_inc(&rt->rt6i_ref); ++ } ++ ++ pn = fn; + fn = sn; + } + #endif +@@ -591,8 +574,29 @@ + } + + out: +- if (err) ++ if (err) { ++#ifdef CONFIG_IPV6_SUBTREES ++ /* If fib6_add_1 has cleared the old leaf pointer in the ++ * super-tree leaf node, we have to find a new one for it. ++ * ++ * This situation will never arise in the sub-tree since ++ * the node will at least have the duplicate route that ++ * caused fib6_add_rt2node to fail in the first place. ++ */ ++ ++ if (pn && !(pn->fn_flags & RTN_RTINFO)) { ++ pn->leaf = fib6_find_prefix(pn); ++#if RT6_DEBUG >= 2 ++ if (!pn->leaf) { ++ BUG_TRAP(pn->leaf); ++ pn->leaf = &ip6_null_entry; ++ } ++#endif ++ atomic_inc(&pn->leaf->rt6i_ref); ++ } ++#endif + dst_free(&rt->u.dst); ++ } + return err; + + #ifdef CONFIG_IPV6_SUBTREES +@@ -667,7 +671,7 @@ + key = (struct rt6key *) ((u8 *) fn->leaf + + args->offset); + +- if (addr_match(&key->addr, args->addr, key->plen)) ++ if (ipv6_prefix_equal(&key->addr, args->addr, key->plen)) + return fn; + } + +@@ -680,16 +684,19 @@ + struct fib6_node * fib6_lookup(struct fib6_node *root, struct in6_addr *daddr, + struct in6_addr *saddr) + { +- struct lookup_args args[2]; + struct fib6_node *fn; +- +- args[0].offset = offsetof(struct rt6_info, rt6i_dst); +- args[0].addr = daddr; +- ++ struct lookup_args args[2] = { ++ { ++ .offset = offsetof(struct rt6_info, rt6i_dst), ++ .addr = daddr, ++ }, + #ifdef CONFIG_IPV6_SUBTREES +- args[1].offset = offsetof(struct rt6_info, rt6i_src); +- args[1].addr = saddr; ++ { ++ .offset = offsetof(struct rt6_info, rt6i_src), ++ .addr = saddr, ++ }, + #endif ++ }; + + fn = fib6_lookup_1(root, args); + +@@ -718,7 +725,7 @@ + * Prefix match + */ + if (plen < fn->fn_bit || +- !addr_match(&key->addr, addr, fn->fn_bit)) ++ !ipv6_prefix_equal(&key->addr, addr, fn->fn_bit)) + return NULL; + + if (plen == fn->fn_bit) +@@ -747,10 +754,8 @@ + #ifdef CONFIG_IPV6_SUBTREES + if (src_len) { + BUG_TRAP(saddr!=NULL); +- if (fn == NULL) +- fn = fn->subtree; + if (fn) +- fn = fib6_locate_1(fn, saddr, src_len, ++ fn = fib6_locate_1(fn->subtree, saddr, src_len, + offsetof(struct rt6_info, rt6i_src)); + } + #endif +@@ -1184,7 +1189,9 @@ + if (rt->rt6i_flags&RTF_EXPIRES && rt->rt6i_expires) { + if (time_after(now, rt->rt6i_expires)) { + RT6_TRACE("expiring %p\n", rt); ++#if !defined(CONFIG_IPV6_NEW_ROUNDROBIN) + rt6_reset_dflt_pointer(rt); ++#endif + return -1; + } + gc_args.more++; +diff -urN linux-2.6.11/net/ipv6/ip6_input.c x1/net/ipv6/ip6_input.c +--- linux-2.6.11/net/ipv6/ip6_input.c 2005-03-02 08:38:17.000000000 +0100 ++++ x1/net/ipv6/ip6_input.c 2005-02-13 19:37:56.000000000 +0100 +@@ -19,6 +19,7 @@ + * + * Mitsuru KANDA @USAGI and + * YOSHIFUJI Hideaki @USAGI: Remove ipv6_parse_exthdrs(). ++ * Hoerdt Mickael : Added Multicast routing support. + */ + + #include +@@ -59,15 +60,27 @@ + int ipv6_rcv(struct sk_buff *skb, struct net_device *dev, struct packet_type *pt) + { + struct ipv6hdr *hdr; ++#ifdef CONFIG_IPV6_STATISTICS ++ struct inet6_dev *idev = NULL; ++#endif + u32 pkt_len; + + if (skb->pkt_type == PACKET_OTHERHOST) + goto drop; + ++#ifdef CONFIG_IPV6_STATISTICS ++ idev = in6_dev_get(dev); ++ IP6_INC_STATS_BH(idev, IPSTATS_MIB_INRECEIVES); ++#else + IP6_INC_STATS_BH(IPSTATS_MIB_INRECEIVES); ++#endif + + if ((skb = skb_share_check(skb, GFP_ATOMIC)) == NULL) { ++#ifdef CONFIG_IPV6_STATISTICS ++ IP6_INC_STATS_BH(idev, IPSTATS_MIB_INDISCARDS); ++#else + IP6_INC_STATS_BH(IPSTATS_MIB_INDISCARDS); ++#endif + goto out; + } + +@@ -79,10 +92,8 @@ + if (skb->len < sizeof(struct ipv6hdr)) + goto err; + +- if (!pskb_may_pull(skb, sizeof(struct ipv6hdr))) { +- IP6_INC_STATS_BH(IPSTATS_MIB_INHDRERRORS); +- goto drop; +- } ++ if (!pskb_may_pull(skb, sizeof(struct ipv6hdr))) ++ goto err; + + hdr = skb->nh.ipv6h; + +@@ -96,10 +107,8 @@ + if (pkt_len + sizeof(struct ipv6hdr) > skb->len) + goto truncated; + if (pkt_len + sizeof(struct ipv6hdr) < skb->len) { +- if (__pskb_trim(skb, pkt_len + sizeof(struct ipv6hdr))){ +- IP6_INC_STATS_BH(IPSTATS_MIB_INHDRERRORS); +- goto drop; +- } ++ if (__pskb_trim(skb, pkt_len + sizeof(struct ipv6hdr))) ++ goto err; + hdr = skb->nh.ipv6h; + if (skb->ip_summed == CHECKSUM_HW) + skb->ip_summed = CHECKSUM_NONE; +@@ -107,22 +116,39 @@ + } + + if (hdr->nexthdr == NEXTHDR_HOP) { ++ unsigned int nhoff = offsetof(struct ipv6hdr, nexthdr); + skb->h.raw = (u8*)(hdr+1); +- if (ipv6_parse_hopopts(skb, offsetof(struct ipv6hdr, nexthdr)) < 0) { +- IP6_INC_STATS_BH(IPSTATS_MIB_INHDRERRORS); +- return 0; ++ if (ipv6_parse_hopopts(&skb, &nhoff) < 0) { ++ skb = NULL; ++ goto err; + } +- hdr = skb->nh.ipv6h; + } + ++#ifdef CONFIG_IPV6_STATISTICS ++ if (idev) ++ in6_dev_put(idev); ++#endif + return NF_HOOK(PF_INET6,NF_IP6_PRE_ROUTING, skb, dev, NULL, ip6_rcv_finish); + truncated: ++#ifdef CONFIG_IPV6_STATISTICS ++ IP6_INC_STATS_BH(idev, IPSTATS_MIB_INTRUNCATEDPKTS); ++#else + IP6_INC_STATS_BH(IPSTATS_MIB_INTRUNCATEDPKTS); ++#endif + err: ++#ifdef CONFIG_IPV6_STATISTICS ++ IP6_INC_STATS_BH(idev, IPSTATS_MIB_INHDRERRORS); ++#else + IP6_INC_STATS_BH(IPSTATS_MIB_INHDRERRORS); ++#endif + drop: +- kfree_skb(skb); ++ if (skb) ++ kfree_skb(skb); + out: ++#ifdef CONFIG_IPV6_STATISTICS ++ if (idev) ++ in6_dev_put(idev); ++#endif + return 0; + } + +@@ -135,17 +161,16 @@ + { + struct inet6_protocol *ipprot; + struct sock *raw_sk; ++#ifdef CONFIG_IPV6_STATISTICS ++ struct dst_entry *dst = skb->dst; ++ struct inet6_dev *idev = ((struct rt6_info *)dst)->rt6i_idev; ++#endif + unsigned int nhoff; + int nexthdr; + u8 hash; + int cksum_sub = 0; + + skb->h.raw = skb->nh.raw + sizeof(struct ipv6hdr); +- +- /* +- * Parse extension headers +- */ +- + nexthdr = skb->nh.ipv6h->nexthdr; + nhoff = offsetof(struct ipv6hdr, nexthdr); + +@@ -193,15 +218,27 @@ + if (ret > 0) + goto resubmit; + else if (ret == 0) ++#ifdef CONFIG_IPV6_STATISTICS ++ IP6_INC_STATS_BH(idev, IPSTATS_MIB_INDELIVERS); ++#else + IP6_INC_STATS_BH(IPSTATS_MIB_INDELIVERS); ++#endif + } else { + if (!raw_sk) { + if (xfrm6_policy_check(NULL, XFRM_POLICY_IN, skb)) { ++#ifdef CONFIG_IPV6_STATISTICS ++ IP6_INC_STATS_BH(idev, IPSTATS_MIB_INUNKNOWNPROTOS); ++#else + IP6_INC_STATS_BH(IPSTATS_MIB_INUNKNOWNPROTOS); ++#endif + icmpv6_param_prob(skb, ICMPV6_UNK_NEXTHDR, nhoff); + } + } else { ++#ifdef CONFIG_IPV6_STATISTICS ++ IP6_INC_STATS_BH(idev, IPSTATS_MIB_INDELIVERS); ++#else + IP6_INC_STATS_BH(IPSTATS_MIB_INDELIVERS); ++#endif + kfree_skb(skb); + } + } +@@ -209,7 +246,11 @@ + return 0; + + discard: ++#ifdef CONFIG_IPV6_STATISTICS ++ IP6_INC_STATS_BH(idev, IPSTATS_MIB_INDISCARDS); ++#else + IP6_INC_STATS_BH(IPSTATS_MIB_INDISCARDS); ++#endif + rcu_read_unlock(); + kfree_skb(skb); + return 0; +@@ -224,18 +265,65 @@ + int ip6_mc_input(struct sk_buff *skb) + { + struct ipv6hdr *hdr; ++#if defined(CONFIG_IPV6_STATISTICS) || defined(CONFIG_IPV6_MROUTE) ++ struct dst_entry *dst = skb->dst; ++#endif ++#ifdef CONFIG_IPV6_STATISTICS ++ struct inet6_dev *idev = ((struct rt6_info *)dst)->rt6i_idev; ++#endif + int deliver; ++ int discard = 1; + ++#ifdef CONFIG_IPV6_MROUTE ++ skb->dev = dst->dev; ++#endif ++ ++#ifdef CONFIG_IPV6_STATISTICS ++ IP6_INC_STATS_BH(idev, IPSTATS_MIB_INMCASTPKTS); ++#else + IP6_INC_STATS_BH(IPSTATS_MIB_INMCASTPKTS); ++#endif + + hdr = skb->nh.ipv6h; + deliver = likely(!(skb->dev->flags & (IFF_PROMISC|IFF_ALLMULTI))) || + ipv6_chk_mcast_addr(skb->dev, &hdr->daddr, NULL); + ++#ifdef CONFIG_IPV6_MROUTE + /* +- * IPv6 multicast router mode isnt currently supported. ++ * IPv6 multicast router mode is now supported ;) + */ ++ if (ipv6_devconf.mc_forwarding == 1) { ++ int addr_typed; ++ int addr_types; ++ ++ addr_typed = ipv6_addr_type(&hdr->daddr); ++ addr_types = ipv6_addr_type(&hdr->saddr); ++ ++ if (!(addr_typed & (IPV6_ADDR_LOOPBACK | IPV6_ADDR_LINKLOCAL))) { ++ struct sk_buff *skb2; ++ ++ /* check if this is a mld message */ ++ if(hdr->nexthdr == NEXTHDR_HOP) { ++ if(skb->h.raw[0] == IPPROTO_ICMPV6 ){ ++ ip6_input(skb); ++ return 0; ++ } ++ } ++ ++ if (deliver) { ++ skb2 = skb_clone(skb,GFP_ATOMIC); ++ } else { ++ discard = 0; ++ skb2 = skb; ++ } ++ ip6_mr_input(skb2); ++ } ++ } ++#else + #if 0 ++ /* ++ * IPv6 multicast router mode isnt currently supported. ++ */ + if (ipv6_config.multicast_route) { + int addr_type; + +@@ -257,13 +345,14 @@ + } + } + #endif ++#endif + + if (likely(deliver)) { ++ discard = 0; + ip6_input(skb); +- return 0; + } + /* discard */ +- kfree_skb(skb); +- ++ if (discard) ++ kfree_skb(skb); + return 0; + } +diff -urN linux-2.6.11/net/ipv6/ip6_output.c x1/net/ipv6/ip6_output.c +--- linux-2.6.11/net/ipv6/ip6_output.c 2005-03-02 08:37:47.000000000 +0100 ++++ x1/net/ipv6/ip6_output.c 2005-02-11 17:24:31.000000000 +0100 +@@ -75,6 +75,9 @@ + + struct dst_entry *dst = skb->dst; + struct hh_cache *hh = dst->hh; ++#ifdef CONFIG_IPV6_STATISTICS ++ struct inet6_dev *idev = ((struct rt6_info *)dst)->rt6i_idev; ++#endif + + if (hh) { + int hh_alen; +@@ -88,14 +91,18 @@ + } else if (dst->neighbour) + return dst->neighbour->output(skb); + ++#ifdef CONFIG_IPV6_STATISTICS ++ IP6_INC_STATS_BH(idev, IPSTATS_MIB_OUTNOROUTES); ++#else + IP6_INC_STATS_BH(IPSTATS_MIB_OUTNOROUTES); ++#endif + kfree_skb(skb); + return -EINVAL; + + } + + /* dev_loopback_xmit for use with netfilter. */ +-static int ip6_dev_loopback_xmit(struct sk_buff *newskb) ++int ip6_dev_loopback_xmit(struct sk_buff *newskb) + { + newskb->mac.raw = newskb->data; + __skb_pull(newskb, newskb->nh.raw - newskb->data); +@@ -112,6 +119,9 @@ + { + struct dst_entry *dst = skb->dst; + struct net_device *dev = dst->dev; ++#ifdef CONFIG_IPV6_STATISTICS ++ struct inet6_dev *idev = ((struct rt6_info *)dst)->rt6i_idev; ++#endif + + skb->protocol = htons(ETH_P_IPV6); + skb->dev = dev; +@@ -133,13 +143,21 @@ + ip6_dev_loopback_xmit); + + if (skb->nh.ipv6h->hop_limit == 0) { ++#ifdef CONFIG_IPV6_STATISTICS ++ IP6_INC_STATS(idev, IPSTATS_MIB_OUTDISCARDS); ++#else + IP6_INC_STATS(IPSTATS_MIB_OUTDISCARDS); ++#endif + kfree_skb(skb); + return 0; + } + } + ++#ifdef CONFIG_IPV6_STATISTICS ++ IP6_INC_STATS(idev, IPSTATS_MIB_OUTMCASTPKTS); ++#else + IP6_INC_STATS(IPSTATS_MIB_OUTMCASTPKTS); ++#endif + } + + return NF_HOOK(PF_INET6, NF_IP6_POST_ROUTING, skb,NULL, skb->dev,ip6_output_finish); +@@ -147,7 +165,7 @@ + + int ip6_output(struct sk_buff *skb) + { +- if (skb->len > dst_pmtu(skb->dst)) ++ if (skb->len > dst_pmtu(skb->dst) || ip6_dst_allfrag(skb->dst)) + return ip6_fragment(skb, ip6_output2); + else + return ip6_output2(skb); +@@ -166,11 +184,21 @@ + .saddr = iph->saddr, } }, + .proto = iph->nexthdr, + }; ++#ifdef CONFIG_IPV6_STATISTICS ++ struct inet6_dev *idev = NULL; ++#endif + + dst = ip6_route_output(skb->sk, &fl); ++#ifdef CONFIG_IPV6_STATISTICS ++ idev = ((struct rt6_info *)dst)->rt6i_idev; ++#endif + + if (dst->error) { ++#ifdef CONFIG_IPV6_STATISTICS ++ IP6_INC_STATS(idev, IPSTATS_MIB_OUTNOROUTES); ++#else + IP6_INC_STATS(IPSTATS_MIB_OUTNOROUTES); ++#endif + LIMIT_NETDEBUG( + printk(KERN_DEBUG "ip6_route_me_harder: No more route.\n")); + dst_release(dst); +@@ -209,11 +237,16 @@ + struct in6_addr *first_hop = &fl->fl6_dst; + struct dst_entry *dst = skb->dst; + struct ipv6hdr *hdr; ++#ifdef CONFIG_IPV6_STATISTICS ++ struct inet6_dev *idev = ((struct rt6_info *)dst)->rt6i_idev; ++#endif + u8 proto = fl->proto; + int seg_len = skb->len; + int hlimit; + u32 mtu; + ++ skb->h.raw = skb->data; ++ + if (opt) { + int head_room; + +@@ -229,7 +262,11 @@ + kfree_skb(skb); + skb = skb2; + if (skb == NULL) { ++#ifdef CONFIG_IPV6_STATISTICS ++ IP6_INC_STATS(idev, IPSTATS_MIB_OUTDISCARDS); ++#else + IP6_INC_STATS(IPSTATS_MIB_OUTDISCARDS); ++#endif + return -ENOBUFS; + } + if (sk) +@@ -253,6 +290,8 @@ + hlimit = np->hop_limit; + if (hlimit < 0) + hlimit = dst_metric(dst, RTAX_HOPLIMIT); ++ if (hlimit < 0) ++ hlimit = ipv6_get_hoplimit(dst->dev); + + hdr->payload_len = htons(seg_len); + hdr->nexthdr = proto; +@@ -263,15 +302,28 @@ + + mtu = dst_pmtu(dst); + if ((skb->len <= mtu) || ipfragok) { ++#ifdef CONFIG_IPV6_STATISTICS ++ IP6_INC_STATS(idev, IPSTATS_MIB_OUTREQUESTS); ++#else + IP6_INC_STATS(IPSTATS_MIB_OUTREQUESTS); ++#endif + return NF_HOOK(PF_INET6, NF_IP6_LOCAL_OUT, skb, NULL, dst->dev, ip6_maybe_reroute); + } + + if (net_ratelimit()) +- printk(KERN_DEBUG "IPv6: sending pkt_too_big to self\n"); ++ printk(KERN_DEBUG "IPv6: sending pkt_too_big to self; " ++ "saddr=%04x:%04x:%04x:%04x:%04x:%04x:%04x:%04x, " ++ "daddr=%04x:%04x:%04x:%04x:%04x:%04x:%04x:%04x, " ++ "skb->len(%d) > mtu(%d)\n", ++ NIP6(hdr->saddr), NIP6(hdr->daddr), ++ skb->len, mtu); + skb->dev = dst->dev; + icmpv6_send(skb, ICMPV6_PKT_TOOBIG, 0, mtu, skb->dev); ++#ifdef CONFIG_IPV6_STATISTICS ++ IP6_INC_STATS(idev, IPSTATS_MIB_FRAGFAILS); ++#else + IP6_INC_STATS(IPSTATS_MIB_FRAGFAILS); ++#endif + kfree_skb(skb); + return -EMSGSIZE; + } +@@ -348,14 +400,32 @@ + struct dst_entry *dst = skb->dst; + struct ipv6hdr *hdr = skb->nh.ipv6h; + struct inet6_skb_parm *opt = IP6CB(skb); ++#ifdef CONFIG_IPV6_STATISTICS ++ struct inet6_dev *idev = ((struct rt6_info *)dst)->rt6i_idev; ++#endif + + if (ipv6_devconf.forwarding == 0) + goto error; + ++#ifdef CONFIG_USE_POLICY_FWD + if (!xfrm6_policy_check(NULL, XFRM_POLICY_FWD, skb)) { ++#ifdef CONFIG_IPV6_STATISTICS ++ IP6_INC_STATS(idev, IPSTATS_MIB_INDISCARDS); ++#else + IP6_INC_STATS(IPSTATS_MIB_INDISCARDS); ++#endif + goto drop; + } ++#else ++ if (!xfrm6_policy_check(NULL, XFRM_POLICY_IN, skb)) { ++#ifdef CONFIG_IPV6_STATISTICS ++ IP6_INC_STATS(idev, IPSTATS_MIB_INDISCARDS); ++#else ++ IP6_INC_STATS(IPSTATS_MIB_INDISCARDS); ++#endif ++ goto drop; ++ } ++#endif + + skb->ip_summed = CHECKSUM_NONE; + +@@ -392,7 +462,11 @@ + } + + if (!xfrm6_route_forward(skb)) { ++#ifdef CONFIG_IPV6_STATISTICS ++ IP6_INC_STATS(idev, IPSTATS_MIB_INDISCARDS); ++#else + IP6_INC_STATS(IPSTATS_MIB_INDISCARDS); ++#endif + goto drop; + } + +@@ -430,14 +504,23 @@ + /* Again, force OUTPUT device used as source address */ + skb->dev = dst->dev; + icmpv6_send(skb, ICMPV6_PKT_TOOBIG, 0, dst_pmtu(dst), skb->dev); ++#ifdef CONFIG_IPV6_STATISTICS ++ IP6_INC_STATS_BH(idev, IPSTATS_MIB_INTOOBIGERRORS); ++ IP6_INC_STATS_BH(idev, IPSTATS_MIB_FRAGFAILS); ++#else + IP6_INC_STATS_BH(IPSTATS_MIB_INTOOBIGERRORS); + IP6_INC_STATS_BH(IPSTATS_MIB_FRAGFAILS); ++#endif + kfree_skb(skb); + return -EMSGSIZE; + } + + if (skb_cow(skb, dst->dev->hard_header_len)) { ++#ifdef CONFIG_IPV6_STATISTICS ++ IP6_INC_STATS(idev, IPSTATS_MIB_OUTDISCARDS); ++#else + IP6_INC_STATS(IPSTATS_MIB_OUTDISCARDS); ++#endif + goto drop; + } + +@@ -447,11 +530,19 @@ + + hdr->hop_limit--; + ++#ifdef CONFIG_IPV6_STATISTICS ++ IP6_INC_STATS_BH(idev, IPSTATS_MIB_OUTFORWDATAGRAMS); ++#else + IP6_INC_STATS_BH(IPSTATS_MIB_OUTFORWDATAGRAMS); ++#endif + return NF_HOOK(PF_INET6,NF_IP6_FORWARD, skb, skb->dev, dst->dev, ip6_forward_finish); + + error: ++#ifdef CONFIG_IPV6_STATISTICS ++ IP6_INC_STATS_BH(idev, IPSTATS_MIB_INADDRERRORS); ++#else + IP6_INC_STATS_BH(IPSTATS_MIB_INADDRERRORS); ++#endif + drop: + kfree_skb(skb); + return -EINVAL; +@@ -500,17 +591,21 @@ + switch (**nexthdr) { + + case NEXTHDR_HOP: ++ break; + case NEXTHDR_ROUTING: ++ found_rhdr = 1; ++ break; + case NEXTHDR_DEST: +- if (**nexthdr == NEXTHDR_ROUTING) found_rhdr = 1; +- if (**nexthdr == NEXTHDR_DEST && found_rhdr) return offset; +- offset += ipv6_optlen(exthdr); +- *nexthdr = &exthdr->nexthdr; +- exthdr = (struct ipv6_opt_hdr*)(skb->nh.raw + offset); ++ if (found_rhdr) ++ return offset; + break; +- default : ++ default: + return offset; + } ++ ++ offset += ipv6_optlen(exthdr); ++ *nexthdr = &exthdr->nexthdr; ++ exthdr = (struct ipv6_opt_hdr*)(skb->nh.raw + offset); + } + + return offset; +@@ -523,6 +618,9 @@ + struct rt6_info *rt = (struct rt6_info*)skb->dst; + struct ipv6hdr *tmp_hdr; + struct frag_hdr *fh; ++#ifdef CONFIG_IPV6_STATISTICS ++ struct inet6_dev *idev = rt->rt6i_idev; ++#endif + unsigned int mtu, hlen, left, len; + u32 frag_id = 0; + int ptr, offset = 0, err=0; +@@ -566,7 +664,11 @@ + + tmp_hdr = kmalloc(hlen, GFP_ATOMIC); + if (!tmp_hdr) { ++#ifdef CONFIG_IPV6_STATISTICS ++ IP6_INC_STATS(idev, IPSTATS_MIB_FRAGFAILS); ++#else + IP6_INC_STATS(IPSTATS_MIB_FRAGFAILS); ++#endif + return -ENOMEM; + } + +@@ -622,7 +724,11 @@ + kfree(tmp_hdr); + + if (err == 0) { ++#ifdef CONFIG_IPV6_STATISTICS ++ IP6_INC_STATS(idev, IPSTATS_MIB_FRAGOKS); ++#else + IP6_INC_STATS(IPSTATS_MIB_FRAGOKS); ++#endif + return 0; + } + +@@ -632,7 +738,11 @@ + frag = skb; + } + ++#ifdef CONFIG_IPV6_STATISTICS ++ IP6_INC_STATS(idev, IPSTATS_MIB_FRAGFAILS); ++#else + IP6_INC_STATS(IPSTATS_MIB_FRAGFAILS); ++#endif + return err; + } + +@@ -665,7 +775,11 @@ + + if ((frag = alloc_skb(len+hlen+sizeof(struct frag_hdr)+LL_RESERVED_SPACE(rt->u.dst.dev), GFP_ATOMIC)) == NULL) { + NETDEBUG(printk(KERN_INFO "IPv6: frag: no memory for new fragment!\n")); ++#ifdef CONFIG_IPV6_STATISTICS ++ IP6_INC_STATS(idev, IPSTATS_MIB_FRAGFAILS); ++#else + IP6_INC_STATS(IPSTATS_MIB_FRAGFAILS); ++#endif + err = -ENOMEM; + goto fail; + } +@@ -723,19 +837,31 @@ + * Put this fragment into the sending queue. + */ + ++#ifdef CONFIG_IPV6_STATISTICS ++ IP6_INC_STATS(idev, IPSTATS_MIB_FRAGCREATES); ++#else + IP6_INC_STATS(IPSTATS_MIB_FRAGCREATES); ++#endif + + err = output(frag); + if (err) + goto fail; + } + kfree_skb(skb); ++#ifdef CONFIG_IPV6_STATISTICS ++ IP6_INC_STATS(idev, IPSTATS_MIB_FRAGOKS); ++#else + IP6_INC_STATS(IPSTATS_MIB_FRAGOKS); ++#endif + return err; + + fail: + kfree_skb(skb); ++#ifdef CONFIG_IPV6_STATISTICS ++ IP6_INC_STATS(idev, IPSTATS_MIB_FRAGFAILS); ++#else + IP6_INC_STATS(IPSTATS_MIB_FRAGFAILS); ++#endif + return err; + } + +@@ -814,6 +940,9 @@ + struct inet_sock *inet = inet_sk(sk); + struct ipv6_pinfo *np = inet6_sk(sk); + struct sk_buff *skb; ++#ifdef CONFIG_IPV6_STATISTICS ++ struct inet6_dev *idev = rt->rt6i_idev; ++#endif + unsigned int maxfraglen, fragheaderlen; + int exthdrlen; + int hh_len; +@@ -848,6 +977,7 @@ + inet->cork.fl = *fl; + np->cork.hop_limit = hlimit; + inet->cork.fragsize = mtu = dst_pmtu(&rt->u.dst); ++ inet->cork.flags |= ip6_dst_allfrag(&rt->u.dst) ? IPCORK_ALLFRAG : 0; + inet->cork.length = 0; + sk->sk_sndmsg_page = NULL; + sk->sk_sndmsg_off = 0; +@@ -899,7 +1029,7 @@ + + while (length > 0) { + /* Check if the remaining data fits into current packet. */ +- copy = mtu - skb->len; ++ copy = (inet->cork.length <= mtu && !(inet->cork.flags & IPCORK_ALLFRAG) ? mtu : maxfraglen) - skb->len; + if (copy < length) + copy = maxfraglen - skb->len; + +@@ -924,7 +1054,7 @@ + * we know we need more fragment(s). + */ + datalen = length + fraggap; +- if (datalen > mtu - fragheaderlen) ++ if (datalen > (inet->cork.length <= mtu && !(inet->cork.flags & IPCORK_ALLFRAG) ? mtu : maxfraglen) - fragheaderlen) + datalen = maxfraglen - fragheaderlen; + + fraglen = datalen + fragheaderlen; +@@ -1080,7 +1210,11 @@ + return 0; + error: + inet->cork.length -= length; ++#ifdef CONFIG_IPV6_STATISTICS ++ IP6_INC_STATS(idev, IPSTATS_MIB_OUTDISCARDS); ++#else + IP6_INC_STATS(IPSTATS_MIB_OUTDISCARDS); ++#endif + return err; + } + +@@ -1095,6 +1229,9 @@ + struct ipv6_txoptions *opt = np->cork.opt; + struct rt6_info *rt = np->cork.rt; + struct flowi *fl = &inet->cork.fl; ++#ifdef CONFIG_IPV6_STATISTICS ++ struct inet6_dev *idev = rt->rt6i_idev; ++#endif + unsigned char proto = fl->proto; + int err = 0; + +@@ -1140,7 +1277,11 @@ + ipv6_addr_copy(&hdr->daddr, final_dst); + + skb->dst = dst_clone(&rt->u.dst); +- IP6_INC_STATS(IPSTATS_MIB_OUTREQUESTS); ++#ifdef CONFIG_IPV6_STATISTICS ++ IP6_INC_STATS(idev, IPSTATS_MIB_OUTREQUESTS); ++#else ++ IP6_INC_STATS(IPSTATS_MIB_OUTREQUESTS); ++#endif + err = NF_HOOK(PF_INET6, NF_IP6_LOCAL_OUT, skb, NULL, skb->dst->dev, dst_output); + if (err) { + if (err > 0) +@@ -1158,6 +1299,7 @@ + if (np->cork.rt) { + dst_release(&np->cork.rt->u.dst); + np->cork.rt = NULL; ++ inet->cork.flags &= ~IPCORK_ALLFRAG; + } + memset(&inet->cork.fl, 0, sizeof(inet->cork.fl)); + return err; +@@ -1170,9 +1312,19 @@ + struct inet_sock *inet = inet_sk(sk); + struct ipv6_pinfo *np = inet6_sk(sk); + struct sk_buff *skb; ++#ifdef CONFIG_IPV6_STATISTICS ++ struct dst_entry *dst; ++ struct inet6_dev *idev = NULL; ++#endif + + while ((skb = __skb_dequeue_tail(&sk->sk_write_queue)) != NULL) { ++#ifdef CONFIG_IPV6_STATISTICS ++ dst = skb->dst; ++ idev = ((struct rt6_info *)dst)->rt6i_idev; ++ IP6_INC_STATS(idev, IPSTATS_MIB_OUTDISCARDS); ++#else + IP6_INC_STATS(IPSTATS_MIB_OUTDISCARDS); ++#endif + kfree_skb(skb); + } + +@@ -1185,6 +1337,7 @@ + if (np->cork.rt) { + dst_release(&np->cork.rt->u.dst); + np->cork.rt = NULL; ++ inet->cork.flags &= ~IPCORK_ALLFRAG; + } + memset(&inet->cork.fl, 0, sizeof(inet->cork.fl)); + } +diff -urN linux-2.6.11/net/ipv6/ip6_tunnel.c x1/net/ipv6/ip6_tunnel.c +--- linux-2.6.11/net/ipv6/ip6_tunnel.c 2005-03-02 08:37:48.000000000 +0100 ++++ x1/net/ipv6/ip6_tunnel.c 2005-02-18 10:36:26.000000000 +0100 +@@ -736,7 +736,7 @@ + dsfield = INET_ECN_encapsulate(0, dsfield); + ipv6_change_dsfield(ipv6h, ~INET_ECN_MASK, dsfield); + ipv6h->payload_len = htons(skb->len - sizeof(struct ipv6hdr)); +- ipv6h->hop_limit = t->parms.hop_limit; ++ ipv6h->hop_limit = t->parms.hop_limit; /*XXX use physical link's mtu */ + ipv6h->nexthdr = proto; + ipv6_addr_copy(&ipv6h->saddr, &fl.fl6_src); + ipv6_addr_copy(&ipv6h->daddr, &fl.fl6_dst); +diff -urN linux-2.6.11/net/ipv6/ip6mr.c x1/net/ipv6/ip6mr.c +--- linux-2.6.11/net/ipv6/ip6mr.c 1970-01-01 01:00:00.000000000 +0100 ++++ x1/net/ipv6/ip6mr.c 2005-02-09 16:31:39.000000000 +0100 +@@ -0,0 +1,1682 @@ ++/* ++ * Linux IPv6 multicast routing support for BSD pim6sd ++ * ++ * (c) 2004 Mickael Hoerdt, ++ * LSIIT Laboratory, Strasbourg, France ++ * (c) 2004 Jean-Philippe Andriot, ++ * 6WIND, Paris, France ++ * ++ * This program 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 ++ * 2 of the License, or (at your option) any later version. ++ * ++ * Version: $Id: ip6mr.c,v 1.1 2004/12/27 17:54:01 hoerdt Exp $ ++ * ++ * Fixes: ++ * Michael Chastain : Incorrect size of copying. ++ * Alan Cox : Added the cache manager code ++ * Alan Cox : Fixed the clone/copy bug and device race. ++ * Mike McLagan : Routing by source ++ * Malcolm Beattie : Buffer handling fixes. ++ * Alexey Kuznetsov : Double buffer free and other fixes. ++ * SVR Anand : Fixed several multicast bugs and problems. ++ * Alexey Kuznetsov : Status, optimisations and more. ++ * Brad Parker : Better behaviour on mrouted upcall ++ * overflow. ++ * Carlos Picoto : PIMv1 Support ++ * Pavlin Ivanov Radoslavov: PIMv2 Registers must checksum only PIM header ++ * Relax this requirement to work with older peers. ++ * Mickael Hoerdt and : IPv6 support based on linux/net/ipv4/ipmr.c [Linux 2.x] ++ * Jean-Philippe Andriot on netinet/ip6_mroute.c [*BSD] ++ * ++ */ ++ ++#include ++#include ++#include ++#include ++#include ++#include ++#include ++#include ++#include ++#include ++#include ++#include ++#include ++#include ++#include ++#include ++#include ++#include ++#include ++#include ++#include ++#include ++#include ++#include ++#include ++#include ++#include ++#include ++#include ++#include ++#include ++#include ++#include ++ ++ ++#include ++#include ++#include ++#include ++#include ++ ++struct sock *mroute6_socket; ++ ++ ++/* Big lock, protecting vif table, mrt cache and mroute socket state. ++ Note that the changes are semaphored via rtnl_lock. ++ */ ++ ++static rwlock_t mrt_lock = RW_LOCK_UNLOCKED; ++ ++/* ++ * Multicast router control variables ++ */ ++ ++static struct mif_device vif6_table[MAXMIFS]; /* Devices */ ++static int maxvif; ++ ++#define MIF_EXISTS(idx) (vif6_table[idx].dev != NULL) ++ ++static int mroute_do_assert; /* Set in PIM assert */ ++static int mroute_do_pim; ++ ++static struct mfc6_cache *mfc6_cache_array[MFC_LINES]; /* Forwarding cache */ ++ ++static struct mfc6_cache *mfc_unres_queue; /* Queue of unresolved entries */ ++static atomic_t cache_resolve_queue_len; /* Size of unresolved */ ++ ++/* Special spinlock for queue of unresolved entries */ ++static spinlock_t mfc_unres_lock = SPIN_LOCK_UNLOCKED; ++ ++/* We return to original Alan's scheme. Hash table of resolved ++ entries is changed only in process context and protected ++ with weak lock mrt_lock. Queue of unresolved entries is protected ++ with strong spinlock mfc_unres_lock. ++ ++ In this case data path is free of exclusive locks at all. ++ */ ++ ++static kmem_cache_t *mrt_cachep; ++ ++static int ip6_mr_forward(struct sk_buff *skb, struct mfc6_cache *cache, int local); ++static int ip6mr_cache_report(struct sk_buff *pkt, vifi_t vifi, int assert); ++static int ip6mr_fill_mroute(struct sk_buff *skb, struct mfc6_cache *c, struct rtmsg *rtm); ++ ++static struct inet6_protocol pim6_protocol; ++ ++static struct timer_list ipmr_expire_timer; ++ ++ ++#ifdef CONFIG_PROC_FS ++ ++struct ipmr_mfc_iter { ++ struct mfc6_cache **cache; ++ int ct; ++}; ++ ++ ++static struct mfc6_cache *ipmr_mfc_seq_idx(struct ipmr_mfc_iter *it, loff_t pos) ++{ ++ struct mfc6_cache *mfc; ++ ++ it->cache = mfc6_cache_array; ++ read_lock(&mrt_lock); ++ for (it->ct = 0; it->ct < MFC_LINES; it->ct++) ++ for(mfc = mfc6_cache_array[it->ct]; mfc; mfc = mfc->next) ++ if (pos-- == 0) ++ return mfc; ++ read_unlock(&mrt_lock); ++ ++ it->cache = &mfc_unres_queue; ++ spin_lock_bh(&mfc_unres_lock); ++ for(mfc = mfc_unres_queue; mfc; mfc = mfc->next) ++ if (pos-- == 0) ++ return mfc; ++ spin_unlock_bh(&mfc_unres_lock); ++ ++ it->cache = NULL; ++ return NULL; ++} ++ ++ ++ ++ ++/* ++ * The /proc interfaces to multicast routing /proc/ip6_mr_cache /proc/ip6_mr_vif ++ */ ++ ++struct ipmr_vif_iter { ++ int ct; ++}; ++ ++static struct mif_device *ip6mr_vif_seq_idx(struct ipmr_vif_iter *iter, ++ loff_t pos) ++{ ++ for (iter->ct = 0; iter->ct < maxvif; ++iter->ct) { ++ if(!MIF_EXISTS(iter->ct)) ++ continue; ++ if (pos-- == 0) ++ return &vif6_table[iter->ct]; ++ } ++ return NULL; ++} ++ ++static void *ip6mr_vif_seq_start(struct seq_file *seq, loff_t *pos) ++{ ++ read_lock(&mrt_lock); ++ return *pos ? ip6mr_vif_seq_idx(seq->private, *pos - 1) ++ : SEQ_START_TOKEN; ++} ++ ++static void *ip6mr_vif_seq_next(struct seq_file *seq, void *v, loff_t *pos) ++{ ++ struct ipmr_vif_iter *iter = seq->private; ++ ++ ++*pos; ++ if (v == SEQ_START_TOKEN) ++ return ip6mr_vif_seq_idx(iter, 0); ++ ++ while (++iter->ct < maxvif) { ++ if(!MIF_EXISTS(iter->ct)) ++ continue; ++ return &vif6_table[iter->ct]; ++ } ++ return NULL; ++} ++ ++static void ip6mr_vif_seq_stop(struct seq_file *seq, void *v) ++{ ++ read_unlock(&mrt_lock); ++} ++ ++static int ip6mr_vif_seq_show(struct seq_file *seq, void *v) ++{ ++ if (v == SEQ_START_TOKEN) { ++ seq_puts(seq, ++ "Interface BytesIn PktsIn BytesOut PktsOut Flags\n"); ++ } else { ++ const struct mif_device *vif = v; ++ const char *name = vif->dev ? vif->dev->name : "none"; ++ ++ seq_printf(seq, ++ "%2Zd %-10s %8ld %7ld %8ld %7ld %05X\n", ++ vif - vif6_table, ++ name, vif->bytes_in, vif->pkt_in, ++ vif->bytes_out, vif->pkt_out, ++ vif->flags); ++ } ++ return 0; ++} ++ ++static struct seq_operations ip6mr_vif_seq_ops = { ++ .start = ip6mr_vif_seq_start, ++ .next = ip6mr_vif_seq_next, ++ .stop = ip6mr_vif_seq_stop, ++ .show = ip6mr_vif_seq_show, ++}; ++ ++static int ip6mr_vif_open(struct inode *inode, struct file *file) ++{ ++ struct seq_file *seq; ++ int rc = -ENOMEM; ++ struct ipmr_vif_iter *s = kmalloc(sizeof(*s), GFP_KERNEL); ++ ++ if (!s) ++ goto out; ++ ++ rc = seq_open(file, &ip6mr_vif_seq_ops); ++ if (rc) ++ goto out_kfree; ++ ++ s->ct = 0; ++ seq = file->private_data; ++ seq->private = s; ++out: ++ return rc; ++out_kfree: ++ kfree(s); ++ goto out; ++ ++} ++ ++static struct file_operations ip6mr_vif_fops = { ++ .owner = THIS_MODULE, ++ .open = ip6mr_vif_open, ++ .read = seq_read, ++ .llseek = seq_lseek, ++ .release = seq_release, ++}; ++ ++static void *ipmr_mfc_seq_start(struct seq_file *seq, loff_t *pos) ++{ ++ return *pos ? ipmr_mfc_seq_idx(seq->private, *pos - 1) ++ : SEQ_START_TOKEN; ++} ++ ++static void *ipmr_mfc_seq_next(struct seq_file *seq, void *v, loff_t *pos) ++{ ++ struct mfc6_cache *mfc = v; ++ struct ipmr_mfc_iter *it = seq->private; ++ ++ ++*pos; ++ ++ if (v == SEQ_START_TOKEN) ++ return ipmr_mfc_seq_idx(seq->private, 0); ++ ++ if (mfc->next) ++ return mfc->next; ++ ++ if (it->cache == &mfc_unres_queue) ++ goto end_of_list; ++ ++ BUG_ON(it->cache != mfc6_cache_array); ++ ++ while (++it->ct < MFC_LINES) { ++ mfc = mfc6_cache_array[it->ct]; ++ if (mfc) ++ return mfc; ++ } ++ ++ /* exhausted cache_array, show unresolved */ ++ read_unlock(&mrt_lock); ++ it->cache = &mfc_unres_queue; ++ it->ct = 0; ++ ++ spin_lock_bh(&mfc_unres_lock); ++ mfc = mfc_unres_queue; ++ if (mfc) ++ return mfc; ++ ++ end_of_list: ++ spin_unlock_bh(&mfc_unres_lock); ++ it->cache = NULL; ++ ++ return NULL; ++} ++ ++static void ipmr_mfc_seq_stop(struct seq_file *seq, void *v) ++{ ++ struct ipmr_mfc_iter *it = seq->private; ++ ++ if (it->cache == &mfc_unres_queue) ++ spin_unlock_bh(&mfc_unres_lock); ++ else if (it->cache == mfc6_cache_array) ++ read_unlock(&mrt_lock); ++} ++ ++static int ipmr_mfc_seq_show(struct seq_file *seq, void *v) ++{ ++ int n; ++ ++ if (v == SEQ_START_TOKEN) { ++ seq_puts(seq, ++ "Group Origin Iif Pkts Bytes Wrong Oifs\n"); ++ } else { ++ const struct mfc6_cache *mfc = v; ++ const struct ipmr_mfc_iter *it = seq->private; ++ int i; ++ ++ for(i=0;i<16;i++) { ++ seq_printf(seq,"%02x",mfc->mf6c_mcastgrp.s6_addr[i]); ++ } ++ seq_printf(seq," "); ++ for(i=0;i<16;i++) { ++ seq_printf(seq,"%02x",mfc->mf6c_origin.s6_addr[i]); ++ } ++ seq_printf(seq," "); ++ ++ seq_printf(seq, "%-3d %8ld %8ld %8ld", ++ mfc->mf6c_parent, ++ mfc->mfc_un.res.pkt, ++ mfc->mfc_un.res.bytes, ++ mfc->mfc_un.res.wrong_if); ++ ++ if (it->cache != &mfc_unres_queue) { ++ for(n = mfc->mfc_un.res.minvif; ++ n < mfc->mfc_un.res.maxvif; n++ ) { ++ if(MIF_EXISTS(n) ++ && mfc->mfc_un.res.ttls[n] < 255) ++ seq_printf(seq, ++ " %2d:%-3d", ++ n, mfc->mfc_un.res.ttls[n]); ++ } ++ } ++ seq_putc(seq, '\n'); ++ } ++ return 0; ++} ++ ++static struct seq_operations ipmr_mfc_seq_ops = { ++ .start = ipmr_mfc_seq_start, ++ .next = ipmr_mfc_seq_next, ++ .stop = ipmr_mfc_seq_stop, ++ .show = ipmr_mfc_seq_show, ++}; ++ ++static int ipmr_mfc_open(struct inode *inode, struct file *file) ++{ ++ struct seq_file *seq; ++ int rc = -ENOMEM; ++ struct ipmr_mfc_iter *s = kmalloc(sizeof(*s), GFP_KERNEL); ++ ++ if (!s) ++ goto out; ++ ++ rc = seq_open(file, &ipmr_mfc_seq_ops); ++ if (rc) ++ goto out_kfree; ++ ++ memset(s, 0, sizeof(*s)); ++ seq = file->private_data; ++ seq->private = s; ++out: ++ return rc; ++out_kfree: ++ kfree(s); ++ goto out; ++ ++} ++ ++static struct file_operations ip6mr_mfc_fops = { ++ .owner = THIS_MODULE, ++ .open = ipmr_mfc_open, ++ .read = seq_read, ++ .llseek = seq_lseek, ++ .release = seq_release, ++}; ++#endif ++ ++#ifdef CONFIG_IPV6_PIMSM_V2 ++static int reg_vif_num = -1; ++ ++static int pim6_rcv(struct sk_buff **pskb,unsigned int *nhoffp) ++{ ++ struct pimreghdr *pim; ++ struct ipv6hdr *encap; ++ struct sk_buff *skb = *pskb; ++ struct net_device *reg_dev = NULL; ++ ++ if (!pskb_may_pull(skb, sizeof(*pim) + sizeof(*encap))) ++ goto drop; ++ ++ pim = (struct pimreghdr*)skb->h.raw; ++ if (pim->type != ((PIM_VERSION<<4)|(PIM_REGISTER)) || ++ (pim->flags&PIM_NULL_REGISTER) || ++ (ip_compute_csum((void *)pim, sizeof(*pim)) != 0 && ++ (u16)csum_fold(skb_checksum(skb, 0, skb->len, 0)))) ++ goto drop; ++ ++ /* check if the inner packet is destined to mcast group */ ++ encap = (struct ipv6hdr*)(skb->h.raw + sizeof(struct pimreghdr)); ++ ++ if(!(ipv6_addr_type(&encap->daddr)&IPV6_ADDR_MULTICAST) || ++ encap->payload_len == 0 || ++ ntohs(encap->payload_len) + sizeof(*pim) > skb->len) ++ goto drop; ++ ++ read_lock(&mrt_lock); ++ if (reg_vif_num >= 0) ++ reg_dev = vif6_table[reg_vif_num].dev; ++ if (reg_dev) ++ dev_hold(reg_dev); ++ read_unlock(&mrt_lock); ++ ++ if (reg_dev == NULL) ++ goto drop; ++ ++ skb->mac.raw = skb->nh.raw; ++ skb_pull(skb, (u8*)encap - skb->data); ++ skb->nh.ipv6h = (struct ipv6hdr *)skb->data; ++ skb->dev = reg_dev; ++ skb->protocol = htons(ETH_P_IP); ++ skb->ip_summed = 0; ++ skb->pkt_type = PACKET_HOST; ++ dst_release(skb->dst); ++ ((struct net_device_stats*)reg_dev->priv)->rx_bytes += skb->len; ++ ((struct net_device_stats*)reg_dev->priv)->rx_packets++; ++ skb->dst = NULL; ++#ifdef CONFIG_NETFILTER ++ nf_conntrack_put(skb->nfct); ++ skb->nfct = NULL; ++#endif ++ netif_rx(skb); ++ dev_put(reg_dev); ++ return 0; ++ drop: ++ kfree_skb(skb); ++ return 0; ++} ++ ++static struct inet6_protocol pim6_protocol = { ++ .handler = pim6_rcv, ++}; ++#endif ++ ++/* Service routines creating virtual interfaces: PIMREG */ ++#ifdef CONFIG_IPV6_PIMSM_V2 ++ ++ ++static int reg_vif_xmit(struct sk_buff *skb, struct net_device *dev) ++{ ++ read_lock(&mrt_lock); ++ ((struct net_device_stats*)dev->priv)->tx_bytes += skb->len; ++ ((struct net_device_stats*)dev->priv)->tx_packets++; ++ ip6mr_cache_report(skb, reg_vif_num, MRT6MSG_WHOLEPKT); ++ read_unlock(&mrt_lock); ++ kfree_skb(skb); ++ return 0; ++} ++ ++static struct net_device_stats *reg_vif_get_stats(struct net_device *dev) ++{ ++ return (struct net_device_stats*)dev->priv; ++} ++ ++static void reg_vif_setup(struct net_device *dev) ++{ ++ dev->type = ARPHRD_PIMREG; ++ dev->mtu = 1500 - sizeof(struct ipv6hdr) - 8; ++ dev->flags = IFF_NOARP; ++ dev->hard_start_xmit = reg_vif_xmit; ++ dev->get_stats = reg_vif_get_stats; ++ dev->destructor = free_netdev; ++} ++ ++static struct net_device *ip6mr_reg_vif(void) ++{ ++ struct net_device *dev; ++ struct inet6_dev *in_dev; ++ ++ dev = alloc_netdev(sizeof(struct net_device_stats), "pim6reg", ++ reg_vif_setup); ++ ++ if (dev == NULL) ++ return NULL; ++ ++ if (register_netdevice(dev)) { ++ free_netdev(dev); ++ return NULL; ++ } ++ dev->iflink = 0; ++ ++ if ((in_dev = ipv6_find_idev(dev)) == NULL) { ++ goto failure; ++ } ++ ++/* ++ * if ((in_dev = __in6_dev_get(dev)) == NULL) ++ goto failure; ++*/ ++#if 0 ++ in_dev->cnf.rp_filter = 0; ++#endif ++ ++ if (dev_open(dev)) ++ goto failure; ++ ++ return dev; ++ ++failure: ++ /* allow the register to be completed before unregistering. */ ++ rtnl_unlock(); ++ rtnl_lock(); ++ ++ unregister_netdevice(dev); ++ return NULL; ++} ++#endif ++ ++/* ++ * Delete a VIF entry ++ */ ++ ++static int mif6_delete(int vifi) ++{ ++ struct mif_device *v; ++ struct net_device *dev; ++ struct inet6_dev *in_dev; ++ ++ if (vifi < 0 || vifi >= maxvif) ++ return -EADDRNOTAVAIL; ++ ++ v = &vif6_table[vifi]; ++ ++ write_lock_bh(&mrt_lock); ++ dev = v->dev; ++ v->dev = NULL; ++ ++ if (!dev) { ++ write_unlock_bh(&mrt_lock); ++ return -EADDRNOTAVAIL; ++ } ++ ++#ifdef CONFIG_IPV6_PIMSM_V2 ++ if (vifi == reg_vif_num) ++ reg_vif_num = -1; ++#endif ++ ++ if (vifi+1 == maxvif) { ++ int tmp; ++ for (tmp=vifi-1; tmp>=0; tmp--) { ++ if (MIF_EXISTS(tmp)) ++ break; ++ } ++ maxvif = tmp+1; ++ } ++ ++ write_unlock_bh(&mrt_lock); ++ ++ dev_set_allmulti(dev, -1); ++ ++ if ((in_dev = __in6_dev_get(dev)) != NULL) { ++ in_dev->cnf.mc_forwarding--; ++ } ++ ++ if (v->flags&(MIFF_REGISTER)) ++ unregister_netdevice(dev); ++ ++ dev_put(dev); ++ return 0; ++} ++ ++/* Destroy an unresolved cache entry, killing queued skbs ++ and reporting error to netlink readers. ++ */ ++ ++static void ip6mr_destroy_unres(struct mfc6_cache *c) ++{ ++ struct sk_buff *skb; ++ ++ atomic_dec(&cache_resolve_queue_len); ++ ++ while((skb=skb_dequeue(&c->mfc_un.unres.unresolved))) { ++ if (skb->nh.ipv6h->version == 0) { ++ struct nlmsghdr *nlh = (struct nlmsghdr *)skb_pull(skb, sizeof(struct ipv6hdr)); ++ nlh->nlmsg_type = NLMSG_ERROR; ++ nlh->nlmsg_len = NLMSG_LENGTH(sizeof(struct nlmsgerr)); ++ skb_trim(skb, nlh->nlmsg_len); ++ ((struct nlmsgerr*)NLMSG_DATA(nlh))->error = -ETIMEDOUT; ++ netlink_unicast(rtnl, skb, NETLINK_CB(skb).dst_pid, MSG_DONTWAIT); ++ } else ++ kfree_skb(skb); ++ } ++ ++ kmem_cache_free(mrt_cachep, c); ++} ++ ++ ++/* Single timer process for all the unresolved queue. */ ++ ++static void ipmr_expire_process(unsigned long dummy) ++{ ++ unsigned long now; ++ unsigned long expires; ++ struct mfc6_cache *c, **cp; ++ ++ if (!spin_trylock(&mfc_unres_lock)) { ++ mod_timer(&ipmr_expire_timer, jiffies+HZ/10); ++ return; ++ } ++ ++ if (atomic_read(&cache_resolve_queue_len) == 0) ++ goto out; ++ ++ now = jiffies; ++ expires = 10*HZ; ++ cp = &mfc_unres_queue; ++ ++ while ((c=*cp) != NULL) { ++ if (time_after(c->mfc_un.unres.expires, now)) { ++ unsigned long interval = c->mfc_un.unres.expires - now; ++ if (interval < expires) ++ expires = interval; ++ cp = &c->next; ++ continue; ++ } ++ ++ *cp = c->next; ++ ++ ip6mr_destroy_unres(c); ++ } ++ ++ if (atomic_read(&cache_resolve_queue_len)) ++ mod_timer(&ipmr_expire_timer, jiffies + expires); ++ ++out: ++ spin_unlock(&mfc_unres_lock); ++} ++ ++/* Fill oifs list. It is called under write locked mrt_lock. */ ++ ++static void ip6mr_update_threshoulds(struct mfc6_cache *cache, unsigned char *ttls) ++{ ++ int vifi; ++ ++ cache->mfc_un.res.minvif = MAXVIFS; ++ cache->mfc_un.res.maxvif = 0; ++ memset(cache->mfc_un.res.ttls, 255, MAXVIFS); ++ ++ for (vifi=0; vifimfc_un.res.ttls[vifi] = ttls[vifi]; ++ if (cache->mfc_un.res.minvif > vifi) ++ cache->mfc_un.res.minvif = vifi; ++ if (cache->mfc_un.res.maxvif <= vifi) ++ cache->mfc_un.res.maxvif = vifi + 1; ++ } ++ } ++} ++ ++static int mif6_add(struct mif6ctl *vifc, int mrtsock) ++{ ++ int vifi = vifc->mif6c_mifi; ++ struct mif_device *v = &vif6_table[vifi]; ++ struct net_device *dev; ++ struct inet6_dev *in_dev; ++ ++ /* Is vif busy ? */ ++ if (MIF_EXISTS(vifi)) ++ return -EADDRINUSE; ++ ++ switch (vifc->mif6c_flags) { ++#ifdef CONFIG_IPV6_PIMSM_V2 ++ case MIFF_REGISTER: ++ /* ++ * Special Purpose VIF in PIM ++ * All the packets will be sent to the daemon ++ */ ++ if (reg_vif_num >= 0) ++ return -EADDRINUSE; ++ dev = ip6mr_reg_vif(); ++ if (!dev) ++ return -ENOBUFS; ++ break; ++#endif ++ case 0: ++ dev=dev_get_by_index(vifc->mif6c_pifi); ++ if (!dev) ++ return -EADDRNOTAVAIL; ++ __dev_put(dev); ++ break; ++ default: ++ return -EINVAL; ++ } ++ ++ if ((in_dev = __in6_dev_get(dev)) == NULL) ++ return -EADDRNOTAVAIL; ++ in_dev->cnf.mc_forwarding++; ++ dev_set_allmulti(dev, +1); ++ ++ /* ++ * Fill in the VIF structures ++ */ ++ v->rate_limit=vifc->vifc_rate_limit; ++ v->flags=vifc->mif6c_flags; ++ if(!mrtsock) ++ v->flags |= VIFF_STATIC; ++ v->threshold=vifc->vifc_threshold; ++ v->bytes_in = 0; ++ v->bytes_out = 0; ++ v->pkt_in = 0; ++ v->pkt_out = 0; ++ v->link = dev->ifindex; ++ if (v->flags&(MIFF_REGISTER)) ++ v->link = dev->iflink; ++ ++ /* And finish update writing critical data */ ++ write_lock_bh(&mrt_lock); ++ dev_hold(dev); ++ v->dev=dev; ++#ifdef CONFIG_IPV6_PIMSM_V2 ++ if (v->flags&MIFF_REGISTER) ++ reg_vif_num = vifi; ++#endif ++ if (vifi+1 > maxvif) ++ maxvif = vifi+1; ++ write_unlock_bh(&mrt_lock); ++ return 0; ++} ++ ++static struct mfc6_cache *ip6mr_cache_find(struct in6_addr origin,struct in6_addr mcastgrp) ++{ ++ int line=MFC6_HASH(mcastgrp,origin); ++ struct mfc6_cache *c; ++ ++ for (c=mfc6_cache_array[line]; c; c = c->next) { ++ if (IN6_ARE_ADDR_EQUAL(&c->mf6c_origin,&origin) && ++ IN6_ARE_ADDR_EQUAL(&c->mf6c_mcastgrp,&mcastgrp)) ++ break; ++ } ++ return c; ++} ++ ++/* ++ * Allocate a multicast cache entry ++ */ ++static struct mfc6_cache *ip6mr_cache_alloc(void) ++{ ++ struct mfc6_cache *c=kmem_cache_alloc(mrt_cachep, GFP_KERNEL); ++ if(c==NULL) ++ return NULL; ++ memset(c, 0, sizeof(*c)); ++ c->mfc_un.res.minvif = MAXVIFS; ++ return c; ++} ++ ++static struct mfc6_cache *ip6mr_cache_alloc_unres(void) ++{ ++ struct mfc6_cache *c=kmem_cache_alloc(mrt_cachep, GFP_ATOMIC); ++ if(c==NULL) ++ return NULL; ++ memset(c, 0, sizeof(*c)); ++ skb_queue_head_init(&c->mfc_un.unres.unresolved); ++ c->mfc_un.unres.expires = jiffies + 10*HZ; ++ return c; ++} ++ ++/* ++ * A cache entry has gone into a resolved state from queued ++ */ ++ ++static void ip6mr_cache_resolve(struct mfc6_cache *uc, struct mfc6_cache *c) ++{ ++ struct sk_buff *skb; ++ ++ /* ++ * Play the pending entries through our router ++ */ ++ ++ while((skb=__skb_dequeue(&uc->mfc_un.unres.unresolved))) { ++ if (skb->nh.ipv6h->version == 0) { ++ int err; ++ struct nlmsghdr *nlh = (struct nlmsghdr *)skb_pull(skb, sizeof(struct ipv6hdr)); ++ ++ if (ip6mr_fill_mroute(skb, c, NLMSG_DATA(nlh)) > 0) { ++ nlh->nlmsg_len = skb->tail - (u8*)nlh; ++ } else { ++ nlh->nlmsg_type = NLMSG_ERROR; ++ nlh->nlmsg_len = NLMSG_LENGTH(sizeof(struct nlmsgerr)); ++ skb_trim(skb, nlh->nlmsg_len); ++ ((struct nlmsgerr*)NLMSG_DATA(nlh))->error = -EMSGSIZE; ++ } ++ err = netlink_unicast(rtnl, skb, NETLINK_CB(skb).dst_pid, MSG_DONTWAIT); ++ } else ++ ip6_mr_forward(skb, c, 0); ++ } ++} ++ ++/* ++ * Bounce a cache query up to pim6sd. We could use netlink for this but pim6sd ++ * expects the following bizarre scheme. ++ * ++ * Called under mrt_lock. ++ */ ++ ++static int ip6mr_cache_report(struct sk_buff *pkt, vifi_t vifi, int assert) ++{ ++ struct sk_buff *skb; ++ struct mrt6msg *msg; ++ int ret; ++ ++#ifdef CONFIG_IPV6_PIMSM_V2 ++ if (assert == MRT6MSG_WHOLEPKT) ++ skb = skb_realloc_headroom(pkt, sizeof(struct ipv6hdr)); ++ else ++#endif ++ skb = alloc_skb(128, GFP_ATOMIC); ++ ++ if(!skb) ++ return -ENOBUFS; ++ ++ /* I suppose that internal messages ++ * do not require checksums */ ++ ++ skb->ip_summed = CHECKSUM_UNNECESSARY; ++ ++#ifdef CONFIG_IPV6_PIMSM_V2 ++ if (assert == MRT6MSG_WHOLEPKT) { ++ /* Ugly, but we have no choice with this interface. ++ Duplicate old header, fix length etc. ++ And all this only to mangle msg->im6_msgtype and ++ to set msg->im6_mbz to "mbz" :-) ++ */ ++ msg = (struct mrt6msg*)skb_push(skb, sizeof(struct ipv6hdr)); ++ skb->nh.raw = skb->h.raw = (u8*)msg; ++ memcpy(msg, pkt->nh.raw, sizeof(struct ipv6hdr)); ++ msg->im6_msgtype = MRT6MSG_WHOLEPKT; ++ msg->im6_mbz = 0; ++ msg->im6_mif = reg_vif_num; ++ } else ++#endif ++ { ++ ++ /* ++ * Copy the IP header ++ */ ++ ++ skb->nh.ipv6h = (struct ipv6hdr *)skb_put(skb, sizeof(struct ipv6hdr)); ++ memcpy(skb->data,pkt->data,sizeof(struct ipv6hdr)); ++ ++ msg = (struct mrt6msg*)skb->nh.ipv6h; ++ skb->dst = dst_clone(pkt->dst); ++ ++ /* ++ * Add our header ++ */ ++ ++ msg->im6_msgtype = assert; ++ msg->im6_mbz = 0; ++ msg->im6_mif = vifi; ++ skb->h.raw = skb->nh.raw; ++ } ++ ++ if (mroute6_socket == NULL) { ++ kfree_skb(skb); ++ return -EINVAL; ++ } ++ ++ /* ++ * Deliver to user space multicast routing algorithms ++ */ ++ if ((ret=sock_queue_rcv_skb(mroute6_socket,skb))<0) { ++ if (net_ratelimit()) ++ printk(KERN_WARNING "mroute6: pending queue full, dropping entries.\n"); ++ kfree_skb(skb); ++ } ++ ++ return ret; ++} ++ ++/* ++ * Queue a packet for resolution. It gets locked cache entry! ++ */ ++ ++static int ++ip6mr_cache_unresolved(vifi_t vifi, struct sk_buff *skb) ++{ ++ int err; ++ struct mfc6_cache *c; ++ ++ spin_lock_bh(&mfc_unres_lock); ++ for (c=mfc_unres_queue; c; c=c->next) { ++ if (IN6_ARE_ADDR_EQUAL(&c->mf6c_mcastgrp,&skb->nh.ipv6h->daddr) && ++ IN6_ARE_ADDR_EQUAL(&c->mf6c_origin,&skb->nh.ipv6h->saddr)) ++ break; ++ } ++ ++ if (c == NULL) { ++ /* ++ * Create a new entry if allowable ++ */ ++ ++ if (atomic_read(&cache_resolve_queue_len)>=10 || ++ (c=ip6mr_cache_alloc_unres())==NULL) { ++ spin_unlock_bh(&mfc_unres_lock); ++ ++ kfree_skb(skb); ++ return -ENOBUFS; ++ } ++ ++ /* ++ * Fill in the new cache entry ++ */ ++ c->mf6c_parent=-1; ++ c->mf6c_origin=skb->nh.ipv6h->saddr; ++ c->mf6c_mcastgrp=skb->nh.ipv6h->daddr; ++ ++ /* ++ * Reflect first query at pim6sd ++ */ ++ if ((err = ip6mr_cache_report(skb, vifi, MRT6MSG_NOCACHE))<0) { ++ /* If the report failed throw the cache entry ++ out - Brad Parker ++ */ ++ spin_unlock_bh(&mfc_unres_lock); ++ ++ kmem_cache_free(mrt_cachep, c); ++ kfree_skb(skb); ++ return err; ++ } ++ ++ atomic_inc(&cache_resolve_queue_len); ++ c->next = mfc_unres_queue; ++ mfc_unres_queue = c; ++ ++ mod_timer(&ipmr_expire_timer, c->mfc_un.unres.expires); ++ } ++ ++ /* ++ * See if we can append the packet ++ */ ++ if (c->mfc_un.unres.unresolved.qlen>3) { ++ kfree_skb(skb); ++ err = -ENOBUFS; ++ } else { ++ skb_queue_tail(&c->mfc_un.unres.unresolved,skb); ++ err = 0; ++ } ++ ++ spin_unlock_bh(&mfc_unres_lock); ++ return err; ++} ++ ++/* ++ * MFC6 cache manipulation by user space ++ */ ++ ++static int ip6mr_mfc_delete(struct mf6cctl *mfc) ++{ ++ int line; ++ struct mfc6_cache *c, **cp; ++ ++ line=MFC6_HASH(mfc->mf6cc_mcastgrp.sin6_addr, mfc->mf6cc_origin.sin6_addr); ++ ++ for (cp=&mfc6_cache_array[line]; (c=*cp) != NULL; cp = &c->next) { ++ if (IN6_ARE_ADDR_EQUAL(&c->mf6c_origin,&mfc->mf6cc_origin.sin6_addr) && ++ IN6_ARE_ADDR_EQUAL(&c->mf6c_mcastgrp,&mfc->mf6cc_mcastgrp.sin6_addr)) { ++ write_lock_bh(&mrt_lock); ++ *cp = c->next; ++ write_unlock_bh(&mrt_lock); ++ ++ kmem_cache_free(mrt_cachep, c); ++ return 0; ++ } ++ } ++ return -ENOENT; ++} ++ ++static int ip6mr_device_event(struct notifier_block *this, unsigned long event, void *ptr) ++{ ++ struct mif_device *v; ++ int ct; ++ if (event != NETDEV_UNREGISTER) ++ return NOTIFY_DONE; ++ v=&vif6_table[0]; ++ for(ct=0;ctdev==ptr) ++ mif6_delete(ct); ++ } ++ return NOTIFY_DONE; ++} ++ ++static struct notifier_block ip6_mr_notifier = { ++ .notifier_call = ip6mr_device_event ++}; ++ ++/* ++ * Setup for IP multicast routing ++ */ ++ ++void __init ip6_mr_init(void) ++{ ++ printk(KERN_INFO "6WIND/LSIIT IPv6 multicast forwarding 0.1 plus PIM-SM/SSM with *BSD API\n"); ++ ++ mrt_cachep = kmem_cache_create("ip6_mrt_cache", ++ sizeof(struct mfc6_cache), ++ 0, SLAB_HWCACHE_ALIGN, ++ NULL, NULL); ++ if (!mrt_cachep) ++ panic("cannot allocate ip_mrt_cache"); ++ ++ init_timer(&ipmr_expire_timer); ++ ipmr_expire_timer.function=ipmr_expire_process; ++ register_netdevice_notifier(&ip6_mr_notifier); ++#ifdef CONFIG_PROC_FS ++ proc_net_fops_create("ip6_mr_vif", 0, &ip6mr_vif_fops); ++ proc_net_fops_create("ip6_mr_cache", 0, &ip6mr_mfc_fops); ++#endif ++} ++ ++ ++static int ip6mr_mfc_add(struct mf6cctl *mfc, int mrtsock) ++{ ++ int line; ++ struct mfc6_cache *uc, *c, **cp; ++ unsigned char ttls[MAXVIFS]; ++ int i; ++ ++ memset(ttls, 255, MAXVIFS); ++ for(i=0;imf6cc_ifset)) ++ ttls[i]=1; ++ ++ } ++ ++ line=MFC6_HASH(mfc->mf6cc_mcastgrp.sin6_addr, mfc->mf6cc_origin.sin6_addr); ++ ++ for (cp=&mfc6_cache_array[line]; (c=*cp) != NULL; cp = &c->next) { ++ if (IN6_ARE_ADDR_EQUAL(&c->mf6c_origin,&mfc->mf6cc_origin.sin6_addr) && ++ IN6_ARE_ADDR_EQUAL(&c->mf6c_mcastgrp,&mfc->mf6cc_mcastgrp.sin6_addr)) ++ break; ++ } ++ ++ if (c != NULL) { ++ write_lock_bh(&mrt_lock); ++ c->mf6c_parent = mfc->mf6cc_parent; ++ ip6mr_update_threshoulds(c, ttls); ++ if (!mrtsock) ++ c->mfc_flags |= MFC_STATIC; ++ write_unlock_bh(&mrt_lock); ++ return 0; ++ } ++ ++ if(!(ipv6_addr_type(&mfc->mf6cc_mcastgrp.sin6_addr)&IPV6_ADDR_MULTICAST)) ++ return -EINVAL; ++ ++ c=ip6mr_cache_alloc(); ++ if (c==NULL) ++ return -ENOMEM; ++ ++ c->mf6c_origin=mfc->mf6cc_origin.sin6_addr; ++ c->mf6c_mcastgrp=mfc->mf6cc_mcastgrp.sin6_addr; ++ c->mf6c_parent=mfc->mf6cc_parent; ++ ip6mr_update_threshoulds(c, ttls); ++ if (!mrtsock) ++ c->mfc_flags |= MFC_STATIC; ++ ++ write_lock_bh(&mrt_lock); ++ c->next = mfc6_cache_array[line]; ++ mfc6_cache_array[line] = c; ++ write_unlock_bh(&mrt_lock); ++ ++ /* ++ * Check to see if we resolved a queued list. If so we ++ * need to send on the frames and tidy up. ++ */ ++ spin_lock_bh(&mfc_unres_lock); ++ for (cp = &mfc_unres_queue; (uc=*cp) != NULL; ++ cp = &uc->next) { ++ if (IN6_ARE_ADDR_EQUAL(&uc->mf6c_origin,&c->mf6c_origin) && ++ IN6_ARE_ADDR_EQUAL(&uc->mf6c_mcastgrp,&c->mf6c_mcastgrp)) { ++ *cp = uc->next; ++ if (atomic_dec_and_test(&cache_resolve_queue_len)) ++ del_timer(&ipmr_expire_timer); ++ break; ++ } ++ } ++ spin_unlock_bh(&mfc_unres_lock); ++ ++ if (uc) { ++ ip6mr_cache_resolve(uc, c); ++ kmem_cache_free(mrt_cachep, uc); ++ } ++ return 0; ++} ++ ++/* ++ * Close the multicast socket, and clear the vif tables etc ++ */ ++ ++static void mroute_clean_tables(struct sock *sk) ++{ ++ int i; ++ ++ /* ++ * Shut down all active vif entries ++ */ ++ for(i=0; imfc_flags&MFC_STATIC) { ++ cp = &c->next; ++ continue; ++ } ++ write_lock_bh(&mrt_lock); ++ *cp = c->next; ++ write_unlock_bh(&mrt_lock); ++ ++ kmem_cache_free(mrt_cachep, c); ++ } ++ } ++ ++ if (atomic_read(&cache_resolve_queue_len) != 0) { ++ struct mfc6_cache *c; ++ ++ spin_lock_bh(&mfc_unres_lock); ++ while (mfc_unres_queue != NULL) { ++ c = mfc_unres_queue; ++ mfc_unres_queue = c->next; ++ spin_unlock_bh(&mfc_unres_lock); ++ ++ ip6mr_destroy_unres(c); ++ ++ spin_lock_bh(&mfc_unres_lock); ++ } ++ spin_unlock_bh(&mfc_unres_lock); ++ } ++} ++ ++static void mrtsock_destruct(struct sock *sk) ++{ ++ rtnl_lock(); ++ if (sk == mroute6_socket) { ++ ipv6_devconf.mc_forwarding--; ++ ++ write_lock_bh(&mrt_lock); ++ mroute6_socket=NULL; ++ write_unlock_bh(&mrt_lock); ++ ++ mroute_clean_tables(sk); ++ } ++ rtnl_unlock(); ++} ++ ++/* ++ * Socket options and virtual interface manipulation. The whole ++ * virtual interface system is a complete heap, but unfortunately ++ * that's how BSD mrouted happens to think. Maybe one day with a proper ++ * MOSPF/PIM router set up we can clean this up. ++ */ ++ ++int ip6_mroute_setsockopt(struct sock *sk,int optname,char __user *optval,int optlen) ++{ ++ int ret; ++ struct mif6ctl vif; ++ struct mf6cctl mfc; ++ mifi_t mifi; ++ ++ if(optname!=MRT6_INIT) ++ { ++ if(sk!=mroute6_socket && !capable(CAP_NET_ADMIN)) ++ return -EACCES; ++ } ++ ++ switch(optname) ++ { ++ case MRT6_INIT: ++ if (sk->sk_type != SOCK_RAW || ++ inet_sk(sk)->num != IPPROTO_ICMPV6) ++ return -EOPNOTSUPP; ++ if(optlen!=sizeof(int)) ++ return -ENOPROTOOPT; ++ ++ rtnl_lock(); ++ if (mroute6_socket) { ++ rtnl_unlock(); ++ return -EADDRINUSE; ++ } ++ ++ ret = ip6_ra_control(sk, 1, mrtsock_destruct); ++ if (ret == 0) { ++ write_lock_bh(&mrt_lock); ++ mroute6_socket=sk; ++ write_unlock_bh(&mrt_lock); ++ ++ ipv6_devconf.mc_forwarding++; ++ } ++ rtnl_unlock(); ++ return ret; ++ case MRT6_DONE: ++ if (sk!=mroute6_socket) ++ return -EACCES; ++ return ip6_ra_control(sk, -1, NULL); ++ case MRT6_ADD_MIF: ++ if(optlen!=sizeof(vif)) ++ return -EINVAL; ++ if (copy_from_user(&vif,optval,sizeof(vif))) ++ return -EFAULT; ++ if(vif.mif6c_mifi >= MAXVIFS) ++ return -ENFILE; ++ rtnl_lock(); ++ ret = mif6_add(&vif, sk==mroute6_socket); ++ rtnl_unlock(); ++ return ret; ++ case MRT6_DEL_MIF: ++ if(optlen!=sizeof(mifi_t)) ++ return -EINVAL; ++ if (copy_from_user(&mifi,optval,sizeof(mifi_t))) ++ return -EFAULT; ++ rtnl_lock(); ++ ret = mif6_delete(mifi); ++ rtnl_unlock(); ++ return ret; ++ ++ /* ++ * Manipulate the forwarding caches. These live ++ * in a sort of kernel/user symbiosis. ++ */ ++ case MRT6_ADD_MFC: ++ case MRT6_DEL_MFC: ++ if(optlen!=sizeof(mfc)) ++ return -EINVAL; ++ if (copy_from_user(&mfc,optval, sizeof(mfc))) ++ return -EFAULT; ++ rtnl_lock(); ++ if (optname==MRT6_DEL_MFC) ++ ret = ip6mr_mfc_delete(&mfc); ++ else ++ ret = ip6mr_mfc_add(&mfc, sk==mroute6_socket); ++ rtnl_unlock(); ++ return ret; ++ /* ++ * Control PIM assert (to activate pim will activate assert) ++ */ ++ case MRT6_ASSERT: ++ { ++ int v; ++ if(get_user(v,(int __user *)optval)) ++ return -EFAULT; ++ mroute_do_assert=(v)?1:0; ++ return 0; ++ } ++#ifdef CONFIG_IPV6_PIMSM_V2 ++ case MRT6_PIM: ++ { ++ int v, ret; ++ if(get_user(v,(int __user *)optval)) ++ return -EFAULT; ++ v = (v)?1:0; ++ rtnl_lock(); ++ ret = 0; ++ if (v != mroute_do_pim) { ++ mroute_do_pim = v; ++ mroute_do_assert = v; ++ if (mroute_do_pim) ++ ret = inet6_add_protocol(&pim6_protocol, ++ IPPROTO_PIM); ++ else ++ ret = inet6_del_protocol(&pim6_protocol, ++ IPPROTO_PIM); ++ if (ret < 0) ++ ret = -EAGAIN; ++ } ++ rtnl_unlock(); ++ return ret; ++ } ++#endif ++ /* ++ * Spurious command, or MRT_VERSION which you cannot ++ * set. ++ */ ++ default: ++ return -ENOPROTOOPT; ++ } ++} ++ ++/* ++ * Getsock opt support for the multicast routing system. ++ */ ++ ++int ip6_mroute_getsockopt(struct sock *sk,int optname,char __user *optval,int __user *optlen) ++{ ++ int olr; ++ int val; ++ ++ if(optname!=MRT6_VERSION && ++#ifdef CONFIG_IPV6_PIMSM_V2 ++ optname!=MRT6_PIM && ++#endif ++ optname!=MRT6_ASSERT) ++ return -ENOPROTOOPT; ++ ++ if (get_user(olr, optlen)) ++ return -EFAULT; ++ ++ olr = min_t(unsigned int, olr, sizeof(int)); ++ if (olr < 0) ++ return -EINVAL; ++ ++ if(put_user(olr,optlen)) ++ return -EFAULT; ++ if(optname==MRT6_VERSION) ++ val=0x0305; ++#ifdef CONFIG_IPV6_PIMSM_V2 ++ else if(optname==MRT6_PIM) ++ val=mroute_do_pim; ++#endif ++ else ++ val=mroute_do_assert; ++ if(copy_to_user(optval,&val,olr)) ++ return -EFAULT; ++ return 0; ++} ++ ++/* ++ * The IP multicast ioctl support routines. ++ */ ++ ++int ip6mr_ioctl(struct sock *sk, int cmd, void __user *arg) ++{ ++ struct sioc_sg_req6 sr; ++ struct sioc_mif_req6 vr; ++ struct mif_device *vif; ++ struct mfc6_cache *c; ++ ++ switch(cmd) ++ { ++ case SIOCGETMIFCNT_IN6: ++ if (copy_from_user(&vr,arg,sizeof(vr))) ++ return -EFAULT; ++ if(vr.mifi>=maxvif) ++ return -EINVAL; ++ read_lock(&mrt_lock); ++ vif=&vif6_table[vr.mifi]; ++ if(MIF_EXISTS(vr.mifi)) { ++ vr.icount=vif->pkt_in; ++ vr.ocount=vif->pkt_out; ++ vr.ibytes=vif->bytes_in; ++ vr.obytes=vif->bytes_out; ++ read_unlock(&mrt_lock); ++ ++ if (copy_to_user(arg,&vr,sizeof(vr))) ++ return -EFAULT; ++ return 0; ++ } ++ read_unlock(&mrt_lock); ++ return -EADDRNOTAVAIL; ++ case SIOCGETSGCNT_IN6: ++ if (copy_from_user(&sr,arg,sizeof(sr))) ++ return -EFAULT; ++ ++ read_lock(&mrt_lock); ++ c = ip6mr_cache_find(sr.src.sin6_addr, sr.grp.sin6_addr); ++ if (c) { ++ sr.pktcnt = c->mfc_un.res.pkt; ++ sr.bytecnt = c->mfc_un.res.bytes; ++ sr.wrong_if = c->mfc_un.res.wrong_if; ++ read_unlock(&mrt_lock); ++ ++ if (copy_to_user(arg,&sr,sizeof(sr))) ++ return -EFAULT; ++ return 0; ++ } ++ read_unlock(&mrt_lock); ++ return -EADDRNOTAVAIL; ++ default: ++ return -ENOIOCTLCMD; ++ } ++} ++ ++ ++static inline int ip6mr_forward_finish(struct sk_buff *skb) ++{ ++#ifdef notyet ++ struct ip_options * opt = &(IP6CB(skb)->opt); ++ ++ IP_INC_STATS_BH(OutForwDatagrams); ++ ++ if (unlikely(opt->optlen)) ++ ip_forward_options(skb); ++#endif ++ ++ return dst_output(skb); ++} ++ ++/* ++ * Processing handlers for ip6mr_forward ++ */ ++ ++static void ip6mr_queue_xmit(struct sk_buff *skb, struct mfc6_cache *c, int vifi) ++{ ++ struct ipv6hdr *ipv6h = skb->nh.ipv6h; ++ struct mif_device *vif = &vif6_table[vifi]; ++ struct net_device *dev; ++#if 0 ++ struct rtable *rt; ++ int encap = 0; ++#endif ++ struct in6_addr *snd_addr=&ipv6h->daddr; ++ int full_len = skb->len; ++ ++ if (vif->dev == NULL) ++ goto out_free; ++ ++#ifdef CONFIG_IPV6_PIMSM_V2 ++ if (vif->flags & MIFF_REGISTER) { ++ vif->pkt_out++; ++ vif->bytes_out+=skb->len; ++ ((struct net_device_stats*)vif->dev->priv)->tx_bytes += skb->len; ++ ((struct net_device_stats*)vif->dev->priv)->tx_packets++; ++ ip6mr_cache_report(skb, vifi, MRT6MSG_WHOLEPKT); ++ kfree_skb(skb); ++ return; ++ } ++#endif ++ /* ++ * RFC1584 teaches, that DVMRP/PIM router must deliver packets locally ++ * not only before forwarding, but after forwarding on all output ++ * interfaces. It is clear, if mrouter runs a multicasting ++ * program, it should receive packets not depending to what interface ++ * program is joined. ++ * If we will not make it, the program will have to join on all ++ * interfaces. On the other hand, multihoming host (or router, but ++ * not mrouter) cannot join to more than one interface - it will ++ * result in receiving multiple packets. ++ */ ++ dev = vif->dev; ++ skb->dev=dev; ++ vif->pkt_out++; ++ vif->bytes_out+=skb->len; ++ ++ ipv6h = skb->nh.ipv6h; ++ ++ ipv6h->hop_limit--; ++ ++ if(dev->hard_header) { ++ unsigned char ha[MAX_ADDR_LEN]; ++ ndisc_mc_map(snd_addr,ha,dev,1); ++ if(dev->hard_header(skb,dev, ETH_P_IPV6,ha,NULL,full_len) < 0) ++ goto out_free; ++ } ++ ++ NF_HOOK(PF_INET6, NF_IP6_LOCAL_OUT, skb, skb->dev, dev, ++ dev_queue_xmit); ++/* NF_HOOK(PF_INET6, NF_IP6_POST_ROUTING, skb, skb->dev, dev, ++ ip6mr_forward_finish); ++*/ ++ ++ ++ /* NF_HOOK(PF_INET6, NF_IP6_FORWARD, skb, skb->dev, dev, ++ ip6mr_forward_finish); ++ */ ++ return; ++ /* XXX */ ++ ++out_free: ++ kfree_skb(skb); ++ return; ++} ++ ++static int ip6mr_find_vif(struct net_device *dev) ++{ ++ int ct; ++ for (ct=maxvif-1; ct>=0; ct--) { ++ if (vif6_table[ct].dev == dev) ++ break; ++ } ++ return ct; ++} ++ ++static int ip6_mr_forward(struct sk_buff *skb, struct mfc6_cache *cache, int local) ++{ ++ int psend = -1; ++ int vif, ct; ++ ++ vif = cache->mf6c_parent; ++ cache->mfc_un.res.pkt++; ++ cache->mfc_un.res.bytes += skb->len; ++ ++ /* ++ * Wrong interface: drop packet and (maybe) send PIM assert. ++ */ ++ if (vif6_table[vif].dev != skb->dev) { ++ int true_vifi; ++ ++ if (((struct rtable*)skb->dst)->fl.iif == 0) { ++ /* It is our own packet, looped back. ++ Very complicated situation... ++ ++ The best workaround until routing daemons will be ++ fixed is not to redistribute packet, if it was ++ send through wrong interface. It means, that ++ multicast applications WILL NOT work for ++ (S,G), which have default multicast route pointing ++ to wrong oif. In any case, it is not a good ++ idea to use multicasting applications on router. ++ */ ++ goto dont_forward; ++ } ++ ++ cache->mfc_un.res.wrong_if++; ++ true_vifi = ip6mr_find_vif(skb->dev); ++ ++ if (true_vifi >= 0 && mroute_do_assert && ++ /* pimsm uses asserts, when switching from RPT to SPT, ++ so that we cannot check that packet arrived on an oif. ++ It is bad, but otherwise we would need to move pretty ++ large chunk of pimd to kernel. Ough... --ANK ++ */ ++ (mroute_do_pim || cache->mfc_un.res.ttls[true_vifi] < 255) && ++ time_after(jiffies, ++ cache->mfc_un.res.last_assert + MFC_ASSERT_THRESH)) { ++ cache->mfc_un.res.last_assert = jiffies; ++ ip6mr_cache_report(skb, true_vifi, MRT6MSG_WRONGMIF); ++ } ++ goto dont_forward; ++ } ++ ++ vif6_table[vif].pkt_in++; ++ vif6_table[vif].bytes_in+=skb->len; ++ ++ /* ++ * Forward the frame ++ */ ++ for (ct = cache->mfc_un.res.maxvif-1; ct >= cache->mfc_un.res.minvif; ct--) { ++ if (skb->nh.ipv6h->hop_limit > cache->mfc_un.res.ttls[ct]) { ++ struct ipv6hdr *ipv6h = skb->nh.ipv6h; ++ if (psend != -1) { ++ struct sk_buff *skb2 = skb_clone(skb, GFP_ATOMIC); ++ if (skb2) { ++ ip6mr_queue_xmit(skb2, cache, psend); ++ ipv6h->hop_limit++; ++ } ++ } ++ psend=ct; ++ } ++ } ++ if (psend != -1) { ++ struct ipv6hdr *ipv6h = skb->nh.ipv6h; ++ if (local) { ++ struct sk_buff *skb2 = skb_clone(skb, GFP_ATOMIC); ++ if (skb2) { ++ ip6mr_queue_xmit(skb2, cache, psend); ++ ipv6h->hop_limit++; ++ } ++ } else { ++ ip6mr_queue_xmit(skb, cache, psend); ++ ipv6h->hop_limit++; ++ return 0; ++ } ++ } ++ ++dont_forward: ++ if (!local) ++ kfree_skb(skb); ++ return 0; ++} ++ ++ ++/* ++ * Multicast packets for forwarding arrive here ++ */ ++ ++int ip6_mr_input(struct sk_buff *skb) ++{ ++ struct mfc6_cache *cache; ++ int local = ((struct rt6_info*)skb->dst)->rt6i_flags&RTCF_LOCAL; ++#if 0 ++ IP6CB(skb)->flags = 0; ++#endif ++ ++ read_lock(&mrt_lock); ++ cache = ip6mr_cache_find(skb->nh.ipv6h->saddr, skb->nh.ipv6h->daddr); ++ ++ /* ++ * No usable cache entry ++ */ ++ if (cache==NULL) { ++ int vif; ++ ++ vif = ip6mr_find_vif(skb->dev); ++ if (vif >= 0) { ++ int err = ip6mr_cache_unresolved(vif, skb); ++ read_unlock(&mrt_lock); ++ ++ return err; ++ } ++ read_unlock(&mrt_lock); ++ kfree_skb(skb); ++ return -ENODEV; ++ } ++ ++ ip6_mr_forward(skb, cache, local); ++ ++ read_unlock(&mrt_lock); ++ ++ return 0; ++#if 0 ++dont_forward: ++ kfree_skb(skb); ++ return 0; ++#endif ++} ++ ++ ++static int ++ip6mr_fill_mroute(struct sk_buff *skb, struct mfc6_cache *c, struct rtmsg *rtm) ++{ ++ int ct; ++ struct rtnexthop *nhp; ++ struct net_device *dev = vif6_table[c->mf6c_parent].dev; ++ u8 *b = skb->tail; ++ struct rtattr *mp_head; ++ ++ if (dev) ++ RTA_PUT(skb, RTA_IIF, 4, &dev->ifindex); ++ ++ mp_head = (struct rtattr*)skb_put(skb, RTA_LENGTH(0)); ++ ++ for (ct = c->mfc_un.res.minvif; ct < c->mfc_un.res.maxvif; ct++) { ++ if (c->mfc_un.res.ttls[ct] < 255) { ++ if (skb_tailroom(skb) < RTA_ALIGN(RTA_ALIGN(sizeof(*nhp)) + 4)) ++ goto rtattr_failure; ++ nhp = (struct rtnexthop*)skb_put(skb, RTA_ALIGN(sizeof(*nhp))); ++ nhp->rtnh_flags = 0; ++ nhp->rtnh_hops = c->mfc_un.res.ttls[ct]; ++ nhp->rtnh_ifindex = vif6_table[ct].dev->ifindex; ++ nhp->rtnh_len = sizeof(*nhp); ++ } ++ } ++ mp_head->rta_type = RTA_MULTIPATH; ++ mp_head->rta_len = skb->tail - (u8*)mp_head; ++ rtm->rtm_type = RTN_MULTICAST; ++ return 1; ++ ++rtattr_failure: ++ skb_trim(skb, b - skb->data); ++ return -EMSGSIZE; ++} +diff -urN linux-2.6.11/net/ipv6/ipv6_sockglue.c x1/net/ipv6/ipv6_sockglue.c +--- linux-2.6.11/net/ipv6/ipv6_sockglue.c 2005-03-02 08:37:48.000000000 +0100 ++++ x1/net/ipv6/ipv6_sockglue.c 2005-02-09 16:31:39.000000000 +0100 +@@ -23,6 +23,8 @@ + * Changes: + * David L Stevens : + * - added multicast source filtering API for MLDv2 ++ * Hoerdt Mickael : ++ * - added multicat routing support for IPv6 + */ + + #include +@@ -55,6 +57,10 @@ + + #include + ++#ifdef CONFIG_IPV6_MROUTE ++#include ++#endif ++ + DEFINE_SNMP_STAT(struct ipstats_mib, ipv6_statistics); + + static struct packet_type ipv6_packet_type = { +@@ -69,9 +75,14 @@ + { + struct ip6_ra_chain *ra, *new_ra, **rap; + ++#ifndef CONFIG_IPV6_MROUTE + /* RA packet may be delivered ONLY to IPPROTO_RAW socket */ + if (sk->sk_type != SOCK_RAW || inet_sk(sk)->num != IPPROTO_RAW) + return -EINVAL; ++#else ++ if (sk->sk_type != SOCK_RAW || inet_sk(sk)->num == IPPROTO_RAW) ++ return -EINVAL; ++#endif + + new_ra = (sel>=0) ? kmalloc(sizeof(*new_ra), GFP_KERNEL) : NULL; + +@@ -136,6 +147,11 @@ + + valbool = (val!=0); + ++#ifdef CONFIG_IPV6_MROUTE ++ if(optname >= MRT6_BASE && optname <= (MRT6_BASE + 10)) ++ return ip6_mroute_setsockopt(sk,optname,optval,optlen); ++#endif ++ + lock_sock(sk); + + switch (optname) { +@@ -535,6 +551,11 @@ + return udp_prot.getsockopt(sk, level, optname, optval, optlen); + if(level!=SOL_IPV6) + return -ENOPROTOOPT; ++ ++#ifdef CONFIG_IPV6_MROUTE ++ if(optname >= MRT6_BASE && optname <= (MRT6_BASE + 10)) ++ return ip6_mroute_getsockopt(sk,optname,optval,optlen); ++#endif + if (get_user(len, optlen)) + return -EFAULT; + switch (optname) { +diff -urN linux-2.6.11/net/ipv6/ipv6_syms.c x1/net/ipv6/ipv6_syms.c +--- linux-2.6.11/net/ipv6/ipv6_syms.c 2005-03-02 08:38:13.000000000 +0100 ++++ x1/net/ipv6/ipv6_syms.c 2005-02-03 05:44:15.000000000 +0100 +@@ -7,7 +7,7 @@ + #include + #include + +-EXPORT_SYMBOL(ipv6_addr_type); ++EXPORT_SYMBOL(__ipv6_addr_type); + EXPORT_SYMBOL(icmpv6_send); + EXPORT_SYMBOL(icmpv6_statistics); + EXPORT_SYMBOL(icmpv6_err_convert); +@@ -38,4 +38,8 @@ + #endif + EXPORT_SYMBOL(rt6_lookup); + EXPORT_SYMBOL(fl6_sock_lookup); ++EXPORT_SYMBOL(ip6_append_data); ++EXPORT_SYMBOL(ip6_flush_pending_frames); ++EXPORT_SYMBOL(ip6_push_pending_frames); ++EXPORT_SYMBOL(ip6_dst_lookup); + EXPORT_SYMBOL(ipv6_push_nfrag_opts); +diff -urN linux-2.6.11/net/ipv6/mcast.c x1/net/ipv6/mcast.c +--- linux-2.6.11/net/ipv6/mcast.c 2005-03-02 08:38:25.000000000 +0100 ++++ x1/net/ipv6/mcast.c 2005-02-09 16:31:39.000000000 +0100 +@@ -62,6 +62,11 @@ + + #include + ++#ifdef CONFIG_IPV6_MROUTE ++#include ++int ip6_dev_loopback_xmit(struct sk_buff *newskb); ++#endif ++ + /* Set to 3 to get tracing... */ + #define MCAST_DEBUG 2 + +@@ -1320,7 +1325,11 @@ + struct inet6_dev *idev = in6_dev_get(skb->dev); + int err; + ++#ifdef CONFIG_IPV6_STATISTICS ++ IP6_INC_STATS(idev, IPSTATS_MIB_OUTREQUESTS); ++#else + IP6_INC_STATS(IPSTATS_MIB_OUTREQUESTS); ++#endif + payload_len = skb->tail - (unsigned char *)skb->nh.ipv6h - + sizeof(struct ipv6hdr); + mldlen = skb->tail - skb->h.raw; +@@ -1330,11 +1339,33 @@ + IPPROTO_ICMPV6, csum_partial(skb->h.raw, mldlen, 0)); + err = NF_HOOK(PF_INET6, NF_IP6_LOCAL_OUT, skb, NULL, skb->dev, + dev_queue_xmit); ++ ++#ifdef CONFIG_IPV6_MROUTE ++ /* ++ * if we are acting as a multicast router, loopback a copy to the ++ * process level multicast routing daemon ++ */ ++ if (mroute6_socket != NULL) { ++ struct sk_buff *newskb = skb_clone(skb, GFP_ATOMIC); ++ if (newskb) ++ NF_HOOK(PF_INET6, NF_IP6_POST_ROUTING, newskb, NULL, ++ newskb->dev, ip6_dev_loopback_xmit); ++ } ++#endif ++ + if (!err) { + ICMP6_INC_STATS(idev,ICMP6_MIB_OUTMSGS); ++#ifdef CONFIG_IPV6_STATISTICS ++ IP6_INC_STATS(idev, IPSTATS_MIB_OUTMCASTPKTS); ++#else + IP6_INC_STATS(IPSTATS_MIB_OUTMCASTPKTS); ++#endif + } else ++#ifdef CONFIG_IPV6_STATISTICS ++ IP6_INC_STATS(idev, IPSTATS_MIB_OUTDISCARDS); ++#else + IP6_INC_STATS(IPSTATS_MIB_OUTDISCARDS); ++#endif + + if (likely(idev != NULL)) + in6_dev_put(idev); +@@ -1604,7 +1635,11 @@ + static void igmp6_send(struct in6_addr *addr, struct net_device *dev, int type) + { + struct sock *sk = igmp6_socket->sk; ++#ifdef CONFIG_IPV6_STATISTICS ++ struct inet6_dev *idev = __in6_dev_get(dev); ++#else + struct inet6_dev *idev; ++#endif + struct sk_buff *skb; + struct icmp6hdr *hdr; + struct in6_addr *snd_addr; +@@ -1616,7 +1651,11 @@ + IPV6_TLV_ROUTERALERT, 2, 0, 0, + IPV6_TLV_PADN, 0 }; + ++#ifdef CONFIG_IPV6_STATISTICS ++ IP6_INC_STATS(idev, IPSTATS_MIB_OUTREQUESTS); ++#else + IP6_INC_STATS(IPSTATS_MIB_OUTREQUESTS); ++#endif + snd_addr = addr; + if (type == ICMPV6_MGM_REDUCTION) { + snd_addr = &all_routers; +@@ -1630,7 +1669,11 @@ + skb = sock_alloc_send_skb(sk, LL_RESERVED_SPACE(dev) + full_len, 1, &err); + + if (skb == NULL) { ++#ifdef CONFIG_IPV6_STATISTICS ++ IP6_INC_STATS(idev, IPSTATS_MIB_OUTDISCARDS); ++#else + IP6_INC_STATS(IPSTATS_MIB_OUTDISCARDS); ++#endif + return; + } + +@@ -1669,22 +1712,47 @@ + + err = NF_HOOK(PF_INET6, NF_IP6_LOCAL_OUT, skb, NULL, skb->dev, + dev_queue_xmit); ++ ++#ifdef CONFIG_IPV6_MROUTE ++ /* ++ * if we are acting as a multicast router, loopback a copy to the ++ * process level multicast routing daemon ++ */ ++ if (mroute6_socket != NULL) { ++ struct sk_buff *newskb = skb_clone(skb, GFP_ATOMIC); ++ if (newskb) ++ NF_HOOK(PF_INET6, NF_IP6_POST_ROUTING, newskb, NULL, ++ newskb->dev, ip6_dev_loopback_xmit); ++ } ++#endif + if (!err) { + if (type == ICMPV6_MGM_REDUCTION) + ICMP6_INC_STATS(idev, ICMP6_MIB_OUTGROUPMEMBREDUCTIONS); + else + ICMP6_INC_STATS(idev, ICMP6_MIB_OUTGROUPMEMBRESPONSES); + ICMP6_INC_STATS(idev, ICMP6_MIB_OUTMSGS); ++#ifdef CONFIG_IPV6_STATISTICS ++ IP6_INC_STATS(idev, IPSTATS_MIB_OUTMCASTPKTS); ++#else + IP6_INC_STATS(IPSTATS_MIB_OUTMCASTPKTS); ++#endif + } else ++#ifdef CONFIG_IPV6_STATISTICS ++ IP6_INC_STATS(idev, IPSTATS_MIB_OUTDISCARDS); ++#else + IP6_INC_STATS(IPSTATS_MIB_OUTDISCARDS); ++#endif + + if (likely(idev != NULL)) + in6_dev_put(idev); + return; + + out: ++#ifdef CONFIG_IPV6_STATISTICS ++ IP6_INC_STATS(idev, IPSTATS_MIB_OUTDISCARDS); ++#else + IP6_INC_STATS(IPSTATS_MIB_OUTDISCARDS); ++#endif + kfree_skb(skb); + } + +diff -urN linux-2.6.11/net/ipv6/ndisc.c x1/net/ipv6/ndisc.c +--- linux-2.6.11/net/ipv6/ndisc.c 2005-03-02 08:38:10.000000000 +0100 ++++ x1/net/ipv6/ndisc.c 2005-02-16 10:16:52.000000000 +0100 +@@ -437,6 +437,7 @@ + return; + } + ++ ND_PRINTK2("%s:dst=%p\n", __FUNCTION__, dst); + if (inc_opt) { + if (dev->addr_len) + len += NDISC_OPT_SPACE(dev->addr_len); +@@ -444,7 +445,7 @@ + inc_opt = 0; + } + +- skb = sock_alloc_send_skb(sk, MAX_HEADER + len + LL_RESERVED_SPACE(dev), ++ skb = sock_alloc_send_skb(sk, MAX_HEADER + len + LL_RESERVED_SPACE(dev) + dst->header_len + 64, + 1, &err); + + if (skb == NULL) { +@@ -485,7 +486,11 @@ + + skb->dst = dst; + idev = in6_dev_get(dst->dev); ++#ifdef CONFIG_IPV6_STATISTICS ++ IP6_INC_STATS(idev, IPSTATS_MIB_OUTREQUESTS); ++#else + IP6_INC_STATS(IPSTATS_MIB_OUTREQUESTS); ++#endif + err = NF_HOOK(PF_INET6, NF_IP6_LOCAL_OUT, skb, NULL, dst->dev, dst_output); + if (!err) { + ICMP6_INC_STATS(idev, ICMP6_MIB_OUTNEIGHBORADVERTISEMENTS); +@@ -534,7 +539,7 @@ + if (send_llinfo) + len += NDISC_OPT_SPACE(dev->addr_len); + +- skb = sock_alloc_send_skb(sk, MAX_HEADER + len + LL_RESERVED_SPACE(dev), ++ skb = sock_alloc_send_skb(sk, MAX_HEADER + len + LL_RESERVED_SPACE(dev) + dst->header_len + 64, + 1, &err); + if (skb == NULL) { + ND_PRINTK0(KERN_ERR +@@ -570,7 +575,11 @@ + /* send it! */ + skb->dst = dst; + idev = in6_dev_get(dst->dev); ++#ifdef CONFIG_IPV6_STATISTICS ++ IP6_INC_STATS(idev, IPSTATS_MIB_OUTREQUESTS); ++#else + IP6_INC_STATS(IPSTATS_MIB_OUTREQUESTS); ++#endif + err = NF_HOOK(PF_INET6, NF_IP6_LOCAL_OUT, skb, NULL, dst->dev, dst_output); + if (!err) { + ICMP6_INC_STATS(idev, ICMP6_MIB_OUTNEIGHBORSOLICITS); +@@ -610,7 +619,7 @@ + if (dev->addr_len) + len += NDISC_OPT_SPACE(dev->addr_len); + +- skb = sock_alloc_send_skb(sk, MAX_HEADER + len + LL_RESERVED_SPACE(dev), ++ skb = sock_alloc_send_skb(sk, MAX_HEADER + len + LL_RESERVED_SPACE(dev) + dst->header_len + 64, + 1, &err); + if (skb == NULL) { + ND_PRINTK0(KERN_ERR +@@ -644,7 +653,11 @@ + /* send it! */ + skb->dst = dst; + idev = in6_dev_get(dst->dev); ++#ifdef CONFIG_IPV6_STATISTICS ++ IP6_INC_STATS(idev, IPSTATS_MIB_OUTREQUESTS); ++#else + IP6_INC_STATS(IPSTATS_MIB_OUTREQUESTS); ++#endif + err = NF_HOOK(PF_INET6, NF_IP6_LOCAL_OUT, skb, NULL, dst->dev, dst_output); + if (!err) { + ICMP6_INC_STATS(idev, ICMP6_MIB_OUTROUTERSOLICITS); +@@ -809,7 +822,6 @@ + * sender should delay its response + * by a random time between 0 and + * MAX_ANYCAST_DELAY_TIME seconds. +- * (RFC2461) -- yoshfuji + */ + struct sk_buff *n = skb_clone(skb, GFP_ATOMIC); + if (n) +@@ -825,7 +837,7 @@ + + ipv6_addr_all_nodes(&maddr); + ndisc_send_na(dev, NULL, &maddr, &msg->target, +- idev->cnf.forwarding, 0, (ifp != NULL), 1); ++ idev->cnf.forwarding, 0, (ifp != NULL) && inc, inc); + goto out; + } + +@@ -846,7 +858,7 @@ + NEIGH_UPDATE_F_OVERRIDE); + if (neigh || !dev->hard_header) { + ndisc_send_na(dev, neigh, saddr, &msg->target, +- idev->cnf.forwarding, ++ idev->cnf.forwarding, + 1, (ifp != NULL && inc), inc); + if (neigh) + neigh_release(neigh); +@@ -1021,6 +1033,7 @@ + struct rt6_info *rt; + int lifetime; + struct ndisc_options ndopts; ++ int pref = 0; + int optlen; + + __u8 * opt = (__u8 *)(ra_msg + 1); +@@ -1082,7 +1095,18 @@ + + lifetime = ntohs(ra_msg->icmph.icmp6_rt_lifetime); + ++#ifdef CONFIG_IPV6_ROUTER_PREF ++ pref = IPV6_SIGNEDPREF(ra_msg->icmph.icmp6_router_pref); ++ if (pref < -1) { ++ if (net_ratelimit()) ++ ND_PRINTK2("ICMP6 RA: invalid RA preference; zero lifetime\n"); ++ lifetime = 0; ++ } ++#endif ++ + rt = rt6_get_dflt_router(&skb->nh.ipv6h->saddr, skb->dev); ++ if (rt) ++ neigh = rt->rt6i_nexthop; + + if (rt) + neigh = rt->rt6i_nexthop; +@@ -1097,7 +1121,7 @@ + ND_PRINTK3(KERN_DEBUG + "ICMPv6 RA: adding default router.\n"); + +- rt = rt6_add_dflt_router(&skb->nh.ipv6h->saddr, skb->dev); ++ rt = rt6_add_dflt_router(&skb->nh.ipv6h->saddr, skb->dev, pref); + if (rt == NULL) { + ND_PRINTK0(KERN_ERR + "ICMPv6 RA: %s() failed to add default route.\n", +@@ -1121,8 +1145,11 @@ + if (rt) + rt->rt6i_expires = jiffies + (HZ * lifetime); + +- if (ra_msg->icmph.icmp6_hop_limit) ++ if (ra_msg->icmph.icmp6_hop_limit) { + in6_dev->cnf.hop_limit = ra_msg->icmph.icmp6_hop_limit; ++ if (rt) ++ rt->u.dst.metrics[RTAX_HOPLIMIT-1] = ra_msg->icmph.icmp6_hop_limit; ++ } + + /* + * Update Reachable Time and Retrans Timer +@@ -1329,6 +1356,7 @@ + int rd_len; + int err; + int hlen; ++ u8 ha_buf[MAX_ADDR_LEN], *ha = NULL; + + dev = skb->dev; + +@@ -1341,10 +1369,14 @@ + + ndisc_flow_init(&fl, NDISC_REDIRECT, &saddr_buf, &skb->nh.ipv6h->saddr); + +- rt = rt6_lookup(&skb->nh.ipv6h->saddr, NULL, dev->ifindex, 1); +- if (rt == NULL) ++ /* ++ * we use ip6_route_output() here so that we do not try to ++ * send redirect to off-link. ++ * cf) ndisc_dst_alloc() assumes that destination is on-link. ++ */ ++ dst = ip6_route_output(NULL, &fl); ++ if (dst == NULL) + return; +- dst = &rt->u.dst; + + err = xfrm_lookup(&dst, &fl, NULL, 0); + if (err) { +@@ -1366,16 +1398,14 @@ + } + + if (dev->addr_len) { ++ read_lock_bh(&neigh->lock); + if (neigh->nud_state&NUD_VALID) { +- len += NDISC_OPT_SPACE(dev->addr_len); +- } else { +- /* If nexthop is not valid, do not redirect! +- We will make it later, when will be sure, +- that it is alive. +- */ +- dst_release(dst); +- return; +- } ++ memcpy(ha_buf, neigh->ha, dev->addr_len); ++ read_unlock_bh(&neigh->lock); ++ ha = ha_buf; ++ len += NDISC_OPT_SPACE(dev->addr_len); ++ } else ++ read_unlock_bh(&neigh->lock); + } + + rd_len = min_t(unsigned int, +@@ -1383,7 +1413,7 @@ + rd_len &= ~0x7; + len += rd_len; + +- buff = sock_alloc_send_skb(sk, MAX_HEADER + len + LL_RESERVED_SPACE(dev), ++ buff = sock_alloc_send_skb(sk, MAX_HEADER + len + LL_RESERVED_SPACE(dev) + dst->header_len + 64, + 1, &err); + if (buff == NULL) { + ND_PRINTK0(KERN_ERR +@@ -1420,8 +1450,8 @@ + * include target_address option + */ + +- if (dev->addr_len) +- opt = ndisc_fill_addr_option(opt, ND_OPT_TARGET_LL_ADDR, neigh->ha, ++ if (ha) ++ opt = ndisc_fill_addr_option(opt, ND_OPT_TARGET_LL_ADDR, ha, + dev->addr_len, dev->type); + + /* +@@ -1441,7 +1471,11 @@ + + buff->dst = dst; + idev = in6_dev_get(dst->dev); ++#ifdef CONFIG_IPV6_STATISTICS ++ IP6_INC_STATS(idev, IPSTATS_MIB_OUTREQUESTS); ++#else + IP6_INC_STATS(IPSTATS_MIB_OUTREQUESTS); ++#endif + err = NF_HOOK(PF_INET6, NF_IP6_LOCAL_OUT, buff, NULL, dst->dev, dst_output); + if (!err) { + ICMP6_INC_STATS(idev, ICMP6_MIB_OUTREDIRECTS); +@@ -1533,10 +1567,46 @@ + }; + + #ifdef CONFIG_SYSCTL ++static void __ndisc_ifinfo_notifier(struct inet6_dev *idev) ++{ ++ idev->tstamp = jiffies; ++ inet6_ifinfo_notify(RTM_NEWLINK, idev); ++} ++ ++static void ndisc_ifinfo_notifier(void *data) ++{ ++ struct net_device *dev = data; ++ if (dev) { ++ struct inet6_dev *idev = in6_dev_get(dev); ++ if (idev) { ++ __ndisc_ifinfo_notifier(idev); ++ in6_dev_put(idev); ++ } ++ } ++} ++ + int ndisc_ifinfo_sysctl_change(struct ctl_table *ctl, int write, struct file * filp, void __user *buffer, size_t *lenp, loff_t *ppos) + { + struct net_device *dev = ctl->extra1; + struct inet6_dev *idev; ++#if 1 ++ static char warncomm[TASK_COMM_LEN]; ++ static int warned; ++ const char *dev_name = dev ? dev->name : "default"; ++ ++ if (strcmp(warncomm, current->comm) && warned < 5) { ++ strcpy(warncomm, current->comm); ++ printk(KERN_WARNING ++ "process `%s' is using old sysctl " ++ "net.ipv6.neigh.%s.%s; " ++ "Use net.ipv6.neigh.%s.%s_ms " ++ "instead.\n", ++ warncomm, ++ dev_name, ctl->procname, ++ dev_name, ctl->procname); ++ warned++; ++ } ++#endif + + if (write && dev && (idev = in6_dev_get(dev)) != NULL) { + idev->tstamp = jiffies; +@@ -1578,7 +1648,8 @@ + + #ifdef CONFIG_SYSCTL + neigh_sysctl_register(NULL, &nd_tbl.parms, NET_IPV6, NET_IPV6_NEIGH, +- "ipv6", &ndisc_ifinfo_sysctl_change); ++ "ipv6", &ndisc_ifinfo_sysctl_change, ++ ndisc_ifinfo_notifier); + #endif + + register_netdevice_notifier(&ndisc_netdev_notifier); +diff -urN linux-2.6.11/net/ipv6/netfilter/Kconfig x1/net/ipv6/netfilter/Kconfig +--- linux-2.6.11/net/ipv6/netfilter/Kconfig 2005-03-02 08:38:25.000000000 +0100 ++++ x1/net/ipv6/netfilter/Kconfig 2005-02-03 05:44:15.000000000 +0100 +@@ -5,6 +5,16 @@ + menu "IPv6: Netfilter Configuration" + depends on INET && IPV6 && NETFILTER + ++config IP6_NF_FTP ++ tristate "FTP protocol support" ++ depends on IP6_NF_CONNTRACK ++ help ++ Tracking FTP connections is problematic: special helpers are ++ required for tracking them. ++ ++ If you want to compile it as a module, say M here and read ++ . If unsure, say `Y'. ++ + #tristate 'Connection tracking (required for masq/NAT)' CONFIG_IP6_NF_CONNTRACK + #if [ "$CONFIG_IP6_NF_CONNTRACK" != "n" ]; then + # dep_tristate ' FTP protocol support' CONFIG_IP6_NF_FTP $CONFIG_IP6_NF_CONNTRACK +@@ -167,6 +177,32 @@ + + To compile it as a module, choose M here. If unsure, say N. + ++config IP6_NF_CONNTRACK ++ tristate "Connection tracking (EXPERIMENTAL)" ++ depends on EXPERIMENTAL ++ ---help--- ++ Connection tracking keeps a record of what packets have passed ++ through your machine, in order to figure out how they are related ++ into connections. ++ ++ It can also be used to enhance packet filtering ++ (see `Connection state match support' ++ below). ++ ++ If you want to compile it as a module, say M here and read ++ . If unsure, say `N'. ++ ++config IP6_NF_MATCH_STATE ++ tristate "Connection state match support" ++ depends on IP6_NF_CONNTRACK && IP6_NF_IPTABLES ++ help ++ Connection state matching allows you to match packets based on their ++ relationship to a tracked connection (ie. previous packets). This ++ is a powerful tool for packet classification. ++ ++ If you want to compile it as a module, say M here and read ++ . If unsure, say `N'. ++ + # dep_tristate ' Multiple port match support' CONFIG_IP6_NF_MATCH_MULTIPORT $CONFIG_IP6_NF_IPTABLES + # dep_tristate ' TOS match support' CONFIG_IP6_NF_MATCH_TOS $CONFIG_IP6_NF_IPTABLES + # if [ "$CONFIG_IP6_NF_CONNTRACK" != "n" ]; then +@@ -196,8 +232,17 @@ + + To compile it as a module, choose M here. If unsure, say N. + ++config IP6_NF_TARGET_REJECT ++ tristate "REJECT target support" ++ depends on IP6_NF_FILTER ++ help ++ The REJECT target allows a filtering rule to specify that an ICMP ++ error should be issued in response to an incoming packet, rather ++ than silently being dropped. ++ ++ To compile it as a module, choose M here. If unsure, say N. ++ + # if [ "$CONFIG_IP6_NF_FILTER" != "n" ]; then +-# dep_tristate ' REJECT target support' CONFIG_IP6_NF_TARGET_REJECT $CONFIG_IP6_NF_FILTER + # if [ "$CONFIG_EXPERIMENTAL" = "y" ]; then + # dep_tristate ' MIRROR target support (EXPERIMENTAL)' CONFIG_IP6_NF_TARGET_MIRROR $CONFIG_IP6_NF_FILTER + # fi +diff -urN linux-2.6.11/net/ipv6/netfilter/Makefile x1/net/ipv6/netfilter/Makefile +--- linux-2.6.11/net/ipv6/netfilter/Makefile 2005-03-02 08:38:10.000000000 +0100 ++++ x1/net/ipv6/netfilter/Makefile 2004-09-30 15:26:36.000000000 +0200 +@@ -2,6 +2,18 @@ + # Makefile for the netfilter modules on top of IPv6. + # + ++# objects for the conntrack ++ip6_nf_conntrack-objs := ip6_conntrack_core.o ip6_conntrack_proto_generic.o ip6_conntrack_proto_tcp.o ip6_conntrack_proto_udp.o ip6_conntrack_proto_icmpv6.o ip6_conntrack_reasm.o ++ ++# objects for the standalone - connection tracking ++ip6_conntrack-objs := ip6_conntrack_standalone.o $(ip6_nf_conntrack-objs) ++ ++# connection tracking ++obj-$(CONFIG_IP6_NF_CONNTRACK) += ip6_conntrack.o ++ ++# connection tracking helpers ++obj-$(CONFIG_IP6_NF_FTP) += ip6_conntrack_ftp.o ++ + # Link order matters here. + obj-$(CONFIG_IP6_NF_IPTABLES) += ip6_tables.o + obj-$(CONFIG_IP6_NF_MATCH_LIMIT) += ip6t_limit.o +@@ -24,3 +36,5 @@ + obj-$(CONFIG_IP6_NF_TARGET_LOG) += ip6t_LOG.o + obj-$(CONFIG_IP6_NF_RAW) += ip6table_raw.o + obj-$(CONFIG_IP6_NF_MATCH_HL) += ip6t_hl.o ++obj-$(CONFIG_IP6_NF_MATCH_STATE) += ip6t_state.o ++obj-$(CONFIG_IP6_NF_TARGET_REJECT) += ip6t_REJECT.o +diff -urN linux-2.6.11/net/ipv6/netfilter/ip6_conntrack_core.c x1/net/ipv6/netfilter/ip6_conntrack_core.c +--- linux-2.6.11/net/ipv6/netfilter/ip6_conntrack_core.c 1970-01-01 01:00:00.000000000 +0100 ++++ x1/net/ipv6/netfilter/ip6_conntrack_core.c 2005-03-01 04:42:08.000000000 +0100 +@@ -0,0 +1,1593 @@ ++/* ++ * IPv6 Connection Tracking ++ * Linux INET6 implementation ++ * ++ * Copyright (C)2003 USAGI/WIDE Project ++ * ++ * Authors: ++ * Yasuyuki Kozakai ++ * ++ * Based on: net/ipv4/netfilter/ip_conntrack_core.c ++ * ++ * This program 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 ++ * 2 of the License, or (at your option) any later version. ++ */ ++ ++/* (c) 1999 Paul `Rusty' Russell. Licenced under the GNU General ++ * Public Licence. ++ * ++ * 23 Apr 2001: Harald Welte ++ * - new API and handling of conntrack/nat helpers ++ * - now capable of multiple expectations for one master ++ * 16 Jul 2002: Harald Welte ++ * - add usage/reference counts to ip_conntrack_expect ++ * - export ip_conntrack[_expect]_{find_get,put} functions ++ * */ ++ ++#include ++#include ++#include ++#include ++#include ++#include ++#include ++#include ++#include ++#include ++#include ++#include ++#include ++#include ++#include ++#include ++#include ++#include ++#include ++#include ++ ++/* This rwlock protects the main hash table, protocol/helper/expected ++ registrations, conntrack timers*/ ++#define ASSERT_READ_LOCK(x) MUST_BE_READ_LOCKED(&ip6_conntrack_lock) ++#define ASSERT_WRITE_LOCK(x) MUST_BE_WRITE_LOCKED(&ip6_conntrack_lock) ++ ++#include ++#include ++#include ++#include ++#include ++ ++#define IP6_CONNTRACK_VERSION "0.1" ++ ++#if 0 ++#define DEBUGP printk ++#else ++#define DEBUGP(format, args...) ++#endif ++ ++DECLARE_RWLOCK(ip6_conntrack_lock); ++DECLARE_RWLOCK(ip6_conntrack_expect_tuple_lock); ++ ++void (*ip6_conntrack_destroyed)(struct ip6_conntrack *conntrack) = NULL; ++LIST_HEAD(ip6_conntrack_expect_list); ++LIST_HEAD(ip6_protocol_list); ++static LIST_HEAD(helpers); ++unsigned int ip6_conntrack_htable_size = 0; ++static int ip6_conntrack_max = 0; ++static atomic_t ip6_conntrack_count = ATOMIC_INIT(0); ++struct list_head *ip6_conntrack_hash; ++static kmem_cache_t *ip6_conntrack_cachep; ++ ++extern struct ip6_conntrack_protocol ip6_conntrack_generic_protocol; ++ ++/* ++ * Based on ipv6_skip_exthdr() in net/ipv6/exthdr.c ++ * ++ * This function parses (probably truncated) exthdr set "hdr" ++ * of length "len". "nexthdrp" initially points to some place, ++ * where type of the first header can be found. ++ * ++ * It skips all well-known exthdrs, and returns pointer to the start ++ * of unparsable area i.e. the first header with unknown type. ++ * if success, *nexthdr is updated by type/protocol of this header. ++ * ++ * NOTES: - it may return pointer pointing beyond end of packet, ++ * if the last recognized header is truncated in the middle. ++ * - if packet is truncated, so that all parsed headers are skipped, ++ * it returns -1. ++ * - First fragment header is skipped, not-first ones ++ * are considered as unparsable. ++ * - ESP is unparsable for now and considered like ++ * normal payload protocol. ++ * - Note also special handling of AUTH header. Thanks to IPsec wizards. ++ */ ++ ++static int ip6_ct_skip_exthdr(struct sk_buff *skb, int start, u8 *nexthdrp, ++ int len) ++{ ++ u8 nexthdr = *nexthdrp; ++ ++ while (ipv6_ext_hdr(nexthdr)) { ++ struct ipv6_opt_hdr hdr; ++ int hdrlen; ++ ++ if (len < (int)sizeof(struct ipv6_opt_hdr)) ++ return -1; ++ if (nexthdr == NEXTHDR_NONE) ++ break; ++ if (skb_copy_bits(skb, start, &hdr, sizeof(hdr))) ++ BUG(); ++ if (nexthdr == NEXTHDR_FRAGMENT) { ++ struct frag_hdr fhdr; ++ ++ if (len < (int)sizeof(struct frag_hdr)) ++ return -1; ++ if (skb_copy_bits(skb, start, &fhdr, sizeof(fhdr))) ++ BUG(); ++ if (ntohs(fhdr.frag_off) & ~0x7) ++ return -1; ++ hdrlen = 8; ++ } else if (nexthdr == NEXTHDR_AUTH) ++ hdrlen = (hdr.hdrlen+2)<<2; ++ else ++ hdrlen = ipv6_optlen(&hdr); ++ ++ nexthdr = hdr.nexthdr; ++ len -= hdrlen; ++ start += hdrlen; ++ } ++ ++ *nexthdrp = nexthdr; ++ return start; ++} ++ ++int ip6_ct_tuple_src_equal(const struct ip6_conntrack_tuple *t1, ++ const struct ip6_conntrack_tuple *t2) ++{ ++ if (ipv6_addr_cmp(&t1->src.ip, &t2->src.ip)) ++ return 0; ++ ++ if (t1->src.u.all != t2->src.u.all) ++ return 0; ++ ++ if (t1->dst.protonum != t2->dst.protonum) ++ return 0; ++ ++ return 1; ++ ++} ++ ++int ip6_ct_tuple_dst_equal(const struct ip6_conntrack_tuple *t1, ++ const struct ip6_conntrack_tuple *t2) ++{ ++ if (ipv6_addr_cmp(&t1->dst.ip, &t2->dst.ip)) ++ return 0; ++ ++ if (t1->dst.u.all != t2->dst.u.all) ++ return 0; ++ ++ if (t1->dst.protonum != t2->dst.protonum) ++ return 0; ++ ++ return 1; ++} ++ ++int ip6_ct_tuple_equal(const struct ip6_conntrack_tuple *t1, ++ const struct ip6_conntrack_tuple *t2) ++{ ++ return ip6_ct_tuple_src_equal(t1, t2) && ip6_ct_tuple_dst_equal(t1, t2); ++} ++ ++int ip6_ct_tuple_mask_cmp(const struct ip6_conntrack_tuple *t, ++ const struct ip6_conntrack_tuple *tuple, ++ const struct ip6_conntrack_tuple *mask) ++{ ++ int count = 0; ++ ++ for (count = 0; count < 8; count++){ ++ if ((ntohs(t->src.ip.s6_addr16[count]) ^ ++ ntohs(tuple->src.ip.s6_addr16[count])) & ++ ntohs(mask->src.ip.s6_addr16[count])) ++ return 0; ++ ++ if ((ntohs(t->dst.ip.s6_addr16[count]) ^ ++ ntohs(tuple->dst.ip.s6_addr16[count])) & ++ ntohs(mask->dst.ip.s6_addr16[count])) ++ return 0; ++ } ++ ++ if ((t->src.u.all ^ tuple->src.u.all) & mask->src.u.all) ++ return 0; ++ ++ if ((t->dst.u.all ^ tuple->dst.u.all) & mask->dst.u.all) ++ return 0; ++ ++ if ((t->dst.protonum ^ tuple->dst.protonum) & mask->dst.protonum) ++ return 0; ++ ++ return 1; ++} ++ ++static inline int proto_cmpfn(const struct ip6_conntrack_protocol *curr, ++ u_int8_t protocol) ++{ ++ return protocol == curr->proto; ++} ++ ++struct ip6_conntrack_protocol *__ip6_ct_find_proto(u_int8_t protocol) ++{ ++ struct ip6_conntrack_protocol *p; ++ ++ MUST_BE_READ_LOCKED(&ip6_conntrack_lock); ++ p = LIST_FIND(&ip6_protocol_list, proto_cmpfn, ++ struct ip6_conntrack_protocol *, protocol); ++ if (!p) ++ p = &ip6_conntrack_generic_protocol; ++ ++ return p; ++} ++ ++struct ip6_conntrack_protocol *ip6_ct_find_proto(u_int8_t protocol) ++{ ++ struct ip6_conntrack_protocol *p; ++ ++ READ_LOCK(&ip6_conntrack_lock); ++ p = __ip6_ct_find_proto(protocol); ++ READ_UNLOCK(&ip6_conntrack_lock); ++ return p; ++} ++ ++inline void ++ip6_conntrack_put(struct ip6_conntrack *ct) ++{ ++ IP6_NF_ASSERT(ct); ++ nf_conntrack_put(&ct->ct_general); ++} ++ ++static int ip6_conntrack_hash_rnd_initted; ++static unsigned int ip6_conntrack_hash_rnd; ++static u_int32_t ++hash_conntrack(const struct ip6_conntrack_tuple *tuple) ++{ ++ u32 a, b, c; ++ ++ a = tuple->src.ip.s6_addr32[0]; ++ b = tuple->src.ip.s6_addr32[1]; ++ c = tuple->src.ip.s6_addr32[2]; ++ ++ a += JHASH_GOLDEN_RATIO; ++ b += JHASH_GOLDEN_RATIO; ++ c += ip6_conntrack_hash_rnd; ++ __jhash_mix(a, b, c); ++ ++ a += tuple->src.ip.s6_addr32[3]; ++ b += tuple->dst.ip.s6_addr32[0]; ++ c += tuple->dst.ip.s6_addr32[1]; ++ __jhash_mix(a, b, c); ++ ++ a += tuple->dst.ip.s6_addr32[2]; ++ b += tuple->dst.ip.s6_addr32[3]; ++ c += tuple->src.u.all | (tuple->dst.u.all << 16); ++ __jhash_mix(a, b, c); ++ ++ a += tuple->dst.protonum; ++ __jhash_mix(a, b, c); ++ ++ return c % ip6_conntrack_htable_size; ++} ++ ++int ++ip6_get_tuple(const struct ipv6hdr *ipv6h, ++ const struct sk_buff *skb, ++ unsigned int dataoff, ++ u_int8_t protonum, ++ struct ip6_conntrack_tuple *tuple, ++ const struct ip6_conntrack_protocol *protocol) ++{ ++ /* Should I check that this packet is'nt fragmented ++ like IPv4 conntrack? - kozakai */ ++ ++ ipv6_addr_copy(&tuple->src.ip, &ipv6h->saddr); ++ ipv6_addr_copy(&tuple->dst.ip, &ipv6h->daddr); ++ ++ tuple->dst.protonum = protonum; ++ ++ return protocol->pkt_to_tuple(skb, dataoff, tuple); ++} ++ ++static int ++invert_tuple(struct ip6_conntrack_tuple *inverse, ++ const struct ip6_conntrack_tuple *orig, ++ const struct ip6_conntrack_protocol *protocol) ++{ ++ ipv6_addr_copy(&inverse->src.ip, &orig->dst.ip); ++ ipv6_addr_copy(&inverse->dst.ip, &orig->src.ip); ++ inverse->dst.protonum = orig->dst.protonum; ++ ++ return protocol->invert_tuple(inverse, orig); ++} ++ ++ ++/* ip6_conntrack_expect helper functions */ ++ ++/* Compare tuple parts depending on mask. */ ++static inline int expect_cmp(const struct ip6_conntrack_expect *i, ++ const struct ip6_conntrack_tuple *tuple) ++{ ++ MUST_BE_READ_LOCKED(&ip6_conntrack_expect_tuple_lock); ++ return ip6_ct_tuple_mask_cmp(tuple, &i->tuple, &i->mask); ++} ++ ++static void ++destroy_expect(struct ip6_conntrack_expect *exp) ++{ ++ DEBUGP("destroy_expect(%p) use=%d\n", exp, atomic_read(&exp->use)); ++ IP6_NF_ASSERT(atomic_read(&exp->use)); ++ IP6_NF_ASSERT(!timer_pending(&exp->timeout)); ++ ++ kfree(exp); ++} ++ ++ ++inline void ip6_conntrack_expect_put(struct ip6_conntrack_expect *exp) ++{ ++ IP6_NF_ASSERT(exp); ++ ++ if (atomic_dec_and_test(&exp->use)) { ++ /* usage count dropped to zero */ ++ destroy_expect(exp); ++ } ++} ++ ++static inline struct ip6_conntrack_expect * ++__ip6_ct_expect_find(const struct ip6_conntrack_tuple *tuple) ++{ ++ MUST_BE_READ_LOCKED(&ip6_conntrack_lock); ++ MUST_BE_READ_LOCKED(&ip6_conntrack_expect_tuple_lock); ++ return LIST_FIND(&ip6_conntrack_expect_list, expect_cmp, ++ struct ip6_conntrack_expect *, tuple); ++} ++ ++/* Find a expectation corresponding to a tuple. */ ++struct ip6_conntrack_expect * ++ip6_conntrack_expect_find_get(const struct ip6_conntrack_tuple *tuple) ++{ ++ struct ip6_conntrack_expect *exp; ++ ++ READ_LOCK(&ip6_conntrack_lock); ++ READ_LOCK(&ip6_conntrack_expect_tuple_lock); ++ exp = __ip6_ct_expect_find(tuple); ++ if (exp) ++ atomic_inc(&exp->use); ++ READ_UNLOCK(&ip6_conntrack_expect_tuple_lock); ++ READ_UNLOCK(&ip6_conntrack_lock); ++ ++ return exp; ++} ++ ++/* remove one specific expectation from all lists and drop refcount, ++ * does _NOT_ delete the timer. */ ++static void __unexpect_related(struct ip6_conntrack_expect *expect) ++{ ++ DEBUGP("unexpect_related(%p)\n", expect); ++ MUST_BE_WRITE_LOCKED(&ip6_conntrack_lock); ++ ++ /* we're not allowed to unexpect a confirmed expectation! */ ++ IP6_NF_ASSERT(!expect->sibling); ++ ++ /* delete from global and local lists */ ++ list_del(&expect->list); ++ list_del(&expect->expected_list); ++ ++ /* decrement expect-count of master conntrack */ ++ if (expect->expectant) ++ expect->expectant->expecting--; ++ ++ ip6_conntrack_expect_put(expect); ++} ++ ++/* remove one specific expecatation from all lists, drop refcount ++ * and expire timer. ++ * This function can _NOT_ be called for confirmed expects! */ ++static void unexpect_related(struct ip6_conntrack_expect *expect) ++{ ++ IP6_NF_ASSERT(expect->expectant); ++ IP6_NF_ASSERT(expect->expectant->helper); ++ /* if we are supposed to have a timer, but we can't delete ++ * it: race condition. __unexpect_related will ++ * be calledd by timeout function */ ++ if (expect->expectant->helper->timeout ++ && !del_timer(&expect->timeout)) ++ return; ++ ++ __unexpect_related(expect); ++} ++ ++/* delete all unconfirmed expectations for this conntrack */ ++static void remove_expectations(struct ip6_conntrack *ct, int drop_refcount) ++{ ++ struct list_head *exp_entry, *next; ++ struct ip6_conntrack_expect *exp; ++ ++ DEBUGP("remove_expectations(%p)\n", ct); ++ ++ list_for_each_safe(exp_entry, next, &ct->sibling_list) { ++ exp = list_entry(exp_entry, struct ip6_conntrack_expect, ++ expected_list); ++ ++ /* we skip established expectations, as we want to delete ++ * the un-established ones only */ ++ if (exp->sibling) { ++ DEBUGP("remove_expectations: skipping established %p of %p\n", exp->sibling, ct); ++ if (drop_refcount) { ++ /* Indicate that this expectations parent is dead */ ++ ip6_conntrack_put(exp->expectant); ++ exp->expectant = NULL; ++ } ++ continue; ++ } ++ ++ IP6_NF_ASSERT(list_inlist(&ip6_conntrack_expect_list, exp)); ++ IP6_NF_ASSERT(exp->expectant == ct); ++ ++ /* delete expectation from global and private lists */ ++ unexpect_related(exp); ++ } ++} ++ ++static void ++clean_from_lists(struct ip6_conntrack *ct) ++{ ++ unsigned int ho, hr; ++ ++ DEBUGP("clean_from_lists(%p)\n", ct); ++ MUST_BE_WRITE_LOCKED(&ip6_conntrack_lock); ++ ++ ho = hash_conntrack(&ct->tuplehash[IP6_CT_DIR_ORIGINAL].tuple); ++ hr = hash_conntrack(&ct->tuplehash[IP6_CT_DIR_REPLY].tuple); ++ ++ LIST_DELETE(&ip6_conntrack_hash[ho], ++ &ct->tuplehash[IP6_CT_DIR_ORIGINAL]); ++ LIST_DELETE(&ip6_conntrack_hash[hr], ++ &ct->tuplehash[IP6_CT_DIR_REPLY]); ++ ++ /* Destroy all un-established, pending expectations */ ++ remove_expectations(ct, 1); ++} ++ ++static void ++destroy_conntrack(struct nf_conntrack *nfct) ++{ ++ struct ip6_conntrack *ct = (struct ip6_conntrack *)nfct, *master = NULL; ++ struct ip6_conntrack_protocol *proto; ++ ++ DEBUGP("destroy_conntrack(%p)\n", ct); ++ IP6_NF_ASSERT(atomic_read(&nfct->use) == 0); ++ IP6_NF_ASSERT(!timer_pending(&ct->timeout)); ++ ++ /* To make sure we don't get any weird locking issues here: ++ * destroy_conntrack() MUST NOT be called with a write lock ++ * to ip6_conntrack_lock!!! -HW */ ++ proto = ip6_ct_find_proto(ct->tuplehash[IP6_CT_DIR_REPLY].tuple.dst.protonum); ++ if (proto && proto->destroy) ++ proto->destroy(ct); ++ ++ if (ip6_conntrack_destroyed) ++ ip6_conntrack_destroyed(ct); ++ ++ WRITE_LOCK(&ip6_conntrack_lock); ++ /* Delete us from our own list to prevent corruption later */ ++ list_del(&ct->sibling_list); ++ ++ /* Delete our master expectation */ ++ if (ct->master) { ++ if (ct->master->expectant) { ++ /* can't call __unexpect_related here, ++ * since it would screw up expect_list */ ++ list_del(&ct->master->expected_list); ++ master = ct->master->expectant; ++ } ++ kfree(ct->master); ++ } ++ WRITE_UNLOCK(&ip6_conntrack_lock); ++ ++ if (master) ++ ip6_conntrack_put(master); ++ ++ DEBUGP("destroy_conntrack: returning ct=%p to slab\n", ct); ++ kmem_cache_free(ip6_conntrack_cachep, ct); ++ atomic_dec(&ip6_conntrack_count); ++} ++ ++static void death_by_timeout(unsigned long ul_conntrack) ++{ ++ struct ip6_conntrack *ct = (void *)ul_conntrack; ++ ++ WRITE_LOCK(&ip6_conntrack_lock); ++ clean_from_lists(ct); ++ WRITE_UNLOCK(&ip6_conntrack_lock); ++ ip6_conntrack_put(ct); ++} ++ ++static inline int ++conntrack_tuple_cmp(const struct ip6_conntrack_tuple_hash *i, ++ const struct ip6_conntrack_tuple *tuple, ++ const struct ip6_conntrack *ignored_conntrack) ++{ ++ MUST_BE_READ_LOCKED(&ip6_conntrack_lock); ++ return i->ctrack != ignored_conntrack ++ && ip6_ct_tuple_equal(tuple, &i->tuple); ++} ++ ++static struct ip6_conntrack_tuple_hash * ++__ip6_conntrack_find(const struct ip6_conntrack_tuple *tuple, ++ const struct ip6_conntrack *ignored_conntrack) ++{ ++ struct ip6_conntrack_tuple_hash *h; ++ unsigned int hash = hash_conntrack(tuple); ++ ++ MUST_BE_READ_LOCKED(&ip6_conntrack_lock); ++ h = LIST_FIND(&ip6_conntrack_hash[hash], ++ conntrack_tuple_cmp, ++ struct ip6_conntrack_tuple_hash *, ++ tuple, ignored_conntrack); ++ return h; ++} ++ ++/* Find a connection corresponding to a tuple. */ ++struct ip6_conntrack_tuple_hash * ++ip6_conntrack_find_get(const struct ip6_conntrack_tuple *tuple, ++ const struct ip6_conntrack *ignored_conntrack) ++{ ++ struct ip6_conntrack_tuple_hash *h; ++ ++ READ_LOCK(&ip6_conntrack_lock); ++ h = __ip6_conntrack_find(tuple, ignored_conntrack); ++ if (h) ++ atomic_inc(&h->ctrack->ct_general.use); ++ READ_UNLOCK(&ip6_conntrack_lock); ++ ++ return h; ++} ++ ++/* Confirm a connection given skb; places it in hash table */ ++int __ip6_conntrack_confirm(struct sk_buff *skb) ++{ ++ unsigned int hash, repl_hash; ++ struct ip6_conntrack *ct; ++ enum ip6_conntrack_info ctinfo; ++ ++ ct = ip6_conntrack_get(skb, &ctinfo); ++ ++ /* ip6t_REJECT uses ip6_conntrack_attach to attach related ++ ICMP/TCP RST packets in other direction. Actual packet ++ which created connection will be IP6_CT_NEW or for an ++ expected connection, IP6_CT_RELATED. */ ++ if (CTINFO2DIR(ctinfo) != IP6_CT_DIR_ORIGINAL) ++ return NF_ACCEPT; ++ ++ hash = hash_conntrack(&ct->tuplehash[IP6_CT_DIR_ORIGINAL].tuple); ++ repl_hash = hash_conntrack(&ct->tuplehash[IP6_CT_DIR_REPLY].tuple); ++ ++ /* We're not in hash table, and we refuse to set up related ++ connections for unconfirmed conns. But packet copies and ++ REJECT will give spurious warnings here. */ ++ /* IP6_NF_ASSERT(atomic_read(&ct->ct_general.use) == 1); */ ++ ++ /* No external references means noone else could have ++ confirmed us. */ ++ IP6_NF_ASSERT(!is_confirmed(ct)); ++ DEBUGP("Confirming conntrack %p\n", ct); ++ ++ WRITE_LOCK(&ip6_conntrack_lock); ++ /* See if there's one in the list already, including reverse: ++ NAT could have grabbed it without realizing, since we're ++ not in the hash. If there is, we lost race. */ ++ if (!LIST_FIND(&ip6_conntrack_hash[hash], ++ conntrack_tuple_cmp, ++ struct ip6_conntrack_tuple_hash *, ++ &ct->tuplehash[IP6_CT_DIR_ORIGINAL].tuple, NULL) ++ && !LIST_FIND(&ip6_conntrack_hash[repl_hash], ++ conntrack_tuple_cmp, ++ struct ip6_conntrack_tuple_hash *, ++ &ct->tuplehash[IP6_CT_DIR_REPLY].tuple, NULL)) { ++ list_prepend(&ip6_conntrack_hash[hash], ++ &ct->tuplehash[IP6_CT_DIR_ORIGINAL]); ++ list_prepend(&ip6_conntrack_hash[repl_hash], ++ &ct->tuplehash[IP6_CT_DIR_REPLY]); ++ /* Timer relative to confirmation time, not original ++ setting time, otherwise we'd get timer wrap in ++ wierd delay cases. */ ++ ct->timeout.expires += jiffies; ++ add_timer(&ct->timeout); ++ atomic_inc(&ct->ct_general.use); ++ set_bit(IP6S_CONFIRMED_BIT, &ct->status); ++ WRITE_UNLOCK(&ip6_conntrack_lock); ++ return NF_ACCEPT; ++ } ++ ++ WRITE_UNLOCK(&ip6_conntrack_lock); ++ return NF_DROP; ++} ++ ++/* Is this needed ? this code is for NAT. - kozakai */ ++/* Returns true if a connection correspondings to the tuple (required ++ for NAT). */ ++int ++ip6_conntrack_tuple_taken(const struct ip6_conntrack_tuple *tuple, ++ const struct ip6_conntrack *ignored_conntrack) ++{ ++ struct ip6_conntrack_tuple_hash *h; ++ ++ READ_LOCK(&ip6_conntrack_lock); ++ h = __ip6_conntrack_find(tuple, ignored_conntrack); ++ READ_UNLOCK(&ip6_conntrack_lock); ++ ++ return h != NULL; ++} ++ ++/* Returns conntrack if it dealt with ICMP, and filled in skb fields */ ++struct ip6_conntrack * ++icmp6_error_track(struct sk_buff *skb, ++ unsigned int icmp6off, ++ enum ip6_conntrack_info *ctinfo, ++ unsigned int hooknum) ++{ ++ struct ip6_conntrack_tuple intuple, origtuple; ++ struct ip6_conntrack_tuple_hash *h; ++ struct ipv6hdr *ip6h; ++ struct icmp6hdr hdr; ++ struct ipv6hdr inip6h; ++ unsigned int inip6off; ++ struct ip6_conntrack_protocol *inproto; ++ u_int8_t inprotonum; ++ unsigned int inprotoff; ++ ++ IP6_NF_ASSERT(skb->nfct == NULL); ++ ++ ip6h = skb->nh.ipv6h; ++ if (skb_copy_bits(skb, icmp6off, &hdr, sizeof(hdr)) != 0) { ++ DEBUGP("icmp_error_track: Can't copy ICMPv6 hdr.\n"); ++ return NULL; ++ } ++ ++ if (hdr.icmp6_type >= 128) ++ return NULL; ++ ++ /* ++ * Should I ignore invalid ICMPv6 error here ? ++ * ex) ICMPv6 error in ICMPv6 error, Fragmented packet, and so on. ++ * - kozakai ++ */ ++ ++ /* Why not check checksum in IPv4 conntrack ? - kozakai */ ++ /* Ignore it if the checksum's bogus. */ ++ ++ if (csum_ipv6_magic(&ip6h->saddr, &ip6h->daddr, skb->len - icmp6off, ++ IPPROTO_ICMPV6, ++ skb_checksum(skb, icmp6off, ++ skb->len - icmp6off, 0))) { ++ DEBUGP("ICMPv6 checksum failed\n"); ++ return NULL; ++ } ++ ++ inip6off = icmp6off + sizeof(hdr); ++ if (skb_copy_bits(skb, inip6off, &inip6h, sizeof(inip6h)) != 0) { ++ DEBUGP("Can't copy inner IPv6 hdr.\n"); ++ return NULL; ++ } ++ ++ inprotonum = inip6h.nexthdr; ++ inprotoff = ip6_ct_skip_exthdr(skb, inip6off + sizeof(inip6h), ++ &inprotonum, ++ skb->len - inip6off - sizeof(inip6h)); ++ ++ if (inprotoff < 0 || inprotoff > skb->len ++ || inprotonum == NEXTHDR_FRAGMENT) { ++ DEBUGP("icmp6_error: Can't find protocol header in ICMPv6 payload.\n"); ++ return NULL; ++ } ++ ++ inproto = ip6_ct_find_proto(inprotonum); ++ ++ /* Are they talking about one of our connections? */ ++ if (!ip6_get_tuple(&inip6h, skb, inprotoff, inprotonum, ++ &origtuple, inproto)) { ++ DEBUGP("icmp6_error: ! get_tuple p=%u\n", inprotonum); ++ return NULL; ++ } ++ ++ /* Ordinarily, we'd expect the inverted tupleproto, but it's ++ been preserved inside the ICMP. */ ++ if (!invert_tuple(&intuple, &origtuple, inproto)) { ++ DEBUGP("icmp6_error_track: Can't invert tuple\n"); ++ return NULL; ++ } ++ ++ *ctinfo = IP6_CT_RELATED; ++ ++ h = ip6_conntrack_find_get(&intuple, NULL); ++ if (!h) { ++ DEBUGP("icmp6_error_track: no match\n"); ++ return NULL; ++ } else { ++ if (DIRECTION(h) == IP6_CT_DIR_REPLY) ++ *ctinfo += IP6_CT_IS_REPLY; ++ } ++ ++ /* Update skb to refer to this connection */ ++ skb->nfct = &h->ctrack->ct_general; ++ return h->ctrack; ++} ++ ++/* There's a small race here where we may free a just-assured ++ connection. Too bad: we're in trouble anyway. */ ++static inline int unreplied(const struct ip6_conntrack_tuple_hash *i) ++{ ++ return !(test_bit(IP6S_ASSURED_BIT, &i->ctrack->status)); ++} ++ ++static int early_drop(struct list_head *chain) ++{ ++ /* Traverse backwards: gives us oldest, which is roughly LRU */ ++ struct ip6_conntrack_tuple_hash *h; ++ int dropped = 0; ++ ++ READ_LOCK(&ip6_conntrack_lock); ++ h = LIST_FIND_B(chain, unreplied, struct ip6_conntrack_tuple_hash *); ++ if (h) ++ atomic_inc(&h->ctrack->ct_general.use); ++ READ_UNLOCK(&ip6_conntrack_lock); ++ ++ if (!h) ++ return dropped; ++ ++ if (del_timer(&h->ctrack->timeout)) { ++ death_by_timeout((unsigned long)h->ctrack); ++ dropped = 1; ++ } ++ ip6_conntrack_put(h->ctrack); ++ return dropped; ++} ++ ++static inline int helper_cmp(const struct ip6_conntrack_helper *i, ++ const struct ip6_conntrack_tuple *rtuple) ++{ ++ return ip6_ct_tuple_mask_cmp(rtuple, &i->tuple, &i->mask); ++} ++ ++struct ip6_conntrack_helper * ++ip6_ct_find_helper(const struct ip6_conntrack_tuple *tuple){ ++ ++ MUST_BE_READ_LOCKED(&ip6_conntrack_lock); ++ return LIST_FIND(&helpers, helper_cmp, ++ struct ip6_conntrack_helper *, ++ tuple); ++} ++ ++/* Allocate a new conntrack: we return -ENOMEM if classification ++ failed due to stress. Otherwise it really is unclassifiable. */ ++static struct ip6_conntrack_tuple_hash * ++init_conntrack(const struct ip6_conntrack_tuple *tuple, ++ struct ip6_conntrack_protocol *protocol, ++ struct sk_buff *skb, ++ unsigned int protoff) ++{ ++ struct ip6_conntrack *conntrack; ++ struct ip6_conntrack_tuple repl_tuple; ++ size_t hash; ++ struct ip6_conntrack_expect *expected; ++ static unsigned int drop_next = 0; ++ ++ if (!ip6_conntrack_hash_rnd_initted) { ++ get_random_bytes(&ip6_conntrack_hash_rnd, 4); ++ ip6_conntrack_hash_rnd_initted = 1; ++ } ++ ++ hash = hash_conntrack(tuple); ++ ++ if (ip6_conntrack_max && ++ atomic_read(&ip6_conntrack_count) >= ip6_conntrack_max) { ++ /* Try dropping from random chain, or else from the ++ chain about to put into (in case they're trying to ++ bomb one hash chain). */ ++ unsigned int next = (drop_next++)%ip6_conntrack_htable_size; ++ ++ if (!early_drop(&ip6_conntrack_hash[next]) ++ && !early_drop(&ip6_conntrack_hash[hash])) { ++ if (net_ratelimit()) ++ printk(KERN_WARNING ++ "ip6_conntrack: table full, dropping" ++ " packet.\n"); ++ return ERR_PTR(-ENOMEM); ++ } ++ } ++ ++ if (!invert_tuple(&repl_tuple, tuple, protocol)) { ++ DEBUGP("Can't invert tuple.\n"); ++ return NULL; ++ } ++ ++ conntrack = kmem_cache_alloc(ip6_conntrack_cachep, GFP_ATOMIC); ++ if (!conntrack) { ++ DEBUGP("Can't allocate conntrack.\n"); ++ return ERR_PTR(-ENOMEM); ++ } ++ ++ memset(conntrack, 0, sizeof(*conntrack)); ++ atomic_set(&conntrack->ct_general.use, 1); ++ conntrack->ct_general.destroy = destroy_conntrack; ++ conntrack->tuplehash[IP6_CT_DIR_ORIGINAL].tuple = *tuple; ++ conntrack->tuplehash[IP6_CT_DIR_ORIGINAL].ctrack = conntrack; ++ conntrack->tuplehash[IP6_CT_DIR_REPLY].tuple = repl_tuple; ++ conntrack->tuplehash[IP6_CT_DIR_REPLY].ctrack = conntrack; ++ ++ if (!protocol->new(conntrack, skb, protoff)) { ++ kmem_cache_free(ip6_conntrack_cachep, conntrack); ++ return NULL; ++ } ++ /* Don't set timer yet: wait for confirmation */ ++ init_timer(&conntrack->timeout); ++ conntrack->timeout.data = (unsigned long)conntrack; ++ conntrack->timeout.function = death_by_timeout; ++ ++ INIT_LIST_HEAD(&conntrack->sibling_list); ++ ++ WRITE_LOCK(&ip6_conntrack_lock); ++ /* Need finding and deleting of expected ONLY if we win race */ ++ READ_LOCK(&ip6_conntrack_expect_tuple_lock); ++ expected = LIST_FIND(&ip6_conntrack_expect_list, expect_cmp, ++ struct ip6_conntrack_expect *, tuple); ++ READ_UNLOCK(&ip6_conntrack_expect_tuple_lock); ++ ++ /* If master is not in hash table yet (ie. packet hasn't left ++ this machine yet), how can other end know about expected? ++ Hence these are not the droids you are looking for (if ++ master ct never got confirmed, we'd hold a reference to it ++ and weird things would happen to future packets). */ ++ if (expected && !is_confirmed(expected->expectant)) ++ expected = NULL; ++ ++ /* Look up the conntrack helper for master connections only */ ++ if (!expected) ++ conntrack->helper = ip6_ct_find_helper(&repl_tuple); ++ ++ /* If the expectation is dying, then this is a loser. */ ++ if (expected ++ && expected->expectant->helper->timeout ++ && ! del_timer(&expected->timeout)) ++ expected = NULL; ++ ++ if (expected) { ++ DEBUGP("conntrack: expectation arrives ct=%p exp=%p\n", ++ conntrack, expected); ++ /* Welcome, Mr. Bond. We've been expecting you... */ ++ IP6_NF_ASSERT(master_ct6(conntrack)); ++ __set_bit(IP6S_EXPECTED_BIT, &conntrack->status); ++ conntrack->master = expected; ++ expected->sibling = conntrack; ++ LIST_DELETE(&ip6_conntrack_expect_list, expected); ++ expected->expectant->expecting--; ++ nf_conntrack_get(&master_ct6(conntrack)->ct_general); ++ } ++ atomic_inc(&ip6_conntrack_count); ++ WRITE_UNLOCK(&ip6_conntrack_lock); ++ ++ if (expected && expected->expectfn) ++ expected->expectfn(conntrack); ++ return &conntrack->tuplehash[IP6_CT_DIR_ORIGINAL]; ++} ++ ++/* On success, returns conntrack ptr, sets skb->nfct and ctinfo */ ++static inline struct ip6_conntrack * ++resolve_normal_ct(struct sk_buff *skb, ++ unsigned int protoff, ++ u_int16_t protonum, ++ struct ip6_conntrack_protocol *proto, ++ int *set_reply, ++ unsigned int hooknum, ++ enum ip6_conntrack_info *ctinfo) ++{ ++ struct ip6_conntrack_tuple tuple; ++ struct ip6_conntrack_tuple_hash *h; ++ ++ if (!ip6_get_tuple(skb->nh.ipv6h, skb, protoff, protonum, &tuple, proto)) ++ return NULL; ++ ++ /* look for tuple match */ ++ h = ip6_conntrack_find_get(&tuple, NULL); ++ if (!h) { ++ h = init_conntrack(&tuple, proto, skb, protoff); ++ if (!h) ++ return NULL; ++ if (IS_ERR(h)) ++ return (void *)h; ++ } ++ ++ /* It exists; we have (non-exclusive) reference. */ ++ if (DIRECTION(h) == IP6_CT_DIR_REPLY) { ++ *ctinfo = IP6_CT_ESTABLISHED + IP6_CT_IS_REPLY; ++ /* Please set reply bit if this packet OK */ ++ *set_reply = 1; ++ } else { ++ /* Once we've had two way comms, always ESTABLISHED. */ ++ if (test_bit(IP6S_SEEN_REPLY_BIT, &h->ctrack->status)) { ++ DEBUGP("ip6_conntrack_in: normal packet for %p\n", ++ h->ctrack); ++ *ctinfo = IP6_CT_ESTABLISHED; ++ } else if (test_bit(IP6S_EXPECTED_BIT, &h->ctrack->status)) { ++ DEBUGP("ip6_conntrack_in: related packet for %p\n", ++ h->ctrack); ++ *ctinfo = IP6_CT_RELATED; ++ } else { ++ DEBUGP("ip6_conntrack_in: new packet for %p\n", ++ h->ctrack); ++ *ctinfo = IP6_CT_NEW; ++ } ++ *set_reply = 0; ++ } ++ skb->nfct = &h->ctrack->ct_general; ++ skb->nfctinfo = *ctinfo; ++ return h->ctrack; ++} ++ ++/* Netfilter hook itself. */ ++unsigned int ip6_conntrack_in(unsigned int hooknum, ++ struct sk_buff **pskb, ++ const struct net_device *in, ++ const struct net_device *out, ++ int (*okfn)(struct sk_buff *)) ++{ ++ struct ip6_conntrack *ct; ++ enum ip6_conntrack_info ctinfo; ++ struct ip6_conntrack_protocol *proto; ++ int set_reply; ++ int ret; ++ u_int8_t protonum; ++ int len; ++ int daddr_type; ++ int protoff, extoff; ++ ++ /* FIXME: Do this right please. --RR */ ++ (*pskb)->nfcache |= NFC_UNKNOWN; ++ ++ /* Ignore multicast - kozakai */ ++ daddr_type = ipv6_addr_type(&(*pskb)->nh.ipv6h->daddr); ++ if (daddr_type & IPV6_ADDR_MULTICAST) ++ return NF_ACCEPT; ++ ++ /* Previously seen (loopback)? Ignore. Do this before ++ fragment check. */ ++ if ((*pskb)->nfct) ++ return NF_ACCEPT; ++ ++ extoff = (u8*)((*pskb)->nh.ipv6h+1) - (*pskb)->data; ++ len = (*pskb)->len - extoff; ++ ++ /* Verify that a protocol is present and get the protocol handler ++ we need */ ++ protonum = (*pskb)->nh.ipv6h->nexthdr; ++ protoff = ip6_ct_skip_exthdr(*pskb, extoff, &protonum, len); ++ ++ /* ++ * Notice! (protoff == (*pskb)->len) mean that this packet doesn't ++ * have no data except of IPv6 & ext headers. but tracked anyway. ++ * - kozakai ++ */ ++ if (protoff < 0 || protoff > (*pskb)->len ++ || protonum == NEXTHDR_FRAGMENT) { ++ DEBUGP("ip6_conntrack_core: can't find proto in pkt\n"); ++ return NF_ACCEPT; ++ } ++ ++ /* It may be an icmp error... */ ++ if (protonum == IPPROTO_ICMPV6 ++ && icmp6_error_track(*pskb, protoff, &ctinfo, hooknum)) ++ return NF_ACCEPT; ++ ++ proto = ip6_ct_find_proto(protonum); ++ ++ if (!(ct = resolve_normal_ct(*pskb, protoff, protonum, proto, ++ &set_reply, hooknum,&ctinfo))) ++ /* Not valid part of a connection */ ++ return NF_ACCEPT; ++ ++ if (IS_ERR(ct)) ++ /* Too stressed to deal. */ ++ return NF_DROP; ++ ++ IP6_NF_ASSERT((*pskb)->nfct); ++ ++ ret = proto->packet(ct, *pskb, protoff, ctinfo); ++ if (ret == -1) { ++ /* Invalid */ ++ nf_conntrack_put((*pskb)->nfct); ++ (*pskb)->nfct = NULL; ++ return NF_ACCEPT; ++ } ++ ++ if (ret != NF_DROP && ct->helper) { ++ ret = ct->helper->help(*pskb, protoff, ct, ctinfo); ++ if (ret == -1) { ++ /* Invalid */ ++ nf_conntrack_put((*pskb)->nfct); ++ (*pskb)->nfct = NULL; ++ return NF_ACCEPT; ++ } ++ } ++ if (set_reply) ++ set_bit(IP6S_SEEN_REPLY_BIT, &ct->status); ++ ++ return ret; ++} ++ ++int ip6_invert_tuplepr(struct ip6_conntrack_tuple *inverse, ++ const struct ip6_conntrack_tuple *orig) ++{ ++ return invert_tuple(inverse, orig, ip6_ct_find_proto(orig->dst.protonum)); ++} ++ ++static inline int resent_expect(const struct ip6_conntrack_expect *i, ++ const struct ip6_conntrack_tuple *tuple, ++ const struct ip6_conntrack_tuple *mask) ++{ ++ DEBUGP("resent_expect\n"); ++ DEBUGP(" tuple: "); DUMP_TUPLE(&i->tuple); ++ DEBUGP("test tuple: "); DUMP_TUPLE(tuple); ++ return (ip6_ct_tuple_equal(&i->tuple, tuple) ++ && ip6_ct_tuple_equal(&i->mask, mask)); ++} ++ ++static struct in6_addr * ++or_addr6_bits(struct in6_addr *result, const struct in6_addr *one, ++ const struct in6_addr *two) ++{ ++ ++ int count = 0; ++ ++ for (count = 0; count < 8; count++) ++ result->s6_addr16[count] = ntohs(one->s6_addr16[count]) ++ & ntohs(two->s6_addr16[count]); ++ ++ return result; ++} ++ ++/* Would two expected things clash? */ ++static inline int expect_clash(const struct ip6_conntrack_expect *i, ++ const struct ip6_conntrack_tuple *tuple, ++ const struct ip6_conntrack_tuple *mask) ++{ ++ /* Part covered by intersection of masks must be unequal, ++ otherwise they clash */ ++ struct ip6_conntrack_tuple intersect_mask; ++ ++ intersect_mask.src.u.all = i->mask.src.u.all & mask->src.u.all; ++ intersect_mask.dst.u.all = i->mask.dst.u.all & mask->dst.u.all; ++ intersect_mask.dst.protonum = i->mask.dst.protonum ++ & mask->dst.protonum; ++ ++ or_addr6_bits(&intersect_mask.src.ip, &i->mask.src.ip, ++ &mask->src.ip); ++ or_addr6_bits(&intersect_mask.dst.ip, &i->mask.dst.ip, ++ &mask->dst.ip); ++ ++ return ip6_ct_tuple_mask_cmp(&i->tuple, tuple, &intersect_mask); ++} ++ ++inline void ip6_conntrack_unexpect_related(struct ip6_conntrack_expect *expect) ++{ ++ WRITE_LOCK(&ip6_conntrack_lock); ++ unexpect_related(expect); ++ WRITE_UNLOCK(&ip6_conntrack_lock); ++} ++ ++static void expectation_timed_out(unsigned long ul_expect) ++{ ++ struct ip6_conntrack_expect *expect = (void *) ul_expect; ++ ++ DEBUGP("expectation %p timed out\n", expect); ++ WRITE_LOCK(&ip6_conntrack_lock); ++ __unexpect_related(expect); ++ WRITE_UNLOCK(&ip6_conntrack_lock); ++} ++ ++/* Add a related connection. */ ++int ip6_conntrack_expect_related(struct ip6_conntrack *related_to, ++ struct ip6_conntrack_expect *expect) ++{ ++ struct ip6_conntrack_expect *old, *new; ++ int ret = 0; ++ ++ WRITE_LOCK(&ip6_conntrack_lock); ++ /* Because of the write lock, no reader can walk the lists, ++ * so there is no need to use the tuple lock too */ ++ ++ DEBUGP("ip6_conntrack_expect_related %p\n", related_to); ++ DEBUGP("tuple: "); DUMP_TUPLE(&expect->tuple); ++ DEBUGP("mask: "); DUMP_TUPLE(&expect->mask); ++ ++ old = LIST_FIND(&ip6_conntrack_expect_list, resent_expect, ++ struct ip6_conntrack_expect *, &expect->tuple, ++ &expect->mask); ++ if (old) { ++ /* Helper private data may contain offsets but no pointers ++ pointing into the payload - otherwise we should have to copy ++ the data filled out by the helper over the old one */ ++ DEBUGP("expect_related: resent packet\n"); ++ if (related_to->helper->timeout) { ++ if (!del_timer(&old->timeout)) { ++ /* expectation is dying. Fall through */ ++ old = NULL; ++ } else { ++ old->timeout.expires = jiffies + ++ related_to->helper->timeout * HZ; ++ add_timer(&old->timeout); ++ } ++ } ++ ++ if (old) { ++ WRITE_UNLOCK(&ip6_conntrack_lock); ++ return -EEXIST; ++ } ++ } else if (related_to->helper->max_expected && ++ related_to->expecting >= related_to->helper->max_expected) { ++ struct list_head *cur_item; ++ /* old == NULL */ ++ if (!(related_to->helper->flags & ++ IP6_CT_HELPER_F_REUSE_EXPECT)) { ++ WRITE_UNLOCK(&ip6_conntrack_lock); ++ if (net_ratelimit()) ++ printk(KERN_WARNING ++ "ip6_conntrack: max number of expected " ++ "connections %i of %s for " ++ "%x:%x:%x:%x:%x:%x:%x:%x->%x:%x:%x:%x:%x:%x:%x:%x\n", ++ related_to->helper->max_expected, ++ related_to->helper->name, ++ NIP6(related_to->tuplehash[IP6_CT_DIR_ORIGINAL].tuple.src.ip), ++ NIP6(related_to->tuplehash[IP6_CT_DIR_ORIGINAL].tuple.dst.ip)); ++ return -EPERM; ++ } ++ DEBUGP("ip6_conntrack: max number of expected " ++ "connections %i of %s reached for " ++ "%x:%x:%x:%x:%x:%x:%x:%x->%x:%x:%x:%x:%x:%x:%x:%x, reusing\n", ++ related_to->helper->max_expected, ++ related_to->helper->name, ++ NIP6(related_to->tuplehash[IP6_CT_DIR_ORIGINAL].tuple.src.ip), ++ NIP6(related_to->tuplehash[IP6_CT_DIR_ORIGINAL].tuple.dst.ip)); ++ ++ /* choose the the oldest expectation to evict */ ++ list_for_each(cur_item, &related_to->sibling_list) { ++ struct ip6_conntrack_expect *cur; ++ ++ cur = list_entry(cur_item, ++ struct ip6_conntrack_expect, ++ expected_list); ++ if (cur->sibling == NULL) { ++ old = cur; ++ break; ++ } ++ } ++ ++ /* (!old) cannot happen, since related_to->expecting is the ++ * number of unconfirmed expects */ ++ IP6_NF_ASSERT(old); ++ ++ /* newnat14 does not reuse the real allocated memory ++ * structures but rather unexpects the old and ++ * allocates a new. unexpect_related will decrement ++ * related_to->expecting. ++ */ ++ unexpect_related(old); ++ ret = -EPERM; ++ } else if (LIST_FIND(&ip6_conntrack_expect_list, expect_clash, ++ struct ip6_conntrack_expect *, &expect->tuple, ++ &expect->mask)) { ++ WRITE_UNLOCK(&ip6_conntrack_lock); ++ DEBUGP("expect_related: busy!\n"); ++ return -EBUSY; ++ } ++ ++ new = (struct ip6_conntrack_expect *) ++ kmalloc(sizeof(struct ip6_conntrack_expect), GFP_ATOMIC); ++ if (!new) { ++ WRITE_UNLOCK(&ip6_conntrack_lock); ++ DEBUGP("expect_relaed: OOM allocating expect\n"); ++ return -ENOMEM; ++ } ++ ++ DEBUGP("new expectation %p of conntrack %p\n", new, related_to); ++ memcpy(new, expect, sizeof(*expect)); ++ new->expectant = related_to; ++ new->sibling = NULL; ++ atomic_set(&new->use, 1); ++ ++ /* add to expected list for this connection */ ++ list_add(&new->expected_list, &related_to->sibling_list); ++ /* add to global list of expectations */ ++ list_prepend(&ip6_conntrack_expect_list, &new->list); ++ /* add and start timer if required */ ++ if (related_to->helper->timeout) { ++ init_timer(&new->timeout); ++ new->timeout.data = (unsigned long)new; ++ new->timeout.function = expectation_timed_out; ++ new->timeout.expires = jiffies + ++ related_to->helper->timeout * HZ; ++ add_timer(&new->timeout); ++ } ++ related_to->expecting++; ++ ++ WRITE_UNLOCK(&ip6_conntrack_lock); ++ ++ return ret; ++} ++ ++ ++/* Is this code needed ? this is for NAT. - kozakai */ ++/* Alter reply tuple (maybe alter helper). If it's already taken, ++ return 0 and don't do alteration. */ ++int ip6_conntrack_alter_reply(struct ip6_conntrack *conntrack, ++ const struct ip6_conntrack_tuple *newreply) ++{ ++ WRITE_LOCK(&ip6_conntrack_lock); ++ if (__ip6_conntrack_find(newreply, conntrack)) { ++ WRITE_UNLOCK(&ip6_conntrack_lock); ++ return 0; ++ } ++ /* Should be unconfirmed, so not in hash table yet */ ++ IP6_NF_ASSERT(!is_confirmed(conntrack)); ++ ++ DEBUGP("Altering reply tuple of %p to ", conntrack); ++ DUMP_TUPLE(newreply); ++ ++ conntrack->tuplehash[IP6_CT_DIR_REPLY].tuple = *newreply; ++ if (!conntrack->master) ++ conntrack->helper = ip6_ct_find_helper(newreply); ++ WRITE_UNLOCK(&ip6_conntrack_lock); ++ ++ return 1; ++} ++ ++int ip6_conntrack_helper_register(struct ip6_conntrack_helper *me) ++{ ++ WRITE_LOCK(&ip6_conntrack_lock); ++ list_prepend(&helpers, me); ++ WRITE_UNLOCK(&ip6_conntrack_lock); ++ ++ return 0; ++} ++ ++static inline int unhelp(struct ip6_conntrack_tuple_hash *i, ++ const struct ip6_conntrack_helper *me) ++{ ++ if (i->ctrack->helper == me) { ++ /* Get rid of any expected. */ ++ remove_expectations(i->ctrack, 0); ++ /* And *then* set helper to NULL */ ++ i->ctrack->helper = NULL; ++ } ++ return 0; ++} ++ ++void ip6_conntrack_helper_unregister(struct ip6_conntrack_helper *me) ++{ ++ unsigned int i; ++ ++ /* Need write lock here, to delete helper. */ ++ WRITE_LOCK(&ip6_conntrack_lock); ++ LIST_DELETE(&helpers, me); ++ ++ /* Get rid of expecteds, set helpers to NULL. */ ++ for (i = 0; i < ip6_conntrack_htable_size; i++) ++ LIST_FIND_W(&ip6_conntrack_hash[i], unhelp, ++ struct ip6_conntrack_tuple_hash *, me); ++ WRITE_UNLOCK(&ip6_conntrack_lock); ++ ++ /* Someone could be still looking at the helper in a bh. */ ++ synchronize_net(); ++} ++ ++/* Refresh conntrack for this many jiffies. */ ++void ip6_ct_refresh(struct ip6_conntrack *ct, unsigned long extra_jiffies) ++{ ++ IP6_NF_ASSERT(ct->timeout.data == (unsigned long)ct); ++ ++ WRITE_LOCK(&ip6_conntrack_lock); ++ /* If not in hash table, timer will not be active yet */ ++ if (!is_confirmed(ct)) ++ ct->timeout.expires = extra_jiffies; ++ else { ++ /* Need del_timer for race avoidance (may already be dying). */ ++ if (del_timer(&ct->timeout)) { ++ ct->timeout.expires = jiffies + extra_jiffies; ++ add_timer(&ct->timeout); ++ } ++ } ++ WRITE_UNLOCK(&ip6_conntrack_lock); ++} ++ ++/* Used by ip6t_REJECT. */ ++static void ip6_conntrack_attach(struct sk_buff *nskb, struct sk_buff *skb) ++{ ++ struct ip6_conntrack *ct; ++ enum ip6_conntrack_info ctinfo; ++ ++ ct = ip6_conntrack_get(skb, &ctinfo); ++ ++ /* This ICMP is in reverse direction to the packet which ++ caused it */ ++ if (CTINFO2DIR(ctinfo) == IP6_CT_DIR_ORIGINAL) ++ ctinfo = IP6_CT_RELATED + IP6_CT_IS_REPLY; ++ else ++ ctinfo = IP6_CT_RELATED; ++ ++ /* Attach new skbuff, and increment count */ ++ nskb->nfct = &ct->ct_general; ++ nskb->nfctinfo = ctinfo; ++ nf_conntrack_get(nskb->nfct); ++} ++ ++static inline int ++do_kill(const struct ip6_conntrack_tuple_hash *i, ++ int (*kill)(const struct ip6_conntrack *i, void *data), ++ void *data) ++{ ++ return kill(i->ctrack, data); ++} ++ ++/* Bring out ya dead! */ ++static struct ip6_conntrack_tuple_hash * ++get_next_corpse(int (*kill)(const struct ip6_conntrack *i, void *data), ++ void *data) ++{ ++ struct ip6_conntrack_tuple_hash *h = NULL; ++ unsigned int i; ++ ++ READ_LOCK(&ip6_conntrack_lock); ++ for (i = 0; !h && i < ip6_conntrack_htable_size; i++) { ++ h = LIST_FIND(&ip6_conntrack_hash[i], do_kill, ++ struct ip6_conntrack_tuple_hash *, kill, data); ++ } ++ if (h) ++ atomic_inc(&h->ctrack->ct_general.use); ++ READ_UNLOCK(&ip6_conntrack_lock); ++ ++ return h; ++} ++ ++void ++ip6_ct_selective_cleanup(int (*kill)(const struct ip6_conntrack *i, void *data), ++ void *data) ++{ ++ struct ip6_conntrack_tuple_hash *h; ++ ++ /* This is order n^2, by the way. */ ++ while ((h = get_next_corpse(kill, data)) != NULL) { ++ /* Time to push up daises... */ ++ if (del_timer(&h->ctrack->timeout)) ++ death_by_timeout((unsigned long)h->ctrack); ++ /* ... else the timer will get him soon. */ ++ ++ ip6_conntrack_put(h->ctrack); ++ } ++} ++ ++/* Fast function for those who don't want to parse /proc (and I don't ++ blame them). */ ++/* Reversing the socket's dst/src point of view gives us the reply ++ mapping. */ ++static int ++getorigdst(struct sock *sk, int optval, void __user *user, int *len) ++{ ++ struct inet_sock *inet = inet_sk(sk); ++ struct ipv6_pinfo *np = inet6_sk(sk); ++ struct ip6_conntrack_tuple_hash *h; ++ struct ip6_conntrack_tuple tuple; ++ ++ memset(&tuple, 0, sizeof(tuple)); ++ ipv6_addr_copy(&tuple.src.ip, &np->rcv_saddr); ++ ipv6_addr_copy(&tuple.dst.ip, &np->daddr); ++ tuple.src.u.tcp.port = inet->sport; ++ tuple.dst.u.tcp.port = inet->dport; ++ tuple.dst.protonum = IPPROTO_TCP; ++ ++ /* We only do TCP at the moment: is there a better way? */ ++ if (strcmp(sk->sk_prot->name, "TCP")) { ++ DEBUGP("IPV6_NF_ORIGINAL_DST: Not a TCP socket\n"); ++ return -ENOPROTOOPT; ++ } ++ ++ if ((unsigned int) *len < sizeof(struct sockaddr_in6)) { ++ DEBUGP("IPV6_NF_ORIGINAL_DST: len %u not %u\n", ++ *len, sizeof(struct sockaddr_in6)); ++ return -EINVAL; ++ } ++ ++ h = ip6_conntrack_find_get(&tuple, NULL); ++ if (h) { ++ struct sockaddr_in6 sin; ++ memset(&sin, 0, sizeof(sin)); ++ ++ sin.sin6_family = AF_INET6; ++ sin.sin6_port = h->ctrack->tuplehash[IP6_CT_DIR_ORIGINAL] ++ .tuple.dst.u.tcp.port; ++ ipv6_addr_copy(&sin.sin6_addr, ++ &h->ctrack->tuplehash[IP6_CT_DIR_ORIGINAL] ++ .tuple.dst.ip); ++ /* FIXME: sin6_scope_id */ ++ ++ DEBUGP("IPV6_NF_ORIGINAL_DST: %x:%x:%x:%x:%x:%x:%x:%x %u\n", ++ NIP6(sin.sin6_addr), ntohs(sin.sin6_port)); ++ ip6_conntrack_put(h->ctrack); ++ if (copy_to_user(user, &sin, sizeof(sin)) != 0) ++ return -EFAULT; ++ else ++ return 0; ++ } ++ DEBUGP("IPV6_NF_ORIGINAL_DST: Can't find %x:%x:%x:%x:%x:%x:%x:%x/%u-%x:%x:%x:%x:%x:%x:%x:%x/%u.\n", ++ NIP6(tuple.src.ip), ntohs(tuple.src.u.tcp.port), ++ NIP6(tuple.dst.ip), ntohs(tuple.dst.u.tcp.port)); ++ return -ENOENT; ++} ++ ++static struct nf_sockopt_ops so_getorigdst = { ++ .pf = PF_INET6, ++ .get_optmin = IPV6_NF_ORIGINAL_DST, ++ .get_optmax = IPV6_NF_ORIGINAL_DST+1, ++ .get = &getorigdst, ++}; ++ ++#define NET_IP6_CONNTRACK_MAX 2089 ++#define NET_IP6_CONNTRACK_MAX_NAME "ip6_conntrack_max" ++ ++#ifdef CONFIG_SYSCTL ++static struct ctl_table_header *ip6_conntrack_sysctl_header; ++ ++static ctl_table ip6_conntrack_table[] = { ++ { ++ .ctl_name = NET_IP6_CONNTRACK_MAX, ++ .procname = NET_IP6_CONNTRACK_MAX_NAME, ++ .data = &ip6_conntrack_max, ++ .maxlen = sizeof(ip6_conntrack_max), ++ .mode = 0644, ++ .proc_handler = proc_dointvec ++ }, ++ { .ctl_name = 0 } ++}; ++ ++static ctl_table ip6_conntrack_dir_table[] = { ++ { ++ .ctl_name = NET_IPV6, ++ .procname = "ipv6", NULL, ++ .mode = 0555, ++ .child = ip6_conntrack_table ++ }, ++ { .ctl_name = 0 } ++}; ++ ++static ctl_table ip6_conntrack_root_table[] = { ++ { ++ .ctl_name = CTL_NET, ++ .procname = "net", ++ .mode = 0555, ++ .child = ip6_conntrack_dir_table ++ }, ++ { .ctl_name = 0 } ++}; ++#endif /*CONFIG_SYSCTL*/ ++ ++static int kill_all(const struct ip6_conntrack *i, void *data) ++{ ++ return 1; ++} ++ ++/* Mishearing the voices in his head, our hero wonders how he's ++ supposed to kill the mall. */ ++void ip6_conntrack_cleanup(void) ++{ ++#ifdef CONFIG_SYSCTL ++ unregister_sysctl_table(ip6_conntrack_sysctl_header); ++#endif ++ ip6_ct_attach = NULL; ++ /* This makes sure all current packets have passed through ++ netfilter framework. Roll on, two-stage module ++ delete... */ ++ synchronize_net(); ++ ++ i_see_dead_people: ++ ip6_ct_selective_cleanup(kill_all, NULL); ++ if (atomic_read(&ip6_conntrack_count) != 0) { ++ schedule(); ++ goto i_see_dead_people; ++ } ++ ++ kmem_cache_destroy(ip6_conntrack_cachep); ++ vfree(ip6_conntrack_hash); ++ nf_unregister_sockopt(&so_getorigdst); ++} ++ ++static int hashsize = 0; ++MODULE_PARM(hashsize, "i"); ++ ++int __init ip6_conntrack_init(void) ++{ ++ unsigned int i; ++ int ret; ++ ++ /* Idea from tcp.c: use 1/16384 of memory. On i386: 32MB ++ * machine has 256 buckets. >= 1GB machines have 8192 buckets. */ ++ if (hashsize) { ++ ip6_conntrack_htable_size = hashsize; ++ } else { ++ ip6_conntrack_htable_size ++ = (((num_physpages << PAGE_SHIFT) / 16384) ++ / sizeof(struct list_head)); ++ if (num_physpages > (1024 * 1024 * 1024 / PAGE_SIZE)) ++ ip6_conntrack_htable_size = 8192; ++ if (ip6_conntrack_htable_size < 16) ++ ip6_conntrack_htable_size = 16; ++ } ++ ip6_conntrack_max = 8 * ip6_conntrack_htable_size; ++ ++ printk("ip6_conntrack version %s (%u buckets, %d max)" ++ " - %Zd bytes per conntrack\n", IP6_CONNTRACK_VERSION, ++ ip6_conntrack_htable_size, ip6_conntrack_max, ++ sizeof(struct ip6_conntrack)); ++ ++ ret = nf_register_sockopt(&so_getorigdst); ++ if (ret != 0) { ++ printk(KERN_ERR "Unable to register netfilter socket option\n"); ++ return ret; ++ } ++ ++ ip6_conntrack_hash = vmalloc(sizeof(struct list_head) ++ * ip6_conntrack_htable_size); ++ if (!ip6_conntrack_hash) { ++ printk(KERN_ERR "Unable to create ip6_conntrack_hash\n"); ++ goto err_unreg_sockopt; ++ } ++ ++ ip6_conntrack_cachep = kmem_cache_create("ip6_conntrack", ++ sizeof(struct ip6_conntrack), 0, ++ SLAB_HWCACHE_ALIGN, NULL, NULL); ++ if (!ip6_conntrack_cachep) { ++ printk(KERN_ERR "Unable to create ip6_conntrack slab cache\n"); ++ goto err_free_hash; ++ } ++ /* Don't NEED lock here, but good form anyway. */ ++ WRITE_LOCK(&ip6_conntrack_lock); ++ /* Sew in builtin protocols. */ ++ list_append(&ip6_protocol_list, &ip6_conntrack_protocol_tcp); ++ list_append(&ip6_protocol_list, &ip6_conntrack_protocol_udp); ++ list_append(&ip6_protocol_list, &ip6_conntrack_protocol_icmpv6); ++ WRITE_UNLOCK(&ip6_conntrack_lock); ++ ++ for (i = 0; i < ip6_conntrack_htable_size; i++) ++ INIT_LIST_HEAD(&ip6_conntrack_hash[i]); ++ ++/* This is fucking braindead. There is NO WAY of doing this without ++ the CONFIG_SYSCTL unless you don't want to detect errors. ++ Grrr... --RR */ ++#ifdef CONFIG_SYSCTL ++ ip6_conntrack_sysctl_header ++ = register_sysctl_table(ip6_conntrack_root_table, 0); ++ if (ip6_conntrack_sysctl_header == NULL) { ++ goto err_free_ct_cachep; ++ } ++#endif /*CONFIG_SYSCTL*/ ++ ++ /* For use by ip6t_REJECT */ ++ ip6_ct_attach = ip6_conntrack_attach; ++ return ret; ++ ++#ifdef CONFIG_SYSCTL ++err_free_ct_cachep: ++ kmem_cache_destroy(ip6_conntrack_cachep); ++#endif /*CONFIG_SYSCTL*/ ++err_free_hash: ++ vfree(ip6_conntrack_hash); ++err_unreg_sockopt: ++ nf_unregister_sockopt(&so_getorigdst); ++ ++ return -ENOMEM; ++} +diff -urN linux-2.6.11/net/ipv6/netfilter/ip6_conntrack_ftp.c x1/net/ipv6/netfilter/ip6_conntrack_ftp.c +--- linux-2.6.11/net/ipv6/netfilter/ip6_conntrack_ftp.c 1970-01-01 01:00:00.000000000 +0100 ++++ x1/net/ipv6/netfilter/ip6_conntrack_ftp.c 2003-10-10 07:28:11.000000000 +0200 +@@ -0,0 +1,554 @@ ++/* ++ * FTP extension for IPv6 connection tracking. ++ * Linux INET6 implementation ++ * ++ * Copyright (C)2003 USAGI/WIDE Project ++ * ++ * Authors: ++ * Yasuyuki Kozakai ++ * ++ * Based on: net/ipv4/netfilter/ip_conntrack_ftp.c ++ * ++ * This program 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 ++ * 2 of the License, or (at your option) any later version. ++ */ ++ ++/* FTP extension for IP6 connection tracking. */ ++#include ++#include ++#include ++#include ++#include ++#include ++#include ++#include ++#include ++ ++#include ++#include ++#include ++#include ++ ++/* This is slow, but it's simple. --RR */ ++static char ftp_buffer[65536]; ++ ++DECLARE_LOCK(ip6_ftp_lock); ++struct module *ip6_conntrack_ftp = THIS_MODULE; ++ ++#define MAX_PORTS 8 ++static int ports[MAX_PORTS]; ++static int ports_c = 0; ++#ifdef MODULE_PARM ++MODULE_PARM(ports, "1-" __MODULE_STRING(MAX_PORTS) "i"); ++#endif ++ ++static int loose = 0; ++MODULE_PARM(loose, "i"); ++ ++#if 0 ++#define DEBUGP printk ++#else ++#define DEBUGP(format, args...) ++#endif ++ ++struct cmd_info { ++ struct in6_addr ip; ++ u_int16_t port; ++}; ++ ++static int try_eprt(const char *, size_t, struct cmd_info *, char); ++static int try_espv_response(const char *, size_t, struct cmd_info *, char); ++ ++static struct ftp_search { ++ enum ip6_conntrack_dir dir; ++ const char *pattern; ++ size_t plen; ++ char skip; ++ char term; ++ enum ip6_ct_ftp_type ftptype; ++ int (*getnum)(const char *, size_t, struct cmd_info *, char); ++} search[] = { ++ { ++ IP6_CT_DIR_ORIGINAL, ++ "EPRT", sizeof("EPRT") - 1, ' ', '\r', ++ IP6_CT_FTP_EPRT, ++ try_eprt, ++ }, ++ { ++ IP6_CT_DIR_REPLY, ++ "229 ", sizeof("229 ") - 1, '(', ')', ++ IP6_CT_FTP_EPSV, ++ try_espv_response, ++ }, ++}; ++ ++/* This code is based on inet_pton() in glibc-2.2.4 */ ++ ++#define NS_IN6ADDRSZ 16 ++#define NS_INADDRSZ 4 ++#define NS_INT16SZ 2 ++ ++/* ++ * return the length of string of address parse untill error, ++ * dlen or reaching terminal char - kozakai ++ */ ++static int ++get_ipv6_addr(const char *src, u_int8_t *dst, size_t dlen, u_int8_t term) ++{ ++ static const char xdigits[] = "0123456789abcdef"; ++ u_int8_t tmp[NS_IN6ADDRSZ], *tp, *endp, *colonp; ++ const char *curtok; ++ int ch, saw_xdigit; ++ u_int32_t val; ++ size_t clen = 0; ++ ++ tp = memset(tmp, '\0', NS_IN6ADDRSZ); ++ endp = tp + NS_IN6ADDRSZ; ++ colonp = NULL; ++ ++ /* Leading :: requires some special handling. */ ++ if (*src == ':'){ ++ if (*++src != ':') ++ return (0); ++ clen++; ++ } ++ ++ curtok = src; ++ saw_xdigit = 0; ++ val = 0; ++ while ((clen < dlen) && (*src != term)) { ++ const char *pch; ++ ++ ch = tolower (*src++); ++ clen++; ++ ++ pch = strchr(xdigits, ch); ++ if (pch != NULL) { ++ val <<= 4; ++ val |= (pch - xdigits); ++ if (val > 0xffff) ++ return (0); ++ ++ saw_xdigit = 1; ++ continue; ++ } ++ if (ch == ':') { ++ curtok = src; ++ if (!saw_xdigit) { ++ if (colonp) ++ return (0); ++ colonp = tp; ++ continue; ++ } else if (*src == term) { ++ return (0); ++ } ++ if (tp + NS_INT16SZ > endp) ++ return (0); ++ *tp++ = (u_int8_t) (val >> 8) & 0xff; ++ *tp++ = (u_int8_t) val & 0xff; ++ saw_xdigit = 0; ++ val = 0; ++ continue; ++ } ++ return (0); ++ } ++ if (saw_xdigit) { ++ if (tp + NS_INT16SZ > endp) ++ return (0); ++ ++ *tp++ = (u_int8_t) (val >> 8) & 0xff; ++ *tp++ = (u_int8_t) val & 0xff; ++ } ++ if (colonp != NULL) { ++ /* ++ * Since some memmove()'s erroneously fail to handle ++ * overlapping regions, we'll do the shift by hand. ++ */ ++ const int n = tp - colonp; ++ int i; ++ ++ if (tp == endp) ++ return (0); ++ ++ for (i = 1; i <= n; i++) { ++ endp[- i] = colonp[n - i]; ++ colonp[n - i] = 0; ++ } ++ tp = endp; ++ } ++ if (tp != endp || (*src != term)) ++ return (0); ++ ++ memcpy(dst, tmp, NS_IN6ADDRSZ); ++ return clen; ++} ++ ++/* return length of port if succeed. */ ++static int get_port(const char *data, u_int16_t *port, size_t dlen, char term) ++{ ++ int i; ++ u_int16_t tmp_port = 0; ++ ++ for(i = 0; i < dlen; i++) { ++ /* Finished? */ ++ if(data[i] == term){ ++ *port = htons(tmp_port); ++ return i; ++ } ++ ++ if(data[i] < '0' || data[i] > '9') ++ return 0; ++ ++ tmp_port = tmp_port*10 + (data[i] - '0'); ++ } ++ return 0; ++} ++ ++/* Returns 0, or length of numbers: |1|132.235.1.2|6275| */ ++static int try_eprt(const char *data, size_t dlen, struct cmd_info *cmd, ++ char term) ++{ ++ char delim; ++ int len; ++ int addr_len; ++ ++ /* First character is delimiter, then "1" for IPv4, then ++ delimiter again. */ ++ ++ if (dlen <= 3) ++ return 0; ++ ++ delim = data[0]; ++ ++ if (isdigit(delim) || delim < 33 || delim > 126 ++ || data[1] != '2' || data[2] != delim){ ++ return 0; ++ } ++ DEBUGP("Got %c2%c\n", delim, delim); ++ ++ len = 3; ++ ++ /* Now we have IP address. */ ++ addr_len = get_ipv6_addr(&data[len], cmd->ip.s6_addr, ++ dlen - len, delim); ++ ++ if (addr_len == 0) ++ return 0; ++ ++ len += addr_len + 1; ++ ++ DEBUGP("Got IPv6 address!\n"); ++ ++ addr_len = get_port(&data[len], &cmd->port, dlen, delim); ++ ++ if(addr_len == 0) ++ return 0; ++ ++ len += addr_len + 1; ++ ++ return len; ++} ++ ++/* Returns 0, or length of numbers: |||6446| */ ++static int try_espv_response(const char *data, size_t dlen, ++ struct cmd_info *cmd, char term) ++{ ++ char delim; ++ size_t len; ++ ++ /* Three delimiters. */ ++ if (dlen <= 3) ++ return 0; ++ ++ delim = data[0]; ++ ++ if (isdigit(delim) || delim < 33 || delim > 126 ++ || data[1] != delim || data[2] != delim) ++ return 0; ++ ++ len = get_port(&data[3], &cmd->port, dlen, delim); ++ ++ if(len == 0) ++ return 0; ++ ++ return 3 + len + 1; ++} ++ ++/* Return 1 for match, 0 for accept, -1 for partial. */ ++static int find_pattern(const char *data, size_t dlen, ++ const char *pattern, size_t plen, ++ char skip, char term, ++ unsigned int *numoff, ++ unsigned int *numlen, ++ struct cmd_info *cmd, ++ int (*getnum)(const char *, size_t, struct cmd_info *, ++ char)) ++{ ++ size_t i; ++ ++ DEBUGP("find_pattern `%s': dlen = %u\n", pattern, dlen); ++ if (dlen == 0) ++ return 0; ++ ++ if (dlen <= plen) { ++ /* Short packet: try for partial? */ ++ if (strnicmp(data, pattern, dlen) == 0) ++ return -1; ++ else return 0; ++ } ++ ++ if (strnicmp(data, pattern, plen) != 0) { ++#if 0 ++ size_t i; ++ ++ DEBUGP("ftp: string mismatch\n"); ++ for (i = 0; i < plen; i++) { ++ DEBUGP("ftp:char %u `%c'(%u) vs `%c'(%u)\n", ++ i, data[i], data[i], ++ pattern[i], pattern[i]); ++ } ++#endif ++ return 0; ++ } ++ ++ DEBUGP("Pattern matches!\n"); ++ /* Now we've found the constant string, try to skip ++ to the 'skip' character */ ++ for (i = plen; data[i] != skip; i++) ++ if (i == dlen - 1) return -1; ++ ++ /* Skip over the last character */ ++ i++; ++ ++ DEBUGP("Skipped up to `%c'!\n", skip); ++ ++ *numoff = i; ++ *numlen = getnum(data + i, dlen - i, cmd, term); ++ if (!*numlen) ++ return -1; ++ ++ DEBUGP("Match succeeded!\n"); ++ return 1; ++} ++ ++static int help(const struct sk_buff *skb, ++ unsigned int protoff, ++ struct ip6_conntrack *ct, ++ enum ip6_conntrack_info ctinfo) ++{ ++ unsigned int dataoff, datalen; ++ struct tcphdr tcph; ++ u_int32_t old_seq_aft_nl; ++ int old_seq_aft_nl_set, ret; ++ int dir = CTINFO2DIR(ctinfo); ++ unsigned int matchlen, matchoff; ++ struct ip6_ct_ftp_master *ct_ftp_info = &ct->help.ct_ftp_info; ++ struct ip6_conntrack_expect expect, *exp = &expect; ++ struct ip6_ct_ftp_expect *exp_ftp_info = &exp->help.exp_ftp_info; ++ ++ unsigned int i; ++ int found = 0; ++ ++ struct ipv6hdr *ipv6h = skb->nh.ipv6h; ++ struct ip6_conntrack_tuple *t = &exp->tuple, *mask = &exp->mask; ++ struct cmd_info cmd; ++ unsigned int csum; ++ ++ /* Until there's been traffic both ways, don't look in packets. */ ++ if (ctinfo != IP6_CT_ESTABLISHED ++ && ctinfo != IP6_CT_ESTABLISHED+IP6_CT_IS_REPLY) { ++ DEBUGP("ftp: Conntrackinfo = %u\n", ctinfo); ++ return NF_ACCEPT; ++ } ++ ++ if (skb_copy_bits(skb, protoff, &tcph, sizeof(tcph)) != 0) ++ return NF_ACCEPT; ++ ++ dataoff = protoff + tcph.doff * 4; ++ /* No data? */ ++ if (dataoff >= skb->len) { ++ DEBUGP("ftp: dataoff(%u) >= skblen(%u)\n", dataoff, skb->len); ++ return NF_ACCEPT; ++ } ++ datalen = skb->len - dataoff; ++ ++ LOCK_BH(&ip6_ftp_lock); ++ ++ csum = skb_copy_and_csum_bits(skb, dataoff, ftp_buffer, ++ skb->len - dataoff, 0); ++ csum = skb_checksum(skb, protoff, tcph.doff * 4, csum); ++ ++ /* Checksum invalid? Ignore. */ ++ /* FIXME: Source route IP option packets --RR */ ++ if (csum_ipv6_magic(&ipv6h->saddr, &ipv6h->daddr, skb->len - protoff, ++ IPPROTO_TCP, csum)) { ++ DEBUGP("ftp_help: bad csum: %p %u\n" ++ "%x:%x:%x:%x:%x:%x:%x:%x -> %x:%x:%x:%x:%x:%x:%x:%x\n", ++ &tcph, skb->len - protoff, NIP6(ipv6h->saddr), ++ NIP6(ipv6h->daddr)); ++ ret = NF_ACCEPT; ++ goto out; ++ } ++ ++ old_seq_aft_nl_set = ct_ftp_info->seq_aft_nl_set[dir]; ++ old_seq_aft_nl = ct_ftp_info->seq_aft_nl[dir]; ++ ++ DEBUGP("conntrack_ftp: datalen %u\n", datalen); ++ if (ftp_buffer[datalen - 1] == '\n') { ++ DEBUGP("conntrack_ftp: datalen %u ends in \\n\n", datalen); ++ if (!old_seq_aft_nl_set ++ || after(ntohl(tcph.seq) + datalen, old_seq_aft_nl)) { ++ DEBUGP("conntrack_ftp: updating nl to %u\n", ++ ntohl(tcph.seq) + datalen); ++ ct_ftp_info->seq_aft_nl[dir] = ++ ntohl(tcph.seq) + datalen; ++ ct_ftp_info->seq_aft_nl_set[dir] = 1; ++ } ++ } ++ ++ if(!old_seq_aft_nl_set || ++ (ntohl(tcph.seq) != old_seq_aft_nl)) { ++ DEBUGP("ip6_conntrack_ftp_help: wrong seq pos %s(%u)\n", ++ old_seq_aft_nl_set ? "":"(UNSET) ", old_seq_aft_nl); ++ ret = NF_ACCEPT; ++ goto out; ++ } ++ ++ /* Initialize IP array to expected address (it's not mentioned ++ in EPSV responses) */ ++ ipv6_addr_copy(&cmd.ip, &ct->tuplehash[dir].tuple.src.ip); ++ ++ for (i = 0; i < ARRAY_SIZE(search); i++) { ++ if (search[i].dir != dir) continue; ++ ++ found = find_pattern(ftp_buffer, datalen, ++ search[i].pattern, ++ search[i].plen, ++ search[i].skip, ++ search[i].term, ++ &matchoff, &matchlen, ++ &cmd, ++ search[i].getnum); ++ if (found) break; ++ } ++ if (found == -1) { ++ /* We don't usually drop packets. After all, this is ++ connection tracking, not packet filtering. ++ However, it is neccessary for accurate tracking in ++ this case. */ ++ if (net_ratelimit()) ++ printk("conntrack_ftp: partial %s %u+%u\n", ++ search[i].pattern, ++ ntohl(tcph.seq), datalen); ++ ret = NF_DROP; ++ goto out; ++ } else if (found == 0) { /* No match */ ++ ret = NF_ACCEPT; ++ goto out; ++ } ++ ++ DEBUGP("conntrack_ftp: match `%.*s' (%u bytes at %u)\n", ++ (int)matchlen, ftp_buffer + matchoff, ++ matchlen, ntohl(tcph.seq) + matchoff); ++ ++ memset(&expect, 0, sizeof(expect)); ++ ++ /* Update the ftp info */ ++ if (!ipv6_addr_cmp(&cmd.ip, &ct->tuplehash[dir].tuple.src.ip)) { ++ exp->seq = ntohl(tcph.seq) + matchoff; ++ exp_ftp_info->len = matchlen; ++ exp_ftp_info->ftptype = search[i].ftptype; ++ exp_ftp_info->port = cmd.port; ++ } else { ++ /* ++ This situation is occurred with NAT. ++ */ ++ if (!loose) { ++ ret = NF_ACCEPT; ++ goto out; ++ } ++ } ++ ++ ipv6_addr_copy(&t->src.ip, &ct->tuplehash[!dir].tuple.src.ip); ++ ipv6_addr_copy(&t->dst.ip, &cmd.ip); ++ t->src.u.tcp.port = 0; ++ t->dst.u.tcp.port = cmd.port; ++ t->dst.protonum = IPPROTO_TCP; ++ ++ ipv6_addr_set(&mask->src.ip, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF); ++ mask->src.u.tcp.port = 0; ++ mask->dst.u.tcp.port = 0xFFFF; ++ mask->dst.protonum = 0xFFFF; ++ ++ exp->expectfn = NULL; ++ ++ /* Ignore failure; should only happen with NAT */ ++ ip6_conntrack_expect_related(ct, &expect); ++ ret = NF_ACCEPT; ++ out: ++ UNLOCK_BH(&ip6_ftp_lock); ++ return ret; ++} ++ ++static struct ip6_conntrack_helper ftp[MAX_PORTS]; ++static char ftp_names[MAX_PORTS][10]; ++ ++/* Not __exit: called from init() */ ++static void fini(void) ++{ ++ int i; ++ for (i = 0; i < ports_c; i++) { ++ DEBUGP("ip6_ct_ftp: unregistering helper for port %d\n", ++ ports[i]); ++ ip6_conntrack_helper_unregister(&ftp[i]); ++ } ++} ++ ++static int __init init(void) ++{ ++ int i, ret; ++ char *tmpname; ++ ++ if (ports[0] == 0) ++ ports[0] = FTP_PORT; ++ ++ for (i = 0; (i < MAX_PORTS) && ports[i]; i++) { ++ memset(&ftp[i], 0, sizeof(struct ip6_conntrack_helper)); ++ ftp[i].tuple.src.u.tcp.port = htons(ports[i]); ++ ftp[i].tuple.dst.protonum = IPPROTO_TCP; ++ ftp[i].mask.src.u.tcp.port = 0xFFFF; ++ ftp[i].mask.dst.protonum = 0xFFFF; ++ ftp[i].max_expected = 1; ++ ftp[i].timeout = 0; ++ ftp[i].flags = IP6_CT_HELPER_F_REUSE_EXPECT; ++ ftp[i].me = ip6_conntrack_ftp; ++ ftp[i].help = help; ++ ++ tmpname = &ftp_names[i][0]; ++ if (ports[i] == FTP_PORT) ++ sprintf(tmpname, "ftp"); ++ else ++ sprintf(tmpname, "ftp-%d", ports[i]); ++ ftp[i].name = tmpname; ++ ++ DEBUGP("ip6_ct_ftp: registering helper for port %d\n", ++ ports[i]); ++ ret = ip6_conntrack_helper_register(&ftp[i]); ++ ++ if (ret) { ++ fini(); ++ return ret; ++ } ++ ports_c++; ++ } ++ return 0; ++} ++ ++ ++PROVIDES_CONNTRACK6(ftp); ++EXPORT_SYMBOL(ip6_ftp_lock); ++MODULE_LICENSE("GPL"); ++module_init(init); ++module_exit(fini); +diff -urN linux-2.6.11/net/ipv6/netfilter/ip6_conntrack_proto_generic.c x1/net/ipv6/netfilter/ip6_conntrack_proto_generic.c +--- linux-2.6.11/net/ipv6/netfilter/ip6_conntrack_proto_generic.c 1970-01-01 01:00:00.000000000 +0100 ++++ x1/net/ipv6/netfilter/ip6_conntrack_proto_generic.c 2003-09-18 12:48:46.000000000 +0200 +@@ -0,0 +1,82 @@ ++/* ++ * IPv6 generic protocol extension for IPv6 connection tracking ++ * Linux INET6 implementation ++ * ++ * Copyright (C)2003 USAGI/WIDE Project ++ * ++ * Authors: ++ * Yasuyuki Kozakai ++ * ++ * Based on: net/ipv4/netfilter/ip_conntrack_proto_generic.c ++ * ++ * This program 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 ++ * 2 of the License, or (at your option) any later version. ++ */ ++ ++#include ++#include ++#include ++#include ++#include ++ ++#define GENERIC_TIMEOUT (600*HZ) ++ ++static int generic_pkt_to_tuple(const struct sk_buff *skb, ++ unsigned int dataoff, ++ struct ip6_conntrack_tuple *tuple) ++{ ++ tuple->src.u.all = 0; ++ tuple->dst.u.all = 0; ++ ++ return 1; ++} ++ ++static int generic_invert_tuple(struct ip6_conntrack_tuple *tuple, ++ const struct ip6_conntrack_tuple *orig) ++{ ++ tuple->src.u.all = 0; ++ tuple->dst.u.all = 0; ++ ++ return 1; ++} ++ ++/* Print out the per-protocol part of the tuple. */ ++static unsigned int generic_print_tuple(char *buffer, ++ const struct ip6_conntrack_tuple *tuple) ++{ ++ return 0; ++} ++ ++/* Print out the private part of the conntrack. */ ++static unsigned int generic_print_conntrack(char *buffer, ++ const struct ip6_conntrack *state) ++{ ++ return 0; ++} ++ ++/* Returns verdict for packet, or -1 for invalid. */ ++static int established(struct ip6_conntrack *conntrack, ++ const struct sk_buff *skb, ++ unsigned int dataoff, ++ enum ip6_conntrack_info conntrackinfo) ++{ ++ ip6_ct_refresh(conntrack, GENERIC_TIMEOUT); ++ return NF_ACCEPT; ++} ++ ++/* Called when a new connection for this protocol found. */ ++static int ++new(struct ip6_conntrack *conntrack, ++ const struct sk_buff *skb, ++ unsigned int dataoff) ++{ ++ return 1; ++} ++ ++struct ip6_conntrack_protocol ip6_conntrack_generic_protocol ++= { { NULL, NULL }, 0, "unknown", ++ generic_pkt_to_tuple, generic_invert_tuple, generic_print_tuple, ++ generic_print_conntrack, established, new, NULL, NULL, NULL }; ++ +diff -urN linux-2.6.11/net/ipv6/netfilter/ip6_conntrack_proto_icmpv6.c x1/net/ipv6/netfilter/ip6_conntrack_proto_icmpv6.c +--- linux-2.6.11/net/ipv6/netfilter/ip6_conntrack_proto_icmpv6.c 1970-01-01 01:00:00.000000000 +0100 ++++ x1/net/ipv6/netfilter/ip6_conntrack_proto_icmpv6.c 2003-09-18 12:48:46.000000000 +0200 +@@ -0,0 +1,135 @@ ++/* ++ * ICMPv6 extension for IPv6 connection tracking ++ * Linux INET6 implementation ++ * ++ * Copyright (C)2003 USAGI/WIDE Project ++ * ++ * Authors: ++ * Yasuyuki Kozakai ++ * ++ * Based on: net/ipv4/netfilter/ip_conntrack_proto_icmp.c ++ * ++ * This program 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 ++ * 2 of the License, or (at your option) any later version. ++ */ ++ ++#include ++#include ++#include ++#include ++#include ++#include ++#include ++ ++#define ICMPV6_TIMEOUT (30*HZ) ++ ++#if 0 ++#define DEBUGP printk ++#else ++#define DEBUGP(format, args...) ++#endif ++ ++static int icmpv6_pkt_to_tuple(const struct sk_buff *skb, ++ unsigned int dataoff, ++ struct ip6_conntrack_tuple *tuple) ++{ ++ struct icmp6hdr hdr; ++ ++ if (skb_copy_bits(skb, dataoff, &hdr, sizeof(hdr)) != 0) ++ return 0; ++ tuple->dst.u.icmpv6.type = hdr.icmp6_type; ++ tuple->src.u.icmpv6.id = hdr.icmp6_identifier; ++ tuple->dst.u.icmpv6.code = hdr.icmp6_code; ++ ++ return 1; ++} ++ ++static int icmpv6_invert_tuple(struct ip6_conntrack_tuple *tuple, ++ const struct ip6_conntrack_tuple *orig) ++{ ++ /* Add 1; spaces filled with 0. */ ++ static u_int8_t invmap[] = { ++ [ICMPV6_ECHO_REQUEST] = ICMPV6_ECHO_REPLY + 1, ++ [ICMPV6_ECHO_REPLY] = ICMPV6_ECHO_REQUEST + 1, ++ [ICMPV6_NI_QUERY] = ICMPV6_NI_QUERY + 1, ++ [ICMPV6_NI_REPLY] = ICMPV6_NI_REPLY +1 ++ }; ++ ++ if (orig->dst.u.icmpv6.type >= sizeof(invmap) ++ || !invmap[orig->dst.u.icmpv6.type]) ++ return 0; ++ ++ tuple->src.u.icmpv6.id = orig->src.u.icmpv6.id; ++ tuple->dst.u.icmpv6.type = invmap[orig->dst.u.icmpv6.type] - 1; ++ tuple->dst.u.icmpv6.code = orig->dst.u.icmpv6.code; ++ return 1; ++} ++ ++/* Print out the per-protocol part of the tuple. */ ++static unsigned int icmpv6_print_tuple(char *buffer, ++ const struct ip6_conntrack_tuple *tuple) ++{ ++ return sprintf(buffer, "type=%u code=%u id=%u ", ++ tuple->dst.u.icmpv6.type, ++ tuple->dst.u.icmpv6.code, ++ ntohs(tuple->src.u.icmpv6.id)); ++} ++ ++/* Print out the private part of the conntrack. */ ++static unsigned int icmpv6_print_conntrack(char *buffer, ++ const struct ip6_conntrack *conntrack) ++{ ++ return sprintf(buffer, "count=%u ", ++ atomic_read(&conntrack->proto.icmpv6.count)); ++} ++ ++/* Returns verdict for packet, or -1 for invalid. */ ++static int icmpv6_packet(struct ip6_conntrack *ct, ++ const struct sk_buff *skb, ++ unsigned int dataoff, ++ enum ip6_conntrack_info ctinfo) ++{ ++ /* Try to delete connection immediately after all replies: ++ won't actually vanish as we still have skb, and del_timer ++ means this will only run once even if count hits zero twice ++ (theoretically possible with SMP) */ ++ if (CTINFO2DIR(ctinfo) == IP6_CT_DIR_REPLY) { ++ if (atomic_dec_and_test(&ct->proto.icmpv6.count) ++ && del_timer(&ct->timeout)) ++ ct->timeout.function((unsigned long)ct); ++ } else { ++ atomic_inc(&ct->proto.icmpv6.count); ++ ip6_ct_refresh(ct, ICMPV6_TIMEOUT); ++ } ++ ++ return NF_ACCEPT; ++} ++ ++/* Called when a new connection for this protocol found. */ ++static int icmpv6_new(struct ip6_conntrack *conntrack, ++ const struct sk_buff *skb, ++ unsigned int dataoff) ++{ ++ static u_int8_t valid_new[] = { ++ [ICMPV6_ECHO_REQUEST] = 1, ++ [ICMPV6_NI_QUERY] = 1 ++ }; ++ ++ if (conntrack->tuplehash[0].tuple.dst.u.icmpv6.type >= sizeof(valid_new) ++ || !valid_new[conntrack->tuplehash[0].tuple.dst.u.icmpv6.type]) { ++ /* Can't create a new ICMPV6 `conn' with this. */ ++ DEBUGP("icmpv6: can't create new conn with type %u\n", ++ conntrack->tuplehash[0].tuple.dst.u.icmpv6.type); ++ DUMP_TUPLE(&conntrack->tuplehash[0].tuple); ++ return 0; ++ } ++ atomic_set(&conntrack->proto.icmpv6.count, 0); ++ return 1; ++} ++ ++struct ip6_conntrack_protocol ip6_conntrack_protocol_icmpv6 ++= { { NULL, NULL }, IPPROTO_ICMPV6, "icmpv6", ++ icmpv6_pkt_to_tuple, icmpv6_invert_tuple, icmpv6_print_tuple, ++ icmpv6_print_conntrack, icmpv6_packet, icmpv6_new, NULL, NULL, NULL }; +diff -urN linux-2.6.11/net/ipv6/netfilter/ip6_conntrack_proto_tcp.c x1/net/ipv6/netfilter/ip6_conntrack_proto_tcp.c +--- linux-2.6.11/net/ipv6/netfilter/ip6_conntrack_proto_tcp.c 1970-01-01 01:00:00.000000000 +0100 ++++ x1/net/ipv6/netfilter/ip6_conntrack_proto_tcp.c 2003-09-18 12:48:46.000000000 +0200 +@@ -0,0 +1,273 @@ ++/* ++ * TCP extension for IPv6 Connection Tracking ++ * Linux INET6 implementation ++ * ++ * Copyright (C)2003 USAGI/WIDE Project ++ * ++ * Authors: ++ * Yasuyuki Kozakai ++ * ++ * Based on: net/ipv4/netfilter/ip_conntrack_proto_tcp.c ++ * ++ * This program 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 ++ * 2 of the License, or (at your option) any later version. ++ */ ++ ++#include ++#include ++#include ++#include ++#include ++#include ++#include ++#include ++#include ++ ++#include ++ ++#include ++#include ++#include ++ ++#if 0 ++#define DEBUGP printk ++#else ++#define DEBUGP(format, args...) ++#endif ++ ++/* Protects conntrack->proto.tcp */ ++static DECLARE_RWLOCK(tcp_lock); ++ ++/* FIXME: Examine ipfilter's timeouts and conntrack transitions more ++ closely. They're more complex. --RR */ ++ ++/* Actually, I believe that neither ipmasq (where this code is stolen ++ from) nor ipfilter do it exactly right. A new conntrack machine taking ++ into account packet loss (which creates uncertainty as to exactly ++ the conntrack of the connection) is required. RSN. --RR */ ++ ++static const char *tcp_conntrack_names[] = { ++ "NONE", ++ "ESTABLISHED", ++ "SYN_SENT", ++ "SYN_RECV", ++ "FIN_WAIT", ++ "TIME_WAIT", ++ "CLOSE", ++ "CLOSE_WAIT", ++ "LAST_ACK", ++ "LISTEN" ++}; ++ ++#define SECS *HZ ++#define MINS * 60 SECS ++#define HOURS * 60 MINS ++#define DAYS * 24 HOURS ++ ++ ++static unsigned long tcp_timeouts[] ++= { 30 MINS, /* TCP_CONNTRACK_NONE, */ ++ 5 DAYS, /* TCP_CONNTRACK_ESTABLISHED, */ ++ 2 MINS, /* TCP_CONNTRACK_SYN_SENT, */ ++ 60 SECS, /* TCP_CONNTRACK_SYN_RECV, */ ++ 2 MINS, /* TCP_CONNTRACK_FIN_WAIT, */ ++ 2 MINS, /* TCP_CONNTRACK_TIME_WAIT, */ ++ 10 SECS, /* TCP_CONNTRACK_CLOSE, */ ++ 60 SECS, /* TCP_CONNTRACK_CLOSE_WAIT, */ ++ 30 SECS, /* TCP_CONNTRACK_LAST_ACK, */ ++ 2 MINS, /* TCP_CONNTRACK_LISTEN, */ ++}; ++ ++#define sNO TCP_CONNTRACK_NONE ++#define sES TCP_CONNTRACK_ESTABLISHED ++#define sSS TCP_CONNTRACK_SYN_SENT ++#define sSR TCP_CONNTRACK_SYN_RECV ++#define sFW TCP_CONNTRACK_FIN_WAIT ++#define sTW TCP_CONNTRACK_TIME_WAIT ++#define sCL TCP_CONNTRACK_CLOSE ++#define sCW TCP_CONNTRACK_CLOSE_WAIT ++#define sLA TCP_CONNTRACK_LAST_ACK ++#define sLI TCP_CONNTRACK_LISTEN ++#define sIV TCP_CONNTRACK_MAX ++ ++static enum tcp_conntrack tcp_conntracks[2][5][TCP_CONNTRACK_MAX] = { ++ { ++/* ORIGINAL */ ++/* sNO, sES, sSS, sSR, sFW, sTW, sCL, sCW, sLA, sLI */ ++/*syn*/ {sSS, sES, sSS, sSR, sSS, sSS, sSS, sSS, sSS, sLI }, ++/*fin*/ {sTW, sFW, sSS, sTW, sFW, sTW, sCL, sTW, sLA, sLI }, ++/*ack*/ {sES, sES, sSS, sES, sFW, sTW, sCL, sCW, sLA, sES }, ++/*rst*/ {sCL, sCL, sSS, sCL, sCL, sTW, sCL, sCL, sCL, sCL }, ++/*none*/{sIV, sIV, sIV, sIV, sIV, sIV, sIV, sIV, sIV, sIV } ++ }, ++ { ++/* REPLY */ ++/* sNO, sES, sSS, sSR, sFW, sTW, sCL, sCW, sLA, sLI */ ++/*syn*/ {sSR, sES, sSR, sSR, sSR, sSR, sSR, sSR, sSR, sSR }, ++/*fin*/ {sCL, sCW, sSS, sTW, sTW, sTW, sCL, sCW, sLA, sLI }, ++/*ack*/ {sCL, sES, sSS, sSR, sFW, sTW, sCL, sCW, sCL, sLI }, ++/*rst*/ {sCL, sCL, sCL, sCL, sCL, sCL, sCL, sCL, sLA, sLI }, ++/*none*/{sIV, sIV, sIV, sIV, sIV, sIV, sIV, sIV, sIV, sIV } ++ } ++}; ++ ++static int tcp_pkt_to_tuple(const struct sk_buff *skb, ++ unsigned int dataoff, ++ struct ip6_conntrack_tuple *tuple) ++{ ++ struct tcphdr hdr; ++ ++ /* Actually only need first 8 bytes. */ ++ if (skb_copy_bits(skb, dataoff, &hdr, 8) != 0) ++ return 0; ++ ++ tuple->src.u.tcp.port = hdr.source; ++ tuple->dst.u.tcp.port = hdr.dest; ++ ++ return 1; ++} ++ ++static int tcp_invert_tuple(struct ip6_conntrack_tuple *tuple, ++ const struct ip6_conntrack_tuple *orig) ++{ ++ tuple->src.u.tcp.port = orig->dst.u.tcp.port; ++ tuple->dst.u.tcp.port = orig->src.u.tcp.port; ++ return 1; ++} ++ ++/* Print out the per-protocol part of the tuple. */ ++static unsigned int tcp_print_tuple(char *buffer, ++ const struct ip6_conntrack_tuple *tuple) ++{ ++ return sprintf(buffer, "sport=%hu dport=%hu ", ++ ntohs(tuple->src.u.tcp.port), ++ ntohs(tuple->dst.u.tcp.port)); ++} ++ ++/* Print out the private part of the conntrack. */ ++static unsigned int tcp_print_conntrack(char *buffer, ++ const struct ip6_conntrack *conntrack) ++{ ++ enum tcp_conntrack state; ++ ++ READ_LOCK(&tcp_lock); ++ state = conntrack->proto.tcp.state; ++ READ_UNLOCK(&tcp_lock); ++ ++ return sprintf(buffer, "%s ", tcp_conntrack_names[state]); ++} ++ ++static unsigned int get_conntrack_index(const struct tcphdr *tcph) ++{ ++ if (tcph->rst) return 3; ++ else if (tcph->syn) return 0; ++ else if (tcph->fin) return 1; ++ else if (tcph->ack) return 2; ++ else return 4; ++} ++ ++/* Returns verdict for packet, or -1 for invalid. */ ++static int tcp_packet(struct ip6_conntrack *conntrack, ++ const struct sk_buff *skb, ++ unsigned int dataoff, ++ enum ip6_conntrack_info ctinfo) ++{ ++ enum tcp_conntrack newconntrack, oldtcpstate; ++ struct tcphdr tcph; ++ ++ if (skb_copy_bits(skb, dataoff, &tcph, sizeof(tcph)) != 0) ++ return -1; ++ ++ WRITE_LOCK(&tcp_lock); ++ oldtcpstate = conntrack->proto.tcp.state; ++ newconntrack ++ = tcp_conntracks ++ [CTINFO2DIR(ctinfo)] ++ [get_conntrack_index(&tcph)][oldtcpstate]; ++ ++ /* Invalid */ ++ if (newconntrack == TCP_CONNTRACK_MAX) { ++ DEBUGP("ip6_conntrack_tcp: Invalid dir=%i index=%u conntrack=%u\n", ++ CTINFO2DIR(ctinfo), get_conntrack_index(&tcph), ++ conntrack->proto.tcp.state); ++ WRITE_UNLOCK(&tcp_lock); ++ return -1; ++ } ++ ++ conntrack->proto.tcp.state = newconntrack; ++ ++ /* Poor man's window tracking: record SYN/ACK for handshake check */ ++ if (oldtcpstate == TCP_CONNTRACK_SYN_SENT ++ && CTINFO2DIR(ctinfo) == IP6_CT_DIR_REPLY ++ && tcph.syn && tcph.ack) ++ conntrack->proto.tcp.handshake_ack ++ = htonl(ntohl(tcph.seq) + 1); ++ ++ /* If only reply is a RST, we can consider ourselves not to ++ have an established connection: this is a fairly common ++ problem case, so we can delete the conntrack ++ immediately. --RR */ ++ if (!test_bit(IP6S_SEEN_REPLY_BIT, &conntrack->status) && tcph.rst) { ++ WRITE_UNLOCK(&tcp_lock); ++ if (del_timer(&conntrack->timeout)) ++ conntrack->timeout.function((unsigned long)conntrack); ++ } else { ++ /* Set ASSURED if we see see valid ack in ESTABLISHED after SYN_RECV */ ++ if (oldtcpstate == TCP_CONNTRACK_SYN_RECV ++ && CTINFO2DIR(ctinfo) == IP6_CT_DIR_ORIGINAL ++ && tcph.ack && !tcph.syn ++ && tcph.ack_seq == conntrack->proto.tcp.handshake_ack) ++ set_bit(IP6S_ASSURED_BIT, &conntrack->status); ++ ++ WRITE_UNLOCK(&tcp_lock); ++ ip6_ct_refresh(conntrack, tcp_timeouts[newconntrack]); ++ } ++ ++ return NF_ACCEPT; ++} ++ ++/* Called when a new connection for this protocol found. */ ++static int tcp_new(struct ip6_conntrack *conntrack, const struct sk_buff *skb, ++ unsigned int dataoff) ++{ ++ enum tcp_conntrack newconntrack; ++ struct tcphdr tcph; ++ ++ if (skb_copy_bits(skb, dataoff, &tcph, sizeof(tcph)) != 0) ++ return -1; ++ ++ /* Don't need lock here: this conntrack not in circulation yet */ ++ newconntrack ++ = tcp_conntracks[0][get_conntrack_index(&tcph)] ++ [TCP_CONNTRACK_NONE]; ++ ++ /* Invalid: delete conntrack */ ++ if (newconntrack == TCP_CONNTRACK_MAX) { ++ DEBUGP("ip6_conntrack_tcp: invalid new deleting.\n"); ++ return 0; ++ } ++ ++ conntrack->proto.tcp.state = newconntrack; ++ return 1; ++} ++ ++static int tcp_exp_matches_pkt(struct ip6_conntrack_expect *exp, ++ const struct sk_buff *skb, ++ unsigned int dataoff) ++{ ++ struct tcphdr tcph; ++ unsigned int datalen; ++ ++ if (skb_copy_bits(skb, dataoff, &tcph, sizeof(tcph)) != 0) ++ return 0; ++ datalen = skb->len - dataoff; ++ ++ return between(exp->seq, ntohl(tcph.seq), ntohl(tcph.seq) + datalen); ++} ++ ++struct ip6_conntrack_protocol ip6_conntrack_protocol_tcp ++= { { NULL, NULL }, IPPROTO_TCP, "tcp", ++ tcp_pkt_to_tuple, tcp_invert_tuple, tcp_print_tuple, tcp_print_conntrack, ++ tcp_packet, tcp_new, NULL, tcp_exp_matches_pkt, NULL }; +diff -urN linux-2.6.11/net/ipv6/netfilter/ip6_conntrack_proto_udp.c x1/net/ipv6/netfilter/ip6_conntrack_proto_udp.c +--- linux-2.6.11/net/ipv6/netfilter/ip6_conntrack_proto_udp.c 1970-01-01 01:00:00.000000000 +0100 ++++ x1/net/ipv6/netfilter/ip6_conntrack_proto_udp.c 2003-09-18 12:48:46.000000000 +0200 +@@ -0,0 +1,95 @@ ++/* ++ * UDP extension for IPv6 Connection Tracking ++ * Linux INET6 implementation ++ * ++ * Copyright (C)2003 USAGI/WIDE Project ++ * ++ * Authors: ++ * Yasuyuki Kozakai ++ * ++ * Based on: net/ipv4/netfilter/ip_conntrack_proto_udp.c ++ * ++ * This program 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 ++ * 2 of the License, or (at your option) any later version. ++ */ ++#include ++#include ++#include ++#include ++#include ++#include ++ ++#define UDP_TIMEOUT (30*HZ) ++#define UDP_STREAM_TIMEOUT (180*HZ) ++ ++static int udp_pkt_to_tuple(const struct sk_buff *skb, ++ unsigned int dataoff, ++ struct ip6_conntrack_tuple *tuple) ++{ ++ struct udphdr hdr; ++ ++ /* Actually only need first 8 bytes. */ ++ if (skb_copy_bits(skb, dataoff, &hdr, 8) != 0) ++ return 0; ++ ++ tuple->src.u.udp.port = hdr.source; ++ tuple->dst.u.udp.port = hdr.dest; ++ ++ return 1; ++} ++ ++static int udp_invert_tuple(struct ip6_conntrack_tuple *tuple, ++ const struct ip6_conntrack_tuple *orig) ++{ ++ tuple->src.u.udp.port = orig->dst.u.udp.port; ++ tuple->dst.u.udp.port = orig->src.u.udp.port; ++ return 1; ++} ++ ++/* Print out the per-protocol part of the tuple. */ ++static unsigned int udp_print_tuple(char *buffer, ++ const struct ip6_conntrack_tuple *tuple) ++{ ++ return sprintf(buffer, "sport=%hu dport=%hu ", ++ ntohs(tuple->src.u.udp.port), ++ ntohs(tuple->dst.u.udp.port)); ++} ++ ++/* Print out the private part of the conntrack. */ ++static unsigned int udp_print_conntrack(char *buffer, ++ const struct ip6_conntrack *conntrack) ++{ ++ return 0; ++} ++ ++/* Returns verdict for packet, and may modify conntracktype */ ++static int udp_packet(struct ip6_conntrack *conntrack, ++ const struct sk_buff *skb, ++ unsigned int dataoff, ++ enum ip6_conntrack_info conntrackinfo) ++{ ++ /* If we've seen traffic both ways, this is some kind of UDP ++ stream. Extend timeout. */ ++ if (test_bit(IP6S_SEEN_REPLY_BIT, &conntrack->status)) { ++ ip6_ct_refresh(conntrack, UDP_STREAM_TIMEOUT); ++ /* Also, more likely to be important, and not a probe */ ++ set_bit(IP6S_ASSURED_BIT, &conntrack->status); ++ } else ++ ip6_ct_refresh(conntrack, UDP_TIMEOUT); ++ ++ return NF_ACCEPT; ++} ++ ++/* Called when a new connection for this protocol found. */ ++static int udp_new(struct ip6_conntrack *conntrack, const struct sk_buff *skb, ++ unsigned int dataoff) ++{ ++ return 1; ++} ++ ++struct ip6_conntrack_protocol ip6_conntrack_protocol_udp ++= { { NULL, NULL }, IPPROTO_UDP, "udp", ++ udp_pkt_to_tuple, udp_invert_tuple, udp_print_tuple, udp_print_conntrack, ++ udp_packet, udp_new, NULL, NULL, NULL }; +diff -urN linux-2.6.11/net/ipv6/netfilter/ip6_conntrack_reasm.c x1/net/ipv6/netfilter/ip6_conntrack_reasm.c +--- linux-2.6.11/net/ipv6/netfilter/ip6_conntrack_reasm.c 1970-01-01 01:00:00.000000000 +0100 ++++ x1/net/ipv6/netfilter/ip6_conntrack_reasm.c 2003-10-16 04:48:59.000000000 +0200 +@@ -0,0 +1,990 @@ ++/* ++ * IPv6 fragment reassembly for connection tracking ++ * Linux INET6 implementation ++ * ++ * Copyright (C)2003 USAGI/WIDE Project ++ * ++ * Authors: ++ * Yasuyuki Kozakai ++ * ++ * Based on: net/ipv6/reassembly.c ++ * ++ * This program 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 ++ * 2 of the License, or (at your option) any later version. ++ */ ++ ++#include ++#include ++#include ++#include ++#include ++#include ++#include ++#include ++#include ++#include ++#include ++#include ++#include ++#include ++#include ++ ++#include ++#include ++ ++#include ++#include ++#include ++#include ++#include ++#include ++#include ++#include ++#include ++#include ++#include ++ ++#if 0 ++#define DEBUGP printk ++#else ++#define DEBUGP(format, args...) ++#endif ++ ++#define IP6CT_FRAGS_HIGH_THRESH 262144 /* == 256*1024 */ ++#define IP6CT_FRAGS_LOW_THRESH 196608 /* == 192*1024 */ ++#define IP6CT_FRAGS_TIMEOUT IPV6_FRAG_TIMEOUT ++ ++static int sysctl_ip6_ct_frag_high_thresh = 256*1024; ++static int sysctl_ip6_ct_frag_low_thresh = 192*1024; ++static int sysctl_ip6_ct_frag_time = IPV6_FRAG_TIMEOUT; ++ ++struct ip6ct_frag_skb_cb ++{ ++ struct inet6_skb_parm h; ++ int offset; ++ struct sk_buff *orig; ++}; ++ ++#define IP6CT_FRAG6_CB(skb) ((struct ip6ct_frag_skb_cb*)((skb)->cb)) ++ ++ ++/* ++ * Equivalent of ipv4 struct ipq ++ */ ++ ++struct ip6ct_frag_queue ++{ ++ struct ip6ct_frag_queue *next; ++ struct list_head lru_list; /* lru list member */ ++ ++ __u32 id; /* fragment id */ ++ struct in6_addr saddr; ++ struct in6_addr daddr; ++ ++ spinlock_t lock; ++ atomic_t refcnt; ++ struct timer_list timer; /* expire timer */ ++ struct sk_buff *fragments; ++ int len; ++ int meat; ++ struct timeval stamp; ++ unsigned int csum; ++ __u8 last_in; /* has first/last segment arrived? */ ++#define COMPLETE 4 ++#define FIRST_IN 2 ++#define LAST_IN 1 ++ __u16 nhoffset; ++ struct ip6ct_frag_queue **pprev; ++}; ++ ++/* Hash table. */ ++ ++#define IP6CT_Q_HASHSZ 64 ++ ++static struct ip6ct_frag_queue *ip6_ct_frag_hash[IP6CT_Q_HASHSZ]; ++static rwlock_t ip6_ct_frag_lock = RW_LOCK_UNLOCKED; ++static u32 ip6_ct_frag_hash_rnd; ++static LIST_HEAD(ip6_ct_frag_lru_list); ++int ip6_ct_frag_nqueues = 0; ++ ++static __inline__ void __fq_unlink(struct ip6ct_frag_queue *fq) ++{ ++ if(fq->next) ++ fq->next->pprev = fq->pprev; ++ *fq->pprev = fq->next; ++ list_del(&fq->lru_list); ++ ip6_ct_frag_nqueues--; ++} ++ ++static __inline__ void fq_unlink(struct ip6ct_frag_queue *fq) ++{ ++ write_lock(&ip6_ct_frag_lock); ++ __fq_unlink(fq); ++ write_unlock(&ip6_ct_frag_lock); ++} ++ ++static unsigned int ip6qhashfn(u32 id, struct in6_addr *saddr, ++ struct in6_addr *daddr) ++{ ++ u32 a, b, c; ++ ++ a = saddr->s6_addr32[0]; ++ b = saddr->s6_addr32[1]; ++ c = saddr->s6_addr32[2]; ++ ++ a += JHASH_GOLDEN_RATIO; ++ b += JHASH_GOLDEN_RATIO; ++ c += ip6_ct_frag_hash_rnd; ++ __jhash_mix(a, b, c); ++ ++ a += saddr->s6_addr32[3]; ++ b += daddr->s6_addr32[0]; ++ c += daddr->s6_addr32[1]; ++ __jhash_mix(a, b, c); ++ ++ a += daddr->s6_addr32[2]; ++ b += daddr->s6_addr32[3]; ++ c += id; ++ __jhash_mix(a, b, c); ++ ++ return c & (IP6CT_Q_HASHSZ - 1); ++} ++ ++static struct timer_list ip6_ct_frag_secret_timer; ++int sysctl_ip6_ct_frag_secret_interval = 10 * 60 * HZ; ++ ++static void ip6_ct_frag_secret_rebuild(unsigned long dummy) ++{ ++ unsigned long now = jiffies; ++ int i; ++ ++ write_lock(&ip6_ct_frag_lock); ++ get_random_bytes(&ip6_ct_frag_hash_rnd, sizeof(u32)); ++ for (i = 0; i < IP6CT_Q_HASHSZ; i++) { ++ struct ip6ct_frag_queue *q; ++ ++ q = ip6_ct_frag_hash[i]; ++ while (q) { ++ struct ip6ct_frag_queue *next = q->next; ++ unsigned int hval = ip6qhashfn(q->id, ++ &q->saddr, ++ &q->daddr); ++ ++ if (hval != i) { ++ /* Unlink. */ ++ if (q->next) ++ q->next->pprev = q->pprev; ++ *q->pprev = q->next; ++ ++ /* Relink to new hash chain. */ ++ if ((q->next = ip6_ct_frag_hash[hval]) != NULL) ++ q->next->pprev = &q->next; ++ ip6_ct_frag_hash[hval] = q; ++ q->pprev = &ip6_ct_frag_hash[hval]; ++ } ++ ++ q = next; ++ } ++ } ++ write_unlock(&ip6_ct_frag_lock); ++ ++ mod_timer(&ip6_ct_frag_secret_timer, now + sysctl_ip6_ct_frag_secret_interval); ++} ++ ++atomic_t ip6_ct_frag_mem = ATOMIC_INIT(0); ++ ++/* Memory Tracking Functions. */ ++static inline void frag_kfree_skb(struct sk_buff *skb) ++{ ++ atomic_sub(skb->truesize, &ip6_ct_frag_mem); ++ if (IP6CT_FRAG6_CB(skb)->orig) ++ kfree_skb(IP6CT_FRAG6_CB(skb)->orig); ++ ++ kfree_skb(skb); ++} ++ ++static inline void frag_free_queue(struct ip6ct_frag_queue *fq) ++{ ++ atomic_sub(sizeof(struct ip6ct_frag_queue), &ip6_ct_frag_mem); ++ kfree(fq); ++} ++ ++static inline struct ip6ct_frag_queue *frag_alloc_queue(void) ++{ ++ struct ip6ct_frag_queue *fq = kmalloc(sizeof(struct ip6ct_frag_queue), GFP_ATOMIC); ++ ++ if(!fq) ++ return NULL; ++ atomic_add(sizeof(struct ip6ct_frag_queue), &ip6_ct_frag_mem); ++ return fq; ++} ++ ++/* Destruction primitives. */ ++ ++/* Complete destruction of fq. */ ++static void ip6_ct_frag_destroy(struct ip6ct_frag_queue *fq) ++{ ++ struct sk_buff *fp; ++ ++ BUG_TRAP(fq->last_in&COMPLETE); ++ BUG_TRAP(del_timer(&fq->timer) == 0); ++ ++ /* Release all fragment data. */ ++ fp = fq->fragments; ++ while (fp) { ++ struct sk_buff *xp = fp->next; ++ ++ frag_kfree_skb(fp); ++ fp = xp; ++ } ++ ++ frag_free_queue(fq); ++} ++ ++static __inline__ void fq_put(struct ip6ct_frag_queue *fq) ++{ ++ if (atomic_dec_and_test(&fq->refcnt)) ++ ip6_ct_frag_destroy(fq); ++} ++ ++/* Kill fq entry. It is not destroyed immediately, ++ * because caller (and someone more) holds reference count. ++ */ ++static __inline__ void fq_kill(struct ip6ct_frag_queue *fq) ++{ ++ if (del_timer(&fq->timer)) ++ atomic_dec(&fq->refcnt); ++ ++ if (!(fq->last_in & COMPLETE)) { ++ fq_unlink(fq); ++ atomic_dec(&fq->refcnt); ++ fq->last_in |= COMPLETE; ++ } ++} ++ ++static void ip6_ct_frag_evictor(void) ++{ ++ struct ip6ct_frag_queue *fq; ++ struct list_head *tmp; ++ ++ for(;;) { ++ if (atomic_read(&ip6_ct_frag_mem) <= sysctl_ip6_ct_frag_low_thresh) ++ return; ++ read_lock(&ip6_ct_frag_lock); ++ if (list_empty(&ip6_ct_frag_lru_list)) { ++ read_unlock(&ip6_ct_frag_lock); ++ return; ++ } ++ tmp = ip6_ct_frag_lru_list.next; ++ fq = list_entry(tmp, struct ip6ct_frag_queue, lru_list); ++ atomic_inc(&fq->refcnt); ++ read_unlock(&ip6_ct_frag_lock); ++ ++ spin_lock(&fq->lock); ++ if (!(fq->last_in&COMPLETE)) ++ fq_kill(fq); ++ spin_unlock(&fq->lock); ++ ++ fq_put(fq); ++ } ++} ++ ++static void ip6_ct_frag_expire(unsigned long data) ++{ ++ struct ip6ct_frag_queue *fq = (struct ip6ct_frag_queue *) data; ++ ++ spin_lock(&fq->lock); ++ ++ if (fq->last_in & COMPLETE) ++ goto out; ++ ++ fq_kill(fq); ++ ++out: ++ spin_unlock(&fq->lock); ++ fq_put(fq); ++} ++ ++/* Creation primitives. */ ++ ++ ++static struct ip6ct_frag_queue *ip6_ct_frag_intern(unsigned int hash, ++ struct ip6ct_frag_queue *fq_in) ++{ ++ struct ip6ct_frag_queue *fq; ++ ++ write_lock(&ip6_ct_frag_lock); ++#ifdef CONFIG_SMP ++ for (fq = ip6_ct_frag_hash[hash]; fq; fq = fq->next) { ++ if (fq->id == fq_in->id && ++ !ipv6_addr_cmp(&fq_in->saddr, &fq->saddr) && ++ !ipv6_addr_cmp(&fq_in->daddr, &fq->daddr)) { ++ atomic_inc(&fq->refcnt); ++ write_unlock(&ip6_ct_frag_lock); ++ fq_in->last_in |= COMPLETE; ++ fq_put(fq_in); ++ return fq; ++ } ++ } ++#endif ++ fq = fq_in; ++ ++ if (!mod_timer(&fq->timer, jiffies + sysctl_ip6_ct_frag_time)) ++ atomic_inc(&fq->refcnt); ++ ++ atomic_inc(&fq->refcnt); ++ if((fq->next = ip6_ct_frag_hash[hash]) != NULL) ++ fq->next->pprev = &fq->next; ++ ip6_ct_frag_hash[hash] = fq; ++ fq->pprev = &ip6_ct_frag_hash[hash]; ++ INIT_LIST_HEAD(&fq->lru_list); ++ list_add_tail(&fq->lru_list, &ip6_ct_frag_lru_list); ++ ip6_ct_frag_nqueues++; ++ write_unlock(&ip6_ct_frag_lock); ++ return fq; ++} ++ ++ ++static struct ip6ct_frag_queue * ++ip6_ct_frag_create(unsigned int hash, u32 id, struct in6_addr *src, struct in6_addr *dst) ++{ ++ struct ip6ct_frag_queue *fq; ++ ++ if ((fq = frag_alloc_queue()) == NULL) { ++ DEBUGP("Can't alloc new queue\n"); ++ goto oom; ++ } ++ ++ memset(fq, 0, sizeof(struct ip6ct_frag_queue)); ++ ++ fq->id = id; ++ ipv6_addr_copy(&fq->saddr, src); ++ ipv6_addr_copy(&fq->daddr, dst); ++ ++ init_timer(&fq->timer); ++ fq->timer.function = ip6_ct_frag_expire; ++ fq->timer.data = (long) fq; ++ fq->lock = SPIN_LOCK_UNLOCKED; ++ atomic_set(&fq->refcnt, 1); ++ ++ return ip6_ct_frag_intern(hash, fq); ++ ++oom: ++ return NULL; ++} ++ ++static __inline__ struct ip6ct_frag_queue * ++fq_find(u32 id, struct in6_addr *src, struct in6_addr *dst) ++{ ++ struct ip6ct_frag_queue *fq; ++ unsigned int hash = ip6qhashfn(id, src, dst); ++ ++ read_lock(&ip6_ct_frag_lock); ++ for(fq = ip6_ct_frag_hash[hash]; fq; fq = fq->next) { ++ if (fq->id == id && ++ !ipv6_addr_cmp(src, &fq->saddr) && ++ !ipv6_addr_cmp(dst, &fq->daddr)) { ++ atomic_inc(&fq->refcnt); ++ read_unlock(&ip6_ct_frag_lock); ++ return fq; ++ } ++ } ++ read_unlock(&ip6_ct_frag_lock); ++ ++ return ip6_ct_frag_create(hash, id, src, dst); ++} ++ ++ ++static int ip6_ct_frag_queue(struct ip6ct_frag_queue *fq, struct sk_buff *skb, ++ struct frag_hdr *fhdr, int nhoff) ++{ ++ struct sk_buff *prev, *next; ++ int offset, end; ++ ++ if (fq->last_in & COMPLETE) { ++ DEBUGP("Allready completed\n"); ++ goto err; ++ } ++ ++ offset = ntohs(fhdr->frag_off) & ~0x7; ++ end = offset + (ntohs(skb->nh.ipv6h->payload_len) - ++ ((u8 *) (fhdr + 1) - (u8 *) (skb->nh.ipv6h + 1))); ++ ++ if ((unsigned int)end > IPV6_MAXPLEN) { ++ DEBUGP("offset is too large.\n"); ++ return -1; ++ } ++ ++ if (skb->ip_summed == CHECKSUM_HW) ++ skb->csum = csum_sub(skb->csum, ++ csum_partial(skb->nh.raw, (u8*)(fhdr+1)-skb->nh.raw, 0)); ++ ++ /* Is this the final fragment? */ ++ if (!(fhdr->frag_off & htons(IP6_MF))) { ++ /* If we already have some bits beyond end ++ * or have different end, the segment is corrupted. ++ */ ++ if (end < fq->len || ++ ((fq->last_in & LAST_IN) && end != fq->len)) { ++ DEBUGP("already received last fragment\n"); ++ goto err; ++ } ++ fq->last_in |= LAST_IN; ++ fq->len = end; ++ } else { ++ /* Check if the fragment is rounded to 8 bytes. ++ * Required by the RFC. ++ */ ++ if (end & 0x7) { ++ /* RFC2460 says always send parameter problem in ++ * this case. -DaveM ++ */ ++ DEBUGP("the end of this message is not rounded to 8 bytes.\n"); ++ return -1; ++ } ++ if (end > fq->len) { ++ /* Some bits beyond end -> corruption. */ ++ if (fq->last_in & LAST_IN) { ++ DEBUGP("last packet already reached.\n"); ++ goto err; ++ } ++ fq->len = end; ++ } ++ } ++ ++ if (end == offset) ++ goto err; ++ ++ /* Point into the IP datagram 'data' part. */ ++ if (!pskb_pull(skb, (u8 *) (fhdr + 1) - skb->data)) { ++ DEBUGP("queue: message is too short.\n"); ++ goto err; ++ } ++ if (end-offset < skb->len) { ++ if (pskb_trim(skb, end - offset)) { ++ DEBUGP("Can't trim\n"); ++ goto err; ++ } ++ if (skb->ip_summed != CHECKSUM_UNNECESSARY) ++ skb->ip_summed = CHECKSUM_NONE; ++ } ++ ++ /* Find out which fragments are in front and at the back of us ++ * in the chain of fragments so far. We must know where to put ++ * this fragment, right? ++ */ ++ prev = NULL; ++ for(next = fq->fragments; next != NULL; next = next->next) { ++ if (IP6CT_FRAG6_CB(next)->offset >= offset) ++ break; /* bingo! */ ++ prev = next; ++ } ++ ++ /* We found where to put this one. Check for overlap with ++ * preceding fragment, and, if needed, align things so that ++ * any overlaps are eliminated. ++ */ ++ if (prev) { ++ int i = (IP6CT_FRAG6_CB(prev)->offset + prev->len) - offset; ++ ++ if (i > 0) { ++ offset += i; ++ if (end <= offset) { ++ DEBUGP("overlap\n"); ++ goto err; ++ } ++ if (!pskb_pull(skb, i)) { ++ DEBUGP("Can't pull\n"); ++ goto err; ++ } ++ if (skb->ip_summed != CHECKSUM_UNNECESSARY) ++ skb->ip_summed = CHECKSUM_NONE; ++ } ++ } ++ ++ /* Look for overlap with succeeding segments. ++ * If we can merge fragments, do it. ++ */ ++ while (next && IP6CT_FRAG6_CB(next)->offset < end) { ++ int i = end - IP6CT_FRAG6_CB(next)->offset; /* overlap is 'i' bytes */ ++ ++ if (i < next->len) { ++ /* Eat head of the next overlapped fragment ++ * and leave the loop. The next ones cannot overlap. ++ */ ++ DEBUGP("Eat head of the overlapped parts.: %d", i); ++ if (!pskb_pull(next, i)) ++ goto err; ++ IP6CT_FRAG6_CB(next)->offset += i; /* next fragment */ ++ fq->meat -= i; ++ if (next->ip_summed != CHECKSUM_UNNECESSARY) ++ next->ip_summed = CHECKSUM_NONE; ++ break; ++ } else { ++ struct sk_buff *free_it = next; ++ ++ /* Old fragmnet is completely overridden with ++ * new one drop it. ++ */ ++ next = next->next; ++ ++ if (prev) ++ prev->next = next; ++ else ++ fq->fragments = next; ++ ++ fq->meat -= free_it->len; ++ frag_kfree_skb(free_it); ++ } ++ } ++ ++ IP6CT_FRAG6_CB(skb)->offset = offset; ++ ++ /* Insert this fragment in the chain of fragments. */ ++ skb->next = next; ++ if (prev) ++ prev->next = skb; ++ else ++ fq->fragments = skb; ++ ++ skb->dev = NULL; ++ fq->stamp = skb->stamp; ++ fq->meat += skb->len; ++ atomic_add(skb->truesize, &ip6_ct_frag_mem); ++ ++ /* The first fragment. ++ * nhoffset is obtained from the first fragment, of course. ++ */ ++ if (offset == 0) { ++ fq->nhoffset = nhoff; ++ fq->last_in |= FIRST_IN; ++ } ++ write_lock(&ip6_ct_frag_lock); ++ list_move_tail(&fq->lru_list, &ip6_ct_frag_lru_list); ++ write_unlock(&ip6_ct_frag_lock); ++ return 0; ++ ++err: ++ return -1; ++} ++ ++/* ++ * Check if this packet is complete. ++ * Returns NULL on failure by any reason, and pointer ++ * to current nexthdr field in reassembled frame. ++ * ++ * It is called with locked fq, and caller must check that ++ * queue is eligible for reassembly i.e. it is not COMPLETE, ++ * the last and the first frames arrived and all the bits are here. ++ */ ++static struct sk_buff * ++ip6_ct_frag_reasm(struct ip6ct_frag_queue *fq, struct net_device *dev) ++{ ++ struct sk_buff *fp, *op, *head = fq->fragments; ++ int payload_len; ++ ++ fq_kill(fq); ++ ++ BUG_TRAP(head != NULL); ++ BUG_TRAP(IP6CT_FRAG6_CB(head)->offset == 0); ++ ++ /* Unfragmented part is taken from the first segment. */ ++ payload_len = (head->data - head->nh.raw) - sizeof(struct ipv6hdr) + fq->len - sizeof(struct frag_hdr); ++ if (payload_len > IPV6_MAXPLEN) { ++ DEBUGP("payload len is too large.\n"); ++ goto out_oversize; ++ } ++ ++ /* Head of list must not be cloned. */ ++ if (skb_cloned(head) && pskb_expand_head(head, 0, 0, GFP_ATOMIC)) { ++ DEBUGP("skb is cloned but can't expand head"); ++ goto out_oom; ++ } ++ ++ /* If the first fragment is fragmented itself, we split ++ * it to two chunks: the first with data and paged part ++ * and the second, holding only fragments. */ ++ if (skb_shinfo(head)->frag_list) { ++ struct sk_buff *clone; ++ int i, plen = 0; ++ ++ if ((clone = alloc_skb(0, GFP_ATOMIC)) == NULL) { ++ DEBUGP("Can't alloc skb\n"); ++ goto out_oom; ++ } ++ clone->next = head->next; ++ head->next = clone; ++ skb_shinfo(clone)->frag_list = skb_shinfo(head)->frag_list; ++ skb_shinfo(head)->frag_list = NULL; ++ for (i=0; inr_frags; i++) ++ plen += skb_shinfo(head)->frags[i].size; ++ clone->len = clone->data_len = head->data_len - plen; ++ head->data_len -= clone->len; ++ head->len -= clone->len; ++ clone->csum = 0; ++ clone->ip_summed = head->ip_summed; ++ ++ IP6CT_FRAG6_CB(clone)->orig = NULL; ++ atomic_add(clone->truesize, &ip6_ct_frag_mem); ++ } ++ ++ /* We have to remove fragment header from datagram and to relocate ++ * header in order to calculate ICV correctly. */ ++ head->nh.raw[fq->nhoffset] = head->h.raw[0]; ++ memmove(head->head + sizeof(struct frag_hdr), head->head, ++ (head->data - head->head) - sizeof(struct frag_hdr)); ++ head->mac.raw += sizeof(struct frag_hdr); ++ head->nh.raw += sizeof(struct frag_hdr); ++ ++ skb_shinfo(head)->frag_list = head->next; ++ head->h.raw = head->data; ++ skb_push(head, head->data - head->nh.raw); ++ atomic_sub(head->truesize, &ip6_ct_frag_mem); ++ ++ for (fp=head->next; fp; fp = fp->next) { ++ head->data_len += fp->len; ++ head->len += fp->len; ++ if (head->ip_summed != fp->ip_summed) ++ head->ip_summed = CHECKSUM_NONE; ++ else if (head->ip_summed == CHECKSUM_HW) ++ head->csum = csum_add(head->csum, fp->csum); ++ head->truesize += fp->truesize; ++ atomic_sub(fp->truesize, &ip6_ct_frag_mem); ++ } ++ ++ head->next = NULL; ++ head->dev = dev; ++ head->stamp = fq->stamp; ++ head->nh.ipv6h->payload_len = ntohs(payload_len); ++ ++ /* Yes, and fold redundant checksum back. 8) */ ++ if (head->ip_summed == CHECKSUM_HW) ++ head->csum = csum_partial(head->nh.raw, head->h.raw-head->nh.raw, head->csum); ++ ++ fq->fragments = NULL; ++ ++ /* all original skbs are linked into the IP6CT_FRAG6_CB(head).orig */ ++ fp = skb_shinfo(head)->frag_list; ++ if (IP6CT_FRAG6_CB(fp)->orig == NULL) ++ /* at above code, head skb is divided into two skbs. */ ++ fp = fp->next; ++ ++ op = IP6CT_FRAG6_CB(head)->orig; ++ for (; fp; fp = fp->next) { ++ struct sk_buff *orig = IP6CT_FRAG6_CB(fp)->orig; ++ ++ op->next = orig; ++ op = orig; ++ IP6CT_FRAG6_CB(fp)->orig = NULL; ++ } ++ ++ return head; ++ ++out_oversize: ++ if (net_ratelimit()) ++ printk(KERN_DEBUG "ip6_ct_frag_reasm: payload len = %d\n", payload_len); ++ goto out_fail; ++out_oom: ++ if (net_ratelimit()) ++ printk(KERN_DEBUG "ip6_ct_frag_reasm: no memory for reassembly\n"); ++out_fail: ++ return NULL; ++} ++ ++/* ++ * find the header just before Fragment Header. ++ * ++ * if success return 0 and set ... ++ * (*prevhdrp): the value of "Next Header Field" in the header ++ * just before Fragment Header. ++ * (*prevhoff): the offset of "Next Header Field" in the header ++ * just before Fragment Header. ++ * (*fhoff) : the offset of Fragment Header. ++ * ++ * Based on ipv6_skip_hdr() in net/ipv6/exthdr.c ++ * ++ */ ++static int ++find_prev_fhdr(struct sk_buff *skb, u8 *prevhdrp, int *prevhoff, int *fhoff) ++{ ++ u8 nexthdr = skb->nh.ipv6h->nexthdr; ++ u8 prev_nhoff = (u8 *)&skb->nh.ipv6h->nexthdr - skb->data; ++ int start = (u8 *)(skb->nh.ipv6h+1) - skb->data; ++ int len = skb->len - start; ++ u8 prevhdr = NEXTHDR_IPV6; ++ ++ while (nexthdr != NEXTHDR_FRAGMENT) { ++ struct ipv6_opt_hdr hdr; ++ int hdrlen; ++ ++ if (!ipv6_ext_hdr(nexthdr)) { ++ return -1; ++ } ++ if (len < (int)sizeof(struct ipv6_opt_hdr)) { ++ DEBUGP("too short\n"); ++ return -1; ++ } ++ if (nexthdr == NEXTHDR_NONE) { ++ DEBUGP("next header is none\n"); ++ return -1; ++ } ++ if (skb_copy_bits(skb, start, &hdr, sizeof(hdr))) ++ BUG(); ++ if (nexthdr == NEXTHDR_AUTH) ++ hdrlen = (hdr.hdrlen+2)<<2; ++ else ++ hdrlen = ipv6_optlen(&hdr); ++ ++ prevhdr = nexthdr; ++ prev_nhoff = start; ++ ++ nexthdr = hdr.nexthdr; ++ len -= hdrlen; ++ start += hdrlen; ++ } ++ ++ if (len < 0) ++ return -1; ++ ++ *prevhdrp = prevhdr; ++ *prevhoff = prev_nhoff; ++ *fhoff = start; ++ ++ return 0; ++} ++ ++struct sk_buff *ip6_ct_gather_frags(struct sk_buff *skb) ++{ ++ struct sk_buff *clone; ++ struct net_device *dev = skb->dev; ++ struct frag_hdr *fhdr; ++ struct ip6ct_frag_queue *fq; ++ struct ipv6hdr *hdr; ++ int fhoff, nhoff; ++ u8 prevhdr; ++ struct sk_buff *ret_skb = NULL; ++ ++ /* Jumbo payload inhibits frag. header */ ++ if (skb->nh.ipv6h->payload_len == 0) { ++ DEBUGP("payload len = 0\n"); ++ return skb; ++ } ++ ++ if (find_prev_fhdr(skb, &prevhdr, &nhoff, &fhoff) < 0) ++ return skb; ++ ++ clone = skb_clone(skb, GFP_ATOMIC); ++ if (clone == NULL) { ++ DEBUGP("Can't clone skb\n"); ++ return skb; ++ } ++ ++ IP6CT_FRAG6_CB(clone)->orig = skb; ++ ++ if (!pskb_may_pull(clone, fhoff + sizeof(*fhdr))) { ++ DEBUGP("message is too short.\n"); ++ goto ret_orig; ++ } ++ ++ clone->h.raw = clone->data + fhoff; ++ hdr = clone->nh.ipv6h; ++ fhdr = (struct frag_hdr *)clone->h.raw; ++ ++ if (!(fhdr->frag_off & htons(0xFFF9))) { ++ DEBUGP("Invalid fragment offset\n"); ++ /* It is not a fragmented frame */ ++ goto ret_orig; ++ } ++ ++ if (atomic_read(&ip6_ct_frag_mem) > sysctl_ip6_ct_frag_high_thresh) ++ ip6_ct_frag_evictor(); ++ ++ if ((fq = fq_find(fhdr->identification, &hdr->saddr, &hdr->daddr)) == NULL) { ++ DEBUGP("Can't find and can't create new queue\n"); ++ goto ret_orig; ++ } ++ ++ spin_lock(&fq->lock); ++ ++ if (ip6_ct_frag_queue(fq, clone, fhdr, nhoff) < 0) { ++ spin_unlock(&fq->lock); ++ DEBUGP("Can't insert skb to queue\n"); ++ fq_put(fq); ++ goto ret_orig; ++ } ++ ++ if (fq->last_in == (FIRST_IN|LAST_IN) && ++ fq->meat == fq->len) { ++ ret_skb = ip6_ct_frag_reasm(fq, dev); ++ ++ if (ret_skb == NULL) ++ DEBUGP("Can't reassemble fragmented packets\n"); ++ } ++ spin_unlock(&fq->lock); ++ ++ fq_put(fq); ++ return ret_skb; ++ ++ret_orig: ++ kfree_skb(clone); ++ return skb; ++} ++ ++int ip6_ct_output_frags(struct sk_buff *skb, struct nf_info *info) ++{ ++ struct sk_buff *s, *s2; ++ struct nf_info *copy_info; ++ ++ for (s = IP6CT_FRAG6_CB(skb)->orig; s;) { ++ if (skb->nfct) ++ nf_conntrack_get(skb->nfct); ++ s->nfct = skb->nfct; ++ s->nfcache = skb->nfcache; ++ ++ /* ++ * nf_reinject() frees copy_info, ++ * so I have to copy it every time. (T-T ++ */ ++ copy_info = kmalloc(sizeof(*copy_info), GFP_ATOMIC); ++ if (copy_info == NULL) { ++ DEBUGP("Can't kmalloc() for nf_info\n"); ++ return -1; ++ } ++ ++ copy_info->pf = info->pf; ++ copy_info->hook = info->hook; ++ copy_info->indev = info->indev; ++ copy_info->outdev = info->outdev; ++ copy_info->okfn = info->okfn; ++ copy_info->elem = info->elem; ++ ++ /* ++ * nf_reinject() put the module "ip6_conntrack". ++ */ ++ if (!try_module_get(info->elem->owner)) { ++ DEBUGP("Can't get module.\n"); ++ kfree_skb(s); ++ continue; ++ } ++ ++ if (copy_info->indev) ++ dev_hold(copy_info->indev); ++ if (copy_info->outdev) ++ dev_hold(copy_info->outdev); ++ ++ s2 = s->next; ++ nf_reinject(s, copy_info, NF_ACCEPT); ++ s = s2; ++ } ++ ++ kfree_skb(skb); ++ ++ return 0; ++} ++ ++int ip6_ct_kfree_frags(struct sk_buff *skb) ++{ ++ struct sk_buff *s, *s2; ++ ++ for (s = IP6CT_FRAG6_CB(skb)->orig; s; s = s2) { ++ ++ s2 = s->next; ++ kfree_skb(s); ++ } ++ ++ kfree_skb(skb); ++ ++ return 0; ++} ++ ++#ifdef CONFIG_SYSCTL ++ ++#define IP6CT_HIGH_THRESH_NAME "ip6ct_frags_high_thresh" ++#define IP6CT_LOW_THRESH_NAME "ip6ct_frags_low_thresh" ++#define IP6CT_TIMEOUT_NAME "ip6ct_frags_timeout" ++ ++static struct ctl_table_header *ip6_ct_frags_sysctl_header; ++ ++static ctl_table ip6_ct_frags_table[] = { ++ { ++ .ctl_name = IP6CT_FRAGS_HIGH_THRESH, ++ .procname = IP6CT_HIGH_THRESH_NAME, ++ .data = &sysctl_ip6_ct_frag_high_thresh, ++ .maxlen = sizeof(sysctl_ip6_ct_frag_high_thresh), ++ .mode = 0644, ++ .proc_handler = proc_dointvec ++ }, ++ { ++ .ctl_name = IP6CT_FRAGS_LOW_THRESH, ++ .procname = IP6CT_LOW_THRESH_NAME, ++ .data = &sysctl_ip6_ct_frag_low_thresh, ++ .maxlen = sizeof(sysctl_ip6_ct_frag_high_thresh), ++ .mode = 0644, ++ .proc_handler = proc_dointvec ++ }, ++ { ++ .ctl_name = IP6CT_FRAGS_TIMEOUT, ++ .procname = IP6CT_TIMEOUT_NAME, ++ .data = &sysctl_ip6_ct_frag_time, ++ .maxlen = sizeof(sysctl_ip6_ct_frag_time), ++ .mode = 0644, ++ .proc_handler = proc_dointvec ++ }, ++ { .ctl_name = 0 } ++}; ++ ++static ctl_table ip6_ct_frags_dir_table[] = { ++ { ++ .ctl_name = NET_IPV6, ++ .procname = "ipv6", NULL, ++ .mode = 0555, ++ .child = ip6_ct_frags_table ++ }, ++ { .ctl_name = 0 } ++}; ++ ++static ctl_table ip6_ct_frags_root_table[] = { ++ { ++ .ctl_name = CTL_NET, ++ .procname = "net", ++ .mode = 0555, ++ .child = ip6_ct_frags_dir_table ++ }, ++ { .ctl_name = 0 } ++}; ++ ++#endif /*CONFIG_SYSCTL*/ ++ ++int __init ip6_ct_frags_init(void) ++{ ++#ifdef CONFIG_SYSCTL ++ ip6_ct_frags_sysctl_header = register_sysctl_table(ip6_ct_frags_root_table, 0); ++ ++ if (ip6_ct_frags_sysctl_header == NULL) { ++ printk("ip6_ct_frags_init: Can't register sysctl tables.\n"); ++ return -ENOMEM; ++ } ++#endif ++ ++ ip6_ct_frag_hash_rnd = (u32) ((num_physpages ^ (num_physpages>>7)) ^ ++ (jiffies ^ (jiffies >> 6))); ++ ++ init_timer(&ip6_ct_frag_secret_timer); ++ ip6_ct_frag_secret_timer.function = ip6_ct_frag_secret_rebuild; ++ ip6_ct_frag_secret_timer.expires = jiffies + sysctl_ip6_ct_frag_secret_interval; ++ add_timer(&ip6_ct_frag_secret_timer); ++ ++ return 0; ++} ++ ++void ip6_ct_frags_cleanup(void) ++{ ++ del_timer(&ip6_ct_frag_secret_timer); ++#ifdef CONFIG_SYSCTL ++ unregister_sysctl_table(ip6_ct_frags_sysctl_header); ++#endif ++ sysctl_ip6_ct_frag_low_thresh = 0; ++ ip6_ct_frag_evictor(); ++} +diff -urN linux-2.6.11/net/ipv6/netfilter/ip6_conntrack_standalone.c x1/net/ipv6/netfilter/ip6_conntrack_standalone.c +--- linux-2.6.11/net/ipv6/netfilter/ip6_conntrack_standalone.c 1970-01-01 01:00:00.000000000 +0100 ++++ x1/net/ipv6/netfilter/ip6_conntrack_standalone.c 2003-09-20 11:00:21.000000000 +0200 +@@ -0,0 +1,502 @@ ++/* ++ * IPv6 Connection Tracking ++ * Linux INET6 implementation ++ * ++ * Copyright (C)2003 USAGI/WIDE Project ++ * ++ * Authors: ++ * Yasuyuki Kozakai ++ * ++ * Based on: net/ipv4/netfilter/ip_conntrack_standalone.c ++ * ++ * This program 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 ++ * 2 of the License, or (at your option) any later version. ++ */ ++ ++/* This file contains all the functions required for the standalone ++ ip6_conntrack module. ++ ++ These are not required by the compatibility layer. ++*/ ++ ++/* (c) 1999 Paul `Rusty' Russell. Licenced under the GNU General ++ Public Licence. */ ++ ++#include ++#include ++#include ++#include ++#include ++#include ++#include ++#include ++#include ++ ++#define ASSERT_READ_LOCK(x) MUST_BE_READ_LOCKED(&ip6_conntrack_lock) ++#define ASSERT_WRITE_LOCK(x) MUST_BE_WRITE_LOCKED(&ip6_conntrack_lock) ++ ++#include ++#include ++#include ++#include ++#include ++#include ++ ++#if 0 ++#define DEBUGP printk ++#else ++#define DEBUGP(format, args...) ++#endif ++ ++MODULE_LICENSE("GPL"); ++ ++static int kill_proto(const struct ip6_conntrack *i, void *data) ++{ ++ return (i->tuplehash[IP6_CT_DIR_ORIGINAL].tuple.dst.protonum == ++ *((u_int8_t *) data)); ++} ++ ++static unsigned int ++print_tuple(char *buffer, const struct ip6_conntrack_tuple *tuple, ++ struct ip6_conntrack_protocol *proto) ++{ ++ int len; ++ ++ len = sprintf(buffer, "src=%x:%x:%x:%x:%x:%x:%x:%x dst=%x:%x:%x:%x:%x:%x:%x:%x ", ++ NIP6(tuple->src.ip), NIP6(tuple->dst.ip)); ++ ++ len += proto->print_tuple(buffer + len, tuple); ++ ++ return len; ++} ++ ++/* FIXME: Don't print source proto part. --RR */ ++static unsigned int ++print_expect(char *buffer, const struct ip6_conntrack_expect *expect) ++{ ++ unsigned int len; ++ ++ if (expect->expectant->helper->timeout) ++ len = sprintf(buffer, "EXPECTING: %lu ", ++ timer_pending(&expect->timeout) ++ ? (expect->timeout.expires - jiffies)/HZ : 0); ++ else ++ len = sprintf(buffer, "EXPECTING: - "); ++ len += sprintf(buffer + len, "use=%u proto=%u ", ++ atomic_read(&expect->use), expect->tuple.dst.protonum); ++ len += print_tuple(buffer + len, &expect->tuple, ++ __ip6_ct_find_proto(expect->tuple.dst.protonum)); ++ len += sprintf(buffer + len, "\n"); ++ return len; ++} ++ ++static unsigned int ++print_conntrack(char *buffer, struct ip6_conntrack *conntrack) ++{ ++ unsigned int len; ++ struct ip6_conntrack_protocol *proto ++ = __ip6_ct_find_proto(conntrack->tuplehash[IP6_CT_DIR_ORIGINAL] ++ .tuple.dst.protonum); ++ ++ len = sprintf(buffer, "%-8s %u %lu ", ++ proto->name, ++ conntrack->tuplehash[IP6_CT_DIR_ORIGINAL] ++ .tuple.dst.protonum, ++ timer_pending(&conntrack->timeout) ++ ? (conntrack->timeout.expires - jiffies)/HZ : 0); ++ ++ len += proto->print_conntrack(buffer + len, conntrack); ++ len += print_tuple(buffer + len, ++ &conntrack->tuplehash[IP6_CT_DIR_ORIGINAL].tuple, ++ proto); ++ if (!(test_bit(IP6S_SEEN_REPLY_BIT, &conntrack->status))) ++ len += sprintf(buffer + len, "[UNREPLIED] "); ++ len += print_tuple(buffer + len, ++ &conntrack->tuplehash[IP6_CT_DIR_REPLY].tuple, ++ proto); ++ if (test_bit(IP6S_ASSURED_BIT, &conntrack->status)) ++ len += sprintf(buffer + len, "[ASSURED] "); ++ len += sprintf(buffer + len, "use=%u ", ++ atomic_read(&conntrack->ct_general.use)); ++ len += sprintf(buffer + len, "\n"); ++ ++ return len; ++} ++ ++/* Returns true when finished. */ ++static inline int ++conntrack_iterate(const struct ip6_conntrack_tuple_hash *hash, ++ char *buffer, off_t offset, off_t *upto, ++ unsigned int *len, unsigned int maxlen) ++{ ++ unsigned int newlen; ++ IP6_NF_ASSERT(hash->ctrack); ++ ++ MUST_BE_READ_LOCKED(&ip6_conntrack_lock); ++ ++ /* Only count originals */ ++ if (DIRECTION(hash)) ++ return 0; ++ ++ if ((*upto)++ < offset) ++ return 0; ++ ++ newlen = print_conntrack(buffer + *len, hash->ctrack); ++ if (*len + newlen > maxlen) ++ return 1; ++ else *len += newlen; ++ ++ return 0; ++} ++ ++static int ++list_conntracks(char *buffer, char **start, off_t offset, int length) ++{ ++ unsigned int i; ++ unsigned int len = 0; ++ off_t upto = 0; ++ struct list_head *e; ++ ++ READ_LOCK(&ip6_conntrack_lock); ++ /* Traverse hash; print originals then reply. */ ++ for (i = 0; i < ip6_conntrack_htable_size; i++) { ++ if (LIST_FIND(&ip6_conntrack_hash[i], conntrack_iterate, ++ struct ip6_conntrack_tuple_hash *, ++ buffer, offset, &upto, &len, length)) ++ goto finished; ++ } ++ ++ /* Now iterate through expecteds. */ ++ for (e = ip6_conntrack_expect_list.next; ++ e != &ip6_conntrack_expect_list; e = e->next) { ++ unsigned int last_len; ++ struct ip6_conntrack_expect *expect ++ = (struct ip6_conntrack_expect *)e; ++ if (upto++ < offset) continue; ++ ++ last_len = len; ++ len += print_expect(buffer + len, expect); ++ if (len > length) { ++ len = last_len; ++ goto finished; ++ } ++ } ++ ++ finished: ++ READ_UNLOCK(&ip6_conntrack_lock); ++ ++ /* `start' hack - see fs/proc/generic.c line ~165 */ ++ *start = (char *)((unsigned int)upto - offset); ++ return len; ++} ++ ++static unsigned int ip6_confirm(unsigned int hooknum, ++ struct sk_buff **pskb, ++ const struct net_device *in, ++ const struct net_device *out, ++ int (*okfn)(struct sk_buff *)); ++static unsigned int ip6_conntrack_out(unsigned int hooknum, ++ struct sk_buff **pskb, ++ const struct net_device *in, ++ const struct net_device *out, ++ int (*okfn)(struct sk_buff *)); ++static unsigned int ip6_conntrack_reasm(unsigned int hooknum, ++ struct sk_buff **pskb, ++ const struct net_device *in, ++ const struct net_device *out, ++ int (*okfn)(struct sk_buff *)); ++static unsigned int ip6_conntrack_local(unsigned int hooknum, ++ struct sk_buff **pskb, ++ const struct net_device *in, ++ const struct net_device *out, ++ int (*okfn)(struct sk_buff *)); ++ ++/* Connection tracking may drop packets, but never alters them, so ++ make it the first hook. */ ++static struct nf_hook_ops ip6_conntrack_in_ops = { ++ /* Don't forget to change .hook to "ip6_conntrack_input". - zak */ ++ .hook = ip6_conntrack_reasm, ++ .owner = THIS_MODULE, ++ .pf = PF_INET6, ++ .hooknum = NF_IP6_PRE_ROUTING, ++ .priority = NF_IP6_PRI_CONNTRACK, ++}; ++ ++static struct nf_hook_ops ip6_conntrack_local_out_ops = { ++ .hook = ip6_conntrack_local, ++ .owner = THIS_MODULE, ++ .pf = PF_INET6, ++ .hooknum = NF_IP6_LOCAL_OUT, ++ .priority = NF_IP6_PRI_CONNTRACK, ++}; ++ ++/* Refragmenter; last chance. */ ++static struct nf_hook_ops ip6_conntrack_out_ops = { ++ .hook = ip6_conntrack_out, ++ .owner = THIS_MODULE, ++ .pf = PF_INET6, ++ .hooknum = NF_IP6_POST_ROUTING, ++ .priority = NF_IP6_PRI_LAST, ++}; ++ ++static struct nf_hook_ops ip6_conntrack_local_in_ops = { ++ .hook = ip6_confirm, ++ .owner = THIS_MODULE, ++ .pf = PF_INET6, ++ .hooknum = NF_IP6_LOCAL_IN, ++ .priority = NF_IP6_PRI_LAST-1, ++}; ++ ++static unsigned int ip6_confirm(unsigned int hooknum, ++ struct sk_buff **pskb, ++ const struct net_device *in, ++ const struct net_device *out, ++ int (*okfn)(struct sk_buff *)) ++{ ++ int ret; ++ ++ ret = ip6_conntrack_confirm(*pskb); ++ ++ return ret; ++} ++ ++static unsigned int ip6_conntrack_out(unsigned int hooknum, ++ struct sk_buff **pskb, ++ const struct net_device *in, ++ const struct net_device *out, ++ int (*okfn)(struct sk_buff *)) ++{ ++ ++ if (ip6_conntrack_confirm(*pskb) != NF_ACCEPT) ++ return NF_DROP; ++ ++ return NF_ACCEPT; ++} ++ ++static unsigned int ip6_conntrack_reasm(unsigned int hooknum, ++ struct sk_buff **pskb, ++ const struct net_device *in, ++ const struct net_device *out, ++ int (*okfn)(struct sk_buff *)) ++{ ++ struct sk_buff *skb = *pskb; ++ struct sk_buff **rsmd_pskb = &skb; ++ int fragd = 0; ++ int ret; ++ ++ skb->nfcache |= NFC_UNKNOWN; ++ ++ /* ++ * Previously seen (loopback)? Ignore. Do this before ++ * fragment check. ++ */ ++ if (skb->nfct) { ++ DEBUGP("previously seen\n"); ++ return NF_ACCEPT; ++ } ++ ++ skb = ip6_ct_gather_frags(skb); ++ ++ /* queued */ ++ if (skb == NULL) ++ return NF_STOLEN; ++ ++ if (skb != (*pskb)) ++ fragd = 1; ++ ++ ret = ip6_conntrack_in(hooknum, rsmd_pskb, in, out, okfn); ++ ++ if (!fragd) ++ return ret; ++ ++ if (ret == NF_DROP) { ++ ip6_ct_kfree_frags(skb); ++ }else{ ++ struct nf_info info; ++ ++ info.pf = PF_INET6; ++ info.hook = hooknum; ++ info.indev = in; ++ info.outdev = out; ++ info.okfn = okfn; ++ switch (hooknum) { ++ case NF_IP6_PRE_ROUTING: ++ info.elem = &ip6_conntrack_in_ops; ++ break; ++ case NF_IP6_LOCAL_OUT: ++ info.elem = &ip6_conntrack_local_out_ops; ++ break; ++ } ++ ++ if (ip6_ct_output_frags(skb, &info) <0) ++ DEBUGP("Can't output fragments\n"); ++ ++ } ++ ++ return NF_STOLEN; ++} ++ ++static unsigned int ip6_conntrack_local(unsigned int hooknum, ++ struct sk_buff **pskb, ++ const struct net_device *in, ++ const struct net_device *out, ++ int (*okfn)(struct sk_buff *)) ++{ ++ unsigned int ret; ++ ++ /* root is playing with raw sockets. */ ++ if ((*pskb)->len < sizeof(struct ipv6hdr)) { ++ if (net_ratelimit()) ++ printk("ip6t_hook: IPv6 header is too short.\n"); ++ return NF_ACCEPT; ++ } ++ ++ ret = ip6_conntrack_reasm(hooknum, pskb, in, out, okfn); ++ ++ return ret; ++} ++ ++static int init_or_cleanup(int init) ++{ ++ struct proc_dir_entry *proc; ++ int ret = 0; ++ ++ if (!init) goto cleanup; ++ ++ ret = ip6_ct_frags_init(); ++ if (ret < 0) ++ goto cleanup_reasm; ++ ++ ret = ip6_conntrack_init(); ++ if (ret < 0) ++ goto cleanup_nothing; ++ ++ proc = proc_net_create("ip6_conntrack",0,list_conntracks); ++ if (!proc) goto cleanup_init; ++ proc->owner = THIS_MODULE; ++ ++ ret = nf_register_hook(&ip6_conntrack_in_ops); ++ if (ret < 0) { ++ printk("ip6_conntrack: can't register pre-routing hook.\n"); ++ goto cleanup_proc; ++ } ++ ret = nf_register_hook(&ip6_conntrack_local_out_ops); ++ if (ret < 0) { ++ printk("ip6_conntrack: can't register local out hook.\n"); ++ goto cleanup_inops; ++ } ++ ret = nf_register_hook(&ip6_conntrack_out_ops); ++ if (ret < 0) { ++ printk("ip6_conntrack: can't register post-routing hook.\n"); ++ goto cleanup_inandlocalops; ++ } ++ ret = nf_register_hook(&ip6_conntrack_local_in_ops); ++ if (ret < 0) { ++ printk("ip6_conntrack: can't register local in hook.\n"); ++ goto cleanup_inoutandlocalops; ++ } ++ ++ return ret; ++ ++ cleanup: ++ nf_unregister_hook(&ip6_conntrack_local_in_ops); ++ cleanup_inoutandlocalops: ++ nf_unregister_hook(&ip6_conntrack_out_ops); ++ cleanup_inandlocalops: ++ nf_unregister_hook(&ip6_conntrack_local_out_ops); ++ cleanup_inops: ++ nf_unregister_hook(&ip6_conntrack_in_ops); ++ cleanup_proc: ++ proc_net_remove("ip6_conntrack"); ++ cleanup_init: ++ ip6_conntrack_cleanup(); ++ cleanup_reasm: ++ ip6_ct_frags_cleanup(); ++ cleanup_nothing: ++ return ret; ++} ++ ++/* FIXME: Allow NULL functions and sub in pointers to generic for ++ them. --RR */ ++int ip6_conntrack_protocol_register(struct ip6_conntrack_protocol *proto) ++{ ++ int ret = 0; ++ struct list_head *i; ++ ++ WRITE_LOCK(&ip6_conntrack_lock); ++ for (i = ip6_protocol_list.next; i != &ip6_protocol_list; i = i->next) { ++ if (((struct ip6_conntrack_protocol *)i)->proto ++ == proto->proto) { ++ ret = -EBUSY; ++ goto out; ++ } ++ } ++ ++ list_prepend(&ip6_protocol_list, proto); ++ ++ out: ++ WRITE_UNLOCK(&ip6_conntrack_lock); ++ return ret; ++} ++ ++void ip6_conntrack_protocol_unregister(struct ip6_conntrack_protocol *proto) ++{ ++ WRITE_LOCK(&ip6_conntrack_lock); ++ ++ /* ip_ct_find_proto() returns proto_generic in case there is no protocol ++ * helper. So this should be enough - HW */ ++ LIST_DELETE(&ip6_protocol_list, proto); ++ WRITE_UNLOCK(&ip6_conntrack_lock); ++ ++ /* Somebody could be still looking at the proto in bh. */ ++ synchronize_net(); ++ ++ /* Remove all contrack entries for this protocol */ ++ ip6_ct_selective_cleanup(kill_proto, &proto->proto); ++} ++ ++static int __init init(void) ++{ ++ return init_or_cleanup(1); ++} ++ ++static void __exit fini(void) ++{ ++ init_or_cleanup(0); ++} ++ ++module_init(init); ++module_exit(fini); ++ ++/* Some modules need us, but don't depend directly on any symbol. ++ They should call this. */ ++void need_ip6_conntrack(void) ++{ ++} ++ ++EXPORT_SYMBOL(ip6_conntrack_protocol_register); ++EXPORT_SYMBOL(ip6_conntrack_protocol_unregister); ++EXPORT_SYMBOL(ip6_invert_tuplepr); ++EXPORT_SYMBOL(ip6_conntrack_alter_reply); ++EXPORT_SYMBOL(ip6_conntrack_destroyed); ++EXPORT_SYMBOL(ip6_conntrack_get); ++EXPORT_SYMBOL(need_ip6_conntrack); ++EXPORT_SYMBOL(ip6_conntrack_helper_register); ++EXPORT_SYMBOL(ip6_conntrack_helper_unregister); ++EXPORT_SYMBOL(ip6_ct_selective_cleanup); ++EXPORT_SYMBOL(ip6_ct_refresh); ++EXPORT_SYMBOL(ip6_ct_find_proto); ++EXPORT_SYMBOL(__ip6_ct_find_proto); ++EXPORT_SYMBOL(ip6_ct_find_helper); ++EXPORT_SYMBOL(ip6_conntrack_expect_related); ++EXPORT_SYMBOL(ip6_conntrack_unexpect_related); ++EXPORT_SYMBOL_GPL(ip6_conntrack_expect_find_get); ++EXPORT_SYMBOL_GPL(ip6_conntrack_expect_put); ++EXPORT_SYMBOL(ip6_conntrack_tuple_taken); ++EXPORT_SYMBOL(ip6_conntrack_htable_size); ++EXPORT_SYMBOL(ip6_conntrack_expect_list); ++EXPORT_SYMBOL(ip6_conntrack_lock); ++EXPORT_SYMBOL_GPL(ip6_conntrack_find_get); ++EXPORT_SYMBOL_GPL(ip6_conntrack_put); +diff -urN linux-2.6.11/net/ipv6/netfilter/ip6t_REJECT.c x1/net/ipv6/netfilter/ip6t_REJECT.c +--- linux-2.6.11/net/ipv6/netfilter/ip6t_REJECT.c 1970-01-01 01:00:00.000000000 +0100 ++++ x1/net/ipv6/netfilter/ip6t_REJECT.c 2004-11-25 15:47:19.000000000 +0100 +@@ -0,0 +1,453 @@ ++/* ++ * IP6 tables REJECT target module ++ * Linux INET6 implementation ++ * ++ * Copyright (C)2003 USAGI/WIDE Project ++ * ++ * Authors: ++ * Yasuyuki Kozakai ++ * ++ * Based on net/ipv4/netfilter/ipt_REJECT.c ++ * ++ * This program 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 ++ * 2 of the License, or (at your option) any later version. ++ */ ++ ++/* This module works well with IPv6 Connection Tracking. - kozakai */ ++ ++#include ++#include ++#include ++#include ++#include ++#include ++#include ++#include ++#include ++#include ++#include ++#include ++ ++MODULE_AUTHOR("Yasuyuki KOZAKAI "); ++MODULE_DESCRIPTION("IP6 tables REJECT target module"); ++MODULE_LICENSE("GPL"); ++ ++#if 0 ++#define DEBUGP printk ++#else ++#define DEBUGP(format, args...) ++#endif ++ ++static void connection_attach(struct sk_buff *new_skb, struct sk_buff *skb) ++{ ++ void (*attach)(struct sk_buff *, struct sk_buff *); ++ if (skb->nfct && (attach = ip6_ct_attach) != NULL) { ++ mb(); ++ attach(new_skb, skb); ++ } ++} ++ ++static int maybe_reroute(struct sk_buff *skb) ++{ ++ if (skb->nfcache & NFC_ALTERED){ ++ if (ip6_route_me_harder(skb) != 0){ ++ kfree_skb(skb); ++ return -EINVAL; ++ } ++ } ++ ++ return dst_output(skb); ++} ++ ++/* Send RST reply */ ++static void send_reset(struct sk_buff *oldskb) ++{ ++ struct sk_buff *nskb; ++ struct tcphdr otcph, *tcph; ++ unsigned int otcplen, tcphoff, hh_len; ++ int needs_ack; ++ struct ipv6hdr *oip6h = oldskb->nh.ipv6h, *ip6h; ++ struct dst_entry *dst = NULL; ++ u8 proto = oip6h->nexthdr; ++ struct flowi fl; ++ int err; ++ ++ if ((!(ipv6_addr_type(&oip6h->saddr) & IPV6_ADDR_UNICAST)) || ++ (!(ipv6_addr_type(&oip6h->daddr) & IPV6_ADDR_UNICAST))) { ++ DEBUGP("ip6t_REJECT: addr is not unicast.\n"); ++ return; ++ } ++ ++ tcphoff = ipv6_skip_exthdr(oldskb, ((u8*)(oip6h+1) - oldskb->data), ++ &proto, oldskb->len - ((u8*)(oip6h+1) ++ - oldskb->data)); ++ ++ if ((tcphoff < 0) || (tcphoff > oldskb->len)) { ++ DEBUGP("ip6t_REJECT: Can't get TCP header.\n"); ++ return; ++ } ++ ++ otcplen = oldskb->len - tcphoff; ++ ++ /* IP header checks: fragment, too short. */ ++ if ((proto != IPPROTO_TCP) || (otcplen < sizeof(struct tcphdr))) { ++ DEBUGP("ip6t_REJECT: proto(%d) != IPPROTO_TCP, or too short. otcplen = %d\n", ++ proto, otcplen); ++ return; ++ } ++ ++ if (skb_copy_bits(oldskb, tcphoff, &otcph, sizeof(struct tcphdr))) { ++ if (net_ratelimit()) ++ printk("ip6t_REJECT: Can't copy tcp header\n"); ++ return; ++ } ++ ++ /* No RST for RST. */ ++ if (otcph.rst) { ++ DEBUGP("ip6t_REJECT: RST is set\n"); ++ return; ++ } ++ ++ /* Check checksum. */ ++ if (csum_ipv6_magic(&oip6h->saddr, &oip6h->daddr, otcplen, IPPROTO_TCP, ++ skb_checksum(oldskb, tcphoff, otcplen, 0))) { ++ DEBUGP("ip6t_REJECT: TCP checksum is invalid\n"); ++ return; ++ } ++ ++ memset(&fl, 0, sizeof(fl)); ++ fl.proto = IPPROTO_TCP; ++ ipv6_addr_copy(&fl.fl6_src, &oip6h->daddr); ++ ipv6_addr_copy(&fl.fl6_dst, &oip6h->saddr); ++ fl.fl_ip_sport = otcph.dest; ++ fl.fl_ip_dport = otcph.source; ++ err = ip6_dst_lookup(NULL, &dst, &fl); ++ if (err) { ++ if (net_ratelimit()) ++ printk("ip6t_REJECT: can't find dst. err = %d\n", err); ++ return; ++ } ++ ++ hh_len = (dst->dev->hard_header_len + 15)&~15; ++ nskb = alloc_skb(hh_len + 15 + dst->header_len + sizeof(struct ipv6hdr) ++ + sizeof(struct tcphdr) + dst->trailer_len, ++ GFP_ATOMIC); ++ ++ if (!nskb) { ++ if (net_ratelimit()) ++ printk("ip6t_REJECT: Can't alloc skb\n"); ++ dst_release(dst); ++ return; ++ } ++ ++ nskb->dst = dst; ++ dst_hold(dst); ++ ++ skb_reserve(nskb, hh_len + dst->header_len); ++ ++ ip6h = nskb->nh.ipv6h = (struct ipv6hdr *) ++ skb_put(nskb, sizeof(struct ipv6hdr)); ++ ip6h->version = 6; ++ ip6h->hop_limit = dst_metric(dst, RTAX_HOPLIMIT); ++ ip6h->nexthdr = IPPROTO_TCP; ++ ip6h->payload_len = htons(sizeof(struct tcphdr)); ++ ipv6_addr_copy(&ip6h->saddr, &oip6h->daddr); ++ ipv6_addr_copy(&ip6h->daddr, &oip6h->saddr); ++ ++ tcph = (struct tcphdr *)skb_put(nskb, sizeof(struct tcphdr)); ++ /* Truncate to length (no data) */ ++ tcph->doff = sizeof(struct tcphdr)/4; ++ tcph->source = otcph.dest; ++ tcph->dest = otcph.source; ++ ++ if (otcph.ack) { ++ needs_ack = 0; ++ tcph->seq = otcph.ack_seq; ++ tcph->ack_seq = 0; ++ } else { ++ needs_ack = 1; ++ tcph->ack_seq = htonl(ntohl(otcph.seq) + otcph.syn + otcph.fin ++ + otcplen - (otcph.doff<<2)); ++ tcph->seq = 0; ++ } ++ ++ /* Reset flags */ ++ ((u_int8_t *)tcph)[13] = 0; ++ tcph->rst = 1; ++ tcph->ack = needs_ack; ++ tcph->window = 0; ++ tcph->urg_ptr = 0; ++ tcph->check = 0; ++ ++ /* Adjust TCP checksum */ ++ tcph->check = csum_ipv6_magic(&nskb->nh.ipv6h->saddr, ++ &nskb->nh.ipv6h->daddr, ++ sizeof(struct tcphdr), IPPROTO_TCP, ++ csum_partial((char *)tcph, ++ sizeof(struct tcphdr), 0)); ++ ++ connection_attach(nskb, oldskb); ++ ++ NF_HOOK(PF_INET6, NF_IP6_LOCAL_OUT, nskb, NULL, nskb->dst->dev, ++ maybe_reroute); ++ ++ dst_release(dst); ++} ++ ++static void send_unreach(struct sk_buff *skb_in, unsigned char code) ++{ ++ struct ipv6hdr *ip6h, *hdr = skb_in->nh.ipv6h; ++ struct icmp6hdr *icmp6h; ++ struct dst_entry *dst = NULL; ++ struct rt6_info *rt; ++ int tmo; ++ __u32 csum; ++ unsigned int len, datalen, hh_len; ++ int saddr_type, daddr_type; ++ unsigned int ptr, ip6off; ++ u8 proto; ++ struct flowi fl; ++ struct sk_buff *nskb; ++ char *data; ++ ++ saddr_type = ipv6_addr_type(&hdr->saddr); ++ daddr_type = ipv6_addr_type(&hdr->daddr); ++ ++ if ((!(saddr_type & IPV6_ADDR_UNICAST)) || ++ (!(daddr_type & IPV6_ADDR_UNICAST))) { ++ DEBUGP("ip6t_REJECT: addr is not unicast.\n"); ++ return; ++ } ++ ++ ip6off = skb_in->nh.raw - skb_in->data; ++ proto = hdr->nexthdr; ++ ptr = ipv6_skip_exthdr(skb_in, ip6off + sizeof(struct ipv6hdr), &proto, ++ skb_in->len - ip6off); ++ ++ if ((ptr < 0) || (ptr > skb_in->len)) { ++ ptr = ip6off + sizeof(struct ipv6hdr); ++ proto = hdr->nexthdr; ++ } else if (proto == IPPROTO_ICMPV6) { ++ u8 type; ++ ++ if (skb_copy_bits(skb_in, ptr + offsetof(struct icmp6hdr, ++ icmp6_type), &type, 1)) { ++ DEBUGP("ip6t_REJECT: Can't get ICMPv6 type\n"); ++ return; ++ } ++ ++ if (!(type & ICMPV6_INFOMSG_MASK)) { ++ DEBUGP("ip6t_REJECT: no reply to icmp error\n"); ++ return; ++ } ++ } else if (proto == IPPROTO_UDP) { ++ int plen = skb_in->len - (ptr - ip6off); ++ uint16_t check; ++ ++ if (plen < sizeof(struct udphdr)) { ++ DEBUGP("ip6t_REJECT: too short\n"); ++ return; ++ } ++ ++ if (skb_copy_bits(skb_in, ptr + offsetof(struct udphdr, check), ++ &check, 2)) { ++ if (net_ratelimit()) ++ printk("ip6t_REJECT: can't get copy from skb"); ++ return; ++ } ++ ++ if (check && ++ csum_ipv6_magic(&hdr->saddr, &hdr->daddr, plen, ++ IPPROTO_UDP, ++ skb_checksum(skb_in, ptr, plen, 0))) { ++ DEBUGP("ip6t_REJECT: UDP checksum is invalid.\n"); ++ return; ++ } ++ } ++ ++ memset(&fl, 0, sizeof(fl)); ++ fl.proto = IPPROTO_ICMPV6; ++ ipv6_addr_copy(&fl.fl6_src, &hdr->daddr); ++ ipv6_addr_copy(&fl.fl6_dst, &hdr->saddr); ++ fl.fl_icmp_type = ICMPV6_DEST_UNREACH; ++ fl.fl_icmp_code = code; ++ ++ if (ip6_dst_lookup(NULL, &dst, &fl)) { ++ return; ++ } ++ ++ rt = (struct rt6_info *)dst; ++ tmo = 1*HZ; ++ ++ if (rt->rt6i_dst.plen < 128) ++ tmo >>= ((128 - rt->rt6i_dst.plen)>>5); ++ ++ if (!xrlim_allow(dst, tmo)) { ++ if (net_ratelimit()) ++ printk("ip6t_REJECT: rate limitted\n"); ++ goto dst_release_out; ++ } ++ ++ len = skb_in->len + sizeof(struct ipv6hdr) + sizeof(struct icmp6hdr); ++ ++ if (len > dst_pmtu(dst)) ++ len = dst_pmtu(dst); ++ if (len > IPV6_MIN_MTU) ++ len = IPV6_MIN_MTU; ++ ++ datalen = len - sizeof(struct ipv6hdr) - sizeof(struct icmp6hdr); ++ hh_len = (rt->u.dst.dev->hard_header_len + 15)&~15; ++ ++ nskb = alloc_skb(hh_len + 15 + dst->header_len + dst->trailer_len + len, ++ GFP_ATOMIC); ++ ++ if (!nskb) { ++ if (net_ratelimit()) ++ printk("ip6t_REJECT: can't alloc skb\n"); ++ goto dst_release_out; ++ } ++ ++ nskb->priority = 0; ++ nskb->dst = dst; ++ dst_hold(dst); ++ ++ skb_reserve(nskb, hh_len + dst->header_len); ++ ++ ip6h = nskb->nh.ipv6h = (struct ipv6hdr *) ++ skb_put(nskb, sizeof(struct ipv6hdr)); ++ ip6h->version = 6; ++ ip6h->hop_limit = dst_metric(dst, RTAX_HOPLIMIT); ++ ip6h->nexthdr = IPPROTO_ICMPV6; ++ ip6h->payload_len = htons(datalen + sizeof(struct icmp6hdr)); ++ ipv6_addr_copy(&ip6h->saddr, &hdr->daddr); ++ ipv6_addr_copy(&ip6h->daddr, &hdr->saddr); ++ ++ icmp6h = (struct icmp6hdr *) skb_put(nskb, sizeof(struct icmp6hdr)); ++ icmp6h->icmp6_type = ICMPV6_DEST_UNREACH; ++ icmp6h->icmp6_code = code; ++ icmp6h->icmp6_cksum = 0; ++ ++ data = skb_put(nskb, datalen); ++ ++ csum = csum_partial((unsigned char *)icmp6h, sizeof(struct icmp6hdr), 0); ++ csum = skb_copy_and_csum_bits(skb_in, ip6off, data, datalen, csum); ++ icmp6h->icmp6_cksum = csum_ipv6_magic(&hdr->saddr, &hdr->daddr, ++ datalen + sizeof(struct icmp6hdr), ++ IPPROTO_ICMPV6, csum); ++ ++ connection_attach(nskb, skb_in); ++ NF_HOOK(PF_INET6, NF_IP6_LOCAL_OUT, nskb, NULL, nskb->dst->dev, ++ maybe_reroute); ++ ++dst_release_out: ++ dst_release(dst); ++} ++ ++static unsigned int reject6_target(struct sk_buff **pskb, ++ const struct net_device *in, ++ const struct net_device *out, ++ unsigned int hooknum, ++ const void *targinfo, ++ void *userinfo) ++{ ++ const struct ip6t_reject_info *reject = targinfo; ++ ++ DEBUGP(KERN_DEBUG "%s: medium point\n", __FUNCTION__); ++ /* WARNING: This code causes reentry within ip6tables. ++ This means that the ip6tables jump stack is now crap. We ++ must return an absolute verdict. --RR */ ++ switch (reject->with) { ++ case IP6T_ICMP6_NO_ROUTE: ++ send_unreach(*pskb, ICMPV6_NOROUTE); ++ break; ++ case IP6T_ICMP6_ADM_PROHIBITED: ++ send_unreach(*pskb, ICMPV6_ADM_PROHIBITED); ++ break; ++ case IP6T_ICMP6_NOT_NEIGHBOUR: ++ send_unreach(*pskb, ICMPV6_NOT_NEIGHBOUR); ++ break; ++ case IP6T_ICMP6_ADDR_UNREACH: ++ send_unreach(*pskb, ICMPV6_ADDR_UNREACH); ++ break; ++ case IP6T_ICMP6_PORT_UNREACH: ++ send_unreach(*pskb, ICMPV6_PORT_UNREACH); ++ break; ++ case IP6T_ICMP6_ECHOREPLY: ++ /* Do nothing */ ++ break; ++ case IP6T_TCP_RESET: ++ send_reset(*pskb); ++ break; ++ default: ++ if (net_ratelimit()) ++ printk(KERN_WARNING "ip6t_REJECT: case %u not handled yet\n", reject->with); ++ break; ++ } ++ ++ return NF_DROP; ++} ++ ++static int check(const char *tablename, ++ const struct ip6t_entry *e, ++ void *targinfo, ++ unsigned int targinfosize, ++ unsigned int hook_mask) ++{ ++ const struct ip6t_reject_info *rejinfo = targinfo; ++ ++ if (targinfosize != IP6T_ALIGN(sizeof(struct ip6t_reject_info))) { ++ DEBUGP("ip6t_REJECT: targinfosize %u != 0\n", targinfosize); ++ return 0; ++ } ++ ++ /* Only allow these for packet filtering. */ ++ if (strcmp(tablename, "filter") != 0) { ++ DEBUGP("ip6t_REJECT: bad table `%s'.\n", tablename); ++ return 0; ++ } ++ ++ if ((hook_mask & ~((1 << NF_IP6_LOCAL_IN) ++ | (1 << NF_IP6_FORWARD) ++ | (1 << NF_IP6_LOCAL_OUT))) != 0) { ++ DEBUGP("ip6t_REJECT: bad hook mask %X\n", hook_mask); ++ return 0; ++ } ++ ++ if (rejinfo->with == IP6T_ICMP6_ECHOREPLY) { ++ printk("ip6t_REJECT: ECHOREPLY is not supported.\n"); ++ return 0; ++ } else if (rejinfo->with == IP6T_TCP_RESET) { ++ /* Must specify that it's a TCP packet */ ++ if (e->ipv6.proto != IPPROTO_TCP ++ || (e->ipv6.invflags & IP6T_INV_PROTO)) { ++ DEBUGP("ip6t_REJECT: TCP_RESET illegal for non-tcp\n"); ++ return 0; ++ } ++ } ++ ++ return 1; ++} ++ ++static struct ip6t_target ip6t_reject_reg = { ++ .name = "REJECT", ++ .target = reject6_target, ++ .checkentry = check, ++ .me = THIS_MODULE ++}; ++ ++static int __init init(void) ++{ ++ if (ip6t_register_target(&ip6t_reject_reg)) ++ return -EINVAL; ++ return 0; ++} ++ ++static void __exit fini(void) ++{ ++ ip6t_unregister_target(&ip6t_reject_reg); ++} ++ ++module_init(init); ++module_exit(fini); +diff -urN linux-2.6.11/net/ipv6/netfilter/ip6t_state.c x1/net/ipv6/netfilter/ip6t_state.c +--- linux-2.6.11/net/ipv6/netfilter/ip6t_state.c 1970-01-01 01:00:00.000000000 +0100 ++++ x1/net/ipv6/netfilter/ip6t_state.c 2004-11-25 15:47:19.000000000 +0100 +@@ -0,0 +1,79 @@ ++/* ++ * Matching connection tracking information ++ * Linux INET6 implementation ++ * ++ * Copyright (C)2003 USAGI/WIDE Project ++ * ++ * Authors: ++ * Yasuyuki Kozakai ++ * ++ * Based on: net/ipv4/netfilter/ip6t_state.c ++ * ++ * This program 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 ++ * 2 of the License, or (at your option) any later version. ++ */ ++/* Kernel module to match connection tracking information. ++ * GPL (C) 1999 Rusty Russell (rusty@rustcorp.com.au). ++ */ ++#include ++#include ++#include ++#include ++#include ++ ++static int ++match(const struct sk_buff *skb, ++ const struct net_device *in, ++ const struct net_device *out, ++ const void *matchinfo, ++ int offset, ++ unsigned int protoff, ++ int *hotdrop) ++{ ++ const struct ip6t_state_info *sinfo = matchinfo; ++ enum ip6_conntrack_info ctinfo; ++ unsigned int statebit; ++ ++ if (!ip6_conntrack_get(skb, &ctinfo)) ++ statebit = IP6T_STATE_INVALID; ++ else ++ statebit = IP6T_STATE_BIT(ctinfo); ++ ++ return (sinfo->statemask & statebit); ++} ++ ++static int check(const char *tablename, ++ const struct ip6t_ip6 *ip, ++ void *matchinfo, ++ unsigned int matchsize, ++ unsigned int hook_mask) ++{ ++ if (matchsize != IP6T_ALIGN(sizeof(struct ip6t_state_info))) ++ return 0; ++ ++ return 1; ++} ++ ++static struct ip6t_match state_match = { ++ .name = "state", ++ .match = &match, ++ .checkentry = &check, ++ .me = THIS_MODULE, ++}; ++ ++static int __init init(void) ++{ ++ need_ip6_conntrack(); ++ return ip6t_register_match(&state_match); ++} ++ ++static void __exit fini(void) ++{ ++ ip6t_unregister_match(&state_match); ++} ++ ++module_init(init); ++module_exit(fini); ++MODULE_LICENSE("GPL"); +diff -urN linux-2.6.11/net/ipv6/proc.c x1/net/ipv6/proc.c +--- linux-2.6.11/net/ipv6/proc.c 2005-03-02 08:38:07.000000000 +0100 ++++ x1/net/ipv6/proc.c 2005-03-02 17:30:59.000000000 +0100 +@@ -164,7 +164,13 @@ + + if (idev) { + seq_printf(seq, "%-32s\t%u\n", "ifIndex", idev->dev->ifindex); ++#ifdef CONFIG_IPV6_STATISTICS ++ snmp6_seq_show_item(seq, (void **)idev->stats.ipv6_statistics, snmp6_ipstats_list); ++#endif + snmp6_seq_show_item(seq, (void **)idev->stats.icmpv6, snmp6_icmp6_list); ++#if 0 ++ snmp6_seq_show_item(seq, (void **)idev->stats.udp_stats_in6, snmp6_udp6_list); ++#endif + } else { + snmp6_seq_show_item(seq, (void **)ipv6_statistics, snmp6_ipstats_list); + snmp6_seq_show_item(seq, (void **)icmpv6_statistics, snmp6_icmp6_list); +@@ -284,19 +290,45 @@ + if (!idev || !idev->dev) + return -EINVAL; + ++#ifdef CONFIG_IPV6_STATISTICS ++ if (snmp6_mib_init((void **)idev->stats.ipv6_statistics, sizeof(struct ipstats_mib), ++ __alignof__(struct ipstats_mib)) < 0) ++ goto err_ip; ++#endif ++ + if (snmp6_mib_init((void **)idev->stats.icmpv6, sizeof(struct icmpv6_mib), + __alignof__(struct icmpv6_mib)) < 0) + goto err_icmp; + ++#if 0 ++ if (snmp6_mib_init((void **)idev->stats.udp_stats_in6, sizeof(struct udp_mib), ++ __alignof__(struct udp_mib)) < 0) ++ goto err_udp; ++#endif ++ + return 0; + ++#if 0 ++err_udp: ++ snmp6_mib_free((void **)idev->stats.icmpv6); ++#endif + err_icmp: ++#ifdef CONFIG_IPV6_STATISTICS ++ snmp6_mib_free((void **)idev->stats.ipv6_statistics); ++err_ip: ++#endif + return err; + } + + int snmp6_free_dev(struct inet6_dev *idev) + { ++#ifdef CONFIG_IPV6_STATISTICS ++ snmp6_mib_free((void **)idev->stats.ipv6_statistics); ++#endif + snmp6_mib_free((void **)idev->stats.icmpv6); ++#if 0 ++ snmp6_mib_free((void **)idev->stats.udp_stats_in6); ++#endif + return 0; + } + +diff -urN linux-2.6.11/net/ipv6/raw.c x1/net/ipv6/raw.c +--- linux-2.6.11/net/ipv6/raw.c 2005-03-02 08:38:07.000000000 +0100 ++++ x1/net/ipv6/raw.c 2005-02-09 16:31:39.000000000 +0100 +@@ -13,6 +13,10 @@ + * Hideaki YOSHIFUJI : sin6_scope_id support + * YOSHIFUJI,H.@USAGI : raw checksum (RFC2292(bis) compliance) + * Kazunori MIYAZAWA @USAGI: change process style to use ip6_append_data ++ * Hoerdt Mickael : Added Ipv6 multicast routing support. ++ * ++ * Changes: ++ * Kazunori MIYAZAWA @USAGI: change datagram transmit routine to ip6_append_data + * + * This program is free software; you can redistribute it and/or + * modify it under the terms of the GNU General Public License +@@ -55,6 +59,10 @@ + #include + #include + ++#ifdef CONFIG_IPV6_MROUTE ++#include ++#endif ++ + struct hlist_head raw_v6_htable[RAWV6_HTABLE_SIZE]; + DEFINE_RWLOCK(raw_v6_lock); + +@@ -162,7 +170,19 @@ + sk = __raw_v6_lookup(sk, nexthdr, daddr, saddr); + + while (sk) { +- if (nexthdr != IPPROTO_ICMPV6 || !icmpv6_filter(sk, skb)) { ++ int filtered; ++ ++ switch (nexthdr) { ++ case IPPROTO_ICMPV6: ++ filtered = icmpv6_filter(sk, skb); ++ break; ++ default: ++ filtered = 0; ++ } ++ ++ if (filtered < 0) ++ break; ++ if (filtered == 0) { + struct sk_buff *clone = skb_clone(skb, GFP_ATOMIC); + + /* Not releasing hash table! */ +@@ -199,6 +219,10 @@ + if (sk->sk_state != TCP_CLOSE) + goto out; + ++ if (addr->sin6_port && ++ ntohs(addr->sin6_port) != inet->num) ++ goto out; ++ + /* Check if the address belongs to the host. */ + if (addr_type != IPV6_ADDR_ANY) { + struct net_device *dev = NULL; +@@ -407,8 +431,11 @@ + + /* Copy the address. */ + if (sin6) { ++ struct inet_sock *inet = inet_sk(sk); ++ + sin6->sin6_family = AF_INET6; + ipv6_addr_copy(&sin6->sin6_addr, &skb->nh.ipv6h->saddr); ++ sin6->sin6_port = htons(inet->num); + sin6->sin6_flowinfo = 0; + sin6->sin6_scope_id = 0; + if (ipv6_addr_type(&sin6->sin6_addr) & IPV6_ADDR_LINKLOCAL) +@@ -509,6 +536,9 @@ + struct inet_sock *inet = inet_sk(sk); + struct ipv6hdr *iph; + struct sk_buff *skb; ++#ifdef CONFIG_IPV6_STATISTICS ++ struct inet6_dev *idev = NULL; ++#endif + unsigned int hh_len; + int err; + +@@ -539,7 +569,12 @@ + if (err) + goto error_fault; + ++#ifdef CONFIG_IPV6_STATISTICS ++ idev = rt->rt6i_idev; ++ IP6_INC_STATS(idev, IPSTATS_MIB_OUTREQUESTS); ++#else + IP6_INC_STATS(IPSTATS_MIB_OUTREQUESTS); ++#endif + err = NF_HOOK(PF_INET6, NF_IP6_LOCAL_OUT, skb, NULL, rt->u.dst.dev, + dst_output); + if (err > 0) +@@ -553,7 +588,11 @@ + err = -EFAULT; + kfree_skb(skb); + error: ++#ifdef CONFIG_IPV6_STATISTICS ++ IP6_INC_STATS(idev, IPSTATS_MIB_OUTDISCARDS); ++#else + IP6_INC_STATS(IPSTATS_MIB_OUTDISCARDS); ++#endif + return err; + } + +@@ -756,6 +795,8 @@ + hlimit = np->hop_limit; + if (hlimit < 0) + hlimit = dst_metric(dst, RTAX_HOPLIMIT); ++ if (hlimit < 0) ++ hlimit = ipv6_get_hoplimit(dst->dev); + } + + if (msg->msg_flags&MSG_CONFIRM) +@@ -952,7 +993,11 @@ + } + + default: ++#ifdef CONFIG_IPV6_MROUTE ++ return ip6mr_ioctl(sk,cmd,(void __user *)arg); ++#else + return -ENOIOCTLCMD; ++#endif + } + } + +@@ -960,7 +1005,12 @@ + { + if (inet_sk(sk)->num == IPPROTO_RAW) + ip6_ra_control(sk, -1, NULL); +- ++#ifdef CONFIG_IPV6_MROUTE ++ if (sk == mroute6_socket) { ++ printk(KERN_DEBUG "closing mroute6 socket.\n"); ++ ip6_ra_control(sk, -1, NULL); ++ } ++#endif + sk_common_release(sk); + } + +diff -urN linux-2.6.11/net/ipv6/reassembly.c x1/net/ipv6/reassembly.c +--- linux-2.6.11/net/ipv6/reassembly.c 2005-03-02 08:37:53.000000000 +0100 ++++ x1/net/ipv6/reassembly.c 2005-02-13 19:37:11.000000000 +0100 +@@ -53,6 +53,9 @@ + #include + #include + #include ++#ifdef CONFIG_IPV6_STATISTICS ++#include ++#endif + + int sysctl_ip6frag_high_thresh = 256*1024; + int sysctl_ip6frag_low_thresh = 192*1024; +@@ -264,7 +267,7 @@ + } + } + +-static void ip6_evictor(void) ++static void ip6_evictor(struct inet6_dev *idev) + { + struct frag_queue *fq; + struct list_head *tmp; +@@ -291,14 +294,21 @@ + spin_unlock(&fq->lock); + + fq_put(fq, &work); ++#ifdef CONFIG_IPV6_STATISTICS ++ IP6_INC_STATS_BH(idev, IPSTATS_MIB_REASMFAILS); ++#else + IP6_INC_STATS_BH(IPSTATS_MIB_REASMFAILS); ++#endif + } + } + + static void ip6_frag_expire(unsigned long data) + { + struct frag_queue *fq = (struct frag_queue *) data; +- ++ struct net_device *dev = NULL; ++#ifdef CONFIG_IPV6_STATISTICS ++ struct inet6_dev *idev = NULL; ++#endif + spin_lock(&fq->lock); + + if (fq->last_in & COMPLETE) +@@ -306,13 +316,19 @@ + + fq_kill(fq); + ++#ifdef CONFIG_IPV6_STATISTICS ++ dev = dev_get_by_index(fq->iif); ++ idev = dev ? in6_dev_get(dev) : NULL; ++ ++ IP6_INC_STATS_BH(idev, IPSTATS_MIB_REASMTIMEOUT); ++ IP6_INC_STATS_BH(idev, IPSTATS_MIB_REASMFAILS); ++#else + IP6_INC_STATS_BH(IPSTATS_MIB_REASMTIMEOUT); + IP6_INC_STATS_BH(IPSTATS_MIB_REASMFAILS); ++#endif + + /* Send error only if the first segment arrived. */ + if (fq->last_in&FIRST_IN && fq->fragments) { +- struct net_device *dev = dev_get_by_index(fq->iif); +- + /* + But use as source device on which LAST ARRIVED + segment was received. And do not use fq->dev +@@ -322,9 +338,14 @@ + fq->fragments->dev = dev; + icmpv6_send(fq->fragments, ICMPV6_TIME_EXCEED, ICMPV6_EXC_FRAGTIME, 0, + dev); +- dev_put(dev); + } + } ++#ifdef CONFIG_IPV6_STATISTICS ++ if (idev) ++ in6_dev_put(idev); ++ if (dev) ++ dev_put(dev); ++#endif + out: + spin_unlock(&fq->lock); + fq_put(fq, NULL); +@@ -371,7 +392,11 @@ + + + static struct frag_queue * ++#ifdef CONFIG_IPV6_STATISTICS ++ip6_frag_create(unsigned int hash, u32 id, struct in6_addr *src, struct in6_addr *dst, struct inet6_dev *idev) ++#else + ip6_frag_create(unsigned int hash, u32 id, struct in6_addr *src, struct in6_addr *dst) ++#endif + { + struct frag_queue *fq; + +@@ -393,12 +418,20 @@ + return ip6_frag_intern(hash, fq); + + oom: ++#ifdef CONFIG_IPV6_STATISTICS ++ IP6_INC_STATS_BH(idev, IPSTATS_MIB_REASMFAILS); ++#else + IP6_INC_STATS_BH(IPSTATS_MIB_REASMFAILS); ++#endif + return NULL; + } + + static __inline__ struct frag_queue * ++#ifdef CONFIG_IPV6_STATISTICS ++fq_find(u32 id, struct in6_addr *src, struct in6_addr *dst, struct inet6_dev *idev) ++#else + fq_find(u32 id, struct in6_addr *src, struct in6_addr *dst) ++#endif + { + struct frag_queue *fq; + unsigned int hash = ip6qhashfn(id, src, dst); +@@ -415,7 +448,11 @@ + } + read_unlock(&ip6_frag_lock); + ++#ifdef CONFIG_IPV6_STATISTICS ++ return ip6_frag_create(hash, id, src, dst, idev); ++#else + return ip6_frag_create(hash, id, src, dst); ++#endif + } + + +@@ -423,6 +460,11 @@ + struct frag_hdr *fhdr, int nhoff) + { + struct sk_buff *prev, *next; ++#ifdef CONFIG_IPV6_STATISTICS ++ struct dst_entry *dst = skb->dst; ++ struct inet6_dev *idev = ((struct rt6_info *)dst)->rt6i_idev; ++#endif ++ + int offset, end; + + if (fq->last_in & COMPLETE) +@@ -433,7 +475,11 @@ + ((u8 *) (fhdr + 1) - (u8 *) (skb->nh.ipv6h + 1))); + + if ((unsigned int)end > IPV6_MAXPLEN) { ++#ifdef CONFIG_IPV6_STATISTICS ++ IP6_INC_STATS_BH(idev, IPSTATS_MIB_INHDRERRORS); ++#else + IP6_INC_STATS_BH(IPSTATS_MIB_INHDRERRORS); ++#endif + icmpv6_param_prob(skb,ICMPV6_HDR_FIELD, (u8*)&fhdr->frag_off - skb->nh.raw); + return; + } +@@ -460,7 +506,11 @@ + /* RFC2460 says always send parameter problem in + * this case. -DaveM + */ ++#ifdef CONFIG_IPV6_STATISTICS ++ IP6_INC_STATS_BH(idev, IPSTATS_MIB_INHDRERRORS); ++#else + IP6_INC_STATS_BH(IPSTATS_MIB_INHDRERRORS); ++#endif + icmpv6_param_prob(skb, ICMPV6_HDR_FIELD, + offsetof(struct ipv6hdr, payload_len)); + return; +@@ -579,7 +629,11 @@ + return; + + err: ++#ifdef CONFIG_IPV6_STATISTICS ++ IP6_INC_STATS(idev, IPSTATS_MIB_REASMFAILS); ++#else + IP6_INC_STATS(IPSTATS_MIB_REASMFAILS); ++#endif + kfree_skb(skb); + } + +@@ -597,6 +651,11 @@ + struct net_device *dev) + { + struct sk_buff *fp, *head = fq->fragments; ++#ifdef CONFIG_IPV6_STATISTICS ++ struct sk_buff *skb = *skb_in; ++ struct dst_entry *dst = skb->dst; ++ struct inet6_dev *idev = ((struct rt6_info *)dst)->rt6i_idev; ++#endif + int payload_len; + unsigned int nhoff; + +@@ -673,7 +732,11 @@ + if (head->ip_summed == CHECKSUM_HW) + head->csum = csum_partial(head->nh.raw, head->h.raw-head->nh.raw, head->csum); + ++#ifdef CONFIG_IPV6_STATISTICS ++ IP6_INC_STATS_BH(idev, IPSTATS_MIB_REASMOKS); ++#else + IP6_INC_STATS_BH(IPSTATS_MIB_REASMOKS); ++#endif + fq->fragments = NULL; + *nhoffp = nhoff; + return 1; +@@ -686,7 +749,11 @@ + if (net_ratelimit()) + printk(KERN_DEBUG "ip6_frag_reasm: no memory for reassembly\n"); + out_fail: ++#ifdef CONFIG_IPV6_STATISTICS ++ IP6_INC_STATS_BH(idev, IPSTATS_MIB_REASMFAILS); ++#else + IP6_INC_STATS_BH(IPSTATS_MIB_REASMFAILS); ++#endif + return -1; + } + +@@ -697,19 +764,35 @@ + struct frag_hdr *fhdr; + struct frag_queue *fq; + struct ipv6hdr *hdr; ++#ifdef CONFIG_IPV6_STATISTICS ++ struct dst_entry *dst = skb->dst; ++ struct inet6_dev *idev = ((struct rt6_info *)dst)->rt6i_idev; ++#endif + + hdr = skb->nh.ipv6h; + ++#ifdef CONFIG_IPV6_STATISTICS ++ IP6_INC_STATS_BH(idev, IPSTATS_MIB_REASMREQDS); ++#else + IP6_INC_STATS_BH(IPSTATS_MIB_REASMREQDS); ++#endif + + /* Jumbo payload inhibits frag. header */ + if (hdr->payload_len==0) { ++#ifdef CONFIG_IPV6_STATISTICS ++ IP6_INC_STATS(idev, IPSTATS_MIB_INHDRERRORS); ++#else + IP6_INC_STATS(IPSTATS_MIB_INHDRERRORS); ++#endif + icmpv6_param_prob(skb, ICMPV6_HDR_FIELD, skb->h.raw-skb->nh.raw); + return -1; + } + if (!pskb_may_pull(skb, (skb->h.raw-skb->data)+sizeof(struct frag_hdr))) { ++#ifdef CONFIG_IPV6_STATISTICS ++ IP6_INC_STATS(idev, IPSTATS_MIB_INHDRERRORS); ++#else + IP6_INC_STATS(IPSTATS_MIB_INHDRERRORS); ++#endif + icmpv6_param_prob(skb, ICMPV6_HDR_FIELD, skb->h.raw-skb->nh.raw); + return -1; + } +@@ -720,16 +803,29 @@ + if (!(fhdr->frag_off & htons(0xFFF9))) { + /* It is not a fragmented frame */ + skb->h.raw += sizeof(struct frag_hdr); ++#ifdef CONFIG_IPV6_STATISTICS ++ IP6_INC_STATS_BH(idev, IPSTATS_MIB_REASMOKS); ++#else + IP6_INC_STATS_BH(IPSTATS_MIB_REASMOKS); ++#endif + + *nhoffp = (u8*)fhdr - skb->nh.raw; + return 1; + } + +- if (atomic_read(&ip6_frag_mem) > sysctl_ip6frag_high_thresh) +- ip6_evictor(); ++ if (atomic_read(&ip6_frag_mem) > sysctl_ip6frag_high_thresh) { ++#ifdef CONFIG_IPV6_STATISTICS ++ ip6_evictor(idev); ++#else ++ ip6_evictor(NULL); ++#endif ++ } + ++#ifdef CONFIG_IPV6_STATISTICS ++ if ((fq = fq_find(fhdr->identification, &hdr->saddr, &hdr->daddr, idev)) != NULL) { ++#else + if ((fq = fq_find(fhdr->identification, &hdr->saddr, &hdr->daddr)) != NULL) { ++#endif + int ret = -1; + + spin_lock(&fq->lock); +@@ -745,7 +841,11 @@ + return ret; + } + ++#ifdef CONFIG_IPV6_STATISTICS ++ IP6_INC_STATS_BH(idev, IPSTATS_MIB_REASMFAILS); ++#else + IP6_INC_STATS_BH(IPSTATS_MIB_REASMFAILS); ++#endif + kfree_skb(skb); + return -1; + } +diff -urN linux-2.6.11/net/ipv6/route.c x1/net/ipv6/route.c +--- linux-2.6.11/net/ipv6/route.c 2005-03-02 08:38:17.000000000 +0100 ++++ x1/net/ipv6/route.c 2005-02-28 07:45:55.000000000 +0100 +@@ -136,7 +136,6 @@ + + DEFINE_RWLOCK(rt6_lock); + +- + /* allocate dst with ip6_dst_ops */ + static __inline__ struct rt6_info *ip6_dst_alloc(void) + { +@@ -216,8 +215,9 @@ + /* + * pointer to the last default router chosen. BH is disabled locally. + */ +-static struct rt6_info *rt6_dflt_pointer; +-static DEFINE_SPINLOCK(rt6_dflt_lock); ++#if !defined(CONFIG_IPV6_NEW_ROUNDROBIN) ++struct rt6_info *rt6_dflt_pointer; ++spinlock_t rt6_dflt_lock = SPIN_LOCK_UNLOCKED; + + void rt6_reset_dflt_pointer(struct rt6_info *rt) + { +@@ -228,61 +228,168 @@ + } + spin_unlock_bh(&rt6_dflt_lock); + } ++#endif + + /* Default Router Selection (RFC 2461 6.3.6) */ +-static struct rt6_info *rt6_best_dflt(struct rt6_info *rt, int oif) ++static int __rt6_score_dflt(struct rt6_info *sprt, struct rt6_info *dflt, int oif) + { +- struct rt6_info *match = NULL; +- struct rt6_info *sprt; +- int mpri = 0; ++ struct neighbour *neigh = sprt->rt6i_nexthop; ++ int m = oif ? 0 : 8; + +- for (sprt = rt; sprt; sprt = sprt->u.next) { +- struct neighbour *neigh; +- int m = 0; ++ if (!neigh) ++ return -1; + +- if (!oif || +- (sprt->rt6i_dev && +- sprt->rt6i_dev->ifindex == oif)) +- m += 8; ++ if (rt6_check_expired(sprt)) ++ return -1; + +- if (rt6_check_expired(sprt)) +- continue; ++ if (oif && sprt->rt6i_dev && ++ sprt->rt6i_dev->ifindex == oif) ++ m += 8; ++ ++#if !defined(CONFIG_IPV6_ROUTER_PREF) ++ if (sprt == dflt) ++ m += 4; ++#endif + +- if (sprt == rt6_dflt_pointer) +- m += 4; ++ read_lock_bh(&neigh->lock); ++ switch (neigh->nud_state) { ++ case NUD_REACHABLE: ++ m += 3; ++ break; + +- if ((neigh = sprt->rt6i_nexthop) != NULL) { +- read_lock_bh(&neigh->lock); +- switch (neigh->nud_state) { +- case NUD_REACHABLE: +- m += 3; +- break; ++ case NUD_STALE: ++ case NUD_DELAY: ++ case NUD_PROBE: ++ m += 2; ++ break; + +- case NUD_STALE: +- case NUD_DELAY: +- case NUD_PROBE: +- m += 2; +- break; ++ case NUD_NOARP: ++ case NUD_PERMANENT: ++ m += 1; ++ break; + +- case NUD_NOARP: +- case NUD_PERMANENT: +- m += 1; ++ case NUD_INCOMPLETE: ++ default: ++ m = -1; ++ } ++ read_unlock_bh(&neigh->lock); ++ ++ return m; ++} ++ ++static struct rt6_info *rt6_best_dflt(struct rt6_info *rt, struct rt6_info **head, int oif) ++{ ++ struct rt6_info *match = NULL; ++ struct rt6_info *sprt; ++#if defined(CONFIG_IPV6_NEW_ROUNDROBIN) ++ struct rt6_info *last = NULL; ++#endif ++ int mpri = 0; ++#if defined(CONFIG_IPV6_ROUTER_PREF) ++ u32 metric = 0; ++ int pref = -3; ++#else ++ static const int okpri = 12; /* device match, prob. reachable */ ++#endif ++ ++ if (head != NULL && *head != rt) ++ head = NULL; /*XXX*/ ++ ++#if !defined(CONFIG_IPV6_NEW_ROUNDROBIN) ++ spin_lock(&rt6_dflt_lock); ++#endif ++#if !defined(CONFIG_IPV6_NEW_ROUNDROBIN) ++ if (rt6_dflt_pointer) { ++ for (sprt = rt; sprt; sprt = sprt->u.next) { ++ if (sprt == rt6_dflt_pointer) + break; ++ } ++ if (!sprt) ++ rt6_dflt_pointer = NULL; /* for sure */ ++ } ++#endif + +- case NUD_INCOMPLETE: +- default: +- read_unlock_bh(&neigh->lock); ++#if defined(CONFIG_IPV6_ROUTER_PREF) ++#if !defined(CONFIG_IPV6_NEW_ROUNDROBIN) ++ if (rt6_dflt_pointer) { ++ for (sprt = rt6_dflt_pointer->u.next; sprt; sprt = sprt->u.next) { ++ int m, p; ++ ++ if ((metric != 0 && sprt->rt6i_metric > metric) || ++ sprt->u.dst.obsolete > 0 || ++ sprt->u.dst.error != 0) + continue; ++ ++#if defined(CONFIG_IPV6_NEW_ROUNDROBIN) ++ m = __rt6_score_dflt(sprt, rt, oif); ++#else ++ m = __rt6_score_dflt(sprt, rt6_dflt_pointer, oif); ++#endif ++ if (m < mpri) ++ continue; ++ p = IPV6_SIGNEDPREF(IPV6_UNSHIFT_PREF(sprt->rt6i_flags)); ++ if (sprt->rt6i_metric < metric || m > mpri || p > pref) { ++ match = sprt; ++ metric = sprt->rt6i_metric; ++ mpri = m; ++ pref = p; + } +- read_unlock_bh(&neigh->lock); +- } else { ++ } ++ } ++#endif ++#if defined(CONFIG_IPV6_NEW_ROUNDROBIN) ++ metric = rt->rt6i_metric; ++#endif ++ for (sprt = rt; sprt; sprt = sprt->u.next) { ++ int m, p; ++#if defined(CONFIG_IPV6_NEW_ROUNDROBIN) ++ if (sprt->rt6i_metric > metric) ++ break; ++#else ++ if ((metric != 0 && sprt->rt6i_metric > metric) || ++ sprt->u.dst.obsolete > 0 || ++ sprt->u.dst.error != 0) + continue; ++ ++#endif ++#if defined(CONFIG_IPV6_NEW_ROUNDROBIN) ++ m = __rt6_score_dflt(sprt, rt, oif); ++#else ++ m = __rt6_score_dflt(sprt, rt6_dflt_pointer, oif); ++#endif ++ if (m < mpri) ++ continue; ++ p = IPV6_SIGNEDPREF(IPV6_UNSHIFT_PREF(sprt->rt6i_flags)); ++ if ( ++#if !defined(CONFIG_IPV6_NEW_ROUNDROBIN) ++ sprt->rt6i_metric < metric || ++#endif ++ m > mpri || p > pref) { ++ match = sprt; ++ metric = sprt->rt6i_metric; ++ mpri = m; ++ pref = p; + } ++#if defined(CONFIG_IPV6_NEW_ROUNDROBIN) ++ last = sprt; ++#else ++ if (sprt == rt6_dflt_pointer) ++ break; ++#endif ++ } ++#else /* CONFIG_IPV6_ROUTER_PREF / !CONFIG_IPV6_ROUTER_PREF */ ++ for (sprt = rt; sprt; sprt = sprt->u.next) { ++ int m; ++#if defined(CONFIG_IPV6_NEW_ROUNDROBIN) ++ m = __rt6_score_dflt(sprt, rt, oif); ++#else ++ m = __rt6_score_dflt(sprt, rt6_dflt_pointer, oif); ++#endif + +- if (m > mpri || m >= 12) { ++ if (m > mpri || m >= okpri) { + match = sprt; + mpri = m; +- if (m >= 12) { ++ if (m >= okpri) { + /* we choose the last default router if it + * is in (probably) reachable state. + * If route changed, we should do pmtu +@@ -293,7 +400,6 @@ + } + } + +- spin_lock(&rt6_dflt_lock); + if (!match) { + /* + * No default routers are known to be reachable. +@@ -323,14 +429,25 @@ + } + } + } ++#endif /* !CONFIG_IPV6_ROUTER_PREF */ + + if (match) { ++#if defined(CONFIG_IPV6_NEW_ROUNDROBIN) ++ if (rt != last && last) { ++ *head = rt->u.next; ++ rt->u.next = last->u.next; ++ last->u.next = rt; ++ } ++#else + if (rt6_dflt_pointer != match) + RT6_TRACE("changed default router: %p->%p\n", + rt6_dflt_pointer, match); + rt6_dflt_pointer = match; ++#endif + } ++#if !defined(CONFIG_IPV6_NEW_ROUNDROBIN) + spin_unlock(&rt6_dflt_lock); ++#endif + + if (!match) { + /* +@@ -540,7 +657,7 @@ + } + if (rt->rt6i_flags & RTF_DEFAULT) { + if (rt->rt6i_metric >= IP6_RT_PRIO_ADDRCONF) +- rt = rt6_best_dflt(rt, fl->oif); ++ rt = rt6_best_dflt(rt, &fn->leaf, fl->oif); + } else { + rt = rt6_device_match(rt, fl->oif, strict); + BACKTRACK(); +@@ -575,7 +692,6 @@ + return &rt->u.dst; + } + +- + /* + * Destination cache support functions + */ +@@ -628,8 +744,10 @@ + + if (mtu < dst_pmtu(dst) && rt6->rt6i_dst.plen == 128) { + rt6->rt6i_flags |= RTF_MODIFIED; +- if (mtu < IPV6_MIN_MTU) ++ if (mtu < IPV6_MIN_MTU) { + mtu = IPV6_MIN_MTU; ++ dst->metrics[RTAX_FEATURES-1] |= RTAX_FEATURE_ALLFRAG; ++ } + dst->metrics[RTAX_MTU-1] = mtu; + } + } +@@ -769,7 +887,7 @@ + return mtu; + } + +-static int ipv6_get_hoplimit(struct net_device *dev) ++int ipv6_get_hoplimit(struct net_device *dev) + { + int hoplimit = ipv6_devconf.hop_limit; + struct inet6_dev *idev; +@@ -965,14 +1083,8 @@ + } + } + +- if (rt->u.dst.metrics[RTAX_HOPLIMIT-1] == 0) { +- if (ipv6_addr_is_multicast(&rt->rt6i_dst.addr)) +- rt->u.dst.metrics[RTAX_HOPLIMIT-1] = +- IPV6_DEFAULT_MCASTHOPS; +- else +- rt->u.dst.metrics[RTAX_HOPLIMIT-1] = +- ipv6_get_hoplimit(dev); +- } ++ if (rt->u.dst.metrics[RTAX_HOPLIMIT-1] == 0) ++ rt->u.dst.metrics[RTAX_HOPLIMIT-1] = -1; + + if (!rt->u.dst.metrics[RTAX_MTU-1]) + rt->u.dst.metrics[RTAX_MTU-1] = ipv6_get_mtu(dev); +@@ -998,7 +1110,9 @@ + + write_lock_bh(&rt6_lock); + ++#ifndef CONFIG_IPV6_NEW_ROUNDROBIN + rt6_reset_dflt_pointer(NULL); ++#endif + + err = fib6_del(rt, nlh, _rtattr); + dst_release(&rt->u.dst); +@@ -1051,11 +1165,24 @@ + { + struct rt6_info *rt, *nrt; + ++#ifdef CONFIG_IPV6_NDISC_DEBUG ++ printk(KERN_DEBUG ++ "%s(" ++ "dest=%04x:%04x:%04x:%04x:%04x:%04x:%04x:%04x, " ++ "saddr=%04x:%04x:%04x:%04x:%04x:%04x:%04x:%04x, " ++ "neigh=%p(%s), " ++ "lladdr=%p, on_link=%d)\n", ++ __FUNCTION__, ++ NIP6(*dest), NIP6(*saddr), ++ neigh, neigh_state(neigh->nud_state), ++ lladdr, on_link); ++#endif ++ + /* Locate old route to this destination. */ + rt = rt6_lookup(dest, NULL, neigh->dev->ifindex, 1); + + if (rt == NULL) +- return; ++ goto out; + + if (neigh->dev != rt->rt6i_dev) + goto out; +@@ -1068,8 +1195,12 @@ + * But then router serving it might decide, that we should + * know truth 8)8) --ANK (980726). + */ +- if (!(rt->rt6i_flags&RTF_GATEWAY)) ++ if (!(rt->rt6i_flags&RTF_GATEWAY)) { ++ if (net_ratelimit()) ++ printk(KERN_DEBUG "%s(): rt=%p is on-link; ignored.\n", ++ __FUNCTION__, rt); + goto out; ++ } + + /* + * RFC 2461 specifies that redirects should only be +@@ -1101,9 +1232,8 @@ + } + + source_ok: +- + /* +- * We have finally decided to accept it. ++ * Okay, we have finally decided to accept it. + */ + + neigh_update(neigh, lladdr, NUD_STALE, +@@ -1152,7 +1282,6 @@ + + out: + dst_release(&rt->u.dst); +- return; + } + + /* +@@ -1164,17 +1293,7 @@ + struct net_device *dev, u32 pmtu) + { + struct rt6_info *rt, *nrt; +- +- if (pmtu < IPV6_MIN_MTU) { +- if (net_ratelimit()) +- printk(KERN_DEBUG "rt6_pmtu_discovery: invalid MTU value %d\n", +- pmtu); +- /* According to RFC1981, the PMTU is set to the IPv6 minimum +- link MTU if the node receives a Packet Too Big message +- reporting next-hop MTU that is less than the IPv6 minimum MTU. +- */ +- pmtu = IPV6_MIN_MTU; +- } ++ int allfrag = 0; + + rt = rt6_lookup(daddr, saddr, dev->ifindex, 0); + +@@ -1184,6 +1303,17 @@ + if (pmtu >= dst_pmtu(&rt->u.dst)) + goto out; + ++ if (pmtu < IPV6_MIN_MTU) { ++ /* ++ * According to RFC2461, pmtu is set to the IPv6 minimum MTU ++ * (1280) and a fragment header is included after a node ++ * receiving Too Big message reporting PMTU is less than ++ * the IPv6 minimum MTU. ++ */ ++ pmtu = IPV6_MIN_MTU; ++ allfrag = 1; ++ } ++ + /* New mtu received -> path was valid. + They are sent only in response to data packets, + so that this nexthop apparently is reachable. --ANK +@@ -1197,6 +1327,8 @@ + */ + if (rt->rt6i_flags & RTF_CACHE) { + rt->u.dst.metrics[RTAX_MTU-1] = pmtu; ++ if (allfrag) ++ rt->u.dst.metrics[RTAX_FEATURES-1] |= RTAX_FEATURE_ALLFRAG; + dst_set_expires(&rt->u.dst, ip6_rt_mtu_expires); + rt->rt6i_flags |= RTF_MODIFIED|RTF_EXPIRES; + goto out; +@@ -1211,6 +1343,8 @@ + nrt = rt6_cow(rt, daddr, saddr); + if (!nrt->u.dst.error) { + nrt->u.dst.metrics[RTAX_MTU-1] = pmtu; ++ if (allfrag) ++ nrt->u.dst.metrics[RTAX_FEATURES-1] |= RTAX_FEATURE_ALLFRAG; + /* According to RFC 1981, detecting PMTU increase shouldn't be + happened within 5 mins, the recommended timer is 10 mins. + Here this route expiration time is set to ip6_rt_mtu_expires +@@ -1232,6 +1366,8 @@ + dst_set_expires(&nrt->u.dst, ip6_rt_mtu_expires); + nrt->rt6i_flags |= RTF_DYNAMIC|RTF_CACHE|RTF_EXPIRES; + nrt->u.dst.metrics[RTAX_MTU-1] = pmtu; ++ if (allfrag) ++ nrt->u.dst.metrics[RTAX_FEATURES-1] |= RTAX_FEATURE_ALLFRAG; + ip6_ins_rt(nrt, NULL, NULL); + } + +@@ -1293,7 +1429,8 @@ + } + + struct rt6_info *rt6_add_dflt_router(struct in6_addr *gwaddr, +- struct net_device *dev) ++ struct net_device *dev, ++ int pref) + { + struct in6_rtmsg rtmsg; + +@@ -1301,7 +1438,7 @@ + rtmsg.rtmsg_type = RTMSG_NEWROUTE; + ipv6_addr_copy(&rtmsg.rtmsg_gateway, gwaddr); + rtmsg.rtmsg_metric = 1024; +- rtmsg.rtmsg_flags = RTF_GATEWAY | RTF_ADDRCONF | RTF_DEFAULT | RTF_UP | RTF_EXPIRES; ++ rtmsg.rtmsg_flags = RTF_GATEWAY | RTF_ADDRCONF | RTF_DEFAULT | RTF_UP | RTF_PREF(pref&3) | RTF_EXPIRES; + + rtmsg.rtmsg_ifindex = dev->ifindex; + +@@ -1319,7 +1456,9 @@ + if (rt->rt6i_flags & (RTF_DEFAULT | RTF_ADDRCONF)) { + dst_hold(&rt->u.dst); + ++#ifndef CONFIG_IPV6_NEW_ROUNDROBIN + rt6_reset_dflt_pointer(NULL); ++#endif + + read_unlock_bh(&rt6_lock); + +@@ -1371,7 +1510,13 @@ + + int ip6_pkt_discard(struct sk_buff *skb) + { ++#ifdef CONFIG_IPV6_STATISTICS ++ struct dst_entry *dst = skb->dst; ++ struct inet6_dev *idev = ((struct rt6_info *)dst)->rt6i_idev; ++ IP6_INC_STATS(idev, IPSTATS_MIB_OUTNOROUTES); ++#else + IP6_INC_STATS(IPSTATS_MIB_OUTNOROUTES); ++#endif + icmpv6_send(skb, ICMPV6_DEST_UNREACH, ICMPV6_NOROUTE, 0, skb->dev); + kfree_skb(skb); + return 0; +@@ -1406,7 +1551,7 @@ + rt->rt6i_idev = idev; + rt->u.dst.metrics[RTAX_MTU-1] = ipv6_get_mtu(rt->rt6i_dev); + rt->u.dst.metrics[RTAX_ADVMSS-1] = ipv6_advmss(dst_pmtu(&rt->u.dst)); +- rt->u.dst.metrics[RTAX_HOPLIMIT-1] = ipv6_get_hoplimit(rt->rt6i_dev); ++ rt->u.dst.metrics[RTAX_HOPLIMIT-1] = -1; + rt->u.dst.obsolete = -1; + + rt->rt6i_flags = RTF_UP | RTF_NONEXTHOP; +@@ -1877,7 +2022,6 @@ + static int rt6_info_route(struct rt6_info *rt, void *p_arg) + { + struct rt6_proc_arg *arg = (struct rt6_proc_arg *) p_arg; +- int i; + + if (arg->skip < arg->offset / RT6_INFO_LEN) { + arg->skip++; +@@ -1887,39 +2031,29 @@ + if (arg->len >= arg->length) + return 0; + +- for (i=0; i<16; i++) { +- sprintf(arg->buffer + arg->len, "%02x", +- rt->rt6i_dst.addr.s6_addr[i]); +- arg->len += 2; +- } +- arg->len += sprintf(arg->buffer + arg->len, " %02x ", ++ arg->len += sprintf(arg->buffer + arg->len, ++ "%04x%04x%04x%04x%04x%04x%04x%04x %02x ", ++ NIP6(rt->rt6i_dst.addr), + rt->rt6i_dst.plen); + + #ifdef CONFIG_IPV6_SUBTREES +- for (i=0; i<16; i++) { +- sprintf(arg->buffer + arg->len, "%02x", +- rt->rt6i_src.addr.s6_addr[i]); +- arg->len += 2; +- } +- arg->len += sprintf(arg->buffer + arg->len, " %02x ", ++ arg->len += sprintf(arg->buffer + arg->len, ++ "%04x%04x%04x%04x%04x%04x%04x%04x %02x ", ++ NIP6(rt->rt6i_src.addr), + rt->rt6i_src.plen); + #else +- sprintf(arg->buffer + arg->len, +- "00000000000000000000000000000000 00 "); +- arg->len += 36; ++ arg->len += sprintf(arg->buffer + arg->len, ++ "00000000000000000000000000000000 00 "); + #endif + +- if (rt->rt6i_nexthop) { +- for (i=0; i<16; i++) { +- sprintf(arg->buffer + arg->len, "%02x", +- rt->rt6i_nexthop->primary_key[i]); +- arg->len += 2; +- } +- } else { +- sprintf(arg->buffer + arg->len, +- "00000000000000000000000000000000"); +- arg->len += 32; +- } ++ if (rt->rt6i_nexthop) ++ arg->len += sprintf(arg->buffer + arg->len, ++ "%04x%04x%04x%04x%04x%04x%04x%04x", ++ NIP6(*((struct in6_addr *)rt->rt6i_nexthop->primary_key))); ++ else ++ arg->len += sprintf(arg->buffer + arg->len, ++ "00000000000000000000000000000000"); ++ + arg->len += sprintf(arg->buffer + arg->len, + " %08x %08x %08x %08x %8s\n", + rt->rt6i_metric, atomic_read(&rt->u.dst.__refcnt), +@@ -2080,6 +2214,15 @@ + .proc_handler = &proc_dointvec_jiffies, + .strategy = &sysctl_jiffies, + }, ++ { ++ .ctl_name = NET_IPV6_ROUTE_GC_MIN_INTERVAL_MS, ++ .procname = "gc_min_interval_ms", ++ .data = &ip6_rt_gc_min_interval, ++ .maxlen = sizeof(int), ++ .mode = 0644, ++ .proc_handler = &proc_dointvec_ms_jiffies, ++ .strategy = &sysctl_ms_jiffies, ++ }, + { .ctl_name = 0 } + }; + +diff -urN linux-2.6.11/net/ipv6/udp.c x1/net/ipv6/udp.c +--- linux-2.6.11/net/ipv6/udp.c 2005-03-02 08:38:20.000000000 +0100 ++++ x1/net/ipv6/udp.c 2005-02-28 07:45:55.000000000 +0100 +@@ -277,7 +277,6 @@ + if (ipv6_addr_type(&sin6->sin6_addr) & IPV6_ADDR_LINKLOCAL) + sin6->sin6_scope_id = IP6CB(skb)->iif; + } +- + } + if (skb->protocol == htons(ETH_P_IP)) { + if (inet->cmsg_flags) +@@ -811,6 +810,8 @@ + hlimit = np->hop_limit; + if (hlimit < 0) + hlimit = dst_metric(dst, RTAX_HOPLIMIT); ++ if (hlimit < 0) ++ hlimit = ipv6_get_hoplimit(dst->dev); + } + + if (msg->msg_flags&MSG_CONFIRM) +diff -urN linux-2.6.11/net/ipv6/xfrm6_input.c x1/net/ipv6/xfrm6_input.c +--- linux-2.6.11/net/ipv6/xfrm6_input.c 2005-03-02 08:38:33.000000000 +0100 ++++ x1/net/ipv6/xfrm6_input.c 2004-09-30 15:26:35.000000000 +0200 +@@ -42,7 +42,7 @@ + nexthdr = skb->nh.raw[nhoff]; + + seq = 0; +- if (!spi && (err = xfrm_parse_spi(skb, nexthdr, &spi, &seq)) != 0) ++ if (!spi && (err = xfrm_parse_spi(skb, nexthdr, &spi)) != 0) + goto drop; + + do { +@@ -58,9 +58,6 @@ + if (unlikely(x->km.state != XFRM_STATE_VALID)) + goto drop_unlock; + +- if (x->props.replay_window && xfrm_replay_check(x, seq)) +- goto drop_unlock; +- + if (xfrm_state_check_expire(x)) + goto drop_unlock; + +@@ -70,9 +67,6 @@ + + skb->nh.raw[nhoff] = nexthdr; + +- if (x->props.replay_window) +- xfrm_replay_advance(x, seq); +- + x->curlft.bytes += skb->len; + x->curlft.packets++; + +@@ -99,8 +93,9 @@ + break; + } + +- if ((err = xfrm_parse_spi(skb, nexthdr, &spi, &seq)) < 0) ++ if ((err = xfrm_parse_spi(skb, nexthdr, &spi)) < 0) + goto drop; ++ + } while (!err); + + /* Allocate new secpath or COW existing one. */ +diff -urN linux-2.6.11/net/ipv6/xfrm6_policy.c x1/net/ipv6/xfrm6_policy.c +--- linux-2.6.11/net/ipv6/xfrm6_policy.c 2005-03-02 08:37:50.000000000 +0100 ++++ x1/net/ipv6/xfrm6_policy.c 2004-11-25 06:33:10.000000000 +0100 +@@ -25,8 +25,8 @@ + static int xfrm6_dst_lookup(struct xfrm_dst **dst, struct flowi *fl) + { + int err = 0; +- *dst = (struct xfrm_dst*)ip6_route_output(NULL, fl); +- if (!*dst) ++ err = ip6_dst_lookup(NULL, (struct dst_entry **)dst, fl); ++ if (err) + err = -ENETUNREACH; + return err; + } +@@ -56,7 +56,6 @@ + { + struct dst_entry *dst; + +- /* Still not clear if we should set fl->fl6_{src,dst}... */ + read_lock_bh(&policy->lock); + for (dst = policy->bundles; dst; dst = dst->next) { + struct xfrm_dst *xdst = (struct xfrm_dst*)dst; +diff -urN linux-2.6.11/net/xfrm/xfrm_input.c x1/net/xfrm/xfrm_input.c +--- linux-2.6.11/net/xfrm/xfrm_input.c 2005-03-02 08:38:34.000000000 +0100 ++++ x1/net/xfrm/xfrm_input.c 2005-02-18 10:36:26.000000000 +0100 +@@ -46,24 +46,21 @@ + + /* Fetch spi and seq from ipsec header */ + +-int xfrm_parse_spi(struct sk_buff *skb, u8 nexthdr, u32 *spi, u32 *seq) ++int xfrm_parse_spi(struct sk_buff *skb, u8 nexthdr, u32 *spi) + { +- int offset, offset_seq; ++ int offset; + + switch (nexthdr) { + case IPPROTO_AH: + offset = offsetof(struct ip_auth_hdr, spi); +- offset_seq = offsetof(struct ip_auth_hdr, seq_no); + break; + case IPPROTO_ESP: + offset = offsetof(struct ip_esp_hdr, spi); +- offset_seq = offsetof(struct ip_esp_hdr, seq_no); + break; + case IPPROTO_COMP: + if (!pskb_may_pull(skb, sizeof(struct ip_comp_hdr))) + return -EINVAL; + *spi = ntohl(ntohs(*(u16*)(skb->h.raw + 2))); +- *seq = 0; + return 0; + default: + return 1; +@@ -73,7 +70,6 @@ + return -EINVAL; + + *spi = *(u32*)(skb->h.raw + offset); +- *seq = *(u32*)(skb->h.raw + offset_seq); + return 0; + } + EXPORT_SYMBOL(xfrm_parse_spi); +diff -urN linux-2.6.11/net/xfrm/xfrm_policy.c x1/net/xfrm/xfrm_policy.c +--- linux-2.6.11/net/xfrm/xfrm_policy.c 2005-03-02 08:38:09.000000000 +0100 ++++ x1/net/xfrm/xfrm_policy.c 2005-02-28 07:45:55.000000000 +0100 +@@ -703,9 +703,14 @@ + + static inline int policy_to_flow_dir(int dir) + { ++#ifdef CONFIG_USE_POLICY_FWD + if (XFRM_POLICY_IN == FLOW_DIR_IN && + XFRM_POLICY_OUT == FLOW_DIR_OUT && + XFRM_POLICY_FWD == FLOW_DIR_FWD) ++#else ++ if (XFRM_POLICY_IN == FLOW_DIR_IN && ++ XFRM_POLICY_OUT == FLOW_DIR_OUT) ++#endif + return dir; + switch (dir) { + default: +@@ -713,8 +718,10 @@ + return FLOW_DIR_IN; + case XFRM_POLICY_OUT: + return FLOW_DIR_OUT; ++#ifdef CONFIG_USE_POLICY_FWD + case XFRM_POLICY_FWD: + return FLOW_DIR_FWD; ++#endif + }; + } + +diff -urN linux-2.6.11/net/xfrm/xfrm_user.c x1/net/xfrm/xfrm_user.c +--- linux-2.6.11/net/xfrm/xfrm_user.c 2005-03-02 08:38:10.000000000 +0100 ++++ x1/net/xfrm/xfrm_user.c 2005-02-03 06:35:55.000000000 +0100 +@@ -530,7 +530,9 @@ + switch (dir) { + case XFRM_POLICY_IN: + case XFRM_POLICY_OUT: ++#ifdef CONFIG_USE_POLICY_FWD + case XFRM_POLICY_FWD: ++#endif + break; + + default: +@@ -1136,14 +1138,14 @@ + + switch (family) { + case AF_INET: +- if (opt != IP_XFRM_POLICY) { ++ if (opt != IP_XFRM_POLICY && opt != IP_IPSEC_POLICY) { + *dir = -EOPNOTSUPP; + return NULL; + } + break; + #if defined(CONFIG_IPV6) || defined(CONFIG_IPV6_MODULE) + case AF_INET6: +- if (opt != IPV6_XFRM_POLICY) { ++ if (opt != IPV6_XFRM_POLICY && opt != IPV6_IPSEC_POLICY) { + *dir = -EOPNOTSUPP; + return NULL; + } diff --git a/noc/patches/usagi-iptables-s20050314.diff b/noc/patches/usagi-iptables-s20050314.diff new file mode 100644 index 0000000..a1ac5e1 --- /dev/null +++ b/noc/patches/usagi-iptables-s20050314.diff @@ -0,0 +1,173 @@ +diff -urN iptables-1.2.11/extensions/.state-test6 iptables/extensions/.state-test6 +--- iptables-1.2.11/extensions/.state-test6 1970-01-01 01:00:00.000000000 +0100 ++++ iptables/extensions/.state-test6 2003-11-28 04:14:10.000000000 +0100 +@@ -0,0 +1,2 @@ ++#!/bin/sh ++[ -f $KERNEL_DIR/net/ipv6/netfilter/ip6t_state.c -a -f $KERNEL_DIR/include/linux/netfilter_ipv6/ip6t_state.h ] && echo state +diff -urN iptables-1.2.11/extensions/libip6t_state.c iptables/extensions/libip6t_state.c +--- iptables-1.2.11/extensions/libip6t_state.c 1970-01-01 01:00:00.000000000 +0100 ++++ iptables/extensions/libip6t_state.c 2003-11-28 04:14:10.000000000 +0100 +@@ -0,0 +1,163 @@ ++/* Shared library add-on to ip6tables to add state tracking support. */ ++#include ++#include ++#include ++#include ++#include ++#include ++#include ++#include ++ ++/* Function which prints out usage message. */ ++static void ++help(void) ++{ ++ printf( ++"state v%s options:\n" ++" [!] --state [INVALID|ESTABLISHED|NEW|RELATED][,...]\n" ++" State(s) to match\n" ++"\n", IPTABLES_VERSION); ++} ++ ++static struct option opts[] = { ++ { "state", 1, 0, '1' }, ++ {0} ++}; ++ ++/* Initialize the match. */ ++static void ++init(struct ip6t_entry_match *m, unsigned int *nfcache) ++{ ++ /* Can't cache this */ ++ *nfcache |= NFC_UNKNOWN; ++} ++ ++static int ++parse_state(const char *state, size_t strlen, struct ip6t_state_info *sinfo) ++{ ++ if (strncasecmp(state, "INVALID", strlen) == 0) ++ sinfo->statemask |= IP6T_STATE_INVALID; ++ else if (strncasecmp(state, "NEW", strlen) == 0) ++ sinfo->statemask |= IP6T_STATE_BIT(IP6_CT_NEW); ++ else if (strncasecmp(state, "ESTABLISHED", strlen) == 0) ++ sinfo->statemask |= IP6T_STATE_BIT(IP6_CT_ESTABLISHED); ++ else if (strncasecmp(state, "RELATED", strlen) == 0) ++ sinfo->statemask |= IP6T_STATE_BIT(IP6_CT_RELATED); ++ else ++ return 0; ++ return 1; ++} ++ ++static void ++parse_states(const char *arg, struct ip6t_state_info *sinfo) ++{ ++ const char *comma; ++ ++ while ((comma = strchr(arg, ',')) != NULL) { ++ if (comma == arg || !parse_state(arg, comma-arg, sinfo)) ++ exit_error(PARAMETER_PROBLEM, "Bad state `%s'", arg); ++ arg = comma+1; ++ } ++ ++ if (strlen(arg) == 0 || !parse_state(arg, strlen(arg), sinfo)) ++ exit_error(PARAMETER_PROBLEM, "Bad state `%s'", arg); ++} ++ ++/* Function which parses command options; returns true if it ++ ate an option */ ++static int ++parse(int c, char **argv, int invert, unsigned int *flags, ++ const struct ip6t_entry *entry, ++ unsigned int *nfcache, ++ struct ip6t_entry_match **match) ++{ ++ struct ip6t_state_info *sinfo = (struct ip6t_state_info *)(*match)->data; ++ ++ switch (c) { ++ case '1': ++ check_inverse(optarg, &invert, &optind, 0); ++ ++ parse_states(argv[optind-1], sinfo); ++ if (invert) ++ sinfo->statemask = ~sinfo->statemask; ++ *flags = 1; ++ break; ++ ++ default: ++ return 0; ++ } ++ ++ return 1; ++} ++ ++/* Final check; must have specified --state. */ ++static void final_check(unsigned int flags) ++{ ++ if (!flags) ++ exit_error(PARAMETER_PROBLEM, "You must specify `--state'"); ++} ++ ++static void print_state(unsigned int statemask) ++{ ++ const char *sep = ""; ++ ++ if (statemask & IP6T_STATE_INVALID) { ++ printf("%sINVALID", sep); ++ sep = ","; ++ } ++ if (statemask & IP6T_STATE_BIT(IP6_CT_NEW)) { ++ printf("%sNEW", sep); ++ sep = ","; ++ } ++ if (statemask & IP6T_STATE_BIT(IP6_CT_RELATED)) { ++ printf("%sRELATED", sep); ++ sep = ","; ++ } ++ if (statemask & IP6T_STATE_BIT(IP6_CT_ESTABLISHED)) { ++ printf("%sESTABLISHED", sep); ++ sep = ","; ++ } ++ printf(" "); ++} ++ ++/* Prints out the matchinfo. */ ++static void ++print(const struct ip6t_ip6 *ip, ++ const struct ip6t_entry_match *match, ++ int numeric) ++{ ++ struct ip6t_state_info *sinfo = (struct ip6t_state_info *)match->data; ++ ++ printf("state "); ++ print_state(sinfo->statemask); ++} ++ ++/* Saves the matchinfo in parsable form to stdout. */ ++static void save(const struct ip6t_ip6 *ip, const struct ip6t_entry_match *match) ++{ ++ struct ip6t_state_info *sinfo = (struct ip6t_state_info *)match->data; ++ ++ printf("--state "); ++ print_state(sinfo->statemask); ++} ++ ++static ++struct ip6tables_match state ++= { NULL, ++ "state", ++ IPTABLES_VERSION, ++ IP6T_ALIGN(sizeof(struct ip6t_state_info)), ++ IP6T_ALIGN(sizeof(struct ip6t_state_info)), ++ &help, ++ &init, ++ &parse, ++ &final_check, ++ &print, ++ &save, ++ opts ++}; ++ ++void _init(void) ++{ ++ register_match6(&state); ++} diff --git a/noc/scripts/chaosvpn-client.pl b/noc/scripts/chaosvpn-client.pl new file mode 100755 index 0000000..065433b --- /dev/null +++ b/noc/scripts/chaosvpn-client.pl @@ -0,0 +1,352 @@ +#!/usr/bin/perl + +# 0.05 20040220 haegar@ccc.de +# - pfad zu /sbin/ip in eine Variable auslagern +# +# 0.04 20031203 haegar@ccc.de +# - config in ein externes configfile ausgelagert +# - abschiessen eines schon laufenden chaosvpn-daemons umgebaut, +# da der normale weg nicht immer funktioniert +# +# 0.03 20031202 haegar@ccc.de +# - debug-logging per default an, damit man mehr sieht +# - unbenutzte config-variablen als solche kommentiert +# +# 0.02 20031020 haegar@ccc.de +# - peer-excludes funktionierten nicht +# +# v0.01 20031019 haegar@ccc.de +# - first revision + +# JA, ICH WEISS HIER FEHLT NOCH VIEL UND ES IST AN DIVERSEN STELLEN +# EXTREM DRECKIG RUNTERGEHACKT ;) + + +use strict; +use LWP::UserAgent; +use HTTP::Request; +use CGI; +use Data::Dumper; + + +my $config = "/etc/tinc/chaosvpn.conf"; + + +# config-vars: +use vars qw( + $my_peerid $my_vpn_ip $my_vpn_netmask $my_vpn_ip6 + @exclude + $my_password $my_ip $my_external_ip + $networkname $tincd_bin $ifconfig $ifconfig6 $ip_bin + $master_url $base $pidfile $tincd_debuglevel + ); + +# defaults: +$my_peerid = "undef"; +$my_vpn_ip = ""; +$my_vpn_netmask = "255.255.255.255"; +$my_vpn_ip6 = ""; + +$my_password = ""; # unused +$my_ip = ""; # unused for now +$my_external_ip = ""; # unused + +@exclude = (); # links zu gewissen peer-ids nicht aufbauen + +# ============================================================================ +# you should'nt need to change anything below, +# at least not for linux and chaosvpn + +$networkname = "chaos"; +$tincd_bin = "/usr/sbin/tincd"; +$ip_bin = "/sbin/ip"; +$ifconfig = "/sbin/ifconfig \$INTERFACE $my_vpn_ip netmask $my_vpn_netmask"; +$ifconfig6 = "$ip_bin addr add $my_vpn_ip6/128 dev \$INTERFACE"; + +$master_url = "https://www.vpn.hamburg.ccc.de/tinc-chaosvpn.txt"; +$base = "/etc/tinc/$networkname"; +$pidfile = "/var/run/tinc.$networkname.pid"; +$tincd_debuglevel = 3; + + +# config einlesen +require $config; + +if (!-e "/dev/net/tun") { + warn "/dev/net/tun missing - creating it"; + system("mkdir", "-p", "/dev/net") && die; + system("mknod", "-m", "0600", "/dev/net/tun", "c", "10", "200") && die; +} + +my $answer = call_out_to_server(); +my $peers; +if ($answer) { + #print $answer; + $peers = parse_server_answer($answer); + #print Dumper($peers); +} else { + #die "we lost"; +} + +if ($peers) { + # wir haben eine neue config bekommen + + eval { + create_config($peers); + }; + if ($@) { + warn $@; + } +} + +# alten daemon beenden +if (-e $pidfile) { + # get pid + open(PIDFILE, "<$pidfile") || die "read error on pidfile $pidfile\n"; + my $pid = ; + chomp $pid; + close(PIDFILE); + + if (($pid =~ /^\d+$/) && (kill(0, $pid))) { + # prozess existiert, abschiessen + kill "TERM", $pid; + + my $c; + for ($c = 0; $c < 20; $c++) { + # wir wollen nicht laenger als unbedingt + # noetig warten, aber max 2sek + + select(undef, undef, undef, 0.1); # sleep 100ms + last unless kill(0, $pid); + } + + if ($c >= 20) { + # existiert noch immer, do it the hard way + # ist noetig wenn der tincd vorher probleme mit + # seiner config hatte, dann reicht ein SIGTERM + # nicht aus + + kill "KILL", $pid; + select(undef, undef, undef, 0.1); # sleep 100ms + } + + if (kill(0, $pid)) { + # immer noch? da iss was fischig + die "can't kill old tincd with pid $pid\n"; + } + } +} else { + # try it the old fashioned way, may not work + system($tincd_bin, "-n", $networkname, "-k") || sleep 1; +} +# neuen daemon starten +system($tincd_bin, "-n", $networkname, "--debug", $tincd_debuglevel) && die; + +exit(0); + + + +sub call_out_to_server +{ + my $ua = new LWP::UserAgent; + $ua->agent("ChaosVPNclient/0.1"); + + my $params = "id=" . CGI::escape($my_peerid) . + "&password=" . CGI::escape($my_password) . + "&ip=" . CGI::escape($my_ip); + + #my $req = HTTP::Request->new(POST => $master_url); + #$req->content_type("application/x-www-form-urlencoded"); + #$req->content($params); + + # testmode: + my $req = HTTP::Request->new(GET => "$master_url?$params"); + + my $res = $ua->request($req); + + if ($res->is_success) { + my $answer = $res->content; + return $answer; + } else { + #print Dumper($res); + warn "Warning: " . $res->status_line() . "\n"; + return undef; + } +} + + +sub parse_server_answer($) +{ + my ($answer) = @_; + my $peers = {}; + + my $current_peer = undef; + my $peer = {}; + my $in_key = 0; + + foreach (split(/\n/, $answer)) { + #print "debug: $_\n"; + + s/\#.*$//; + + if (/^\s*\[(.*?)\]\s*$/) { + if ($current_peer) { + $peers->{$current_peer} = $peer; + } + $peer = { + "use-tcp-only" => 0, + "hidden" => 0, + "silent" => 0, + "port" => 655, + }; + $current_peer = $1; + $current_peer = undef unless ($current_peer =~ /^[a-z0-9]+$/); + $in_key = 0; + } elsif ($current_peer) { + if ($in_key) { + $peer->{pubkey} .= $_; + $peer->{pubkey} .= "\n"; + + $in_key = 0 + if (/^-----END RSA PUBLIC KEY-----/); + } elsif (/^\s*gatewayhost=(.*)$\s*/i) { + $peer->{gatewayhost} = $1; + } elsif (/^\s*owner=(.*)$\s*/i) { + $peer->{owner} = $1; + } elsif (/^\s*use-tcp-only=(.*)$\s*/i) { + $peer->{"use-tcp-only"} = $1; + } elsif (/^\s*network=(.*)\s*$/i) { + push @{$peer->{networks}}, $1; + } elsif (/^\s*network6=(.*)\s*$/i) { + push @{$peer->{networks6}}, $1; + } elsif (/^\s*hidden=(.*)\s*$/i) { + $peer->{hidden} = $1; + } elsif (/^\s*silent=(.*)\s*$/i) { + $peer->{silent} = $1; + } elsif (/^\s*port=(.*)\s*$/i) { + $peer->{port} = $1; + } elsif (/^-----BEGIN RSA PUBLIC KEY-----/) { + $in_key = 1; + $peer->{pubkey} = $_ . "\n"; + } + } elsif (/^\s*$/ || /^\s*\#/) { + # ignore empty lines or comments + } else { + warn "unknown line: $_\n"; + } + } + + # den letzten, noch offenen, peer auch in der struktur verankern + if ($current_peer) { + $peers->{$current_peer} = $peer; + } + + return $peers; +} + + +sub create_config($) +{ + my ($peers) = @_; + + if (!-e "$base.first") { + system("cp", "-r", "$base", "$base.first") && die; + } + + if (-e "$base.new") { + system("rm", "-r", "$base.new") && die; + } + if (-e "$base.old") { + system("rm", "-r", "$base.old") && die; + } + + + system("mkdir", "-p", "$base.new") && die; + system("mkdir", "-p", "$base.new/hosts") && die; + system("cp", "$base/rsa_key.priv", "$base.new/rsa_key.priv") && die; + chmod(0600, "$base.new/rsa_key.priv") || die; + system("cp", "$base/rsa_key.pub", "$base.new/rsa_key.pub") && die; + chmod(0600, "$base.new/rsa_key.pub") || die; + + # base config file erzeugen + open(MAIN, ">$base.new/tinc.conf") || die "create tinc.conf failed"; + print MAIN "AddressFamily=ipv4\n"; + print MAIN "Device=/dev/net/tun\n"; + print MAIN "Interface=${networkname}_vpn\n"; + print MAIN "Mode=router\n"; + print MAIN "Name=$my_peerid\n"; + print MAIN "Hostnames=yes\n"; # unsure about this + + open(UP, ">$base.new/tinc-up") || die "create tinc-up failed"; + print UP "#!/bin/sh\n"; + print UP $ifconfig, "\n" if ($my_vpn_ip); + print UP $ifconfig6, "\n" if ($my_vpn_ip6); + + PEERS: foreach my $id (keys %$peers) { + my $peer = $peers->{$id}; + foreach (@exclude) { + if ($id eq $_) { + print "peer: $id -- excluded\n"; + next PEERS; + } + } + + print "peer: $id\n", Dumper($peer); + + open(PEER, ">$base.new/hosts/$id") || die "create hosts/$id failed"; + print PEER "Address=$peer->{gatewayhost}\n" + if ($peer->{gatewayhost}); + print PEER "Cipher=blowfish\n"; + print PEER "Compression=0\n"; + print PEER "Digest=sha1\n"; + print PEER "IndirectData=yes\n"; + print PEER "Port=$peer->{port}\n"; + + if ($my_vpn_ip) { + foreach (@{$peer->{networks}}) { + print PEER "Subnet=$_\n"; + print UP "$ip_bin -4 route add $_ dev \$INTERFACE\n" + if ($id ne $my_peerid); + } + } + if ($my_vpn_ip6) { + foreach (@{$peer->{networks6}}) { + print PEER "Subnet=$_\n"; + print UP "$ip_bin -6 route add $_ dev \$INTERFACE\n" + if ($id ne $my_peerid); + } + } + + print PEER "TCPonly=", ($peer->{"use-tcp-only"} ? "yes" : "no"); + print PEER "\n"; + + print PEER $peer->{pubkey}, "\n"; + + close(PEER) || die "write error hosts/$id"; + + if ($id ne $my_peerid) { + # den rest nur fuer die anderen hosts + + if ($peer->{gatewayhost} && !$peers->{hidden} && !$peers->{$my_peerid}->{silent}) { + print MAIN "ConnectTo=$id\n"; + } + + if (-e "$base/hosts/$id-up") { + system("cp", "$base/hosts/$id-up", "$base.new/hosts/$id-up") && die; + } + if (-e "$base/hosts/$id-down") { + system("cp", "$base/hosts/$id-down", "$base.new/hosts/$id-down") && die; + } + } + } + + close(MAIN) || die "write error tinc.conf"; + + close(UP) || die "write error tinc-up"; + system("chmod", "0700", "$base.new/tinc-up") && die; + + system("mv", "$base", "$base.old") && die; + system("mv", "$base.new", "$base") && die; + + return 1; +} diff --git a/noc/scripts/network-foo b/noc/scripts/network-foo new file mode 100755 index 0000000..70eb1c2 --- /dev/null +++ b/noc/scripts/network-foo @@ -0,0 +1,419 @@ +#!/bin/bash + +IN_RATE="4900" +OUT_RATE="460" + +wlan="vlan24" +kabel="bond0" +manage="vlan42" +pppoe="vlan22" +outside="ppp0" +freifunk="vlan23" + +imq_in="imq0" +#imq_out="imq1" +imq_out="ppp0" + +#IPTABLES="/usr/sbin/iptables" +#IP6TABLES="/usr/sbin/ip6tables" +IPTABLES="my_iptables" +IP6TABLES="my_ip6tables" +IP="/sbin/ip" +#TC="/sbin/tc" +TC="my_tc" +modules="ip_conntrack ip6_conntrack ip_nat_ftp ip_nat_irc ip_nat_tftp" + +# helper functions +my_iptables() { + #echo "iptables $@" + /usr/sbin/iptables "$@" || echo "failed: iptables $@" +} +my_ip6tables() { + #echo "ip6tables $@" + /usr/sbin/ip6tables "$@" || echo "failed: ip6tables $@" +} +my_tc() { + /sbin/tc "$@" || echo "failed: tc $@" +} +DROP() { + local chain="$1" + shift + $IPTABLES -A "$chain" $@ -m limit --limit 3/s -j LOG --log-prefix "$chain " + $IPTABLES -A "$chain" $@ -j DROP +} +ACCEPT() { + local chain="$1" + shift + $IPTABLES -A "$chain" $@ -j ACCEPT +} +RETURN() { + local chain="$1" + shift + $IPTABLES -A "$chain" $@ -j RETURN +} +DROP6() { + local chain="$1" + shift + $IP6TABLES -A "$chain" $@ -j LOG --log-prefix "$chain " + $IP6TABLES -A "$chain" $@ -j DROP +} +ACCEPT6() { + local chain="$1" + shift + $IP6TABLES -A "$chain" $@ -j ACCEPT +} +RETURN6() { + local chain="$1" + shift + $IP6TABLES -A "$chain" $@ -j RETURN +} + +# chaos-vpn restart first +echo "reload chaosvpn" +/usr/local/bin/chaosvpn-client.pl + +# flush it +echo "play with iptables" +$IPTABLES -t nat -F +$IPTABLES -t mangle -F +$IPTABLES -t filter -F +$IP6TABLES -t mangle -F +$IP6TABLES -t filter -F +$IPTABLES -t nat -X +$IPTABLES -t mangle -X +$IPTABLES -t filter -X +$IP6TABLES -t mangle -X +$IP6TABLES -t filter -X + +# load modules +for m in $modules ; do + modprobe "$m" +done + +# sysctls +echo 65535 >/proc/sys/net/ipv4/ip_conntrack_max +echo 1 >/proc/sys/net/ipv4/ip_forward + +# generic imq init +/sbin/modprobe imq +$IP link set $imq_in up +$IP link set $imq_out up + +# anti spoof ipv4 +$IPTABLES -N antispoof +RETURN antispoof -i $freifunk -s 172.16.1.100/32 # do not look ,) +RETURN antispoof -i lo +RETURN antispoof -i ppp0 +RETURN antispoof -i chaos_vpn +RETURN antispoof -i tap0 +RETURN antispoof -s 0.0.0.0/32 +RETURN antispoof -i bond0 -s 172.16.0.0/22 +RETURN antispoof -i vlan22 -s 192.168.178.0/24 +RETURN antispoof -i vlan23 -s 10.0.0.0/8 +RETURN antispoof -i vlan24 -s 172.16.4.0/22 +RETURN antispoof -i vlan25 -s 172.16.25.0/24 +RETURN antispoof -i vlan42 -s 172.16.42.0/24 +DROP antispoof + +# anti spoof ipv6 +$IP6TABLES -N antispoof6 +RETURN6 antispoof6 -s ::/128 +RETURN6 antispoof6 -i lo +RETURN6 antispoof6 -i ppp0 +RETURN6 antispoof6 -i chaos_vpn +RETURN6 antispoof6 -i tap0 +RETURN6 antispoof6 -i bond0 -s 2001:748:306::/64 +RETURN6 antispoof6 -i vlan22 -s 2001:748:306:22::/64 +RETURN6 antispoof6 -i vlan23 -s 2001:748:306:23::/64 +RETURN6 antispoof6 -i vlan24 -s 2001:748:306:24::/64 +RETURN6 antispoof6 -i vlan25 -s 2001:748:306:25::/64 +RETURN6 antispoof6 -i vlan42 -s 2001:748:306:42::/64 +RETURN6 antispoof6 -s fe80::/16 +DROP6 antispoof6 + +# router direct filtering ipv4 +$IPTABLES -A INPUT -j antispoof +ACCEPT INPUT -i lo +$IPTABLES -A INPUT -i $outside -m state --state NEW -j DROP +$IPTABLES -A INPUT -p tcp --dport 135:139 -j DROP +$IPTABLES -A INPUT -p udp --dport 135:139 -j DROP +ACCEPT INPUT -m state --state ESTABLISHED,RELATED +ACCEPT INPUT -p udp --dport 53 +ACCEPT INPUT -p tcp --dport 53 +ACCEPT INPUT -p udp --dport 67:68 +ACCEPT INPUT -p tcp --dport 80 +ACCEPT INPUT -p tcp --dport 2121 +#ACCEPT INPUT -p tcp --dport 40000:40999 +#ACCEPT INPUT -p tcp --dport 41000:41999 +ACCEPT INPUT -p tcp --dport 3128 +ACCEPT INPUT -p udp --dport 123 +ACCEPT INPUT -p tcp --dport 22 -i $manage +ACCEPT INPUT -p udp --dport 161 -i $manage +ACCEPT INPUT -p icmp --icmp-type echo-request +ACCEPT INPUT -p udp -i $freifunk --dport 698 # olsr +ACCEPT INPUT -p udp -i $wlan --dport 698 # olsr +ACCEPT INPUT -p udp -i $kabel --dport 698 # olsr +ACCEPT INPUT -p udp --dport 5198:5199 +$IPTABLES -A INPUT -p udp --dport 192 -j DROP # we don't want to see this junk +$IPTABLES -A INPUT -p udp --dport 1900 -j DROP # we don't want to see this junk +$IPTABLES -A INPUT -i $outside -j DROP +DROP INPUT + +# router direct filtering ipv6 +$IP6TABLES -A INPUT -j antispoof6 +ACCEPT6 INPUT -i lo +$IP6TABLES -A INPUT -i $outside -m state --state NEW -j DROP +$IP6TABLES -A INPUT -p tcp --dport 135:139 -j DROP +$IP6TABLES -A INPUT -p udp --dport 135:139 -j DROP +ACCEPT6 INPUT -m state --state ESTABLISHED,RELATED +ACCEPT6 INPUT -s 0/0 -d ff02::/16 +ACCEPT6 INPUT -p udp --dport 53 +ACCEPT6 INPUT -p tcp --dport 53 +ACCEPT6 INPUT -p udp --dport 67:68 +ACCEPT6 INPUT -p tcp --dport 80 +ACCEPT6 INPUT -p tcp --dport 2121 +ACCEPT6 INPUT -p tcp --dport 3128 +ACCEPT6 INPUT -p udp --dport 123 +ACCEPT6 INPUT -p tcp --dport 22 -i $manage +ACCEPT6 INPUT -p tcp --dport 22 -s 2001:6F8:975::/48 +ACCEPT6 INPUT -p tcp --dport 22 -s 2001:6F8:94B::/48 +ACCEPT6 INPUT -p tcp --dport 22 -s 2001:6f8:900:0049::2/128 +ACCEPT6 INPUT -p udp --dport 161 -i $manage +ACCEPT6 INPUT -p icmpv6 +ACCEPT6 INPUT -p udp -i $freifunk --dport 698 # olsr +ACCEPT6 INPUT -p udp -i $wlan --dport 698 # olsr +ACCEPT6 INPUT -p udp -i $kabel --dport 698 # olsr +$IP6TABLES -A INPUT -p udp --dport 192 -j DROP +$IP6TABLES -A INPUT -p udp --dport 1900 -j DROP +$IP6TABLES -A INPUT -i $outside -j DROP +DROP6 INPUT + +# router output ipv4 +ACCEPT OUTPUT -o lo +ACCEPT OUTPUT -p udp --dport 67:68 +ACCEPT OUTPUT -p udp --sport 53 +ACCEPT OUTPUT -p tcp --sport 53 +ACCEPT OUTPUT -m state --state NEW,ESTABLISHED,RELATED +DROP OUTPUT + +# router output ipv6 +ACCEPT6 OUTPUT -o lo +ACCEPT6 OUTPUT -s fe80::/16 +ACCEPT6 OUTPUT -d ff02::/16 +ACCEPT6 OUTPUT -p udp --dport 67:68 +ACCEPT6 OUTPUT -p udp --sport 53 +ACCEPT6 OUTPUT -p tcp --sport 53 +ACCEPT6 OUTPUT -p icmpv6 +ACCEPT6 OUTPUT -m state --state NEW,ESTABLISHED,RELATED +DROP6 OUTPUT + +# p2pblock +$IPTABLES -N p2pblock +DROP p2pblock -m mark --mark 2342 +# - no drop, we use shaping now +#DROP p2pblock -p tcp --dport 5025 +#DROP p2pblock -p tcp --dport 6346 +#DROP p2pblock -p tcp --dport 6347 +#DROP p2pblock -p udp --dport 6346 +#DROP p2pblock -p udp --dport 6347 +#DROP p2pblock -p tcp --dport 4660:4669 +#DROP p2pblock -p udp --dport 4660:4669 +#DROP p2pblock -p tcp --sport 4660:4669 +#DROP p2pblock -p udp --sport 4660:4669 +#DROP p2pblock -p tcp --dport 1214 +#DROP p2pblock -p udp --dport 1214 +#DROP p2pblock -p tcp --sport 1214 +#DROP p2pblock -p udp --sport 1214 +#DROP p2pblock -p tcp --dport 1234 +#DROP p2pblock -p tcp --dport 5498 +#DROP p2pblock -p tcp --dport 5499 +#DROP p2pblock -p tcp --dport 5500 +#DROP p2pblock -p tcp --dport 5501 +#DROP p2pblock -p tcp --dport 6699 +DROP p2pblock -d 64.245.58.0/24 +DROP p2pblock -d 64.245.59.0/24 +DROP p2pblock -d 216.35.208.0/24 +DROP p2pblock -d 209.25.178.0/24 +DROP p2pblock -d 209.61.186.0/24 +DROP p2pblock -d 64.49.201.0/24 +RETURN p2pblock + +# forwarding ipv4 +$IPTABLES -A FORWARD -p tcp --tcp-flags SYN,RST SYN -j TCPMSS --clamp-mss-to-pmtu +$IPTABLES -A FORWARD -j antispoof +$IPTABLES -A FORWARD -i $outside -j p2pblock +$IPTABLES -A FORWARD -o $outside -j p2pblock +ACCEPT FORWARD -o $manage -d 172.16.42.3/32 -p tcp --dport 80 -m state --state NEW +DROP FORWARD -o $manage -m state --state NEW +ACCEPT FORWARD -i $manage -o $pppoe -m state --state NEW +DROP FORWARD -o $pppoe -m state --state NEW +ACCEPT FORWARD + +# forwarding ipv6 +$IP6TABLES -A FORWARD -j antispoof6 +ACCEPT6 FORWARD -o $manage -d 2001:748:306:42::2/128 -p tcp --dport 80 -m state --state NEW +DROP6 FORWARD -o $manage -m state --state NEW +ACCEPT6 FORWARD -i $manage -o $pppoe -m state --state NEW +DROP6 FORWARD -o $pppoe -m state --state NEW +ACCEPT6 FORWARD + +# enable nat +$IPTABLES -t nat -A PREROUTING -p tcp --dport 80 -d 172.16.0.0/12 -j ACCEPT +$IPTABLES -t nat -A PREROUTING -p tcp --dport 80 -d 10.0.0.0/8 -j ACCEPT +$IPTABLES -t nat -A PREROUTING -p tcp --dport 80 -d 192.168.0.0/8 -j ACCEPT +$IPTABLES -t nat -A PREROUTING -p tcp --dport 80 -d 127.0.0.0/8 -j ACCEPT +$IPTABLES -t nat -A PREROUTING -i $wlan -p tcp --dport 80 -j REDIRECT --to-port 80 +$IPTABLES -t nat -A PREROUTING -i $kabel -p tcp --dport 80 -j REDIRECT --to-port 80 +$IPTABLES -t nat -A PREROUTING -i $freifunk -p tcp --dport 80 -j REDIRECT --to-port 80 +$IPTABLES -t nat -A PREROUTING -i $wlan -p tcp --dport 80 -j REDIRECT --to-port 80 +$IPTABLES -t nat -A PREROUTING -i $manage -p tcp --dport 80 -j REDIRECT --to-port 80 +$IPTABLES -t nat -A PREROUTING -i $outside -p udp --dport 5198:5199 -j DNAT --to-destination 172.16.25.99 +#$IPTABLES -t nat -A PREROUTING -p tcp --dport 21 -d 172.16.0.0/12 -j ACCEPT +#$IPTABLES -t nat -A PREROUTING -p tcp --dport 21 -d 10.0.0.0/8 -j ACCEPT +#$IPTABLES -t nat -A PREROUTING -p tcp --dport 21 -d 192.168.0.0/8 -j ACCEPT +#$IPTABLES -t nat -A PREROUTING -p tcp --dport 21 -d 127.0.0.0/8 -j ACCEPT +#$IPTABLES -t nat -A PREROUTING -i $wlan -p tcp --dport 21 -j REDIRECT --to-port 2121 +#$IPTABLES -t nat -A PREROUTING -i $kabel -p tcp --dport 21 -j REDIRECT --to-port 2121 +#$IPTABLES -t nat -A PREROUTING -i $freifunk -p tcp --dport 21 -j REDIRECT --to-port 2121 +#$IPTABLES -t nat -A PREROUTING -i $wlan -p tcp --dport 21 -j REDIRECT --to-port 2121 +#$IPTABLES -t nat -A PREROUTING -i $manage -p tcp --dport 21 -j REDIRECT --to-port 2121 +$IPTABLES -t nat -A POSTROUTING -o $outside -j MASQUERADE + +# marks for p2p +$IPTABLES -t mangle -N p2pblock +$IPTABLES -t mangle -A p2pblock -m mark --mark 2342 -j RETURN # already classified as p2p +$IPTABLES -t mangle -A p2pblock -m ipp2p --ipp2p -j MARK --set-mark 2342 +$IPTABLES -t mangle -A p2pblock -o $outside -p tcp --dport 6881 -j MARK --set-mark 2342 +$IPTABLES -t mangle -A p2pblock -i $outside -p tcp --sport 6881 -j MARK --set-mark 2342 +$IPTABLES -t mangle -A p2pblock -j RETURN + +# set marks for shaping +# generic rules first, specific later +$IPTABLES -t mangle -N shaping +#$IPTABLES -t mangle -A shaping -m mark \! --mark 0 -j RETURN # already classified +$IPTABLES -t mangle -A shaping -m mark --mark 2342 -j RETURN # already classified +$IPTABLES -t mangle -A shaping -s 194.97.108.53/32 -j MARK --set-mark 15 +$IPTABLES -t mangle -A shaping -s 194.97.108.53/32 -j RETURN +$IPTABLES -t mangle -A shaping -d 194.97.108.53/32 -j MARK --set-mark 15 +$IPTABLES -t mangle -A shaping -d 194.97.108.53/32 -j RETURN +#icmp + $IPTABLES -t mangle -A shaping -p icmp -j MARK --set-mark 12 + $IPTABLES -t mangle -A shaping -p icmp --icmp-type echo-request -j MARK --set-mark 13 + $IPTABLES -t mangle -A shaping -p icmp --icmp-type echo-reply -j MARK --set-mark 13 + $IPTABLES -t mangle -A shaping -p icmp -j RETURN # icmp done +# tcp + $IPTABLES -t mangle -A shaping -p tcp -j MARK --set-mark 10 + $IPTABLES -t mangle -A shaping -p tcp --dport 6667:6669 -j MARK --set-mark 14 # normal 14 + $IPTABLES -t mangle -A shaping -p tcp --sport 6667:6669 -j MARK --set-mark 14 # normal 14 + for m in 21 22 53 80 119 443 ; do + $IPTABLES -t mangle -A shaping -p tcp --dport $m -j MARK --set-mark $m + $IPTABLES -t mangle -A shaping -p tcp --sport $m -j MARK --set-mark $m + done + $IPTABLES -t mangle -A shaping -p tcp -m helper --helper ftp -j MARK --set-mark 21 + $IPTABLES -t mangle -A shaping -p tcp -m length --length 1:150 -j MARK --set-mark 16 + $IPTABLES -t mangle -A shaping -p tcp --dport 22 -m tos --tos Minimize-Delay -m length --length 0:256 -j MARK --set-mark 14 + $IPTABLES -t mangle -A shaping -p tcp --sport 22 -m tos --tos Minimize-Delay -m length --length 0:256 -j MARK --set-mark 14 + $IPTABLES -t mangle -A shaping -p tcp -j RETURN +# misc protocols + $IPTABLES -t mangle -A shaping -p 47 -j MARK --set-mark 11 # gre / pptp + $IPTABLES -t mangle -A shaping -p 50 -j MARK --set-mark 11 # ipsec esp + $IPTABLES -t mangle -A shaping -p 51 -j MARK --set-mark 11 # ipsec ah +# udp + $IPTABLES -t mangle -A shaping -p udp -j MARK --set-mark 11 + for m in 53 ; do + $IPTABLES -t mangle -A shaping -p udp --dport $m -j MARK --set-mark $m + $IPTABLES -t mangle -A shaping -p udp --sport $m -j MARK --set-mark $m + done + $IPTABLES -t mangle -A shaping -p udp -j RETURN +# leftovers + $IPTABLES -t mangle -A shaping -j MARK --set-mark 42 + $IPTABLES -t mangle -A shaping -j RETURN + +# generic mangle +$IPTABLES -t mangle -A PREROUTING -j CONNMARK --restore-mark +$IPTABLES -t mangle -A PREROUTING -j p2pblock +$IPTABLES -t mangle -A PREROUTING -j CONNMARK --save-mark +$IPTABLES -t mangle -A PREROUTING -i $outside -j IMQ --todev 0 +$IPTABLES -t mangle -A FORWARD -j CONNMARK --restore-mark +$IPTABLES -t mangle -A FORWARD -i $outside -j shaping +$IPTABLES -t mangle -A FORWARD -o $outside -j shaping +$IPTABLES -t mangle -A FORWARD -j CONNMARK --save-mark +$IPTABLES -t mangle -A INPUT -j CONNMARK --restore-mark +$IPTABLES -t mangle -A INPUT -i $outside -j shaping +$IPTABLES -t mangle -A INPUT -j CONNMARK --save-mark +$IPTABLES -t mangle -A OUTPUT -j CONNMARK --restore-mark +$IPTABLES -t mangle -A OUTPUT -o $outside -j shaping +$IPTABLES -t mangle -A OUTPUT -j CONNMARK --save-mark +$IPTABLES -t mangle -A POSTROUTING -j CONNMARK --restore-mark +#$IPTABLES -t mangle -A POSTROUTING -o $outside -j IMQ --todev 1 + + +# INPUT SHAPING QUEUES +$TC qdisc del dev $imq_in root +$TC qdisc add dev $imq_in root handle 1: htb default 42 +$TC class add dev $imq_in parent 1: classid 1:1 htb rate "${IN_RATE}Kbit" quantum 1500 +$TC class add dev $imq_in parent 1:1 classid 1:42 htb rate 64kbit ceil 256kbit quantum 1500 prio 6 +$TC class add dev $imq_in parent 1:1 classid 1:2342 htb rate 8kbit ceil 8kbit quantum 1500 prio 20 +$TC class add dev $imq_in parent 1:1 classid 1:10 htb rate 500kbit ceil 2000kbit quantum 1500 prio 6 +$TC class add dev $imq_in parent 1:1 classid 1:11 htb rate 500kbit ceil 2000kbit quantum 1500 prio 6 +$TC class add dev $imq_in parent 1:1 classid 1:12 htb rate 32kbit ceil 128kbit quantum 1500 prio 5 +$TC class add dev $imq_in parent 1:1 classid 1:13 htb rate 32kbit ceil 128kbit quantum 1500 prio 4 +$TC class add dev $imq_in parent 1:1 classid 1:14 htb rate 512kbit ceil 4000kbit quantum 1500 prio 3 +$TC class add dev $imq_in parent 1:1 classid 1:15 htb rate 1024kbit ceil 4000kbit quantum 1500 prio 3 +$TC class add dev $imq_in parent 1:1 classid 1:16 htb rate 512kbit ceil 4000kbit quantum 1500 prio 4 +$TC class add dev $imq_in parent 1:1 classid 1:21 htb rate 512kbit ceil 4000kbit quantum 1500 prio 7 +$TC class add dev $imq_in parent 1:1 classid 1:22 htb rate 512kbit ceil 4000kbit quantum 1500 prio 5 +$TC class add dev $imq_in parent 1:1 classid 1:53 htb rate 64kbit ceil 512kbit quantum 1500 prio 0 +$TC class add dev $imq_in parent 1:1 classid 1:80 htb rate 1000kbit ceil 4000kbit quantum 1500 prio 6 +$TC class add dev $imq_in parent 1:1 classid 1:119 htb rate 32kbit ceil 64kbit quantum 1500 prio 20 +$TC class add dev $imq_in parent 1:1 classid 1:443 htb rate 1000kbit ceil 4000kbit quantum 1500 prio 5 +for c in 42 2342 10 11 12 13 14 15 16 21 22 53 80 119 443 ; do + # sfq fuer alle + $TC qdisc add dev $imq_in parent 1:$c handle $c: sfq perturb 10 + # filter by fwmark + $TC filter add dev $imq_in parent 1:0 prio 0 protocol ip handle $c fw flowid 1:$c +done + +# OUTPUT SHAPING QUEUES +$TC qdisc del dev $imq_out root +$TC qdisc add dev $imq_out root handle 1: htb default 42 +$TC class add dev $imq_out parent 1: classid 1:1 htb rate "${OUT_RATE}Kbit" #quantum 1500 +$TC class add dev $imq_out parent 1:1 classid 1:42 htb rate 6kbit ceil 64kbit #quantum 1500 prio 6 +$TC class add dev $imq_out parent 1:1 classid 1:2342 htb rate 1kbit ceil 1kbit #quantum 1500 prio 20 +$TC class add dev $imq_out parent 1:1 classid 1:10 htb rate 50kbit ceil 200kbit #quantum 1500 prio 6 +$TC class add dev $imq_out parent 1:1 classid 1:11 htb rate 50kbit ceil 200kbit #quantum 1500 prio 6 +$TC class add dev $imq_out parent 1:1 classid 1:12 htb rate 32kbit ceil 128kbit #quantum 1500 prio 5 +$TC class add dev $imq_out parent 1:1 classid 1:13 htb rate 32kbit ceil 128kbit #quantum 1500 prio 3 +$TC class add dev $imq_out parent 1:1 classid 1:14 htb rate 76kbit ceil 300kbit #quantum 1500 prio 4 +$TC class add dev $imq_out parent 1:1 classid 1:15 htb rate 76kbit ceil 300kbit #quantum 1500 prio 4 +$TC class add dev $imq_out parent 1:1 classid 1:16 htb rate 76kbit ceil 300kbit #quantum 1500 prio 4 +$TC class add dev $imq_out parent 1:1 classid 1:21 htb rate 76kbit ceil 300kbit #quantum 1500 prio 7 +$TC class add dev $imq_out parent 1:1 classid 1:22 htb rate 32kbit ceil 300kbit #quantum 1500 prio 5 +$TC class add dev $imq_out parent 1:1 classid 1:53 htb rate 64kbit ceil 52kbit #quantum 1500 prio 0 +$TC class add dev $imq_out parent 1:1 classid 1:80 htb rate 64kbit ceil 300kbit #quantum 1500 prio 6 +$TC class add dev $imq_out parent 1:1 classid 1:119 htb rate 32kbit ceil 64kbit #quantum 1500 prio 20 +$TC class add dev $imq_out parent 1:1 classid 1:443 htb rate 10kbit ceil 300kbit #quantum 1500 prio 5 +for c in 42 2342 10 11 12 13 14 15 16 21 22 53 80 119 443 ; do + # sfq fuer alle + $TC qdisc add dev $imq_out parent 1:$c handle $c: sfq perturb 10 + # filter by fwmark + $TC filter add dev $imq_out parent 1:0 prio 0 protocol ip handle $c fw flowid 1:$c +done + + +echo "switching pppd to realtime..." +/usr/bin/chrt --rr -p 99 `cat /var/run/ppp0.pid` +echo "done." + +echo "switching pppoe to realtime..." +/usr/bin/chrt --rr -p 99 `ps auxw| grep pppoe | awk '{print $2}'|head -n 1` +echo "done." + +#echo "starting Wondershaper..." +#/etc/init.d/wshaper +#echo "done starting Wondershaper..:" +# KILL WONDERSHAPER LEFTOVERS +#$TC qdisc del dev $outside root >/dev/null 2>&1 +$TC qdisc del dev imq1 root >/dev/null 2>&1 + +exit 0 diff --git a/orga.php b/orga.php new file mode 100644 index 0000000..296ff2c --- /dev/null +++ b/orga.php @@ -0,0 +1,1768 @@ + continue + = FAIL => Session-Zwangslogout, Abbruchmeldung und Schlußverarbeitung + + Prüfung auf gültigen Loginstatus, inkl. Timeout + = OK => continue + = FAIL => Authentifizierungsformular, Abbruchmeldung und Schlußverarbeitung + + Prüfung auf Wartungsstatus + = OK => continue + = FAIL => Abbruchmeldung und Schlußverarbeitung + + Login + = OK => continue + = FAIL => Authentifizierungsformular, Abbruchmeldung und Schlußverarbeitung + + Verarbeitung der Submit-Aktionen (POST), Anzeige der einzelnen Orga-Formulare +*/ + + +/* + known bugs / todo + + - Script rennt in einen Loop-of-Death, wenn man auf einen Button klickt, + während die Seite (z.B. wegen dem Fahrplan-Editor) noch nicht fertig aufgebaut war + -> Session hängt sich auf. + + Dieses Problem taucht auf webtest.hamburg.ccc.de auf, + ist aber lokal (auf Rainers Notebook) nicht reproduzierbar. + -> php-Version oder "nur" Config-Problem? (deadlock-timeout?) + +*/ + + + + +// this script needs following additional server modules for PHP +// - Database: (e.g. pgsql) + + +// write HTTP header (anti-cache) +header('Expires: Sun, 31 Dec 1989 23:59:59 GMT'); +header('Last-Modified: ' . gmdate('D, d M Y H:i:s') . ' GMT'); +header('Cache-Control: no-store, no-cache, must-revalidate'); +header('Cache-Control: post-check=0, pre-check=0'); +header('Pragma: no-cache'); + + +// recall session +session_cache_limiter('nocache'); +session_cache_expire (1); +session_start(); + + +// include library files +// ja genau, die ist hier jetzt auch direkt aus dem htdocs abrufbar; +// ist aber egal, denn da steht nix kritisches drin und die Seite ist auch rein passiv +require("inc_db.php"); + +// define general server constants +define( "SERVER_SITE_MAINTENANCE", false ); // maintenance state, set to TRUE to lock this page temporarily +define( "SERVER_LOCALHOST_IP", "127.0.0.1" ); // localhost IP, which does not need authentication +define( "SERVER_PROTOCOL_HTTPS", "HTTPS" ); // HTTPS protocol name + + +// define server file constants +define( "SERVER_FILE_MYSELF", "orga.php" ); // submit target of forms = this file itself +define( "SERVER_FILE_TEMPLATE", "template.shtml" ); // template file +define( "SERVER_FILE_WORKSHOPS", "workshops.shtml" ); // workshops file +define( "SERVER_FILE_FAHRPLAN", "fahrplan.shtml" ); // fahrplan file +define( "SERVER_FILE_HEADER", "ssi_site_header.html" ); // SSI file for site header +define( "SERVER_FILE_INTRO", "ssi_site_intro.html" ); // SSI file for site intro +define( "SERVER_FILE_EXTRO", "ssi_site_extro.html" ); // SSI file for site extro +define( "SERVER_FILE_AUTOGEN", "ssi_site_autogen.html" ); // SSI file for site autogeneration warning + +// define display constants +define( "DISPLAY_TEXT_NONE", " " ); +define( "DISPLAY_VALUE_SEPARATOR", chr(9)); + +// define auth constants +define( "AUTH_TIMEOUT_MINUTES", 10 ); // idle timeout for login session +define( "AUTH_SERVER_PASS", "?AdminOsterhase#2007" ); // login password, [todo:] should be outsourced to an external, secured data file + +// define constants for database data +define( "DB_ID_NONE", 0 ); +define( "DB_ID_NEW", -1 ); + +// define constants for database access +// define SERVER_DB_TYPE as supported type in library db.php +define( "SERVER_DB_TYPE", constant("DB_TYPE_POSTGRESQL") ); +define( "SERVER_DB_HOST", "localhost" ); +define( "SERVER_DB_PORT", 5432 ); +define( "SERVER_DB_NAME", "eh2007" ); +define( "SERVER_DB_USER", "eh2007" ); +define( "SERVER_DB_PASS", "Osterhase2007" ); // + + + +// init references to $_SESSION variables ($sxxx) +$sbolauthloggedin = & $_SESSION['bolauthloginok']; +$sintauthprevtime = & $_SESSION['intauthprevtime']; + +// init session variables +if ( !isset($sbolauthloggedin) ) $sbolauthloggedin = false; +if ( !isset($sintauthprevtime) ) $sintauthprevtime = time(); + + +// init references to $_POST variables ($pxxx) +$pstrauth = & $_POST['txtauth']; +$pbollogin = & $_POST['cmdlogin']; +$pbollogout = & $_POST['cmdlogout']; +$pbolmakeworkshops = & $_POST['cmdmakeworkshops']; +$pbolmakefahrplan = & $_POST['cmdmakefahrplan']; +$pbolrunsql = & $_POST['cmdrunsql']; +$pbolwsupdate = & $_POST['cmdwsupdate']; +$pbolsdactivate = & $_POST['cmdsdactivate']; +$pbolsdupdate = & $_POST['cmdsdupdate']; +$plstschedule = & $_POST['cboschedule']; + +$pintwsid = & $_POST['txtwsid']; +if ( !isset( $pintwsid ) ) { $pintwsid = & $_POST['cboworkshop']; } +$pstrwsname = & $_POST['txtwsname']; +$pstrwsspeakers = & $_POST['txtwsspeakers']; +$pintwsduration = & $_POST['txtwsduration']; +$pstrwscontent = & $_POST['txtwscontent']; +$pstrwscomment = & $_POST['txtwscomment']; +$pstrsql = & $_POST['txtsql']; + +// init post variables (only for mandatory variables, ignore variables submitted by special forms!) +if ( !isset($pstrauth) ) $pstrauth = ''; +if ( !isset($pintwsid) ) $pintwsid = constant("DB_ID_NONE"); +if ( !isset($pstrwsname) ) $pstrwsname = ''; +if ( !isset($pstrwsspeakers) ) $pstrwsspeakers = ''; +if ( !isset($pintwsduration) ) $pintwsduration = 0; +if ( !isset($pstrwscontent) ) $pstrwscontent = ''; +if ( !isset($pstrwscomment) ) $pstrwscomment = ''; +if ( !isset($pstrsql) ) $pstrsql = ''; +if ( !isset($plstschedule) ) $plstschedule = array(); + + +// init instance variables +$intnow = time(); + +$strmsg = ''; // (status/error/etc.) message to user +$bolauthabort = false; // auth check will be aborted: show authentication page +$bolauthlogoutnow = false; // user will be logged out + +$intdbconnid = 0; +$intdbresult = 0; +$lngdbrows = 0; +$strdbfields = array(); +$strdberror = ''; +$strdbsql = ''; +$strdbrow = ''; +$strdbsql2 = ''; + +$strweekdayname = array (0 => 'Sonntag', + 1 => 'Montag', + 2 => 'Dienstag', + 3 => 'Mittwoch', + 4 => 'Donnerstag', + 5 => 'Freitag', + 6 => 'Samstag'); + +$strvalue = ''; +$intindex = 0; +$intcolrotate = 1; +$strinput = ''; +$stroutput = ''; +$intfileid = 0; +$intcount = 0; + +$strauth = ''; +$bollogin = false; +$bollogout = false; +$bolmakefahrplan = false; +$bolmakeworkshops = false; +$bolrunsql = false; +$bolwsupdate = false; +$bolsdactivate = false; +$bolsdupdate = false; + +$strtablehead = ''; +$intcolrot = 0; +$intsdyear = 0; +$intsdmonth = 0; +$intsdday = 0; +$intsdhour = 0; +$strroname = ''; +$boleof = false; +$strworkshoplist = ''; +$intwsid = constant("DB_ID_NONE"); +$strwsname = ''; +$strwsspeakers = ''; +$intwsduration = 0; +$strwscontent = ''; +$strwscomment = ''; +$strsql= ''; +$strdbfields = ''; +$lstschedule = array(); +$strscheduleindex = ''; +$intscheduleindex = constant("DB_ID_NONE"); +$intschedulevalue = constant("DB_ID_NONE"); + +$bolok = false; // action feedback, triggers confirmation if true or warning if false + + +// function library + +function addmsg ($straddmsg) +{ + // adds $straddmsg to $strmsg + global $strmsg; + if ( $straddmsg != '' ) + { + $strmsg = $strmsg . '
  • ' . $straddmsg . '
  • '; + } +} + +function showmsg () +{ + // shows messages in $strmsg if available + global $strmsg, $bolok; + if ( $strmsg != '' ) + { + echo + ' +
    +

    Feedback

    +
      ' . $strmsg . '
    +
    + '; + $strmsg = ''; + $bolok = false; + } +} + +function selectws ( $intwsid ) +{ + // selects workshop with $intwsid of $strworkshoplist + global $strworkshoplist; + + return str_replace( '