Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Support
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in / Register
Toggle navigation
P
proview
Project overview
Project overview
Details
Activity
Releases
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Issues
0
Issues
0
List
Boards
Labels
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Analytics
Analytics
CI / CD
Repository
Value Stream
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
Esteban Blanc
proview
Commits
8bc5d1b2
Commit
8bc5d1b2
authored
Feb 07, 2003
by
ml
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
Added support for net version 7, no Cached Classes
parent
4bd49851
Changes
5
Hide whitespace changes
Inline
Side-by-side
Showing
5 changed files
with
362 additions
and
242 deletions
+362
-242
src/lib/rt/src/rt_cmvolc.c
src/lib/rt/src/rt_cmvolc.c
+8
-0
src/lib/rt/src/rt_cvol.c
src/lib/rt/src/rt_cvol.c
+7
-1
src/lib/rt/src/rt_gdb.h
src/lib/rt/src/rt_gdb.h
+237
-229
src/lib/rt/src/rt_net.c
src/lib/rt/src/rt_net.c
+46
-7
src/lib/rt/src/rt_net.x
src/lib/rt/src/rt_net.x
+64
-5
No files found.
src/lib/rt/src/rt_cmvolc.c
View file @
8bc5d1b2
...
...
@@ -100,6 +100,14 @@ cmvolc_GetCachedClass (
*
fetched
=
0
;
/* Handle nodes that don't support cached classes */
if
(
!
np
->
cclassSupport
)
{
*
equal
=
1
;
ap
->
op
->
u
.
c
.
flags
.
b
.
classChecked
=
1
;
ap
->
op
->
u
.
c
.
flags
.
b
.
classEqual
=
1
;
pwr_Return
(
NULL
,
sts
,
GDH__SUCCESS
);
}
/** @todo Check vp->u.c.equalClasses first (when implemented) */
...
...
src/lib/rt/src/rt_cvol.c
View file @
8bc5d1b2
...
...
@@ -197,7 +197,7 @@ cvol_LinkObject (
gdb_sObject
*
cvol_LoadObject
(
pwr_tStatus
*
sts
,
gdb_sNode
*
np
,
gdb_sNode
*
np
,
gdb_sVolume
*
vp
,
net_sGobject
*
gop
)
...
...
@@ -223,6 +223,12 @@ cvol_LoadObject (
op
=
cvol_LinkObject
(
&
lsts
,
vp
,
op
,
vol_mLink_load
);
if
(
op
==
NULL
)
errh_Bugcheck
(
lsts
,
"cvol_LinkObject"
);
if
(
!
np
->
cclassSupport
)
{
op
->
u
.
c
.
flags
.
b
.
classChecked
=
1
;
op
->
u
.
c
.
flags
.
b
.
classEqual
=
1
;
}
pwr_Return
(
op
,
sts
,
GDH__SUCCESS
);
}
...
...
src/lib/rt/src/rt_gdb.h
View file @
8bc5d1b2
...
...
@@ -249,8 +249,8 @@ typedef union {
pwr_Bits
(
cacheFree
,
1
),
pwr_Bits
(
isParent
,
1
),
pwr_Bits
(
classChecked
,
1
),
/* set if we have checked if it has the same class version */
pwr_Bits
(
classEqual
,
1
),
/*
set if native and remote class is equal */
pwr_Bits
(
classChecked
,
1
),
/*
*<
set if we have checked if it has the same class version */
pwr_Bits
(
classEqual
,
1
),
/**<
set if native and remote class is equal */
pwr_Bits
(
fill_1
,
5
),,,,,
pwr_Bits
(
sancAdd
,
1
),
...
...
@@ -271,7 +271,7 @@ typedef union {
#define gdb_mCo_cachePend pwr_Bit(6)
#define gdb_mCo_cacheFree pwr_Bit(7)
#define gdb_mCo_isParent pwr_Bit(8)
/*
Is probably not needed! */
#define gdb_mCo_isParent pwr_Bit(8)
/**<
Is probably not needed! */
#define gdb_mCo_classChecked pwr_Bit(9)
#define gdb_mCo_classEqual pwr_Bit(10)
...
...
@@ -362,7 +362,7 @@ typedef union {
}
gdb_mNv
;
typedef
struct
{
pool_sQlink
volmo_lh
;
/*
List of 'mounted on' in this volume. */
pool_sQlink
volmo_lh
;
/**<
List of 'mounted on' in this volume. */
gdb_mNv
flags
;
pwr_tObjid
next_oid
;
co_mFormat
format
;
...
...
@@ -441,13 +441,13 @@ typedef union {
}
gdb_mLv
;
typedef
struct
{
pool_sQlink
vid_htl
;
/*
Link in the vid-to-volume hash table. */
pool_sQlink
vn_htl
;
/*
Link in the name-to-volume hash table. */
pool_sQlink
vol_ll
;
/*
Link in the list of volumes known in one node. */
pool_sQlink
own_ll
;
/*
Link in the list of volumes owned by one node. */
pool_sQlink
obj_lh
;
/*
List of objects in this volume. */
pool_sQlink
volms_lh
;
/*
List of mount servers in this volume. */
pool_tRef
nr
;
/*
Reference to node. */
pool_sQlink
vid_htl
;
/**<
Link in the vid-to-volume hash table. */
pool_sQlink
vn_htl
;
/**<
Link in the name-to-volume hash table. */
pool_sQlink
vol_ll
;
/**<
Link in the list of volumes known in one node. */
pool_sQlink
own_ll
;
/**<
Link in the list of volumes owned by one node. */
pool_sQlink
obj_lh
;
/**<
List of objects in this volume. */
pool_sQlink
volms_lh
;
/**<
List of mount servers in this volume. */
pool_tRef
nr
;
/**<
Reference to node. */
gdb_mLv
flags
;
}
gdb_sLvolume
;
...
...
@@ -569,7 +569,7 @@ typedef struct {
/* Object.
/*
*
Object.
An object is represented by different parts.
...
...
@@ -640,18 +640,18 @@ typedef union {
}
gdb_mLo
;
typedef
struct
{
pwr_tUInt32
maxa
;
/*
maximized remote alarm level */
pwr_tUInt32
maxb
;
/* maximized remote block level */
pwr_tUInt32
idx
;
/* Alarm block level index. */
pwr_tUInt32
maxa
;
/**<
maximized remote alarm level */
pwr_tUInt32
maxb
;
/*
*<
maximized remote block level */
pwr_tUInt32
idx
;
/*
*<
Alarm block level index. */
}
gdb_sRalarm
;
typedef
struct
{
pool_sQlink
obj_ll
;
/* List of objects in one volume. */
pool_sQlink
oid_htl
;
/* Oid hash table entry. */
pool_sQlink
family_htl
;
/* Family table entry. */
pool_tRef
por
;
/* The parent object. */
pool_tRef
vr
;
/* Reference to the volume. */
net_sAlarm
al
;
/* Alarm. */
pool_sQlink
obj_ll
;
/*
*<
List of objects in one volume. */
pool_sQlink
oid_htl
;
/*
*<
Oid hash table entry. */
pool_sQlink
family_htl
;
/*
*<
Family table entry. */
pool_tRef
por
;
/*
*<
The parent object. */
pool_tRef
vr
;
/*
*<
Reference to the volume. */
net_sAlarm
al
;
/*
*<
Alarm. */
gdb_mLo
flags
;
}
gdb_sLobject
;
...
...
@@ -701,151 +701,158 @@ typedef union {
}
gdb_mNo
;
typedef
struct
{
pool_sQlink
cid_ll
;
/* Next/prv object of same class */
pool_sQlink
cli_ll
;
/* Mount/Alias client list. */
pool_sQlink
sib_lh
;
/* Head of children sibling list. */
pool_sQlink
sib_ll
;
/* Sibling list. */
pool_tRef
body
;
/* Address of actual body in rtdbpool. */
pool_sQlink
cid_ll
;
/*
*<
Next/prv object of same class */
pool_sQlink
cli_ll
;
/*
*<
Mount/Alias client list. */
pool_sQlink
sib_lh
;
/*
*<
Head of children sibling list. */
pool_sQlink
sib_ll
;
/*
*<
Sibling list. */
pool_tRef
body
;
/*
*<
Address of actual body in rtdbpool. */
pwr_tTime
time
;
pwr_tUInt32
dlcount
;
pwr_tUInt32
subcount
;
pwr_tUInt32
sancount
;
gdb_sRalarm
ral
;
/* Remote alarm. */
gdb_sRalarm
ral
;
/*
*<
Remote alarm. */
gdb_mNo
flags
;
dbs_mFlags
lflags
;
}
gdb_sNobject
;
typedef
struct
{
pool_sQlink
cache_ll
;
/* Cache list */
pool_sQlink
sanc_ll
;
/* Subscribed alarm notification client list. */
pwr_tRefId
sanid
;
/* Subscribed alarm notification identity. */
pwr_tUInt32
sanexp
;
/* Expiration time for san, san-scan-index format. */
pwr_tUInt32
nChild
;
/* Number of children in cache. */
pool_sQlink
cache_ll
;
/*
*<
Cache list */
pool_sQlink
sanc_ll
;
/*
*<
Subscribed alarm notification client list. */
pwr_tRefId
sanid
;
/*
*<
Subscribed alarm notification identity. */
pwr_tUInt32
sanexp
;
/*
*<
Expiration time for san, san-scan-index format. */
pwr_tUInt32
nChild
;
/*
*<
Number of children in cache. */
gdb_mCo
flags
;
}
gdb_sCobject
;
typedef
struct
{
gdb_sLobject
l
;
/* Local part. */
net_sGobject
g
;
/* Global part. */
gdb_sLobject
l
;
/*
*<
Local part. */
net_sGobject
g
;
/*
*<
Global part. */
union
{
gdb_sNobject
n
;
/* Native part, */
gdb_sCobject
c
;
/* Cached part. */
gdb_sNobject
n
;
/*
*<
Native part, */
gdb_sCobject
c
;
/*
*<
Cached part. */
}
u
;
}
gdb_sObject
;
typedef
struct
{
pool_tRef
aor
;
/* Attribute object header reference. */
pool_tRef
abr
;
/* Attribute object header reference. */
pool_tRef
aor
;
/*
*<
Attribute object header reference. */
pool_tRef
abr
;
/*
*<
Attribute object header reference. */
pwr_mAdef
flags
;
pwr_eType
type
;
pwr_tUInt32
offs
;
pwr_tUInt32
size
;
pwr_tUInt32
elem
;
pwr_tUInt32
moffset
;
/* Attribute maximum offset within body. */
pwr_tUInt32
moffset
;
/*
*<
Attribute maximum offset within body. */
pwr_tAix
aix
;
}
gdb_sAttribute
;
typedef
struct
{
pool_sQlink
cid_htl
;
/* Entry in class hash table. */
pwr_tClassId
cid
;
/* Class identity of class. */
pool_sQlink
class_ll
;
/* Entry in list of classes on node. */
pool_sQlink
cid_lh
;
/* Head of instance list of this class,
pool_sQlink
cid_htl
;
/*
*<
Entry in class hash table. */
pwr_tClassId
cid
;
/*
*<
Class identity of class. */
pool_sQlink
class_ll
;
/*
*<
Entry in list of classes on node. */
pool_sQlink
cid_lh
;
/*
*<
Head of instance list of this class,
Template excluded. */
pool_tRef
cor
;
/* Class object header reference. */
pool_tRef
cbr
;
/* Class object body reference. */
pool_tRef
bor
;
/* ObjBodyDef object header reference. */
pool_tRef
bbr
;
/* ObjBodyDef object body reference. */
pwr_tUInt32
size
;
/* Size of objects body. */
pwr_tUInt32
acount
;
/* Number of attributes. */
pool_tRef
cor
;
/*
*<
Class object header reference. */
pool_tRef
cbr
;
/*
*<
Class object body reference. */
pool_tRef
bor
;
/*
*<
ObjBodyDef object header reference. */
pool_tRef
bbr
;
/*
*<
ObjBodyDef object body reference. */
pwr_tUInt32
size
;
/*
*<
Size of objects body. */
pwr_tUInt32
acount
;
/*
*<
Number of attributes. */
/* Not needed ???
pool_tRef ar; */
/* Pool reference to first attribute in gdb_sAttribute block. */
/*
*<
Pool reference to first attribute in gdb_sAttribute block. */
gdb_sAttribute
attr
[
1
];
}
gdb_sClass
;
typedef
struct
{
pool_sQlink
volmo_ll
;
/* Volume mounted on list. */
pool_sQlink
nodmo_ll
;
/* Node mounted on list. */
pool_sQlink
volmo_ll
;
/*
*<
Volume mounted on list. */
pool_sQlink
nodmo_ll
;
/*
*<
Node mounted on list. */
pwr_tNodeId
nid
;
pwr_tVolumeId
vid
;
pool_tRef
vr
;
/* Pool reference of the volume. */
pool_tRef
nr
;
/* Pool reference of the node. */
pool_tRef
vr
;
/*
*<
Pool reference of the volume. */
pool_tRef
nr
;
/*
*<
Pool reference of the node. */
}
gdb_sMountedOn
;
typedef
struct
{
pwr_tObjid
oid
;
/* Object identity of server object. */
pool_sQlink
ms_htl
;
/* Entry in server hash table. */
pool_sQlink
ms_ll
;
/* Entry in list of all mount servers */
pool_sQlink
nodms_ll
;
/* Entry in server node's mount server list. */
pool_sQlink
volms_ll
;
/* Entry in server volume's mount server list. */
pool_tRef
msor
;
/* Object head of mount server. */
pool_tRef
vr
;
/* Volume. */
pool_sQlink
cli_lh
;
/* Header of mount client list. */
pwr_tObjid
oid
;
/*
*<
Object identity of server object. */
pool_sQlink
ms_htl
;
/*
*<
Entry in server hash table. */
pool_sQlink
ms_ll
;
/*
*<
Entry in list of all mount servers */
pool_sQlink
nodms_ll
;
/*
*<
Entry in server node's mount server list. */
pool_sQlink
volms_ll
;
/*
*<
Entry in server volume's mount server list. */
pool_tRef
msor
;
/*
*<
Object head of mount server. */
pool_tRef
vr
;
/*
*<
Volume. */
pool_sQlink
cli_lh
;
/*
*<
Header of mount client list. */
}
gdb_sMountServer
;
typedef
struct
{
pwr_tObjid
oid
;
/* Object identity of server object. */
pool_sQlink
as_htl
;
/* Entry in Alias server hash table. */
pool_sQlink
as_ll
;
/* Entry in list of all alias servers */
pool_tRef
asor
;
/* Server oh. */
pool_sQlink
cli_lh
;
/* Alias client object header list. */
pwr_tObjid
oid
;
/*
*<
Object identity of server object. */
pool_sQlink
as_htl
;
/*
*<
Entry in Alias server hash table. */
pool_sQlink
as_ll
;
/*
*<
Entry in list of all alias servers */
pool_tRef
asor
;
/*
*<
Server oh. */
pool_sQlink
cli_lh
;
/*
*<
Alias client object header list. */
}
gdb_sAliasServer
;
typedef
struct
{
pwr_tNodeId
nid
;
/* Node identity (!= qcom nix #) */
pool_sQlink
nid_htl
;
/* Link in nid-to-node hash table. */
pool_sQlink
nod_ll
;
/* Link in list of all nodes. */
pool_sQlink
own_lh
;
/* Header of list of volumes owned by this node. */
pwr_tUInt32
own_lc
;
/* Number of owned volumes. */
char
name
[
32
];
/* Ascii name of node (nul-terminated)
pwr_tNodeId
nid
;
/*
*<
Node identity (!= qcom nix #) */
pool_sQlink
nid_htl
;
/*
*<
Link in nid-to-node hash table. */
pool_sQlink
nod_ll
;
/*
*<
Link in list of all nodes. */
pool_sQlink
own_lh
;
/*
*<
Header of list of volumes owned by this node. */
pwr_tUInt32
own_lc
;
/*
*<
Number of owned volumes. */
char
name
[
32
];
/*
*<
Ascii name of node (nul-terminated)
zero-length means empty slot. */
pwr_tObjid
nod_oid
;
/* Node object for this node. */
pwr_tObjid
vol_oid
;
/* Root volume object of this node. */
pwr_tObjid
nod_oid
;
/*
*<
Node object for this node. */
pwr_tObjid
vol_oid
;
/*
*<
Root volume object of this node. */
gdb_mNode
flags
;
pwr_tUInt32
upcnt
;
/* # of times up */
pwr_tTime
timeup
;
/* Most recent time link came up */
pwr_tTime
timedown
;
/* Most recent time link went down */
pwr_tUInt32
upcnt
;
/*
*<
# of times up */
pwr_tTime
timeup
;
/*
*<
Most recent time link came up */
pwr_tTime
timedown
;
/*
*<
Most recent time link went down */
co_eOS
os
;
co_eHW
hw
;
co_mFormat
fm
;
pool_sQlink
nodms_lh
;
/* Header of list of mountservers for this node. Client */
pool_sQlink
nodms_lh
;
/*
*<
Header of list of mountservers for this node. Client */
pool_sQlink
nodmo_lh
;
/* Header of list of 'mounted on' for this node. Server */
pool_sQlink
nodmo_lh
;
/*
*<
Header of list of 'mounted on' for this node. Server */
/* Cache. */
gdb_sTouchQ
cacheNode
;
/* Header of cache list for this node. */
gdb_sTouchQ
cacheNode
;
/*
*<
Header of cache list for this node. */
pool_sQlink
ccvol_lh
;
/* List of cached class volumes */
pool_sQlink
ccvol_lh
;
/*
*<
List of cached class volumes */
/* Subscriptions. */
pool_sQlink
subc_lh
;
/* Header of list of clients served by this node. */
pwr_tUInt32
subc_lc
;
/* Number of clients in list above. */
pool_sQlink
subc_lh
;
/*
*<
Header of list of clients served by this node. */
pwr_tUInt32
subc_lc
;
/*
*<
Number of clients in list above. */
pool_sQlink
nodsubs_lh
;
/* Header of list servers for this node. */
pool_sQlink
nodsubb_lh
;
/* Header of list of buffer for this node. */
pool_sQlink
nodsubs_lh
;
/*
*<
Header of list servers for this node. */
pool_sQlink
nodsubb_lh
;
/*
*<
Header of list of buffer for this node. */
/* Subscribed alarm and block notification. */
pool_sQlink
sansAct_lh
;
/* Header of list of servers. */
pwr_tUInt32
sansAct_lc
;
/* Number of servers. */
pool_sQlink
sansUpd_lh
;
/* Header of list of servers to send to client. */
pwr_tUInt32
sansUpd_lc
;
/* Number of servers. */
pwr_tUInt32
sans_gen
;
/* Incremented when a sans is added or removed */
pool_sQlink
sansAct_lh
;
/*
*<
Header of list of servers. */
pwr_tUInt32
sansAct_lc
;
/*
*<
Number of servers. */
pool_sQlink
sansUpd_lh
;
/*
*<
Header of list of servers to send to client. */
pwr_tUInt32
sansUpd_lc
;
/*
*<
Number of servers. */
pwr_tUInt32
sans_gen
;
/*
*<
Incremented when a sans is added or removed */
pool_sQlink
sancAdd_lh
;
/* Clients to be added. */
pool_sQlink
sancAdd_lh
;
/*
*<
Clients to be added. */
pwr_tUInt32
sancAdd_lc
;
pool_sQlink
sancAct_lh
;
/* Active clients. */
pool_sQlink
sancAct_lh
;
/*
*<
Active clients. */
pwr_tUInt32
sancAct_lc
;
pool_sQlink
sancRem_lh
;
/* Clients to be removed. */
pool_sQlink
sancRem_lh
;
/*
*<
Clients to be removed. */
pwr_tUInt32
sancRem_lc
;
/* Supported functionality. Please consider a bitmask if you add more */
pwr_tUInt32
netver
;
/**< Net protocol version */
pwr_tBoolean
cclassSupport
;
/**< Cached Class Support */
/* Receive information counters, Nethandler class */
pwr_tUInt32
rxmsg
[
net_eMsg_
];
...
...
@@ -854,117 +861,118 @@ typedef struct {
pwr_tUInt32
txmsg
[
net_eMsg_
];
}
gdb_sNode
;
typedef
struct
{
pwr_tNodeId
nid
;
/* Node index for this node */
pwr_tObjid
nod_oid
;
/* Object identifier for the node object. */
pwr_tUInt32
objects
;
/* Number of */
pwr_tUInt32
volumes
;
/* Number of */
pwr_tUInt32
classes
;
/* Number of */
pwr_tUInt32
nodes
;
/* Number of */
pwr_tUInt32
ccvolumes
;
/* Number of cached class volumes */
pwr_tUInt32
cclasses
;
/* Number of cached classes */
pwr_tUInt32
mountServers
;
/* Number of */
pwr_tUInt32
aliasServers
;
/* Number of */
pwr_tUInt32
subServers
;
/* Number of */
pwr_tUInt32
subClients
;
/* Number of */
pwr_tUInt32
sanServers
;
/* Number of */
pwr_tUInt32
pool_isize
;
/* GDHpool initial size */
pwr_tUInt32
pool_esize
;
/* GDHpool extendsize */
pwr_tUInt32
rtdb_isize
;
/* rtdb initial size */
pwr_tUInt32
rtdb_esize
;
/* rtdb extendsize */
pwr_tUInt32
cvol_max
;
/* cache trimmer activation level */
pwr_tUInt32
cvol_min
;
/* cahce trimmer end criteria */
pwr_tNodeId
nid
;
/*
*<
Node index for this node */
pwr_tObjid
nod_oid
;
/*
*<
Object identifier for the node object. */
pwr_tUInt32
objects
;
/*
*<
Number of */
pwr_tUInt32
volumes
;
/*
*<
Number of */
pwr_tUInt32
classes
;
/*
*<
Number of */
pwr_tUInt32
nodes
;
/*
*<
Number of */
pwr_tUInt32
ccvolumes
;
/*
*<
Number of cached class volumes */
pwr_tUInt32
cclasses
;
/*
*<
Number of cached classes */
pwr_tUInt32
mountServers
;
/*
*<
Number of */
pwr_tUInt32
aliasServers
;
/*
*<
Number of */
pwr_tUInt32
subServers
;
/*
*<
Number of */
pwr_tUInt32
subClients
;
/*
*<
Number of */
pwr_tUInt32
sanServers
;
/*
*<
Number of */
pwr_tUInt32
pool_isize
;
/*
*<
GDHpool initial size */
pwr_tUInt32
pool_esize
;
/*
*<
GDHpool extendsize */
pwr_tUInt32
rtdb_isize
;
/*
*<
rtdb initial size */
pwr_tUInt32
rtdb_esize
;
/*
*<
rtdb extendsize */
pwr_tUInt32
cvol_max
;
/*
*<
cache trimmer activation level */
pwr_tUInt32
cvol_min
;
/*
*<
cahce trimmer end criteria */
}
gdb_sInit
;
/* The global database header. */
typedef
struct
{
sect_sMutex
lock
;
/* Database lock */
pid_t
excl_owner
;
/* Owner of the excl lock */
pid_t
lock_owner
;
/* Owner of db lock */
pwr_tUInt32
version
;
/* Gdb structure revision. */
sect_sMutex
lock
;
/*
*<
Database lock */
pid_t
excl_owner
;
/*
*<
Owner of the excl lock */
pid_t
lock_owner
;
/*
*<
Owner of db lock */
pwr_tUInt32
version
;
/*
*<
Gdb structure revision. */
struct
{
hash_sGtable
subc_ht
;
/* sid -> client hash table. */
hash_sGtable
subs_ht
;
/* sid -> server hash table. */
hash_sGtable
sans_ht
;
/* sanid -> server hash table. */
hash_sGtable
oid_ht
;
/* oid -> object hash table. */
hash_sGtable
vid_ht
;
/* vid -> volume hash table. */
hash_sGtable
vn_ht
;
/* volume name -> volume hash table. */
hash_sGtable
cid_ht
;
/* cid -> class hash table. */
hash_sGtable
tid_ht
;
/* tid -> type hash table. */
hash_sGtable
nid_ht
;
/* nid -> node hash table. */
hash_sGtable
family_ht
;
/* Family (poid + name) -> object hash table. */
hash_sGtable
ms_ht
;
/* mount soid -> mount server hash table. */
hash_sGtable
as_ht
;
/* mount soid -> alias server hash table. */
hash_sGtable
ccvol_ht
;
/* nid + vid -> cached class volume */
hash_sGtable
cclass_ht
;
/* cid + cached voltime -> cached class */
hash_sGtable
subc_ht
;
/*
*<
sid -> client hash table. */
hash_sGtable
subs_ht
;
/*
*<
sid -> server hash table. */
hash_sGtable
sans_ht
;
/*
*<
sanid -> server hash table. */
hash_sGtable
oid_ht
;
/*
*<
oid -> object hash table. */
hash_sGtable
vid_ht
;
/*
*<
vid -> volume hash table. */
hash_sGtable
vn_ht
;
/*
*<
volume name -> volume hash table. */
hash_sGtable
cid_ht
;
/*
*<
cid -> class hash table. */
hash_sGtable
tid_ht
;
/*
*<
tid -> type hash table. */
hash_sGtable
nid_ht
;
/*
*<
nid -> node hash table. */
hash_sGtable
family_ht
;
/*
*<
Family (poid + name) -> object hash table. */
hash_sGtable
ms_ht
;
/*
*<
mount soid -> mount server hash table. */
hash_sGtable
as_ht
;
/*
*<
mount soid -> alias server hash table. */
hash_sGtable
ccvol_ht
;
/*
*<
nid + vid -> cached class volume */
hash_sGtable
cclass_ht
;
/*
*<
cid + cached voltime -> cached class */
}
h
;
qcom_sQid
nethandler
;
/* local nethandler */
qcom_sQid
neth_acp
;
/* local neth acp */
qcom_sQid
tmon
;
/* local neth acp */
qcom_sQid
nethandler
;
/*
*<
local nethandler */
qcom_sQid
neth_acp
;
/*
*<
local neth acp */
qcom_sQid
tmon
;
/*
*<
local neth acp */
gdb_sTouchQ
cacheCom
;
/* Root of touched list */
gdb_sTouchQ
cacheNew
;
/* Root of new list */
gdb_sTouchQ
cacheOld
;
/* Root of old list */
gdb_sTouchQ
cachePend
;
/* Root of touched parent list */
gdb_sTouchQ
cacheFree
;
/* Root of free list */
gdb_sTouchQ
cacheCom
;
/*
*<
Root of touched list */
gdb_sTouchQ
cacheNew
;
/*
*<
Root of new list */
gdb_sTouchQ
cacheOld
;
/*
*<
Root of old list */
gdb_sTouchQ
cachePend
;
/*
*<
Root of touched parent list */
gdb_sTouchQ
cacheFree
;
/*
*<
Root of free list */
gdb_sTouchQ
cacheCclass
;
/* Root of cached class list */
gdb_sTouchQ
cacheCclass
;
/*
*<
Root of cached class list */
pwr_tUInt32
rqgen
;
/* Request generation number */
pwr_tUInt32
rqgen
;
/*
*<
Request generation number */
pwr_tVolumeId
vid
;
/* Vid of root volume. */
pwr_tNodeId
nid
;
/* Nid of this node. */
pwr_tObjid
vol_oid
;
/* Objid of root volume object. */
pwr_tObjid
nod_oid
;
/* Objid of node object of root volume object. */
pwr_tVolumeId
vid
;
/*
*<
Vid of root volume. */
pwr_tNodeId
nid
;
/*
*<
Nid of this node. */
pwr_tObjid
vol_oid
;
/*
*<
Objid of root volume object. */
pwr_tObjid
nod_oid
;
/*
*<
Objid of node object of root volume object. */
pool_sQlink
vol_lh
;
/* Root of volume list */
pool_sQlink
nod_lh
;
/* Root of node list */
pool_sQlink
ms_lh
;
/* Root of mount server list */
pool_sQlink
as_lh
;
/* Root of alias server list */
pool_sQlink
class_lh
;
/* Root of class list */
pool_sQlink
vol_lh
;
/*
*<
Root of volume list */
pool_sQlink
nod_lh
;
/*
*<
Root of node list */
pool_sQlink
ms_lh
;
/*
*<
Root of mount server list */
pool_sQlink
as_lh
;
/*
*<
Root of alias server list */
pool_sQlink
class_lh
;
/*
*<
Root of class list */
gdb_sInit
orig_init
;
/* Original initialization parameters */
gdb_sInit
eval_init
;
/* Evaluated initialization parameters */
gdb_sInit
orig_init
;
/*
*<
Original initialization parameters */
gdb_sInit
eval_init
;
/*
*<
Evaluated initialization parameters */
net_mLog
log
;
/* Mask that controls logging */
net_mLog
log
;
/*
*<
Mask that controls logging */
pool_sQlink
dl_lh
;
/* root of DL list */
pwr_tUInt32
dl_lc
;
/* length of DL list */
pwr_tDlid
dlid
;
/* Next direct link id. */
pool_sQlink
dl_lh
;
/*
*<
root of DL list */
pwr_tUInt32
dl_lc
;
/*
*<
length of DL list */
pwr_tDlid
dlid
;
/*
*<
Next direct link id. */
pwr_tRefId
sancid
;
/* Next san client id. */
pwr_tRefId
sancid
;
/*
*<
Next san client id. */
/* The following items are used by subscriptions */
pwr_tSubid
subcid
;
/* Next subscription client id */
pwr_tSubid
subcid
;
/*
*<
Next subscription client id */
pwr_tUInt32
tmocnt
;
/* # tmo checks run */
pwr_tUInt32
tmotime
;
/* tmo chk timer, 0.1s units */
pwr_tUInt32
tmolap
;
/* time for 1 lap through all remote clients. */
pool_sQlink
subt_lh
;
/* List clients watched for timeout */
pwr_tUInt32
subt_lc
;
/* length of timeout list */
pwr_tUInt32
tmocnt
;
/*
*<
# tmo checks run */
pwr_tUInt32
tmotime
;
/*
*<
tmo chk timer, 0.1s units */
pwr_tUInt32
tmolap
;
/*
*<
time for 1 lap through all remote clients. */
pool_sQlink
subt_lh
;
/*
*<
List clients watched for timeout */
pwr_tUInt32
subt_lc
;
/*
*<
length of timeout list */
pool_sQlink
subs_lh
;
/* List header of subscription servers. */
pwr_tUInt32
subs_lc
;
/* Number of subscription servers. */
pool_sQlink
subb_lh
;
/* List header of subscription buffers. */
pwr_tUInt32
subb_lc
;
/* length of buffer list */
pool_sQlink
subm_lh
;
/* Root of subscription messages list */
pwr_tUInt32
subm_lc
;
/* length of message list */
pool_sQlink
subs_lh
;
/*
*<
List header of subscription servers. */
pwr_tUInt32
subs_lc
;
/*
*<
Number of subscription servers. */
pool_sQlink
subb_lh
;
/*
*<
List header of subscription buffers. */
pwr_tUInt32
subb_lc
;
/*
*<
length of buffer list */
pool_sQlink
subm_lh
;
/*
*<
Root of subscription messages list */
pwr_tUInt32
subm_lc
;
/*
*<
length of message list */
pool_sQlink
tmonq_lh
;
/* Root of timer registration list */
pool_sQlink
tmonq_lh
;
/*
*<
Root of timer registration list */
pwr_tUInt32
al_idx
;
/* Alarm index, set every time alarm or block changes. */
pwr_tUInt32
al_idx
;
/*
*<
Alarm index, set every time alarm or block changes. */
pwr_tUInt32
cache_trim_int
;
/* Cache trim interval, ms */
pwr_tUInt32
sanc_add_int
;
/* Sanc check add interval, ms */
pwr_tUInt32
sanc_exp_int
;
/* Sanc check expired interval, ms */
pwr_tUInt32
sans_chk_int
;
/* Sans check interval, ms */
pwr_tUInt32
subc_chk_int
;
/* Subc check interval, ms */
pwr_tUInt32
cache_trim_int
;
/*
*<
Cache trim interval, ms */
pwr_tUInt32
sanc_add_int
;
/*
*<
Sanc check add interval, ms */
pwr_tUInt32
sanc_exp_int
;
/*
*<
Sanc check expired interval, ms */
pwr_tUInt32
sans_chk_int
;
/*
*<
Sans check interval, ms */
pwr_tUInt32
subc_chk_int
;
/*
*<
Subc check interval, ms */
}
gdb_sGlobal
;
...
...
@@ -972,68 +980,68 @@ typedef struct {
typedef
struct
{
#ifdef OS_ELN
MUTEX
thread_lock
;
/* ELN lock only */
MUTEX
thread_lock
;
/*
*<
ELN lock only */
#elif defined OS_LYNX || defined OS_LINUX
pthread_mutex_t
thread_lock
;
/* LYNX and LINUX lock only */
pthread_mutex_t
thread_lock
;
/*
*<
LYNX and LINUX lock only */
#endif
struct
{
sect_sHead
sect
;
/* Section header for global database. */
sect_sHead
lock
;
/* Section header for . */
pool_sHead
pool
;
/* Pool for database */
pool_sHead
rtdb
;
/* Pool for object bodies */
hash_sTable
subc_ht
;
/* sid -> client hash table. */
hash_sTable
subs_ht
;
/* sid -> server hash table. */
hash_sTable
sans_ht
;
/* sanid -> server hash table. */
hash_sTable
oid_ht
;
/* oid -> object hash table. */
hash_sTable
vid_ht
;
/* vid -> volume hash table. */
hash_sTable
vn_ht
;
/* volume name -> volume hash table. */
hash_sTable
cid_ht
;
/* cid -> class hash table. */
hash_sTable
tid_ht
;
/* tid -> type hash table. */
hash_sTable
nid_ht
;
/* nid -> node hash table. */
hash_sTable
family_ht
;
/* Family (poid + name) -> object hash table. */
hash_sTable
ms_ht
;
/* mount soid -> mount server hash table. */
hash_sTable
as_ht
;
/* mount soid -> alias server hash table. */
hash_sTable
ccvol_ht
;
/* nid + vid -> cached class volume */
hash_sTable
cclass_ht
;
/* cid + cached voltime -> cached class */
sect_sHead
sect
;
/*
*<
Section header for global database. */
sect_sHead
lock
;
/*
*<
Section header for . */
pool_sHead
pool
;
/*
*<
Pool for database */
pool_sHead
rtdb
;
/*
*<
Pool for object bodies */
hash_sTable
subc_ht
;
/*
*<
sid -> client hash table. */
hash_sTable
subs_ht
;
/*
*<
sid -> server hash table. */
hash_sTable
sans_ht
;
/*
*<
sanid -> server hash table. */
hash_sTable
oid_ht
;
/*
*<
oid -> object hash table. */
hash_sTable
vid_ht
;
/*
*<
vid -> volume hash table. */
hash_sTable
vn_ht
;
/*
*<
volume name -> volume hash table. */
hash_sTable
cid_ht
;
/*
*<
cid -> class hash table. */
hash_sTable
tid_ht
;
/*
*<
tid -> type hash table. */
hash_sTable
nid_ht
;
/*
*<
nid -> node hash table. */
hash_sTable
family_ht
;
/*
*<
Family (poid + name) -> object hash table. */
hash_sTable
ms_ht
;
/*
*<
mount soid -> mount server hash table. */
hash_sTable
as_ht
;
/*
*<
mount soid -> alias server hash table. */
hash_sTable
ccvol_ht
;
/*
*<
nid + vid -> cached class volume */
hash_sTable
cclass_ht
;
/*
*<
cid + cached voltime -> cached class */
}
h
;
gdb_sGlobal
*
db
;
/* Database Root, (in db_lock section) */
sect_sHead
*
sect
;
/* Section header for global database. */
sect_sHead
*
lock
;
/* Section header for . */
pool_sHead
*
pool
;
/* Internal pool for database */
pool_sHead
*
rtdb
;
/* Internal pool for object bodies */
hash_sTable
*
subc_ht
;
/* pwr_tSubid to subcli hash table */
hash_sTable
*
subs_ht
;
/* pwr_tSubid to subsrv hash table */
hash_sTable
*
sans_ht
;
/* sanid -> server hash table. */
hash_sTable
*
oid_ht
;
/* Object identity table. */
hash_sTable
*
vid_ht
;
/* Volume table. */
hash_sTable
*
vn_ht
;
/* volume name -> volume hash table. */
hash_sTable
*
cid_ht
;
/* Class table. */
hash_sTable
*
tid_ht
;
/* tid -> type hash table. */
hash_sTable
*
nid_ht
;
/* Node table. */
hash_sTable
*
family_ht
;
/* Family table. */
hash_sTable
*
ms_ht
;
/* mount soid -> mount server hash table. */
hash_sTable
*
as_ht
;
/* mount soid -> alias server hash table. */
hash_sTable
*
ccvol_ht
;
/* nid + vid -> cached class volume */
hash_sTable
*
cclass_ht
;
/* cid + cached voltime -> cached class */
gdb_sVolume
*
my_volume
;
/* The local root volume. */
gdb_sVolume
*
no_volume
;
/* The unknown volume with vid = 0.0.0.0. */
gdb_sNode
*
my_node
;
/* Pointer to NodeHead of local node. */
gdb_sNode
*
no_node
;
/* Pointer to NodeHead of the unknown node. */
pwr_tUInt32
lock_count
;
/* # of times this job locked the DB */
qcom_sQid
my_qid
;
/* The QueId of this job */
qcom_sAid
my_aid
;
/* The QueId of this job */
pid_t
my_pid
;
/* The process id of this job */
pwr_tBoolean
is_tmon
;
/* Set if tmon */
gdb_sGlobal
*
db
;
/*
*<
Database Root, (in db_lock section) */
sect_sHead
*
sect
;
/*
*<
Section header for global database. */
sect_sHead
*
lock
;
/*
*<
Section header for . */
pool_sHead
*
pool
;
/*
*<
Internal pool for database */
pool_sHead
*
rtdb
;
/*
*<
Internal pool for object bodies */
hash_sTable
*
subc_ht
;
/*
*<
pwr_tSubid to subcli hash table */
hash_sTable
*
subs_ht
;
/*
*<
pwr_tSubid to subsrv hash table */
hash_sTable
*
sans_ht
;
/*
*<
sanid -> server hash table. */
hash_sTable
*
oid_ht
;
/*
*<
Object identity table. */
hash_sTable
*
vid_ht
;
/*
*<
Volume table. */
hash_sTable
*
vn_ht
;
/*
*<
volume name -> volume hash table. */
hash_sTable
*
cid_ht
;
/*
*<
Class table. */
hash_sTable
*
tid_ht
;
/*
*<
tid -> type hash table. */
hash_sTable
*
nid_ht
;
/*
*<
Node table. */
hash_sTable
*
family_ht
;
/*
*<
Family table. */
hash_sTable
*
ms_ht
;
/*
*<
mount soid -> mount server hash table. */
hash_sTable
*
as_ht
;
/*
*<
mount soid -> alias server hash table. */
hash_sTable
*
ccvol_ht
;
/*
*<
nid + vid -> cached class volume */
hash_sTable
*
cclass_ht
;
/*
*<
cid + cached voltime -> cached class */
gdb_sVolume
*
my_volume
;
/*
*<
The local root volume. */
gdb_sVolume
*
no_volume
;
/*
*<
The unknown volume with vid = 0.0.0.0. */
gdb_sNode
*
my_node
;
/*
*<
Pointer to NodeHead of local node. */
gdb_sNode
*
no_node
;
/*
*<
Pointer to NodeHead of the unknown node. */
pwr_tUInt32
lock_count
;
/*
*<
# of times this job locked the DB */
qcom_sQid
my_qid
;
/*
*<
The QueId of this job */
qcom_sAid
my_aid
;
/*
*<
The QueId of this job */
pid_t
my_pid
;
/*
*<
The process id of this job */
pwr_tBoolean
is_tmon
;
/*
*<
Set if tmon */
}
gdb_sLocal
;
/* The root of all data, the only `global' variable... */
#if defined (OS_ELN)
extern
noshare
gdb_sLocal
*
gdbroot
;
/* root of all data in database */
extern
noshare
gdb_sLocal
*
gdbroot
;
/*
*<
root of all data in database */
#else
extern
gdb_sLocal
*
gdbroot
;
/* root of all data in database */
extern
gdb_sLocal
*
gdbroot
;
/*
*<
root of all data in database */
#endif
typedef
enum
{
...
...
@@ -1045,7 +1053,7 @@ typedef enum {
typedef
struct
{
pool_sQlink
ll
;
gdb_eTmon
type
;
pwr_tUInt32
dt
;
/* Update time in milli seconds */
pwr_tUInt32
dt
;
/*
*<
Update time in milli seconds */
}
gdb_sTmonQlink
;
/* Function prototypes. */
...
...
src/lib/rt/src/rt_net.c
View file @
8bc5d1b2
...
...
@@ -210,20 +210,35 @@ ConvertPut (
pwr_tStatus
lsts
;
XDR
xdrs
;
qdb_sNode
*
np
;
tFuncXdr
fXdr
;
if
(
put
->
type
.
b
!=
net_cMsgClass
)
pwr_Return
(
FALSE
,
sts
,
NET__XDRFAILED
);
np
=
hash_Search
(
&
lsts
,
&
qdb
->
nid_ht
,
&
qid
->
nid
);
if
(
np
==
NULL
)
pwr_Return
(
FALSE
,
sts
,
lsts
);
/* This is a simple way to fix the net_sGvolume difference between
* Neth version 7 and later. If this is needed for more messages
* then a generic solution must be implemented.
*/
if
(
put
->
type
.
s
==
net_eMsg_volumes7
)
{
put
->
type
.
s
=
net_eMsg_volumes
;
fXdr
=
xdr_net_sVolumes7
;
}
else
{
if
((
int
)
put
->
type
.
s
<=
(
int
)
net_eMsg__
||
(
int
)
put
->
type
.
s
>=
(
int
)
net_eMsg_
)
pwr_Return
(
FALSE
,
sts
,
NET__NOSUCHQCOMSUBT
);
fXdr
=
func_xdr
[(
int
)
put
->
type
.
s
];
}
if
(
np
==
qdb
->
my_node
||
np
->
bo
==
qdb
->
my_node
->
bo
)
{
if
(
put
->
data
!=
data
)
memcpy
(
put
->
data
,
data
,
put
->
size
);
pwr_Return
(
TRUE
,
sts
,
NET__SUCCESS
);
}
xdrmem_create
(
&
xdrs
,
(
char
*
)
put
->
data
,
put
->
size
,
XDR_ENCODE
);
if
((
int
)
put
->
type
.
s
<=
(
int
)
net_eMsg__
||
(
int
)
put
->
type
.
s
>=
(
int
)
net_eMsg_
)
pwr_Return
(
FALSE
,
sts
,
NET__NOSUCHQCOMSUBT
);
if
(
!
func_xdr
[(
int
)
put
->
type
.
s
](
&
xdrs
,
(
char
*
)
data
))
if
(
!
(
fXdr
)(
&
xdrs
,
(
char
*
)
data
))
pwr_Return
(
FALSE
,
sts
,
NET__XDRFAILED
);
pwr_Return
(
TRUE
,
sts
,
NET__SUCCESS
);
...
...
@@ -239,20 +254,44 @@ ConvertGet (
pwr_tStatus
lsts
;
XDR
xdrs
;
qdb_sNode
*
np
;
tFuncXdr
fXdr
;
gdb_sNode
*
gnp
;
pwr_tUInt32
netver
;
if
(
get
->
type
.
b
!=
net_cMsgClass
)
pwr_Return
(
FALSE
,
sts
,
NET__XDRFAILED
);
np
=
hash_Search
(
&
lsts
,
&
qdb
->
nid_ht
,
&
get
->
sender
.
nid
);
if
(
np
==
NULL
)
pwr_Return
(
FALSE
,
sts
,
lsts
);
if
((
int
)
get
->
type
.
s
<=
(
int
)
net_eMsg__
||
(
int
)
get
->
type
.
s
>=
(
int
)
net_eMsg_
)
pwr_Return
(
FALSE
,
sts
,
NET__NOSUCHQCOMSUBT
);
/* This is a simple way to fix the net_sGvolume difference between
* Neth version 7 and later. If this is needed for more messages
* then a generic solution must be implemented.
*/
fXdr
=
func_xdr
[(
int
)
get
->
type
.
s
];
if
(
get
->
type
.
s
==
net_eMsg_volumes
)
{
gdb_ScopeLock
{
gnp
=
hash_Search
(
&
lsts
,
gdbroot
->
nid_ht
,
&
np
->
nid
);
netver
=
gnp
->
netver
;
}
gdb_ScopeUnlock
;
if
(
netver
==
7
)
{
get
->
type
.
s
=
net_eMsg_volumes7
;
fXdr
=
xdr_net_sVolumes7
;
}
}
if
(
np
==
qdb
->
my_node
||
np
->
bo
==
qdb
->
my_node
->
bo
)
{
if
(
get
->
data
!=
data
)
memcpy
(
data
,
get
->
data
,
get
->
size
);
pwr_Return
(
TRUE
,
sts
,
NET__SUCCESS
);
}
xdrmem_create
(
&
xdrs
,
(
char
*
)
data
,
get
->
size
,
XDR_DECODE
);
if
((
int
)
get
->
type
.
s
<=
(
int
)
net_eMsg__
||
(
int
)
get
->
type
.
s
>=
(
int
)
net_eMsg_
)
pwr_Return
(
FALSE
,
sts
,
NET__NOSUCHQCOMSUBT
);
if
(
!
func_xdr
[(
int
)
get
->
type
.
s
](
&
xdrs
,
(
char
*
)
get
->
data
))
xdrmem_create
(
&
xdrs
,
(
char
*
)
data
,
get
->
size
,
XDR_DECODE
);
if
(
!
(
fXdr
)(
&
xdrs
,
(
char
*
)
get
->
data
))
pwr_Return
(
FALSE
,
sts
,
NET__XDRFAILED
);
pwr_Return
(
TRUE
,
sts
,
NET__SUCCESS
);
...
...
src/lib/rt/src/rt_net.x
View file @
8bc5d1b2
...
...
@@ -26,10 +26,11 @@
%#include "co_cdh.h"
%#endif
%
%/* Protocol version. Increase whenever an
% incompatible change is done to the protocol */
%/** Protocol version. Increase whenever an
% incompatible change is done to the protocol.
% Update supported features in function id() in file rt_neth.c */
%
%#define net_cVersion
7
%#define net_cVersion
8
%
%#define net_cSendRcvTmo 20000 /* Timeout (ms) used in pams_rcv_msgw calls */
%#define net_cProcHandler 110
...
...
@@ -86,7 +87,11 @@ enum net_eMsg {
net_eMsg_getGclass, /* The whole class */
net_eMsg_getGclassR,
net_eMsg_ /* Not a valid message */
net_eMsg_, /* Not a valid message */
net_eMsg_volumes7, /* Version 7. Internal only */
net_eMsg_end
};
...
...
@@ -837,6 +842,8 @@ struct net_sRenameObject {
cdh_sFamily f; /* Used for Rename */
};
/* net_sGvolume for Neth Ver > 7 */
struct net_sGvolume {
pwr_tVolumeId vid;
pwr_tObjid oid; /* Oid of volume object. */
...
...
@@ -844,10 +851,25 @@ struct net_sGvolume {
pwr_tClassId cid; /* Class of volume. */
pwr_tNodeId nid; /* Node id of owner of volume,
pwr_cNNodeId if shared or class volume. */
pwr_tTime time;
pwr_tTime time; /* Currently only used for Class volumes.
* Added in Neth version 8 */
};
/* net_sGvolume for Neth Ver == 7 */
struct net_sGvolume7 {
pwr_tVolumeId vid;
pwr_tObjid oid; /* Oid of volume object. */
cdh_sObjName name;
pwr_tClassId cid; /* Class of volume. */
pwr_tNodeId nid; /* Node id of owner of volume,
pwr_cNNodeId if shared or class volume. */
};
#ifdef RPC_HDR
%
%#define net_cVolumeMaxCount (net_cSizeLarge/sizeof(net_sGvolume))
%
%typedef struct {
...
...
@@ -859,6 +881,15 @@ struct net_sGvolume {
%
%bool_t xdr_net_sVolumes();
%
%typedef struct {
% net_sMessage hdr pwr_dPacked; /* Header */
% pwr_tUInt32 ctx pwr_dPacked;
% pwr_tUInt32 count pwr_dPacked; /* # of headers */
% net_sGvolume7 g[1] pwr_dPacked; /* Array of volume headers */
%} net_sVolumes7;
%
%bool_t xdr_net_sVolumes7();
%
#elif defined RPC_XDR
%
%bool_t
...
...
@@ -887,6 +918,34 @@ struct net_sGvolume {
% }
% return (TRUE);
%}
%
%
%bool_t
%xdr_net_sVolumes7(xdrs, objp)
% XDR *xdrs;
% net_sVolumes *objp;
%{
% int count;
%
% if (xdrs->x_op == XDR_DECODE) {
% count = (int) ntohl(objp->count);
% } else {
% count = objp->count;
% }
% if (!xdr_net_sMessage(xdrs, &objp->hdr)) {
% return (FALSE);
% }
% if (!xdr_pwr_tUInt32(xdrs, &objp->ctx)) {
% return (FALSE);
% }
% if (!xdr_pwr_tUInt32(xdrs, &objp->count)) {
% return (FALSE);
% }
% if (!xdr_vector(xdrs, (char *)objp->g, count, sizeof(net_sGvolume7), (xdrproc_t)xdr_net_sGvolume7)) {
% return (FALSE);
% }
% return (TRUE);
%}
#endif
struct net_sMount {
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment