summaryrefslogtreecommitdiffstats
path: root/MAINTAINERS
AgeCommit message (Collapse)AuthorFilesLines
2018-09-04Add Load Balancer plugin MaintainersHongjun Ni1-0/+6
Change-Id: Ic6da1584ad8e03f2142fe10a8348fb0278c5060b Signed-off-by: Hongjun Ni <hongjun.ni@intel.com>
2018-08-29Add NSH Plugin MaintainersHongjun Ni1-3/+10
Change-Id: I420a563b5eb06f243833da9e8fb7c8a449ad3cc2 Signed-off-by: Hongjun Ni <hongjun.ni@intel.com>
2018-08-17tls: add maintainersFlorin Coras1-4/+11
Change-Id: I948739642f8fe0b6219ffcd8232a9ad486cabc4b Signed-off-by: Florin Coras <fcoras@cisco.com>
2018-08-03API: Remove legacy vlibsocket code.Ole Troan1-1/+0
The API implementation now supports Unix domain sockets. The vlibsocket code has not been included in builds for a long time and is superfluous. Change-Id: I67a773d0e86e2318eacecf33f82d075553146ee9 Signed-off-by: Ole Troan <ot@cisco.com>
2018-07-26Initial commit of Sphinx docsJohn DeNisco1-0/+5
Change-Id: I9fca8fb98502dffc2555f9de7f507b6f006e0e77 Signed-off-by: John DeNisco <jdenisco@cisco.com>
2018-06-25MAP: Move MAP-E/T to a plugin.Ole Troan1-2/+2
Only remaining traces of MAP in the src/vnet is now in buffer.h. Awaiting a new buffer opaque API (hint, hint). Change-Id: Ie165561484731f1d7ed6e0f604b43624e06db3f0 Signed-off-by: Ole Troan <ot@cisco.com>
2018-03-14IPIP: Add IP{v4,v6} over IP{v4,v6} configured tunnel support.Ole Troan1-5/+4
Change-Id: I166301c9e2388bae5f70ec0179d663a2703e27f5 Signed-off-by: Ole Troan <ot@cisco.com>
2018-01-29SRv6 dynamic proxy pluginFrancois Clad1-0/+5
Change-Id: Ie460005510b8a70d00de31b6651e762cc3a63229 Signed-off-by: Francois Clad <fclad@cisco.com>
2018-01-25SRv6 masquerading proxy pluginFrancois Clad1-0/+5
Change-Id: Ia65cf2c7b7fdf84c64e60af4cc815251022c53a9 Signed-off-by: Francois Clad <fclad@cisco.com>
2018-01-24SCTP stack (RFC4960)Marco Varlese1-1/+5
== CONTENT == * SCTP chunks definition as per RFC4960; * Helper functions to set/get values to/from the corresponding chunks; * Hooks to the session/application layers; * Complete state-machine handling; * Implementation for unexpected chunk received in a certain state (state-machine error handling) * Support for 1-single connection; * Sample application to test receive/transmit data-path; * Test to validate SCTP stack; Change-Id: I1b55c455ab400be9513f4e094dadfc3181d2ebc9 Signed-off-by: Marco Varlese <marco.varlese@suse.com>
2018-01-19SRv6 static proxy pluginFrancois Clad1-0/+5
Change-Id: Ia0654461d9fa36503323a8375997719c873d23b9 Signed-off-by: Francois Clad <fclad@cisco.com>
2017-12-22maintainers: update emailSergio Gonzalez Monroy1-2/+1
Change-Id: Ie915f7b0153bed2e603eedc642df852b85c8ad5c Signed-off-by: Sergio Gonzalez Monroy <sergio.gonzalez.monroy@intel.com>
2017-12-18Updated MAINTAINERSRadu Nicolau1-0/+2
Added Radu Nicolau as maintainer for src/devices/dpdk/ipsec/ and src/vnet/ipsec/ Change-Id: If354344f5685ce0e431757768b77c4d5e8e409f9 Signed-off-by: Radu Nicolau <radu.nicolau@intel.com>
2017-10-19Add GENEVE tunnel maintainer.Marco Varlese1-0/+4
Change-Id: I30bbba4119accee2c157fb5b8202da3c87c59805 Signed-off-by: Marco Varlese <marco.varlese@suse.com>
2017-08-10Add tcp, session-layer MAINTAINERS file entriesDave Barach1-0/+8
Change-Id: I6c89383738624b8b18645b6c93c3025604ac538e Signed-off-by: Dave Barach <dave@barachs.net>
2017-08-10acl-plugin: add MAINTAINERS entryAndrew Yourtchenko1-0/+5
Change-Id: I681eca4897f8dba7e85fdbcbb7e03d1d9ef29224 Signed-off-by: Andrew Yourtchenko <ayourtch@gmail.com>
2017-08-09Add PPPoE PluginHongjun Ni1-0/+5
Supports 64K PPPoE sessions This plugin adds three graph nodes: 1) pppoe-input for PPPoE decapsulation 2) pppoe-encap for PPPoE encapsulation 3) pppoe-tap-dispatch for control plane process Below is the configuration to make PPPoE CP and DP work: vim /etc/vpp/startup.conf tuntap { enable ethernet name newtap } create pppoe tap tap-if-index 1 //Configure it after a subscriber's PPPoE discovery and PPP link establishment succeeds: create pppoe session client-ip 100.1.2.1 session-id 1 client-mac 00:11:01:00:00:01 show pppoe fib show pppoe session Change-Id: I73e724b6bf7c3e4181a9914c5752da1fa72d7e60 Signed-off-by: Hongjun Ni <hongjun.ni@intel.com>
2017-06-25Add Maintainers for Vxlan-gpe featureHongjun Ni1-3/+8
Change-Id: I3f42e9bbd816a6e2192cc65eeb10a4681cf9e29a Signed-off-by: Hongjun Ni <hongjun.ni@intel.com>
2017-06-16Add maintainer for GTPU PluginHongjun Ni1-0/+5
Change-Id: Ic8cecdee7ae74a6b816e0a02985c456fd3ec8d8f Signed-off-by: Hongjun Ni <hongjun.ni@intel.com>
2017-05-30Flowprobe: Stateful flows and IPv6, L4 recordingOle Troan1-4/+4
Change-Id: I67839281623721bf42f0a918a53356143d9dc78a Signed-off-by: Ole Troan <ot@cisco.com> Signed-off-by: Pavel Kotucek <pkotucek@cisco.com> Signed-off-by: Ole Troan <ot@cisco.com>
2017-05-05First commit SR MPLSPablo Camarillo1-2/+4
Change-Id: I961685a2a0e4c314049444c64eb6ccf877c278dd Signed-off-by: Pablo Camarillo <pcamaril@cisco.com>
2017-04-05Fix name typoSergio Gonzalez Monroy1-2/+2
Change-Id: Ic7128d4f8a13c021e0fd4731a717193d050431d2 Signed-off-by: Sergio Gonzalez Monroy <sergio.gonzalez.monroy@intel.com>
2017-03-01Add MAINTAINERS fileDamjan Marion1-0/+158
Change-Id: I67819c72a5b3de7bcc7d55ab34f0c95f947578e9 Signed-off-by: Damjan Marion <damarion@cisco.com>
or.Word */ .highlight .w { color: #bbbbbb } /* Text.Whitespace */ .highlight .mb { color: #0000DD; font-weight: bold } /* Literal.Number.Bin */ .highlight .mf { color: #0000DD; font-weight: bold } /* Literal.Number.Float */ .highlight .mh { color: #0000DD; font-weight: bold } /* Literal.Number.Hex */ .highlight .mi { color: #0000DD; font-weight: bold } /* Literal.Number.Integer */ .highlight .mo { color: #0000DD; font-weight: bold } /* Literal.Number.Oct */ .highlight .sa { color: #dd2200; background-color: #fff0f0 } /* Literal.String.Affix */ .highlight .sb { color: #dd2200; background-color: #fff0f0 } /* Literal.String.Backtick */ .highlight .sc { color: #dd2200; background-color: #fff0f0 } /* Literal.String.Char */ .highlight .dl { color: #dd2200; background-color: #fff0f0 } /* Literal.String.Delimiter */ .highlight .sd { color: #dd2200; background-color: #fff0f0 } /* Literal.String.Doc */ .highlight .s2 { color: #dd2200; background-color: #fff0f0 } /* Literal.String.Double */ .highlight .se { color: #0044dd; background-color: #fff0f0 } /* Literal.String.Escape */ .highlight .sh { color: #dd2200; background-color: #fff0f0 } /* Literal.String.Heredoc */ .highlight .si { color: #3333bb; background-color: #fff0f0 } /* Literal.String.Interpol */ .highlight .sx { color: #22bb22; background-color: #f0fff0 } /* Literal.String.Other */ .highlight .sr { color: #008800; background-color: #fff0ff } /* Literal.String.Regex */ .highlight .s1 { color: #dd2200; background-color: #fff0f0 } /* Literal.String.Single */ .highlight .ss { color: #aa6600; background-color: #fff0f0 } /* Literal.String.Symbol */ .highlight .bp { color: #003388 } /* Name.Builtin.Pseudo */ .highlight .fm { color: #0066bb; font-weight: bold } /* Name.Function.Magic */ .highlight .vc { color: #336699 } /* Name.Variable.Class */ .highlight .vg { color: #dd7700 } /* Name.Variable.Global */ .highlight .vi { color: #3333bb } /* Name.Variable.Instance */ .highlight .vm { color: #336699 } /* Name.Variable.Magic */ .highlight .il { color: #0000DD; font-weight: bold } /* Literal.Number.Integer.Long */ }
/*
 * Copyright (c) 2015 Cisco and/or its affiliates.
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at:
 *
 *     http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 */
/*
  ------------------------------------------------------------------------------
  By Bob Jenkins, 1996, Public Domain
  MODIFIED:
  960327: Creation (addition of randinit, really)
  970719: use context, not global variables, for internal state
  980324: renamed seed to flag
  980605: recommend ISAAC_LOG2_SIZE=4 for noncryptography.
  010626: note this is public domain
  ------------------------------------------------------------------------------

  Modified for CLIB by Eliot Dresselhaus.
  Dear Bob, Thanks for all the great work. - Eliot

  modifications copyright (c) 2003 Eliot Dresselhaus

  Permission is hereby granted, free of charge, to any person obtaining
  a copy of this software and associated documentation files (the
  "Software"), to deal in the Software without restriction, including
  without limitation the rights to use, copy, modify, merge, publish,
  distribute, sublicense, and/or sell copies of the Software, and to
  permit persons to whom the Software is furnished to do so, subject to
  the following conditions:

  The above copyright notice and this permission notice shall be
  included in all copies or substantial portions of the Software.

  THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
  EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
  MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
  NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
  LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
  OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
  WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
*/

/* ISAAC is Bob Jenkins' random number generator.
   http://burtleburtle.net/bob/rand/isaacafa.html */

#include <vppinfra/random_isaac.h>

#if uword_bits != 32 && uword_bits != 64
#error "isaac only works for 32 or 64 bit words"
#endif

#if uword_bits == 32

#define ind32(mm,x)  (*(u32 *)((u8 *)(mm) + ((x) & ((ISAAC_SIZE-1)<<2))))
#define rngstep32(mix,a,b,mm,m,m2,r,x,y)		\
{							\
  x = *m;						\
  a = (a^(mix)) + *(m2++);				\
  *(m++) = y = ind32(mm,x) + a + b;			\
  *(r++) = b = ind32(mm,y>>ISAAC_LOG2_SIZE) + x;	\
}

void
isaac (isaac_t * ctx, uword * results)
{
  u32 a, b, c, x, y, *m, *mm, *m2, *r, *mend;

  mm = ctx->memory;
  r = results;
  a = ctx->a;
  b = ctx->b;
  c = ctx->c;

  b += ++c;
  mend = m2 = mm + ARRAY_LEN (ctx->memory) / 2;
  m = mm;
  while (m < mend)
    {
      rngstep32 (a << 13, a, b, mm, m, m2, r, x, y);
      rngstep32 (a >> 6, a, b, mm, m, m2, r, x, y);
      rngstep32 (a << 2, a, b, mm, m, m2, r, x, y);
      rngstep32 (a >> 16, a, b, mm, m, m2, r, x, y);
    }

  m2 = mm;
  while (m2 < mend)
    {
      rngstep32 (a << 13, a, b, mm, m, m2, r, x, y);
      rngstep32 (a >> 6, a, b, mm, m, m2, r, x, y);
      rngstep32 (a << 2, a, b, mm, m, m2, r, x, y);
      rngstep32 (a >> 16, a, b, mm, m, m2, r, x, y);
    }

  ctx->a = a;
  ctx->b = b;
  ctx->c = c;
}

/* Perform 2 isaac runs with different contexts simultaneously. */
void
isaac2 (isaac_t * ctx, uword * results)
{
#define _(n) \
  u32 a##n, b##n, c##n, x##n, y##n, * m##n, * mm##n, * m2##n, * r##n, * mend##n

  _(0);
  _(1);
  (void) mend1;			/* "set but unused variable" error on mend1 with gcc 4.9  */
#undef _

#define _(n)							\
do {								\
  mm##n = ctx[(n)].memory;					\
  r##n = results + (n) * ISAAC_SIZE;				\
  a##n = ctx[(n)].a;						\
  b##n = ctx[(n)].b;						\
  c##n = ctx[(n)].c;						\
  b##n += ++c##n;						\
  mend##n = m2##n = mm##n + ARRAY_LEN (ctx[(n)].memory) / 2;	\
  m##n = mm##n;							\
} while (0)

  _(0);
  _(1);

#undef _

  while (m0 < mend0)
    {
      rngstep32 (a0 << 13, a0, b0, mm0, m0, m20, r0, x0, y0);
      rngstep32 (a1 << 13, a1, b1, mm1, m1, m21, r1, x1, y1);
      rngstep32 (a0 >> 6, a0, b0, mm0, m0, m20, r0, x0, y0);
      rngstep32 (a1 >> 6, a1, b1, mm1, m1, m21, r1, x1, y1);
      rngstep32 (a0 << 2, a0, b0, mm0, m0, m20, r0, x0, y0);
      rngstep32 (a1 << 2, a1, b1, mm1, m1, m21, r1, x1, y1);
      rngstep32 (a0 >> 16, a0, b0, mm0, m0, m20, r0, x0, y0);
      rngstep32 (a1 >> 16, a1, b1, mm1, m1, m21, r1, x1, y1);
    }

  m20 = mm0;
  m21 = mm1;
  while (m20 < mend0)
    {
      rngstep32 (a0 << 13, a0, b0, mm0, m0, m20, r0, x0, y0);
      rngstep32 (a1 << 13, a1, b1, mm1, m1, m21, r1, x1, y1);
      rngstep32 (a0 >> 6, a0, b0, mm0, m0, m20, r0, x0, y0);
      rngstep32 (a1 >> 6, a1, b1, mm1, m1, m21, r1, x1, y1);
      rngstep32 (a0 << 2, a0, b0, mm0, m0, m20, r0, x0, y0);
      rngstep32 (a1 << 2, a1, b1, mm1, m1, m21, r1, x1, y1);
      rngstep32 (a0 >> 16, a0, b0, mm0, m0, m20, r0, x0, y0);
      rngstep32 (a1 >> 16, a1, b1, mm1, m1, m21, r1, x1, y1);
    }

  ctx[0].a = a0;
  ctx[0].b = b0;
  ctx[0].c = c0;
  ctx[1].a = a1;
  ctx[1].b = b1;
  ctx[1].c = c1;
}

#define mix32(a,b,c,d,e,f,g,h)			\
{						\
   a^=b<<11; d+=a; b+=c;			\
   b^=c>>2;  e+=b; c+=d;			\
   c^=d<<8;  f+=c; d+=e;			\
   d^=e>>16; g+=d; e+=f;			\
   e^=f<<10; h+=e; f+=g;			\
   f^=g>>4;  a+=f; g+=h;			\
   g^=h<<8;  b+=g; h+=a;			\
   h^=a>>9;  c+=h; a+=b;			\
}

void
isaac_init (isaac_t * ctx, uword * seeds)
{
  word i;
  u32 a, b, c, d, e, f, g, h, *m, *r;

  ctx->a = ctx->b = ctx->c = 0;
  m = ctx->memory;
  r = seeds;

  a = b = c = d = e = f = g = h = 0x9e3779b9;	/* the golden ratio */

  for (i = 0; i < 4; ++i)	/* scramble it */
    mix32 (a, b, c, d, e, f, g, h);

  /* initialize using the contents of r[] as the seed */
  for (i = 0; i < ISAAC_SIZE; i += 8)
    {
      a += r[i];
      b += r[i + 1];
      c += r[i + 2];
      d += r[i + 3];
      e += r[i + 4];
      f += r[i + 5];
      g += r[i + 6];
      h += r[i + 7];
      mix32 (a, b, c, d, e, f, g, h);
      m[i] = a;
      m[i + 1] = b;
      m[i + 2] = c;
      m[i + 3] = d;
      m[i + 4] = e;
      m[i + 5] = f;
      m[i + 6] = g;
      m[i + 7] = h;
    }

  /* do a second pass to make all of the seed affect all of m */
  for (i = 0; i < ISAAC_SIZE; i += 8)
    {
      a += m[i];
      b += m[i + 1];
      c += m[i + 2];
      d += m[i + 3];
      e += m[i + 4];
      f += m[i + 5];
      g += m[i + 6];
      h += m[i + 7];
      mix32 (a, b, c, d, e, f, g, h);
      m[i] = a;
      m[i + 1] = b;
      m[i + 2] = c;
      m[i + 3] = d;
      m[i + 4] = e;
      m[i + 5] = f;
      m[i + 6] = g;
      m[i + 7] = h;
    }
}
#endif /* uword_bits == 32 */

#if uword_bits == 64

#define ind64(mm,x)  (*(u64 *)((u8 *)(mm) + ((x) & ((ISAAC_SIZE-1)<<3))))
#define rngstep64(mix,a,b,mm,m,m2,r,x,y)		\
{							\
  x = *m;						\
  a = (mix) + *(m2++);					\
  *(m++) = y = ind64(mm,x) + a + b;			\
  *(r++) = b = ind64(mm,y>>ISAAC_LOG2_SIZE) + x;	\
}

void
isaac (isaac_t * ctx, uword * results)
{
  u64 a, b, c, x, y, *m, *mm, *m2, *r, *mend;

  mm = ctx->memory;
  r = results;
  a = ctx->a;
  b = ctx->b;
  c = ctx->c;

  b += ++c;
  mend = m2 = mm + ARRAY_LEN (ctx->memory) / 2;
  m = mm;
  while (m < mend)
    {
      rngstep64 (~(a ^ (a << 21)), a, b, mm, m, m2, r, x, y);
      rngstep64 (a ^ (a >> 5), a, b, mm, m, m2, r, x, y);
      rngstep64 (a ^ (a << 12), a, b, mm, m, m2, r, x, y);
      rngstep64 (a ^ (a >> 33), a, b, mm, m, m2, r, x, y);
    }

  m2 = mm;
  while (m2 < mend)
    {
      rngstep64 (~(a ^ (a << 21)), a, b, mm, m, m2, r, x, y);
      rngstep64 (a ^ (a >> 5), a, b, mm, m, m2, r, x, y);
      rngstep64 (a ^ (a << 12), a, b, mm, m, m2, r, x, y);
      rngstep64 (a ^ (a >> 33), a, b, mm, m, m2, r, x, y);
    }

  ctx->a = a;
  ctx->b = b;
  ctx->c = c;
}

/* Perform 2 isaac runs with different contexts simultaneously. */
void
isaac2 (isaac_t * ctx, uword * results)
{
#define _(n) \
  u64 a##n, b##n, c##n, x##n, y##n, * m##n, * mm##n, * m2##n, * r##n, * mend##n

  _(0);
  _(1);

#undef _

#define _(n)							\
do {								\
  mm##n = ctx[(n)].memory;					\
  r##n = results + (n) * ISAAC_SIZE;				\
  a##n = ctx[(n)].a;						\
  b##n = ctx[(n)].b;						\
  c##n = ctx[(n)].c;						\
  b##n += ++c##n;						\
  mend##n = m2##n = mm##n + ARRAY_LEN (ctx[(n)].memory) / 2;	\
  m##n = mm##n;							\
} while (0)

  _(0);
  _(1);

#undef _

  (void) mend1;			/* compiler warning */

  while (m0 < mend0)
    {
      rngstep64 (~(a0 ^ (a0 << 21)), a0, b0, mm0, m0, m20, r0, x0, y0);
      rngstep64 (~(a1 ^ (a1 << 21)), a1, b1, mm1, m1, m21, r1, x1, y1);
      rngstep64 (a0 ^ (a0 >> 5), a0, b0, mm0, m0, m20, r0, x0, y0);
      rngstep64 (a1 ^ (a1 >> 5), a1, b1, mm1, m1, m21, r1, x1, y1);
      rngstep64 (a0 ^ (a0 << 12), a0, b0, mm0, m0, m20, r0, x0, y0);
      rngstep64 (a1 ^ (a1 << 12), a1, b1, mm1, m1, m21, r1, x1, y1);
      rngstep64 (a0 ^ (a0 >> 33), a0, b0, mm0, m0, m20, r0, x0, y0);
      rngstep64 (a1 ^ (a1 >> 33), a1, b1, mm1, m1, m21, r1, x1, y1);
    }

  m20 = mm0;
  m21 = mm1;
  while (m20 < mend0)
    {
      rngstep64 (~(a0 ^ (a0 << 21)), a0, b0, mm0, m0, m20, r0, x0, y0);
      rngstep64 (~(a1 ^ (a1 << 21)), a1, b1, mm1, m1, m21, r1, x1, y1);
      rngstep64 (a0 ^ (a0 >> 5), a0, b0, mm0, m0, m20, r0, x0, y0);
      rngstep64 (a1 ^ (a1 >> 5), a1, b1, mm1, m1, m21, r1, x1, y1);
      rngstep64 (a0 ^ (a0 << 12), a0, b0, mm0, m0, m20, r0, x0, y0);
      rngstep64 (a1 ^ (a1 << 12), a1, b1, mm1, m1, m21, r1, x1, y1);
      rngstep64 (a0 ^ (a0 >> 33), a0, b0, mm0, m0, m20, r0, x0, y0);
      rngstep64 (a1 ^ (a1 >> 33), a1, b1, mm1, m1, m21, r1, x1, y1);
    }

  ctx[0].a = a0;
  ctx[0].b = b0;
  ctx[0].c = c0;
  ctx[1].a = a1;
  ctx[1].b = b1;
  ctx[1].c = c1;
}

#define mix64(a,b,c,d,e,f,g,h)			\
{						\
   a-=e; f^=h>>9;  h+=a;			\
   b-=f; g^=a<<9;  a+=b;			\
   c-=g; h^=b>>23; b+=c;			\
   d-=h; a^=c<<15; c+=d;			\
   e-=a; b^=d>>14; d+=e;			\
   f-=b; c^=e<<20; e+=f;			\
   g-=c; d^=f>>17; f+=g;			\
   h-=d; e^=g<<14; g+=h;			\
}

void
isaac_init (isaac_t * ctx, uword * seeds)
{
  word i;
  u64 a, b, c, d, e, f, g, h, *m, *r;

  ctx->a = ctx->b = ctx->c = 0;
  m = ctx->memory;
  r = seeds;

  a = b = c = d = e = f = g = h = 0x9e3779b97f4a7c13LL;	/* the golden ratio */

  for (i = 0; i < 4; ++i)	/* scramble it */
    mix64 (a, b, c, d, e, f, g, h);

  for (i = 0; i < ISAAC_SIZE; i += 8)	/* fill in mm[] with messy stuff */
    {
      a += r[i];
      b += r[i + 1];
      c += r[i + 2];
      d += r[i + 3];
      e += r[i + 4];
      f += r[i + 5];
      g += r[i + 6];
      h += r[i + 7];
      mix64 (a, b, c, d, e, f, g, h);
      m[i] = a;
      m[i + 1] = b;
      m[i + 2] = c;
      m[i + 3] = d;
      m[i + 4] = e;
      m[i + 5] = f;
      m[i + 6] = g;
      m[i + 7] = h;
    }

  /* do a second pass to make all of the seed affect all of mm */
  for (i = 0; i < ISAAC_SIZE; i += 8)
    {
      a += m[i];
      b += m[i + 1];
      c += m[i + 2];
      d += m[i + 3];
      e += m[i + 4];
      f += m[i + 5];
      g += m[i + 6];
      h += m[i + 7];
      mix64 (a, b, c, d, e, f, g, h);
      m[i] = a;
      m[i + 1] = b;
      m[i + 2] = c;
      m[i + 3] = d;
      m[i + 4] = e;
      m[i + 5] = f;
      m[i + 6] = g;
      m[i + 7] = h;
    }
}
#endif /* uword_bits == 64 */


/*
 * fd.io coding-style-patch-verification: ON
 *
 * Local Variables:
 * eval: (c-set-style "gnu")
 * End:
 */