MCPcopy Create free account
hub / github.com/F-Stack/f-stack / do_patch

Function do_patch

freebsd/netgraph/ng_patch.c:353–549  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

351}
352
353static void
354do_patch(priv_p privp, struct mbuf *m, int global_offset)
355{
356 int i, offset, patched = 0;
357 union ng_patch_op_val val;
358
359 for (i = 0; i < privp->conf->count; i++) {
360 offset = global_offset + privp->conf->ops[i].offset;
361
362 if (offset + privp->conf->ops[i].length > m->m_pkthdr.len)
363 continue;
364
365 /* for "=" operation we don't need to copy data from mbuf */
366 if (privp->conf->ops[i].mode != NG_PATCH_MODE_SET)
367 m_copydata(m, offset, privp->conf->ops[i].length, (caddr_t) &val);
368
369 switch (privp->conf->ops[i].length)
370 {
371 case 1:
372 switch (privp->conf->ops[i].mode)
373 {
374 case NG_PATCH_MODE_SET:
375 val.v1 = privp->conf->ops[i].val.v1;
376 break;
377 case NG_PATCH_MODE_ADD:
378 val.v1 += privp->conf->ops[i].val.v1;
379 break;
380 case NG_PATCH_MODE_SUB:
381 val.v1 -= privp->conf->ops[i].val.v1;
382 break;
383 case NG_PATCH_MODE_MUL:
384 val.v1 *= privp->conf->ops[i].val.v1;
385 break;
386 case NG_PATCH_MODE_DIV:
387 val.v1 /= privp->conf->ops[i].val.v1;
388 break;
389 case NG_PATCH_MODE_NEG:
390 *((int8_t *) &val) = - *((int8_t *) &val);
391 break;
392 case NG_PATCH_MODE_AND:
393 val.v1 &= privp->conf->ops[i].val.v1;
394 break;
395 case NG_PATCH_MODE_OR:
396 val.v1 |= privp->conf->ops[i].val.v1;
397 break;
398 case NG_PATCH_MODE_XOR:
399 val.v1 ^= privp->conf->ops[i].val.v1;
400 break;
401 case NG_PATCH_MODE_SHL:
402 val.v1 <<= privp->conf->ops[i].val.v1;
403 break;
404 case NG_PATCH_MODE_SHR:
405 val.v1 >>= privp->conf->ops[i].val.v1;
406 break;
407 }
408 break;
409
410 case 2:

Callers 1

ng_patch_rcvdataFunction · 0.85

Calls 2

m_copydataFunction · 0.85
m_copybackFunction · 0.85

Tested by

no test coverage detected