Subversion Repositories HelenOS

Rev

Rev 4720 | 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.  
  46. #include "icmp_header.h"
  47.  
  48. /** Type definition of the ICMP reply data.
  49.  *  @see icmp_reply
  50.  */
  51. typedef struct icmp_reply   icmp_reply_t;
  52.  
  53. /** Type definition of the ICMP reply data pointer.
  54.  *  @see icmp_reply
  55.  */
  56. typedef icmp_reply_t *  icmp_reply_ref;
  57.  
  58. /** Type definition of the ICMP global data.
  59.  *  @see icmp_globals
  60.  */
  61. typedef struct icmp_globals icmp_globals_t;
  62.  
  63. /** Pending replies map.
  64.  *  Maps message identifiers to the pending replies.
  65.  *  Sending fibril waits for its associated reply event.
  66.  *  Receiving fibril sets the associated reply with the return value and signals the event.
  67.  */
  68. INT_MAP_DECLARE( icmp_replies, icmp_reply_t );
  69.  
  70. /** Echo specific data map.
  71.  *  The bundle module gets an identifier of the assigned echo specific data while connecting.
  72.  *  The identifier is used in the future semi-remote calls instead of the ICMP phone.
  73.  */
  74. INT_MAP_DECLARE( icmp_echo_data, icmp_echo_t );
  75.  
  76. /** ICMP reply data.
  77.  */
  78. struct icmp_reply{
  79.     /** Reply result.
  80.      */
  81.     int                 result;
  82.     /** Safety lock.
  83.      */
  84.     fibril_mutex_t      mutex;
  85.     /** Received or timeouted reply signaling.
  86.      */
  87.     fibril_condvar_t    condvar;
  88. };
  89.  
  90. /** ICMP global data.
  91.  */
  92. struct  icmp_globals{
  93.     /** IP module phone.
  94.      */
  95.     int             ip_phone;
  96.     /** Reserved packet prefix length.
  97.      */
  98.     size_t          prefix;
  99.     /** Maximal packet content length.
  100.      */
  101.     size_t          content;
  102.     /** Reserved packet suffix length.
  103.      */
  104.     size_t          suffix;
  105.     /** Packet address length.
  106.      */
  107.     size_t          addr_len;
  108.     /** Networking module phone.
  109.      */
  110.     int             net_phone;
  111.     /** Indicates whether ICMP error reporting is enabled.
  112.      */
  113.     int             error_reporting;
  114.     /** Indicates whether ICMP echo replying (ping) is enabled.
  115.      */
  116.     int             echo_replying;
  117.     /** The last used identifier number.
  118.      */
  119.     icmp_param_t    last_used_id;
  120.     /** The budled modules assigned echo specific data.
  121.      */
  122.     icmp_echo_data_t    echo_data;
  123.     /** Echo timeout locks.
  124.      */
  125.     icmp_replies_t  replies;
  126.     /** Safety lock.
  127.      */
  128.     fibril_rwlock_t lock;
  129. };
  130.  
  131. #endif
  132.  
  133. /** @}
  134.  */
  135.  
  136.