File:  [ELWIX - Embedded LightWeight unIX -] / embedaddon / dnsmasq / src / outpacket.c
Revision 1.1.1.1 (vendor branch): download - view: text, annotated - select for diffs - revision graph
Mon Jul 29 19:37:40 2013 UTC (10 years, 11 months ago) by misho
Branches: elwix, dnsmasq, MAIN
CVS tags: v2_66p0, v2_66, HEAD
dnsmasq

    1: /* dnsmasq is Copyright (c) 2000-2013 Simon Kelley
    2: 
    3:    This program is free software; you can redistribute it and/or modify
    4:    it under the terms of the GNU General Public License as published by
    5:    the Free Software Foundation; version 2 dated June, 1991, or
    6:    (at your option) version 3 dated 29 June, 2007.
    7:  
    8:    This program is distributed in the hope that it will be useful,
    9:    but WITHOUT ANY WARRANTY; without even the implied warranty of
   10:    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
   11:    GNU General Public License for more details.
   12:      
   13:    You should have received a copy of the GNU General Public License
   14:    along with this program.  If not, see <http://www.gnu.org/licenses/>.
   15: */
   16: 
   17: 
   18: #include "dnsmasq.h"
   19:  
   20: #ifdef HAVE_DHCP6
   21: 
   22: static size_t outpacket_counter;
   23: 
   24: void end_opt6(int container)
   25: {
   26:    void *p = daemon->outpacket.iov_base + container + 2;
   27:    u16 len = outpacket_counter - container - 4 ;
   28:    
   29:    PUTSHORT(len, p);
   30: }
   31: 
   32: int save_counter(int newval)
   33: {
   34:   int ret = outpacket_counter;
   35:   if (newval != -1)
   36:     outpacket_counter = newval;
   37: 
   38:   return ret;
   39: }
   40: 
   41: void *expand(size_t headroom)
   42: {
   43:   void *ret;
   44: 
   45:   if (expand_buf(&daemon->outpacket, outpacket_counter + headroom))
   46:     {
   47:       ret = daemon->outpacket.iov_base + outpacket_counter;
   48:       outpacket_counter += headroom;
   49:       return ret;
   50:     }
   51:   
   52:   return NULL;
   53: }
   54:     
   55: int new_opt6(int opt)
   56: {
   57:   int ret = outpacket_counter;
   58:   void *p;
   59: 
   60:   if ((p = expand(4)))
   61:     {
   62:       PUTSHORT(opt, p);
   63:       PUTSHORT(0, p);
   64:     }
   65: 
   66:   return ret;
   67: }
   68: 
   69: void *put_opt6(void *data, size_t len)
   70: {
   71:   void *p;
   72: 
   73:   if ((p = expand(len)))
   74:     memcpy(p, data, len);   
   75: 
   76:   return p;
   77: }
   78:   
   79: void put_opt6_long(unsigned int val)
   80: {
   81:   void *p;
   82:   
   83:   if ((p = expand(4)))  
   84:     PUTLONG(val, p);
   85: }
   86: 
   87: void put_opt6_short(unsigned int val)
   88: {
   89:   void *p;
   90: 
   91:   if ((p = expand(2)))
   92:     PUTSHORT(val, p);   
   93: }
   94: 
   95: void put_opt6_char(unsigned int val)
   96: {
   97:   unsigned char *p;
   98: 
   99:   if ((p = expand(1)))
  100:     *p = val;   
  101: }
  102: 
  103: void put_opt6_string(char *s)
  104: {
  105:   put_opt6(s, strlen(s));
  106: }
  107: 
  108: #endif

FreeBSD-CVSweb <freebsd-cvsweb@FreeBSD.org>