June 2025 | ||||||
Mo | Tu | We | Th | Fr | Sa | Su |
26 | 27 | 28 | 29 | 30 | 31 | 1 |
2 | 3 | 4 | 5 | 6 | 7 | 8 |
9 | 10 | 11 | 12 | 13 | 14 | 15 |
16 | 17 | 18 | 19 | 20 | 21 | 22 |
23 | 24 | 25 | 26 | 27 | 28 | 29 |
30 | 1 | 2 | 3 | 4 | 5 | 6 |
01: /* @(#)spray.x 2.1 88/08/01 4.0 RPCSRC */ 02: 03: /* 04: * Copyright (c) 2010, Oracle America, Inc. 05: * Redistribution and use in source and binary forms, with or without 06: * modification, are permitted provided that the following conditions are 07: * met: 08: * 09: * * Redistributions of source code must retain the above copyright 10: * notice, this list of conditions and the following disclaimer. 11: * * Redistributions in binary form must reproduce the above 12: * copyright notice, this list of conditions and the following 13: * disclaimer in the documentation and/or other materials 14: * provided with the distribution. 15: * * Neither the name of the "Oracle America, Inc." nor the names of its 16: * contributors may be used to endorse or promote products derived 17: * from this software without specific prior written permission. 18: * 19: * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS 20: * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT 21: * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS 22: * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE 23: * COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, 24: * INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL 25: * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE 26: * GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS 27: * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, 28: * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING 29: * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE 30: * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 31: */ 32: 33: /* 34: * Spray a server with packets 35: * Useful for testing flakiness of network interfaces 36: */ 37: 38: const SPRAYMAX = 8845; /* max amount can spray */ 39: 40: /* 41: * GMT since 0:00, 1 January 1970 42: */ 43: struct spraytimeval { 44: unsigned int sec; 45: unsigned int usec; 46: }; 47: 48: /* 49: * spray statistics 50: */ 51: struct spraycumul { 52: unsigned int counter; 53: spraytimeval clock; 54: }; 55: 56: /* 57: * spray data 58: */ 59: typedef opaque sprayarr<SPRAYMAX>; 60: 61: program SPRAYPROG { 62: version SPRAYVERS { 63: /* 64: * Just throw away the data and increment the counter 65: * This call never returns, so the client should always 66: * time it out. 67: */ 68: void 69: SPRAYPROC_SPRAY(sprayarr) = 1; 70: 71: /* 72: * Get the value of the counter and elapsed time since 73: * last CLEAR. 74: */ 75: spraycumul 76: SPRAYPROC_GET(void) = 2; 77: 78: /* 79: * Clear the counter and reset the elapsed time 80: */ 81: void 82: SPRAYPROC_CLEAR(void) = 3; 83: } = 1; 84: } = 100012; 85: