1 /* $NetBSD: put.c,v 1.5 2009/10/20 00:51:13 snj Exp $ */
4 * Copyright (c) 1993-95 Mats O Jansson. All rights reserved.
6 * Redistribution and use in source and binary forms, with or without
7 * modification, are permitted provided that the following conditions
9 * 1. Redistributions of source code must retain the above copyright
10 * notice, this list of conditions and the following disclaimer.
11 * 2. Redistributions in binary form must reproduce the above copyright
12 * notice, this list of conditions and the following disclaimer in the
13 * documentation and/or other materials provided with the distribution.
15 * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
16 * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
17 * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
18 * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
19 * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
20 * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
21 * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
22 * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
23 * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
24 * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
27 #include <sys/cdefs.h>
29 __RCSID("$NetBSD: put.c,v 1.5 2009/10/20 00:51:13 snj Exp $");
37 mopPutChar(u_char
*pkt
, int *idx
, u_char value
)
44 mopPutShort(u_char
*pkt
, int *idx
, u_short value
)
47 for (i
= 0; i
< 2; i
++) {
48 pkt
[*idx
+i
] = value
% 256;
55 mopPutLong(u_char
*pkt
, int *idx
, u_int32_t value
)
58 for (i
= 0; i
< 4; i
++) {
59 pkt
[*idx
+i
] = value
% 256;
66 mopPutMulti(u_char
*pkt
, int *idx
, const u_char
*value
, int size
)
70 for (i
= 0; i
< size
; i
++) {
71 pkt
[*idx
+i
] = value
[i
];
77 mopPutTime(u_char
*pkt
, int *idx
, time_t value
)
88 timenow
= localtime(&tnow
);
90 mopPutChar (pkt
,idx
,10);
91 mopPutChar (pkt
,idx
,(timenow
->tm_year
/ 100) + 19);
92 mopPutChar (pkt
,idx
,(timenow
->tm_year
% 100));
93 mopPutChar (pkt
,idx
,(timenow
->tm_mon
+ 1));
94 mopPutChar (pkt
,idx
,(timenow
->tm_mday
));
95 mopPutChar (pkt
,idx
,(timenow
->tm_hour
));
96 mopPutChar (pkt
,idx
,(timenow
->tm_min
));
97 mopPutChar (pkt
,idx
,(timenow
->tm_sec
));
98 mopPutChar (pkt
,idx
,0x00);
99 mopPutChar (pkt
,idx
,0x00);
100 mopPutChar (pkt
,idx
,0x00);
104 mopPutHeader(u_char
*pkt
, int *idx
, const u_char
*dst
, const u_char
*src
,
105 u_short proto
, int trans
)
108 mopPutMulti(pkt
, idx
, dst
, 6);
109 mopPutMulti(pkt
, idx
, src
, 6);
110 if (trans
== TRANS_8023
) {
111 mopPutShort(pkt
, idx
, 0);
112 mopPutChar (pkt
, idx
, MOP_K_PROTO_802_DSAP
);
113 mopPutChar (pkt
, idx
, MOP_K_PROTO_802_SSAP
);
114 mopPutChar (pkt
, idx
, MOP_K_PROTO_802_CNTL
);
115 mopPutChar (pkt
, idx
, 0x08);
116 mopPutChar (pkt
, idx
, 0x00);
117 mopPutChar (pkt
, idx
, 0x2b);
119 #if !defined(__FreeBSD__)
120 mopPutChar(pkt
, idx
, (proto
/ 256));
121 mopPutChar(pkt
, idx
, (proto
% 256));
123 if (trans
== TRANS_8023
) {
124 mopPutChar(pkt
, idx
, (proto
/ 256));
125 mopPutChar(pkt
, idx
, (proto
% 256));
127 mopPutChar(pkt
, idx
, (proto
% 256));
128 mopPutChar(pkt
, idx
, (proto
/ 256));
131 if (trans
== TRANS_ETHER
)
132 mopPutShort(pkt
, idx
, 0);
137 mopPutLength(u_char
*pkt
, int trans
, u_short len
)
144 mopPutChar(pkt
, &idx
, ((len
- 16) % 256));
145 mopPutChar(pkt
, &idx
, ((len
- 16) / 256));
149 #if !defined(__FreeBSD__)
150 mopPutChar(pkt
, &idx
, ((len
- 14) / 256));
151 mopPutChar(pkt
, &idx
, ((len
- 14) % 256));
153 mopPutChar(pkt
, &idx
, ((len
- 14) % 256));
154 mopPutChar(pkt
, &idx
, ((len
- 14) / 256));