packet_via_dmem 0.0.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +7 -0
- data/.gitignore +2 -0
- data/Gemfile +428 -0
- data/README.md +70 -0
- data/Rakefile +47 -0
- data/bin/packet-via-dmem +11 -0
- data/lib/packet_via_dmem.rb +48 -0
- data/lib/packet_via_dmem/cli.rb +37 -0
- data/packet_via_dmem.gemspec +18 -0
- metadata +68 -0
checksums.yaml
ADDED
@@ -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
|
data/.gitignore
ADDED
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&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&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="✓" /></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&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&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&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">'</span>https://rubygems.org<span class="pl-pds">'</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>© 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
|
+
|
data/README.md
ADDED
@@ -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
|
data/Rakefile
ADDED
@@ -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
|
data/bin/packet-via-dmem
ADDED
@@ -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: []
|