packet_via_dmem 0.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- 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: []
|