packet_via_dmem 0.0.0

Sign up to get free protection for your applications and to get access to all the features.
@@ -0,0 +1,7 @@
1
+ ---
2
+ SHA1:
3
+ metadata.gz: c91bd72301863ca9092e643890091fce9b9387ac
4
+ data.tar.gz: f60d3d27a871d6e6b18fce2e8cb8464890bb4a66
5
+ SHA512:
6
+ metadata.gz: d22df958223f3f66373060765fcc3619f2055119613c89244e98238b5dec7376d9f312bfadc0f847c4280b30a215815cf44ff9e13eebd82c690c737f1937f716
7
+ data.tar.gz: 218cde3c052d3418b7c667b3b50ca25dce497931db7e07c3102c66022c3e66999039ca59e63d1ea57e4e9a0fe7a8553265ad3d0f9e99a7688c2e6e8e2c3a1461
@@ -0,0 +1,2 @@
1
+ gems
2
+ cfg*
data/Gemfile ADDED
@@ -0,0 +1,428 @@
1
+
2
+
3
+
4
+
5
+ <!DOCTYPE html>
6
+ <html lang="en" class="">
7
+ <head prefix="og: http://ogp.me/ns# fb: http://ogp.me/ns/fb# object: http://ogp.me/ns/object# article: http://ogp.me/ns/article# profile: http://ogp.me/ns/profile#">
8
+ <meta charset='utf-8'>
9
+ <meta http-equiv="X-UA-Compatible" content="IE=edge">
10
+ <meta http-equiv="Content-Language" content="en">
11
+
12
+
13
+ <title>ring-sqa/Gemfile at master · NLNOG/ring-sqa · GitHub</title>
14
+ <link rel="search" type="application/opensearchdescription+xml" href="/opensearch.xml" title="GitHub">
15
+ <link rel="fluid-icon" href="https://github.com/fluidicon.png" title="GitHub">
16
+ <link rel="apple-touch-icon" sizes="57x57" href="/apple-touch-icon-114.png">
17
+ <link rel="apple-touch-icon" sizes="114x114" href="/apple-touch-icon-114.png">
18
+ <link rel="apple-touch-icon" sizes="72x72" href="/apple-touch-icon-144.png">
19
+ <link rel="apple-touch-icon" sizes="144x144" href="/apple-touch-icon-144.png">
20
+ <meta property="fb:app_id" content="1401488693436528">
21
+
22
+ <meta content="@github" name="twitter:site" /><meta content="summary" name="twitter:card" /><meta content="NLNOG/ring-sqa" name="twitter:title" /><meta content="ring-sqa - RING partial outage monitor" name="twitter:description" /><meta content="https://avatars3.githubusercontent.com/u/2427817?v=3&amp;s=400" name="twitter:image:src" />
23
+ <meta content="GitHub" property="og:site_name" /><meta content="object" property="og:type" /><meta content="https://avatars3.githubusercontent.com/u/2427817?v=3&amp;s=400" property="og:image" /><meta content="NLNOG/ring-sqa" property="og:title" /><meta content="https://github.com/NLNOG/ring-sqa" property="og:url" /><meta content="ring-sqa - RING partial outage monitor" property="og:description" />
24
+
25
+ <meta name="browser-stats-url" content="/_stats">
26
+ <link rel="assets" href="https://assets-cdn.github.com/">
27
+ <link rel="conduit-xhr" href="https://ghconduit.com:25035">
28
+
29
+ <meta name="pjax-timeout" content="1000">
30
+
31
+
32
+ <meta name="msapplication-TileImage" content="/windows-tile.png">
33
+ <meta name="msapplication-TileColor" content="#ffffff">
34
+ <meta name="selected-link" value="repo_source" data-pjax-transient>
35
+ <meta name="google-analytics" content="UA-3769691-2">
36
+
37
+ <meta content="collector.githubapp.com" name="octolytics-host" /><meta content="collector-cdn.github.com" name="octolytics-script-host" /><meta content="github" name="octolytics-app-id" /><meta content="C26407E3:42ED:7480246:54BBC4C7" name="octolytics-dimension-request_id" />
38
+
39
+ <meta content="Rails, view, blob#blame" name="analytics-event" />
40
+
41
+
42
+
43
+ <link rel="icon" type="image/x-icon" href="https://assets-cdn.github.com/favicon.ico">
44
+
45
+
46
+ <meta content="authenticity_token" name="csrf-param" />
47
+ <meta content="XiutHhAHb6BqRcbR3mv8Z8J1pnCsoE+ARrtLo4JM0S8g3IlDyr/xwKxJVJecjBwooJTn5ypBjk8AyU2Cm/Wx8g==" name="csrf-token" />
48
+
49
+ <link href="https://assets-cdn.github.com/assets/github-7260055e0c41349b130992d6233e9ff4ea6a1cf3a4df3560583e3e9aeefa7d05.css" media="all" rel="stylesheet" type="text/css" />
50
+ <link href="https://assets-cdn.github.com/assets/github2-e7924c378dad46ea63ea0dde73420a00d3d5ec266553156300933053ebebdfd3.css" media="all" rel="stylesheet" type="text/css" />
51
+
52
+
53
+
54
+
55
+ <meta http-equiv="x-pjax-version" content="4890ab13c8781cbb5fe52d61c31101a9">
56
+
57
+
58
+ <meta name="description" content="ring-sqa - RING partial outage monitor">
59
+ <meta name="go-import" content="github.com/NLNOG/ring-sqa git https://github.com/NLNOG/ring-sqa.git">
60
+
61
+ <meta content="2427817" name="octolytics-dimension-user_id" /><meta content="NLNOG" name="octolytics-dimension-user_login" /><meta content="22012833" name="octolytics-dimension-repository_id" /><meta content="NLNOG/ring-sqa" name="octolytics-dimension-repository_nwo" /><meta content="true" name="octolytics-dimension-repository_public" /><meta content="false" name="octolytics-dimension-repository_is_fork" /><meta content="22012833" name="octolytics-dimension-repository_network_root_id" /><meta content="NLNOG/ring-sqa" name="octolytics-dimension-repository_network_root_nwo" />
62
+ <link href="https://github.com/NLNOG/ring-sqa/commits/master.atom" rel="alternate" title="Recent Commits to ring-sqa:master" type="application/atom+xml">
63
+
64
+ </head>
65
+
66
+
67
+ <body class="logged_out env-production vis-public">
68
+ <a href="#start-of-content" tabindex="1" class="accessibility-aid js-skip-to-content">Skip to content</a>
69
+ <div class="wrapper">
70
+
71
+
72
+
73
+
74
+
75
+
76
+
77
+ <div class="header header-logged-out" role="banner">
78
+ <div class="container clearfix">
79
+
80
+ <a class="header-logo-wordmark" href="https://github.com/" ga-data-click="(Logged out) Header, go to homepage, icon:logo-wordmark">
81
+ <span class="mega-octicon octicon-logo-github"></span>
82
+ </a>
83
+
84
+ <div class="header-actions" role="navigation">
85
+ <a class="button primary" href="/join" data-ga-click="(Logged out) Header, clicked Sign up, text:sign-up">Sign up</a>
86
+ <a class="button" href="/login?return_to=%2FNLNOG%2Fring-sqa%2Fblame%2Fmaster%2FGemfile" data-ga-click="(Logged out) Header, clicked Sign in, text:sign-in">Sign in</a>
87
+ </div>
88
+
89
+ <div class="site-search repo-scope js-site-search" role="search">
90
+ <form accept-charset="UTF-8" action="/NLNOG/ring-sqa/search" class="js-site-search-form" data-global-search-url="/search" data-repo-search-url="/NLNOG/ring-sqa/search" method="get"><div style="margin:0;padding:0;display:inline"><input name="utf8" type="hidden" value="&#x2713;" /></div>
91
+ <input type="text"
92
+ class="js-site-search-field is-clearable"
93
+ data-hotkey="s"
94
+ name="q"
95
+ placeholder="Search"
96
+ data-global-scope-placeholder="Search GitHub"
97
+ data-repo-scope-placeholder="Search"
98
+ tabindex="1"
99
+ autocapitalize="off">
100
+ <div class="scope-badge">This repository</div>
101
+ </form>
102
+ </div>
103
+
104
+ <ul class="header-nav left" role="navigation">
105
+ <li class="header-nav-item">
106
+ <a class="header-nav-link" href="/explore" data-ga-click="(Logged out) Header, go to explore, text:explore">Explore</a>
107
+ </li>
108
+ <li class="header-nav-item">
109
+ <a class="header-nav-link" href="/features" data-ga-click="(Logged out) Header, go to features, text:features">Features</a>
110
+ </li>
111
+ <li class="header-nav-item">
112
+ <a class="header-nav-link" href="https://enterprise.github.com/" data-ga-click="(Logged out) Header, go to enterprise, text:enterprise">Enterprise</a>
113
+ </li>
114
+ <li class="header-nav-item">
115
+ <a class="header-nav-link" href="/blog" data-ga-click="(Logged out) Header, go to blog, text:blog">Blog</a>
116
+ </li>
117
+ </ul>
118
+
119
+ </div>
120
+ </div>
121
+
122
+
123
+
124
+ <div id="start-of-content" class="accessibility-aid"></div>
125
+ <div class="site" itemscope itemtype="http://schema.org/WebPage">
126
+ <div id="js-flash-container">
127
+
128
+ </div>
129
+ <div class="pagehead repohead instapaper_ignore readability-menu">
130
+ <div class="container">
131
+
132
+ <ul class="pagehead-actions">
133
+
134
+
135
+ <li>
136
+ <a href="/login?return_to=%2FNLNOG%2Fring-sqa"
137
+ class="minibutton with-count star-button tooltipped tooltipped-n"
138
+ aria-label="You must be signed in to star a repository" rel="nofollow">
139
+ <span class="octicon octicon-star"></span>
140
+ Star
141
+ </a>
142
+
143
+ <a class="social-count js-social-count" href="/NLNOG/ring-sqa/stargazers">
144
+ 2
145
+ </a>
146
+
147
+ </li>
148
+
149
+ <li>
150
+ <a href="/login?return_to=%2FNLNOG%2Fring-sqa"
151
+ class="minibutton with-count js-toggler-target fork-button tooltipped tooltipped-n"
152
+ aria-label="You must be signed in to fork a repository" rel="nofollow">
153
+ <span class="octicon octicon-repo-forked"></span>
154
+ Fork
155
+ </a>
156
+ <a href="/NLNOG/ring-sqa/network" class="social-count">
157
+ 1
158
+ </a>
159
+ </li>
160
+ </ul>
161
+
162
+ <h1 itemscope itemtype="http://data-vocabulary.org/Breadcrumb" class="entry-title public">
163
+ <span class="mega-octicon octicon-repo"></span>
164
+ <span class="author"><a href="/NLNOG" class="url fn" itemprop="url" rel="author"><span itemprop="title">NLNOG</span></a></span><!--
165
+ --><span class="path-divider">/</span><!--
166
+ --><strong><a href="/NLNOG/ring-sqa" class="js-current-repository" data-pjax="#js-repo-pjax-container">ring-sqa</a></strong>
167
+
168
+ <span class="page-context-loader">
169
+ <img alt="" height="16" src="https://assets-cdn.github.com/images/spinners/octocat-spinner-32.gif" width="16" />
170
+ </span>
171
+
172
+ </h1>
173
+ </div><!-- /.container -->
174
+ </div><!-- /.repohead -->
175
+
176
+ <div class="container">
177
+ <div class="repository-with-sidebar repo-container new-discussion-timeline ">
178
+ <div class="repository-sidebar clearfix">
179
+
180
+ <nav class="sunken-menu repo-nav js-repo-nav js-sidenav-container-pjax js-octicon-loaders"
181
+ role="navigation"
182
+ data-pjax="#js-repo-pjax-container"
183
+ data-issue-count-url="/NLNOG/ring-sqa/issues/counts">
184
+ <ul class="sunken-menu-group">
185
+ <li class="tooltipped tooltipped-w" aria-label="Code">
186
+ <a href="/NLNOG/ring-sqa" aria-label="Code" class="selected js-selected-navigation-item sunken-menu-item" data-hotkey="g c" data-selected-links="repo_source repo_downloads repo_commits repo_releases repo_tags repo_branches /NLNOG/ring-sqa">
187
+ <span class="octicon octicon-code"></span> <span class="full-word">Code</span>
188
+ <img alt="" class="mini-loader" height="16" src="https://assets-cdn.github.com/images/spinners/octocat-spinner-32.gif" width="16" />
189
+ </a> </li>
190
+
191
+ <li class="tooltipped tooltipped-w" aria-label="Issues">
192
+ <a href="/NLNOG/ring-sqa/issues" aria-label="Issues" class="js-selected-navigation-item sunken-menu-item" data-hotkey="g i" data-selected-links="repo_issues repo_labels repo_milestones /NLNOG/ring-sqa/issues">
193
+ <span class="octicon octicon-issue-opened"></span> <span class="full-word">Issues</span>
194
+ <span class="js-issue-replace-counter"></span>
195
+ <img alt="" class="mini-loader" height="16" src="https://assets-cdn.github.com/images/spinners/octocat-spinner-32.gif" width="16" />
196
+ </a> </li>
197
+
198
+ <li class="tooltipped tooltipped-w" aria-label="Pull Requests">
199
+ <a href="/NLNOG/ring-sqa/pulls" aria-label="Pull Requests" class="js-selected-navigation-item sunken-menu-item" data-hotkey="g p" data-selected-links="repo_pulls /NLNOG/ring-sqa/pulls">
200
+ <span class="octicon octicon-git-pull-request"></span> <span class="full-word">Pull Requests</span>
201
+ <span class="js-pull-replace-counter"></span>
202
+ <img alt="" class="mini-loader" height="16" src="https://assets-cdn.github.com/images/spinners/octocat-spinner-32.gif" width="16" />
203
+ </a> </li>
204
+
205
+
206
+ </ul>
207
+ <div class="sunken-menu-separator"></div>
208
+ <ul class="sunken-menu-group">
209
+
210
+ <li class="tooltipped tooltipped-w" aria-label="Pulse">
211
+ <a href="/NLNOG/ring-sqa/pulse" aria-label="Pulse" class="js-selected-navigation-item sunken-menu-item" data-selected-links="pulse /NLNOG/ring-sqa/pulse">
212
+ <span class="octicon octicon-pulse"></span> <span class="full-word">Pulse</span>
213
+ <img alt="" class="mini-loader" height="16" src="https://assets-cdn.github.com/images/spinners/octocat-spinner-32.gif" width="16" />
214
+ </a> </li>
215
+
216
+ <li class="tooltipped tooltipped-w" aria-label="Graphs">
217
+ <a href="/NLNOG/ring-sqa/graphs" aria-label="Graphs" class="js-selected-navigation-item sunken-menu-item" data-selected-links="repo_graphs repo_contributors /NLNOG/ring-sqa/graphs">
218
+ <span class="octicon octicon-graph"></span> <span class="full-word">Graphs</span>
219
+ <img alt="" class="mini-loader" height="16" src="https://assets-cdn.github.com/images/spinners/octocat-spinner-32.gif" width="16" />
220
+ </a> </li>
221
+ </ul>
222
+
223
+
224
+ </nav>
225
+
226
+ <div class="only-with-full-nav">
227
+
228
+
229
+ <div class="clone-url open"
230
+ data-protocol-type="http"
231
+ data-url="/users/set_protocol?protocol_selector=http&amp;protocol_type=clone">
232
+ <h3><span class="text-emphasized">HTTPS</span> clone URL</h3>
233
+ <div class="input-group js-zeroclipboard-container">
234
+ <input type="text" class="input-mini input-monospace js-url-field js-zeroclipboard-target"
235
+ value="https://github.com/NLNOG/ring-sqa.git" readonly="readonly">
236
+ <span class="input-group-button">
237
+ <button aria-label="Copy to clipboard" class="js-zeroclipboard minibutton zeroclipboard-button" data-copied-hint="Copied!" type="button"><span class="octicon octicon-clippy"></span></button>
238
+ </span>
239
+ </div>
240
+ </div>
241
+
242
+
243
+ <div class="clone-url "
244
+ data-protocol-type="subversion"
245
+ data-url="/users/set_protocol?protocol_selector=subversion&amp;protocol_type=clone">
246
+ <h3><span class="text-emphasized">Subversion</span> checkout URL</h3>
247
+ <div class="input-group js-zeroclipboard-container">
248
+ <input type="text" class="input-mini input-monospace js-url-field js-zeroclipboard-target"
249
+ value="https://github.com/NLNOG/ring-sqa" readonly="readonly">
250
+ <span class="input-group-button">
251
+ <button aria-label="Copy to clipboard" class="js-zeroclipboard minibutton zeroclipboard-button" data-copied-hint="Copied!" type="button"><span class="octicon octicon-clippy"></span></button>
252
+ </span>
253
+ </div>
254
+ </div>
255
+
256
+
257
+
258
+ <p class="clone-options">You can clone with
259
+ <a href="#" class="js-clone-selector" data-protocol="http">HTTPS</a> or <a href="#" class="js-clone-selector" data-protocol="subversion">Subversion</a>.
260
+ <a href="https://help.github.com/articles/which-remote-url-should-i-use" class="help tooltipped tooltipped-n" aria-label="Get help on which URL is right for you.">
261
+ <span class="octicon octicon-question"></span>
262
+ </a>
263
+ </p>
264
+
265
+
266
+
267
+ <a href="/NLNOG/ring-sqa/archive/master.zip"
268
+ class="minibutton sidebar-button"
269
+ aria-label="Download the contents of NLNOG/ring-sqa as a zip file"
270
+ title="Download the contents of NLNOG/ring-sqa as a zip file"
271
+ rel="nofollow">
272
+ <span class="octicon octicon-cloud-download"></span>
273
+ Download ZIP
274
+ </a>
275
+ </div>
276
+ </div><!-- /.repository-sidebar -->
277
+
278
+ <div id="js-repo-pjax-container" class="repository-content context-loader-container" data-pjax-container>
279
+
280
+ <a href="/NLNOG/ring-sqa/blame/2b77a58e8392563916dd7d9c529d7b0820962c48/Gemfile" class="hidden js-permalink-shortcut" data-hotkey="y">Permalink</a>
281
+
282
+
283
+
284
+ <div class="breadcrumb css-truncate blame-breadcrumb js-zeroclipboard-container">
285
+ <span class="css-truncate-target js-zeroclipboard-target"><span class='repo-root js-repo-root'><span itemscope="" itemtype="http://data-vocabulary.org/Breadcrumb"><a href="/NLNOG/ring-sqa" class="" data-branch="master" data-direction="back" data-pjax="true" itemscope="url"><span itemprop="title">ring-sqa</span></a></span></span><span class="separator">/</span><strong class="final-path">Gemfile</strong></span>
286
+ <button aria-label="Copy file path to clipboard" class="js-zeroclipboard minibutton zeroclipboard-button" data-copied-hint="Copied!" type="button"><span class="octicon octicon-clippy"></span></button>
287
+ </div>
288
+
289
+ <div class="line-age-legend">
290
+ <span>Newer</span>
291
+ <ol>
292
+ <li class="heat1"></li>
293
+ <li class="heat2"></li>
294
+ <li class="heat3"></li>
295
+ <li class="heat4"></li>
296
+ <li class="heat5"></li>
297
+ <li class="heat6"></li>
298
+ <li class="heat7"></li>
299
+ <li class="heat8"></li>
300
+ <li class="heat9"></li>
301
+ <li class="heat10"></li>
302
+ </ol>
303
+ <span>Older</span>
304
+ </div>
305
+
306
+ <div class="file-box">
307
+ <div class="file">
308
+ <div class="meta">
309
+ <div class="info">
310
+ <span class="icon"><span class="octicon octicon-file-text"></span></span>
311
+ <span class="mode" title="File Mode">100644</span>
312
+ <span class="meta-divider"></span>
313
+ <span>3 lines (2 sloc)</span>
314
+ <span class="meta-divider"></span>
315
+ <span>0.038 kb</span>
316
+ </div>
317
+ <div class="actions">
318
+ <div class="button-group">
319
+ <a href="/NLNOG/ring-sqa/raw/master/Gemfile" class="minibutton" id="raw-url">Raw</a>
320
+ <a href="/NLNOG/ring-sqa/blob/master/Gemfile" class="minibutton js-update-url-with-hash">Normal view</a>
321
+ <a href="/NLNOG/ring-sqa/commits/master/Gemfile" class="minibutton" rel="nofollow">History</a>
322
+ </div>
323
+ </div>
324
+ </div>
325
+
326
+ <div class="blob-wrapper">
327
+ <table class="blame-container highlight data js-file-line-container">
328
+ <tr class="blame-commit">
329
+ <td class="blame-commit-info" rowspan="3">
330
+ <a href="/NLNOG/ring-sqa/commit/ef6203cc8bfaa017e7d6b7f65845f4de97facce3" class="blame-sha">ef6203c</a>
331
+ <img alt="ytti" class="avatar blame-commit-avatar" data-user="200527" height="32" src="https://avatars2.githubusercontent.com/u/200527?v=3&amp;s=64" width="32" />
332
+ <a href="/NLNOG/ring-sqa/commit/ef6203cc8bfaa017e7d6b7f65845f4de97facce3" class="blame-commit-title" title="initial commit">initial commit</a>
333
+ <div class="blame-commit-meta">
334
+ <a href="/ytti" class="muted-link" rel="contributor">ytti</a> authored
335
+ <time datetime="2014-07-19T15:42:38Z" is="relative-time">Jul 19, 2014</time>
336
+ </div>
337
+ </td>
338
+ </tr>
339
+ <tr class="blame-line">
340
+ <td class="line-age heat10"></td>
341
+ <td class="blob-num blame-blob-num js-line-number" id="L1">1</td>
342
+ <td class="blob-code js-file-line" id="LC1">source <span class="pl-s1"><span class="pl-pds">&#39;</span>https://rubygems.org<span class="pl-pds">&#39;</span></span></td>
343
+ </tr>
344
+ <tr class="blame-line">
345
+ <td class="line-age heat10"></td>
346
+ <td class="blob-num blame-blob-num js-line-number" id="L2">2</td>
347
+ <td class="blob-code js-file-line" id="LC2">gemspec</td>
348
+ </tr>
349
+ </table>
350
+ </div>
351
+
352
+ </div>
353
+ </div>
354
+
355
+
356
+ </div>
357
+
358
+ </div><!-- /.repo-container -->
359
+ <div class="modal-backdrop"></div>
360
+ </div><!-- /.container -->
361
+ </div><!-- /.site -->
362
+
363
+
364
+ </div><!-- /.wrapper -->
365
+
366
+ <div class="container">
367
+ <div class="site-footer" role="contentinfo">
368
+ <ul class="site-footer-links right">
369
+ <li><a href="https://status.github.com/">Status</a></li>
370
+ <li><a href="https://developer.github.com">API</a></li>
371
+ <li><a href="http://training.github.com">Training</a></li>
372
+ <li><a href="http://shop.github.com">Shop</a></li>
373
+ <li><a href="/blog">Blog</a></li>
374
+ <li><a href="/about">About</a></li>
375
+
376
+ </ul>
377
+
378
+ <a href="/" aria-label="Homepage">
379
+ <span class="mega-octicon octicon-mark-github" title="GitHub"></span>
380
+ </a>
381
+
382
+ <ul class="site-footer-links">
383
+ <li>&copy; 2015 <span title="0.02539s from github-fe129-cp1-prd.iad.github.net">GitHub</span>, Inc.</li>
384
+ <li><a href="/site/terms">Terms</a></li>
385
+ <li><a href="/site/privacy">Privacy</a></li>
386
+ <li><a href="/security">Security</a></li>
387
+ <li><a href="/contact">Contact</a></li>
388
+ </ul>
389
+ </div><!-- /.site-footer -->
390
+ </div><!-- /.container -->
391
+
392
+
393
+ <div class="fullscreen-overlay js-fullscreen-overlay" id="fullscreen_overlay">
394
+ <div class="fullscreen-container js-suggester-container">
395
+ <div class="textarea-wrap">
396
+ <textarea name="fullscreen-contents" id="fullscreen-contents" class="fullscreen-contents js-fullscreen-contents" placeholder=""></textarea>
397
+ <div class="suggester-container">
398
+ <div class="suggester fullscreen-suggester js-suggester js-navigation-container"></div>
399
+ </div>
400
+ </div>
401
+ </div>
402
+ <div class="fullscreen-sidebar">
403
+ <a href="#" class="exit-fullscreen js-exit-fullscreen tooltipped tooltipped-w" aria-label="Exit Zen Mode">
404
+ <span class="mega-octicon octicon-screen-normal"></span>
405
+ </a>
406
+ <a href="#" class="theme-switcher js-theme-switcher tooltipped tooltipped-w"
407
+ aria-label="Switch themes">
408
+ <span class="octicon octicon-color-mode"></span>
409
+ </a>
410
+ </div>
411
+ </div>
412
+
413
+
414
+
415
+ <div id="ajax-error-message" class="flash flash-error">
416
+ <span class="octicon octicon-alert"></span>
417
+ <a href="#" class="octicon octicon-x flash-close js-ajax-error-dismiss" aria-label="Dismiss error"></a>
418
+ Something went wrong with that request. Please try again.
419
+ </div>
420
+
421
+
422
+ <script crossorigin="anonymous" src="https://assets-cdn.github.com/assets/frameworks-7e989cd35c6790acb51890a1e7abd63edb596bed83c3b99ac299180550d5b096.js" type="text/javascript"></script>
423
+ <script async="async" crossorigin="anonymous" src="https://assets-cdn.github.com/assets/github-350c37c6a4c50cfbe8793e5edc796e187b61253f257e91c6c902159734308ffe.js" type="text/javascript"></script>
424
+
425
+
426
+ </body>
427
+ </html>
428
+
@@ -0,0 +1,70 @@
1
+ # Packet Via DMEM
2
+ Finds junos packet-via-dmem packets from arbitrary output and generates text2pcap compatible output
3
+
4
+ ## JunOS
5
+ % ssh test2nqe31.dk|tee output.txt
6
+ fisakytt@test2nqe31-re1.dk> start shell pfe network afeb0
7
+
8
+ AFEB platform (1000Mhz QorIQ P2020 processor, 2048MB memory, 512KB flash)
9
+ MX104-ABB-0(test2nqe31-re1.dk vty)# test jnh 0 packet-via-dmem enable
10
+ MX104-ABB-0(test2nqe31-re1.dk vty)# test jnh 0 packet-via-dmem 0x3 0xaabbcc
11
+ MX104-ABB-0(test2nqe31-re1.dk vty)# test jnh 0 packet-via-dmem 0x0
12
+ MX104-ABB-0(test2nqe31-re1.dk vty)# test jnh 0 packet-via-dmem disable
13
+
14
+
15
+ ## CLI
16
+ % ./bin/packet-via-dmem -s 1 ~/output.txt|wc -l
17
+ 55
18
+ % ./bin/packet-via-dmem ~/output.txt |wc -l
19
+ 28
20
+ % ./bin/packet-via-dmem -r 0 ~/output.txt |wc -l
21
+ 0
22
+ % ./bin/packet-via-dmem ~/output.txt|text2pcap - output.pcap
23
+ Input from: Standard input
24
+ Output to: output.pcap
25
+ Output format: PCAP
26
+ Wrote packet of 66 bytes.
27
+ Wrote packet of 70 bytes.
28
+ Wrote packet of 70 bytes.
29
+ Wrote packet of 246 bytes.
30
+ Wrote packet of 256 bytes.
31
+ Wrote packet of 135 bytes.
32
+ Wrote packet of 246 bytes.
33
+ Wrote packet of 135 bytes.
34
+ Wrote packet of 57 bytes.
35
+ Wrote packet of 57 bytes.
36
+ Wrote packet of 72 bytes.
37
+ Wrote packet of 135 bytes.
38
+ Wrote packet of 256 bytes.
39
+ Wrote packet of 186 bytes.
40
+ Wrote packet of 225 bytes.
41
+ Wrote packet of 66 bytes.
42
+ Wrote packet of 256 bytes.
43
+ Wrote packet of 135 bytes.
44
+ Wrote packet of 142 bytes.
45
+ Wrote packet of 57 bytes.
46
+ Wrote packet of 256 bytes.
47
+ Wrote packet of 186 bytes.
48
+ Wrote packet of 246 bytes.
49
+ Wrote packet of 100 bytes.
50
+ Wrote packet of 57 bytes.
51
+ Wrote packet of 128 bytes.
52
+ Wrote packet of 66 bytes.
53
+ Wrote packet of 9 bytes.
54
+ Read 28 potential packets, wrote 28 packets (4388 bytes).
55
+ % ./bin/packet-via-dmem --help
56
+ usage: ./bin/packet-via-dmem [options]
57
+ -d, --debug turn on debugging
58
+ -r, --received pop BYTES from received frames, default 6
59
+ -s, --sent pop BYTES from senti frames, default is not to show sent frames
60
+ -h, --help
61
+ %
62
+
63
+ ## Library
64
+ require 'packet_via_dmem'
65
+ dmem = PacketViaDMEM.new
66
+ puts dmem.parse File.read(ARGF[0])
67
+
68
+ ## Todo
69
+ 1. correctly discover how many bytes need to be popped, perhaps by finding valid ethernet headers and ignore anything before?
70
+ 1. reverse engineer header/cookie, at least figuring out which egress NPU is going to be used should be trivial
@@ -0,0 +1,47 @@
1
+ begin
2
+ require 'rake/testtask'
3
+ require 'bundler'
4
+ # Bundler.setup
5
+ rescue LoadError
6
+ warn 'bundler missing'
7
+ end
8
+
9
+ gemspec = eval(File.read(Dir['*.gemspec'].first))
10
+ file = [gemspec.name, gemspec.version].join('-') + '.gem'
11
+
12
+ desc 'Validate gemspec'
13
+ task :gemspec do
14
+ gemspec.validate
15
+ end
16
+
17
+ desc 'Run minitest'
18
+ task :test do
19
+ Rake::TestTask.new do |t|
20
+ t.libs.push "lib"
21
+ t.test_files = FileList['spec/*_spec.rb']
22
+ t.verbose = true
23
+ end
24
+ end
25
+
26
+ desc 'Build gem'
27
+ task :build do
28
+ system "gem build #{gemspec.name}.gemspec"
29
+ FileUtils.mkdir_p 'gems'
30
+ FileUtils.mv file, 'gems'
31
+ end
32
+
33
+ desc 'Install gem'
34
+ task :install => :build do
35
+ system "sudo -Es sh -c \'umask 022; gem install gems/#{file}\'"
36
+ end
37
+
38
+ desc 'Remove gems'
39
+ task :clean do
40
+ FileUtils.rm_rf 'gems'
41
+ end
42
+
43
+ desc 'Push to rubygems'
44
+ task :push do
45
+ system "gem push gems/#{file}"
46
+ system "git tag #{gemspec.version}"
47
+ end
@@ -0,0 +1,11 @@
1
+ #!/usr/bin/env ruby
2
+
3
+ begin
4
+ require_relative '../lib/packet_via_dmem/cli.rb'
5
+ cli = PacketViaDMEM::CLI.new
6
+ @debug = cli.debug
7
+ cli.run
8
+ rescue => error
9
+ warn "#{error.message}"
10
+ raise if @debug
11
+ end
@@ -0,0 +1,48 @@
1
+ require 'strscan'
2
+
3
+ class PacketViaDMEM
4
+ PACKET = /^(Received|Sent) \d+ byte parcel:.*\n/
5
+ HEADER_SIZE = {
6
+ :received => 6,
7
+ :sent => 33, # FIXME: it's variable, we're dumb
8
+ }
9
+ class Error < StandardError; end
10
+
11
+ def initialize opts={}
12
+ @received = opts.delete :received
13
+ @sent = opts.delete :sent
14
+ @received ||= HEADER_SIZE[:received]
15
+ @sc = StringScanner.new ''
16
+ end
17
+
18
+ def parse str
19
+ pkts = []
20
+ @sc.string = str
21
+ while @sc.scan_until PACKET
22
+ match = @sc.matched.split(/\s+/)
23
+ type = match.first.downcase.to_sym
24
+ next if type == :received and (not @received or @received < 1)
25
+ next if type == :sent and (not @sent or @sent < 1)
26
+ @sc.scan_until(/\n/) if type == :received
27
+ type = type == :received ? @received : @sent
28
+ pkt = ''
29
+ while @sc.match?(/^0x/)
30
+ pkt << @sc.scan_until(/\n/).strip
31
+ end
32
+ pkt = parse_packet(pkt, type)
33
+ pkts << pkt if pkt
34
+ end
35
+ pkts
36
+ end
37
+
38
+ private
39
+
40
+ def parse_packet pkt, pop
41
+ pkt = pkt.gsub(/0x/, '')
42
+ pkt = pkt.gsub(/\s+/, '')
43
+ pkt = pkt.scan(/../)
44
+ '000000 ' + pkt[pop..-1].join(' ')
45
+ rescue
46
+ nil
47
+ end
48
+ end
@@ -0,0 +1,37 @@
1
+ require 'slop'
2
+ require_relative '../packet_via_dmem/'
3
+
4
+ class PacketViaDMEM
5
+ class CLI
6
+ class NoFile < Error; end
7
+ class InvalidFile < Error; end
8
+ attr_reader :debug
9
+
10
+ def initialize
11
+ @opts = opts_parse
12
+ @debug = @opts.debug?
13
+ end
14
+
15
+ def run
16
+ file = @opts.arguments.shift
17
+ raise NoFile, 'filename is mandatory argument' unless file
18
+ begin
19
+ file = File.read(file)
20
+ rescue
21
+ raise InvalidFile, "unable to read #{file}"
22
+ end
23
+ puts PacketViaDMEM.new(:received=>@opts[:received], :sent=>@opts[:sent]).parse file
24
+ end
25
+
26
+ private
27
+
28
+ def opts_parse
29
+ Slop.parse do |o|
30
+ o.bool '-d', '--debug', 'turn on debugging'
31
+ o.int '-r', '--received', "pop BYTES from received frames, default #{PacketViaDMEM::HEADER_SIZE[:received]}", :default=>PacketViaDMEM::HEADER_SIZE[:received]
32
+ o.int '-s', '--sent', "pop BYTES from senti frames, default is not to show sent frames"
33
+ o.on '-h', '--help' do puts o; exit; end
34
+ end
35
+ end
36
+ end
37
+ end
@@ -0,0 +1,18 @@
1
+ Gem::Specification.new do |s|
2
+ s.name = 'packet_via_dmem'
3
+ s.version = '0.0.0'
4
+ s.licenses = %w( Apache-2.0 )
5
+ s.platform = Gem::Platform::RUBY
6
+ s.authors = [ 'Saku Ytti' ]
7
+ s.email = %w( saku@ytti.fi )
8
+ s.homepage = 'http://github.com/ytti/packet_via_dmem'
9
+ s.summary = 'packet_via_dmem to pcap'
10
+ s.description = 'finds Juniper Trio pack-via-dmem output from file and generates output which text2pcap eats, e.g. ./packet_via_dmem output.txt|text2pcap - output.pcap'
11
+ s.rubyforge_project = s.name
12
+ s.files = `git ls-files`.split("\n")
13
+ s.executables = %w( packet-via-dmem )
14
+ s.require_path = 'lib'
15
+
16
+ s.required_ruby_version = '>= 1.9.3'
17
+ s.add_runtime_dependency 'slop', '~> 4.0'
18
+ end
metadata ADDED
@@ -0,0 +1,68 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: packet_via_dmem
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.0.0
5
+ platform: ruby
6
+ authors:
7
+ - Saku Ytti
8
+ autorequire:
9
+ bindir: bin
10
+ cert_chain: []
11
+ date: 2015-02-26 00:00:00.000000000 Z
12
+ dependencies:
13
+ - !ruby/object:Gem::Dependency
14
+ name: slop
15
+ requirement: !ruby/object:Gem::Requirement
16
+ requirements:
17
+ - - "~>"
18
+ - !ruby/object:Gem::Version
19
+ version: '4.0'
20
+ type: :runtime
21
+ prerelease: false
22
+ version_requirements: !ruby/object:Gem::Requirement
23
+ requirements:
24
+ - - "~>"
25
+ - !ruby/object:Gem::Version
26
+ version: '4.0'
27
+ description: finds Juniper Trio pack-via-dmem output from file and generates output
28
+ which text2pcap eats, e.g. ./packet_via_dmem output.txt|text2pcap - output.pcap
29
+ email:
30
+ - saku@ytti.fi
31
+ executables:
32
+ - packet-via-dmem
33
+ extensions: []
34
+ extra_rdoc_files: []
35
+ files:
36
+ - ".gitignore"
37
+ - Gemfile
38
+ - README.md
39
+ - Rakefile
40
+ - bin/packet-via-dmem
41
+ - lib/packet_via_dmem.rb
42
+ - lib/packet_via_dmem/cli.rb
43
+ - packet_via_dmem.gemspec
44
+ homepage: http://github.com/ytti/packet_via_dmem
45
+ licenses:
46
+ - Apache-2.0
47
+ metadata: {}
48
+ post_install_message:
49
+ rdoc_options: []
50
+ require_paths:
51
+ - lib
52
+ required_ruby_version: !ruby/object:Gem::Requirement
53
+ requirements:
54
+ - - ">="
55
+ - !ruby/object:Gem::Version
56
+ version: 1.9.3
57
+ required_rubygems_version: !ruby/object:Gem::Requirement
58
+ requirements:
59
+ - - ">="
60
+ - !ruby/object:Gem::Version
61
+ version: '0'
62
+ requirements: []
63
+ rubyforge_project: packet_via_dmem
64
+ rubygems_version: 2.2.2
65
+ signing_key:
66
+ specification_version: 4
67
+ summary: packet_via_dmem to pcap
68
+ test_files: []