Subversion Repositories HelenOS

Rev

Rev 4719 | Go to most recent revision | Blame | Compare with Previous | Last modification | View Log | Download | RSS feed

  1. /*
  2.  * Copyright (c) 2008 Lukas Mejdrech
  3.  * All rights reserved.
  4.  *
  5.  * Redistribution and use in source and binary forms, with or without
  6.  * modification, are permitted provided that the following conditions
  7.  * are met:
  8.  *
  9.  * - 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 copyright
  12.  *   notice, this list of conditions and the following disclaimer in the
  13.  *   documentation and/or other materials provided with the distribution.
  14.  * - The name of the author may not be used to endorse or promote products
  15.  *   derived from this software without specific prior written permission.
  16.  *
  17.  * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
  18.  * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
  19.  * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
  20.  * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
  21.  * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
  22.  * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
  23.  * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
  24.  * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
  25.  * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
  26.  * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
  27.  */
  28.  
  29. /** @addtogroup icmp
  30.  *  @{
  31.  */
  32.  
  33. /** @file
  34.  *  ICMP module.
  35.  */
  36.  
  37. #ifndef __NET_ICMP_H__
  38. #define __NET_ICMP_H__
  39.  
  40. #include <fibril_sync.h>
  41.  
  42. #include "../../include/icmp_codes.h"
  43.  
  44. #include "../../structures/int_map.h"
  45. #include "../../structures/generic_field.h"
  46.  
  47. #include "icmp_header.h"
  48.  
  49. /** Type definition of the ICMP reply data.
  50.  *  @see icmp_reply
  51.  */
  52. typedef struct icmp_reply   icmp_reply_t;
  53.  
  54. /** Type definition of the ICMP reply data pointer.
  55.  *  @see icmp_reply
  56.  */
  57. typedef icmp_reply_t *  icmp_reply_ref;
  58.  
  59. /** Type definition of the ICMP global data.
  60.  *  @see icmp_globals
  61.  */
  62. typedef struct icmp_globals icmp_globals_t;
  63.  
  64. /** Pending replies map.
  65.  *  Maps message identifiers to the pending replies.
  66.  *  Sending fibril waits for its associated reply event.
  67.  *  Receiving fibril sets the associated reply with the return value and signals the event.
  68.  */
  69. INT_MAP_DECLARE( icmp_replies, icmp_reply_t );
  70.  
  71. /** Echo specific data field.
  72.  *  Used for bundle modules.
  73.  *  The bundle module gets an index to the assigned echo specific data while connecting.
  74.  *  The index is used in the future semi-remote calls instead of the ICMP phone.
  75.  */
  76. GENERIC_FIELD_DECLARE( icmp_echo_data, icmp_echo_t );
  77.  
  78. /** ICMP reply data.
  79.  */
  80. struct icmp_reply{
  81.     /** Reply result.
  82.      */
  83.     int                 result;
  84.     /** Safety lock.
  85.      */
  86.     fibril_mutex_t      mutex;
  87.     /** Received or timeouted reply signaling.
  88.      */
  89.     fibril_condvar_t    condvar;
  90. };
  91.  
  92. /** ICMP global data.
  93.  */
  94. struct  icmp_globals{
  95.     /** IP module phone.
  96.      */
  97.     int             ip_phone;
  98.     /** Reserved packet prefix length.
  99.      */
  100.     size_t          prefix;
  101.     /** Maximal packet content length.
  102.      */
  103.     size_t          content;
  104.     /** Reserved packet suffix length.
  105.      */
  106.     size_t          suffix;
  107.     /** Packet address length.
  108.      */
  109.     size_t          addr_len;
  110.     /** Networking module phone.
  111.      */
  112.     int             net_phone;
  113.     /** Indicates whether ICMP error reporting is enabled.
  114.      */
  115.     int             error_reporting;
  116.     /** Indicates whether ICMP echo replying (ping) is enabled.
  117.      */
  118.     int             echo_replying;
  119.     /** The last used identifier number.
  120.      */
  121.     icmp_param_t    last_used_id;
  122.     /** The budled modules assigned echo specific data.
  123.      */
  124.     icmp_echo_data_t    echo_data;
  125.     /** Echo timeout locks.
  126.      */
  127.     icmp_replies_t  replies;
  128.     /** Safety lock.
  129.      */
  130.     fibril_rwlock_t lock;
  131. };
  132.  
  133. #endif
  134.  
  135. /** @}
  136.  */
  137.  
  138.