imgtec-ci20: genimage config/ u-boot env
[openadk.git] / package / mopd / src / common / put.c
blob12b6a02d88af5e84a0d4898d9ecbcaf13d26d679
1 /* $NetBSD: put.c,v 1.2 1997/03/25 03:07:33 thorpej Exp $ */
3 /*
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
8 * are met:
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.
14 * 3. All advertising materials mentioning features or use of this software
15 * must display the following acknowledgement:
16 * This product includes software developed by Mats O Jansson.
17 * 4. The name of the author may not be used to endorse or promote products
18 * derived from this software without specific prior written permission.
20 * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
21 * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
22 * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
23 * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
24 * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
25 * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
26 * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
27 * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
28 * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
29 * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
32 #include <sys/cdefs.h>
33 #ifndef lint
34 static char rcsid[]="$NetBSD: put.c,v 1.2 1997/03/25 03:07:33 thorpej Exp $";
35 #endif
37 #include "os.h"
38 #include "mopdef.h"
39 #include "put.h"
41 void
42 mopPutChar(pkt, index, value)
43 u_char *pkt;
44 int *index;
45 u_char value;
47 pkt[*index] = value;
48 *index = *index + 1;
51 void
52 mopPutShort(pkt, index, value)
53 u_char *pkt;
54 int *index;
55 u_short value;
57 int i;
58 for (i = 0; i < 2; i++) {
59 pkt[*index+i] = value % 256;
60 value = value / 256;
62 *index = *index + 2;
65 void
66 mopPutLong(pkt, index, value)
67 u_char *pkt;
68 int *index;
69 u_int32_t value;
71 int i;
72 for (i = 0; i < 4; i++) {
73 pkt[*index+i] = value % 256;
74 value = value / 256;
76 *index = *index + 4;
79 void
80 mopPutMulti(pkt, index, value, size)
81 u_char *pkt,*value;
82 int *index,size;
84 int i;
86 for (i = 0; i < size; i++) {
87 pkt[*index+i] = value[i];
89 *index = *index + size;
92 void
93 mopPutTime(pkt, index, value)
94 u_char *pkt;
95 int *index;
96 time_t value;
98 time_t tnow;
99 struct tm *timenow;
101 if ((value == 0)) {
102 tnow = time(NULL);
103 } else {
104 tnow = value;
107 timenow = localtime(&tnow);
109 mopPutChar (pkt,index,10);
110 mopPutChar (pkt,index,(timenow->tm_year / 100) + 19);
111 mopPutChar (pkt,index,(timenow->tm_year % 100));
112 mopPutChar (pkt,index,(timenow->tm_mon + 1));
113 mopPutChar (pkt,index,(timenow->tm_mday));
114 mopPutChar (pkt,index,(timenow->tm_hour));
115 mopPutChar (pkt,index,(timenow->tm_min));
116 mopPutChar (pkt,index,(timenow->tm_sec));
117 mopPutChar (pkt,index,0x00);
118 mopPutChar (pkt,index,0x00);
119 mopPutChar (pkt,index,0x00);
122 void
123 mopPutHeader(pkt, index, dst, src, proto, trans)
124 u_char *pkt;
125 int *index;
126 u_char dst[], src[];
127 u_short proto;
128 int trans;
131 mopPutMulti(pkt, index, dst, 6);
132 mopPutMulti(pkt, index, src, 6);
133 if (trans == TRANS_8023) {
134 mopPutShort(pkt, index, 0);
135 mopPutChar (pkt, index, MOP_K_PROTO_802_DSAP);
136 mopPutChar (pkt, index, MOP_K_PROTO_802_SSAP);
137 mopPutChar (pkt, index, MOP_K_PROTO_802_CNTL);
138 mopPutChar (pkt, index, 0x08);
139 mopPutChar (pkt, index, 0x00);
140 mopPutChar (pkt, index, 0x2b);
142 #if !defined(__FreeBSD__)
143 mopPutChar(pkt, index, (proto / 256));
144 mopPutChar(pkt, index, (proto % 256));
145 #else
146 if (trans == TRANS_8023) {
147 mopPutChar(pkt, index, (proto / 256));
148 mopPutChar(pkt, index, (proto % 256));
149 } else {
150 mopPutChar(pkt, index, (proto % 256));
151 mopPutChar(pkt, index, (proto / 256));
153 #endif
154 if (trans == TRANS_ETHER)
155 mopPutShort(pkt, index, 0);
159 void
160 mopPutLength(pkt, trans, len)
161 u_char *pkt;
162 int trans;
163 u_short len;
165 int index = 0;
167 switch(trans) {
168 case TRANS_ETHER:
169 index = 14;
170 mopPutChar(pkt, &index, ((len - 16) % 256));
171 mopPutChar(pkt, &index, ((len - 16) / 256));
172 break;
173 case TRANS_8023:
174 index = 12;
175 #if !defined(__FreeBSD__)
176 mopPutChar(pkt, &index, ((len - 14) / 256));
177 mopPutChar(pkt, &index, ((len - 14) % 256));
178 #else
179 mopPutChar(pkt, &index, ((len - 14) % 256));
180 mopPutChar(pkt, &index, ((len - 14) / 256));
181 #endif
182 break;